@e280/stz 0.0.0-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/license +23 -0
- package/package.json +40 -0
- package/readme.md +85 -0
- package/s/clone/clone.test.ts +124 -0
- package/s/clone/clone.ts +41 -0
- package/s/concurrent.ts +12 -0
- package/s/data/anka.ts +66 -0
- package/s/data/barname/badge.ts +78 -0
- package/s/data/barname/barname.ts +62 -0
- package/s/data/barname/demo.ts +49 -0
- package/s/data/barname/index.ts +4 -0
- package/s/data/barname/utils/prefixes.ts +20 -0
- package/s/data/barname/utils/suffixes.ts +20 -0
- package/s/data/base58.ts +65 -0
- package/s/data/base64.ts +22 -0
- package/s/data/base64url.ts +27 -0
- package/s/data/bytes.ts +7 -0
- package/s/data/hex.ts +35 -0
- package/s/data/nomen/demo.ts +8 -0
- package/s/data/nomen/grammar.ts +41 -0
- package/s/data/nomen/index.ts +5 -0
- package/s/data/nomen/nomen.ts +34 -0
- package/s/data/nomen/presets/falrysk.ts +112 -0
- package/s/data/nomen/types.ts +9 -0
- package/s/data/txt.ts +11 -0
- package/s/deadline.ts +24 -0
- package/s/debounce/debounce.test.ts +73 -0
- package/s/debounce/debounce.ts +54 -0
- package/s/debounce/types.ts +8 -0
- package/s/dedupe.ts +5 -0
- package/s/deep/deep.test.ts +8 -0
- package/s/deep/deep.ts +11 -0
- package/s/deep/parts/equal.test.ts +124 -0
- package/s/deep/parts/equal.ts +49 -0
- package/s/deep/parts/freeze.ts +34 -0
- package/s/defer-promise.ts +29 -0
- package/s/escape-regex.ts +5 -0
- package/s/hat.ts +17 -0
- package/s/index.ts +23 -0
- package/s/is.ts +27 -0
- package/s/map-g.ts +52 -0
- package/s/nap.ts +5 -0
- package/s/ob.ts +66 -0
- package/s/pipe.ts +24 -0
- package/s/pubsub.ts +68 -0
- package/s/trash.ts +30 -0
- package/x/clone/clone.d.ts +1 -0
- package/x/clone/clone.js +26 -0
- package/x/clone/clone.js.map +1 -0
- package/x/clone/clone.test.d.ts +1 -0
- package/x/clone/clone.test.js +125 -0
- package/x/clone/clone.test.js.map +1 -0
- package/x/concurrent.d.ts +1 -0
- package/x/concurrent.js +7 -0
- package/x/concurrent.js.map +1 -0
- package/x/data/anka.d.ts +5 -0
- package/x/data/anka.js +53 -0
- package/x/data/anka.js.map +1 -0
- package/x/data/barname/badge.d.ts +25 -0
- package/x/data/barname/badge.js +64 -0
- package/x/data/barname/badge.js.map +1 -0
- package/x/data/barname/barname.d.ts +7 -0
- package/x/data/barname/barname.js +49 -0
- package/x/data/barname/barname.js.map +1 -0
- package/x/data/barname/demo.d.ts +1 -0
- package/x/data/barname/demo.js +45 -0
- package/x/data/barname/demo.js.map +1 -0
- package/x/data/barname/index.d.ts +2 -0
- package/x/data/barname/index.js +3 -0
- package/x/data/barname/index.js.map +1 -0
- package/x/data/barname/utils/prefixes.d.ts +1 -0
- package/x/data/barname/utils/prefixes.js +19 -0
- package/x/data/barname/utils/prefixes.js.map +1 -0
- package/x/data/barname/utils/suffixes.d.ts +1 -0
- package/x/data/barname/utils/suffixes.js +19 -0
- package/x/data/barname/utils/suffixes.js.map +1 -0
- package/x/data/base58.d.ts +5 -0
- package/x/data/base58.js +58 -0
- package/x/data/base58.js.map +1 -0
- package/x/data/base64.d.ts +5 -0
- package/x/data/base64.js +17 -0
- package/x/data/base64.js.map +1 -0
- package/x/data/base64url.d.ts +5 -0
- package/x/data/base64url.js +22 -0
- package/x/data/base64url.js.map +1 -0
- package/x/data/bytes.d.ts +3 -0
- package/x/data/bytes.js +6 -0
- package/x/data/bytes.js.map +1 -0
- package/x/data/hex.d.ts +6 -0
- package/x/data/hex.js +30 -0
- package/x/data/hex.js.map +1 -0
- package/x/data/nomen/demo.d.ts +1 -0
- package/x/data/nomen/demo.js +5 -0
- package/x/data/nomen/demo.js.map +1 -0
- package/x/data/nomen/grammar.d.ts +11 -0
- package/x/data/nomen/grammar.js +32 -0
- package/x/data/nomen/grammar.js.map +1 -0
- package/x/data/nomen/index.d.ts +3 -0
- package/x/data/nomen/index.js +4 -0
- package/x/data/nomen/index.js.map +1 -0
- package/x/data/nomen/nomen.d.ts +11 -0
- package/x/data/nomen/nomen.js +29 -0
- package/x/data/nomen/nomen.js.map +1 -0
- package/x/data/nomen/presets/falrysk.d.ts +5 -0
- package/x/data/nomen/presets/falrysk.js +99 -0
- package/x/data/nomen/presets/falrysk.js.map +1 -0
- package/x/data/nomen/types.d.ts +6 -0
- package/x/data/nomen/types.js +2 -0
- package/x/data/nomen/types.js.map +1 -0
- package/x/data/txt.d.ts +4 -0
- package/x/data/txt.js +9 -0
- package/x/data/txt.js.map +1 -0
- package/x/deadline.d.ts +6 -0
- package/x/deadline.js +17 -0
- package/x/deadline.js.map +1 -0
- package/x/debounce/debounce.d.ts +2 -0
- package/x/debounce/debounce.js +37 -0
- package/x/debounce/debounce.js.map +1 -0
- package/x/debounce/debounce.test.d.ts +1 -0
- package/x/debounce/debounce.test.js +75 -0
- package/x/debounce/debounce.test.js.map +1 -0
- package/x/debounce/types.d.ts +2 -0
- package/x/debounce/types.js +2 -0
- package/x/debounce/types.js.map +1 -0
- package/x/dedupe.d.ts +1 -0
- package/x/dedupe.js +4 -0
- package/x/dedupe.js.map +1 -0
- package/x/deep/deep.d.ts +7 -0
- package/x/deep/deep.js +9 -0
- package/x/deep/deep.js.map +1 -0
- package/x/deep/deep.test.d.ts +1 -0
- package/x/deep/deep.test.js +10 -0
- package/x/deep/deep.test.js.map +1 -0
- package/x/deep/parts/equal.d.ts +1 -0
- package/x/deep/parts/equal.js +39 -0
- package/x/deep/parts/equal.js.map +1 -0
- package/x/deep/parts/equal.test.d.ts +1 -0
- package/x/deep/parts/equal.test.js +126 -0
- package/x/deep/parts/equal.test.js.map +1 -0
- package/x/deep/parts/freeze.d.ts +1 -0
- package/x/deep/parts/freeze.js +24 -0
- package/x/deep/parts/freeze.js.map +1 -0
- package/x/defer-promise.d.ts +10 -0
- package/x/defer-promise.js +15 -0
- package/x/defer-promise.js.map +1 -0
- package/x/escape-regex.d.ts +1 -0
- package/x/escape-regex.js +4 -0
- package/x/escape-regex.js.map +1 -0
- package/x/hat.d.ts +6 -0
- package/x/hat.js +16 -0
- package/x/hat.js.map +1 -0
- package/x/index.d.ts +20 -0
- package/x/index.js +21 -0
- package/x/index.js.map +1 -0
- package/x/is.d.ts +10 -0
- package/x/is.js +11 -0
- package/x/is.js.map +1 -0
- package/x/map-g.d.ts +17 -0
- package/x/map-g.js +40 -0
- package/x/map-g.js.map +1 -0
- package/x/nap.d.ts +1 -0
- package/x/nap.js +2 -0
- package/x/nap.js.map +1 -0
- package/x/ob.d.ts +14 -0
- package/x/ob.js +21 -0
- package/x/ob.js.map +1 -0
- package/x/pipe.d.ts +8 -0
- package/x/pipe.js +16 -0
- package/x/pipe.js.map +1 -0
- package/x/pubsub.d.ts +18 -0
- package/x/pubsub.js +40 -0
- package/x/pubsub.js.map +1 -0
- package/x/trash.d.ts +14 -0
- package/x/trash.js +25 -0
- package/x/trash.js.map +1 -0
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { is } from "../../is.js";
|
|
2
|
+
export const deepEqual = (alpha, bravo) => {
|
|
3
|
+
function recurse(alpha, bravo, parents) {
|
|
4
|
+
if (!is.object(alpha) || !is.object(bravo))
|
|
5
|
+
return alpha === bravo;
|
|
6
|
+
if (parents.includes(alpha))
|
|
7
|
+
throw new Error(`forbidden circularity detected in deep equal comparison`);
|
|
8
|
+
const newParents = [...parents, alpha];
|
|
9
|
+
if (alpha instanceof Map && bravo instanceof Map) {
|
|
10
|
+
if (alpha.size !== bravo.size)
|
|
11
|
+
return false;
|
|
12
|
+
for (const [key, val] of alpha)
|
|
13
|
+
if (!bravo.has(key) || !recurse(val, bravo.get(key), newParents))
|
|
14
|
+
return false;
|
|
15
|
+
}
|
|
16
|
+
else if (alpha instanceof Set && bravo instanceof Set) {
|
|
17
|
+
if (alpha.size !== bravo.size)
|
|
18
|
+
return false;
|
|
19
|
+
for (const item of alpha)
|
|
20
|
+
if (!Array.from(bravo).some(bItem => recurse(item, bItem, newParents)))
|
|
21
|
+
return false;
|
|
22
|
+
}
|
|
23
|
+
else {
|
|
24
|
+
const keys1 = Object.keys(alpha);
|
|
25
|
+
const keys2 = Object.keys(bravo);
|
|
26
|
+
if (keys1.length !== keys2.length)
|
|
27
|
+
return false;
|
|
28
|
+
for (const key of keys1) {
|
|
29
|
+
if (!keys2.includes(key))
|
|
30
|
+
return false;
|
|
31
|
+
if (!recurse(alpha[key], bravo[key], newParents))
|
|
32
|
+
return false;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
return true;
|
|
36
|
+
}
|
|
37
|
+
return recurse(alpha, bravo, []);
|
|
38
|
+
};
|
|
39
|
+
//# sourceMappingURL=equal.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"equal.js","sourceRoot":"","sources":["../../../s/deep/parts/equal.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,EAAE,EAAC,MAAM,aAAa,CAAA;AAE9B,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,KAAU,EAAE,KAAU,EAAW,EAAE;IAE5D,SAAS,OAAO,CAAC,KAAU,EAAE,KAAU,EAAE,OAAiB;QACzD,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC;YACzC,OAAO,KAAK,KAAK,KAAK,CAAA;QAEvB,IAAI,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC;YAC1B,MAAM,IAAI,KAAK,CAAC,yDAAyD,CAAC,CAAA;QAE3E,MAAM,UAAU,GAAG,CAAC,GAAG,OAAO,EAAE,KAAK,CAAC,CAAA;QAEtC,IAAI,KAAK,YAAY,GAAG,IAAI,KAAK,YAAY,GAAG,EAAE,CAAC;YAClD,IAAI,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI;gBAC5B,OAAO,KAAK,CAAA;YACb,KAAK,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,KAAK;gBAC7B,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,UAAU,CAAC;oBAC/D,OAAO,KAAK,CAAA;QACf,CAAC;aACI,IAAI,KAAK,YAAY,GAAG,IAAI,KAAK,YAAY,GAAG,EAAE,CAAC;YACvD,IAAI,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI;gBAC5B,OAAO,KAAK,CAAA;YACb,KAAK,MAAM,IAAI,IAAI,KAAK;gBACvB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,EAAE,UAAU,CAAC,CAAC;oBACrE,OAAO,KAAK,CAAA;QACf,CAAC;aACI,CAAC;YACL,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;YAChC,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;YAEhC,IAAI,KAAK,CAAC,MAAM,KAAK,KAAK,CAAC,MAAM;gBAChC,OAAO,KAAK,CAAA;YAEb,KAAK,MAAM,GAAG,IAAI,KAAK,EAAE,CAAC;gBACzB,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC;oBACvB,OAAO,KAAK,CAAA;gBACb,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,UAAU,CAAC;oBAC/C,OAAO,KAAK,CAAA;YACd,CAAC;QACF,CAAC;QAED,OAAO,IAAI,CAAA;IACZ,CAAC;IAED,OAAO,OAAO,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,CAAA;AACjC,CAAC,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
export {};
|
|
2
|
+
//
|
|
3
|
+
// import {Suite, expect} from "cynic"
|
|
4
|
+
// import {deepEqual} from "./equal.js"
|
|
5
|
+
//
|
|
6
|
+
// export default <Suite>{
|
|
7
|
+
//
|
|
8
|
+
// async "compare primitive types"() {
|
|
9
|
+
// expect(deepEqual(123, 123)).equals(true)
|
|
10
|
+
// expect(deepEqual("abc", "abc")).equals(true)
|
|
11
|
+
// expect(deepEqual(true, true)).equals(true)
|
|
12
|
+
// expect(deepEqual(123, "123")).equals(false)
|
|
13
|
+
// expect(deepEqual(true, 1)).equals(false)
|
|
14
|
+
// },
|
|
15
|
+
//
|
|
16
|
+
// async "compare arrays"() {
|
|
17
|
+
// const array1 = [1, 2, 3]
|
|
18
|
+
// const array2 = [1, 2, 3]
|
|
19
|
+
// const array3 = [1, 2, 4]
|
|
20
|
+
// expect(deepEqual(array1, array2)).equals(true)
|
|
21
|
+
// expect(deepEqual(array1, array3)).equals(false)
|
|
22
|
+
// },
|
|
23
|
+
//
|
|
24
|
+
// async "compare plain objects"() {
|
|
25
|
+
// const obj1 = { foo: "bar", baz: 123 }
|
|
26
|
+
// const obj2 = { foo: "bar", baz: 123 }
|
|
27
|
+
// const obj3 = { foo: "bar", baz: 124 }
|
|
28
|
+
// expect(deepEqual(obj1, obj2)).equals(true)
|
|
29
|
+
// expect(deepEqual(obj1, obj3)).equals(false)
|
|
30
|
+
// },
|
|
31
|
+
//
|
|
32
|
+
// async "compare nested objects"() {
|
|
33
|
+
// const obj1 = { foo: "bar", inner: { baz: 123, deeper: { qux: true }}}
|
|
34
|
+
// const obj2 = { foo: "bar", inner: { baz: 123, deeper: { qux: true }}}
|
|
35
|
+
// const obj3 = { foo: "bar", inner: { baz: 124, deeper: { qux: true }}}
|
|
36
|
+
// expect(deepEqual(obj1, obj2)).equals(true)
|
|
37
|
+
// expect(deepEqual(obj1, obj3)).equals(false)
|
|
38
|
+
// },
|
|
39
|
+
//
|
|
40
|
+
// async "compare array of objects"() {
|
|
41
|
+
// const arr1 = [{ foo: "bar" }, { baz: 123 }, { qux: true }]
|
|
42
|
+
// const arr2 = [{ foo: "bar" }, { baz: 123 }, { qux: true }]
|
|
43
|
+
// const arr3 = [{ foo: "bar" }, { baz: 123 }, { qux: false }]
|
|
44
|
+
// expect(deepEqual(arr1, arr2)).equals(true)
|
|
45
|
+
// expect(deepEqual(arr1, arr3)).equals(false)
|
|
46
|
+
// },
|
|
47
|
+
//
|
|
48
|
+
// async "compare null and undefined"() {
|
|
49
|
+
// expect(deepEqual(null, null)).equals(true)
|
|
50
|
+
// expect(deepEqual(undefined, undefined)).equals(true)
|
|
51
|
+
// expect(deepEqual(null, undefined)).equals(false)
|
|
52
|
+
// },
|
|
53
|
+
//
|
|
54
|
+
// async "compare with nested arrays"() {
|
|
55
|
+
// const obj1 = { foo: "bar", array: [1, 2, [3, 4]] }
|
|
56
|
+
// const obj2 = { foo: "bar", array: [1, 2, [3, 4]] }
|
|
57
|
+
// const obj3 = { foo: "bar", array: [1, 2, [3, 5]] }
|
|
58
|
+
// expect(deepEqual(obj1, obj2)).equals(true)
|
|
59
|
+
// expect(deepEqual(obj1, obj3)).equals(false)
|
|
60
|
+
// },
|
|
61
|
+
//
|
|
62
|
+
// async "circularity is forbidden"() {
|
|
63
|
+
// const obj1 = {alpha: 1} as any
|
|
64
|
+
// const obj2 = {alpha: 1} as any
|
|
65
|
+
// obj1.bravo = obj1
|
|
66
|
+
// obj2.bravo = obj2
|
|
67
|
+
// expect(() => deepEqual(obj1, obj2)).throws()
|
|
68
|
+
// },
|
|
69
|
+
//
|
|
70
|
+
// async "duplicate references are allowed"() {
|
|
71
|
+
// const dupe = {a: 123}
|
|
72
|
+
// const obj1 = {alpha: 1, dupe}
|
|
73
|
+
// const obj2 = {alpha: 1, dupe}
|
|
74
|
+
// const obj3 = {alpha: 1, dupe: {a: 0}}
|
|
75
|
+
// expect(deepEqual(obj1, obj2)).equals(true)
|
|
76
|
+
// expect(deepEqual(obj1, obj3)).equals(false)
|
|
77
|
+
// },
|
|
78
|
+
//
|
|
79
|
+
// "maps and sets": {
|
|
80
|
+
// async "compare maps"() {
|
|
81
|
+
// const map1 = new Map([['key1', 'value1'], ['key2', 'value2']])
|
|
82
|
+
// const map2 = new Map([['key1', 'value1'], ['key2', 'value2']])
|
|
83
|
+
// const map3 = new Map([['key1', 'value1'], ['key2', 'value3']])
|
|
84
|
+
// expect(deepEqual(map1, map2)).equals(true)
|
|
85
|
+
// expect(deepEqual(map1, map3)).equals(false)
|
|
86
|
+
// },
|
|
87
|
+
//
|
|
88
|
+
// async "compare sets"() {
|
|
89
|
+
// const set1 = new Set([1, 2, 3])
|
|
90
|
+
// const set2 = new Set([1, 2, 3])
|
|
91
|
+
// const set3 = new Set([1, 2, 4])
|
|
92
|
+
// expect(deepEqual(set1, set2)).equals(true)
|
|
93
|
+
// expect(deepEqual(set1, set3)).equals(false)
|
|
94
|
+
// },
|
|
95
|
+
//
|
|
96
|
+
// async "compare nested maps and sets"() {
|
|
97
|
+
// const obj1 = { map: new Map([['key', new Set([1, 2, 3])]]) }
|
|
98
|
+
// const obj2 = { map: new Map([['key', new Set([1, 2, 3])]]) }
|
|
99
|
+
// const obj3 = { map: new Map([['key', new Set([1, 2, 4])]]) }
|
|
100
|
+
// expect(deepEqual(obj1, obj2)).equals(true)
|
|
101
|
+
// expect(deepEqual(obj1, obj3)).equals(false)
|
|
102
|
+
// },
|
|
103
|
+
//
|
|
104
|
+
// async "compare complex structures"() {
|
|
105
|
+
// const map1 = new Map([['set', new Set([{ a: 1 }, { b: 2 }])]])
|
|
106
|
+
// const map2 = new Map([['set', new Set([{ a: 1 }, { b: 2 }])]])
|
|
107
|
+
// const map3 = new Map([['set', new Set([{ a: 1 }, { b: 3 }])]])
|
|
108
|
+
// expect(deepEqual(map1, map2)).equals(true)
|
|
109
|
+
// expect(deepEqual(map1, map3)).equals(false)
|
|
110
|
+
// },
|
|
111
|
+
//
|
|
112
|
+
// async "compare edge cases"() {
|
|
113
|
+
// const emptyMap1 = new Map()
|
|
114
|
+
// const emptyMap2 = new Map()
|
|
115
|
+
// const emptySet1 = new Set()
|
|
116
|
+
// const emptySet2 = new Set()
|
|
117
|
+
// const mixedMap1 = new Map([['b', 2], ['a', 1]])
|
|
118
|
+
// const mixedMap2 = new Map([['a', 1], ['b', 2]])
|
|
119
|
+
// expect(deepEqual(emptyMap1, emptyMap2)).equals(true)
|
|
120
|
+
// expect(deepEqual(emptySet1, emptySet2)).equals(true)
|
|
121
|
+
// expect(deepEqual(mixedMap1, mixedMap2)).equals(true)
|
|
122
|
+
// },
|
|
123
|
+
// },
|
|
124
|
+
// }
|
|
125
|
+
//
|
|
126
|
+
//# sourceMappingURL=equal.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"equal.test.js","sourceRoot":"","sources":["../../../s/deep/parts/equal.test.ts"],"names":[],"mappings":";AAAA,EAAE;AACF,sCAAsC;AACtC,uCAAuC;AACvC,EAAE;AACF,0BAA0B;AAC1B,EAAE;AACF,uCAAuC;AACvC,6CAA6C;AAC7C,iDAAiD;AACjD,+CAA+C;AAC/C,gDAAgD;AAChD,6CAA6C;AAC7C,MAAM;AACN,EAAE;AACF,8BAA8B;AAC9B,6BAA6B;AAC7B,6BAA6B;AAC7B,6BAA6B;AAC7B,mDAAmD;AACnD,oDAAoD;AACpD,MAAM;AACN,EAAE;AACF,qCAAqC;AACrC,0CAA0C;AAC1C,0CAA0C;AAC1C,0CAA0C;AAC1C,+CAA+C;AAC/C,gDAAgD;AAChD,MAAM;AACN,EAAE;AACF,sCAAsC;AACtC,0EAA0E;AAC1E,0EAA0E;AAC1E,0EAA0E;AAC1E,+CAA+C;AAC/C,gDAAgD;AAChD,MAAM;AACN,EAAE;AACF,wCAAwC;AACxC,+DAA+D;AAC/D,+DAA+D;AAC/D,gEAAgE;AAChE,+CAA+C;AAC/C,gDAAgD;AAChD,MAAM;AACN,EAAE;AACF,0CAA0C;AAC1C,+CAA+C;AAC/C,yDAAyD;AACzD,qDAAqD;AACrD,MAAM;AACN,EAAE;AACF,0CAA0C;AAC1C,uDAAuD;AACvD,uDAAuD;AACvD,uDAAuD;AACvD,+CAA+C;AAC/C,gDAAgD;AAChD,MAAM;AACN,EAAE;AACF,wCAAwC;AACxC,mCAAmC;AACnC,mCAAmC;AACnC,sBAAsB;AACtB,sBAAsB;AACtB,iDAAiD;AACjD,MAAM;AACN,EAAE;AACF,gDAAgD;AAChD,0BAA0B;AAC1B,kCAAkC;AAClC,kCAAkC;AAClC,0CAA0C;AAC1C,+CAA+C;AAC/C,gDAAgD;AAChD,MAAM;AACN,EAAE;AACF,sBAAsB;AACtB,6BAA6B;AAC7B,oEAAoE;AACpE,oEAAoE;AACpE,oEAAoE;AACpE,gDAAgD;AAChD,iDAAiD;AACjD,OAAO;AACP,EAAE;AACF,6BAA6B;AAC7B,qCAAqC;AACrC,qCAAqC;AACrC,qCAAqC;AACrC,gDAAgD;AAChD,iDAAiD;AACjD,OAAO;AACP,EAAE;AACF,6CAA6C;AAC7C,kEAAkE;AAClE,kEAAkE;AAClE,kEAAkE;AAClE,gDAAgD;AAChD,iDAAiD;AACjD,OAAO;AACP,EAAE;AACF,2CAA2C;AAC3C,oEAAoE;AACpE,oEAAoE;AACpE,oEAAoE;AACpE,gDAAgD;AAChD,iDAAiD;AACjD,OAAO;AACP,EAAE;AACF,mCAAmC;AACnC,iCAAiC;AACjC,iCAAiC;AACjC,iCAAiC;AACjC,iCAAiC;AACjC,qDAAqD;AACrD,qDAAqD;AACrD,0DAA0D;AAC1D,0DAA0D;AAC1D,0DAA0D;AAC1D,OAAO;AACP,MAAM;AACN,IAAI;AACJ,EAAE"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function deepFreeze<X>(item: X): X;
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { is } from "../../is.js";
|
|
2
|
+
export function deepFreeze(item) {
|
|
3
|
+
function recurse(x, parents) {
|
|
4
|
+
if (!is.object(x) || parents.includes(x))
|
|
5
|
+
return x;
|
|
6
|
+
const newParents = [...parents, x];
|
|
7
|
+
if (x instanceof Map)
|
|
8
|
+
for (const arr of x.entries())
|
|
9
|
+
for (const y of arr)
|
|
10
|
+
recurse(y, newParents);
|
|
11
|
+
else if (x instanceof Set)
|
|
12
|
+
for (const y of x)
|
|
13
|
+
recurse(y, newParents);
|
|
14
|
+
else if (Array.isArray(x))
|
|
15
|
+
for (const y of x)
|
|
16
|
+
recurse(y, newParents);
|
|
17
|
+
else
|
|
18
|
+
for (const y of Object.values(x))
|
|
19
|
+
recurse(y, newParents);
|
|
20
|
+
return Object.freeze(x);
|
|
21
|
+
}
|
|
22
|
+
return recurse(item, []);
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=freeze.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"freeze.js","sourceRoot":"","sources":["../../../s/deep/parts/freeze.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,EAAE,EAAC,MAAM,aAAa,CAAA;AAE9B,MAAM,UAAU,UAAU,CAAI,IAAO;IAEpC,SAAS,OAAO,CAAC,CAAI,EAAE,OAAiB;QACvC,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;YACvC,OAAO,CAAC,CAAA;QAET,MAAM,UAAU,GAAG,CAAC,GAAG,OAAO,EAAE,CAAC,CAAC,CAAA;QAElC,IAAI,CAAC,YAAY,GAAG;YACnB,KAAK,MAAM,GAAG,IAAI,CAAC,CAAC,OAAO,EAAE;gBAC5B,KAAK,MAAM,CAAC,IAAI,GAAG;oBAClB,OAAO,CAAC,CAAC,EAAE,UAAU,CAAC,CAAA;aAEpB,IAAI,CAAC,YAAY,GAAG;YACxB,KAAK,MAAM,CAAC,IAAI,CAAC;gBAChB,OAAO,CAAC,CAAC,EAAE,UAAU,CAAC,CAAA;aAEnB,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;YACxB,KAAK,MAAM,CAAC,IAAI,CAAC;gBAChB,OAAO,CAAC,CAAC,EAAE,UAAU,CAAC,CAAA;;YAGvB,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;gBAC/B,OAAO,CAAC,CAAC,EAAE,UAAU,CAAC,CAAA;QAExB,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAA;IACxB,CAAC;IAED,OAAO,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAA;AACzB,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/** a promise which can be resolved from the outside */
|
|
2
|
+
export type DeferredPromise<R> = {
|
|
3
|
+
promise: Promise<R>;
|
|
4
|
+
resolve: (result: R) => void;
|
|
5
|
+
reject: (reason: any) => void;
|
|
6
|
+
/** ties the fate of this deferred promise to the outcome of the provided outsidePromise */
|
|
7
|
+
entangle: (outsidePromise: Promise<R>) => Promise<R>;
|
|
8
|
+
};
|
|
9
|
+
/** returns a deferred promise with exposed resolve and reject fns */
|
|
10
|
+
export declare function deferPromise<R>(): DeferredPromise<R>;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/** returns a deferred promise with exposed resolve and reject fns */
|
|
2
|
+
export function deferPromise() {
|
|
3
|
+
let resolve;
|
|
4
|
+
let reject;
|
|
5
|
+
const promise = new Promise((res, rej) => {
|
|
6
|
+
resolve = res;
|
|
7
|
+
reject = rej;
|
|
8
|
+
});
|
|
9
|
+
function entangle(outside) {
|
|
10
|
+
outside.then(resolve).catch(reject);
|
|
11
|
+
return promise;
|
|
12
|
+
}
|
|
13
|
+
return { promise, resolve, reject, entangle };
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=defer-promise.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"defer-promise.js","sourceRoot":"","sources":["../s/defer-promise.ts"],"names":[],"mappings":"AAWA,qEAAqE;AACrE,MAAM,UAAU,YAAY;IAC3B,IAAI,OAA6B,CAAA;IACjC,IAAI,MAA8B,CAAA;IAElC,MAAM,OAAO,GAAG,IAAI,OAAO,CAAI,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;QAC3C,OAAO,GAAG,GAAG,CAAA;QACb,MAAM,GAAG,GAAG,CAAA;IACb,CAAC,CAAC,CAAA;IAEF,SAAS,QAAQ,CAAC,OAAmB;QACpC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA;QACnC,OAAO,OAAO,CAAA;IACf,CAAC;IAED,OAAO,EAAC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAC,CAAA;AAC5C,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function escapeRegex(subject: string): string;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"escape-regex.js","sourceRoot":"","sources":["../s/escape-regex.ts"],"names":[],"mappings":"AACA,MAAM,UAAU,WAAW,CAAC,OAAe;IAC1C,OAAO,OAAO,CAAC,OAAO,CAAC,wBAAwB,EAAE,MAAM,CAAC,CAAC;AAC1D,CAAC"}
|
package/x/hat.d.ts
ADDED
package/x/hat.js
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export class Hat {
|
|
2
|
+
items;
|
|
3
|
+
#content = [];
|
|
4
|
+
constructor(items) {
|
|
5
|
+
this.items = items;
|
|
6
|
+
this.#content = [...items];
|
|
7
|
+
}
|
|
8
|
+
pull() {
|
|
9
|
+
if (this.#content.length === 0)
|
|
10
|
+
this.#content = [...this.items];
|
|
11
|
+
const index = Math.floor(Math.random() * this.#content.length);
|
|
12
|
+
const [item] = this.#content.splice(index, 1);
|
|
13
|
+
return item;
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=hat.js.map
|
package/x/hat.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hat.js","sourceRoot":"","sources":["../s/hat.ts"],"names":[],"mappings":"AACA,MAAM,OAAO,GAAG;IAGI;IAFnB,QAAQ,GAAQ,EAAE,CAAA;IAElB,YAAmB,KAAU;QAAV,UAAK,GAAL,KAAK,CAAK;QAC5B,IAAI,CAAC,QAAQ,GAAG,CAAC,GAAG,KAAK,CAAC,CAAA;IAC3B,CAAC;IAED,IAAI;QACH,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC;YAC7B,IAAI,CAAC,QAAQ,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAA;QAChC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAA;QAC9D,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAA;QAC7C,OAAO,IAAI,CAAA;IACZ,CAAC;CACD"}
|
package/x/index.d.ts
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
export * from "./data/barname/index.js";
|
|
2
|
+
export * from "./data/base58.js";
|
|
3
|
+
export * from "./data/base64.js";
|
|
4
|
+
export * from "./data/base64url.js";
|
|
5
|
+
export * from "./data/bytes.js";
|
|
6
|
+
export * from "./data/hex.js";
|
|
7
|
+
export * from "./data/txt.js";
|
|
8
|
+
export * from "./concurrent.js";
|
|
9
|
+
export * from "./deadline.js";
|
|
10
|
+
export * from "./dedupe.js";
|
|
11
|
+
export * from "./defer-promise.js";
|
|
12
|
+
export * from "./escape-regex.js";
|
|
13
|
+
export * from "./hat.js";
|
|
14
|
+
export * from "./is.js";
|
|
15
|
+
export * from "./map-g.js";
|
|
16
|
+
export * from "./nap.js";
|
|
17
|
+
export * from "./ob.js";
|
|
18
|
+
export * from "./pipe.js";
|
|
19
|
+
export * from "./pubsub.js";
|
|
20
|
+
export * from "./trash.js";
|
package/x/index.js
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
export * from "./data/barname/index.js";
|
|
2
|
+
export * from "./data/base58.js";
|
|
3
|
+
export * from "./data/base64.js";
|
|
4
|
+
export * from "./data/base64url.js";
|
|
5
|
+
export * from "./data/bytes.js";
|
|
6
|
+
export * from "./data/hex.js";
|
|
7
|
+
export * from "./data/txt.js";
|
|
8
|
+
export * from "./concurrent.js";
|
|
9
|
+
export * from "./deadline.js";
|
|
10
|
+
export * from "./dedupe.js";
|
|
11
|
+
export * from "./defer-promise.js";
|
|
12
|
+
export * from "./escape-regex.js";
|
|
13
|
+
export * from "./hat.js";
|
|
14
|
+
export * from "./is.js";
|
|
15
|
+
export * from "./map-g.js";
|
|
16
|
+
export * from "./nap.js";
|
|
17
|
+
export * from "./ob.js";
|
|
18
|
+
export * from "./pipe.js";
|
|
19
|
+
export * from "./pubsub.js";
|
|
20
|
+
export * from "./trash.js";
|
|
21
|
+
//# sourceMappingURL=index.js.map
|
package/x/index.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../s/index.ts"],"names":[],"mappings":"AACA,cAAc,yBAAyB,CAAA;AACvC,cAAc,kBAAkB,CAAA;AAChC,cAAc,kBAAkB,CAAA;AAChC,cAAc,qBAAqB,CAAA;AACnC,cAAc,iBAAiB,CAAA;AAC/B,cAAc,eAAe,CAAA;AAC7B,cAAc,eAAe,CAAA;AAE7B,cAAc,iBAAiB,CAAA;AAC/B,cAAc,eAAe,CAAA;AAC7B,cAAc,aAAa,CAAA;AAC3B,cAAc,oBAAoB,CAAA;AAClC,cAAc,mBAAmB,CAAA;AACjC,cAAc,UAAU,CAAA;AACxB,cAAc,SAAS,CAAA;AACvB,cAAc,YAAY,CAAA;AAC1B,cAAc,UAAU,CAAA;AACxB,cAAc,SAAS,CAAA;AACvB,cAAc,WAAW,CAAA;AACzB,cAAc,aAAa,CAAA;AAC3B,cAAc,YAAY,CAAA"}
|
package/x/is.d.ts
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export declare const is: {
|
|
2
|
+
available: <X>(x: X) => x is NonNullable<X>;
|
|
3
|
+
unavailable: (x: any) => x is (undefined | null);
|
|
4
|
+
boolean: (x: any) => x is boolean;
|
|
5
|
+
number: (x: any) => x is number;
|
|
6
|
+
string: (x: any) => x is string;
|
|
7
|
+
bigint: (x: any) => x is bigint;
|
|
8
|
+
object: <X>(x: X) => x is object & NonNullable<X>;
|
|
9
|
+
array: (x: any | any[]) => x is any[];
|
|
10
|
+
};
|
package/x/is.js
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export const is = {
|
|
2
|
+
available: (x) => x !== undefined && x !== null,
|
|
3
|
+
unavailable: (x) => x === undefined || x === null,
|
|
4
|
+
boolean: (x) => typeof x === "boolean",
|
|
5
|
+
number: (x) => typeof x === "number",
|
|
6
|
+
string: (x) => typeof x === "string",
|
|
7
|
+
bigint: (x) => typeof x === "bigint",
|
|
8
|
+
object: (x) => typeof x === "object" && x !== null,
|
|
9
|
+
array: (x) => Array.isArray(x),
|
|
10
|
+
};
|
|
11
|
+
//# sourceMappingURL=is.js.map
|
package/x/is.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"is.js","sourceRoot":"","sources":["../s/is.ts"],"names":[],"mappings":"AACA,MAAM,CAAC,MAAM,EAAE,GAAG;IACjB,SAAS,EAAE,CAAI,CAAI,EAAuB,EAAE,CAC3C,CAAC,KAAK,SAAS,IAAI,CAAC,KAAK,IAAI;IAE9B,WAAW,EAAE,CAAC,CAAM,EAA2B,EAAE,CAChD,CAAC,KAAK,SAAS,IAAI,CAAC,KAAK,IAAI;IAE9B,OAAO,EAAE,CAAC,CAAM,EAAgB,EAAE,CACjC,OAAO,CAAC,KAAK,SAAS;IAEvB,MAAM,EAAE,CAAC,CAAM,EAAe,EAAE,CAC/B,OAAO,CAAC,KAAK,QAAQ;IAEtB,MAAM,EAAE,CAAC,CAAM,EAAe,EAAE,CAC/B,OAAO,CAAC,KAAK,QAAQ;IAEtB,MAAM,EAAE,CAAC,CAAM,EAAe,EAAE,CAC/B,OAAO,CAAC,KAAK,QAAQ;IAEtB,MAAM,EAAE,CAAI,CAAI,EAAgC,EAAE,CACjD,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,IAAI;IAEpC,KAAK,EAAE,CAAC,CAAc,EAAc,EAAE,CACrC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;CACjB,CAAA"}
|
package/x/map-g.d.ts
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/** js map, but with handy methods like `require` and `guarantee` */
|
|
2
|
+
export declare class MapG<K, V> extends Map<K, V> {
|
|
3
|
+
static require<K, V>(map: Map<K, V>, key: K): V & ({} | null);
|
|
4
|
+
static guarantee<K, V>(map: Map<K, V>, key: K, make: () => V): V;
|
|
5
|
+
array(): [K, V][];
|
|
6
|
+
require(key: K): V & ({} | null);
|
|
7
|
+
guarantee(key: K, make: () => V): V;
|
|
8
|
+
}
|
|
9
|
+
export type Identifiable<Id = any> = {
|
|
10
|
+
id: Id;
|
|
11
|
+
};
|
|
12
|
+
/** js map but for things that have an `id` field */
|
|
13
|
+
export declare class PoolG<V extends Identifiable> extends MapG<V["id"], V> {
|
|
14
|
+
got(value: V): boolean;
|
|
15
|
+
add(value: V): V;
|
|
16
|
+
remove(value: V): boolean;
|
|
17
|
+
}
|
package/x/map-g.js
ADDED
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/** js map, but with handy methods like `require` and `guarantee` */
|
|
2
|
+
export class MapG extends Map {
|
|
3
|
+
static require(map, key) {
|
|
4
|
+
const value = map.get(key);
|
|
5
|
+
if (value === undefined)
|
|
6
|
+
throw new Error(`required key not found: "${key}"`);
|
|
7
|
+
return value;
|
|
8
|
+
}
|
|
9
|
+
static guarantee(map, key, make) {
|
|
10
|
+
let value = map.get(key);
|
|
11
|
+
if (value === undefined) {
|
|
12
|
+
value = make();
|
|
13
|
+
map.set(key, value);
|
|
14
|
+
}
|
|
15
|
+
return value;
|
|
16
|
+
}
|
|
17
|
+
array() {
|
|
18
|
+
return [...this];
|
|
19
|
+
}
|
|
20
|
+
require(key) {
|
|
21
|
+
return MapG.require(this, key);
|
|
22
|
+
}
|
|
23
|
+
guarantee(key, make) {
|
|
24
|
+
return MapG.guarantee(this, key, make);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
/** js map but for things that have an `id` field */
|
|
28
|
+
export class PoolG extends MapG {
|
|
29
|
+
got(value) {
|
|
30
|
+
return this.has(value.id);
|
|
31
|
+
}
|
|
32
|
+
add(value) {
|
|
33
|
+
this.set(value.id, value);
|
|
34
|
+
return value;
|
|
35
|
+
}
|
|
36
|
+
remove(value) {
|
|
37
|
+
return this.delete(value.id);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=map-g.js.map
|
package/x/map-g.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"map-g.js","sourceRoot":"","sources":["../s/map-g.ts"],"names":[],"mappings":"AACA,oEAAoE;AACpE,MAAM,OAAO,IAAW,SAAQ,GAAS;IACxC,MAAM,CAAC,OAAO,CAAO,GAAc,EAAE,GAAM;QAC1C,MAAM,KAAK,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;QAC1B,IAAI,KAAK,KAAK,SAAS;YACtB,MAAM,IAAI,KAAK,CAAC,4BAA4B,GAAG,GAAG,CAAC,CAAA;QACpD,OAAO,KAAK,CAAA;IACb,CAAC;IAED,MAAM,CAAC,SAAS,CAAO,GAAc,EAAE,GAAM,EAAE,IAAa;QAC3D,IAAI,KAAK,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;QAExB,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACzB,KAAK,GAAG,IAAI,EAAE,CAAA;YACd,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAA;QACpB,CAAC;QAED,OAAO,KAAK,CAAA;IACb,CAAC;IAED,KAAK;QACJ,OAAO,CAAC,GAAG,IAAI,CAAC,CAAA;IACjB,CAAC;IAED,OAAO,CAAC,GAAM;QACb,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAA;IAC/B,CAAC;IAED,SAAS,CAAC,GAAM,EAAE,IAAa;QAC9B,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,GAAG,EAAE,IAAI,CAAC,CAAA;IACvC,CAAC;CACD;AAID,oDAAoD;AACpD,MAAM,OAAO,KAA8B,SAAQ,IAAgB;IAClE,GAAG,CAAC,KAAQ;QACX,OAAO,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;IAC1B,CAAC;IAED,GAAG,CAAC,KAAQ;QACX,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,KAAK,CAAC,CAAA;QACzB,OAAO,KAAK,CAAA;IACb,CAAC;IAED,MAAM,CAAC,KAAQ;QACd,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;IAC7B,CAAC;CACD"}
|
package/x/nap.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const nap: (milliseconds?: number) => Promise<void>;
|
package/x/nap.js
ADDED
package/x/nap.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nap.js","sourceRoot":"","sources":["../s/nap.ts"],"names":[],"mappings":"AACA,MAAM,CAAC,MAAM,GAAG,GAAG,CAAC,eAAuB,CAAC,EAAE,EAAE,CAAC,CAChD,IAAI,OAAO,CAAO,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC,CAC/D,CAAA"}
|
package/x/ob.d.ts
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export declare function ob<Ob extends object>(o: Ob): {
|
|
2
|
+
map: <Value>(transform: ObTransform<Ob, Value>) => { [P in keyof Ob]: Value; };
|
|
3
|
+
filter: (predicate: ObPredicate<Ob>) => { [P in keyof Ob]?: Ob[keyof Ob] | undefined; };
|
|
4
|
+
};
|
|
5
|
+
export declare namespace ob {
|
|
6
|
+
var pipe: Readonly<{
|
|
7
|
+
map: <O extends {}, Value>(transform: (value: O[keyof O], key: keyof O) => Value) => (o: O) => { [P in keyof O]: Value; };
|
|
8
|
+
filter: <O extends {}>(transform: (value: O[keyof O], key: keyof O) => boolean) => (o: O) => {
|
|
9
|
+
[key: string]: O[keyof O];
|
|
10
|
+
};
|
|
11
|
+
}>;
|
|
12
|
+
}
|
|
13
|
+
export type ObTransform<Ob extends object, Value> = ((value: Ob[keyof Ob], key: keyof Ob) => Value);
|
|
14
|
+
export type ObPredicate<Ob extends object> = ((value: Ob[keyof Ob], key: keyof Ob) => boolean);
|
package/x/ob.js
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
export function ob(o) {
|
|
2
|
+
return {
|
|
3
|
+
map: (transform) => (obMap(o, transform)),
|
|
4
|
+
filter: (predicate) => (obFilter(o, predicate)),
|
|
5
|
+
};
|
|
6
|
+
}
|
|
7
|
+
////////////
|
|
8
|
+
////////////
|
|
9
|
+
ob.pipe = Object.freeze({
|
|
10
|
+
map: (transform) => ((o) => obMap(o, transform)),
|
|
11
|
+
filter: (transform) => ((o) => obFilter(o, transform)),
|
|
12
|
+
});
|
|
13
|
+
////////////
|
|
14
|
+
////////////
|
|
15
|
+
const obMap = (o, transform) => {
|
|
16
|
+
return Object.fromEntries(Object.entries(o).map(([key, value]) => [key, transform(value, key)]));
|
|
17
|
+
};
|
|
18
|
+
const obFilter = (o, predicate) => {
|
|
19
|
+
return Object.fromEntries(Object.entries(o).filter(([key, value]) => predicate(value, key)));
|
|
20
|
+
};
|
|
21
|
+
//# sourceMappingURL=ob.js.map
|
package/x/ob.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ob.js","sourceRoot":"","sources":["../s/ob.ts"],"names":[],"mappings":"AACA,MAAM,UAAU,EAAE,CAAoB,CAAK;IAC1C,OAAO;QACN,GAAG,EAAE,CAAQ,SAAiC,EAAE,EAAE,CAAC,CAClD,KAAK,CAAC,CAAC,EAAE,SAAS,CAAC,CACnB;QACD,MAAM,EAAE,CAAC,SAA0B,EAAE,EAAE,CAAC,CACvC,QAAQ,CAAC,CAAC,EAAE,SAAS,CAAC,CACtB;KACD,CAAA;AACF,CAAC;AAED,YAAY;AACZ,YAAY;AAEZ,EAAE,CAAC,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC;IACvB,GAAG,EAAE,CACH,SAAqD,EACpD,EAAE,CAAC,CACL,CAAC,CAAI,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,CAAC,CAC7B;IACD,MAAM,EAAE,CACN,SAAuD,EACtD,EAAE,CAAC,CACL,CAAC,CAAI,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,SAAS,CAAgC,CAC/D;CACD,CAAC,CAAA;AAaF,YAAY;AACZ,YAAY;AAEZ,MAAM,KAAK,GAAG,CACZ,CAAK,EACL,SAAiC,EAChC,EAAE;IAEJ,OAAO,MAAM,CAAC,WAAW,CACxB,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,CACpB,CAAC,CAAC,GAAG,EAAE,KAAK,CAAM,EAAE,EAAE,CAAC,CAAC,GAAG,EAAE,SAAS,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CACnD,CAC2B,CAAA;AAC9B,CAAC,CAAA;AAED,MAAM,QAAQ,GAAG,CACf,CAAK,EACL,SAA0B,EACzB,EAAE;IAEJ,OAAO,MAAM,CAAC,WAAW,CACxB,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,CACvB,CAAC,CAAC,GAAG,EAAE,KAAK,CAAM,EAAE,EAAE,CAAC,SAAS,CAAC,KAAK,EAAE,GAAG,CAAC,CAC5C,CACmC,CAAA;AACtC,CAAC,CAAA"}
|
package/x/pipe.d.ts
ADDED
package/x/pipe.js
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export class Pipe {
|
|
2
|
+
static with(input) {
|
|
3
|
+
return new this(input);
|
|
4
|
+
}
|
|
5
|
+
#input;
|
|
6
|
+
constructor(input) {
|
|
7
|
+
this.#input = input;
|
|
8
|
+
}
|
|
9
|
+
to(fun) {
|
|
10
|
+
return new Pipe(fun(this.#input));
|
|
11
|
+
}
|
|
12
|
+
done() {
|
|
13
|
+
return this.#input;
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=pipe.js.map
|
package/x/pipe.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pipe.js","sourceRoot":"","sources":["../s/pipe.ts"],"names":[],"mappings":"AAGA,MAAM,OAAO,IAAI;IAEhB,MAAM,CAAC,IAAI,CAAI,KAAQ;QACtB,OAAO,IAAI,IAAI,CAAC,KAAK,CAAC,CAAA;IACvB,CAAC;IAED,MAAM,CAAG;IAET,YAAY,KAAQ;QACnB,IAAI,CAAC,MAAM,GAAG,KAAK,CAAA;IACpB,CAAC;IAED,EAAE,CAAI,GAAkB;QACvB,OAAO,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAA;IAClC,CAAC;IAED,IAAI;QACH,OAAO,IAAI,CAAC,MAAM,CAAA;IACnB,CAAC;CACD"}
|
package/x/pubsub.d.ts
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export type Listener<A extends any[]> = (...a: A) => (void | Promise<void>);
|
|
2
|
+
export interface Xub<A extends any[] = []> {
|
|
3
|
+
pub(...a: A): Promise<void>;
|
|
4
|
+
sub(fn: Listener<A>): () => void;
|
|
5
|
+
once(): Promise<A>;
|
|
6
|
+
clear(): void;
|
|
7
|
+
}
|
|
8
|
+
export interface Sub<A extends any[] = []> extends Xub<A> {
|
|
9
|
+
(fn: Listener<A>): () => void;
|
|
10
|
+
}
|
|
11
|
+
export interface Pub<A extends any[] = []> {
|
|
12
|
+
(...a: A): Promise<void>;
|
|
13
|
+
}
|
|
14
|
+
export declare function xub<A extends any[] = []>(): [Pub<A>, Sub<A>];
|
|
15
|
+
/** create a subscriber fn that can be published to */
|
|
16
|
+
export declare function sub<A extends any[] = []>(): Sub<A>;
|
|
17
|
+
/** create a publisher fn that can be subscribed to */
|
|
18
|
+
export declare function pub<A extends any[] = []>(): Pub<A>;
|
package/x/pubsub.js
ADDED
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { deferPromise } from "./defer-promise.js";
|
|
2
|
+
export function xub() {
|
|
3
|
+
const set = new Set();
|
|
4
|
+
function sub(fn) {
|
|
5
|
+
set.add(fn);
|
|
6
|
+
return () => { set.delete(fn); };
|
|
7
|
+
}
|
|
8
|
+
async function pub(...a) {
|
|
9
|
+
await Promise.all([...set].map(fn => fn(...a)));
|
|
10
|
+
}
|
|
11
|
+
async function once() {
|
|
12
|
+
const { promise, resolve } = deferPromise();
|
|
13
|
+
const unsubscribe = sub((...a) => {
|
|
14
|
+
resolve(a);
|
|
15
|
+
unsubscribe();
|
|
16
|
+
});
|
|
17
|
+
return promise;
|
|
18
|
+
}
|
|
19
|
+
function clear() {
|
|
20
|
+
set.clear();
|
|
21
|
+
}
|
|
22
|
+
sub.pub = pub;
|
|
23
|
+
sub.sub = sub;
|
|
24
|
+
sub.once = once;
|
|
25
|
+
sub.clear = clear;
|
|
26
|
+
pub.pub = pub;
|
|
27
|
+
pub.sub = sub;
|
|
28
|
+
pub.once = once;
|
|
29
|
+
pub.clear = clear;
|
|
30
|
+
return [pub, sub];
|
|
31
|
+
}
|
|
32
|
+
/** create a subscriber fn that can be published to */
|
|
33
|
+
export function sub() {
|
|
34
|
+
return xub()[1];
|
|
35
|
+
}
|
|
36
|
+
/** create a publisher fn that can be subscribed to */
|
|
37
|
+
export function pub() {
|
|
38
|
+
return xub()[0];
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=pubsub.js.map
|
package/x/pubsub.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pubsub.js","sourceRoot":"","sources":["../s/pubsub.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,YAAY,EAAC,MAAM,oBAAoB,CAAA;AAmB/C,MAAM,UAAU,GAAG;IAClB,MAAM,GAAG,GAAG,IAAI,GAAG,EAAe,CAAA;IAElC,SAAS,GAAG,CAAC,EAAe;QAC3B,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;QACX,OAAO,GAAG,EAAE,GAAG,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA,CAAC,CAAC,CAAA;IAChC,CAAC;IAED,KAAK,UAAU,GAAG,CAAC,GAAG,CAAI;QACzB,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAA;IAChD,CAAC;IAED,KAAK,UAAU,IAAI;QAClB,MAAM,EAAC,OAAO,EAAE,OAAO,EAAC,GAAG,YAAY,EAAK,CAAA;QAC5C,MAAM,WAAW,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE;YAChC,OAAO,CAAC,CAAC,CAAC,CAAA;YACV,WAAW,EAAE,CAAA;QACd,CAAC,CAAC,CAAA;QACF,OAAO,OAAO,CAAA;IACf,CAAC;IAED,SAAS,KAAK;QACb,GAAG,CAAC,KAAK,EAAE,CAAA;IACZ,CAAC;IAED,GAAG,CAAC,GAAG,GAAG,GAAG,CAAA;IACb,GAAG,CAAC,GAAG,GAAG,GAAG,CAAA;IACb,GAAG,CAAC,IAAI,GAAG,IAAI,CAAA;IACf,GAAG,CAAC,KAAK,GAAG,KAAK,CAAA;IAEjB,GAAG,CAAC,GAAG,GAAG,GAAG,CAAA;IACb,GAAG,CAAC,GAAG,GAAG,GAAG,CAAA;IACb,GAAG,CAAC,IAAI,GAAG,IAAI,CAAA;IACf,GAAG,CAAC,KAAK,GAAG,KAAK,CAAA;IAEjB,OAAO,CAAC,GAAG,EAAE,GAAG,CAAqB,CAAA;AACtC,CAAC;AAED,sDAAsD;AACtD,MAAM,UAAU,GAAG;IAClB,OAAO,GAAG,EAAK,CAAC,CAAC,CAAC,CAAA;AACnB,CAAC;AAED,sDAAsD;AACtD,MAAM,UAAU,GAAG;IAClB,OAAO,GAAG,EAAK,CAAC,CAAC,CAAC,CAAA;AACnB,CAAC"}
|
package/x/trash.d.ts
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/** a trashcan where you can collect disposer fns, and dispose them all at once */
|
|
2
|
+
export declare class Trash {
|
|
3
|
+
#private;
|
|
4
|
+
/** add a disposer fn to the trashcan */
|
|
5
|
+
add(...fns: (() => void)[]): this;
|
|
6
|
+
/** add a disposable object to the trashcan, and return the object */
|
|
7
|
+
disposable<X extends {
|
|
8
|
+
dispose: () => void;
|
|
9
|
+
}>(x: X): X;
|
|
10
|
+
/** add an item's disposer fn, and return the item */
|
|
11
|
+
bag<X>(x: X, fn: (x: X) => void): X;
|
|
12
|
+
/** dispose of everything in the trashcan */
|
|
13
|
+
dispose(): void;
|
|
14
|
+
}
|
package/x/trash.js
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/** a trashcan where you can collect disposer fns, and dispose them all at once */
|
|
2
|
+
export class Trash {
|
|
3
|
+
#fns = [];
|
|
4
|
+
/** add a disposer fn to the trashcan */
|
|
5
|
+
add(...fns) {
|
|
6
|
+
this.#fns.push(...fns);
|
|
7
|
+
return this;
|
|
8
|
+
}
|
|
9
|
+
/** add a disposable object to the trashcan, and return the object */
|
|
10
|
+
disposable(x) {
|
|
11
|
+
return this.bag(x, () => x.dispose());
|
|
12
|
+
}
|
|
13
|
+
/** add an item's disposer fn, and return the item */
|
|
14
|
+
bag(x, fn) {
|
|
15
|
+
this.add(() => fn(x));
|
|
16
|
+
return x;
|
|
17
|
+
}
|
|
18
|
+
/** dispose of everything in the trashcan */
|
|
19
|
+
dispose() {
|
|
20
|
+
for (const fn of this.#fns.reverse())
|
|
21
|
+
fn();
|
|
22
|
+
this.#fns = [];
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=trash.js.map
|
package/x/trash.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"trash.js","sourceRoot":"","sources":["../s/trash.ts"],"names":[],"mappings":"AACA,kFAAkF;AAClF,MAAM,OAAO,KAAK;IACjB,IAAI,GAAmB,EAAE,CAAA;IAEzB,wCAAwC;IACxC,GAAG,CAAC,GAAG,GAAmB;QACzB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAA;QACtB,OAAO,IAAI,CAAA;IACZ,CAAC;IAED,qEAAqE;IACrE,UAAU,CAAkC,CAAI;QAC/C,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAA;IACtC,CAAC;IAED,qDAAqD;IACrD,GAAG,CAAI,CAAI,EAAE,EAAkB;QAC9B,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAA;QACrB,OAAO,CAAC,CAAA;IACT,CAAC;IAED,4CAA4C;IAC5C,OAAO;QACN,KAAK,MAAM,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;YACnC,EAAE,EAAE,CAAA;QACL,IAAI,CAAC,IAAI,GAAG,EAAE,CAAA;IACf,CAAC;CACD"}
|