@proto-kit/common 0.1.1-develop.164 → 0.1.1-develop.1661

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 (305) hide show
  1. package/dist/compiling/AtomicCompileHelper.d.ts +13 -0
  2. package/dist/compiling/AtomicCompileHelper.d.ts.map +1 -0
  3. package/dist/compiling/AtomicCompileHelper.js +40 -0
  4. package/dist/compiling/AtomicCompileHelper.js.map +1 -0
  5. package/dist/compiling/CompilableModule.d.ts +6 -0
  6. package/dist/compiling/CompilableModule.d.ts.map +1 -0
  7. package/dist/compiling/CompilableModule.js +2 -0
  8. package/dist/compiling/CompilableModule.js.map +1 -0
  9. package/dist/compiling/CompileRegistry.d.ts +26 -0
  10. package/dist/compiling/CompileRegistry.d.ts.map +1 -0
  11. package/dist/compiling/CompileRegistry.js +69 -0
  12. package/dist/compiling/CompileRegistry.js.map +1 -0
  13. package/dist/compiling/services/ChildVerificationKeyService.d.ts +10 -0
  14. package/dist/compiling/services/ChildVerificationKeyService.d.ts.map +1 -0
  15. package/dist/compiling/services/ChildVerificationKeyService.js +27 -0
  16. package/dist/compiling/services/ChildVerificationKeyService.js.map +1 -0
  17. package/dist/config/ChildContainerCreatable.d.ts +5 -0
  18. package/dist/config/ChildContainerCreatable.d.ts.map +1 -0
  19. package/dist/config/ChildContainerCreatable.js +2 -0
  20. package/dist/config/ChildContainerCreatable.js.map +1 -0
  21. package/dist/config/ChildContainerProvider.d.ts +5 -0
  22. package/dist/config/ChildContainerProvider.d.ts.map +1 -0
  23. package/dist/config/ChildContainerProvider.js +2 -0
  24. package/dist/config/ChildContainerProvider.js.map +1 -0
  25. package/dist/config/ConfigurableModule.d.ts +6 -2
  26. package/dist/config/ConfigurableModule.d.ts.map +1 -1
  27. package/dist/config/ConfigurableModule.js +5 -0
  28. package/dist/config/ConfigurableModule.js.map +1 -0
  29. package/dist/config/ModuleContainer.d.ts +70 -17
  30. package/dist/config/ModuleContainer.d.ts.map +1 -1
  31. package/dist/config/ModuleContainer.js +164 -22
  32. package/dist/config/ModuleContainer.js.map +1 -0
  33. package/dist/config/Startable.d.ts +4 -0
  34. package/dist/config/Startable.d.ts.map +1 -0
  35. package/dist/config/Startable.js +2 -0
  36. package/dist/config/Startable.js.map +1 -0
  37. package/dist/config/injectAlias.d.ts +18 -0
  38. package/dist/config/injectAlias.d.ts.map +1 -0
  39. package/dist/config/injectAlias.js +47 -0
  40. package/dist/config/injectAlias.js.map +1 -0
  41. package/dist/dependencyFactory/DependencyFactory.d.ts +29 -0
  42. package/dist/dependencyFactory/DependencyFactory.d.ts.map +1 -0
  43. package/dist/dependencyFactory/DependencyFactory.js +2 -0
  44. package/dist/dependencyFactory/DependencyFactory.js.map +1 -0
  45. package/dist/dependencyFactory/injectOptional.d.ts +16 -0
  46. package/dist/dependencyFactory/injectOptional.d.ts.map +1 -0
  47. package/dist/dependencyFactory/injectOptional.js +40 -0
  48. package/dist/dependencyFactory/injectOptional.js.map +1 -0
  49. package/dist/dummyVerificationKey.d.ts +3 -0
  50. package/dist/dummyVerificationKey.d.ts.map +1 -0
  51. package/dist/dummyVerificationKey.js +8 -0
  52. package/dist/dummyVerificationKey.js.map +1 -0
  53. package/dist/events/EventEmitter.d.ts +19 -0
  54. package/dist/events/EventEmitter.d.ts.map +1 -0
  55. package/dist/events/EventEmitter.js +35 -0
  56. package/dist/events/EventEmitter.js.map +1 -0
  57. package/dist/events/EventEmitterProxy.d.ts +18 -0
  58. package/dist/events/EventEmitterProxy.d.ts.map +1 -0
  59. package/dist/events/EventEmitterProxy.js +35 -0
  60. package/dist/events/EventEmitterProxy.js.map +1 -0
  61. package/dist/events/EventEmittingComponent.d.ts +9 -0
  62. package/dist/events/EventEmittingComponent.d.ts.map +1 -0
  63. package/dist/events/EventEmittingComponent.js +2 -0
  64. package/dist/events/EventEmittingComponent.js.map +1 -0
  65. package/dist/events/ReplayingSingleUseEventEmitter.d.ts +17 -0
  66. package/dist/events/ReplayingSingleUseEventEmitter.d.ts.map +1 -0
  67. package/dist/events/ReplayingSingleUseEventEmitter.js +34 -0
  68. package/dist/events/ReplayingSingleUseEventEmitter.js.map +1 -0
  69. package/dist/index.d.ts +24 -1
  70. package/dist/index.d.ts.map +1 -1
  71. package/dist/index.js +25 -2
  72. package/dist/index.js.map +1 -0
  73. package/dist/log.d.ts +37 -0
  74. package/dist/log.d.ts.map +1 -0
  75. package/dist/log.js +114 -0
  76. package/dist/log.js.map +1 -0
  77. package/dist/trees/InMemoryLinkedLeafStore.d.ts +21 -0
  78. package/dist/trees/InMemoryLinkedLeafStore.d.ts.map +1 -0
  79. package/dist/trees/InMemoryLinkedLeafStore.js +26 -0
  80. package/dist/trees/InMemoryLinkedLeafStore.js.map +1 -0
  81. package/dist/trees/InMemoryLinkedMerkleLeafStore.d.ts +7 -0
  82. package/dist/trees/InMemoryLinkedMerkleLeafStore.d.ts.map +1 -0
  83. package/dist/trees/InMemoryLinkedMerkleLeafStore.js +6 -0
  84. package/dist/trees/InMemoryLinkedMerkleLeafStore.js.map +1 -0
  85. package/dist/trees/InMemoryMerkleTreeStorage.d.ts +11 -0
  86. package/dist/trees/InMemoryMerkleTreeStorage.d.ts.map +1 -0
  87. package/dist/trees/InMemoryMerkleTreeStorage.js +13 -0
  88. package/dist/trees/InMemoryMerkleTreeStorage.js.map +1 -0
  89. package/dist/trees/LinkedMerkleTree.d.ts +345 -0
  90. package/dist/trees/LinkedMerkleTree.d.ts.map +1 -0
  91. package/dist/trees/LinkedMerkleTree.js +337 -0
  92. package/dist/trees/LinkedMerkleTree.js.map +1 -0
  93. package/dist/trees/LinkedMerkleTreeStore.d.ts +24 -0
  94. package/dist/trees/LinkedMerkleTreeStore.d.ts.map +1 -0
  95. package/dist/trees/LinkedMerkleTreeStore.js +2 -0
  96. package/dist/trees/LinkedMerkleTreeStore.js.map +1 -0
  97. package/dist/trees/MerkleTreeStore.d.ts +5 -0
  98. package/dist/trees/MerkleTreeStore.d.ts.map +1 -0
  99. package/dist/trees/MerkleTreeStore.js +2 -0
  100. package/dist/trees/MerkleTreeStore.js.map +1 -0
  101. package/dist/trees/MockAsyncMerkleStore.d.ts +9 -0
  102. package/dist/trees/MockAsyncMerkleStore.d.ts.map +1 -0
  103. package/dist/trees/MockAsyncMerkleStore.js +20 -0
  104. package/dist/trees/MockAsyncMerkleStore.js.map +1 -0
  105. package/dist/trees/RollupMerkleTree.d.ts +147 -0
  106. package/dist/trees/RollupMerkleTree.d.ts.map +1 -0
  107. package/dist/trees/RollupMerkleTree.js +218 -0
  108. package/dist/trees/RollupMerkleTree.js.map +1 -0
  109. package/dist/trees/VirtualMerkleTreeStore.d.ts +13 -0
  110. package/dist/trees/VirtualMerkleTreeStore.d.ts.map +1 -0
  111. package/dist/trees/VirtualMerkleTreeStore.js +18 -0
  112. package/dist/trees/VirtualMerkleTreeStore.js.map +1 -0
  113. package/dist/trees/lmt/AbstractLinkedMerkleTree.d.ts +288 -0
  114. package/dist/trees/lmt/AbstractLinkedMerkleTree.d.ts.map +1 -0
  115. package/dist/trees/lmt/AbstractLinkedMerkleTree.js +22 -0
  116. package/dist/trees/lmt/AbstractLinkedMerkleTree.js.map +1 -0
  117. package/dist/trees/lmt/InMemoryLinkedLeafStore.d.ts +21 -0
  118. package/dist/trees/lmt/InMemoryLinkedLeafStore.d.ts.map +1 -0
  119. package/dist/trees/lmt/InMemoryLinkedLeafStore.js +26 -0
  120. package/dist/trees/lmt/InMemoryLinkedLeafStore.js.map +1 -0
  121. package/dist/trees/lmt/InMemoryLinkedMerkleLeafStore.d.ts +7 -0
  122. package/dist/trees/lmt/InMemoryLinkedMerkleLeafStore.d.ts.map +1 -0
  123. package/dist/trees/lmt/InMemoryLinkedMerkleLeafStore.js +6 -0
  124. package/dist/trees/lmt/InMemoryLinkedMerkleLeafStore.js.map +1 -0
  125. package/dist/trees/lmt/LinkedLeafStore.d.ts +16 -0
  126. package/dist/trees/lmt/LinkedLeafStore.d.ts.map +1 -0
  127. package/dist/trees/lmt/LinkedLeafStore.js +2 -0
  128. package/dist/trees/lmt/LinkedLeafStore.js.map +1 -0
  129. package/dist/trees/lmt/LinkedLinkedStore.d.ts +16 -0
  130. package/dist/trees/lmt/LinkedLinkedStore.d.ts.map +1 -0
  131. package/dist/trees/lmt/LinkedLinkedStore.js +2 -0
  132. package/dist/trees/lmt/LinkedLinkedStore.js.map +1 -0
  133. package/dist/trees/lmt/LinkedMerkleTree.d.ts +11 -0
  134. package/dist/trees/lmt/LinkedMerkleTree.d.ts.map +1 -0
  135. package/dist/trees/lmt/LinkedMerkleTree.js +241 -0
  136. package/dist/trees/lmt/LinkedMerkleTree.js.map +1 -0
  137. package/dist/trees/lmt/LinkedMerkleTreeCircuitOps.d.ts +113 -0
  138. package/dist/trees/lmt/LinkedMerkleTreeCircuitOps.d.ts.map +1 -0
  139. package/dist/trees/lmt/LinkedMerkleTreeCircuitOps.js +113 -0
  140. package/dist/trees/lmt/LinkedMerkleTreeCircuitOps.js.map +1 -0
  141. package/dist/trees/lmt/LinkedMerkleTreeDatabase.d.ts +7 -0
  142. package/dist/trees/lmt/LinkedMerkleTreeDatabase.d.ts.map +1 -0
  143. package/dist/trees/lmt/LinkedMerkleTreeDatabase.js +2 -0
  144. package/dist/trees/lmt/LinkedMerkleTreeDatabase.js.map +1 -0
  145. package/dist/trees/lmt/LinkedMerkleTreeStore.d.ts +16 -0
  146. package/dist/trees/lmt/LinkedMerkleTreeStore.d.ts.map +1 -0
  147. package/dist/trees/lmt/LinkedMerkleTreeStore.js +2 -0
  148. package/dist/trees/lmt/LinkedMerkleTreeStore.js.map +1 -0
  149. package/dist/trees/lmt/LinkedMerkleTreeTypes.d.ts +74 -0
  150. package/dist/trees/lmt/LinkedMerkleTreeTypes.d.ts.map +1 -0
  151. package/dist/trees/lmt/LinkedMerkleTreeTypes.js +50 -0
  152. package/dist/trees/lmt/LinkedMerkleTreeTypes.js.map +1 -0
  153. package/dist/trees/sparse/InMemoryMerkleTreeStorage.d.ts +11 -0
  154. package/dist/trees/sparse/InMemoryMerkleTreeStorage.d.ts.map +1 -0
  155. package/dist/trees/sparse/InMemoryMerkleTreeStorage.js +13 -0
  156. package/dist/trees/sparse/InMemoryMerkleTreeStorage.js.map +1 -0
  157. package/dist/trees/sparse/MerkleTreeStore.d.ts +5 -0
  158. package/dist/trees/sparse/MerkleTreeStore.d.ts.map +1 -0
  159. package/dist/trees/sparse/MerkleTreeStore.js +2 -0
  160. package/dist/trees/sparse/MerkleTreeStore.js.map +1 -0
  161. package/dist/trees/sparse/MockAsyncMerkleStore.d.ts +9 -0
  162. package/dist/trees/sparse/MockAsyncMerkleStore.d.ts.map +1 -0
  163. package/dist/trees/sparse/MockAsyncMerkleStore.js +20 -0
  164. package/dist/trees/sparse/MockAsyncMerkleStore.js.map +1 -0
  165. package/dist/trees/sparse/RollupMerkleTree.d.ts +157 -0
  166. package/dist/trees/sparse/RollupMerkleTree.d.ts.map +1 -0
  167. package/dist/trees/sparse/RollupMerkleTree.js +272 -0
  168. package/dist/trees/sparse/RollupMerkleTree.js.map +1 -0
  169. package/dist/types.d.ts +16 -0
  170. package/dist/types.d.ts.map +1 -1
  171. package/dist/types.js +12 -1
  172. package/dist/types.js.map +1 -0
  173. package/dist/utils.d.ts +62 -0
  174. package/dist/utils.d.ts.map +1 -1
  175. package/dist/utils.js +155 -0
  176. package/dist/utils.js.map +1 -0
  177. package/dist/zkProgrammable/ProvableMethodExecutionContext.d.ts +4 -3
  178. package/dist/zkProgrammable/ProvableMethodExecutionContext.d.ts.map +1 -1
  179. package/dist/zkProgrammable/ProvableMethodExecutionContext.js +2 -3
  180. package/dist/zkProgrammable/ProvableMethodExecutionContext.js.map +1 -0
  181. package/dist/zkProgrammable/ZkProgrammable.d.ts +15 -7
  182. package/dist/zkProgrammable/ZkProgrammable.d.ts.map +1 -1
  183. package/dist/zkProgrammable/ZkProgrammable.js +34 -15
  184. package/dist/zkProgrammable/ZkProgrammable.js.map +1 -0
  185. package/dist/zkProgrammable/provableMethod.d.ts +8 -5
  186. package/dist/zkProgrammable/provableMethod.d.ts.map +1 -1
  187. package/dist/zkProgrammable/provableMethod.js +15 -13
  188. package/dist/zkProgrammable/provableMethod.js.map +1 -0
  189. package/jest.config.cjs +12 -1
  190. package/package.json +8 -8
  191. package/src/compiling/AtomicCompileHelper.ts +62 -0
  192. package/src/compiling/CompilableModule.ts +6 -0
  193. package/src/compiling/CompileRegistry.ts +79 -0
  194. package/src/compiling/services/ChildVerificationKeyService.ts +26 -0
  195. package/src/config/ChildContainerCreatable.ts +5 -0
  196. package/src/config/ChildContainerProvider.ts +5 -0
  197. package/src/config/ConfigurableModule.ts +15 -2
  198. package/src/config/ModuleContainer.ts +287 -46
  199. package/src/config/Startable.ts +3 -0
  200. package/src/config/injectAlias.ts +70 -0
  201. package/src/dependencyFactory/DependencyFactory.ts +57 -0
  202. package/src/dummyVerificationKey.ts +10 -0
  203. package/src/events/EventEmitter.ts +61 -0
  204. package/src/events/EventEmitterProxy.ts +81 -0
  205. package/src/events/EventEmittingComponent.ts +11 -0
  206. package/src/events/ReplayingSingleUseEventEmitter.ts +42 -0
  207. package/src/index.ts +24 -2
  208. package/src/log.ts +143 -0
  209. package/src/trees/lmt/AbstractLinkedMerkleTree.ts +102 -0
  210. package/src/trees/lmt/InMemoryLinkedLeafStore.ts +42 -0
  211. package/src/trees/lmt/LinkedLeafStore.ts +13 -0
  212. package/src/trees/lmt/LinkedMerkleTree.ts +335 -0
  213. package/src/trees/lmt/LinkedMerkleTreeCircuitOps.ts +188 -0
  214. package/src/trees/lmt/LinkedMerkleTreeTypes.ts +53 -0
  215. package/src/trees/sparse/InMemoryMerkleTreeStorage.ts +17 -0
  216. package/src/trees/sparse/MerkleTreeStore.ts +5 -0
  217. package/src/trees/sparse/MockAsyncMerkleStore.ts +30 -0
  218. package/src/trees/sparse/RollupMerkleTree.ts +427 -0
  219. package/src/types.ts +43 -2
  220. package/src/utils.ts +287 -0
  221. package/src/zkProgrammable/ProvableMethodExecutionContext.ts +6 -6
  222. package/src/zkProgrammable/ZkProgrammable.ts +61 -29
  223. package/src/zkProgrammable/provableMethod.ts +38 -21
  224. package/test/config/ContainerEvents.test.ts +65 -0
  225. package/test/config/ModuleContainer.test.ts +146 -15
  226. package/test/config/injectAlias.test.ts +28 -0
  227. package/test/trees/LinkedMerkleTree.test.ts +124 -0
  228. package/test/trees/LinkedMerkleTreeCircuitOps.test.ts +147 -0
  229. package/test/trees/MerkleTree.test.ts +220 -0
  230. package/test/tsconfig.json +5 -2
  231. package/test/zkProgrammable/ZkProgrammable.test.ts +135 -114
  232. package/tsconfig.json +1 -1
  233. package/dist/Constants.d.ts +0 -4
  234. package/dist/Constants.d.ts.map +0 -1
  235. package/dist/Constants.js +0 -3
  236. package/dist/config/ConfigurationAggregator.d.ts +0 -10
  237. package/dist/config/ConfigurationAggregator.d.ts.map +0 -1
  238. package/dist/config/ConfigurationAggregator.js +0 -35
  239. package/dist/config/ConfigurationReceiver.d.ts +0 -25
  240. package/dist/config/ConfigurationReceiver.d.ts.map +0 -1
  241. package/dist/config/ConfigurationReceiver.js +0 -36
  242. package/dist/config/types.d.ts +0 -2
  243. package/dist/config/types.d.ts.map +0 -1
  244. package/dist/config/types.js +0 -1
  245. package/dist/model/MethodPublicInput.d.ts +0 -51
  246. package/dist/model/MethodPublicInput.d.ts.map +0 -1
  247. package/dist/model/MethodPublicInput.js +0 -11
  248. package/dist/model/Option.d.ts +0 -89
  249. package/dist/model/Option.d.ts.map +0 -1
  250. package/dist/model/Option.js +0 -86
  251. package/dist/model/Path.d.ts +0 -31
  252. package/dist/model/Path.d.ts.map +0 -1
  253. package/dist/model/Path.js +0 -44
  254. package/dist/model/StateTransition.d.ts +0 -85
  255. package/dist/model/StateTransition.d.ts.map +0 -1
  256. package/dist/model/StateTransition.js +0 -58
  257. package/dist/model/StateTransitionProvableBatch.d.ts +0 -56
  258. package/dist/model/StateTransitionProvableBatch.d.ts.map +0 -1
  259. package/dist/model/StateTransitionProvableBatch.js +0 -20
  260. package/dist/prover/block/BlockProver.d.ts +0 -199
  261. package/dist/prover/block/BlockProver.d.ts.map +0 -1
  262. package/dist/prover/block/BlockProver.js +0 -119
  263. package/dist/prover/block/BlockScopedModule.d.ts +0 -3
  264. package/dist/prover/block/BlockScopedModule.d.ts.map +0 -1
  265. package/dist/prover/block/BlockScopedModule.js +0 -6
  266. package/dist/prover/statetransition/StateTransitionProver.d.ts +0 -92
  267. package/dist/prover/statetransition/StateTransitionProver.d.ts.map +0 -1
  268. package/dist/prover/statetransition/StateTransitionProver.js +0 -127
  269. package/dist/prover/statetransition/StateTransitionWitnessProvider.d.ts +0 -16
  270. package/dist/prover/statetransition/StateTransitionWitnessProvider.d.ts.map +0 -1
  271. package/dist/prover/statetransition/StateTransitionWitnessProvider.js +0 -17
  272. package/dist/src/model/Option.d.ts +0 -158
  273. package/dist/src/model/Option.d.ts.map +0 -1
  274. package/dist/src/model/Option.js +0 -53
  275. package/dist/src/model/Path.d.ts +0 -35
  276. package/dist/src/model/Path.d.ts.map +0 -1
  277. package/dist/src/model/Path.js +0 -51
  278. package/dist/src/model/StateTransition.d.ts +0 -201
  279. package/dist/src/model/StateTransition.d.ts.map +0 -1
  280. package/dist/src/model/StateTransition.js +0 -43
  281. package/dist/src/utils/PrefixedHashList.d.ts +0 -15
  282. package/dist/src/utils/PrefixedHashList.d.ts.map +0 -1
  283. package/dist/src/utils/PrefixedHashList.js +0 -28
  284. package/dist/src/utils/ProvableHashList.d.ts +0 -30
  285. package/dist/src/utils/ProvableHashList.d.ts.map +0 -1
  286. package/dist/src/utils/ProvableHashList.js +0 -43
  287. package/dist/utils/PrefixedHashList.d.ts +0 -14
  288. package/dist/utils/PrefixedHashList.d.ts.map +0 -1
  289. package/dist/utils/PrefixedHashList.js +0 -12
  290. package/dist/utils/PrefixedProvableHashList.d.ts +0 -8
  291. package/dist/utils/PrefixedProvableHashList.d.ts.map +0 -1
  292. package/dist/utils/PrefixedProvableHashList.js +0 -12
  293. package/dist/utils/ProvableHashList.d.ts +0 -26
  294. package/dist/utils/ProvableHashList.d.ts.map +0 -1
  295. package/dist/utils/ProvableHashList.js +0 -35
  296. package/dist/utils/Utils.d.ts +0 -22
  297. package/dist/utils/Utils.d.ts.map +0 -1
  298. package/dist/utils/Utils.js +0 -41
  299. package/dist/utils/merkletree/MemoryMerkleTreeStorage.d.ts +0 -26
  300. package/dist/utils/merkletree/MemoryMerkleTreeStorage.d.ts.map +0 -1
  301. package/dist/utils/merkletree/MemoryMerkleTreeStorage.js +0 -79
  302. package/dist/utils/merkletree/RollupMerkleTree.d.ts +0 -143
  303. package/dist/utils/merkletree/RollupMerkleTree.d.ts.map +0 -1
  304. package/dist/utils/merkletree/RollupMerkleTree.js +0 -246
  305. package/tsconfig.test.json +0 -9
@@ -1,12 +1,14 @@
1
1
  import "reflect-metadata";
2
- import { container, Lifecycle } from "tsyringe";
2
+ import { instanceCachingFactory, isClassProvider, isFactoryProvider, isTokenProvider, isValueProvider, Lifecycle, } from "tsyringe";
3
3
  import log from "loglevel";
4
- import { ConfigurableModule } from "./ConfigurableModule";
4
+ import merge from "lodash/merge";
5
+ import { EventEmitterProxy } from "../events/EventEmitterProxy";
6
+ import { ConfigurableModule, } from "./ConfigurableModule";
7
+ import { getInjectAliases } from "./injectAlias";
5
8
  const errors = {
6
9
  configNotSetInContainer: (moduleName) => new Error(`Trying to get config of ${moduleName}, but it was not yet set in the module container`),
7
10
  onlyValidModuleNames: (moduleName) => new Error(
8
- // eslint-disable-next-line max-len
9
- // eslint-disable-next-line @typescript-eslint/no-base-to-string,@typescript-eslint/restrict-template-expressions
11
+ // eslint-disable-next-line @typescript-eslint/no-base-to-string
10
12
  `Only known module names are allowed, using unknown module name: ${moduleName}`),
11
13
  unableToDecorateModule: (moduleName) =>
12
14
  // eslint-disable-next-line @typescript-eslint/no-base-to-string
@@ -16,6 +18,8 @@ const errors = {
16
18
  unknownDependency: (runtimeModuleName, name) => new Error(`Unable to register module: ${runtimeModuleName},
17
19
  attempting to inject a dependency that is not registered
18
20
  as a runtime module for this chain: ${name}`),
21
+ dependencyContainerNotSet: (className) => new Error(`DependencyContainer not set. Be sure to only call DI-related function in create() and not inside the constructor. (${className})`),
22
+ validModuleInstance: (moduleName, moduleTypeName) => new Error(`Incompatible module instance ("${moduleName}" not instanceof ${moduleTypeName})`),
19
23
  };
20
24
  export const ModuleContainerErrors = errors;
21
25
  /**
@@ -27,15 +31,14 @@ export class ModuleContainer extends ConfigurableModule {
27
31
  super();
28
32
  this.definition = definition;
29
33
  // DI container holding all the registered modules
30
- this.container = container.createChildContainer();
31
- // register all provided modules when the container is created
32
- this.registerModules(definition.modules);
34
+ this.providedContainer = undefined;
35
+ this.eventEmitterProxy = undefined;
33
36
  }
34
37
  /**
35
38
  * @returns list of module names
36
39
  */
37
40
  get moduleNames() {
38
- return Object.keys(this.definition.modules);
41
+ return Object.keys(this.definition);
39
42
  }
40
43
  /**
41
44
  * Check if the provided module satisfies the container requirements,
@@ -57,19 +60,34 @@ export class ModuleContainer extends ConfigurableModule {
57
60
  }
58
61
  });
59
62
  }
63
+ get container() {
64
+ this.assertContainerInitialized(this.providedContainer);
65
+ return this.providedContainer;
66
+ }
60
67
  /**
61
68
  * Assert that the iterated `moduleName` is of ModuleName type,
62
69
  * otherwise it may be just string e.g. when modules are iterated over
63
70
  * using e.g. a for loop.
64
71
  */
65
- assertIsValidModuleName(modules, moduleName) {
66
- this.isValidModuleName(modules, moduleName);
72
+ assertIsValidModuleName(moduleName) {
73
+ if (!this.isValidModuleName(this.definition, moduleName)) {
74
+ throw errors.onlyValidModuleNames(moduleName);
75
+ }
67
76
  }
68
77
  isValidModuleName(modules, moduleName) {
69
- if (!Object.prototype.hasOwnProperty.call(modules, moduleName)) {
70
- throw errors.onlyValidModuleNames(moduleName);
78
+ return Object.prototype.hasOwnProperty.call(modules, moduleName);
79
+ }
80
+ assertContainerInitialized(container) {
81
+ if (container === undefined) {
82
+ throw errors.dependencyContainerNotSet(this.constructor.name);
71
83
  }
72
84
  }
85
+ registerAliases(originalToken, clas) {
86
+ const aliases = getInjectAliases(clas);
87
+ aliases.forEach((alias) => this.container.register(alias, {
88
+ useToken: originalToken,
89
+ }));
90
+ }
73
91
  /**
74
92
  * Register modules into the current container, and registers
75
93
  * a respective resolution hook in order to decorate the module
@@ -78,20 +96,30 @@ export class ModuleContainer extends ConfigurableModule {
78
96
  * @param modules
79
97
  */
80
98
  registerModules(modules) {
81
- for (const moduleName in modules) {
99
+ Object.keys(modules).forEach((moduleName) => {
82
100
  if (Object.prototype.hasOwnProperty.call(modules, moduleName)) {
83
- this.assertIsValidModuleName(modules, moduleName);
101
+ this.assertIsValidModuleName(moduleName);
84
102
  log.debug(`Registering module: ${moduleName}`);
85
- this.container.register(moduleName, { useClass: modules[moduleName] }, { lifecycle: Lifecycle.ContainerScoped });
103
+ const useClass = modules[moduleName];
104
+ this.container.register(moduleName, { useClass }, { lifecycle: Lifecycle.ContainerScoped });
86
105
  this.onAfterModuleResolution(moduleName);
106
+ this.registerAliases(moduleName, useClass);
107
+ if (this.isDependencyFactory(useClass)) {
108
+ this.useDependencyFactory(useClass);
109
+ }
87
110
  }
111
+ });
112
+ }
113
+ get events() {
114
+ if (this.eventEmitterProxy === undefined) {
115
+ this.eventEmitterProxy = new EventEmitterProxy(this);
88
116
  }
117
+ return this.eventEmitterProxy;
89
118
  }
90
119
  /**
91
120
  * Register a non-module value into the current container
92
121
  * @param modules
93
122
  */
94
- // eslint-disable-next-line no-warning-comments
95
123
  // TODO Rename to plural since object is param
96
124
  registerValue(modules) {
97
125
  Object.entries(modules).forEach(([moduleName, useValue]) => {
@@ -107,7 +135,16 @@ export class ModuleContainer extends ConfigurableModule {
107
135
  * @param config
108
136
  */
109
137
  configure(config) {
110
- this.definition.config = config;
138
+ this.config = config;
139
+ }
140
+ configurePartial(config) {
141
+ this.config = merge(this.currentConfig ?? {}, config);
142
+ }
143
+ get config() {
144
+ return super.config;
145
+ }
146
+ set config(config) {
147
+ super.config = merge(this.currentConfig ?? {}, config);
111
148
  }
112
149
  /**
113
150
  * Resolves a module from the current module container
@@ -123,10 +160,15 @@ export class ModuleContainer extends ConfigurableModule {
123
160
  return this.container.resolve(moduleName);
124
161
  }
125
162
  resolveOrFail(moduleName, moduleType) {
163
+ if (!this.container.isRegistered(moduleName)) {
164
+ throw new Error(`Dependency with token ${moduleName} not registered`);
165
+ }
126
166
  const instance = this.container.resolve(moduleName);
127
- const isValidModuleInstance = instance instanceof moduleType;
128
- if (!isValidModuleInstance) {
129
- throw new Error("Incompatible module instance");
167
+ if (moduleType !== undefined) {
168
+ const isValidModuleInstance = instance instanceof moduleType;
169
+ if (!isValidModuleInstance) {
170
+ throw errors.validModuleInstance(moduleName, moduleType.name);
171
+ }
130
172
  }
131
173
  return instance;
132
174
  }
@@ -135,12 +177,86 @@ export class ModuleContainer extends ConfigurableModule {
135
177
  * features or module checks
136
178
  */
137
179
  decorateModule(moduleName, containedModule) {
138
- const config = this.definition.config?.[moduleName];
180
+ const config = super.config?.[moduleName];
139
181
  // eslint-disable-next-line @typescript-eslint/strict-boolean-expressions
140
182
  if (!config) {
141
183
  throw errors.configNotSetInContainer(moduleName.toString());
142
184
  }
143
- containedModule.config = config;
185
+ if (containedModule instanceof ModuleContainer) {
186
+ containedModule.configure(config);
187
+ }
188
+ else {
189
+ containedModule.config = config;
190
+ }
191
+ }
192
+ isDependencyFactory(type) {
193
+ return "dependencies" in type;
194
+ }
195
+ /**
196
+ * Inject a set of dependencies using the given list of DependencyFactories
197
+ * This method should be called during startup
198
+ */
199
+ initializeDependencyFactories(factories) {
200
+ factories.forEach((factoryName) => {
201
+ this.resolve(factoryName);
202
+ });
203
+ }
204
+ /**
205
+ * Retrieves all dependencies generated by a particular dependencyfactory
206
+ * and injects them inside this modulecontainer's DI container.
207
+ * This will be automatically called for every module, but can also be called
208
+ * explicitly to initialize an extra factory
209
+ * @param factory
210
+ * @private
211
+ */
212
+ useDependencyFactory(factory) {
213
+ const dependencies = factory.dependencies();
214
+ // eslint-disable-next-line sonarjs/cognitive-complexity
215
+ Object.entries(dependencies).forEach(([rawKey, declaration]) => {
216
+ const key = rawKey.charAt(0).toUpperCase() + rawKey.slice(1);
217
+ if (!this.container.isRegistered(key) ||
218
+ declaration.forceOverwrite === true) {
219
+ if (this.container.isRegistered(key) &&
220
+ (declaration?.forceOverwrite ?? false)) {
221
+ log.warn(`You are trying to overwrite dependency ${key}, which is already registered. This is currently not supported. Try to define your dependency earlier.`);
222
+ }
223
+ // Find correct provider type and call respective register
224
+ if (isValueProvider(declaration)) {
225
+ this.container.register(key, declaration);
226
+ }
227
+ else if (isFactoryProvider(declaration)) {
228
+ // this enables us to have a singletoned factory
229
+ // that returns the same instance for each resolve
230
+ this.container.register(key, {
231
+ useFactory: instanceCachingFactory(declaration.useFactory),
232
+ });
233
+ }
234
+ else if (isClassProvider(declaration)) {
235
+ this.container.register(key, declaration, {
236
+ lifecycle: Lifecycle.Singleton,
237
+ });
238
+ this.registerAliases(key,
239
+ // eslint-disable-next-line @typescript-eslint/consistent-type-assertions
240
+ declaration.useClass);
241
+ // Register static dependencies
242
+ if (this.isDependencyFactory(declaration.useClass)) {
243
+ this.useDependencyFactory(declaration.useClass);
244
+ }
245
+ }
246
+ else if (isTokenProvider(declaration)) {
247
+ this.container.register(key, declaration, {
248
+ lifecycle: Lifecycle.Singleton,
249
+ });
250
+ }
251
+ else {
252
+ // Can never be reached
253
+ throw new Error("Above if-statement is exhaustive");
254
+ }
255
+ }
256
+ else {
257
+ log.debug(`Dependency ${key} already registered, skipping`);
258
+ }
259
+ });
144
260
  }
145
261
  /**
146
262
  * Handle module resolution, e.g. by decorating resolved modules
@@ -153,11 +269,37 @@ export class ModuleContainer extends ConfigurableModule {
153
269
  throw errors.unableToDecorateModule(containedModuleName);
154
270
  }
155
271
  this.decorateModule(moduleName, containedModule);
272
+ containedModule.create(() => {
273
+ const container = this.container.createChildContainer();
274
+ container.reset();
275
+ return container;
276
+ });
277
+ if (this.isDependencyFactory(containedModule)) {
278
+ this.useDependencyFactory(containedModule);
279
+ }
156
280
  }, { frequency: ModuleContainer.moduleDecorationFrequency });
157
281
  }
282
+ /**
283
+ * This is a placeholder for individual modules to override.
284
+ * This method will be called whenever the underlying container fully
285
+ * initialized
286
+ */
287
+ create(childContainerProvider) {
288
+ this.providedContainer = childContainerProvider();
289
+ this.registerValue({
290
+ ChildContainerProvider: () => this.container.createChildContainer(),
291
+ });
292
+ // register all provided modules when the container is created
293
+ this.registerModules(this.definition);
294
+ this.container.register("ParentContainer", { useValue: this });
295
+ }
296
+ get dependencyContainer() {
297
+ return this.container;
298
+ }
158
299
  }
159
300
  /**
160
301
  * Determines how often are modules decorated upon resolution
161
302
  * from the tsyringe DI container
162
303
  */
163
304
  ModuleContainer.moduleDecorationFrequency = "Once";
305
+ //# sourceMappingURL=ModuleContainer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ModuleContainer.js","sourceRoot":"","sources":["../../src/config/ModuleContainer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export interface Startable {
2
+ start(): Promise<void>;
3
+ }
4
+ //# sourceMappingURL=Startable.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Startable.d.ts","sourceRoot":"","sources":["../../src/config/Startable.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,SAAS;IACxB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=Startable.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Startable.js","sourceRoot":"","sources":["../../src/config/Startable.ts"],"names":[],"mappings":""}
@@ -0,0 +1,18 @@
1
+ import { TypedClass } from "../types";
2
+ export declare const injectAliasMetadataKey = "protokit-inject-alias";
3
+ /**
4
+ * Attaches metadata to the class that the ModuleContainer can pick up
5
+ * and inject this class in the DI container under the specified aliases.
6
+ * This method supports inheritance, therefore also gets aliases defined
7
+ * on superclasses
8
+ */
9
+ export declare function injectAlias(aliases: string[]): (target: TypedClass<unknown>) => void;
10
+ /**
11
+ * Marks the class to implement a certain interface T, while also attaching
12
+ * a DI-injection alias as metadata, that will be picked up by the ModuleContainer
13
+ * to allow resolving by that interface name
14
+ * @param name The name of the injection alias, convention is to use the same as the name of T
15
+ */
16
+ export declare function implement<T>(name: string): (target: TypedClass<T>) => void;
17
+ export declare function getInjectAliases(target: TypedClass<unknown>): string[];
18
+ //# sourceMappingURL=injectAlias.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"injectAlias.d.ts","sourceRoot":"","sources":["../../src/config/injectAlias.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAEtC,eAAO,MAAM,sBAAsB,0BAA0B,CAAC;AAE9D;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,YAC3B,WAAW,OAAO,CAAC,UA+BpC;AAED;;;;;GAKG;AACH,wBAAgB,SAAS,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,YAM7B,WAAW,CAAC,CAAC,UAIxB;AAED,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,UAAU,CAAC,OAAO,CAAC,GAAG,MAAM,EAAE,CAOtE"}
@@ -0,0 +1,47 @@
1
+ export const injectAliasMetadataKey = "protokit-inject-alias";
2
+ /**
3
+ * Attaches metadata to the class that the ModuleContainer can pick up
4
+ * and inject this class in the DI container under the specified aliases.
5
+ * This method supports inheritance, therefore also gets aliases defined
6
+ * on superclasses
7
+ */
8
+ export function injectAlias(aliases) {
9
+ return (target) => {
10
+ // eslint-disable-next-line @typescript-eslint/consistent-type-assertions
11
+ const superAliases = Reflect.getMetadata(injectAliasMetadataKey,
12
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-argument
13
+ Object.getPrototypeOf(target));
14
+ // eslint-disable-next-line @typescript-eslint/consistent-type-assertions
15
+ const existingAliases = Reflect.getMetadata(injectAliasMetadataKey, target);
16
+ let allAliases = aliases;
17
+ if (superAliases !== undefined) {
18
+ allAliases = allAliases.concat(superAliases);
19
+ }
20
+ if (existingAliases !== undefined) {
21
+ allAliases = allAliases.concat(existingAliases);
22
+ }
23
+ Reflect.defineMetadata(injectAliasMetadataKey, allAliases.filter((value, index, array) => array.indexOf(value) === index), target);
24
+ };
25
+ }
26
+ /**
27
+ * Marks the class to implement a certain interface T, while also attaching
28
+ * a DI-injection alias as metadata, that will be picked up by the ModuleContainer
29
+ * to allow resolving by that interface name
30
+ * @param name The name of the injection alias, convention is to use the same as the name of T
31
+ */
32
+ export function implement(name) {
33
+ return (
34
+ /**
35
+ * Check if the target class extends RuntimeModule, while
36
+ * also providing static config presets
37
+ */
38
+ target) => {
39
+ injectAlias([name])(target);
40
+ };
41
+ }
42
+ export function getInjectAliases(target) {
43
+ // eslint-disable-next-line @typescript-eslint/consistent-type-assertions
44
+ const aliases = Reflect.getMetadata(injectAliasMetadataKey, target);
45
+ return aliases ?? [];
46
+ }
47
+ //# sourceMappingURL=injectAlias.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"injectAlias.js","sourceRoot":"","sources":["../../src/config/injectAlias.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,sBAAsB,GAAG,uBAAuB,CAAC;AAE9D;;;;;GAKG;AACH,MAAM,UAAU,WAAW,CAAC,OAAiB;IAC3C,OAAO,CAAC,MAA2B,EAAE,EAAE;QACrC,yEAAyE;QACzE,MAAM,YAAY,GAAG,OAAO,CAAC,WAAW,CACtC,sBAAsB;QACtB,iEAAiE;QACjE,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,CACN,CAAC;QAE1B,yEAAyE;QACzE,MAAM,eAAe,GAAG,OAAO,CAAC,WAAW,CACzC,sBAAsB,EACtB,MAAM,CACiB,CAAC;QAE1B,IAAI,UAAU,GAAG,OAAO,CAAC;QAEzB,IAAI,YAAY,KAAK,SAAS,EAAE;YAC9B,UAAU,GAAG,UAAU,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;SAC9C;QACD,IAAI,eAAe,KAAK,SAAS,EAAE;YACjC,UAAU,GAAG,UAAU,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC;SACjD;QAED,OAAO,CAAC,cAAc,CACpB,sBAAsB,EACtB,UAAU,CAAC,MAAM,CACf,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,KAAK,CACxD,EACD,MAAM,CACP,CAAC;IACJ,CAAC,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,SAAS,CAAI,IAAY;IACvC,OAAO;IACL;;;OAGG;IACH,MAAqB,EACrB,EAAE;QACF,WAAW,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;IAC9B,CAAC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,MAA2B;IAC1D,yEAAyE;IACzE,MAAM,OAAO,GAAG,OAAO,CAAC,WAAW,CACjC,sBAAsB,EACtB,MAAM,CACK,CAAC;IACd,OAAO,OAAO,IAAI,EAAE,CAAC;AACvB,CAAC"}
@@ -0,0 +1,29 @@
1
+ import { ClassProvider, FactoryProvider, TokenProvider, ValueProvider } from "tsyringe";
2
+ import { TypedClass } from "../types";
3
+ import type { BaseModuleInstanceType } from "../config/ModuleContainer";
4
+ export type DependencyDeclaration<Dependency> = ClassProvider<Dependency> | FactoryProvider<Dependency> | TokenProvider<Dependency> | ValueProvider<Dependency>;
5
+ export type DependencyRecord = Record<string, DependencyDeclaration<unknown> & {
6
+ forceOverwrite?: boolean;
7
+ }>;
8
+ /**
9
+ * This is an abstract class for creating DependencyFactories, a pattern
10
+ * to bundle multiple smaller services into one and register them into the
11
+ * injection context.
12
+ *
13
+ * This can for example be a StorageDependencyFactory that creates dependencies
14
+ * like StateService, MerkleWitnessService, etc. So in general, services that
15
+ * are not ConfigurableModules, but still are their own logical unit.
16
+ *
17
+ * DependencyFactories are designed to only be used statically for sets of
18
+ * deps that are necessary for the sequencer to work.
19
+ */
20
+ export interface DependencyFactory {
21
+ dependencies: () => DependencyRecord;
22
+ }
23
+ export type TypeFromDependencyDeclaration<Declaration extends DependencyDeclaration<unknown>> = Declaration extends DependencyDeclaration<infer Dependency> ? Dependency : never;
24
+ export type CapitalizeAny<Key extends string | number | symbol> = Key extends string ? Capitalize<Key> : Key;
25
+ export type MapDependencyRecordToTypes<Record extends DependencyRecord> = {
26
+ [Key in keyof Record as CapitalizeAny<Key>]: TypedClass<TypeFromDependencyDeclaration<Record[Key]>>;
27
+ };
28
+ export type InferDependencies<Class extends BaseModuleInstanceType> = Class extends DependencyFactory ? MapDependencyRecordToTypes<ReturnType<Class["dependencies"]>> : never;
29
+ //# sourceMappingURL=DependencyFactory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DependencyFactory.d.ts","sourceRoot":"","sources":["../../src/dependencyFactory/DependencyFactory.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,aAAa,EACb,eAAe,EACf,aAAa,EACb,aAAa,EACd,MAAM,UAAU,CAAC;AAElB,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AACtC,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AAExE,MAAM,MAAM,qBAAqB,CAAC,UAAU,IACxC,aAAa,CAAC,UAAU,CAAC,GACzB,eAAe,CAAC,UAAU,CAAC,GAC3B,aAAa,CAAC,UAAU,CAAC,GACzB,aAAa,CAAC,UAAU,CAAC,CAAC;AAE9B,MAAM,MAAM,gBAAgB,GAAG,MAAM,CACnC,MAAM,EACN,qBAAqB,CAAC,OAAO,CAAC,GAAG;IAAE,cAAc,CAAC,EAAE,OAAO,CAAA;CAAE,CAC9D,CAAC;AAEF;;;;;;;;;;;GAWG;AACH,MAAM,WAAW,iBAAiB;IAChC,YAAY,EAAE,MAAM,gBAAgB,CAAC;CACtC;AAED,MAAM,MAAM,6BAA6B,CACvC,WAAW,SAAS,qBAAqB,CAAC,OAAO,CAAC,IAElD,WAAW,SAAS,qBAAqB,CAAC,MAAM,UAAU,CAAC,GACvD,UAAU,GACV,KAAK,CAAC;AAEZ,MAAM,MAAM,aAAa,CAAC,GAAG,SAAS,MAAM,GAAG,MAAM,GAAG,MAAM,IAC5D,GAAG,SAAS,MAAM,GAAG,UAAU,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC;AAE7C,MAAM,MAAM,0BAA0B,CAAC,MAAM,SAAS,gBAAgB,IAAI;KACvE,GAAG,IAAI,MAAM,MAAM,IAAI,aAAa,CAAC,GAAG,CAAC,GAAG,UAAU,CACrD,6BAA6B,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAC3C;CACF,CAAC;AAEF,MAAM,MAAM,iBAAiB,CAAC,KAAK,SAAS,sBAAsB,IAChE,KAAK,SAAS,iBAAiB,GAC3B,0BAA0B,CAAC,UAAU,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC,GAC7D,KAAK,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=DependencyFactory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DependencyFactory.js","sourceRoot":"","sources":["../../src/dependencyFactory/DependencyFactory.ts"],"names":[],"mappings":""}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * This function injects a dependency only if it has been registered, otherwise
3
+ * injects undefined. This can be useful for having optional dependencies, where
4
+ * tsyringe would normally error out and not be able to resolve. With this
5
+ * decorator, we can now do this.
6
+ *
7
+ * The strategy we employ here is that we inject a dummy into the global
8
+ * container that is of type UndefinedDisguise. We can't inject undefined
9
+ * directly, therefore we use this object to disguise itself as undefined.
10
+ * Then a child container registers something under the same token, it by
11
+ * default resolves that new dependency. If that doesn't happen, the
12
+ * resolution hits our disguise, which we then convert into undefined
13
+ * using the Transform
14
+ */
15
+ export declare function injectOptional<T>(token: string): (target: any, propertyKey: string | symbol | undefined, parameterIndex: number) => any;
16
+ //# sourceMappingURL=injectOptional.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"injectOptional.d.ts","sourceRoot":"","sources":["../../src/dependencyFactory/injectOptional.ts"],"names":[],"mappings":"AAuBA;;;;;;;;;;;;;GAaG;AACH,wBAAgB,cAAc,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,0FAG9C"}
@@ -0,0 +1,40 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ import { container, injectable, injectWithTransform, Lifecycle, scoped, } from "tsyringe";
8
+ let UndefinedDisguise = class UndefinedDisguise {
9
+ };
10
+ UndefinedDisguise = __decorate([
11
+ injectable(),
12
+ scoped(Lifecycle.ResolutionScoped)
13
+ ], UndefinedDisguise);
14
+ class UndefinedTransform {
15
+ transform(incoming) {
16
+ if (incoming instanceof UndefinedDisguise) {
17
+ return undefined;
18
+ }
19
+ return incoming;
20
+ }
21
+ }
22
+ /**
23
+ * This function injects a dependency only if it has been registered, otherwise
24
+ * injects undefined. This can be useful for having optional dependencies, where
25
+ * tsyringe would normally error out and not be able to resolve. With this
26
+ * decorator, we can now do this.
27
+ *
28
+ * The strategy we employ here is that we inject a dummy into the global
29
+ * container that is of type UndefinedDisguise. We can't inject undefined
30
+ * directly, therefore we use this object to disguise itself as undefined.
31
+ * Then a child container registers something under the same token, it by
32
+ * default resolves that new dependency. If that doesn't happen, the
33
+ * resolution hits our disguise, which we then convert into undefined
34
+ * using the Transform
35
+ */
36
+ export function injectOptional(token) {
37
+ container.register(token, { useClass: UndefinedDisguise });
38
+ return injectWithTransform(token, (UndefinedTransform));
39
+ }
40
+ //# sourceMappingURL=injectOptional.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"injectOptional.js","sourceRoot":"","sources":["../../src/dependencyFactory/injectOptional.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,EACL,SAAS,EACT,UAAU,EACV,mBAAmB,EACnB,SAAS,EACT,MAAM,GACP,MAAM,UAAU,CAAC;AAIlB,IAAM,iBAAiB,GAAvB,MAAM,iBAAiB;CAAG,CAAA;AAApB,iBAAiB;IAFtB,UAAU,EAAE;IACZ,MAAM,CAAC,SAAS,CAAC,gBAAgB,CAAC;GAC7B,iBAAiB,CAAG;AAE1B,MAAM,kBAAkB;IACf,SAAS,CACd,QAAwC;QAExC,IAAI,QAAQ,YAAY,iBAAiB,EAAE;YACzC,OAAO,SAAS,CAAC;SAClB;QACD,OAAO,QAAQ,CAAC;IAClB,CAAC;CACF;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,cAAc,CAAI,KAAa;IAC7C,SAAS,CAAC,QAAQ,CAAC,KAAK,EAAE,EAAE,QAAQ,EAAE,iBAAiB,EAAE,CAAC,CAAC;IAC3D,OAAO,mBAAmB,CAAC,KAAK,EAAE,CAAA,kBAAqB,CAAA,CAAC,CAAC;AAC3D,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { VerificationKey } from "o1js";
2
+ export declare function dummyVerificationKey(): VerificationKey;
3
+ //# sourceMappingURL=dummyVerificationKey.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dummyVerificationKey.d.ts","sourceRoot":"","sources":["../src/dummyVerificationKey.ts"],"names":[],"mappings":"AAAA,OAAO,EAAS,eAAe,EAAE,MAAM,MAAM,CAAC;AAE9C,wBAAgB,oBAAoB,oBAOnC"}
@@ -0,0 +1,8 @@
1
+ import { Field, VerificationKey } from "o1js";
2
+ export function dummyVerificationKey() {
3
+ return new VerificationKey({
4
+ hash: Field("3392518251768960475377392625298437850623664973002200885669375116181514017494"),
5
+ data: "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",
6
+ });
7
+ }
8
+ //# sourceMappingURL=dummyVerificationKey.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dummyVerificationKey.js","sourceRoot":"","sources":["../src/dummyVerificationKey.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,eAAe,EAAE,MAAM,MAAM,CAAC;AAE9C,MAAM,UAAU,oBAAoB;IAClC,OAAO,IAAI,eAAe,CAAC;QACzB,IAAI,EAAE,KAAK,CACT,8EAA8E,CAC/E;QACD,IAAI,EAAE,81EAA81E;KACr2E,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,19 @@
1
+ import { EventsRecord } from "./EventEmittingComponent";
2
+ type ListenersHolder<Events extends EventsRecord> = {
3
+ [key in keyof Events]?: ((...args: Events[key]) => void)[];
4
+ };
5
+ export declare class EventEmitter<Events extends EventsRecord> {
6
+ protected readonly listeners: ListenersHolder<Events>;
7
+ protected readonly wildcardListeners: ((event: keyof Events, args: Events[keyof Events]) => void)[];
8
+ emit<Key extends keyof Events>(event: Key, ...parameters: Events[Key]): void;
9
+ onAll(listener: (event: keyof Events, args: unknown[]) => void): void;
10
+ on<Key extends keyof Events>(event: Key, listener: (...args: Events[Key]) => void): void;
11
+ /**
12
+ * Primitive .off() with identity comparison for now.
13
+ * Could be replaced by returning an id in .on() and using that.
14
+ */
15
+ off<Key extends keyof Events>(event: Key, listener: (...args: Events[Key]) => void): void;
16
+ }
17
+ export type EventListenable<Events extends EventsRecord> = Pick<EventEmitter<Events>, "on" | "onAll" | "off">;
18
+ export {};
19
+ //# sourceMappingURL=EventEmitter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EventEmitter.d.ts","sourceRoot":"","sources":["../../src/events/EventEmitter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAExD,KAAK,eAAe,CAAC,MAAM,SAAS,YAAY,IAAI;KACjD,GAAG,IAAI,MAAM,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE,MAAM,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,EAAE;CAC3D,CAAC;AAEF,qBAAa,YAAY,CAAC,MAAM,SAAS,YAAY;IACnD,SAAS,CAAC,QAAQ,CAAC,SAAS,EAAE,eAAe,CAAC,MAAM,CAAC,CAAM;IAE3D,SAAS,CAAC,QAAQ,CAAC,iBAAiB,EAAE,CAAC,CACrC,KAAK,EAAE,MAAM,MAAM,EACnB,IAAI,EAAE,MAAM,CAAC,MAAM,MAAM,CAAC,KACvB,IAAI,CAAC,EAAE,CAAM;IAEX,IAAI,CAAC,GAAG,SAAS,MAAM,MAAM,EAClC,KAAK,EAAE,GAAG,EACV,GAAG,UAAU,EAAE,MAAM,CAAC,GAAG,CAAC;IAarB,KAAK,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,GAAG,IAAI;IAIrE,EAAE,CAAC,GAAG,SAAS,MAAM,MAAM,EAChC,KAAK,EAAE,GAAG,EACV,QAAQ,EAAE,CAAC,GAAG,IAAI,EAAE,MAAM,CAAC,GAAG,CAAC,KAAK,IAAI;IAK1C;;;OAGG;IACI,GAAG,CAAC,GAAG,SAAS,MAAM,MAAM,EACjC,KAAK,EAAE,GAAG,EACV,QAAQ,EAAE,CAAC,GAAG,IAAI,EAAE,MAAM,CAAC,GAAG,CAAC,KAAK,IAAI;CAS3C;AAED,MAAM,MAAM,eAAe,CAAC,MAAM,SAAS,YAAY,IAAI,IAAI,CAC7D,YAAY,CAAC,MAAM,CAAC,EACpB,IAAI,GAAG,OAAO,GAAG,KAAK,CACvB,CAAC"}
@@ -0,0 +1,35 @@
1
+ export class EventEmitter {
2
+ constructor() {
3
+ this.listeners = {};
4
+ this.wildcardListeners = [];
5
+ }
6
+ emit(event, ...parameters) {
7
+ const listeners = this.listeners[event];
8
+ if (listeners !== undefined) {
9
+ listeners.forEach((listener) => {
10
+ listener(...parameters);
11
+ });
12
+ }
13
+ this.wildcardListeners.forEach((wildcardListener) => {
14
+ wildcardListener(event, parameters);
15
+ });
16
+ }
17
+ onAll(listener) {
18
+ this.wildcardListeners.push(listener);
19
+ }
20
+ on(event, listener) {
21
+ var _a;
22
+ ((_a = this.listeners)[event] ?? (_a[event] = [])).push(listener);
23
+ }
24
+ /**
25
+ * Primitive .off() with identity comparison for now.
26
+ * Could be replaced by returning an id in .on() and using that.
27
+ */
28
+ off(event, listener) {
29
+ const events = this.listeners[event];
30
+ if (events !== undefined) {
31
+ this.listeners[event] = events.filter((candidate) => candidate !== listener);
32
+ }
33
+ }
34
+ }
35
+ //# sourceMappingURL=EventEmitter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EventEmitter.js","sourceRoot":"","sources":["../../src/events/EventEmitter.ts"],"names":[],"mappings":"AAMA,MAAM,OAAO,YAAY;IAAzB;QACqB,cAAS,GAA4B,EAAE,CAAC;QAExC,sBAAiB,GAGrB,EAAE,CAAC;IA2CpB,CAAC;IAzCQ,IAAI,CACT,KAAU,EACV,GAAG,UAAuB;QAE1B,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QACxC,IAAI,SAAS,KAAK,SAAS,EAAE;YAC3B,SAAS,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,EAAE;gBAC7B,QAAQ,CAAC,GAAG,UAAU,CAAC,CAAC;YAC1B,CAAC,CAAC,CAAC;SACJ;QACD,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC,gBAAgB,EAAE,EAAE;YAClD,gBAAgB,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;QACtC,CAAC,CAAC,CAAC;IACL,CAAC;IAEM,KAAK,CAAC,QAAwD;QACnE,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACxC,CAAC;IAEM,EAAE,CACP,KAAU,EACV,QAAwC;;QAExC,OAAC,IAAI,CAAC,SAAS,EAAC,KAAK,SAAL,KAAK,IAAM,EAAE,EAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAChD,CAAC;IAED;;;OAGG;IACI,GAAG,CACR,KAAU,EACV,QAAwC;QAExC,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QACrC,IAAI,MAAM,KAAK,SAAS,EAAE;YACxB,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC,MAAM,CACnC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,KAAK,QAAQ,CACtC,CAAC;SACH;IACH,CAAC;CACF"}
@@ -0,0 +1,18 @@
1
+ import type { BaseModuleType, ModuleContainer, ModulesRecord } from "../config/ModuleContainer";
2
+ import { StringKeyOf, UnionToIntersection } from "../types";
3
+ import { EventEmitter } from "./EventEmitter";
4
+ import { EventEmittingComponent, EventsRecord } from "./EventEmittingComponent";
5
+ export type CastToEventsRecord<Record> = Record extends EventsRecord ? Record : {};
6
+ export type ModuleEvents<ModuleType extends BaseModuleType> = InstanceType<ModuleType> extends EventEmittingComponent<infer Events> ? Events : InstanceType<ModuleType> extends ModuleContainer<infer NestedModules> ? CastToEventsRecord<ContainerEvents<NestedModules>> : EventsRecord;
7
+ export type ContainerEvents<Modules extends ModulesRecord> = {
8
+ [Key in StringKeyOf<Modules>]: ModuleEvents<Modules[Key]>;
9
+ };
10
+ export type FlattenObject<Target extends Record<string, EventsRecord>> = UnionToIntersection<Target[keyof Target]>;
11
+ export type FlattenedContainerEvents<Modules extends ModulesRecord> = FlattenObject<ContainerEvents<Modules>>;
12
+ export declare class EventEmitterProxy<Modules extends ModulesRecord> extends EventEmitter<CastToEventsRecord<FlattenedContainerEvents<Modules>>> {
13
+ private readonly container;
14
+ constructor(container: ModuleContainer<Modules>);
15
+ private isEventEmittingContainer;
16
+ private isEventEmitter;
17
+ }
18
+ //# sourceMappingURL=EventEmitterProxy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EventEmitterProxy.d.ts","sourceRoot":"","sources":["../../src/events/EventEmitterProxy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,cAAc,EACd,eAAe,EACf,aAAa,EACd,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,WAAW,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;AAE5D,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EACL,sBAAsB,EAEtB,YAAY,EACb,MAAM,0BAA0B,CAAC;AAElC,MAAM,MAAM,kBAAkB,CAAC,MAAM,IAAI,MAAM,SAAS,YAAY,GAChE,MAAM,GACN,EAAE,CAAC;AAEP,MAAM,MAAM,YAAY,CAAC,UAAU,SAAS,cAAc,IACxD,YAAY,CAAC,UAAU,CAAC,SAAS,sBAAsB,CAAC,MAAM,MAAM,CAAC,GACjE,MAAM,GACN,YAAY,CAAC,UAAU,CAAC,SAAS,eAAe,CAAC,MAAM,aAAa,CAAC,GACnE,kBAAkB,CAAC,eAAe,CAAC,aAAa,CAAC,CAAC,GAOlD,YAAY,CAAC;AAErB,MAAM,MAAM,eAAe,CAAC,OAAO,SAAS,aAAa,IAAI;KAC1D,GAAG,IAAI,WAAW,CAAC,OAAO,CAAC,GAAG,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;CAC1D,CAAC;AAEF,MAAM,MAAM,aAAa,CAAC,MAAM,SAAS,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,IACnE,mBAAmB,CAAC,MAAM,CAAC,MAAM,MAAM,CAAC,CAAC,CAAC;AAE5C,MAAM,MAAM,wBAAwB,CAAC,OAAO,SAAS,aAAa,IAChE,aAAa,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,CAAC;AAE1C,qBAAa,iBAAiB,CAC5B,OAAO,SAAS,aAAa,CAC7B,SAAQ,YAAY,CAAC,kBAAkB,CAAC,wBAAwB,CAAC,OAAO,CAAC,CAAC,CAAC;IACxD,OAAO,CAAC,QAAQ,CAAC,SAAS;gBAAT,SAAS,EAAE,eAAe,CAAC,OAAO,CAAC;IAqBvE,OAAO,CAAC,wBAAwB;IAQhC,OAAO,CAAC,cAAc;CAOvB"}