@feelyourprotocol/binarytree 8141.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.
Files changed (124) hide show
  1. package/LICENSE +22 -0
  2. package/README.md +46 -0
  3. package/dist/cjs/binaryTree.d.ts +167 -0
  4. package/dist/cjs/binaryTree.d.ts.map +1 -0
  5. package/dist/cjs/binaryTree.js +606 -0
  6. package/dist/cjs/binaryTree.js.map +1 -0
  7. package/dist/cjs/constructors.d.ts +4 -0
  8. package/dist/cjs/constructors.d.ts.map +1 -0
  9. package/dist/cjs/constructors.js +44 -0
  10. package/dist/cjs/constructors.js.map +1 -0
  11. package/dist/cjs/db/checkpoint.d.ts +87 -0
  12. package/dist/cjs/db/checkpoint.d.ts.map +1 -0
  13. package/dist/cjs/db/checkpoint.js +257 -0
  14. package/dist/cjs/db/checkpoint.js.map +1 -0
  15. package/dist/cjs/db/index.d.ts +2 -0
  16. package/dist/cjs/db/index.d.ts.map +1 -0
  17. package/dist/cjs/db/index.js +18 -0
  18. package/dist/cjs/db/index.js.map +1 -0
  19. package/dist/cjs/index.d.ts +7 -0
  20. package/dist/cjs/index.d.ts.map +1 -0
  21. package/dist/cjs/index.js +23 -0
  22. package/dist/cjs/index.js.map +1 -0
  23. package/dist/cjs/node/index.d.ts +4 -0
  24. package/dist/cjs/node/index.d.ts.map +1 -0
  25. package/dist/cjs/node/index.js +20 -0
  26. package/dist/cjs/node/index.js.map +1 -0
  27. package/dist/cjs/node/internalNode.d.ts +37 -0
  28. package/dist/cjs/node/internalNode.d.ts.map +1 -0
  29. package/dist/cjs/node/internalNode.js +92 -0
  30. package/dist/cjs/node/internalNode.js.map +1 -0
  31. package/dist/cjs/node/stemNode.d.ts +34 -0
  32. package/dist/cjs/node/stemNode.d.ts.map +1 -0
  33. package/dist/cjs/node/stemNode.js +75 -0
  34. package/dist/cjs/node/stemNode.js.map +1 -0
  35. package/dist/cjs/node/types.d.ts +35 -0
  36. package/dist/cjs/node/types.d.ts.map +1 -0
  37. package/dist/cjs/node/types.js +9 -0
  38. package/dist/cjs/node/types.js.map +1 -0
  39. package/dist/cjs/node/util.d.ts +9 -0
  40. package/dist/cjs/node/util.d.ts.map +1 -0
  41. package/dist/cjs/node/util.js +40 -0
  42. package/dist/cjs/node/util.js.map +1 -0
  43. package/dist/cjs/package.json +3 -0
  44. package/dist/cjs/proof.d.ts +16 -0
  45. package/dist/cjs/proof.d.ts.map +1 -0
  46. package/dist/cjs/proof.js +49 -0
  47. package/dist/cjs/proof.js.map +1 -0
  48. package/dist/cjs/types.d.ts +45 -0
  49. package/dist/cjs/types.d.ts.map +1 -0
  50. package/dist/cjs/types.js +6 -0
  51. package/dist/cjs/types.js.map +1 -0
  52. package/dist/cjs/util.d.ts +17 -0
  53. package/dist/cjs/util.d.ts.map +1 -0
  54. package/dist/cjs/util.js +71 -0
  55. package/dist/cjs/util.js.map +1 -0
  56. package/dist/esm/binaryTree.d.ts +167 -0
  57. package/dist/esm/binaryTree.d.ts.map +1 -0
  58. package/dist/esm/binaryTree.js +602 -0
  59. package/dist/esm/binaryTree.js.map +1 -0
  60. package/dist/esm/constructors.d.ts +4 -0
  61. package/dist/esm/constructors.d.ts.map +1 -0
  62. package/dist/esm/constructors.js +41 -0
  63. package/dist/esm/constructors.js.map +1 -0
  64. package/dist/esm/db/checkpoint.d.ts +87 -0
  65. package/dist/esm/db/checkpoint.d.ts.map +1 -0
  66. package/dist/esm/db/checkpoint.js +253 -0
  67. package/dist/esm/db/checkpoint.js.map +1 -0
  68. package/dist/esm/db/index.d.ts +2 -0
  69. package/dist/esm/db/index.d.ts.map +1 -0
  70. package/dist/esm/db/index.js +2 -0
  71. package/dist/esm/db/index.js.map +1 -0
  72. package/dist/esm/index.d.ts +7 -0
  73. package/dist/esm/index.d.ts.map +1 -0
  74. package/dist/esm/index.js +7 -0
  75. package/dist/esm/index.js.map +1 -0
  76. package/dist/esm/node/index.d.ts +4 -0
  77. package/dist/esm/node/index.d.ts.map +1 -0
  78. package/dist/esm/node/index.js +4 -0
  79. package/dist/esm/node/index.js.map +1 -0
  80. package/dist/esm/node/internalNode.d.ts +37 -0
  81. package/dist/esm/node/internalNode.d.ts.map +1 -0
  82. package/dist/esm/node/internalNode.js +88 -0
  83. package/dist/esm/node/internalNode.js.map +1 -0
  84. package/dist/esm/node/stemNode.d.ts +34 -0
  85. package/dist/esm/node/stemNode.d.ts.map +1 -0
  86. package/dist/esm/node/stemNode.js +71 -0
  87. package/dist/esm/node/stemNode.js.map +1 -0
  88. package/dist/esm/node/types.d.ts +35 -0
  89. package/dist/esm/node/types.d.ts.map +1 -0
  90. package/dist/esm/node/types.js +6 -0
  91. package/dist/esm/node/types.js.map +1 -0
  92. package/dist/esm/node/util.d.ts +9 -0
  93. package/dist/esm/node/util.d.ts.map +1 -0
  94. package/dist/esm/node/util.js +33 -0
  95. package/dist/esm/node/util.js.map +1 -0
  96. package/dist/esm/package.json +3 -0
  97. package/dist/esm/proof.d.ts +16 -0
  98. package/dist/esm/proof.d.ts.map +1 -0
  99. package/dist/esm/proof.js +45 -0
  100. package/dist/esm/proof.js.map +1 -0
  101. package/dist/esm/types.d.ts +45 -0
  102. package/dist/esm/types.d.ts.map +1 -0
  103. package/dist/esm/types.js +3 -0
  104. package/dist/esm/types.js.map +1 -0
  105. package/dist/esm/util.d.ts +17 -0
  106. package/dist/esm/util.d.ts.map +1 -0
  107. package/dist/esm/util.js +66 -0
  108. package/dist/esm/util.js.map +1 -0
  109. package/dist/tsconfig.prod.cjs.tsbuildinfo +1 -0
  110. package/dist/tsconfig.prod.esm.tsbuildinfo +1 -0
  111. package/package.json +77 -0
  112. package/src/binaryTree.ts +742 -0
  113. package/src/constructors.ts +50 -0
  114. package/src/db/checkpoint.ts +297 -0
  115. package/src/db/index.ts +1 -0
  116. package/src/index.ts +6 -0
  117. package/src/node/index.ts +3 -0
  118. package/src/node/internalNode.ts +112 -0
  119. package/src/node/stemNode.ts +87 -0
  120. package/src/node/types.ts +41 -0
  121. package/src/node/util.ts +38 -0
  122. package/src/proof.ts +54 -0
  123. package/src/types.ts +58 -0
  124. package/src/util.ts +80 -0
@@ -0,0 +1,44 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createBinaryTree = createBinaryTree;
4
+ const util_1 = require("@feelyourprotocol/util");
5
+ const blake3_js_1 = require("@noble/hashes/blake3.js");
6
+ const binaryTree_ts_1 = require("./binaryTree.js");
7
+ const types_ts_1 = require("./types.js");
8
+ async function createBinaryTree(opts) {
9
+ const key = (0, util_1.bytesToHex)(types_ts_1.ROOT_DB_KEY);
10
+ // Provide sensible default options
11
+ const parsedOptions = {
12
+ ...opts,
13
+ db: opts?.db ?? new util_1.MapDB(),
14
+ useRootPersistence: opts?.useRootPersistence ?? false,
15
+ cacheSize: opts?.cacheSize ?? 0,
16
+ hashFunction: opts?.hashFunction ?? blake3_js_1.blake3,
17
+ };
18
+ if (parsedOptions.useRootPersistence === true) {
19
+ if (parsedOptions.root === undefined) {
20
+ const root = await parsedOptions.db.get(key, {
21
+ keyEncoding: util_1.KeyEncoding.Bytes,
22
+ valueEncoding: util_1.ValueEncoding.Bytes,
23
+ });
24
+ if (typeof root === 'string') {
25
+ parsedOptions.root = (0, util_1.unprefixedHexToBytes)(root);
26
+ }
27
+ else {
28
+ parsedOptions.root = root;
29
+ }
30
+ }
31
+ else {
32
+ await parsedOptions.db.put(key, parsedOptions.root, {
33
+ keyEncoding: util_1.KeyEncoding.Bytes,
34
+ valueEncoding: util_1.ValueEncoding.Bytes,
35
+ });
36
+ }
37
+ }
38
+ const tree = new binaryTree_ts_1.BinaryTree(parsedOptions);
39
+ // If the root node does not exist, initialize the empty root node
40
+ if (parsedOptions.root === undefined)
41
+ await tree.createRootNode();
42
+ return tree;
43
+ }
44
+ //# sourceMappingURL=constructors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constructors.js","sourceRoot":"","sources":["../../src/constructors.ts"],"names":[],"mappings":";;AAcA,4CAmCC;AAjDD,2CAMyB;AACzB,uDAAgD;AAEhD,mDAA4C;AAC5C,yCAAwC;AAIjC,KAAK,UAAU,gBAAgB,CAAC,IAA8B;IACnE,MAAM,GAAG,GAAG,IAAA,iBAAU,EAAC,sBAAW,CAAC,CAAA;IAEnC,mCAAmC;IACnC,MAAM,aAAa,GAAG;QACpB,GAAG,IAAI;QACP,EAAE,EAAE,IAAI,EAAE,EAAE,IAAI,IAAI,YAAK,EAAsB;QAC/C,kBAAkB,EAAE,IAAI,EAAE,kBAAkB,IAAI,KAAK;QACrD,SAAS,EAAE,IAAI,EAAE,SAAS,IAAI,CAAC;QAC/B,YAAY,EAAE,IAAI,EAAE,YAAY,IAAI,kBAAM;KAC3C,CAAA;IAED,IAAI,aAAa,CAAC,kBAAkB,KAAK,IAAI,EAAE,CAAC;QAC9C,IAAI,aAAa,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;YACrC,MAAM,IAAI,GAAG,MAAM,aAAa,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE;gBAC3C,WAAW,EAAE,kBAAW,CAAC,KAAK;gBAC9B,aAAa,EAAE,oBAAa,CAAC,KAAK;aACnC,CAAC,CAAA;YACF,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;gBAC7B,aAAa,CAAC,IAAI,GAAG,IAAA,2BAAoB,EAAC,IAAI,CAAC,CAAA;YACjD,CAAC;iBAAM,CAAC;gBACN,aAAa,CAAC,IAAI,GAAG,IAAI,CAAA;YAC3B,CAAC;QACH,CAAC;aAAM,CAAC;YACN,MAAM,aAAa,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,aAAa,CAAC,IAAI,EAAE;gBAClD,WAAW,EAAE,kBAAW,CAAC,KAAK;gBAC9B,aAAa,EAAE,oBAAa,CAAC,KAAK;aACnC,CAAC,CAAA;QACJ,CAAC;IACH,CAAC;IAED,MAAM,IAAI,GAAG,IAAI,0BAAU,CAAC,aAAa,CAAC,CAAA;IAC1C,kEAAkE;IAClE,IAAI,aAAa,CAAC,IAAI,KAAK,SAAS;QAAE,MAAM,IAAI,CAAC,cAAc,EAAE,CAAA;IACjE,OAAO,IAAI,CAAA;AACb,CAAC"}
@@ -0,0 +1,87 @@
1
+ import { LRUCache } from 'lru-cache';
2
+ import type { BatchDBOp, DB } from '@feelyourprotocol/util';
3
+ import type { Checkpoint, CheckpointDBOpts } from '../types.ts';
4
+ /**
5
+ * DB is a thin wrapper around the underlying levelup db,
6
+ * which validates inputs and sets encoding type.
7
+ */
8
+ export declare class CheckpointDB implements DB {
9
+ checkpoints: Checkpoint[];
10
+ db: DB<string, string | Uint8Array>;
11
+ readonly cacheSize: number;
12
+ private readonly valueEncoding;
13
+ protected _cache?: LRUCache<string, Uint8Array>;
14
+ _stats: {
15
+ cache: {
16
+ reads: number;
17
+ hits: number;
18
+ writes: number;
19
+ };
20
+ db: {
21
+ reads: number;
22
+ hits: number;
23
+ writes: number;
24
+ };
25
+ };
26
+ /**
27
+ * Initialize a DB instance.
28
+ */
29
+ constructor(opts: CheckpointDBOpts);
30
+ /**
31
+ * Flush the checkpoints and use the given checkpoints instead.
32
+ * @param {Checkpoint[]} checkpoints
33
+ */
34
+ setCheckpoints(checkpoints: Checkpoint[]): void;
35
+ /**
36
+ * Is the DB during a checkpoint phase?
37
+ */
38
+ hasCheckpoints(): boolean;
39
+ /**
40
+ * Adds a new checkpoint to the stack
41
+ * @param root
42
+ */
43
+ checkpoint(root: Uint8Array): void;
44
+ /**
45
+ * Commits the latest checkpoint
46
+ */
47
+ commit(): Promise<void>;
48
+ /**
49
+ * Reverts the latest checkpoint
50
+ */
51
+ revert(): Promise<Uint8Array<ArrayBufferLike>>;
52
+ /**
53
+ * @inheritDoc
54
+ */
55
+ get(key: Uint8Array): Promise<Uint8Array | undefined>;
56
+ /**
57
+ * @inheritDoc
58
+ */
59
+ put(key: Uint8Array, value: Uint8Array): Promise<void>;
60
+ /**
61
+ * @inheritDoc
62
+ */
63
+ del(key: Uint8Array): Promise<void>;
64
+ /**
65
+ * @inheritDoc
66
+ */
67
+ batch(opStack: BatchDBOp[]): Promise<void>;
68
+ stats(reset?: boolean): {
69
+ size: number;
70
+ cache: {
71
+ reads: number;
72
+ hits: number;
73
+ writes: number;
74
+ };
75
+ db: {
76
+ reads: number;
77
+ hits: number;
78
+ writes: number;
79
+ };
80
+ };
81
+ /**
82
+ * @inheritDoc
83
+ */
84
+ shallowCopy(): CheckpointDB;
85
+ open(): Promise<void>;
86
+ }
87
+ //# sourceMappingURL=checkpoint.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"checkpoint.d.ts","sourceRoot":"","sources":["../../../src/db/checkpoint.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAA;AAEpC,OAAO,KAAK,EAAE,SAAS,EAAE,EAAE,EAAgB,MAAM,kBAAkB,CAAA;AACnE,OAAO,KAAK,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAA;AAE/D;;;GAGG;AACH,qBAAa,YAAa,YAAW,EAAE;IAC9B,WAAW,EAAE,UAAU,EAAE,CAAA;IACzB,EAAE,EAAE,EAAE,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU,CAAC,CAAA;IAC1C,SAAgB,SAAS,EAAE,MAAM,CAAA;IACjC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAe;IAW7C,SAAS,CAAC,MAAM,CAAC,EAAE,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC,CAAA;IAG/C,MAAM;;;;;;;;;;;MAWL;IAED;;OAEG;gBACS,IAAI,EAAE,gBAAgB;IAelC;;;OAGG;IACH,cAAc,CAAC,WAAW,EAAE,UAAU,EAAE;IAWxC;;OAEG;IACH,cAAc;IAId;;;OAGG;IACH,UAAU,CAAC,IAAI,EAAE,UAAU;IAI3B;;OAEG;IACG,MAAM;IA6BZ;;OAEG;IACG,MAAM;IAKZ;;OAEG;IACG,GAAG,CAAC,GAAG,EAAE,UAAU,GAAG,OAAO,CAAC,UAAU,GAAG,SAAS,CAAC;IA2C3D;;OAEG;IACG,GAAG,CAAC,GAAG,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAsB5D;;OAEG;IACG,GAAG,CAAC,GAAG,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAoBzC;;OAEG;IACG,KAAK,CAAC,OAAO,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAgChD,KAAK,CAAC,KAAK,UAAO;;;;;;;;;;;;;IAmBlB;;OAEG;IACH,WAAW,IAAI,YAAY;IAQ3B,IAAI;CAGL"}
@@ -0,0 +1,257 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CheckpointDB = void 0;
4
+ const util_1 = require("@feelyourprotocol/util");
5
+ const lru_cache_1 = require("lru-cache");
6
+ /**
7
+ * DB is a thin wrapper around the underlying levelup db,
8
+ * which validates inputs and sets encoding type.
9
+ */
10
+ class CheckpointDB {
11
+ /**
12
+ * Initialize a DB instance.
13
+ */
14
+ constructor(opts) {
15
+ // protected _cache?: LRUCache<string, Uint8Array | undefined>
16
+ this._stats = {
17
+ cache: {
18
+ reads: 0,
19
+ hits: 0,
20
+ writes: 0,
21
+ },
22
+ db: {
23
+ reads: 0,
24
+ hits: 0,
25
+ writes: 0,
26
+ },
27
+ };
28
+ this.db = opts.db;
29
+ this.cacheSize = opts.cacheSize ?? 0;
30
+ this.valueEncoding = opts.valueEncoding ?? util_1.ValueEncoding.String;
31
+ // Roots of trie at the moment of checkpoint
32
+ this.checkpoints = [];
33
+ if (this.cacheSize > 0) {
34
+ this._cache = new lru_cache_1.LRUCache({
35
+ max: this.cacheSize,
36
+ updateAgeOnGet: true,
37
+ });
38
+ }
39
+ }
40
+ /**
41
+ * Flush the checkpoints and use the given checkpoints instead.
42
+ * @param {Checkpoint[]} checkpoints
43
+ */
44
+ setCheckpoints(checkpoints) {
45
+ this.checkpoints = [];
46
+ for (let i = 0; i < checkpoints.length; i++) {
47
+ this.checkpoints.push({
48
+ root: checkpoints[i].root,
49
+ keyValueMap: new Map(checkpoints[i].keyValueMap),
50
+ });
51
+ }
52
+ }
53
+ /**
54
+ * Is the DB during a checkpoint phase?
55
+ */
56
+ hasCheckpoints() {
57
+ return this.checkpoints.length > 0;
58
+ }
59
+ /**
60
+ * Adds a new checkpoint to the stack
61
+ * @param root
62
+ */
63
+ checkpoint(root) {
64
+ this.checkpoints.push({ keyValueMap: new Map(), root });
65
+ }
66
+ /**
67
+ * Commits the latest checkpoint
68
+ */
69
+ async commit() {
70
+ const { keyValueMap } = this.checkpoints.pop();
71
+ if (!this.hasCheckpoints()) {
72
+ // This was the final checkpoint, we should now commit and flush everything to disk
73
+ const batchOp = [];
74
+ for (const [key, value] of keyValueMap.entries()) {
75
+ if (value === undefined) {
76
+ batchOp.push({
77
+ type: 'del',
78
+ key: (0, util_1.unprefixedHexToBytes)(key),
79
+ });
80
+ }
81
+ else {
82
+ batchOp.push({
83
+ type: 'put',
84
+ key: (0, util_1.unprefixedHexToBytes)(key),
85
+ value,
86
+ });
87
+ }
88
+ }
89
+ await this.batch(batchOp);
90
+ }
91
+ else {
92
+ // dump everything into the current (higher level) diff cache
93
+ const currentKeyValueMap = this.checkpoints[this.checkpoints.length - 1].keyValueMap;
94
+ for (const [key, value] of keyValueMap.entries()) {
95
+ currentKeyValueMap.set(key, value);
96
+ }
97
+ }
98
+ }
99
+ /**
100
+ * Reverts the latest checkpoint
101
+ */
102
+ async revert() {
103
+ const { root } = this.checkpoints.pop();
104
+ return root;
105
+ }
106
+ /**
107
+ * @inheritDoc
108
+ */
109
+ async get(key) {
110
+ // Using deprecated bytesToUnprefixedHex for performance: used as cache/database keys (string encoding).
111
+ const keyHex = (0, util_1.bytesToUnprefixedHex)(key);
112
+ if (this._cache !== undefined) {
113
+ const value = this._cache.get(keyHex);
114
+ this._stats.cache.reads += 1;
115
+ if (value !== undefined) {
116
+ this._stats.cache.hits += 1;
117
+ return value;
118
+ }
119
+ }
120
+ // Lookup the value in our diff cache. We return the latest checkpointed value (which should be the value on disk)
121
+ for (let index = this.checkpoints.length - 1; index >= 0; index--) {
122
+ if (this.checkpoints[index].keyValueMap.has(keyHex)) {
123
+ return this.checkpoints[index].keyValueMap.get(keyHex);
124
+ }
125
+ }
126
+ // Nothing has been found in diff cache, look up from disk
127
+ const value = await this.db.get(keyHex, {
128
+ keyEncoding: util_1.KeyEncoding.String,
129
+ valueEncoding: this.valueEncoding,
130
+ });
131
+ this._stats.db.reads += 1;
132
+ if (value !== undefined) {
133
+ this._stats.db.hits += 1;
134
+ }
135
+ const returnValue = value !== undefined
136
+ ? value instanceof Uint8Array
137
+ ? value
138
+ : (0, util_1.unprefixedHexToBytes)(value)
139
+ : undefined;
140
+ this._cache?.set(keyHex, returnValue);
141
+ if (this.hasCheckpoints()) {
142
+ // Since we are a checkpoint, put this value in diff cache,
143
+ // so future `get` calls will not look the key up again from disk.
144
+ this.checkpoints[this.checkpoints.length - 1].keyValueMap.set(keyHex, returnValue);
145
+ }
146
+ return returnValue;
147
+ }
148
+ /**
149
+ * @inheritDoc
150
+ */
151
+ async put(key, value) {
152
+ // Using deprecated bytesToUnprefixedHex for performance: used as cache/database keys and values (string encoding).
153
+ const keyHex = (0, util_1.bytesToUnprefixedHex)(key);
154
+ if (this.hasCheckpoints()) {
155
+ // put value in diff cache
156
+ this.checkpoints[this.checkpoints.length - 1].keyValueMap.set(keyHex, value);
157
+ }
158
+ else {
159
+ const valuePut = this.valueEncoding === util_1.ValueEncoding.Bytes ? value : (0, util_1.bytesToUnprefixedHex)(value);
160
+ await this.db.put(keyHex, valuePut, {
161
+ keyEncoding: util_1.KeyEncoding.String,
162
+ valueEncoding: this.valueEncoding,
163
+ });
164
+ this._stats.db.writes += 1;
165
+ if (this._cache !== undefined) {
166
+ this._cache.set(keyHex, value);
167
+ this._stats.cache.writes += 1;
168
+ }
169
+ }
170
+ }
171
+ /**
172
+ * @inheritDoc
173
+ */
174
+ async del(key) {
175
+ // Using deprecated bytesToUnprefixedHex for performance: used as cache/database keys (string encoding).
176
+ const keyHex = (0, util_1.bytesToUnprefixedHex)(key);
177
+ if (this.hasCheckpoints()) {
178
+ // delete the value in the current diff cache
179
+ this.checkpoints[this.checkpoints.length - 1].keyValueMap.set(keyHex, undefined);
180
+ }
181
+ else {
182
+ // delete the value on disk
183
+ await this.db.del(keyHex, {
184
+ keyEncoding: util_1.KeyEncoding.String,
185
+ });
186
+ this._stats.db.writes += 1;
187
+ if (this._cache !== undefined) {
188
+ this._cache.set(keyHex, undefined);
189
+ this._stats.cache.writes += 1;
190
+ }
191
+ }
192
+ }
193
+ /**
194
+ * @inheritDoc
195
+ */
196
+ async batch(opStack) {
197
+ if (this.hasCheckpoints()) {
198
+ for (const op of opStack) {
199
+ if (op.type === 'put') {
200
+ await this.put(op.key, op.value);
201
+ }
202
+ else if (op.type === 'del') {
203
+ await this.del(op.key);
204
+ }
205
+ }
206
+ }
207
+ else {
208
+ const convertedOps = opStack.map((op) => {
209
+ const convertedOp = {
210
+ key: (0, util_1.bytesToUnprefixedHex)(op.key),
211
+ value: op.type === 'put' ? op.value : undefined,
212
+ type: op.type,
213
+ opts: { ...op.opts, ...{ valueEncoding: this.valueEncoding } },
214
+ };
215
+ this._stats.db.writes += 1;
216
+ if (op.type === 'put' && this.valueEncoding === util_1.ValueEncoding.String) {
217
+ convertedOp.value = (0, util_1.bytesToUnprefixedHex)(convertedOp.value);
218
+ }
219
+ return convertedOp;
220
+ });
221
+ await this.db.batch(convertedOps);
222
+ }
223
+ }
224
+ stats(reset = true) {
225
+ const stats = { ...this._stats, size: this._cache?.size ?? 0 };
226
+ if (reset) {
227
+ this._stats = {
228
+ cache: {
229
+ reads: 0,
230
+ hits: 0,
231
+ writes: 0,
232
+ },
233
+ db: {
234
+ reads: 0,
235
+ hits: 0,
236
+ writes: 0,
237
+ },
238
+ };
239
+ }
240
+ return stats;
241
+ }
242
+ /**
243
+ * @inheritDoc
244
+ */
245
+ shallowCopy() {
246
+ return new CheckpointDB({
247
+ db: this.db,
248
+ cacheSize: this.cacheSize,
249
+ valueEncoding: this.valueEncoding,
250
+ });
251
+ }
252
+ open() {
253
+ return Promise.resolve();
254
+ }
255
+ }
256
+ exports.CheckpointDB = CheckpointDB;
257
+ //# sourceMappingURL=checkpoint.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"checkpoint.js","sourceRoot":"","sources":["../../../src/db/checkpoint.ts"],"names":[],"mappings":";;;AAAA,2CAKyB;AACzB,yCAAoC;AAKpC;;;GAGG;AACH,MAAa,YAAY;IA+BvB;;OAEG;IACH,YAAY,IAAsB;QAlBlC,8DAA8D;QAE9D,WAAM,GAAG;YACP,KAAK,EAAE;gBACL,KAAK,EAAE,CAAC;gBACR,IAAI,EAAE,CAAC;gBACP,MAAM,EAAE,CAAC;aACV;YACD,EAAE,EAAE;gBACF,KAAK,EAAE,CAAC;gBACR,IAAI,EAAE,CAAC;gBACP,MAAM,EAAE,CAAC;aACV;SACF,CAAA;QAMC,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,EAAE,CAAA;QACjB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,IAAI,CAAC,CAAA;QACpC,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,IAAI,oBAAa,CAAC,MAAM,CAAA;QAC/D,4CAA4C;QAC5C,IAAI,CAAC,WAAW,GAAG,EAAE,CAAA;QAErB,IAAI,IAAI,CAAC,SAAS,GAAG,CAAC,EAAE,CAAC;YACvB,IAAI,CAAC,MAAM,GAAG,IAAI,oBAAQ,CAAC;gBACzB,GAAG,EAAE,IAAI,CAAC,SAAS;gBACnB,cAAc,EAAE,IAAI;aACrB,CAAC,CAAA;QACJ,CAAC;IACH,CAAC;IAED;;;OAGG;IACH,cAAc,CAAC,WAAyB;QACtC,IAAI,CAAC,WAAW,GAAG,EAAE,CAAA;QAErB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,WAAW,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAC5C,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;gBACpB,IAAI,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,IAAI;gBACzB,WAAW,EAAE,IAAI,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC;aACjD,CAAC,CAAA;QACJ,CAAC;IACH,CAAC;IAED;;OAEG;IACH,cAAc;QACZ,OAAO,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAA;IACpC,CAAC;IAED;;;OAGG;IACH,UAAU,CAAC,IAAgB;QACzB,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,WAAW,EAAE,IAAI,GAAG,EAAsB,EAAE,IAAI,EAAE,CAAC,CAAA;IAC7E,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,MAAM;QACV,MAAM,EAAE,WAAW,EAAE,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,EAAG,CAAA;QAC/C,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,EAAE,CAAC;YAC3B,mFAAmF;YACnF,MAAM,OAAO,GAAgB,EAAE,CAAA;YAC/B,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,WAAW,CAAC,OAAO,EAAE,EAAE,CAAC;gBACjD,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;oBACxB,OAAO,CAAC,IAAI,CAAC;wBACX,IAAI,EAAE,KAAK;wBACX,GAAG,EAAE,IAAA,2BAAoB,EAAC,GAAG,CAAC;qBAC/B,CAAC,CAAA;gBACJ,CAAC;qBAAM,CAAC;oBACN,OAAO,CAAC,IAAI,CAAC;wBACX,IAAI,EAAE,KAAK;wBACX,GAAG,EAAE,IAAA,2BAAoB,EAAC,GAAG,CAAC;wBAC9B,KAAK;qBACN,CAAC,CAAA;gBACJ,CAAC;YACH,CAAC;YACD,MAAM,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;QAC3B,CAAC;aAAM,CAAC;YACN,6DAA6D;YAC7D,MAAM,kBAAkB,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,WAAW,CAAA;YACpF,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,WAAW,CAAC,OAAO,EAAE,EAAE,CAAC;gBACjD,kBAAkB,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAA;YACpC,CAAC;QACH,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,MAAM;QACV,MAAM,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,EAAG,CAAA;QACxC,OAAO,IAAI,CAAA;IACb,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,GAAG,CAAC,GAAe;QACvB,wGAAwG;QACxG,MAAM,MAAM,GAAG,IAAA,2BAAoB,EAAC,GAAG,CAAC,CAAA;QACxC,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YAC9B,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;YACrC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,CAAA;YAC5B,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;gBACxB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,CAAA;gBAC3B,OAAO,KAAK,CAAA;YACd,CAAC;QACH,CAAC;QAED,kHAAkH;QAClH,KAAK,IAAI,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC;YAClE,IAAI,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;gBACpD,OAAO,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;YACxD,CAAC;QACH,CAAC;QACD,0DAA0D;QAC1D,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,MAAM,EAAE;YACtC,WAAW,EAAE,kBAAW,CAAC,MAAM;YAC/B,aAAa,EAAE,IAAI,CAAC,aAAa;SAClC,CAAC,CAAA;QACF,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,IAAI,CAAC,CAAA;QACzB,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACxB,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC,CAAA;QAC1B,CAAC;QACD,MAAM,WAAW,GACf,KAAK,KAAK,SAAS;YACjB,CAAC,CAAC,KAAK,YAAY,UAAU;gBAC3B,CAAC,CAAC,KAAK;gBACP,CAAC,CAAC,IAAA,2BAAoB,EAAC,KAAe,CAAC;YACzC,CAAC,CAAC,SAAS,CAAA;QACf,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,CAAA;QACrC,IAAI,IAAI,CAAC,cAAc,EAAE,EAAE,CAAC;YAC1B,2DAA2D;YAC3D,kEAAkE;YAClE,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,CAAA;QACpF,CAAC;QAED,OAAO,WAAW,CAAA;IACpB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,GAAG,CAAC,GAAe,EAAE,KAAiB;QAC1C,mHAAmH;QACnH,MAAM,MAAM,GAAG,IAAA,2BAAoB,EAAC,GAAG,CAAC,CAAA;QACxC,IAAI,IAAI,CAAC,cAAc,EAAE,EAAE,CAAC;YAC1B,0BAA0B;YAC1B,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,CAAA;QAC9E,CAAC;aAAM,CAAC;YACN,MAAM,QAAQ,GACZ,IAAI,CAAC,aAAa,KAAK,oBAAa,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAA,2BAAoB,EAAC,KAAK,CAAC,CAAA;YAClF,MAAM,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,MAAM,EAAE,QAAQ,EAAE;gBAClC,WAAW,EAAE,kBAAW,CAAC,MAAM;gBAC/B,aAAa,EAAE,IAAI,CAAC,aAAa;aAClC,CAAC,CAAA;YACF,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,IAAI,CAAC,CAAA;YAE1B,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;gBAC9B,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,CAAA;gBAC9B,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,IAAI,CAAC,CAAA;YAC/B,CAAC;QACH,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,GAAG,CAAC,GAAe;QACvB,wGAAwG;QACxG,MAAM,MAAM,GAAG,IAAA,2BAAoB,EAAC,GAAG,CAAC,CAAA;QACxC,IAAI,IAAI,CAAC,cAAc,EAAE,EAAE,CAAC;YAC1B,6CAA6C;YAC7C,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC,CAAA;QAClF,CAAC;aAAM,CAAC;YACN,2BAA2B;YAC3B,MAAM,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,MAAM,EAAE;gBACxB,WAAW,EAAE,kBAAW,CAAC,MAAM;aAChC,CAAC,CAAA;YACF,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,IAAI,CAAC,CAAA;YAE1B,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;gBAC9B,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC,CAAA;gBAClC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,IAAI,CAAC,CAAA;YAC/B,CAAC;QACH,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,KAAK,CAAC,OAAoB;QAC9B,IAAI,IAAI,CAAC,cAAc,EAAE,EAAE,CAAC;YAC1B,KAAK,MAAM,EAAE,IAAI,OAAO,EAAE,CAAC;gBACzB,IAAI,EAAE,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC;oBACtB,MAAM,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,KAAK,CAAC,CAAA;gBAClC,CAAC;qBAAM,IAAI,EAAE,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC;oBAC7B,MAAM,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAA;gBACxB,CAAC;YACH,CAAC;QACH,CAAC;aAAM,CAAC;YACN,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE;gBACtC,MAAM,WAAW,GAKb;oBACF,GAAG,EAAE,IAAA,2BAAoB,EAAC,EAAE,CAAC,GAAG,CAAC;oBACjC,KAAK,EAAE,EAAE,CAAC,IAAI,KAAK,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS;oBAC/C,IAAI,EAAE,EAAE,CAAC,IAAI;oBACb,IAAI,EAAE,EAAE,GAAG,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,aAAa,EAAE,IAAI,CAAC,aAAa,EAAE,EAAE;iBAC/D,CAAA;gBACD,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,IAAI,CAAC,CAAA;gBAC1B,IAAI,EAAE,CAAC,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,aAAa,KAAK,oBAAa,CAAC,MAAM,EAAE,CAAC;oBACrE,WAAW,CAAC,KAAK,GAAG,IAAA,2BAAoB,EAAC,WAAW,CAAC,KAAmB,CAAC,CAAA;gBAC3E,CAAC;gBACD,OAAO,WAAW,CAAA;YACpB,CAAC,CAAC,CAAA;YACF,MAAM,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,YAAmB,CAAC,CAAA;QAC1C,CAAC;IACH,CAAC;IAED,KAAK,CAAC,KAAK,GAAG,IAAI;QAChB,MAAM,KAAK,GAAG,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,IAAI,CAAC,EAAE,CAAA;QAC9D,IAAI,KAAK,EAAE,CAAC;YACV,IAAI,CAAC,MAAM,GAAG;gBACZ,KAAK,EAAE;oBACL,KAAK,EAAE,CAAC;oBACR,IAAI,EAAE,CAAC;oBACP,MAAM,EAAE,CAAC;iBACV;gBACD,EAAE,EAAE;oBACF,KAAK,EAAE,CAAC;oBACR,IAAI,EAAE,CAAC;oBACP,MAAM,EAAE,CAAC;iBACV;aACF,CAAA;QACH,CAAC;QACD,OAAO,KAAK,CAAA;IACd,CAAC;IAED;;OAEG;IACH,WAAW;QACT,OAAO,IAAI,YAAY,CAAC;YACtB,EAAE,EAAE,IAAI,CAAC,EAAE;YACX,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,aAAa,EAAE,IAAI,CAAC,aAAa;SAClC,CAAC,CAAA;IACJ,CAAC;IAED,IAAI;QACF,OAAO,OAAO,CAAC,OAAO,EAAE,CAAA;IAC1B,CAAC;CACF;AAzRD,oCAyRC"}
@@ -0,0 +1,2 @@
1
+ export * from './checkpoint.ts';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/db/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAA"}
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./checkpoint.js"), exports);
18
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/db/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,kDAA+B"}
@@ -0,0 +1,7 @@
1
+ export * from './binaryTree.ts';
2
+ export * from './constructors.ts';
3
+ export * from './db/index.ts';
4
+ export * from './node/index.ts';
5
+ export * from './proof.ts';
6
+ export * from './types.ts';
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAA;AAC/B,cAAc,mBAAmB,CAAA;AACjC,cAAc,eAAe,CAAA;AAC7B,cAAc,iBAAiB,CAAA;AAC/B,cAAc,YAAY,CAAA;AAC1B,cAAc,YAAY,CAAA"}
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./binaryTree.js"), exports);
18
+ __exportStar(require("./constructors.js"), exports);
19
+ __exportStar(require("./db/index.js"), exports);
20
+ __exportStar(require("./node/index.js"), exports);
21
+ __exportStar(require("./proof.js"), exports);
22
+ __exportStar(require("./types.js"), exports);
23
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,kDAA+B;AAC/B,oDAAiC;AACjC,gDAA6B;AAC7B,kDAA+B;AAC/B,6CAA0B;AAC1B,6CAA0B"}
@@ -0,0 +1,4 @@
1
+ export * from './internalNode.ts';
2
+ export * from './types.ts';
3
+ export * from './util.ts';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/node/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAA;AACjC,cAAc,YAAY,CAAA;AAC1B,cAAc,WAAW,CAAA"}
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./internalNode.js"), exports);
18
+ __exportStar(require("./types.js"), exports);
19
+ __exportStar(require("./util.js"), exports);
20
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/node/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,oDAAiC;AACjC,6CAA0B;AAC1B,4CAAyB"}
@@ -0,0 +1,37 @@
1
+ import { BinaryNodeType } from './types.ts';
2
+ import type { BinaryNodeOptions, ChildBinaryNode } from './types.ts';
3
+ export declare class InternalBinaryNode {
4
+ children: Array<ChildBinaryNode | null>;
5
+ type: 0;
6
+ constructor(options: BinaryNodeOptions[typeof BinaryNodeType.Internal]);
7
+ static fromRawNode(rawNode: Uint8Array[]): InternalBinaryNode;
8
+ /**
9
+ * Generates a new Internal node
10
+ * @param children the children nodes
11
+ * @returns a new Internal node
12
+ */
13
+ static create(children?: (ChildBinaryNode | null)[]): InternalBinaryNode;
14
+ getChild(index: number): ChildBinaryNode | null;
15
+ setChild(index: number, child: ChildBinaryNode | null): void;
16
+ /**
17
+ * @returns the RLP serialized node
18
+ */
19
+ serialize(): Uint8Array;
20
+ /**
21
+ * Returns the raw serialized representation of this internal node as an array of Uint8Arrays.
22
+ *
23
+ * The returned array contains:
24
+ * 1. A single-byte Uint8Array indicating the node type (BinaryNodeType.Internal).
25
+ * 2. For each child (left then right):
26
+ * - The child’s hash, or an empty Uint8Array if the child is null.
27
+ * 3. For each child (left then right):
28
+ * - An RLP-encoded tuple [pathLength, packedPathBytes] where:
29
+ * - `pathLength` is a one-byte Uint8Array representing the number of meaningful bits in the child’s path.
30
+ * - `packedPathBytes` is the packed byte representation of the child's bit path (as produced by `bitsToBytes`).
31
+ *
32
+ * @returns {Uint8Array[]} An array of Uint8Arrays representing the node's serialized internal data.
33
+ * @dev When decoding, the stored child path (an RLP-encoded tuple) must be converted back into the original bit array.
34
+ */
35
+ raw(): Uint8Array[];
36
+ }
37
+ //# sourceMappingURL=internalNode.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"internalNode.d.ts","sourceRoot":"","sources":["../../../src/node/internalNode.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAE3C,OAAO,KAAK,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AAEpE,qBAAa,kBAAkB;IACtB,QAAQ,EAAE,KAAK,CAAC,eAAe,GAAG,IAAI,CAAC,CAAA;IAEvC,IAAI,IAA0B;gBAEzB,OAAO,EAAE,iBAAiB,CAAC,OAAO,cAAc,CAAC,QAAQ,CAAC;IAItE,MAAM,CAAC,WAAW,CAAC,OAAO,EAAE,UAAU,EAAE,GAAG,kBAAkB;IAyC7D;;;;OAIG;IACH,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,eAAe,GAAG,IAAI,CAAC,EAAE,GAAG,kBAAkB;IAOxE,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,eAAe,GAAG,IAAI;IAI/C,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,eAAe,GAAG,IAAI,GAAG,IAAI;IAI5D;;OAEG;IACH,SAAS,IAAI,UAAU;IAIvB;;;;;;;;;;;;;;OAcG;IAEH,GAAG,IAAI,UAAU,EAAE;CAWpB"}
@@ -0,0 +1,92 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.InternalBinaryNode = void 0;
4
+ const rlp_1 = require("@feelyourprotocol/rlp");
5
+ const util_1 = require("@feelyourprotocol/util");
6
+ const types_ts_1 = require("./types.js");
7
+ class InternalBinaryNode {
8
+ constructor(options) {
9
+ this.type = types_ts_1.BinaryNodeType.Internal;
10
+ this.children = options.children ?? Array(2).fill(null);
11
+ }
12
+ static fromRawNode(rawNode) {
13
+ const nodeType = rawNode[0][0];
14
+ if (nodeType !== types_ts_1.BinaryNodeType.Internal) {
15
+ throw (0, util_1.EthereumJSErrorWithoutCode)('Invalid node type');
16
+ }
17
+ // The length of the rawNode should be the # of children * 2 (for hash and path) + 1 for the node type
18
+ if (rawNode.length !== 2 * 2 + 1) {
19
+ throw (0, util_1.EthereumJSErrorWithoutCode)('Invalid node length');
20
+ }
21
+ const [, leftChildHash, rightChildHash, leftChildRawPath, rightChildRawPath] = rawNode;
22
+ const decodeChild = (hash, rawPath) => {
23
+ if (hash.length === 0)
24
+ return null;
25
+ const decoded = rlp_1.RLP.decode(rawPath);
26
+ if (!Array.isArray(decoded) || decoded.length !== 2) {
27
+ throw (0, util_1.EthereumJSErrorWithoutCode)('Invalid RLP encoding for child path');
28
+ }
29
+ const [encodedLength, encodedPath] = decoded;
30
+ if (encodedLength.length !== 1) {
31
+ throw (0, util_1.EthereumJSErrorWithoutCode)('Invalid path length encoding');
32
+ }
33
+ const pathLength = encodedLength[0];
34
+ const path = (0, util_1.bytesToBits)(encodedPath, pathLength);
35
+ return { hash, path };
36
+ };
37
+ const children = [
38
+ decodeChild(leftChildHash, leftChildRawPath),
39
+ decodeChild(rightChildHash, rightChildRawPath),
40
+ ];
41
+ return new InternalBinaryNode({ children });
42
+ }
43
+ /**
44
+ * Generates a new Internal node
45
+ * @param children the children nodes
46
+ * @returns a new Internal node
47
+ */
48
+ static create(children) {
49
+ if (children !== undefined && children.length !== 2) {
50
+ throw (0, util_1.EthereumJSErrorWithoutCode)('Internal node must have 2 children');
51
+ }
52
+ return new InternalBinaryNode({ children });
53
+ }
54
+ getChild(index) {
55
+ return this.children[index];
56
+ }
57
+ setChild(index, child) {
58
+ this.children[index] = child;
59
+ }
60
+ /**
61
+ * @returns the RLP serialized node
62
+ */
63
+ serialize() {
64
+ return rlp_1.RLP.encode(this.raw());
65
+ }
66
+ /**
67
+ * Returns the raw serialized representation of this internal node as an array of Uint8Arrays.
68
+ *
69
+ * The returned array contains:
70
+ * 1. A single-byte Uint8Array indicating the node type (BinaryNodeType.Internal).
71
+ * 2. For each child (left then right):
72
+ * - The child’s hash, or an empty Uint8Array if the child is null.
73
+ * 3. For each child (left then right):
74
+ * - An RLP-encoded tuple [pathLength, packedPathBytes] where:
75
+ * - `pathLength` is a one-byte Uint8Array representing the number of meaningful bits in the child’s path.
76
+ * - `packedPathBytes` is the packed byte representation of the child's bit path (as produced by `bitsToBytes`).
77
+ *
78
+ * @returns {Uint8Array[]} An array of Uint8Arrays representing the node's serialized internal data.
79
+ * @dev When decoding, the stored child path (an RLP-encoded tuple) must be converted back into the original bit array.
80
+ */
81
+ raw() {
82
+ return [
83
+ new Uint8Array([types_ts_1.BinaryNodeType.Internal]),
84
+ ...this.children.map((child) => (child !== null ? child.hash : new Uint8Array())),
85
+ ...this.children.map((child) => child !== null
86
+ ? rlp_1.RLP.encode([new Uint8Array([child.path.length]), (0, util_1.bitsToBytes)(child.path)])
87
+ : new Uint8Array()),
88
+ ];
89
+ }
90
+ }
91
+ exports.InternalBinaryNode = InternalBinaryNode;
92
+ //# sourceMappingURL=internalNode.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"internalNode.js","sourceRoot":"","sources":["../../../src/node/internalNode.ts"],"names":[],"mappings":"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"}