From e4f08b5c2697c24c92bfb7c8dbd8ccfa50987a15 Mon Sep 17 00:00:00 2001 From: Kai Aichholz Date: Thu, 11 Jun 2020 08:08:08 -0700 Subject: [PATCH 01/11] interface and initial tests for AVLTree. Need to add more tests covering keys() and entries() methods. --- assembly/__tests__/runtime/avl-tree.spec.ts | 533 ++++ assembly/runtime/collections/avlTree.ts | 219 ++ assembly/runtime/collections/index.ts | 3 +- assembly/tsconfig.json | 3 + jest.config.js | 2 +- runtime/dist/tsconfig.tsbuildinfo | 2791 +++++++++++++++++++ runtime/tsconfig.json | 4 +- yarn.lock | 5 + 8 files changed, 3556 insertions(+), 4 deletions(-) create mode 100644 assembly/__tests__/runtime/avl-tree.spec.ts create mode 100644 assembly/runtime/collections/avlTree.ts create mode 100644 runtime/dist/tsconfig.tsbuildinfo diff --git a/assembly/__tests__/runtime/avl-tree.spec.ts b/assembly/__tests__/runtime/avl-tree.spec.ts new file mode 100644 index 00000000..50e52ff4 --- /dev/null +++ b/assembly/__tests__/runtime/avl-tree.spec.ts @@ -0,0 +1,533 @@ +import { AVLTree } from "../../runtime"; +import { Chance } from "chance" + +const rngSeed = 12345; +const rng = new Chance(rngSeed); +// const rng = { +// integer: (_: any) => 5 +// }; +let tree: AVLTree; + +// Return height of the tree - number of nodes on the longest path starting from the root node. +function height(tree: AVLTree): u32 { + throw new Error("TODO implement height()"); +} + +function random(n: i32): Array { + const a = new Array(n); + return a.map(_ => rng.integer({ min: 0 })); +} + +function range(start: T, end: T): Array { + const a = new Array(); + let x = start; + while (x < end) { + a.push(x); + } + return a; +} + +function maxTreeHeight(n: f64): u64 { + // From near-sdk-rs TreeMap: + // h <= C * log2(n + D) + B + // where: + // C =~ 1.440, D =~ 1.065, B =~ 0.328 + // (source: https://en.wikipedia.org/wiki/AVL_tree) + const B: f64 = -0.328; + const C: f64 = 1.440; + const D: f64 = 1.065; + + const h = C * Math.log2(n + D) + B; + return Math.ceil(h) as u64; +} + +function isBalanced(tree: AVLTree): bool { + throw new Error("TODO implement isBalanced()"); +} + +describe("AVLTrees should handle", () => { + + beforeAll(() => { + tree = new AVLTree("tree1"); + }); + + beforeEach(() => { + tree.clear(); + }); + + // Convenience method for tests that insert then remove some values + const insertThenRemove = (t: AVLTree, keysToInsert: u32[], keysToRemove: u32[]): void => { + const map = new Map(); + + keysToInsert.forEach((key, i) => { + expect(t.get(key)).toThrow("tree should throw if getting removed key"); + t.insert(key, i); + map.set(key, i); + expect(t.get(x)).toStrictEqual(1); + }); + + keysToRemove.forEach(key => { + expect(t.get(x)).toStrictEqual(map.get(key)); + t.remove(key); + expect(t.get(key)).toThrow("tree should throw if getting removed key"); + }); + }; + + it("adds key-value pairs", () => { + const key = 1; + const value = 2; + + tree.set(key, value); + + expect(tree.has(key)).toBeTruthy("The tree should have the key"); + expect(tree.containsKey(key)).toBeTruthy("The tree should contain the key"); + expect(tree.get(key)).toStrictEqual(value); + }); + + it("checks for non-existent keys", () => { + const key = 1; + + expect(tree.has(key)).toBeFalsy("tree should not have the key"); + expect(tree.containsKey(key)).toBeFalsy("tree should not contain the key"); + }); + + throws("if attempting to get a non-existent key", () => { + const key = 1; + + tree.get(key); + }); + + it("is empty", () => { + const key = 42; + expect(tree.size).toStrictEqual(0); + expect(height(tree)).toStrictEqual(0); + expect(tree.get(key)).toThrow("get() should throw for empty tree"); + expect(tree.has(key)).toBeFalsy("empty tree should not have the key"); + expect(tree.containsKey(key)).toBeFalsy("empty tree should not have the key"); + expect(tree.min()).toThrow("min() should throw for empty tree"); + expect(tree.max()).toThrow("max() should throw for empty tree"); + expect(tree.lower(key)).toThrow("min() should throw for empty tree"); + expect(tree.higher(key)).toThrow("min() should throw for empty tree"); + }); + + it("rotates left twice when inserting 3 keys in decreasing order", () => { + expect(height(tree)).toStrictEqual(0); + + tree.insert(3, 3); + expect(height(tree)).toStrictEqual(1); + + tree.insert(2, 2); + expect(height(tree)).toStrictEqual(2); + + tree.insert(1, 1); + expect(height(tree)).toStrictEqual(2); + + const root = tree.root; + expect(root).toStrictEqual(1); + // expect(tree.node(root).map(n => n.key)).toStrictEqual(2); FIXME + }); + + it("rotates right twice when inserting 3 keys in increasing order", () => { + expect(height(tree)).toStrictEqual(0); + + tree.insert(1, 1); + expect(height(tree)).toStrictEqual(1); + + tree.insert(2, 2); + expect(height(tree)).toStrictEqual(2); + + tree.insert(3, 3); + expect(height(tree)).toStrictEqual(2); + + const root = tree.root; + expect(root).toStrictEqual(1); + // expect(tree.node(root).map(n => n.key)).toStrictEqual(2); FIXME + }); + + it("sets and gets n key-value pairs in ascending order", () => { + const n: u32 = 30; + const cases: u32[] = range(0, n*2); + + let counter = 0; + cases.forEach(k => { + if (k % 2 === 0) { + counter += 1; + tree.insert(k, counter); + } + }); + + counter = 0; + cases.forEach(k => { + if (k % 2 === 0) { + counter += 1; + expect(tree.get(k)).toStrictEqual(counter); + } else { + expect(tree.get(k)).toThrow(`tree should not contain key ${k}`); + } + }); + + expect(height(tree)).toBeLessThanOrEqual(maxTreeHeight(n)); + }); + + it("sets and gets n key-value pairs in descending order", () => { + const n: u32 = 30; + const cases: u32[] = range(0, n*2).reverse(); + + let counter = 0; + cases.forEach(k => { + if (k % 2 === 0) { + counter += 1; + tree.insert(k, counter); + } + }); + + counter = 0; + cases.forEach(k => { + if (k % 2 === 0) { + counter += 1; + expect(tree.get(k)).toStrictEqual(counter); + } else { + expect(tree.get(k)).toThrow(`tree should not contain key ${k}`); + } + }); + + expect(height(tree)).toBeLessThanOrEqual(maxTreeHeight(n)); + }); + + it("sets and gets n random key-value pairs", () => { + range(1, 10).forEach(k => { // tree size is 2^k + const n = 1 << k; + const input: u32[] = random(n); + + input.forEach(x => { + tree.insert(x, 42); + }); + + input.forEach(x => { + expect(tree.get(x)).toStrictEqual(42); + }); + + expect(height(tree)).toBeLessThanOrEqual(maxTreeHeight(n)); + + tree.clear(); + }); + }); + + it("gets the minimum key", () => { + const n: u32 = 30; + const keys = random(n); + + keys.forEach(x => { + tree.insert(x, 1); + }); + + const min = (keys.sort(), keys[0]); + expect(tree.min()).toStrictEqual(min); + }); + + it("gets the maximum key", () => { + const n: u32 = 30; + const keys = random(n); + + keys.forEach(x => { + tree.insert(x, 1); + }); + + const max = (keys.sort(), keys[keys.length-1]); + expect(tree.max()).toStrictEqual(max); + }); + + it("gets the key lower than the given key", () => { + const keys: u32[] = [10, 20, 30, 40, 50]; + + keys.forEach(x => { + tree.insert(x, 1); + }); + + expect(tree.lower(5)).toThrow("5 is lower than tree.min(), which is 10"); + expect(tree.lower(10)).toThrow("10 is equal to tree.min(), which is 10"); + expect(tree.lower(11)).toStrictEqual(10); + expect(tree.lower(20)).toStrictEqual(10); + expect(tree.lower(49)).toStrictEqual(40); + expect(tree.lower(50)).toStrictEqual(40); + expect(tree.lower(51)).toStrictEqual(50); + }); + + it("gets the key higher than the given key", () => { + const keys: u32[] = [10, 20, 30, 40, 50]; + + keys.forEach(x => { + tree.insert(x, 1); + }); + + expect(tree.higher(5)).toStrictEqual(10); + expect(tree.higher(10)).toStrictEqual(20); + expect(tree.higher(11)).toStrictEqual(20); + expect(tree.higher(20)).toStrictEqual(30); + expect(tree.higher(49)).toStrictEqual(50); + expect(tree.higher(50)).toThrow("50 is equal to tree.max(), which is 50"); + expect(tree.higher(51)).toThrow("51 is greater than tree.max(), which is 50"); + }); + + it("gets the key lower than or equal to the given key", () => { + const keys: u32[] = [10, 20, 30, 40, 50]; + + keys.forEach(x => { + tree.insert(x, 1); + }); + + expect(tree.floorKey(5)).toThrow("5 is lower than tree.min(), which is 10"); + expect(tree.floorKey(10)).toStrictEqual(10); + expect(tree.floorKey(11)).toStrictEqual(10); + expect(tree.floorKey(20)).toStrictEqual(20); + expect(tree.floorKey(49)).toStrictEqual(40); + expect(tree.floorKey(50)).toStrictEqual(50); + expect(tree.floorKey(51)).toStrictEqual(50); + }); + + it("gets the key greater than or equal to the given key", () => { + const keys: u32[] = [10, 20, 30, 40, 50]; + + keys.forEach(x => { + tree.insert(x, 1); + }); + + expect(tree.ceilKey(5)).toStrictEqual(10); + expect(tree.ceilKey(10)).toStrictEqual(10); + expect(tree.ceilKey(11)).toStrictEqual(20); + expect(tree.ceilKey(20)).toStrictEqual(20); + expect(tree.ceilKey(49)).toStrictEqual(50); + expect(tree.ceilKey(50)).toStrictEqual(50); + expect(tree.ceilKey(51)).toThrow("51 is greater than tree.max(), which is 50"); + }); + + it("removes 1 key", () => { + const key = 1; + const value = 2; + + tree.insert(key, value); + expect(tree.get(key)).toStrictEqual(value); + expect(tree.size).toStrictEqual(1); + + tree.remove(key); + expect(tree.get(key)).toThrow("tree should throw if getting removed key"); + expect(tree.size).toStrictEqual(0); + }); + + it("removes non-existent key", () => { + const key = 1; + const value = 2; + + tree.insert(key, value); + expect(tree.get(key)).toStrictEqual(value); + expect(tree.size).toStrictEqual(1); + + tree.remove(value); + expect(tree.get(key)).toStrictEqual(value); + expect(tree.size).toStrictEqual(1); + }); + + it("removes 3 keys in descending order", () => { + const keys: u32[] = [3, 2, 1]; + insertThenRemove(tree, keys, keys); + expect(tree.size).toStrictEqual(0); + }); + + it("removes 3 keys in ascending order", () => { + const keys: u32[] = [1, 2, 3]; + insertThenRemove(tree, keys, keys); + expect(tree.size).toStrictEqual(0); + }); + + it("removes 7 random keys", () => { + const keys: u32[] = [ + 2104297040, + 552624607, + 4269683389, + 3382615941, + 155419892, + 4102023417, + 1795725075 + ]; + insertThenRemove(tree, keys, keys); + expect(tree.size).toStrictEqual(0); + }); + + // test_remove_7_regression_2() + + it("removes 9 random keys", () => { + const keys: u32[] = [ + 1186903464, + 506371929, + 1738679820, + 1883936615, + 1815331350, + 1512669683, + 3581743264, + 1396738166, + 1902061760 + ]; + insertThenRemove(tree, keys, keys); + expect(tree.size).toStrictEqual(0); + }); + + it("removes 20 random keys", () => { + const keys: u32[] = [ + 552517392, 3638992158, 1015727752, 2500937532, 638716734, + 586360620, 2476692174, 1425948996, 3608478547, 757735878, + 2709959928, 2092169539, 3620770200, 783020918, 1986928932, + 200210441, 1972255302, 533239929, 497054557, 2137924638 + ]; + insertThenRemove(tree, keys, keys); + expect(tree.size).toStrictEqual(0); + }); + + // test_remove_7_regression() + + it("inserts 8 keys then removes 4 keys", () => { + const keysToInsert: u32[] = [882, 398, 161, 76]; + const keysToRemove: u32[] = [242, 687, 860, 811]; + + insertThenRemove(tree, keysToInsert.concat(keysToRemove), keysToRemove); + + expect(tree.size).toStrictEqual(keysToInsert.length); + + keysToInsert.forEach((key, i) => { + expect(tree.get(key)).toStrictEqual(i); + }); + }); + + it("removes n random keys", () => { + const n: u32 = 20; + const keys = random(n); + + const set = new Set(); + + keys.forEach((key, i) => { + tree.insert(key, i); + set.add(key); + }); + + expect(tree.size).toStrictEqual(set.size); + + keys.forEach((key, i) => { + expect(tree.get(key)).toStrictEqual(i); + tree.remove(key); + expect(tree.get(x)).toThrow("tree should throw if getting removed key"); + }); + + expect(tree.size).toStrictEqual(0); + }); + + it("removes the root of the tree", () => { + tree.insert(2, 1); + tree.insert(3, 1); + tree.insert(1, 1); + tree.insert(4, 1); + + expect(tree.root).toStrictEqual(2); + tree.remove(2); + expect(tree.root).toStrictEqual(3); + + expect(tree.get(1)).toStrictEqual(1); + expect(tree.get(2)).toThrow("tree should throw when getting removed key (root of the tree)"); + expect(tree.get(3)).toStrictEqual(1); + expect(tree.get(4)).toStrictEqual(1); + }); + + it("inserts 2 keys then removes 2 keys", () => { + const keysToInsert = [11760225, 611327897]; + const keysToRemove = [2982517385, 1833990072]; + + insertThenRemove(tree, keysToInsert, keysToRemove); + + expect(height(tree)).toBeLessThanOrEqual(maxTreeHeight(tree.size)); + }); + + it("inserts n duplicate keys", () => { + range(0, 30).forEach((key, i) => { + tree.insert(key, i); + tree.insert(42, i); + }); + + expect(tree.get(42)).toStrictEqual(29); // most recent value inserted for key 42 + expect(tree.size).toStrictEqual(31); + }); + + it("inserts 2n keys then removes n random keys", () => { + range(1, 4).forEach(k => { + const set = new Set(); + + const n = 1 << k; + const keysToInsert = random(n); + const keysToRemove = random(n); + const allKeys = keysToInsert.concat(keysToRemove); + + insertThenRemove(tree, allKeys, keysToRemove); + allKeys.forEach(key => set.add(key)); + keysToRemove.forEach(key => set.delete(key)); + + expect(tree.size).toStrictEqual(set.size); + expect(height(tree)).toBeLessThanOrEqual(maxTreeHeight(n)); + + tree.clear(); + expect(tree.size).toStrictEqual(0); + }); + }); + + it("does nothing when removing while empty", () => { + expect(tree.size).toStrictEqual(0); + tree.remove(1); + expect(tree.size).toStrictEqual(0); + }); + + it("returns an equivalent array", () => { + tree.insert(1, 41); + tree.insert(2, 42); + tree.insert(3, 43); + + throw new Error("TODO implement toVec() for AVLTree"); + // const a = []; + // expect(tree.toVec()).toStrictEqual(a); + }); + + it("returns an empty array when empty", () => { + throw new Error("TODO implement toVec() for AVLTree"); + // expect(tree.toVec()).toStrictEqual([]); + }); + + it("returns a range of values for a given start key and end key", () => { + const keys = [10, 20, 30, 40, 50, 45, 35, 25, 15, 5]; + const values = [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]; + + keys.forEach((key, i) => tree.insert(key, values[i])); + + expect(tree.values(20, 30)).toStrictEqual([2, 8]); + expect(tree.values(11, 41)).toStrictEqual([9, 2, 8, 3, 7, 4]); + expect(tree.values(20, 41)).toStrictEqual([2, 8, 3, 7, 4]); + expect(tree.values(21, 45)).toStrictEqual([8, 3, 7, 4]); + expect(tree.values(26, 30)).toStrictEqual([]); + expect(tree.values(25, 25)).toStrictEqual([8]); + expect(tree.values(26, 25)).toStrictEqual([]); + expect(tree.values(40, 50)).toStrictEqual([4, 6]); + expect(tree.values(40, 51)).toStrictEqual([4, 6, 5]); + expect(tree.values(4, 5)).toStrictEqual([]); + expect(tree.values(5, 51)).toStrictEqual([10, 1, 9, 2, 8, 3, 7, 4, 6, 5]); + }); + + it("remains balanced after insertions and deletions", () => { + const keysToInsert = [2, 3, 4]; + const keysToRemove = [0, 0, 0, 1]; + + insertThenRemove(tree, keysToInsert, keysToRemove); + expect(isBalanced(tree)).toBeTruthy(); + }); + + it("remains balanced after more insertions and deletions", () => { + const keysToInsert = [1, 2, 0, 3, 5, 6]; + const keysToRemove = [0, 0, 0, 3, 5, 6, 7, 4]; + + insertThenRemove(tree, keysToInsert, keysToRemove); + expect(isBalanced(tree)).toBeTruthy(); + }); +}) diff --git a/assembly/runtime/collections/avlTree.ts b/assembly/runtime/collections/avlTree.ts new file mode 100644 index 00000000..7bcb8899 --- /dev/null +++ b/assembly/runtime/collections/avlTree.ts @@ -0,0 +1,219 @@ +import { collections } from "../collections"; +// import { storage } from "../storage"; + +@nearBindgen +export class AVLTree { + private _elementPrefix: string; + + /** + * A string name is used as a prefix for writing keys to storage. + */ + constructor(name: string) { + this._elementPrefix = name + collections._KEY_ELEMENT_SUFFIX; + } + + /** + * @returns Number of elements in the tree. + */ + get size(): u32 { + // TODO implement size() + throw new Error("TODO implement size()") + } + + /** + * @returns Root key of the tree. + */ + get root(): K { + // TODO make private + // TODO implement root() + throw new Error("TODO implement root()") + } + + /** + * @returns Whether the key is present in the tree. + */ + has(key: K): boolean { + // TODO implement has() + throw new Error("TODO implement has()") + } + //alias to match rust sdk + containsKey(key: K): boolean { + return this.has(key); + } + + /** + * If key is not present in the tree, a new node is added with the value. + * Otherwise update the node with the new value. + * + * @param key Key of the element. + * @param value The new value of the element. + */ + set(key: K, value: V): void { + // TODO implement set() + throw new Error("TODO implement set()") + } + //alias to match rust sdk + insert(key: K, value: V): void { + this.set(key, value); + } + + /** + * Retrieves a related value for a given key or throws error "key not found" + * + * @param key Key of the element. + * @returns Value for the given key or the default value. + */ + get(key: K): V { + // TODO implement get() + throw new Error("TODO implement get()") + } + + /** + * Retrieves the related value for a given key, or uses the `defaultValue` if not key is found + * + * @param key Key of the element. + * @param defaultValue The default value if the key is not present. + * @returns Value for the given key or the default value. + */ + getSome(key: K, defaultValue: V): V { + try { + return this.get(key); + } catch(err) { // TODO check that this is key not found error + return defaultValue; + } + } + + /** + * Delete element with key if present, otherwise do nothing. + * + * @param key Key to remove. + */ + delete(key: K): void { + // TODO implement delete() + throw new Error("TODO implement delete()") + } + //alias to match rust sdk + remove(key: K): void { + this.delete(key); + } + + + /** + * Get a range of values from a start key to an end key exclusive. + * If end is greater than max key, include start to max inclusive. + * + * @param start Key for lower bound (inclusive). + * @param end Key for upper bound (exclusive). + * @returns Range of values corresponding to keys within start and end bounds. + */ + values(start: K, end: K): V[] { + // TODO implement range() + throw new Error("TODO implement values()"); + } + + /** + * Get a range of keys from a start key to an end key exclusive. + * If end is greater than max key, include start to max inclusive. + * + * @param start Key for lower bound (inclusive). + * @param end Key for upper bound (exclusive). + * @returns Range of keys within start and end bounds. + */ + keys(start: K, end: K): K[] { + // TODO implement range() + throw new Error("TODO implement range()"); + } + + /** + * Get a range of entries from a start key to an end key exclusive. + * If end is greater than max key, include start to max inclusive. + * + * @param start Key for lower bound (inclusive). + * @param end Key for upper bound (exclusive). + * @returns Range of entries corresponding to keys within start and end bounds. + */ + entries(start: K, end: K): collections.MapEntry[] { + // TODO implement range() + throw new Error("TODO implement range()"); + } + + /** + * Returns minimum key. + * Throws if tree is empty. + * @returns Minimum key. + */ + min(): K { + // TODO implement min() + throw new Error("TODO implement min()"); + } + + /** + * Returns maximum key. + * Throws if tree is empty. + * @returns Maximum key. + */ + max(): K { + // TODO implement max() + throw new Error("TODO implement max()"); + } + + /** + * Returns the maximum key that is strictly less than the key. + * Throws if empty or if key is lower than or equal to `this.min()`. + * @param key Key for lower bound (exclusive). + * @returns Maximum key that is strictly less than given key. + */ + lower(key: K): K { + // TODO implement lower() + throw new Error("TODO implement lower()"); + } + + /** + * Returns the minimum key that is strictly greater than the key. + * Throws if empty or if key is higher than or equal to `this.max()`. + * @param key Key for upper bound (exclusive). + * @returns Minimum key that is strictly greater than given key. + */ + higher(key: K): K { + // TODO implement higher() + throw new Error("TODO implement higher()"); + } + + /** + * Returns the maximum key that is less or equal than the key. + * Throws if empty or if key is lower than `this.min()`. + * @param key Key for lower bound (inclusive). + * @returns Maximum key that is less than or equal to given key. + */ + lowerOrEqual(key: K): K { + // TODO implement lowerOrEqual() + throw new Error("TODO implement lowerOrEqual()"); + } + //alias to match rust sdk + floorKey(key: K): K { + return this.lowerOrEqual(key); + } + + /** + * Returns the minimum key that is greater or equal than the key. + * Throws if empty or if key is higher than `this.max()`. + * @param key Key for upper bound (inclusive). + * @returns Minimum key that is greater or equal to given key. + */ + higherOrEqual(key: K): K { + // TODO implement higherOrEqual() + throw new Error("TODO implement lowerOrEqual()"); + } + //alias to match rust sdk + ceilKey(key: K): K { + return this.higherOrEqual(key); + } + + /** + * Removes all key-value pairs from the tree + */ + clear(): void { + // TODO implement clear() + throw new Error("TODO implement clear()") + } +} \ No newline at end of file diff --git a/assembly/runtime/collections/index.ts b/assembly/runtime/collections/index.ts index 981be800..64653f71 100644 --- a/assembly/runtime/collections/index.ts +++ b/assembly/runtime/collections/index.ts @@ -44,4 +44,5 @@ export * from "./persistentSet"; /** @internal */ export * from "./persistentUnorderedMap"; /** @internal */ -export * from "./util"; \ No newline at end of file +export * from "./util"; +export * from "./avlTree"; diff --git a/assembly/tsconfig.json b/assembly/tsconfig.json index 79d18cf3..02584b90 100644 --- a/assembly/tsconfig.json +++ b/assembly/tsconfig.json @@ -8,5 +8,8 @@ "excludeProtected": true, "excludeExternals": true, "stripInternal": true + }, + "compilerOptions": { + "experimentalDecorators": true } } diff --git a/jest.config.js b/jest.config.js index 4c521af5..426cc066 100644 --- a/jest.config.js +++ b/jest.config.js @@ -2,5 +2,5 @@ module.exports = { preset: 'ts-jest', testEnvironment: 'node', testMatch: ["**/__tests__/**/*.spec.ts"], - testPathIgnorePatterns: ["/assembly/", "/node_modules/"], + testPathIgnorePatterns: ["/node_modules/"], }; diff --git a/runtime/dist/tsconfig.tsbuildinfo b/runtime/dist/tsconfig.tsbuildinfo new file mode 100644 index 00000000..161abccf --- /dev/null +++ b/runtime/dist/tsconfig.tsbuildinfo @@ -0,0 +1,2791 @@ +{ + "program": { + "fileInfos": { + "../../node_modules/typescript/lib/lib.es5.d.ts": { + "version": "70ae6416528e68c2ee7b62892200d2ca631759943d4429f8b779b947ff1e124d", + "signature": "70ae6416528e68c2ee7b62892200d2ca631759943d4429f8b779b947ff1e124d", + "affectsGlobalScope": true + }, + "../../node_modules/typescript/lib/lib.es2015.d.ts": { + "version": "dc47c4fa66b9b9890cf076304de2a9c5201e94b740cffdf09f87296d877d71f6", + "signature": "dc47c4fa66b9b9890cf076304de2a9c5201e94b740cffdf09f87296d877d71f6", + "affectsGlobalScope": false + }, + "../../node_modules/typescript/lib/lib.es2016.d.ts": { + "version": "7a387c58583dfca701b6c85e0adaf43fb17d590fb16d5b2dc0a2fbd89f35c467", + "signature": "7a387c58583dfca701b6c85e0adaf43fb17d590fb16d5b2dc0a2fbd89f35c467", + "affectsGlobalScope": false + }, + "../../node_modules/typescript/lib/lib.es2017.d.ts": { + "version": "8a12173c586e95f4433e0c6dc446bc88346be73ffe9ca6eec7aa63c8f3dca7f9", + "signature": "8a12173c586e95f4433e0c6dc446bc88346be73ffe9ca6eec7aa63c8f3dca7f9", + "affectsGlobalScope": false + }, + "../../node_modules/typescript/lib/lib.es2018.d.ts": { + "version": "5f4e733ced4e129482ae2186aae29fde948ab7182844c3a5a51dd346182c7b06", + "signature": "5f4e733ced4e129482ae2186aae29fde948ab7182844c3a5a51dd346182c7b06", + "affectsGlobalScope": false + }, + "../../node_modules/typescript/lib/lib.es2019.d.ts": { + "version": "e6b724280c694a9f588847f754198fb96c43d805f065c3a5b28bbc9594541c84", + "signature": "e6b724280c694a9f588847f754198fb96c43d805f065c3a5b28bbc9594541c84", + "affectsGlobalScope": false + }, + "../../node_modules/typescript/lib/lib.es2020.d.ts": { + "version": "94b4108552f078722078d7c4a010ca4851063882f6c0c51a1468aa7a39aed4b3", + "signature": "94b4108552f078722078d7c4a010ca4851063882f6c0c51a1468aa7a39aed4b3", + "affectsGlobalScope": false + }, + "../../node_modules/typescript/lib/lib.esnext.d.ts": { + "version": "2f8f379dedbdbd96a38a1e445cb3919853a1157a950fd977f85808db8d0f8a58", + "signature": "2f8f379dedbdbd96a38a1e445cb3919853a1157a950fd977f85808db8d0f8a58", + "affectsGlobalScope": false + }, + "../../node_modules/typescript/lib/lib.es2015.core.d.ts": { + "version": "63e0cc12d0f77394094bd19e84464f9840af0071e5b9358ced30511efef1d8d2", + "signature": "63e0cc12d0f77394094bd19e84464f9840af0071e5b9358ced30511efef1d8d2", + "affectsGlobalScope": true + }, + "../../node_modules/typescript/lib/lib.es2015.collection.d.ts": { + "version": "43fb1d932e4966a39a41b464a12a81899d9ae5f2c829063f5571b6b87e6d2f9c", + "signature": "43fb1d932e4966a39a41b464a12a81899d9ae5f2c829063f5571b6b87e6d2f9c", + "affectsGlobalScope": true + }, + "../../node_modules/typescript/lib/lib.es2015.generator.d.ts": { + "version": "cdccba9a388c2ee3fd6ad4018c640a471a6c060e96f1232062223063b0a5ac6a", + "signature": "cdccba9a388c2ee3fd6ad4018c640a471a6c060e96f1232062223063b0a5ac6a", + "affectsGlobalScope": true + }, + "../../node_modules/typescript/lib/lib.es2015.iterable.d.ts": { + "version": "42f5e41e5893da663dbf0394268f54f1da4b43dc0ddd2ea4bf471fe5361d6faf", + "signature": "42f5e41e5893da663dbf0394268f54f1da4b43dc0ddd2ea4bf471fe5361d6faf", + "affectsGlobalScope": true + }, + "../../node_modules/typescript/lib/lib.es2015.promise.d.ts": { + "version": "0b7a905675e6cb4211c128f0a3aa47d414b275180a299a9aad5d3ec298abbfc4", + "signature": "0b7a905675e6cb4211c128f0a3aa47d414b275180a299a9aad5d3ec298abbfc4", + "affectsGlobalScope": true + }, + "../../node_modules/typescript/lib/lib.es2015.proxy.d.ts": { + "version": "dfff68b3c34338f6b307a25d4566de15eed7973b0dc5d69f9fde2bcac1c25315", + "signature": "dfff68b3c34338f6b307a25d4566de15eed7973b0dc5d69f9fde2bcac1c25315", + "affectsGlobalScope": true + }, + "../../node_modules/typescript/lib/lib.es2015.reflect.d.ts": { + "version": "cb609802a8698aa28b9c56331d4b53f590ca3c1c3a255350304ae3d06017779d", + "signature": "cb609802a8698aa28b9c56331d4b53f590ca3c1c3a255350304ae3d06017779d", + "affectsGlobalScope": true + }, + "../../node_modules/typescript/lib/lib.es2015.symbol.d.ts": { + "version": "3013574108c36fd3aaca79764002b3717da09725a36a6fc02eac386593110f93", + "signature": "3013574108c36fd3aaca79764002b3717da09725a36a6fc02eac386593110f93", + "affectsGlobalScope": true + }, + "../../node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts": { + "version": "4670208dd7da9d6c774ab1b75c1527a810388c7989c4905de6aaea8561cb9dce", + "signature": "4670208dd7da9d6c774ab1b75c1527a810388c7989c4905de6aaea8561cb9dce", + "affectsGlobalScope": true + }, + "../../node_modules/typescript/lib/lib.es2016.array.include.d.ts": { + "version": "3be5a1453daa63e031d266bf342f3943603873d890ab8b9ada95e22389389006", + "signature": "3be5a1453daa63e031d266bf342f3943603873d890ab8b9ada95e22389389006", + "affectsGlobalScope": true + }, + "../../node_modules/typescript/lib/lib.es2017.object.d.ts": { + "version": "17bb1fc99591b00515502d264fa55dc8370c45c5298f4a5c2083557dccba5a2a", + "signature": "17bb1fc99591b00515502d264fa55dc8370c45c5298f4a5c2083557dccba5a2a", + "affectsGlobalScope": true + }, + "../../node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts": { + "version": "d0db416bccdb33975548baf09a42ee8c47eace1aac7907351a000f1e568e7232", + "signature": "d0db416bccdb33975548baf09a42ee8c47eace1aac7907351a000f1e568e7232", + "affectsGlobalScope": true + }, + "../../node_modules/typescript/lib/lib.es2017.string.d.ts": { + "version": "6a6b173e739a6a99629a8594bfb294cc7329bfb7b227f12e1f7c11bc163b8577", + "signature": "6a6b173e739a6a99629a8594bfb294cc7329bfb7b227f12e1f7c11bc163b8577", + "affectsGlobalScope": true + }, + "../../node_modules/typescript/lib/lib.es2017.intl.d.ts": { + "version": "12a310447c5d23c7d0d5ca2af606e3bd08afda69100166730ab92c62999ebb9d", + "signature": "12a310447c5d23c7d0d5ca2af606e3bd08afda69100166730ab92c62999ebb9d", + "affectsGlobalScope": true + }, + "../../node_modules/typescript/lib/lib.es2017.typedarrays.d.ts": { + "version": "b0124885ef82641903d232172577f2ceb5d3e60aed4da1153bab4221e1f6dd4e", + "signature": "b0124885ef82641903d232172577f2ceb5d3e60aed4da1153bab4221e1f6dd4e", + "affectsGlobalScope": true + }, + "../../node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts": { + "version": "0eb85d6c590b0d577919a79e0084fa1744c1beba6fd0d4e951432fa1ede5510a", + "signature": "0eb85d6c590b0d577919a79e0084fa1744c1beba6fd0d4e951432fa1ede5510a", + "affectsGlobalScope": true + }, + "../../node_modules/typescript/lib/lib.es2018.asynciterable.d.ts": { + "version": "a40c4d82bf13fcded295ac29f354eb7d40249613c15e07b53f2fc75e45e16359", + "signature": "a40c4d82bf13fcded295ac29f354eb7d40249613c15e07b53f2fc75e45e16359", + "affectsGlobalScope": true + }, + "../../node_modules/typescript/lib/lib.es2018.intl.d.ts": { + "version": "df9c8a72ca8b0ed62f5470b41208a0587f0f73f0a7db28e5a1272cf92537518e", + "signature": "df9c8a72ca8b0ed62f5470b41208a0587f0f73f0a7db28e5a1272cf92537518e", + "affectsGlobalScope": true + }, + "../../node_modules/typescript/lib/lib.es2018.promise.d.ts": { + "version": "bb2d3fb05a1d2ffbca947cc7cbc95d23e1d053d6595391bd325deb265a18d36c", + "signature": "bb2d3fb05a1d2ffbca947cc7cbc95d23e1d053d6595391bd325deb265a18d36c", + "affectsGlobalScope": true + }, + "../../node_modules/typescript/lib/lib.es2018.regexp.d.ts": { + "version": "c80df75850fea5caa2afe43b9949338ce4e2de086f91713e9af1a06f973872b8", + "signature": "c80df75850fea5caa2afe43b9949338ce4e2de086f91713e9af1a06f973872b8", + "affectsGlobalScope": true + }, + "../../node_modules/typescript/lib/lib.es2019.array.d.ts": { + "version": "9d57b2b5d15838ed094aa9ff1299eecef40b190722eb619bac4616657a05f951", + "signature": "9d57b2b5d15838ed094aa9ff1299eecef40b190722eb619bac4616657a05f951", + "affectsGlobalScope": true + }, + "../../node_modules/typescript/lib/lib.es2019.object.d.ts": { + "version": "6c51b5dd26a2c31dbf37f00cfc32b2aa6a92e19c995aefb5b97a3a64f1ac99de", + "signature": "6c51b5dd26a2c31dbf37f00cfc32b2aa6a92e19c995aefb5b97a3a64f1ac99de", + "affectsGlobalScope": true + }, + "../../node_modules/typescript/lib/lib.es2019.string.d.ts": { + "version": "93544ca2f26a48716c1b6c5091842cad63129daac422dfa4bc52460465f22bb1", + "signature": "93544ca2f26a48716c1b6c5091842cad63129daac422dfa4bc52460465f22bb1", + "affectsGlobalScope": true + }, + "../../node_modules/typescript/lib/lib.es2019.symbol.d.ts": { + "version": "2ad234885a4240522efccd77de6c7d99eecf9b4de0914adb9a35c0c22433f993", + "signature": "2ad234885a4240522efccd77de6c7d99eecf9b4de0914adb9a35c0c22433f993", + "affectsGlobalScope": true + }, + "../../node_modules/typescript/lib/lib.es2020.bigint.d.ts": { + "version": "4f435f794b7853c55e2ae7cff6206025802aa79232d2867544178f2ca8ff5eaa", + "signature": "4f435f794b7853c55e2ae7cff6206025802aa79232d2867544178f2ca8ff5eaa", + "affectsGlobalScope": true + }, + "../../node_modules/typescript/lib/lib.es2020.promise.d.ts": { + "version": "7435b75fdf3509622e79622dbe5091cf4b09688410ee2034e4fc17d0c99d0862", + "signature": "7435b75fdf3509622e79622dbe5091cf4b09688410ee2034e4fc17d0c99d0862", + "affectsGlobalScope": true + }, + "../../node_modules/typescript/lib/lib.es2020.string.d.ts": { + "version": "faf0221ae0465363c842ce6aa8a0cbda5d9296940a8e26c86e04cc4081eea21e", + "signature": "faf0221ae0465363c842ce6aa8a0cbda5d9296940a8e26c86e04cc4081eea21e", + "affectsGlobalScope": true + }, + "../../node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts": { + "version": "936d7d2e8851af9ccfa5333b15e877a824417d352b1d7fd06388639dc69ef80a", + "signature": "936d7d2e8851af9ccfa5333b15e877a824417d352b1d7fd06388639dc69ef80a", + "affectsGlobalScope": true + }, + "../../node_modules/typescript/lib/lib.esnext.intl.d.ts": { + "version": "89bf2b7a601b73ea4311eda9c41f86a58994fec1bee3b87c4a14d68d9adcdcbd", + "signature": "89bf2b7a601b73ea4311eda9c41f86a58994fec1bee3b87c4a14d68d9adcdcbd", + "affectsGlobalScope": true + }, + "../../node_modules/typescript/lib/lib.esnext.string.d.ts": { + "version": "fb4416144c1bf0323ccbc9afb0ab289c07312214e8820ad17d709498c865a3fe", + "signature": "fb4416144c1bf0323ccbc9afb0ab289c07312214e8820ad17d709498c865a3fe", + "affectsGlobalScope": true + }, + "../../node_modules/typescript/lib/lib.esnext.promise.d.ts": { + "version": "cd6efb9467a8b6338ece2e2855e37765700f2cd061ca54b01b33878cf5c7677e", + "signature": "cd6efb9467a8b6338ece2e2855e37765700f2cd061ca54b01b33878cf5c7677e", + "affectsGlobalScope": true + }, + "../src/bin.ts": { + "version": "8db94265dca2a4ca4801f0da7ae492decd3b7d9037e2c009d6765bc64f1e18d4", + "signature": "6b1c0717957c4d1664e746ad8bac5dcc0c551e3d88815550dcb6e83d25f33d70", + "affectsGlobalScope": false + }, + "../../node_modules/@types/js-base64/index.d.ts": { + "version": "2e379368c4ecd7c071d3541a7739eb671a0623fc8a37ba6786be6b9e8514ac07", + "signature": "2e379368c4ecd7c071d3541a7739eb671a0623fc8a37ba6786be6b9e8514ac07", + "affectsGlobalScope": true + }, + "../src/context.ts": { + "version": "e0b03e1730ac97af23cbd3cb6778fd9886502d9776a8306d26dc0bedeacd953d", + "signature": "80edd4353a3867aa28f23b4ae64c57ca5a612b65ec2a7f39f3b4920a3cd7cd80", + "affectsGlobalScope": false + }, + "../../node_modules/@types/node/globals.d.ts": { + "version": "2dd7dbacbd70cc156185235140b7b6682c002c1ea678dd87d7a20589d4555fc0", + "signature": "2dd7dbacbd70cc156185235140b7b6682c002c1ea678dd87d7a20589d4555fc0", + "affectsGlobalScope": true + }, + "../../node_modules/@types/node/async_hooks.d.ts": { + "version": "4ed9f71ddbb5753771ee391f64297078a88f7dfd1480646dcf08c31395778682", + "signature": "4ed9f71ddbb5753771ee391f64297078a88f7dfd1480646dcf08c31395778682", + "affectsGlobalScope": false + }, + "../../node_modules/@types/node/buffer.d.ts": { + "version": "61215c1a376bbe8f51cab4cc4ddbf3746387015113c37a84d981d4738c21b878", + "signature": "61215c1a376bbe8f51cab4cc4ddbf3746387015113c37a84d981d4738c21b878", + "affectsGlobalScope": false + }, + "../../node_modules/@types/node/child_process.d.ts": { + "version": "465150173a56b943b2f6d8918e35c89d8386ffd37aa466e486ca54db54d6cee7", + "signature": "465150173a56b943b2f6d8918e35c89d8386ffd37aa466e486ca54db54d6cee7", + "affectsGlobalScope": false + }, + "../../node_modules/@types/node/cluster.d.ts": { + "version": "123ec69e4b3a686eb49afd94ebe3292a5c84a867ecbcb6bb84bdd720a12af803", + "signature": "123ec69e4b3a686eb49afd94ebe3292a5c84a867ecbcb6bb84bdd720a12af803", + "affectsGlobalScope": false + }, + "../../node_modules/@types/node/console.d.ts": { + "version": "525c8fc510d9632d2a0a9de2d41c3ac1cdd79ff44d3b45c6d81cacabb683528d", + "signature": "525c8fc510d9632d2a0a9de2d41c3ac1cdd79ff44d3b45c6d81cacabb683528d", + "affectsGlobalScope": false + }, + "../../node_modules/@types/node/constants.d.ts": { + "version": "90c85ddbb8de82cd19198bda062065fc51b7407c0f206f2e399e65a52e979720", + "signature": "90c85ddbb8de82cd19198bda062065fc51b7407c0f206f2e399e65a52e979720", + "affectsGlobalScope": false + }, + "../../node_modules/@types/node/crypto.d.ts": { + "version": "d4dd0b19ee0338dd4f1603eacb41859b9d5371bfef2b2849cb870d6fd6602bcb", + "signature": "d4dd0b19ee0338dd4f1603eacb41859b9d5371bfef2b2849cb870d6fd6602bcb", + "affectsGlobalScope": false + }, + "../../node_modules/@types/node/dgram.d.ts": { + "version": "7ecfe97b43aa6c8b8f90caa599d5648bb559962e74e6f038f73a77320569dd78", + "signature": "7ecfe97b43aa6c8b8f90caa599d5648bb559962e74e6f038f73a77320569dd78", + "affectsGlobalScope": false + }, + "../../node_modules/@types/node/dns.d.ts": { + "version": "aad3237c3f99480041cad7ca04d64307c98933996f822342b7c0ee4a78553346", + "signature": "aad3237c3f99480041cad7ca04d64307c98933996f822342b7c0ee4a78553346", + "affectsGlobalScope": false + }, + "../../node_modules/@types/node/domain.d.ts": { + "version": "4d4c83f77ac21a72252785baa5328a5612b0b6598d512f68b8cb14f7966d059e", + "signature": "4d4c83f77ac21a72252785baa5328a5612b0b6598d512f68b8cb14f7966d059e", + "affectsGlobalScope": false + }, + "../../node_modules/@types/node/events.d.ts": { + "version": "eaa8136bb11fbea5bdaf29e06aa45a1969ddd39fbfb5fe58a01f00d7f1562cd9", + "signature": "eaa8136bb11fbea5bdaf29e06aa45a1969ddd39fbfb5fe58a01f00d7f1562cd9", + "affectsGlobalScope": false + }, + "../../node_modules/@types/node/fs.d.ts": { + "version": "e253cd3c7d10c4f600308d0528dd371d7e4165d8295b37a1f38d0ef6c0dfaf60", + "signature": "e253cd3c7d10c4f600308d0528dd371d7e4165d8295b37a1f38d0ef6c0dfaf60", + "affectsGlobalScope": false + }, + "../../node_modules/@types/node/fs/promises.d.ts": { + "version": "fb28748ff8d015f52e99daee4f454e57cec1a22141f1257c317f3630a15edeb7", + "signature": "fb28748ff8d015f52e99daee4f454e57cec1a22141f1257c317f3630a15edeb7", + "affectsGlobalScope": false + }, + "../../node_modules/@types/node/http.d.ts": { + "version": "b5fd0a137bd6d0afe291d465e99c7469b082b66b3ee89273b3b22801b6c2948e", + "signature": "b5fd0a137bd6d0afe291d465e99c7469b082b66b3ee89273b3b22801b6c2948e", + "affectsGlobalScope": false + }, + "../../node_modules/@types/node/http2.d.ts": { + "version": "5d9394b829cfd504b2fe17287aaad8ce1dcfb2a2183c962a90a85b96da2c1c90", + "signature": "5d9394b829cfd504b2fe17287aaad8ce1dcfb2a2183c962a90a85b96da2c1c90", + "affectsGlobalScope": false + }, + "../../node_modules/@types/node/https.d.ts": { + "version": "c969bf4c7cdfe4d5dd28aa09432f99d09ad1d8d8b839959646579521d0467d1a", + "signature": "c969bf4c7cdfe4d5dd28aa09432f99d09ad1d8d8b839959646579521d0467d1a", + "affectsGlobalScope": false + }, + "../../node_modules/@types/node/inspector.d.ts": { + "version": "6c3857edaeeaaf43812f527830ebeece9266b6e8eb5271ab6d2f0008306c9947", + "signature": "6c3857edaeeaaf43812f527830ebeece9266b6e8eb5271ab6d2f0008306c9947", + "affectsGlobalScope": false + }, + "../../node_modules/@types/node/module.d.ts": { + "version": "bc6a77e750f4d34584e46b1405b771fb69a224197dd6bafe5b0392a29a70b665", + "signature": "bc6a77e750f4d34584e46b1405b771fb69a224197dd6bafe5b0392a29a70b665", + "affectsGlobalScope": false + }, + "../../node_modules/@types/node/net.d.ts": { + "version": "46cac76114704902baa535b30fb66a26aeaf9430f3b3ab44746e329f12e85498", + "signature": "46cac76114704902baa535b30fb66a26aeaf9430f3b3ab44746e329f12e85498", + "affectsGlobalScope": false + }, + "../../node_modules/@types/node/os.d.ts": { + "version": "ed4ae81196cccc10f297d228bca8d02e31058e6d723a3c5bc4be5fb3c61c6a34", + "signature": "ed4ae81196cccc10f297d228bca8d02e31058e6d723a3c5bc4be5fb3c61c6a34", + "affectsGlobalScope": false + }, + "../../node_modules/@types/node/path.d.ts": { + "version": "84044697c8b3e08ef24e4b32cfe6440143d07e469a5e34bda0635276d32d9f35", + "signature": "84044697c8b3e08ef24e4b32cfe6440143d07e469a5e34bda0635276d32d9f35", + "affectsGlobalScope": false + }, + "../../node_modules/@types/node/perf_hooks.d.ts": { + "version": "0b6098fedb648cab8091cca2b022a5c729b6ef18da923852033f495907cb1a45", + "signature": "0b6098fedb648cab8091cca2b022a5c729b6ef18da923852033f495907cb1a45", + "affectsGlobalScope": false + }, + "../../node_modules/@types/node/process.d.ts": { + "version": "0e0d58f5e90c0a270dac052b9c5ad8ccdfc8271118c2105b361063218d528d6e", + "signature": "0e0d58f5e90c0a270dac052b9c5ad8ccdfc8271118c2105b361063218d528d6e", + "affectsGlobalScope": true + }, + "../../node_modules/@types/node/punycode.d.ts": { + "version": "30ec6f9c683b988c3cfaa0c4690692049c4e7ed7dc6f6e94f56194c06b86f5e1", + "signature": "30ec6f9c683b988c3cfaa0c4690692049c4e7ed7dc6f6e94f56194c06b86f5e1", + "affectsGlobalScope": false + }, + "../../node_modules/@types/node/querystring.d.ts": { + "version": "9f633ecf3e065ff82c19eccab35c8aa1d6d5d1a49af282dc29ef5a64cca34164", + "signature": "9f633ecf3e065ff82c19eccab35c8aa1d6d5d1a49af282dc29ef5a64cca34164", + "affectsGlobalScope": false + }, + "../../node_modules/@types/node/readline.d.ts": { + "version": "6b2bb67b0942bcfce93e1d6fad5f70afd54940a2b13df7f311201fba54b2cbe9", + "signature": "6b2bb67b0942bcfce93e1d6fad5f70afd54940a2b13df7f311201fba54b2cbe9", + "affectsGlobalScope": false + }, + "../../node_modules/@types/node/repl.d.ts": { + "version": "dd3706b25d06fe23c73d16079e8c66ac775831ef419da00716bf2aee530a04a4", + "signature": "dd3706b25d06fe23c73d16079e8c66ac775831ef419da00716bf2aee530a04a4", + "affectsGlobalScope": false + }, + "../../node_modules/@types/node/stream.d.ts": { + "version": "ba1569d69c27f4d2cb2615068cfee4b18c3658aa43534ce68d84bfb56ac172d7", + "signature": "ba1569d69c27f4d2cb2615068cfee4b18c3658aa43534ce68d84bfb56ac172d7", + "affectsGlobalScope": false + }, + "../../node_modules/@types/node/string_decoder.d.ts": { + "version": "d67e08745494b000da9410c1ae2fdc9965fc6d593fe0f381a47491f75417d457", + "signature": "d67e08745494b000da9410c1ae2fdc9965fc6d593fe0f381a47491f75417d457", + "affectsGlobalScope": false + }, + "../../node_modules/@types/node/timers.d.ts": { + "version": "b40652bf8ce4a18133b31349086523b219724dca8df3448c1a0742528e7ad5b9", + "signature": "b40652bf8ce4a18133b31349086523b219724dca8df3448c1a0742528e7ad5b9", + "affectsGlobalScope": false + }, + "../../node_modules/@types/node/tls.d.ts": { + "version": "424bc64b2794d9280c1e1f4a3518ba9d285385a16d84753a6427bb469e582eca", + "signature": "424bc64b2794d9280c1e1f4a3518ba9d285385a16d84753a6427bb469e582eca", + "affectsGlobalScope": false + }, + "../../node_modules/@types/node/trace_events.d.ts": { + "version": "a77fdb357c78b70142b2fdbbfb72958d69e8f765fd2a3c69946c1018e89d4638", + "signature": "a77fdb357c78b70142b2fdbbfb72958d69e8f765fd2a3c69946c1018e89d4638", + "affectsGlobalScope": false + }, + "../../node_modules/@types/node/tty.d.ts": { + "version": "3c2ac350c3baa61fd2b1925844109e098f4376d0768a4643abc82754fd752748", + "signature": "3c2ac350c3baa61fd2b1925844109e098f4376d0768a4643abc82754fd752748", + "affectsGlobalScope": false + }, + "../../node_modules/@types/node/url.d.ts": { + "version": "826d48e49c905cedb906cbde6ccaf758827ff5867d4daa006b5a79e0fb489357", + "signature": "826d48e49c905cedb906cbde6ccaf758827ff5867d4daa006b5a79e0fb489357", + "affectsGlobalScope": false + }, + "../../node_modules/@types/node/util.d.ts": { + "version": "baa711b17f67390c60eac3c70a1391b23a8e3833cb723b2d7336d4817a22455c", + "signature": "baa711b17f67390c60eac3c70a1391b23a8e3833cb723b2d7336d4817a22455c", + "affectsGlobalScope": false + }, + "../../node_modules/@types/node/v8.d.ts": { + "version": "289be113bad7ee27ee7fa5b1e373c964c9789a5e9ed7db5ddcb631371120b953", + "signature": "289be113bad7ee27ee7fa5b1e373c964c9789a5e9ed7db5ddcb631371120b953", + "affectsGlobalScope": false + }, + "../../node_modules/@types/node/vm.d.ts": { + "version": "e4abb8eaa8a7d78236be0f8342404aab076668d20590209e32fdeb924588531e", + "signature": "e4abb8eaa8a7d78236be0f8342404aab076668d20590209e32fdeb924588531e", + "affectsGlobalScope": false + }, + "../../node_modules/@types/node/worker_threads.d.ts": { + "version": "086bfc0710b044ce1586108ee56c6e1c0d9ca2d325c153bb026cbc850169f593", + "signature": "086bfc0710b044ce1586108ee56c6e1c0d9ca2d325c153bb026cbc850169f593", + "affectsGlobalScope": false + }, + "../../node_modules/@types/node/zlib.d.ts": { + "version": "f409183966a1dd93d3a9cd1d54fbeb85c73101e87cd5b19467c5e37b252f3fd8", + "signature": "f409183966a1dd93d3a9cd1d54fbeb85c73101e87cd5b19467c5e37b252f3fd8", + "affectsGlobalScope": false + }, + "../../node_modules/@types/node/base.d.ts": { + "version": "92d6395892ec8da8c51def5a12b012fa63309d06b4933a35ced5c732bda5ca11", + "signature": "92d6395892ec8da8c51def5a12b012fa63309d06b4933a35ced5c732bda5ca11", + "affectsGlobalScope": false + }, + "../../node_modules/@types/node/ts3.2/fs.d.ts": { + "version": "12b2608d6074167c331c9c3c6994a57819f6ff934c7fd4527e23aabf56d4c8d1", + "signature": "12b2608d6074167c331c9c3c6994a57819f6ff934c7fd4527e23aabf56d4c8d1", + "affectsGlobalScope": false + }, + "../../node_modules/@types/node/ts3.2/util.d.ts": { + "version": "ffc1cd688606ad1ddb59a40e8f3defbde907af2a3402d1d9ddf69accb2903f07", + "signature": "ffc1cd688606ad1ddb59a40e8f3defbde907af2a3402d1d9ddf69accb2903f07", + "affectsGlobalScope": false + }, + "../../node_modules/@types/node/ts3.2/globals.d.ts": { + "version": "4926e99d2ad39c0bbd36f2d37cc8f52756bc7a5661ad7b12815df871a4b07ba1", + "signature": "4926e99d2ad39c0bbd36f2d37cc8f52756bc7a5661ad7b12815df871a4b07ba1", + "affectsGlobalScope": true + }, + "../../node_modules/@types/node/ts3.2/base.d.ts": { + "version": "4cef33b2997388559c39b2f98c37e8319ad61e30a1f0edc55c53913f2250bade", + "signature": "4cef33b2997388559c39b2f98c37e8319ad61e30a1f0edc55c53913f2250bade", + "affectsGlobalScope": false + }, + "../../node_modules/@types/node/ts3.5/globals.global.d.ts": { + "version": "2708349d5a11a5c2e5f3a0765259ebe7ee00cdcc8161cb9990cb4910328442a1", + "signature": "2708349d5a11a5c2e5f3a0765259ebe7ee00cdcc8161cb9990cb4910328442a1", + "affectsGlobalScope": true + }, + "../../node_modules/@types/node/ts3.5/wasi.d.ts": { + "version": "0b3fef11ea6208c4cb3715c9aa108766ce98fc726bfba68cc23b25ce944ce9c0", + "signature": "0b3fef11ea6208c4cb3715c9aa108766ce98fc726bfba68cc23b25ce944ce9c0", + "affectsGlobalScope": false + }, + "../../node_modules/@types/node/ts3.5/base.d.ts": { + "version": "255dbc5a5acef2b83b47145042aa0127ebf7fe24cd5ce6afaaaf5c8fc2c5eb96", + "signature": "255dbc5a5acef2b83b47145042aa0127ebf7fe24cd5ce6afaaaf5c8fc2c5eb96", + "affectsGlobalScope": false + }, + "../../node_modules/@types/node/ts3.7/assert.d.ts": { + "version": "a8b842671d535d14f533fd8dbfacebceacf5195069d720425d572d5cc5ab3dc4", + "signature": "a8b842671d535d14f533fd8dbfacebceacf5195069d720425d572d5cc5ab3dc4", + "affectsGlobalScope": false + }, + "../../node_modules/@types/node/ts3.7/base.d.ts": { + "version": "9779312cffccce68e3ffbaa3a876381dc54a8240d9bdaa448f7eba222ec19392", + "signature": "9779312cffccce68e3ffbaa3a876381dc54a8240d9bdaa448f7eba222ec19392", + "affectsGlobalScope": false + }, + "../../node_modules/@types/node/ts3.7/index.d.ts": { + "version": "d522314e80ed71b57e3c2939d3c9594eaae63a4adf028559e6574f6b270b0fee", + "signature": "d522314e80ed71b57e3c2939d3c9594eaae63a4adf028559e6574f6b270b0fee", + "affectsGlobalScope": false + }, + "../../node_modules/@types/bn.js/index.d.ts": { + "version": "bc6dd50ac2fc9a7ca6488811b116bd0ddd606338db0bb97852c8fcf757e2d7f5", + "signature": "bc6dd50ac2fc9a7ca6488811b116bd0ddd606338db0bb97852c8fcf757e2d7f5", + "affectsGlobalScope": false + }, + "../../node_modules/base-x/src/index.d.ts": { + "version": "e91751abb2372a36a90869d36f6ad5d5e69a84c5513ca99d236554e4dd8b9aa1", + "signature": "e91751abb2372a36a90869d36f6ad5d5e69a84c5513ca99d236554e4dd8b9aa1", + "affectsGlobalScope": false + }, + "../../node_modules/@types/bs58/index.d.ts": { + "version": "5cbc27193321e6ba10f4e9f3c5519649d9e2716cf103efd7eaa7a89e0f8ed1d4", + "signature": "5cbc27193321e6ba10f4e9f3c5519649d9e2716cf103efd7eaa7a89e0f8ed1d4", + "affectsGlobalScope": false + }, + "../src/types.ts": { + "version": "bab5e9093e6b2442ec30c0643ce7a9d9a8a86b99e817a14debe1e0811537a494", + "signature": "6b9e9d26248badf30677fd41b8db18991d927b5fc20fc54f51e5bb4bca747115", + "affectsGlobalScope": false + }, + "../src/utils.ts": { + "version": "729d77286390304bf8ed3f775e3d6b8d1d65cc20d0bea1050bed84270818e240", + "signature": "08cb359473f512dc063a47ccb0caf25628635014cefd836adf9d71299c4ab717", + "affectsGlobalScope": false + }, + "../src/runtime.ts": { + "version": "1560b229ed12d8c7023257d2aa0fecb89950eae7ce665d942f0f5eda7f8209e6", + "signature": "6444a9849e2bfc1433ce883139cd8ea85a364f04afb0cbb554338b6351998b1d", + "affectsGlobalScope": false + }, + "../src/index.ts": { + "version": "32d6f957487819cefbcf8a026ff4355b15ebcab05f570e50be64f88f96ec3690", + "signature": "5be7e7e48a3c513431061a8283806b91ec184a73e17da7eeb55693bd833a6f0c", + "affectsGlobalScope": false + }, + "../../node_modules/@babel/types/lib/index.d.ts": { + "version": "7ee922c7a87439793beb93c017322c08ec832f3929d65ace7db85079c6247f2c", + "signature": "7ee922c7a87439793beb93c017322c08ec832f3929d65ace7db85079c6247f2c", + "affectsGlobalScope": false + }, + "../../node_modules/@types/babel__generator/index.d.ts": { + "version": "b25c5f2970d06c729f464c0aeaa64b1a5b5f1355aa93554bb5f9c199b8624b1e", + "signature": "b25c5f2970d06c729f464c0aeaa64b1a5b5f1355aa93554bb5f9c199b8624b1e", + "affectsGlobalScope": false + }, + "../../node_modules/@types/babel__traverse/index.d.ts": { + "version": "cc0e8c69a59c7e4e15bd28e1eebe9a660c47c202e298cb20a93285368051193f", + "signature": "cc0e8c69a59c7e4e15bd28e1eebe9a660c47c202e298cb20a93285368051193f", + "affectsGlobalScope": false + }, + "../../node_modules/@babel/parser/typings/babel-parser.d.ts": { + "version": "fa7d1d20dd776b2dd40931cb3ae865dd624f38edd86f3407344b609e43def590", + "signature": "fa7d1d20dd776b2dd40931cb3ae865dd624f38edd86f3407344b609e43def590", + "affectsGlobalScope": false + }, + "../../node_modules/@types/babel__template/index.d.ts": { + "version": "3e0a34f7207431d967dc32d593d1cda0c23975e9484bc8895b39d96ffca4a0d8", + "signature": "3e0a34f7207431d967dc32d593d1cda0c23975e9484bc8895b39d96ffca4a0d8", + "affectsGlobalScope": false + }, + "../../node_modules/@types/babel__core/index.d.ts": { + "version": "ab3e92a5a46b6ded50c6b9e7de05739fa1de6df50e24a14706a5cc525300548b", + "signature": "ab3e92a5a46b6ded50c6b9e7de05739fa1de6df50e24a14706a5cc525300548b", + "affectsGlobalScope": false + }, + "../../node_modules/@types/chance/index.d.ts": { + "version": "d0fa8f765570b49205ae10ed80fe0eeff59251b7da9ba5b4f8ee6f0d2299fafe", + "signature": "d0fa8f765570b49205ae10ed80fe0eeff59251b7da9ba5b4f8ee6f0d2299fafe", + "affectsGlobalScope": true + }, + "../../node_modules/@types/color-name/index.d.ts": { + "version": "f0cb4b3ab88193e3e51e9e2622e4c375955003f1f81239d72c5b7a95415dad3e", + "signature": "f0cb4b3ab88193e3e51e9e2622e4c375955003f1f81239d72c5b7a95415dad3e", + "affectsGlobalScope": false + }, + "../../node_modules/@types/graceful-fs/index.d.ts": { + "version": "2c7dca525f4e2e5f2b357dacb58ab6c8777995e6d505ef652bcbbf9789ac558f", + "signature": "2c7dca525f4e2e5f2b357dacb58ab6c8777995e6d505ef652bcbbf9789ac558f", + "affectsGlobalScope": false + }, + "../../node_modules/@types/istanbul-lib-coverage/index.d.ts": { + "version": "b7b0f360867e85305ac700e4c6f084d45adfa417a8f5d964b6f609f99ee92772", + "signature": "b7b0f360867e85305ac700e4c6f084d45adfa417a8f5d964b6f609f99ee92772", + "affectsGlobalScope": false + }, + "../../node_modules/@types/istanbul-lib-report/index.d.ts": { + "version": "7eb06594824ada538b1d8b48c3925a83e7db792f47a081a62cf3e5c4e23cf0ee", + "signature": "7eb06594824ada538b1d8b48c3925a83e7db792f47a081a62cf3e5c4e23cf0ee", + "affectsGlobalScope": false + }, + "../../node_modules/@types/istanbul-reports/index.d.ts": { + "version": "029769d13d9917e3284cb2356ed28a6576e8b07ae6a06ee1e672518adf21a102", + "signature": "029769d13d9917e3284cb2356ed28a6576e8b07ae6a06ee1e672518adf21a102", + "affectsGlobalScope": false + }, + "../../node_modules/@types/jest/node_modules/jest-diff/build/cleanupsemantic.d.ts": { + "version": "e222104af6cb9415238ad358488b74d76eceeff238c1268ec6e85655b05341da", + "signature": "e222104af6cb9415238ad358488b74d76eceeff238c1268ec6e85655b05341da", + "affectsGlobalScope": false + }, + "../../node_modules/@types/jest/node_modules/jest-diff/build/types.d.ts": { + "version": "69da61a7b5093dac77fa3bec8be95dcf9a74c95a0e9161edb98bb24e30e439d2", + "signature": "69da61a7b5093dac77fa3bec8be95dcf9a74c95a0e9161edb98bb24e30e439d2", + "affectsGlobalScope": false + }, + "../../node_modules/@types/jest/node_modules/jest-diff/build/difflines.d.ts": { + "version": "eba230221317c985ab1953ccc3edc517f248b37db4fef7875cb2c8d08aff7be7", + "signature": "eba230221317c985ab1953ccc3edc517f248b37db4fef7875cb2c8d08aff7be7", + "affectsGlobalScope": false + }, + "../../node_modules/@types/jest/node_modules/jest-diff/build/printdiffs.d.ts": { + "version": "b83e796810e475da3564c6515bc0ae9577070596a33d89299b7d99f94ecfd921", + "signature": "b83e796810e475da3564c6515bc0ae9577070596a33d89299b7d99f94ecfd921", + "affectsGlobalScope": false + }, + "../../node_modules/@types/jest/node_modules/jest-diff/build/index.d.ts": { + "version": "b4439890c168d646357928431100daac5cbdee1d345a34e6bf6eca9f3abe22bc", + "signature": "b4439890c168d646357928431100daac5cbdee1d345a34e6bf6eca9f3abe22bc", + "affectsGlobalScope": false + }, + "../../node_modules/@types/jest/node_modules/pretty-format/build/types.d.ts": { + "version": "5d72971a459517c44c1379dab9ed248e87a61ba0a1e0f25c9d67e1e640cd9a09", + "signature": "5d72971a459517c44c1379dab9ed248e87a61ba0a1e0f25c9d67e1e640cd9a09", + "affectsGlobalScope": false + }, + "../../node_modules/@types/jest/node_modules/pretty-format/build/index.d.ts": { + "version": "02d734976af36f4273d930bea88b3e62adf6b078cf120c1c63d49aa8d8427c5c", + "signature": "02d734976af36f4273d930bea88b3e62adf6b078cf120c1c63d49aa8d8427c5c", + "affectsGlobalScope": false + }, + "../../node_modules/@types/jest/index.d.ts": { + "version": "f624e578325b8c58e55b30c998b1f4c3ec1b61a9fa66373da4250c89b7880d44", + "signature": "f624e578325b8c58e55b30c998b1f4c3ec1b61a9fa66373da4250c89b7880d44", + "affectsGlobalScope": true + }, + "../../node_modules/@types/jest/ts3.2/index.d.ts": { + "version": "d3002f620eab4bf6476c9da5c0efb2041d46f7df8b3032a5631bd206abef2c75", + "signature": "d3002f620eab4bf6476c9da5c0efb2041d46f7df8b3032a5631bd206abef2c75", + "affectsGlobalScope": true + }, + "../../node_modules/@types/normalize-package-data/index.d.ts": { + "version": "c9ad058b2cc9ce6dc2ed92960d6d009e8c04bef46d3f5312283debca6869f613", + "signature": "c9ad058b2cc9ce6dc2ed92960d6d009e8c04bef46d3f5312283debca6869f613", + "affectsGlobalScope": false + }, + "../../node_modules/@types/prettier/index.d.ts": { + "version": "9f648f662bddda1b68b01992edd275c214838124a43c8d9210e4a61b974ff82d", + "signature": "9f648f662bddda1b68b01992edd275c214838124a43c8d9210e4a61b974ff82d", + "affectsGlobalScope": false + }, + "../../node_modules/@types/stack-utils/index.d.ts": { + "version": "41422586881bcd739b4e62d9b91cd29909f8572aa3e3cdf316b7c50f14708d49", + "signature": "41422586881bcd739b4e62d9b91cd29909f8572aa3e3cdf316b7c50f14708d49", + "affectsGlobalScope": false + }, + "../../node_modules/@types/yargs-parser/index.d.ts": { + "version": "fdfbe321c556c39a2ecf791d537b999591d0849e971dd938d88f460fea0186f6", + "signature": "fdfbe321c556c39a2ecf791d537b999591d0849e971dd938d88f460fea0186f6", + "affectsGlobalScope": false + }, + "../../node_modules/@types/yargs/index.d.ts": { + "version": "27d92f477d76685eff84f9cc352f8a56d024b6bfdac426e37c2c5ece37c4d733", + "signature": "27d92f477d76685eff84f9cc352f8a56d024b6bfdac426e37c2c5ece37c4d733", + "affectsGlobalScope": false + } + }, + "options": { + "incremental": true, + "target": 99, + "module": 1, + "lib": [ + "lib.es2020.d.ts", + "lib.esnext.d.ts" + ], + "declaration": true, + "sourceMap": true, + "outDir": "./", + "strict": true, + "noImplicitAny": true, + "strictNullChecks": true, + "noImplicitThis": true, + "esModuleInterop": true, + "experimentalDecorators": true, + "emitDecoratorMetadata": true, + "forceConsistentCasingInFileNames": true, + "configFilePath": "../tsconfig.json" + }, + "referencedMap": { + "../../node_modules/@babel/parser/typings/babel-parser.d.ts": [ + "../../node_modules/@babel/types/lib/index.d.ts", + "../../node_modules/@types/graceful-fs/index.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/ts3.2/fs.d.ts", + "../../node_modules/@types/node/ts3.2/util.d.ts", + "../../node_modules/@types/node/util.d.ts" + ], + "../../node_modules/@babel/types/lib/index.d.ts": [ + "../../node_modules/@types/graceful-fs/index.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/ts3.2/fs.d.ts", + "../../node_modules/@types/node/ts3.2/util.d.ts", + "../../node_modules/@types/node/util.d.ts" + ], + "../../node_modules/@types/babel__core/index.d.ts": [ + "../../node_modules/@babel/parser/typings/babel-parser.d.ts", + "../../node_modules/@babel/types/lib/index.d.ts", + "../../node_modules/@types/babel__generator/index.d.ts", + "../../node_modules/@types/babel__template/index.d.ts", + "../../node_modules/@types/babel__traverse/index.d.ts", + "../../node_modules/@types/graceful-fs/index.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/ts3.2/fs.d.ts", + "../../node_modules/@types/node/ts3.2/util.d.ts", + "../../node_modules/@types/node/util.d.ts" + ], + "../../node_modules/@types/babel__generator/index.d.ts": [ + "../../node_modules/@babel/types/lib/index.d.ts", + "../../node_modules/@types/graceful-fs/index.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/ts3.2/fs.d.ts", + "../../node_modules/@types/node/ts3.2/util.d.ts", + "../../node_modules/@types/node/util.d.ts" + ], + "../../node_modules/@types/babel__template/index.d.ts": [ + "../../node_modules/@babel/parser/typings/babel-parser.d.ts", + "../../node_modules/@babel/types/lib/index.d.ts", + "../../node_modules/@types/graceful-fs/index.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/ts3.2/fs.d.ts", + "../../node_modules/@types/node/ts3.2/util.d.ts", + "../../node_modules/@types/node/util.d.ts" + ], + "../../node_modules/@types/babel__traverse/index.d.ts": [ + "../../node_modules/@babel/types/lib/index.d.ts", + "../../node_modules/@types/graceful-fs/index.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/ts3.2/fs.d.ts", + "../../node_modules/@types/node/ts3.2/util.d.ts", + "../../node_modules/@types/node/util.d.ts" + ], + "../../node_modules/@types/bn.js/index.d.ts": [ + "../../node_modules/@types/graceful-fs/index.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/ts3.2/fs.d.ts", + "../../node_modules/@types/node/ts3.2/util.d.ts", + "../../node_modules/@types/node/ts3.7/index.d.ts", + "../../node_modules/@types/node/util.d.ts" + ], + "../../node_modules/@types/bs58/index.d.ts": [ + "../../node_modules/@types/graceful-fs/index.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/ts3.2/fs.d.ts", + "../../node_modules/@types/node/ts3.2/util.d.ts", + "../../node_modules/@types/node/util.d.ts", + "../../node_modules/base-x/src/index.d.ts" + ], + "../../node_modules/@types/chance/index.d.ts": [ + "../../node_modules/@types/graceful-fs/index.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/ts3.2/fs.d.ts", + "../../node_modules/@types/node/ts3.2/util.d.ts", + "../../node_modules/@types/node/util.d.ts" + ], + "../../node_modules/@types/color-name/index.d.ts": [ + "../../node_modules/@types/graceful-fs/index.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/ts3.2/fs.d.ts", + "../../node_modules/@types/node/ts3.2/util.d.ts", + "../../node_modules/@types/node/util.d.ts" + ], + "../../node_modules/@types/graceful-fs/index.d.ts": [ + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/ts3.2/fs.d.ts", + "../../node_modules/@types/node/ts3.2/util.d.ts", + "../../node_modules/@types/node/ts3.7/index.d.ts", + "../../node_modules/@types/node/util.d.ts" + ], + "../../node_modules/@types/istanbul-lib-coverage/index.d.ts": [ + "../../node_modules/@types/graceful-fs/index.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/ts3.2/fs.d.ts", + "../../node_modules/@types/node/ts3.2/util.d.ts", + "../../node_modules/@types/node/util.d.ts" + ], + "../../node_modules/@types/istanbul-lib-report/index.d.ts": [ + "../../node_modules/@types/graceful-fs/index.d.ts", + "../../node_modules/@types/istanbul-lib-coverage/index.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/ts3.2/fs.d.ts", + "../../node_modules/@types/node/ts3.2/util.d.ts", + "../../node_modules/@types/node/util.d.ts" + ], + "../../node_modules/@types/istanbul-reports/index.d.ts": [ + "../../node_modules/@types/graceful-fs/index.d.ts", + "../../node_modules/@types/istanbul-lib-coverage/index.d.ts", + "../../node_modules/@types/istanbul-lib-report/index.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/ts3.2/fs.d.ts", + "../../node_modules/@types/node/ts3.2/util.d.ts", + "../../node_modules/@types/node/util.d.ts" + ], + "../../node_modules/@types/jest/index.d.ts": [ + "../../node_modules/@types/graceful-fs/index.d.ts", + "../../node_modules/@types/jest/node_modules/jest-diff/build/index.d.ts", + "../../node_modules/@types/jest/node_modules/pretty-format/build/index.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/ts3.2/fs.d.ts", + "../../node_modules/@types/node/ts3.2/util.d.ts", + "../../node_modules/@types/node/util.d.ts" + ], + "../../node_modules/@types/jest/node_modules/jest-diff/build/cleanupsemantic.d.ts": [ + "../../node_modules/@types/graceful-fs/index.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/ts3.2/fs.d.ts", + "../../node_modules/@types/node/ts3.2/util.d.ts", + "../../node_modules/@types/node/util.d.ts" + ], + "../../node_modules/@types/jest/node_modules/jest-diff/build/difflines.d.ts": [ + "../../node_modules/@types/graceful-fs/index.d.ts", + "../../node_modules/@types/jest/node_modules/jest-diff/build/cleanupsemantic.d.ts", + "../../node_modules/@types/jest/node_modules/jest-diff/build/types.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/ts3.2/fs.d.ts", + "../../node_modules/@types/node/ts3.2/util.d.ts", + "../../node_modules/@types/node/util.d.ts" + ], + "../../node_modules/@types/jest/node_modules/jest-diff/build/index.d.ts": [ + "../../node_modules/@types/graceful-fs/index.d.ts", + "../../node_modules/@types/jest/node_modules/jest-diff/build/cleanupsemantic.d.ts", + "../../node_modules/@types/jest/node_modules/jest-diff/build/difflines.d.ts", + "../../node_modules/@types/jest/node_modules/jest-diff/build/printdiffs.d.ts", + "../../node_modules/@types/jest/node_modules/jest-diff/build/types.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/ts3.2/fs.d.ts", + "../../node_modules/@types/node/ts3.2/util.d.ts", + "../../node_modules/@types/node/util.d.ts" + ], + "../../node_modules/@types/jest/node_modules/jest-diff/build/printdiffs.d.ts": [ + "../../node_modules/@types/graceful-fs/index.d.ts", + "../../node_modules/@types/jest/node_modules/jest-diff/build/cleanupsemantic.d.ts", + "../../node_modules/@types/jest/node_modules/jest-diff/build/types.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/ts3.2/fs.d.ts", + "../../node_modules/@types/node/ts3.2/util.d.ts", + "../../node_modules/@types/node/util.d.ts" + ], + "../../node_modules/@types/jest/node_modules/jest-diff/build/types.d.ts": [ + "../../node_modules/@types/graceful-fs/index.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/ts3.2/fs.d.ts", + "../../node_modules/@types/node/ts3.2/util.d.ts", + "../../node_modules/@types/node/util.d.ts" + ], + "../../node_modules/@types/jest/node_modules/pretty-format/build/index.d.ts": [ + "../../node_modules/@types/graceful-fs/index.d.ts", + "../../node_modules/@types/jest/node_modules/pretty-format/build/types.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/ts3.2/fs.d.ts", + "../../node_modules/@types/node/ts3.2/util.d.ts", + "../../node_modules/@types/node/util.d.ts" + ], + "../../node_modules/@types/jest/node_modules/pretty-format/build/types.d.ts": [ + "../../node_modules/@types/graceful-fs/index.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/ts3.2/fs.d.ts", + "../../node_modules/@types/node/ts3.2/util.d.ts", + "../../node_modules/@types/node/util.d.ts" + ], + "../../node_modules/@types/jest/ts3.2/index.d.ts": [ + "../../node_modules/@types/graceful-fs/index.d.ts", + "../../node_modules/@types/jest/index.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/ts3.2/fs.d.ts", + "../../node_modules/@types/node/ts3.2/util.d.ts", + "../../node_modules/@types/node/util.d.ts" + ], + "../../node_modules/@types/js-base64/index.d.ts": [ + "../../node_modules/@types/graceful-fs/index.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/ts3.2/fs.d.ts", + "../../node_modules/@types/node/ts3.2/util.d.ts", + "../../node_modules/@types/node/util.d.ts" + ], + "../../node_modules/@types/node/async_hooks.d.ts": [ + "../../node_modules/@types/graceful-fs/index.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/ts3.2/fs.d.ts", + "../../node_modules/@types/node/ts3.2/util.d.ts", + "../../node_modules/@types/node/util.d.ts" + ], + "../../node_modules/@types/node/base.d.ts": [ + "../../node_modules/@types/graceful-fs/index.d.ts", + "../../node_modules/@types/node/async_hooks.d.ts", + "../../node_modules/@types/node/buffer.d.ts", + "../../node_modules/@types/node/child_process.d.ts", + "../../node_modules/@types/node/cluster.d.ts", + "../../node_modules/@types/node/console.d.ts", + "../../node_modules/@types/node/constants.d.ts", + "../../node_modules/@types/node/crypto.d.ts", + "../../node_modules/@types/node/dgram.d.ts", + "../../node_modules/@types/node/dns.d.ts", + "../../node_modules/@types/node/domain.d.ts", + "../../node_modules/@types/node/events.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/fs/promises.d.ts", + "../../node_modules/@types/node/globals.d.ts", + "../../node_modules/@types/node/http.d.ts", + "../../node_modules/@types/node/http2.d.ts", + "../../node_modules/@types/node/https.d.ts", + "../../node_modules/@types/node/inspector.d.ts", + "../../node_modules/@types/node/module.d.ts", + "../../node_modules/@types/node/net.d.ts", + "../../node_modules/@types/node/os.d.ts", + "../../node_modules/@types/node/path.d.ts", + "../../node_modules/@types/node/perf_hooks.d.ts", + "../../node_modules/@types/node/process.d.ts", + "../../node_modules/@types/node/punycode.d.ts", + "../../node_modules/@types/node/querystring.d.ts", + "../../node_modules/@types/node/readline.d.ts", + "../../node_modules/@types/node/repl.d.ts", + "../../node_modules/@types/node/stream.d.ts", + "../../node_modules/@types/node/string_decoder.d.ts", + "../../node_modules/@types/node/timers.d.ts", + "../../node_modules/@types/node/tls.d.ts", + "../../node_modules/@types/node/trace_events.d.ts", + "../../node_modules/@types/node/ts3.2/fs.d.ts", + "../../node_modules/@types/node/ts3.2/util.d.ts", + "../../node_modules/@types/node/tty.d.ts", + "../../node_modules/@types/node/url.d.ts", + "../../node_modules/@types/node/util.d.ts", + "../../node_modules/@types/node/v8.d.ts", + "../../node_modules/@types/node/vm.d.ts", + "../../node_modules/@types/node/worker_threads.d.ts", + "../../node_modules/@types/node/zlib.d.ts" + ], + "../../node_modules/@types/node/buffer.d.ts": [ + "../../node_modules/@types/graceful-fs/index.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/ts3.2/fs.d.ts", + "../../node_modules/@types/node/ts3.2/util.d.ts", + "../../node_modules/@types/node/util.d.ts" + ], + "../../node_modules/@types/node/child_process.d.ts": [ + "../../node_modules/@types/graceful-fs/index.d.ts", + "../../node_modules/@types/node/events.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/net.d.ts", + "../../node_modules/@types/node/stream.d.ts", + "../../node_modules/@types/node/ts3.2/fs.d.ts", + "../../node_modules/@types/node/ts3.2/util.d.ts", + "../../node_modules/@types/node/util.d.ts" + ], + "../../node_modules/@types/node/cluster.d.ts": [ + "../../node_modules/@types/graceful-fs/index.d.ts", + "../../node_modules/@types/node/child_process.d.ts", + "../../node_modules/@types/node/events.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/net.d.ts", + "../../node_modules/@types/node/ts3.2/fs.d.ts", + "../../node_modules/@types/node/ts3.2/util.d.ts", + "../../node_modules/@types/node/util.d.ts" + ], + "../../node_modules/@types/node/console.d.ts": [ + "../../node_modules/@types/graceful-fs/index.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/ts3.2/fs.d.ts", + "../../node_modules/@types/node/ts3.2/util.d.ts", + "../../node_modules/@types/node/util.d.ts" + ], + "../../node_modules/@types/node/constants.d.ts": [ + "../../node_modules/@types/graceful-fs/index.d.ts", + "../../node_modules/@types/node/crypto.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/os.d.ts", + "../../node_modules/@types/node/ts3.2/fs.d.ts", + "../../node_modules/@types/node/ts3.2/util.d.ts", + "../../node_modules/@types/node/util.d.ts" + ], + "../../node_modules/@types/node/crypto.d.ts": [ + "../../node_modules/@types/graceful-fs/index.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/stream.d.ts", + "../../node_modules/@types/node/ts3.2/fs.d.ts", + "../../node_modules/@types/node/ts3.2/util.d.ts", + "../../node_modules/@types/node/util.d.ts" + ], + "../../node_modules/@types/node/dgram.d.ts": [ + "../../node_modules/@types/graceful-fs/index.d.ts", + "../../node_modules/@types/node/dns.d.ts", + "../../node_modules/@types/node/events.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/net.d.ts", + "../../node_modules/@types/node/ts3.2/fs.d.ts", + "../../node_modules/@types/node/ts3.2/util.d.ts", + "../../node_modules/@types/node/util.d.ts" + ], + "../../node_modules/@types/node/dns.d.ts": [ + "../../node_modules/@types/graceful-fs/index.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/ts3.2/fs.d.ts", + "../../node_modules/@types/node/ts3.2/util.d.ts", + "../../node_modules/@types/node/util.d.ts" + ], + "../../node_modules/@types/node/domain.d.ts": [ + "../../node_modules/@types/graceful-fs/index.d.ts", + "../../node_modules/@types/node/events.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/ts3.2/fs.d.ts", + "../../node_modules/@types/node/ts3.2/util.d.ts", + "../../node_modules/@types/node/util.d.ts" + ], + "../../node_modules/@types/node/events.d.ts": [ + "../../node_modules/@types/graceful-fs/index.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/ts3.2/fs.d.ts", + "../../node_modules/@types/node/ts3.2/util.d.ts", + "../../node_modules/@types/node/util.d.ts" + ], + "../../node_modules/@types/node/fs.d.ts": [ + "../../node_modules/@types/graceful-fs/index.d.ts", + "../../node_modules/@types/node/events.d.ts", + "../../node_modules/@types/node/fs/promises.d.ts", + "../../node_modules/@types/node/stream.d.ts", + "../../node_modules/@types/node/ts3.2/fs.d.ts", + "../../node_modules/@types/node/ts3.2/util.d.ts", + "../../node_modules/@types/node/url.d.ts", + "../../node_modules/@types/node/util.d.ts" + ], + "../../node_modules/@types/node/fs/promises.d.ts": [ + "../../node_modules/@types/graceful-fs/index.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/ts3.2/fs.d.ts", + "../../node_modules/@types/node/ts3.2/util.d.ts", + "../../node_modules/@types/node/util.d.ts" + ], + "../../node_modules/@types/node/globals.d.ts": [ + "../../node_modules/@types/graceful-fs/index.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/ts3.2/fs.d.ts", + "../../node_modules/@types/node/ts3.2/util.d.ts", + "../../node_modules/@types/node/util.d.ts" + ], + "../../node_modules/@types/node/http.d.ts": [ + "../../node_modules/@types/graceful-fs/index.d.ts", + "../../node_modules/@types/node/events.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/net.d.ts", + "../../node_modules/@types/node/stream.d.ts", + "../../node_modules/@types/node/ts3.2/fs.d.ts", + "../../node_modules/@types/node/ts3.2/util.d.ts", + "../../node_modules/@types/node/url.d.ts", + "../../node_modules/@types/node/util.d.ts" + ], + "../../node_modules/@types/node/http2.d.ts": [ + "../../node_modules/@types/graceful-fs/index.d.ts", + "../../node_modules/@types/node/events.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/http.d.ts", + "../../node_modules/@types/node/net.d.ts", + "../../node_modules/@types/node/stream.d.ts", + "../../node_modules/@types/node/tls.d.ts", + "../../node_modules/@types/node/ts3.2/fs.d.ts", + "../../node_modules/@types/node/ts3.2/util.d.ts", + "../../node_modules/@types/node/url.d.ts", + "../../node_modules/@types/node/util.d.ts" + ], + "../../node_modules/@types/node/https.d.ts": [ + "../../node_modules/@types/graceful-fs/index.d.ts", + "../../node_modules/@types/node/events.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/http.d.ts", + "../../node_modules/@types/node/tls.d.ts", + "../../node_modules/@types/node/ts3.2/fs.d.ts", + "../../node_modules/@types/node/ts3.2/util.d.ts", + "../../node_modules/@types/node/url.d.ts", + "../../node_modules/@types/node/util.d.ts" + ], + "../../node_modules/@types/node/inspector.d.ts": [ + "../../node_modules/@types/graceful-fs/index.d.ts", + "../../node_modules/@types/node/events.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/ts3.2/fs.d.ts", + "../../node_modules/@types/node/ts3.2/util.d.ts", + "../../node_modules/@types/node/util.d.ts" + ], + "../../node_modules/@types/node/module.d.ts": [ + "../../node_modules/@types/graceful-fs/index.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/ts3.2/fs.d.ts", + "../../node_modules/@types/node/ts3.2/util.d.ts", + "../../node_modules/@types/node/url.d.ts", + "../../node_modules/@types/node/util.d.ts" + ], + "../../node_modules/@types/node/net.d.ts": [ + "../../node_modules/@types/graceful-fs/index.d.ts", + "../../node_modules/@types/node/dns.d.ts", + "../../node_modules/@types/node/events.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/stream.d.ts", + "../../node_modules/@types/node/ts3.2/fs.d.ts", + "../../node_modules/@types/node/ts3.2/util.d.ts", + "../../node_modules/@types/node/util.d.ts" + ], + "../../node_modules/@types/node/os.d.ts": [ + "../../node_modules/@types/graceful-fs/index.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/ts3.2/fs.d.ts", + "../../node_modules/@types/node/ts3.2/util.d.ts", + "../../node_modules/@types/node/util.d.ts" + ], + "../../node_modules/@types/node/path.d.ts": [ + "../../node_modules/@types/graceful-fs/index.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/ts3.2/fs.d.ts", + "../../node_modules/@types/node/ts3.2/util.d.ts", + "../../node_modules/@types/node/util.d.ts" + ], + "../../node_modules/@types/node/perf_hooks.d.ts": [ + "../../node_modules/@types/graceful-fs/index.d.ts", + "../../node_modules/@types/node/async_hooks.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/ts3.2/fs.d.ts", + "../../node_modules/@types/node/ts3.2/util.d.ts", + "../../node_modules/@types/node/util.d.ts" + ], + "../../node_modules/@types/node/process.d.ts": [ + "../../node_modules/@types/graceful-fs/index.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/ts3.2/fs.d.ts", + "../../node_modules/@types/node/ts3.2/util.d.ts", + "../../node_modules/@types/node/tty.d.ts", + "../../node_modules/@types/node/util.d.ts" + ], + "../../node_modules/@types/node/punycode.d.ts": [ + "../../node_modules/@types/graceful-fs/index.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/ts3.2/fs.d.ts", + "../../node_modules/@types/node/ts3.2/util.d.ts", + "../../node_modules/@types/node/util.d.ts" + ], + "../../node_modules/@types/node/querystring.d.ts": [ + "../../node_modules/@types/graceful-fs/index.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/ts3.2/fs.d.ts", + "../../node_modules/@types/node/ts3.2/util.d.ts", + "../../node_modules/@types/node/util.d.ts" + ], + "../../node_modules/@types/node/readline.d.ts": [ + "../../node_modules/@types/graceful-fs/index.d.ts", + "../../node_modules/@types/node/events.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/stream.d.ts", + "../../node_modules/@types/node/ts3.2/fs.d.ts", + "../../node_modules/@types/node/ts3.2/util.d.ts", + "../../node_modules/@types/node/util.d.ts" + ], + "../../node_modules/@types/node/repl.d.ts": [ + "../../node_modules/@types/graceful-fs/index.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/readline.d.ts", + "../../node_modules/@types/node/ts3.2/fs.d.ts", + "../../node_modules/@types/node/ts3.2/util.d.ts", + "../../node_modules/@types/node/util.d.ts", + "../../node_modules/@types/node/vm.d.ts" + ], + "../../node_modules/@types/node/stream.d.ts": [ + "../../node_modules/@types/graceful-fs/index.d.ts", + "../../node_modules/@types/node/events.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/ts3.2/fs.d.ts", + "../../node_modules/@types/node/ts3.2/util.d.ts", + "../../node_modules/@types/node/util.d.ts" + ], + "../../node_modules/@types/node/string_decoder.d.ts": [ + "../../node_modules/@types/graceful-fs/index.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/ts3.2/fs.d.ts", + "../../node_modules/@types/node/ts3.2/util.d.ts", + "../../node_modules/@types/node/util.d.ts" + ], + "../../node_modules/@types/node/timers.d.ts": [ + "../../node_modules/@types/graceful-fs/index.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/ts3.2/fs.d.ts", + "../../node_modules/@types/node/ts3.2/util.d.ts", + "../../node_modules/@types/node/util.d.ts" + ], + "../../node_modules/@types/node/tls.d.ts": [ + "../../node_modules/@types/graceful-fs/index.d.ts", + "../../node_modules/@types/node/crypto.d.ts", + "../../node_modules/@types/node/dns.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/net.d.ts", + "../../node_modules/@types/node/stream.d.ts", + "../../node_modules/@types/node/ts3.2/fs.d.ts", + "../../node_modules/@types/node/ts3.2/util.d.ts", + "../../node_modules/@types/node/util.d.ts" + ], + "../../node_modules/@types/node/trace_events.d.ts": [ + "../../node_modules/@types/graceful-fs/index.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/ts3.2/fs.d.ts", + "../../node_modules/@types/node/ts3.2/util.d.ts", + "../../node_modules/@types/node/util.d.ts" + ], + "../../node_modules/@types/node/ts3.2/base.d.ts": [ + "../../node_modules/@types/graceful-fs/index.d.ts", + "../../node_modules/@types/node/base.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/ts3.2/fs.d.ts", + "../../node_modules/@types/node/ts3.2/globals.d.ts", + "../../node_modules/@types/node/ts3.2/util.d.ts", + "../../node_modules/@types/node/util.d.ts" + ], + "../../node_modules/@types/node/ts3.2/fs.d.ts": [ + "../../node_modules/@types/graceful-fs/index.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/ts3.2/util.d.ts", + "../../node_modules/@types/node/util.d.ts" + ], + "../../node_modules/@types/node/ts3.2/globals.d.ts": [ + "../../node_modules/@types/graceful-fs/index.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/globals.d.ts", + "../../node_modules/@types/node/ts3.2/fs.d.ts", + "../../node_modules/@types/node/ts3.2/util.d.ts", + "../../node_modules/@types/node/util.d.ts" + ], + "../../node_modules/@types/node/ts3.2/util.d.ts": [ + "../../node_modules/@types/graceful-fs/index.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/ts3.2/fs.d.ts", + "../../node_modules/@types/node/util.d.ts" + ], + "../../node_modules/@types/node/ts3.5/base.d.ts": [ + "../../node_modules/@types/graceful-fs/index.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/ts3.2/base.d.ts", + "../../node_modules/@types/node/ts3.2/fs.d.ts", + "../../node_modules/@types/node/ts3.2/util.d.ts", + "../../node_modules/@types/node/ts3.5/globals.global.d.ts", + "../../node_modules/@types/node/ts3.5/wasi.d.ts", + "../../node_modules/@types/node/util.d.ts" + ], + "../../node_modules/@types/node/ts3.5/globals.global.d.ts": [ + "../../node_modules/@types/graceful-fs/index.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/ts3.2/fs.d.ts", + "../../node_modules/@types/node/ts3.2/util.d.ts", + "../../node_modules/@types/node/util.d.ts" + ], + "../../node_modules/@types/node/ts3.5/wasi.d.ts": [ + "../../node_modules/@types/graceful-fs/index.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/ts3.2/fs.d.ts", + "../../node_modules/@types/node/ts3.2/util.d.ts", + "../../node_modules/@types/node/util.d.ts" + ], + "../../node_modules/@types/node/ts3.7/assert.d.ts": [ + "../../node_modules/@types/graceful-fs/index.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/ts3.2/fs.d.ts", + "../../node_modules/@types/node/ts3.2/util.d.ts", + "../../node_modules/@types/node/util.d.ts" + ], + "../../node_modules/@types/node/ts3.7/base.d.ts": [ + "../../node_modules/@types/graceful-fs/index.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/ts3.2/fs.d.ts", + "../../node_modules/@types/node/ts3.2/util.d.ts", + "../../node_modules/@types/node/ts3.5/base.d.ts", + "../../node_modules/@types/node/ts3.7/assert.d.ts", + "../../node_modules/@types/node/util.d.ts" + ], + "../../node_modules/@types/node/ts3.7/index.d.ts": [ + "../../node_modules/@types/graceful-fs/index.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/ts3.2/fs.d.ts", + "../../node_modules/@types/node/ts3.2/util.d.ts", + "../../node_modules/@types/node/ts3.7/base.d.ts", + "../../node_modules/@types/node/util.d.ts" + ], + "../../node_modules/@types/node/tty.d.ts": [ + "../../node_modules/@types/graceful-fs/index.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/net.d.ts", + "../../node_modules/@types/node/ts3.2/fs.d.ts", + "../../node_modules/@types/node/ts3.2/util.d.ts", + "../../node_modules/@types/node/util.d.ts" + ], + "../../node_modules/@types/node/url.d.ts": [ + "../../node_modules/@types/graceful-fs/index.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/querystring.d.ts", + "../../node_modules/@types/node/ts3.2/fs.d.ts", + "../../node_modules/@types/node/ts3.2/util.d.ts", + "../../node_modules/@types/node/util.d.ts" + ], + "../../node_modules/@types/node/util.d.ts": [ + "../../node_modules/@types/graceful-fs/index.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/ts3.2/fs.d.ts", + "../../node_modules/@types/node/ts3.2/util.d.ts" + ], + "../../node_modules/@types/node/v8.d.ts": [ + "../../node_modules/@types/graceful-fs/index.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/stream.d.ts", + "../../node_modules/@types/node/ts3.2/fs.d.ts", + "../../node_modules/@types/node/ts3.2/util.d.ts", + "../../node_modules/@types/node/util.d.ts" + ], + "../../node_modules/@types/node/vm.d.ts": [ + "../../node_modules/@types/graceful-fs/index.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/ts3.2/fs.d.ts", + "../../node_modules/@types/node/ts3.2/util.d.ts", + "../../node_modules/@types/node/util.d.ts" + ], + "../../node_modules/@types/node/worker_threads.d.ts": [ + "../../node_modules/@types/graceful-fs/index.d.ts", + "../../node_modules/@types/node/events.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/stream.d.ts", + "../../node_modules/@types/node/ts3.2/fs.d.ts", + "../../node_modules/@types/node/ts3.2/util.d.ts", + "../../node_modules/@types/node/url.d.ts", + "../../node_modules/@types/node/util.d.ts", + "../../node_modules/@types/node/vm.d.ts" + ], + "../../node_modules/@types/node/zlib.d.ts": [ + "../../node_modules/@types/graceful-fs/index.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/stream.d.ts", + "../../node_modules/@types/node/ts3.2/fs.d.ts", + "../../node_modules/@types/node/ts3.2/util.d.ts", + "../../node_modules/@types/node/util.d.ts" + ], + "../../node_modules/@types/normalize-package-data/index.d.ts": [ + "../../node_modules/@types/graceful-fs/index.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/ts3.2/fs.d.ts", + "../../node_modules/@types/node/ts3.2/util.d.ts", + "../../node_modules/@types/node/util.d.ts" + ], + "../../node_modules/@types/prettier/index.d.ts": [ + "../../node_modules/@types/graceful-fs/index.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/ts3.2/fs.d.ts", + "../../node_modules/@types/node/ts3.2/util.d.ts", + "../../node_modules/@types/node/util.d.ts" + ], + "../../node_modules/@types/stack-utils/index.d.ts": [ + "../../node_modules/@types/graceful-fs/index.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/ts3.2/fs.d.ts", + "../../node_modules/@types/node/ts3.2/util.d.ts", + "../../node_modules/@types/node/util.d.ts" + ], + "../../node_modules/@types/yargs-parser/index.d.ts": [ + "../../node_modules/@types/graceful-fs/index.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/ts3.2/fs.d.ts", + "../../node_modules/@types/node/ts3.2/util.d.ts", + "../../node_modules/@types/node/util.d.ts" + ], + "../../node_modules/@types/yargs/index.d.ts": [ + "../../node_modules/@types/graceful-fs/index.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/ts3.2/fs.d.ts", + "../../node_modules/@types/node/ts3.2/util.d.ts", + "../../node_modules/@types/node/util.d.ts", + "../../node_modules/@types/yargs-parser/index.d.ts" + ], + "../../node_modules/base-x/src/index.d.ts": [ + "../../node_modules/@types/graceful-fs/index.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/ts3.2/fs.d.ts", + "../../node_modules/@types/node/ts3.2/util.d.ts", + "../../node_modules/@types/node/ts3.7/index.d.ts", + "../../node_modules/@types/node/util.d.ts" + ], + "../../node_modules/typescript/lib/lib.es2015.collection.d.ts": [ + "../../node_modules/@types/graceful-fs/index.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/ts3.2/fs.d.ts", + "../../node_modules/@types/node/ts3.2/util.d.ts", + "../../node_modules/@types/node/util.d.ts" + ], + "../../node_modules/typescript/lib/lib.es2015.core.d.ts": [ + "../../node_modules/@types/graceful-fs/index.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/ts3.2/fs.d.ts", + "../../node_modules/@types/node/ts3.2/util.d.ts", + "../../node_modules/@types/node/util.d.ts" + ], + "../../node_modules/typescript/lib/lib.es2015.d.ts": [ + "../../node_modules/@types/graceful-fs/index.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/ts3.2/fs.d.ts", + "../../node_modules/@types/node/ts3.2/util.d.ts", + "../../node_modules/@types/node/util.d.ts" + ], + "../../node_modules/typescript/lib/lib.es2015.generator.d.ts": [ + "../../node_modules/@types/graceful-fs/index.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/ts3.2/fs.d.ts", + "../../node_modules/@types/node/ts3.2/util.d.ts", + "../../node_modules/@types/node/util.d.ts" + ], + "../../node_modules/typescript/lib/lib.es2015.iterable.d.ts": [ + "../../node_modules/@types/graceful-fs/index.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/ts3.2/fs.d.ts", + "../../node_modules/@types/node/ts3.2/util.d.ts", + "../../node_modules/@types/node/util.d.ts" + ], + "../../node_modules/typescript/lib/lib.es2015.promise.d.ts": [ + "../../node_modules/@types/graceful-fs/index.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/ts3.2/fs.d.ts", + "../../node_modules/@types/node/ts3.2/util.d.ts", + "../../node_modules/@types/node/util.d.ts" + ], + "../../node_modules/typescript/lib/lib.es2015.proxy.d.ts": [ + "../../node_modules/@types/graceful-fs/index.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/ts3.2/fs.d.ts", + "../../node_modules/@types/node/ts3.2/util.d.ts", + "../../node_modules/@types/node/util.d.ts" + ], + "../../node_modules/typescript/lib/lib.es2015.reflect.d.ts": [ + "../../node_modules/@types/graceful-fs/index.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/ts3.2/fs.d.ts", + "../../node_modules/@types/node/ts3.2/util.d.ts", + "../../node_modules/@types/node/util.d.ts" + ], + "../../node_modules/typescript/lib/lib.es2015.symbol.d.ts": [ + "../../node_modules/@types/graceful-fs/index.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/ts3.2/fs.d.ts", + "../../node_modules/@types/node/ts3.2/util.d.ts", + "../../node_modules/@types/node/util.d.ts" + ], + "../../node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts": [ + "../../node_modules/@types/graceful-fs/index.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/ts3.2/fs.d.ts", + "../../node_modules/@types/node/ts3.2/util.d.ts", + "../../node_modules/@types/node/util.d.ts" + ], + "../../node_modules/typescript/lib/lib.es2016.array.include.d.ts": [ + "../../node_modules/@types/graceful-fs/index.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/ts3.2/fs.d.ts", + "../../node_modules/@types/node/ts3.2/util.d.ts", + "../../node_modules/@types/node/util.d.ts" + ], + "../../node_modules/typescript/lib/lib.es2016.d.ts": [ + "../../node_modules/@types/graceful-fs/index.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/ts3.2/fs.d.ts", + "../../node_modules/@types/node/ts3.2/util.d.ts", + "../../node_modules/@types/node/util.d.ts" + ], + "../../node_modules/typescript/lib/lib.es2017.d.ts": [ + "../../node_modules/@types/graceful-fs/index.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/ts3.2/fs.d.ts", + "../../node_modules/@types/node/ts3.2/util.d.ts", + "../../node_modules/@types/node/util.d.ts" + ], + "../../node_modules/typescript/lib/lib.es2017.intl.d.ts": [ + "../../node_modules/@types/graceful-fs/index.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/ts3.2/fs.d.ts", + "../../node_modules/@types/node/ts3.2/util.d.ts", + "../../node_modules/@types/node/util.d.ts" + ], + "../../node_modules/typescript/lib/lib.es2017.object.d.ts": [ + "../../node_modules/@types/graceful-fs/index.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/ts3.2/fs.d.ts", + "../../node_modules/@types/node/ts3.2/util.d.ts", + "../../node_modules/@types/node/util.d.ts" + ], + "../../node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts": [ + "../../node_modules/@types/graceful-fs/index.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/ts3.2/fs.d.ts", + "../../node_modules/@types/node/ts3.2/util.d.ts", + "../../node_modules/@types/node/util.d.ts" + ], + "../../node_modules/typescript/lib/lib.es2017.string.d.ts": [ + "../../node_modules/@types/graceful-fs/index.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/ts3.2/fs.d.ts", + "../../node_modules/@types/node/ts3.2/util.d.ts", + "../../node_modules/@types/node/util.d.ts" + ], + "../../node_modules/typescript/lib/lib.es2017.typedarrays.d.ts": [ + "../../node_modules/@types/graceful-fs/index.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/ts3.2/fs.d.ts", + "../../node_modules/@types/node/ts3.2/util.d.ts", + "../../node_modules/@types/node/util.d.ts" + ], + "../../node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts": [ + "../../node_modules/@types/graceful-fs/index.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/ts3.2/fs.d.ts", + "../../node_modules/@types/node/ts3.2/util.d.ts", + "../../node_modules/@types/node/util.d.ts" + ], + "../../node_modules/typescript/lib/lib.es2018.asynciterable.d.ts": [ + "../../node_modules/@types/graceful-fs/index.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/ts3.2/fs.d.ts", + "../../node_modules/@types/node/ts3.2/util.d.ts", + "../../node_modules/@types/node/util.d.ts" + ], + "../../node_modules/typescript/lib/lib.es2018.d.ts": [ + "../../node_modules/@types/graceful-fs/index.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/ts3.2/fs.d.ts", + "../../node_modules/@types/node/ts3.2/util.d.ts", + "../../node_modules/@types/node/util.d.ts" + ], + "../../node_modules/typescript/lib/lib.es2018.intl.d.ts": [ + "../../node_modules/@types/graceful-fs/index.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/ts3.2/fs.d.ts", + "../../node_modules/@types/node/ts3.2/util.d.ts", + "../../node_modules/@types/node/util.d.ts" + ], + "../../node_modules/typescript/lib/lib.es2018.promise.d.ts": [ + "../../node_modules/@types/graceful-fs/index.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/ts3.2/fs.d.ts", + "../../node_modules/@types/node/ts3.2/util.d.ts", + "../../node_modules/@types/node/util.d.ts" + ], + "../../node_modules/typescript/lib/lib.es2018.regexp.d.ts": [ + "../../node_modules/@types/graceful-fs/index.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/ts3.2/fs.d.ts", + "../../node_modules/@types/node/ts3.2/util.d.ts", + "../../node_modules/@types/node/util.d.ts" + ], + "../../node_modules/typescript/lib/lib.es2019.array.d.ts": [ + "../../node_modules/@types/graceful-fs/index.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/ts3.2/fs.d.ts", + "../../node_modules/@types/node/ts3.2/util.d.ts", + "../../node_modules/@types/node/util.d.ts" + ], + "../../node_modules/typescript/lib/lib.es2019.d.ts": [ + "../../node_modules/@types/graceful-fs/index.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/ts3.2/fs.d.ts", + "../../node_modules/@types/node/ts3.2/util.d.ts", + "../../node_modules/@types/node/util.d.ts" + ], + "../../node_modules/typescript/lib/lib.es2019.object.d.ts": [ + "../../node_modules/@types/graceful-fs/index.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/ts3.2/fs.d.ts", + "../../node_modules/@types/node/ts3.2/util.d.ts", + "../../node_modules/@types/node/util.d.ts" + ], + "../../node_modules/typescript/lib/lib.es2019.string.d.ts": [ + "../../node_modules/@types/graceful-fs/index.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/ts3.2/fs.d.ts", + "../../node_modules/@types/node/ts3.2/util.d.ts", + "../../node_modules/@types/node/util.d.ts" + ], + "../../node_modules/typescript/lib/lib.es2019.symbol.d.ts": [ + "../../node_modules/@types/graceful-fs/index.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/ts3.2/fs.d.ts", + "../../node_modules/@types/node/ts3.2/util.d.ts", + "../../node_modules/@types/node/util.d.ts" + ], + "../../node_modules/typescript/lib/lib.es2020.bigint.d.ts": [ + "../../node_modules/@types/graceful-fs/index.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/ts3.2/fs.d.ts", + "../../node_modules/@types/node/ts3.2/util.d.ts", + "../../node_modules/@types/node/util.d.ts" + ], + "../../node_modules/typescript/lib/lib.es2020.d.ts": [ + "../../node_modules/@types/graceful-fs/index.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/ts3.2/fs.d.ts", + "../../node_modules/@types/node/ts3.2/util.d.ts", + "../../node_modules/@types/node/util.d.ts" + ], + "../../node_modules/typescript/lib/lib.es2020.promise.d.ts": [ + "../../node_modules/@types/graceful-fs/index.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/ts3.2/fs.d.ts", + "../../node_modules/@types/node/ts3.2/util.d.ts", + "../../node_modules/@types/node/util.d.ts" + ], + "../../node_modules/typescript/lib/lib.es2020.string.d.ts": [ + "../../node_modules/@types/graceful-fs/index.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/ts3.2/fs.d.ts", + "../../node_modules/@types/node/ts3.2/util.d.ts", + "../../node_modules/@types/node/util.d.ts" + ], + "../../node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts": [ + "../../node_modules/@types/graceful-fs/index.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/ts3.2/fs.d.ts", + "../../node_modules/@types/node/ts3.2/util.d.ts", + "../../node_modules/@types/node/util.d.ts" + ], + "../../node_modules/typescript/lib/lib.es5.d.ts": [ + "../../node_modules/@types/graceful-fs/index.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/ts3.2/fs.d.ts", + "../../node_modules/@types/node/ts3.2/util.d.ts", + "../../node_modules/@types/node/util.d.ts" + ], + "../../node_modules/typescript/lib/lib.esnext.d.ts": [ + "../../node_modules/@types/graceful-fs/index.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/ts3.2/fs.d.ts", + "../../node_modules/@types/node/ts3.2/util.d.ts", + "../../node_modules/@types/node/util.d.ts" + ], + "../../node_modules/typescript/lib/lib.esnext.intl.d.ts": [ + "../../node_modules/@types/graceful-fs/index.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/ts3.2/fs.d.ts", + "../../node_modules/@types/node/ts3.2/util.d.ts", + "../../node_modules/@types/node/util.d.ts" + ], + "../../node_modules/typescript/lib/lib.esnext.promise.d.ts": [ + "../../node_modules/@types/graceful-fs/index.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/ts3.2/fs.d.ts", + "../../node_modules/@types/node/ts3.2/util.d.ts", + "../../node_modules/@types/node/util.d.ts" + ], + "../../node_modules/typescript/lib/lib.esnext.string.d.ts": [ + "../../node_modules/@types/graceful-fs/index.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/ts3.2/fs.d.ts", + "../../node_modules/@types/node/ts3.2/util.d.ts", + "../../node_modules/@types/node/util.d.ts" + ], + "../src/bin.ts": [ + "../../node_modules/@types/graceful-fs/index.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/ts3.2/fs.d.ts", + "../../node_modules/@types/node/ts3.2/util.d.ts", + "../../node_modules/@types/node/util.d.ts" + ], + "../src/context.ts": [ + "../../node_modules/@types/graceful-fs/index.d.ts", + "../../node_modules/@types/js-base64/index.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/ts3.2/fs.d.ts", + "../../node_modules/@types/node/ts3.2/util.d.ts", + "../../node_modules/@types/node/util.d.ts" + ], + "../src/index.ts": [ + "../../node_modules/@types/graceful-fs/index.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/ts3.2/fs.d.ts", + "../../node_modules/@types/node/ts3.2/util.d.ts", + "../../node_modules/@types/node/util.d.ts", + "../src/context.ts", + "../src/runtime.ts", + "../src/utils.ts" + ], + "../src/runtime.ts": [ + "../../node_modules/@types/graceful-fs/index.d.ts", + "../../node_modules/@types/node/child_process.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/os.d.ts", + "../../node_modules/@types/node/ts3.2/fs.d.ts", + "../../node_modules/@types/node/ts3.2/util.d.ts", + "../../node_modules/@types/node/util.d.ts", + "../src/context.ts", + "../src/types.ts", + "../src/utils.ts" + ], + "../src/types.ts": [ + "../../node_modules/@types/graceful-fs/index.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/ts3.2/fs.d.ts", + "../../node_modules/@types/node/ts3.2/util.d.ts", + "../../node_modules/@types/node/util.d.ts" + ], + "../src/utils.ts": [ + "../../node_modules/@types/bn.js/index.d.ts", + "../../node_modules/@types/bs58/index.d.ts", + "../../node_modules/@types/graceful-fs/index.d.ts", + "../../node_modules/@types/js-base64/index.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/ts3.2/fs.d.ts", + "../../node_modules/@types/node/ts3.2/util.d.ts", + "../../node_modules/@types/node/util.d.ts", + "../src/types.ts" + ] + }, + "exportedModulesMap": { + "../../node_modules/@babel/parser/typings/babel-parser.d.ts": [ + "../../node_modules/@babel/types/lib/index.d.ts", + "../../node_modules/@types/graceful-fs/index.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/ts3.2/fs.d.ts", + "../../node_modules/@types/node/ts3.2/util.d.ts", + "../../node_modules/@types/node/util.d.ts" + ], + "../../node_modules/@babel/types/lib/index.d.ts": [ + "../../node_modules/@types/graceful-fs/index.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/ts3.2/fs.d.ts", + "../../node_modules/@types/node/ts3.2/util.d.ts", + "../../node_modules/@types/node/util.d.ts" + ], + "../../node_modules/@types/babel__core/index.d.ts": [ + "../../node_modules/@babel/parser/typings/babel-parser.d.ts", + "../../node_modules/@babel/types/lib/index.d.ts", + "../../node_modules/@types/babel__generator/index.d.ts", + "../../node_modules/@types/babel__template/index.d.ts", + "../../node_modules/@types/babel__traverse/index.d.ts", + "../../node_modules/@types/graceful-fs/index.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/ts3.2/fs.d.ts", + "../../node_modules/@types/node/ts3.2/util.d.ts", + "../../node_modules/@types/node/util.d.ts" + ], + "../../node_modules/@types/babel__generator/index.d.ts": [ + "../../node_modules/@babel/types/lib/index.d.ts", + "../../node_modules/@types/graceful-fs/index.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/ts3.2/fs.d.ts", + "../../node_modules/@types/node/ts3.2/util.d.ts", + "../../node_modules/@types/node/util.d.ts" + ], + "../../node_modules/@types/babel__template/index.d.ts": [ + "../../node_modules/@babel/parser/typings/babel-parser.d.ts", + "../../node_modules/@babel/types/lib/index.d.ts", + "../../node_modules/@types/graceful-fs/index.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/ts3.2/fs.d.ts", + "../../node_modules/@types/node/ts3.2/util.d.ts", + "../../node_modules/@types/node/util.d.ts" + ], + "../../node_modules/@types/babel__traverse/index.d.ts": [ + "../../node_modules/@babel/types/lib/index.d.ts", + "../../node_modules/@types/graceful-fs/index.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/ts3.2/fs.d.ts", + "../../node_modules/@types/node/ts3.2/util.d.ts", + "../../node_modules/@types/node/util.d.ts" + ], + "../../node_modules/@types/bn.js/index.d.ts": [ + "../../node_modules/@types/graceful-fs/index.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/ts3.2/fs.d.ts", + "../../node_modules/@types/node/ts3.2/util.d.ts", + "../../node_modules/@types/node/ts3.7/index.d.ts", + "../../node_modules/@types/node/util.d.ts" + ], + "../../node_modules/@types/bs58/index.d.ts": [ + "../../node_modules/@types/graceful-fs/index.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/ts3.2/fs.d.ts", + "../../node_modules/@types/node/ts3.2/util.d.ts", + "../../node_modules/@types/node/util.d.ts", + "../../node_modules/base-x/src/index.d.ts" + ], + "../../node_modules/@types/chance/index.d.ts": [ + "../../node_modules/@types/graceful-fs/index.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/ts3.2/fs.d.ts", + "../../node_modules/@types/node/ts3.2/util.d.ts", + "../../node_modules/@types/node/util.d.ts" + ], + "../../node_modules/@types/color-name/index.d.ts": [ + "../../node_modules/@types/graceful-fs/index.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/ts3.2/fs.d.ts", + "../../node_modules/@types/node/ts3.2/util.d.ts", + "../../node_modules/@types/node/util.d.ts" + ], + "../../node_modules/@types/graceful-fs/index.d.ts": [ + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/ts3.2/fs.d.ts", + "../../node_modules/@types/node/ts3.2/util.d.ts", + "../../node_modules/@types/node/ts3.7/index.d.ts", + "../../node_modules/@types/node/util.d.ts" + ], + "../../node_modules/@types/istanbul-lib-coverage/index.d.ts": [ + "../../node_modules/@types/graceful-fs/index.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/ts3.2/fs.d.ts", + "../../node_modules/@types/node/ts3.2/util.d.ts", + "../../node_modules/@types/node/util.d.ts" + ], + "../../node_modules/@types/istanbul-lib-report/index.d.ts": [ + "../../node_modules/@types/graceful-fs/index.d.ts", + "../../node_modules/@types/istanbul-lib-coverage/index.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/ts3.2/fs.d.ts", + "../../node_modules/@types/node/ts3.2/util.d.ts", + "../../node_modules/@types/node/util.d.ts" + ], + "../../node_modules/@types/istanbul-reports/index.d.ts": [ + "../../node_modules/@types/graceful-fs/index.d.ts", + "../../node_modules/@types/istanbul-lib-coverage/index.d.ts", + "../../node_modules/@types/istanbul-lib-report/index.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/ts3.2/fs.d.ts", + "../../node_modules/@types/node/ts3.2/util.d.ts", + "../../node_modules/@types/node/util.d.ts" + ], + "../../node_modules/@types/jest/index.d.ts": [ + "../../node_modules/@types/graceful-fs/index.d.ts", + "../../node_modules/@types/jest/node_modules/jest-diff/build/index.d.ts", + "../../node_modules/@types/jest/node_modules/pretty-format/build/index.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/ts3.2/fs.d.ts", + "../../node_modules/@types/node/ts3.2/util.d.ts", + "../../node_modules/@types/node/util.d.ts" + ], + "../../node_modules/@types/jest/node_modules/jest-diff/build/cleanupsemantic.d.ts": [ + "../../node_modules/@types/graceful-fs/index.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/ts3.2/fs.d.ts", + "../../node_modules/@types/node/ts3.2/util.d.ts", + "../../node_modules/@types/node/util.d.ts" + ], + "../../node_modules/@types/jest/node_modules/jest-diff/build/difflines.d.ts": [ + "../../node_modules/@types/graceful-fs/index.d.ts", + "../../node_modules/@types/jest/node_modules/jest-diff/build/cleanupsemantic.d.ts", + "../../node_modules/@types/jest/node_modules/jest-diff/build/types.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/ts3.2/fs.d.ts", + "../../node_modules/@types/node/ts3.2/util.d.ts", + "../../node_modules/@types/node/util.d.ts" + ], + "../../node_modules/@types/jest/node_modules/jest-diff/build/index.d.ts": [ + "../../node_modules/@types/graceful-fs/index.d.ts", + "../../node_modules/@types/jest/node_modules/jest-diff/build/cleanupsemantic.d.ts", + "../../node_modules/@types/jest/node_modules/jest-diff/build/difflines.d.ts", + "../../node_modules/@types/jest/node_modules/jest-diff/build/printdiffs.d.ts", + "../../node_modules/@types/jest/node_modules/jest-diff/build/types.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/ts3.2/fs.d.ts", + "../../node_modules/@types/node/ts3.2/util.d.ts", + "../../node_modules/@types/node/util.d.ts" + ], + "../../node_modules/@types/jest/node_modules/jest-diff/build/printdiffs.d.ts": [ + "../../node_modules/@types/graceful-fs/index.d.ts", + "../../node_modules/@types/jest/node_modules/jest-diff/build/cleanupsemantic.d.ts", + "../../node_modules/@types/jest/node_modules/jest-diff/build/types.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/ts3.2/fs.d.ts", + "../../node_modules/@types/node/ts3.2/util.d.ts", + "../../node_modules/@types/node/util.d.ts" + ], + "../../node_modules/@types/jest/node_modules/jest-diff/build/types.d.ts": [ + "../../node_modules/@types/graceful-fs/index.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/ts3.2/fs.d.ts", + "../../node_modules/@types/node/ts3.2/util.d.ts", + "../../node_modules/@types/node/util.d.ts" + ], + "../../node_modules/@types/jest/node_modules/pretty-format/build/index.d.ts": [ + "../../node_modules/@types/graceful-fs/index.d.ts", + "../../node_modules/@types/jest/node_modules/pretty-format/build/types.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/ts3.2/fs.d.ts", + "../../node_modules/@types/node/ts3.2/util.d.ts", + "../../node_modules/@types/node/util.d.ts" + ], + "../../node_modules/@types/jest/node_modules/pretty-format/build/types.d.ts": [ + "../../node_modules/@types/graceful-fs/index.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/ts3.2/fs.d.ts", + "../../node_modules/@types/node/ts3.2/util.d.ts", + "../../node_modules/@types/node/util.d.ts" + ], + "../../node_modules/@types/jest/ts3.2/index.d.ts": [ + "../../node_modules/@types/graceful-fs/index.d.ts", + "../../node_modules/@types/jest/index.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/ts3.2/fs.d.ts", + "../../node_modules/@types/node/ts3.2/util.d.ts", + "../../node_modules/@types/node/util.d.ts" + ], + "../../node_modules/@types/js-base64/index.d.ts": [ + "../../node_modules/@types/graceful-fs/index.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/ts3.2/fs.d.ts", + "../../node_modules/@types/node/ts3.2/util.d.ts", + "../../node_modules/@types/node/util.d.ts" + ], + "../../node_modules/@types/node/async_hooks.d.ts": [ + "../../node_modules/@types/graceful-fs/index.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/ts3.2/fs.d.ts", + "../../node_modules/@types/node/ts3.2/util.d.ts", + "../../node_modules/@types/node/util.d.ts" + ], + "../../node_modules/@types/node/base.d.ts": [ + "../../node_modules/@types/graceful-fs/index.d.ts", + "../../node_modules/@types/node/async_hooks.d.ts", + "../../node_modules/@types/node/buffer.d.ts", + "../../node_modules/@types/node/child_process.d.ts", + "../../node_modules/@types/node/cluster.d.ts", + "../../node_modules/@types/node/console.d.ts", + "../../node_modules/@types/node/constants.d.ts", + "../../node_modules/@types/node/crypto.d.ts", + "../../node_modules/@types/node/dgram.d.ts", + "../../node_modules/@types/node/dns.d.ts", + "../../node_modules/@types/node/domain.d.ts", + "../../node_modules/@types/node/events.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/fs/promises.d.ts", + "../../node_modules/@types/node/globals.d.ts", + "../../node_modules/@types/node/http.d.ts", + "../../node_modules/@types/node/http2.d.ts", + "../../node_modules/@types/node/https.d.ts", + "../../node_modules/@types/node/inspector.d.ts", + "../../node_modules/@types/node/module.d.ts", + "../../node_modules/@types/node/net.d.ts", + "../../node_modules/@types/node/os.d.ts", + "../../node_modules/@types/node/path.d.ts", + "../../node_modules/@types/node/perf_hooks.d.ts", + "../../node_modules/@types/node/process.d.ts", + "../../node_modules/@types/node/punycode.d.ts", + "../../node_modules/@types/node/querystring.d.ts", + "../../node_modules/@types/node/readline.d.ts", + "../../node_modules/@types/node/repl.d.ts", + "../../node_modules/@types/node/stream.d.ts", + "../../node_modules/@types/node/string_decoder.d.ts", + "../../node_modules/@types/node/timers.d.ts", + "../../node_modules/@types/node/tls.d.ts", + "../../node_modules/@types/node/trace_events.d.ts", + "../../node_modules/@types/node/ts3.2/fs.d.ts", + "../../node_modules/@types/node/ts3.2/util.d.ts", + "../../node_modules/@types/node/tty.d.ts", + "../../node_modules/@types/node/url.d.ts", + "../../node_modules/@types/node/util.d.ts", + "../../node_modules/@types/node/v8.d.ts", + "../../node_modules/@types/node/vm.d.ts", + "../../node_modules/@types/node/worker_threads.d.ts", + "../../node_modules/@types/node/zlib.d.ts" + ], + "../../node_modules/@types/node/buffer.d.ts": [ + "../../node_modules/@types/graceful-fs/index.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/ts3.2/fs.d.ts", + "../../node_modules/@types/node/ts3.2/util.d.ts", + "../../node_modules/@types/node/util.d.ts" + ], + "../../node_modules/@types/node/child_process.d.ts": [ + "../../node_modules/@types/graceful-fs/index.d.ts", + "../../node_modules/@types/node/events.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/net.d.ts", + "../../node_modules/@types/node/stream.d.ts", + "../../node_modules/@types/node/ts3.2/fs.d.ts", + "../../node_modules/@types/node/ts3.2/util.d.ts", + "../../node_modules/@types/node/util.d.ts" + ], + "../../node_modules/@types/node/cluster.d.ts": [ + "../../node_modules/@types/graceful-fs/index.d.ts", + "../../node_modules/@types/node/child_process.d.ts", + "../../node_modules/@types/node/events.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/net.d.ts", + "../../node_modules/@types/node/ts3.2/fs.d.ts", + "../../node_modules/@types/node/ts3.2/util.d.ts", + "../../node_modules/@types/node/util.d.ts" + ], + "../../node_modules/@types/node/console.d.ts": [ + "../../node_modules/@types/graceful-fs/index.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/ts3.2/fs.d.ts", + "../../node_modules/@types/node/ts3.2/util.d.ts", + "../../node_modules/@types/node/util.d.ts" + ], + "../../node_modules/@types/node/constants.d.ts": [ + "../../node_modules/@types/graceful-fs/index.d.ts", + "../../node_modules/@types/node/crypto.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/os.d.ts", + "../../node_modules/@types/node/ts3.2/fs.d.ts", + "../../node_modules/@types/node/ts3.2/util.d.ts", + "../../node_modules/@types/node/util.d.ts" + ], + "../../node_modules/@types/node/crypto.d.ts": [ + "../../node_modules/@types/graceful-fs/index.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/stream.d.ts", + "../../node_modules/@types/node/ts3.2/fs.d.ts", + "../../node_modules/@types/node/ts3.2/util.d.ts", + "../../node_modules/@types/node/util.d.ts" + ], + "../../node_modules/@types/node/dgram.d.ts": [ + "../../node_modules/@types/graceful-fs/index.d.ts", + "../../node_modules/@types/node/dns.d.ts", + "../../node_modules/@types/node/events.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/net.d.ts", + "../../node_modules/@types/node/ts3.2/fs.d.ts", + "../../node_modules/@types/node/ts3.2/util.d.ts", + "../../node_modules/@types/node/util.d.ts" + ], + "../../node_modules/@types/node/dns.d.ts": [ + "../../node_modules/@types/graceful-fs/index.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/ts3.2/fs.d.ts", + "../../node_modules/@types/node/ts3.2/util.d.ts", + "../../node_modules/@types/node/util.d.ts" + ], + "../../node_modules/@types/node/domain.d.ts": [ + "../../node_modules/@types/graceful-fs/index.d.ts", + "../../node_modules/@types/node/events.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/ts3.2/fs.d.ts", + "../../node_modules/@types/node/ts3.2/util.d.ts", + "../../node_modules/@types/node/util.d.ts" + ], + "../../node_modules/@types/node/events.d.ts": [ + "../../node_modules/@types/graceful-fs/index.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/ts3.2/fs.d.ts", + "../../node_modules/@types/node/ts3.2/util.d.ts", + "../../node_modules/@types/node/util.d.ts" + ], + "../../node_modules/@types/node/fs.d.ts": [ + "../../node_modules/@types/graceful-fs/index.d.ts", + "../../node_modules/@types/node/events.d.ts", + "../../node_modules/@types/node/fs/promises.d.ts", + "../../node_modules/@types/node/stream.d.ts", + "../../node_modules/@types/node/ts3.2/fs.d.ts", + "../../node_modules/@types/node/ts3.2/util.d.ts", + "../../node_modules/@types/node/url.d.ts", + "../../node_modules/@types/node/util.d.ts" + ], + "../../node_modules/@types/node/fs/promises.d.ts": [ + "../../node_modules/@types/graceful-fs/index.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/ts3.2/fs.d.ts", + "../../node_modules/@types/node/ts3.2/util.d.ts", + "../../node_modules/@types/node/util.d.ts" + ], + "../../node_modules/@types/node/globals.d.ts": [ + "../../node_modules/@types/graceful-fs/index.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/ts3.2/fs.d.ts", + "../../node_modules/@types/node/ts3.2/util.d.ts", + "../../node_modules/@types/node/util.d.ts" + ], + "../../node_modules/@types/node/http.d.ts": [ + "../../node_modules/@types/graceful-fs/index.d.ts", + "../../node_modules/@types/node/events.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/net.d.ts", + "../../node_modules/@types/node/stream.d.ts", + "../../node_modules/@types/node/ts3.2/fs.d.ts", + "../../node_modules/@types/node/ts3.2/util.d.ts", + "../../node_modules/@types/node/url.d.ts", + "../../node_modules/@types/node/util.d.ts" + ], + "../../node_modules/@types/node/http2.d.ts": [ + "../../node_modules/@types/graceful-fs/index.d.ts", + "../../node_modules/@types/node/events.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/http.d.ts", + "../../node_modules/@types/node/net.d.ts", + "../../node_modules/@types/node/stream.d.ts", + "../../node_modules/@types/node/tls.d.ts", + "../../node_modules/@types/node/ts3.2/fs.d.ts", + "../../node_modules/@types/node/ts3.2/util.d.ts", + "../../node_modules/@types/node/url.d.ts", + "../../node_modules/@types/node/util.d.ts" + ], + "../../node_modules/@types/node/https.d.ts": [ + "../../node_modules/@types/graceful-fs/index.d.ts", + "../../node_modules/@types/node/events.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/http.d.ts", + "../../node_modules/@types/node/tls.d.ts", + "../../node_modules/@types/node/ts3.2/fs.d.ts", + "../../node_modules/@types/node/ts3.2/util.d.ts", + "../../node_modules/@types/node/url.d.ts", + "../../node_modules/@types/node/util.d.ts" + ], + "../../node_modules/@types/node/inspector.d.ts": [ + "../../node_modules/@types/graceful-fs/index.d.ts", + "../../node_modules/@types/node/events.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/ts3.2/fs.d.ts", + "../../node_modules/@types/node/ts3.2/util.d.ts", + "../../node_modules/@types/node/util.d.ts" + ], + "../../node_modules/@types/node/module.d.ts": [ + "../../node_modules/@types/graceful-fs/index.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/ts3.2/fs.d.ts", + "../../node_modules/@types/node/ts3.2/util.d.ts", + "../../node_modules/@types/node/url.d.ts", + "../../node_modules/@types/node/util.d.ts" + ], + "../../node_modules/@types/node/net.d.ts": [ + "../../node_modules/@types/graceful-fs/index.d.ts", + "../../node_modules/@types/node/dns.d.ts", + "../../node_modules/@types/node/events.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/stream.d.ts", + "../../node_modules/@types/node/ts3.2/fs.d.ts", + "../../node_modules/@types/node/ts3.2/util.d.ts", + "../../node_modules/@types/node/util.d.ts" + ], + "../../node_modules/@types/node/os.d.ts": [ + "../../node_modules/@types/graceful-fs/index.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/ts3.2/fs.d.ts", + "../../node_modules/@types/node/ts3.2/util.d.ts", + "../../node_modules/@types/node/util.d.ts" + ], + "../../node_modules/@types/node/path.d.ts": [ + "../../node_modules/@types/graceful-fs/index.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/ts3.2/fs.d.ts", + "../../node_modules/@types/node/ts3.2/util.d.ts", + "../../node_modules/@types/node/util.d.ts" + ], + "../../node_modules/@types/node/perf_hooks.d.ts": [ + "../../node_modules/@types/graceful-fs/index.d.ts", + "../../node_modules/@types/node/async_hooks.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/ts3.2/fs.d.ts", + "../../node_modules/@types/node/ts3.2/util.d.ts", + "../../node_modules/@types/node/util.d.ts" + ], + "../../node_modules/@types/node/process.d.ts": [ + "../../node_modules/@types/graceful-fs/index.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/ts3.2/fs.d.ts", + "../../node_modules/@types/node/ts3.2/util.d.ts", + "../../node_modules/@types/node/tty.d.ts", + "../../node_modules/@types/node/util.d.ts" + ], + "../../node_modules/@types/node/punycode.d.ts": [ + "../../node_modules/@types/graceful-fs/index.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/ts3.2/fs.d.ts", + "../../node_modules/@types/node/ts3.2/util.d.ts", + "../../node_modules/@types/node/util.d.ts" + ], + "../../node_modules/@types/node/querystring.d.ts": [ + "../../node_modules/@types/graceful-fs/index.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/ts3.2/fs.d.ts", + "../../node_modules/@types/node/ts3.2/util.d.ts", + "../../node_modules/@types/node/util.d.ts" + ], + "../../node_modules/@types/node/readline.d.ts": [ + "../../node_modules/@types/graceful-fs/index.d.ts", + "../../node_modules/@types/node/events.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/stream.d.ts", + "../../node_modules/@types/node/ts3.2/fs.d.ts", + "../../node_modules/@types/node/ts3.2/util.d.ts", + "../../node_modules/@types/node/util.d.ts" + ], + "../../node_modules/@types/node/repl.d.ts": [ + "../../node_modules/@types/graceful-fs/index.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/readline.d.ts", + "../../node_modules/@types/node/ts3.2/fs.d.ts", + "../../node_modules/@types/node/ts3.2/util.d.ts", + "../../node_modules/@types/node/util.d.ts", + "../../node_modules/@types/node/vm.d.ts" + ], + "../../node_modules/@types/node/stream.d.ts": [ + "../../node_modules/@types/graceful-fs/index.d.ts", + "../../node_modules/@types/node/events.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/ts3.2/fs.d.ts", + "../../node_modules/@types/node/ts3.2/util.d.ts", + "../../node_modules/@types/node/util.d.ts" + ], + "../../node_modules/@types/node/string_decoder.d.ts": [ + "../../node_modules/@types/graceful-fs/index.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/ts3.2/fs.d.ts", + "../../node_modules/@types/node/ts3.2/util.d.ts", + "../../node_modules/@types/node/util.d.ts" + ], + "../../node_modules/@types/node/timers.d.ts": [ + "../../node_modules/@types/graceful-fs/index.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/ts3.2/fs.d.ts", + "../../node_modules/@types/node/ts3.2/util.d.ts", + "../../node_modules/@types/node/util.d.ts" + ], + "../../node_modules/@types/node/tls.d.ts": [ + "../../node_modules/@types/graceful-fs/index.d.ts", + "../../node_modules/@types/node/crypto.d.ts", + "../../node_modules/@types/node/dns.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/net.d.ts", + "../../node_modules/@types/node/stream.d.ts", + "../../node_modules/@types/node/ts3.2/fs.d.ts", + "../../node_modules/@types/node/ts3.2/util.d.ts", + "../../node_modules/@types/node/util.d.ts" + ], + "../../node_modules/@types/node/trace_events.d.ts": [ + "../../node_modules/@types/graceful-fs/index.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/ts3.2/fs.d.ts", + "../../node_modules/@types/node/ts3.2/util.d.ts", + "../../node_modules/@types/node/util.d.ts" + ], + "../../node_modules/@types/node/ts3.2/base.d.ts": [ + "../../node_modules/@types/graceful-fs/index.d.ts", + "../../node_modules/@types/node/base.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/ts3.2/fs.d.ts", + "../../node_modules/@types/node/ts3.2/globals.d.ts", + "../../node_modules/@types/node/ts3.2/util.d.ts", + "../../node_modules/@types/node/util.d.ts" + ], + "../../node_modules/@types/node/ts3.2/fs.d.ts": [ + "../../node_modules/@types/graceful-fs/index.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/ts3.2/util.d.ts", + "../../node_modules/@types/node/util.d.ts" + ], + "../../node_modules/@types/node/ts3.2/globals.d.ts": [ + "../../node_modules/@types/graceful-fs/index.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/globals.d.ts", + "../../node_modules/@types/node/ts3.2/fs.d.ts", + "../../node_modules/@types/node/ts3.2/util.d.ts", + "../../node_modules/@types/node/util.d.ts" + ], + "../../node_modules/@types/node/ts3.2/util.d.ts": [ + "../../node_modules/@types/graceful-fs/index.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/ts3.2/fs.d.ts", + "../../node_modules/@types/node/util.d.ts" + ], + "../../node_modules/@types/node/ts3.5/base.d.ts": [ + "../../node_modules/@types/graceful-fs/index.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/ts3.2/base.d.ts", + "../../node_modules/@types/node/ts3.2/fs.d.ts", + "../../node_modules/@types/node/ts3.2/util.d.ts", + "../../node_modules/@types/node/ts3.5/globals.global.d.ts", + "../../node_modules/@types/node/ts3.5/wasi.d.ts", + "../../node_modules/@types/node/util.d.ts" + ], + "../../node_modules/@types/node/ts3.5/globals.global.d.ts": [ + "../../node_modules/@types/graceful-fs/index.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/ts3.2/fs.d.ts", + "../../node_modules/@types/node/ts3.2/util.d.ts", + "../../node_modules/@types/node/util.d.ts" + ], + "../../node_modules/@types/node/ts3.5/wasi.d.ts": [ + "../../node_modules/@types/graceful-fs/index.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/ts3.2/fs.d.ts", + "../../node_modules/@types/node/ts3.2/util.d.ts", + "../../node_modules/@types/node/util.d.ts" + ], + "../../node_modules/@types/node/ts3.7/assert.d.ts": [ + "../../node_modules/@types/graceful-fs/index.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/ts3.2/fs.d.ts", + "../../node_modules/@types/node/ts3.2/util.d.ts", + "../../node_modules/@types/node/util.d.ts" + ], + "../../node_modules/@types/node/ts3.7/base.d.ts": [ + "../../node_modules/@types/graceful-fs/index.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/ts3.2/fs.d.ts", + "../../node_modules/@types/node/ts3.2/util.d.ts", + "../../node_modules/@types/node/ts3.5/base.d.ts", + "../../node_modules/@types/node/ts3.7/assert.d.ts", + "../../node_modules/@types/node/util.d.ts" + ], + "../../node_modules/@types/node/ts3.7/index.d.ts": [ + "../../node_modules/@types/graceful-fs/index.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/ts3.2/fs.d.ts", + "../../node_modules/@types/node/ts3.2/util.d.ts", + "../../node_modules/@types/node/ts3.7/base.d.ts", + "../../node_modules/@types/node/util.d.ts" + ], + "../../node_modules/@types/node/tty.d.ts": [ + "../../node_modules/@types/graceful-fs/index.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/net.d.ts", + "../../node_modules/@types/node/ts3.2/fs.d.ts", + "../../node_modules/@types/node/ts3.2/util.d.ts", + "../../node_modules/@types/node/util.d.ts" + ], + "../../node_modules/@types/node/url.d.ts": [ + "../../node_modules/@types/graceful-fs/index.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/querystring.d.ts", + "../../node_modules/@types/node/ts3.2/fs.d.ts", + "../../node_modules/@types/node/ts3.2/util.d.ts", + "../../node_modules/@types/node/util.d.ts" + ], + "../../node_modules/@types/node/util.d.ts": [ + "../../node_modules/@types/graceful-fs/index.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/ts3.2/fs.d.ts", + "../../node_modules/@types/node/ts3.2/util.d.ts" + ], + "../../node_modules/@types/node/v8.d.ts": [ + "../../node_modules/@types/graceful-fs/index.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/stream.d.ts", + "../../node_modules/@types/node/ts3.2/fs.d.ts", + "../../node_modules/@types/node/ts3.2/util.d.ts", + "../../node_modules/@types/node/util.d.ts" + ], + "../../node_modules/@types/node/vm.d.ts": [ + "../../node_modules/@types/graceful-fs/index.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/ts3.2/fs.d.ts", + "../../node_modules/@types/node/ts3.2/util.d.ts", + "../../node_modules/@types/node/util.d.ts" + ], + "../../node_modules/@types/node/worker_threads.d.ts": [ + "../../node_modules/@types/graceful-fs/index.d.ts", + "../../node_modules/@types/node/events.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/stream.d.ts", + "../../node_modules/@types/node/ts3.2/fs.d.ts", + "../../node_modules/@types/node/ts3.2/util.d.ts", + "../../node_modules/@types/node/url.d.ts", + "../../node_modules/@types/node/util.d.ts", + "../../node_modules/@types/node/vm.d.ts" + ], + "../../node_modules/@types/node/zlib.d.ts": [ + "../../node_modules/@types/graceful-fs/index.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/stream.d.ts", + "../../node_modules/@types/node/ts3.2/fs.d.ts", + "../../node_modules/@types/node/ts3.2/util.d.ts", + "../../node_modules/@types/node/util.d.ts" + ], + "../../node_modules/@types/normalize-package-data/index.d.ts": [ + "../../node_modules/@types/graceful-fs/index.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/ts3.2/fs.d.ts", + "../../node_modules/@types/node/ts3.2/util.d.ts", + "../../node_modules/@types/node/util.d.ts" + ], + "../../node_modules/@types/prettier/index.d.ts": [ + "../../node_modules/@types/graceful-fs/index.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/ts3.2/fs.d.ts", + "../../node_modules/@types/node/ts3.2/util.d.ts", + "../../node_modules/@types/node/util.d.ts" + ], + "../../node_modules/@types/stack-utils/index.d.ts": [ + "../../node_modules/@types/graceful-fs/index.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/ts3.2/fs.d.ts", + "../../node_modules/@types/node/ts3.2/util.d.ts", + "../../node_modules/@types/node/util.d.ts" + ], + "../../node_modules/@types/yargs-parser/index.d.ts": [ + "../../node_modules/@types/graceful-fs/index.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/ts3.2/fs.d.ts", + "../../node_modules/@types/node/ts3.2/util.d.ts", + "../../node_modules/@types/node/util.d.ts" + ], + "../../node_modules/@types/yargs/index.d.ts": [ + "../../node_modules/@types/graceful-fs/index.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/ts3.2/fs.d.ts", + "../../node_modules/@types/node/ts3.2/util.d.ts", + "../../node_modules/@types/node/util.d.ts", + "../../node_modules/@types/yargs-parser/index.d.ts" + ], + "../../node_modules/base-x/src/index.d.ts": [ + "../../node_modules/@types/graceful-fs/index.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/ts3.2/fs.d.ts", + "../../node_modules/@types/node/ts3.2/util.d.ts", + "../../node_modules/@types/node/ts3.7/index.d.ts", + "../../node_modules/@types/node/util.d.ts" + ], + "../../node_modules/typescript/lib/lib.es2015.collection.d.ts": [ + "../../node_modules/@types/graceful-fs/index.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/ts3.2/fs.d.ts", + "../../node_modules/@types/node/ts3.2/util.d.ts", + "../../node_modules/@types/node/util.d.ts" + ], + "../../node_modules/typescript/lib/lib.es2015.core.d.ts": [ + "../../node_modules/@types/graceful-fs/index.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/ts3.2/fs.d.ts", + "../../node_modules/@types/node/ts3.2/util.d.ts", + "../../node_modules/@types/node/util.d.ts" + ], + "../../node_modules/typescript/lib/lib.es2015.d.ts": [ + "../../node_modules/@types/graceful-fs/index.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/ts3.2/fs.d.ts", + "../../node_modules/@types/node/ts3.2/util.d.ts", + "../../node_modules/@types/node/util.d.ts" + ], + "../../node_modules/typescript/lib/lib.es2015.generator.d.ts": [ + "../../node_modules/@types/graceful-fs/index.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/ts3.2/fs.d.ts", + "../../node_modules/@types/node/ts3.2/util.d.ts", + "../../node_modules/@types/node/util.d.ts" + ], + "../../node_modules/typescript/lib/lib.es2015.iterable.d.ts": [ + "../../node_modules/@types/graceful-fs/index.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/ts3.2/fs.d.ts", + "../../node_modules/@types/node/ts3.2/util.d.ts", + "../../node_modules/@types/node/util.d.ts" + ], + "../../node_modules/typescript/lib/lib.es2015.promise.d.ts": [ + "../../node_modules/@types/graceful-fs/index.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/ts3.2/fs.d.ts", + "../../node_modules/@types/node/ts3.2/util.d.ts", + "../../node_modules/@types/node/util.d.ts" + ], + "../../node_modules/typescript/lib/lib.es2015.proxy.d.ts": [ + "../../node_modules/@types/graceful-fs/index.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/ts3.2/fs.d.ts", + "../../node_modules/@types/node/ts3.2/util.d.ts", + "../../node_modules/@types/node/util.d.ts" + ], + "../../node_modules/typescript/lib/lib.es2015.reflect.d.ts": [ + "../../node_modules/@types/graceful-fs/index.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/ts3.2/fs.d.ts", + "../../node_modules/@types/node/ts3.2/util.d.ts", + "../../node_modules/@types/node/util.d.ts" + ], + "../../node_modules/typescript/lib/lib.es2015.symbol.d.ts": [ + "../../node_modules/@types/graceful-fs/index.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/ts3.2/fs.d.ts", + "../../node_modules/@types/node/ts3.2/util.d.ts", + "../../node_modules/@types/node/util.d.ts" + ], + "../../node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts": [ + "../../node_modules/@types/graceful-fs/index.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/ts3.2/fs.d.ts", + "../../node_modules/@types/node/ts3.2/util.d.ts", + "../../node_modules/@types/node/util.d.ts" + ], + "../../node_modules/typescript/lib/lib.es2016.array.include.d.ts": [ + "../../node_modules/@types/graceful-fs/index.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/ts3.2/fs.d.ts", + "../../node_modules/@types/node/ts3.2/util.d.ts", + "../../node_modules/@types/node/util.d.ts" + ], + "../../node_modules/typescript/lib/lib.es2016.d.ts": [ + "../../node_modules/@types/graceful-fs/index.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/ts3.2/fs.d.ts", + "../../node_modules/@types/node/ts3.2/util.d.ts", + "../../node_modules/@types/node/util.d.ts" + ], + "../../node_modules/typescript/lib/lib.es2017.d.ts": [ + "../../node_modules/@types/graceful-fs/index.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/ts3.2/fs.d.ts", + "../../node_modules/@types/node/ts3.2/util.d.ts", + "../../node_modules/@types/node/util.d.ts" + ], + "../../node_modules/typescript/lib/lib.es2017.intl.d.ts": [ + "../../node_modules/@types/graceful-fs/index.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/ts3.2/fs.d.ts", + "../../node_modules/@types/node/ts3.2/util.d.ts", + "../../node_modules/@types/node/util.d.ts" + ], + "../../node_modules/typescript/lib/lib.es2017.object.d.ts": [ + "../../node_modules/@types/graceful-fs/index.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/ts3.2/fs.d.ts", + "../../node_modules/@types/node/ts3.2/util.d.ts", + "../../node_modules/@types/node/util.d.ts" + ], + "../../node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts": [ + "../../node_modules/@types/graceful-fs/index.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/ts3.2/fs.d.ts", + "../../node_modules/@types/node/ts3.2/util.d.ts", + "../../node_modules/@types/node/util.d.ts" + ], + "../../node_modules/typescript/lib/lib.es2017.string.d.ts": [ + "../../node_modules/@types/graceful-fs/index.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/ts3.2/fs.d.ts", + "../../node_modules/@types/node/ts3.2/util.d.ts", + "../../node_modules/@types/node/util.d.ts" + ], + "../../node_modules/typescript/lib/lib.es2017.typedarrays.d.ts": [ + "../../node_modules/@types/graceful-fs/index.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/ts3.2/fs.d.ts", + "../../node_modules/@types/node/ts3.2/util.d.ts", + "../../node_modules/@types/node/util.d.ts" + ], + "../../node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts": [ + "../../node_modules/@types/graceful-fs/index.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/ts3.2/fs.d.ts", + "../../node_modules/@types/node/ts3.2/util.d.ts", + "../../node_modules/@types/node/util.d.ts" + ], + "../../node_modules/typescript/lib/lib.es2018.asynciterable.d.ts": [ + "../../node_modules/@types/graceful-fs/index.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/ts3.2/fs.d.ts", + "../../node_modules/@types/node/ts3.2/util.d.ts", + "../../node_modules/@types/node/util.d.ts" + ], + "../../node_modules/typescript/lib/lib.es2018.d.ts": [ + "../../node_modules/@types/graceful-fs/index.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/ts3.2/fs.d.ts", + "../../node_modules/@types/node/ts3.2/util.d.ts", + "../../node_modules/@types/node/util.d.ts" + ], + "../../node_modules/typescript/lib/lib.es2018.intl.d.ts": [ + "../../node_modules/@types/graceful-fs/index.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/ts3.2/fs.d.ts", + "../../node_modules/@types/node/ts3.2/util.d.ts", + "../../node_modules/@types/node/util.d.ts" + ], + "../../node_modules/typescript/lib/lib.es2018.promise.d.ts": [ + "../../node_modules/@types/graceful-fs/index.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/ts3.2/fs.d.ts", + "../../node_modules/@types/node/ts3.2/util.d.ts", + "../../node_modules/@types/node/util.d.ts" + ], + "../../node_modules/typescript/lib/lib.es2018.regexp.d.ts": [ + "../../node_modules/@types/graceful-fs/index.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/ts3.2/fs.d.ts", + "../../node_modules/@types/node/ts3.2/util.d.ts", + "../../node_modules/@types/node/util.d.ts" + ], + "../../node_modules/typescript/lib/lib.es2019.array.d.ts": [ + "../../node_modules/@types/graceful-fs/index.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/ts3.2/fs.d.ts", + "../../node_modules/@types/node/ts3.2/util.d.ts", + "../../node_modules/@types/node/util.d.ts" + ], + "../../node_modules/typescript/lib/lib.es2019.d.ts": [ + "../../node_modules/@types/graceful-fs/index.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/ts3.2/fs.d.ts", + "../../node_modules/@types/node/ts3.2/util.d.ts", + "../../node_modules/@types/node/util.d.ts" + ], + "../../node_modules/typescript/lib/lib.es2019.object.d.ts": [ + "../../node_modules/@types/graceful-fs/index.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/ts3.2/fs.d.ts", + "../../node_modules/@types/node/ts3.2/util.d.ts", + "../../node_modules/@types/node/util.d.ts" + ], + "../../node_modules/typescript/lib/lib.es2019.string.d.ts": [ + "../../node_modules/@types/graceful-fs/index.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/ts3.2/fs.d.ts", + "../../node_modules/@types/node/ts3.2/util.d.ts", + "../../node_modules/@types/node/util.d.ts" + ], + "../../node_modules/typescript/lib/lib.es2019.symbol.d.ts": [ + "../../node_modules/@types/graceful-fs/index.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/ts3.2/fs.d.ts", + "../../node_modules/@types/node/ts3.2/util.d.ts", + "../../node_modules/@types/node/util.d.ts" + ], + "../../node_modules/typescript/lib/lib.es2020.bigint.d.ts": [ + "../../node_modules/@types/graceful-fs/index.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/ts3.2/fs.d.ts", + "../../node_modules/@types/node/ts3.2/util.d.ts", + "../../node_modules/@types/node/util.d.ts" + ], + "../../node_modules/typescript/lib/lib.es2020.d.ts": [ + "../../node_modules/@types/graceful-fs/index.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/ts3.2/fs.d.ts", + "../../node_modules/@types/node/ts3.2/util.d.ts", + "../../node_modules/@types/node/util.d.ts" + ], + "../../node_modules/typescript/lib/lib.es2020.promise.d.ts": [ + "../../node_modules/@types/graceful-fs/index.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/ts3.2/fs.d.ts", + "../../node_modules/@types/node/ts3.2/util.d.ts", + "../../node_modules/@types/node/util.d.ts" + ], + "../../node_modules/typescript/lib/lib.es2020.string.d.ts": [ + "../../node_modules/@types/graceful-fs/index.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/ts3.2/fs.d.ts", + "../../node_modules/@types/node/ts3.2/util.d.ts", + "../../node_modules/@types/node/util.d.ts" + ], + "../../node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts": [ + "../../node_modules/@types/graceful-fs/index.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/ts3.2/fs.d.ts", + "../../node_modules/@types/node/ts3.2/util.d.ts", + "../../node_modules/@types/node/util.d.ts" + ], + "../../node_modules/typescript/lib/lib.es5.d.ts": [ + "../../node_modules/@types/graceful-fs/index.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/ts3.2/fs.d.ts", + "../../node_modules/@types/node/ts3.2/util.d.ts", + "../../node_modules/@types/node/util.d.ts" + ], + "../../node_modules/typescript/lib/lib.esnext.d.ts": [ + "../../node_modules/@types/graceful-fs/index.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/ts3.2/fs.d.ts", + "../../node_modules/@types/node/ts3.2/util.d.ts", + "../../node_modules/@types/node/util.d.ts" + ], + "../../node_modules/typescript/lib/lib.esnext.intl.d.ts": [ + "../../node_modules/@types/graceful-fs/index.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/ts3.2/fs.d.ts", + "../../node_modules/@types/node/ts3.2/util.d.ts", + "../../node_modules/@types/node/util.d.ts" + ], + "../../node_modules/typescript/lib/lib.esnext.promise.d.ts": [ + "../../node_modules/@types/graceful-fs/index.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/ts3.2/fs.d.ts", + "../../node_modules/@types/node/ts3.2/util.d.ts", + "../../node_modules/@types/node/util.d.ts" + ], + "../../node_modules/typescript/lib/lib.esnext.string.d.ts": [ + "../../node_modules/@types/graceful-fs/index.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/ts3.2/fs.d.ts", + "../../node_modules/@types/node/ts3.2/util.d.ts", + "../../node_modules/@types/node/util.d.ts" + ], + "../src/index.ts": [ + "../src/context.ts", + "../src/runtime.ts", + "../src/utils.ts" + ], + "../src/runtime.ts": [ + "../src/context.ts", + "../src/types.ts" + ], + "../src/utils.ts": [ + "../src/types.ts" + ] + }, + "semanticDiagnosticsPerFile": [ + "../../node_modules/@babel/parser/typings/babel-parser.d.ts", + "../../node_modules/@babel/types/lib/index.d.ts", + "../../node_modules/@types/babel__core/index.d.ts", + "../../node_modules/@types/babel__generator/index.d.ts", + "../../node_modules/@types/babel__template/index.d.ts", + "../../node_modules/@types/babel__traverse/index.d.ts", + "../../node_modules/@types/bn.js/index.d.ts", + "../../node_modules/@types/bs58/index.d.ts", + "../../node_modules/@types/chance/index.d.ts", + "../../node_modules/@types/color-name/index.d.ts", + "../../node_modules/@types/graceful-fs/index.d.ts", + "../../node_modules/@types/istanbul-lib-coverage/index.d.ts", + "../../node_modules/@types/istanbul-lib-report/index.d.ts", + "../../node_modules/@types/istanbul-reports/index.d.ts", + "../../node_modules/@types/jest/index.d.ts", + "../../node_modules/@types/jest/node_modules/jest-diff/build/cleanupsemantic.d.ts", + "../../node_modules/@types/jest/node_modules/jest-diff/build/difflines.d.ts", + "../../node_modules/@types/jest/node_modules/jest-diff/build/index.d.ts", + "../../node_modules/@types/jest/node_modules/jest-diff/build/printdiffs.d.ts", + "../../node_modules/@types/jest/node_modules/jest-diff/build/types.d.ts", + "../../node_modules/@types/jest/node_modules/pretty-format/build/index.d.ts", + "../../node_modules/@types/jest/node_modules/pretty-format/build/types.d.ts", + "../../node_modules/@types/jest/ts3.2/index.d.ts", + "../../node_modules/@types/js-base64/index.d.ts", + "../../node_modules/@types/node/async_hooks.d.ts", + "../../node_modules/@types/node/base.d.ts", + "../../node_modules/@types/node/buffer.d.ts", + "../../node_modules/@types/node/child_process.d.ts", + "../../node_modules/@types/node/cluster.d.ts", + "../../node_modules/@types/node/console.d.ts", + "../../node_modules/@types/node/constants.d.ts", + "../../node_modules/@types/node/crypto.d.ts", + "../../node_modules/@types/node/dgram.d.ts", + "../../node_modules/@types/node/dns.d.ts", + "../../node_modules/@types/node/domain.d.ts", + "../../node_modules/@types/node/events.d.ts", + "../../node_modules/@types/node/fs.d.ts", + "../../node_modules/@types/node/fs/promises.d.ts", + "../../node_modules/@types/node/globals.d.ts", + "../../node_modules/@types/node/http.d.ts", + "../../node_modules/@types/node/http2.d.ts", + "../../node_modules/@types/node/https.d.ts", + "../../node_modules/@types/node/inspector.d.ts", + "../../node_modules/@types/node/module.d.ts", + "../../node_modules/@types/node/net.d.ts", + "../../node_modules/@types/node/os.d.ts", + "../../node_modules/@types/node/path.d.ts", + "../../node_modules/@types/node/perf_hooks.d.ts", + "../../node_modules/@types/node/process.d.ts", + "../../node_modules/@types/node/punycode.d.ts", + "../../node_modules/@types/node/querystring.d.ts", + "../../node_modules/@types/node/readline.d.ts", + "../../node_modules/@types/node/repl.d.ts", + "../../node_modules/@types/node/stream.d.ts", + "../../node_modules/@types/node/string_decoder.d.ts", + "../../node_modules/@types/node/timers.d.ts", + "../../node_modules/@types/node/tls.d.ts", + "../../node_modules/@types/node/trace_events.d.ts", + "../../node_modules/@types/node/ts3.2/base.d.ts", + "../../node_modules/@types/node/ts3.2/fs.d.ts", + "../../node_modules/@types/node/ts3.2/globals.d.ts", + "../../node_modules/@types/node/ts3.2/util.d.ts", + "../../node_modules/@types/node/ts3.5/base.d.ts", + "../../node_modules/@types/node/ts3.5/globals.global.d.ts", + "../../node_modules/@types/node/ts3.5/wasi.d.ts", + "../../node_modules/@types/node/ts3.7/assert.d.ts", + "../../node_modules/@types/node/ts3.7/base.d.ts", + "../../node_modules/@types/node/ts3.7/index.d.ts", + "../../node_modules/@types/node/tty.d.ts", + "../../node_modules/@types/node/url.d.ts", + "../../node_modules/@types/node/util.d.ts", + "../../node_modules/@types/node/v8.d.ts", + "../../node_modules/@types/node/vm.d.ts", + "../../node_modules/@types/node/worker_threads.d.ts", + "../../node_modules/@types/node/zlib.d.ts", + "../../node_modules/@types/normalize-package-data/index.d.ts", + "../../node_modules/@types/prettier/index.d.ts", + "../../node_modules/@types/stack-utils/index.d.ts", + "../../node_modules/@types/yargs-parser/index.d.ts", + "../../node_modules/@types/yargs/index.d.ts", + "../../node_modules/base-x/src/index.d.ts", + "../../node_modules/typescript/lib/lib.es2015.collection.d.ts", + "../../node_modules/typescript/lib/lib.es2015.core.d.ts", + "../../node_modules/typescript/lib/lib.es2015.d.ts", + "../../node_modules/typescript/lib/lib.es2015.generator.d.ts", + "../../node_modules/typescript/lib/lib.es2015.iterable.d.ts", + "../../node_modules/typescript/lib/lib.es2015.promise.d.ts", + "../../node_modules/typescript/lib/lib.es2015.proxy.d.ts", + "../../node_modules/typescript/lib/lib.es2015.reflect.d.ts", + "../../node_modules/typescript/lib/lib.es2015.symbol.d.ts", + "../../node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts", + "../../node_modules/typescript/lib/lib.es2016.array.include.d.ts", + "../../node_modules/typescript/lib/lib.es2016.d.ts", + "../../node_modules/typescript/lib/lib.es2017.d.ts", + "../../node_modules/typescript/lib/lib.es2017.intl.d.ts", + "../../node_modules/typescript/lib/lib.es2017.object.d.ts", + "../../node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts", + "../../node_modules/typescript/lib/lib.es2017.string.d.ts", + "../../node_modules/typescript/lib/lib.es2017.typedarrays.d.ts", + "../../node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts", + "../../node_modules/typescript/lib/lib.es2018.asynciterable.d.ts", + "../../node_modules/typescript/lib/lib.es2018.d.ts", + "../../node_modules/typescript/lib/lib.es2018.intl.d.ts", + "../../node_modules/typescript/lib/lib.es2018.promise.d.ts", + "../../node_modules/typescript/lib/lib.es2018.regexp.d.ts", + "../../node_modules/typescript/lib/lib.es2019.array.d.ts", + "../../node_modules/typescript/lib/lib.es2019.d.ts", + "../../node_modules/typescript/lib/lib.es2019.object.d.ts", + "../../node_modules/typescript/lib/lib.es2019.string.d.ts", + "../../node_modules/typescript/lib/lib.es2019.symbol.d.ts", + "../../node_modules/typescript/lib/lib.es2020.bigint.d.ts", + "../../node_modules/typescript/lib/lib.es2020.d.ts", + "../../node_modules/typescript/lib/lib.es2020.promise.d.ts", + "../../node_modules/typescript/lib/lib.es2020.string.d.ts", + "../../node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts", + "../../node_modules/typescript/lib/lib.es5.d.ts", + "../../node_modules/typescript/lib/lib.esnext.d.ts", + "../../node_modules/typescript/lib/lib.esnext.intl.d.ts", + "../../node_modules/typescript/lib/lib.esnext.promise.d.ts", + "../../node_modules/typescript/lib/lib.esnext.string.d.ts", + "../src/bin.ts", + "../src/context.ts", + "../src/index.ts", + "../src/runtime.ts", + "../src/types.ts", + "../src/utils.ts" + ] + }, + "version": "3.9.3" +} \ No newline at end of file diff --git a/runtime/tsconfig.json b/runtime/tsconfig.json index b4ec83d8..3c01c4cb 100644 --- a/runtime/tsconfig.json +++ b/runtime/tsconfig.json @@ -57,8 +57,8 @@ // "inlineSources": true, /* Emit the source alongside the sourcemaps within a single file; requires '--inlineSourceMap' or '--sourceMap' to be set. */ /* Experimental Options */ - // "experimentalDecorators": true, /* Enables experimental support for ES7 decorators. */ - // "emitDecoratorMetadata": true, /* Enables experimental support for emitting type metadata for decorators. */ + "experimentalDecorators": true, /* Enables experimental support for ES7 decorators. */ + "emitDecoratorMetadata": true, /* Enables experimental support for emitting type metadata for decorators. */ /* Advanced Options */ "forceConsistentCasingInFileNames": true /* Disallow inconsistently-cased references to the same file. */ diff --git a/yarn.lock b/yarn.lock index aa8b84d2..2e2da2cb 100644 --- a/yarn.lock +++ b/yarn.lock @@ -578,6 +578,11 @@ dependencies: base-x "^3.0.6" +"@types/chance@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@types/chance/-/chance-1.1.0.tgz#7d8e6bd0506344d94c042f692d59d20f8eb7d66d" + integrity sha512-j/9aaLU6JaaN2iFiSZgvD+G0nju1Fi2/f2WM+WwS+8+cpTdzFhXFH3+SHZgfjgum6wNW80sfcawUx+Rx7tH26w== + "@types/color-name@^1.1.1": version "1.1.1" resolved "https://registry.yarnpkg.com/@types/color-name/-/color-name-1.1.1.tgz#1c1261bbeaa10a8055bbc5d8ab84b7b2afc846a0" From d4a29b04f42aca252ff12da5c288ef2fccfccc52 Mon Sep 17 00:00:00 2001 From: Kai Aichholz Date: Thu, 11 Jun 2020 08:30:29 -0700 Subject: [PATCH 02/11] undo bad changes to testing and compiler config --- assembly/tsconfig.json | 3 --- jest.config.js | 2 +- runtime/tsconfig.json | 4 ++-- 3 files changed, 3 insertions(+), 6 deletions(-) diff --git a/assembly/tsconfig.json b/assembly/tsconfig.json index 02584b90..79d18cf3 100644 --- a/assembly/tsconfig.json +++ b/assembly/tsconfig.json @@ -8,8 +8,5 @@ "excludeProtected": true, "excludeExternals": true, "stripInternal": true - }, - "compilerOptions": { - "experimentalDecorators": true } } diff --git a/jest.config.js b/jest.config.js index 426cc066..4c521af5 100644 --- a/jest.config.js +++ b/jest.config.js @@ -2,5 +2,5 @@ module.exports = { preset: 'ts-jest', testEnvironment: 'node', testMatch: ["**/__tests__/**/*.spec.ts"], - testPathIgnorePatterns: ["/node_modules/"], + testPathIgnorePatterns: ["/assembly/", "/node_modules/"], }; diff --git a/runtime/tsconfig.json b/runtime/tsconfig.json index 3c01c4cb..b4ec83d8 100644 --- a/runtime/tsconfig.json +++ b/runtime/tsconfig.json @@ -57,8 +57,8 @@ // "inlineSources": true, /* Emit the source alongside the sourcemaps within a single file; requires '--inlineSourceMap' or '--sourceMap' to be set. */ /* Experimental Options */ - "experimentalDecorators": true, /* Enables experimental support for ES7 decorators. */ - "emitDecoratorMetadata": true, /* Enables experimental support for emitting type metadata for decorators. */ + // "experimentalDecorators": true, /* Enables experimental support for ES7 decorators. */ + // "emitDecoratorMetadata": true, /* Enables experimental support for emitting type metadata for decorators. */ /* Advanced Options */ "forceConsistentCasingInFileNames": true /* Disallow inconsistently-cased references to the same file. */ From 5e512420fad4b597fe380166f1ebea1ad804f792 Mon Sep 17 00:00:00 2001 From: Kai Aichholz Date: Thu, 11 Jun 2020 08:39:15 -0700 Subject: [PATCH 03/11] add range() alias for entries() to match rust-sdk api --- assembly/runtime/collections/avlTree.ts | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/assembly/runtime/collections/avlTree.ts b/assembly/runtime/collections/avlTree.ts index 7bcb8899..8a45b749 100644 --- a/assembly/runtime/collections/avlTree.ts +++ b/assembly/runtime/collections/avlTree.ts @@ -136,6 +136,10 @@ export class AVLTree { // TODO implement range() throw new Error("TODO implement range()"); } + //alias to match rust sdk + range(start: K, end: K): collections.MapEntry[] { + return this.entries(start, end); + } /** * Returns minimum key. From a29f94ee308a438e89c81e6bee2ad8a1ab17e975 Mon Sep 17 00:00:00 2001 From: Kai Aichholz Date: Thu, 11 Jun 2020 11:15:10 -0700 Subject: [PATCH 04/11] fix bad tests. remove rng dependency. add getSome() to AVLTree --- assembly/__tests__/runtime/avl-tree.spec.ts | 175 +++++++++++--------- assembly/runtime/collections/avlTree.ts | 18 +- yarn.lock | 5 - 3 files changed, 100 insertions(+), 98 deletions(-) diff --git a/assembly/__tests__/runtime/avl-tree.spec.ts b/assembly/__tests__/runtime/avl-tree.spec.ts index 50e52ff4..35ca2a8c 100644 --- a/assembly/__tests__/runtime/avl-tree.spec.ts +++ b/assembly/__tests__/runtime/avl-tree.spec.ts @@ -1,11 +1,5 @@ import { AVLTree } from "../../runtime"; -import { Chance } from "chance" -const rngSeed = 12345; -const rng = new Chance(rngSeed); -// const rng = { -// integer: (_: any) => 5 -// }; let tree: AVLTree; // Return height of the tree - number of nodes on the longest path starting from the root node. @@ -13,12 +7,13 @@ function height(tree: AVLTree): u32 { throw new Error("TODO implement height()"); } -function random(n: i32): Array { +function random(n: i32): u32[] { const a = new Array(n); - return a.map(_ => rng.integer({ min: 0 })); + // FIXME need rng + return a.map((_): u32 => 5); } -function range(start: T, end: T): Array { +function range(start: T, end: T): T[] { const a = new Array(); let x = start; while (x < end) { @@ -27,7 +22,7 @@ function range(start: T, end: T): Array { return a; } -function maxTreeHeight(n: f64): u64 { +function maxTreeHeight(n: f64): u32 { // From near-sdk-rs TreeMap: // h <= C * log2(n + D) + B // where: @@ -38,13 +33,33 @@ function maxTreeHeight(n: f64): u64 { const D: f64 = 1.065; const h = C * Math.log2(n + D) + B; - return Math.ceil(h) as u64; + return Math.ceil(h) as u32; } function isBalanced(tree: AVLTree): bool { throw new Error("TODO implement isBalanced()"); } +// Convenience method for tests that insert then remove some values +function insertThenRemove (t: AVLTree, keysToInsert: u32[], keysToRemove: u32[]): void { + const map = new Map(); + + for (let i = 0; i < keysToInsert.length; ++i) { + const key = keysToInsert[i]; + expect(t.has(key)).toBeFalsy("tree.has() should return false for removed key"); + t.insert(key, i); + map.set(key, i); + expect(t.getSome(key)).toStrictEqual(1); + } + + for (let i = 0; i < keysToRemove.length; ++i) { + const key = keysToRemove[i]; + expect(t.getSome(key)).toStrictEqual(map.get(key)); + t.remove(key); + expect(t.has(key)).toBeFalsy("tree.has() should return false for removed key"); + } +}; + describe("AVLTrees should handle", () => { beforeAll(() => { @@ -55,24 +70,6 @@ describe("AVLTrees should handle", () => { tree.clear(); }); - // Convenience method for tests that insert then remove some values - const insertThenRemove = (t: AVLTree, keysToInsert: u32[], keysToRemove: u32[]): void => { - const map = new Map(); - - keysToInsert.forEach((key, i) => { - expect(t.get(key)).toThrow("tree should throw if getting removed key"); - t.insert(key, i); - map.set(key, i); - expect(t.get(x)).toStrictEqual(1); - }); - - keysToRemove.forEach(key => { - expect(t.get(x)).toStrictEqual(map.get(key)); - t.remove(key); - expect(t.get(key)).toThrow("tree should throw if getting removed key"); - }); - }; - it("adds key-value pairs", () => { const key = 1; const value = 2; @@ -81,7 +78,7 @@ describe("AVLTrees should handle", () => { expect(tree.has(key)).toBeTruthy("The tree should have the key"); expect(tree.containsKey(key)).toBeTruthy("The tree should contain the key"); - expect(tree.get(key)).toStrictEqual(value); + expect(tree.getSome(key)).toStrictEqual(value); }); it("checks for non-existent keys", () => { @@ -94,20 +91,19 @@ describe("AVLTrees should handle", () => { throws("if attempting to get a non-existent key", () => { const key = 1; - tree.get(key); + tree.getSome(key); }); it("is empty", () => { const key = 42; expect(tree.size).toStrictEqual(0); expect(height(tree)).toStrictEqual(0); - expect(tree.get(key)).toThrow("get() should throw for empty tree"); expect(tree.has(key)).toBeFalsy("empty tree should not have the key"); expect(tree.containsKey(key)).toBeFalsy("empty tree should not have the key"); - expect(tree.min()).toThrow("min() should throw for empty tree"); - expect(tree.max()).toThrow("max() should throw for empty tree"); - expect(tree.lower(key)).toThrow("min() should throw for empty tree"); - expect(tree.higher(key)).toThrow("min() should throw for empty tree"); + // expect(tree.min()).toThrow("min() should throw for empty tree"); + // expect(tree.max()).toThrow("max() should throw for empty tree"); + // expect(tree.lower(key)).toThrow("min() should throw for empty tree"); + // expect(tree.higher(key)).toThrow("min() should throw for empty tree"); }); it("rotates left twice when inserting 3 keys in decreasing order", () => { @@ -149,24 +145,26 @@ describe("AVLTrees should handle", () => { const cases: u32[] = range(0, n*2); let counter = 0; - cases.forEach(k => { + for (let i = 0; i < cases.length; ++i) { + const k = cases[i]; if (k % 2 === 0) { counter += 1; tree.insert(k, counter); } - }); + } counter = 0; - cases.forEach(k => { + for (let i = 0; i < cases.length; ++i) { + const k = cases[i]; if (k % 2 === 0) { counter += 1; - expect(tree.get(k)).toStrictEqual(counter); + expect(tree.getSome(k)).toStrictEqual(counter); } else { - expect(tree.get(k)).toThrow(`tree should not contain key ${k}`); + expect(tree.has(k)).toBeFalsy(`tree should not contain key ${k}`); } - }); + } - expect(height(tree)).toBeLessThanOrEqual(maxTreeHeight(n)); + expect(height(tree)).toBeLessThanOrEqual(maxTreeHeight(n as f64)); }); it("sets and gets n key-value pairs in descending order", () => { @@ -174,22 +172,24 @@ describe("AVLTrees should handle", () => { const cases: u32[] = range(0, n*2).reverse(); let counter = 0; - cases.forEach(k => { + for (let i = 0; i < cases.length; ++i) { + const k = cases[i]; if (k % 2 === 0) { counter += 1; tree.insert(k, counter); } - }); + } counter = 0; - cases.forEach(k => { + for (let i = 0; i < cases.length; ++i) { + const k = cases[i]; if (k % 2 === 0) { counter += 1; - expect(tree.get(k)).toStrictEqual(counter); + expect(tree.getSome(k)).toStrictEqual(counter); } else { - expect(tree.get(k)).toThrow(`tree should not contain key ${k}`); + expect(tree.has(k)).toBeFalsy(`tree should not contain key ${k}`); } - }); + } expect(height(tree)).toBeLessThanOrEqual(maxTreeHeight(n)); }); @@ -204,7 +204,7 @@ describe("AVLTrees should handle", () => { }); input.forEach(x => { - expect(tree.get(x)).toStrictEqual(42); + expect(tree.getSome(x)).toStrictEqual(42); }); expect(height(tree)).toBeLessThanOrEqual(maxTreeHeight(n)); @@ -244,8 +244,8 @@ describe("AVLTrees should handle", () => { tree.insert(x, 1); }); - expect(tree.lower(5)).toThrow("5 is lower than tree.min(), which is 10"); - expect(tree.lower(10)).toThrow("10 is equal to tree.min(), which is 10"); + expect(() => { tree.lower(5) }).toThrow("5 is lower than tree.min(), which is 10"); + expect(() => { tree.lower(10) }).toThrow("10 is equal to tree.min(), which is 10"); expect(tree.lower(11)).toStrictEqual(10); expect(tree.lower(20)).toStrictEqual(10); expect(tree.lower(49)).toStrictEqual(40); @@ -265,8 +265,8 @@ describe("AVLTrees should handle", () => { expect(tree.higher(11)).toStrictEqual(20); expect(tree.higher(20)).toStrictEqual(30); expect(tree.higher(49)).toStrictEqual(50); - expect(tree.higher(50)).toThrow("50 is equal to tree.max(), which is 50"); - expect(tree.higher(51)).toThrow("51 is greater than tree.max(), which is 50"); + expect(() => { tree.higher(50) }).toThrow("50 is equal to tree.max(), which is 50"); + expect(() => { tree.higher(51) }).toThrow("51 is greater than tree.max(), which is 50"); }); it("gets the key lower than or equal to the given key", () => { @@ -276,7 +276,7 @@ describe("AVLTrees should handle", () => { tree.insert(x, 1); }); - expect(tree.floorKey(5)).toThrow("5 is lower than tree.min(), which is 10"); + expect(() => { tree.floorKey(5) }).toThrow("5 is lower than tree.min(), which is 10"); expect(tree.floorKey(10)).toStrictEqual(10); expect(tree.floorKey(11)).toStrictEqual(10); expect(tree.floorKey(20)).toStrictEqual(20); @@ -298,7 +298,7 @@ describe("AVLTrees should handle", () => { expect(tree.ceilKey(20)).toStrictEqual(20); expect(tree.ceilKey(49)).toStrictEqual(50); expect(tree.ceilKey(50)).toStrictEqual(50); - expect(tree.ceilKey(51)).toThrow("51 is greater than tree.max(), which is 50"); + expect(() => { tree.ceilKey(51) }).toThrow("51 is greater than tree.max(), which is 50"); }); it("removes 1 key", () => { @@ -306,11 +306,11 @@ describe("AVLTrees should handle", () => { const value = 2; tree.insert(key, value); - expect(tree.get(key)).toStrictEqual(value); + expect(tree.getSome(key)).toStrictEqual(value); expect(tree.size).toStrictEqual(1); tree.remove(key); - expect(tree.get(key)).toThrow("tree should throw if getting removed key"); + expect(tree.has(key)).toBeFalsy(`tree should not contain key ${key}`); expect(tree.size).toStrictEqual(0); }); @@ -319,11 +319,11 @@ describe("AVLTrees should handle", () => { const value = 2; tree.insert(key, value); - expect(tree.get(key)).toStrictEqual(value); + expect(tree.getSome(key)).toStrictEqual(value); expect(tree.size).toStrictEqual(1); tree.remove(value); - expect(tree.get(key)).toStrictEqual(value); + expect(tree.getSome(key)).toStrictEqual(value); expect(tree.size).toStrictEqual(1); }); @@ -338,7 +338,7 @@ describe("AVLTrees should handle", () => { insertThenRemove(tree, keys, keys); expect(tree.size).toStrictEqual(0); }); - + it("removes 7 random keys", () => { const keys: u32[] = [ 2104297040, @@ -393,7 +393,7 @@ describe("AVLTrees should handle", () => { expect(tree.size).toStrictEqual(keysToInsert.length); keysToInsert.forEach((key, i) => { - expect(tree.get(key)).toStrictEqual(i); + expect(tree.getSome(key)).toStrictEqual(i); }); }); @@ -403,17 +403,18 @@ describe("AVLTrees should handle", () => { const set = new Set(); - keys.forEach((key, i) => { + for (let i = 0; i < keys.length; ++i) { + const key = keys[i]; tree.insert(key, i); set.add(key); - }); + } expect(tree.size).toStrictEqual(set.size); keys.forEach((key, i) => { - expect(tree.get(key)).toStrictEqual(i); + expect(tree.getSome(key)).toStrictEqual(i); tree.remove(key); - expect(tree.get(x)).toThrow("tree should throw if getting removed key"); + expect(tree.has(key)).toBeFalsy(`tree should not contain key ${key}`); }); expect(tree.size).toStrictEqual(0); @@ -429,15 +430,15 @@ describe("AVLTrees should handle", () => { tree.remove(2); expect(tree.root).toStrictEqual(3); - expect(tree.get(1)).toStrictEqual(1); - expect(tree.get(2)).toThrow("tree should throw when getting removed key (root of the tree)"); - expect(tree.get(3)).toStrictEqual(1); - expect(tree.get(4)).toStrictEqual(1); + expect(tree.getSome(1)).toStrictEqual(1); + expect(() => { tree.getSome(2) }).toThrow("tree should throw when getting removed key (root of the tree)"); + expect(tree.getSome(3)).toStrictEqual(1); + expect(tree.getSome(4)).toStrictEqual(1); }); it("inserts 2 keys then removes 2 keys", () => { - const keysToInsert = [11760225, 611327897]; - const keysToRemove = [2982517385, 1833990072]; + const keysToInsert: u32[] = [11760225, 611327897]; + const keysToRemove: u32[] = [2982517385, 1833990072]; insertThenRemove(tree, keysToInsert, keysToRemove); @@ -450,7 +451,7 @@ describe("AVLTrees should handle", () => { tree.insert(42, i); }); - expect(tree.get(42)).toStrictEqual(29); // most recent value inserted for key 42 + expect(tree.getSome(42)).toStrictEqual(29); // most recent value inserted for key 42 expect(tree.size).toStrictEqual(31); }); @@ -464,8 +465,15 @@ describe("AVLTrees should handle", () => { const allKeys = keysToInsert.concat(keysToRemove); insertThenRemove(tree, allKeys, keysToRemove); - allKeys.forEach(key => set.add(key)); - keysToRemove.forEach(key => set.delete(key)); + for (let i = 0; i < allKeys.length; ++i) { + const key = allKeys[i]; + set.add(key); + } + + for (let i = 0; i < keysToRemove.length; ++i) { + const key = allKeys[i]; + set.delete(key); + } expect(tree.size).toStrictEqual(set.size); expect(height(tree)).toBeLessThanOrEqual(maxTreeHeight(n)); @@ -474,7 +482,7 @@ describe("AVLTrees should handle", () => { expect(tree.size).toStrictEqual(0); }); }); - + it("does nothing when removing while empty", () => { expect(tree.size).toStrictEqual(0); tree.remove(1); @@ -500,7 +508,10 @@ describe("AVLTrees should handle", () => { const keys = [10, 20, 30, 40, 50, 45, 35, 25, 15, 5]; const values = [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]; - keys.forEach((key, i) => tree.insert(key, values[i])); + for (let i = 0; i < keys.length; ++i) { + const key = keys[i]; + tree.insert(key, values[i]); + } expect(tree.values(20, 30)).toStrictEqual([2, 8]); expect(tree.values(11, 41)).toStrictEqual([9, 2, 8, 3, 7, 4]); @@ -516,18 +527,18 @@ describe("AVLTrees should handle", () => { }); it("remains balanced after insertions and deletions", () => { - const keysToInsert = [2, 3, 4]; - const keysToRemove = [0, 0, 0, 1]; + const keysToInsert: u32[] = [2, 3, 4]; + const keysToRemove: u32[] = [0, 0, 0, 1]; insertThenRemove(tree, keysToInsert, keysToRemove); expect(isBalanced(tree)).toBeTruthy(); }); it("remains balanced after more insertions and deletions", () => { - const keysToInsert = [1, 2, 0, 3, 5, 6]; - const keysToRemove = [0, 0, 0, 3, 5, 6, 7, 4]; + const keysToInsert: u32[] = [1, 2, 0, 3, 5, 6]; + const keysToRemove: u32[] = [0, 0, 0, 3, 5, 6, 7, 4]; insertThenRemove(tree, keysToInsert, keysToRemove); expect(isBalanced(tree)).toBeTruthy(); }); -}) +}); diff --git a/assembly/runtime/collections/avlTree.ts b/assembly/runtime/collections/avlTree.ts index 8a45b749..93d30dce 100644 --- a/assembly/runtime/collections/avlTree.ts +++ b/assembly/runtime/collections/avlTree.ts @@ -58,29 +58,25 @@ export class AVLTree { } /** - * Retrieves a related value for a given key or throws error "key not found" + * Retrieves a related value for a given key or uses the `defaultValue` if not key is found * * @param key Key of the element. * @returns Value for the given key or the default value. */ - get(key: K): V { - // TODO implement get() - throw new Error("TODO implement get()") + get(key: K, defaultValue: V | null = null): V | null { + return this.has(key) ? this.get(key) : defaultValue; } /** - * Retrieves the related value for a given key, or uses the `defaultValue` if not key is found + * Retrieves the related value for a given key, or throws error "key not found" * * @param key Key of the element. * @param defaultValue The default value if the key is not present. * @returns Value for the given key or the default value. */ - getSome(key: K, defaultValue: V): V { - try { - return this.get(key); - } catch(err) { // TODO check that this is key not found error - return defaultValue; - } + getSome(key: K): V { + // TODO implement getSome() + throw new Error("TODO implement getSome()") } /** diff --git a/yarn.lock b/yarn.lock index 2e2da2cb..aa8b84d2 100644 --- a/yarn.lock +++ b/yarn.lock @@ -578,11 +578,6 @@ dependencies: base-x "^3.0.6" -"@types/chance@^1.1.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@types/chance/-/chance-1.1.0.tgz#7d8e6bd0506344d94c042f692d59d20f8eb7d66d" - integrity sha512-j/9aaLU6JaaN2iFiSZgvD+G0nju1Fi2/f2WM+WwS+8+cpTdzFhXFH3+SHZgfjgum6wNW80sfcawUx+Rx7tH26w== - "@types/color-name@^1.1.1": version "1.1.1" resolved "https://registry.yarnpkg.com/@types/color-name/-/color-name-1.1.1.tgz#1c1261bbeaa10a8055bbc5d8ab84b7b2afc846a0" From 749ed804632bfab3de25707308fa0afeca79397c Mon Sep 17 00:00:00 2001 From: Kai Aichholz Date: Thu, 11 Jun 2020 11:23:55 -0700 Subject: [PATCH 05/11] remove runtime dist tsbuildinfo --- runtime/dist/tsconfig.tsbuildinfo | 2791 ----------------------------- 1 file changed, 2791 deletions(-) delete mode 100644 runtime/dist/tsconfig.tsbuildinfo diff --git a/runtime/dist/tsconfig.tsbuildinfo b/runtime/dist/tsconfig.tsbuildinfo deleted file mode 100644 index 161abccf..00000000 --- a/runtime/dist/tsconfig.tsbuildinfo +++ /dev/null @@ -1,2791 +0,0 @@ -{ - "program": { - "fileInfos": { - "../../node_modules/typescript/lib/lib.es5.d.ts": { - "version": "70ae6416528e68c2ee7b62892200d2ca631759943d4429f8b779b947ff1e124d", - "signature": "70ae6416528e68c2ee7b62892200d2ca631759943d4429f8b779b947ff1e124d", - "affectsGlobalScope": true - }, - "../../node_modules/typescript/lib/lib.es2015.d.ts": { - "version": "dc47c4fa66b9b9890cf076304de2a9c5201e94b740cffdf09f87296d877d71f6", - "signature": "dc47c4fa66b9b9890cf076304de2a9c5201e94b740cffdf09f87296d877d71f6", - "affectsGlobalScope": false - }, - "../../node_modules/typescript/lib/lib.es2016.d.ts": { - "version": "7a387c58583dfca701b6c85e0adaf43fb17d590fb16d5b2dc0a2fbd89f35c467", - "signature": "7a387c58583dfca701b6c85e0adaf43fb17d590fb16d5b2dc0a2fbd89f35c467", - "affectsGlobalScope": false - }, - "../../node_modules/typescript/lib/lib.es2017.d.ts": { - "version": "8a12173c586e95f4433e0c6dc446bc88346be73ffe9ca6eec7aa63c8f3dca7f9", - "signature": "8a12173c586e95f4433e0c6dc446bc88346be73ffe9ca6eec7aa63c8f3dca7f9", - "affectsGlobalScope": false - }, - "../../node_modules/typescript/lib/lib.es2018.d.ts": { - "version": "5f4e733ced4e129482ae2186aae29fde948ab7182844c3a5a51dd346182c7b06", - "signature": "5f4e733ced4e129482ae2186aae29fde948ab7182844c3a5a51dd346182c7b06", - "affectsGlobalScope": false - }, - "../../node_modules/typescript/lib/lib.es2019.d.ts": { - "version": "e6b724280c694a9f588847f754198fb96c43d805f065c3a5b28bbc9594541c84", - "signature": "e6b724280c694a9f588847f754198fb96c43d805f065c3a5b28bbc9594541c84", - "affectsGlobalScope": false - }, - "../../node_modules/typescript/lib/lib.es2020.d.ts": { - "version": "94b4108552f078722078d7c4a010ca4851063882f6c0c51a1468aa7a39aed4b3", - "signature": "94b4108552f078722078d7c4a010ca4851063882f6c0c51a1468aa7a39aed4b3", - "affectsGlobalScope": false - }, - "../../node_modules/typescript/lib/lib.esnext.d.ts": { - "version": "2f8f379dedbdbd96a38a1e445cb3919853a1157a950fd977f85808db8d0f8a58", - "signature": "2f8f379dedbdbd96a38a1e445cb3919853a1157a950fd977f85808db8d0f8a58", - "affectsGlobalScope": false - }, - "../../node_modules/typescript/lib/lib.es2015.core.d.ts": { - "version": "63e0cc12d0f77394094bd19e84464f9840af0071e5b9358ced30511efef1d8d2", - "signature": "63e0cc12d0f77394094bd19e84464f9840af0071e5b9358ced30511efef1d8d2", - "affectsGlobalScope": true - }, - "../../node_modules/typescript/lib/lib.es2015.collection.d.ts": { - "version": "43fb1d932e4966a39a41b464a12a81899d9ae5f2c829063f5571b6b87e6d2f9c", - "signature": "43fb1d932e4966a39a41b464a12a81899d9ae5f2c829063f5571b6b87e6d2f9c", - "affectsGlobalScope": true - }, - "../../node_modules/typescript/lib/lib.es2015.generator.d.ts": { - "version": "cdccba9a388c2ee3fd6ad4018c640a471a6c060e96f1232062223063b0a5ac6a", - "signature": "cdccba9a388c2ee3fd6ad4018c640a471a6c060e96f1232062223063b0a5ac6a", - "affectsGlobalScope": true - }, - "../../node_modules/typescript/lib/lib.es2015.iterable.d.ts": { - "version": "42f5e41e5893da663dbf0394268f54f1da4b43dc0ddd2ea4bf471fe5361d6faf", - "signature": "42f5e41e5893da663dbf0394268f54f1da4b43dc0ddd2ea4bf471fe5361d6faf", - "affectsGlobalScope": true - }, - "../../node_modules/typescript/lib/lib.es2015.promise.d.ts": { - "version": "0b7a905675e6cb4211c128f0a3aa47d414b275180a299a9aad5d3ec298abbfc4", - "signature": "0b7a905675e6cb4211c128f0a3aa47d414b275180a299a9aad5d3ec298abbfc4", - "affectsGlobalScope": true - }, - "../../node_modules/typescript/lib/lib.es2015.proxy.d.ts": { - "version": "dfff68b3c34338f6b307a25d4566de15eed7973b0dc5d69f9fde2bcac1c25315", - "signature": "dfff68b3c34338f6b307a25d4566de15eed7973b0dc5d69f9fde2bcac1c25315", - "affectsGlobalScope": true - }, - "../../node_modules/typescript/lib/lib.es2015.reflect.d.ts": { - "version": "cb609802a8698aa28b9c56331d4b53f590ca3c1c3a255350304ae3d06017779d", - "signature": "cb609802a8698aa28b9c56331d4b53f590ca3c1c3a255350304ae3d06017779d", - "affectsGlobalScope": true - }, - "../../node_modules/typescript/lib/lib.es2015.symbol.d.ts": { - "version": "3013574108c36fd3aaca79764002b3717da09725a36a6fc02eac386593110f93", - "signature": "3013574108c36fd3aaca79764002b3717da09725a36a6fc02eac386593110f93", - "affectsGlobalScope": true - }, - "../../node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts": { - "version": "4670208dd7da9d6c774ab1b75c1527a810388c7989c4905de6aaea8561cb9dce", - "signature": "4670208dd7da9d6c774ab1b75c1527a810388c7989c4905de6aaea8561cb9dce", - "affectsGlobalScope": true - }, - "../../node_modules/typescript/lib/lib.es2016.array.include.d.ts": { - "version": "3be5a1453daa63e031d266bf342f3943603873d890ab8b9ada95e22389389006", - "signature": "3be5a1453daa63e031d266bf342f3943603873d890ab8b9ada95e22389389006", - "affectsGlobalScope": true - }, - "../../node_modules/typescript/lib/lib.es2017.object.d.ts": { - "version": "17bb1fc99591b00515502d264fa55dc8370c45c5298f4a5c2083557dccba5a2a", - "signature": "17bb1fc99591b00515502d264fa55dc8370c45c5298f4a5c2083557dccba5a2a", - "affectsGlobalScope": true - }, - "../../node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts": { - "version": "d0db416bccdb33975548baf09a42ee8c47eace1aac7907351a000f1e568e7232", - "signature": "d0db416bccdb33975548baf09a42ee8c47eace1aac7907351a000f1e568e7232", - "affectsGlobalScope": true - }, - "../../node_modules/typescript/lib/lib.es2017.string.d.ts": { - "version": "6a6b173e739a6a99629a8594bfb294cc7329bfb7b227f12e1f7c11bc163b8577", - "signature": "6a6b173e739a6a99629a8594bfb294cc7329bfb7b227f12e1f7c11bc163b8577", - "affectsGlobalScope": true - }, - "../../node_modules/typescript/lib/lib.es2017.intl.d.ts": { - "version": "12a310447c5d23c7d0d5ca2af606e3bd08afda69100166730ab92c62999ebb9d", - "signature": "12a310447c5d23c7d0d5ca2af606e3bd08afda69100166730ab92c62999ebb9d", - "affectsGlobalScope": true - }, - "../../node_modules/typescript/lib/lib.es2017.typedarrays.d.ts": { - "version": "b0124885ef82641903d232172577f2ceb5d3e60aed4da1153bab4221e1f6dd4e", - "signature": "b0124885ef82641903d232172577f2ceb5d3e60aed4da1153bab4221e1f6dd4e", - "affectsGlobalScope": true - }, - "../../node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts": { - "version": "0eb85d6c590b0d577919a79e0084fa1744c1beba6fd0d4e951432fa1ede5510a", - "signature": "0eb85d6c590b0d577919a79e0084fa1744c1beba6fd0d4e951432fa1ede5510a", - "affectsGlobalScope": true - }, - "../../node_modules/typescript/lib/lib.es2018.asynciterable.d.ts": { - "version": "a40c4d82bf13fcded295ac29f354eb7d40249613c15e07b53f2fc75e45e16359", - "signature": "a40c4d82bf13fcded295ac29f354eb7d40249613c15e07b53f2fc75e45e16359", - "affectsGlobalScope": true - }, - "../../node_modules/typescript/lib/lib.es2018.intl.d.ts": { - "version": "df9c8a72ca8b0ed62f5470b41208a0587f0f73f0a7db28e5a1272cf92537518e", - "signature": "df9c8a72ca8b0ed62f5470b41208a0587f0f73f0a7db28e5a1272cf92537518e", - "affectsGlobalScope": true - }, - "../../node_modules/typescript/lib/lib.es2018.promise.d.ts": { - "version": "bb2d3fb05a1d2ffbca947cc7cbc95d23e1d053d6595391bd325deb265a18d36c", - "signature": "bb2d3fb05a1d2ffbca947cc7cbc95d23e1d053d6595391bd325deb265a18d36c", - "affectsGlobalScope": true - }, - "../../node_modules/typescript/lib/lib.es2018.regexp.d.ts": { - "version": "c80df75850fea5caa2afe43b9949338ce4e2de086f91713e9af1a06f973872b8", - "signature": "c80df75850fea5caa2afe43b9949338ce4e2de086f91713e9af1a06f973872b8", - "affectsGlobalScope": true - }, - "../../node_modules/typescript/lib/lib.es2019.array.d.ts": { - "version": "9d57b2b5d15838ed094aa9ff1299eecef40b190722eb619bac4616657a05f951", - "signature": "9d57b2b5d15838ed094aa9ff1299eecef40b190722eb619bac4616657a05f951", - "affectsGlobalScope": true - }, - "../../node_modules/typescript/lib/lib.es2019.object.d.ts": { - "version": "6c51b5dd26a2c31dbf37f00cfc32b2aa6a92e19c995aefb5b97a3a64f1ac99de", - "signature": "6c51b5dd26a2c31dbf37f00cfc32b2aa6a92e19c995aefb5b97a3a64f1ac99de", - "affectsGlobalScope": true - }, - "../../node_modules/typescript/lib/lib.es2019.string.d.ts": { - "version": "93544ca2f26a48716c1b6c5091842cad63129daac422dfa4bc52460465f22bb1", - "signature": "93544ca2f26a48716c1b6c5091842cad63129daac422dfa4bc52460465f22bb1", - "affectsGlobalScope": true - }, - "../../node_modules/typescript/lib/lib.es2019.symbol.d.ts": { - "version": "2ad234885a4240522efccd77de6c7d99eecf9b4de0914adb9a35c0c22433f993", - "signature": "2ad234885a4240522efccd77de6c7d99eecf9b4de0914adb9a35c0c22433f993", - "affectsGlobalScope": true - }, - "../../node_modules/typescript/lib/lib.es2020.bigint.d.ts": { - "version": "4f435f794b7853c55e2ae7cff6206025802aa79232d2867544178f2ca8ff5eaa", - "signature": "4f435f794b7853c55e2ae7cff6206025802aa79232d2867544178f2ca8ff5eaa", - "affectsGlobalScope": true - }, - "../../node_modules/typescript/lib/lib.es2020.promise.d.ts": { - "version": "7435b75fdf3509622e79622dbe5091cf4b09688410ee2034e4fc17d0c99d0862", - "signature": "7435b75fdf3509622e79622dbe5091cf4b09688410ee2034e4fc17d0c99d0862", - "affectsGlobalScope": true - }, - "../../node_modules/typescript/lib/lib.es2020.string.d.ts": { - "version": "faf0221ae0465363c842ce6aa8a0cbda5d9296940a8e26c86e04cc4081eea21e", - "signature": "faf0221ae0465363c842ce6aa8a0cbda5d9296940a8e26c86e04cc4081eea21e", - "affectsGlobalScope": true - }, - "../../node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts": { - "version": "936d7d2e8851af9ccfa5333b15e877a824417d352b1d7fd06388639dc69ef80a", - "signature": "936d7d2e8851af9ccfa5333b15e877a824417d352b1d7fd06388639dc69ef80a", - "affectsGlobalScope": true - }, - "../../node_modules/typescript/lib/lib.esnext.intl.d.ts": { - "version": "89bf2b7a601b73ea4311eda9c41f86a58994fec1bee3b87c4a14d68d9adcdcbd", - "signature": "89bf2b7a601b73ea4311eda9c41f86a58994fec1bee3b87c4a14d68d9adcdcbd", - "affectsGlobalScope": true - }, - "../../node_modules/typescript/lib/lib.esnext.string.d.ts": { - "version": "fb4416144c1bf0323ccbc9afb0ab289c07312214e8820ad17d709498c865a3fe", - "signature": "fb4416144c1bf0323ccbc9afb0ab289c07312214e8820ad17d709498c865a3fe", - "affectsGlobalScope": true - }, - "../../node_modules/typescript/lib/lib.esnext.promise.d.ts": { - "version": "cd6efb9467a8b6338ece2e2855e37765700f2cd061ca54b01b33878cf5c7677e", - "signature": "cd6efb9467a8b6338ece2e2855e37765700f2cd061ca54b01b33878cf5c7677e", - "affectsGlobalScope": true - }, - "../src/bin.ts": { - "version": "8db94265dca2a4ca4801f0da7ae492decd3b7d9037e2c009d6765bc64f1e18d4", - "signature": "6b1c0717957c4d1664e746ad8bac5dcc0c551e3d88815550dcb6e83d25f33d70", - "affectsGlobalScope": false - }, - "../../node_modules/@types/js-base64/index.d.ts": { - "version": "2e379368c4ecd7c071d3541a7739eb671a0623fc8a37ba6786be6b9e8514ac07", - "signature": "2e379368c4ecd7c071d3541a7739eb671a0623fc8a37ba6786be6b9e8514ac07", - "affectsGlobalScope": true - }, - "../src/context.ts": { - "version": "e0b03e1730ac97af23cbd3cb6778fd9886502d9776a8306d26dc0bedeacd953d", - "signature": "80edd4353a3867aa28f23b4ae64c57ca5a612b65ec2a7f39f3b4920a3cd7cd80", - "affectsGlobalScope": false - }, - "../../node_modules/@types/node/globals.d.ts": { - "version": "2dd7dbacbd70cc156185235140b7b6682c002c1ea678dd87d7a20589d4555fc0", - "signature": "2dd7dbacbd70cc156185235140b7b6682c002c1ea678dd87d7a20589d4555fc0", - "affectsGlobalScope": true - }, - "../../node_modules/@types/node/async_hooks.d.ts": { - "version": "4ed9f71ddbb5753771ee391f64297078a88f7dfd1480646dcf08c31395778682", - "signature": "4ed9f71ddbb5753771ee391f64297078a88f7dfd1480646dcf08c31395778682", - "affectsGlobalScope": false - }, - "../../node_modules/@types/node/buffer.d.ts": { - "version": "61215c1a376bbe8f51cab4cc4ddbf3746387015113c37a84d981d4738c21b878", - "signature": "61215c1a376bbe8f51cab4cc4ddbf3746387015113c37a84d981d4738c21b878", - "affectsGlobalScope": false - }, - "../../node_modules/@types/node/child_process.d.ts": { - "version": "465150173a56b943b2f6d8918e35c89d8386ffd37aa466e486ca54db54d6cee7", - "signature": "465150173a56b943b2f6d8918e35c89d8386ffd37aa466e486ca54db54d6cee7", - "affectsGlobalScope": false - }, - "../../node_modules/@types/node/cluster.d.ts": { - "version": "123ec69e4b3a686eb49afd94ebe3292a5c84a867ecbcb6bb84bdd720a12af803", - "signature": "123ec69e4b3a686eb49afd94ebe3292a5c84a867ecbcb6bb84bdd720a12af803", - "affectsGlobalScope": false - }, - "../../node_modules/@types/node/console.d.ts": { - "version": "525c8fc510d9632d2a0a9de2d41c3ac1cdd79ff44d3b45c6d81cacabb683528d", - "signature": "525c8fc510d9632d2a0a9de2d41c3ac1cdd79ff44d3b45c6d81cacabb683528d", - "affectsGlobalScope": false - }, - "../../node_modules/@types/node/constants.d.ts": { - "version": "90c85ddbb8de82cd19198bda062065fc51b7407c0f206f2e399e65a52e979720", - "signature": "90c85ddbb8de82cd19198bda062065fc51b7407c0f206f2e399e65a52e979720", - "affectsGlobalScope": false - }, - "../../node_modules/@types/node/crypto.d.ts": { - "version": "d4dd0b19ee0338dd4f1603eacb41859b9d5371bfef2b2849cb870d6fd6602bcb", - "signature": "d4dd0b19ee0338dd4f1603eacb41859b9d5371bfef2b2849cb870d6fd6602bcb", - "affectsGlobalScope": false - }, - "../../node_modules/@types/node/dgram.d.ts": { - "version": "7ecfe97b43aa6c8b8f90caa599d5648bb559962e74e6f038f73a77320569dd78", - "signature": "7ecfe97b43aa6c8b8f90caa599d5648bb559962e74e6f038f73a77320569dd78", - "affectsGlobalScope": false - }, - "../../node_modules/@types/node/dns.d.ts": { - "version": "aad3237c3f99480041cad7ca04d64307c98933996f822342b7c0ee4a78553346", - "signature": "aad3237c3f99480041cad7ca04d64307c98933996f822342b7c0ee4a78553346", - "affectsGlobalScope": false - }, - "../../node_modules/@types/node/domain.d.ts": { - "version": "4d4c83f77ac21a72252785baa5328a5612b0b6598d512f68b8cb14f7966d059e", - "signature": "4d4c83f77ac21a72252785baa5328a5612b0b6598d512f68b8cb14f7966d059e", - "affectsGlobalScope": false - }, - "../../node_modules/@types/node/events.d.ts": { - "version": "eaa8136bb11fbea5bdaf29e06aa45a1969ddd39fbfb5fe58a01f00d7f1562cd9", - "signature": "eaa8136bb11fbea5bdaf29e06aa45a1969ddd39fbfb5fe58a01f00d7f1562cd9", - "affectsGlobalScope": false - }, - "../../node_modules/@types/node/fs.d.ts": { - "version": "e253cd3c7d10c4f600308d0528dd371d7e4165d8295b37a1f38d0ef6c0dfaf60", - "signature": "e253cd3c7d10c4f600308d0528dd371d7e4165d8295b37a1f38d0ef6c0dfaf60", - "affectsGlobalScope": false - }, - "../../node_modules/@types/node/fs/promises.d.ts": { - "version": "fb28748ff8d015f52e99daee4f454e57cec1a22141f1257c317f3630a15edeb7", - "signature": "fb28748ff8d015f52e99daee4f454e57cec1a22141f1257c317f3630a15edeb7", - "affectsGlobalScope": false - }, - "../../node_modules/@types/node/http.d.ts": { - "version": "b5fd0a137bd6d0afe291d465e99c7469b082b66b3ee89273b3b22801b6c2948e", - "signature": "b5fd0a137bd6d0afe291d465e99c7469b082b66b3ee89273b3b22801b6c2948e", - "affectsGlobalScope": false - }, - "../../node_modules/@types/node/http2.d.ts": { - "version": "5d9394b829cfd504b2fe17287aaad8ce1dcfb2a2183c962a90a85b96da2c1c90", - "signature": "5d9394b829cfd504b2fe17287aaad8ce1dcfb2a2183c962a90a85b96da2c1c90", - "affectsGlobalScope": false - }, - "../../node_modules/@types/node/https.d.ts": { - "version": "c969bf4c7cdfe4d5dd28aa09432f99d09ad1d8d8b839959646579521d0467d1a", - "signature": "c969bf4c7cdfe4d5dd28aa09432f99d09ad1d8d8b839959646579521d0467d1a", - "affectsGlobalScope": false - }, - "../../node_modules/@types/node/inspector.d.ts": { - "version": "6c3857edaeeaaf43812f527830ebeece9266b6e8eb5271ab6d2f0008306c9947", - "signature": "6c3857edaeeaaf43812f527830ebeece9266b6e8eb5271ab6d2f0008306c9947", - "affectsGlobalScope": false - }, - "../../node_modules/@types/node/module.d.ts": { - "version": "bc6a77e750f4d34584e46b1405b771fb69a224197dd6bafe5b0392a29a70b665", - "signature": "bc6a77e750f4d34584e46b1405b771fb69a224197dd6bafe5b0392a29a70b665", - "affectsGlobalScope": false - }, - "../../node_modules/@types/node/net.d.ts": { - "version": "46cac76114704902baa535b30fb66a26aeaf9430f3b3ab44746e329f12e85498", - "signature": "46cac76114704902baa535b30fb66a26aeaf9430f3b3ab44746e329f12e85498", - "affectsGlobalScope": false - }, - "../../node_modules/@types/node/os.d.ts": { - "version": "ed4ae81196cccc10f297d228bca8d02e31058e6d723a3c5bc4be5fb3c61c6a34", - "signature": "ed4ae81196cccc10f297d228bca8d02e31058e6d723a3c5bc4be5fb3c61c6a34", - "affectsGlobalScope": false - }, - "../../node_modules/@types/node/path.d.ts": { - "version": "84044697c8b3e08ef24e4b32cfe6440143d07e469a5e34bda0635276d32d9f35", - "signature": "84044697c8b3e08ef24e4b32cfe6440143d07e469a5e34bda0635276d32d9f35", - "affectsGlobalScope": false - }, - "../../node_modules/@types/node/perf_hooks.d.ts": { - "version": "0b6098fedb648cab8091cca2b022a5c729b6ef18da923852033f495907cb1a45", - "signature": "0b6098fedb648cab8091cca2b022a5c729b6ef18da923852033f495907cb1a45", - "affectsGlobalScope": false - }, - "../../node_modules/@types/node/process.d.ts": { - "version": "0e0d58f5e90c0a270dac052b9c5ad8ccdfc8271118c2105b361063218d528d6e", - "signature": "0e0d58f5e90c0a270dac052b9c5ad8ccdfc8271118c2105b361063218d528d6e", - "affectsGlobalScope": true - }, - "../../node_modules/@types/node/punycode.d.ts": { - "version": "30ec6f9c683b988c3cfaa0c4690692049c4e7ed7dc6f6e94f56194c06b86f5e1", - "signature": "30ec6f9c683b988c3cfaa0c4690692049c4e7ed7dc6f6e94f56194c06b86f5e1", - "affectsGlobalScope": false - }, - "../../node_modules/@types/node/querystring.d.ts": { - "version": "9f633ecf3e065ff82c19eccab35c8aa1d6d5d1a49af282dc29ef5a64cca34164", - "signature": "9f633ecf3e065ff82c19eccab35c8aa1d6d5d1a49af282dc29ef5a64cca34164", - "affectsGlobalScope": false - }, - "../../node_modules/@types/node/readline.d.ts": { - "version": "6b2bb67b0942bcfce93e1d6fad5f70afd54940a2b13df7f311201fba54b2cbe9", - "signature": "6b2bb67b0942bcfce93e1d6fad5f70afd54940a2b13df7f311201fba54b2cbe9", - "affectsGlobalScope": false - }, - "../../node_modules/@types/node/repl.d.ts": { - "version": "dd3706b25d06fe23c73d16079e8c66ac775831ef419da00716bf2aee530a04a4", - "signature": "dd3706b25d06fe23c73d16079e8c66ac775831ef419da00716bf2aee530a04a4", - "affectsGlobalScope": false - }, - "../../node_modules/@types/node/stream.d.ts": { - "version": "ba1569d69c27f4d2cb2615068cfee4b18c3658aa43534ce68d84bfb56ac172d7", - "signature": "ba1569d69c27f4d2cb2615068cfee4b18c3658aa43534ce68d84bfb56ac172d7", - "affectsGlobalScope": false - }, - "../../node_modules/@types/node/string_decoder.d.ts": { - "version": "d67e08745494b000da9410c1ae2fdc9965fc6d593fe0f381a47491f75417d457", - "signature": "d67e08745494b000da9410c1ae2fdc9965fc6d593fe0f381a47491f75417d457", - "affectsGlobalScope": false - }, - "../../node_modules/@types/node/timers.d.ts": { - "version": "b40652bf8ce4a18133b31349086523b219724dca8df3448c1a0742528e7ad5b9", - "signature": "b40652bf8ce4a18133b31349086523b219724dca8df3448c1a0742528e7ad5b9", - "affectsGlobalScope": false - }, - "../../node_modules/@types/node/tls.d.ts": { - "version": "424bc64b2794d9280c1e1f4a3518ba9d285385a16d84753a6427bb469e582eca", - "signature": "424bc64b2794d9280c1e1f4a3518ba9d285385a16d84753a6427bb469e582eca", - "affectsGlobalScope": false - }, - "../../node_modules/@types/node/trace_events.d.ts": { - "version": "a77fdb357c78b70142b2fdbbfb72958d69e8f765fd2a3c69946c1018e89d4638", - "signature": "a77fdb357c78b70142b2fdbbfb72958d69e8f765fd2a3c69946c1018e89d4638", - "affectsGlobalScope": false - }, - "../../node_modules/@types/node/tty.d.ts": { - "version": "3c2ac350c3baa61fd2b1925844109e098f4376d0768a4643abc82754fd752748", - "signature": "3c2ac350c3baa61fd2b1925844109e098f4376d0768a4643abc82754fd752748", - "affectsGlobalScope": false - }, - "../../node_modules/@types/node/url.d.ts": { - "version": "826d48e49c905cedb906cbde6ccaf758827ff5867d4daa006b5a79e0fb489357", - "signature": "826d48e49c905cedb906cbde6ccaf758827ff5867d4daa006b5a79e0fb489357", - "affectsGlobalScope": false - }, - "../../node_modules/@types/node/util.d.ts": { - "version": "baa711b17f67390c60eac3c70a1391b23a8e3833cb723b2d7336d4817a22455c", - "signature": "baa711b17f67390c60eac3c70a1391b23a8e3833cb723b2d7336d4817a22455c", - "affectsGlobalScope": false - }, - "../../node_modules/@types/node/v8.d.ts": { - "version": "289be113bad7ee27ee7fa5b1e373c964c9789a5e9ed7db5ddcb631371120b953", - "signature": "289be113bad7ee27ee7fa5b1e373c964c9789a5e9ed7db5ddcb631371120b953", - "affectsGlobalScope": false - }, - "../../node_modules/@types/node/vm.d.ts": { - "version": "e4abb8eaa8a7d78236be0f8342404aab076668d20590209e32fdeb924588531e", - "signature": "e4abb8eaa8a7d78236be0f8342404aab076668d20590209e32fdeb924588531e", - "affectsGlobalScope": false - }, - "../../node_modules/@types/node/worker_threads.d.ts": { - "version": "086bfc0710b044ce1586108ee56c6e1c0d9ca2d325c153bb026cbc850169f593", - "signature": "086bfc0710b044ce1586108ee56c6e1c0d9ca2d325c153bb026cbc850169f593", - "affectsGlobalScope": false - }, - "../../node_modules/@types/node/zlib.d.ts": { - "version": "f409183966a1dd93d3a9cd1d54fbeb85c73101e87cd5b19467c5e37b252f3fd8", - "signature": "f409183966a1dd93d3a9cd1d54fbeb85c73101e87cd5b19467c5e37b252f3fd8", - "affectsGlobalScope": false - }, - "../../node_modules/@types/node/base.d.ts": { - "version": "92d6395892ec8da8c51def5a12b012fa63309d06b4933a35ced5c732bda5ca11", - "signature": "92d6395892ec8da8c51def5a12b012fa63309d06b4933a35ced5c732bda5ca11", - "affectsGlobalScope": false - }, - "../../node_modules/@types/node/ts3.2/fs.d.ts": { - "version": "12b2608d6074167c331c9c3c6994a57819f6ff934c7fd4527e23aabf56d4c8d1", - "signature": "12b2608d6074167c331c9c3c6994a57819f6ff934c7fd4527e23aabf56d4c8d1", - "affectsGlobalScope": false - }, - "../../node_modules/@types/node/ts3.2/util.d.ts": { - "version": "ffc1cd688606ad1ddb59a40e8f3defbde907af2a3402d1d9ddf69accb2903f07", - "signature": "ffc1cd688606ad1ddb59a40e8f3defbde907af2a3402d1d9ddf69accb2903f07", - "affectsGlobalScope": false - }, - "../../node_modules/@types/node/ts3.2/globals.d.ts": { - "version": "4926e99d2ad39c0bbd36f2d37cc8f52756bc7a5661ad7b12815df871a4b07ba1", - "signature": "4926e99d2ad39c0bbd36f2d37cc8f52756bc7a5661ad7b12815df871a4b07ba1", - "affectsGlobalScope": true - }, - "../../node_modules/@types/node/ts3.2/base.d.ts": { - "version": "4cef33b2997388559c39b2f98c37e8319ad61e30a1f0edc55c53913f2250bade", - "signature": "4cef33b2997388559c39b2f98c37e8319ad61e30a1f0edc55c53913f2250bade", - "affectsGlobalScope": false - }, - "../../node_modules/@types/node/ts3.5/globals.global.d.ts": { - "version": "2708349d5a11a5c2e5f3a0765259ebe7ee00cdcc8161cb9990cb4910328442a1", - "signature": "2708349d5a11a5c2e5f3a0765259ebe7ee00cdcc8161cb9990cb4910328442a1", - "affectsGlobalScope": true - }, - "../../node_modules/@types/node/ts3.5/wasi.d.ts": { - "version": "0b3fef11ea6208c4cb3715c9aa108766ce98fc726bfba68cc23b25ce944ce9c0", - "signature": "0b3fef11ea6208c4cb3715c9aa108766ce98fc726bfba68cc23b25ce944ce9c0", - "affectsGlobalScope": false - }, - "../../node_modules/@types/node/ts3.5/base.d.ts": { - "version": "255dbc5a5acef2b83b47145042aa0127ebf7fe24cd5ce6afaaaf5c8fc2c5eb96", - "signature": "255dbc5a5acef2b83b47145042aa0127ebf7fe24cd5ce6afaaaf5c8fc2c5eb96", - "affectsGlobalScope": false - }, - "../../node_modules/@types/node/ts3.7/assert.d.ts": { - "version": "a8b842671d535d14f533fd8dbfacebceacf5195069d720425d572d5cc5ab3dc4", - "signature": "a8b842671d535d14f533fd8dbfacebceacf5195069d720425d572d5cc5ab3dc4", - "affectsGlobalScope": false - }, - "../../node_modules/@types/node/ts3.7/base.d.ts": { - "version": "9779312cffccce68e3ffbaa3a876381dc54a8240d9bdaa448f7eba222ec19392", - "signature": "9779312cffccce68e3ffbaa3a876381dc54a8240d9bdaa448f7eba222ec19392", - "affectsGlobalScope": false - }, - "../../node_modules/@types/node/ts3.7/index.d.ts": { - "version": "d522314e80ed71b57e3c2939d3c9594eaae63a4adf028559e6574f6b270b0fee", - "signature": "d522314e80ed71b57e3c2939d3c9594eaae63a4adf028559e6574f6b270b0fee", - "affectsGlobalScope": false - }, - "../../node_modules/@types/bn.js/index.d.ts": { - "version": "bc6dd50ac2fc9a7ca6488811b116bd0ddd606338db0bb97852c8fcf757e2d7f5", - "signature": "bc6dd50ac2fc9a7ca6488811b116bd0ddd606338db0bb97852c8fcf757e2d7f5", - "affectsGlobalScope": false - }, - "../../node_modules/base-x/src/index.d.ts": { - "version": "e91751abb2372a36a90869d36f6ad5d5e69a84c5513ca99d236554e4dd8b9aa1", - "signature": "e91751abb2372a36a90869d36f6ad5d5e69a84c5513ca99d236554e4dd8b9aa1", - "affectsGlobalScope": false - }, - "../../node_modules/@types/bs58/index.d.ts": { - "version": "5cbc27193321e6ba10f4e9f3c5519649d9e2716cf103efd7eaa7a89e0f8ed1d4", - "signature": "5cbc27193321e6ba10f4e9f3c5519649d9e2716cf103efd7eaa7a89e0f8ed1d4", - "affectsGlobalScope": false - }, - "../src/types.ts": { - "version": "bab5e9093e6b2442ec30c0643ce7a9d9a8a86b99e817a14debe1e0811537a494", - "signature": "6b9e9d26248badf30677fd41b8db18991d927b5fc20fc54f51e5bb4bca747115", - "affectsGlobalScope": false - }, - "../src/utils.ts": { - "version": "729d77286390304bf8ed3f775e3d6b8d1d65cc20d0bea1050bed84270818e240", - "signature": "08cb359473f512dc063a47ccb0caf25628635014cefd836adf9d71299c4ab717", - "affectsGlobalScope": false - }, - "../src/runtime.ts": { - "version": "1560b229ed12d8c7023257d2aa0fecb89950eae7ce665d942f0f5eda7f8209e6", - "signature": "6444a9849e2bfc1433ce883139cd8ea85a364f04afb0cbb554338b6351998b1d", - "affectsGlobalScope": false - }, - "../src/index.ts": { - "version": "32d6f957487819cefbcf8a026ff4355b15ebcab05f570e50be64f88f96ec3690", - "signature": "5be7e7e48a3c513431061a8283806b91ec184a73e17da7eeb55693bd833a6f0c", - "affectsGlobalScope": false - }, - "../../node_modules/@babel/types/lib/index.d.ts": { - "version": "7ee922c7a87439793beb93c017322c08ec832f3929d65ace7db85079c6247f2c", - "signature": "7ee922c7a87439793beb93c017322c08ec832f3929d65ace7db85079c6247f2c", - "affectsGlobalScope": false - }, - "../../node_modules/@types/babel__generator/index.d.ts": { - "version": "b25c5f2970d06c729f464c0aeaa64b1a5b5f1355aa93554bb5f9c199b8624b1e", - "signature": "b25c5f2970d06c729f464c0aeaa64b1a5b5f1355aa93554bb5f9c199b8624b1e", - "affectsGlobalScope": false - }, - "../../node_modules/@types/babel__traverse/index.d.ts": { - "version": "cc0e8c69a59c7e4e15bd28e1eebe9a660c47c202e298cb20a93285368051193f", - "signature": "cc0e8c69a59c7e4e15bd28e1eebe9a660c47c202e298cb20a93285368051193f", - "affectsGlobalScope": false - }, - "../../node_modules/@babel/parser/typings/babel-parser.d.ts": { - "version": "fa7d1d20dd776b2dd40931cb3ae865dd624f38edd86f3407344b609e43def590", - "signature": "fa7d1d20dd776b2dd40931cb3ae865dd624f38edd86f3407344b609e43def590", - "affectsGlobalScope": false - }, - "../../node_modules/@types/babel__template/index.d.ts": { - "version": "3e0a34f7207431d967dc32d593d1cda0c23975e9484bc8895b39d96ffca4a0d8", - "signature": "3e0a34f7207431d967dc32d593d1cda0c23975e9484bc8895b39d96ffca4a0d8", - "affectsGlobalScope": false - }, - "../../node_modules/@types/babel__core/index.d.ts": { - "version": "ab3e92a5a46b6ded50c6b9e7de05739fa1de6df50e24a14706a5cc525300548b", - "signature": "ab3e92a5a46b6ded50c6b9e7de05739fa1de6df50e24a14706a5cc525300548b", - "affectsGlobalScope": false - }, - "../../node_modules/@types/chance/index.d.ts": { - "version": "d0fa8f765570b49205ae10ed80fe0eeff59251b7da9ba5b4f8ee6f0d2299fafe", - "signature": "d0fa8f765570b49205ae10ed80fe0eeff59251b7da9ba5b4f8ee6f0d2299fafe", - "affectsGlobalScope": true - }, - "../../node_modules/@types/color-name/index.d.ts": { - "version": "f0cb4b3ab88193e3e51e9e2622e4c375955003f1f81239d72c5b7a95415dad3e", - "signature": "f0cb4b3ab88193e3e51e9e2622e4c375955003f1f81239d72c5b7a95415dad3e", - "affectsGlobalScope": false - }, - "../../node_modules/@types/graceful-fs/index.d.ts": { - "version": "2c7dca525f4e2e5f2b357dacb58ab6c8777995e6d505ef652bcbbf9789ac558f", - "signature": "2c7dca525f4e2e5f2b357dacb58ab6c8777995e6d505ef652bcbbf9789ac558f", - "affectsGlobalScope": false - }, - "../../node_modules/@types/istanbul-lib-coverage/index.d.ts": { - "version": "b7b0f360867e85305ac700e4c6f084d45adfa417a8f5d964b6f609f99ee92772", - "signature": "b7b0f360867e85305ac700e4c6f084d45adfa417a8f5d964b6f609f99ee92772", - "affectsGlobalScope": false - }, - "../../node_modules/@types/istanbul-lib-report/index.d.ts": { - "version": "7eb06594824ada538b1d8b48c3925a83e7db792f47a081a62cf3e5c4e23cf0ee", - "signature": "7eb06594824ada538b1d8b48c3925a83e7db792f47a081a62cf3e5c4e23cf0ee", - "affectsGlobalScope": false - }, - "../../node_modules/@types/istanbul-reports/index.d.ts": { - "version": "029769d13d9917e3284cb2356ed28a6576e8b07ae6a06ee1e672518adf21a102", - "signature": "029769d13d9917e3284cb2356ed28a6576e8b07ae6a06ee1e672518adf21a102", - "affectsGlobalScope": false - }, - "../../node_modules/@types/jest/node_modules/jest-diff/build/cleanupsemantic.d.ts": { - "version": "e222104af6cb9415238ad358488b74d76eceeff238c1268ec6e85655b05341da", - "signature": "e222104af6cb9415238ad358488b74d76eceeff238c1268ec6e85655b05341da", - "affectsGlobalScope": false - }, - "../../node_modules/@types/jest/node_modules/jest-diff/build/types.d.ts": { - "version": "69da61a7b5093dac77fa3bec8be95dcf9a74c95a0e9161edb98bb24e30e439d2", - "signature": "69da61a7b5093dac77fa3bec8be95dcf9a74c95a0e9161edb98bb24e30e439d2", - "affectsGlobalScope": false - }, - "../../node_modules/@types/jest/node_modules/jest-diff/build/difflines.d.ts": { - "version": "eba230221317c985ab1953ccc3edc517f248b37db4fef7875cb2c8d08aff7be7", - "signature": "eba230221317c985ab1953ccc3edc517f248b37db4fef7875cb2c8d08aff7be7", - "affectsGlobalScope": false - }, - "../../node_modules/@types/jest/node_modules/jest-diff/build/printdiffs.d.ts": { - "version": "b83e796810e475da3564c6515bc0ae9577070596a33d89299b7d99f94ecfd921", - "signature": "b83e796810e475da3564c6515bc0ae9577070596a33d89299b7d99f94ecfd921", - "affectsGlobalScope": false - }, - "../../node_modules/@types/jest/node_modules/jest-diff/build/index.d.ts": { - "version": "b4439890c168d646357928431100daac5cbdee1d345a34e6bf6eca9f3abe22bc", - "signature": "b4439890c168d646357928431100daac5cbdee1d345a34e6bf6eca9f3abe22bc", - "affectsGlobalScope": false - }, - "../../node_modules/@types/jest/node_modules/pretty-format/build/types.d.ts": { - "version": "5d72971a459517c44c1379dab9ed248e87a61ba0a1e0f25c9d67e1e640cd9a09", - "signature": "5d72971a459517c44c1379dab9ed248e87a61ba0a1e0f25c9d67e1e640cd9a09", - "affectsGlobalScope": false - }, - "../../node_modules/@types/jest/node_modules/pretty-format/build/index.d.ts": { - "version": "02d734976af36f4273d930bea88b3e62adf6b078cf120c1c63d49aa8d8427c5c", - "signature": "02d734976af36f4273d930bea88b3e62adf6b078cf120c1c63d49aa8d8427c5c", - "affectsGlobalScope": false - }, - "../../node_modules/@types/jest/index.d.ts": { - "version": "f624e578325b8c58e55b30c998b1f4c3ec1b61a9fa66373da4250c89b7880d44", - "signature": "f624e578325b8c58e55b30c998b1f4c3ec1b61a9fa66373da4250c89b7880d44", - "affectsGlobalScope": true - }, - "../../node_modules/@types/jest/ts3.2/index.d.ts": { - "version": "d3002f620eab4bf6476c9da5c0efb2041d46f7df8b3032a5631bd206abef2c75", - "signature": "d3002f620eab4bf6476c9da5c0efb2041d46f7df8b3032a5631bd206abef2c75", - "affectsGlobalScope": true - }, - "../../node_modules/@types/normalize-package-data/index.d.ts": { - "version": "c9ad058b2cc9ce6dc2ed92960d6d009e8c04bef46d3f5312283debca6869f613", - "signature": "c9ad058b2cc9ce6dc2ed92960d6d009e8c04bef46d3f5312283debca6869f613", - "affectsGlobalScope": false - }, - "../../node_modules/@types/prettier/index.d.ts": { - "version": "9f648f662bddda1b68b01992edd275c214838124a43c8d9210e4a61b974ff82d", - "signature": "9f648f662bddda1b68b01992edd275c214838124a43c8d9210e4a61b974ff82d", - "affectsGlobalScope": false - }, - "../../node_modules/@types/stack-utils/index.d.ts": { - "version": "41422586881bcd739b4e62d9b91cd29909f8572aa3e3cdf316b7c50f14708d49", - "signature": "41422586881bcd739b4e62d9b91cd29909f8572aa3e3cdf316b7c50f14708d49", - "affectsGlobalScope": false - }, - "../../node_modules/@types/yargs-parser/index.d.ts": { - "version": "fdfbe321c556c39a2ecf791d537b999591d0849e971dd938d88f460fea0186f6", - "signature": "fdfbe321c556c39a2ecf791d537b999591d0849e971dd938d88f460fea0186f6", - "affectsGlobalScope": false - }, - "../../node_modules/@types/yargs/index.d.ts": { - "version": "27d92f477d76685eff84f9cc352f8a56d024b6bfdac426e37c2c5ece37c4d733", - "signature": "27d92f477d76685eff84f9cc352f8a56d024b6bfdac426e37c2c5ece37c4d733", - "affectsGlobalScope": false - } - }, - "options": { - "incremental": true, - "target": 99, - "module": 1, - "lib": [ - "lib.es2020.d.ts", - "lib.esnext.d.ts" - ], - "declaration": true, - "sourceMap": true, - "outDir": "./", - "strict": true, - "noImplicitAny": true, - "strictNullChecks": true, - "noImplicitThis": true, - "esModuleInterop": true, - "experimentalDecorators": true, - "emitDecoratorMetadata": true, - "forceConsistentCasingInFileNames": true, - "configFilePath": "../tsconfig.json" - }, - "referencedMap": { - "../../node_modules/@babel/parser/typings/babel-parser.d.ts": [ - "../../node_modules/@babel/types/lib/index.d.ts", - "../../node_modules/@types/graceful-fs/index.d.ts", - "../../node_modules/@types/node/fs.d.ts", - "../../node_modules/@types/node/ts3.2/fs.d.ts", - "../../node_modules/@types/node/ts3.2/util.d.ts", - "../../node_modules/@types/node/util.d.ts" - ], - "../../node_modules/@babel/types/lib/index.d.ts": [ - "../../node_modules/@types/graceful-fs/index.d.ts", - "../../node_modules/@types/node/fs.d.ts", - "../../node_modules/@types/node/ts3.2/fs.d.ts", - "../../node_modules/@types/node/ts3.2/util.d.ts", - "../../node_modules/@types/node/util.d.ts" - ], - "../../node_modules/@types/babel__core/index.d.ts": [ - "../../node_modules/@babel/parser/typings/babel-parser.d.ts", - "../../node_modules/@babel/types/lib/index.d.ts", - "../../node_modules/@types/babel__generator/index.d.ts", - "../../node_modules/@types/babel__template/index.d.ts", - "../../node_modules/@types/babel__traverse/index.d.ts", - "../../node_modules/@types/graceful-fs/index.d.ts", - "../../node_modules/@types/node/fs.d.ts", - "../../node_modules/@types/node/ts3.2/fs.d.ts", - "../../node_modules/@types/node/ts3.2/util.d.ts", - "../../node_modules/@types/node/util.d.ts" - ], - "../../node_modules/@types/babel__generator/index.d.ts": [ - "../../node_modules/@babel/types/lib/index.d.ts", - "../../node_modules/@types/graceful-fs/index.d.ts", - "../../node_modules/@types/node/fs.d.ts", - "../../node_modules/@types/node/ts3.2/fs.d.ts", - "../../node_modules/@types/node/ts3.2/util.d.ts", - "../../node_modules/@types/node/util.d.ts" - ], - "../../node_modules/@types/babel__template/index.d.ts": [ - "../../node_modules/@babel/parser/typings/babel-parser.d.ts", - "../../node_modules/@babel/types/lib/index.d.ts", - "../../node_modules/@types/graceful-fs/index.d.ts", - "../../node_modules/@types/node/fs.d.ts", - "../../node_modules/@types/node/ts3.2/fs.d.ts", - "../../node_modules/@types/node/ts3.2/util.d.ts", - "../../node_modules/@types/node/util.d.ts" - ], - "../../node_modules/@types/babel__traverse/index.d.ts": [ - "../../node_modules/@babel/types/lib/index.d.ts", - "../../node_modules/@types/graceful-fs/index.d.ts", - "../../node_modules/@types/node/fs.d.ts", - "../../node_modules/@types/node/ts3.2/fs.d.ts", - "../../node_modules/@types/node/ts3.2/util.d.ts", - "../../node_modules/@types/node/util.d.ts" - ], - "../../node_modules/@types/bn.js/index.d.ts": [ - "../../node_modules/@types/graceful-fs/index.d.ts", - "../../node_modules/@types/node/fs.d.ts", - "../../node_modules/@types/node/ts3.2/fs.d.ts", - "../../node_modules/@types/node/ts3.2/util.d.ts", - "../../node_modules/@types/node/ts3.7/index.d.ts", - "../../node_modules/@types/node/util.d.ts" - ], - "../../node_modules/@types/bs58/index.d.ts": [ - "../../node_modules/@types/graceful-fs/index.d.ts", - "../../node_modules/@types/node/fs.d.ts", - "../../node_modules/@types/node/ts3.2/fs.d.ts", - "../../node_modules/@types/node/ts3.2/util.d.ts", - "../../node_modules/@types/node/util.d.ts", - "../../node_modules/base-x/src/index.d.ts" - ], - "../../node_modules/@types/chance/index.d.ts": [ - "../../node_modules/@types/graceful-fs/index.d.ts", - "../../node_modules/@types/node/fs.d.ts", - "../../node_modules/@types/node/ts3.2/fs.d.ts", - "../../node_modules/@types/node/ts3.2/util.d.ts", - "../../node_modules/@types/node/util.d.ts" - ], - "../../node_modules/@types/color-name/index.d.ts": [ - "../../node_modules/@types/graceful-fs/index.d.ts", - "../../node_modules/@types/node/fs.d.ts", - "../../node_modules/@types/node/ts3.2/fs.d.ts", - "../../node_modules/@types/node/ts3.2/util.d.ts", - "../../node_modules/@types/node/util.d.ts" - ], - "../../node_modules/@types/graceful-fs/index.d.ts": [ - "../../node_modules/@types/node/fs.d.ts", - "../../node_modules/@types/node/ts3.2/fs.d.ts", - "../../node_modules/@types/node/ts3.2/util.d.ts", - "../../node_modules/@types/node/ts3.7/index.d.ts", - "../../node_modules/@types/node/util.d.ts" - ], - "../../node_modules/@types/istanbul-lib-coverage/index.d.ts": [ - "../../node_modules/@types/graceful-fs/index.d.ts", - "../../node_modules/@types/node/fs.d.ts", - "../../node_modules/@types/node/ts3.2/fs.d.ts", - "../../node_modules/@types/node/ts3.2/util.d.ts", - "../../node_modules/@types/node/util.d.ts" - ], - "../../node_modules/@types/istanbul-lib-report/index.d.ts": [ - "../../node_modules/@types/graceful-fs/index.d.ts", - "../../node_modules/@types/istanbul-lib-coverage/index.d.ts", - "../../node_modules/@types/node/fs.d.ts", - "../../node_modules/@types/node/ts3.2/fs.d.ts", - "../../node_modules/@types/node/ts3.2/util.d.ts", - "../../node_modules/@types/node/util.d.ts" - ], - "../../node_modules/@types/istanbul-reports/index.d.ts": [ - "../../node_modules/@types/graceful-fs/index.d.ts", - "../../node_modules/@types/istanbul-lib-coverage/index.d.ts", - "../../node_modules/@types/istanbul-lib-report/index.d.ts", - "../../node_modules/@types/node/fs.d.ts", - "../../node_modules/@types/node/ts3.2/fs.d.ts", - "../../node_modules/@types/node/ts3.2/util.d.ts", - "../../node_modules/@types/node/util.d.ts" - ], - "../../node_modules/@types/jest/index.d.ts": [ - "../../node_modules/@types/graceful-fs/index.d.ts", - "../../node_modules/@types/jest/node_modules/jest-diff/build/index.d.ts", - "../../node_modules/@types/jest/node_modules/pretty-format/build/index.d.ts", - "../../node_modules/@types/node/fs.d.ts", - "../../node_modules/@types/node/ts3.2/fs.d.ts", - "../../node_modules/@types/node/ts3.2/util.d.ts", - "../../node_modules/@types/node/util.d.ts" - ], - "../../node_modules/@types/jest/node_modules/jest-diff/build/cleanupsemantic.d.ts": [ - "../../node_modules/@types/graceful-fs/index.d.ts", - "../../node_modules/@types/node/fs.d.ts", - "../../node_modules/@types/node/ts3.2/fs.d.ts", - "../../node_modules/@types/node/ts3.2/util.d.ts", - "../../node_modules/@types/node/util.d.ts" - ], - "../../node_modules/@types/jest/node_modules/jest-diff/build/difflines.d.ts": [ - "../../node_modules/@types/graceful-fs/index.d.ts", - "../../node_modules/@types/jest/node_modules/jest-diff/build/cleanupsemantic.d.ts", - "../../node_modules/@types/jest/node_modules/jest-diff/build/types.d.ts", - "../../node_modules/@types/node/fs.d.ts", - "../../node_modules/@types/node/ts3.2/fs.d.ts", - "../../node_modules/@types/node/ts3.2/util.d.ts", - "../../node_modules/@types/node/util.d.ts" - ], - "../../node_modules/@types/jest/node_modules/jest-diff/build/index.d.ts": [ - "../../node_modules/@types/graceful-fs/index.d.ts", - "../../node_modules/@types/jest/node_modules/jest-diff/build/cleanupsemantic.d.ts", - "../../node_modules/@types/jest/node_modules/jest-diff/build/difflines.d.ts", - "../../node_modules/@types/jest/node_modules/jest-diff/build/printdiffs.d.ts", - "../../node_modules/@types/jest/node_modules/jest-diff/build/types.d.ts", - "../../node_modules/@types/node/fs.d.ts", - "../../node_modules/@types/node/ts3.2/fs.d.ts", - "../../node_modules/@types/node/ts3.2/util.d.ts", - "../../node_modules/@types/node/util.d.ts" - ], - "../../node_modules/@types/jest/node_modules/jest-diff/build/printdiffs.d.ts": [ - "../../node_modules/@types/graceful-fs/index.d.ts", - "../../node_modules/@types/jest/node_modules/jest-diff/build/cleanupsemantic.d.ts", - "../../node_modules/@types/jest/node_modules/jest-diff/build/types.d.ts", - "../../node_modules/@types/node/fs.d.ts", - "../../node_modules/@types/node/ts3.2/fs.d.ts", - "../../node_modules/@types/node/ts3.2/util.d.ts", - "../../node_modules/@types/node/util.d.ts" - ], - "../../node_modules/@types/jest/node_modules/jest-diff/build/types.d.ts": [ - "../../node_modules/@types/graceful-fs/index.d.ts", - "../../node_modules/@types/node/fs.d.ts", - "../../node_modules/@types/node/ts3.2/fs.d.ts", - "../../node_modules/@types/node/ts3.2/util.d.ts", - "../../node_modules/@types/node/util.d.ts" - ], - "../../node_modules/@types/jest/node_modules/pretty-format/build/index.d.ts": [ - "../../node_modules/@types/graceful-fs/index.d.ts", - "../../node_modules/@types/jest/node_modules/pretty-format/build/types.d.ts", - "../../node_modules/@types/node/fs.d.ts", - "../../node_modules/@types/node/ts3.2/fs.d.ts", - "../../node_modules/@types/node/ts3.2/util.d.ts", - "../../node_modules/@types/node/util.d.ts" - ], - "../../node_modules/@types/jest/node_modules/pretty-format/build/types.d.ts": [ - "../../node_modules/@types/graceful-fs/index.d.ts", - "../../node_modules/@types/node/fs.d.ts", - "../../node_modules/@types/node/ts3.2/fs.d.ts", - "../../node_modules/@types/node/ts3.2/util.d.ts", - "../../node_modules/@types/node/util.d.ts" - ], - "../../node_modules/@types/jest/ts3.2/index.d.ts": [ - "../../node_modules/@types/graceful-fs/index.d.ts", - "../../node_modules/@types/jest/index.d.ts", - "../../node_modules/@types/node/fs.d.ts", - "../../node_modules/@types/node/ts3.2/fs.d.ts", - "../../node_modules/@types/node/ts3.2/util.d.ts", - "../../node_modules/@types/node/util.d.ts" - ], - "../../node_modules/@types/js-base64/index.d.ts": [ - "../../node_modules/@types/graceful-fs/index.d.ts", - "../../node_modules/@types/node/fs.d.ts", - "../../node_modules/@types/node/ts3.2/fs.d.ts", - "../../node_modules/@types/node/ts3.2/util.d.ts", - "../../node_modules/@types/node/util.d.ts" - ], - "../../node_modules/@types/node/async_hooks.d.ts": [ - "../../node_modules/@types/graceful-fs/index.d.ts", - "../../node_modules/@types/node/fs.d.ts", - "../../node_modules/@types/node/ts3.2/fs.d.ts", - "../../node_modules/@types/node/ts3.2/util.d.ts", - "../../node_modules/@types/node/util.d.ts" - ], - "../../node_modules/@types/node/base.d.ts": [ - "../../node_modules/@types/graceful-fs/index.d.ts", - "../../node_modules/@types/node/async_hooks.d.ts", - "../../node_modules/@types/node/buffer.d.ts", - "../../node_modules/@types/node/child_process.d.ts", - "../../node_modules/@types/node/cluster.d.ts", - "../../node_modules/@types/node/console.d.ts", - "../../node_modules/@types/node/constants.d.ts", - "../../node_modules/@types/node/crypto.d.ts", - "../../node_modules/@types/node/dgram.d.ts", - "../../node_modules/@types/node/dns.d.ts", - "../../node_modules/@types/node/domain.d.ts", - "../../node_modules/@types/node/events.d.ts", - "../../node_modules/@types/node/fs.d.ts", - "../../node_modules/@types/node/fs/promises.d.ts", - "../../node_modules/@types/node/globals.d.ts", - "../../node_modules/@types/node/http.d.ts", - "../../node_modules/@types/node/http2.d.ts", - "../../node_modules/@types/node/https.d.ts", - "../../node_modules/@types/node/inspector.d.ts", - "../../node_modules/@types/node/module.d.ts", - "../../node_modules/@types/node/net.d.ts", - "../../node_modules/@types/node/os.d.ts", - "../../node_modules/@types/node/path.d.ts", - "../../node_modules/@types/node/perf_hooks.d.ts", - "../../node_modules/@types/node/process.d.ts", - "../../node_modules/@types/node/punycode.d.ts", - "../../node_modules/@types/node/querystring.d.ts", - "../../node_modules/@types/node/readline.d.ts", - "../../node_modules/@types/node/repl.d.ts", - "../../node_modules/@types/node/stream.d.ts", - "../../node_modules/@types/node/string_decoder.d.ts", - "../../node_modules/@types/node/timers.d.ts", - "../../node_modules/@types/node/tls.d.ts", - "../../node_modules/@types/node/trace_events.d.ts", - "../../node_modules/@types/node/ts3.2/fs.d.ts", - "../../node_modules/@types/node/ts3.2/util.d.ts", - "../../node_modules/@types/node/tty.d.ts", - "../../node_modules/@types/node/url.d.ts", - "../../node_modules/@types/node/util.d.ts", - "../../node_modules/@types/node/v8.d.ts", - "../../node_modules/@types/node/vm.d.ts", - "../../node_modules/@types/node/worker_threads.d.ts", - "../../node_modules/@types/node/zlib.d.ts" - ], - "../../node_modules/@types/node/buffer.d.ts": [ - "../../node_modules/@types/graceful-fs/index.d.ts", - "../../node_modules/@types/node/fs.d.ts", - "../../node_modules/@types/node/ts3.2/fs.d.ts", - "../../node_modules/@types/node/ts3.2/util.d.ts", - "../../node_modules/@types/node/util.d.ts" - ], - "../../node_modules/@types/node/child_process.d.ts": [ - "../../node_modules/@types/graceful-fs/index.d.ts", - "../../node_modules/@types/node/events.d.ts", - "../../node_modules/@types/node/fs.d.ts", - "../../node_modules/@types/node/net.d.ts", - "../../node_modules/@types/node/stream.d.ts", - "../../node_modules/@types/node/ts3.2/fs.d.ts", - "../../node_modules/@types/node/ts3.2/util.d.ts", - "../../node_modules/@types/node/util.d.ts" - ], - "../../node_modules/@types/node/cluster.d.ts": [ - "../../node_modules/@types/graceful-fs/index.d.ts", - "../../node_modules/@types/node/child_process.d.ts", - "../../node_modules/@types/node/events.d.ts", - "../../node_modules/@types/node/fs.d.ts", - "../../node_modules/@types/node/net.d.ts", - "../../node_modules/@types/node/ts3.2/fs.d.ts", - "../../node_modules/@types/node/ts3.2/util.d.ts", - "../../node_modules/@types/node/util.d.ts" - ], - "../../node_modules/@types/node/console.d.ts": [ - "../../node_modules/@types/graceful-fs/index.d.ts", - "../../node_modules/@types/node/fs.d.ts", - "../../node_modules/@types/node/ts3.2/fs.d.ts", - "../../node_modules/@types/node/ts3.2/util.d.ts", - "../../node_modules/@types/node/util.d.ts" - ], - "../../node_modules/@types/node/constants.d.ts": [ - "../../node_modules/@types/graceful-fs/index.d.ts", - "../../node_modules/@types/node/crypto.d.ts", - "../../node_modules/@types/node/fs.d.ts", - "../../node_modules/@types/node/os.d.ts", - "../../node_modules/@types/node/ts3.2/fs.d.ts", - "../../node_modules/@types/node/ts3.2/util.d.ts", - "../../node_modules/@types/node/util.d.ts" - ], - "../../node_modules/@types/node/crypto.d.ts": [ - "../../node_modules/@types/graceful-fs/index.d.ts", - "../../node_modules/@types/node/fs.d.ts", - "../../node_modules/@types/node/stream.d.ts", - "../../node_modules/@types/node/ts3.2/fs.d.ts", - "../../node_modules/@types/node/ts3.2/util.d.ts", - "../../node_modules/@types/node/util.d.ts" - ], - "../../node_modules/@types/node/dgram.d.ts": [ - "../../node_modules/@types/graceful-fs/index.d.ts", - "../../node_modules/@types/node/dns.d.ts", - "../../node_modules/@types/node/events.d.ts", - "../../node_modules/@types/node/fs.d.ts", - "../../node_modules/@types/node/net.d.ts", - "../../node_modules/@types/node/ts3.2/fs.d.ts", - "../../node_modules/@types/node/ts3.2/util.d.ts", - "../../node_modules/@types/node/util.d.ts" - ], - "../../node_modules/@types/node/dns.d.ts": [ - "../../node_modules/@types/graceful-fs/index.d.ts", - "../../node_modules/@types/node/fs.d.ts", - "../../node_modules/@types/node/ts3.2/fs.d.ts", - "../../node_modules/@types/node/ts3.2/util.d.ts", - "../../node_modules/@types/node/util.d.ts" - ], - "../../node_modules/@types/node/domain.d.ts": [ - "../../node_modules/@types/graceful-fs/index.d.ts", - "../../node_modules/@types/node/events.d.ts", - "../../node_modules/@types/node/fs.d.ts", - "../../node_modules/@types/node/ts3.2/fs.d.ts", - "../../node_modules/@types/node/ts3.2/util.d.ts", - "../../node_modules/@types/node/util.d.ts" - ], - "../../node_modules/@types/node/events.d.ts": [ - "../../node_modules/@types/graceful-fs/index.d.ts", - "../../node_modules/@types/node/fs.d.ts", - "../../node_modules/@types/node/ts3.2/fs.d.ts", - "../../node_modules/@types/node/ts3.2/util.d.ts", - "../../node_modules/@types/node/util.d.ts" - ], - "../../node_modules/@types/node/fs.d.ts": [ - "../../node_modules/@types/graceful-fs/index.d.ts", - "../../node_modules/@types/node/events.d.ts", - "../../node_modules/@types/node/fs/promises.d.ts", - "../../node_modules/@types/node/stream.d.ts", - "../../node_modules/@types/node/ts3.2/fs.d.ts", - "../../node_modules/@types/node/ts3.2/util.d.ts", - "../../node_modules/@types/node/url.d.ts", - "../../node_modules/@types/node/util.d.ts" - ], - "../../node_modules/@types/node/fs/promises.d.ts": [ - "../../node_modules/@types/graceful-fs/index.d.ts", - "../../node_modules/@types/node/fs.d.ts", - "../../node_modules/@types/node/ts3.2/fs.d.ts", - "../../node_modules/@types/node/ts3.2/util.d.ts", - "../../node_modules/@types/node/util.d.ts" - ], - "../../node_modules/@types/node/globals.d.ts": [ - "../../node_modules/@types/graceful-fs/index.d.ts", - "../../node_modules/@types/node/fs.d.ts", - "../../node_modules/@types/node/ts3.2/fs.d.ts", - "../../node_modules/@types/node/ts3.2/util.d.ts", - "../../node_modules/@types/node/util.d.ts" - ], - "../../node_modules/@types/node/http.d.ts": [ - "../../node_modules/@types/graceful-fs/index.d.ts", - "../../node_modules/@types/node/events.d.ts", - "../../node_modules/@types/node/fs.d.ts", - "../../node_modules/@types/node/net.d.ts", - "../../node_modules/@types/node/stream.d.ts", - "../../node_modules/@types/node/ts3.2/fs.d.ts", - "../../node_modules/@types/node/ts3.2/util.d.ts", - "../../node_modules/@types/node/url.d.ts", - "../../node_modules/@types/node/util.d.ts" - ], - "../../node_modules/@types/node/http2.d.ts": [ - "../../node_modules/@types/graceful-fs/index.d.ts", - "../../node_modules/@types/node/events.d.ts", - "../../node_modules/@types/node/fs.d.ts", - "../../node_modules/@types/node/http.d.ts", - "../../node_modules/@types/node/net.d.ts", - "../../node_modules/@types/node/stream.d.ts", - "../../node_modules/@types/node/tls.d.ts", - "../../node_modules/@types/node/ts3.2/fs.d.ts", - "../../node_modules/@types/node/ts3.2/util.d.ts", - "../../node_modules/@types/node/url.d.ts", - "../../node_modules/@types/node/util.d.ts" - ], - "../../node_modules/@types/node/https.d.ts": [ - "../../node_modules/@types/graceful-fs/index.d.ts", - "../../node_modules/@types/node/events.d.ts", - "../../node_modules/@types/node/fs.d.ts", - "../../node_modules/@types/node/http.d.ts", - "../../node_modules/@types/node/tls.d.ts", - "../../node_modules/@types/node/ts3.2/fs.d.ts", - "../../node_modules/@types/node/ts3.2/util.d.ts", - "../../node_modules/@types/node/url.d.ts", - "../../node_modules/@types/node/util.d.ts" - ], - "../../node_modules/@types/node/inspector.d.ts": [ - "../../node_modules/@types/graceful-fs/index.d.ts", - "../../node_modules/@types/node/events.d.ts", - "../../node_modules/@types/node/fs.d.ts", - "../../node_modules/@types/node/ts3.2/fs.d.ts", - "../../node_modules/@types/node/ts3.2/util.d.ts", - "../../node_modules/@types/node/util.d.ts" - ], - "../../node_modules/@types/node/module.d.ts": [ - "../../node_modules/@types/graceful-fs/index.d.ts", - "../../node_modules/@types/node/fs.d.ts", - "../../node_modules/@types/node/ts3.2/fs.d.ts", - "../../node_modules/@types/node/ts3.2/util.d.ts", - "../../node_modules/@types/node/url.d.ts", - "../../node_modules/@types/node/util.d.ts" - ], - "../../node_modules/@types/node/net.d.ts": [ - "../../node_modules/@types/graceful-fs/index.d.ts", - "../../node_modules/@types/node/dns.d.ts", - "../../node_modules/@types/node/events.d.ts", - "../../node_modules/@types/node/fs.d.ts", - "../../node_modules/@types/node/stream.d.ts", - "../../node_modules/@types/node/ts3.2/fs.d.ts", - "../../node_modules/@types/node/ts3.2/util.d.ts", - "../../node_modules/@types/node/util.d.ts" - ], - "../../node_modules/@types/node/os.d.ts": [ - "../../node_modules/@types/graceful-fs/index.d.ts", - "../../node_modules/@types/node/fs.d.ts", - "../../node_modules/@types/node/ts3.2/fs.d.ts", - "../../node_modules/@types/node/ts3.2/util.d.ts", - "../../node_modules/@types/node/util.d.ts" - ], - "../../node_modules/@types/node/path.d.ts": [ - "../../node_modules/@types/graceful-fs/index.d.ts", - "../../node_modules/@types/node/fs.d.ts", - "../../node_modules/@types/node/ts3.2/fs.d.ts", - "../../node_modules/@types/node/ts3.2/util.d.ts", - "../../node_modules/@types/node/util.d.ts" - ], - "../../node_modules/@types/node/perf_hooks.d.ts": [ - "../../node_modules/@types/graceful-fs/index.d.ts", - "../../node_modules/@types/node/async_hooks.d.ts", - "../../node_modules/@types/node/fs.d.ts", - "../../node_modules/@types/node/ts3.2/fs.d.ts", - "../../node_modules/@types/node/ts3.2/util.d.ts", - "../../node_modules/@types/node/util.d.ts" - ], - "../../node_modules/@types/node/process.d.ts": [ - "../../node_modules/@types/graceful-fs/index.d.ts", - "../../node_modules/@types/node/fs.d.ts", - "../../node_modules/@types/node/ts3.2/fs.d.ts", - "../../node_modules/@types/node/ts3.2/util.d.ts", - "../../node_modules/@types/node/tty.d.ts", - "../../node_modules/@types/node/util.d.ts" - ], - "../../node_modules/@types/node/punycode.d.ts": [ - "../../node_modules/@types/graceful-fs/index.d.ts", - "../../node_modules/@types/node/fs.d.ts", - "../../node_modules/@types/node/ts3.2/fs.d.ts", - "../../node_modules/@types/node/ts3.2/util.d.ts", - "../../node_modules/@types/node/util.d.ts" - ], - "../../node_modules/@types/node/querystring.d.ts": [ - "../../node_modules/@types/graceful-fs/index.d.ts", - "../../node_modules/@types/node/fs.d.ts", - "../../node_modules/@types/node/ts3.2/fs.d.ts", - "../../node_modules/@types/node/ts3.2/util.d.ts", - "../../node_modules/@types/node/util.d.ts" - ], - "../../node_modules/@types/node/readline.d.ts": [ - "../../node_modules/@types/graceful-fs/index.d.ts", - "../../node_modules/@types/node/events.d.ts", - "../../node_modules/@types/node/fs.d.ts", - "../../node_modules/@types/node/stream.d.ts", - "../../node_modules/@types/node/ts3.2/fs.d.ts", - "../../node_modules/@types/node/ts3.2/util.d.ts", - "../../node_modules/@types/node/util.d.ts" - ], - "../../node_modules/@types/node/repl.d.ts": [ - "../../node_modules/@types/graceful-fs/index.d.ts", - "../../node_modules/@types/node/fs.d.ts", - "../../node_modules/@types/node/readline.d.ts", - "../../node_modules/@types/node/ts3.2/fs.d.ts", - "../../node_modules/@types/node/ts3.2/util.d.ts", - "../../node_modules/@types/node/util.d.ts", - "../../node_modules/@types/node/vm.d.ts" - ], - "../../node_modules/@types/node/stream.d.ts": [ - "../../node_modules/@types/graceful-fs/index.d.ts", - "../../node_modules/@types/node/events.d.ts", - "../../node_modules/@types/node/fs.d.ts", - "../../node_modules/@types/node/ts3.2/fs.d.ts", - "../../node_modules/@types/node/ts3.2/util.d.ts", - "../../node_modules/@types/node/util.d.ts" - ], - "../../node_modules/@types/node/string_decoder.d.ts": [ - "../../node_modules/@types/graceful-fs/index.d.ts", - "../../node_modules/@types/node/fs.d.ts", - "../../node_modules/@types/node/ts3.2/fs.d.ts", - "../../node_modules/@types/node/ts3.2/util.d.ts", - "../../node_modules/@types/node/util.d.ts" - ], - "../../node_modules/@types/node/timers.d.ts": [ - "../../node_modules/@types/graceful-fs/index.d.ts", - "../../node_modules/@types/node/fs.d.ts", - "../../node_modules/@types/node/ts3.2/fs.d.ts", - "../../node_modules/@types/node/ts3.2/util.d.ts", - "../../node_modules/@types/node/util.d.ts" - ], - "../../node_modules/@types/node/tls.d.ts": [ - "../../node_modules/@types/graceful-fs/index.d.ts", - "../../node_modules/@types/node/crypto.d.ts", - "../../node_modules/@types/node/dns.d.ts", - "../../node_modules/@types/node/fs.d.ts", - "../../node_modules/@types/node/net.d.ts", - "../../node_modules/@types/node/stream.d.ts", - "../../node_modules/@types/node/ts3.2/fs.d.ts", - "../../node_modules/@types/node/ts3.2/util.d.ts", - "../../node_modules/@types/node/util.d.ts" - ], - "../../node_modules/@types/node/trace_events.d.ts": [ - "../../node_modules/@types/graceful-fs/index.d.ts", - "../../node_modules/@types/node/fs.d.ts", - "../../node_modules/@types/node/ts3.2/fs.d.ts", - "../../node_modules/@types/node/ts3.2/util.d.ts", - "../../node_modules/@types/node/util.d.ts" - ], - "../../node_modules/@types/node/ts3.2/base.d.ts": [ - "../../node_modules/@types/graceful-fs/index.d.ts", - "../../node_modules/@types/node/base.d.ts", - "../../node_modules/@types/node/fs.d.ts", - "../../node_modules/@types/node/ts3.2/fs.d.ts", - "../../node_modules/@types/node/ts3.2/globals.d.ts", - "../../node_modules/@types/node/ts3.2/util.d.ts", - "../../node_modules/@types/node/util.d.ts" - ], - "../../node_modules/@types/node/ts3.2/fs.d.ts": [ - "../../node_modules/@types/graceful-fs/index.d.ts", - "../../node_modules/@types/node/fs.d.ts", - "../../node_modules/@types/node/ts3.2/util.d.ts", - "../../node_modules/@types/node/util.d.ts" - ], - "../../node_modules/@types/node/ts3.2/globals.d.ts": [ - "../../node_modules/@types/graceful-fs/index.d.ts", - "../../node_modules/@types/node/fs.d.ts", - "../../node_modules/@types/node/globals.d.ts", - "../../node_modules/@types/node/ts3.2/fs.d.ts", - "../../node_modules/@types/node/ts3.2/util.d.ts", - "../../node_modules/@types/node/util.d.ts" - ], - "../../node_modules/@types/node/ts3.2/util.d.ts": [ - "../../node_modules/@types/graceful-fs/index.d.ts", - "../../node_modules/@types/node/fs.d.ts", - "../../node_modules/@types/node/ts3.2/fs.d.ts", - "../../node_modules/@types/node/util.d.ts" - ], - "../../node_modules/@types/node/ts3.5/base.d.ts": [ - "../../node_modules/@types/graceful-fs/index.d.ts", - "../../node_modules/@types/node/fs.d.ts", - "../../node_modules/@types/node/ts3.2/base.d.ts", - "../../node_modules/@types/node/ts3.2/fs.d.ts", - "../../node_modules/@types/node/ts3.2/util.d.ts", - "../../node_modules/@types/node/ts3.5/globals.global.d.ts", - "../../node_modules/@types/node/ts3.5/wasi.d.ts", - "../../node_modules/@types/node/util.d.ts" - ], - "../../node_modules/@types/node/ts3.5/globals.global.d.ts": [ - "../../node_modules/@types/graceful-fs/index.d.ts", - "../../node_modules/@types/node/fs.d.ts", - "../../node_modules/@types/node/ts3.2/fs.d.ts", - "../../node_modules/@types/node/ts3.2/util.d.ts", - "../../node_modules/@types/node/util.d.ts" - ], - "../../node_modules/@types/node/ts3.5/wasi.d.ts": [ - "../../node_modules/@types/graceful-fs/index.d.ts", - "../../node_modules/@types/node/fs.d.ts", - "../../node_modules/@types/node/ts3.2/fs.d.ts", - "../../node_modules/@types/node/ts3.2/util.d.ts", - "../../node_modules/@types/node/util.d.ts" - ], - "../../node_modules/@types/node/ts3.7/assert.d.ts": [ - "../../node_modules/@types/graceful-fs/index.d.ts", - "../../node_modules/@types/node/fs.d.ts", - "../../node_modules/@types/node/ts3.2/fs.d.ts", - "../../node_modules/@types/node/ts3.2/util.d.ts", - "../../node_modules/@types/node/util.d.ts" - ], - "../../node_modules/@types/node/ts3.7/base.d.ts": [ - "../../node_modules/@types/graceful-fs/index.d.ts", - "../../node_modules/@types/node/fs.d.ts", - "../../node_modules/@types/node/ts3.2/fs.d.ts", - "../../node_modules/@types/node/ts3.2/util.d.ts", - "../../node_modules/@types/node/ts3.5/base.d.ts", - "../../node_modules/@types/node/ts3.7/assert.d.ts", - "../../node_modules/@types/node/util.d.ts" - ], - "../../node_modules/@types/node/ts3.7/index.d.ts": [ - "../../node_modules/@types/graceful-fs/index.d.ts", - "../../node_modules/@types/node/fs.d.ts", - "../../node_modules/@types/node/ts3.2/fs.d.ts", - "../../node_modules/@types/node/ts3.2/util.d.ts", - "../../node_modules/@types/node/ts3.7/base.d.ts", - "../../node_modules/@types/node/util.d.ts" - ], - "../../node_modules/@types/node/tty.d.ts": [ - "../../node_modules/@types/graceful-fs/index.d.ts", - "../../node_modules/@types/node/fs.d.ts", - "../../node_modules/@types/node/net.d.ts", - "../../node_modules/@types/node/ts3.2/fs.d.ts", - "../../node_modules/@types/node/ts3.2/util.d.ts", - "../../node_modules/@types/node/util.d.ts" - ], - "../../node_modules/@types/node/url.d.ts": [ - "../../node_modules/@types/graceful-fs/index.d.ts", - "../../node_modules/@types/node/fs.d.ts", - "../../node_modules/@types/node/querystring.d.ts", - "../../node_modules/@types/node/ts3.2/fs.d.ts", - "../../node_modules/@types/node/ts3.2/util.d.ts", - "../../node_modules/@types/node/util.d.ts" - ], - "../../node_modules/@types/node/util.d.ts": [ - "../../node_modules/@types/graceful-fs/index.d.ts", - "../../node_modules/@types/node/fs.d.ts", - "../../node_modules/@types/node/ts3.2/fs.d.ts", - "../../node_modules/@types/node/ts3.2/util.d.ts" - ], - "../../node_modules/@types/node/v8.d.ts": [ - "../../node_modules/@types/graceful-fs/index.d.ts", - "../../node_modules/@types/node/fs.d.ts", - "../../node_modules/@types/node/stream.d.ts", - "../../node_modules/@types/node/ts3.2/fs.d.ts", - "../../node_modules/@types/node/ts3.2/util.d.ts", - "../../node_modules/@types/node/util.d.ts" - ], - "../../node_modules/@types/node/vm.d.ts": [ - "../../node_modules/@types/graceful-fs/index.d.ts", - "../../node_modules/@types/node/fs.d.ts", - "../../node_modules/@types/node/ts3.2/fs.d.ts", - "../../node_modules/@types/node/ts3.2/util.d.ts", - "../../node_modules/@types/node/util.d.ts" - ], - "../../node_modules/@types/node/worker_threads.d.ts": [ - "../../node_modules/@types/graceful-fs/index.d.ts", - "../../node_modules/@types/node/events.d.ts", - "../../node_modules/@types/node/fs.d.ts", - "../../node_modules/@types/node/stream.d.ts", - "../../node_modules/@types/node/ts3.2/fs.d.ts", - "../../node_modules/@types/node/ts3.2/util.d.ts", - "../../node_modules/@types/node/url.d.ts", - "../../node_modules/@types/node/util.d.ts", - "../../node_modules/@types/node/vm.d.ts" - ], - "../../node_modules/@types/node/zlib.d.ts": [ - "../../node_modules/@types/graceful-fs/index.d.ts", - "../../node_modules/@types/node/fs.d.ts", - "../../node_modules/@types/node/stream.d.ts", - "../../node_modules/@types/node/ts3.2/fs.d.ts", - "../../node_modules/@types/node/ts3.2/util.d.ts", - "../../node_modules/@types/node/util.d.ts" - ], - "../../node_modules/@types/normalize-package-data/index.d.ts": [ - "../../node_modules/@types/graceful-fs/index.d.ts", - "../../node_modules/@types/node/fs.d.ts", - "../../node_modules/@types/node/ts3.2/fs.d.ts", - "../../node_modules/@types/node/ts3.2/util.d.ts", - "../../node_modules/@types/node/util.d.ts" - ], - "../../node_modules/@types/prettier/index.d.ts": [ - "../../node_modules/@types/graceful-fs/index.d.ts", - "../../node_modules/@types/node/fs.d.ts", - "../../node_modules/@types/node/ts3.2/fs.d.ts", - "../../node_modules/@types/node/ts3.2/util.d.ts", - "../../node_modules/@types/node/util.d.ts" - ], - "../../node_modules/@types/stack-utils/index.d.ts": [ - "../../node_modules/@types/graceful-fs/index.d.ts", - "../../node_modules/@types/node/fs.d.ts", - "../../node_modules/@types/node/ts3.2/fs.d.ts", - "../../node_modules/@types/node/ts3.2/util.d.ts", - "../../node_modules/@types/node/util.d.ts" - ], - "../../node_modules/@types/yargs-parser/index.d.ts": [ - "../../node_modules/@types/graceful-fs/index.d.ts", - "../../node_modules/@types/node/fs.d.ts", - "../../node_modules/@types/node/ts3.2/fs.d.ts", - "../../node_modules/@types/node/ts3.2/util.d.ts", - "../../node_modules/@types/node/util.d.ts" - ], - "../../node_modules/@types/yargs/index.d.ts": [ - "../../node_modules/@types/graceful-fs/index.d.ts", - "../../node_modules/@types/node/fs.d.ts", - "../../node_modules/@types/node/ts3.2/fs.d.ts", - "../../node_modules/@types/node/ts3.2/util.d.ts", - "../../node_modules/@types/node/util.d.ts", - "../../node_modules/@types/yargs-parser/index.d.ts" - ], - "../../node_modules/base-x/src/index.d.ts": [ - "../../node_modules/@types/graceful-fs/index.d.ts", - "../../node_modules/@types/node/fs.d.ts", - "../../node_modules/@types/node/ts3.2/fs.d.ts", - "../../node_modules/@types/node/ts3.2/util.d.ts", - "../../node_modules/@types/node/ts3.7/index.d.ts", - "../../node_modules/@types/node/util.d.ts" - ], - "../../node_modules/typescript/lib/lib.es2015.collection.d.ts": [ - "../../node_modules/@types/graceful-fs/index.d.ts", - "../../node_modules/@types/node/fs.d.ts", - "../../node_modules/@types/node/ts3.2/fs.d.ts", - "../../node_modules/@types/node/ts3.2/util.d.ts", - "../../node_modules/@types/node/util.d.ts" - ], - "../../node_modules/typescript/lib/lib.es2015.core.d.ts": [ - "../../node_modules/@types/graceful-fs/index.d.ts", - "../../node_modules/@types/node/fs.d.ts", - "../../node_modules/@types/node/ts3.2/fs.d.ts", - "../../node_modules/@types/node/ts3.2/util.d.ts", - "../../node_modules/@types/node/util.d.ts" - ], - "../../node_modules/typescript/lib/lib.es2015.d.ts": [ - "../../node_modules/@types/graceful-fs/index.d.ts", - "../../node_modules/@types/node/fs.d.ts", - "../../node_modules/@types/node/ts3.2/fs.d.ts", - "../../node_modules/@types/node/ts3.2/util.d.ts", - "../../node_modules/@types/node/util.d.ts" - ], - "../../node_modules/typescript/lib/lib.es2015.generator.d.ts": [ - "../../node_modules/@types/graceful-fs/index.d.ts", - "../../node_modules/@types/node/fs.d.ts", - "../../node_modules/@types/node/ts3.2/fs.d.ts", - "../../node_modules/@types/node/ts3.2/util.d.ts", - "../../node_modules/@types/node/util.d.ts" - ], - "../../node_modules/typescript/lib/lib.es2015.iterable.d.ts": [ - "../../node_modules/@types/graceful-fs/index.d.ts", - "../../node_modules/@types/node/fs.d.ts", - "../../node_modules/@types/node/ts3.2/fs.d.ts", - "../../node_modules/@types/node/ts3.2/util.d.ts", - "../../node_modules/@types/node/util.d.ts" - ], - "../../node_modules/typescript/lib/lib.es2015.promise.d.ts": [ - "../../node_modules/@types/graceful-fs/index.d.ts", - "../../node_modules/@types/node/fs.d.ts", - "../../node_modules/@types/node/ts3.2/fs.d.ts", - "../../node_modules/@types/node/ts3.2/util.d.ts", - "../../node_modules/@types/node/util.d.ts" - ], - "../../node_modules/typescript/lib/lib.es2015.proxy.d.ts": [ - "../../node_modules/@types/graceful-fs/index.d.ts", - "../../node_modules/@types/node/fs.d.ts", - "../../node_modules/@types/node/ts3.2/fs.d.ts", - "../../node_modules/@types/node/ts3.2/util.d.ts", - "../../node_modules/@types/node/util.d.ts" - ], - "../../node_modules/typescript/lib/lib.es2015.reflect.d.ts": [ - "../../node_modules/@types/graceful-fs/index.d.ts", - "../../node_modules/@types/node/fs.d.ts", - "../../node_modules/@types/node/ts3.2/fs.d.ts", - "../../node_modules/@types/node/ts3.2/util.d.ts", - "../../node_modules/@types/node/util.d.ts" - ], - "../../node_modules/typescript/lib/lib.es2015.symbol.d.ts": [ - "../../node_modules/@types/graceful-fs/index.d.ts", - "../../node_modules/@types/node/fs.d.ts", - "../../node_modules/@types/node/ts3.2/fs.d.ts", - "../../node_modules/@types/node/ts3.2/util.d.ts", - "../../node_modules/@types/node/util.d.ts" - ], - "../../node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts": [ - "../../node_modules/@types/graceful-fs/index.d.ts", - "../../node_modules/@types/node/fs.d.ts", - "../../node_modules/@types/node/ts3.2/fs.d.ts", - "../../node_modules/@types/node/ts3.2/util.d.ts", - "../../node_modules/@types/node/util.d.ts" - ], - "../../node_modules/typescript/lib/lib.es2016.array.include.d.ts": [ - "../../node_modules/@types/graceful-fs/index.d.ts", - "../../node_modules/@types/node/fs.d.ts", - "../../node_modules/@types/node/ts3.2/fs.d.ts", - "../../node_modules/@types/node/ts3.2/util.d.ts", - "../../node_modules/@types/node/util.d.ts" - ], - "../../node_modules/typescript/lib/lib.es2016.d.ts": [ - "../../node_modules/@types/graceful-fs/index.d.ts", - "../../node_modules/@types/node/fs.d.ts", - "../../node_modules/@types/node/ts3.2/fs.d.ts", - "../../node_modules/@types/node/ts3.2/util.d.ts", - "../../node_modules/@types/node/util.d.ts" - ], - "../../node_modules/typescript/lib/lib.es2017.d.ts": [ - "../../node_modules/@types/graceful-fs/index.d.ts", - "../../node_modules/@types/node/fs.d.ts", - "../../node_modules/@types/node/ts3.2/fs.d.ts", - "../../node_modules/@types/node/ts3.2/util.d.ts", - "../../node_modules/@types/node/util.d.ts" - ], - "../../node_modules/typescript/lib/lib.es2017.intl.d.ts": [ - "../../node_modules/@types/graceful-fs/index.d.ts", - "../../node_modules/@types/node/fs.d.ts", - "../../node_modules/@types/node/ts3.2/fs.d.ts", - "../../node_modules/@types/node/ts3.2/util.d.ts", - "../../node_modules/@types/node/util.d.ts" - ], - "../../node_modules/typescript/lib/lib.es2017.object.d.ts": [ - "../../node_modules/@types/graceful-fs/index.d.ts", - "../../node_modules/@types/node/fs.d.ts", - "../../node_modules/@types/node/ts3.2/fs.d.ts", - "../../node_modules/@types/node/ts3.2/util.d.ts", - "../../node_modules/@types/node/util.d.ts" - ], - "../../node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts": [ - "../../node_modules/@types/graceful-fs/index.d.ts", - "../../node_modules/@types/node/fs.d.ts", - "../../node_modules/@types/node/ts3.2/fs.d.ts", - "../../node_modules/@types/node/ts3.2/util.d.ts", - "../../node_modules/@types/node/util.d.ts" - ], - "../../node_modules/typescript/lib/lib.es2017.string.d.ts": [ - "../../node_modules/@types/graceful-fs/index.d.ts", - "../../node_modules/@types/node/fs.d.ts", - "../../node_modules/@types/node/ts3.2/fs.d.ts", - "../../node_modules/@types/node/ts3.2/util.d.ts", - "../../node_modules/@types/node/util.d.ts" - ], - "../../node_modules/typescript/lib/lib.es2017.typedarrays.d.ts": [ - "../../node_modules/@types/graceful-fs/index.d.ts", - "../../node_modules/@types/node/fs.d.ts", - "../../node_modules/@types/node/ts3.2/fs.d.ts", - "../../node_modules/@types/node/ts3.2/util.d.ts", - "../../node_modules/@types/node/util.d.ts" - ], - "../../node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts": [ - "../../node_modules/@types/graceful-fs/index.d.ts", - "../../node_modules/@types/node/fs.d.ts", - "../../node_modules/@types/node/ts3.2/fs.d.ts", - "../../node_modules/@types/node/ts3.2/util.d.ts", - "../../node_modules/@types/node/util.d.ts" - ], - "../../node_modules/typescript/lib/lib.es2018.asynciterable.d.ts": [ - "../../node_modules/@types/graceful-fs/index.d.ts", - "../../node_modules/@types/node/fs.d.ts", - "../../node_modules/@types/node/ts3.2/fs.d.ts", - "../../node_modules/@types/node/ts3.2/util.d.ts", - "../../node_modules/@types/node/util.d.ts" - ], - "../../node_modules/typescript/lib/lib.es2018.d.ts": [ - "../../node_modules/@types/graceful-fs/index.d.ts", - "../../node_modules/@types/node/fs.d.ts", - "../../node_modules/@types/node/ts3.2/fs.d.ts", - "../../node_modules/@types/node/ts3.2/util.d.ts", - "../../node_modules/@types/node/util.d.ts" - ], - "../../node_modules/typescript/lib/lib.es2018.intl.d.ts": [ - "../../node_modules/@types/graceful-fs/index.d.ts", - "../../node_modules/@types/node/fs.d.ts", - "../../node_modules/@types/node/ts3.2/fs.d.ts", - "../../node_modules/@types/node/ts3.2/util.d.ts", - "../../node_modules/@types/node/util.d.ts" - ], - "../../node_modules/typescript/lib/lib.es2018.promise.d.ts": [ - "../../node_modules/@types/graceful-fs/index.d.ts", - "../../node_modules/@types/node/fs.d.ts", - "../../node_modules/@types/node/ts3.2/fs.d.ts", - "../../node_modules/@types/node/ts3.2/util.d.ts", - "../../node_modules/@types/node/util.d.ts" - ], - "../../node_modules/typescript/lib/lib.es2018.regexp.d.ts": [ - "../../node_modules/@types/graceful-fs/index.d.ts", - "../../node_modules/@types/node/fs.d.ts", - "../../node_modules/@types/node/ts3.2/fs.d.ts", - "../../node_modules/@types/node/ts3.2/util.d.ts", - "../../node_modules/@types/node/util.d.ts" - ], - "../../node_modules/typescript/lib/lib.es2019.array.d.ts": [ - "../../node_modules/@types/graceful-fs/index.d.ts", - "../../node_modules/@types/node/fs.d.ts", - "../../node_modules/@types/node/ts3.2/fs.d.ts", - "../../node_modules/@types/node/ts3.2/util.d.ts", - "../../node_modules/@types/node/util.d.ts" - ], - "../../node_modules/typescript/lib/lib.es2019.d.ts": [ - "../../node_modules/@types/graceful-fs/index.d.ts", - "../../node_modules/@types/node/fs.d.ts", - "../../node_modules/@types/node/ts3.2/fs.d.ts", - "../../node_modules/@types/node/ts3.2/util.d.ts", - "../../node_modules/@types/node/util.d.ts" - ], - "../../node_modules/typescript/lib/lib.es2019.object.d.ts": [ - "../../node_modules/@types/graceful-fs/index.d.ts", - "../../node_modules/@types/node/fs.d.ts", - "../../node_modules/@types/node/ts3.2/fs.d.ts", - "../../node_modules/@types/node/ts3.2/util.d.ts", - "../../node_modules/@types/node/util.d.ts" - ], - "../../node_modules/typescript/lib/lib.es2019.string.d.ts": [ - "../../node_modules/@types/graceful-fs/index.d.ts", - "../../node_modules/@types/node/fs.d.ts", - "../../node_modules/@types/node/ts3.2/fs.d.ts", - "../../node_modules/@types/node/ts3.2/util.d.ts", - "../../node_modules/@types/node/util.d.ts" - ], - "../../node_modules/typescript/lib/lib.es2019.symbol.d.ts": [ - "../../node_modules/@types/graceful-fs/index.d.ts", - "../../node_modules/@types/node/fs.d.ts", - "../../node_modules/@types/node/ts3.2/fs.d.ts", - "../../node_modules/@types/node/ts3.2/util.d.ts", - "../../node_modules/@types/node/util.d.ts" - ], - "../../node_modules/typescript/lib/lib.es2020.bigint.d.ts": [ - "../../node_modules/@types/graceful-fs/index.d.ts", - "../../node_modules/@types/node/fs.d.ts", - "../../node_modules/@types/node/ts3.2/fs.d.ts", - "../../node_modules/@types/node/ts3.2/util.d.ts", - "../../node_modules/@types/node/util.d.ts" - ], - "../../node_modules/typescript/lib/lib.es2020.d.ts": [ - "../../node_modules/@types/graceful-fs/index.d.ts", - "../../node_modules/@types/node/fs.d.ts", - "../../node_modules/@types/node/ts3.2/fs.d.ts", - "../../node_modules/@types/node/ts3.2/util.d.ts", - "../../node_modules/@types/node/util.d.ts" - ], - "../../node_modules/typescript/lib/lib.es2020.promise.d.ts": [ - "../../node_modules/@types/graceful-fs/index.d.ts", - "../../node_modules/@types/node/fs.d.ts", - "../../node_modules/@types/node/ts3.2/fs.d.ts", - "../../node_modules/@types/node/ts3.2/util.d.ts", - "../../node_modules/@types/node/util.d.ts" - ], - "../../node_modules/typescript/lib/lib.es2020.string.d.ts": [ - "../../node_modules/@types/graceful-fs/index.d.ts", - "../../node_modules/@types/node/fs.d.ts", - "../../node_modules/@types/node/ts3.2/fs.d.ts", - "../../node_modules/@types/node/ts3.2/util.d.ts", - "../../node_modules/@types/node/util.d.ts" - ], - "../../node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts": [ - "../../node_modules/@types/graceful-fs/index.d.ts", - "../../node_modules/@types/node/fs.d.ts", - "../../node_modules/@types/node/ts3.2/fs.d.ts", - "../../node_modules/@types/node/ts3.2/util.d.ts", - "../../node_modules/@types/node/util.d.ts" - ], - "../../node_modules/typescript/lib/lib.es5.d.ts": [ - "../../node_modules/@types/graceful-fs/index.d.ts", - "../../node_modules/@types/node/fs.d.ts", - "../../node_modules/@types/node/ts3.2/fs.d.ts", - "../../node_modules/@types/node/ts3.2/util.d.ts", - "../../node_modules/@types/node/util.d.ts" - ], - "../../node_modules/typescript/lib/lib.esnext.d.ts": [ - "../../node_modules/@types/graceful-fs/index.d.ts", - "../../node_modules/@types/node/fs.d.ts", - "../../node_modules/@types/node/ts3.2/fs.d.ts", - "../../node_modules/@types/node/ts3.2/util.d.ts", - "../../node_modules/@types/node/util.d.ts" - ], - "../../node_modules/typescript/lib/lib.esnext.intl.d.ts": [ - "../../node_modules/@types/graceful-fs/index.d.ts", - "../../node_modules/@types/node/fs.d.ts", - "../../node_modules/@types/node/ts3.2/fs.d.ts", - "../../node_modules/@types/node/ts3.2/util.d.ts", - "../../node_modules/@types/node/util.d.ts" - ], - "../../node_modules/typescript/lib/lib.esnext.promise.d.ts": [ - "../../node_modules/@types/graceful-fs/index.d.ts", - "../../node_modules/@types/node/fs.d.ts", - "../../node_modules/@types/node/ts3.2/fs.d.ts", - "../../node_modules/@types/node/ts3.2/util.d.ts", - "../../node_modules/@types/node/util.d.ts" - ], - "../../node_modules/typescript/lib/lib.esnext.string.d.ts": [ - "../../node_modules/@types/graceful-fs/index.d.ts", - "../../node_modules/@types/node/fs.d.ts", - "../../node_modules/@types/node/ts3.2/fs.d.ts", - "../../node_modules/@types/node/ts3.2/util.d.ts", - "../../node_modules/@types/node/util.d.ts" - ], - "../src/bin.ts": [ - "../../node_modules/@types/graceful-fs/index.d.ts", - "../../node_modules/@types/node/fs.d.ts", - "../../node_modules/@types/node/ts3.2/fs.d.ts", - "../../node_modules/@types/node/ts3.2/util.d.ts", - "../../node_modules/@types/node/util.d.ts" - ], - "../src/context.ts": [ - "../../node_modules/@types/graceful-fs/index.d.ts", - "../../node_modules/@types/js-base64/index.d.ts", - "../../node_modules/@types/node/fs.d.ts", - "../../node_modules/@types/node/ts3.2/fs.d.ts", - "../../node_modules/@types/node/ts3.2/util.d.ts", - "../../node_modules/@types/node/util.d.ts" - ], - "../src/index.ts": [ - "../../node_modules/@types/graceful-fs/index.d.ts", - "../../node_modules/@types/node/fs.d.ts", - "../../node_modules/@types/node/ts3.2/fs.d.ts", - "../../node_modules/@types/node/ts3.2/util.d.ts", - "../../node_modules/@types/node/util.d.ts", - "../src/context.ts", - "../src/runtime.ts", - "../src/utils.ts" - ], - "../src/runtime.ts": [ - "../../node_modules/@types/graceful-fs/index.d.ts", - "../../node_modules/@types/node/child_process.d.ts", - "../../node_modules/@types/node/fs.d.ts", - "../../node_modules/@types/node/os.d.ts", - "../../node_modules/@types/node/ts3.2/fs.d.ts", - "../../node_modules/@types/node/ts3.2/util.d.ts", - "../../node_modules/@types/node/util.d.ts", - "../src/context.ts", - "../src/types.ts", - "../src/utils.ts" - ], - "../src/types.ts": [ - "../../node_modules/@types/graceful-fs/index.d.ts", - "../../node_modules/@types/node/fs.d.ts", - "../../node_modules/@types/node/ts3.2/fs.d.ts", - "../../node_modules/@types/node/ts3.2/util.d.ts", - "../../node_modules/@types/node/util.d.ts" - ], - "../src/utils.ts": [ - "../../node_modules/@types/bn.js/index.d.ts", - "../../node_modules/@types/bs58/index.d.ts", - "../../node_modules/@types/graceful-fs/index.d.ts", - "../../node_modules/@types/js-base64/index.d.ts", - "../../node_modules/@types/node/fs.d.ts", - "../../node_modules/@types/node/ts3.2/fs.d.ts", - "../../node_modules/@types/node/ts3.2/util.d.ts", - "../../node_modules/@types/node/util.d.ts", - "../src/types.ts" - ] - }, - "exportedModulesMap": { - "../../node_modules/@babel/parser/typings/babel-parser.d.ts": [ - "../../node_modules/@babel/types/lib/index.d.ts", - "../../node_modules/@types/graceful-fs/index.d.ts", - "../../node_modules/@types/node/fs.d.ts", - "../../node_modules/@types/node/ts3.2/fs.d.ts", - "../../node_modules/@types/node/ts3.2/util.d.ts", - "../../node_modules/@types/node/util.d.ts" - ], - "../../node_modules/@babel/types/lib/index.d.ts": [ - "../../node_modules/@types/graceful-fs/index.d.ts", - "../../node_modules/@types/node/fs.d.ts", - "../../node_modules/@types/node/ts3.2/fs.d.ts", - "../../node_modules/@types/node/ts3.2/util.d.ts", - "../../node_modules/@types/node/util.d.ts" - ], - "../../node_modules/@types/babel__core/index.d.ts": [ - "../../node_modules/@babel/parser/typings/babel-parser.d.ts", - "../../node_modules/@babel/types/lib/index.d.ts", - "../../node_modules/@types/babel__generator/index.d.ts", - "../../node_modules/@types/babel__template/index.d.ts", - "../../node_modules/@types/babel__traverse/index.d.ts", - "../../node_modules/@types/graceful-fs/index.d.ts", - "../../node_modules/@types/node/fs.d.ts", - "../../node_modules/@types/node/ts3.2/fs.d.ts", - "../../node_modules/@types/node/ts3.2/util.d.ts", - "../../node_modules/@types/node/util.d.ts" - ], - "../../node_modules/@types/babel__generator/index.d.ts": [ - "../../node_modules/@babel/types/lib/index.d.ts", - "../../node_modules/@types/graceful-fs/index.d.ts", - "../../node_modules/@types/node/fs.d.ts", - "../../node_modules/@types/node/ts3.2/fs.d.ts", - "../../node_modules/@types/node/ts3.2/util.d.ts", - "../../node_modules/@types/node/util.d.ts" - ], - "../../node_modules/@types/babel__template/index.d.ts": [ - "../../node_modules/@babel/parser/typings/babel-parser.d.ts", - "../../node_modules/@babel/types/lib/index.d.ts", - "../../node_modules/@types/graceful-fs/index.d.ts", - "../../node_modules/@types/node/fs.d.ts", - "../../node_modules/@types/node/ts3.2/fs.d.ts", - "../../node_modules/@types/node/ts3.2/util.d.ts", - "../../node_modules/@types/node/util.d.ts" - ], - "../../node_modules/@types/babel__traverse/index.d.ts": [ - "../../node_modules/@babel/types/lib/index.d.ts", - "../../node_modules/@types/graceful-fs/index.d.ts", - "../../node_modules/@types/node/fs.d.ts", - "../../node_modules/@types/node/ts3.2/fs.d.ts", - "../../node_modules/@types/node/ts3.2/util.d.ts", - "../../node_modules/@types/node/util.d.ts" - ], - "../../node_modules/@types/bn.js/index.d.ts": [ - "../../node_modules/@types/graceful-fs/index.d.ts", - "../../node_modules/@types/node/fs.d.ts", - "../../node_modules/@types/node/ts3.2/fs.d.ts", - "../../node_modules/@types/node/ts3.2/util.d.ts", - "../../node_modules/@types/node/ts3.7/index.d.ts", - "../../node_modules/@types/node/util.d.ts" - ], - "../../node_modules/@types/bs58/index.d.ts": [ - "../../node_modules/@types/graceful-fs/index.d.ts", - "../../node_modules/@types/node/fs.d.ts", - "../../node_modules/@types/node/ts3.2/fs.d.ts", - "../../node_modules/@types/node/ts3.2/util.d.ts", - "../../node_modules/@types/node/util.d.ts", - "../../node_modules/base-x/src/index.d.ts" - ], - "../../node_modules/@types/chance/index.d.ts": [ - "../../node_modules/@types/graceful-fs/index.d.ts", - "../../node_modules/@types/node/fs.d.ts", - "../../node_modules/@types/node/ts3.2/fs.d.ts", - "../../node_modules/@types/node/ts3.2/util.d.ts", - "../../node_modules/@types/node/util.d.ts" - ], - "../../node_modules/@types/color-name/index.d.ts": [ - "../../node_modules/@types/graceful-fs/index.d.ts", - "../../node_modules/@types/node/fs.d.ts", - "../../node_modules/@types/node/ts3.2/fs.d.ts", - "../../node_modules/@types/node/ts3.2/util.d.ts", - "../../node_modules/@types/node/util.d.ts" - ], - "../../node_modules/@types/graceful-fs/index.d.ts": [ - "../../node_modules/@types/node/fs.d.ts", - "../../node_modules/@types/node/ts3.2/fs.d.ts", - "../../node_modules/@types/node/ts3.2/util.d.ts", - "../../node_modules/@types/node/ts3.7/index.d.ts", - "../../node_modules/@types/node/util.d.ts" - ], - "../../node_modules/@types/istanbul-lib-coverage/index.d.ts": [ - "../../node_modules/@types/graceful-fs/index.d.ts", - "../../node_modules/@types/node/fs.d.ts", - "../../node_modules/@types/node/ts3.2/fs.d.ts", - "../../node_modules/@types/node/ts3.2/util.d.ts", - "../../node_modules/@types/node/util.d.ts" - ], - "../../node_modules/@types/istanbul-lib-report/index.d.ts": [ - "../../node_modules/@types/graceful-fs/index.d.ts", - "../../node_modules/@types/istanbul-lib-coverage/index.d.ts", - "../../node_modules/@types/node/fs.d.ts", - "../../node_modules/@types/node/ts3.2/fs.d.ts", - "../../node_modules/@types/node/ts3.2/util.d.ts", - "../../node_modules/@types/node/util.d.ts" - ], - "../../node_modules/@types/istanbul-reports/index.d.ts": [ - "../../node_modules/@types/graceful-fs/index.d.ts", - "../../node_modules/@types/istanbul-lib-coverage/index.d.ts", - "../../node_modules/@types/istanbul-lib-report/index.d.ts", - "../../node_modules/@types/node/fs.d.ts", - "../../node_modules/@types/node/ts3.2/fs.d.ts", - "../../node_modules/@types/node/ts3.2/util.d.ts", - "../../node_modules/@types/node/util.d.ts" - ], - "../../node_modules/@types/jest/index.d.ts": [ - "../../node_modules/@types/graceful-fs/index.d.ts", - "../../node_modules/@types/jest/node_modules/jest-diff/build/index.d.ts", - "../../node_modules/@types/jest/node_modules/pretty-format/build/index.d.ts", - "../../node_modules/@types/node/fs.d.ts", - "../../node_modules/@types/node/ts3.2/fs.d.ts", - "../../node_modules/@types/node/ts3.2/util.d.ts", - "../../node_modules/@types/node/util.d.ts" - ], - "../../node_modules/@types/jest/node_modules/jest-diff/build/cleanupsemantic.d.ts": [ - "../../node_modules/@types/graceful-fs/index.d.ts", - "../../node_modules/@types/node/fs.d.ts", - "../../node_modules/@types/node/ts3.2/fs.d.ts", - "../../node_modules/@types/node/ts3.2/util.d.ts", - "../../node_modules/@types/node/util.d.ts" - ], - "../../node_modules/@types/jest/node_modules/jest-diff/build/difflines.d.ts": [ - "../../node_modules/@types/graceful-fs/index.d.ts", - "../../node_modules/@types/jest/node_modules/jest-diff/build/cleanupsemantic.d.ts", - "../../node_modules/@types/jest/node_modules/jest-diff/build/types.d.ts", - "../../node_modules/@types/node/fs.d.ts", - "../../node_modules/@types/node/ts3.2/fs.d.ts", - "../../node_modules/@types/node/ts3.2/util.d.ts", - "../../node_modules/@types/node/util.d.ts" - ], - "../../node_modules/@types/jest/node_modules/jest-diff/build/index.d.ts": [ - "../../node_modules/@types/graceful-fs/index.d.ts", - "../../node_modules/@types/jest/node_modules/jest-diff/build/cleanupsemantic.d.ts", - "../../node_modules/@types/jest/node_modules/jest-diff/build/difflines.d.ts", - "../../node_modules/@types/jest/node_modules/jest-diff/build/printdiffs.d.ts", - "../../node_modules/@types/jest/node_modules/jest-diff/build/types.d.ts", - "../../node_modules/@types/node/fs.d.ts", - "../../node_modules/@types/node/ts3.2/fs.d.ts", - "../../node_modules/@types/node/ts3.2/util.d.ts", - "../../node_modules/@types/node/util.d.ts" - ], - "../../node_modules/@types/jest/node_modules/jest-diff/build/printdiffs.d.ts": [ - "../../node_modules/@types/graceful-fs/index.d.ts", - "../../node_modules/@types/jest/node_modules/jest-diff/build/cleanupsemantic.d.ts", - "../../node_modules/@types/jest/node_modules/jest-diff/build/types.d.ts", - "../../node_modules/@types/node/fs.d.ts", - "../../node_modules/@types/node/ts3.2/fs.d.ts", - "../../node_modules/@types/node/ts3.2/util.d.ts", - "../../node_modules/@types/node/util.d.ts" - ], - "../../node_modules/@types/jest/node_modules/jest-diff/build/types.d.ts": [ - "../../node_modules/@types/graceful-fs/index.d.ts", - "../../node_modules/@types/node/fs.d.ts", - "../../node_modules/@types/node/ts3.2/fs.d.ts", - "../../node_modules/@types/node/ts3.2/util.d.ts", - "../../node_modules/@types/node/util.d.ts" - ], - "../../node_modules/@types/jest/node_modules/pretty-format/build/index.d.ts": [ - "../../node_modules/@types/graceful-fs/index.d.ts", - "../../node_modules/@types/jest/node_modules/pretty-format/build/types.d.ts", - "../../node_modules/@types/node/fs.d.ts", - "../../node_modules/@types/node/ts3.2/fs.d.ts", - "../../node_modules/@types/node/ts3.2/util.d.ts", - "../../node_modules/@types/node/util.d.ts" - ], - "../../node_modules/@types/jest/node_modules/pretty-format/build/types.d.ts": [ - "../../node_modules/@types/graceful-fs/index.d.ts", - "../../node_modules/@types/node/fs.d.ts", - "../../node_modules/@types/node/ts3.2/fs.d.ts", - "../../node_modules/@types/node/ts3.2/util.d.ts", - "../../node_modules/@types/node/util.d.ts" - ], - "../../node_modules/@types/jest/ts3.2/index.d.ts": [ - "../../node_modules/@types/graceful-fs/index.d.ts", - "../../node_modules/@types/jest/index.d.ts", - "../../node_modules/@types/node/fs.d.ts", - "../../node_modules/@types/node/ts3.2/fs.d.ts", - "../../node_modules/@types/node/ts3.2/util.d.ts", - "../../node_modules/@types/node/util.d.ts" - ], - "../../node_modules/@types/js-base64/index.d.ts": [ - "../../node_modules/@types/graceful-fs/index.d.ts", - "../../node_modules/@types/node/fs.d.ts", - "../../node_modules/@types/node/ts3.2/fs.d.ts", - "../../node_modules/@types/node/ts3.2/util.d.ts", - "../../node_modules/@types/node/util.d.ts" - ], - "../../node_modules/@types/node/async_hooks.d.ts": [ - "../../node_modules/@types/graceful-fs/index.d.ts", - "../../node_modules/@types/node/fs.d.ts", - "../../node_modules/@types/node/ts3.2/fs.d.ts", - "../../node_modules/@types/node/ts3.2/util.d.ts", - "../../node_modules/@types/node/util.d.ts" - ], - "../../node_modules/@types/node/base.d.ts": [ - "../../node_modules/@types/graceful-fs/index.d.ts", - "../../node_modules/@types/node/async_hooks.d.ts", - "../../node_modules/@types/node/buffer.d.ts", - "../../node_modules/@types/node/child_process.d.ts", - "../../node_modules/@types/node/cluster.d.ts", - "../../node_modules/@types/node/console.d.ts", - "../../node_modules/@types/node/constants.d.ts", - "../../node_modules/@types/node/crypto.d.ts", - "../../node_modules/@types/node/dgram.d.ts", - "../../node_modules/@types/node/dns.d.ts", - "../../node_modules/@types/node/domain.d.ts", - "../../node_modules/@types/node/events.d.ts", - "../../node_modules/@types/node/fs.d.ts", - "../../node_modules/@types/node/fs/promises.d.ts", - "../../node_modules/@types/node/globals.d.ts", - "../../node_modules/@types/node/http.d.ts", - "../../node_modules/@types/node/http2.d.ts", - "../../node_modules/@types/node/https.d.ts", - "../../node_modules/@types/node/inspector.d.ts", - "../../node_modules/@types/node/module.d.ts", - "../../node_modules/@types/node/net.d.ts", - "../../node_modules/@types/node/os.d.ts", - "../../node_modules/@types/node/path.d.ts", - "../../node_modules/@types/node/perf_hooks.d.ts", - "../../node_modules/@types/node/process.d.ts", - "../../node_modules/@types/node/punycode.d.ts", - "../../node_modules/@types/node/querystring.d.ts", - "../../node_modules/@types/node/readline.d.ts", - "../../node_modules/@types/node/repl.d.ts", - "../../node_modules/@types/node/stream.d.ts", - "../../node_modules/@types/node/string_decoder.d.ts", - "../../node_modules/@types/node/timers.d.ts", - "../../node_modules/@types/node/tls.d.ts", - "../../node_modules/@types/node/trace_events.d.ts", - "../../node_modules/@types/node/ts3.2/fs.d.ts", - "../../node_modules/@types/node/ts3.2/util.d.ts", - "../../node_modules/@types/node/tty.d.ts", - "../../node_modules/@types/node/url.d.ts", - "../../node_modules/@types/node/util.d.ts", - "../../node_modules/@types/node/v8.d.ts", - "../../node_modules/@types/node/vm.d.ts", - "../../node_modules/@types/node/worker_threads.d.ts", - "../../node_modules/@types/node/zlib.d.ts" - ], - "../../node_modules/@types/node/buffer.d.ts": [ - "../../node_modules/@types/graceful-fs/index.d.ts", - "../../node_modules/@types/node/fs.d.ts", - "../../node_modules/@types/node/ts3.2/fs.d.ts", - "../../node_modules/@types/node/ts3.2/util.d.ts", - "../../node_modules/@types/node/util.d.ts" - ], - "../../node_modules/@types/node/child_process.d.ts": [ - "../../node_modules/@types/graceful-fs/index.d.ts", - "../../node_modules/@types/node/events.d.ts", - "../../node_modules/@types/node/fs.d.ts", - "../../node_modules/@types/node/net.d.ts", - "../../node_modules/@types/node/stream.d.ts", - "../../node_modules/@types/node/ts3.2/fs.d.ts", - "../../node_modules/@types/node/ts3.2/util.d.ts", - "../../node_modules/@types/node/util.d.ts" - ], - "../../node_modules/@types/node/cluster.d.ts": [ - "../../node_modules/@types/graceful-fs/index.d.ts", - "../../node_modules/@types/node/child_process.d.ts", - "../../node_modules/@types/node/events.d.ts", - "../../node_modules/@types/node/fs.d.ts", - "../../node_modules/@types/node/net.d.ts", - "../../node_modules/@types/node/ts3.2/fs.d.ts", - "../../node_modules/@types/node/ts3.2/util.d.ts", - "../../node_modules/@types/node/util.d.ts" - ], - "../../node_modules/@types/node/console.d.ts": [ - "../../node_modules/@types/graceful-fs/index.d.ts", - "../../node_modules/@types/node/fs.d.ts", - "../../node_modules/@types/node/ts3.2/fs.d.ts", - "../../node_modules/@types/node/ts3.2/util.d.ts", - "../../node_modules/@types/node/util.d.ts" - ], - "../../node_modules/@types/node/constants.d.ts": [ - "../../node_modules/@types/graceful-fs/index.d.ts", - "../../node_modules/@types/node/crypto.d.ts", - "../../node_modules/@types/node/fs.d.ts", - "../../node_modules/@types/node/os.d.ts", - "../../node_modules/@types/node/ts3.2/fs.d.ts", - "../../node_modules/@types/node/ts3.2/util.d.ts", - "../../node_modules/@types/node/util.d.ts" - ], - "../../node_modules/@types/node/crypto.d.ts": [ - "../../node_modules/@types/graceful-fs/index.d.ts", - "../../node_modules/@types/node/fs.d.ts", - "../../node_modules/@types/node/stream.d.ts", - "../../node_modules/@types/node/ts3.2/fs.d.ts", - "../../node_modules/@types/node/ts3.2/util.d.ts", - "../../node_modules/@types/node/util.d.ts" - ], - "../../node_modules/@types/node/dgram.d.ts": [ - "../../node_modules/@types/graceful-fs/index.d.ts", - "../../node_modules/@types/node/dns.d.ts", - "../../node_modules/@types/node/events.d.ts", - "../../node_modules/@types/node/fs.d.ts", - "../../node_modules/@types/node/net.d.ts", - "../../node_modules/@types/node/ts3.2/fs.d.ts", - "../../node_modules/@types/node/ts3.2/util.d.ts", - "../../node_modules/@types/node/util.d.ts" - ], - "../../node_modules/@types/node/dns.d.ts": [ - "../../node_modules/@types/graceful-fs/index.d.ts", - "../../node_modules/@types/node/fs.d.ts", - "../../node_modules/@types/node/ts3.2/fs.d.ts", - "../../node_modules/@types/node/ts3.2/util.d.ts", - "../../node_modules/@types/node/util.d.ts" - ], - "../../node_modules/@types/node/domain.d.ts": [ - "../../node_modules/@types/graceful-fs/index.d.ts", - "../../node_modules/@types/node/events.d.ts", - "../../node_modules/@types/node/fs.d.ts", - "../../node_modules/@types/node/ts3.2/fs.d.ts", - "../../node_modules/@types/node/ts3.2/util.d.ts", - "../../node_modules/@types/node/util.d.ts" - ], - "../../node_modules/@types/node/events.d.ts": [ - "../../node_modules/@types/graceful-fs/index.d.ts", - "../../node_modules/@types/node/fs.d.ts", - "../../node_modules/@types/node/ts3.2/fs.d.ts", - "../../node_modules/@types/node/ts3.2/util.d.ts", - "../../node_modules/@types/node/util.d.ts" - ], - "../../node_modules/@types/node/fs.d.ts": [ - "../../node_modules/@types/graceful-fs/index.d.ts", - "../../node_modules/@types/node/events.d.ts", - "../../node_modules/@types/node/fs/promises.d.ts", - "../../node_modules/@types/node/stream.d.ts", - "../../node_modules/@types/node/ts3.2/fs.d.ts", - "../../node_modules/@types/node/ts3.2/util.d.ts", - "../../node_modules/@types/node/url.d.ts", - "../../node_modules/@types/node/util.d.ts" - ], - "../../node_modules/@types/node/fs/promises.d.ts": [ - "../../node_modules/@types/graceful-fs/index.d.ts", - "../../node_modules/@types/node/fs.d.ts", - "../../node_modules/@types/node/ts3.2/fs.d.ts", - "../../node_modules/@types/node/ts3.2/util.d.ts", - "../../node_modules/@types/node/util.d.ts" - ], - "../../node_modules/@types/node/globals.d.ts": [ - "../../node_modules/@types/graceful-fs/index.d.ts", - "../../node_modules/@types/node/fs.d.ts", - "../../node_modules/@types/node/ts3.2/fs.d.ts", - "../../node_modules/@types/node/ts3.2/util.d.ts", - "../../node_modules/@types/node/util.d.ts" - ], - "../../node_modules/@types/node/http.d.ts": [ - "../../node_modules/@types/graceful-fs/index.d.ts", - "../../node_modules/@types/node/events.d.ts", - "../../node_modules/@types/node/fs.d.ts", - "../../node_modules/@types/node/net.d.ts", - "../../node_modules/@types/node/stream.d.ts", - "../../node_modules/@types/node/ts3.2/fs.d.ts", - "../../node_modules/@types/node/ts3.2/util.d.ts", - "../../node_modules/@types/node/url.d.ts", - "../../node_modules/@types/node/util.d.ts" - ], - "../../node_modules/@types/node/http2.d.ts": [ - "../../node_modules/@types/graceful-fs/index.d.ts", - "../../node_modules/@types/node/events.d.ts", - "../../node_modules/@types/node/fs.d.ts", - "../../node_modules/@types/node/http.d.ts", - "../../node_modules/@types/node/net.d.ts", - "../../node_modules/@types/node/stream.d.ts", - "../../node_modules/@types/node/tls.d.ts", - "../../node_modules/@types/node/ts3.2/fs.d.ts", - "../../node_modules/@types/node/ts3.2/util.d.ts", - "../../node_modules/@types/node/url.d.ts", - "../../node_modules/@types/node/util.d.ts" - ], - "../../node_modules/@types/node/https.d.ts": [ - "../../node_modules/@types/graceful-fs/index.d.ts", - "../../node_modules/@types/node/events.d.ts", - "../../node_modules/@types/node/fs.d.ts", - "../../node_modules/@types/node/http.d.ts", - "../../node_modules/@types/node/tls.d.ts", - "../../node_modules/@types/node/ts3.2/fs.d.ts", - "../../node_modules/@types/node/ts3.2/util.d.ts", - "../../node_modules/@types/node/url.d.ts", - "../../node_modules/@types/node/util.d.ts" - ], - "../../node_modules/@types/node/inspector.d.ts": [ - "../../node_modules/@types/graceful-fs/index.d.ts", - "../../node_modules/@types/node/events.d.ts", - "../../node_modules/@types/node/fs.d.ts", - "../../node_modules/@types/node/ts3.2/fs.d.ts", - "../../node_modules/@types/node/ts3.2/util.d.ts", - "../../node_modules/@types/node/util.d.ts" - ], - "../../node_modules/@types/node/module.d.ts": [ - "../../node_modules/@types/graceful-fs/index.d.ts", - "../../node_modules/@types/node/fs.d.ts", - "../../node_modules/@types/node/ts3.2/fs.d.ts", - "../../node_modules/@types/node/ts3.2/util.d.ts", - "../../node_modules/@types/node/url.d.ts", - "../../node_modules/@types/node/util.d.ts" - ], - "../../node_modules/@types/node/net.d.ts": [ - "../../node_modules/@types/graceful-fs/index.d.ts", - "../../node_modules/@types/node/dns.d.ts", - "../../node_modules/@types/node/events.d.ts", - "../../node_modules/@types/node/fs.d.ts", - "../../node_modules/@types/node/stream.d.ts", - "../../node_modules/@types/node/ts3.2/fs.d.ts", - "../../node_modules/@types/node/ts3.2/util.d.ts", - "../../node_modules/@types/node/util.d.ts" - ], - "../../node_modules/@types/node/os.d.ts": [ - "../../node_modules/@types/graceful-fs/index.d.ts", - "../../node_modules/@types/node/fs.d.ts", - "../../node_modules/@types/node/ts3.2/fs.d.ts", - "../../node_modules/@types/node/ts3.2/util.d.ts", - "../../node_modules/@types/node/util.d.ts" - ], - "../../node_modules/@types/node/path.d.ts": [ - "../../node_modules/@types/graceful-fs/index.d.ts", - "../../node_modules/@types/node/fs.d.ts", - "../../node_modules/@types/node/ts3.2/fs.d.ts", - "../../node_modules/@types/node/ts3.2/util.d.ts", - "../../node_modules/@types/node/util.d.ts" - ], - "../../node_modules/@types/node/perf_hooks.d.ts": [ - "../../node_modules/@types/graceful-fs/index.d.ts", - "../../node_modules/@types/node/async_hooks.d.ts", - "../../node_modules/@types/node/fs.d.ts", - "../../node_modules/@types/node/ts3.2/fs.d.ts", - "../../node_modules/@types/node/ts3.2/util.d.ts", - "../../node_modules/@types/node/util.d.ts" - ], - "../../node_modules/@types/node/process.d.ts": [ - "../../node_modules/@types/graceful-fs/index.d.ts", - "../../node_modules/@types/node/fs.d.ts", - "../../node_modules/@types/node/ts3.2/fs.d.ts", - "../../node_modules/@types/node/ts3.2/util.d.ts", - "../../node_modules/@types/node/tty.d.ts", - "../../node_modules/@types/node/util.d.ts" - ], - "../../node_modules/@types/node/punycode.d.ts": [ - "../../node_modules/@types/graceful-fs/index.d.ts", - "../../node_modules/@types/node/fs.d.ts", - "../../node_modules/@types/node/ts3.2/fs.d.ts", - "../../node_modules/@types/node/ts3.2/util.d.ts", - "../../node_modules/@types/node/util.d.ts" - ], - "../../node_modules/@types/node/querystring.d.ts": [ - "../../node_modules/@types/graceful-fs/index.d.ts", - "../../node_modules/@types/node/fs.d.ts", - "../../node_modules/@types/node/ts3.2/fs.d.ts", - "../../node_modules/@types/node/ts3.2/util.d.ts", - "../../node_modules/@types/node/util.d.ts" - ], - "../../node_modules/@types/node/readline.d.ts": [ - "../../node_modules/@types/graceful-fs/index.d.ts", - "../../node_modules/@types/node/events.d.ts", - "../../node_modules/@types/node/fs.d.ts", - "../../node_modules/@types/node/stream.d.ts", - "../../node_modules/@types/node/ts3.2/fs.d.ts", - "../../node_modules/@types/node/ts3.2/util.d.ts", - "../../node_modules/@types/node/util.d.ts" - ], - "../../node_modules/@types/node/repl.d.ts": [ - "../../node_modules/@types/graceful-fs/index.d.ts", - "../../node_modules/@types/node/fs.d.ts", - "../../node_modules/@types/node/readline.d.ts", - "../../node_modules/@types/node/ts3.2/fs.d.ts", - "../../node_modules/@types/node/ts3.2/util.d.ts", - "../../node_modules/@types/node/util.d.ts", - "../../node_modules/@types/node/vm.d.ts" - ], - "../../node_modules/@types/node/stream.d.ts": [ - "../../node_modules/@types/graceful-fs/index.d.ts", - "../../node_modules/@types/node/events.d.ts", - "../../node_modules/@types/node/fs.d.ts", - "../../node_modules/@types/node/ts3.2/fs.d.ts", - "../../node_modules/@types/node/ts3.2/util.d.ts", - "../../node_modules/@types/node/util.d.ts" - ], - "../../node_modules/@types/node/string_decoder.d.ts": [ - "../../node_modules/@types/graceful-fs/index.d.ts", - "../../node_modules/@types/node/fs.d.ts", - "../../node_modules/@types/node/ts3.2/fs.d.ts", - "../../node_modules/@types/node/ts3.2/util.d.ts", - "../../node_modules/@types/node/util.d.ts" - ], - "../../node_modules/@types/node/timers.d.ts": [ - "../../node_modules/@types/graceful-fs/index.d.ts", - "../../node_modules/@types/node/fs.d.ts", - "../../node_modules/@types/node/ts3.2/fs.d.ts", - "../../node_modules/@types/node/ts3.2/util.d.ts", - "../../node_modules/@types/node/util.d.ts" - ], - "../../node_modules/@types/node/tls.d.ts": [ - "../../node_modules/@types/graceful-fs/index.d.ts", - "../../node_modules/@types/node/crypto.d.ts", - "../../node_modules/@types/node/dns.d.ts", - "../../node_modules/@types/node/fs.d.ts", - "../../node_modules/@types/node/net.d.ts", - "../../node_modules/@types/node/stream.d.ts", - "../../node_modules/@types/node/ts3.2/fs.d.ts", - "../../node_modules/@types/node/ts3.2/util.d.ts", - "../../node_modules/@types/node/util.d.ts" - ], - "../../node_modules/@types/node/trace_events.d.ts": [ - "../../node_modules/@types/graceful-fs/index.d.ts", - "../../node_modules/@types/node/fs.d.ts", - "../../node_modules/@types/node/ts3.2/fs.d.ts", - "../../node_modules/@types/node/ts3.2/util.d.ts", - "../../node_modules/@types/node/util.d.ts" - ], - "../../node_modules/@types/node/ts3.2/base.d.ts": [ - "../../node_modules/@types/graceful-fs/index.d.ts", - "../../node_modules/@types/node/base.d.ts", - "../../node_modules/@types/node/fs.d.ts", - "../../node_modules/@types/node/ts3.2/fs.d.ts", - "../../node_modules/@types/node/ts3.2/globals.d.ts", - "../../node_modules/@types/node/ts3.2/util.d.ts", - "../../node_modules/@types/node/util.d.ts" - ], - "../../node_modules/@types/node/ts3.2/fs.d.ts": [ - "../../node_modules/@types/graceful-fs/index.d.ts", - "../../node_modules/@types/node/fs.d.ts", - "../../node_modules/@types/node/ts3.2/util.d.ts", - "../../node_modules/@types/node/util.d.ts" - ], - "../../node_modules/@types/node/ts3.2/globals.d.ts": [ - "../../node_modules/@types/graceful-fs/index.d.ts", - "../../node_modules/@types/node/fs.d.ts", - "../../node_modules/@types/node/globals.d.ts", - "../../node_modules/@types/node/ts3.2/fs.d.ts", - "../../node_modules/@types/node/ts3.2/util.d.ts", - "../../node_modules/@types/node/util.d.ts" - ], - "../../node_modules/@types/node/ts3.2/util.d.ts": [ - "../../node_modules/@types/graceful-fs/index.d.ts", - "../../node_modules/@types/node/fs.d.ts", - "../../node_modules/@types/node/ts3.2/fs.d.ts", - "../../node_modules/@types/node/util.d.ts" - ], - "../../node_modules/@types/node/ts3.5/base.d.ts": [ - "../../node_modules/@types/graceful-fs/index.d.ts", - "../../node_modules/@types/node/fs.d.ts", - "../../node_modules/@types/node/ts3.2/base.d.ts", - "../../node_modules/@types/node/ts3.2/fs.d.ts", - "../../node_modules/@types/node/ts3.2/util.d.ts", - "../../node_modules/@types/node/ts3.5/globals.global.d.ts", - "../../node_modules/@types/node/ts3.5/wasi.d.ts", - "../../node_modules/@types/node/util.d.ts" - ], - "../../node_modules/@types/node/ts3.5/globals.global.d.ts": [ - "../../node_modules/@types/graceful-fs/index.d.ts", - "../../node_modules/@types/node/fs.d.ts", - "../../node_modules/@types/node/ts3.2/fs.d.ts", - "../../node_modules/@types/node/ts3.2/util.d.ts", - "../../node_modules/@types/node/util.d.ts" - ], - "../../node_modules/@types/node/ts3.5/wasi.d.ts": [ - "../../node_modules/@types/graceful-fs/index.d.ts", - "../../node_modules/@types/node/fs.d.ts", - "../../node_modules/@types/node/ts3.2/fs.d.ts", - "../../node_modules/@types/node/ts3.2/util.d.ts", - "../../node_modules/@types/node/util.d.ts" - ], - "../../node_modules/@types/node/ts3.7/assert.d.ts": [ - "../../node_modules/@types/graceful-fs/index.d.ts", - "../../node_modules/@types/node/fs.d.ts", - "../../node_modules/@types/node/ts3.2/fs.d.ts", - "../../node_modules/@types/node/ts3.2/util.d.ts", - "../../node_modules/@types/node/util.d.ts" - ], - "../../node_modules/@types/node/ts3.7/base.d.ts": [ - "../../node_modules/@types/graceful-fs/index.d.ts", - "../../node_modules/@types/node/fs.d.ts", - "../../node_modules/@types/node/ts3.2/fs.d.ts", - "../../node_modules/@types/node/ts3.2/util.d.ts", - "../../node_modules/@types/node/ts3.5/base.d.ts", - "../../node_modules/@types/node/ts3.7/assert.d.ts", - "../../node_modules/@types/node/util.d.ts" - ], - "../../node_modules/@types/node/ts3.7/index.d.ts": [ - "../../node_modules/@types/graceful-fs/index.d.ts", - "../../node_modules/@types/node/fs.d.ts", - "../../node_modules/@types/node/ts3.2/fs.d.ts", - "../../node_modules/@types/node/ts3.2/util.d.ts", - "../../node_modules/@types/node/ts3.7/base.d.ts", - "../../node_modules/@types/node/util.d.ts" - ], - "../../node_modules/@types/node/tty.d.ts": [ - "../../node_modules/@types/graceful-fs/index.d.ts", - "../../node_modules/@types/node/fs.d.ts", - "../../node_modules/@types/node/net.d.ts", - "../../node_modules/@types/node/ts3.2/fs.d.ts", - "../../node_modules/@types/node/ts3.2/util.d.ts", - "../../node_modules/@types/node/util.d.ts" - ], - "../../node_modules/@types/node/url.d.ts": [ - "../../node_modules/@types/graceful-fs/index.d.ts", - "../../node_modules/@types/node/fs.d.ts", - "../../node_modules/@types/node/querystring.d.ts", - "../../node_modules/@types/node/ts3.2/fs.d.ts", - "../../node_modules/@types/node/ts3.2/util.d.ts", - "../../node_modules/@types/node/util.d.ts" - ], - "../../node_modules/@types/node/util.d.ts": [ - "../../node_modules/@types/graceful-fs/index.d.ts", - "../../node_modules/@types/node/fs.d.ts", - "../../node_modules/@types/node/ts3.2/fs.d.ts", - "../../node_modules/@types/node/ts3.2/util.d.ts" - ], - "../../node_modules/@types/node/v8.d.ts": [ - "../../node_modules/@types/graceful-fs/index.d.ts", - "../../node_modules/@types/node/fs.d.ts", - "../../node_modules/@types/node/stream.d.ts", - "../../node_modules/@types/node/ts3.2/fs.d.ts", - "../../node_modules/@types/node/ts3.2/util.d.ts", - "../../node_modules/@types/node/util.d.ts" - ], - "../../node_modules/@types/node/vm.d.ts": [ - "../../node_modules/@types/graceful-fs/index.d.ts", - "../../node_modules/@types/node/fs.d.ts", - "../../node_modules/@types/node/ts3.2/fs.d.ts", - "../../node_modules/@types/node/ts3.2/util.d.ts", - "../../node_modules/@types/node/util.d.ts" - ], - "../../node_modules/@types/node/worker_threads.d.ts": [ - "../../node_modules/@types/graceful-fs/index.d.ts", - "../../node_modules/@types/node/events.d.ts", - "../../node_modules/@types/node/fs.d.ts", - "../../node_modules/@types/node/stream.d.ts", - "../../node_modules/@types/node/ts3.2/fs.d.ts", - "../../node_modules/@types/node/ts3.2/util.d.ts", - "../../node_modules/@types/node/url.d.ts", - "../../node_modules/@types/node/util.d.ts", - "../../node_modules/@types/node/vm.d.ts" - ], - "../../node_modules/@types/node/zlib.d.ts": [ - "../../node_modules/@types/graceful-fs/index.d.ts", - "../../node_modules/@types/node/fs.d.ts", - "../../node_modules/@types/node/stream.d.ts", - "../../node_modules/@types/node/ts3.2/fs.d.ts", - "../../node_modules/@types/node/ts3.2/util.d.ts", - "../../node_modules/@types/node/util.d.ts" - ], - "../../node_modules/@types/normalize-package-data/index.d.ts": [ - "../../node_modules/@types/graceful-fs/index.d.ts", - "../../node_modules/@types/node/fs.d.ts", - "../../node_modules/@types/node/ts3.2/fs.d.ts", - "../../node_modules/@types/node/ts3.2/util.d.ts", - "../../node_modules/@types/node/util.d.ts" - ], - "../../node_modules/@types/prettier/index.d.ts": [ - "../../node_modules/@types/graceful-fs/index.d.ts", - "../../node_modules/@types/node/fs.d.ts", - "../../node_modules/@types/node/ts3.2/fs.d.ts", - "../../node_modules/@types/node/ts3.2/util.d.ts", - "../../node_modules/@types/node/util.d.ts" - ], - "../../node_modules/@types/stack-utils/index.d.ts": [ - "../../node_modules/@types/graceful-fs/index.d.ts", - "../../node_modules/@types/node/fs.d.ts", - "../../node_modules/@types/node/ts3.2/fs.d.ts", - "../../node_modules/@types/node/ts3.2/util.d.ts", - "../../node_modules/@types/node/util.d.ts" - ], - "../../node_modules/@types/yargs-parser/index.d.ts": [ - "../../node_modules/@types/graceful-fs/index.d.ts", - "../../node_modules/@types/node/fs.d.ts", - "../../node_modules/@types/node/ts3.2/fs.d.ts", - "../../node_modules/@types/node/ts3.2/util.d.ts", - "../../node_modules/@types/node/util.d.ts" - ], - "../../node_modules/@types/yargs/index.d.ts": [ - "../../node_modules/@types/graceful-fs/index.d.ts", - "../../node_modules/@types/node/fs.d.ts", - "../../node_modules/@types/node/ts3.2/fs.d.ts", - "../../node_modules/@types/node/ts3.2/util.d.ts", - "../../node_modules/@types/node/util.d.ts", - "../../node_modules/@types/yargs-parser/index.d.ts" - ], - "../../node_modules/base-x/src/index.d.ts": [ - "../../node_modules/@types/graceful-fs/index.d.ts", - "../../node_modules/@types/node/fs.d.ts", - "../../node_modules/@types/node/ts3.2/fs.d.ts", - "../../node_modules/@types/node/ts3.2/util.d.ts", - "../../node_modules/@types/node/ts3.7/index.d.ts", - "../../node_modules/@types/node/util.d.ts" - ], - "../../node_modules/typescript/lib/lib.es2015.collection.d.ts": [ - "../../node_modules/@types/graceful-fs/index.d.ts", - "../../node_modules/@types/node/fs.d.ts", - "../../node_modules/@types/node/ts3.2/fs.d.ts", - "../../node_modules/@types/node/ts3.2/util.d.ts", - "../../node_modules/@types/node/util.d.ts" - ], - "../../node_modules/typescript/lib/lib.es2015.core.d.ts": [ - "../../node_modules/@types/graceful-fs/index.d.ts", - "../../node_modules/@types/node/fs.d.ts", - "../../node_modules/@types/node/ts3.2/fs.d.ts", - "../../node_modules/@types/node/ts3.2/util.d.ts", - "../../node_modules/@types/node/util.d.ts" - ], - "../../node_modules/typescript/lib/lib.es2015.d.ts": [ - "../../node_modules/@types/graceful-fs/index.d.ts", - "../../node_modules/@types/node/fs.d.ts", - "../../node_modules/@types/node/ts3.2/fs.d.ts", - "../../node_modules/@types/node/ts3.2/util.d.ts", - "../../node_modules/@types/node/util.d.ts" - ], - "../../node_modules/typescript/lib/lib.es2015.generator.d.ts": [ - "../../node_modules/@types/graceful-fs/index.d.ts", - "../../node_modules/@types/node/fs.d.ts", - "../../node_modules/@types/node/ts3.2/fs.d.ts", - "../../node_modules/@types/node/ts3.2/util.d.ts", - "../../node_modules/@types/node/util.d.ts" - ], - "../../node_modules/typescript/lib/lib.es2015.iterable.d.ts": [ - "../../node_modules/@types/graceful-fs/index.d.ts", - "../../node_modules/@types/node/fs.d.ts", - "../../node_modules/@types/node/ts3.2/fs.d.ts", - "../../node_modules/@types/node/ts3.2/util.d.ts", - "../../node_modules/@types/node/util.d.ts" - ], - "../../node_modules/typescript/lib/lib.es2015.promise.d.ts": [ - "../../node_modules/@types/graceful-fs/index.d.ts", - "../../node_modules/@types/node/fs.d.ts", - "../../node_modules/@types/node/ts3.2/fs.d.ts", - "../../node_modules/@types/node/ts3.2/util.d.ts", - "../../node_modules/@types/node/util.d.ts" - ], - "../../node_modules/typescript/lib/lib.es2015.proxy.d.ts": [ - "../../node_modules/@types/graceful-fs/index.d.ts", - "../../node_modules/@types/node/fs.d.ts", - "../../node_modules/@types/node/ts3.2/fs.d.ts", - "../../node_modules/@types/node/ts3.2/util.d.ts", - "../../node_modules/@types/node/util.d.ts" - ], - "../../node_modules/typescript/lib/lib.es2015.reflect.d.ts": [ - "../../node_modules/@types/graceful-fs/index.d.ts", - "../../node_modules/@types/node/fs.d.ts", - "../../node_modules/@types/node/ts3.2/fs.d.ts", - "../../node_modules/@types/node/ts3.2/util.d.ts", - "../../node_modules/@types/node/util.d.ts" - ], - "../../node_modules/typescript/lib/lib.es2015.symbol.d.ts": [ - "../../node_modules/@types/graceful-fs/index.d.ts", - "../../node_modules/@types/node/fs.d.ts", - "../../node_modules/@types/node/ts3.2/fs.d.ts", - "../../node_modules/@types/node/ts3.2/util.d.ts", - "../../node_modules/@types/node/util.d.ts" - ], - "../../node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts": [ - "../../node_modules/@types/graceful-fs/index.d.ts", - "../../node_modules/@types/node/fs.d.ts", - "../../node_modules/@types/node/ts3.2/fs.d.ts", - "../../node_modules/@types/node/ts3.2/util.d.ts", - "../../node_modules/@types/node/util.d.ts" - ], - "../../node_modules/typescript/lib/lib.es2016.array.include.d.ts": [ - "../../node_modules/@types/graceful-fs/index.d.ts", - "../../node_modules/@types/node/fs.d.ts", - "../../node_modules/@types/node/ts3.2/fs.d.ts", - "../../node_modules/@types/node/ts3.2/util.d.ts", - "../../node_modules/@types/node/util.d.ts" - ], - "../../node_modules/typescript/lib/lib.es2016.d.ts": [ - "../../node_modules/@types/graceful-fs/index.d.ts", - "../../node_modules/@types/node/fs.d.ts", - "../../node_modules/@types/node/ts3.2/fs.d.ts", - "../../node_modules/@types/node/ts3.2/util.d.ts", - "../../node_modules/@types/node/util.d.ts" - ], - "../../node_modules/typescript/lib/lib.es2017.d.ts": [ - "../../node_modules/@types/graceful-fs/index.d.ts", - "../../node_modules/@types/node/fs.d.ts", - "../../node_modules/@types/node/ts3.2/fs.d.ts", - "../../node_modules/@types/node/ts3.2/util.d.ts", - "../../node_modules/@types/node/util.d.ts" - ], - "../../node_modules/typescript/lib/lib.es2017.intl.d.ts": [ - "../../node_modules/@types/graceful-fs/index.d.ts", - "../../node_modules/@types/node/fs.d.ts", - "../../node_modules/@types/node/ts3.2/fs.d.ts", - "../../node_modules/@types/node/ts3.2/util.d.ts", - "../../node_modules/@types/node/util.d.ts" - ], - "../../node_modules/typescript/lib/lib.es2017.object.d.ts": [ - "../../node_modules/@types/graceful-fs/index.d.ts", - "../../node_modules/@types/node/fs.d.ts", - "../../node_modules/@types/node/ts3.2/fs.d.ts", - "../../node_modules/@types/node/ts3.2/util.d.ts", - "../../node_modules/@types/node/util.d.ts" - ], - "../../node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts": [ - "../../node_modules/@types/graceful-fs/index.d.ts", - "../../node_modules/@types/node/fs.d.ts", - "../../node_modules/@types/node/ts3.2/fs.d.ts", - "../../node_modules/@types/node/ts3.2/util.d.ts", - "../../node_modules/@types/node/util.d.ts" - ], - "../../node_modules/typescript/lib/lib.es2017.string.d.ts": [ - "../../node_modules/@types/graceful-fs/index.d.ts", - "../../node_modules/@types/node/fs.d.ts", - "../../node_modules/@types/node/ts3.2/fs.d.ts", - "../../node_modules/@types/node/ts3.2/util.d.ts", - "../../node_modules/@types/node/util.d.ts" - ], - "../../node_modules/typescript/lib/lib.es2017.typedarrays.d.ts": [ - "../../node_modules/@types/graceful-fs/index.d.ts", - "../../node_modules/@types/node/fs.d.ts", - "../../node_modules/@types/node/ts3.2/fs.d.ts", - "../../node_modules/@types/node/ts3.2/util.d.ts", - "../../node_modules/@types/node/util.d.ts" - ], - "../../node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts": [ - "../../node_modules/@types/graceful-fs/index.d.ts", - "../../node_modules/@types/node/fs.d.ts", - "../../node_modules/@types/node/ts3.2/fs.d.ts", - "../../node_modules/@types/node/ts3.2/util.d.ts", - "../../node_modules/@types/node/util.d.ts" - ], - "../../node_modules/typescript/lib/lib.es2018.asynciterable.d.ts": [ - "../../node_modules/@types/graceful-fs/index.d.ts", - "../../node_modules/@types/node/fs.d.ts", - "../../node_modules/@types/node/ts3.2/fs.d.ts", - "../../node_modules/@types/node/ts3.2/util.d.ts", - "../../node_modules/@types/node/util.d.ts" - ], - "../../node_modules/typescript/lib/lib.es2018.d.ts": [ - "../../node_modules/@types/graceful-fs/index.d.ts", - "../../node_modules/@types/node/fs.d.ts", - "../../node_modules/@types/node/ts3.2/fs.d.ts", - "../../node_modules/@types/node/ts3.2/util.d.ts", - "../../node_modules/@types/node/util.d.ts" - ], - "../../node_modules/typescript/lib/lib.es2018.intl.d.ts": [ - "../../node_modules/@types/graceful-fs/index.d.ts", - "../../node_modules/@types/node/fs.d.ts", - "../../node_modules/@types/node/ts3.2/fs.d.ts", - "../../node_modules/@types/node/ts3.2/util.d.ts", - "../../node_modules/@types/node/util.d.ts" - ], - "../../node_modules/typescript/lib/lib.es2018.promise.d.ts": [ - "../../node_modules/@types/graceful-fs/index.d.ts", - "../../node_modules/@types/node/fs.d.ts", - "../../node_modules/@types/node/ts3.2/fs.d.ts", - "../../node_modules/@types/node/ts3.2/util.d.ts", - "../../node_modules/@types/node/util.d.ts" - ], - "../../node_modules/typescript/lib/lib.es2018.regexp.d.ts": [ - "../../node_modules/@types/graceful-fs/index.d.ts", - "../../node_modules/@types/node/fs.d.ts", - "../../node_modules/@types/node/ts3.2/fs.d.ts", - "../../node_modules/@types/node/ts3.2/util.d.ts", - "../../node_modules/@types/node/util.d.ts" - ], - "../../node_modules/typescript/lib/lib.es2019.array.d.ts": [ - "../../node_modules/@types/graceful-fs/index.d.ts", - "../../node_modules/@types/node/fs.d.ts", - "../../node_modules/@types/node/ts3.2/fs.d.ts", - "../../node_modules/@types/node/ts3.2/util.d.ts", - "../../node_modules/@types/node/util.d.ts" - ], - "../../node_modules/typescript/lib/lib.es2019.d.ts": [ - "../../node_modules/@types/graceful-fs/index.d.ts", - "../../node_modules/@types/node/fs.d.ts", - "../../node_modules/@types/node/ts3.2/fs.d.ts", - "../../node_modules/@types/node/ts3.2/util.d.ts", - "../../node_modules/@types/node/util.d.ts" - ], - "../../node_modules/typescript/lib/lib.es2019.object.d.ts": [ - "../../node_modules/@types/graceful-fs/index.d.ts", - "../../node_modules/@types/node/fs.d.ts", - "../../node_modules/@types/node/ts3.2/fs.d.ts", - "../../node_modules/@types/node/ts3.2/util.d.ts", - "../../node_modules/@types/node/util.d.ts" - ], - "../../node_modules/typescript/lib/lib.es2019.string.d.ts": [ - "../../node_modules/@types/graceful-fs/index.d.ts", - "../../node_modules/@types/node/fs.d.ts", - "../../node_modules/@types/node/ts3.2/fs.d.ts", - "../../node_modules/@types/node/ts3.2/util.d.ts", - "../../node_modules/@types/node/util.d.ts" - ], - "../../node_modules/typescript/lib/lib.es2019.symbol.d.ts": [ - "../../node_modules/@types/graceful-fs/index.d.ts", - "../../node_modules/@types/node/fs.d.ts", - "../../node_modules/@types/node/ts3.2/fs.d.ts", - "../../node_modules/@types/node/ts3.2/util.d.ts", - "../../node_modules/@types/node/util.d.ts" - ], - "../../node_modules/typescript/lib/lib.es2020.bigint.d.ts": [ - "../../node_modules/@types/graceful-fs/index.d.ts", - "../../node_modules/@types/node/fs.d.ts", - "../../node_modules/@types/node/ts3.2/fs.d.ts", - "../../node_modules/@types/node/ts3.2/util.d.ts", - "../../node_modules/@types/node/util.d.ts" - ], - "../../node_modules/typescript/lib/lib.es2020.d.ts": [ - "../../node_modules/@types/graceful-fs/index.d.ts", - "../../node_modules/@types/node/fs.d.ts", - "../../node_modules/@types/node/ts3.2/fs.d.ts", - "../../node_modules/@types/node/ts3.2/util.d.ts", - "../../node_modules/@types/node/util.d.ts" - ], - "../../node_modules/typescript/lib/lib.es2020.promise.d.ts": [ - "../../node_modules/@types/graceful-fs/index.d.ts", - "../../node_modules/@types/node/fs.d.ts", - "../../node_modules/@types/node/ts3.2/fs.d.ts", - "../../node_modules/@types/node/ts3.2/util.d.ts", - "../../node_modules/@types/node/util.d.ts" - ], - "../../node_modules/typescript/lib/lib.es2020.string.d.ts": [ - "../../node_modules/@types/graceful-fs/index.d.ts", - "../../node_modules/@types/node/fs.d.ts", - "../../node_modules/@types/node/ts3.2/fs.d.ts", - "../../node_modules/@types/node/ts3.2/util.d.ts", - "../../node_modules/@types/node/util.d.ts" - ], - "../../node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts": [ - "../../node_modules/@types/graceful-fs/index.d.ts", - "../../node_modules/@types/node/fs.d.ts", - "../../node_modules/@types/node/ts3.2/fs.d.ts", - "../../node_modules/@types/node/ts3.2/util.d.ts", - "../../node_modules/@types/node/util.d.ts" - ], - "../../node_modules/typescript/lib/lib.es5.d.ts": [ - "../../node_modules/@types/graceful-fs/index.d.ts", - "../../node_modules/@types/node/fs.d.ts", - "../../node_modules/@types/node/ts3.2/fs.d.ts", - "../../node_modules/@types/node/ts3.2/util.d.ts", - "../../node_modules/@types/node/util.d.ts" - ], - "../../node_modules/typescript/lib/lib.esnext.d.ts": [ - "../../node_modules/@types/graceful-fs/index.d.ts", - "../../node_modules/@types/node/fs.d.ts", - "../../node_modules/@types/node/ts3.2/fs.d.ts", - "../../node_modules/@types/node/ts3.2/util.d.ts", - "../../node_modules/@types/node/util.d.ts" - ], - "../../node_modules/typescript/lib/lib.esnext.intl.d.ts": [ - "../../node_modules/@types/graceful-fs/index.d.ts", - "../../node_modules/@types/node/fs.d.ts", - "../../node_modules/@types/node/ts3.2/fs.d.ts", - "../../node_modules/@types/node/ts3.2/util.d.ts", - "../../node_modules/@types/node/util.d.ts" - ], - "../../node_modules/typescript/lib/lib.esnext.promise.d.ts": [ - "../../node_modules/@types/graceful-fs/index.d.ts", - "../../node_modules/@types/node/fs.d.ts", - "../../node_modules/@types/node/ts3.2/fs.d.ts", - "../../node_modules/@types/node/ts3.2/util.d.ts", - "../../node_modules/@types/node/util.d.ts" - ], - "../../node_modules/typescript/lib/lib.esnext.string.d.ts": [ - "../../node_modules/@types/graceful-fs/index.d.ts", - "../../node_modules/@types/node/fs.d.ts", - "../../node_modules/@types/node/ts3.2/fs.d.ts", - "../../node_modules/@types/node/ts3.2/util.d.ts", - "../../node_modules/@types/node/util.d.ts" - ], - "../src/index.ts": [ - "../src/context.ts", - "../src/runtime.ts", - "../src/utils.ts" - ], - "../src/runtime.ts": [ - "../src/context.ts", - "../src/types.ts" - ], - "../src/utils.ts": [ - "../src/types.ts" - ] - }, - "semanticDiagnosticsPerFile": [ - "../../node_modules/@babel/parser/typings/babel-parser.d.ts", - "../../node_modules/@babel/types/lib/index.d.ts", - "../../node_modules/@types/babel__core/index.d.ts", - "../../node_modules/@types/babel__generator/index.d.ts", - "../../node_modules/@types/babel__template/index.d.ts", - "../../node_modules/@types/babel__traverse/index.d.ts", - "../../node_modules/@types/bn.js/index.d.ts", - "../../node_modules/@types/bs58/index.d.ts", - "../../node_modules/@types/chance/index.d.ts", - "../../node_modules/@types/color-name/index.d.ts", - "../../node_modules/@types/graceful-fs/index.d.ts", - "../../node_modules/@types/istanbul-lib-coverage/index.d.ts", - "../../node_modules/@types/istanbul-lib-report/index.d.ts", - "../../node_modules/@types/istanbul-reports/index.d.ts", - "../../node_modules/@types/jest/index.d.ts", - "../../node_modules/@types/jest/node_modules/jest-diff/build/cleanupsemantic.d.ts", - "../../node_modules/@types/jest/node_modules/jest-diff/build/difflines.d.ts", - "../../node_modules/@types/jest/node_modules/jest-diff/build/index.d.ts", - "../../node_modules/@types/jest/node_modules/jest-diff/build/printdiffs.d.ts", - "../../node_modules/@types/jest/node_modules/jest-diff/build/types.d.ts", - "../../node_modules/@types/jest/node_modules/pretty-format/build/index.d.ts", - "../../node_modules/@types/jest/node_modules/pretty-format/build/types.d.ts", - "../../node_modules/@types/jest/ts3.2/index.d.ts", - "../../node_modules/@types/js-base64/index.d.ts", - "../../node_modules/@types/node/async_hooks.d.ts", - "../../node_modules/@types/node/base.d.ts", - "../../node_modules/@types/node/buffer.d.ts", - "../../node_modules/@types/node/child_process.d.ts", - "../../node_modules/@types/node/cluster.d.ts", - "../../node_modules/@types/node/console.d.ts", - "../../node_modules/@types/node/constants.d.ts", - "../../node_modules/@types/node/crypto.d.ts", - "../../node_modules/@types/node/dgram.d.ts", - "../../node_modules/@types/node/dns.d.ts", - "../../node_modules/@types/node/domain.d.ts", - "../../node_modules/@types/node/events.d.ts", - "../../node_modules/@types/node/fs.d.ts", - "../../node_modules/@types/node/fs/promises.d.ts", - "../../node_modules/@types/node/globals.d.ts", - "../../node_modules/@types/node/http.d.ts", - "../../node_modules/@types/node/http2.d.ts", - "../../node_modules/@types/node/https.d.ts", - "../../node_modules/@types/node/inspector.d.ts", - "../../node_modules/@types/node/module.d.ts", - "../../node_modules/@types/node/net.d.ts", - "../../node_modules/@types/node/os.d.ts", - "../../node_modules/@types/node/path.d.ts", - "../../node_modules/@types/node/perf_hooks.d.ts", - "../../node_modules/@types/node/process.d.ts", - "../../node_modules/@types/node/punycode.d.ts", - "../../node_modules/@types/node/querystring.d.ts", - "../../node_modules/@types/node/readline.d.ts", - "../../node_modules/@types/node/repl.d.ts", - "../../node_modules/@types/node/stream.d.ts", - "../../node_modules/@types/node/string_decoder.d.ts", - "../../node_modules/@types/node/timers.d.ts", - "../../node_modules/@types/node/tls.d.ts", - "../../node_modules/@types/node/trace_events.d.ts", - "../../node_modules/@types/node/ts3.2/base.d.ts", - "../../node_modules/@types/node/ts3.2/fs.d.ts", - "../../node_modules/@types/node/ts3.2/globals.d.ts", - "../../node_modules/@types/node/ts3.2/util.d.ts", - "../../node_modules/@types/node/ts3.5/base.d.ts", - "../../node_modules/@types/node/ts3.5/globals.global.d.ts", - "../../node_modules/@types/node/ts3.5/wasi.d.ts", - "../../node_modules/@types/node/ts3.7/assert.d.ts", - "../../node_modules/@types/node/ts3.7/base.d.ts", - "../../node_modules/@types/node/ts3.7/index.d.ts", - "../../node_modules/@types/node/tty.d.ts", - "../../node_modules/@types/node/url.d.ts", - "../../node_modules/@types/node/util.d.ts", - "../../node_modules/@types/node/v8.d.ts", - "../../node_modules/@types/node/vm.d.ts", - "../../node_modules/@types/node/worker_threads.d.ts", - "../../node_modules/@types/node/zlib.d.ts", - "../../node_modules/@types/normalize-package-data/index.d.ts", - "../../node_modules/@types/prettier/index.d.ts", - "../../node_modules/@types/stack-utils/index.d.ts", - "../../node_modules/@types/yargs-parser/index.d.ts", - "../../node_modules/@types/yargs/index.d.ts", - "../../node_modules/base-x/src/index.d.ts", - "../../node_modules/typescript/lib/lib.es2015.collection.d.ts", - "../../node_modules/typescript/lib/lib.es2015.core.d.ts", - "../../node_modules/typescript/lib/lib.es2015.d.ts", - "../../node_modules/typescript/lib/lib.es2015.generator.d.ts", - "../../node_modules/typescript/lib/lib.es2015.iterable.d.ts", - "../../node_modules/typescript/lib/lib.es2015.promise.d.ts", - "../../node_modules/typescript/lib/lib.es2015.proxy.d.ts", - "../../node_modules/typescript/lib/lib.es2015.reflect.d.ts", - "../../node_modules/typescript/lib/lib.es2015.symbol.d.ts", - "../../node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts", - "../../node_modules/typescript/lib/lib.es2016.array.include.d.ts", - "../../node_modules/typescript/lib/lib.es2016.d.ts", - "../../node_modules/typescript/lib/lib.es2017.d.ts", - "../../node_modules/typescript/lib/lib.es2017.intl.d.ts", - "../../node_modules/typescript/lib/lib.es2017.object.d.ts", - "../../node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts", - "../../node_modules/typescript/lib/lib.es2017.string.d.ts", - "../../node_modules/typescript/lib/lib.es2017.typedarrays.d.ts", - "../../node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts", - "../../node_modules/typescript/lib/lib.es2018.asynciterable.d.ts", - "../../node_modules/typescript/lib/lib.es2018.d.ts", - "../../node_modules/typescript/lib/lib.es2018.intl.d.ts", - "../../node_modules/typescript/lib/lib.es2018.promise.d.ts", - "../../node_modules/typescript/lib/lib.es2018.regexp.d.ts", - "../../node_modules/typescript/lib/lib.es2019.array.d.ts", - "../../node_modules/typescript/lib/lib.es2019.d.ts", - "../../node_modules/typescript/lib/lib.es2019.object.d.ts", - "../../node_modules/typescript/lib/lib.es2019.string.d.ts", - "../../node_modules/typescript/lib/lib.es2019.symbol.d.ts", - "../../node_modules/typescript/lib/lib.es2020.bigint.d.ts", - "../../node_modules/typescript/lib/lib.es2020.d.ts", - "../../node_modules/typescript/lib/lib.es2020.promise.d.ts", - "../../node_modules/typescript/lib/lib.es2020.string.d.ts", - "../../node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts", - "../../node_modules/typescript/lib/lib.es5.d.ts", - "../../node_modules/typescript/lib/lib.esnext.d.ts", - "../../node_modules/typescript/lib/lib.esnext.intl.d.ts", - "../../node_modules/typescript/lib/lib.esnext.promise.d.ts", - "../../node_modules/typescript/lib/lib.esnext.string.d.ts", - "../src/bin.ts", - "../src/context.ts", - "../src/index.ts", - "../src/runtime.ts", - "../src/types.ts", - "../src/utils.ts" - ] - }, - "version": "3.9.3" -} \ No newline at end of file From 5f1243e211f901060001d63432c0533b399db62b Mon Sep 17 00:00:00 2001 From: Kai Aichholz Date: Thu, 11 Jun 2020 23:42:55 -0700 Subject: [PATCH 06/11] initial implementation in progress. untested. --- assembly/__tests__/runtime/avl-tree.spec.ts | 18 +- assembly/runtime/collections/avlTree.ts | 335 +++++++++++++++++--- 2 files changed, 307 insertions(+), 46 deletions(-) diff --git a/assembly/__tests__/runtime/avl-tree.spec.ts b/assembly/__tests__/runtime/avl-tree.spec.ts index 35ca2a8c..b92e05e5 100644 --- a/assembly/__tests__/runtime/avl-tree.spec.ts +++ b/assembly/__tests__/runtime/avl-tree.spec.ts @@ -80,20 +80,20 @@ describe("AVLTrees should handle", () => { expect(tree.containsKey(key)).toBeTruthy("The tree should contain the key"); expect(tree.getSome(key)).toStrictEqual(value); }); - + it("checks for non-existent keys", () => { const key = 1; expect(tree.has(key)).toBeFalsy("tree should not have the key"); expect(tree.containsKey(key)).toBeFalsy("tree should not contain the key"); }); - + throws("if attempting to get a non-existent key", () => { const key = 1; tree.getSome(key); }); - + it("is empty", () => { const key = 42; expect(tree.size).toStrictEqual(0); @@ -105,7 +105,7 @@ describe("AVLTrees should handle", () => { // expect(tree.lower(key)).toThrow("min() should throw for empty tree"); // expect(tree.higher(key)).toThrow("min() should throw for empty tree"); }); - + it("rotates left twice when inserting 3 keys in decreasing order", () => { expect(height(tree)).toStrictEqual(0); @@ -118,8 +118,7 @@ describe("AVLTrees should handle", () => { tree.insert(1, 1); expect(height(tree)).toStrictEqual(2); - const root = tree.root; - expect(root).toStrictEqual(1); + expect(tree.rootKey).toStrictEqual(1); // expect(tree.node(root).map(n => n.key)).toStrictEqual(2); FIXME }); @@ -135,8 +134,7 @@ describe("AVLTrees should handle", () => { tree.insert(3, 3); expect(height(tree)).toStrictEqual(2); - const root = tree.root; - expect(root).toStrictEqual(1); + expect(tree.rootKey).toStrictEqual(1); // expect(tree.node(root).map(n => n.key)).toStrictEqual(2); FIXME }); @@ -426,9 +424,9 @@ describe("AVLTrees should handle", () => { tree.insert(1, 1); tree.insert(4, 1); - expect(tree.root).toStrictEqual(2); + expect(tree.rootKey).toStrictEqual(2); tree.remove(2); - expect(tree.root).toStrictEqual(3); + expect(tree.rootKey).toStrictEqual(3); expect(tree.getSome(1)).toStrictEqual(1); expect(() => { tree.getSome(2) }).toThrow("tree should throw when getting removed key (root of the tree)"); diff --git a/assembly/runtime/collections/avlTree.ts b/assembly/runtime/collections/avlTree.ts index 93d30dce..aef19f59 100644 --- a/assembly/runtime/collections/avlTree.ts +++ b/assembly/runtime/collections/avlTree.ts @@ -1,43 +1,89 @@ -import { collections } from "../collections"; -// import { storage } from "../storage"; +import { PersistentMap, PersistentVector, collections } from "../collections"; +import { MapEntry } from "./util"; +import { storage } from "../storage"; + +class Nullable { + constructor(public val: T) { + this.val = val; + } +} + +type NodeId = i32; +type ChildParentPair = AVLTreeNode[]; + +enum Direction { + Left, + Right +}; + +class AVLTreeNode { + constructor( + public id: NodeId, + public key: K, + public left: Nullable | null = null, + public right: Nullable | null = null, + public height: u32 = 1 + ) { + this.id = id; + this.key = key; + this.left = left; + this.right = right; + this.height = height; + } +} @nearBindgen export class AVLTree { private _elementPrefix: string; + private val: PersistentMap; + private tree: PersistentVector>; + private _rootId: Nullable | null; /** * A string name is used as a prefix for writing keys to storage. */ constructor(name: string) { this._elementPrefix = name + collections._KEY_ELEMENT_SUFFIX; + this.val = new PersistentMap(this._elementPrefix + "val"); + this.tree = new PersistentVector>(this._elementPrefix + "tree"); + this._rootId = null; } /** * @returns Number of elements in the tree. */ get size(): u32 { - // TODO implement size() - throw new Error("TODO implement size()") + return this.tree.length; + } + //alias to match rust sdk + get len(): u32 { + return this.size; } /** * @returns Root key of the tree. */ - get root(): K { - // TODO make private - // TODO implement root() - throw new Error("TODO implement root()") + get rootKey(): K { + return this.rootNode!.key; + } + + set rootId(rootId: Nullable | null) { + this._rootId = rootId; + storage.set(this._elementPrefix + "root", this._rootId); + } + + get rootId(): Nullable | null { + return this._rootId; } /** * @returns Whether the key is present in the tree. */ - has(key: K): boolean { - // TODO implement has() - throw new Error("TODO implement has()") + has(key: K): bool { + return this.val.contains(key); } //alias to match rust sdk - containsKey(key: K): boolean { + containsKey(key: K): bool { return this.has(key); } @@ -49,8 +95,11 @@ export class AVLTree { * @param value The new value of the element. */ set(key: K, value: V): void { - // TODO implement set() - throw new Error("TODO implement set()") + if (!this.has(key)) { + this.rootId = new Nullable(this.insertAt(this.rootNode, key).id); + } + + this.val.set(key, value); } //alias to match rust sdk insert(key: K, value: V): void { @@ -64,7 +113,7 @@ export class AVLTree { * @returns Value for the given key or the default value. */ get(key: K, defaultValue: V | null = null): V | null { - return this.has(key) ? this.get(key) : defaultValue; + return this.val.get(key, defaultValue); } /** @@ -75,8 +124,7 @@ export class AVLTree { * @returns Value for the given key or the default value. */ getSome(key: K): V { - // TODO implement getSome() - throw new Error("TODO implement getSome()") + return this.val.getSome(key); } /** @@ -85,8 +133,10 @@ export class AVLTree { * @param key Key to remove. */ delete(key: K): void { - // TODO implement delete() - throw new Error("TODO implement delete()") + if (this.has(key)) { + this.rootId = new Nullable(this.doRemove(key).id); + this.val.delete(key); + } } //alias to match rust sdk remove(key: K): void { @@ -103,7 +153,6 @@ export class AVLTree { * @returns Range of values corresponding to keys within start and end bounds. */ values(start: K, end: K): V[] { - // TODO implement range() throw new Error("TODO implement values()"); } @@ -116,7 +165,6 @@ export class AVLTree { * @returns Range of keys within start and end bounds. */ keys(start: K, end: K): K[] { - // TODO implement range() throw new Error("TODO implement range()"); } @@ -128,12 +176,11 @@ export class AVLTree { * @param end Key for upper bound (exclusive). * @returns Range of entries corresponding to keys within start and end bounds. */ - entries(start: K, end: K): collections.MapEntry[] { - // TODO implement range() + entries(start: K, end: K): MapEntry[] { throw new Error("TODO implement range()"); } //alias to match rust sdk - range(start: K, end: K): collections.MapEntry[] { + range(start: K, end: K): MapEntry[] { return this.entries(start, end); } @@ -143,8 +190,7 @@ export class AVLTree { * @returns Minimum key. */ min(): K { - // TODO implement min() - throw new Error("TODO implement min()"); + return this.minAt(this.rootNode!)[0].key; } /** @@ -153,8 +199,7 @@ export class AVLTree { * @returns Maximum key. */ max(): K { - // TODO implement max() - throw new Error("TODO implement max()"); + return this.maxAt(this.rootNode!)[0].key; } /** @@ -164,7 +209,6 @@ export class AVLTree { * @returns Maximum key that is strictly less than given key. */ lower(key: K): K { - // TODO implement lower() throw new Error("TODO implement lower()"); } @@ -175,7 +219,6 @@ export class AVLTree { * @returns Minimum key that is strictly greater than given key. */ higher(key: K): K { - // TODO implement higher() throw new Error("TODO implement higher()"); } @@ -186,8 +229,7 @@ export class AVLTree { * @returns Maximum key that is less than or equal to given key. */ lowerOrEqual(key: K): K { - // TODO implement lowerOrEqual() - throw new Error("TODO implement lowerOrEqual()"); + return this.has(key) ? key : this.lower(key); } //alias to match rust sdk floorKey(key: K): K { @@ -201,8 +243,7 @@ export class AVLTree { * @returns Minimum key that is greater or equal to given key. */ higherOrEqual(key: K): K { - // TODO implement higherOrEqual() - throw new Error("TODO implement lowerOrEqual()"); + return this.has(key) ? key : this.higher(key); } //alias to match rust sdk ceilKey(key: K): K { @@ -213,7 +254,229 @@ export class AVLTree { * Removes all key-value pairs from the tree */ clear(): void { - // TODO implement clear() - throw new Error("TODO implement clear()") + trace("tree.clear()"); + trace("tree.size = ", 1, this.size); + while(this.size > 0) { + trace("tree.size = ", 1, this.size); + this.val.delete(this.tree.popBack().key); + } + this.rootId = null; + } + + /** + * ********************************** + * AVL Tree core routines + * ********************************** + */ + + get rootNode(): AVLTreeNode | null { + return this.node(this.rootId); + } + + height(id: Nullable | null): u32 { + return id ? this.tree[id.val].height : 0; + } + + balance(node: AVLTreeNode): i32 { + return this.height(node.left) - this.height(node.right); + } + + updateHeight(node: AVLTreeNode): void { + node.height = 1 + max(this.height(node.left), this.height(node.right)); + this.tree[node.id] = node; + } + + node(id: Nullable | null): AVLTreeNode | null { + return id ? this.tree[id.val] : null; + } + + insertAt(parentNode: AVLTreeNode | null, key: K): AVLTreeNode { + if (!parentNode) { + const node = new AVLTreeNode(this.size, key); + this.tree.push(node); + return node; + } else { + if (key < parentNode.key) { + parentNode.left = new Nullable(this.insertAt(this.node(parentNode.left), key).id); + } else if (key > parentNode.key) { + parentNode.right = new Nullable(this.insertAt(this.node(parentNode.right), key).id); + } else { + throw new Error("Key already exists"); + // return parentNode.id; + } + + this.updateHeight(parentNode); + + return this.enforceBalance(parentNode); + } + } + + enforceBalance(node: AVLTreeNode): AVLTreeNode { + const balance = this.balance(node); + if (balance > 1) { + // implies left child must exist, since balance = left.height - right.height + if (this.balance(this.node(node.left)!) < 0) { + node.left = new Nullable(this.rotateRight(node).id); + } + return this.rotateLeft(node); + } else if (balance < -1) { + // implies right child must exist + if (this.balance(this.node(node.right)!) > 0) { + node.right = new Nullable(this.rotateLeft(node).id); + } + return this.rotateRight(node); + } else { + return node; + } + } + + rotateRight(node: AVLTreeNode): AVLTreeNode { + const childNode = this.node(node.right)!; + node.right = childNode.left; + childNode.left = new Nullable(node.id); + + this.updateHeight(node); + this.updateHeight(childNode); + + return childNode; + } + + rotateLeft(node: AVLTreeNode): AVLTreeNode { + const childNode = this.node(node.left)!; + node.left = childNode.right; + childNode.right = new Nullable(node.id); + + this.updateHeight(node); + this.updateHeight(childNode); + + return childNode; + } + + doRemove(key: K): AVLTreeNode { + const nodes = this.lookupAt(this.rootNode!, key); + let node = nodes[0]; + let parentNode = nodes[1]; + + if (!node.left && !node.right) { + // node to remove is a leaf node + if (parentNode.key < node.key) { + parentNode.right = null; + } else { + parentNode.left = null; + } + } else if (!node.left) { + // node to remove has 1 right child + // replace node to remove with its right child + if (parentNode.key < node.key) { + parentNode.right = node.right; + } else { + parentNode.left = node.right; + } + } else if (!node.right) { + // node to remove has 1 left child + // replace node to remove with its left child + if (parentNode.key < node.key) { + parentNode.right = node.left; + } else { + parentNode.left = node.left; + } + } else { + // node has 2 children, search for successor + const nodes = this.balance(node) >= 0 ? + // node to remove is left leaning + this.maxAt(this.node(node.left)!, node) : + // node to remove is right leaning + this.minAt(this.node(node.right)!, node); + + const successor = nodes[0]; + // node to remove and parentNode can be the same node on small trees (2 levels, 2-3 nodes) + // if so, make parentNode point to node + // TODO debug and validate expected behavior of parentNode pointing to node + parentNode = nodes[1].id === node.id ? node : nodes[1]; + + // remove successor from its parent + if (parentNode.key < successor.key) { + parentNode.right = null; + } else { + parentNode.left = null; + } + + // take successor's key, and update the node to remove + node.key = successor.key; + this.tree[node.id] = node; + + // remove the successor from the tree + node = successor; + } + + this.updateHeight(parentNode); + this.swapRemove(node); + + return this.rebalanceAt(this.rootNode!, parentNode.key); + } + + swapRemove(node: AVLTreeNode): void { + if (node.id === this.size - 1) { + // node is last element in tree, so no swapping needed + this.tree.pop(); + } else { + const lastNode = this.tree.swap_remove(node.id); + const nodes = this.lookupAt(this.rootNode!, lastNode.key); + const parentNode = nodes[1]; + + if (lastNode.id === this.rootId!.val) { + this.rootId = new Nullable(node.id); + } + + if (parentNode.id !== lastNode.id) { + if ((parentNode.left && parentNode.left!.val) === lastNode.id) { + parentNode.left = new Nullable(node.id); + } else { + parentNode.right = new Nullable(node.id); + } + this.tree[parentNode.id] = parentNode; + } + + lastNode.id = node.id; + this.tree[lastNode.id] = lastNode; + } + } + + minAt(root: AVLTreeNode, parentNode: AVLTreeNode | null = null): ChildParentPair { + return root.left ? + this.minAt(this.node(root.left)!, root) : + [root, parentNode ? parentNode : root]; + } + + maxAt(root: AVLTreeNode, parentNode: AVLTreeNode | null = null): ChildParentPair { + return root.right ? + this.maxAt(this.node(root.right)!, root) : + [root, parentNode ? parentNode : root]; + } + + lookupAt(root: AVLTreeNode, key: K, parentNode: AVLTreeNode | null = null): ChildParentPair { + return root.key === key ? + [root, parentNode ? parentNode : root] : + key < root.key ? + this.lookupAt(this.node(root.left)!, key) : + this.lookupAt(this.node(root.right)!, key); + } + + rebalanceAt(root: AVLTreeNode, key: K): AVLTreeNode { + if (root.key > key) { + const leftChild = this.node(root.left); + if (leftChild) { + root.left = new Nullable(this.rebalanceAt(leftChild, key).id); + } + } else if (root.key < key) { + const rightChild = this.node(root.right); + if (rightChild) { + root.right = new Nullable(this.rebalanceAt(rightChild, key).id); + } + } + + this.updateHeight(root); + + return this.enforceBalance(root); } } \ No newline at end of file From c420b9976bcb37ab97f1491473155bd860ec8f69 Mon Sep 17 00:00:00 2001 From: Kai Aichholz Date: Mon, 15 Jun 2020 19:30:30 -0700 Subject: [PATCH 07/11] initial implementation complete. initial set of tests passing --- assembly/__tests__/runtime/avl-tree.spec.ts | 104 +++---- assembly/runtime/collections/avlTree.ts | 290 ++++++++++++++++---- 2 files changed, 283 insertions(+), 111 deletions(-) diff --git a/assembly/__tests__/runtime/avl-tree.spec.ts b/assembly/__tests__/runtime/avl-tree.spec.ts index b92e05e5..44b8f20d 100644 --- a/assembly/__tests__/runtime/avl-tree.spec.ts +++ b/assembly/__tests__/runtime/avl-tree.spec.ts @@ -1,25 +1,23 @@ -import { AVLTree } from "../../runtime"; +import { AVLTree, MapEntry } from "../../runtime"; +import { RNG } from "../../runtime/math"; let tree: AVLTree; +let _closure_var1: u32; // Return height of the tree - number of nodes on the longest path starting from the root node. function height(tree: AVLTree): u32 { - throw new Error("TODO implement height()"); + return tree.height(tree.rootId); } +let _closure_rng: RNG; function random(n: i32): u32[] { const a = new Array(n); - // FIXME need rng - return a.map((_): u32 => 5); + _closure_rng = new RNG(n); + return a.map((_): u32 => _closure_rng.next()); } -function range(start: T, end: T): T[] { - const a = new Array(); - let x = start; - while (x < end) { - a.push(x); - } - return a; +function range(start: u32, end: u32): u32[] { + return (new Array(end - start)).map((_, i) => i); } function maxTreeHeight(n: f64): u32 { @@ -36,10 +34,6 @@ function maxTreeHeight(n: f64): u32 { return Math.ceil(h) as u32; } -function isBalanced(tree: AVLTree): bool { - throw new Error("TODO implement isBalanced()"); -} - // Convenience method for tests that insert then remove some values function insertThenRemove (t: AVLTree, keysToInsert: u32[], keysToRemove: u32[]): void { const map = new Map(); @@ -47,15 +41,20 @@ function insertThenRemove (t: AVLTree, keysToInsert: u32[], keysToRemo for (let i = 0; i < keysToInsert.length; ++i) { const key = keysToInsert[i]; expect(t.has(key)).toBeFalsy("tree.has() should return false for removed key"); + t.insert(key, i); map.set(key, i); - expect(t.getSome(key)).toStrictEqual(1); + + expect(t.getSome(key)).toStrictEqual(map.get(key)); } - + for (let i = 0; i < keysToRemove.length; ++i) { const key = keysToRemove[i]; - expect(t.getSome(key)).toStrictEqual(map.get(key)); + if (map.has(key)) expect(t.getSome(key)).toStrictEqual(map.get(key)); + t.remove(key); + map.delete(key); + expect(t.has(key)).toBeFalsy("tree.has() should return false for removed key"); } }; @@ -66,7 +65,7 @@ describe("AVLTrees should handle", () => { tree = new AVLTree("tree1"); }); - beforeEach(() => { + afterEach(() => { tree.clear(); }); @@ -96,14 +95,16 @@ describe("AVLTrees should handle", () => { it("is empty", () => { const key = 42; + _closure_var1 = key; + expect(tree.size).toStrictEqual(0); expect(height(tree)).toStrictEqual(0); expect(tree.has(key)).toBeFalsy("empty tree should not have the key"); expect(tree.containsKey(key)).toBeFalsy("empty tree should not have the key"); - // expect(tree.min()).toThrow("min() should throw for empty tree"); - // expect(tree.max()).toThrow("max() should throw for empty tree"); - // expect(tree.lower(key)).toThrow("min() should throw for empty tree"); - // expect(tree.higher(key)).toThrow("min() should throw for empty tree"); + expect(() => { tree.min() }).toThrow("min() should throw for empty tree"); + expect(() => { tree.max() }).toThrow("max() should throw for empty tree"); + expect(() => { tree.lower(_closure_var1) }).toThrow("lower() should throw for empty tree"); + expect(() => { tree.lower(_closure_var1) }).toThrow("higher() should throw for empty tree"); }); it("rotates left twice when inserting 3 keys in decreasing order", () => { @@ -118,10 +119,9 @@ describe("AVLTrees should handle", () => { tree.insert(1, 1); expect(height(tree)).toStrictEqual(2); - expect(tree.rootKey).toStrictEqual(1); - // expect(tree.node(root).map(n => n.key)).toStrictEqual(2); FIXME + expect(tree.rootKey).toStrictEqual(2); }); - + it("rotates right twice when inserting 3 keys in increasing order", () => { expect(height(tree)).toStrictEqual(0); @@ -134,8 +134,7 @@ describe("AVLTrees should handle", () => { tree.insert(3, 3); expect(height(tree)).toStrictEqual(2); - expect(tree.rootKey).toStrictEqual(1); - // expect(tree.node(root).map(n => n.key)).toStrictEqual(2); FIXME + expect(tree.rootKey).toStrictEqual(2); }); it("sets and gets n key-value pairs in ascending order", () => { @@ -164,7 +163,7 @@ describe("AVLTrees should handle", () => { expect(height(tree)).toBeLessThanOrEqual(maxTreeHeight(n as f64)); }); - + it("sets and gets n key-value pairs in descending order", () => { const n: u32 = 30; const cases: u32[] = range(0, n*2).reverse(); @@ -191,9 +190,10 @@ describe("AVLTrees should handle", () => { expect(height(tree)).toBeLessThanOrEqual(maxTreeHeight(n)); }); - + it("sets and gets n random key-value pairs", () => { - range(1, 10).forEach(k => { // tree size is 2^k + // TODO setup free gas env to prevent gas exceeded error, and test larger trees + range(1, 7).forEach(k => { // tree size is 2^(k-1) const n = 1 << k; const input: u32[] = random(n); @@ -222,7 +222,7 @@ describe("AVLTrees should handle", () => { const min = (keys.sort(), keys[0]); expect(tree.min()).toStrictEqual(min); }); - + it("gets the maximum key", () => { const n: u32 = 30; const keys = random(n); @@ -250,7 +250,7 @@ describe("AVLTrees should handle", () => { expect(tree.lower(50)).toStrictEqual(40); expect(tree.lower(51)).toStrictEqual(50); }); - + it("gets the key higher than the given key", () => { const keys: u32[] = [10, 20, 30, 40, 50]; @@ -266,7 +266,7 @@ describe("AVLTrees should handle", () => { expect(() => { tree.higher(50) }).toThrow("50 is equal to tree.max(), which is 50"); expect(() => { tree.higher(51) }).toThrow("51 is greater than tree.max(), which is 50"); }); - + it("gets the key lower than or equal to the given key", () => { const keys: u32[] = [10, 20, 30, 40, 50]; @@ -298,7 +298,7 @@ describe("AVLTrees should handle", () => { expect(tree.ceilKey(50)).toStrictEqual(50); expect(() => { tree.ceilKey(51) }).toThrow("51 is greater than tree.max(), which is 50"); }); - + it("removes 1 key", () => { const key = 1; const value = 2; @@ -311,7 +311,7 @@ describe("AVLTrees should handle", () => { expect(tree.has(key)).toBeFalsy(`tree should not contain key ${key}`); expect(tree.size).toStrictEqual(0); }); - + it("removes non-existent key", () => { const key = 1; const value = 2; @@ -324,19 +324,19 @@ describe("AVLTrees should handle", () => { expect(tree.getSome(key)).toStrictEqual(value); expect(tree.size).toStrictEqual(1); }); - + it("removes 3 keys in descending order", () => { const keys: u32[] = [3, 2, 1]; insertThenRemove(tree, keys, keys); expect(tree.size).toStrictEqual(0); }); - + it("removes 3 keys in ascending order", () => { const keys: u32[] = [1, 2, 3]; insertThenRemove(tree, keys, keys); expect(tree.size).toStrictEqual(0); }); - + it("removes 7 random keys", () => { const keys: u32[] = [ 2104297040, @@ -350,7 +350,7 @@ describe("AVLTrees should handle", () => { insertThenRemove(tree, keys, keys); expect(tree.size).toStrictEqual(0); }); - + // test_remove_7_regression_2() it("removes 9 random keys", () => { @@ -486,22 +486,24 @@ describe("AVLTrees should handle", () => { tree.remove(1); expect(tree.size).toStrictEqual(0); }); - + it("returns an equivalent array", () => { tree.insert(1, 41); tree.insert(2, 42); tree.insert(3, 43); - throw new Error("TODO implement toVec() for AVLTree"); - // const a = []; - // expect(tree.toVec()).toStrictEqual(a); + const a = [ + new MapEntry(1, 41), + new MapEntry(2, 42), + new MapEntry(3, 43) + ]; + expect(tree.entries(1, 4)).toStrictEqual(a); }); - + it("returns an empty array when empty", () => { - throw new Error("TODO implement toVec() for AVLTree"); - // expect(tree.toVec()).toStrictEqual([]); + expect(tree.entries(0, 0)).toStrictEqual([]); }); - + it("returns a range of values for a given start key and end key", () => { const keys = [10, 20, 30, 40, 50, 45, 35, 25, 15, 5]; const values = [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]; @@ -523,13 +525,13 @@ describe("AVLTrees should handle", () => { expect(tree.values(4, 5)).toStrictEqual([]); expect(tree.values(5, 51)).toStrictEqual([10, 1, 9, 2, 8, 3, 7, 4, 6, 5]); }); - + it("remains balanced after insertions and deletions", () => { const keysToInsert: u32[] = [2, 3, 4]; const keysToRemove: u32[] = [0, 0, 0, 1]; insertThenRemove(tree, keysToInsert, keysToRemove); - expect(isBalanced(tree)).toBeTruthy(); + expect(tree.isBalanced()).toBeTruthy(); }); it("remains balanced after more insertions and deletions", () => { @@ -537,6 +539,6 @@ describe("AVLTrees should handle", () => { const keysToRemove: u32[] = [0, 0, 0, 3, 5, 6, 7, 4]; insertThenRemove(tree, keysToInsert, keysToRemove); - expect(isBalanced(tree)).toBeTruthy(); + expect(tree.isBalanced()).toBeTruthy(); }); }); diff --git a/assembly/runtime/collections/avlTree.ts b/assembly/runtime/collections/avlTree.ts index aef19f59..66f04c5f 100644 --- a/assembly/runtime/collections/avlTree.ts +++ b/assembly/runtime/collections/avlTree.ts @@ -2,6 +2,7 @@ import { PersistentMap, PersistentVector, collections } from "../collections"; import { MapEntry } from "./util"; import { storage } from "../storage"; +@nearBindgen class Nullable { constructor(public val: T) { this.val = val; @@ -9,13 +10,15 @@ class Nullable { } type NodeId = i32; -type ChildParentPair = AVLTreeNode[]; -enum Direction { - Left, - Right -}; +class ChildParentPair { + constructor(public child: AVLTreeNode, public parent: AVLTreeNode) { + this.child = child; + this.parent = parent; + } +} +@nearBindgen class AVLTreeNode { constructor( public id: NodeId, @@ -55,7 +58,7 @@ export class AVLTree { get size(): u32 { return this.tree.length; } - //alias to match rust sdk + // alias to match rust sdk get len(): u32 { return this.size; } @@ -64,6 +67,7 @@ export class AVLTree { * @returns Root key of the tree. */ get rootKey(): K { + assert(!isNull(this.rootNode), "rootNode must be defined"); return this.rootNode!.key; } @@ -82,7 +86,7 @@ export class AVLTree { has(key: K): bool { return this.val.contains(key); } - //alias to match rust sdk + // alias to match rust sdk containsKey(key: K): bool { return this.has(key); } @@ -101,7 +105,7 @@ export class AVLTree { this.val.set(key, value); } - //alias to match rust sdk + // alias to match rust sdk insert(key: K, value: V): void { this.set(key, value); } @@ -134,18 +138,18 @@ export class AVLTree { */ delete(key: K): void { if (this.has(key)) { - this.rootId = new Nullable(this.doRemove(key).id); + this.rootId = this.doRemove(key); this.val.delete(key); } } - //alias to match rust sdk + // alias to match rust sdk remove(key: K): void { this.delete(key); } /** - * Get a range of values from a start key to an end key exclusive. + * Get a range of values from a start key (inclusive) to an end key (exclusive). * If end is greater than max key, include start to max inclusive. * * @param start Key for lower bound (inclusive). @@ -153,11 +157,17 @@ export class AVLTree { * @returns Range of values corresponding to keys within start and end bounds. */ values(start: K, end: K): V[] { - throw new Error("TODO implement values()"); + const keys = this.keys(start, end); + const values: V[] = []; + for (let i = 0; i < keys.length; ++i) { + const key = keys[i]; + values.push(this.val.getSome(key)); + } + return values; } /** - * Get a range of keys from a start key to an end key exclusive. + * Get a range of keys from a start key (inclusive) to an end key (exclusive). * If end is greater than max key, include start to max inclusive. * * @param start Key for lower bound (inclusive). @@ -165,11 +175,49 @@ export class AVLTree { * @returns Range of keys within start and end bounds. */ keys(start: K, end: K): K[] { - throw new Error("TODO implement range()"); + const rootNode = this.rootNode; + const sorted: K[] = []; + if (rootNode) { + const visited: AVLTreeNode[] = []; + + this.traverseLeft(start, rootNode, visited); + + while (visited.length) { + const node = visited.pop(); + + if ( + // key must always be gte start bound + node.key >= start && ( + // if start and end bound are equal, + // end bound becomes lte instead of strictly less than + start === end ? + node.key <= end : + node.key < end + ) + ) { + sorted.push(node.key); + } + + if (node.key < end && node.right) { + this.traverseLeft(start, this.node(node.right)!, visited); + } + } + } + + return sorted; + } + + // TODO make private + traverseLeft(start: K, node: AVLTreeNode, visited: AVLTreeNode[]): void { + while (node.key >= start && node.left) { + visited.push(node); + node = this.node(node.left)!; + } + visited.push(node); } /** - * Get a range of entries from a start key to an end key exclusive. + * Get a range of entries from a start key (inclusive) to an end key (exclusive). * If end is greater than max key, include start to max inclusive. * * @param start Key for lower bound (inclusive). @@ -177,9 +225,15 @@ export class AVLTree { * @returns Range of entries corresponding to keys within start and end bounds. */ entries(start: K, end: K): MapEntry[] { - throw new Error("TODO implement range()"); + const keys = this.keys(start, end); + const entries: MapEntry[] = []; + for (let i = 0; i < keys.length; ++i) { + const key = keys[i]; + entries.push(new MapEntry(key, this.val.getSome(key))); + } + return entries; } - //alias to match rust sdk + // alias to match rust sdk range(start: K, end: K): MapEntry[] { return this.entries(start, end); } @@ -190,7 +244,7 @@ export class AVLTree { * @returns Minimum key. */ min(): K { - return this.minAt(this.rootNode!)[0].key; + return this.minAt(this.rootNode!).child.key; } /** @@ -199,7 +253,7 @@ export class AVLTree { * @returns Maximum key. */ max(): K { - return this.maxAt(this.rootNode!)[0].key; + return this.maxAt(this.rootNode!).child.key; } /** @@ -209,7 +263,23 @@ export class AVLTree { * @returns Maximum key that is strictly less than given key. */ lower(key: K): K { - throw new Error("TODO implement lower()"); + let root = this.rootNode!; + + while (root.left || root.right) { + if (root.key >= key && root.left) { + root = this.node(root.left)!; + } else if (root.right) { + const rightNode = this.node(root.right)!; + if (rightNode.key < key) { + root = rightNode; + } else { + break; + } + } + } + + if (root.key >= key) throw new Error(`key is less than mininum key in tree`) + else return root.key; } /** @@ -219,7 +289,23 @@ export class AVLTree { * @returns Minimum key that is strictly greater than given key. */ higher(key: K): K { - throw new Error("TODO implement higher()"); + let root = this.rootNode!; + + while (root.left || root.right) { + if (root.key <= key && root.right) { + root = this.node(root.right)!; + } else if (root.right) { + const leftNode = this.node(root.left)!; + if (leftNode.key > key) { + root = leftNode; + } else { + break; + } + } + } + + if (root.key <= key) throw new Error(`key is greater than maximum key in tree`) + else return root.key; } /** @@ -231,7 +317,7 @@ export class AVLTree { lowerOrEqual(key: K): K { return this.has(key) ? key : this.lower(key); } - //alias to match rust sdk + // alias to match rust sdk floorKey(key: K): K { return this.lowerOrEqual(key); } @@ -245,7 +331,7 @@ export class AVLTree { higherOrEqual(key: K): K { return this.has(key) ? key : this.higher(key); } - //alias to match rust sdk + // alias to match rust sdk ceilKey(key: K): K { return this.higherOrEqual(key); } @@ -254,42 +340,66 @@ export class AVLTree { * Removes all key-value pairs from the tree */ clear(): void { - trace("tree.clear()"); - trace("tree.size = ", 1, this.size); while(this.size > 0) { - trace("tree.size = ", 1, this.size); this.val.delete(this.tree.popBack().key); } this.rootId = null; } + // TODO make private + toString(): string { + const a: string[] = ["\n"]; + for (let i: i32 = 0; i < i32(this.size); ++i) { + const node = this.tree[i]; + const key = u32(node.key).toString(); + const index = node.id.toString(); + const leftKey = node.left ? u32(this.node(node.left)!.key).toString() : "null"; + const rightKey = node.right ? u32(this.node(node.right)!.key).toString() : "null"; + const isRoot = node.id === this.rootId!.val ? "true" : "false" + const childrenProperties: string[] = [leftKey, rightKey, isRoot]; + const nodeProperties: string[] = [key, ",", index, ":", childrenProperties.join()]; + a.push(nodeProperties.join(" ")); + } + return a.join("\n"); + } + /** * ********************************** * AVL Tree core routines * ********************************** */ + // returns the root node of the tree, if it exists. + // returns null otherwise get rootNode(): AVLTreeNode | null { return this.node(this.rootId); } + // returns the height for a given node height(id: Nullable | null): u32 { return id ? this.tree[id.val].height : 0; } + // returns the difference in heights between a node's left and right subtrees balance(node: AVLTreeNode): i32 { return this.height(node.left) - this.height(node.right); } + // updates the height for a given node based on the heights of its subtrees updateHeight(node: AVLTreeNode): void { node.height = 1 + max(this.height(node.left), this.height(node.right)); this.tree[node.id] = node; } + // returns the node for the given id (index into underlying array this.tree) node(id: Nullable | null): AVLTreeNode | null { return id ? this.tree[id.val] : null; } + // inserts a new key into the tree and + // recursively updates the height of each node in the tree, + // performing rotations as needed from bottom to top + // to maintain the AVL tree balance invariant insertAt(parentNode: AVLTreeNode | null, key: K): AVLTreeNode { if (!parentNode) { const node = new AVLTreeNode(this.size, key); @@ -301,8 +411,8 @@ export class AVLTree { } else if (key > parentNode.key) { parentNode.right = new Nullable(this.insertAt(this.node(parentNode.right), key).id); } else { - throw new Error("Key already exists"); - // return parentNode.id; + trace("\t FATAL ERROR in avlTree.ts for insertAt()"); + throw new Error("Key already exists, but does not have an associated value"); } this.updateHeight(parentNode); @@ -311,25 +421,37 @@ export class AVLTree { } } + // given a node + // performs a single set left and right rotations to maintain AVL tree balance invariant enforceBalance(node: AVLTreeNode): AVLTreeNode { const balance = this.balance(node); if (balance > 1) { // implies left child must exist, since balance = left.height - right.height - if (this.balance(this.node(node.left)!) < 0) { - node.left = new Nullable(this.rotateRight(node).id); + const leftChildNode = this.node(node.left)!; + if (this.balance(leftChildNode) < 0) { + node.left = new Nullable(this.rotateRight(leftChildNode).id); } return this.rotateLeft(node); } else if (balance < -1) { // implies right child must exist - if (this.balance(this.node(node.right)!) > 0) { - node.right = new Nullable(this.rotateLeft(node).id); + const rightChildNode = this.node(node.right)!; + if (this.balance(rightChildNode) > 0) { + node.right = new Nullable(this.rotateLeft(rightChildNode).id); } return this.rotateRight(node); } else { + // node is already balanced return node; } } + // given a node + // performs a righthand rotation + // node child + // \ / + // child -> node + // / \ + // child.left child.right rotateRight(node: AVLTreeNode): AVLTreeNode { const childNode = this.node(node.right)!; node.right = childNode.left; @@ -341,6 +463,13 @@ export class AVLTree { return childNode; } + // given a node + // performs a lefthand rotation + // node child + // / \ + // child -> node + // \ / + // child.right child.right rotateLeft(node: AVLTreeNode): AVLTreeNode { const childNode = this.node(node.left)!; node.left = childNode.right; @@ -352,10 +481,12 @@ export class AVLTree { return childNode; } - doRemove(key: K): AVLTreeNode { - const nodes = this.lookupAt(this.rootNode!, key); - let node = nodes[0]; - let parentNode = nodes[1]; + // removes the given key from the tree, maintaining the AVL balance invariant + doRemove(key: K): Nullable | null { + const nodeAndParent = this.lookupAt(this.rootNode!, key); + let node = nodeAndParent.child; + let parentNode = nodeAndParent.parent; + let successorId: Nullable | null; if (!node.left && !node.right) { // node to remove is a leaf node @@ -364,6 +495,7 @@ export class AVLTree { } else { parentNode.left = null; } + successorId = null; } else if (!node.left) { // node to remove has 1 right child // replace node to remove with its right child @@ -372,6 +504,7 @@ export class AVLTree { } else { parentNode.left = node.right; } + successorId = node.right; } else if (!node.right) { // node to remove has 1 left child // replace node to remove with its left child @@ -380,88 +513,115 @@ export class AVLTree { } else { parentNode.left = node.left; } + successorId = node.left; } else { // node has 2 children, search for successor - const nodes = this.balance(node) >= 0 ? - // node to remove is left leaning + const isLeftLeaning = this.balance(node) >= 0; + const nodes = isLeftLeaning ? + // node to remove is left leaning, so search left subtree this.maxAt(this.node(node.left)!, node) : - // node to remove is right leaning + // node to remove is right leaning, so search right subtree this.minAt(this.node(node.right)!, node); + + const successor = nodes.child; - const successor = nodes[0]; // node to remove and parentNode can be the same node on small trees (2 levels, 2-3 nodes) // if so, make parentNode point to node - // TODO debug and validate expected behavior of parentNode pointing to node - parentNode = nodes[1].id === node.id ? node : nodes[1]; + parentNode = nodes.parent.id === node.id ? node : nodes.parent; - // remove successor from its parent - if (parentNode.key < successor.key) { - parentNode.right = null; + const successorIsLeftChild = parentNode.left ? parentNode.left!.val === successor.id : false; + + // remove successor from its parent, and link the successor's child to its grandparent + if (successorIsLeftChild) { + parentNode.left = isLeftLeaning ? successor.left : successor.right; } else { - parentNode.left = null; + parentNode.right = isLeftLeaning ? successor.left : successor.right; } - + // take successor's key, and update the node to remove node.key = successor.key; this.tree[node.id] = node; - - // remove the successor from the tree + successorId = new Nullable(node.id); + + // set node to point to successor, so it is removed from the tree node = successor; } this.updateHeight(parentNode); this.swapRemove(node); - return this.rebalanceAt(this.rootNode!, parentNode.key); + return this.size > 0 && this.rootNode ? + new Nullable(this.rebalanceAt(this.rootNode!, parentNode.key).id) : + successorId; } + // removes the given node from the tree, + // and replaces it with the last node in the underlying array (this.tree) swapRemove(node: AVLTreeNode): void { if (node.id === this.size - 1) { // node is last element in tree, so no swapping needed - this.tree.pop(); + if (node.id === this.rootId!.val) { + this.rootId = null; + } } else { - const lastNode = this.tree.swap_remove(node.id); - const nodes = this.lookupAt(this.rootNode!, lastNode.key); - const parentNode = nodes[1]; + const lastNode = this.tree[this.size - 1]; + const parentNode = this.lookupAt(this.rootNode!, lastNode.key).parent; if (lastNode.id === this.rootId!.val) { this.rootId = new Nullable(node.id); } + // check to make sure that parentNode and lastNode do not overlap if (parentNode.id !== lastNode.id) { - if ((parentNode.left && parentNode.left!.val) === lastNode.id) { + // make lastNode's parent point to new index (index of node that lastNode is replacing) + if (parentNode.left ? parentNode.left!.val === lastNode.id : false) { parentNode.left = new Nullable(node.id); } else { parentNode.right = new Nullable(node.id); } + + // update the parentNode this.tree[parentNode.id] = parentNode; } + // update index of lastNode lastNode.id = node.id; this.tree[lastNode.id] = lastNode; } + + this.tree.pop(); } + // given a starting node + // returns the leftmost (min) descendant node, and its parent minAt(root: AVLTreeNode, parentNode: AVLTreeNode | null = null): ChildParentPair { return root.left ? this.minAt(this.node(root.left)!, root) : - [root, parentNode ? parentNode : root]; + new ChildParentPair(root, parentNode ? parentNode : root); } + // given a starting node + // returns the rightmost (max) descendant node, and its parent maxAt(root: AVLTreeNode, parentNode: AVLTreeNode | null = null): ChildParentPair { return root.right ? this.maxAt(this.node(root.right)!, root) : - [root, parentNode ? parentNode : root]; + new ChildParentPair(root, parentNode ? parentNode : root); } + // given a key and a starting node + // returns the node with the associated key, as well as its parent (if it exists) + // caution: this method assumes the key exists in the tree, and will throw otherwise lookupAt(root: AVLTreeNode, key: K, parentNode: AVLTreeNode | null = null): ChildParentPair { return root.key === key ? - [root, parentNode ? parentNode : root] : + new ChildParentPair(root, parentNode ? parentNode : root) : key < root.key ? - this.lookupAt(this.node(root.left)!, key) : - this.lookupAt(this.node(root.right)!, key); + this.lookupAt(this.node(root.left)!, key, root) : + this.lookupAt(this.node(root.right)!, key, root); } + // recursively updates the height of each node in the tree, + // and performs rotations as needed from bottom to top + // to maintain the AVL tree balance invariant rebalanceAt(root: AVLTreeNode, key: K): AVLTreeNode { if (root.key > key) { const leftChild = this.node(root.left); @@ -479,4 +639,14 @@ export class AVLTree { return this.enforceBalance(root); } + + // recursively checks that each node in the tree is balanced by checking that + // the AVL tree invariant holds: + // any node's left and right subtrees must have a difference in height <= 1 + isBalanced(root: AVLTreeNode | null = this.rootNode): bool { + const b = root ? this.balance(root) : 0 + return b >= -1 && b <= 1 && + root ? this.isBalanced(this.node(root.left)) && this.isBalanced(this.node(root.right)) : + true + } } \ No newline at end of file From 46ad1d49ba896977308608d03e70f165bb9a80d7 Mon Sep 17 00:00:00 2001 From: Kai Aichholz Date: Tue, 16 Jun 2020 14:16:06 -0700 Subject: [PATCH 08/11] add basic prop test. increase prepaid gas for certain tests. make internal avl tree methods private --- assembly/__tests__/runtime/avl-tree.spec.ts | 71 +++++++++--- assembly/runtime/collections/avlTree.ts | 121 ++++++++++---------- 2 files changed, 117 insertions(+), 75 deletions(-) diff --git a/assembly/__tests__/runtime/avl-tree.spec.ts b/assembly/__tests__/runtime/avl-tree.spec.ts index 44b8f20d..171d9720 100644 --- a/assembly/__tests__/runtime/avl-tree.spec.ts +++ b/assembly/__tests__/runtime/avl-tree.spec.ts @@ -1,5 +1,6 @@ import { AVLTree, MapEntry } from "../../runtime"; import { RNG } from "../../runtime/math"; +import { Context } from "../../vm"; let tree: AVLTree; let _closure_var1: u32; @@ -12,7 +13,7 @@ function height(tree: AVLTree): u32 { let _closure_rng: RNG; function random(n: i32): u32[] { const a = new Array(n); - _closure_rng = new RNG(n); + _closure_rng = new RNG(2 * n); return a.map((_): u32 => _closure_rng.next()); } @@ -35,29 +36,54 @@ function maxTreeHeight(n: f64): u32 { } // Convenience method for tests that insert then remove some values -function insertThenRemove (t: AVLTree, keysToInsert: u32[], keysToRemove: u32[]): void { +function insertThenRemove(t: AVLTree, keysToInsert: u32[], keysToRemove: u32[]): void { const map = new Map(); + insertKeys(t, keysToInsert, map); + removeKeys(t, keysToRemove, map); +}; + +function insertKeys(t: AVLTree, keysToInsert: u32[], map: Map | null = null): void { for (let i = 0; i < keysToInsert.length; ++i) { const key = keysToInsert[i]; - expect(t.has(key)).toBeFalsy("tree.has() should return false for removed key"); - + expect(t.has(key)).toBeFalsy("tree.has() should return false for key that has not been inserted yet. Are duplicate keys being inserted?"); + t.insert(key, i); - map.set(key, i); + expect(t.getSome(key)).toStrictEqual(i); - expect(t.getSome(key)).toStrictEqual(map.get(key)); + if (map) { + map.set(key, i); + expect(t.getSome(key)).toStrictEqual(map.get(key)); + } } +} +function removeKeys(t: AVLTree, keysToRemove: u32[], map: Map | null = null): void { for (let i = 0; i < keysToRemove.length; ++i) { const key = keysToRemove[i]; - if (map.has(key)) expect(t.getSome(key)).toStrictEqual(map.get(key)); + if (map && map.has(key)) { + expect(t.getSome(key)).toStrictEqual(map.get(key)); + map.delete(key); + } t.remove(key); - map.delete(key); - expect(t.has(key)).toBeFalsy("tree.has() should return false for removed key"); } -}; +} + +function generateRandomTree(t: AVLTree, n: u32): Map { + const map = new Map(); + const keysToInsert = random(2 * n); + const keysToRemove: u32[] = []; + for (let i = 0; i < i32(n); ++i) { + keysToRemove.push(keysToInsert[i]); + } + + insertKeys(t, keysToInsert, map); + removeKeys(t, keysToRemove, map); + + return map; +} describe("AVLTrees should handle", () => { @@ -161,7 +187,7 @@ describe("AVLTrees should handle", () => { } } - expect(height(tree)).toBeLessThanOrEqual(maxTreeHeight(n as f64)); + expect(height(tree)).toBeLessThanOrEqual(maxTreeHeight(n)); }); it("sets and gets n key-value pairs in descending order", () => { @@ -192,8 +218,9 @@ describe("AVLTrees should handle", () => { }); it("sets and gets n random key-value pairs", () => { + Context.setPrepaid_gas(u64.MAX_VALUE); // TODO setup free gas env to prevent gas exceeded error, and test larger trees - range(1, 7).forEach(k => { // tree size is 2^(k-1) + range(1, 8).forEach(k => { // tree size is 2^(k-1) const n = 1 << k; const input: u32[] = random(n); @@ -526,7 +553,7 @@ describe("AVLTrees should handle", () => { expect(tree.values(5, 51)).toStrictEqual([10, 1, 9, 2, 8, 3, 7, 4, 6, 5]); }); - it("remains balanced after insertions and deletions", () => { + it("remains balanced after some insertions and deletions", () => { const keysToInsert: u32[] = [2, 3, 4]; const keysToRemove: u32[] = [0, 0, 0, 1]; @@ -541,4 +568,22 @@ describe("AVLTrees should handle", () => { insertThenRemove(tree, keysToInsert, keysToRemove); expect(tree.isBalanced()).toBeTruthy(); }); + + it("remains balanced and sorted after 2n insertions and n deletions", () => { + Context.setPrepaid_gas(u64.MAX_VALUE); + // TODO setup free gas env to prevent gas exceeded error, and test larger trees + const n: u32 = 33; + const map = generateRandomTree(tree, n); + const sortedKeys: u32[] = map.keys().sort(); + const sortedValues: u32[] = []; + for (let i = 0; i < sortedKeys.length; ++i) { + sortedValues.push(map.get(sortedKeys[i])); + } + + expect(tree.size).toStrictEqual(n); + expect(tree.isBalanced()).toBeTruthy(); + expect(height(tree)).toBeLessThanOrEqual(maxTreeHeight(n)); + expect(tree.keys(u32.MIN_VALUE, u32.MAX_VALUE)).toStrictEqual(sortedKeys); + expect(tree.values(u32.MIN_VALUE, u32.MAX_VALUE)).toStrictEqual(sortedValues); + }); }); diff --git a/assembly/runtime/collections/avlTree.ts b/assembly/runtime/collections/avlTree.ts index 66f04c5f..c5d0a246 100644 --- a/assembly/runtime/collections/avlTree.ts +++ b/assembly/runtime/collections/avlTree.ts @@ -38,8 +38,8 @@ class AVLTreeNode { @nearBindgen export class AVLTree { private _elementPrefix: string; - private val: PersistentMap; - private tree: PersistentVector>; + private _val: PersistentMap; + private _tree: PersistentVector>; private _rootId: Nullable | null; /** @@ -47,8 +47,8 @@ export class AVLTree { */ constructor(name: string) { this._elementPrefix = name + collections._KEY_ELEMENT_SUFFIX; - this.val = new PersistentMap(this._elementPrefix + "val"); - this.tree = new PersistentVector>(this._elementPrefix + "tree"); + this._val = new PersistentMap(this._elementPrefix + "val"); + this._tree = new PersistentVector>(this._elementPrefix + "tree"); this._rootId = null; } @@ -56,35 +56,18 @@ export class AVLTree { * @returns Number of elements in the tree. */ get size(): u32 { - return this.tree.length; + return this._tree.length; } // alias to match rust sdk get len(): u32 { return this.size; } - - /** - * @returns Root key of the tree. - */ - get rootKey(): K { - assert(!isNull(this.rootNode), "rootNode must be defined"); - return this.rootNode!.key; - } - - set rootId(rootId: Nullable | null) { - this._rootId = rootId; - storage.set(this._elementPrefix + "root", this._rootId); - } - - get rootId(): Nullable | null { - return this._rootId; - } /** * @returns Whether the key is present in the tree. */ has(key: K): bool { - return this.val.contains(key); + return this._val.contains(key); } // alias to match rust sdk containsKey(key: K): bool { @@ -103,7 +86,7 @@ export class AVLTree { this.rootId = new Nullable(this.insertAt(this.rootNode, key).id); } - this.val.set(key, value); + this._val.set(key, value); } // alias to match rust sdk insert(key: K, value: V): void { @@ -117,7 +100,7 @@ export class AVLTree { * @returns Value for the given key or the default value. */ get(key: K, defaultValue: V | null = null): V | null { - return this.val.get(key, defaultValue); + return this._val.get(key, defaultValue); } /** @@ -128,7 +111,7 @@ export class AVLTree { * @returns Value for the given key or the default value. */ getSome(key: K): V { - return this.val.getSome(key); + return this._val.getSome(key); } /** @@ -139,7 +122,7 @@ export class AVLTree { delete(key: K): void { if (this.has(key)) { this.rootId = this.doRemove(key); - this.val.delete(key); + this._val.delete(key); } } // alias to match rust sdk @@ -161,7 +144,7 @@ export class AVLTree { const values: V[] = []; for (let i = 0; i < keys.length; ++i) { const key = keys[i]; - values.push(this.val.getSome(key)); + values.push(this._val.getSome(key)); } return values; } @@ -207,8 +190,7 @@ export class AVLTree { return sorted; } - // TODO make private - traverseLeft(start: K, node: AVLTreeNode, visited: AVLTreeNode[]): void { + private traverseLeft(start: K, node: AVLTreeNode, visited: AVLTreeNode[]): void { while (node.key >= start && node.left) { visited.push(node); node = this.node(node.left)!; @@ -229,7 +211,7 @@ export class AVLTree { const entries: MapEntry[] = []; for (let i = 0; i < keys.length; ++i) { const key = keys[i]; - entries.push(new MapEntry(key, this.val.getSome(key))); + entries.push(new MapEntry(key, this._val.getSome(key))); } return entries; } @@ -341,16 +323,16 @@ export class AVLTree { */ clear(): void { while(this.size > 0) { - this.val.delete(this.tree.popBack().key); + this._val.delete(this._tree.popBack().key); } this.rootId = null; } - // TODO make private - toString(): string { + // useful for debugging + private toString(): string { const a: string[] = ["\n"]; for (let i: i32 = 0; i < i32(this.size); ++i) { - const node = this.tree[i]; + const node = this._tree[i]; const key = u32(node.key).toString(); const index = node.id.toString(); const leftKey = node.left ? u32(this.node(node.left)!.key).toString() : "null"; @@ -369,41 +351,56 @@ export class AVLTree { * ********************************** */ + // returns root key of the tree. + private get rootKey(): K { + assert(!isNull(this.rootNode), "rootNode must be defined"); + return this.rootNode!.key; + } + + private set rootId(rootId: Nullable | null) { + this._rootId = rootId; + storage.set(this._elementPrefix + "root", this._rootId); + } + + private get rootId(): Nullable | null { + return this._rootId; + } + // returns the root node of the tree, if it exists. // returns null otherwise - get rootNode(): AVLTreeNode | null { + private get rootNode(): AVLTreeNode | null { return this.node(this.rootId); } // returns the height for a given node - height(id: Nullable | null): u32 { - return id ? this.tree[id.val].height : 0; + private height(id: Nullable | null): u32 { + return id ? this._tree[id.val].height : 0; } // returns the difference in heights between a node's left and right subtrees - balance(node: AVLTreeNode): i32 { + private balance(node: AVLTreeNode): i32 { return this.height(node.left) - this.height(node.right); } // updates the height for a given node based on the heights of its subtrees - updateHeight(node: AVLTreeNode): void { + private updateHeight(node: AVLTreeNode): void { node.height = 1 + max(this.height(node.left), this.height(node.right)); - this.tree[node.id] = node; + this._tree[node.id] = node; } - // returns the node for the given id (index into underlying array this.tree) - node(id: Nullable | null): AVLTreeNode | null { - return id ? this.tree[id.val] : null; + // returns the node for the given id (index into underlying array this._tree) + private node(id: Nullable | null): AVLTreeNode | null { + return id ? this._tree[id.val] : null; } // inserts a new key into the tree and // recursively updates the height of each node in the tree, // performing rotations as needed from bottom to top // to maintain the AVL tree balance invariant - insertAt(parentNode: AVLTreeNode | null, key: K): AVLTreeNode { + private insertAt(parentNode: AVLTreeNode | null, key: K): AVLTreeNode { if (!parentNode) { const node = new AVLTreeNode(this.size, key); - this.tree.push(node); + this._tree.push(node); return node; } else { if (key < parentNode.key) { @@ -423,7 +420,7 @@ export class AVLTree { // given a node // performs a single set left and right rotations to maintain AVL tree balance invariant - enforceBalance(node: AVLTreeNode): AVLTreeNode { + private enforceBalance(node: AVLTreeNode): AVLTreeNode { const balance = this.balance(node); if (balance > 1) { // implies left child must exist, since balance = left.height - right.height @@ -452,7 +449,7 @@ export class AVLTree { // child -> node // / \ // child.left child.right - rotateRight(node: AVLTreeNode): AVLTreeNode { + private rotateRight(node: AVLTreeNode): AVLTreeNode { const childNode = this.node(node.right)!; node.right = childNode.left; childNode.left = new Nullable(node.id); @@ -470,7 +467,7 @@ export class AVLTree { // child -> node // \ / // child.right child.right - rotateLeft(node: AVLTreeNode): AVLTreeNode { + private rotateLeft(node: AVLTreeNode): AVLTreeNode { const childNode = this.node(node.left)!; node.left = childNode.right; childNode.right = new Nullable(node.id); @@ -482,7 +479,7 @@ export class AVLTree { } // removes the given key from the tree, maintaining the AVL balance invariant - doRemove(key: K): Nullable | null { + private doRemove(key: K): Nullable | null { const nodeAndParent = this.lookupAt(this.rootNode!, key); let node = nodeAndParent.child; let parentNode = nodeAndParent.parent; @@ -540,7 +537,7 @@ export class AVLTree { // take successor's key, and update the node to remove node.key = successor.key; - this.tree[node.id] = node; + this._tree[node.id] = node; successorId = new Nullable(node.id); // set node to point to successor, so it is removed from the tree @@ -556,15 +553,15 @@ export class AVLTree { } // removes the given node from the tree, - // and replaces it with the last node in the underlying array (this.tree) - swapRemove(node: AVLTreeNode): void { + // and replaces it with the last node in the underlying array (this._tree) + private swapRemove(node: AVLTreeNode): void { if (node.id === this.size - 1) { // node is last element in tree, so no swapping needed if (node.id === this.rootId!.val) { this.rootId = null; } } else { - const lastNode = this.tree[this.size - 1]; + const lastNode = this._tree[this.size - 1]; const parentNode = this.lookupAt(this.rootNode!, lastNode.key).parent; if (lastNode.id === this.rootId!.val) { @@ -581,20 +578,20 @@ export class AVLTree { } // update the parentNode - this.tree[parentNode.id] = parentNode; + this._tree[parentNode.id] = parentNode; } // update index of lastNode lastNode.id = node.id; - this.tree[lastNode.id] = lastNode; + this._tree[lastNode.id] = lastNode; } - this.tree.pop(); + this._tree.pop(); } // given a starting node // returns the leftmost (min) descendant node, and its parent - minAt(root: AVLTreeNode, parentNode: AVLTreeNode | null = null): ChildParentPair { + private minAt(root: AVLTreeNode, parentNode: AVLTreeNode | null = null): ChildParentPair { return root.left ? this.minAt(this.node(root.left)!, root) : new ChildParentPair(root, parentNode ? parentNode : root); @@ -602,7 +599,7 @@ export class AVLTree { // given a starting node // returns the rightmost (max) descendant node, and its parent - maxAt(root: AVLTreeNode, parentNode: AVLTreeNode | null = null): ChildParentPair { + private maxAt(root: AVLTreeNode, parentNode: AVLTreeNode | null = null): ChildParentPair { return root.right ? this.maxAt(this.node(root.right)!, root) : new ChildParentPair(root, parentNode ? parentNode : root); @@ -611,7 +608,7 @@ export class AVLTree { // given a key and a starting node // returns the node with the associated key, as well as its parent (if it exists) // caution: this method assumes the key exists in the tree, and will throw otherwise - lookupAt(root: AVLTreeNode, key: K, parentNode: AVLTreeNode | null = null): ChildParentPair { + private lookupAt(root: AVLTreeNode, key: K, parentNode: AVLTreeNode | null = null): ChildParentPair { return root.key === key ? new ChildParentPair(root, parentNode ? parentNode : root) : key < root.key ? @@ -622,7 +619,7 @@ export class AVLTree { // recursively updates the height of each node in the tree, // and performs rotations as needed from bottom to top // to maintain the AVL tree balance invariant - rebalanceAt(root: AVLTreeNode, key: K): AVLTreeNode { + private rebalanceAt(root: AVLTreeNode, key: K): AVLTreeNode { if (root.key > key) { const leftChild = this.node(root.left); if (leftChild) { @@ -643,7 +640,7 @@ export class AVLTree { // recursively checks that each node in the tree is balanced by checking that // the AVL tree invariant holds: // any node's left and right subtrees must have a difference in height <= 1 - isBalanced(root: AVLTreeNode | null = this.rootNode): bool { + private isBalanced(root: AVLTreeNode | null = this.rootNode): bool { const b = root ? this.balance(root) : 0 return b >= -1 && b <= 1 && root ? this.isBalanced(this.node(root.left)) && this.isBalanced(this.node(root.right)) : From fb813e0c0b341f32312702d5253c91a93c0fa374 Mon Sep 17 00:00:00 2001 From: Kai Aichholz Date: Wed, 17 Jun 2020 18:51:58 -0700 Subject: [PATCH 09/11] add contract test for avl tree --- assembly/__tests__/avlTreeContract.ts | 46 ++++++ assembly/runtime/collections/avlTree.ts | 3 +- runtime/__tests__/avl-tree-contract.spec.ts | 147 ++++++++++++++++++++ runtime/asconfig.js | 1 + 4 files changed, 195 insertions(+), 2 deletions(-) create mode 100644 assembly/__tests__/avlTreeContract.ts create mode 100644 runtime/__tests__/avl-tree-contract.spec.ts diff --git a/assembly/__tests__/avlTreeContract.ts b/assembly/__tests__/avlTreeContract.ts new file mode 100644 index 00000000..9b44efe0 --- /dev/null +++ b/assembly/__tests__/avlTreeContract.ts @@ -0,0 +1,46 @@ +import { AVLTree } from "../runtime"; + +export function insert(key: u32, value: u32): void { + const tree = new AVLTree("tree"); + tree.insert(key, value); +} + +export function remove(key: u32): void { + const tree = new AVLTree("tree"); + tree.remove(key); +} + +export function has(key: u32): bool { + const tree = new AVLTree("tree"); + return tree.has(key); +} + +export function getSome(key: u32): u32 { + const tree = new AVLTree("tree"); + return tree.getSome(key); +} + +export function keys(): u32[] { + const tree = new AVLTree("tree"); + return tree.keys(u32.MIN_VALUE, u32.MAX_VALUE); +} + +export function values(): u32[] { + const tree = new AVLTree("tree"); + return tree.values(u32.MIN_VALUE, u32.MAX_VALUE); +} + +export function isBalanced(): bool { + const tree = new AVLTree("tree"); + return tree.isBalanced(); +} + +export function height(): u32 { + const tree = new AVLTree("tree"); + return tree.height(tree.rootId); +} + +export function size(): u32 { + const tree = new AVLTree("tree"); + return tree.size; +} \ No newline at end of file diff --git a/assembly/runtime/collections/avlTree.ts b/assembly/runtime/collections/avlTree.ts index c5d0a246..c2dbae7d 100644 --- a/assembly/runtime/collections/avlTree.ts +++ b/assembly/runtime/collections/avlTree.ts @@ -49,7 +49,7 @@ export class AVLTree { this._elementPrefix = name + collections._KEY_ELEMENT_SUFFIX; this._val = new PersistentMap(this._elementPrefix + "val"); this._tree = new PersistentVector>(this._elementPrefix + "tree"); - this._rootId = null; + this._rootId = storage.get>(this._elementPrefix + "root"); } /** @@ -408,7 +408,6 @@ export class AVLTree { } else if (key > parentNode.key) { parentNode.right = new Nullable(this.insertAt(this.node(parentNode.right), key).id); } else { - trace("\t FATAL ERROR in avlTree.ts for insertAt()"); throw new Error("Key already exists, but does not have an associated value"); } diff --git a/runtime/__tests__/avl-tree-contract.spec.ts b/runtime/__tests__/avl-tree-contract.spec.ts new file mode 100644 index 00000000..1e43ebf2 --- /dev/null +++ b/runtime/__tests__/avl-tree-contract.spec.ts @@ -0,0 +1,147 @@ +import { Runtime, Account } from ".."; + +// copied and modified from https://gist.github.com/lsenta/15d7f6fcfc2987176b54 +class LittleRNG { + private seed: number; + + constructor(seed: number) { + this.seed = seed; + } + + next(): number { + this.seed = (this.seed * 9301 + 49297) % 233280; + return Math.floor((this.seed / 233281) * 4294967295); + } +} + + +let runtime: Runtime; +let avlTreeContract: Account, alice: Account; + +function has(key: number): boolean { + return alice.call_other("avlTreeContract", "has", { key }).return_data; +} + +function insert(key: number, value: number): void { + alice.call_other("avlTreeContract", "insert", { key, value }); +} + +function getSome(key: number): number { + return alice.call_other("avlTreeContract", "getSome", { key }).return_data; +} + +function remove(key: number): void { + alice.call_other("avlTreeContract", "remove", { key }); +} + +function size(): number { + return alice.call_other("avlTreeContract", "size").return_data; +} + +function isBalanced(): boolean { + return alice.call_other("avlTreeContract", "isBalanced").return_data; +} + +function height(): number { + return alice.call_other("avlTreeContract", "height").return_data; +} + +function keys(): number[] { + return alice.call_other("avlTreeContract", "keys").return_data; +} + +function values(): number[] { + return alice.call_other("avlTreeContract", "values").return_data; +} + +function random(n: number): number[] { + const rng = new LittleRNG(12345); + const keys = []; + + for (let i = 0; i < n; ++i) { + keys.push(rng.next()); + } + + return keys; +} + +function maxTreeHeight(n: number): number { + // From near-sdk-rs TreeMap: + // h <= C * log2(n + D) + B + // where: + // C =~ 1.440, D =~ 1.065, B =~ 0.328 + // (source: https://en.wikipedia.org/wiki/AVL_tree) + const B = -0.328; + const C = 1.440; + const D = 1.065; + + const h = C * Math.log2(n + D) + B; + return Math.ceil(h); +} + +function insertKeys(keysToInsert: number[], map: Map): void { + for (let i = 0; i < keysToInsert.length; ++i) { + const key = keysToInsert[i]; + expect(has(key)).toBeFalsy(); + + insert(key, i); + expect(getSome(key)).toStrictEqual(i); + + if (map) { + map.set(key, i); + expect(getSome(key)).toStrictEqual(map.get(key)); + } + } +} + +function removeKeys(keysToRemove: number[], map: Map): void { + for (let i = 0; i < keysToRemove.length; ++i) { + const key = keysToRemove[i]; + + if (map && map.has(key)) { + expect(getSome(key)).toStrictEqual(map.get(key)); + map.delete(key); + } + + remove(key); + expect(has(key)).toBeFalsy(); + } +} + +function generateRandomTree(n: number): Map { + const map = new Map(); + const keysToInsert = random(2 * n); + const keysToRemove = []; + for (let i = 0; i < n; ++i) { + keysToRemove.push(keysToInsert[i]); + } + + insertKeys(keysToInsert, map); + removeKeys(keysToRemove, map); + + return map; +} + +describe("avl tree contract calls", () => { + beforeEach(() => { + runtime = new Runtime(); + alice = runtime.newAccount("alice"); + avlTreeContract = runtime.newAccount("avlTreeContract", __dirname + "/../out/avlTreeContract.wasm"); + }); + + it("remains balanced and sorted after 2n insertions and n deletions when called in a contract", () => { + const n = 20; + const map = generateRandomTree(n); + const sortedKeys = Array.from(map.keys()).sort((a, b) => a - b); + const sortedValues = []; + for (let i = 0; i < sortedKeys.length; ++i) { + sortedValues.push(map.get(sortedKeys[i])); + } + + expect(size()).toStrictEqual(n); + expect(isBalanced()).toBeTruthy(); + expect(height()).toBeLessThanOrEqual(maxTreeHeight(n)); + expect(keys()).toStrictEqual(sortedKeys); + expect(values()).toStrictEqual(sortedValues); + }); +}); \ No newline at end of file diff --git a/runtime/asconfig.js b/runtime/asconfig.js index 053ea55c..f46a0288 100644 --- a/runtime/asconfig.js +++ b/runtime/asconfig.js @@ -17,3 +17,4 @@ function compileContract(input) { compileContract("words"); compileContract("sentences"); +compileContract("avlTreeContract"); \ No newline at end of file From d32cc698595198e3892242b6a2a8190973fa8fc3 Mon Sep 17 00:00:00 2001 From: Willem Wyndham Date: Wed, 24 Jun 2020 14:23:43 -0400 Subject: [PATCH 10/11] Updated height function and edited contract --- assembly/__tests__/avlTreeContract.ts | 13 +++---------- assembly/__tests__/runtime/avl-tree.spec.ts | 2 +- assembly/runtime/collections/avlTree.ts | 12 ++++++++---- 3 files changed, 12 insertions(+), 15 deletions(-) diff --git a/assembly/__tests__/avlTreeContract.ts b/assembly/__tests__/avlTreeContract.ts index 9b44efe0..edcc93a2 100644 --- a/assembly/__tests__/avlTreeContract.ts +++ b/assembly/__tests__/avlTreeContract.ts @@ -1,46 +1,39 @@ import { AVLTree } from "../runtime"; +const tree = new AVLTree("tree"); + export function insert(key: u32, value: u32): void { - const tree = new AVLTree("tree"); tree.insert(key, value); } export function remove(key: u32): void { - const tree = new AVLTree("tree"); tree.remove(key); } export function has(key: u32): bool { - const tree = new AVLTree("tree"); return tree.has(key); } export function getSome(key: u32): u32 { - const tree = new AVLTree("tree"); return tree.getSome(key); } export function keys(): u32[] { - const tree = new AVLTree("tree"); return tree.keys(u32.MIN_VALUE, u32.MAX_VALUE); } export function values(): u32[] { - const tree = new AVLTree("tree"); return tree.values(u32.MIN_VALUE, u32.MAX_VALUE); } export function isBalanced(): bool { - const tree = new AVLTree("tree"); return tree.isBalanced(); } export function height(): u32 { - const tree = new AVLTree("tree"); - return tree.height(tree.rootId); + return tree.height; } export function size(): u32 { - const tree = new AVLTree("tree"); return tree.size; } \ No newline at end of file diff --git a/assembly/__tests__/runtime/avl-tree.spec.ts b/assembly/__tests__/runtime/avl-tree.spec.ts index 171d9720..67aa24e4 100644 --- a/assembly/__tests__/runtime/avl-tree.spec.ts +++ b/assembly/__tests__/runtime/avl-tree.spec.ts @@ -7,7 +7,7 @@ let _closure_var1: u32; // Return height of the tree - number of nodes on the longest path starting from the root node. function height(tree: AVLTree): u32 { - return tree.height(tree.rootId); + return tree.height; } let _closure_rng: RNG; diff --git a/assembly/runtime/collections/avlTree.ts b/assembly/runtime/collections/avlTree.ts index c2dbae7d..a5ba0da0 100644 --- a/assembly/runtime/collections/avlTree.ts +++ b/assembly/runtime/collections/avlTree.ts @@ -351,8 +351,12 @@ export class AVLTree { * ********************************** */ + get height(): u32 { + return this.nodeHeight(this.rootId); + } + // returns root key of the tree. - private get rootKey(): K { + get rootKey(): K { assert(!isNull(this.rootNode), "rootNode must be defined"); return this.rootNode!.key; } @@ -373,18 +377,18 @@ export class AVLTree { } // returns the height for a given node - private height(id: Nullable | null): u32 { + private nodeHeight(id: Nullable | null): u32 { return id ? this._tree[id.val].height : 0; } // returns the difference in heights between a node's left and right subtrees private balance(node: AVLTreeNode): i32 { - return this.height(node.left) - this.height(node.right); + return this.nodeHeight(node.left) - this.nodeHeight(node.right); } // updates the height for a given node based on the heights of its subtrees private updateHeight(node: AVLTreeNode): void { - node.height = 1 + max(this.height(node.left), this.height(node.right)); + node.height = 1 + max(this.nodeHeight(node.left), this.nodeHeight(node.right)); this._tree[node.id] = node; } From ffd8f8090b9bbdfa2ee82e45e699332dfccd5ccc Mon Sep 17 00:00:00 2001 From: Kai Aichholz Date: Fri, 26 Jun 2020 13:06:08 -0700 Subject: [PATCH 11/11] add inclusive arg to keys(), values(), and entries() for avlTree --- assembly/__tests__/runtime/avl-tree.spec.ts | 58 ++++++++++++++------- assembly/runtime/collections/avlTree.ts | 42 ++++++++------- 2 files changed, 62 insertions(+), 38 deletions(-) diff --git a/assembly/__tests__/runtime/avl-tree.spec.ts b/assembly/__tests__/runtime/avl-tree.spec.ts index 67aa24e4..74f15b9b 100644 --- a/assembly/__tests__/runtime/avl-tree.spec.ts +++ b/assembly/__tests__/runtime/avl-tree.spec.ts @@ -5,11 +5,6 @@ import { Context } from "../../vm"; let tree: AVLTree; let _closure_var1: u32; -// Return height of the tree - number of nodes on the longest path starting from the root node. -function height(tree: AVLTree): u32 { - return tree.height; -} - let _closure_rng: RNG; function random(n: i32): u32[] { const a = new Array(n); @@ -124,7 +119,7 @@ describe("AVLTrees should handle", () => { _closure_var1 = key; expect(tree.size).toStrictEqual(0); - expect(height(tree)).toStrictEqual(0); + expect(tree.height).toStrictEqual(0); expect(tree.has(key)).toBeFalsy("empty tree should not have the key"); expect(tree.containsKey(key)).toBeFalsy("empty tree should not have the key"); expect(() => { tree.min() }).toThrow("min() should throw for empty tree"); @@ -134,31 +129,31 @@ describe("AVLTrees should handle", () => { }); it("rotates left twice when inserting 3 keys in decreasing order", () => { - expect(height(tree)).toStrictEqual(0); + expect(tree.height).toStrictEqual(0); tree.insert(3, 3); - expect(height(tree)).toStrictEqual(1); + expect(tree.height).toStrictEqual(1); tree.insert(2, 2); - expect(height(tree)).toStrictEqual(2); + expect(tree.height).toStrictEqual(2); tree.insert(1, 1); - expect(height(tree)).toStrictEqual(2); + expect(tree.height).toStrictEqual(2); expect(tree.rootKey).toStrictEqual(2); }); it("rotates right twice when inserting 3 keys in increasing order", () => { - expect(height(tree)).toStrictEqual(0); + expect(tree.height).toStrictEqual(0); tree.insert(1, 1); - expect(height(tree)).toStrictEqual(1); + expect(tree.height).toStrictEqual(1); tree.insert(2, 2); - expect(height(tree)).toStrictEqual(2); + expect(tree.height).toStrictEqual(2); tree.insert(3, 3); - expect(height(tree)).toStrictEqual(2); + expect(tree.height).toStrictEqual(2); expect(tree.rootKey).toStrictEqual(2); }); @@ -187,7 +182,7 @@ describe("AVLTrees should handle", () => { } } - expect(height(tree)).toBeLessThanOrEqual(maxTreeHeight(n)); + expect(tree.height).toBeLessThanOrEqual(maxTreeHeight(n)); }); it("sets and gets n key-value pairs in descending order", () => { @@ -214,7 +209,7 @@ describe("AVLTrees should handle", () => { } } - expect(height(tree)).toBeLessThanOrEqual(maxTreeHeight(n)); + expect(tree.height).toBeLessThanOrEqual(maxTreeHeight(n)); }); it("sets and gets n random key-value pairs", () => { @@ -232,7 +227,7 @@ describe("AVLTrees should handle", () => { expect(tree.getSome(x)).toStrictEqual(42); }); - expect(height(tree)).toBeLessThanOrEqual(maxTreeHeight(n)); + expect(tree.height).toBeLessThanOrEqual(maxTreeHeight(n)); tree.clear(); }); @@ -467,7 +462,7 @@ describe("AVLTrees should handle", () => { insertThenRemove(tree, keysToInsert, keysToRemove); - expect(height(tree)).toBeLessThanOrEqual(maxTreeHeight(tree.size)); + expect(tree.height).toBeLessThanOrEqual(maxTreeHeight(tree.size)); }); it("inserts n duplicate keys", () => { @@ -501,7 +496,7 @@ describe("AVLTrees should handle", () => { } expect(tree.size).toStrictEqual(set.size); - expect(height(tree)).toBeLessThanOrEqual(maxTreeHeight(n)); + expect(tree.height).toBeLessThanOrEqual(maxTreeHeight(n)); tree.clear(); expect(tree.size).toStrictEqual(0); @@ -525,6 +520,7 @@ describe("AVLTrees should handle", () => { new MapEntry(3, 43) ]; expect(tree.entries(1, 4)).toStrictEqual(a); + expect(tree.entries(1, 3, true)).toStrictEqual(a); }); it("returns an empty array when empty", () => { @@ -552,6 +548,28 @@ describe("AVLTrees should handle", () => { expect(tree.values(4, 5)).toStrictEqual([]); expect(tree.values(5, 51)).toStrictEqual([10, 1, 9, 2, 8, 3, 7, 4, 6, 5]); }); + + it("returns a range of values for a given start key and inclusive end key", () => { + const keys = [10, 20, 30, 40, 50, 45, 35, 25, 15, 5]; + const values = [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]; + + for (let i = 0; i < keys.length; ++i) { + const key = keys[i]; + tree.insert(key, values[i]); + } + + expect(tree.values(20, 30, true)).toStrictEqual([2, 8, 3]); + expect(tree.values(11, 41, true)).toStrictEqual([9, 2, 8, 3, 7, 4]); + expect(tree.values(20, 41, true)).toStrictEqual([2, 8, 3, 7, 4]); + expect(tree.values(21, 45, true)).toStrictEqual([8, 3, 7, 4, 6]); + expect(tree.values(26, 30, true)).toStrictEqual([3]); + expect(tree.values(25, 25, true)).toStrictEqual([8]); + expect(tree.values(26, 25, true)).toStrictEqual([]); + expect(tree.values(40, 50, true)).toStrictEqual([4, 6, 5]); + expect(tree.values(40, 51, true)).toStrictEqual([4, 6, 5]); + expect(tree.values(4, 5, true)).toStrictEqual([10]); + expect(tree.values(5, 51, true)).toStrictEqual([10, 1, 9, 2, 8, 3, 7, 4, 6, 5]); + }); it("remains balanced after some insertions and deletions", () => { const keysToInsert: u32[] = [2, 3, 4]; @@ -582,7 +600,7 @@ describe("AVLTrees should handle", () => { expect(tree.size).toStrictEqual(n); expect(tree.isBalanced()).toBeTruthy(); - expect(height(tree)).toBeLessThanOrEqual(maxTreeHeight(n)); + expect(tree.height).toBeLessThanOrEqual(maxTreeHeight(n)); expect(tree.keys(u32.MIN_VALUE, u32.MAX_VALUE)).toStrictEqual(sortedKeys); expect(tree.values(u32.MIN_VALUE, u32.MAX_VALUE)).toStrictEqual(sortedValues); }); diff --git a/assembly/runtime/collections/avlTree.ts b/assembly/runtime/collections/avlTree.ts index a5ba0da0..6c956ea4 100644 --- a/assembly/runtime/collections/avlTree.ts +++ b/assembly/runtime/collections/avlTree.ts @@ -62,6 +62,13 @@ export class AVLTree { get len(): u32 { return this.size; } + + /** + * @returns Height of the tree. + */ + get height(): u32 { + return this.nodeHeight(this.rootId); + } /** * @returns Whether the key is present in the tree. @@ -132,15 +139,16 @@ export class AVLTree { /** - * Get a range of values from a start key (inclusive) to an end key (exclusive). + * Get a range of values from a start key (inclusive) to an end key (exclusive by default). * If end is greater than max key, include start to max inclusive. * * @param start Key for lower bound (inclusive). - * @param end Key for upper bound (exclusive). + * @param end Key for upper bound (exclusive by default). + * @param inclusive Set to false if upper bound should be exclusive, true if upper bound should be inclusive * @returns Range of values corresponding to keys within start and end bounds. */ - values(start: K, end: K): V[] { - const keys = this.keys(start, end); + values(start: K, end: K, inclusive: boolean = false): V[] { + const keys = this.keys(start, end, inclusive); const values: V[] = []; for (let i = 0; i < keys.length; ++i) { const key = keys[i]; @@ -150,14 +158,15 @@ export class AVLTree { } /** - * Get a range of keys from a start key (inclusive) to an end key (exclusive). + * Get a range of keys from a start key (inclusive) to an end key (exclusive by default). * If end is greater than max key, include start to max inclusive. * * @param start Key for lower bound (inclusive). - * @param end Key for upper bound (exclusive). + * @param end Key for upper bound (exclusive by default). + * @param inclusive Set to false if upper bound should be exclusive, true if upper bound should be inclusive * @returns Range of keys within start and end bounds. */ - keys(start: K, end: K): K[] { + keys(start: K, end: K, inclusive: boolean = false): K[] { const rootNode = this.rootNode; const sorted: K[] = []; if (rootNode) { @@ -173,7 +182,7 @@ export class AVLTree { node.key >= start && ( // if start and end bound are equal, // end bound becomes lte instead of strictly less than - start === end ? + start === end || inclusive ? node.key <= end : node.key < end ) @@ -199,15 +208,16 @@ export class AVLTree { } /** - * Get a range of entries from a start key (inclusive) to an end key (exclusive). + * Get a range of entries from a start key (inclusive) to an end key (exclusive by default). * If end is greater than max key, include start to max inclusive. * * @param start Key for lower bound (inclusive). - * @param end Key for upper bound (exclusive). + * @param end Key for upper bound (exclusive by default). + * @param inclusive Set to false if upper bound should be exclusive, true if upper bound should be inclusive * @returns Range of entries corresponding to keys within start and end bounds. */ - entries(start: K, end: K): MapEntry[] { - const keys = this.keys(start, end); + entries(start: K, end: K, inclusive: boolean = false): MapEntry[] { + const keys = this.keys(start, end, inclusive); const entries: MapEntry[] = []; for (let i = 0; i < keys.length; ++i) { const key = keys[i]; @@ -216,8 +226,8 @@ export class AVLTree { return entries; } // alias to match rust sdk - range(start: K, end: K): MapEntry[] { - return this.entries(start, end); + range(start: K, end: K, inclusive: boolean = false): MapEntry[] { + return this.entries(start, end, inclusive); } /** @@ -351,10 +361,6 @@ export class AVLTree { * ********************************** */ - get height(): u32 { - return this.nodeHeight(this.rootId); - } - // returns root key of the tree. get rootKey(): K { assert(!isNull(this.rootNode), "rootNode must be defined");