Skip to content

Latest commit

 

History

History
842 lines (528 loc) · 14 KB

object.md

File metadata and controls

842 lines (528 loc) · 14 KB

jaaJSU - v2.0.0 / $object

Namespace: $object

This NAMESPACE provides features for Objects.

Version

2.0.0

Table of contents

Interfaces

Type Aliases

Functions

Public

each

each<A, B, C>(iterable, callback, scope): C

Procedure for iterating throught Object iterable.

Type parameters

Name Type
A extends unknown
B B
C C

Parameters

Name Type Description
iterable A[] An array-like object for iterating.
callback IterableCallback<A, B, C> -
scope B -

Returns

C


eachDynamic

eachDynamic<A, B, C>(iterable, callback, scope): C

Procedure for iterating throught Object iterable like each, but use for(... in ...)...if(Object.prototype.hasOwnProperty....

Type parameters

Name Type
A extends unknown
B B
C C

Parameters

Name Type Description
iterable A[] An array-like object for iterating.
callback IterableCallback<A, B, C> -
scope B -

Returns

C


fromArray

fromArray<T>(arr): Record<keyof T, T>

Function for converting Array arr to Object.

Type parameters

Name Type
T extends any[]

Parameters

Name Type
arr T

Returns

Record<keyof T, T>

fromArray<OUT, A, B>(arr, fun, default_value): OUT

Function for converting Array arr to Object. Uses fun for converting. Reduce-like syntax: (input_array, reduce_function, reduce_initial)

Type parameters

Name Type
OUT extends unknown
A extends unknown
B extends unknown

Parameters

Name Type
arr [A, B][]
fun (acc: OUT, curr: B, i: A) => OUT
default_value OUT

Returns

OUT


hasProp

hasProp<O>(obj, prop): boolean

Wrapper around Object.prototype.hasOwnProperty. It is more trustable, because you can sets var obj= { hasOwnProperty: "gotcha" }

Type parameters

Name Type
O extends Object

Parameters

Name Type
obj O
prop keyof O

Returns

boolean

hasProp(obj, prop): boolean

Parameters

Name Type
obj Object
prop PropertyKey

Returns

boolean


immutable_keys

immutable_keys(obj_input?): ObjectImutable

Function for creating non-rewritable object

Parameters

Name Type
obj_input? Object

Returns

ObjectImutable


method

method<O, M, P>(name, ...args): (input: O) => O[M] extends (...a: P) => infer OUT ? OUT : never

Wrapper around object[methodName](...args).

$object.method("trim")(" Hi ");//= `Hi`
$object.method("split", " ")("Hello world");//= `[ "Hello", "world" ]`

Type parameters

Name Type
O extends String
M extends string | number | symbol
P extends any[]

Parameters

Name Type
name M
...args P

Returns

fn

▸ (input): O[M] extends (...a: P) => infer OUT ? OUT : never

Parameters
Name Type
input O
Returns

O[M] extends (...a: P) => infer OUT ? OUT : never

method<O, M, P>(name, ...args): (input: O) => O[M] extends (...a: P) => infer OUT ? OUT : never

Type parameters

Name Type
O extends any[]
M extends string | number | symbol
P extends any[]

Parameters

Name Type
name M
...args P

Returns

fn

▸ (input): O[M] extends (...a: P) => infer OUT ? OUT : never

Parameters
Name Type
input O
Returns

O[M] extends (...a: P) => infer OUT ? OUT : never

method<O, M, P>(name, ...args): (input: O) => O[M] extends (...a: P) => infer OUT ? OUT : never

Type parameters

Name Type
O extends Number
M extends string | number | symbol
P extends any[]

Parameters

Name Type
name M
...args P

Returns

fn

▸ (input): O[M] extends (...a: P) => infer OUT ? OUT : never

Parameters
Name Type
input O
Returns

O[M] extends (...a: P) => infer OUT ? OUT : never

method<O, M, P>(name, ...args): (input: O) => O[M] extends (...a: P) => infer OUT ? OUT : never

Type parameters

Name Type
O extends Object
M extends string | number | symbol
P extends any[]

Parameters

Name Type
name M
...args P

Returns

fn

▸ (input): O[M] extends (...a: P) => infer OUT ? OUT : never

Parameters
Name Type
input O
Returns

O[M] extends (...a: P) => infer OUT ? OUT : never


methodFrom

methodFrom<O, M, P>(object): (methodName: M) => O[M] extends (...a: P) => infer OUT ? (...a: P) => OUT : never

$object.methodFrom(" Hi ")("trim")()====$object.method("trim")(" Hi ");
$object.methodFrom("Hello world")("split")(" ")===$object.method("split", " ")("Hello world");

Type parameters

Name Type
O O
M extends string | number | symbol
P extends any[]

Parameters

Name Type
object O

Returns

fn

▸ (methodName): O[M] extends (...a: P) => infer OUT ? (...a: P) => OUT : never

Parameters
Name Type
methodName M
Returns

O[M] extends (...a: P) => infer OUT ? (...a: P) => OUT : never


pluck

pluck<IN, K>(name): (obj: IN) => IN[K]

Wrapper around object[key], usefull for binding.

$object.pluck("length")("Test");//= `4`

Type parameters

Name Type
IN extends String
K extends string | number | symbol

Parameters

Name Type
name K

Returns

fn

▸ (obj): IN[K]

Parameters
Name Type
obj IN
Returns

IN[K]

pluck<IN, K>(name): (obj: IN) => IN[K]

Type parameters

Name Type
IN extends any[]
K extends string | number | symbol

Parameters

Name Type
name K

Returns

fn

▸ (obj): IN[K]

Parameters
Name Type
obj IN
Returns

IN[K]

pluck<IN, K>(name): (obj: IN) => IN[K]

Type parameters

Name Type
IN extends Number
K extends string | number | symbol

Parameters

Name Type
name K

Returns

fn

▸ (obj): IN[K]

Parameters
Name Type
obj IN
Returns

IN[K]

pluck<IN, K>(name): (obj: IN) => IN[K]

Type parameters

Name Type
IN extends Object
K extends string | number | symbol

Parameters

Name Type
name K

Returns

fn

▸ (obj): IN[K]

Parameters
Name Type
obj IN
Returns

IN[K]


pluckFrom

pluckFrom<O, K>(obj): (key: K) => O[K]

$object.pluckFrom("Test")("length")===$object.pluck("length")("Test");

Type parameters

Name Type
O extends Object
K extends string | number | symbol

Parameters

Name Type
obj O

Returns

fn

▸ (key): O[K]

Parameters
Name Type
key K
Returns

O[K]


setter

setter<O, K>(key): (obj: O) => (value: O[K]) => O[K]

Wrapper around object[setterName]= arg

$object.setter("test_key", "test_value")({ test_key: "test_init_value", other_key: "other_value" });//= `{ test_key: "test_value", other_key: "other_value" }`

Type parameters

Name Type
O extends Object
K extends string | number | symbol

Parameters

Name Type
key K

Returns

fn

▸ (obj): (value: O[K]) => O[K]

Parameters
Name Type
obj O
Returns

fn

▸ (value): O[K]

Parameters
Name Type
value O[K]
Returns

O[K]

setter<O, K>(key): (obj: O) => (value: O[K]) => O[K]

Type parameters

Name Type
O extends any[]
K extends string | number | symbol

Parameters

Name Type
key K

Returns

fn

▸ (obj): (value: O[K]) => O[K]

Parameters
Name Type
obj O
Returns

fn

▸ (value): O[K]

Parameters
Name Type
value O[K]
Returns

O[K]

setter<O, K>(key): (obj: O) => (value: O[K]) => O[K]

Type parameters

Name Type
O extends Number
K extends string | number | symbol

Parameters

Name Type
key K

Returns

fn

▸ (obj): (value: O[K]) => O[K]

Parameters
Name Type
obj O
Returns

fn

▸ (value): O[K]

Parameters
Name Type
value O[K]
Returns

O[K]

setter<O, K>(key): (obj: O) => (value: O[K]) => O[K]

Type parameters

Name Type
O extends String
K extends string | number | symbol

Parameters

Name Type
key K

Returns

fn

▸ (obj): (value: O[K]) => O[K]

Parameters
Name Type
obj O
Returns

fn

▸ (value): O[K]

Parameters
Name Type
value O[K]
Returns

O[K]


setterFrom

setterFrom<O>(obj): <K>(key: K) => (value: O[K]) => O[K]

$object.setterFrom({ test_key: "test_init_value", other_key: "other_value" })("test_key")("test_value")===$object.setter("test_key", "test_value")({ test_key: "test_init_value", other_key: "other_value" });

Type parameters

Name Type
O extends Object

Parameters

Name Type
obj O

Returns

fn

▸ <K>(key): (value: O[K]) => O[K]

Type parameters
Name Type
K extends keyof O
Parameters
Name Type
key K
Returns

fn

▸ (value): O[K]

Parameters
Name Type
value O[K]
Returns

O[K]

Private

ParametersOfMethod

Ƭ ParametersOfMethod<A, B, P>: B extends keyof A ? A[B] extends (...i: P) => any ? P : never : never

Type parameters

Name Type
A extends Object
B B
P extends any[] = any[]

assignDescriptor

assignDescriptor<T, P>(obj, property, descriptor): T

Similar to Object.defineProperty, except that non-mentioned descriptors are keeped;

Example

let lea= {
	name: "Lea Verou",
	get id(){ return this.name.toLowerCase().replace(/\W+/g, "-"); }
};
$object.assignDescriptor(lea, "id", prop=> ({
	set(value){ return Reflect.defineProperty(this, prop, { value }); },
	enumerable: true
}));
console.log(lea);//= { name: "Lea Verou", id: "lea-verou" } … see https://lea.verou.me/2020/12/writable-getters/

Type parameters

Name Type
T extends object
P extends PropertyKey

Parameters

Name Type
obj T
property P
descriptor PropertyDescriptor | (property: P) => PropertyDescriptor & ThisType<any>

Returns

T