@e280/stz 0.0.0-4 → 0.0.0-6

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.
Files changed (78) hide show
  1. package/package.json +8 -5
  2. package/s/clone/clone.test.ts +123 -123
  3. package/s/data/bytename/badge.test.ts +52 -0
  4. package/s/data/bytename/badge.ts +72 -0
  5. package/s/data/bytename/bytename.test.ts +49 -0
  6. package/s/data/{barname/barname.ts → bytename/bytename.ts} +20 -8
  7. package/s/data/bytename/index.ts +4 -0
  8. package/s/data/bytes.ts +10 -0
  9. package/s/debounce/debounce.test.ts +73 -73
  10. package/s/deep/deep.test.ts +8 -8
  11. package/s/deep/parts/equal.test.ts +123 -124
  12. package/s/index.ts +2 -1
  13. package/s/loopy.ts +12 -0
  14. package/s/tests.test.ts +17 -0
  15. package/x/clone/clone.test.d.ts +15 -1
  16. package/x/clone/clone.test.js +106 -124
  17. package/x/clone/clone.test.js.map +1 -1
  18. package/x/data/bytename/badge.d.ts +25 -0
  19. package/x/data/bytename/badge.js +50 -0
  20. package/x/data/bytename/badge.js.map +1 -0
  21. package/x/data/bytename/badge.test.d.ts +23 -0
  22. package/x/data/bytename/badge.test.js +44 -0
  23. package/x/data/bytename/badge.test.js.map +1 -0
  24. package/x/data/bytename/bytename.d.ts +11 -0
  25. package/x/data/{barname/barname.js → bytename/bytename.js} +11 -9
  26. package/x/data/bytename/bytename.js.map +1 -0
  27. package/x/data/bytename/bytename.test.d.ts +17 -0
  28. package/x/data/bytename/bytename.test.js +41 -0
  29. package/x/data/bytename/bytename.test.js.map +1 -0
  30. package/x/data/bytename/index.d.ts +2 -0
  31. package/x/data/bytename/index.js +3 -0
  32. package/x/data/bytename/index.js.map +1 -0
  33. package/x/data/bytename/utils/prefixes.js.map +1 -0
  34. package/x/data/bytename/utils/suffixes.js.map +1 -0
  35. package/x/data/bytes.d.ts +1 -0
  36. package/x/data/bytes.js +9 -0
  37. package/x/data/bytes.js.map +1 -1
  38. package/x/debounce/debounce.test.d.ts +8 -1
  39. package/x/debounce/debounce.test.js +70 -74
  40. package/x/debounce/debounce.test.js.map +1 -1
  41. package/x/deep/deep.test.d.ts +21 -1
  42. package/x/deep/deep.test.js +5 -9
  43. package/x/deep/deep.test.js.map +1 -1
  44. package/x/deep/parts/equal.test.d.ts +19 -1
  45. package/x/deep/parts/equal.test.js +107 -125
  46. package/x/deep/parts/equal.test.js.map +1 -1
  47. package/x/index.d.ts +2 -1
  48. package/x/index.js +2 -1
  49. package/x/index.js.map +1 -1
  50. package/x/loopy.d.ts +2 -0
  51. package/x/loopy.js +10 -0
  52. package/x/loopy.js.map +1 -0
  53. package/x/tests.test.js +14 -0
  54. package/x/tests.test.js.map +1 -0
  55. package/s/data/barname/badge.ts +0 -78
  56. package/s/data/barname/demo.ts +0 -49
  57. package/s/data/barname/index.ts +0 -4
  58. package/x/data/barname/badge.d.ts +0 -25
  59. package/x/data/barname/badge.js +0 -64
  60. package/x/data/barname/badge.js.map +0 -1
  61. package/x/data/barname/barname.d.ts +0 -7
  62. package/x/data/barname/barname.js.map +0 -1
  63. package/x/data/barname/demo.js +0 -45
  64. package/x/data/barname/demo.js.map +0 -1
  65. package/x/data/barname/index.d.ts +0 -2
  66. package/x/data/barname/index.js +0 -3
  67. package/x/data/barname/index.js.map +0 -1
  68. package/x/data/barname/utils/prefixes.js.map +0 -1
  69. package/x/data/barname/utils/suffixes.js.map +0 -1
  70. /package/{license → LICENSE} +0 -0
  71. /package/{readme.md → README.md} +0 -0
  72. /package/s/data/{barname → bytename}/utils/prefixes.ts +0 -0
  73. /package/s/data/{barname → bytename}/utils/suffixes.ts +0 -0
  74. /package/x/data/{barname → bytename}/utils/prefixes.d.ts +0 -0
  75. /package/x/data/{barname → bytename}/utils/prefixes.js +0 -0
  76. /package/x/data/{barname → bytename}/utils/suffixes.d.ts +0 -0
  77. /package/x/data/{barname → bytename}/utils/suffixes.js +0 -0
  78. /package/x/{data/barname/demo.d.ts → tests.test.d.ts} +0 -0
@@ -1,8 +1,8 @@
1
- //
2
- // import {Suite} from "cynic"
3
- // import deepEqual from "./parts/equal.test.js"
4
- //
5
- // export default <Suite>{
6
- // deepEqual,
7
- // }
8
- //
1
+
2
+ import {Science} from "@e280/science"
3
+ import deepEqual from "./parts/equal.test.js"
4
+
5
+ export default Science.suite({
6
+ deepEqual,
7
+ })
8
+
@@ -1,124 +1,123 @@
1
- //
2
- // import {Suite, expect} from "cynic"
3
- // import {deepEqual} from "./equal.js"
4
- //
5
- // export default <Suite>{
6
- //
7
- // async "compare primitive types"() {
8
- // expect(deepEqual(123, 123)).equals(true)
9
- // expect(deepEqual("abc", "abc")).equals(true)
10
- // expect(deepEqual(true, true)).equals(true)
11
- // expect(deepEqual(123, "123")).equals(false)
12
- // expect(deepEqual(true, 1)).equals(false)
13
- // },
14
- //
15
- // async "compare arrays"() {
16
- // const array1 = [1, 2, 3]
17
- // const array2 = [1, 2, 3]
18
- // const array3 = [1, 2, 4]
19
- // expect(deepEqual(array1, array2)).equals(true)
20
- // expect(deepEqual(array1, array3)).equals(false)
21
- // },
22
- //
23
- // async "compare plain objects"() {
24
- // const obj1 = { foo: "bar", baz: 123 }
25
- // const obj2 = { foo: "bar", baz: 123 }
26
- // const obj3 = { foo: "bar", baz: 124 }
27
- // expect(deepEqual(obj1, obj2)).equals(true)
28
- // expect(deepEqual(obj1, obj3)).equals(false)
29
- // },
30
- //
31
- // async "compare nested objects"() {
32
- // const obj1 = { foo: "bar", inner: { baz: 123, deeper: { qux: true }}}
33
- // const obj2 = { foo: "bar", inner: { baz: 123, deeper: { qux: true }}}
34
- // const obj3 = { foo: "bar", inner: { baz: 124, deeper: { qux: true }}}
35
- // expect(deepEqual(obj1, obj2)).equals(true)
36
- // expect(deepEqual(obj1, obj3)).equals(false)
37
- // },
38
- //
39
- // async "compare array of objects"() {
40
- // const arr1 = [{ foo: "bar" }, { baz: 123 }, { qux: true }]
41
- // const arr2 = [{ foo: "bar" }, { baz: 123 }, { qux: true }]
42
- // const arr3 = [{ foo: "bar" }, { baz: 123 }, { qux: false }]
43
- // expect(deepEqual(arr1, arr2)).equals(true)
44
- // expect(deepEqual(arr1, arr3)).equals(false)
45
- // },
46
- //
47
- // async "compare null and undefined"() {
48
- // expect(deepEqual(null, null)).equals(true)
49
- // expect(deepEqual(undefined, undefined)).equals(true)
50
- // expect(deepEqual(null, undefined)).equals(false)
51
- // },
52
- //
53
- // async "compare with nested arrays"() {
54
- // const obj1 = { foo: "bar", array: [1, 2, [3, 4]] }
55
- // const obj2 = { foo: "bar", array: [1, 2, [3, 4]] }
56
- // const obj3 = { foo: "bar", array: [1, 2, [3, 5]] }
57
- // expect(deepEqual(obj1, obj2)).equals(true)
58
- // expect(deepEqual(obj1, obj3)).equals(false)
59
- // },
60
- //
61
- // async "circularity is forbidden"() {
62
- // const obj1 = {alpha: 1} as any
63
- // const obj2 = {alpha: 1} as any
64
- // obj1.bravo = obj1
65
- // obj2.bravo = obj2
66
- // expect(() => deepEqual(obj1, obj2)).throws()
67
- // },
68
- //
69
- // async "duplicate references are allowed"() {
70
- // const dupe = {a: 123}
71
- // const obj1 = {alpha: 1, dupe}
72
- // const obj2 = {alpha: 1, dupe}
73
- // const obj3 = {alpha: 1, dupe: {a: 0}}
74
- // expect(deepEqual(obj1, obj2)).equals(true)
75
- // expect(deepEqual(obj1, obj3)).equals(false)
76
- // },
77
- //
78
- // "maps and sets": {
79
- // async "compare maps"() {
80
- // const map1 = new Map([['key1', 'value1'], ['key2', 'value2']])
81
- // const map2 = new Map([['key1', 'value1'], ['key2', 'value2']])
82
- // const map3 = new Map([['key1', 'value1'], ['key2', 'value3']])
83
- // expect(deepEqual(map1, map2)).equals(true)
84
- // expect(deepEqual(map1, map3)).equals(false)
85
- // },
86
- //
87
- // async "compare sets"() {
88
- // const set1 = new Set([1, 2, 3])
89
- // const set2 = new Set([1, 2, 3])
90
- // const set3 = new Set([1, 2, 4])
91
- // expect(deepEqual(set1, set2)).equals(true)
92
- // expect(deepEqual(set1, set3)).equals(false)
93
- // },
94
- //
95
- // async "compare nested maps and sets"() {
96
- // const obj1 = { map: new Map([['key', new Set([1, 2, 3])]]) }
97
- // const obj2 = { map: new Map([['key', new Set([1, 2, 3])]]) }
98
- // const obj3 = { map: new Map([['key', new Set([1, 2, 4])]]) }
99
- // expect(deepEqual(obj1, obj2)).equals(true)
100
- // expect(deepEqual(obj1, obj3)).equals(false)
101
- // },
102
- //
103
- // async "compare complex structures"() {
104
- // const map1 = new Map([['set', new Set([{ a: 1 }, { b: 2 }])]])
105
- // const map2 = new Map([['set', new Set([{ a: 1 }, { b: 2 }])]])
106
- // const map3 = new Map([['set', new Set([{ a: 1 }, { b: 3 }])]])
107
- // expect(deepEqual(map1, map2)).equals(true)
108
- // expect(deepEqual(map1, map3)).equals(false)
109
- // },
110
- //
111
- // async "compare edge cases"() {
112
- // const emptyMap1 = new Map()
113
- // const emptyMap2 = new Map()
114
- // const emptySet1 = new Set()
115
- // const emptySet2 = new Set()
116
- // const mixedMap1 = new Map([['b', 2], ['a', 1]])
117
- // const mixedMap2 = new Map([['a', 1], ['b', 2]])
118
- // expect(deepEqual(emptyMap1, emptyMap2)).equals(true)
119
- // expect(deepEqual(emptySet1, emptySet2)).equals(true)
120
- // expect(deepEqual(mixedMap1, mixedMap2)).equals(true)
121
- // },
122
- // },
123
- // }
124
- //
1
+
2
+ import {deepEqual} from "./equal.js"
3
+ import {Science, expect} from "@e280/science"
4
+
5
+ export default Science.suite({
6
+ async "compare primitive types"() {
7
+ expect(deepEqual(123, 123)).is(true)
8
+ expect(deepEqual("abc", "abc")).is(true)
9
+ expect(deepEqual(true, true)).is(true)
10
+ expect(deepEqual(123, "123")).is(false)
11
+ expect(deepEqual(true, 1)).is(false)
12
+ },
13
+
14
+ async "compare arrays"() {
15
+ const array1 = [1, 2, 3]
16
+ const array2 = [1, 2, 3]
17
+ const array3 = [1, 2, 4]
18
+ expect(deepEqual(array1, array2)).is(true)
19
+ expect(deepEqual(array1, array3)).is(false)
20
+ },
21
+
22
+ async "compare plain objects"() {
23
+ const obj1 = { foo: "bar", baz: 123 }
24
+ const obj2 = { foo: "bar", baz: 123 }
25
+ const obj3 = { foo: "bar", baz: 124 }
26
+ expect(deepEqual(obj1, obj2)).is(true)
27
+ expect(deepEqual(obj1, obj3)).is(false)
28
+ },
29
+
30
+ async "compare nested objects"() {
31
+ const obj1 = { foo: "bar", inner: { baz: 123, deeper: { qux: true }}}
32
+ const obj2 = { foo: "bar", inner: { baz: 123, deeper: { qux: true }}}
33
+ const obj3 = { foo: "bar", inner: { baz: 124, deeper: { qux: true }}}
34
+ expect(deepEqual(obj1, obj2)).is(true)
35
+ expect(deepEqual(obj1, obj3)).is(false)
36
+ },
37
+
38
+ async "compare array of objects"() {
39
+ const arr1 = [{ foo: "bar" }, { baz: 123 }, { qux: true }]
40
+ const arr2 = [{ foo: "bar" }, { baz: 123 }, { qux: true }]
41
+ const arr3 = [{ foo: "bar" }, { baz: 123 }, { qux: false }]
42
+ expect(deepEqual(arr1, arr2)).is(true)
43
+ expect(deepEqual(arr1, arr3)).is(false)
44
+ },
45
+
46
+ async "compare null and undefined"() {
47
+ expect(deepEqual(null, null)).is(true)
48
+ expect(deepEqual(undefined, undefined)).is(true)
49
+ expect(deepEqual(null, undefined)).is(false)
50
+ },
51
+
52
+ async "compare with nested arrays"() {
53
+ const obj1 = { foo: "bar", array: [1, 2, [3, 4]] }
54
+ const obj2 = { foo: "bar", array: [1, 2, [3, 4]] }
55
+ const obj3 = { foo: "bar", array: [1, 2, [3, 5]] }
56
+ expect(deepEqual(obj1, obj2)).is(true)
57
+ expect(deepEqual(obj1, obj3)).is(false)
58
+ },
59
+
60
+ async "circularity is forbidden"() {
61
+ const obj1 = {alpha: 1} as any
62
+ const obj2 = {alpha: 1} as any
63
+ obj1.bravo = obj1
64
+ obj2.bravo = obj2
65
+ expect(() => deepEqual(obj1, obj2)).throws()
66
+ },
67
+
68
+ async "duplicate references are allowed"() {
69
+ const dupe = {a: 123}
70
+ const obj1 = {alpha: 1, dupe}
71
+ const obj2 = {alpha: 1, dupe}
72
+ const obj3 = {alpha: 1, dupe: {a: 0}}
73
+ expect(deepEqual(obj1, obj2)).is(true)
74
+ expect(deepEqual(obj1, obj3)).is(false)
75
+ },
76
+
77
+ "maps and sets": {
78
+ async "compare maps"() {
79
+ const map1 = new Map([['key1', 'value1'], ['key2', 'value2']])
80
+ const map2 = new Map([['key1', 'value1'], ['key2', 'value2']])
81
+ const map3 = new Map([['key1', 'value1'], ['key2', 'value3']])
82
+ expect(deepEqual(map1, map2)).is(true)
83
+ expect(deepEqual(map1, map3)).is(false)
84
+ },
85
+
86
+ async "compare sets"() {
87
+ const set1 = new Set([1, 2, 3])
88
+ const set2 = new Set([1, 2, 3])
89
+ const set3 = new Set([1, 2, 4])
90
+ expect(deepEqual(set1, set2)).is(true)
91
+ expect(deepEqual(set1, set3)).is(false)
92
+ },
93
+
94
+ async "compare nested maps and sets"() {
95
+ const obj1 = { map: new Map([['key', new Set([1, 2, 3])]]) }
96
+ const obj2 = { map: new Map([['key', new Set([1, 2, 3])]]) }
97
+ const obj3 = { map: new Map([['key', new Set([1, 2, 4])]]) }
98
+ expect(deepEqual(obj1, obj2)).is(true)
99
+ expect(deepEqual(obj1, obj3)).is(false)
100
+ },
101
+
102
+ async "compare complex structures"() {
103
+ const map1 = new Map([['set', new Set([{ a: 1 }, { b: 2 }])]])
104
+ const map2 = new Map([['set', new Set([{ a: 1 }, { b: 2 }])]])
105
+ const map3 = new Map([['set', new Set([{ a: 1 }, { b: 3 }])]])
106
+ expect(deepEqual(map1, map2)).is(true)
107
+ expect(deepEqual(map1, map3)).is(false)
108
+ },
109
+
110
+ async "compare edge cases"() {
111
+ const emptyMap1 = new Map()
112
+ const emptyMap2 = new Map()
113
+ const emptySet1 = new Set()
114
+ const emptySet2 = new Set()
115
+ const mixedMap1 = new Map([['b', 2], ['a', 1]])
116
+ const mixedMap2 = new Map([['a', 1], ['b', 2]])
117
+ expect(deepEqual(emptyMap1, emptyMap2)).is(true)
118
+ expect(deepEqual(emptySet1, emptySet2)).is(true)
119
+ expect(deepEqual(mixedMap1, mixedMap2)).is(true)
120
+ },
121
+ },
122
+ })
123
+
package/s/index.ts CHANGED
@@ -1,5 +1,5 @@
1
1
 
2
- export * from "./data/barname/index.js"
2
+ export * from "./data/bytename/index.js"
3
3
  export * from "./data/base58.js"
4
4
  export * from "./data/base64.js"
5
5
  export * from "./data/base64url.js"
@@ -21,6 +21,7 @@ export * from "./drill.js"
21
21
  export * from "./escape-regex.js"
22
22
  export * from "./hat.js"
23
23
  export * from "./is.js"
24
+ export * from "./loopy.js"
24
25
  export * from "./map-g.js"
25
26
  export * from "./nap.js"
26
27
  export * from "./ob.js"
package/s/loopy.ts ADDED
@@ -0,0 +1,12 @@
1
+
2
+ export function* loop(n: number) {
3
+ for (let i = 0; i < n; i++)
4
+ yield i
5
+ }
6
+
7
+ export function* loop2d([columns, rows]: [number, number]) {
8
+ for (let y = 0; y < rows; y++)
9
+ for (let x = 0; x < columns; x++)
10
+ yield [x, y] as [number, number]
11
+ }
12
+
@@ -0,0 +1,17 @@
1
+
2
+ import {Science} from "@e280/science"
3
+
4
+ import cloneTest from "./clone/clone.test.js"
5
+ import badgeTest from "./data/bytename/badge.test.js"
6
+ import debounceTest from "./debounce/debounce.test.js"
7
+ import bytenameTest from "./data/bytename/bytename.test.js"
8
+ import deepTest from "./deep/deep.test.js"
9
+
10
+ await Science.run({
11
+ clone: cloneTest,
12
+ bytename: bytenameTest,
13
+ badge: badgeTest,
14
+ debounce: debounceTest,
15
+ deep: deepTest,
16
+ })
17
+
@@ -1 +1,15 @@
1
- export {};
1
+ declare const _default: {
2
+ "clone primitive types"(): Promise<void>;
3
+ "clone arrays"(): Promise<void>;
4
+ "clone plain objects"(): Promise<void>;
5
+ "clone Map"(): Promise<void>;
6
+ "clone Set"(): Promise<void>;
7
+ "clone Date"(): Promise<void>;
8
+ "clone objects with circular reference"(): Promise<void>;
9
+ "clone nested objects"(): Promise<void>;
10
+ "clone array of objects"(): Promise<void>;
11
+ "clone object with array"(): Promise<void>;
12
+ "clone object with Map"(): Promise<void>;
13
+ "clone object with duplicate sibling references"(): Promise<void>;
14
+ };
15
+ export default _default;
@@ -1,125 +1,107 @@
1
- //
2
- // import {Suite, expect} from "cynic"
3
- // import {clone} from "./clone.js"
4
- //
5
- // function checkMapOrSetEquality(original: any, cloned: any) {
6
- // const originalEntries = JSON.stringify(Array.from(original))
7
- // const clonedEntries = JSON.stringify(Array.from(cloned))
8
- // expect(clonedEntries).equals(originalEntries)
9
- // expect(cloned).not.equals(original) // check for deep cloning
10
- // }
11
- //
12
- // export default <Suite>{
13
- //
14
- // async "clone primitive types"() {
15
- // expect(clone(123)).equals(123)
16
- // expect(clone("abc")).equals("abc")
17
- // expect(clone(true)).equals(true)
18
- // },
19
- //
20
- // async "clone arrays"() {
21
- // const array = [1, 2, 3]
22
- // const clonedArray = clone(array)
23
- // expect(JSON.stringify(clonedArray)).equals(JSON.stringify(array))
24
- // expect(clonedArray).not.equals(array) // check for deep cloning
25
- // },
26
- //
27
- // async "clone plain objects"() {
28
- // const object = {foo: "bar", baz: 123}
29
- // const clonedObject = clone(object)
30
- // expect(JSON.stringify(clonedObject)).equals(JSON.stringify(object))
31
- // expect(clonedObject).not.equals(object) // check for deep cloning
32
- // },
33
- //
34
- // async "clone Map"() {
35
- // const map = new Map()
36
- // map.set("key", "value")
37
- // const clonedMap = clone(map)
38
- // expect(map.get("key")).equals("value")
39
- // expect(clonedMap).not.equals(map)
40
- // },
41
- //
42
- // async "clone Set"() {
43
- // const set = new Set()
44
- // set.add("value")
45
- // const clonedSet = clone(set)
46
- // expect(clonedSet.has("value")).ok()
47
- // expect(clonedSet).not.equals(set)
48
- // },
49
- //
50
- // async "clone Date"() {
51
- // const date = new Date()
52
- // const clonedDate = clone(date)
53
- // expect(clonedDate.getTime()).equals(date.getTime())
54
- // expect(clonedDate).not.equals(date) // check for deep cloning
55
- // },
56
- //
57
- // async "clone objects with circular reference"() {
58
- // const object: any = {foo: "bar"}
59
- // object.self = object // create circular reference
60
- // let error: any
61
- // try {
62
- // clone(object)
63
- // } catch (e) {
64
- // error = e
65
- // }
66
- // expect(error).not.equals(undefined)
67
- // expect(error instanceof Error).ok()
68
- // },
69
- //
70
- // async "clone nested objects"() {
71
- // const object = {foo: "bar", inner: {baz: 123, deeper: {qux: true}}}
72
- // const clonedObject = clone(object)
73
- // expect(JSON.stringify(clonedObject)).equals(JSON.stringify(object))
74
- // expect(clonedObject).not.equals(object) // check for deep cloning
75
- // expect(clonedObject.inner).not.equals(object.inner) // check for deep cloning
76
- // expect(clonedObject.inner.deeper).not.equals(object.inner.deeper) // check for deep cloning
77
- // },
78
- //
79
- // async "clone array of objects"() {
80
- // const array = [{foo: "bar"}, {baz: 123}, {qux: true}]
81
- // const clonedArray = clone(array)
82
- // expect(JSON.stringify(clonedArray)).equals(JSON.stringify(array))
83
- // expect(clonedArray).not.equals(array) // check for deep cloning
84
- // },
85
- //
86
- // async "clone object with array"() {
87
- // const object = {foo: "bar", array: [1, 2, 3]}
88
- // const clonedObject = clone(object)
89
- // expect(JSON.stringify(clonedObject)).equals(JSON.stringify(object))
90
- // expect(clonedObject).not.equals(object) // check for deep cloning
91
- // },
92
- //
93
- // async "clone object with Map"() {
94
- // const map = new Map()
95
- // map.set("key", "value")
96
- // const object = {foo: "bar", map}
97
- // const clonedObject = clone(object)
98
- // expect(JSON.stringify(clonedObject.foo)).equals(JSON.stringify(object.foo))
99
- // checkMapOrSetEquality(object.map, clonedObject.map)
100
- // },
101
- //
102
- // async "clone object with duplicate sibling references"() {
103
- // const dupeObject = { id: 1, name: "H4CK3RM4N" }
104
- // const data = { obj1: dupeObject, obj2: dupeObject }
105
- //
106
- // let didThrow = false
107
- // let clonedData: typeof data = {} as typeof data
108
- //
109
- // try {
110
- // clonedData = clone(data)
111
- // }
112
- // catch (error) {
113
- // didThrow = true
114
- // }
115
- //
116
- // expect(didThrow).not.equals(true)
117
- // expect(clonedData.obj1).not.equals(clonedData.obj2)
118
- // expect(clonedData.obj1.id).equals(1)
119
- // expect(clonedData.obj1.name).equals("H4CK3RM4N")
120
- // expect(clonedData.obj2.id).equals(1)
121
- // expect(clonedData.obj2.name).equals("H4CK3RM4N")
122
- // },
123
- // }
124
- export {};
1
+ import { clone } from "./clone.js";
2
+ import { Science, expect } from "@e280/science";
3
+ function checkMapOrSetEquality(original, cloned) {
4
+ const originalEntries = JSON.stringify(Array.from(original));
5
+ const clonedEntries = JSON.stringify(Array.from(cloned));
6
+ expect(clonedEntries).is(originalEntries);
7
+ expect(cloned).not.is(original); // check for deep cloning
8
+ }
9
+ export default Science.suite({
10
+ async "clone primitive types"() {
11
+ expect(clone(123)).is(123);
12
+ expect(clone("abc")).is("abc");
13
+ expect(clone(true)).is(true);
14
+ },
15
+ async "clone arrays"() {
16
+ const array = [1, 2, 3];
17
+ const clonedArray = clone(array);
18
+ expect(JSON.stringify(clonedArray)).is(JSON.stringify(array));
19
+ expect(clonedArray).not.is(array); // check for deep cloning
20
+ },
21
+ async "clone plain objects"() {
22
+ const object = { foo: "bar", baz: 123 };
23
+ const clonedObject = clone(object);
24
+ expect(JSON.stringify(clonedObject)).is(JSON.stringify(object));
25
+ expect(clonedObject).not.is(object); // check for deep cloning
26
+ },
27
+ async "clone Map"() {
28
+ const map = new Map();
29
+ map.set("key", "value");
30
+ const clonedMap = clone(map);
31
+ expect(map.get("key")).is("value");
32
+ expect(clonedMap).not.is(map);
33
+ },
34
+ async "clone Set"() {
35
+ const set = new Set();
36
+ set.add("value");
37
+ const clonedSet = clone(set);
38
+ expect(clonedSet.has("value")).ok();
39
+ expect(clonedSet).not.is(set);
40
+ },
41
+ async "clone Date"() {
42
+ const date = new Date();
43
+ const clonedDate = clone(date);
44
+ expect(clonedDate.getTime()).is(date.getTime());
45
+ expect(clonedDate).not.is(date); // check for deep cloning
46
+ },
47
+ async "clone objects with circular reference"() {
48
+ const object = { foo: "bar" };
49
+ object.self = object; // create circular reference
50
+ let error;
51
+ try {
52
+ clone(object);
53
+ }
54
+ catch (e) {
55
+ error = e;
56
+ }
57
+ expect(error).not.is(undefined);
58
+ expect(error instanceof Error).ok();
59
+ },
60
+ async "clone nested objects"() {
61
+ const object = { foo: "bar", inner: { baz: 123, deeper: { qux: true } } };
62
+ const clonedObject = clone(object);
63
+ expect(JSON.stringify(clonedObject)).is(JSON.stringify(object));
64
+ expect(clonedObject).not.is(object); // check for deep cloning
65
+ expect(clonedObject.inner).not.is(object.inner); // check for deep cloning
66
+ expect(clonedObject.inner.deeper).not.is(object.inner.deeper); // check for deep cloning
67
+ },
68
+ async "clone array of objects"() {
69
+ const array = [{ foo: "bar" }, { baz: 123 }, { qux: true }];
70
+ const clonedArray = clone(array);
71
+ expect(JSON.stringify(clonedArray)).is(JSON.stringify(array));
72
+ expect(clonedArray).not.is(array); // check for deep cloning
73
+ },
74
+ async "clone object with array"() {
75
+ const object = { foo: "bar", array: [1, 2, 3] };
76
+ const clonedObject = clone(object);
77
+ expect(JSON.stringify(clonedObject)).is(JSON.stringify(object));
78
+ expect(clonedObject).not.is(object); // check for deep cloning
79
+ },
80
+ async "clone object with Map"() {
81
+ const map = new Map();
82
+ map.set("key", "value");
83
+ const object = { foo: "bar", map };
84
+ const clonedObject = clone(object);
85
+ expect(JSON.stringify(clonedObject.foo)).is(JSON.stringify(object.foo));
86
+ checkMapOrSetEquality(object.map, clonedObject.map);
87
+ },
88
+ async "clone object with duplicate sibling references"() {
89
+ const dupeObject = { id: 1, name: "H4CK3RM4N" };
90
+ const data = { obj1: dupeObject, obj2: dupeObject };
91
+ let didThrow = false;
92
+ let clonedData = {};
93
+ try {
94
+ clonedData = clone(data);
95
+ }
96
+ catch (error) {
97
+ didThrow = true;
98
+ }
99
+ expect(didThrow).not.is(true);
100
+ expect(clonedData.obj1).not.is(clonedData.obj2);
101
+ expect(clonedData.obj1.id).is(1);
102
+ expect(clonedData.obj1.name).is("H4CK3RM4N");
103
+ expect(clonedData.obj2.id).is(1);
104
+ expect(clonedData.obj2.name).is("H4CK3RM4N");
105
+ },
106
+ });
125
107
  //# sourceMappingURL=clone.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"clone.test.js","sourceRoot":"","sources":["../../s/clone/clone.test.ts"],"names":[],"mappings":"AAAA,EAAE;AACF,sCAAsC;AACtC,mCAAmC;AACnC,EAAE;AACF,+DAA+D;AAC/D,gEAAgE;AAChE,4DAA4D;AAC5D,iDAAiD;AACjD,iEAAiE;AACjE,IAAI;AACJ,EAAE;AACF,0BAA0B;AAC1B,EAAE;AACF,qCAAqC;AACrC,mCAAmC;AACnC,uCAAuC;AACvC,qCAAqC;AACrC,MAAM;AACN,EAAE;AACF,4BAA4B;AAC5B,4BAA4B;AAC5B,qCAAqC;AACrC,sEAAsE;AACtE,oEAAoE;AACpE,MAAM;AACN,EAAE;AACF,mCAAmC;AACnC,0CAA0C;AAC1C,uCAAuC;AACvC,wEAAwE;AACxE,sEAAsE;AACtE,MAAM;AACN,EAAE;AACF,yBAAyB;AACzB,0BAA0B;AAC1B,4BAA4B;AAC5B,iCAAiC;AACjC,2CAA2C;AAC3C,sCAAsC;AACtC,MAAM;AACN,EAAE;AACF,yBAAyB;AACzB,0BAA0B;AAC1B,qBAAqB;AACrB,iCAAiC;AACjC,wCAAwC;AACxC,sCAAsC;AACtC,MAAM;AACN,EAAE;AACF,0BAA0B;AAC1B,4BAA4B;AAC5B,mCAAmC;AACnC,wDAAwD;AACxD,kEAAkE;AAClE,MAAM;AACN,EAAE;AACF,qDAAqD;AACrD,qCAAqC;AACrC,sDAAsD;AACtD,mBAAmB;AACnB,UAAU;AACV,mBAAmB;AACnB,kBAAkB;AAClB,eAAe;AACf,MAAM;AACN,wCAAwC;AACxC,wCAAwC;AACxC,MAAM;AACN,EAAE;AACF,oCAAoC;AACpC,wEAAwE;AACxE,uCAAuC;AACvC,wEAAwE;AACxE,sEAAsE;AACtE,kFAAkF;AAClF,gGAAgG;AAChG,MAAM;AACN,EAAE;AACF,sCAAsC;AACtC,0DAA0D;AAC1D,qCAAqC;AACrC,sEAAsE;AACtE,oEAAoE;AACpE,MAAM;AACN,EAAE;AACF,uCAAuC;AACvC,kDAAkD;AAClD,uCAAuC;AACvC,wEAAwE;AACxE,sEAAsE;AACtE,MAAM;AACN,EAAE;AACF,qCAAqC;AACrC,0BAA0B;AAC1B,4BAA4B;AAC5B,qCAAqC;AACrC,uCAAuC;AACvC,gFAAgF;AAChF,wDAAwD;AACxD,MAAM;AACN,EAAE;AACF,8DAA8D;AAC9D,oDAAoD;AACpD,wDAAwD;AACxD,EAAE;AACF,yBAAyB;AACzB,oDAAoD;AACpD,EAAE;AACF,UAAU;AACV,8BAA8B;AAC9B,MAAM;AACN,oBAAoB;AACpB,qBAAqB;AACrB,MAAM;AACN,EAAE;AACF,sCAAsC;AACtC,wDAAwD;AACxD,yCAAyC;AACzC,qDAAqD;AACrD,yCAAyC;AACzC,qDAAqD;AACrD,MAAM;AACN,IAAI"}
1
+ {"version":3,"file":"clone.test.js","sourceRoot":"","sources":["../../s/clone/clone.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ export type BadgeOptions = {
2
+ leadBytes: number;
3
+ leadSeparator: string;
4
+ restSeparator: string;
5
+ };
6
+ export type ParsedBadge = {
7
+ lead: string;
8
+ rest: string;
9
+ bytes: Uint8Array;
10
+ };
11
+ /**
12
+ * Badge is a human-friendly presentation format for arbitrary binary data.
13
+ * - looks like "nodlyn.fasrep:39gfeGFAAnBzH5pkT7EdoETMUMAekG9h1iymk6k"
14
+ * - the first lead bytes are shown in bytename format
15
+ * - the rest of the data is in base58
16
+ * - designed to be a nice way to present 256-bit passport thumbprints
17
+ * - can actually represent any number of bytes
18
+ * - "nodlyn.fasrep:39gfeGFAAnBzH5pkT7EdoETMUMAekG9h1iymk6k"
19
+ */
20
+ export declare const Badge: {
21
+ defaults: BadgeOptions;
22
+ string(bytes: Uint8Array, options?: Partial<BadgeOptions>): string;
23
+ parse(badge: string): ParsedBadge;
24
+ bytes(badge: string): Uint8Array<ArrayBufferLike>;
25
+ };