@oscarpalmer/atoms 0.203.0 → 0.204.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/array/filter.mjs +0 -1
- package/dist/array/find.mjs +0 -1
- package/dist/array/first.mjs +0 -1
- package/dist/array/group-by.mjs +0 -1
- package/dist/array/last.mjs +0 -1
- package/dist/array/move.mjs +0 -4
- package/dist/array/select.mjs +0 -1
- package/dist/array/sort.mjs +6 -15
- package/dist/array/swap.mjs +0 -1
- package/dist/array/to-map.mjs +0 -1
- package/dist/array/to-record.mjs +0 -1
- package/dist/beacon.mjs +36 -36
- package/dist/color/instance.mjs +42 -84
- package/dist/color/misc/alpha.d.mts +3 -1
- package/dist/color/misc/alpha.mjs +8 -2
- package/dist/color/misc/is.mjs +5 -4
- package/dist/color/misc/state.d.mts +29 -4
- package/dist/color/misc/state.mjs +18 -40
- package/dist/color/space/hex.d.mts +5 -1
- package/dist/color/space/hex.mjs +21 -2
- package/dist/color/space/hsl.d.mts +6 -2
- package/dist/color/space/hsl.mjs +25 -4
- package/dist/color/space/hwb.d.mts +6 -2
- package/dist/color/space/hwb.mjs +24 -3
- package/dist/color/space/rgb.d.mts +6 -2
- package/dist/color/space/rgb.mjs +41 -20
- package/dist/function/limit.mjs +0 -2
- package/dist/function/once.mjs +30 -36
- package/dist/function/retry.mjs +0 -1
- package/dist/index.d.mts +5 -5
- package/dist/index.mjs +488 -547
- package/dist/internal/{abort.d.mts → aborter.d.mts} +1 -1
- package/dist/internal/{abort.mjs → aborter.mjs} +1 -1
- package/dist/internal/array/get.mjs +3 -2
- package/dist/internal/array/index-of.mjs +0 -1
- package/dist/internal/function/assert.d.mts +1 -1
- package/dist/internal/function/assert.mjs +0 -7
- package/dist/internal/function/limit.mjs +10 -14
- package/dist/internal/function/memoize.mjs +22 -20
- package/dist/internal/function/work.mjs +0 -2
- package/dist/internal/herald.mjs +14 -15
- package/dist/internal/result/misc.mjs +2 -5
- package/dist/internal/subscription.mjs +24 -22
- package/dist/internal/value/compare.d.mts +1 -1
- package/dist/internal/value/compare.mjs +0 -5
- package/dist/internal/value/equal.d.mts +1 -1
- package/dist/internal/value/equal.mjs +4 -12
- package/dist/internal/value/handlers.d.mts +1 -1
- package/dist/internal/value/handlers.mjs +5 -7
- package/dist/internal/value/has.mjs +0 -1
- package/dist/internal/value/misc.d.mts +1 -1
- package/dist/internal/value/misc.mjs +4 -3
- package/dist/internal/value/partial.mjs +2 -1
- package/dist/internal/value/set.mjs +2 -1
- package/dist/logger.mjs +46 -45
- package/dist/promise/delay.mjs +1 -1
- package/dist/promise/helpers.mjs +4 -3
- package/dist/promise/index.mjs +1 -2
- package/dist/promise/misc.d.mts +1 -1
- package/dist/promise/models.d.mts +1 -1
- package/dist/promise/timed.mjs +1 -1
- package/dist/queue.mjs +86 -80
- package/dist/result/index.mjs +0 -1
- package/dist/result/match.mjs +0 -1
- package/dist/result/work/flow.mjs +0 -1
- package/dist/result/work/pipe.mjs +0 -1
- package/dist/string/fuzzy.mjs +18 -21
- package/dist/string/normalize.mjs +2 -3
- package/dist/string/template.mjs +2 -3
- package/dist/value/clone.d.mts +1 -1
- package/dist/value/clone.mjs +4 -12
- package/dist/value/freeze.mjs +0 -4
- package/dist/value/merge.mjs +5 -7
- package/dist/value/transform.mjs +1 -2
- package/package.json +2 -2
|
@@ -6,13 +6,14 @@ function getArray(value, indiced) {
|
|
|
6
6
|
if (value instanceof Set) return [...value.values()];
|
|
7
7
|
if (isNonPlainObject(value)) return [value];
|
|
8
8
|
if (indiced !== true) return Object.entries(value);
|
|
9
|
-
const
|
|
9
|
+
const obj = value;
|
|
10
|
+
const keys = Object.keys(obj);
|
|
10
11
|
const { length } = keys;
|
|
11
12
|
const array = [];
|
|
12
13
|
for (let index = 0; index < length; index += 1) {
|
|
13
14
|
const key = keys[index];
|
|
14
15
|
const asNumber = Number.parseInt(key, 10);
|
|
15
|
-
if (!Number.isNaN(asNumber)) array[asNumber] =
|
|
16
|
+
if (!Number.isNaN(asNumber)) array[asNumber] = obj[key];
|
|
16
17
|
}
|
|
17
18
|
return array;
|
|
18
19
|
}
|
|
@@ -78,5 +78,5 @@ export declare function assertIs<Value>(condition: (value: unknown) => value is
|
|
|
78
78
|
* @param error Error constructor _(defaults to `Error`)_
|
|
79
79
|
* @returns _Asserter_
|
|
80
80
|
*/
|
|
81
|
-
export declare function assertProperty<Value extends PlainObject, Path extends NestedKeys<Value
|
|
81
|
+
export declare function assertProperty<Value extends PlainObject, Path extends NestedKeys<Value>>(path: Path, condition: (value: NestedValue<Value, Path>) => boolean, message: string, error?: ErrorConstructor): Asserter<NestedPick<Value, Path>>;
|
|
82
82
|
//#endregion
|
|
@@ -92,12 +92,5 @@ assert.defined = assertDefined;
|
|
|
92
92
|
assert.instanceOf = assertInstanceOf;
|
|
93
93
|
assert.is = assertIs;
|
|
94
94
|
assert.property = assertProperty;
|
|
95
|
-
Object.defineProperties(assert, {
|
|
96
|
-
condition: { value: assertCondition },
|
|
97
|
-
defined: { value: assertDefined },
|
|
98
|
-
instanceOf: { value: assertInstanceOf },
|
|
99
|
-
is: { value: assertIs },
|
|
100
|
-
property: { value: assertProperty }
|
|
101
|
-
});
|
|
102
95
|
//#endregion
|
|
103
96
|
export { assert, assertCondition, assertDefined, assertInstanceOf, assertIs, assertProperty };
|
|
@@ -4,33 +4,29 @@ const LIMITER_NAME_ASYNC = "asyncLimiter";
|
|
|
4
4
|
const LIMITER_NAME_SYNC = "limiter";
|
|
5
5
|
const LIMITER_PROPERTY = "$limiter";
|
|
6
6
|
function AsyncLimiter(type, callback, time) {
|
|
7
|
-
|
|
7
|
+
this[LIMITER_SYMBOL] = {
|
|
8
8
|
callback,
|
|
9
9
|
type,
|
|
10
10
|
interval: getNumberOrDefault(time, 0),
|
|
11
11
|
parameters: [],
|
|
12
12
|
throttle: type === LIMITER_THROTTLE
|
|
13
|
-
}
|
|
13
|
+
};
|
|
14
14
|
}
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
run: { value: runAsyncLimiter }
|
|
19
|
-
});
|
|
15
|
+
AsyncLimiter.prototype[LIMITER_PROPERTY] = LIMITER_NAME_ASYNC;
|
|
16
|
+
AsyncLimiter.prototype.cancel = cancelAsyncLimiter;
|
|
17
|
+
AsyncLimiter.prototype.run = runAsyncLimiter;
|
|
20
18
|
function Limiter(type, callback, time) {
|
|
21
|
-
|
|
19
|
+
this[LIMITER_SYMBOL] = {
|
|
22
20
|
callback,
|
|
23
21
|
type,
|
|
24
22
|
interval: getNumberOrDefault(time, 0),
|
|
25
23
|
parameters: [],
|
|
26
24
|
throttle: type === LIMITER_THROTTLE
|
|
27
|
-
}
|
|
25
|
+
};
|
|
28
26
|
}
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
run: { value: runLimiter }
|
|
33
|
-
});
|
|
27
|
+
Limiter.prototype[LIMITER_PROPERTY] = LIMITER_NAME_SYNC;
|
|
28
|
+
Limiter.prototype.cancel = cancelLimiter;
|
|
29
|
+
Limiter.prototype.run = runLimiter;
|
|
34
30
|
function cancelAsyncLimiter() {
|
|
35
31
|
const state = this[LIMITER_SYMBOL];
|
|
36
32
|
if (state.timer != null) clearTimer(state.timer);
|
|
@@ -3,32 +3,28 @@ import { getString, join } from "../string/misc.mjs";
|
|
|
3
3
|
import { getNumberOrDefault } from "../defaults.mjs";
|
|
4
4
|
import { SizedMap } from "../sized/map.mjs";
|
|
5
5
|
//#region src/internal/function/memoize.ts
|
|
6
|
-
const MEMOIZED_PROPERTY = "$memoized";
|
|
7
6
|
function Memoized(callback, options) {
|
|
8
|
-
|
|
7
|
+
this[MEMOIZED_SYMBOL] = {
|
|
9
8
|
options,
|
|
10
9
|
cache: new SizedMap(options.cacheSize),
|
|
11
10
|
getter: void 0
|
|
12
|
-
}
|
|
11
|
+
};
|
|
13
12
|
this[MEMOIZED_SYMBOL].getter = createGetter(this[MEMOIZED_SYMBOL], callback);
|
|
14
|
-
Object.defineProperties(this, {
|
|
15
|
-
maximum: {
|
|
16
|
-
enumerable: true,
|
|
17
|
-
get: () => this[MEMOIZED_SYMBOL].cache.maximum
|
|
18
|
-
},
|
|
19
|
-
size: {
|
|
20
|
-
enumerable: true,
|
|
21
|
-
get: () => this[MEMOIZED_SYMBOL].cache.size
|
|
22
|
-
}
|
|
23
|
-
});
|
|
24
13
|
}
|
|
14
|
+
Memoized.prototype.clear = clearMemoized;
|
|
15
|
+
Memoized.prototype.delete = deleteMemoizedValue;
|
|
16
|
+
Memoized.prototype.get = getMemoizedValue;
|
|
17
|
+
Memoized.prototype.has = hasMemoizedValue;
|
|
18
|
+
Memoized.prototype.run = runMemoized;
|
|
25
19
|
Object.defineProperties(Memoized.prototype, {
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
20
|
+
maximum: {
|
|
21
|
+
enumerable: true,
|
|
22
|
+
get: getMemoizedMaximum
|
|
23
|
+
},
|
|
24
|
+
size: {
|
|
25
|
+
enumerable: true,
|
|
26
|
+
get: getMemoizedSize
|
|
27
|
+
}
|
|
32
28
|
});
|
|
33
29
|
function clearMemoized() {
|
|
34
30
|
this[MEMOIZED_SYMBOL].cache.clear();
|
|
@@ -52,6 +48,12 @@ function createMemoizationOptions(input) {
|
|
|
52
48
|
cacheSize: getNumberOrDefault(cacheSize, MEMOIZED_CACHE_SIZE_DEFAULT)
|
|
53
49
|
};
|
|
54
50
|
}
|
|
51
|
+
function getMemoizedMaximum() {
|
|
52
|
+
return this[MEMOIZED_SYMBOL].cache.maximum;
|
|
53
|
+
}
|
|
54
|
+
function getMemoizedSize() {
|
|
55
|
+
return this[MEMOIZED_SYMBOL].cache.size;
|
|
56
|
+
}
|
|
55
57
|
function getMemoizedValue(key) {
|
|
56
58
|
return this[MEMOIZED_SYMBOL].cache.get(key);
|
|
57
59
|
}
|
|
@@ -75,6 +77,6 @@ function runMemoized(...parameters) {
|
|
|
75
77
|
const MEMOIZED_CACHE_SIZE_DEFAULT = 1024;
|
|
76
78
|
const MEMOIZED_CALLBACK = "Memoized requires a callback function";
|
|
77
79
|
const MEMOIZED_KEY_SEPARATOR = "_";
|
|
78
|
-
const MEMOIZED_SYMBOL = Symbol(
|
|
80
|
+
const MEMOIZED_SYMBOL = Symbol("memoized");
|
|
79
81
|
//#endregion
|
|
80
82
|
export { memoize };
|
|
@@ -59,7 +59,5 @@ const assertFlowFunctions = assert.condition((value) => Array.isArray(value) &&
|
|
|
59
59
|
const assertPipeFunctions = assert.condition((value) => Array.isArray(value) && value.every((item) => typeof item === "function"), WORK_MESSAGE_PIPE_ARRAY, TypeError);
|
|
60
60
|
flow.async = asyncFlow;
|
|
61
61
|
pipe.async = asyncPipe;
|
|
62
|
-
Object.defineProperty(flow, "async", { value: asyncFlow });
|
|
63
|
-
Object.defineProperty(pipe, "async", { value: asyncPipe });
|
|
64
62
|
//#endregion
|
|
65
63
|
export { asyncFlow, asyncPipe, flow, pipe };
|
package/dist/internal/herald.mjs
CHANGED
|
@@ -9,23 +9,19 @@ function Events(herald, state) {
|
|
|
9
9
|
}
|
|
10
10
|
Events.prototype[HERALD_PROPERTY] = HERALD_NAME_EVENTS;
|
|
11
11
|
function Herald(state) {
|
|
12
|
-
|
|
12
|
+
this[HERALD_SYMBOL] = {
|
|
13
13
|
state,
|
|
14
14
|
events: new Events(this, state)
|
|
15
|
-
}
|
|
15
|
+
};
|
|
16
16
|
}
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
}
|
|
26
|
-
},
|
|
27
|
-
observed: { value: eventIsObserved },
|
|
28
|
-
subscribe: { value: subscribeToHerald }
|
|
17
|
+
Herald.prototype[HERALD_PROPERTY] = HERALD_NAME_HERALD;
|
|
18
|
+
Herald.prototype.clear = clearHerald;
|
|
19
|
+
Herald.prototype.emit = emitForHerald;
|
|
20
|
+
Herald.prototype.observed = eventIsObserved;
|
|
21
|
+
Herald.prototype.subscribe = subscribeToHerald;
|
|
22
|
+
Object.defineProperty(Herald.prototype, "events", {
|
|
23
|
+
enumerable: true,
|
|
24
|
+
get: getHeraldEvents
|
|
29
25
|
});
|
|
30
26
|
function clearHerald() {
|
|
31
27
|
this[HERALD_SYMBOL].state.store.clear();
|
|
@@ -63,6 +59,9 @@ function emitForHerald(event, ...parameters) {
|
|
|
63
59
|
function eventIsObserved(event) {
|
|
64
60
|
return (this[HERALD_SYMBOL].state.store.items.keyed?.get(event)?.size ?? 0) > 0;
|
|
65
61
|
}
|
|
62
|
+
function getHeraldEvents() {
|
|
63
|
+
return this[HERALD_SYMBOL].events;
|
|
64
|
+
}
|
|
66
65
|
/**
|
|
67
66
|
* Create a _Herald_ for announcing named events
|
|
68
67
|
*
|
|
@@ -101,7 +100,7 @@ function isHeraldInstance(name, value) {
|
|
|
101
100
|
* @returns `true` if the value is a herald subscription, otherwise `false`
|
|
102
101
|
*/
|
|
103
102
|
function isHeraldSubscription(value) {
|
|
104
|
-
return isSubscription(value) && value[HERALD_PROPERTY] === "subscription";
|
|
103
|
+
return isSubscription(value) && HERALD_PROPERTY in value && value[HERALD_PROPERTY] === "subscription";
|
|
105
104
|
}
|
|
106
105
|
function subscribeToHerald(key, callback, signal) {
|
|
107
106
|
const { state } = this[HERALD_SYMBOL];
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { isPlainObject } from "../is.mjs";
|
|
2
2
|
//#region src/internal/result/misc.ts
|
|
3
3
|
function error(value, original) {
|
|
4
4
|
return getError(value, original);
|
|
@@ -27,8 +27,7 @@ function isResult(value) {
|
|
|
27
27
|
return isResultValue(value, true) || isResultValue(value, false);
|
|
28
28
|
}
|
|
29
29
|
function isResultValue(value, okValue) {
|
|
30
|
-
|
|
31
|
-
return value.ok === okValue && (okValue ? RESULT_PROPERTY_VALUE : RESULT_PROPERTY_ERROR) in value;
|
|
30
|
+
return isPlainObject(value) && value.ok === okValue && (okValue ? RESULT_PROPERTY_VALUE : RESULT_PROPERTY_ERROR) in value;
|
|
32
31
|
}
|
|
33
32
|
/**
|
|
34
33
|
* Creates an ok result
|
|
@@ -49,7 +48,5 @@ const RESULT_PROPERTY_ERROR = "error";
|
|
|
49
48
|
const RESULT_PROPERTY_VALUE = "value";
|
|
50
49
|
error.is = isError;
|
|
51
50
|
ok.is = isOk;
|
|
52
|
-
Object.defineProperty(error, "is", { value: isError });
|
|
53
|
-
Object.defineProperty(ok, "is", { value: isOk });
|
|
54
51
|
//#endregion
|
|
55
52
|
export { error, getError, isError, isOk, isResult, ok, unwrap };
|
|
@@ -1,44 +1,36 @@
|
|
|
1
1
|
import { isKey, isPlainObject } from "./is.mjs";
|
|
2
|
-
import { createAborter } from "./
|
|
2
|
+
import { createAborter } from "./aborter.mjs";
|
|
3
3
|
//#region src/internal/subscription.ts
|
|
4
4
|
const SUBSCRIPTION_NAME = "subscription";
|
|
5
5
|
const SUBSCRIPTION_PROPERTY = "$subscription";
|
|
6
6
|
const SUBSCRIPTION_STORE = "subscriptions";
|
|
7
7
|
function Subscription(state, property, parameters) {
|
|
8
|
-
|
|
8
|
+
this[SUBSCRIPTION_SYMBOL] = state;
|
|
9
|
+
this[property.key] = property.value;
|
|
9
10
|
state.aborter = createAborter(parameters.signal, () => this.unsubscribe(subscriptions, this, state));
|
|
10
|
-
Object.defineProperties(this, {
|
|
11
|
-
[property.key]: { value: property.value },
|
|
12
|
-
active: {
|
|
13
|
-
enumerable: true,
|
|
14
|
-
get: () => (state.parameters?.isActive?.() ?? true) && state.active
|
|
15
|
-
}
|
|
16
|
-
});
|
|
17
11
|
addSubscription(this);
|
|
18
12
|
}
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
13
|
+
Subscription.prototype[SUBSCRIPTION_PROPERTY] = SUBSCRIPTION_NAME;
|
|
14
|
+
Subscription.prototype.unsubscribe = removeSubscription;
|
|
15
|
+
Object.defineProperty(Subscription.prototype, "active", {
|
|
16
|
+
enumerable: true,
|
|
17
|
+
get: getSubscriptionActive
|
|
22
18
|
});
|
|
23
19
|
function Subscriptions(parameters) {
|
|
24
20
|
const { keys, property } = createSubscriptionsParameters(parameters);
|
|
25
|
-
|
|
21
|
+
this[SUBSCRIPTION_SYMBOL] = createSubscriptionsState(property, keys);
|
|
26
22
|
}
|
|
23
|
+
Subscriptions.prototype[SUBSCRIPTION_PROPERTY] = SUBSCRIPTION_STORE;
|
|
24
|
+
Subscriptions.prototype.clear = clearSubscriptions;
|
|
25
|
+
Subscriptions.prototype.create = createSubscription;
|
|
27
26
|
Object.defineProperties(Subscriptions.prototype, {
|
|
28
|
-
[SUBSCRIPTION_PROPERTY]: { value: SUBSCRIPTION_STORE },
|
|
29
|
-
clear: { value: clearSubscriptions },
|
|
30
|
-
create: { value: createSubscription },
|
|
31
27
|
items: {
|
|
32
28
|
enumerable: true,
|
|
33
|
-
get
|
|
34
|
-
return this[SUBSCRIPTION_SYMBOL].items;
|
|
35
|
-
}
|
|
29
|
+
get: getSubscriptionsItems
|
|
36
30
|
},
|
|
37
31
|
values: {
|
|
38
32
|
enumerable: true,
|
|
39
|
-
get
|
|
40
|
-
return this[SUBSCRIPTION_SYMBOL].values;
|
|
41
|
-
}
|
|
33
|
+
get: getSubscriptionsValues
|
|
42
34
|
}
|
|
43
35
|
});
|
|
44
36
|
function addSubscription(instance) {
|
|
@@ -101,6 +93,16 @@ function getExistingSubscription(subscriptions, state) {
|
|
|
101
93
|
const { parameters } = state;
|
|
102
94
|
return isKey(parameters.key) ? values.from.keyed?.get(parameters.key)?.get(parameters.value) : values.from.any.get(parameters.value);
|
|
103
95
|
}
|
|
96
|
+
function getSubscriptionActive() {
|
|
97
|
+
const state = this[SUBSCRIPTION_SYMBOL];
|
|
98
|
+
return (state.parameters?.isActive?.() ?? true) && state.active;
|
|
99
|
+
}
|
|
100
|
+
function getSubscriptionsItems() {
|
|
101
|
+
return this[SUBSCRIPTION_SYMBOL].items;
|
|
102
|
+
}
|
|
103
|
+
function getSubscriptionsValues() {
|
|
104
|
+
return this[SUBSCRIPTION_SYMBOL].values;
|
|
105
|
+
}
|
|
104
106
|
function createSubscriptionParameters(input) {
|
|
105
107
|
const values = isPlainObject(input) ? input : {};
|
|
106
108
|
if (values.value == null) throw new Error(SUBSCRIPTION_INVALID_VALUE);
|
|
@@ -13,7 +13,7 @@ export declare namespace compare {
|
|
|
13
13
|
var deregister: typeof deregisterComparator;
|
|
14
14
|
var handler: {
|
|
15
15
|
base: {
|
|
16
|
-
handlers: WeakMap<
|
|
16
|
+
handlers: WeakMap<WeakKey, string | GenericCallback>;
|
|
17
17
|
options: {
|
|
18
18
|
callback: GenericCallback;
|
|
19
19
|
method?: string;
|
|
@@ -85,10 +85,5 @@ const compareHandler = createCompareHandler(compare, {
|
|
|
85
85
|
compare.deregister = deregisterComparator;
|
|
86
86
|
compare.handler = compareHandler;
|
|
87
87
|
compare.register = registerComparator;
|
|
88
|
-
Object.defineProperties(compare, {
|
|
89
|
-
deregister: { value: deregisterComparator },
|
|
90
|
-
handler: { value: compareHandler },
|
|
91
|
-
register: { value: registerComparator }
|
|
92
|
-
});
|
|
93
88
|
//#endregion
|
|
94
89
|
export { compare, deregisterComparator, registerComparator };
|
|
@@ -95,7 +95,7 @@ export declare namespace equal {
|
|
|
95
95
|
var deregister: typeof deregisterEqualizer;
|
|
96
96
|
var handler: {
|
|
97
97
|
base: {
|
|
98
|
-
handlers: WeakMap<
|
|
98
|
+
handlers: WeakMap<WeakKey, string | GenericCallback>;
|
|
99
99
|
options: {
|
|
100
100
|
callback: GenericCallback;
|
|
101
101
|
method?: string;
|
|
@@ -2,13 +2,11 @@ import { isNonPlainObject, isPlainObject, isPrimitive, isTypedArray } from "../i
|
|
|
2
2
|
import { createCompareHandler } from "./handlers.mjs";
|
|
3
3
|
//#region src/internal/value/equal.ts
|
|
4
4
|
function Equalizer(options) {
|
|
5
|
-
|
|
5
|
+
this[EQUAL_SYMBOL] = options;
|
|
6
6
|
}
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
register: { value: registerEqualizer }
|
|
11
|
-
});
|
|
7
|
+
Equalizer.prototype.compare = compare;
|
|
8
|
+
Equalizer.prototype.deregister = deregisterEqualizer;
|
|
9
|
+
Equalizer.prototype.register = registerEqualizer;
|
|
12
10
|
function compare(first, second) {
|
|
13
11
|
return equalValue(first, second, this[EQUAL_SYMBOL]);
|
|
14
12
|
}
|
|
@@ -181,11 +179,5 @@ equal.deregister = deregisterEqualizer;
|
|
|
181
179
|
equal.handler = equalHandler;
|
|
182
180
|
equal.initialize = initializeEqualizer;
|
|
183
181
|
equal.register = registerEqualizer;
|
|
184
|
-
Object.defineProperties(equal, {
|
|
185
|
-
deregister: { value: deregisterEqualizer },
|
|
186
|
-
handler: { value: equalHandler },
|
|
187
|
-
initialize: { value: initializeEqualizer },
|
|
188
|
-
register: { value: registerEqualizer }
|
|
189
|
-
});
|
|
190
182
|
//#endregion
|
|
191
183
|
export { deregisterEqualizer, equal, initializeEqualizer, registerEqualizer };
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { Constructor, GenericCallback } from "../../models.mjs";
|
|
2
2
|
//#region src/internal/value/handlers.d.ts
|
|
3
3
|
type BaseHandler = {
|
|
4
|
-
handlers: WeakMap<
|
|
4
|
+
handlers: WeakMap<WeakKey, string | GenericCallback>;
|
|
5
5
|
options: BaseHandlerOptions;
|
|
6
6
|
owner: GenericCallback;
|
|
7
7
|
deregister: (constructor: Constructor) => void;
|
|
@@ -5,19 +5,17 @@ function BaseHandler(owner, options) {
|
|
|
5
5
|
this.owner = owner;
|
|
6
6
|
this.options = options;
|
|
7
7
|
}
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
register: { value: registerHandler }
|
|
12
|
-
});
|
|
8
|
+
BaseHandler.prototype.deregister = deregisterHandler;
|
|
9
|
+
BaseHandler.prototype.get = getHandler;
|
|
10
|
+
BaseHandler.prototype.register = registerHandler;
|
|
13
11
|
function CompareHandler(base) {
|
|
14
12
|
this.base = base;
|
|
15
13
|
}
|
|
16
|
-
|
|
14
|
+
CompareHandler.prototype.handle = handleComparison;
|
|
17
15
|
function ValueHandler(value) {
|
|
18
16
|
this.base = value;
|
|
19
17
|
}
|
|
20
|
-
|
|
18
|
+
ValueHandler.prototype.handle = handleValue;
|
|
21
19
|
function createBaseHandler(owner, options) {
|
|
22
20
|
return new BaseHandler(owner, options);
|
|
23
21
|
}
|
|
@@ -7,6 +7,5 @@ function hasValueResult(data, path, ignoreCase) {
|
|
|
7
7
|
return getNestedValue(data, path, ignoreCase === true);
|
|
8
8
|
}
|
|
9
9
|
hasValue.get = hasValueResult;
|
|
10
|
-
Object.defineProperty(hasValue, "get", { value: hasValueResult });
|
|
11
10
|
//#endregion
|
|
12
11
|
export { hasValue, hasValueResult };
|
|
@@ -3,6 +3,6 @@ import { Result } from "../result/models.mjs";
|
|
|
3
3
|
export declare function findKey(needle: string, haystack: object): string;
|
|
4
4
|
export declare function getNestedValue(data: object, path: string, ignoreCase: boolean): Result<unknown, string>;
|
|
5
5
|
export declare function getPaths(path: string, lowercase: boolean): string | string[];
|
|
6
|
-
export declare function handleValue(data: object, path: string, value: unknown, get: true, ignoreCase: boolean): Result<
|
|
6
|
+
export declare function handleValue(data: object, path: string, value: unknown, get: true, ignoreCase: boolean): Result<object, string>;
|
|
7
7
|
export declare function handleValue(data: object, path: string, value: unknown, get: false, ignoreCase: boolean): void;
|
|
8
8
|
//#endregion
|
|
@@ -30,9 +30,10 @@ function getPaths(path, lowercase) {
|
|
|
30
30
|
function handleValue(data, path, value, get, ignoreCase) {
|
|
31
31
|
if (typeof data === "object" && data !== null) {
|
|
32
32
|
if (ignoreKey(path)) return error(MISC_NESTED_MESSAGE_UNSAFE);
|
|
33
|
-
const
|
|
34
|
-
|
|
35
|
-
|
|
33
|
+
const dataObject = data;
|
|
34
|
+
const key = ignoreCase ? findKey(path, dataObject) : path;
|
|
35
|
+
if (get) return key in dataObject ? ok(dataObject[key]) : error(MISC_NESTED_MESSAGE_MISSING);
|
|
36
|
+
dataObject[key] = typeof value === "function" ? value(dataObject[key]) : value;
|
|
36
37
|
}
|
|
37
38
|
if (get) return error(MISC_NESTED_MESSAGE_MISSING);
|
|
38
39
|
}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
|
+
import { isPlainObject } from "../is.mjs";
|
|
1
2
|
//#region src/internal/value/partial.ts
|
|
2
3
|
function partial(value, providedKeys, omit) {
|
|
3
|
-
if (
|
|
4
|
+
if (!isPlainObject(value)) return {};
|
|
4
5
|
const keys = omit ? Object.keys(value) : Array.isArray(providedKeys) ? providedKeys : [];
|
|
5
6
|
const { length } = keys;
|
|
6
7
|
if (length === 0) return omit ? value : {};
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { unwrap } from "../result/misc.mjs";
|
|
1
2
|
import { getPaths, handleValue } from "./misc.mjs";
|
|
2
3
|
//#region src/internal/value/set.ts
|
|
3
4
|
function setValue(data, path, value, ignoreCase) {
|
|
@@ -17,7 +18,7 @@ function setValue(data, path, value, ignoreCase) {
|
|
|
17
18
|
handleValue(target, currentPath, value, false, shouldIgnoreCase);
|
|
18
19
|
break;
|
|
19
20
|
}
|
|
20
|
-
let next = handleValue(target, currentPath, null, true, shouldIgnoreCase)
|
|
21
|
+
let next = unwrap(handleValue(target, currentPath, null, true, shouldIgnoreCase), void 0);
|
|
21
22
|
if (typeof next !== "object" || next === null) {
|
|
22
23
|
const nextPath = paths[index + 1];
|
|
23
24
|
if (SET_EXPRESSION_INDEX.test(nextPath)) next = Array.from({ length: Number(nextPath) + 1 }, () => void 0);
|
package/dist/logger.mjs
CHANGED
|
@@ -4,36 +4,32 @@ import { getString } from "./internal/string/misc.mjs";
|
|
|
4
4
|
const LOGGER_NAME = "Logger";
|
|
5
5
|
const LOGGER_NAME_TIMED = "TimedLogger";
|
|
6
6
|
const LOGGER_PROPERTY = "$logger";
|
|
7
|
-
function Lumberjack() {
|
|
8
|
-
for (const method of methods) {
|
|
9
|
-
const bound = console[method].bind(console);
|
|
10
|
-
Object.defineProperty(this, method, {
|
|
11
|
-
enumerable: true,
|
|
12
|
-
get() {
|
|
13
|
-
return enabled ? bound : noop;
|
|
14
|
-
}
|
|
15
|
-
});
|
|
16
|
-
}
|
|
17
|
-
}
|
|
7
|
+
function Lumberjack() {}
|
|
18
8
|
Lumberjack.prototype[LOGGER_PROPERTY] = LOGGER_NAME;
|
|
9
|
+
Lumberjack.prototype.time = getTimeLogger;
|
|
19
10
|
Object.defineProperties(Lumberjack.prototype, {
|
|
11
|
+
debug: { get: getLoggerCallback.bind("debug") },
|
|
12
|
+
dir: { get: getLoggerCallback.bind("dir") },
|
|
13
|
+
error: { get: getLoggerCallback.bind("error") },
|
|
20
14
|
enabled: {
|
|
21
15
|
enumerable: true,
|
|
22
|
-
get:
|
|
23
|
-
set:
|
|
24
|
-
enabled = typeof value === "boolean" ? value : enabled;
|
|
25
|
-
}
|
|
16
|
+
get: getLoggerEnabled,
|
|
17
|
+
set: setLoggerEnabled
|
|
26
18
|
},
|
|
27
|
-
|
|
19
|
+
info: { get: getLoggerCallback.bind("info") },
|
|
20
|
+
log: { get: getLoggerCallback.bind("log") },
|
|
21
|
+
table: { get: getLoggerCallback.bind("table") },
|
|
22
|
+
trace: { get: getLoggerCallback.bind("trace") },
|
|
23
|
+
warn: { get: getLoggerCallback.bind("warn") }
|
|
28
24
|
});
|
|
29
25
|
function TimeLogger(label) {
|
|
30
|
-
|
|
26
|
+
this[LOGGER_SYMBOL] = {
|
|
31
27
|
label,
|
|
32
28
|
started: enabled,
|
|
33
29
|
stopped: false
|
|
34
|
-
}
|
|
30
|
+
};
|
|
35
31
|
this[LOGGER_SYMBOL].isActive = () => {
|
|
36
|
-
return this[LOGGER_SYMBOL].started && !this[LOGGER_SYMBOL].stopped
|
|
32
|
+
return enabled && this[LOGGER_SYMBOL].started && !this[LOGGER_SYMBOL].stopped;
|
|
37
33
|
};
|
|
38
34
|
if (this[LOGGER_SYMBOL].started) console.time(label);
|
|
39
35
|
}
|
|
@@ -41,43 +37,48 @@ TimeLogger.prototype[LOGGER_PROPERTY] = LOGGER_NAME_TIMED;
|
|
|
41
37
|
Object.defineProperties(TimeLogger.prototype, {
|
|
42
38
|
active: {
|
|
43
39
|
enumerable: true,
|
|
44
|
-
get
|
|
45
|
-
return this[LOGGER_SYMBOL].isActive();
|
|
46
|
-
}
|
|
40
|
+
get: getTimeLoggerActive
|
|
47
41
|
},
|
|
48
|
-
log: { get
|
|
49
|
-
|
|
50
|
-
return state.isActive() ? console.timeLog.bind(console, state.label) : noop;
|
|
51
|
-
} },
|
|
52
|
-
stop: { get() {
|
|
53
|
-
const state = this[LOGGER_SYMBOL];
|
|
54
|
-
if (state.isActive()) {
|
|
55
|
-
state.stopped = true;
|
|
56
|
-
return console.timeEnd.bind(console, state.label);
|
|
57
|
-
}
|
|
58
|
-
return noop;
|
|
59
|
-
} }
|
|
42
|
+
log: { get: getTimerLoggerLog },
|
|
43
|
+
stop: { get: getTimeLoggerStop }
|
|
60
44
|
});
|
|
45
|
+
function getLoggerCallback() {
|
|
46
|
+
return enabled ? console[this].bind(console) : noop;
|
|
47
|
+
}
|
|
48
|
+
function getLoggerEnabled() {
|
|
49
|
+
return enabled;
|
|
50
|
+
}
|
|
51
|
+
function getTimeLogger(label) {
|
|
52
|
+
return new TimeLogger(getString(label));
|
|
53
|
+
}
|
|
54
|
+
function getTimeLoggerActive() {
|
|
55
|
+
return this[LOGGER_SYMBOL].isActive();
|
|
56
|
+
}
|
|
57
|
+
function getTimerLoggerLog() {
|
|
58
|
+
const state = this[LOGGER_SYMBOL];
|
|
59
|
+
return state.isActive() ? console.timeLog.bind(console, state.label) : noop;
|
|
60
|
+
}
|
|
61
|
+
function getTimeLoggerStop() {
|
|
62
|
+
const state = this[LOGGER_SYMBOL];
|
|
63
|
+
if (state.isActive()) {
|
|
64
|
+
state.stopped = true;
|
|
65
|
+
return console.timeEnd.bind(console, state.label);
|
|
66
|
+
}
|
|
67
|
+
return noop;
|
|
68
|
+
}
|
|
61
69
|
function isLogger(value) {
|
|
62
70
|
return isLoggerInstance(LOGGER_NAME, value);
|
|
63
71
|
}
|
|
64
72
|
function isLoggerInstance(name, value) {
|
|
65
|
-
return typeof value === "object" && value !== null && value[LOGGER_PROPERTY] === name;
|
|
73
|
+
return typeof value === "object" && value !== null && LOGGER_PROPERTY in value && value[LOGGER_PROPERTY] === name;
|
|
66
74
|
}
|
|
67
75
|
function isTimeLogger(value) {
|
|
68
76
|
return isLoggerInstance(LOGGER_NAME_TIMED, value);
|
|
69
77
|
}
|
|
78
|
+
function setLoggerEnabled(value) {
|
|
79
|
+
enabled = typeof value === "boolean" ? value : enabled;
|
|
80
|
+
}
|
|
70
81
|
const LOGGER_SYMBOL = Symbol(LOGGER_PROPERTY);
|
|
71
|
-
const methods = [
|
|
72
|
-
"debug",
|
|
73
|
-
"dir",
|
|
74
|
-
"error",
|
|
75
|
-
"info",
|
|
76
|
-
"log",
|
|
77
|
-
"table",
|
|
78
|
-
"trace",
|
|
79
|
-
"warn"
|
|
80
|
-
];
|
|
81
82
|
/**
|
|
82
83
|
* A logger that can be used to log messages to the console
|
|
83
84
|
*
|
package/dist/promise/delay.mjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { createAborter } from "../internal/
|
|
1
|
+
import { createAborter } from "../internal/aborter.mjs";
|
|
2
2
|
import { LIMITER_WAIT, getLimiter } from "../internal/function/limit.mjs";
|
|
3
3
|
import { createPromiseOptions } from "./helpers.mjs";
|
|
4
4
|
import { settlePromise } from "./misc.mjs";
|