@proto-kit/common 0.1.1-develop.211 → 0.1.1-develop.2137
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cache/CacheManifest.d.ts +11 -0
- package/dist/cache/CacheManifest.d.ts.map +1 -0
- package/dist/cache/CacheManifest.js +56 -0
- package/dist/cache/CacheManifest.js.map +1 -0
- package/dist/cache/ProxyCache.d.ts +13 -0
- package/dist/cache/ProxyCache.d.ts.map +1 -0
- package/dist/cache/ProxyCache.js +24 -0
- package/dist/cache/ProxyCache.js.map +1 -0
- package/dist/cache/RemoteCache.d.ts +8 -0
- package/dist/cache/RemoteCache.d.ts.map +1 -0
- package/dist/cache/RemoteCache.js +2 -0
- package/dist/cache/RemoteCache.js.map +1 -0
- package/dist/cache/RemoteCacheCompiler.d.ts +16 -0
- package/dist/cache/RemoteCacheCompiler.d.ts.map +1 -0
- package/dist/cache/RemoteCacheCompiler.js +104 -0
- package/dist/cache/RemoteCacheCompiler.js.map +1 -0
- package/dist/compiling/AtomicCompileHelper.d.ts +15 -0
- package/dist/compiling/AtomicCompileHelper.d.ts.map +1 -0
- package/dist/compiling/AtomicCompileHelper.js +61 -0
- package/dist/compiling/AtomicCompileHelper.js.map +1 -0
- package/dist/compiling/CompilableModule.d.ts +6 -0
- package/dist/compiling/CompilableModule.d.ts.map +1 -0
- package/dist/compiling/CompilableModule.js +2 -0
- package/dist/compiling/CompilableModule.js.map +1 -0
- package/dist/compiling/CompileRegistry.d.ts +25 -0
- package/dist/compiling/CompileRegistry.d.ts.map +1 -0
- package/dist/compiling/CompileRegistry.js +62 -0
- package/dist/compiling/CompileRegistry.js.map +1 -0
- package/dist/compiling/services/ChildVerificationKeyService.d.ts +10 -0
- package/dist/compiling/services/ChildVerificationKeyService.d.ts.map +1 -0
- package/dist/compiling/services/ChildVerificationKeyService.js +27 -0
- package/dist/compiling/services/ChildVerificationKeyService.js.map +1 -0
- package/dist/config/ChildContainerCreatable.d.ts +5 -0
- package/dist/config/ChildContainerCreatable.d.ts.map +1 -0
- package/dist/config/ChildContainerCreatable.js +2 -0
- package/dist/config/ChildContainerCreatable.js.map +1 -0
- package/dist/config/ChildContainerProvider.d.ts +5 -0
- package/dist/config/ChildContainerProvider.d.ts.map +1 -0
- package/dist/config/ChildContainerProvider.js +2 -0
- package/dist/config/ChildContainerProvider.js.map +1 -0
- package/dist/config/ConfigurableModule.d.ts +6 -2
- package/dist/config/ConfigurableModule.d.ts.map +1 -1
- package/dist/config/ConfigurableModule.js +5 -0
- package/dist/config/ConfigurableModule.js.map +1 -0
- package/dist/config/ModuleContainer.d.ts +70 -23
- package/dist/config/ModuleContainer.d.ts.map +1 -1
- package/dist/config/ModuleContainer.js +164 -31
- package/dist/config/ModuleContainer.js.map +1 -0
- package/dist/config/Startable.d.ts +4 -0
- package/dist/config/Startable.d.ts.map +1 -0
- package/dist/config/Startable.js +2 -0
- package/dist/config/Startable.js.map +1 -0
- package/dist/config/injectAlias.d.ts +18 -0
- package/dist/config/injectAlias.d.ts.map +1 -0
- package/dist/config/injectAlias.js +47 -0
- package/dist/config/injectAlias.js.map +1 -0
- package/dist/dependencyFactory/DependencyFactory.d.ts +14 -9
- package/dist/dependencyFactory/DependencyFactory.d.ts.map +1 -1
- package/dist/dependencyFactory/DependencyFactory.js +2 -96
- package/dist/dependencyFactory/DependencyFactory.js.map +1 -0
- package/dist/dependencyFactory/injectOptional.d.ts +16 -0
- package/dist/dependencyFactory/injectOptional.d.ts.map +1 -0
- package/dist/dependencyFactory/injectOptional.js +40 -0
- package/dist/dependencyFactory/injectOptional.js.map +1 -0
- package/dist/dummyVerificationKey.d.ts +3 -0
- package/dist/dummyVerificationKey.d.ts.map +1 -0
- package/dist/dummyVerificationKey.js +8 -0
- package/dist/dummyVerificationKey.js.map +1 -0
- package/dist/events/EventEmitter.d.ts +19 -0
- package/dist/events/EventEmitter.d.ts.map +1 -0
- package/dist/events/EventEmitter.js +35 -0
- package/dist/events/EventEmitter.js.map +1 -0
- package/dist/events/EventEmitterProxy.d.ts +18 -0
- package/dist/events/EventEmitterProxy.d.ts.map +1 -0
- package/dist/events/EventEmitterProxy.js +35 -0
- package/dist/events/EventEmitterProxy.js.map +1 -0
- package/dist/events/EventEmittingComponent.d.ts +9 -0
- package/dist/events/EventEmittingComponent.d.ts.map +1 -0
- package/dist/events/EventEmittingComponent.js +2 -0
- package/dist/events/EventEmittingComponent.js.map +1 -0
- package/dist/events/ReplayingSingleUseEventEmitter.d.ts +17 -0
- package/dist/events/ReplayingSingleUseEventEmitter.d.ts.map +1 -0
- package/dist/events/ReplayingSingleUseEventEmitter.js +34 -0
- package/dist/events/ReplayingSingleUseEventEmitter.js.map +1 -0
- package/dist/index.d.ts +27 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +28 -2
- package/dist/index.js.map +1 -0
- package/dist/log.d.ts +37 -0
- package/dist/log.d.ts.map +1 -0
- package/dist/log.js +117 -0
- package/dist/log.js.map +1 -0
- package/dist/trees/InMemoryLinkedLeafStore.d.ts +21 -0
- package/dist/trees/InMemoryLinkedLeafStore.d.ts.map +1 -0
- package/dist/trees/InMemoryLinkedLeafStore.js +26 -0
- package/dist/trees/InMemoryLinkedLeafStore.js.map +1 -0
- package/dist/trees/InMemoryLinkedMerkleLeafStore.d.ts +7 -0
- package/dist/trees/InMemoryLinkedMerkleLeafStore.d.ts.map +1 -0
- package/dist/trees/InMemoryLinkedMerkleLeafStore.js +6 -0
- package/dist/trees/InMemoryLinkedMerkleLeafStore.js.map +1 -0
- package/dist/trees/InMemoryMerkleTreeStorage.d.ts +11 -0
- package/dist/trees/InMemoryMerkleTreeStorage.d.ts.map +1 -0
- package/dist/trees/InMemoryMerkleTreeStorage.js +13 -0
- package/dist/trees/InMemoryMerkleTreeStorage.js.map +1 -0
- package/dist/trees/LinkedMerkleTree.d.ts +345 -0
- package/dist/trees/LinkedMerkleTree.d.ts.map +1 -0
- package/dist/trees/LinkedMerkleTree.js +337 -0
- package/dist/trees/LinkedMerkleTree.js.map +1 -0
- package/dist/trees/LinkedMerkleTreeStore.d.ts +24 -0
- package/dist/trees/LinkedMerkleTreeStore.d.ts.map +1 -0
- package/dist/trees/LinkedMerkleTreeStore.js +2 -0
- package/dist/trees/LinkedMerkleTreeStore.js.map +1 -0
- package/dist/trees/MerkleTreeStore.d.ts +5 -0
- package/dist/trees/MerkleTreeStore.d.ts.map +1 -0
- package/dist/trees/MerkleTreeStore.js +2 -0
- package/dist/trees/MerkleTreeStore.js.map +1 -0
- package/dist/trees/MockAsyncMerkleStore.d.ts +9 -0
- package/dist/trees/MockAsyncMerkleStore.d.ts.map +1 -0
- package/dist/trees/MockAsyncMerkleStore.js +20 -0
- package/dist/trees/MockAsyncMerkleStore.js.map +1 -0
- package/dist/trees/RollupMerkleTree.d.ts +147 -0
- package/dist/trees/RollupMerkleTree.d.ts.map +1 -0
- package/dist/trees/RollupMerkleTree.js +218 -0
- package/dist/trees/RollupMerkleTree.js.map +1 -0
- package/dist/trees/VirtualMerkleTreeStore.d.ts +13 -0
- package/dist/trees/VirtualMerkleTreeStore.d.ts.map +1 -0
- package/dist/trees/VirtualMerkleTreeStore.js +18 -0
- package/dist/trees/VirtualMerkleTreeStore.js.map +1 -0
- package/dist/trees/lmt/AbstractLinkedMerkleTree.d.ts +288 -0
- package/dist/trees/lmt/AbstractLinkedMerkleTree.d.ts.map +1 -0
- package/dist/trees/lmt/AbstractLinkedMerkleTree.js +22 -0
- package/dist/trees/lmt/AbstractLinkedMerkleTree.js.map +1 -0
- package/dist/trees/lmt/InMemoryLinkedLeafStore.d.ts +21 -0
- package/dist/trees/lmt/InMemoryLinkedLeafStore.d.ts.map +1 -0
- package/dist/trees/lmt/InMemoryLinkedLeafStore.js +26 -0
- package/dist/trees/lmt/InMemoryLinkedLeafStore.js.map +1 -0
- package/dist/trees/lmt/InMemoryLinkedMerkleLeafStore.d.ts +7 -0
- package/dist/trees/lmt/InMemoryLinkedMerkleLeafStore.d.ts.map +1 -0
- package/dist/trees/lmt/InMemoryLinkedMerkleLeafStore.js +6 -0
- package/dist/trees/lmt/InMemoryLinkedMerkleLeafStore.js.map +1 -0
- package/dist/trees/lmt/LinkedLeafStore.d.ts +16 -0
- package/dist/trees/lmt/LinkedLeafStore.d.ts.map +1 -0
- package/dist/trees/lmt/LinkedLeafStore.js +2 -0
- package/dist/trees/lmt/LinkedLeafStore.js.map +1 -0
- package/dist/trees/lmt/LinkedLinkedStore.d.ts +16 -0
- package/dist/trees/lmt/LinkedLinkedStore.d.ts.map +1 -0
- package/dist/trees/lmt/LinkedLinkedStore.js +2 -0
- package/dist/trees/lmt/LinkedLinkedStore.js.map +1 -0
- package/dist/trees/lmt/LinkedMerkleTree.d.ts +11 -0
- package/dist/trees/lmt/LinkedMerkleTree.d.ts.map +1 -0
- package/dist/trees/lmt/LinkedMerkleTree.js +241 -0
- package/dist/trees/lmt/LinkedMerkleTree.js.map +1 -0
- package/dist/trees/lmt/LinkedMerkleTreeCircuitOps.d.ts +113 -0
- package/dist/trees/lmt/LinkedMerkleTreeCircuitOps.d.ts.map +1 -0
- package/dist/trees/lmt/LinkedMerkleTreeCircuitOps.js +113 -0
- package/dist/trees/lmt/LinkedMerkleTreeCircuitOps.js.map +1 -0
- package/dist/trees/lmt/LinkedMerkleTreeDatabase.d.ts +7 -0
- package/dist/trees/lmt/LinkedMerkleTreeDatabase.d.ts.map +1 -0
- package/dist/trees/lmt/LinkedMerkleTreeDatabase.js +2 -0
- package/dist/trees/lmt/LinkedMerkleTreeDatabase.js.map +1 -0
- package/dist/trees/lmt/LinkedMerkleTreeStore.d.ts +16 -0
- package/dist/trees/lmt/LinkedMerkleTreeStore.d.ts.map +1 -0
- package/dist/trees/lmt/LinkedMerkleTreeStore.js +2 -0
- package/dist/trees/lmt/LinkedMerkleTreeStore.js.map +1 -0
- package/dist/trees/lmt/LinkedMerkleTreeTypes.d.ts +74 -0
- package/dist/trees/lmt/LinkedMerkleTreeTypes.d.ts.map +1 -0
- package/dist/trees/lmt/LinkedMerkleTreeTypes.js +50 -0
- package/dist/trees/lmt/LinkedMerkleTreeTypes.js.map +1 -0
- package/dist/trees/sparse/InMemoryMerkleTreeStorage.d.ts +11 -0
- package/dist/trees/sparse/InMemoryMerkleTreeStorage.d.ts.map +1 -0
- package/dist/trees/sparse/InMemoryMerkleTreeStorage.js +13 -0
- package/dist/trees/sparse/InMemoryMerkleTreeStorage.js.map +1 -0
- package/dist/trees/sparse/MerkleTreeStore.d.ts +5 -0
- package/dist/trees/sparse/MerkleTreeStore.d.ts.map +1 -0
- package/dist/trees/sparse/MerkleTreeStore.js +2 -0
- package/dist/trees/sparse/MerkleTreeStore.js.map +1 -0
- package/dist/trees/sparse/MockAsyncMerkleStore.d.ts +9 -0
- package/dist/trees/sparse/MockAsyncMerkleStore.d.ts.map +1 -0
- package/dist/trees/sparse/MockAsyncMerkleStore.js +20 -0
- package/dist/trees/sparse/MockAsyncMerkleStore.js.map +1 -0
- package/dist/trees/sparse/RollupMerkleTree.d.ts +158 -0
- package/dist/trees/sparse/RollupMerkleTree.d.ts.map +1 -0
- package/dist/trees/sparse/RollupMerkleTree.js +330 -0
- package/dist/trees/sparse/RollupMerkleTree.js.map +1 -0
- package/dist/types.d.ts +62 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +14 -1
- package/dist/types.js.map +1 -0
- package/dist/union/union.d.ts +177 -0
- package/dist/union/union.d.ts.map +1 -0
- package/dist/union/union.js +35 -0
- package/dist/union/union.js.map +1 -0
- package/dist/utils.d.ts +57 -2
- package/dist/utils.d.ts.map +1 -1
- package/dist/utils.js +153 -4
- package/dist/utils.js.map +1 -0
- package/dist/zkProgrammable/ProvableMethodExecutionContext.d.ts +4 -3
- package/dist/zkProgrammable/ProvableMethodExecutionContext.d.ts.map +1 -1
- package/dist/zkProgrammable/ProvableMethodExecutionContext.js +2 -3
- package/dist/zkProgrammable/ProvableMethodExecutionContext.js.map +1 -0
- package/dist/zkProgrammable/ZkProgrammable.d.ts +32 -11
- package/dist/zkProgrammable/ZkProgrammable.d.ts.map +1 -1
- package/dist/zkProgrammable/ZkProgrammable.js +36 -17
- package/dist/zkProgrammable/ZkProgrammable.js.map +1 -0
- package/dist/zkProgrammable/provableMethod.d.ts +7 -4
- package/dist/zkProgrammable/provableMethod.d.ts.map +1 -1
- package/dist/zkProgrammable/provableMethod.js +30 -14
- package/dist/zkProgrammable/provableMethod.js.map +1 -0
- package/jest.config.cjs +12 -1
- package/package.json +9 -7
- package/src/cache/CacheManifest.ts +57 -0
- package/src/cache/ProxyCache.ts +30 -0
- package/src/cache/RemoteCache.ts +9 -0
- package/src/cache/RemoteCacheCompiler.ts +131 -0
- package/src/compiling/AtomicCompileHelper.ts +71 -0
- package/src/compiling/CompilableModule.ts +6 -0
- package/src/compiling/CompileRegistry.ts +64 -0
- package/src/compiling/services/ChildVerificationKeyService.ts +26 -0
- package/src/config/ChildContainerCreatable.ts +5 -0
- package/src/config/ChildContainerProvider.ts +5 -0
- package/src/config/ConfigurableModule.ts +15 -2
- package/src/config/ModuleContainer.ts +286 -58
- package/src/config/Startable.ts +3 -0
- package/src/config/injectAlias.ts +70 -0
- package/src/dependencyFactory/DependencyFactory.ts +34 -109
- package/src/dummyVerificationKey.ts +10 -0
- package/src/events/EventEmitter.ts +61 -0
- package/src/events/EventEmitterProxy.ts +81 -0
- package/src/events/EventEmittingComponent.ts +11 -0
- package/src/events/ReplayingSingleUseEventEmitter.ts +42 -0
- package/src/index.ts +27 -2
- package/src/log.ts +145 -0
- package/src/trees/lmt/AbstractLinkedMerkleTree.ts +102 -0
- package/src/trees/lmt/InMemoryLinkedLeafStore.ts +42 -0
- package/src/trees/lmt/LinkedLeafStore.ts +13 -0
- package/src/trees/lmt/LinkedMerkleTree.ts +335 -0
- package/src/trees/lmt/LinkedMerkleTreeCircuitOps.ts +188 -0
- package/src/trees/lmt/LinkedMerkleTreeTypes.ts +53 -0
- package/src/trees/sparse/InMemoryMerkleTreeStorage.ts +17 -0
- package/src/trees/sparse/MerkleTreeStore.ts +5 -0
- package/src/trees/sparse/MockAsyncMerkleStore.ts +30 -0
- package/src/trees/sparse/RollupMerkleTree.ts +512 -0
- package/src/types.ts +53 -2
- package/src/utils.ts +281 -5
- package/src/zkProgrammable/ProvableMethodExecutionContext.ts +6 -6
- package/src/zkProgrammable/ZkProgrammable.ts +90 -35
- package/src/zkProgrammable/provableMethod.ts +50 -23
- package/test/config/ContainerEvents.test.ts +65 -0
- package/test/config/ModuleContainer.test.ts +146 -15
- package/test/config/injectAlias.test.ts +28 -0
- package/test/trees/LinkedMerkleTree.test.ts +124 -0
- package/test/trees/LinkedMerkleTreeCircuitOps.test.ts +147 -0
- package/test/trees/MerkleTree.test.ts +251 -0
- package/test/tsconfig.json +5 -2
- package/test/zkProgrammable/ZkProgrammable.test.ts +145 -119
- package/tsconfig.json +1 -1
- package/LICENSE.md +0 -201
- package/tsconfig.test.json +0 -9
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import "reflect-metadata";
|
|
2
|
+
import { injectable, container as tsyringeContainer } from "tsyringe";
|
|
3
|
+
|
|
4
|
+
import {
|
|
5
|
+
BaseModuleInstanceType,
|
|
6
|
+
ConfigurableModule,
|
|
7
|
+
EventEmitter,
|
|
8
|
+
EventEmittingComponent,
|
|
9
|
+
ModuleContainer,
|
|
10
|
+
ModulesRecord,
|
|
11
|
+
} from "../../src";
|
|
12
|
+
|
|
13
|
+
class TestContainer<
|
|
14
|
+
Modules extends ModulesRecord,
|
|
15
|
+
> extends ModuleContainer<Modules> {}
|
|
16
|
+
|
|
17
|
+
type TestEvents = {
|
|
18
|
+
test: [string];
|
|
19
|
+
};
|
|
20
|
+
|
|
21
|
+
@injectable()
|
|
22
|
+
class TestModule
|
|
23
|
+
extends ConfigurableModule<{}>
|
|
24
|
+
implements BaseModuleInstanceType, EventEmittingComponent<TestEvents>
|
|
25
|
+
{
|
|
26
|
+
events = new EventEmitter<TestEvents>();
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
type TestEvents2 = {
|
|
30
|
+
test2: [number];
|
|
31
|
+
};
|
|
32
|
+
|
|
33
|
+
class TestModule2
|
|
34
|
+
extends ConfigurableModule<{}>
|
|
35
|
+
implements BaseModuleInstanceType, EventEmittingComponent<TestEvents2>
|
|
36
|
+
{
|
|
37
|
+
events = new EventEmitter<TestEvents2>();
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
describe("test event propagation", () => {
|
|
41
|
+
it("should propagate events up", () => {
|
|
42
|
+
expect.assertions(1);
|
|
43
|
+
|
|
44
|
+
const container = new TestContainer({
|
|
45
|
+
test: TestModule,
|
|
46
|
+
test2: TestModule2,
|
|
47
|
+
});
|
|
48
|
+
|
|
49
|
+
container.configure({
|
|
50
|
+
test: {},
|
|
51
|
+
test2: {},
|
|
52
|
+
});
|
|
53
|
+
|
|
54
|
+
container.create(() => tsyringeContainer.createChildContainer());
|
|
55
|
+
|
|
56
|
+
const testvalue = "testString123";
|
|
57
|
+
|
|
58
|
+
container.events.on("test", (value: string) => {
|
|
59
|
+
expect(value).toStrictEqual(testvalue);
|
|
60
|
+
});
|
|
61
|
+
|
|
62
|
+
const module = container.resolve("test");
|
|
63
|
+
module.events.emit("test", testvalue);
|
|
64
|
+
});
|
|
65
|
+
});
|
|
@@ -1,11 +1,17 @@
|
|
|
1
|
-
|
|
2
|
-
import {
|
|
1
|
+
import "reflect-metadata";
|
|
2
|
+
import { container as tsyringeContainer, inject, injectable } from "tsyringe";
|
|
3
|
+
|
|
4
|
+
import {
|
|
5
|
+
ConfigurableModule,
|
|
6
|
+
NoConfig,
|
|
7
|
+
} from "../../src/config/ConfigurableModule";
|
|
3
8
|
import {
|
|
4
|
-
ModuleContainerErrors,
|
|
5
9
|
ModuleContainer,
|
|
6
10
|
ModulesRecord,
|
|
7
11
|
} from "../../src/config/ModuleContainer";
|
|
8
12
|
import { TypedClass } from "../../src/types";
|
|
13
|
+
import { DependencyFactory, expectDefined } from "../../src";
|
|
14
|
+
import { injectAlias } from "../../src/config/injectAlias";
|
|
9
15
|
|
|
10
16
|
// module container will accept modules that extend this type
|
|
11
17
|
class BaseTestModule<Config> extends ConfigurableModule<Config> {}
|
|
@@ -14,27 +20,60 @@ type TestModulesRecord = ModulesRecord<TypedClass<BaseTestModule<unknown>>>;
|
|
|
14
20
|
|
|
15
21
|
interface TestModuleConfig {
|
|
16
22
|
testConfigProperty: number;
|
|
23
|
+
testConfigProperty2?: number;
|
|
24
|
+
testConfigProperty3?: number;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
@injectable()
|
|
28
|
+
@injectAlias(["child-alias", "multi-alias"])
|
|
29
|
+
class ChildModule extends BaseTestModule<NoConfig> {
|
|
30
|
+
public constructor(@inject("TestModule") public readonly testModule: any) {
|
|
31
|
+
super();
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
x() {
|
|
35
|
+
return "dependency factory works";
|
|
36
|
+
}
|
|
17
37
|
}
|
|
18
38
|
|
|
19
|
-
|
|
39
|
+
@injectAlias(["base-alias", "multi-alias"])
|
|
40
|
+
class TestModule
|
|
41
|
+
extends BaseTestModule<TestModuleConfig>
|
|
42
|
+
implements DependencyFactory
|
|
43
|
+
{
|
|
44
|
+
public dependencies() {
|
|
45
|
+
return {
|
|
46
|
+
dependencyModule1: {
|
|
47
|
+
useClass: ChildModule,
|
|
48
|
+
},
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
}
|
|
20
52
|
|
|
21
53
|
interface OtherTestModuleConfig {
|
|
22
54
|
otherTestConfigProperty: number;
|
|
23
55
|
}
|
|
24
56
|
|
|
25
|
-
class OtherTestModule extends BaseTestModule<OtherTestModuleConfig> {
|
|
57
|
+
class OtherTestModule extends BaseTestModule<OtherTestModuleConfig> {
|
|
58
|
+
public x() {
|
|
59
|
+
return "";
|
|
60
|
+
}
|
|
61
|
+
}
|
|
26
62
|
|
|
27
63
|
/**
|
|
28
64
|
* Showcases a wrongly typed/defined module as
|
|
29
65
|
* per the TestModuleContainer requirements
|
|
30
66
|
*/
|
|
31
|
-
// eslint-disable-next-line
|
|
32
|
-
// eslint-disable-next-line @typescript-eslint/no-extraneous-class, @typescript-eslint/no-unused-vars
|
|
67
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
33
68
|
class WrongTestModule {}
|
|
34
69
|
|
|
35
70
|
class TestModuleContainer<
|
|
36
|
-
Modules extends TestModulesRecord
|
|
37
|
-
> extends ModuleContainer<Modules> {
|
|
71
|
+
Modules extends TestModulesRecord,
|
|
72
|
+
> extends ModuleContainer<Modules> {
|
|
73
|
+
public get dependencyContainer() {
|
|
74
|
+
return this.container;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
38
77
|
|
|
39
78
|
describe("moduleContainer", () => {
|
|
40
79
|
let container: TestModuleContainer<{
|
|
@@ -45,21 +84,42 @@ describe("moduleContainer", () => {
|
|
|
45
84
|
|
|
46
85
|
beforeEach(() => {
|
|
47
86
|
container = new TestModuleContainer({
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
87
|
+
TestModule,
|
|
88
|
+
OtherTestModule,
|
|
89
|
+
// this module would not be assignable to TestModuleContainer
|
|
90
|
+
// WrongTestModule,
|
|
91
|
+
});
|
|
92
|
+
});
|
|
93
|
+
|
|
94
|
+
it("should resolve dependency factory dependencies correctly", () => {
|
|
95
|
+
container.configure({
|
|
96
|
+
TestModule: {
|
|
97
|
+
testConfigProperty,
|
|
98
|
+
},
|
|
99
|
+
|
|
100
|
+
OtherTestModule: {
|
|
101
|
+
otherTestConfigProperty: testConfigProperty,
|
|
53
102
|
},
|
|
54
103
|
});
|
|
104
|
+
|
|
105
|
+
container.create(() => tsyringeContainer.createChildContainer());
|
|
106
|
+
|
|
107
|
+
// Unfortunately we still need this so that the dependencies are registered
|
|
108
|
+
container.resolve("TestModule");
|
|
109
|
+
const dm = container.resolve("DependencyModule1");
|
|
110
|
+
|
|
111
|
+
expect(dm.x()).toBe("dependency factory works");
|
|
112
|
+
expect(dm.testModule).toBeDefined();
|
|
55
113
|
});
|
|
56
114
|
|
|
57
115
|
it("should throw on resolution, if config was not provided", () => {
|
|
58
116
|
expect.assertions(1);
|
|
59
117
|
|
|
118
|
+
container.create(() => tsyringeContainer.createChildContainer());
|
|
119
|
+
|
|
60
120
|
expect(() => {
|
|
61
121
|
container.resolve("TestModule");
|
|
62
|
-
}).toThrow(
|
|
122
|
+
}).toThrow();
|
|
63
123
|
});
|
|
64
124
|
|
|
65
125
|
it("should resolve the registered module with the provided config", () => {
|
|
@@ -74,9 +134,80 @@ describe("moduleContainer", () => {
|
|
|
74
134
|
otherTestConfigProperty: testConfigProperty,
|
|
75
135
|
},
|
|
76
136
|
});
|
|
137
|
+
container.create(() => tsyringeContainer.createChildContainer());
|
|
77
138
|
|
|
78
139
|
const testModule = container.resolve("TestModule");
|
|
79
140
|
|
|
80
141
|
expect(testModule.config.testConfigProperty).toBe(testConfigProperty);
|
|
142
|
+
|
|
143
|
+
const dependency = container.resolve("DependencyModule1");
|
|
144
|
+
dependency.x();
|
|
145
|
+
});
|
|
146
|
+
|
|
147
|
+
it("should stack configurations correctly", () => {
|
|
148
|
+
container.configure({
|
|
149
|
+
TestModule: {
|
|
150
|
+
testConfigProperty: 1,
|
|
151
|
+
},
|
|
152
|
+
OtherTestModule: {
|
|
153
|
+
otherTestConfigProperty: 4,
|
|
154
|
+
},
|
|
155
|
+
});
|
|
156
|
+
|
|
157
|
+
container.configurePartial({
|
|
158
|
+
TestModule: {
|
|
159
|
+
testConfigProperty2: 2,
|
|
160
|
+
},
|
|
161
|
+
});
|
|
162
|
+
|
|
163
|
+
container.configurePartial({
|
|
164
|
+
TestModule: {
|
|
165
|
+
testConfigProperty: 3,
|
|
166
|
+
},
|
|
167
|
+
});
|
|
168
|
+
|
|
169
|
+
container.create(() => tsyringeContainer.createChildContainer());
|
|
170
|
+
|
|
171
|
+
const { config } = container.resolve("TestModule");
|
|
172
|
+
|
|
173
|
+
expect(config.testConfigProperty).toBe(3);
|
|
174
|
+
expect(config.testConfigProperty2).toBe(2);
|
|
175
|
+
expect(config.testConfigProperty3).toBe(undefined);
|
|
176
|
+
});
|
|
177
|
+
|
|
178
|
+
it("should resolve dependencies correctly via alias", () => {
|
|
179
|
+
container.configure({
|
|
180
|
+
TestModule: {
|
|
181
|
+
testConfigProperty,
|
|
182
|
+
},
|
|
183
|
+
|
|
184
|
+
OtherTestModule: {
|
|
185
|
+
otherTestConfigProperty: testConfigProperty,
|
|
186
|
+
},
|
|
187
|
+
});
|
|
188
|
+
|
|
189
|
+
container.create(() => tsyringeContainer.createChildContainer());
|
|
190
|
+
|
|
191
|
+
// Unfortunately we still need this so that the dependencies are registered
|
|
192
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
|
|
193
|
+
const m1 = container.resolve("base-alias" as any);
|
|
194
|
+
const m2 = container.resolve("TestModule");
|
|
195
|
+
|
|
196
|
+
expectDefined(m1);
|
|
197
|
+
// Check if its the same reference
|
|
198
|
+
expect(m1).toBe(m2);
|
|
199
|
+
|
|
200
|
+
const dm1 = container.resolve("child-alias" as any) as ChildModule;
|
|
201
|
+
const dm2 = container.resolve("DependencyModule1");
|
|
202
|
+
|
|
203
|
+
expect(dm1.x()).toBe("dependency factory works");
|
|
204
|
+
expect(dm1.testModule).toBeDefined();
|
|
205
|
+
expect(dm1).toBe(dm2);
|
|
206
|
+
|
|
207
|
+
const multi =
|
|
208
|
+
container.dependencyContainer.resolveAll<BaseTestModule<unknown>>(
|
|
209
|
+
"multi-alias"
|
|
210
|
+
);
|
|
211
|
+
expect(multi).toHaveLength(2);
|
|
81
212
|
});
|
|
82
213
|
});
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import "reflect-metadata";
|
|
2
|
+
import { getInjectAliases, injectAlias } from "../../src/config/injectAlias";
|
|
3
|
+
|
|
4
|
+
@injectAlias(["foo", "bar"])
|
|
5
|
+
class TestClass {}
|
|
6
|
+
|
|
7
|
+
@injectAlias(["ayy"])
|
|
8
|
+
class TestClass2 extends TestClass {}
|
|
9
|
+
|
|
10
|
+
describe("injectAlias metadata", () => {
|
|
11
|
+
it("set and retrieve", () => {
|
|
12
|
+
expect.assertions(2);
|
|
13
|
+
|
|
14
|
+
const aliases = getInjectAliases(TestClass);
|
|
15
|
+
|
|
16
|
+
expect(aliases).toHaveLength(2);
|
|
17
|
+
expect(aliases).toStrictEqual(["foo", "bar"]);
|
|
18
|
+
});
|
|
19
|
+
|
|
20
|
+
it("recursive", () => {
|
|
21
|
+
expect.assertions(2);
|
|
22
|
+
|
|
23
|
+
const aliases = getInjectAliases(TestClass2);
|
|
24
|
+
|
|
25
|
+
expect(aliases).toHaveLength(3);
|
|
26
|
+
expect(aliases).toStrictEqual(["ayy", "foo", "bar"]);
|
|
27
|
+
});
|
|
28
|
+
});
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
import { beforeEach } from "@jest/globals";
|
|
2
|
+
import { Field, Poseidon } from "o1js";
|
|
3
|
+
|
|
4
|
+
import {
|
|
5
|
+
createLinkedMerkleTree,
|
|
6
|
+
InMemoryLinkedLeafStore,
|
|
7
|
+
InMemoryMerkleTreeStorage,
|
|
8
|
+
log,
|
|
9
|
+
} from "../../src";
|
|
10
|
+
import { expectDefined } from "../../dist/utils";
|
|
11
|
+
|
|
12
|
+
describe.each([4, 16, 254])("cachedMerkleTree - %s", (height) => {
|
|
13
|
+
class LinkedMerkleTree extends createLinkedMerkleTree(height) {}
|
|
14
|
+
|
|
15
|
+
let leafStore: InMemoryLinkedLeafStore;
|
|
16
|
+
let merkleStore: InMemoryMerkleTreeStorage;
|
|
17
|
+
let tree: LinkedMerkleTree;
|
|
18
|
+
|
|
19
|
+
beforeEach(() => {
|
|
20
|
+
log.setLevel("INFO");
|
|
21
|
+
|
|
22
|
+
leafStore = new InMemoryLinkedLeafStore();
|
|
23
|
+
merkleStore = new InMemoryMerkleTreeStorage();
|
|
24
|
+
tree = new LinkedMerkleTree(merkleStore, leafStore);
|
|
25
|
+
});
|
|
26
|
+
|
|
27
|
+
it("should have the same root when empty", () => {
|
|
28
|
+
expect.assertions(2);
|
|
29
|
+
|
|
30
|
+
expect(tree.getRoot().toString()).toStrictEqual(
|
|
31
|
+
LinkedMerkleTree.EMPTY_ROOT.toString()
|
|
32
|
+
);
|
|
33
|
+
expectDefined(tree.getLeaf(0n));
|
|
34
|
+
});
|
|
35
|
+
|
|
36
|
+
it("should have a different root when not empty", () => {
|
|
37
|
+
expect.assertions(1);
|
|
38
|
+
|
|
39
|
+
tree.setLeaf(1n, 1n);
|
|
40
|
+
|
|
41
|
+
expect(tree.getRoot().toString()).not.toStrictEqual(
|
|
42
|
+
LinkedMerkleTree.EMPTY_ROOT.toString()
|
|
43
|
+
);
|
|
44
|
+
});
|
|
45
|
+
|
|
46
|
+
it("should provide correct witnesses", () => {
|
|
47
|
+
expect.assertions(2);
|
|
48
|
+
|
|
49
|
+
tree.setLeaf(1n, 1n);
|
|
50
|
+
tree.setLeaf(5n, 5n);
|
|
51
|
+
|
|
52
|
+
const witness = tree.getReadWitness(5n);
|
|
53
|
+
|
|
54
|
+
expect(witness.leaf.value.toString()).toStrictEqual("5");
|
|
55
|
+
expect(
|
|
56
|
+
witness.merkleWitness.calculateRoot(witness.leaf.hash()).toString()
|
|
57
|
+
).toStrictEqual(tree.getRoot().toString());
|
|
58
|
+
});
|
|
59
|
+
|
|
60
|
+
it("should have invalid witnesses with wrong values", () => {
|
|
61
|
+
expect.assertions(1);
|
|
62
|
+
|
|
63
|
+
tree.setLeaf(1n, 1n);
|
|
64
|
+
tree.setLeaf(5n, 5n);
|
|
65
|
+
|
|
66
|
+
const witness = tree.getReadWitness(5n);
|
|
67
|
+
|
|
68
|
+
expect(
|
|
69
|
+
witness.merkleWitness.calculateRoot(Field(6)).toString()
|
|
70
|
+
).not.toStrictEqual(tree.getRoot().toString());
|
|
71
|
+
});
|
|
72
|
+
|
|
73
|
+
it("should have valid witnesses with changed value on the same leafs", () => {
|
|
74
|
+
expect.assertions(1);
|
|
75
|
+
|
|
76
|
+
tree.setLeaf(1n, 1n);
|
|
77
|
+
tree.setLeaf(5n, 5n);
|
|
78
|
+
|
|
79
|
+
const witness = tree.getReadWitness(5n);
|
|
80
|
+
|
|
81
|
+
tree.setLeaf(5n, 10n);
|
|
82
|
+
|
|
83
|
+
expect(
|
|
84
|
+
witness.merkleWitness
|
|
85
|
+
.calculateRoot(
|
|
86
|
+
Poseidon.hash([Field(10), witness.leaf.path, witness.leaf.nextPath])
|
|
87
|
+
)
|
|
88
|
+
.toString()
|
|
89
|
+
).toStrictEqual(tree.getRoot().toString());
|
|
90
|
+
});
|
|
91
|
+
|
|
92
|
+
it("should return zeroNode", () => {
|
|
93
|
+
expect.assertions(4);
|
|
94
|
+
const MAX_FIELD_VALUE: bigint = Field.ORDER - 1n;
|
|
95
|
+
const zeroLeaf = tree.getLeaf(0n);
|
|
96
|
+
expectDefined(zeroLeaf);
|
|
97
|
+
expect(zeroLeaf.value.toString()).toStrictEqual("0");
|
|
98
|
+
expect(zeroLeaf.path.toString()).toStrictEqual("0");
|
|
99
|
+
expect(zeroLeaf.nextPath.toString()).toStrictEqual(
|
|
100
|
+
MAX_FIELD_VALUE.toString()
|
|
101
|
+
);
|
|
102
|
+
});
|
|
103
|
+
});
|
|
104
|
+
|
|
105
|
+
// Separate describe here since we only want small trees for this test.
|
|
106
|
+
describe("Error check", () => {
|
|
107
|
+
class LinkedMerkleTree extends createLinkedMerkleTree(4) {}
|
|
108
|
+
let leafStore: InMemoryLinkedLeafStore;
|
|
109
|
+
let merkleStore: InMemoryMerkleTreeStorage;
|
|
110
|
+
let tree: LinkedMerkleTree;
|
|
111
|
+
|
|
112
|
+
it("throw for invalid index", () => {
|
|
113
|
+
log.setLevel("INFO");
|
|
114
|
+
|
|
115
|
+
leafStore = new InMemoryLinkedLeafStore();
|
|
116
|
+
merkleStore = new InMemoryMerkleTreeStorage();
|
|
117
|
+
tree = new LinkedMerkleTree(merkleStore, leafStore);
|
|
118
|
+
expect(() => {
|
|
119
|
+
for (let i = 0; i < 2n ** BigInt(4) + 1n; i++) {
|
|
120
|
+
tree.setLeaf(BigInt(i), 2n);
|
|
121
|
+
}
|
|
122
|
+
}).toThrow("Index greater than maximum leaf number");
|
|
123
|
+
});
|
|
124
|
+
});
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
import { Field, Provable } from "o1js";
|
|
2
|
+
|
|
3
|
+
import {
|
|
4
|
+
InMemoryLinkedLeafStore,
|
|
5
|
+
InMemoryMerkleTreeStorage,
|
|
6
|
+
LinkedMerkleTree,
|
|
7
|
+
LinkedMerkleTreeCircuitOps,
|
|
8
|
+
LinkedMerkleTreeWitness,
|
|
9
|
+
} from "../../src";
|
|
10
|
+
|
|
11
|
+
describe("LinkedMerkleTree - Circuit Ops", () => {
|
|
12
|
+
function setupTree() {
|
|
13
|
+
const leafStore = new InMemoryLinkedLeafStore();
|
|
14
|
+
const store = new InMemoryMerkleTreeStorage();
|
|
15
|
+
return new LinkedMerkleTree(store, leafStore);
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
let tree: LinkedMerkleTree;
|
|
19
|
+
|
|
20
|
+
beforeEach(() => {
|
|
21
|
+
tree = setupTree();
|
|
22
|
+
});
|
|
23
|
+
|
|
24
|
+
it("should correctly verify insert witness", () => {
|
|
25
|
+
try {
|
|
26
|
+
const root = tree.getRoot();
|
|
27
|
+
const insertWitness = tree.setLeaf(5n, 1000n);
|
|
28
|
+
|
|
29
|
+
const globalState = LinkedMerkleTreeCircuitOps.applyTreeWrite(
|
|
30
|
+
root,
|
|
31
|
+
insertWitness,
|
|
32
|
+
{
|
|
33
|
+
path: Field(5),
|
|
34
|
+
from: Field(0),
|
|
35
|
+
to: Field(1000),
|
|
36
|
+
},
|
|
37
|
+
0
|
|
38
|
+
);
|
|
39
|
+
|
|
40
|
+
expect(globalState.toString()).toStrictEqual(tree.getRoot().toString());
|
|
41
|
+
} catch (e) {
|
|
42
|
+
console.error(e);
|
|
43
|
+
throw e;
|
|
44
|
+
}
|
|
45
|
+
});
|
|
46
|
+
|
|
47
|
+
it("should correctly verify update witness", () => {
|
|
48
|
+
try {
|
|
49
|
+
tree.setLeaf(5n, 1000n);
|
|
50
|
+
tree.setLeaf(10n, 1500n);
|
|
51
|
+
|
|
52
|
+
const root = tree.getRoot();
|
|
53
|
+
|
|
54
|
+
const updateWitness = tree.setLeaf(10n, 500n);
|
|
55
|
+
|
|
56
|
+
const globalState = LinkedMerkleTreeCircuitOps.applyTreeWrite(
|
|
57
|
+
root,
|
|
58
|
+
updateWitness,
|
|
59
|
+
{
|
|
60
|
+
path: Field(10),
|
|
61
|
+
from: Field(1500),
|
|
62
|
+
to: Field(500),
|
|
63
|
+
},
|
|
64
|
+
0
|
|
65
|
+
);
|
|
66
|
+
|
|
67
|
+
expect(globalState.toString()).toStrictEqual(tree.getRoot().toString());
|
|
68
|
+
} catch (e) {
|
|
69
|
+
console.error(e);
|
|
70
|
+
throw e;
|
|
71
|
+
}
|
|
72
|
+
});
|
|
73
|
+
|
|
74
|
+
it("should not update root when only reading", () => {
|
|
75
|
+
tree.setLeaf(5n, 1000n);
|
|
76
|
+
tree.setLeaf(10n, 1500n);
|
|
77
|
+
|
|
78
|
+
const root = tree.getRoot();
|
|
79
|
+
|
|
80
|
+
const updateWitness = tree.getReadWitness(10n);
|
|
81
|
+
|
|
82
|
+
const globalState = LinkedMerkleTreeCircuitOps.applyTreeWrite(
|
|
83
|
+
root,
|
|
84
|
+
LinkedMerkleTreeWitness.fromReadWitness(updateWitness),
|
|
85
|
+
{
|
|
86
|
+
path: Field(10),
|
|
87
|
+
from: Field(1500),
|
|
88
|
+
to: Field(1500),
|
|
89
|
+
},
|
|
90
|
+
0
|
|
91
|
+
);
|
|
92
|
+
|
|
93
|
+
expect(globalState.toString()).toStrictEqual(root.toString());
|
|
94
|
+
expect(globalState.toString()).toStrictEqual(tree.getRoot().toString());
|
|
95
|
+
});
|
|
96
|
+
|
|
97
|
+
it("should noop when used with a dummy witness", () => {
|
|
98
|
+
tree.setLeaf(5n, 1000n);
|
|
99
|
+
tree.setLeaf(10n, 1500n);
|
|
100
|
+
|
|
101
|
+
const root = tree.getRoot();
|
|
102
|
+
|
|
103
|
+
const globalState = LinkedMerkleTreeCircuitOps.applyTreeWrite(
|
|
104
|
+
root,
|
|
105
|
+
LinkedMerkleTree.dummyWitness(),
|
|
106
|
+
{
|
|
107
|
+
path: Field(0),
|
|
108
|
+
from: Field(0),
|
|
109
|
+
to: Field(0),
|
|
110
|
+
},
|
|
111
|
+
0
|
|
112
|
+
);
|
|
113
|
+
|
|
114
|
+
expect(globalState.toString()).toStrictEqual(root.toString());
|
|
115
|
+
expect(globalState.toString()).toStrictEqual(tree.getRoot().toString());
|
|
116
|
+
});
|
|
117
|
+
|
|
118
|
+
it("Circuit size", async () => {
|
|
119
|
+
const root = tree.getRoot();
|
|
120
|
+
|
|
121
|
+
const updateWitness = tree.setLeaf(10n, 500n);
|
|
122
|
+
|
|
123
|
+
const cs = await Provable.constraintSystem(() => {
|
|
124
|
+
const rootWitness = Provable.witness(Field, () => root);
|
|
125
|
+
const updateWitnessWitness = Provable.witness(
|
|
126
|
+
LinkedMerkleTreeWitness,
|
|
127
|
+
() => updateWitness
|
|
128
|
+
);
|
|
129
|
+
const treeWrite = {
|
|
130
|
+
path: Provable.witness(Field, () => 1),
|
|
131
|
+
from: Provable.witness(Field, () => 1),
|
|
132
|
+
to: Provable.witness(Field, () => 1),
|
|
133
|
+
};
|
|
134
|
+
|
|
135
|
+
LinkedMerkleTreeCircuitOps.applyTreeWrite(
|
|
136
|
+
rootWitness,
|
|
137
|
+
updateWitnessWitness,
|
|
138
|
+
treeWrite,
|
|
139
|
+
0
|
|
140
|
+
);
|
|
141
|
+
});
|
|
142
|
+
|
|
143
|
+
console.log(cs.rows);
|
|
144
|
+
|
|
145
|
+
expect(cs.rows).toBeLessThan(2500);
|
|
146
|
+
});
|
|
147
|
+
});
|