jitar 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (577) hide show
  1. package/.eslintignore +3 -0
  2. package/.eslintrc +16 -0
  3. package/README.md +15 -0
  4. package/coverage/clover.xml +2483 -0
  5. package/coverage/coverage-final.json +56 -0
  6. package/coverage/lcov-report/base.css +224 -0
  7. package/coverage/lcov-report/block-navigation.js +87 -0
  8. package/coverage/lcov-report/favicon.png +0 -0
  9. package/coverage/lcov-report/index.html +356 -0
  10. package/coverage/lcov-report/prettify.css +1 -0
  11. package/coverage/lcov-report/prettify.js +2 -0
  12. package/coverage/lcov-report/sort-arrow-sprite.png +0 -0
  13. package/coverage/lcov-report/sorter.js +196 -0
  14. package/coverage/lcov-report/src/core/ErrorManager.ts.html +139 -0
  15. package/coverage/lcov-report/src/core/Implementation.ts.html +244 -0
  16. package/coverage/lcov-report/src/core/ImplementationBuilder.ts.html +148 -0
  17. package/coverage/lcov-report/src/core/Procedure.ts.html +379 -0
  18. package/coverage/lcov-report/src/core/Segment.ts.html +271 -0
  19. package/coverage/lcov-report/src/core/SegmentBuilder.ts.html +250 -0
  20. package/coverage/lcov-report/src/core/Version.ts.html +289 -0
  21. package/coverage/lcov-report/src/core/definitions/AccessLevel.ts.html +94 -0
  22. package/coverage/lcov-report/src/core/definitions/index.html +116 -0
  23. package/coverage/lcov-report/src/core/errors/ErrorManager.ts.html +139 -0
  24. package/coverage/lcov-report/src/core/errors/ImplementationNotFound.ts.html +121 -0
  25. package/coverage/lcov-report/src/core/errors/InvalidVersionNumber.ts.html +121 -0
  26. package/coverage/lcov-report/src/core/errors/MissingParameterValue.ts.html +121 -0
  27. package/coverage/lcov-report/src/core/errors/ProcedureNotFound.ts.html +121 -0
  28. package/coverage/lcov-report/src/core/errors/index.html +161 -0
  29. package/coverage/lcov-report/src/core/index.html +191 -0
  30. package/coverage/lcov-report/src/core/reflection/ParameterParser.ts.html +307 -0
  31. package/coverage/lcov-report/src/core/reflection/ReflectionHelper.ts.html +439 -0
  32. package/coverage/lcov-report/src/core/reflection/index.html +131 -0
  33. package/coverage/lcov-report/src/core/reflection/models/ReflectionField.ts.html +151 -0
  34. package/coverage/lcov-report/src/core/reflection/models/ReflectionParameter.ts.html +139 -0
  35. package/coverage/lcov-report/src/core/reflection/models/index.html +131 -0
  36. package/coverage/lcov-report/src/core/utils/FqnBuilder.ts.html +115 -0
  37. package/coverage/lcov-report/src/core/utils/index.html +116 -0
  38. package/coverage/lcov-report/src/hooks.ts.html +88 -0
  39. package/coverage/lcov-report/src/index.html +116 -0
  40. package/coverage/lcov-report/src/runtime/Gateway.ts.html +139 -0
  41. package/coverage/lcov-report/src/runtime/LocalGateway.ts.html +364 -0
  42. package/coverage/lcov-report/src/runtime/LocalNode.ts.html +475 -0
  43. package/coverage/lcov-report/src/runtime/LocalRepository.ts.html +556 -0
  44. package/coverage/lcov-report/src/runtime/Node.ts.html +130 -0
  45. package/coverage/lcov-report/src/runtime/NodeBalancer.ts.html +268 -0
  46. package/coverage/lcov-report/src/runtime/NodeMonitor.ts.html +274 -0
  47. package/coverage/lcov-report/src/runtime/Remote.ts.html +562 -0
  48. package/coverage/lcov-report/src/runtime/RemoteNode.ts.html +232 -0
  49. package/coverage/lcov-report/src/runtime/Repository.ts.html +145 -0
  50. package/coverage/lcov-report/src/runtime/Runtime.ts.html +226 -0
  51. package/coverage/lcov-report/src/runtime/caching/ImportRewriter.ts.html +313 -0
  52. package/coverage/lcov-report/src/runtime/caching/ModuleAppender.ts.html +208 -0
  53. package/coverage/lcov-report/src/runtime/caching/RemoteBuilder.ts.html +238 -0
  54. package/coverage/lcov-report/src/runtime/caching/SourceAppender.ts.html +256 -0
  55. package/coverage/lcov-report/src/runtime/caching/definitions/Keywords.ts.html +94 -0
  56. package/coverage/lcov-report/src/runtime/caching/definitions/index.html +116 -0
  57. package/coverage/lcov-report/src/runtime/caching/index.html +146 -0
  58. package/coverage/lcov-report/src/runtime/caching/models/ApplicationModule.ts.html +175 -0
  59. package/coverage/lcov-report/src/runtime/caching/models/Implementation.ts.html +208 -0
  60. package/coverage/lcov-report/src/runtime/caching/models/SegmentModule.ts.html +163 -0
  61. package/coverage/lcov-report/src/runtime/caching/models/index.html +146 -0
  62. package/coverage/lcov-report/src/runtime/errors/ClientNotFound.ts.html +121 -0
  63. package/coverage/lcov-report/src/runtime/errors/InvalidClientId.ts.html +121 -0
  64. package/coverage/lcov-report/src/runtime/errors/InvalidSegmentFile.ts.html +121 -0
  65. package/coverage/lcov-report/src/runtime/errors/ModuleNotLoaded.ts.html +121 -0
  66. package/coverage/lcov-report/src/runtime/errors/NoNodeAvailable.ts.html +121 -0
  67. package/coverage/lcov-report/src/runtime/errors/RepositoryNotAvaiable.ts.html +121 -0
  68. package/coverage/lcov-report/src/runtime/errors/RuntimeNotAvailable.ts.html +121 -0
  69. package/coverage/lcov-report/src/runtime/errors/index.html +206 -0
  70. package/coverage/lcov-report/src/runtime/hooks/dependencies.ts.html +142 -0
  71. package/coverage/lcov-report/src/runtime/hooks/index.html +131 -0
  72. package/coverage/lcov-report/src/runtime/hooks/runtime.ts.html +160 -0
  73. package/coverage/lcov-report/src/runtime/index.html +251 -0
  74. package/coverage/lcov-report/src/runtime/models/File.ts.html +151 -0
  75. package/coverage/lcov-report/src/runtime/models/index.html +116 -0
  76. package/coverage/lcov-report/src/runtime/serialization/ArraySerializer.ts.html +166 -0
  77. package/coverage/lcov-report/src/runtime/serialization/ClassSerializer.ts.html +400 -0
  78. package/coverage/lcov-report/src/runtime/serialization/MapSerializer.ts.html +217 -0
  79. package/coverage/lcov-report/src/runtime/serialization/ObjectSerializer.ts.html +211 -0
  80. package/coverage/lcov-report/src/runtime/serialization/SetSerializer.ts.html +178 -0
  81. package/coverage/lcov-report/src/runtime/serialization/ValueSerializer.ts.html +328 -0
  82. package/coverage/lcov-report/src/runtime/serialization/errors/ClassNotFound.ts.html +121 -0
  83. package/coverage/lcov-report/src/runtime/serialization/errors/InvalidClass.ts.html +121 -0
  84. package/coverage/lcov-report/src/runtime/serialization/errors/index.html +131 -0
  85. package/coverage/lcov-report/src/runtime/serialization/index.html +191 -0
  86. package/coverage/lcov-report/src/runtime/utils/ModuleAnalyser.ts.html +265 -0
  87. package/coverage/lcov-report/src/runtime/utils/ModuleLoader.ts.html +238 -0
  88. package/coverage/lcov-report/src/runtime/utils/UrlRewriter.ts.html +262 -0
  89. package/coverage/lcov-report/src/runtime/utils/index.html +146 -0
  90. package/coverage/lcov-report/test/_fixtures/core/Implementation.fixture.ts.html +184 -0
  91. package/coverage/lcov-report/test/_fixtures/core/Procedure.fixture.ts.html +172 -0
  92. package/coverage/lcov-report/test/_fixtures/core/Segment.fixture.ts.html +193 -0
  93. package/coverage/lcov-report/test/_fixtures/core/SegmentBuilder.fixture.ts.html +220 -0
  94. package/coverage/lcov-report/test/_fixtures/core/Version.fixture.ts.html +139 -0
  95. package/coverage/lcov-report/test/_fixtures/core/index.html +176 -0
  96. package/coverage/lcov-report/test/_fixtures/core/procedures/allDefault.ts.html +100 -0
  97. package/coverage/lcov-report/test/_fixtures/core/procedures/hasParameters.ts.html +100 -0
  98. package/coverage/lcov-report/test/_fixtures/core/procedures/hasVersion_v1_0_0.ts.html +115 -0
  99. package/coverage/lcov-report/test/_fixtures/core/procedures/hasVersion_v1_0_5.ts.html +115 -0
  100. package/coverage/lcov-report/test/_fixtures/core/procedures/hasVersion_v1_1_0.ts.html +115 -0
  101. package/coverage/lcov-report/test/_fixtures/core/procedures/hasVersion_v1_2_3.ts.html +115 -0
  102. package/coverage/lcov-report/test/_fixtures/core/procedures/inModule.ts.html +115 -0
  103. package/coverage/lcov-report/test/_fixtures/core/procedures/index.html +251 -0
  104. package/coverage/lcov-report/test/_fixtures/core/procedures/isBroken.ts.html +112 -0
  105. package/coverage/lcov-report/test/_fixtures/core/procedures/isPrivate.ts.html +112 -0
  106. package/coverage/lcov-report/test/_fixtures/core/procedures/isPublic.ts.html +112 -0
  107. package/coverage/lcov-report/test/_fixtures/core/reflection/ReflectionHelper.fixture.ts.html +241 -0
  108. package/coverage/lcov-report/test/_fixtures/core/reflection/index.html +116 -0
  109. package/coverage/lcov-report/test/_fixtures/core/segments/default.segment.ts.html +94 -0
  110. package/coverage/lcov-report/test/_fixtures/core/segments/index.html +116 -0
  111. package/coverage/lcov-report/test/_fixtures/runtime/LocalGateway.fixture.ts.html +157 -0
  112. package/coverage/lcov-report/test/_fixtures/runtime/LocalNode.fixture.ts.html +133 -0
  113. package/coverage/lcov-report/test/_fixtures/runtime/LocalRepository.fixture.ts.html +304 -0
  114. package/coverage/lcov-report/test/_fixtures/runtime/NodeBalancer.fixture.ts.html +142 -0
  115. package/coverage/lcov-report/test/_fixtures/runtime/NodeMonitor.fixture.ts.html +187 -0
  116. package/coverage/lcov-report/test/_fixtures/runtime/RemoteNode.fixture.ts.html +109 -0
  117. package/coverage/lcov-report/test/_fixtures/runtime/caching/ImportRewriter.fixture.ts.html +304 -0
  118. package/coverage/lcov-report/test/_fixtures/runtime/caching/ModuleAppender.fixture.ts.html +181 -0
  119. package/coverage/lcov-report/test/_fixtures/runtime/caching/RemoteBuilder.fixture.ts.html +217 -0
  120. package/coverage/lcov-report/test/_fixtures/runtime/caching/SourceAppender.fixture.ts.html +178 -0
  121. package/coverage/lcov-report/test/_fixtures/runtime/caching/index.html +146 -0
  122. package/coverage/lcov-report/test/_fixtures/runtime/index.html +206 -0
  123. package/coverage/lcov-report/test/_fixtures/runtime/procedures/firstPrivateTask.ts.html +109 -0
  124. package/coverage/lcov-report/test/_fixtures/runtime/procedures/firstPublicTask.ts.html +118 -0
  125. package/coverage/lcov-report/test/_fixtures/runtime/procedures/fourthPublicTask.ts.html +109 -0
  126. package/coverage/lcov-report/test/_fixtures/runtime/procedures/index.html +191 -0
  127. package/coverage/lcov-report/test/_fixtures/runtime/procedures/secondPrivateTask.ts.html +109 -0
  128. package/coverage/lcov-report/test/_fixtures/runtime/procedures/secondPublicTask.ts.html +118 -0
  129. package/coverage/lcov-report/test/_fixtures/runtime/procedures/thirdPublicTask.ts.html +118 -0
  130. package/coverage/lcov-report/test/_fixtures/runtime/segments/first.segment.files.ts.html +85 -0
  131. package/coverage/lcov-report/test/_fixtures/runtime/segments/first.segment.ts.html +91 -0
  132. package/coverage/lcov-report/test/_fixtures/runtime/segments/index.html +161 -0
  133. package/coverage/lcov-report/test/_fixtures/runtime/segments/second.segment.files.ts.html +85 -0
  134. package/coverage/lcov-report/test/_fixtures/runtime/segments/second.segment.ts.html +91 -0
  135. package/coverage/lcov-report/test/_fixtures/runtime/segments.ts.html +319 -0
  136. package/coverage/lcov-report/test/_fixtures/runtime/serialization/ValueSerializer.fixture.ts.html +394 -0
  137. package/coverage/lcov-report/test/_fixtures/runtime/serialization/index.html +116 -0
  138. package/coverage/lcov-report/test/_fixtures/runtime/utils/ModuleAnaliser.fixture.ts.html +163 -0
  139. package/coverage/lcov-report/test/_fixtures/runtime/utils/index.html +116 -0
  140. package/coverage/lcov.info +3565 -0
  141. package/dist/client.d.ts +2 -0
  142. package/dist/client.js +12 -0
  143. package/dist/core/AccessLevel.d.ts +5 -0
  144. package/dist/core/AccessLevel.js +6 -0
  145. package/dist/core/ErrorManager.d.ts +3 -0
  146. package/dist/core/ErrorManager.js +11 -0
  147. package/dist/core/Implementation.d.ts +10 -0
  148. package/dist/core/Implementation.js +32 -0
  149. package/dist/core/ImplementationBuilder.d.ts +4 -0
  150. package/dist/core/ImplementationBuilder.js +14 -0
  151. package/dist/core/Procedure.d.ts +13 -0
  152. package/dist/core/Procedure.js +58 -0
  153. package/dist/core/Segment.d.ts +13 -0
  154. package/dist/core/Segment.js +36 -0
  155. package/dist/core/SegmentBuilder.d.ts +6 -0
  156. package/dist/core/SegmentBuilder.js +33 -0
  157. package/dist/core/Version.d.ts +13 -0
  158. package/dist/core/Version.js +50 -0
  159. package/dist/core/definitions/AccessLevel.d.ts +2 -0
  160. package/dist/core/definitions/AccessLevel.js +2 -0
  161. package/dist/core/errors/ErrorManager.d.ts +3 -0
  162. package/dist/core/errors/ErrorManager.js +11 -0
  163. package/dist/core/errors/ImplementationNotFound.d.ts +3 -0
  164. package/dist/core/errors/ImplementationNotFound.js +6 -0
  165. package/dist/core/errors/InvalidVersionNumber.d.ts +3 -0
  166. package/dist/core/errors/InvalidVersionNumber.js +6 -0
  167. package/dist/core/errors/MissingParameterValue.d.ts +3 -0
  168. package/dist/core/errors/MissingParameterValue.js +6 -0
  169. package/dist/core/errors/NotImplemented.d.ts +3 -0
  170. package/dist/core/errors/NotImplemented.js +6 -0
  171. package/dist/core/errors/ProcedureNotFound.d.ts +3 -0
  172. package/dist/core/errors/ProcedureNotFound.js +6 -0
  173. package/dist/core/interfaces/Runner.d.ts +4 -0
  174. package/dist/core/interfaces/Runner.js +1 -0
  175. package/dist/core/reflection/ParameterParser.d.ts +5 -0
  176. package/dist/core/reflection/ParameterParser.js +51 -0
  177. package/dist/core/reflection/ReflectionHelper.d.ts +13 -0
  178. package/dist/core/reflection/ReflectionHelper.js +69 -0
  179. package/dist/core/reflection/models/ReflectionField.d.ts +8 -0
  180. package/dist/core/reflection/models/ReflectionField.js +14 -0
  181. package/dist/core/reflection/models/ReflectionParameter.d.ts +7 -0
  182. package/dist/core/reflection/models/ReflectionParameter.js +11 -0
  183. package/dist/core/types/Component.d.ts +5 -0
  184. package/dist/core/types/Component.js +1 -0
  185. package/dist/core/types/FlexObject.d.ts +4 -0
  186. package/dist/core/types/FlexObject.js +1 -0
  187. package/dist/core/types/Module.d.ts +3 -0
  188. package/dist/core/types/Module.js +1 -0
  189. package/dist/core/types/SegmentImplementation.d.ts +6 -0
  190. package/dist/core/types/SegmentImplementation.js +1 -0
  191. package/dist/core/types/SegmentModule.d.ts +5 -0
  192. package/dist/core/types/SegmentModule.js +1 -0
  193. package/dist/core/types/SegmentProcedure.d.ts +7 -0
  194. package/dist/core/types/SegmentProcedure.js +1 -0
  195. package/dist/core/utils/FqnBuilder.d.ts +3 -0
  196. package/dist/core/utils/FqnBuilder.js +5 -0
  197. package/dist/hooks.d.ts +2 -0
  198. package/dist/hooks.js +2 -0
  199. package/dist/lib.d.ts +4 -0
  200. package/dist/lib.js +3 -0
  201. package/dist/runtime/Gateway.d.ts +10 -0
  202. package/dist/runtime/Gateway.js +3 -0
  203. package/dist/runtime/LocalGateway.d.ts +12 -0
  204. package/dist/runtime/LocalGateway.js +54 -0
  205. package/dist/runtime/LocalNode.d.ts +18 -0
  206. package/dist/runtime/LocalNode.js +75 -0
  207. package/dist/runtime/LocalRepository.d.ts +17 -0
  208. package/dist/runtime/LocalRepository.js +86 -0
  209. package/dist/runtime/Node.d.ts +8 -0
  210. package/dist/runtime/Node.js +3 -0
  211. package/dist/runtime/NodeBalancer.d.ts +10 -0
  212. package/dist/runtime/NodeBalancer.js +34 -0
  213. package/dist/runtime/NodeMonitor.d.ts +7 -0
  214. package/dist/runtime/NodeMonitor.js +38 -0
  215. package/dist/runtime/Proxy.d.ts +19 -0
  216. package/dist/runtime/Proxy.js +31 -0
  217. package/dist/runtime/Remote.d.ts +15 -0
  218. package/dist/runtime/Remote.js +100 -0
  219. package/dist/runtime/RemoteGateway.d.ts +11 -0
  220. package/dist/runtime/RemoteGateway.js +22 -0
  221. package/dist/runtime/RemoteNode.d.ts +12 -0
  222. package/dist/runtime/RemoteNode.js +29 -0
  223. package/dist/runtime/RemoteNodeBuilder.d.ts +4 -0
  224. package/dist/runtime/RemoteNodeBuilder.js +10 -0
  225. package/dist/runtime/RemoteRepository.d.ts +14 -0
  226. package/dist/runtime/RemoteRepository.js +34 -0
  227. package/dist/runtime/Repository.d.ts +11 -0
  228. package/dist/runtime/Repository.js +3 -0
  229. package/dist/runtime/Runtime.d.ts +9 -0
  230. package/dist/runtime/Runtime.js +27 -0
  231. package/dist/runtime/caching/CachBuilder.d.ts +6 -0
  232. package/dist/runtime/caching/CachBuilder.js +150 -0
  233. package/dist/runtime/caching/CacheBuilder.d.ts +6 -0
  234. package/dist/runtime/caching/CacheBuilder.js +249 -0
  235. package/dist/runtime/caching/ImportRewriter.d.ts +4 -0
  236. package/dist/runtime/caching/ImportRewriter.js +49 -0
  237. package/dist/runtime/caching/ModuleAppender.d.ts +5 -0
  238. package/dist/runtime/caching/ModuleAppender.js +22 -0
  239. package/dist/runtime/caching/RemoteBuilder.d.ts +5 -0
  240. package/dist/runtime/caching/RemoteBuilder.js +31 -0
  241. package/dist/runtime/caching/SourceAppender.d.ts +5 -0
  242. package/dist/runtime/caching/SourceAppender.js +30 -0
  243. package/dist/runtime/caching/definitions/Keywords.d.ts +2 -0
  244. package/dist/runtime/caching/definitions/Keywords.js +2 -0
  245. package/dist/runtime/caching/errors/FunctionFilenameNotFound.d.ts +3 -0
  246. package/dist/runtime/caching/errors/FunctionFilenameNotFound.js +5 -0
  247. package/dist/runtime/caching/errors/InvalidSegmentFilename.d.ts +3 -0
  248. package/dist/runtime/caching/errors/InvalidSegmentFilename.js +5 -0
  249. package/dist/runtime/caching/errors/MissingModuleExport.d.ts +3 -0
  250. package/dist/runtime/caching/errors/MissingModuleExport.js +5 -0
  251. package/dist/runtime/caching/errors/SegmentFileNotLoaded.d.ts +3 -0
  252. package/dist/runtime/caching/errors/SegmentFileNotLoaded.js +5 -0
  253. package/dist/runtime/caching/errors/SegmentModuleNotLoaded.d.ts +3 -0
  254. package/dist/runtime/caching/errors/SegmentModuleNotLoaded.js +5 -0
  255. package/dist/runtime/caching/models/ApplicationModule.d.ts +9 -0
  256. package/dist/runtime/caching/models/ApplicationModule.js +19 -0
  257. package/dist/runtime/caching/models/Implementation.d.ts +12 -0
  258. package/dist/runtime/caching/models/Implementation.js +27 -0
  259. package/dist/runtime/caching/models/Procedure.d.ts +9 -0
  260. package/dist/runtime/caching/models/Procedure.js +15 -0
  261. package/dist/runtime/caching/models/Segment.d.ts +10 -0
  262. package/dist/runtime/caching/models/Segment.js +16 -0
  263. package/dist/runtime/caching/models/SegmentModule.d.ts +10 -0
  264. package/dist/runtime/caching/models/SegmentModule.js +14 -0
  265. package/dist/runtime/caching/types/SegmentFile.d.ts +5 -0
  266. package/dist/runtime/caching/types/SegmentFile.js +1 -0
  267. package/dist/runtime/caching/types/SegmentImportProperties.d.ts +6 -0
  268. package/dist/runtime/caching/types/SegmentImportProperties.js +1 -0
  269. package/dist/runtime/caching/types/SegmentImports.d.ts +5 -0
  270. package/dist/runtime/caching/types/SegmentImports.js +1 -0
  271. package/dist/runtime/caching/types/models/ApplicationModule.d.ts +9 -0
  272. package/dist/runtime/caching/types/models/ApplicationModule.js +19 -0
  273. package/dist/runtime/caching/types/models/Implementation.d.ts +12 -0
  274. package/dist/runtime/caching/types/models/Implementation.js +27 -0
  275. package/dist/runtime/caching/types/models/Procedure.d.ts +9 -0
  276. package/dist/runtime/caching/types/models/Procedure.js +15 -0
  277. package/dist/runtime/caching/types/models/Segment.d.ts +10 -0
  278. package/dist/runtime/caching/types/models/Segment.js +16 -0
  279. package/dist/runtime/caching/types/models/SegmentModule.d.ts +10 -0
  280. package/dist/runtime/caching/types/models/SegmentModule.js +14 -0
  281. package/dist/runtime/errors/ClientNotFound.d.ts +3 -0
  282. package/dist/runtime/errors/ClientNotFound.js +6 -0
  283. package/dist/runtime/errors/FileNotFound.d.ts +3 -0
  284. package/dist/runtime/errors/FileNotFound.js +6 -0
  285. package/dist/runtime/errors/InvalidClientId.d.ts +3 -0
  286. package/dist/runtime/errors/InvalidClientId.js +6 -0
  287. package/dist/runtime/errors/InvalidJitarHooks.d.ts +3 -0
  288. package/dist/runtime/errors/InvalidJitarHooks.js +6 -0
  289. package/dist/runtime/errors/InvalidSegmentFile.d.ts +3 -0
  290. package/dist/runtime/errors/InvalidSegmentFile.js +6 -0
  291. package/dist/runtime/errors/ModuleNotLoaded.d.ts +3 -0
  292. package/dist/runtime/errors/ModuleNotLoaded.js +6 -0
  293. package/dist/runtime/errors/NoNodeAvailable.d.ts +3 -0
  294. package/dist/runtime/errors/NoNodeAvailable.js +6 -0
  295. package/dist/runtime/errors/RepositoryNotAvaiable.d.ts +3 -0
  296. package/dist/runtime/errors/RepositoryNotAvaiable.js +6 -0
  297. package/dist/runtime/errors/RuntimeNotAvailable.d.ts +3 -0
  298. package/dist/runtime/errors/RuntimeNotAvailable.js +6 -0
  299. package/dist/runtime/errors/SegmentNotFound.d.ts +3 -0
  300. package/dist/runtime/errors/SegmentNotFound.js +6 -0
  301. package/dist/runtime/hooks/dependencies.d.ts +2 -0
  302. package/dist/runtime/hooks/dependencies.js +9 -0
  303. package/dist/runtime/hooks/runtime.d.ts +3 -0
  304. package/dist/runtime/hooks/runtime.js +14 -0
  305. package/dist/runtime/interfaces/FileManager.d.ts +11 -0
  306. package/dist/runtime/interfaces/FileManager.js +1 -0
  307. package/dist/runtime/interfaces/HealthCheck.d.ts +3 -0
  308. package/dist/runtime/interfaces/HealthCheck.js +1 -0
  309. package/dist/runtime/interfaces/ProcedureContainer.d.ts +5 -0
  310. package/dist/runtime/interfaces/ProcedureContainer.js +1 -0
  311. package/dist/runtime/models/File.d.ts +9 -0
  312. package/dist/runtime/models/File.js +14 -0
  313. package/dist/runtime/serialization/ArraySerializer.d.ts +7 -0
  314. package/dist/runtime/serialization/ArraySerializer.js +15 -0
  315. package/dist/runtime/serialization/ClassSerializer.d.ts +10 -0
  316. package/dist/runtime/serialization/ClassSerializer.js +58 -0
  317. package/dist/runtime/serialization/MapSerializer.d.ts +8 -0
  318. package/dist/runtime/serialization/MapSerializer.js +25 -0
  319. package/dist/runtime/serialization/ObjectSerializer.d.ts +9 -0
  320. package/dist/runtime/serialization/ObjectSerializer.js +21 -0
  321. package/dist/runtime/serialization/SetSerializer.d.ts +8 -0
  322. package/dist/runtime/serialization/SetSerializer.js +16 -0
  323. package/dist/runtime/serialization/ValueSerializer.d.ts +7 -0
  324. package/dist/runtime/serialization/ValueSerializer.js +46 -0
  325. package/dist/runtime/serialization/errors/ClassNotFound.d.ts +3 -0
  326. package/dist/runtime/serialization/errors/ClassNotFound.js +6 -0
  327. package/dist/runtime/serialization/errors/InvalidClass.d.ts +3 -0
  328. package/dist/runtime/serialization/errors/InvalidClass.js +6 -0
  329. package/dist/runtime/serialization/interfaces/Serializer.d.ts +4 -0
  330. package/dist/runtime/serialization/interfaces/Serializer.js +1 -0
  331. package/dist/runtime/serialization/types/SerializableObject.d.ts +3 -0
  332. package/dist/runtime/serialization/types/SerializableObject.js +1 -0
  333. package/dist/runtime/serialization/types/Serialized.d.ts +5 -0
  334. package/dist/runtime/serialization/types/Serialized.js +1 -0
  335. package/dist/runtime/serialization/types/SerializedClass.d.ts +8 -0
  336. package/dist/runtime/serialization/types/SerializedClass.js +1 -0
  337. package/dist/runtime/serialization/types/SerializedMap.d.ts +8 -0
  338. package/dist/runtime/serialization/types/SerializedMap.js +1 -0
  339. package/dist/runtime/serialization/types/SerializedObject.d.ts +4 -0
  340. package/dist/runtime/serialization/types/SerializedObject.js +1 -0
  341. package/dist/runtime/serialization/types/SerializedSet.d.ts +5 -0
  342. package/dist/runtime/serialization/types/SerializedSet.js +1 -0
  343. package/dist/runtime/types/JitarHooks.d.ts +6 -0
  344. package/dist/runtime/types/JitarHooks.js +1 -0
  345. package/dist/runtime/types/ModuleImporter.d.ts +3 -0
  346. package/dist/runtime/types/ModuleImporter.js +1 -0
  347. package/dist/runtime/utils/ModuleAnalyser.d.ts +7 -0
  348. package/dist/runtime/utils/ModuleAnalyser.js +34 -0
  349. package/dist/runtime/utils/ModuleLoader.d.ts +8 -0
  350. package/dist/runtime/utils/ModuleLoader.js +30 -0
  351. package/dist/runtime/utils/UrlRewriter.d.ts +4 -0
  352. package/dist/runtime/utils/UrlRewriter.js +36 -0
  353. package/dist/server/JitarServer.d.ts +8 -0
  354. package/dist/server/JitarServer.js +109 -0
  355. package/dist/server/configuration/GatewayConfiguration.d.ts +3 -0
  356. package/dist/server/configuration/GatewayConfiguration.js +18 -0
  357. package/dist/server/configuration/NodeConfiguration.d.ts +5 -0
  358. package/dist/server/configuration/NodeConfiguration.js +28 -0
  359. package/dist/server/configuration/ProxyConfiguration.d.ts +5 -0
  360. package/dist/server/configuration/ProxyConfiguration.js +29 -0
  361. package/dist/server/configuration/RepositoryConfiguration.d.ts +5 -0
  362. package/dist/server/configuration/RepositoryConfiguration.js +30 -0
  363. package/dist/server/configuration/RuntimeConfiguration.d.ts +13 -0
  364. package/dist/server/configuration/RuntimeConfiguration.js +48 -0
  365. package/dist/server/configuration/ServerOptions.d.ts +4 -0
  366. package/dist/server/configuration/ServerOptions.js +25 -0
  367. package/dist/server/configuration/StandaloneConfiguration.d.ts +6 -0
  368. package/dist/server/configuration/StandaloneConfiguration.js +36 -0
  369. package/dist/server/controllers/AssetsController.d.ts +8 -0
  370. package/dist/server/controllers/AssetsController.js +50 -0
  371. package/dist/server/controllers/HealthController.d.ts +10 -0
  372. package/dist/server/controllers/HealthController.js +47 -0
  373. package/dist/server/controllers/JitarController.d.ts +4 -0
  374. package/dist/server/controllers/JitarController.js +26 -0
  375. package/dist/server/controllers/ModulesController.d.ts +10 -0
  376. package/dist/server/controllers/ModulesController.js +62 -0
  377. package/dist/server/controllers/NodesController.d.ts +9 -0
  378. package/dist/server/controllers/NodesController.js +60 -0
  379. package/dist/server/controllers/ProceduresController.d.ts +10 -0
  380. package/dist/server/controllers/ProceduresController.js +35 -0
  381. package/dist/server/controllers/ProxyController.d.ts +7 -0
  382. package/dist/server/controllers/ProxyController.js +37 -0
  383. package/dist/server/controllers/RPCController.d.ts +9 -0
  384. package/dist/server/controllers/RPCController.js +129 -0
  385. package/dist/server/definitions/RuntimeDefaults.d.ts +7 -0
  386. package/dist/server/definitions/RuntimeDefaults.js +8 -0
  387. package/dist/server/definitions/RuntimeMode.d.ts +8 -0
  388. package/dist/server/definitions/RuntimeMode.js +9 -0
  389. package/dist/server/errors/MissingConfigurationValue.d.ts +3 -0
  390. package/dist/server/errors/MissingConfigurationValue.js +5 -0
  391. package/dist/server/errors/RuntimeNotAvaiable.d.ts +3 -0
  392. package/dist/server/errors/RuntimeNotAvaiable.js +5 -0
  393. package/dist/server/errors/UnknownRuntimeMode.d.ts +3 -0
  394. package/dist/server/errors/UnknownRuntimeMode.js +5 -0
  395. package/dist/server/models/HealthDto.d.ts +4 -0
  396. package/dist/server/models/HealthDto.js +22 -0
  397. package/dist/server/models/NodeDto.d.ts +4 -0
  398. package/dist/server/models/NodeDto.js +22 -0
  399. package/dist/server/models/RuntimeConfiguration.d.ts +12 -0
  400. package/dist/server/models/RuntimeConfiguration.js +68 -0
  401. package/dist/server/models/ServerOptions.d.ts +4 -0
  402. package/dist/server/models/ServerOptions.js +25 -0
  403. package/dist/server/utils/DataConverter.d.ts +4 -0
  404. package/dist/server/utils/DataConverter.js +9 -0
  405. package/dist/server/utils/LocalFileManager.d.ts +20 -0
  406. package/dist/server/utils/LocalFileManager.js +73 -0
  407. package/dist/server/utils/RuntimeConfigurationLoader.d.ts +4 -0
  408. package/dist/server/utils/RuntimeConfigurationLoader.js +11 -0
  409. package/dist/server/utils/RuntimeConfigurator.d.ts +6 -0
  410. package/dist/server/utils/RuntimeConfigurator.js +130 -0
  411. package/dist/server/utils/ServerOptionsReader.d.ts +4 -0
  412. package/dist/server/utils/ServerOptionsReader.js +10 -0
  413. package/dist/server.d.ts +3 -0
  414. package/dist/server.js +8 -0
  415. package/jest.config.js +20 -0
  416. package/package.json +48 -0
  417. package/src/client.ts +18 -0
  418. package/src/core/ErrorManager.ts +18 -0
  419. package/src/core/Implementation.ts +53 -0
  420. package/src/core/Procedure.ts +98 -0
  421. package/src/core/Segment.ts +62 -0
  422. package/src/core/SegmentBuilder.ts +55 -0
  423. package/src/core/Version.ts +68 -0
  424. package/src/core/definitions/AccessLevel.ts +3 -0
  425. package/src/core/errors/ImplementationNotFound.ts +12 -0
  426. package/src/core/errors/InvalidVersionNumber.ts +12 -0
  427. package/src/core/errors/MissingParameterValue.ts +12 -0
  428. package/src/core/errors/NotImplemented.ts +12 -0
  429. package/src/core/errors/ProcedureNotFound.ts +12 -0
  430. package/src/core/interfaces/Runner.ts +7 -0
  431. package/src/core/reflection/ParameterParser.ts +74 -0
  432. package/src/core/reflection/ReflectionHelper.ts +118 -0
  433. package/src/core/reflection/models/ReflectionField.ts +22 -0
  434. package/src/core/reflection/models/ReflectionParameter.ts +18 -0
  435. package/src/core/types/Component.ts +8 -0
  436. package/src/core/types/FlexObject.ts +4 -0
  437. package/src/core/types/Module.ts +6 -0
  438. package/src/core/types/SegmentImplementation.ts +9 -0
  439. package/src/core/types/SegmentModule.ts +9 -0
  440. package/src/core/types/SegmentProcedure.ts +11 -0
  441. package/src/core/utils/FqnBuilder.ts +11 -0
  442. package/src/hooks.ts +2 -0
  443. package/src/lib.ts +7 -0
  444. package/src/runtime/Gateway.ts +18 -0
  445. package/src/runtime/LocalGateway.ts +93 -0
  446. package/src/runtime/LocalNode.ts +130 -0
  447. package/src/runtime/LocalRepository.ts +157 -0
  448. package/src/runtime/Node.ts +15 -0
  449. package/src/runtime/NodeBalancer.ts +61 -0
  450. package/src/runtime/NodeMonitor.ts +63 -0
  451. package/src/runtime/Proxy.ts +60 -0
  452. package/src/runtime/Remote.ts +157 -0
  453. package/src/runtime/RemoteGateway.ts +40 -0
  454. package/src/runtime/RemoteNode.ts +49 -0
  455. package/src/runtime/RemoteRepository.ts +60 -0
  456. package/src/runtime/Repository.ts +20 -0
  457. package/src/runtime/Runtime.ts +47 -0
  458. package/src/runtime/caching/CacheBuilder.ts +424 -0
  459. package/src/runtime/caching/ImportRewriter.ts +76 -0
  460. package/src/runtime/caching/RemoteBuilder.ts +51 -0
  461. package/src/runtime/caching/SourceAppender.ts +57 -0
  462. package/src/runtime/caching/definitions/Keywords.ts +3 -0
  463. package/src/runtime/caching/errors/InvalidSegmentFilename.ts +8 -0
  464. package/src/runtime/caching/errors/MissingModuleExport.ts +8 -0
  465. package/src/runtime/caching/errors/SegmentFileNotLoaded.ts +8 -0
  466. package/src/runtime/caching/errors/SegmentModuleNotLoaded.ts +8 -0
  467. package/src/runtime/caching/models/ApplicationModule.ts +30 -0
  468. package/src/runtime/caching/models/Implementation.ts +41 -0
  469. package/src/runtime/caching/models/Procedure.ts +26 -0
  470. package/src/runtime/caching/models/Segment.ts +28 -0
  471. package/src/runtime/caching/models/SegmentModule.ts +26 -0
  472. package/src/runtime/caching/types/SegmentFile.ts +6 -0
  473. package/src/runtime/caching/types/SegmentImportProperties.ts +9 -0
  474. package/src/runtime/caching/types/SegmentImports.ts +6 -0
  475. package/src/runtime/errors/ClientNotFound.ts +12 -0
  476. package/src/runtime/errors/FileNotFound.ts +12 -0
  477. package/src/runtime/errors/InvalidClientId.ts +12 -0
  478. package/src/runtime/errors/InvalidJitarHooks.ts +12 -0
  479. package/src/runtime/errors/InvalidSegmentFile.ts +12 -0
  480. package/src/runtime/errors/ModuleNotLoaded.ts +12 -0
  481. package/src/runtime/errors/NoNodeAvailable.ts +12 -0
  482. package/src/runtime/errors/RepositoryNotAvaiable.ts +12 -0
  483. package/src/runtime/errors/RuntimeNotAvailable.ts +12 -0
  484. package/src/runtime/errors/SegmentNotFound.ts +12 -0
  485. package/src/runtime/hooks/dependencies.ts +19 -0
  486. package/src/runtime/hooks/runtime.ts +25 -0
  487. package/src/runtime/interfaces/FileManager.ts +19 -0
  488. package/src/runtime/interfaces/HealthCheck.ts +5 -0
  489. package/src/runtime/interfaces/ProcedureContainer.ts +9 -0
  490. package/src/runtime/models/File.ts +22 -0
  491. package/src/runtime/serialization/ArraySerializer.ts +27 -0
  492. package/src/runtime/serialization/ClassSerializer.ts +105 -0
  493. package/src/runtime/serialization/MapSerializer.ts +44 -0
  494. package/src/runtime/serialization/ObjectSerializer.ts +42 -0
  495. package/src/runtime/serialization/SetSerializer.ts +31 -0
  496. package/src/runtime/serialization/ValueSerializer.ts +81 -0
  497. package/src/runtime/serialization/errors/ClassNotFound.ts +12 -0
  498. package/src/runtime/serialization/errors/InvalidClass.ts +12 -0
  499. package/src/runtime/serialization/interfaces/Serializer.ts +10 -0
  500. package/src/runtime/serialization/types/SerializableObject.ts +6 -0
  501. package/src/runtime/serialization/types/Serialized.ts +8 -0
  502. package/src/runtime/serialization/types/SerializedClass.ts +13 -0
  503. package/src/runtime/serialization/types/SerializedMap.ts +13 -0
  504. package/src/runtime/serialization/types/SerializedObject.ts +4 -0
  505. package/src/runtime/serialization/types/SerializedSet.ts +9 -0
  506. package/src/runtime/types/JitarHooks.ts +10 -0
  507. package/src/runtime/types/ModuleImporter.ts +6 -0
  508. package/src/runtime/utils/ModuleAnalyser.ts +60 -0
  509. package/src/runtime/utils/ModuleLoader.ts +51 -0
  510. package/src/runtime/utils/UrlRewriter.ts +59 -0
  511. package/src/server/JitarServer.ts +161 -0
  512. package/src/server/configuration/GatewayConfiguration.ts +9 -0
  513. package/src/server/configuration/NodeConfiguration.ts +15 -0
  514. package/src/server/configuration/ProxyConfiguration.ts +16 -0
  515. package/src/server/configuration/RepositoryConfiguration.ts +17 -0
  516. package/src/server/configuration/RuntimeConfiguration.ts +30 -0
  517. package/src/server/configuration/ServerOptions.ts +14 -0
  518. package/src/server/configuration/StandaloneConfiguration.ts +21 -0
  519. package/src/server/controllers/AssetsController.ts +59 -0
  520. package/src/server/controllers/HealthController.ts +41 -0
  521. package/src/server/controllers/JitarController.ts +18 -0
  522. package/src/server/controllers/ModulesController.ts +66 -0
  523. package/src/server/controllers/NodesController.ts +58 -0
  524. package/src/server/controllers/ProceduresController.ts +31 -0
  525. package/src/server/controllers/ProxyController.ts +38 -0
  526. package/src/server/controllers/RPCController.ts +173 -0
  527. package/src/server/definitions/RuntimeDefaults.ts +10 -0
  528. package/src/server/errors/MissingConfigurationValue.ts +8 -0
  529. package/src/server/errors/RuntimeNotAvaiable.ts +8 -0
  530. package/src/server/errors/UnknownRuntimeMode.ts +8 -0
  531. package/src/server/models/HealthDto.ts +11 -0
  532. package/src/server/models/NodeDto.ts +11 -0
  533. package/src/server/utils/DataConverter.ts +15 -0
  534. package/src/server/utils/LocalFileManager.ts +122 -0
  535. package/src/server/utils/RuntimeConfigurationLoader.ts +19 -0
  536. package/src/server/utils/RuntimeConfigurator.ts +207 -0
  537. package/src/server/utils/ServerOptionsReader.ts +17 -0
  538. package/src/server.ts +16 -0
  539. package/test/_fixtures/core/Implementation.fixture.ts +33 -0
  540. package/test/_fixtures/core/Procedure.fixture.ts +33 -0
  541. package/test/_fixtures/core/Segment.fixture.ts +36 -0
  542. package/test/_fixtures/core/SegmentBuilder.fixture.ts +45 -0
  543. package/test/_fixtures/core/Version.fixture.ts +18 -0
  544. package/test/_fixtures/core/reflection/ReflectionHelper.fixture.ts +56 -0
  545. package/test/_fixtures/runtime/LocalGateway.fixture.ts +24 -0
  546. package/test/_fixtures/runtime/LocalNode.fixture.ts +16 -0
  547. package/test/_fixtures/runtime/LocalRepository.fixture.ts +73 -0
  548. package/test/_fixtures/runtime/NodeBalancer.fixture.ts +19 -0
  549. package/test/_fixtures/runtime/NodeMonitor.fixture.ts +34 -0
  550. package/test/_fixtures/runtime/RemoteNode.fixture.ts +8 -0
  551. package/test/_fixtures/runtime/caching/ImportRewriter.fixture.ts +81 -0
  552. package/test/_fixtures/runtime/caching/RemoteBuilder.fixture.ts +50 -0
  553. package/test/_fixtures/runtime/caching/SourceAppender.fixture.ts +35 -0
  554. package/test/_fixtures/runtime/segments.ts +78 -0
  555. package/test/_fixtures/runtime/serialization/ValueSerializer.fixture.ts +134 -0
  556. package/test/_fixtures/runtime/utils/ModuleAnaliser.fixture.ts +26 -0
  557. package/test/core/Implementation.spec.ts +89 -0
  558. package/test/core/Procedure.spec.ts +108 -0
  559. package/test/core/Segment.spec.ts +74 -0
  560. package/test/core/SegmentBuilder.spec.ts +39 -0
  561. package/test/core/Version.spec.ts +103 -0
  562. package/test/core/errors/ErrorManager.spec.ts +32 -0
  563. package/test/core/reflection/ReflectionHelper.spec.ts +128 -0
  564. package/test/core/utils/FqnBuilder.spec.ts +22 -0
  565. package/test/runtime/LocalGateway.spec.ts +40 -0
  566. package/test/runtime/LocalNode.spec.ts +87 -0
  567. package/test/runtime/LocalRepository.spec.ts +50 -0
  568. package/test/runtime/NodeBalancer.spec.ts +39 -0
  569. package/test/runtime/NodeMonitor.spec.ts +31 -0
  570. package/test/runtime/RemoteNode.spec.ts +43 -0
  571. package/test/runtime/caching/ImportRewriter.spec.ts +68 -0
  572. package/test/runtime/caching/RemoteBuilder.spec.ts +21 -0
  573. package/test/runtime/caching/SourceAppender.spec.ts +31 -0
  574. package/test/runtime/serialization/ValueSerializer.spec.ts +203 -0
  575. package/test/runtime/utils/ModuleAnalyser.spec.ts +54 -0
  576. package/test/runtime/utils/UrlRewriter.spec.ts +57 -0
  577. package/tsconfig.json +23 -0
@@ -0,0 +1,4 @@
1
+ declare type FlexObject = {
2
+ [key: string]: unknown;
3
+ };
4
+ export default FlexObject;
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,3 @@
1
+ import FlexObject from './FlexObject.js';
2
+ declare type Module = FlexObject;
3
+ export default Module;
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,6 @@
1
+ declare type SegmentImplementation = {
2
+ access: string;
3
+ version: string;
4
+ executable: Function;
5
+ };
6
+ export default SegmentImplementation;
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,5 @@
1
+ import SegmentProcedure from './SegmentProcedure.js';
2
+ declare type SegmentModule = {
3
+ procedures: SegmentProcedure[];
4
+ };
5
+ export default SegmentModule;
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,7 @@
1
+ import SegmentImplementation from './SegmentImplementation.js';
2
+ declare type SegmentProcedure = {
3
+ module: string;
4
+ name: string;
5
+ implementations: SegmentImplementation[];
6
+ };
7
+ export default SegmentProcedure;
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,3 @@
1
+ export default class FqnBuilder {
2
+ static build(module: string, name: string): string;
3
+ }
@@ -0,0 +1,5 @@
1
+ export default class FqnBuilder {
2
+ static build(module, name) {
3
+ return module !== '' ? `${module}/${name}` : name;
4
+ }
5
+ }
@@ -0,0 +1,2 @@
1
+ export * from './runtime/hooks/dependencies.js';
2
+ export * from './runtime/hooks/runtime.js';
package/dist/hooks.js ADDED
@@ -0,0 +1,2 @@
1
+ export * from './runtime/hooks/dependencies.js';
2
+ export * from './runtime/hooks/runtime.js';
package/dist/lib.d.ts ADDED
@@ -0,0 +1,4 @@
1
+ export { default as HealthCheck } from './runtime/interfaces/HealthCheck.js';
2
+ export * from './client.js';
3
+ export * from './server.js';
4
+ export * from './hooks.js';
package/dist/lib.js ADDED
@@ -0,0 +1,3 @@
1
+ export * from './client.js';
2
+ export * from './server.js';
3
+ export * from './hooks.js';
@@ -0,0 +1,10 @@
1
+ import Version from '../core/Version.js';
2
+ import ProcedureContainer from './interfaces/ProcedureContainer.js';
3
+ import Node from './Node.js';
4
+ import Runtime from './Runtime.js';
5
+ export default abstract class Gateway extends Runtime implements ProcedureContainer {
6
+ abstract getProcedureNames(): string[];
7
+ abstract hasProcedure(name: string): boolean;
8
+ abstract addNode(node: Node): Promise<void>;
9
+ abstract run(name: string, version: Version, args: Map<string, unknown>): Promise<unknown>;
10
+ }
@@ -0,0 +1,3 @@
1
+ import Runtime from './Runtime.js';
2
+ export default class Gateway extends Runtime {
3
+ }
@@ -0,0 +1,12 @@
1
+ import Version from '../core/Version.js';
2
+ import Gateway from './Gateway.js';
3
+ import Node from './Node.js';
4
+ export default class LocalGateway extends Gateway {
5
+ #private;
6
+ get nodes(): Node[];
7
+ getProcedureNames(): string[];
8
+ hasProcedure(fqn: string): boolean;
9
+ addNode(node: Node): Promise<void>;
10
+ removeNode(node: Node): void;
11
+ run(fqn: string, version: Version, args: Map<string, unknown>): Promise<unknown>;
12
+ }
@@ -0,0 +1,54 @@
1
+ import ProcedureNotFound from '../core/errors/ProcedureNotFound.js';
2
+ import Gateway from './Gateway.js';
3
+ import NodeBalancer from './NodeBalancer.js';
4
+ export default class LocalGateway extends Gateway {
5
+ #nodes = new Set();
6
+ #balancers = new Map();
7
+ get nodes() {
8
+ return [...this.#nodes.values()];
9
+ }
10
+ getProcedureNames() {
11
+ const procedureNames = this.nodes.map(node => node.getProcedureNames());
12
+ const uniqueNames = new Set(procedureNames.flat());
13
+ return [...uniqueNames.values()];
14
+ }
15
+ hasProcedure(fqn) {
16
+ const procedureNames = this.getProcedureNames();
17
+ return procedureNames.includes(fqn);
18
+ }
19
+ async addNode(node) {
20
+ this.#nodes.add(node);
21
+ for (const name of node.getProcedureNames()) {
22
+ const balancer = this.#getOrCreateBalancer(name);
23
+ balancer.addNode(node);
24
+ }
25
+ }
26
+ removeNode(node) {
27
+ this.#nodes.delete(node);
28
+ for (const name of node.getProcedureNames()) {
29
+ const balancer = this.#getBalancer(name);
30
+ if (balancer === undefined) {
31
+ continue;
32
+ }
33
+ balancer.removeNode(node);
34
+ }
35
+ }
36
+ #getBalancer(fqn) {
37
+ return this.#balancers.get(fqn);
38
+ }
39
+ #getOrCreateBalancer(fqn) {
40
+ let balancer = this.#getBalancer(fqn);
41
+ if (balancer === undefined) {
42
+ balancer = new NodeBalancer();
43
+ this.#balancers.set(fqn, balancer);
44
+ }
45
+ return balancer;
46
+ }
47
+ async run(fqn, version, args) {
48
+ const balancer = this.#getBalancer(fqn);
49
+ if (balancer === undefined) {
50
+ throw new ProcedureNotFound(fqn);
51
+ }
52
+ return balancer.run(fqn, version, args);
53
+ }
54
+ }
@@ -0,0 +1,18 @@
1
+ import Segment from '../core/Segment.js';
2
+ import Version from '../core/Version.js';
3
+ import Module from '../core/types/Module.js';
4
+ import Gateway from './Gateway.js';
5
+ import Node from './Node.js';
6
+ import Repository from './Repository.js';
7
+ export default class LocalNode extends Node {
8
+ #private;
9
+ getProcedureNames(): string[];
10
+ loadSegment(name: string): Promise<void>;
11
+ addSegment(segment: Segment): void;
12
+ getSegment(id: string): Segment | undefined;
13
+ hasProcedure(fqn: string): boolean;
14
+ setGateway(gateway: Gateway): Promise<void>;
15
+ setRepository(repository: Repository, segmentNames: string[]): Promise<void>;
16
+ import(url: string, base?: string): Promise<Module>;
17
+ run(fqn: string, version: Version, args: Map<string, unknown>): Promise<unknown>;
18
+ }
@@ -0,0 +1,75 @@
1
+ import ProcedureNotFound from '../core/errors/ProcedureNotFound.js';
2
+ import SegmentBuilder from '../core/SegmentBuilder.js';
3
+ import RepositoryNotAvailable from './errors/RepositoryNotAvaiable.js';
4
+ import LocalGateway from './LocalGateway.js';
5
+ import Node from './Node.js';
6
+ import ModuleLoader from './utils/ModuleLoader.js';
7
+ import UrlRewriter from './utils/UrlRewriter.js';
8
+ export default class LocalNode extends Node {
9
+ #segments = new Map();
10
+ #gateway;
11
+ #repository;
12
+ #clientId = '';
13
+ getProcedureNames() {
14
+ const names = new Set();
15
+ for (const segment of this.#segments.values()) {
16
+ const procedures = segment.getPublicProcedures();
17
+ procedures.forEach(procedure => names.add(procedure.fqn));
18
+ }
19
+ return [...names.values()];
20
+ }
21
+ async loadSegment(name) {
22
+ const segmentFile = `${name}.segment.local.js`;
23
+ const module = await this.import(segmentFile);
24
+ const segment = SegmentBuilder.build(name, module);
25
+ this.addSegment(segment);
26
+ }
27
+ addSegment(segment) {
28
+ this.#segments.set(segment.id, segment);
29
+ }
30
+ getSegment(id) {
31
+ return this.#segments.get(id);
32
+ }
33
+ hasProcedure(fqn) {
34
+ const procedureNames = this.getProcedureNames();
35
+ return procedureNames.includes(fqn);
36
+ }
37
+ #getProcedureSegment(fqn) {
38
+ for (const segment of this.#segments.values()) {
39
+ if (segment.hasProcedure(fqn)) {
40
+ return segment;
41
+ }
42
+ }
43
+ return undefined;
44
+ }
45
+ async setGateway(gateway) {
46
+ if (gateway instanceof LocalGateway || this.url !== undefined) {
47
+ await gateway.addNode(this);
48
+ }
49
+ this.#gateway = gateway;
50
+ }
51
+ async setRepository(repository, segmentNames) {
52
+ this.#clientId = await repository.registerClient(segmentNames);
53
+ await repository.setRuntime(this);
54
+ const moduleLocation = await repository.getModuleLocation(this.#clientId);
55
+ ModuleLoader.setBaseUrl(moduleLocation);
56
+ this.#repository = repository;
57
+ }
58
+ async import(url, base) {
59
+ if (this.#repository === undefined) {
60
+ throw new RepositoryNotAvailable();
61
+ }
62
+ if (base !== undefined) {
63
+ url = UrlRewriter.addBase(url, base);
64
+ }
65
+ return this.#repository.importModule(this.#clientId, url);
66
+ }
67
+ async run(fqn, version, args) {
68
+ const segment = this.#getProcedureSegment(fqn);
69
+ const runner = segment ?? this.#gateway;
70
+ if (runner === undefined) {
71
+ throw new ProcedureNotFound(fqn);
72
+ }
73
+ return runner.run(fqn, version, args);
74
+ }
75
+ }
@@ -0,0 +1,17 @@
1
+ import Module from '../core/types/Module.js';
2
+ import FileManager from './interfaces/FileManager.js';
3
+ import LocalNode from './LocalNode.js';
4
+ import File from './models/File.js';
5
+ import Repository from './Repository.js';
6
+ export default class LocalRepository extends Repository {
7
+ #private;
8
+ constructor(fileManager: FileManager, url?: string);
9
+ loadSegment(name: string): Promise<void>;
10
+ registerSegment(name: string, files: string[]): Promise<void>;
11
+ registerClient(segmentFilenames: string[]): Promise<string>;
12
+ setRuntime(runtime: LocalNode): Promise<void>;
13
+ loadAsset(filename: string): Promise<File>;
14
+ getModuleLocation(clientId: string): Promise<string>;
15
+ loadModule(clientId: string, filename: string): Promise<File>;
16
+ importModule(clientId: string, filename: string): Promise<Module>;
17
+ }
@@ -0,0 +1,86 @@
1
+ import File from './models/File.js';
2
+ import Repository from './Repository.js';
3
+ import ModuleLoader from './utils/ModuleLoader.js';
4
+ import ClientNotFound from './errors/ClientNotFound.js';
5
+ import InvalidClientId from './errors/InvalidClientId.js';
6
+ import InvalidSegmentFile from './errors/InvalidSegmentFile.js';
7
+ import { setRuntime } from '../hooks.js';
8
+ let lastClientId = 0;
9
+ const CLIENT_ID_PREFIX = 'CLIENT_';
10
+ export default class LocalRepository extends Repository {
11
+ #fileManager;
12
+ #segments = new Map();
13
+ #clients = new Map();
14
+ constructor(fileManager, url) {
15
+ super(url);
16
+ this.#fileManager = fileManager;
17
+ }
18
+ async loadSegment(name) {
19
+ const filename = `./${name}.segment.repository.js`;
20
+ const location = this.#fileManager.getAbsoluteLocation(filename);
21
+ const module = await ModuleLoader.load(location);
22
+ const files = module.files;
23
+ if (files === undefined) {
24
+ throw new InvalidSegmentFile(location);
25
+ }
26
+ this.registerSegment(name, files);
27
+ }
28
+ async registerSegment(name, files) {
29
+ files.forEach((file) => this.#segments.set(file, name));
30
+ }
31
+ async registerClient(segmentFilenames) {
32
+ const clientId = `${CLIENT_ID_PREFIX}${lastClientId++}`;
33
+ this.#clients.set(clientId, segmentFilenames);
34
+ return clientId;
35
+ }
36
+ async setRuntime(runtime) {
37
+ setRuntime(runtime);
38
+ }
39
+ async loadAsset(filename) {
40
+ return this.#fileManager.load(filename);
41
+ }
42
+ async getModuleLocation(clientId) {
43
+ return this.#fileManager.getRootLocation();
44
+ }
45
+ async loadModule(clientId, filename) {
46
+ this.#validateClientId(clientId);
47
+ const segmentFilename = this.#segments.get(filename);
48
+ if (segmentFilename === undefined) {
49
+ return this.#getNodeModule(filename, false);
50
+ }
51
+ return this.#hasClientSegmentFile(clientId, segmentFilename)
52
+ ? this.#getNodeModule(filename, true)
53
+ : this.#getRemoteModule(filename);
54
+ }
55
+ async importModule(clientId, filename) {
56
+ const location = this.#fileManager.getAbsoluteLocation(filename);
57
+ return ModuleLoader.import(location);
58
+ }
59
+ #validateClientId(clientId) {
60
+ if (clientId.startsWith(CLIENT_ID_PREFIX) === false) {
61
+ throw new InvalidClientId(clientId);
62
+ }
63
+ if (this.#clients.has(clientId) === false) {
64
+ throw new ClientNotFound(clientId);
65
+ }
66
+ }
67
+ #hasClientSegmentFile(clientId, segmentFilename) {
68
+ const clientSegmentFiles = this.#clients.get(clientId);
69
+ if (clientSegmentFiles === undefined) {
70
+ throw new ClientNotFound(clientId);
71
+ }
72
+ return clientSegmentFiles.some(clientSegmentFilename => segmentFilename.endsWith(clientSegmentFilename));
73
+ }
74
+ async #getNodeModule(filename, isSegmented) {
75
+ if (isSegmented) {
76
+ filename = filename.replace('.js', '.local.js');
77
+ }
78
+ const file = await this.loadAsset(filename);
79
+ const code = file.content.toString();
80
+ return new File(filename, 'application/javascript', code);
81
+ }
82
+ async #getRemoteModule(filename) {
83
+ const remoteFilename = filename.replace('.js', '.remote.js');
84
+ return this.loadAsset(remoteFilename);
85
+ }
86
+ }
@@ -0,0 +1,8 @@
1
+ import Version from '../core/Version.js';
2
+ import ProcedureContainer from './interfaces/ProcedureContainer.js';
3
+ import Runtime from './Runtime.js';
4
+ export default abstract class Node extends Runtime implements ProcedureContainer {
5
+ abstract getProcedureNames(): string[];
6
+ abstract hasProcedure(name: string): boolean;
7
+ abstract run(name: string, version: Version, args: Map<string, unknown>): Promise<unknown>;
8
+ }
@@ -0,0 +1,3 @@
1
+ import Runtime from './Runtime.js';
2
+ export default class Node extends Runtime {
3
+ }
@@ -0,0 +1,10 @@
1
+ import Runner from '../core/interfaces/Runner.js';
2
+ import Version from '../core/Version.js';
3
+ import Node from './Node.js';
4
+ export default class NodeBalancer implements Runner {
5
+ #private;
6
+ addNode(node: Node): void;
7
+ removeNode(node: Node): void;
8
+ getNextNode(): Node | undefined;
9
+ run(fqn: string, version: Version, args: Map<string, unknown>): Promise<unknown>;
10
+ }
@@ -0,0 +1,34 @@
1
+ import NoNodeAvailable from './errors/NoNodeAvailable.js';
2
+ export default class NodeBalancer {
3
+ #nodes = [];
4
+ #currentIndex = 0;
5
+ addNode(node) {
6
+ if (this.#nodes.includes(node)) {
7
+ return;
8
+ }
9
+ this.#nodes.push(node);
10
+ }
11
+ removeNode(node) {
12
+ const index = this.#nodes.indexOf(node);
13
+ if (index === -1) {
14
+ return;
15
+ }
16
+ this.#nodes.splice(index, 1);
17
+ }
18
+ getNextNode() {
19
+ if (this.#nodes.length === 0) {
20
+ return;
21
+ }
22
+ if (this.#currentIndex >= this.#nodes.length) {
23
+ this.#currentIndex = 0;
24
+ }
25
+ return this.#nodes[this.#currentIndex++];
26
+ }
27
+ async run(fqn, version, args) {
28
+ const node = this.getNextNode();
29
+ if (node === undefined) {
30
+ throw new NoNodeAvailable(fqn);
31
+ }
32
+ return node.run(fqn, version, args);
33
+ }
34
+ }
@@ -0,0 +1,7 @@
1
+ import LocalGateway from './LocalGateway.js';
2
+ export default class NodeMonitor {
3
+ #private;
4
+ constructor(gateway: LocalGateway, frequency?: number);
5
+ start(): void;
6
+ stop(): void;
7
+ }
@@ -0,0 +1,38 @@
1
+ const DEFAULT_FREQUENCY = 5000;
2
+ export default class NodeMonitor {
3
+ #gateway;
4
+ #frequency;
5
+ #interval = null;
6
+ constructor(gateway, frequency = DEFAULT_FREQUENCY) {
7
+ this.#gateway = gateway;
8
+ this.#frequency = frequency;
9
+ }
10
+ start() {
11
+ this.#interval = setInterval(async () => await this.#monitor(), this.#frequency);
12
+ }
13
+ stop() {
14
+ if (this.#interval === null) {
15
+ return;
16
+ }
17
+ clearInterval(this.#interval);
18
+ }
19
+ async #monitor() {
20
+ const nodes = this.#gateway.nodes;
21
+ const promises = nodes.map(async (node) => await this.#monitorNode(node));
22
+ await Promise.all(promises);
23
+ }
24
+ async #monitorNode(node) {
25
+ const available = await this.#checkNodeAvailable(node);
26
+ if (available === false) {
27
+ this.#gateway.removeNode(node);
28
+ }
29
+ }
30
+ async #checkNodeAvailable(node) {
31
+ try {
32
+ return await node.isHealthy();
33
+ }
34
+ catch (error) {
35
+ return false;
36
+ }
37
+ }
38
+ }
@@ -0,0 +1,19 @@
1
+ import Version from '../core/Version.js';
2
+ import ProcedureContainer from './interfaces/ProcedureContainer.js';
3
+ import Gateway from './Gateway.js';
4
+ import File from './models/File.js';
5
+ import Node from './Node.js';
6
+ import Repository from './Repository.js';
7
+ import Runtime from './Runtime.js';
8
+ export default class Proxy extends Runtime implements ProcedureContainer {
9
+ #private;
10
+ constructor(repository: Repository, runner: Gateway | Node, url?: string);
11
+ get repository(): Repository;
12
+ get runner(): Node | Gateway;
13
+ getProcedureNames(): string[];
14
+ hasProcedure(fqn: string): boolean;
15
+ loadAsset(filename: string): Promise<File>;
16
+ registerClient(segmentFiles: string[]): Promise<string>;
17
+ loadModule(clientId: string, filename: string): Promise<File>;
18
+ run(name: string, version: Version, args: Map<string, unknown>): Promise<unknown>;
19
+ }
@@ -0,0 +1,31 @@
1
+ import Runtime from './Runtime.js';
2
+ export default class Proxy extends Runtime {
3
+ #repository;
4
+ #runner;
5
+ constructor(repository, runner, url) {
6
+ super(url);
7
+ this.#repository = repository;
8
+ this.#runner = runner;
9
+ }
10
+ get repository() { return this.#repository; }
11
+ get runner() { return this.#runner; }
12
+ getProcedureNames() {
13
+ return this.#runner.getProcedureNames();
14
+ }
15
+ hasProcedure(fqn) {
16
+ const procedureNames = this.getProcedureNames();
17
+ return procedureNames.includes(fqn);
18
+ }
19
+ async loadAsset(filename) {
20
+ return this.#repository.loadAsset(filename);
21
+ }
22
+ async registerClient(segmentFiles) {
23
+ return this.#repository.registerClient(segmentFiles);
24
+ }
25
+ async loadModule(clientId, filename) {
26
+ return this.#repository.loadModule(clientId, filename);
27
+ }
28
+ async run(name, version, args) {
29
+ return this.#runner.run(name, version, args);
30
+ }
31
+ }
@@ -0,0 +1,15 @@
1
+ import Module from '../core/types/Module.js';
2
+ import Version from '../core/Version.js';
3
+ import File from './models/File.js';
4
+ import Node from './Node.js';
5
+ export default class Remote {
6
+ #private;
7
+ constructor(url: string, useSerializer: boolean);
8
+ registerClient(segmentFiles: string[]): Promise<string>;
9
+ loadFile(filename: string): Promise<File>;
10
+ importFile(filename: string): Promise<Module>;
11
+ isHealthy(): Promise<boolean>;
12
+ getHealth(): Promise<Map<string, boolean>>;
13
+ addNode(node: Node): Promise<void>;
14
+ run(fqn: string, version: Version, args: Map<string, unknown>): Promise<unknown>;
15
+ }
@@ -0,0 +1,100 @@
1
+ import File from './models/File.js';
2
+ import ValueSerializer from './serialization/ValueSerializer.js';
3
+ import ModuleLoader from './utils/ModuleLoader.js';
4
+ export default class Remote {
5
+ #url;
6
+ #useSerializer;
7
+ constructor(url, useSerializer) {
8
+ this.#url = url;
9
+ this.#useSerializer = useSerializer;
10
+ }
11
+ async registerClient(segmentFiles) {
12
+ const url = `${this.#url}/modules`;
13
+ const options = {
14
+ method: 'POST',
15
+ headers: { 'Content-Type': 'application/json' },
16
+ body: JSON.stringify(segmentFiles)
17
+ };
18
+ const response = await this.#callRemote(url, options, 200);
19
+ const clientId = await response.text();
20
+ return clientId;
21
+ }
22
+ async loadFile(filename) {
23
+ const url = `${this.#url}/${filename}`;
24
+ const options = { method: 'GET' };
25
+ const response = await this.#callRemote(url, options, 200);
26
+ const type = response.headers.get('Content-Type') || 'application/octet-stream';
27
+ const content = await response.text();
28
+ return new File(filename, type, content);
29
+ }
30
+ async importFile(filename) {
31
+ const url = `${this.#url}/${filename}`;
32
+ return ModuleLoader.load(url);
33
+ }
34
+ async isHealthy() {
35
+ const url = `${this.#url}/health/status`;
36
+ const options = { method: 'GET' };
37
+ const response = await this.#callRemote(url, options, 200);
38
+ const healthy = await response.text();
39
+ return Boolean(healthy);
40
+ }
41
+ async getHealth() {
42
+ const url = `${this.#url}/health`;
43
+ const options = { method: 'GET' };
44
+ const response = await this.#callRemote(url, options, 200);
45
+ const health = await response.json();
46
+ return new Map(Object.entries(health));
47
+ }
48
+ async addNode(node) {
49
+ const url = `${this.#url}/nodes`;
50
+ const body = {
51
+ url: node.url,
52
+ procedureNames: node.getProcedureNames()
53
+ };
54
+ const options = {
55
+ method: 'POST',
56
+ headers: { 'Content-Type': 'application/json' },
57
+ body: JSON.stringify(body)
58
+ };
59
+ await this.#callRemote(url, options, 201);
60
+ }
61
+ async run(fqn, version, args) {
62
+ const versionString = version.toString();
63
+ const argsObject = Object.fromEntries(args);
64
+ const url = `${this.#url}/rpc/${fqn}?version=${versionString}&serialize=true`;
65
+ const options = {
66
+ method: 'POST',
67
+ headers: { 'Content-Type': 'application/json' },
68
+ body: this.#createRequestBody(argsObject, this.#useSerializer)
69
+ };
70
+ const response = await this.#callRemote(url, options, 200);
71
+ return this.#createResponseResult(response, this.#useSerializer);
72
+ }
73
+ async #callRemote(url, options, expectedStatus) {
74
+ const response = await fetch(url, options);
75
+ if (response.status !== expectedStatus) {
76
+ const error = await this.#createResponseResult(response, true);
77
+ throw error;
78
+ }
79
+ return response;
80
+ }
81
+ #createRequestBody(body, serialize) {
82
+ const data = serialize
83
+ ? ValueSerializer.serialize(body)
84
+ : body;
85
+ return JSON.stringify(data);
86
+ }
87
+ async #createResponseResult(response, serialize) {
88
+ const result = await this.#getResponseResult(response);
89
+ return serialize
90
+ ? ValueSerializer.deserialize(result)
91
+ : result;
92
+ }
93
+ async #getResponseResult(response) {
94
+ const contentType = response.headers.get('Content-Type');
95
+ if (contentType !== null && contentType.includes('json')) {
96
+ return response.json();
97
+ }
98
+ return response.text();
99
+ }
100
+ }
@@ -0,0 +1,11 @@
1
+ import Version from '../core/Version.js';
2
+ import Gateway from './Gateway.js';
3
+ import Node from './Node.js';
4
+ export default class RemoteGateway extends Gateway {
5
+ #private;
6
+ constructor(url: string);
7
+ getProcedureNames(): string[];
8
+ hasProcedure(name: string): boolean;
9
+ addNode(node: Node): Promise<void>;
10
+ run(fqn: string, version: Version, args: Map<string, unknown>): Promise<unknown>;
11
+ }