@bessemer/cornerstone 0.5.97 → 0.5.99
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.d.ts +62 -1
- package/dist/array.d.ts.map +1 -1
- package/dist/array.js +24 -11
- package/dist/array.js.map +1 -1
- package/dist/aspect-ratio.d.ts +1 -1
- package/dist/aspect-ratio.d.ts.map +1 -1
- package/dist/aspect-ratio.js +4 -4
- package/dist/aspect-ratio.js.map +1 -1
- package/dist/async-value.d.ts +10 -2
- package/dist/async-value.d.ts.map +1 -1
- package/dist/async-value.js +33 -2
- package/dist/async-value.js.map +1 -1
- package/dist/cache.js +1 -1
- package/dist/cache.js.map +1 -1
- package/dist/equalitor.d.ts +1 -0
- package/dist/equalitor.d.ts.map +1 -1
- package/dist/equalitor.js +3 -0
- package/dist/equalitor.js.map +1 -1
- package/dist/error/error-cause.d.ts +35 -0
- package/dist/error/error-cause.d.ts.map +1 -0
- package/dist/error/error-cause.js +97 -0
- package/dist/error/error-cause.js.map +1 -0
- package/dist/error/error-code.d.ts +17 -0
- package/dist/error/error-code.d.ts.map +1 -0
- package/dist/error/error-code.js +32 -0
- package/dist/error/error-code.js.map +1 -0
- package/dist/error/error-event.d.ts +29 -48
- package/dist/error/error-event.d.ts.map +1 -1
- package/dist/error/error-event.js +62 -151
- package/dist/error/error-event.js.map +1 -1
- package/dist/error/error-type.d.ts +1 -0
- package/dist/error/error-type.d.ts.map +1 -1
- package/dist/error/error-type.js +4 -2
- package/dist/error/error-type.js.map +1 -1
- package/dist/function.d.ts +1 -1
- package/dist/function.d.ts.map +1 -1
- package/dist/function.js +3 -2
- package/dist/function.js.map +1 -1
- package/dist/glob.d.ts +1 -1
- package/dist/glob.d.ts.map +1 -1
- package/dist/glob.js +4 -4
- package/dist/glob.js.map +1 -1
- package/dist/hex-code.d.ts +1 -1
- package/dist/hex-code.d.ts.map +1 -1
- package/dist/hex-code.js +4 -4
- package/dist/hex-code.js.map +1 -1
- package/dist/index.d.ts +10 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +15 -5
- package/dist/index.js.map +1 -1
- package/dist/intl/country-code.d.ts +1 -1
- package/dist/intl/country-code.d.ts.map +1 -1
- package/dist/intl/country-code.js +4 -4
- package/dist/intl/country-code.js.map +1 -1
- package/dist/intl/country-subdivision-code.d.ts +1 -1
- package/dist/intl/country-subdivision-code.d.ts.map +1 -1
- package/dist/intl/country-subdivision-code.js +4 -4
- package/dist/intl/country-subdivision-code.js.map +1 -1
- package/dist/intl/currency-code.d.ts +1 -1
- package/dist/intl/currency-code.d.ts.map +1 -1
- package/dist/intl/currency-code.js +4 -4
- package/dist/intl/currency-code.js.map +1 -1
- package/dist/intl/language-code.d.ts +1 -1
- package/dist/intl/language-code.d.ts.map +1 -1
- package/dist/intl/language-code.js +4 -4
- package/dist/intl/language-code.js.map +1 -1
- package/dist/intl/locale.d.ts +1 -1
- package/dist/intl/locale.d.ts.map +1 -1
- package/dist/intl/locale.js +6 -6
- package/dist/intl/locale.js.map +1 -1
- package/dist/mime-type.d.ts +1 -1
- package/dist/mime-type.d.ts.map +1 -1
- package/dist/mime-type.js +4 -4
- package/dist/mime-type.js.map +1 -1
- package/dist/net/domain-name.d.ts +10 -0
- package/dist/net/domain-name.d.ts.map +1 -0
- package/dist/net/domain-name.js +30 -0
- package/dist/net/domain-name.js.map +1 -0
- package/dist/net/ipv4-address.d.ts +10 -0
- package/dist/net/ipv4-address.d.ts.map +1 -0
- package/dist/net/ipv4-address.js +30 -0
- package/dist/net/ipv4-address.js.map +1 -0
- package/dist/net/ipv6-address.d.ts +10 -0
- package/dist/net/ipv6-address.d.ts.map +1 -0
- package/dist/net/ipv6-address.js +30 -0
- package/dist/net/ipv6-address.js.map +1 -0
- package/dist/net/uri-host-name.d.ts +12 -0
- package/dist/net/uri-host-name.d.ts.map +1 -0
- package/dist/net/uri-host-name.js +44 -0
- package/dist/net/uri-host-name.js.map +1 -0
- package/dist/net/uri.d.ts +249 -0
- package/dist/net/uri.d.ts.map +1 -0
- package/dist/net/uri.js +444 -0
- package/dist/net/uri.js.map +1 -0
- package/dist/net/url.d.ts +58 -0
- package/dist/net/url.d.ts.map +1 -0
- package/dist/net/url.js +211 -0
- package/dist/net/url.js.map +1 -0
- package/dist/object/object-path.d.ts +1 -1
- package/dist/object/object-path.d.ts.map +1 -1
- package/dist/object/object-path.js +4 -4
- package/dist/object/object-path.js.map +1 -1
- package/dist/object/type-path.d.ts +1 -1
- package/dist/object/type-path.d.ts.map +1 -1
- package/dist/object/type-path.js +3 -3
- package/dist/object/type-path.js.map +1 -1
- package/dist/object.d.ts +1 -1
- package/dist/object.d.ts.map +1 -1
- package/dist/object.js +8 -6
- package/dist/object.js.map +1 -1
- package/dist/property.d.ts +2 -3
- package/dist/property.d.ts.map +1 -1
- package/dist/property.js.map +1 -1
- package/dist/resource-key.d.ts +7 -5
- package/dist/resource-key.d.ts.map +1 -1
- package/dist/resource-key.js +27 -15
- package/dist/resource-key.js.map +1 -1
- package/dist/result.d.ts.map +1 -1
- package/dist/result.js +3 -3
- package/dist/result.js.map +1 -1
- package/dist/string.d.ts +10 -21
- package/dist/string.d.ts.map +1 -1
- package/dist/string.js +54 -25
- package/dist/string.js.map +1 -1
- package/dist/tag.d.ts +2 -2
- package/dist/tag.d.ts.map +1 -1
- package/dist/tag.js +11 -12
- package/dist/tag.js.map +1 -1
- package/dist/temporal/duration.d.ts +4 -5
- package/dist/temporal/duration.d.ts.map +1 -1
- package/dist/temporal/duration.js +3 -7
- package/dist/temporal/duration.js.map +1 -1
- package/dist/temporal/instant.d.ts +4 -5
- package/dist/temporal/instant.d.ts.map +1 -1
- package/dist/temporal/instant.js +3 -7
- package/dist/temporal/instant.js.map +1 -1
- package/dist/temporal/plain-date-time.d.ts +4 -5
- package/dist/temporal/plain-date-time.d.ts.map +1 -1
- package/dist/temporal/plain-date-time.js +3 -7
- package/dist/temporal/plain-date-time.js.map +1 -1
- package/dist/temporal/plain-date.d.ts +8 -9
- package/dist/temporal/plain-date.d.ts.map +1 -1
- package/dist/temporal/plain-date.js +3 -7
- package/dist/temporal/plain-date.js.map +1 -1
- package/dist/temporal/plain-time.d.ts +6 -7
- package/dist/temporal/plain-time.d.ts.map +1 -1
- package/dist/temporal/plain-time.js +4 -8
- package/dist/temporal/plain-time.js.map +1 -1
- package/dist/temporal/time-zone-id.d.ts +1 -1
- package/dist/temporal/time-zone-id.d.ts.map +1 -1
- package/dist/temporal/time-zone-id.js +4 -4
- package/dist/temporal/time-zone-id.js.map +1 -1
- package/dist/temporal/time-zone-offset.d.ts +1 -1
- package/dist/temporal/time-zone-offset.d.ts.map +1 -1
- package/dist/temporal/time-zone-offset.js +4 -4
- package/dist/temporal/time-zone-offset.js.map +1 -1
- package/dist/temporal/zoned-date-time.d.ts +51 -0
- package/dist/temporal/zoned-date-time.d.ts.map +1 -0
- package/dist/temporal/zoned-date-time.js +106 -0
- package/dist/temporal/zoned-date-time.js.map +1 -0
- package/dist/types.d.ts +2 -2
- package/dist/types.d.ts.map +1 -1
- package/dist/{ulid.d.ts → uuid/ulid.d.ts} +2 -2
- package/dist/uuid/ulid.d.ts.map +1 -0
- package/dist/uuid/ulid.js +29 -0
- package/dist/uuid/ulid.js.map +1 -0
- package/dist/uuid/uuid-v4.d.ts +11 -0
- package/dist/uuid/uuid-v4.d.ts.map +1 -0
- package/dist/{uuid.js → uuid/uuid-v4.js} +11 -11
- package/dist/uuid/uuid-v4.js.map +1 -0
- package/dist/uuid/uuid-v7.d.ts +18 -0
- package/dist/uuid/uuid-v7.d.ts.map +1 -0
- package/dist/uuid/uuid-v7.js +44 -0
- package/dist/uuid/uuid-v7.js.map +1 -0
- package/package.json +1 -1
- package/dist/ulid.d.ts.map +0 -1
- package/dist/ulid.js +0 -29
- package/dist/ulid.js.map +0 -1
- package/dist/uri.d.ts +0 -52
- package/dist/uri.d.ts.map +0 -1
- package/dist/uri.js +0 -222
- package/dist/uri.js.map +0 -1
- package/dist/url.d.ts +0 -26
- package/dist/url.d.ts.map +0 -1
- package/dist/url.js +0 -120
- package/dist/url.js.map +0 -1
- package/dist/uuid.d.ts +0 -11
- package/dist/uuid.d.ts.map +0 -1
- package/dist/uuid.js.map +0 -1
package/dist/array.d.ts
CHANGED
|
@@ -4,7 +4,69 @@ import { Either } from '@bessemer/cornerstone/either';
|
|
|
4
4
|
import { Comparator } from '@bessemer/cornerstone/comparator';
|
|
5
5
|
import { Arrayable } from 'type-fest';
|
|
6
6
|
import { FiniteNumericBounds } from '@bessemer/cornerstone/range';
|
|
7
|
+
export declare const makeBy: <T>(n: number, f: (i: number) => T) => Array<T>;
|
|
8
|
+
export declare const range: ([start, end]: FiniteNumericBounds) => Array<number>;
|
|
9
|
+
export declare const repeat: <T>(a: T, n: number) => Array<T>;
|
|
10
|
+
export declare const fromIterable: <A>(collection: Iterable<A>) => Array<A>;
|
|
11
|
+
export declare const take: <T>(array: Array<T>, elementsToSkip?: number) => Array<T>;
|
|
12
|
+
/**
|
|
13
|
+
* Determines if two arrays are equal by comparing each element using an Equalitor.
|
|
14
|
+
* Returns `true` if all corresponding elements are equal according to the provided
|
|
15
|
+
* equalitor function in both arrays.
|
|
16
|
+
*
|
|
17
|
+
* **Example**
|
|
18
|
+
*
|
|
19
|
+
* ```ts
|
|
20
|
+
* import { Arrays } from "@bessemer/cornerstone"
|
|
21
|
+
*
|
|
22
|
+
* const users1 = [{ id: 1, name: "Alice" }, { id: 2, name: "Bob" }]
|
|
23
|
+
* const users2 = [{ id: 1, name: "Alice" }, { id: 2, name: "Bob" }]
|
|
24
|
+
*
|
|
25
|
+
* const result = Arrays.equalWith(users1, users2, (a, b) => a.id === b.id && a.name === b.name)
|
|
26
|
+
* console.log(result) // true
|
|
27
|
+
*
|
|
28
|
+
* const numbers1 = [1.1, 2.2, 3.3]
|
|
29
|
+
* const numbers2 = [1.0, 2.0, 3.0]
|
|
30
|
+
*
|
|
31
|
+
* const closeEnough = Arrays.equalWith(numbers1, numbers2, (a, b) => Math.abs(a - b) < 0.5)
|
|
32
|
+
* console.log(closeEnough) // false
|
|
33
|
+
* ```
|
|
34
|
+
*
|
|
35
|
+
* @category comparison
|
|
36
|
+
*/
|
|
7
37
|
export declare const equalWith: <T>(first: Array<T>, second: Array<T>, equalitor: Equalitor<T>) => boolean;
|
|
38
|
+
/**
|
|
39
|
+
* Determines if two arrays are equal by comparing mapped values from each element.
|
|
40
|
+
* Returns `true` if all corresponding mapped values are equal according to the
|
|
41
|
+
* provided Equalitor or natural equality.
|
|
42
|
+
*
|
|
43
|
+
* **Example**
|
|
44
|
+
*
|
|
45
|
+
* ```ts
|
|
46
|
+
* import { Arrays } from "@bessemer/cornerstone"
|
|
47
|
+
*
|
|
48
|
+
* const users1 = [{ id: 1, name: "Alice" }, { id: 2, name: "Bob" }]
|
|
49
|
+
* const users2 = [{ id: 1, name: "Alice" }, { id: 2, name: "Bob" }]
|
|
50
|
+
*
|
|
51
|
+
* // Compare by mapped property using natural equality
|
|
52
|
+
* const result = Arrays.equalBy(users1, users2, user => user.id)
|
|
53
|
+
* console.log(result) // true
|
|
54
|
+
*
|
|
55
|
+
* // Compare by mapped property using custom Equalitor
|
|
56
|
+
* const products1 = [{ name: "Apple", price: 1.99 }, { name: "Orange", price: 2.49 }]
|
|
57
|
+
* const products2 = [{ name: "Apple", price: 2.00 }, { name: "Orange", price: 2.50 }]
|
|
58
|
+
*
|
|
59
|
+
* const closeEnough = Arrays.equalBy(
|
|
60
|
+
* products1,
|
|
61
|
+
* products2,
|
|
62
|
+
* product => product.price,
|
|
63
|
+
* (a, b) => Math.abs(a - b) < 0.1
|
|
64
|
+
* )
|
|
65
|
+
* console.log(closeEnough) // true
|
|
66
|
+
* ```
|
|
67
|
+
*
|
|
68
|
+
* @category comparison
|
|
69
|
+
*/
|
|
8
70
|
export declare function equalBy<T>(first: Array<T>, second: Array<T>, mapper: (element: T) => Signable): boolean;
|
|
9
71
|
export declare function equalBy<T, N>(first: Array<T>, second: Array<T>, mapper: (element: T) => N, equalitor: Equalitor<N>): boolean;
|
|
10
72
|
export declare const equal: <T extends Signable>(first: Array<T>, second: Array<T>) => boolean;
|
|
@@ -37,7 +99,6 @@ export declare const first: <T>(array: Array<T>) => T | undefined;
|
|
|
37
99
|
export declare const only: <T>(array: Array<T>) => T;
|
|
38
100
|
export declare const last: <T>(array: Array<T>) => T | undefined;
|
|
39
101
|
export declare const isEmpty: <T>(array: Array<T>) => boolean;
|
|
40
|
-
export declare const range: (bounds: FiniteNumericBounds) => Array<number>;
|
|
41
102
|
export declare function groupBy<T, N extends string | number | symbol>(array: Array<T>, iteratee: (it: T) => N): Record<N, Array<T>>;
|
|
42
103
|
export declare const rest: <T>(array: Array<T>, elementsToSkip?: number) => Array<T>;
|
|
43
104
|
export declare const filterInPlace: <T>(array: Array<T>, predicate: (value: T, index: number, array: Array<T>) => boolean) => void;
|
package/dist/array.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"array.d.ts","sourceRoot":"","sources":["../src/array.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"array.d.ts","sourceRoot":"","sources":["../src/array.ts"],"names":[],"mappings":"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"}
|
package/dist/array.js
CHANGED
|
@@ -5,6 +5,26 @@ import { split } from "@bessemer/cornerstone/either";
|
|
|
5
5
|
import { compareBy, natural as naturalComparison } from "@bessemer/cornerstone/comparator";
|
|
6
6
|
import { isNil } from "@bessemer/cornerstone/object";
|
|
7
7
|
import { assert } from "@bessemer/cornerstone/assertion";
|
|
8
|
+
var makeBy = (n, f) => {
|
|
9
|
+
const max = Math.max(1, Math.floor(n));
|
|
10
|
+
const out = new Array(max);
|
|
11
|
+
for (let i = 0; i < max; i++) {
|
|
12
|
+
out[i] = f(i);
|
|
13
|
+
}
|
|
14
|
+
return out;
|
|
15
|
+
};
|
|
16
|
+
var range = ([start, end]) => {
|
|
17
|
+
return start <= end ? makeBy(end - start + 1, (i) => start + i) : [start];
|
|
18
|
+
};
|
|
19
|
+
var repeat = (a, n) => {
|
|
20
|
+
return makeBy(n, () => a);
|
|
21
|
+
};
|
|
22
|
+
var fromIterable = (collection) => {
|
|
23
|
+
return Array.isArray(collection) ? collection : Array.from(collection);
|
|
24
|
+
};
|
|
25
|
+
var take = (array, elementsToSkip = 1) => {
|
|
26
|
+
return array.slice(elementsToSkip);
|
|
27
|
+
};
|
|
8
28
|
var equalWith = (first2, second, equalitor) => {
|
|
9
29
|
if (first2.length !== second.length) {
|
|
10
30
|
return false;
|
|
@@ -129,17 +149,6 @@ var last = (array) => {
|
|
|
129
149
|
var isEmpty = (array) => {
|
|
130
150
|
return array.length === 0;
|
|
131
151
|
};
|
|
132
|
-
var range = (bounds) => {
|
|
133
|
-
const [start, end] = bounds;
|
|
134
|
-
if (start > end) {
|
|
135
|
-
return [];
|
|
136
|
-
}
|
|
137
|
-
const result = [];
|
|
138
|
-
for (let i = start; i <= end; i++) {
|
|
139
|
-
result.push(i);
|
|
140
|
-
}
|
|
141
|
-
return result;
|
|
142
|
-
};
|
|
143
152
|
function groupBy(array, iteratee) {
|
|
144
153
|
return array.reduce((result, value) => {
|
|
145
154
|
const key = iteratee(value);
|
|
@@ -198,18 +207,22 @@ export {
|
|
|
198
207
|
filterInPlace,
|
|
199
208
|
first,
|
|
200
209
|
flatten,
|
|
210
|
+
fromIterable,
|
|
201
211
|
groupBy,
|
|
202
212
|
isEmpty,
|
|
203
213
|
last,
|
|
214
|
+
makeBy,
|
|
204
215
|
only,
|
|
205
216
|
range,
|
|
206
217
|
remove,
|
|
207
218
|
removeBy,
|
|
208
219
|
removeWith,
|
|
220
|
+
repeat,
|
|
209
221
|
rest,
|
|
210
222
|
sort,
|
|
211
223
|
sortBy,
|
|
212
224
|
sortWith,
|
|
225
|
+
take,
|
|
213
226
|
toArray
|
|
214
227
|
};
|
|
215
228
|
//# sourceMappingURL=array.js.map
|
package/dist/array.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/array.ts"],"sourcesContent":["import { equalBy as equalitorEqualBy, Equalitor, natural as naturalEquality } from '@bessemer/cornerstone/equalitor'\nimport { sign, Signable, Signature } from '@bessemer/cornerstone/signature'\nimport { Either, split } from '@bessemer/cornerstone/either'\nimport { Comparator, compareBy, natural as naturalComparison } from '@bessemer/cornerstone/comparator'\nimport { Arrayable } from 'type-fest'\nimport { isNil } from '@bessemer/cornerstone/object'\nimport { FiniteNumericBounds } from '@bessemer/cornerstone/range'\nimport { assert } from '@bessemer/cornerstone/assertion'\n\nexport const equalWith = <T>(first: Array<T>, second: Array<T>, equalitor: Equalitor<T>): boolean => {\n if (first.length !== second.length) {\n return false\n }\n\n return first.every((element, index) => equalitor(element, second[index]!))\n}\n\nexport function equalBy<T>(first: Array<T>, second: Array<T>, mapper: (element: T) => Signable): boolean\nexport function equalBy<T, N>(first: Array<T>, second: Array<T>, mapper: (element: T) => N, equalitor: Equalitor<N>): boolean\nexport function equalBy<T, N>(first: Array<T>, second: Array<T>, mapper: (element: T) => N, equalitor?: Equalitor<N>): boolean {\n if (isNil(equalitor)) {\n return equalWith(\n first,\n second,\n equalitorEqualBy((it) => sign(mapper(it) as Signable), naturalEquality())\n )\n } else {\n return equalWith(first, second, equalitorEqualBy(mapper, equalitor))\n }\n}\n\nexport const equal = <T extends Signable>(first: Array<T>, second: Array<T>): boolean => {\n return equalBy(first, second, sign)\n}\n\nexport const differenceWith = <T>(first: Array<T>, second: Array<T>, equalitor: Equalitor<T>): Array<T> => {\n return first.filter((firstItem) => !second.some((it) => equalitor(firstItem, it)))\n}\n\nexport function differenceBy<T>(first: Array<T>, second: Array<T>, mapper: (element: T) => Signable): Array<T>\nexport function differenceBy<T, N>(first: Array<T>, second: Array<T>, mapper: (element: T) => N, equalitor: Equalitor<N>): Array<T>\nexport function differenceBy<T, N>(first: Array<T>, second: Array<T>, mapper: (element: T) => N, equalitor?: Equalitor<N>): Array<T> {\n if (isNil(equalitor)) {\n return differenceWith(\n first,\n second,\n equalitorEqualBy((it) => sign(mapper(it) as Signable), naturalEquality())\n )\n } else {\n return differenceWith(first, second, equalitorEqualBy(mapper, equalitor))\n }\n}\n\nexport const difference = <T extends Signable>(first: Array<T>, second: Array<T>): Array<T> => {\n return differenceBy(first, second, sign)\n}\n\nexport const removeWith = <T>(array: Array<T>, element: T, equalitor: Equalitor<T>): Array<T> => {\n return differenceWith(array, [element], equalitor)\n}\n\nexport function removeBy<T>(array: Array<T>, element: T, mapper: (element: T) => Signable): Array<T>\nexport function removeBy<T, N>(array: Array<T>, element: T, mapper: (element: T) => N, equalitor: Equalitor<N>): Array<T>\nexport function removeBy<T, N>(array: Array<T>, element: T, mapper: (element: T) => N, equalitor?: Equalitor<N>): Array<T> {\n return differenceBy(array, [element], mapper, equalitor as any)\n}\n\nexport const remove = <T extends Signable>(array: Array<T>, element: T): Array<T> => {\n return difference(array, [element])\n}\n\nexport const containsWith = <T>(array: Array<T>, element: T, equalitor: Equalitor<T>): boolean => {\n return array.some((it) => equalitor(it, element))\n}\n\nexport function containsBy<T>(array: Array<T>, element: T, mapper: (element: T) => Signable): boolean\nexport function containsBy<T, N>(array: Array<T>, element: T, mapper: (element: T) => N, equalitor: Equalitor<N>): boolean\nexport function containsBy<T, N>(array: Array<T>, element: T, mapper: (element: T) => N, equalitor?: Equalitor<N>): boolean {\n if (isNil(equalitor)) {\n return containsWith(\n array,\n element,\n equalitorEqualBy((it) => sign(mapper(it) as Signable), naturalEquality())\n )\n } else {\n return containsWith(array, element, equalitorEqualBy(mapper, equalitor))\n }\n}\n\nexport const contains = <T extends Signable>(array: Array<T>, element: T): boolean => containsBy(array, element, sign)\n\nexport const containsAllWith = <T>(first: Array<T>, second: Array<T>, equalitor: Equalitor<T>): boolean =>\n isEmpty(differenceWith(second, first, equalitor))\n\nexport function containsAllBy<T>(first: Array<T>, second: Array<T>, mapper: (element: T) => Signable): boolean\nexport function containsAllBy<T, N>(first: Array<T>, second: Array<T>, mapper: (element: T) => N, equalitor: Equalitor<N>): boolean\nexport function containsAllBy<T, N>(first: Array<T>, second: Array<T>, mapper: (element: T) => N, equalitor?: Equalitor<N>): boolean {\n return isEmpty(differenceBy(second, first, mapper, equalitor as any))\n}\n\nexport const containsAll = <T extends Signable>(first: Array<T>, second: Array<T>): boolean => isEmpty(difference(second, first))\n\nexport const dedupeWith = <T>(array: Array<T>, equalitor: Equalitor<T>): Array<T> => {\n const result: Array<T> = []\n\n for (const element of array) {\n const isDuplicate = result.some((existing) => equalitor(existing, element))\n if (!isDuplicate) {\n result.push(element)\n }\n }\n\n return result\n}\n\nexport function dedupeBy<T>(array: Array<T>, mapper: (element: T) => Signable): Array<T>\nexport function dedupeBy<T, N>(array: Array<T>, mapper: (element: T) => N, equalitor: Equalitor<N>): Array<T>\nexport function dedupeBy<T, N>(array: Array<T>, mapper: (element: T) => N, equalitor?: Equalitor<N>): Array<T> {\n if (isNil(equalitor)) {\n return dedupeWith(array, equalitorEqualBy(mapper as any, naturalEquality()))\n } else {\n return dedupeWith(array, equalitorEqualBy(mapper, equalitor))\n }\n}\n\nexport const dedupe = <T extends Signable>(array: Array<T>): Array<T> => {\n return dedupeBy(array, sign)\n}\n\nexport const sortWith = <T>(array: Array<T>, comparator: Comparator<T>): Array<T> => {\n return [...array].sort(comparator)\n}\n\nexport function sortBy<T>(array: Array<T>, mapper: (element: T) => Signable): Array<T>\nexport function sortBy<T, N>(array: Array<T>, mapper: (element: T) => N, comparator: Comparator<N>): Array<T>\nexport function sortBy<T, N>(array: Array<T>, mapper: (element: T) => N, comparator?: Comparator<N>): Array<T> {\n if (isNil(comparator)) {\n return sortWith(\n array,\n compareBy((it) => sign(mapper(it as any) as Signature), naturalComparison())\n )\n } else {\n return sortWith(array, compareBy(mapper, comparator))\n }\n}\n\nexport const sort = <T extends Signable>(array: Array<T>): Array<T> => sortBy(array, sign)\n\nexport const concatenate = <T>(array: Array<T>, ...values: Array<T | Array<T>>): Array<T> => {\n const result = [...array]\n\n for (const value of values) {\n if (Array.isArray(value)) {\n result.push(...value)\n } else {\n result.push(value)\n }\n }\n\n return result\n}\n\nexport const first = <T>(array: Array<T>): T | undefined => {\n return array.length > 0 ? array[0] : undefined\n}\n\nexport const only = <T>(array: Array<T>): T => {\n assert(array.length === 1)\n return first(array)!\n}\n\nexport const last = <T>(array: Array<T>): T | undefined => {\n return array.length > 0 ? array[array.length - 1] : undefined\n}\n\nexport const isEmpty = <T>(array: Array<T>): boolean => {\n return array.length === 0\n}\n\nexport const range = (bounds: FiniteNumericBounds): Array<number> => {\n const [start, end] = bounds\n // TODO maybe some other check?\n if (start > end) {\n return []\n }\n\n const result: number[] = []\n for (let i = start; i <= end; i++) {\n result.push(i)\n }\n return result\n}\n\n// JOHN i don't think this function should exist here... maybe examine the use cases more thoroughly\nexport function groupBy<T, N extends string | number | symbol>(array: Array<T>, iteratee: (it: T) => N): Record<N, Array<T>> {\n return array.reduce<Record<N, Array<T>>>((result, value) => {\n const key = iteratee(value)\n\n if (!result[key]) {\n result[key] = []\n }\n\n result[key].push(value)\n return result\n }, {} as any)\n}\n\nexport const rest = <T>(array: Array<T>, elementsToSkip: number = 1): Array<T> => {\n return array.slice(elementsToSkip)\n}\n\nexport const filterInPlace = <T>(array: Array<T>, predicate: (value: T, index: number, array: Array<T>) => boolean): void => {\n for (let i = array.length - 1; i >= 0; i--) {\n const value = array[i]\n if (value !== undefined && !predicate(value, i, array)) {\n array.splice(i, 1)\n }\n }\n}\n\nexport const clear = (array: Array<unknown>): void => {\n filterInPlace(array, () => false)\n}\n\nexport const bisect = <T, L, R>(array: Array<T>, bisector: (element: T, index: number) => Either<L, R>): [Array<L>, Array<R>] => {\n return split(array.map(bisector))\n}\n\nexport const toArray = <T>(array: Arrayable<T>): Array<T> => {\n if (Array.isArray(array)) {\n return array\n }\n\n return [array]\n}\n\nexport const flatten = <T>(array: Array<Array<T>>): Array<T> => {\n return array.flatMap((it) => it)\n}\n"],"mappings":"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","names":["first"]}
|
|
1
|
+
{"version":3,"sources":["../src/array.ts"],"sourcesContent":["import { equalBy as equalitorEqualBy, Equalitor, natural as naturalEquality } from '@bessemer/cornerstone/equalitor'\nimport { sign, Signable, Signature } from '@bessemer/cornerstone/signature'\nimport { Either, split } from '@bessemer/cornerstone/either'\nimport { Comparator, compareBy, natural as naturalComparison } from '@bessemer/cornerstone/comparator'\nimport { Arrayable } from 'type-fest'\nimport { isNil } from '@bessemer/cornerstone/object'\nimport { FiniteNumericBounds } from '@bessemer/cornerstone/range'\nimport { assert } from '@bessemer/cornerstone/assertion'\n\nexport const makeBy = <T>(n: number, f: (i: number) => T): Array<T> => {\n const max = Math.max(1, Math.floor(n))\n const out = new Array(max)\n for (let i = 0; i < max; i++) {\n out[i] = f(i)\n }\n return out\n}\n\nexport const range = ([start, end]: FiniteNumericBounds): Array<number> => {\n return start <= end ? makeBy(end - start + 1, (i) => start + i) : [start]\n}\n\nexport const repeat = <T>(a: T, n: number): Array<T> => {\n return makeBy(n, () => a)\n}\n\nexport const fromIterable = <A>(collection: Iterable<A>): Array<A> => {\n return Array.isArray(collection) ? collection : Array.from(collection)\n}\n\nexport const take = <T>(array: Array<T>, elementsToSkip: number = 1): Array<T> => {\n return array.slice(elementsToSkip)\n}\n\n/**\n * Determines if two arrays are equal by comparing each element using an Equalitor.\n * Returns `true` if all corresponding elements are equal according to the provided\n * equalitor function in both arrays.\n *\n * **Example**\n *\n * ```ts\n * import { Arrays } from \"@bessemer/cornerstone\"\n *\n * const users1 = [{ id: 1, name: \"Alice\" }, { id: 2, name: \"Bob\" }]\n * const users2 = [{ id: 1, name: \"Alice\" }, { id: 2, name: \"Bob\" }]\n *\n * const result = Arrays.equalWith(users1, users2, (a, b) => a.id === b.id && a.name === b.name)\n * console.log(result) // true\n *\n * const numbers1 = [1.1, 2.2, 3.3]\n * const numbers2 = [1.0, 2.0, 3.0]\n *\n * const closeEnough = Arrays.equalWith(numbers1, numbers2, (a, b) => Math.abs(a - b) < 0.5)\n * console.log(closeEnough) // false\n * ```\n *\n * @category comparison\n */\nexport const equalWith = <T>(first: Array<T>, second: Array<T>, equalitor: Equalitor<T>): boolean => {\n if (first.length !== second.length) {\n return false\n }\n\n return first.every((element, index) => equalitor(element, second[index]!))\n}\n\n/**\n * Determines if two arrays are equal by comparing mapped values from each element.\n * Returns `true` if all corresponding mapped values are equal according to the\n * provided Equalitor or natural equality.\n *\n * **Example**\n *\n * ```ts\n * import { Arrays } from \"@bessemer/cornerstone\"\n *\n * const users1 = [{ id: 1, name: \"Alice\" }, { id: 2, name: \"Bob\" }]\n * const users2 = [{ id: 1, name: \"Alice\" }, { id: 2, name: \"Bob\" }]\n *\n * // Compare by mapped property using natural equality\n * const result = Arrays.equalBy(users1, users2, user => user.id)\n * console.log(result) // true\n *\n * // Compare by mapped property using custom Equalitor\n * const products1 = [{ name: \"Apple\", price: 1.99 }, { name: \"Orange\", price: 2.49 }]\n * const products2 = [{ name: \"Apple\", price: 2.00 }, { name: \"Orange\", price: 2.50 }]\n *\n * const closeEnough = Arrays.equalBy(\n * products1,\n * products2,\n * product => product.price,\n * (a, b) => Math.abs(a - b) < 0.1\n * )\n * console.log(closeEnough) // true\n * ```\n *\n * @category comparison\n */\nexport function equalBy<T>(first: Array<T>, second: Array<T>, mapper: (element: T) => Signable): boolean\nexport function equalBy<T, N>(first: Array<T>, second: Array<T>, mapper: (element: T) => N, equalitor: Equalitor<N>): boolean\nexport function equalBy<T, N>(first: Array<T>, second: Array<T>, mapper: (element: T) => N, equalitor?: Equalitor<N>): boolean {\n if (isNil(equalitor)) {\n return equalWith(\n first,\n second,\n equalitorEqualBy((it) => sign(mapper(it) as Signable), naturalEquality())\n )\n } else {\n return equalWith(first, second, equalitorEqualBy(mapper, equalitor))\n }\n}\n\nexport const equal = <T extends Signable>(first: Array<T>, second: Array<T>): boolean => {\n return equalBy(first, second, sign)\n}\n\nexport const differenceWith = <T>(first: Array<T>, second: Array<T>, equalitor: Equalitor<T>): Array<T> => {\n return first.filter((firstItem) => !second.some((it) => equalitor(firstItem, it)))\n}\n\nexport function differenceBy<T>(first: Array<T>, second: Array<T>, mapper: (element: T) => Signable): Array<T>\nexport function differenceBy<T, N>(first: Array<T>, second: Array<T>, mapper: (element: T) => N, equalitor: Equalitor<N>): Array<T>\nexport function differenceBy<T, N>(first: Array<T>, second: Array<T>, mapper: (element: T) => N, equalitor?: Equalitor<N>): Array<T> {\n if (isNil(equalitor)) {\n return differenceWith(\n first,\n second,\n equalitorEqualBy((it) => sign(mapper(it) as Signable), naturalEquality())\n )\n } else {\n return differenceWith(first, second, equalitorEqualBy(mapper, equalitor))\n }\n}\n\nexport const difference = <T extends Signable>(first: Array<T>, second: Array<T>): Array<T> => {\n return differenceBy(first, second, sign)\n}\n\nexport const removeWith = <T>(array: Array<T>, element: T, equalitor: Equalitor<T>): Array<T> => {\n return differenceWith(array, [element], equalitor)\n}\n\nexport function removeBy<T>(array: Array<T>, element: T, mapper: (element: T) => Signable): Array<T>\nexport function removeBy<T, N>(array: Array<T>, element: T, mapper: (element: T) => N, equalitor: Equalitor<N>): Array<T>\nexport function removeBy<T, N>(array: Array<T>, element: T, mapper: (element: T) => N, equalitor?: Equalitor<N>): Array<T> {\n return differenceBy(array, [element], mapper, equalitor as any)\n}\n\nexport const remove = <T extends Signable>(array: Array<T>, element: T): Array<T> => {\n return difference(array, [element])\n}\n\nexport const containsWith = <T>(array: Array<T>, element: T, equalitor: Equalitor<T>): boolean => {\n return array.some((it) => equalitor(it, element))\n}\n\nexport function containsBy<T>(array: Array<T>, element: T, mapper: (element: T) => Signable): boolean\nexport function containsBy<T, N>(array: Array<T>, element: T, mapper: (element: T) => N, equalitor: Equalitor<N>): boolean\nexport function containsBy<T, N>(array: Array<T>, element: T, mapper: (element: T) => N, equalitor?: Equalitor<N>): boolean {\n if (isNil(equalitor)) {\n return containsWith(\n array,\n element,\n equalitorEqualBy((it) => sign(mapper(it) as Signable), naturalEquality())\n )\n } else {\n return containsWith(array, element, equalitorEqualBy(mapper, equalitor))\n }\n}\n\nexport const contains = <T extends Signable>(array: Array<T>, element: T): boolean => containsBy(array, element, sign)\n\nexport const containsAllWith = <T>(first: Array<T>, second: Array<T>, equalitor: Equalitor<T>): boolean =>\n isEmpty(differenceWith(second, first, equalitor))\n\nexport function containsAllBy<T>(first: Array<T>, second: Array<T>, mapper: (element: T) => Signable): boolean\nexport function containsAllBy<T, N>(first: Array<T>, second: Array<T>, mapper: (element: T) => N, equalitor: Equalitor<N>): boolean\nexport function containsAllBy<T, N>(first: Array<T>, second: Array<T>, mapper: (element: T) => N, equalitor?: Equalitor<N>): boolean {\n return isEmpty(differenceBy(second, first, mapper, equalitor as any))\n}\n\nexport const containsAll = <T extends Signable>(first: Array<T>, second: Array<T>): boolean => isEmpty(difference(second, first))\n\nexport const dedupeWith = <T>(array: Array<T>, equalitor: Equalitor<T>): Array<T> => {\n const result: Array<T> = []\n\n for (const element of array) {\n const isDuplicate = result.some((existing) => equalitor(existing, element))\n if (!isDuplicate) {\n result.push(element)\n }\n }\n\n return result\n}\n\nexport function dedupeBy<T>(array: Array<T>, mapper: (element: T) => Signable): Array<T>\nexport function dedupeBy<T, N>(array: Array<T>, mapper: (element: T) => N, equalitor: Equalitor<N>): Array<T>\nexport function dedupeBy<T, N>(array: Array<T>, mapper: (element: T) => N, equalitor?: Equalitor<N>): Array<T> {\n if (isNil(equalitor)) {\n return dedupeWith(array, equalitorEqualBy(mapper as any, naturalEquality()))\n } else {\n return dedupeWith(array, equalitorEqualBy(mapper, equalitor))\n }\n}\n\nexport const dedupe = <T extends Signable>(array: Array<T>): Array<T> => {\n return dedupeBy(array, sign)\n}\n\nexport const sortWith = <T>(array: Array<T>, comparator: Comparator<T>): Array<T> => {\n return [...array].sort(comparator)\n}\n\nexport function sortBy<T>(array: Array<T>, mapper: (element: T) => Signable): Array<T>\nexport function sortBy<T, N>(array: Array<T>, mapper: (element: T) => N, comparator: Comparator<N>): Array<T>\nexport function sortBy<T, N>(array: Array<T>, mapper: (element: T) => N, comparator?: Comparator<N>): Array<T> {\n if (isNil(comparator)) {\n return sortWith(\n array,\n compareBy((it) => sign(mapper(it as any) as Signature), naturalComparison())\n )\n } else {\n return sortWith(array, compareBy(mapper, comparator))\n }\n}\n\nexport const sort = <T extends Signable>(array: Array<T>): Array<T> => sortBy(array, sign)\n\nexport const concatenate = <T>(array: Array<T>, ...values: Array<T | Array<T>>): Array<T> => {\n const result = [...array]\n\n for (const value of values) {\n if (Array.isArray(value)) {\n result.push(...value)\n } else {\n result.push(value)\n }\n }\n\n return result\n}\n\nexport const first = <T>(array: Array<T>): T | undefined => {\n return array.length > 0 ? array[0] : undefined\n}\n\nexport const only = <T>(array: Array<T>): T => {\n assert(array.length === 1)\n return first(array)!\n}\n\nexport const last = <T>(array: Array<T>): T | undefined => {\n return array.length > 0 ? array[array.length - 1] : undefined\n}\n\nexport const isEmpty = <T>(array: Array<T>): boolean => {\n return array.length === 0\n}\n\n// JOHN i don't think this function should exist here... maybe examine the use cases more thoroughly\nexport function groupBy<T, N extends string | number | symbol>(array: Array<T>, iteratee: (it: T) => N): Record<N, Array<T>> {\n return array.reduce<Record<N, Array<T>>>((result, value) => {\n const key = iteratee(value)\n\n if (!result[key]) {\n result[key] = []\n }\n\n result[key].push(value)\n return result\n }, {} as any)\n}\n\nexport const rest = <T>(array: Array<T>, elementsToSkip: number = 1): Array<T> => {\n return array.slice(elementsToSkip)\n}\n\nexport const filterInPlace = <T>(array: Array<T>, predicate: (value: T, index: number, array: Array<T>) => boolean): void => {\n for (let i = array.length - 1; i >= 0; i--) {\n const value = array[i]\n if (value !== undefined && !predicate(value, i, array)) {\n array.splice(i, 1)\n }\n }\n}\n\nexport const clear = (array: Array<unknown>): void => {\n filterInPlace(array, () => false)\n}\n\nexport const bisect = <T, L, R>(array: Array<T>, bisector: (element: T, index: number) => Either<L, R>): [Array<L>, Array<R>] => {\n return split(array.map(bisector))\n}\n\nexport const toArray = <T>(array: Arrayable<T>): Array<T> => {\n if (Array.isArray(array)) {\n return array\n }\n\n return [array]\n}\n\nexport const flatten = <T>(array: Array<Array<T>>): Array<T> => {\n return array.flatMap((it) => it)\n}\n"],"mappings":";AAAA,SAAS,WAAW,kBAA6B,WAAW,uBAAuB;AACnF,SAAS,YAAiC;AAC1C,SAAiB,aAAa;AAC9B,SAAqB,WAAW,WAAW,yBAAyB;AAEpE,SAAS,aAAa;AAEtB,SAAS,cAAc;AAEhB,IAAM,SAAS,CAAI,GAAW,MAAkC;AACrE,QAAM,MAAM,KAAK,IAAI,GAAG,KAAK,MAAM,CAAC,CAAC;AACrC,QAAM,MAAM,IAAI,MAAM,GAAG;AACzB,WAAS,IAAI,GAAG,IAAI,KAAK,KAAK;AAC5B,QAAI,CAAC,IAAI,EAAE,CAAC;AAAA,EACd;AACA,SAAO;AACT;AAEO,IAAM,QAAQ,CAAC,CAAC,OAAO,GAAG,MAA0C;AACzE,SAAO,SAAS,MAAM,OAAO,MAAM,QAAQ,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,CAAC,KAAK;AAC1E;AAEO,IAAM,SAAS,CAAI,GAAM,MAAwB;AACtD,SAAO,OAAO,GAAG,MAAM,CAAC;AAC1B;AAEO,IAAM,eAAe,CAAI,eAAsC;AACpE,SAAO,MAAM,QAAQ,UAAU,IAAI,aAAa,MAAM,KAAK,UAAU;AACvE;AAEO,IAAM,OAAO,CAAI,OAAiB,iBAAyB,MAAgB;AAChF,SAAO,MAAM,MAAM,cAAc;AACnC;AA2BO,IAAM,YAAY,CAAIA,QAAiB,QAAkB,cAAqC;AACnG,MAAIA,OAAM,WAAW,OAAO,QAAQ;AAClC,WAAO;AAAA,EACT;AAEA,SAAOA,OAAM,MAAM,CAAC,SAAS,UAAU,UAAU,SAAS,OAAO,KAAK,CAAE,CAAC;AAC3E;AAoCO,SAAS,QAAcA,QAAiB,QAAkB,QAA2B,WAAmC;AAC7H,MAAI,MAAM,SAAS,GAAG;AACpB,WAAO;AAAA,MACLA;AAAA,MACA;AAAA,MACA,iBAAiB,CAAC,OAAO,KAAK,OAAO,EAAE,CAAa,GAAG,gBAAgB,CAAC;AAAA,IAC1E;AAAA,EACF,OAAO;AACL,WAAO,UAAUA,QAAO,QAAQ,iBAAiB,QAAQ,SAAS,CAAC;AAAA,EACrE;AACF;AAEO,IAAM,QAAQ,CAAqBA,QAAiB,WAA8B;AACvF,SAAO,QAAQA,QAAO,QAAQ,IAAI;AACpC;AAEO,IAAM,iBAAiB,CAAIA,QAAiB,QAAkB,cAAsC;AACzG,SAAOA,OAAM,OAAO,CAAC,cAAc,CAAC,OAAO,KAAK,CAAC,OAAO,UAAU,WAAW,EAAE,CAAC,CAAC;AACnF;AAIO,SAAS,aAAmBA,QAAiB,QAAkB,QAA2B,WAAoC;AACnI,MAAI,MAAM,SAAS,GAAG;AACpB,WAAO;AAAA,MACLA;AAAA,MACA;AAAA,MACA,iBAAiB,CAAC,OAAO,KAAK,OAAO,EAAE,CAAa,GAAG,gBAAgB,CAAC;AAAA,IAC1E;AAAA,EACF,OAAO;AACL,WAAO,eAAeA,QAAO,QAAQ,iBAAiB,QAAQ,SAAS,CAAC;AAAA,EAC1E;AACF;AAEO,IAAM,aAAa,CAAqBA,QAAiB,WAA+B;AAC7F,SAAO,aAAaA,QAAO,QAAQ,IAAI;AACzC;AAEO,IAAM,aAAa,CAAI,OAAiB,SAAY,cAAsC;AAC/F,SAAO,eAAe,OAAO,CAAC,OAAO,GAAG,SAAS;AACnD;AAIO,SAAS,SAAe,OAAiB,SAAY,QAA2B,WAAoC;AACzH,SAAO,aAAa,OAAO,CAAC,OAAO,GAAG,QAAQ,SAAgB;AAChE;AAEO,IAAM,SAAS,CAAqB,OAAiB,YAAyB;AACnF,SAAO,WAAW,OAAO,CAAC,OAAO,CAAC;AACpC;AAEO,IAAM,eAAe,CAAI,OAAiB,SAAY,cAAqC;AAChG,SAAO,MAAM,KAAK,CAAC,OAAO,UAAU,IAAI,OAAO,CAAC;AAClD;AAIO,SAAS,WAAiB,OAAiB,SAAY,QAA2B,WAAmC;AAC1H,MAAI,MAAM,SAAS,GAAG;AACpB,WAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA,iBAAiB,CAAC,OAAO,KAAK,OAAO,EAAE,CAAa,GAAG,gBAAgB,CAAC;AAAA,IAC1E;AAAA,EACF,OAAO;AACL,WAAO,aAAa,OAAO,SAAS,iBAAiB,QAAQ,SAAS,CAAC;AAAA,EACzE;AACF;AAEO,IAAM,WAAW,CAAqB,OAAiB,YAAwB,WAAW,OAAO,SAAS,IAAI;AAE9G,IAAM,kBAAkB,CAAIA,QAAiB,QAAkB,cACpE,QAAQ,eAAe,QAAQA,QAAO,SAAS,CAAC;AAI3C,SAAS,cAAoBA,QAAiB,QAAkB,QAA2B,WAAmC;AACnI,SAAO,QAAQ,aAAa,QAAQA,QAAO,QAAQ,SAAgB,CAAC;AACtE;AAEO,IAAM,cAAc,CAAqBA,QAAiB,WAA8B,QAAQ,WAAW,QAAQA,MAAK,CAAC;AAEzH,IAAM,aAAa,CAAI,OAAiB,cAAsC;AACnF,QAAM,SAAmB,CAAC;AAE1B,aAAW,WAAW,OAAO;AAC3B,UAAM,cAAc,OAAO,KAAK,CAAC,aAAa,UAAU,UAAU,OAAO,CAAC;AAC1E,QAAI,CAAC,aAAa;AAChB,aAAO,KAAK,OAAO;AAAA,IACrB;AAAA,EACF;AAEA,SAAO;AACT;AAIO,SAAS,SAAe,OAAiB,QAA2B,WAAoC;AAC7G,MAAI,MAAM,SAAS,GAAG;AACpB,WAAO,WAAW,OAAO,iBAAiB,QAAe,gBAAgB,CAAC,CAAC;AAAA,EAC7E,OAAO;AACL,WAAO,WAAW,OAAO,iBAAiB,QAAQ,SAAS,CAAC;AAAA,EAC9D;AACF;AAEO,IAAM,SAAS,CAAqB,UAA8B;AACvE,SAAO,SAAS,OAAO,IAAI;AAC7B;AAEO,IAAM,WAAW,CAAI,OAAiB,eAAwC;AACnF,SAAO,CAAC,GAAG,KAAK,EAAE,KAAK,UAAU;AACnC;AAIO,SAAS,OAAa,OAAiB,QAA2B,YAAsC;AAC7G,MAAI,MAAM,UAAU,GAAG;AACrB,WAAO;AAAA,MACL;AAAA,MACA,UAAU,CAAC,OAAO,KAAK,OAAO,EAAS,CAAc,GAAG,kBAAkB,CAAC;AAAA,IAC7E;AAAA,EACF,OAAO;AACL,WAAO,SAAS,OAAO,UAAU,QAAQ,UAAU,CAAC;AAAA,EACtD;AACF;AAEO,IAAM,OAAO,CAAqB,UAA8B,OAAO,OAAO,IAAI;AAElF,IAAM,cAAc,CAAI,UAAoB,WAA0C;AAC3F,QAAM,SAAS,CAAC,GAAG,KAAK;AAExB,aAAW,SAAS,QAAQ;AAC1B,QAAI,MAAM,QAAQ,KAAK,GAAG;AACxB,aAAO,KAAK,GAAG,KAAK;AAAA,IACtB,OAAO;AACL,aAAO,KAAK,KAAK;AAAA,IACnB;AAAA,EACF;AAEA,SAAO;AACT;AAEO,IAAM,QAAQ,CAAI,UAAmC;AAC1D,SAAO,MAAM,SAAS,IAAI,MAAM,CAAC,IAAI;AACvC;AAEO,IAAM,OAAO,CAAI,UAAuB;AAC7C,SAAO,MAAM,WAAW,CAAC;AACzB,SAAO,MAAM,KAAK;AACpB;AAEO,IAAM,OAAO,CAAI,UAAmC;AACzD,SAAO,MAAM,SAAS,IAAI,MAAM,MAAM,SAAS,CAAC,IAAI;AACtD;AAEO,IAAM,UAAU,CAAI,UAA6B;AACtD,SAAO,MAAM,WAAW;AAC1B;AAGO,SAAS,QAA+C,OAAiB,UAA6C;AAC3H,SAAO,MAAM,OAA4B,CAAC,QAAQ,UAAU;AAC1D,UAAM,MAAM,SAAS,KAAK;AAE1B,QAAI,CAAC,OAAO,GAAG,GAAG;AAChB,aAAO,GAAG,IAAI,CAAC;AAAA,IACjB;AAEA,WAAO,GAAG,EAAE,KAAK,KAAK;AACtB,WAAO;AAAA,EACT,GAAG,CAAC,CAAQ;AACd;AAEO,IAAM,OAAO,CAAI,OAAiB,iBAAyB,MAAgB;AAChF,SAAO,MAAM,MAAM,cAAc;AACnC;AAEO,IAAM,gBAAgB,CAAI,OAAiB,cAA2E;AAC3H,WAAS,IAAI,MAAM,SAAS,GAAG,KAAK,GAAG,KAAK;AAC1C,UAAM,QAAQ,MAAM,CAAC;AACrB,QAAI,UAAU,UAAa,CAAC,UAAU,OAAO,GAAG,KAAK,GAAG;AACtD,YAAM,OAAO,GAAG,CAAC;AAAA,IACnB;AAAA,EACF;AACF;AAEO,IAAM,QAAQ,CAAC,UAAgC;AACpD,gBAAc,OAAO,MAAM,KAAK;AAClC;AAEO,IAAM,SAAS,CAAU,OAAiB,aAAgF;AAC/H,SAAO,MAAM,MAAM,IAAI,QAAQ,CAAC;AAClC;AAEO,IAAM,UAAU,CAAI,UAAkC;AAC3D,MAAI,MAAM,QAAQ,KAAK,GAAG;AACxB,WAAO;AAAA,EACT;AAEA,SAAO,CAAC,KAAK;AACf;AAEO,IAAM,UAAU,CAAI,UAAqC;AAC9D,SAAO,MAAM,QAAQ,CAAC,OAAO,EAAE;AACjC;","names":["first"]}
|
package/dist/aspect-ratio.d.ts
CHANGED
|
@@ -5,7 +5,7 @@ import { ErrorEvent } from '@bessemer/cornerstone/error/error-event';
|
|
|
5
5
|
export declare const Namespace: import("@bessemer/cornerstone/resource-key").ResourceNamespace<"aspect-ratio">;
|
|
6
6
|
export type AspectRatio = NominalType<string, typeof Namespace>;
|
|
7
7
|
export declare const parseString: (value: string) => Result<AspectRatio, ErrorEvent>;
|
|
8
|
-
export declare const
|
|
8
|
+
export declare const from: (value: string) => AspectRatio;
|
|
9
9
|
export declare const Schema: Zod.ZodPipe<Zod.ZodString, Zod.ZodTransform<AspectRatio, string>>;
|
|
10
10
|
export declare const fromDimensions: (width: number, height: number) => AspectRatio;
|
|
11
11
|
export declare const numericValue: (aspectRatio: AspectRatio) => number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"aspect-ratio.d.ts","sourceRoot":"","sources":["../src/aspect-ratio.ts"],"names":[],"mappings":"AAAA,OAAO,GAAG,MAAM,KAAK,CAAA;AAErB,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAA;AACzD,OAAO,EAAW,MAAM,EAAW,MAAM,8BAA8B,CAAA;AACvE,OAAO,EAAE,UAAU,EAA8B,MAAM,yCAAyC,CAAA;AAIhG,eAAO,MAAM,SAAS,
|
|
1
|
+
{"version":3,"file":"aspect-ratio.d.ts","sourceRoot":"","sources":["../src/aspect-ratio.ts"],"names":[],"mappings":"AAAA,OAAO,GAAG,MAAM,KAAK,CAAA;AAErB,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAA;AACzD,OAAO,EAAW,MAAM,EAAW,MAAM,8BAA8B,CAAA;AACvE,OAAO,EAAE,UAAU,EAA8B,MAAM,yCAAyC,CAAA;AAIhG,eAAO,MAAM,SAAS,gFAAkC,CAAA;AACxD,MAAM,MAAM,WAAW,GAAG,WAAW,CAAC,MAAM,EAAE,OAAO,SAAS,CAAC,CAAA;AAE/D,eAAO,MAAM,WAAW,GAAI,OAAO,MAAM,KAAG,MAAM,CAAC,WAAW,EAAE,UAAU,CAMzE,CAAA;AAED,eAAO,MAAM,IAAI,GAAI,OAAO,MAAM,KAAG,WAEpC,CAAA;AAED,eAAO,MAAM,MAAM,mEAAiD,CAAA;AAEpE,eAAO,MAAM,cAAc,GAAI,OAAO,MAAM,EAAE,QAAQ,MAAM,KAAG,WAK9D,CAAA;AAED,eAAO,MAAM,YAAY,GAAI,aAAa,WAAW,KAAG,MAGvD,CAAA;AAED,eAAO,MAAM,eAAe,GAAI,OAAO,MAAM,EAAE,aAAa,WAAW,KAAG,MAGzE,CAAA;AAED,eAAO,MAAM,cAAc,GAAI,QAAQ,MAAM,EAAE,aAAa,WAAW,KAAG,MAGzE,CAAA"}
|
package/dist/aspect-ratio.js
CHANGED
|
@@ -3,16 +3,16 @@ import Zod from "zod";
|
|
|
3
3
|
import { greatestCommonFactor } from "@bessemer/cornerstone/math";
|
|
4
4
|
import { failure, success } from "@bessemer/cornerstone/result";
|
|
5
5
|
import { invalidValue, unpackResult } from "@bessemer/cornerstone/error/error-event";
|
|
6
|
-
import {
|
|
6
|
+
import { createNamespace } from "@bessemer/cornerstone/resource-key";
|
|
7
7
|
import { structuredTransform } from "@bessemer/cornerstone/zod-util";
|
|
8
|
-
var Namespace =
|
|
8
|
+
var Namespace = createNamespace("aspect-ratio");
|
|
9
9
|
var parseString = (value) => {
|
|
10
10
|
if (!/^[1-9]\d*:[1-9]\d*$/.test(value)) {
|
|
11
11
|
return failure(invalidValue(value, { namespace: Namespace, message: `Aspect Ratio must be in the format 'width:height' (e.g., '16:9', '4:3').` }));
|
|
12
12
|
}
|
|
13
13
|
return success(value);
|
|
14
14
|
};
|
|
15
|
-
var
|
|
15
|
+
var from = (value) => {
|
|
16
16
|
return unpackResult(parseString(value));
|
|
17
17
|
};
|
|
18
18
|
var Schema = structuredTransform(Zod.string(), parseString);
|
|
@@ -39,8 +39,8 @@ export {
|
|
|
39
39
|
Schema,
|
|
40
40
|
calculateHeight,
|
|
41
41
|
calculateWidth,
|
|
42
|
+
from,
|
|
42
43
|
fromDimensions,
|
|
43
|
-
fromString,
|
|
44
44
|
numericValue,
|
|
45
45
|
parseString
|
|
46
46
|
};
|
package/dist/aspect-ratio.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/aspect-ratio.ts"],"sourcesContent":["import Zod from 'zod'\nimport { greatestCommonFactor } from '@bessemer/cornerstone/math'\nimport { NominalType } from '@bessemer/cornerstone/types'\nimport { failure, Result, success } from '@bessemer/cornerstone/result'\nimport { ErrorEvent, invalidValue, unpackResult } from '@bessemer/cornerstone/error/error-event'\nimport {
|
|
1
|
+
{"version":3,"sources":["../src/aspect-ratio.ts"],"sourcesContent":["import Zod from 'zod'\nimport { greatestCommonFactor } from '@bessemer/cornerstone/math'\nimport { NominalType } from '@bessemer/cornerstone/types'\nimport { failure, Result, success } from '@bessemer/cornerstone/result'\nimport { ErrorEvent, invalidValue, unpackResult } from '@bessemer/cornerstone/error/error-event'\nimport { createNamespace } from '@bessemer/cornerstone/resource-key'\nimport { structuredTransform } from '@bessemer/cornerstone/zod-util'\n\nexport const Namespace = createNamespace('aspect-ratio')\nexport type AspectRatio = NominalType<string, typeof Namespace>\n\nexport const parseString = (value: string): Result<AspectRatio, ErrorEvent> => {\n if (!/^[1-9]\\d*:[1-9]\\d*$/.test(value)) {\n return failure(invalidValue(value, { namespace: Namespace, message: `Aspect Ratio must be in the format 'width:height' (e.g., '16:9', '4:3').` }))\n }\n\n return success(value as AspectRatio)\n}\n\nexport const from = (value: string): AspectRatio => {\n return unpackResult(parseString(value))\n}\n\nexport const Schema = structuredTransform(Zod.string(), parseString)\n\nexport const fromDimensions = (width: number, height: number): AspectRatio => {\n const factor = greatestCommonFactor(width, height)\n const ratioWidth = width / factor\n const ratioHeight = height / factor\n return `${ratioWidth}:${ratioHeight}` as AspectRatio\n}\n\nexport const numericValue = (aspectRatio: AspectRatio): number => {\n const [width, height] = aspectRatio.split(':').map(Number)\n return width! / height!\n}\n\nexport const calculateHeight = (width: number, aspectRatio: AspectRatio): number => {\n const ratio = numericValue(aspectRatio)\n return width / ratio\n}\n\nexport const calculateWidth = (height: number, aspectRatio: AspectRatio): number => {\n const ratio = numericValue(aspectRatio)\n return height * ratio\n}\n"],"mappings":";AAAA,OAAO,SAAS;AAChB,SAAS,4BAA4B;AAErC,SAAS,SAAiB,eAAe;AACzC,SAAqB,cAAc,oBAAoB;AACvD,SAAS,uBAAuB;AAChC,SAAS,2BAA2B;AAE7B,IAAM,YAAY,gBAAgB,cAAc;AAGhD,IAAM,cAAc,CAAC,UAAmD;AAC7E,MAAI,CAAC,sBAAsB,KAAK,KAAK,GAAG;AACtC,WAAO,QAAQ,aAAa,OAAO,EAAE,WAAW,WAAW,SAAS,2EAA2E,CAAC,CAAC;AAAA,EACnJ;AAEA,SAAO,QAAQ,KAAoB;AACrC;AAEO,IAAM,OAAO,CAAC,UAA+B;AAClD,SAAO,aAAa,YAAY,KAAK,CAAC;AACxC;AAEO,IAAM,SAAS,oBAAoB,IAAI,OAAO,GAAG,WAAW;AAE5D,IAAM,iBAAiB,CAAC,OAAe,WAAgC;AAC5E,QAAM,SAAS,qBAAqB,OAAO,MAAM;AACjD,QAAM,aAAa,QAAQ;AAC3B,QAAM,cAAc,SAAS;AAC7B,SAAO,GAAG,UAAU,IAAI,WAAW;AACrC;AAEO,IAAM,eAAe,CAAC,gBAAqC;AAChE,QAAM,CAAC,OAAO,MAAM,IAAI,YAAY,MAAM,GAAG,EAAE,IAAI,MAAM;AACzD,SAAO,QAAS;AAClB;AAEO,IAAM,kBAAkB,CAAC,OAAe,gBAAqC;AAClF,QAAM,QAAQ,aAAa,WAAW;AACtC,SAAO,QAAQ;AACjB;AAEO,IAAM,iBAAiB,CAAC,QAAgB,gBAAqC;AAClF,QAAM,QAAQ,aAAa,WAAW;AACtC,SAAO,SAAS;AAClB;","names":[]}
|
package/dist/async-value.d.ts
CHANGED
|
@@ -43,11 +43,19 @@ export type SettledValue<T> = {
|
|
|
43
43
|
};
|
|
44
44
|
export type AsyncValue<T> = PendingValue | LoadingValue | ErrorValue | FetchingValueSuccess<T> | FetchingValueError | SettledValue<T>;
|
|
45
45
|
export declare const schema: <T extends ZodType>(_: T) => ZodType<AsyncValue<Zod.infer<T>>>;
|
|
46
|
+
export declare const pending: () => PendingValue;
|
|
47
|
+
export declare const isPending: (value: AsyncValue<unknown>) => value is PendingValue;
|
|
48
|
+
export declare function assertPending<T>(value: AsyncValue<T>): asserts value is PendingValue;
|
|
49
|
+
export declare const settled: <T>(data: T) => SettledValue<T>;
|
|
46
50
|
export declare const isSettled: <T>(value: AsyncValue<T>) => value is SettledValue<T>;
|
|
51
|
+
export declare function assertSettled<T>(value: AsyncValue<T>): asserts value is SettledValue<T>;
|
|
47
52
|
export declare const loading: () => LoadingValue;
|
|
48
|
-
export declare const
|
|
49
|
-
export declare
|
|
53
|
+
export declare const isLoading: <T>(value: AsyncValue<T>) => value is LoadingValue;
|
|
54
|
+
export declare function assertLoading<T>(value: AsyncValue<T>): asserts value is LoadingValue;
|
|
50
55
|
export declare const error: (error: unknown) => ErrorValue;
|
|
56
|
+
export declare const isError: <T>(value: AsyncValue<T>) => value is ErrorValue;
|
|
57
|
+
export declare function assertError<T>(value: AsyncValue<T>): asserts value is ErrorValue;
|
|
58
|
+
export declare const fetching: <T>(data: T) => FetchingValueSuccess<T>;
|
|
51
59
|
export declare const handle: <T, N>(value: AsyncValue<T | null>, handlers: {
|
|
52
60
|
loading: () => N;
|
|
53
61
|
error: (error: unknown) => N;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"async-value.d.ts","sourceRoot":"","sources":["../src/async-value.ts"],"names":[],"mappings":"AAAA,OAAO,GAAG,EAAE,EAAE,OAAO,EAAE,MAAM,KAAK,CAAA;
|
|
1
|
+
{"version":3,"file":"async-value.d.ts","sourceRoot":"","sources":["../src/async-value.ts"],"names":[],"mappings":"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"}
|
package/dist/async-value.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
// src/async-value.ts
|
|
2
2
|
import Zod from "zod";
|
|
3
3
|
import { isNil } from "@bessemer/cornerstone/object";
|
|
4
|
+
import * as Assertions from "@bessemer/cornerstone/assertion";
|
|
4
5
|
var schema = (_) => {
|
|
5
6
|
return Zod.object({
|
|
6
7
|
isSuccess: Zod.boolean(),
|
|
@@ -10,10 +11,34 @@ var schema = (_) => {
|
|
|
10
11
|
data: Zod.unknown()
|
|
11
12
|
});
|
|
12
13
|
};
|
|
14
|
+
var pending = () => ({ isSuccess: false, isError: false, isLoading: false, isFetching: false, data: void 0 });
|
|
15
|
+
var isPending = (value) => {
|
|
16
|
+
return !value.isLoading && !value.isSuccess && !value.isError && !value.isFetching;
|
|
17
|
+
};
|
|
18
|
+
function assertPending(value) {
|
|
19
|
+
Assertions.assert(isPending(value));
|
|
20
|
+
}
|
|
21
|
+
var settled = (data) => ({ isSuccess: true, isError: false, isLoading: false, isFetching: false, data });
|
|
13
22
|
var isSettled = (value) => {
|
|
14
23
|
return value.isSuccess && !value.isError && !value.isLoading && !value.isFetching;
|
|
15
24
|
};
|
|
25
|
+
function assertSettled(value) {
|
|
26
|
+
Assertions.assert(isSettled(value));
|
|
27
|
+
}
|
|
16
28
|
var loading = () => ({ isSuccess: false, isError: false, isLoading: true, isFetching: true, data: void 0 });
|
|
29
|
+
var isLoading = (value) => {
|
|
30
|
+
return value.isLoading;
|
|
31
|
+
};
|
|
32
|
+
function assertLoading(value) {
|
|
33
|
+
Assertions.assert(isLoading(value));
|
|
34
|
+
}
|
|
35
|
+
var error = (error2) => ({ isSuccess: false, isError: true, isLoading: false, isFetching: false, data: error2 });
|
|
36
|
+
var isError = (value) => {
|
|
37
|
+
return value.isError;
|
|
38
|
+
};
|
|
39
|
+
function assertError(value) {
|
|
40
|
+
Assertions.assert(isError(value));
|
|
41
|
+
}
|
|
17
42
|
var fetching = (data) => ({
|
|
18
43
|
isSuccess: true,
|
|
19
44
|
isError: false,
|
|
@@ -21,8 +46,6 @@ var fetching = (data) => ({
|
|
|
21
46
|
isFetching: true,
|
|
22
47
|
data
|
|
23
48
|
});
|
|
24
|
-
var settled = (data) => ({ isSuccess: true, isError: false, isLoading: false, isFetching: false, data });
|
|
25
|
-
var error = (error2) => ({ isSuccess: false, isError: true, isLoading: false, isFetching: false, data: error2 });
|
|
26
49
|
var handle = (value, handlers) => {
|
|
27
50
|
if (value.isLoading || value.isError && value.isFetching) {
|
|
28
51
|
return handlers.loading();
|
|
@@ -42,12 +65,20 @@ var map = (value, mapper) => {
|
|
|
42
65
|
return { ...value, data: mapper(value.data) };
|
|
43
66
|
};
|
|
44
67
|
export {
|
|
68
|
+
assertError,
|
|
69
|
+
assertLoading,
|
|
70
|
+
assertPending,
|
|
71
|
+
assertSettled,
|
|
45
72
|
error,
|
|
46
73
|
fetching,
|
|
47
74
|
handle,
|
|
75
|
+
isError,
|
|
76
|
+
isLoading,
|
|
77
|
+
isPending,
|
|
48
78
|
isSettled,
|
|
49
79
|
loading,
|
|
50
80
|
map,
|
|
81
|
+
pending,
|
|
51
82
|
schema,
|
|
52
83
|
settled
|
|
53
84
|
};
|
package/dist/async-value.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/async-value.ts"],"sourcesContent":["import Zod, { ZodType } from 'zod'\nimport { isNil } from '@bessemer/cornerstone/object'\n\nexport type PendingValue = {\n isSuccess: false\n isError: false\n isLoading: false\n isFetching: boolean\n data: undefined\n}\n\nexport type LoadingValue = {\n isSuccess: false\n isError: false\n isLoading: true\n isFetching: boolean\n data: undefined\n}\n\nexport type ErrorValue = {\n isSuccess: false\n isError: true\n isLoading: false\n isFetching: boolean\n data: unknown\n}\n\nexport type FetchingValueSuccess<T> = {\n isSuccess: true\n isError: false\n isLoading: false\n isFetching: true\n data: T\n}\n\nexport type FetchingValueError = {\n isSuccess: false\n isError: true\n isLoading: false\n isFetching: true\n data: unknown\n}\n\nexport type SettledValue<T> = {\n isSuccess: true\n isError: false\n isLoading: false\n isFetching: false\n data: T\n}\n\nexport type AsyncValue<T> = PendingValue | LoadingValue | ErrorValue | FetchingValueSuccess<T> | FetchingValueError | SettledValue<T>\n\nexport const schema = <T extends ZodType>(_: T): ZodType<AsyncValue<Zod.infer<T>>> => {\n return Zod.object({\n isSuccess: Zod.boolean(),\n isError: Zod.boolean(),\n isLoading: Zod.boolean(),\n isFetching: Zod.boolean(),\n data: Zod.unknown(),\n }) as any\n}\n\nexport const
|
|
1
|
+
{"version":3,"sources":["../src/async-value.ts"],"sourcesContent":["import Zod, { ZodType } from 'zod'\nimport { isNil } from '@bessemer/cornerstone/object'\nimport * as Assertions from '@bessemer/cornerstone/assertion'\n\nexport type PendingValue = {\n isSuccess: false\n isError: false\n isLoading: false\n isFetching: boolean\n data: undefined\n}\n\nexport type LoadingValue = {\n isSuccess: false\n isError: false\n isLoading: true\n isFetching: boolean\n data: undefined\n}\n\nexport type ErrorValue = {\n isSuccess: false\n isError: true\n isLoading: false\n isFetching: boolean\n data: unknown\n}\n\nexport type FetchingValueSuccess<T> = {\n isSuccess: true\n isError: false\n isLoading: false\n isFetching: true\n data: T\n}\n\nexport type FetchingValueError = {\n isSuccess: false\n isError: true\n isLoading: false\n isFetching: true\n data: unknown\n}\n\nexport type SettledValue<T> = {\n isSuccess: true\n isError: false\n isLoading: false\n isFetching: false\n data: T\n}\n\nexport type AsyncValue<T> = PendingValue | LoadingValue | ErrorValue | FetchingValueSuccess<T> | FetchingValueError | SettledValue<T>\n\nexport const schema = <T extends ZodType>(_: T): ZodType<AsyncValue<Zod.infer<T>>> => {\n return Zod.object({\n isSuccess: Zod.boolean(),\n isError: Zod.boolean(),\n isLoading: Zod.boolean(),\n isFetching: Zod.boolean(),\n data: Zod.unknown(),\n }) as any\n}\n\nexport const pending = (): PendingValue => ({ isSuccess: false, isError: false, isLoading: false, isFetching: false, data: undefined })\n\nexport const isPending = (value: AsyncValue<unknown>): value is PendingValue => {\n return !value.isLoading && !value.isSuccess && !value.isError && !value.isFetching\n}\n\nexport function assertPending<T>(value: AsyncValue<T>): asserts value is PendingValue {\n Assertions.assert(isPending(value))\n}\n\nexport const settled = <T>(data: T): SettledValue<T> => ({ isSuccess: true, isError: false, isLoading: false, isFetching: false, data })\n\nexport const isSettled = <T>(value: AsyncValue<T>): value is SettledValue<T> => {\n return value.isSuccess && !value.isError && !value.isLoading && !value.isFetching\n}\n\nexport function assertSettled<T>(value: AsyncValue<T>): asserts value is SettledValue<T> {\n Assertions.assert(isSettled(value))\n}\n\nexport const loading = (): LoadingValue => ({ isSuccess: false, isError: false, isLoading: true, isFetching: true, data: undefined })\n\nexport const isLoading = <T>(value: AsyncValue<T>): value is LoadingValue => {\n return value.isLoading\n}\n\nexport function assertLoading<T>(value: AsyncValue<T>): asserts value is LoadingValue {\n Assertions.assert(isLoading(value))\n}\n\nexport const error = (error: unknown): ErrorValue => ({ isSuccess: false, isError: true, isLoading: false, isFetching: false, data: error })\n\nexport const isError = <T>(value: AsyncValue<T>): value is ErrorValue => {\n return value.isError\n}\n\nexport function assertError<T>(value: AsyncValue<T>): asserts value is ErrorValue {\n Assertions.assert(isError(value))\n}\n\nexport const fetching = <T>(data: T): FetchingValueSuccess<T> => ({\n isSuccess: true,\n isError: false,\n isLoading: false,\n isFetching: true,\n data,\n})\n\nexport const handle = <T, N>(\n value: AsyncValue<T | null>,\n handlers: { loading: () => N; error: (error: unknown) => N; absent: () => N; success: (data: T) => N }\n): N => {\n if (value.isLoading || (value.isError && value.isFetching)) {\n return handlers.loading()\n }\n if (value.isError) {\n return handlers.error(value.data)\n }\n if (isNil(value.data)) {\n return handlers.absent()\n }\n\n return handlers.success(value.data)\n}\n\nexport const map = <T, N>(value: AsyncValue<T>, mapper: (value: T) => N): AsyncValue<N> => {\n if (!value.isSuccess) {\n return value\n }\n\n return { ...value, data: mapper(value.data) }\n}\n"],"mappings":";AAAA,OAAO,SAAsB;AAC7B,SAAS,aAAa;AACtB,YAAY,gBAAgB;AAoDrB,IAAM,SAAS,CAAoB,MAA4C;AACpF,SAAO,IAAI,OAAO;AAAA,IAChB,WAAW,IAAI,QAAQ;AAAA,IACvB,SAAS,IAAI,QAAQ;AAAA,IACrB,WAAW,IAAI,QAAQ;AAAA,IACvB,YAAY,IAAI,QAAQ;AAAA,IACxB,MAAM,IAAI,QAAQ;AAAA,EACpB,CAAC;AACH;AAEO,IAAM,UAAU,OAAqB,EAAE,WAAW,OAAO,SAAS,OAAO,WAAW,OAAO,YAAY,OAAO,MAAM,OAAU;AAE9H,IAAM,YAAY,CAAC,UAAsD;AAC9E,SAAO,CAAC,MAAM,aAAa,CAAC,MAAM,aAAa,CAAC,MAAM,WAAW,CAAC,MAAM;AAC1E;AAEO,SAAS,cAAiB,OAAqD;AACpF,EAAW,kBAAO,UAAU,KAAK,CAAC;AACpC;AAEO,IAAM,UAAU,CAAI,UAA8B,EAAE,WAAW,MAAM,SAAS,OAAO,WAAW,OAAO,YAAY,OAAO,KAAK;AAE/H,IAAM,YAAY,CAAI,UAAmD;AAC9E,SAAO,MAAM,aAAa,CAAC,MAAM,WAAW,CAAC,MAAM,aAAa,CAAC,MAAM;AACzE;AAEO,SAAS,cAAiB,OAAwD;AACvF,EAAW,kBAAO,UAAU,KAAK,CAAC;AACpC;AAEO,IAAM,UAAU,OAAqB,EAAE,WAAW,OAAO,SAAS,OAAO,WAAW,MAAM,YAAY,MAAM,MAAM,OAAU;AAE5H,IAAM,YAAY,CAAI,UAAgD;AAC3E,SAAO,MAAM;AACf;AAEO,SAAS,cAAiB,OAAqD;AACpF,EAAW,kBAAO,UAAU,KAAK,CAAC;AACpC;AAEO,IAAM,QAAQ,CAACA,YAAgC,EAAE,WAAW,OAAO,SAAS,MAAM,WAAW,OAAO,YAAY,OAAO,MAAMA,OAAM;AAEnI,IAAM,UAAU,CAAI,UAA8C;AACvE,SAAO,MAAM;AACf;AAEO,SAAS,YAAe,OAAmD;AAChF,EAAW,kBAAO,QAAQ,KAAK,CAAC;AAClC;AAEO,IAAM,WAAW,CAAI,UAAsC;AAAA,EAChE,WAAW;AAAA,EACX,SAAS;AAAA,EACT,WAAW;AAAA,EACX,YAAY;AAAA,EACZ;AACF;AAEO,IAAM,SAAS,CACpB,OACA,aACM;AACN,MAAI,MAAM,aAAc,MAAM,WAAW,MAAM,YAAa;AAC1D,WAAO,SAAS,QAAQ;AAAA,EAC1B;AACA,MAAI,MAAM,SAAS;AACjB,WAAO,SAAS,MAAM,MAAM,IAAI;AAAA,EAClC;AACA,MAAI,MAAM,MAAM,IAAI,GAAG;AACrB,WAAO,SAAS,OAAO;AAAA,EACzB;AAEA,SAAO,SAAS,QAAQ,MAAM,IAAI;AACpC;AAEO,IAAM,MAAM,CAAO,OAAsB,WAA2C;AACzF,MAAI,CAAC,MAAM,WAAW;AACpB,WAAO;AAAA,EACT;AAEA,SAAO,EAAE,GAAG,OAAO,MAAM,OAAO,MAAM,IAAI,EAAE;AAC9C;","names":["error"]}
|
package/dist/cache.js
CHANGED
|
@@ -28,7 +28,7 @@ var CacheSector;
|
|
|
28
28
|
return { globs: toArray(globs) };
|
|
29
29
|
};
|
|
30
30
|
CacheSector2.namespace = (namespace2, sector) => {
|
|
31
|
-
return { globs: ResourceKeys.
|
|
31
|
+
return { globs: ResourceKeys.namespaceKeys(sector.globs, namespace2).map((it) => it) };
|
|
32
32
|
};
|
|
33
33
|
})(CacheSector || (CacheSector = {}));
|
|
34
34
|
var CacheNameSchema = Zod.string();
|
package/dist/cache.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/cache.ts"],"sourcesContent":["import { AbstractLocalKeyValueStore, AbstractRemoteKeyValueStore, LocalKeyValueStore, RemoteKeyValueStore } from '@bessemer/cornerstone/store'\nimport { Duration, OneDay, OneHour } from '@bessemer/cornerstone/temporal/duration'\nimport { ResourceKey, ResourceNamespace } from '@bessemer/cornerstone/resource-key'\nimport { AbstractApplicationContext } from '@bessemer/cornerstone/context'\nimport { TaggedType } from '@bessemer/cornerstone/types'\nimport { RecordEntry } from '@bessemer/cornerstone/entry'\nimport { GlobPattern } from '@bessemer/cornerstone/glob'\nimport { Arrayable } from 'type-fest'\nimport Zod, { ZodType } from 'zod'\nimport { deepMerge, isNil } from '@bessemer/cornerstone/object'\nimport { toArray } from '@bessemer/cornerstone/array'\nimport { Arrays, Entries, ResourceKeys } from '@bessemer/cornerstone'\nimport * as Instants from '@bessemer/cornerstone/temporal/instant'\nimport { InstantLiteral } from '@bessemer/cornerstone/temporal/instant'\n\nexport type CacheProps = {\n maxSize: number | null\n timeToLive: Duration\n timeToStale: Duration | null\n}\n\nexport type CacheOptions = Partial<CacheProps>\n\nexport namespace CacheProps {\n const DefaultCacheProps = {\n maxSize: 50000,\n timeToLive: OneDay,\n timeToStale: OneHour,\n }\n\n export const buildCacheProps = (options?: CacheOptions): CacheProps => {\n options = options ?? {}\n\n const props = deepMerge(DefaultCacheProps, options)\n\n if (props.maxSize === null && props.timeToLive === null) {\n throw new Error('Invalid cache configuration, both maxSize and timeToLive are null')\n }\n\n return props\n }\n}\n\nexport type CacheSector = {\n globs: Array<GlobPattern>\n}\n\nexport namespace CacheSector {\n export const of = (globs: Arrayable<GlobPattern>) => {\n return { globs: toArray(globs) }\n }\n\n export const namespace = (namespace: ResourceNamespace, sector: CacheSector): CacheSector => {\n return { globs: ResourceKeys.applyNamespaceAll(sector.globs, namespace).map((it) => it as string as GlobPattern) }\n }\n}\n\nexport type CacheName = TaggedType<string, 'CacheName'>\nexport const CacheNameSchema: ZodType<CacheName> = Zod.string()\n\nexport interface AsyncCache<T> {\n name: CacheName\n\n fetchValue(key: ResourceKey, fetch: () => Promise<T>): Promise<T>\n\n fetchValues(keys: Array<ResourceKey>, fetch: (keys: Array<ResourceKey>) => Promise<Array<RecordEntry<T>>>): Promise<Array<RecordEntry<T>>>\n\n writeValue(key: ResourceKey, value: T | undefined): Promise<void>\n\n writeValues(entries: Array<RecordEntry<T | undefined>>): Promise<void>\n\n evictAll(sector: CacheSector): Promise<void>\n}\n\nexport abstract class AbstractAsyncCache<T> implements AsyncCache<T> {\n abstract name: CacheName\n\n fetchValue = async (key: ResourceKey, fetch: () => Promise<T>): Promise<T> => {\n const results = await this.fetchValues([key], async () => {\n return [Entries.of(key, await fetch())]\n })\n\n return Arrays.first(results)![1]\n }\n\n abstract fetchValues(keys: Array<ResourceKey>, fetch: (keys: Array<ResourceKey>) => Promise<RecordEntry<T>[]>): Promise<RecordEntry<T>[]>\n\n writeValue = async (key: ResourceKey, value: T | undefined): Promise<void> => {\n await this.writeValues([Entries.of(key, value)])\n }\n\n abstract writeValues(entries: RecordEntry<T | undefined>[]): Promise<void>\n\n abstract evictAll(sector: CacheSector): Promise<void>\n}\n\nexport interface CacheProvider<T> extends RemoteKeyValueStore<CacheEntry<T>> {\n type: CacheProviderType\n\n evictAll(sector: CacheSector): Promise<void>\n}\n\nexport abstract class AbstractCacheProvider<T> extends AbstractRemoteKeyValueStore<CacheEntry<T>> implements CacheProvider<T> {\n abstract type: CacheProviderType\n\n abstract evictAll(sector: CacheSector): Promise<void>\n}\n\nexport interface LocalCache<T> {\n name: CacheName\n\n getValue(key: ResourceKey, fetch: () => T): T\n\n getValues(keys: Array<ResourceKey>, fetch: (keys: Array<ResourceKey>) => Array<RecordEntry<T>>): Array<RecordEntry<T>>\n\n setValue(key: ResourceKey, value: T | undefined): void\n\n setValues(entries: Array<RecordEntry<T | undefined>>): void\n\n removeAll(sector: CacheSector): void\n}\n\nexport interface LocalCacheProvider<T> extends LocalKeyValueStore<CacheEntry<T>>, CacheProvider<T> {\n removeAll(sector: CacheSector): void\n}\n\nexport abstract class AbstractLocalCacheProvider<T> extends AbstractLocalKeyValueStore<CacheEntry<T>> implements LocalCacheProvider<T> {\n abstract type: CacheProviderType\n\n abstract removeAll(sector: CacheSector): void\n\n async evictAll(sector: CacheSector): Promise<void> {\n this.removeAll(sector)\n }\n}\n\nexport type CacheEntry<T> = {\n value: T\n liveTimestamp: InstantLiteral | null\n staleTimestamp: InstantLiteral | null\n}\n\nexport namespace CacheEntry {\n export const isActive = <T>(entry: CacheEntry<T>): boolean => {\n if (isDead(entry) || isStale(entry)) {\n return false\n }\n\n return true\n }\n\n export const isDead = <T>(entry: CacheEntry<T> | undefined): boolean => {\n if (isNil(entry)) {\n return true\n }\n\n if (isNil(entry.liveTimestamp)) {\n return false\n }\n\n return Instants.isBefore(entry.liveTimestamp, Instants.now())\n }\n\n export const isAlive = <T>(entry: CacheEntry<T> | undefined): boolean => !isDead(entry)\n\n export const isStale = <T>(entry: CacheEntry<T>): boolean => {\n if (isNil(entry.staleTimestamp)) {\n return false\n }\n\n return Instants.isBefore(entry.staleTimestamp, Instants.now())\n }\n\n export const of = <T>(value: T) => {\n const entry: CacheEntry<T> = {\n value,\n liveTimestamp: null,\n staleTimestamp: null,\n }\n\n return entry\n }\n\n // JOHN do we want to enforce some kind of minimum liveness threshold?\n export const applyProps = <T>(originalEntry: CacheEntry<T>, props: CacheProps): CacheEntry<T> => {\n let liveTimestamp: InstantLiteral | null = originalEntry.liveTimestamp\n if (!isNil(props.timeToLive)) {\n const limit = Instants.add(Instants.now(), props.timeToLive)\n if (Instants.isBefore(limit, liveTimestamp ?? limit)) {\n liveTimestamp = Instants.toLiteral(limit)\n }\n }\n\n let staleTimestamp: InstantLiteral | null = originalEntry.staleTimestamp\n if (!isNil(props.timeToStale)) {\n const limit = Instants.add(Instants.now(), props.timeToStale)\n if (Instants.isBefore(limit, staleTimestamp ?? limit)) {\n staleTimestamp = Instants.toLiteral(limit)\n }\n }\n\n const limitedEntry: CacheEntry<T> = {\n value: originalEntry.value,\n liveTimestamp,\n staleTimestamp,\n }\n\n return limitedEntry\n }\n}\n\nexport type CacheConfigurationOptions = CacheConfigurationSection & {\n local: CacheConfigurationSection\n}\n\nexport type CacheConfigurationSection = {\n defaults: CacheDefinition\n\n /**\n * These options map from cache name key to configuration. They are a way for the tenant to override the configurations\n * for specific caches from the cache configuration here.\n */\n caches?: Record<string, Partial<CacheDefinition>>\n}\n\nexport type CacheDefinition = {\n options?: CacheOptions\n providers: Array<CacheProviderConfiguration>\n}\n\nexport type CacheProviderType = TaggedType<string, 'CacheProviderType'>\nexport type CacheProviderConfiguration = CacheOptions & {\n type: CacheProviderType\n}\n\nexport type CacheConfiguration = CacheConfigurationSection & {\n local: CacheConfigurationSection\n}\n\nexport type CacheProviderRegistry<ContextType extends AbstractApplicationContext> = {\n type: CacheProviderType\n construct: <T>(props: CacheProps, context: ContextType) => CacheProvider<T>\n}\n"],"mappings":"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","names":["CacheProps","CacheSector","namespace","CacheEntry"]}
|
|
1
|
+
{"version":3,"sources":["../src/cache.ts"],"sourcesContent":["import { AbstractLocalKeyValueStore, AbstractRemoteKeyValueStore, LocalKeyValueStore, RemoteKeyValueStore } from '@bessemer/cornerstone/store'\nimport { Duration, OneDay, OneHour } from '@bessemer/cornerstone/temporal/duration'\nimport { ResourceKey, ResourceNamespace } from '@bessemer/cornerstone/resource-key'\nimport { AbstractApplicationContext } from '@bessemer/cornerstone/context'\nimport { TaggedType } from '@bessemer/cornerstone/types'\nimport { RecordEntry } from '@bessemer/cornerstone/entry'\nimport { GlobPattern } from '@bessemer/cornerstone/glob'\nimport { Arrayable } from 'type-fest'\nimport Zod, { ZodType } from 'zod'\nimport { deepMerge, isNil } from '@bessemer/cornerstone/object'\nimport { toArray } from '@bessemer/cornerstone/array'\nimport { Arrays, Entries, ResourceKeys } from '@bessemer/cornerstone'\nimport * as Instants from '@bessemer/cornerstone/temporal/instant'\nimport { InstantLiteral } from '@bessemer/cornerstone/temporal/instant'\n\nexport type CacheProps = {\n maxSize: number | null\n timeToLive: Duration\n timeToStale: Duration | null\n}\n\nexport type CacheOptions = Partial<CacheProps>\n\nexport namespace CacheProps {\n const DefaultCacheProps = {\n maxSize: 50000,\n timeToLive: OneDay,\n timeToStale: OneHour,\n }\n\n export const buildCacheProps = (options?: CacheOptions): CacheProps => {\n options = options ?? {}\n\n const props = deepMerge(DefaultCacheProps, options)\n\n if (props.maxSize === null && props.timeToLive === null) {\n throw new Error('Invalid cache configuration, both maxSize and timeToLive are null')\n }\n\n return props\n }\n}\n\nexport type CacheSector = {\n globs: Array<GlobPattern>\n}\n\nexport namespace CacheSector {\n export const of = (globs: Arrayable<GlobPattern>) => {\n return { globs: toArray(globs) }\n }\n\n export const namespace = (namespace: ResourceNamespace, sector: CacheSector): CacheSector => {\n return { globs: ResourceKeys.namespaceKeys(sector.globs, namespace).map((it) => it as string as GlobPattern) }\n }\n}\n\nexport type CacheName = TaggedType<string, 'CacheName'>\nexport const CacheNameSchema: ZodType<CacheName> = Zod.string()\n\nexport interface AsyncCache<T> {\n name: CacheName\n\n fetchValue(key: ResourceKey, fetch: () => Promise<T>): Promise<T>\n\n fetchValues(keys: Array<ResourceKey>, fetch: (keys: Array<ResourceKey>) => Promise<Array<RecordEntry<T>>>): Promise<Array<RecordEntry<T>>>\n\n writeValue(key: ResourceKey, value: T | undefined): Promise<void>\n\n writeValues(entries: Array<RecordEntry<T | undefined>>): Promise<void>\n\n evictAll(sector: CacheSector): Promise<void>\n}\n\nexport abstract class AbstractAsyncCache<T> implements AsyncCache<T> {\n abstract name: CacheName\n\n fetchValue = async (key: ResourceKey, fetch: () => Promise<T>): Promise<T> => {\n const results = await this.fetchValues([key], async () => {\n return [Entries.of(key, await fetch())]\n })\n\n return Arrays.first(results)![1]\n }\n\n abstract fetchValues(keys: Array<ResourceKey>, fetch: (keys: Array<ResourceKey>) => Promise<RecordEntry<T>[]>): Promise<RecordEntry<T>[]>\n\n writeValue = async (key: ResourceKey, value: T | undefined): Promise<void> => {\n await this.writeValues([Entries.of(key, value)])\n }\n\n abstract writeValues(entries: RecordEntry<T | undefined>[]): Promise<void>\n\n abstract evictAll(sector: CacheSector): Promise<void>\n}\n\nexport interface CacheProvider<T> extends RemoteKeyValueStore<CacheEntry<T>> {\n type: CacheProviderType\n\n evictAll(sector: CacheSector): Promise<void>\n}\n\nexport abstract class AbstractCacheProvider<T> extends AbstractRemoteKeyValueStore<CacheEntry<T>> implements CacheProvider<T> {\n abstract type: CacheProviderType\n\n abstract evictAll(sector: CacheSector): Promise<void>\n}\n\nexport interface LocalCache<T> {\n name: CacheName\n\n getValue(key: ResourceKey, fetch: () => T): T\n\n getValues(keys: Array<ResourceKey>, fetch: (keys: Array<ResourceKey>) => Array<RecordEntry<T>>): Array<RecordEntry<T>>\n\n setValue(key: ResourceKey, value: T | undefined): void\n\n setValues(entries: Array<RecordEntry<T | undefined>>): void\n\n removeAll(sector: CacheSector): void\n}\n\nexport interface LocalCacheProvider<T> extends LocalKeyValueStore<CacheEntry<T>>, CacheProvider<T> {\n removeAll(sector: CacheSector): void\n}\n\nexport abstract class AbstractLocalCacheProvider<T> extends AbstractLocalKeyValueStore<CacheEntry<T>> implements LocalCacheProvider<T> {\n abstract type: CacheProviderType\n\n abstract removeAll(sector: CacheSector): void\n\n async evictAll(sector: CacheSector): Promise<void> {\n this.removeAll(sector)\n }\n}\n\nexport type CacheEntry<T> = {\n value: T\n liveTimestamp: InstantLiteral | null\n staleTimestamp: InstantLiteral | null\n}\n\nexport namespace CacheEntry {\n export const isActive = <T>(entry: CacheEntry<T>): boolean => {\n if (isDead(entry) || isStale(entry)) {\n return false\n }\n\n return true\n }\n\n export const isDead = <T>(entry: CacheEntry<T> | undefined): boolean => {\n if (isNil(entry)) {\n return true\n }\n\n if (isNil(entry.liveTimestamp)) {\n return false\n }\n\n return Instants.isBefore(entry.liveTimestamp, Instants.now())\n }\n\n export const isAlive = <T>(entry: CacheEntry<T> | undefined): boolean => !isDead(entry)\n\n export const isStale = <T>(entry: CacheEntry<T>): boolean => {\n if (isNil(entry.staleTimestamp)) {\n return false\n }\n\n return Instants.isBefore(entry.staleTimestamp, Instants.now())\n }\n\n export const of = <T>(value: T) => {\n const entry: CacheEntry<T> = {\n value,\n liveTimestamp: null,\n staleTimestamp: null,\n }\n\n return entry\n }\n\n // JOHN do we want to enforce some kind of minimum liveness threshold?\n export const applyProps = <T>(originalEntry: CacheEntry<T>, props: CacheProps): CacheEntry<T> => {\n let liveTimestamp: InstantLiteral | null = originalEntry.liveTimestamp\n if (!isNil(props.timeToLive)) {\n const limit = Instants.add(Instants.now(), props.timeToLive)\n if (Instants.isBefore(limit, liveTimestamp ?? limit)) {\n liveTimestamp = Instants.toLiteral(limit)\n }\n }\n\n let staleTimestamp: InstantLiteral | null = originalEntry.staleTimestamp\n if (!isNil(props.timeToStale)) {\n const limit = Instants.add(Instants.now(), props.timeToStale)\n if (Instants.isBefore(limit, staleTimestamp ?? limit)) {\n staleTimestamp = Instants.toLiteral(limit)\n }\n }\n\n const limitedEntry: CacheEntry<T> = {\n value: originalEntry.value,\n liveTimestamp,\n staleTimestamp,\n }\n\n return limitedEntry\n }\n}\n\nexport type CacheConfigurationOptions = CacheConfigurationSection & {\n local: CacheConfigurationSection\n}\n\nexport type CacheConfigurationSection = {\n defaults: CacheDefinition\n\n /**\n * These options map from cache name key to configuration. They are a way for the tenant to override the configurations\n * for specific caches from the cache configuration here.\n */\n caches?: Record<string, Partial<CacheDefinition>>\n}\n\nexport type CacheDefinition = {\n options?: CacheOptions\n providers: Array<CacheProviderConfiguration>\n}\n\nexport type CacheProviderType = TaggedType<string, 'CacheProviderType'>\nexport type CacheProviderConfiguration = CacheOptions & {\n type: CacheProviderType\n}\n\nexport type CacheConfiguration = CacheConfigurationSection & {\n local: CacheConfigurationSection\n}\n\nexport type CacheProviderRegistry<ContextType extends AbstractApplicationContext> = {\n type: CacheProviderType\n construct: <T>(props: CacheProps, context: ContextType) => CacheProvider<T>\n}\n"],"mappings":"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","names":["CacheProps","CacheSector","namespace","CacheEntry"]}
|
package/dist/equalitor.d.ts
CHANGED
|
@@ -2,5 +2,6 @@ import { Comparator } from '@bessemer/cornerstone/comparator';
|
|
|
2
2
|
export type Equalitor<T> = (first: T, second: T) => boolean;
|
|
3
3
|
export declare const fromComparator: <T>(comparator: Comparator<T>) => Equalitor<T>;
|
|
4
4
|
export declare const natural: <T>() => Equalitor<T>;
|
|
5
|
+
export declare const deepNatural: <T>() => Equalitor<T>;
|
|
5
6
|
export declare const equalBy: <T, N>(mapper: (element: T) => N, equalitor: Equalitor<N>) => Equalitor<T>;
|
|
6
7
|
//# sourceMappingURL=equalitor.d.ts.map
|
package/dist/equalitor.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"equalitor.d.ts","sourceRoot":"","sources":["../src/equalitor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,kCAAkC,CAAA;
|
|
1
|
+
{"version":3,"file":"equalitor.d.ts","sourceRoot":"","sources":["../src/equalitor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,kCAAkC,CAAA;AAG7D,MAAM,MAAM,SAAS,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,KAAK,OAAO,CAAA;AAE3D,eAAO,MAAM,cAAc,GAAI,CAAC,EAAE,YAAY,UAAU,CAAC,CAAC,CAAC,KAAG,SAAS,CAAC,CAAC,CAExE,CAAA;AAED,eAAO,MAAM,OAAO,GACjB,CAAC,OAAK,SAAS,CAAC,CAAC,CAEA,CAAA;AAEpB,eAAO,MAAM,WAAW,GACrB,CAAC,OAAK,SAAS,CAAC,CAAC,CAEQ,CAAA;AAE5B,eAAO,MAAM,OAAO,GAAI,CAAC,EAAE,CAAC,EAAE,QAAQ,CAAC,OAAO,EAAE,CAAC,KAAK,CAAC,EAAE,WAAW,SAAS,CAAC,CAAC,CAAC,KAAG,SAAS,CAAC,CAAC,CAE7F,CAAA"}
|
package/dist/equalitor.js
CHANGED
|
@@ -1,12 +1,15 @@
|
|
|
1
1
|
// src/equalitor.ts
|
|
2
|
+
import { deepEqual } from "@bessemer/cornerstone/object";
|
|
2
3
|
var fromComparator = (comparator) => {
|
|
3
4
|
return (first, second) => comparator(first, second) === 0;
|
|
4
5
|
};
|
|
5
6
|
var natural = () => (first, second) => first === second;
|
|
7
|
+
var deepNatural = () => (first, second) => deepEqual(first, second);
|
|
6
8
|
var equalBy = (mapper, equalitor) => {
|
|
7
9
|
return (first, second) => equalitor(mapper(first), mapper(second));
|
|
8
10
|
};
|
|
9
11
|
export {
|
|
12
|
+
deepNatural,
|
|
10
13
|
equalBy,
|
|
11
14
|
fromComparator,
|
|
12
15
|
natural
|
package/dist/equalitor.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/equalitor.ts"],"sourcesContent":["import { Comparator } from '@bessemer/cornerstone/comparator'\n\nexport type Equalitor<T> = (first: T, second: T) => boolean\n\nexport const fromComparator = <T>(comparator: Comparator<T>): Equalitor<T> => {\n return (first, second) => comparator(first, second) === 0\n}\n\nexport const natural =\n <T>(): Equalitor<T> =>\n (first, second) =>\n first === second\n\nexport const equalBy = <T, N>(mapper: (element: T) => N, equalitor: Equalitor<N>): Equalitor<T> => {\n return (first, second) => equalitor(mapper(first), mapper(second))\n}\n"],"mappings":";
|
|
1
|
+
{"version":3,"sources":["../src/equalitor.ts"],"sourcesContent":["import { Comparator } from '@bessemer/cornerstone/comparator'\nimport { deepEqual } from '@bessemer/cornerstone/object'\n\nexport type Equalitor<T> = (first: T, second: T) => boolean\n\nexport const fromComparator = <T>(comparator: Comparator<T>): Equalitor<T> => {\n return (first, second) => comparator(first, second) === 0\n}\n\nexport const natural =\n <T>(): Equalitor<T> =>\n (first, second) =>\n first === second\n\nexport const deepNatural =\n <T>(): Equalitor<T> =>\n (first, second) =>\n deepEqual(first, second)\n\nexport const equalBy = <T, N>(mapper: (element: T) => N, equalitor: Equalitor<N>): Equalitor<T> => {\n return (first, second) => equalitor(mapper(first), mapper(second))\n}\n"],"mappings":";AACA,SAAS,iBAAiB;AAInB,IAAM,iBAAiB,CAAI,eAA4C;AAC5E,SAAO,CAAC,OAAO,WAAW,WAAW,OAAO,MAAM,MAAM;AAC1D;AAEO,IAAM,UACX,MACA,CAAC,OAAO,WACN,UAAU;AAEP,IAAM,cACX,MACA,CAAC,OAAO,WACN,UAAU,OAAO,MAAM;AAEpB,IAAM,UAAU,CAAO,QAA2B,cAA0C;AACjG,SAAO,CAAC,OAAO,WAAW,UAAU,OAAO,KAAK,GAAG,OAAO,MAAM,CAAC;AACnE;","names":[]}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { ZodType } from 'zod';
|
|
2
|
+
import { ResourceNamespace } from '@bessemer/cornerstone/resource-key';
|
|
3
|
+
import { Dictionary } from '@bessemer/cornerstone/types';
|
|
4
|
+
import { RecordAttribute } from '@bessemer/cornerstone/object';
|
|
5
|
+
import { ErrorCode, ErrorCodeLike } from '@bessemer/cornerstone/error/error-code';
|
|
6
|
+
export type ErrorAttribute<Type = unknown> = RecordAttribute<Type, 'ErrorAttribute'>;
|
|
7
|
+
export declare const ValueAttribute: ErrorAttribute;
|
|
8
|
+
export declare const HttpStatusCodeAttribute: ErrorAttribute<number>;
|
|
9
|
+
export type ErrorCause = {
|
|
10
|
+
code: ErrorCode;
|
|
11
|
+
message: string;
|
|
12
|
+
attributes: Dictionary<unknown>;
|
|
13
|
+
causes: Array<ErrorCause>;
|
|
14
|
+
};
|
|
15
|
+
export declare const Schema: ZodType<ErrorCause>;
|
|
16
|
+
export type ErrorCauseBuilder = {
|
|
17
|
+
code: ErrorCodeLike;
|
|
18
|
+
message: string;
|
|
19
|
+
attributes?: Dictionary<unknown>;
|
|
20
|
+
causes?: Array<ErrorCauseBuilder>;
|
|
21
|
+
};
|
|
22
|
+
export type ErrorCauseAugment = {
|
|
23
|
+
namespace?: ResourceNamespace;
|
|
24
|
+
message?: string;
|
|
25
|
+
attributes?: Dictionary<unknown>;
|
|
26
|
+
causes?: Array<ErrorCauseBuilder>;
|
|
27
|
+
};
|
|
28
|
+
export declare const from: (builder: ErrorCauseBuilder) => ErrorCause;
|
|
29
|
+
export declare const unhandled: (builder?: ErrorCauseAugment) => ErrorCause;
|
|
30
|
+
export declare const required: (builder?: ErrorCauseAugment) => ErrorCause;
|
|
31
|
+
export declare const unauthorized: (builder?: ErrorCauseAugment) => ErrorCause;
|
|
32
|
+
export declare const forbidden: (builder?: ErrorCauseAugment) => ErrorCause;
|
|
33
|
+
export declare const badRequest: (builder?: ErrorCauseAugment) => ErrorCause;
|
|
34
|
+
export declare const invalidValue: (value: unknown, builder?: ErrorCauseAugment) => ErrorCause;
|
|
35
|
+
//# sourceMappingURL=error-cause.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"error-cause.d.ts","sourceRoot":"","sources":["../../src/error/error-cause.ts"],"names":[],"mappings":"AAAA,OAAY,EAAE,OAAO,EAAE,MAAM,KAAK,CAAA;AAClC,OAAO,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAA;AAEtE,OAAO,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAA;AACxD,OAAO,EAAa,eAAe,EAAE,MAAM,8BAA8B,CAAA;AAEzE,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,wCAAwC,CAAA;AAEjF,MAAM,MAAM,cAAc,CAAC,IAAI,GAAG,OAAO,IAAI,eAAe,CAAC,IAAI,EAAE,gBAAgB,CAAC,CAAA;AACpF,eAAO,MAAM,cAAc,EAAE,cAAwB,CAAA;AACrD,eAAO,MAAM,uBAAuB,EAAE,cAAc,CAAC,MAAM,CAAoB,CAAA;AAQ/E,MAAM,MAAM,UAAU,GAAG;IACvB,IAAI,EAAE,SAAS,CAAA;IACf,OAAO,EAAE,MAAM,CAAA;IACf,UAAU,EAAE,UAAU,CAAC,OAAO,CAAC,CAAA;IAC/B,MAAM,EAAE,KAAK,CAAC,UAAU,CAAC,CAAA;CAC1B,CAAA;AAED,eAAO,MAAM,MAAM,EAAE,OAAO,CAAC,UAAU,CAErC,CAAA;AAEF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,IAAI,EAAE,aAAa,CAAA;IACnB,OAAO,EAAE,MAAM,CAAA;IACf,UAAU,CAAC,EAAE,UAAU,CAAC,OAAO,CAAC,CAAA;IAChC,MAAM,CAAC,EAAE,KAAK,CAAC,iBAAiB,CAAC,CAAA;CAClC,CAAA;AAED,MAAM,MAAM,iBAAiB,GAAG;IAC9B,SAAS,CAAC,EAAE,iBAAiB,CAAA;IAC7B,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,UAAU,CAAC,EAAE,UAAU,CAAC,OAAO,CAAC,CAAA;IAChC,MAAM,CAAC,EAAE,KAAK,CAAC,iBAAiB,CAAC,CAAA;CAClC,CAAA;AAED,eAAO,MAAM,IAAI,GAAI,SAAS,iBAAiB,KAAG,UASjD,CAAA;AAED,eAAO,MAAM,SAAS,GAAI,UAAU,iBAAiB,KAAG,UAUpD,CAAA;AAEJ,eAAO,MAAM,QAAQ,GAAI,UAAU,iBAAiB,KAAG,UAUnD,CAAA;AAEJ,eAAO,MAAM,YAAY,GAAI,UAAU,iBAAiB,KAAG,UAUvD,CAAA;AAEJ,eAAO,MAAM,SAAS,GAAI,UAAU,iBAAiB,KAAG,UAUpD,CAAA;AAEJ,eAAO,MAAM,UAAU,GAAI,UAAU,iBAAiB,KAAG,UAUrD,CAAA;AAEJ,eAAO,MAAM,YAAY,GAAI,OAAO,OAAO,EAAE,UAAU,iBAAiB,KAAG,UAUvE,CAAA"}
|