Alex A. Naanou 7ed8ecea54 cleanup + tweaking...
Signed-off-by: Alex A. Naanou <alex.nanou@gmail.com>
2020-10-07 07:44:45 +03:00
2020-10-06 01:32:33 +03:00
2020-10-04 04:10:08 +03:00
2020-10-07 07:44:45 +03:00
2020-10-07 03:03:41 +03:00
2020-10-04 04:10:08 +03:00
2020-10-06 01:32:33 +03:00
2020-10-06 03:09:44 +03:00
2020-10-06 00:58:46 +03:00
2020-10-07 07:44:45 +03:00
2020-10-07 07:33:58 +03:00
2020-10-06 01:32:33 +03:00
2020-10-06 01:32:33 +03:00
2020-10-06 01:32:33 +03:00
2020-10-07 07:33:58 +03:00

types.js

A library of JavaScript type extensions, types and type utilities.

Installation

$ npm install -s 'ig-types'

Basic usage

To extend everything:

require('ig-types')

To have access to library types and utilities:

var types = require('ig-types')

types.js is organized so as to be able to import/extend only specific sub-modules mostly independently so...

In case there is a need to only extend a specific constructor:

// require `ig-types/<constructor-name>`...
require('ig-types/Array')

And to import specific library modules only:

var containers = require('ig-types/containers')

Note that though mostly independent now some sub-modules may import others in the future.

Built-in type extensions

Object

Object.deepKeys(..)

Object.match(..)

Object.matchPartial(..)

Object.flatCopy(..)

<object>.run(..)

<object>.run(<func>)
    -> <object>
    -> <other>

Run a function in the context of <object> returning either <object> itself (if returning undefined) or the result.

Note that this is accessible from all JavaScript non-primitive objects, i.e. everything that inherits from Object.

Example:

var L = [1, 2, 3]
    .map(function(e){
        return e * 2 })
    // see if the first element is 1 and prepend 1 if it is not...
    .run(function(){
        if(this[0] != 1){
            this.unshift(1) } })

console.log(L) // -> [1, 2, 6, 8]

.run(..) is also available standalone via:

$ npm install -s object-run

For more info see:
https://github.com/flynx/object-run.js

Array

<array>.first(..) / <array>.last(..)

Get or set the first/last items of <array>.

<array>.compact()

Generate a compact <array> from a sparse <array>, i.e. removing all the empty slots.

<array>.len

Number of non-empty slots/elements in <array>.

<array>.toKeys(..)

<array>.toMap(..)

<array>.unique(..) / <array>.tailUnique(..)

Generate an array with all duplicate elements removed.

<array>.cmp(..)

<array>.setCmp(..)

<array>.sortAs(..)

<array>.inplaceSortAs(..)

<array>.mapChunks(..)

<array>.filterChunks(..)

<array>.reduceChunks(..)

Array (polyfill)

<array>.flat()

<array>.includes()

Set

<set>.unite(..)

<set>.intersect(..)

<set>.subtract(..)

Date

Date.timeStamp(..)

Date.fromTimeStamp(..)

Date.str2ms(..)

<date>.toShortDate(..)

<date>.getTimeStamp(..)

<date>.setTimeStamp(..)

String

<string>.capitalize()

RegExp

RegExp.quoteRegExp(..)

Containers

var containers = require('ig-types').containers

or, to only import containers:

var containers = require('ig-types/containers')

containers.UniqueKeyMap() (Map)

UniqueKeyMap implements a key-value container (i.e. Map) that supports and maintains duplicate keys by appending an index to them.
The original keys are stored internally thus the renaming mechanics are stable.

UniqueKeyMap extends the Map constructor, so all the usual Map methods and properties apply here.

To construct an instance:

var x = new UniqueKeyMap()

or:

// new is optional...
var y = UniqueKeyMap()

UniqueKeyMap supports the same initialization signature as Map but treats repeating keys differently.

var z = UniqueKeyMap([['a', 1], ['a', 2], ['b', 1]])

The second "a" item will automatically get re-keyed as "a (1)":

console.log([...z.keys()]) // -> ['a', 'a (1)', 'b']

Note that .set(..) will never rewrite an element:

z.set('a', 3)

console.log([...z.keys()]) // -> ['a', 'a (1)', 'b', 'a (2)']

z.get('a') // -> 1
z.get('a (1)') // -> 2

To get the generated key:

var k = z.set('a', 4, true)

console.log(k) // -> 'a (3)'

To explicitly rewrite an item:

z.reset('a (1)', 4)

z.get('a (1)') // -> 4

And we can rename items, i.e. change their key:

z.rename('a (2)', 'c')

console.log([...z.keys()]) // -> ['a', 'a (1)', 'b', 'a (3)', 'c']

For more info on Map see:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map

<unique-key-map>.reset(..)

<unique-key-map>.uniqueKey(..)

<unique-key-map>.rename(..)

<unique-key-map>.keysOf(..)

<unique-key-map>.__key_pattern__

License

BSD 3-Clause License

Copyright (c) 2020, Alex A. Naanou,
All rights reserved.

Description
Generic JavaScript types and type extensions.... (EXPERIMENTAL)
Readme BSD-3-Clause 522 KiB
Languages
JavaScript 100%