@e280/stz 0.0.0-2 → 0.0.0-21

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 (148) hide show
  1. package/README.md +170 -0
  2. package/package.json +9 -5
  3. package/s/clone/clone.test.ts +123 -123
  4. package/s/coalesce.ts +6 -0
  5. package/s/data/base-x.ts +164 -0
  6. package/s/data/base58.ts +15 -5
  7. package/s/data/base64.ts +15 -6
  8. package/s/data/base64url.ts +15 -6
  9. package/s/data/bytename/bytename.test.ts +49 -0
  10. package/s/data/{barname/barname.ts → bytename/bytename.ts} +38 -10
  11. package/s/data/bytename/index.ts +4 -0
  12. package/s/data/bytename/thumbprint.test.ts +53 -0
  13. package/s/data/bytename/thumbprint.ts +112 -0
  14. package/s/data/bytes.ts +12 -2
  15. package/s/data/data.test.ts +93 -0
  16. package/s/data/hex.ts +15 -5
  17. package/s/data/txt.ts +14 -4
  18. package/s/deadline.ts +7 -4
  19. package/s/debounce/debounce.test.ts +73 -73
  20. package/s/deep/deep.test.ts +8 -8
  21. package/s/deep/parts/equal.test.ts +123 -124
  22. package/s/{defer-promise.ts → defer.ts} +2 -2
  23. package/s/drill.ts +20 -0
  24. package/s/id-counter.ts +9 -0
  25. package/s/index.ts +12 -2
  26. package/s/is.ts +10 -4
  27. package/s/loopy.ts +12 -0
  28. package/s/map-g.ts +2 -2
  29. package/s/nap.ts +1 -0
  30. package/s/pubsub.ts +20 -2
  31. package/s/tests.test.ts +19 -0
  32. package/x/clone/clone.test.d.ts +15 -1
  33. package/x/clone/clone.test.js +106 -124
  34. package/x/clone/clone.test.js.map +1 -1
  35. package/x/coalesce.d.ts +2 -0
  36. package/x/coalesce.js +5 -0
  37. package/x/coalesce.js.map +1 -0
  38. package/x/data/base-x.d.ts +44 -0
  39. package/x/data/base-x.js +142 -0
  40. package/x/data/base-x.js.map +1 -0
  41. package/x/data/base58.d.ts +5 -1
  42. package/x/data/base58.js +13 -5
  43. package/x/data/base58.js.map +1 -1
  44. package/x/data/base64.d.ts +7 -3
  45. package/x/data/base64.js +13 -5
  46. package/x/data/base64.js.map +1 -1
  47. package/x/data/base64url.d.ts +5 -1
  48. package/x/data/base64url.js +13 -5
  49. package/x/data/base64url.js.map +1 -1
  50. package/x/data/bytename/bytename.d.ts +19 -0
  51. package/x/data/{barname/barname.js → bytename/bytename.js} +27 -11
  52. package/x/data/bytename/bytename.js.map +1 -0
  53. package/x/data/bytename/bytename.test.d.ts +17 -0
  54. package/x/data/bytename/bytename.test.js +41 -0
  55. package/x/data/bytename/bytename.test.js.map +1 -0
  56. package/x/data/bytename/index.d.ts +2 -0
  57. package/x/data/bytename/index.js +3 -0
  58. package/x/data/bytename/index.js.map +1 -0
  59. package/x/data/bytename/thumbprint.d.ts +36 -0
  60. package/x/data/bytename/thumbprint.js +79 -0
  61. package/x/data/bytename/thumbprint.js.map +1 -0
  62. package/x/data/bytename/thumbprint.test.d.ts +24 -0
  63. package/x/data/bytename/thumbprint.test.js +45 -0
  64. package/x/data/bytename/thumbprint.test.js.map +1 -0
  65. package/x/data/bytename/utils/prefixes.js.map +1 -0
  66. package/x/data/bytename/utils/suffixes.js.map +1 -0
  67. package/x/data/bytes.d.ts +3 -2
  68. package/x/data/bytes.js +11 -2
  69. package/x/data/bytes.js.map +1 -1
  70. package/x/data/data.test.d.ts +68 -0
  71. package/x/data/data.test.js +72 -0
  72. package/x/data/data.test.js.map +1 -0
  73. package/x/data/hex.d.ts +8 -4
  74. package/x/data/hex.js +13 -5
  75. package/x/data/hex.js.map +1 -1
  76. package/x/data/txt.d.ts +6 -2
  77. package/x/data/txt.js +12 -4
  78. package/x/data/txt.js.map +1 -1
  79. package/x/deadline.d.ts +3 -2
  80. package/x/deadline.js +8 -4
  81. package/x/deadline.js.map +1 -1
  82. package/x/debounce/debounce.test.d.ts +8 -1
  83. package/x/debounce/debounce.test.js +70 -74
  84. package/x/debounce/debounce.test.js.map +1 -1
  85. package/x/deep/deep.test.d.ts +21 -1
  86. package/x/deep/deep.test.js +5 -9
  87. package/x/deep/deep.test.js.map +1 -1
  88. package/x/deep/parts/equal.test.d.ts +19 -1
  89. package/x/deep/parts/equal.test.js +107 -125
  90. package/x/deep/parts/equal.test.js.map +1 -1
  91. package/x/{defer-promise.d.ts → defer.d.ts} +2 -2
  92. package/x/{defer-promise.js → defer.js} +2 -2
  93. package/x/defer.js.map +1 -0
  94. package/x/drill.d.ts +4 -0
  95. package/x/drill.js +12 -0
  96. package/x/drill.js.map +1 -0
  97. package/x/id-counter.d.ts +5 -0
  98. package/x/id-counter.js +10 -0
  99. package/x/id-counter.js.map +1 -0
  100. package/x/index.d.ts +10 -2
  101. package/x/index.js +10 -2
  102. package/x/index.js.map +1 -1
  103. package/x/is.d.ts +6 -4
  104. package/x/is.js +6 -4
  105. package/x/is.js.map +1 -1
  106. package/x/loopy.d.ts +2 -0
  107. package/x/loopy.js +10 -0
  108. package/x/loopy.js.map +1 -0
  109. package/x/map-g.d.ts +3 -3
  110. package/x/map-g.js +1 -1
  111. package/x/map-g.js.map +1 -1
  112. package/x/nap.d.ts +1 -0
  113. package/x/nap.js +1 -0
  114. package/x/nap.js.map +1 -1
  115. package/x/pubsub.d.ts +11 -0
  116. package/x/pubsub.js +4 -2
  117. package/x/pubsub.js.map +1 -1
  118. package/x/tests.test.js +16 -0
  119. package/x/tests.test.js.map +1 -0
  120. package/readme.md +0 -85
  121. package/s/data/anka.ts +0 -66
  122. package/s/data/barname/badge.ts +0 -78
  123. package/s/data/barname/demo.ts +0 -49
  124. package/s/data/barname/index.ts +0 -4
  125. package/x/data/anka.d.ts +0 -5
  126. package/x/data/anka.js +0 -53
  127. package/x/data/anka.js.map +0 -1
  128. package/x/data/barname/badge.d.ts +0 -25
  129. package/x/data/barname/badge.js +0 -64
  130. package/x/data/barname/badge.js.map +0 -1
  131. package/x/data/barname/barname.d.ts +0 -7
  132. package/x/data/barname/barname.js.map +0 -1
  133. package/x/data/barname/demo.js +0 -45
  134. package/x/data/barname/demo.js.map +0 -1
  135. package/x/data/barname/index.d.ts +0 -2
  136. package/x/data/barname/index.js +0 -3
  137. package/x/data/barname/index.js.map +0 -1
  138. package/x/data/barname/utils/prefixes.js.map +0 -1
  139. package/x/data/barname/utils/suffixes.js.map +0 -1
  140. package/x/defer-promise.js.map +0 -1
  141. /package/{license → LICENSE} +0 -0
  142. /package/s/data/{barname → bytename}/utils/prefixes.ts +0 -0
  143. /package/s/data/{barname → bytename}/utils/suffixes.ts +0 -0
  144. /package/x/data/{barname → bytename}/utils/prefixes.d.ts +0 -0
  145. /package/x/data/{barname → bytename}/utils/prefixes.js +0 -0
  146. /package/x/data/{barname → bytename}/utils/suffixes.d.ts +0 -0
  147. /package/x/data/{barname → bytename}/utils/suffixes.js +0 -0
  148. /package/x/{data/barname/demo.d.ts → tests.test.d.ts} +0 -0
@@ -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,2 @@
1
+ /** return a single function that calls all the provided functions */
2
+ export declare function coalesce<A extends any[] = []>(...fns: ((...a: A) => void)[]): (...a: A) => void;
package/x/coalesce.js ADDED
@@ -0,0 +1,5 @@
1
+ /** return a single function that calls all the provided functions */
2
+ export function coalesce(...fns) {
3
+ return (...a) => fns.forEach(fn => fn(...a));
4
+ }
5
+ //# sourceMappingURL=coalesce.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"coalesce.js","sourceRoot":"","sources":["../s/coalesce.ts"],"names":[],"mappings":"AACA,qEAAqE;AACrE,MAAM,UAAU,QAAQ,CAAuB,GAAG,GAA0B;IAC3E,OAAO,CAAC,GAAG,CAAI,EAAE,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA;AAChD,CAAC"}
@@ -0,0 +1,44 @@
1
+ export type Lexicon = {
2
+ characters: string;
3
+ padding?: {
4
+ character: string;
5
+ size: number;
6
+ };
7
+ };
8
+ export declare class BaseX {
9
+ lexicon: Lexicon;
10
+ static lexicons: Readonly<{
11
+ base2: {
12
+ characters: string;
13
+ };
14
+ hex: {
15
+ characters: string;
16
+ };
17
+ base36: {
18
+ characters: string;
19
+ };
20
+ base58: {
21
+ characters: string;
22
+ };
23
+ base62: {
24
+ characters: string;
25
+ };
26
+ base64url: {
27
+ characters: string;
28
+ };
29
+ base64: {
30
+ characters: string;
31
+ padding: {
32
+ character: string;
33
+ size: number;
34
+ };
35
+ };
36
+ }>;
37
+ private lookup;
38
+ constructor(lexicon: Lexicon);
39
+ toBytes(s: string): Uint8Array;
40
+ fromBytes(bytes: Uint8Array): string;
41
+ toInteger(s: string): number;
42
+ fromInteger(n: number): string;
43
+ random(count?: number): string;
44
+ }
@@ -0,0 +1,142 @@
1
+ import { Bytes } from "./bytes.js";
2
+ export class BaseX {
3
+ lexicon;
4
+ static lexicons = Object.freeze({
5
+ base2: { characters: "01" },
6
+ hex: { characters: "0123456789abcdef" },
7
+ base36: { characters: "0123456789abcdefghijklmnopqrstuvwxyz" },
8
+ base58: { characters: "123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz" },
9
+ base62: { characters: "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz" },
10
+ base64url: { characters: "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_" },
11
+ base64: {
12
+ characters: "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",
13
+ padding: { character: "=", size: 4 },
14
+ },
15
+ });
16
+ lookup;
17
+ constructor(lexicon) {
18
+ this.lexicon = lexicon;
19
+ this.lookup = Object.fromEntries([...lexicon.characters].map((char, i) => [char, i]));
20
+ }
21
+ toBytes(s) {
22
+ const bitsPerChar = Math.log2(this.lexicon.characters.length);
23
+ if (Number.isInteger(bitsPerChar)) {
24
+ // Bitstream mode (for power-of-2 lexicons)
25
+ let bitBuffer = 0;
26
+ let bitCount = 0;
27
+ const output = [];
28
+ for (const char of s) {
29
+ if (char === this.lexicon.padding?.character)
30
+ continue;
31
+ const val = this.lookup[char];
32
+ if (val === undefined)
33
+ throw new Error(`Invalid character: ${char}`);
34
+ bitBuffer = (bitBuffer << bitsPerChar) | val;
35
+ bitCount += bitsPerChar;
36
+ while (bitCount >= 8) {
37
+ bitCount -= 8;
38
+ output.push((bitBuffer >> bitCount) & 0xFF);
39
+ }
40
+ }
41
+ return new Uint8Array(output);
42
+ }
43
+ // Radix mode fallback
44
+ let num = 0n;
45
+ const base = BigInt(this.lexicon.characters.length);
46
+ let negative = false;
47
+ if (s.startsWith("-")) {
48
+ s = s.slice(1);
49
+ negative = true;
50
+ }
51
+ for (const char of s) {
52
+ const val = this.lookup[char];
53
+ if (val === undefined)
54
+ throw new Error(`Invalid character: ${char}`);
55
+ num = num * base + BigInt(val);
56
+ }
57
+ const out = [];
58
+ while (num > 0n) {
59
+ out.unshift(Number(num % 256n));
60
+ num = num / 256n;
61
+ }
62
+ return new Uint8Array(out);
63
+ }
64
+ fromBytes(bytes) {
65
+ const bitsPerChar = Math.log2(this.lexicon.characters.length);
66
+ if (Number.isInteger(bitsPerChar)) {
67
+ // Bitstream mode (for power-of-2 lexicons)
68
+ let bitBuffer = 0;
69
+ let bitCount = 0;
70
+ let out = "";
71
+ for (const byte of bytes) {
72
+ bitBuffer = (bitBuffer << 8) | byte;
73
+ bitCount += 8;
74
+ while (bitCount >= bitsPerChar) {
75
+ bitCount -= bitsPerChar;
76
+ const index = (bitBuffer >> bitCount) & ((1 << bitsPerChar) - 1);
77
+ out += this.lexicon.characters[index];
78
+ }
79
+ }
80
+ // 🩹 flush remaining bits
81
+ if (bitCount > 0) {
82
+ const index = (bitBuffer << (bitsPerChar - bitCount)) & ((1 << bitsPerChar) - 1);
83
+ out += this.lexicon.characters[index];
84
+ }
85
+ // Add padding if applicable
86
+ if (this.lexicon.padding) {
87
+ while (out.length % this.lexicon.padding.size !== 0)
88
+ out += this.lexicon.padding.character;
89
+ }
90
+ return out;
91
+ }
92
+ // Radix mode fallback
93
+ let num = 0n;
94
+ for (const byte of bytes)
95
+ num = (num << 8n) + BigInt(byte);
96
+ if (num === 0n)
97
+ return this.lexicon.characters[0];
98
+ const base = BigInt(this.lexicon.characters.length);
99
+ let out = "";
100
+ while (num > 0n) {
101
+ out = this.lexicon.characters[Number(num % base)] + out;
102
+ num = num / base;
103
+ }
104
+ return out;
105
+ }
106
+ toInteger(s) {
107
+ if (!s)
108
+ return 0;
109
+ let n = 0n;
110
+ let negative = false;
111
+ const base = BigInt(this.lexicon.characters.length);
112
+ if (s.startsWith("-")) {
113
+ s = s.slice(1);
114
+ negative = true;
115
+ }
116
+ for (const char of s) {
117
+ const value = this.lookup[char];
118
+ if (value === undefined)
119
+ throw new Error(`Invalid character: ${char}`);
120
+ n = n * base + BigInt(value);
121
+ }
122
+ return Number(negative ? -n : n);
123
+ }
124
+ fromInteger(n) {
125
+ n = Math.floor(n);
126
+ const negative = n < 0;
127
+ let num = BigInt(negative ? -n : n);
128
+ if (num === 0n)
129
+ return this.lexicon.characters[0];
130
+ const base = BigInt(this.lexicon.characters.length);
131
+ let out = "";
132
+ while (num > 0n) {
133
+ out = this.lexicon.characters[Number(num % base)] + out;
134
+ num = num / base;
135
+ }
136
+ return negative ? `-${out}` : out;
137
+ }
138
+ random(count = 32) {
139
+ return this.fromBytes(Bytes.random(count));
140
+ }
141
+ }
142
+ //# sourceMappingURL=base-x.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base-x.js","sourceRoot":"","sources":["../../s/data/base-x.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,9 @@
1
1
  export declare const Base58: Readonly<{
2
+ fromBytes(bytes: Uint8Array): string;
3
+ toBytes(string: string): Uint8Array<ArrayBuffer>;
4
+ random(count?: number): string;
5
+ /** @deprecated renamed to `fromBytes` */
2
6
  string(bytes: Uint8Array): string;
7
+ /** @deprecated renamed to `toBytes` */
3
8
  bytes(string: string): Uint8Array<ArrayBuffer>;
4
- random(count?: number): string;
5
9
  }>;
package/x/data/base58.js CHANGED
@@ -12,8 +12,8 @@ import { Bytes } from "./bytes.js";
12
12
  const base = 58;
13
13
  const characters = "123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz";
14
14
  export const Base58 = Object.freeze({
15
- string(bytes) {
16
- let intVal = BigInt("0x" + Hex.string(bytes));
15
+ fromBytes(bytes) {
16
+ let intVal = BigInt("0x" + Hex.fromBytes(bytes));
17
17
  let encoded = "";
18
18
  while (intVal > 0) {
19
19
  const remainder = intVal % BigInt(base);
@@ -28,7 +28,7 @@ export const Base58 = Object.freeze({
28
28
  }
29
29
  return encoded;
30
30
  },
31
- bytes(string) {
31
+ toBytes(string) {
32
32
  let intVal = BigInt(0);
33
33
  for (const char of string) {
34
34
  const index = characters.indexOf(char);
@@ -39,7 +39,7 @@ export const Base58 = Object.freeze({
39
39
  let hex = intVal.toString(16);
40
40
  if (hex.length % 2 !== 0)
41
41
  hex = "0" + hex;
42
- const bytes = Hex.bytes(hex);
42
+ const bytes = Hex.toBytes(hex);
43
43
  let leadingZeroes = 0;
44
44
  for (const char of string) {
45
45
  if (char === characters[0])
@@ -52,7 +52,15 @@ export const Base58 = Object.freeze({
52
52
  return decoded;
53
53
  },
54
54
  random(count = 32) {
55
- return this.string(Bytes.random(count));
55
+ return this.fromBytes(Bytes.random(count));
56
+ },
57
+ /** @deprecated renamed to `fromBytes` */
58
+ string(bytes) {
59
+ return Base58.fromBytes(bytes);
60
+ },
61
+ /** @deprecated renamed to `toBytes` */
62
+ bytes(string) {
63
+ return Base58.toBytes(string);
56
64
  },
57
65
  });
58
66
  //# sourceMappingURL=base58.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"base58.js","sourceRoot":"","sources":["../../s/data/base58.ts"],"names":[],"mappings":"AACA;;;;;;;;EAQE;AAEF,OAAO,EAAC,GAAG,EAAC,MAAM,UAAU,CAAA;AAC5B,OAAO,EAAC,KAAK,EAAC,MAAM,YAAY,CAAA;AAEhC,MAAM,IAAI,GAAG,EAAE,CAAA;AACf,MAAM,UAAU,GAAG,4DAA4D,CAAA;AAE/E,MAAM,CAAC,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;IACnC,MAAM,CAAC,KAAiB;QACvB,IAAI,MAAM,GAAG,MAAM,CAAC,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAA;QAC7C,IAAI,OAAO,GAAG,EAAE,CAAA;QAEhB,OAAO,MAAM,GAAG,CAAC,EAAE,CAAC;YACnB,MAAM,SAAS,GAAG,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,CAAA;YACvC,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,CAAA;YAC9B,OAAO,GAAG,UAAU,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,GAAG,OAAO,CAAA;QAClD,CAAC;QAED,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YAC1B,IAAI,IAAI,KAAK,CAAC;gBAAE,OAAO,GAAG,UAAU,CAAC,CAAC,CAAC,GAAG,OAAO,CAAA;;gBAC5C,MAAK;QACX,CAAC;QAED,OAAO,OAAO,CAAA;IACf,CAAC;IAED,KAAK,CAAC,MAAc;QACnB,IAAI,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,CAAA;QAEtB,KAAK,MAAM,IAAI,IAAI,MAAM,EAAE,CAAC;YAC3B,MAAM,KAAK,GAAG,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;YACtC,IAAI,KAAK,KAAK,CAAC,CAAC;gBAAE,MAAM,IAAI,KAAK,CAAC,sBAAsB,IAAI,oBAAoB,CAAC,CAAA;YACjF,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,CAAA;QAC/C,CAAC;QAED,IAAI,GAAG,GAAG,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAA;QAC7B,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,KAAK,CAAC;YAAE,GAAG,GAAG,GAAG,GAAG,GAAG,CAAA;QACzC,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;QAE5B,IAAI,aAAa,GAAG,CAAC,CAAA;QACrB,KAAK,MAAM,IAAI,IAAI,MAAM,EAAE,CAAC;YAC3B,IAAI,IAAI,KAAK,UAAU,CAAC,CAAC,CAAC;gBAAE,aAAa,EAAE,CAAA;;gBACtC,MAAK;QACX,CAAC;QAED,MAAM,OAAO,GAAG,IAAI,UAAU,CAAC,aAAa,GAAG,KAAK,CAAC,MAAM,CAAC,CAAA;QAC5D,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,aAAa,CAAC,CAAA;QACjC,OAAO,OAAO,CAAA;IACf,CAAC;IAED,MAAM,CAAC,KAAK,GAAG,EAAE;QAChB,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAA;IACxC,CAAC;CACD,CAAC,CAAA"}
1
+ {"version":3,"file":"base58.js","sourceRoot":"","sources":["../../s/data/base58.ts"],"names":[],"mappings":"AACA;;;;;;;;EAQE;AAEF,OAAO,EAAC,GAAG,EAAC,MAAM,UAAU,CAAA;AAC5B,OAAO,EAAC,KAAK,EAAC,MAAM,YAAY,CAAA;AAEhC,MAAM,IAAI,GAAG,EAAE,CAAA;AACf,MAAM,UAAU,GAAG,4DAA4D,CAAA;AAE/E,MAAM,CAAC,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;IACnC,SAAS,CAAC,KAAiB;QAC1B,IAAI,MAAM,GAAG,MAAM,CAAC,IAAI,GAAG,GAAG,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAA;QAChD,IAAI,OAAO,GAAG,EAAE,CAAA;QAEhB,OAAO,MAAM,GAAG,CAAC,EAAE,CAAC;YACnB,MAAM,SAAS,GAAG,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,CAAA;YACvC,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,CAAA;YAC9B,OAAO,GAAG,UAAU,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,GAAG,OAAO,CAAA;QAClD,CAAC;QAED,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YAC1B,IAAI,IAAI,KAAK,CAAC;gBAAE,OAAO,GAAG,UAAU,CAAC,CAAC,CAAC,GAAG,OAAO,CAAA;;gBAC5C,MAAK;QACX,CAAC;QAED,OAAO,OAAO,CAAA;IACf,CAAC;IAED,OAAO,CAAC,MAAc;QACrB,IAAI,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,CAAA;QAEtB,KAAK,MAAM,IAAI,IAAI,MAAM,EAAE,CAAC;YAC3B,MAAM,KAAK,GAAG,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;YACtC,IAAI,KAAK,KAAK,CAAC,CAAC;gBAAE,MAAM,IAAI,KAAK,CAAC,sBAAsB,IAAI,oBAAoB,CAAC,CAAA;YACjF,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,CAAA;QAC/C,CAAC;QAED,IAAI,GAAG,GAAG,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAA;QAC7B,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,KAAK,CAAC;YAAE,GAAG,GAAG,GAAG,GAAG,GAAG,CAAA;QACzC,MAAM,KAAK,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;QAE9B,IAAI,aAAa,GAAG,CAAC,CAAA;QACrB,KAAK,MAAM,IAAI,IAAI,MAAM,EAAE,CAAC;YAC3B,IAAI,IAAI,KAAK,UAAU,CAAC,CAAC,CAAC;gBAAE,aAAa,EAAE,CAAA;;gBACtC,MAAK;QACX,CAAC;QAED,MAAM,OAAO,GAAG,IAAI,UAAU,CAAC,aAAa,GAAG,KAAK,CAAC,MAAM,CAAC,CAAA;QAC5D,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,aAAa,CAAC,CAAA;QACjC,OAAO,OAAO,CAAA;IACf,CAAC;IAED,MAAM,CAAC,KAAK,GAAG,EAAE;QAChB,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAA;IAC3C,CAAC;IAED,yCAAyC;IACzC,MAAM,CAAC,KAAiB;QACvB,OAAO,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,CAAA;IAC/B,CAAC;IAED,uCAAuC;IACvC,KAAK,CAAC,MAAc;QACnB,OAAO,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAA;IAC9B,CAAC;CACD,CAAC,CAAA"}
@@ -1,5 +1,9 @@
1
- export declare const Base64: {
1
+ export declare const Base64: Readonly<{
2
+ fromBytes(bytes: Uint8Array): string;
3
+ toBytes(string: string): Uint8Array<ArrayBuffer>;
4
+ random(count?: number): string;
5
+ /** @deprecated rename to "fromBytes" */
2
6
  string(bytes: Uint8Array): string;
7
+ /** @deprecated rename to "toBytes" */
3
8
  bytes(string: string): Uint8Array<ArrayBuffer>;
4
- random(count?: number): string;
5
- };
9
+ }>;
package/x/data/base64.js CHANGED
@@ -1,17 +1,25 @@
1
1
  import { Bytes } from "./bytes.js";
2
- export const Base64 = {
3
- string(bytes) {
2
+ export const Base64 = Object.freeze({
3
+ fromBytes(bytes) {
4
4
  return (typeof btoa === "function")
5
5
  ? btoa(String.fromCharCode(...bytes))
6
6
  : Buffer.from(bytes).toString("base64");
7
7
  },
8
- bytes(string) {
8
+ toBytes(string) {
9
9
  return (typeof atob === "function")
10
10
  ? Uint8Array.from(atob(string), char => char.charCodeAt(0))
11
11
  : Uint8Array.from(Buffer.from(string, "base64"));
12
12
  },
13
13
  random(count = 32) {
14
- return this.string(Bytes.random(count));
14
+ return this.fromBytes(Bytes.random(count));
15
+ },
16
+ /** @deprecated rename to "fromBytes" */
17
+ string(bytes) {
18
+ return Base64.fromBytes(bytes);
19
+ },
20
+ /** @deprecated rename to "toBytes" */
21
+ bytes(string) {
22
+ return Base64.toBytes(string);
15
23
  },
16
- };
24
+ });
17
25
  //# sourceMappingURL=base64.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"base64.js","sourceRoot":"","sources":["../../s/data/base64.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,KAAK,EAAC,MAAM,YAAY,CAAA;AAEhC,MAAM,CAAC,MAAM,MAAM,GAAG;IAErB,MAAM,CAAC,KAAiB;QACvB,OAAO,CAAC,OAAO,IAAI,KAAK,UAAU,CAAC;YAClC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,GAAG,KAAK,CAAC,CAAC;YACrC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAA;IACzC,CAAC;IAED,KAAK,CAAC,MAAc;QACnB,OAAO,CAAC,OAAO,IAAI,KAAK,UAAU,CAAC;YAClC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;YAC3D,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAA;IAClD,CAAC;IAED,MAAM,CAAC,KAAK,GAAG,EAAE;QAChB,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAA;IACxC,CAAC;CACD,CAAA"}
1
+ {"version":3,"file":"base64.js","sourceRoot":"","sources":["../../s/data/base64.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,KAAK,EAAC,MAAM,YAAY,CAAA;AAEhC,MAAM,CAAC,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;IACnC,SAAS,CAAC,KAAiB;QAC1B,OAAO,CAAC,OAAO,IAAI,KAAK,UAAU,CAAC;YAClC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,GAAG,KAAK,CAAC,CAAC;YACrC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAA;IACzC,CAAC;IAED,OAAO,CAAC,MAAc;QACrB,OAAO,CAAC,OAAO,IAAI,KAAK,UAAU,CAAC;YAClC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;YAC3D,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAA;IAClD,CAAC;IAED,MAAM,CAAC,KAAK,GAAG,EAAE;QAChB,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAA;IAC3C,CAAC;IAED,wCAAwC;IACxC,MAAM,CAAC,KAAiB;QACvB,OAAO,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,CAAA;IAC/B,CAAC;IAED,sCAAsC;IACtC,KAAK,CAAC,MAAc;QACnB,OAAO,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAA;IAC9B,CAAC;CACD,CAAC,CAAA"}
@@ -1,5 +1,9 @@
1
1
  export declare const Base64url: {
2
+ fromBytes(bytes: Uint8Array): string;
3
+ toBytes(string: string): Uint8Array<ArrayBuffer>;
4
+ random(count?: number): string;
5
+ /** @deprecated renamed to "fromBytes" */
2
6
  string(bytes: Uint8Array): string;
7
+ /** @deprecated renamed to "toBytes" */
3
8
  bytes(string: string): Uint8Array<ArrayBuffer>;
4
- random(count?: number): string;
5
9
  };