@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.
Files changed (258) hide show
  1. package/dist/cache/CacheManifest.d.ts +11 -0
  2. package/dist/cache/CacheManifest.d.ts.map +1 -0
  3. package/dist/cache/CacheManifest.js +56 -0
  4. package/dist/cache/CacheManifest.js.map +1 -0
  5. package/dist/cache/ProxyCache.d.ts +13 -0
  6. package/dist/cache/ProxyCache.d.ts.map +1 -0
  7. package/dist/cache/ProxyCache.js +24 -0
  8. package/dist/cache/ProxyCache.js.map +1 -0
  9. package/dist/cache/RemoteCache.d.ts +8 -0
  10. package/dist/cache/RemoteCache.d.ts.map +1 -0
  11. package/dist/cache/RemoteCache.js +2 -0
  12. package/dist/cache/RemoteCache.js.map +1 -0
  13. package/dist/cache/RemoteCacheCompiler.d.ts +16 -0
  14. package/dist/cache/RemoteCacheCompiler.d.ts.map +1 -0
  15. package/dist/cache/RemoteCacheCompiler.js +104 -0
  16. package/dist/cache/RemoteCacheCompiler.js.map +1 -0
  17. package/dist/compiling/AtomicCompileHelper.d.ts +15 -0
  18. package/dist/compiling/AtomicCompileHelper.d.ts.map +1 -0
  19. package/dist/compiling/AtomicCompileHelper.js +61 -0
  20. package/dist/compiling/AtomicCompileHelper.js.map +1 -0
  21. package/dist/compiling/CompilableModule.d.ts +6 -0
  22. package/dist/compiling/CompilableModule.d.ts.map +1 -0
  23. package/dist/compiling/CompilableModule.js +2 -0
  24. package/dist/compiling/CompilableModule.js.map +1 -0
  25. package/dist/compiling/CompileRegistry.d.ts +25 -0
  26. package/dist/compiling/CompileRegistry.d.ts.map +1 -0
  27. package/dist/compiling/CompileRegistry.js +62 -0
  28. package/dist/compiling/CompileRegistry.js.map +1 -0
  29. package/dist/compiling/services/ChildVerificationKeyService.d.ts +10 -0
  30. package/dist/compiling/services/ChildVerificationKeyService.d.ts.map +1 -0
  31. package/dist/compiling/services/ChildVerificationKeyService.js +27 -0
  32. package/dist/compiling/services/ChildVerificationKeyService.js.map +1 -0
  33. package/dist/config/ChildContainerCreatable.d.ts +5 -0
  34. package/dist/config/ChildContainerCreatable.d.ts.map +1 -0
  35. package/dist/config/ChildContainerCreatable.js +2 -0
  36. package/dist/config/ChildContainerCreatable.js.map +1 -0
  37. package/dist/config/ChildContainerProvider.d.ts +5 -0
  38. package/dist/config/ChildContainerProvider.d.ts.map +1 -0
  39. package/dist/config/ChildContainerProvider.js +2 -0
  40. package/dist/config/ChildContainerProvider.js.map +1 -0
  41. package/dist/config/ConfigurableModule.d.ts +6 -2
  42. package/dist/config/ConfigurableModule.d.ts.map +1 -1
  43. package/dist/config/ConfigurableModule.js +5 -0
  44. package/dist/config/ConfigurableModule.js.map +1 -0
  45. package/dist/config/ModuleContainer.d.ts +70 -23
  46. package/dist/config/ModuleContainer.d.ts.map +1 -1
  47. package/dist/config/ModuleContainer.js +164 -31
  48. package/dist/config/ModuleContainer.js.map +1 -0
  49. package/dist/config/Startable.d.ts +4 -0
  50. package/dist/config/Startable.d.ts.map +1 -0
  51. package/dist/config/Startable.js +2 -0
  52. package/dist/config/Startable.js.map +1 -0
  53. package/dist/config/injectAlias.d.ts +18 -0
  54. package/dist/config/injectAlias.d.ts.map +1 -0
  55. package/dist/config/injectAlias.js +47 -0
  56. package/dist/config/injectAlias.js.map +1 -0
  57. package/dist/dependencyFactory/DependencyFactory.d.ts +14 -9
  58. package/dist/dependencyFactory/DependencyFactory.d.ts.map +1 -1
  59. package/dist/dependencyFactory/DependencyFactory.js +2 -96
  60. package/dist/dependencyFactory/DependencyFactory.js.map +1 -0
  61. package/dist/dependencyFactory/injectOptional.d.ts +16 -0
  62. package/dist/dependencyFactory/injectOptional.d.ts.map +1 -0
  63. package/dist/dependencyFactory/injectOptional.js +40 -0
  64. package/dist/dependencyFactory/injectOptional.js.map +1 -0
  65. package/dist/dummyVerificationKey.d.ts +3 -0
  66. package/dist/dummyVerificationKey.d.ts.map +1 -0
  67. package/dist/dummyVerificationKey.js +8 -0
  68. package/dist/dummyVerificationKey.js.map +1 -0
  69. package/dist/events/EventEmitter.d.ts +19 -0
  70. package/dist/events/EventEmitter.d.ts.map +1 -0
  71. package/dist/events/EventEmitter.js +35 -0
  72. package/dist/events/EventEmitter.js.map +1 -0
  73. package/dist/events/EventEmitterProxy.d.ts +18 -0
  74. package/dist/events/EventEmitterProxy.d.ts.map +1 -0
  75. package/dist/events/EventEmitterProxy.js +35 -0
  76. package/dist/events/EventEmitterProxy.js.map +1 -0
  77. package/dist/events/EventEmittingComponent.d.ts +9 -0
  78. package/dist/events/EventEmittingComponent.d.ts.map +1 -0
  79. package/dist/events/EventEmittingComponent.js +2 -0
  80. package/dist/events/EventEmittingComponent.js.map +1 -0
  81. package/dist/events/ReplayingSingleUseEventEmitter.d.ts +17 -0
  82. package/dist/events/ReplayingSingleUseEventEmitter.d.ts.map +1 -0
  83. package/dist/events/ReplayingSingleUseEventEmitter.js +34 -0
  84. package/dist/events/ReplayingSingleUseEventEmitter.js.map +1 -0
  85. package/dist/index.d.ts +27 -1
  86. package/dist/index.d.ts.map +1 -1
  87. package/dist/index.js +28 -2
  88. package/dist/index.js.map +1 -0
  89. package/dist/log.d.ts +37 -0
  90. package/dist/log.d.ts.map +1 -0
  91. package/dist/log.js +117 -0
  92. package/dist/log.js.map +1 -0
  93. package/dist/trees/InMemoryLinkedLeafStore.d.ts +21 -0
  94. package/dist/trees/InMemoryLinkedLeafStore.d.ts.map +1 -0
  95. package/dist/trees/InMemoryLinkedLeafStore.js +26 -0
  96. package/dist/trees/InMemoryLinkedLeafStore.js.map +1 -0
  97. package/dist/trees/InMemoryLinkedMerkleLeafStore.d.ts +7 -0
  98. package/dist/trees/InMemoryLinkedMerkleLeafStore.d.ts.map +1 -0
  99. package/dist/trees/InMemoryLinkedMerkleLeafStore.js +6 -0
  100. package/dist/trees/InMemoryLinkedMerkleLeafStore.js.map +1 -0
  101. package/dist/trees/InMemoryMerkleTreeStorage.d.ts +11 -0
  102. package/dist/trees/InMemoryMerkleTreeStorage.d.ts.map +1 -0
  103. package/dist/trees/InMemoryMerkleTreeStorage.js +13 -0
  104. package/dist/trees/InMemoryMerkleTreeStorage.js.map +1 -0
  105. package/dist/trees/LinkedMerkleTree.d.ts +345 -0
  106. package/dist/trees/LinkedMerkleTree.d.ts.map +1 -0
  107. package/dist/trees/LinkedMerkleTree.js +337 -0
  108. package/dist/trees/LinkedMerkleTree.js.map +1 -0
  109. package/dist/trees/LinkedMerkleTreeStore.d.ts +24 -0
  110. package/dist/trees/LinkedMerkleTreeStore.d.ts.map +1 -0
  111. package/dist/trees/LinkedMerkleTreeStore.js +2 -0
  112. package/dist/trees/LinkedMerkleTreeStore.js.map +1 -0
  113. package/dist/trees/MerkleTreeStore.d.ts +5 -0
  114. package/dist/trees/MerkleTreeStore.d.ts.map +1 -0
  115. package/dist/trees/MerkleTreeStore.js +2 -0
  116. package/dist/trees/MerkleTreeStore.js.map +1 -0
  117. package/dist/trees/MockAsyncMerkleStore.d.ts +9 -0
  118. package/dist/trees/MockAsyncMerkleStore.d.ts.map +1 -0
  119. package/dist/trees/MockAsyncMerkleStore.js +20 -0
  120. package/dist/trees/MockAsyncMerkleStore.js.map +1 -0
  121. package/dist/trees/RollupMerkleTree.d.ts +147 -0
  122. package/dist/trees/RollupMerkleTree.d.ts.map +1 -0
  123. package/dist/trees/RollupMerkleTree.js +218 -0
  124. package/dist/trees/RollupMerkleTree.js.map +1 -0
  125. package/dist/trees/VirtualMerkleTreeStore.d.ts +13 -0
  126. package/dist/trees/VirtualMerkleTreeStore.d.ts.map +1 -0
  127. package/dist/trees/VirtualMerkleTreeStore.js +18 -0
  128. package/dist/trees/VirtualMerkleTreeStore.js.map +1 -0
  129. package/dist/trees/lmt/AbstractLinkedMerkleTree.d.ts +288 -0
  130. package/dist/trees/lmt/AbstractLinkedMerkleTree.d.ts.map +1 -0
  131. package/dist/trees/lmt/AbstractLinkedMerkleTree.js +22 -0
  132. package/dist/trees/lmt/AbstractLinkedMerkleTree.js.map +1 -0
  133. package/dist/trees/lmt/InMemoryLinkedLeafStore.d.ts +21 -0
  134. package/dist/trees/lmt/InMemoryLinkedLeafStore.d.ts.map +1 -0
  135. package/dist/trees/lmt/InMemoryLinkedLeafStore.js +26 -0
  136. package/dist/trees/lmt/InMemoryLinkedLeafStore.js.map +1 -0
  137. package/dist/trees/lmt/InMemoryLinkedMerkleLeafStore.d.ts +7 -0
  138. package/dist/trees/lmt/InMemoryLinkedMerkleLeafStore.d.ts.map +1 -0
  139. package/dist/trees/lmt/InMemoryLinkedMerkleLeafStore.js +6 -0
  140. package/dist/trees/lmt/InMemoryLinkedMerkleLeafStore.js.map +1 -0
  141. package/dist/trees/lmt/LinkedLeafStore.d.ts +16 -0
  142. package/dist/trees/lmt/LinkedLeafStore.d.ts.map +1 -0
  143. package/dist/trees/lmt/LinkedLeafStore.js +2 -0
  144. package/dist/trees/lmt/LinkedLeafStore.js.map +1 -0
  145. package/dist/trees/lmt/LinkedLinkedStore.d.ts +16 -0
  146. package/dist/trees/lmt/LinkedLinkedStore.d.ts.map +1 -0
  147. package/dist/trees/lmt/LinkedLinkedStore.js +2 -0
  148. package/dist/trees/lmt/LinkedLinkedStore.js.map +1 -0
  149. package/dist/trees/lmt/LinkedMerkleTree.d.ts +11 -0
  150. package/dist/trees/lmt/LinkedMerkleTree.d.ts.map +1 -0
  151. package/dist/trees/lmt/LinkedMerkleTree.js +241 -0
  152. package/dist/trees/lmt/LinkedMerkleTree.js.map +1 -0
  153. package/dist/trees/lmt/LinkedMerkleTreeCircuitOps.d.ts +113 -0
  154. package/dist/trees/lmt/LinkedMerkleTreeCircuitOps.d.ts.map +1 -0
  155. package/dist/trees/lmt/LinkedMerkleTreeCircuitOps.js +113 -0
  156. package/dist/trees/lmt/LinkedMerkleTreeCircuitOps.js.map +1 -0
  157. package/dist/trees/lmt/LinkedMerkleTreeDatabase.d.ts +7 -0
  158. package/dist/trees/lmt/LinkedMerkleTreeDatabase.d.ts.map +1 -0
  159. package/dist/trees/lmt/LinkedMerkleTreeDatabase.js +2 -0
  160. package/dist/trees/lmt/LinkedMerkleTreeDatabase.js.map +1 -0
  161. package/dist/trees/lmt/LinkedMerkleTreeStore.d.ts +16 -0
  162. package/dist/trees/lmt/LinkedMerkleTreeStore.d.ts.map +1 -0
  163. package/dist/trees/lmt/LinkedMerkleTreeStore.js +2 -0
  164. package/dist/trees/lmt/LinkedMerkleTreeStore.js.map +1 -0
  165. package/dist/trees/lmt/LinkedMerkleTreeTypes.d.ts +74 -0
  166. package/dist/trees/lmt/LinkedMerkleTreeTypes.d.ts.map +1 -0
  167. package/dist/trees/lmt/LinkedMerkleTreeTypes.js +50 -0
  168. package/dist/trees/lmt/LinkedMerkleTreeTypes.js.map +1 -0
  169. package/dist/trees/sparse/InMemoryMerkleTreeStorage.d.ts +11 -0
  170. package/dist/trees/sparse/InMemoryMerkleTreeStorage.d.ts.map +1 -0
  171. package/dist/trees/sparse/InMemoryMerkleTreeStorage.js +13 -0
  172. package/dist/trees/sparse/InMemoryMerkleTreeStorage.js.map +1 -0
  173. package/dist/trees/sparse/MerkleTreeStore.d.ts +5 -0
  174. package/dist/trees/sparse/MerkleTreeStore.d.ts.map +1 -0
  175. package/dist/trees/sparse/MerkleTreeStore.js +2 -0
  176. package/dist/trees/sparse/MerkleTreeStore.js.map +1 -0
  177. package/dist/trees/sparse/MockAsyncMerkleStore.d.ts +9 -0
  178. package/dist/trees/sparse/MockAsyncMerkleStore.d.ts.map +1 -0
  179. package/dist/trees/sparse/MockAsyncMerkleStore.js +20 -0
  180. package/dist/trees/sparse/MockAsyncMerkleStore.js.map +1 -0
  181. package/dist/trees/sparse/RollupMerkleTree.d.ts +158 -0
  182. package/dist/trees/sparse/RollupMerkleTree.d.ts.map +1 -0
  183. package/dist/trees/sparse/RollupMerkleTree.js +330 -0
  184. package/dist/trees/sparse/RollupMerkleTree.js.map +1 -0
  185. package/dist/types.d.ts +62 -0
  186. package/dist/types.d.ts.map +1 -1
  187. package/dist/types.js +14 -1
  188. package/dist/types.js.map +1 -0
  189. package/dist/union/union.d.ts +177 -0
  190. package/dist/union/union.d.ts.map +1 -0
  191. package/dist/union/union.js +35 -0
  192. package/dist/union/union.js.map +1 -0
  193. package/dist/utils.d.ts +57 -2
  194. package/dist/utils.d.ts.map +1 -1
  195. package/dist/utils.js +153 -4
  196. package/dist/utils.js.map +1 -0
  197. package/dist/zkProgrammable/ProvableMethodExecutionContext.d.ts +4 -3
  198. package/dist/zkProgrammable/ProvableMethodExecutionContext.d.ts.map +1 -1
  199. package/dist/zkProgrammable/ProvableMethodExecutionContext.js +2 -3
  200. package/dist/zkProgrammable/ProvableMethodExecutionContext.js.map +1 -0
  201. package/dist/zkProgrammable/ZkProgrammable.d.ts +32 -11
  202. package/dist/zkProgrammable/ZkProgrammable.d.ts.map +1 -1
  203. package/dist/zkProgrammable/ZkProgrammable.js +36 -17
  204. package/dist/zkProgrammable/ZkProgrammable.js.map +1 -0
  205. package/dist/zkProgrammable/provableMethod.d.ts +7 -4
  206. package/dist/zkProgrammable/provableMethod.d.ts.map +1 -1
  207. package/dist/zkProgrammable/provableMethod.js +30 -14
  208. package/dist/zkProgrammable/provableMethod.js.map +1 -0
  209. package/jest.config.cjs +12 -1
  210. package/package.json +9 -7
  211. package/src/cache/CacheManifest.ts +57 -0
  212. package/src/cache/ProxyCache.ts +30 -0
  213. package/src/cache/RemoteCache.ts +9 -0
  214. package/src/cache/RemoteCacheCompiler.ts +131 -0
  215. package/src/compiling/AtomicCompileHelper.ts +71 -0
  216. package/src/compiling/CompilableModule.ts +6 -0
  217. package/src/compiling/CompileRegistry.ts +64 -0
  218. package/src/compiling/services/ChildVerificationKeyService.ts +26 -0
  219. package/src/config/ChildContainerCreatable.ts +5 -0
  220. package/src/config/ChildContainerProvider.ts +5 -0
  221. package/src/config/ConfigurableModule.ts +15 -2
  222. package/src/config/ModuleContainer.ts +286 -58
  223. package/src/config/Startable.ts +3 -0
  224. package/src/config/injectAlias.ts +70 -0
  225. package/src/dependencyFactory/DependencyFactory.ts +34 -109
  226. package/src/dummyVerificationKey.ts +10 -0
  227. package/src/events/EventEmitter.ts +61 -0
  228. package/src/events/EventEmitterProxy.ts +81 -0
  229. package/src/events/EventEmittingComponent.ts +11 -0
  230. package/src/events/ReplayingSingleUseEventEmitter.ts +42 -0
  231. package/src/index.ts +27 -2
  232. package/src/log.ts +145 -0
  233. package/src/trees/lmt/AbstractLinkedMerkleTree.ts +102 -0
  234. package/src/trees/lmt/InMemoryLinkedLeafStore.ts +42 -0
  235. package/src/trees/lmt/LinkedLeafStore.ts +13 -0
  236. package/src/trees/lmt/LinkedMerkleTree.ts +335 -0
  237. package/src/trees/lmt/LinkedMerkleTreeCircuitOps.ts +188 -0
  238. package/src/trees/lmt/LinkedMerkleTreeTypes.ts +53 -0
  239. package/src/trees/sparse/InMemoryMerkleTreeStorage.ts +17 -0
  240. package/src/trees/sparse/MerkleTreeStore.ts +5 -0
  241. package/src/trees/sparse/MockAsyncMerkleStore.ts +30 -0
  242. package/src/trees/sparse/RollupMerkleTree.ts +512 -0
  243. package/src/types.ts +53 -2
  244. package/src/utils.ts +281 -5
  245. package/src/zkProgrammable/ProvableMethodExecutionContext.ts +6 -6
  246. package/src/zkProgrammable/ZkProgrammable.ts +90 -35
  247. package/src/zkProgrammable/provableMethod.ts +50 -23
  248. package/test/config/ContainerEvents.test.ts +65 -0
  249. package/test/config/ModuleContainer.test.ts +146 -15
  250. package/test/config/injectAlias.test.ts +28 -0
  251. package/test/trees/LinkedMerkleTree.test.ts +124 -0
  252. package/test/trees/LinkedMerkleTreeCircuitOps.test.ts +147 -0
  253. package/test/trees/MerkleTree.test.ts +251 -0
  254. package/test/tsconfig.json +5 -2
  255. package/test/zkProgrammable/ZkProgrammable.test.ts +145 -119
  256. package/tsconfig.json +1 -1
  257. package/LICENSE.md +0 -201
  258. 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
- /* eslint-disable max-classes-per-file */
2
- import { ConfigurableModule } from "../../src/config/ConfigurableModule";
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
- class TestModule extends BaseTestModule<TestModuleConfig> {}
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 max-len
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
- modules: {
49
- TestModule,
50
- OtherTestModule,
51
- // this module would not be assignable to TestModuleContainer
52
- // WrongTestModule,
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(ModuleContainerErrors.configNotSetInContainer("TestModule"));
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
+ });