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,22 @@
1
+ import NotImplemented from '../core/errors/NotImplemented.js';
2
+ import Gateway from './Gateway.js';
3
+ import Remote from './Remote.js';
4
+ export default class RemoteGateway extends Gateway {
5
+ #remote;
6
+ constructor(url) {
7
+ super(url);
8
+ this.#remote = new Remote(url, true);
9
+ }
10
+ getProcedureNames() {
11
+ throw new NotImplemented();
12
+ }
13
+ hasProcedure(name) {
14
+ throw new NotImplemented();
15
+ }
16
+ async addNode(node) {
17
+ return this.#remote.addNode(node);
18
+ }
19
+ async run(fqn, version, args) {
20
+ return this.#remote.run(fqn, version, args);
21
+ }
22
+ }
@@ -0,0 +1,12 @@
1
+ import Version from '../core/Version.js';
2
+ import Node from './Node.js';
3
+ export default class RemoteNode extends Node {
4
+ #private;
5
+ constructor(url: string, procedureNames: string[]);
6
+ getProcedureNames(): string[];
7
+ registerProcedures(procedureNames: string[]): void;
8
+ hasProcedure(name: string): boolean;
9
+ isHealthy(): Promise<boolean>;
10
+ getHealth(): Promise<Map<string, boolean>>;
11
+ run(fqn: string, version: Version, args: Map<string, unknown>): Promise<unknown>;
12
+ }
@@ -0,0 +1,29 @@
1
+ import Node from './Node.js';
2
+ import Remote from './Remote.js';
3
+ export default class RemoteNode extends Node {
4
+ #remote;
5
+ #procedureNames = new Set();
6
+ constructor(url, procedureNames) {
7
+ super(url);
8
+ this.#remote = new Remote(url, false);
9
+ this.registerProcedures(procedureNames);
10
+ }
11
+ getProcedureNames() {
12
+ return [...this.#procedureNames.values()];
13
+ }
14
+ registerProcedures(procedureNames) {
15
+ procedureNames.forEach(procedureName => this.#procedureNames.add(procedureName));
16
+ }
17
+ hasProcedure(name) {
18
+ return this.#procedureNames.has(name);
19
+ }
20
+ async isHealthy() {
21
+ return this.#remote.isHealthy();
22
+ }
23
+ async getHealth() {
24
+ return this.#remote.getHealth();
25
+ }
26
+ async run(fqn, version, args) {
27
+ return this.#remote.run(fqn, version, args);
28
+ }
29
+ }
@@ -0,0 +1,4 @@
1
+ import RemoteNode from './RemoteNode.js';
2
+ export default class RemoteNodeBuilder {
3
+ static build(url: string, procedureNames: string[]): RemoteNode;
4
+ }
@@ -0,0 +1,10 @@
1
+ import RemoteNode from './RemoteNode.js';
2
+ export default class RemoteNodeBuilder {
3
+ static build(url, procedureNames) {
4
+ const node = new RemoteNode(url);
5
+ for (const name of procedureNames) {
6
+ node.registerProcedure(name);
7
+ }
8
+ return node;
9
+ }
10
+ }
@@ -0,0 +1,14 @@
1
+ import Module from '../core/types/Module.js';
2
+ import File from './models/File.js';
3
+ import Repository from './Repository.js';
4
+ import Runtime from './Runtime.js';
5
+ export default class RemoteRepository extends Repository {
6
+ #private;
7
+ constructor(url: string);
8
+ registerClient(segmentFiles: string[]): Promise<string>;
9
+ setRuntime(runtime: Runtime): Promise<void>;
10
+ loadAsset(filename: string): Promise<File>;
11
+ getModuleLocation(clientId: string): Promise<string>;
12
+ loadModule(clientId: string, filename: string): Promise<File>;
13
+ importModule(clientId: string, filename: string): Promise<Module>;
14
+ }
@@ -0,0 +1,34 @@
1
+ import InvalidJitarHooks from './errors/InvalidJitarHooks.js';
2
+ import Remote from './Remote.js';
3
+ import Repository from './Repository.js';
4
+ import ModuleLoader from './utils/ModuleLoader.js';
5
+ export default class RemoteRepository extends Repository {
6
+ #remote;
7
+ constructor(url) {
8
+ super(url);
9
+ this.#remote = new Remote(url, true);
10
+ }
11
+ async registerClient(segmentFiles) {
12
+ return this.#remote.registerClient(segmentFiles);
13
+ }
14
+ async setRuntime(runtime) {
15
+ const jitar = await this.#remote.importFile('jitar/hooks.js');
16
+ if (jitar?.setRuntime === undefined || jitar?.setDependencyLoader === undefined) {
17
+ throw new InvalidJitarHooks();
18
+ }
19
+ jitar.setRuntime(runtime);
20
+ jitar.setDependencyLoader(ModuleLoader.import);
21
+ }
22
+ async loadAsset(filename) {
23
+ return this.#remote.loadFile(filename);
24
+ }
25
+ async getModuleLocation(clientId) {
26
+ return `${this.url}/modules/${clientId}`;
27
+ }
28
+ async loadModule(clientId, filename) {
29
+ return this.#remote.loadFile(`modules/${clientId}/${filename}`);
30
+ }
31
+ async importModule(clientId, filename) {
32
+ return this.#remote.importFile(`modules/${clientId}/${filename}`);
33
+ }
34
+ }
@@ -0,0 +1,11 @@
1
+ import Module from '../core/types/Module.js';
2
+ import File from './models/File.js';
3
+ import Runtime from './Runtime.js';
4
+ export default abstract class Repository extends Runtime {
5
+ abstract registerClient(segmentFiles: string[]): Promise<string>;
6
+ abstract setRuntime(runtime: Runtime): Promise<void>;
7
+ abstract loadAsset(filename: string): Promise<File>;
8
+ abstract getModuleLocation(clientId: string): Promise<string>;
9
+ abstract loadModule(clientId: string, filename: string): Promise<File>;
10
+ abstract importModule(clientId: string, filename: string): Promise<Module>;
11
+ }
@@ -0,0 +1,3 @@
1
+ import Runtime from './Runtime.js';
2
+ export default class Repository extends Runtime {
3
+ }
@@ -0,0 +1,9 @@
1
+ import HealthCheck from './interfaces/HealthCheck.js';
2
+ export default abstract class Runtime {
3
+ #private;
4
+ constructor(url?: string);
5
+ get url(): string | undefined;
6
+ addHealthCheck(name: string, healthCheck: HealthCheck): void;
7
+ isHealthy(): Promise<boolean>;
8
+ getHealth(): Promise<Map<string, boolean>>;
9
+ }
@@ -0,0 +1,27 @@
1
+ export default class Runtime {
2
+ #url;
3
+ #healthChecks = new Map();
4
+ constructor(url) {
5
+ this.#url = url;
6
+ }
7
+ get url() { return this.#url; }
8
+ addHealthCheck(name, healthCheck) {
9
+ this.#healthChecks.set(name, healthCheck);
10
+ }
11
+ async isHealthy() {
12
+ for (const healthCheck of this.#healthChecks.values()) {
13
+ if (await healthCheck.isHealthy() === false) {
14
+ return false;
15
+ }
16
+ }
17
+ return true;
18
+ }
19
+ async getHealth() {
20
+ const health = new Map();
21
+ for (const [name, healthCheck] of this.#healthChecks) {
22
+ const healthy = await healthCheck.isHealthy();
23
+ health.set(name, healthy);
24
+ }
25
+ return health;
26
+ }
27
+ }
@@ -0,0 +1,6 @@
1
+ import FileManager from '../interfaces/FileManager.js';
2
+ export default class CacheBuilder {
3
+ #private;
4
+ constructor(sourceManager: FileManager, cacheManager: FileManager);
5
+ build(...filenames: string[]): Promise<void>;
6
+ }
@@ -0,0 +1,150 @@
1
+ import ModuleLoader from '../utils/ModuleLoader.js';
2
+ import ModuleAnalyser from '../utils/ModuleAnalyser.js';
3
+ import ApplicationModule from './models/ApplicationModule.js';
4
+ import SourceAppender from './SourceAppender.js';
5
+ import ImportRewriter from './ImportRewriter.js';
6
+ import RemoteBuilder from './RemoteBuilder.js';
7
+ import SegmentModule from './models/SegmentModule.js';
8
+ import FunctionFilenameNotFound from './errors/FunctionFilenameNotFound.js';
9
+ import ModuleAppender from './ModuleAppender.js';
10
+ const IGNORED_SOURCE_FILES = ['.min.js', '.segment.js'];
11
+ export default class CacheBuilder {
12
+ #sourceManager;
13
+ #cacheManager;
14
+ constructor(sourceManager, cacheManager) {
15
+ this.#sourceManager = sourceManager;
16
+ this.#cacheManager = cacheManager;
17
+ }
18
+ async build(...filenames) {
19
+ const segmentFiles = this.#filterSegmentFiles(filenames);
20
+ const applicationFiles = this.#filterApplicationFiles(filenames);
21
+ const segmentModules = await this.#createSegmentModules(segmentFiles);
22
+ const segmentedFunctions = this.#extractSegmentedFunctions(segmentModules);
23
+ const applicationModules = await this.#createApplicationModules(applicationFiles);
24
+ const cachableApplicationModules = this.#filterCachableApplicationModules(applicationModules, segmentedFunctions);
25
+ await this.#buildSegmentCache(segmentModules, cachableApplicationModules);
26
+ await this.#buildApplicationCache(cachableApplicationModules);
27
+ }
28
+ #filterSegmentFiles(fileNames) {
29
+ return fileNames.filter(filename => filename.endsWith('.segment.js'));
30
+ }
31
+ #filterApplicationFiles(fileNames) {
32
+ return fileNames.filter(filename => !this.#mustIgnoreFile(filename));
33
+ }
34
+ #mustIgnoreFile(filename) {
35
+ return IGNORED_SOURCE_FILES.some((ignored) => filename.endsWith(ignored));
36
+ }
37
+ async #createSegmentModules(filenames) {
38
+ const promises = filenames.map(async (filename) => this.#createSegmentModule(filename));
39
+ return Promise.all(promises).then(results => results);
40
+ }
41
+ async #createSegmentModule(filename) {
42
+ const relativeLocation = this.#sourceManager.getRelativeLocation(filename);
43
+ const module = await this.#loadModule(filename);
44
+ if (module === undefined) {
45
+ return new SegmentModule(relativeLocation, new Map());
46
+ }
47
+ const functions = ModuleAnalyser.filterFunctions(module);
48
+ return new SegmentModule(relativeLocation, functions);
49
+ }
50
+ #extractSegmentedFunctions(segmentModules) {
51
+ const functions = new Set();
52
+ for (const segmentModule of segmentModules) {
53
+ const moduleFunctions = [...segmentModule.functions.values()];
54
+ moduleFunctions.forEach(moduleFunction => functions.add(moduleFunction));
55
+ }
56
+ return functions;
57
+ }
58
+ async #createApplicationModules(filenames) {
59
+ const promises = filenames.map(async (filename) => this.#createApplicationModule(filename));
60
+ return Promise.all(promises).then(results => results);
61
+ }
62
+ async #createApplicationModule(filename) {
63
+ const module = await this.#loadModule(filename);
64
+ const relativeLocation = this.#sourceManager.getRelativeLocation(filename);
65
+ if (module === undefined) {
66
+ return new ApplicationModule(relativeLocation, new Map(), new Map());
67
+ }
68
+ const classes = ModuleAnalyser.filterClasses(module);
69
+ const functions = ModuleAnalyser.filterFunctions(module);
70
+ return new ApplicationModule(relativeLocation, classes, functions);
71
+ }
72
+ #filterCachableApplicationModules(applicationModules, segmentFunctions) {
73
+ return applicationModules.filter(module => module.hasClasses || this.#hasSegmentedFunctions(module, segmentFunctions));
74
+ }
75
+ #hasSegmentedFunctions(applicationModule, segmentFunctions) {
76
+ const applicationFunctions = [...applicationModule.functions.values()];
77
+ return applicationFunctions.some(applicationFunction => segmentFunctions.has(applicationFunction));
78
+ }
79
+ async #loadModule(filename) {
80
+ try {
81
+ return await ModuleLoader.load(filename);
82
+ }
83
+ catch (error) {
84
+ return undefined;
85
+ }
86
+ }
87
+ async #buildSegmentCache(segmentModules, applicationModules) {
88
+ const promises = segmentModules.map(async (module) => this.#buildSegmentModuleCache(module, applicationModules));
89
+ return Promise.all(promises);
90
+ }
91
+ async #buildSegmentModuleCache(module, applicationModules) {
92
+ const filenames = this.#extractSegmentFilenames(module, applicationModules);
93
+ const segmentCode = `export const files = ${JSON.stringify(filenames)};`;
94
+ const segmentLocation = module.filename.replace('.js', '.files.js');
95
+ return this.#cacheManager.store(segmentLocation, segmentCode);
96
+ }
97
+ #extractSegmentFilenames(module, applicationModules) {
98
+ const filenames = [];
99
+ for (const segmentFunction of module.functions.values()) {
100
+ const filename = this.#findFunctionFilename(segmentFunction, applicationModules);
101
+ if (filename === undefined) {
102
+ throw new FunctionFilenameNotFound(segmentFunction.name, module.filename);
103
+ }
104
+ filenames.push(filename);
105
+ }
106
+ return filenames;
107
+ }
108
+ #findFunctionFilename(segmentFunction, applicationModules) {
109
+ const applicationModule = applicationModules.find(applicationModule => applicationModule.containsFunction(segmentFunction));
110
+ return applicationModule !== undefined
111
+ ? applicationModule.filename
112
+ : undefined;
113
+ }
114
+ async #buildApplicationCache(applicationModules) {
115
+ const promises = applicationModules.map(async (module) => this.#buildApplicationModuleCache(module));
116
+ return Promise.all(promises);
117
+ }
118
+ async #buildApplicationModuleCache(module) {
119
+ const filename = module.filename;
120
+ const sourceLocation = this.#sourceManager.getAbsoluteLocation(filename);
121
+ const relativeLocation = filename;
122
+ const file = await this.#sourceManager.load(sourceLocation);
123
+ const content = file.content.toString();
124
+ const code = await this.#buildForRepository(module, content, relativeLocation);
125
+ if (module.hasFunctions) {
126
+ await this.#buildForNode(code, relativeLocation);
127
+ await this.#buildForRemote(module, relativeLocation);
128
+ }
129
+ }
130
+ async #buildForRepository(module, code, location) {
131
+ if (module.hasFunctions) {
132
+ code = ModuleAppender.append(module, code, location);
133
+ }
134
+ if (module.hasClasses) {
135
+ code = SourceAppender.append(module, code, location);
136
+ }
137
+ await this.#cacheManager.store(location, code);
138
+ return code;
139
+ }
140
+ async #buildForNode(code, location) {
141
+ code = ImportRewriter.rewrite(code);
142
+ const nodeLocation = location.replace('.js', '.node.js');
143
+ return this.#cacheManager.store(nodeLocation, code);
144
+ }
145
+ async #buildForRemote(module, location) {
146
+ const remoteCode = RemoteBuilder.build(module);
147
+ const remoteLocation = location.replace('.js', '.remote.js');
148
+ return this.#cacheManager.store(remoteLocation, remoteCode);
149
+ }
150
+ }
@@ -0,0 +1,6 @@
1
+ import FileManager from '../interfaces/FileManager.js';
2
+ export default class CacheBuilder {
3
+ #private;
4
+ constructor(sourceManager: FileManager, cacheManager: FileManager);
5
+ build(segmentFiles: string[], moduleFiles: string[]): Promise<void>;
6
+ }
@@ -0,0 +1,249 @@
1
+ import * as AccessLevel from '../../core/definitions/AccessLevel.js';
2
+ import Version from '../../core/Version.js';
3
+ import ModuleLoader from '../utils/ModuleLoader.js';
4
+ import ModuleAnalyser from '../utils/ModuleAnalyser.js';
5
+ import SourceAppender from './SourceAppender.js';
6
+ import ImportRewriter from './ImportRewriter.js';
7
+ import RemoteBuilder from './RemoteBuilder.js';
8
+ import ApplicationModule from './models/ApplicationModule.js';
9
+ import Procedure from './models/Procedure.js';
10
+ import Segment from './models/Segment.js';
11
+ import SegmentModule from './models/SegmentModule.js';
12
+ import Implementation from './models/Implementation.js';
13
+ import SegmentFileNotLoaded from './errors/SegmentFileNotLoaded.js';
14
+ import SegmentModuleNotLoaded from './errors/SegmentModuleNotLoaded.js';
15
+ import MissingModuleExport from './errors/MissingModuleExport.js';
16
+ import InvalidSegmentFilename from './errors/InvalidSegmentFilename.js';
17
+ const IGNORED_SOURCE_FILES = ['.min.js'];
18
+ const DEFAULT_ACCESS_LEVEL = AccessLevel.PRIVATE;
19
+ const DEFAULT_VERSION_NUMBER = Version.DEFAULT.toString();
20
+ export default class CacheBuilder {
21
+ #sourceManager;
22
+ #cacheManager;
23
+ constructor(sourceManager, cacheManager) {
24
+ this.#sourceManager = sourceManager;
25
+ this.#cacheManager = cacheManager;
26
+ }
27
+ async build(segmentFiles, moduleFiles) {
28
+ const applicationFiles = this.#filterApplicationFiles(moduleFiles);
29
+ const segments = await this.#createSegments(segmentFiles);
30
+ const applicationModules = await this.#createApplicationModules(applicationFiles);
31
+ await this.#buildSegmentCache(segments);
32
+ await this.#buildApplicationCache(applicationModules);
33
+ }
34
+ #filterApplicationFiles(fileNames) {
35
+ return fileNames.filter(filename => this.#mustIgnoreFile(filename) === false);
36
+ }
37
+ #mustIgnoreFile(filename) {
38
+ return IGNORED_SOURCE_FILES.some((ignored) => filename.endsWith(ignored));
39
+ }
40
+ async #createSegments(filenames) {
41
+ const promises = filenames.map(async (filename) => this.#createSegment(filename));
42
+ return Promise.all(promises).then(segments => segments);
43
+ }
44
+ async #createSegment(filename) {
45
+ const definition = await this.#loadSegmentDefinition(filename);
46
+ const modules = await this.#createSegmentModules(definition);
47
+ const procedures = this.#createSegmentProcedures(modules);
48
+ return new Segment(filename, modules, procedures);
49
+ }
50
+ async #loadSegmentDefinition(filename) {
51
+ try {
52
+ const content = await this.#sourceManager.getContent(filename);
53
+ return JSON.parse(content.toString());
54
+ }
55
+ catch (error) {
56
+ throw new SegmentFileNotLoaded(filename);
57
+ }
58
+ }
59
+ async #createSegmentModules(definition) {
60
+ const modules = [];
61
+ for (const [moduleFilename, moduleImports] of Object.entries(definition)) {
62
+ const absoluteLocation = this.#sourceManager.getAbsoluteLocation(moduleFilename);
63
+ const module = await this.#createSegmentModule(absoluteLocation, moduleImports);
64
+ modules.push(module);
65
+ }
66
+ return modules;
67
+ }
68
+ async #createSegmentModule(absoluteLocation, imports) {
69
+ const exports = await this.#loadSegmentModule(absoluteLocation);
70
+ const implementations = await this.#createSegmentModuleImplementations(absoluteLocation, exports, imports);
71
+ return new SegmentModule(absoluteLocation, exports, implementations);
72
+ }
73
+ async #loadSegmentModule(absoluteLocation) {
74
+ const module = await this.#loadModule(absoluteLocation);
75
+ if (module === undefined) {
76
+ throw new SegmentModuleNotLoaded(absoluteLocation);
77
+ }
78
+ return module;
79
+ }
80
+ async #createSegmentModuleImplementations(absoluteLocation, exports, imports) {
81
+ const moduleName = this.#extractModuleName(absoluteLocation);
82
+ const implementations = new Map();
83
+ for (const [importKey, properties] of Object.entries(imports)) {
84
+ const executable = exports[importKey];
85
+ if (executable === undefined) {
86
+ throw new MissingModuleExport(moduleName, importKey);
87
+ }
88
+ const procedureName = properties.as ?? executable.name;
89
+ const access = properties.access ?? DEFAULT_ACCESS_LEVEL;
90
+ const version = properties.version ?? DEFAULT_VERSION_NUMBER;
91
+ const implementation = new Implementation(moduleName, procedureName, access, version, executable);
92
+ implementations.set(importKey, implementation);
93
+ }
94
+ return implementations;
95
+ }
96
+ #createSegmentProcedures(modules) {
97
+ const procedures = new Map();
98
+ for (const module of modules) {
99
+ for (const implementation of module.implementations.values()) {
100
+ let procedure = procedures.get(implementation.fqn);
101
+ if (procedure === undefined) {
102
+ procedure = new Procedure(implementation.module, implementation.name);
103
+ procedures.set(implementation.fqn, procedure);
104
+ }
105
+ procedure.addImplementation(implementation);
106
+ }
107
+ }
108
+ return procedures;
109
+ }
110
+ #extractModuleName(absoluteLocation) {
111
+ const relativeLocation = this.#sourceManager.getRelativeLocation(absoluteLocation);
112
+ const moduleParts = relativeLocation.split('/');
113
+ moduleParts.pop();
114
+ return moduleParts.join('/');
115
+ }
116
+ async #createApplicationModules(filenames) {
117
+ const promises = filenames.map(async (filename) => this.#createApplicationModule(filename));
118
+ return Promise.all(promises).then(results => results);
119
+ }
120
+ async #createApplicationModule(filename) {
121
+ const module = await this.#loadModule(filename);
122
+ const relativeLocation = this.#sourceManager.getRelativeLocation(filename);
123
+ if (module === undefined) {
124
+ return new ApplicationModule(relativeLocation, new Map(), new Map());
125
+ }
126
+ const classes = ModuleAnalyser.filterClasses(module);
127
+ const functions = ModuleAnalyser.filterFunctions(module);
128
+ return new ApplicationModule(relativeLocation, classes, functions);
129
+ }
130
+ async #loadModule(filename) {
131
+ try {
132
+ return await ModuleLoader.load(filename);
133
+ }
134
+ catch (error) {
135
+ return undefined;
136
+ }
137
+ }
138
+ async #buildSegmentCache(segments) {
139
+ const promises = segments.map(async (segment) => this.#buildSegmentModuleCache(segment));
140
+ return Promise.all(promises);
141
+ }
142
+ async #buildSegmentModuleCache(segment) {
143
+ await this.#buildSegmentCacheForRepository(segment);
144
+ await this.#buildSegmentCacheForNode(segment);
145
+ }
146
+ async #buildSegmentCacheForRepository(segment) {
147
+ return this.#buildSegmentDefinitionForRepository(segment);
148
+ }
149
+ async #buildSegmentDefinitionForRepository(segment) {
150
+ const code = this.#createSegmentRepositoryCode(segment);
151
+ const filename = this.#createSegmentRepositoryFilename(segment);
152
+ return this.#cacheManager.store(filename, code);
153
+ }
154
+ #createSegmentRepositoryCode(segment) {
155
+ const filenames = segment.getFilenames();
156
+ const relativeLocations = filenames.map(filename => this.#sourceManager.getRelativeLocation(filename));
157
+ return `export const files = [\n\t"${[...relativeLocations].join('",\n\t"')}"\n];`;
158
+ }
159
+ #createSegmentRepositoryFilename(segment) {
160
+ const filename = this.#extractSegmentFilename(segment);
161
+ return filename.replace('.json', '.repository.js');
162
+ }
163
+ async #buildSegmentCacheForNode(segment) {
164
+ await this.#buildSegmentDefinitionForNode(segment);
165
+ await this.#buildSegmentModulesForNode(segment);
166
+ }
167
+ async #buildSegmentDefinitionForNode(segment) {
168
+ const code = this.#createSegmentNodeCode(segment);
169
+ const filename = this.#createSegmentNodeFilename(segment);
170
+ return this.#cacheManager.store(filename, code);
171
+ }
172
+ #createSegmentNodeCode(segment) {
173
+ const importCode = this.#createSegmentImportCode(segment);
174
+ const modelCode = this.#createSegmentModelCode(segment);
175
+ return `${importCode}\n\n${modelCode}`;
176
+ }
177
+ #createSegmentImportCode(segment) {
178
+ let codes = [];
179
+ for (const module of segment.modules) {
180
+ const relativeLocation = this.#sourceManager.getRelativeLocation(module.filename);
181
+ const imports = [];
182
+ for (const [importKey, implementation] of module.implementations) {
183
+ imports.push(`${importKey} as \$${implementation.id}`);
184
+ }
185
+ codes.push(`import { ${imports.join(',')} } from "./${relativeLocation}";`);
186
+ }
187
+ return codes.join('\n');
188
+ }
189
+ #createSegmentModelCode(segment) {
190
+ const procedureCode = [];
191
+ for (const procedure of segment.procedures.values()) {
192
+ const implementationCode = [];
193
+ for (const implementation of procedure.implementations) {
194
+ implementationCode.push(`{ access: "${implementation.access}", version: "${implementation.version}", executable: \$${implementation.id} }`);
195
+ }
196
+ procedureCode.push(`{ module: "${procedure.module}", name: "${procedure.name}", implementations: [\n\t\t${implementationCode.join(',\n\t\t')}\n\t]}`);
197
+ }
198
+ return `export const procedures = [\n\t${procedureCode.join(',\n\t')}\n];`;
199
+ }
200
+ async #buildSegmentModulesForNode(segment) {
201
+ for (const module of segment.modules) {
202
+ const filename = module.filename;
203
+ const absoluteLocation = this.#sourceManager.getAbsoluteLocation(filename);
204
+ const relativeLocation = this.#sourceManager.getRelativeLocation(filename);
205
+ const file = await this.#sourceManager.load(absoluteLocation);
206
+ const code = file.content.toString();
207
+ await this.#buildSegmentModuleForLocal(code, relativeLocation);
208
+ await this.#buildSegmentModuleForRemote(module, relativeLocation);
209
+ }
210
+ }
211
+ async #buildSegmentModuleForLocal(code, location) {
212
+ const importedCode = ImportRewriter.rewrite(code);
213
+ const nodeLocation = location.replace('.js', '.local.js');
214
+ return this.#cacheManager.store(nodeLocation, importedCode);
215
+ }
216
+ async #buildSegmentModuleForRemote(module, location) {
217
+ const remoteCode = RemoteBuilder.build(module);
218
+ const remoteLocation = location.replace('.js', '.remote.js');
219
+ return this.#cacheManager.store(remoteLocation, remoteCode);
220
+ }
221
+ #createSegmentNodeFilename(segment) {
222
+ const filename = this.#extractSegmentFilename(segment);
223
+ return filename.replace('.json', '.local.js');
224
+ }
225
+ #extractSegmentFilename(segment) {
226
+ const filename = segment.filename.split('/').pop();
227
+ if (filename === undefined) {
228
+ throw new InvalidSegmentFilename(segment.filename);
229
+ }
230
+ return filename;
231
+ }
232
+ async #buildApplicationCache(applicationModules) {
233
+ const promises = applicationModules.map(async (module) => this.#buildApplicationModuleCache(module));
234
+ return Promise.all(promises);
235
+ }
236
+ async #buildApplicationModuleCache(module) {
237
+ return this.#buildApplicationShareables(module);
238
+ }
239
+ async #buildApplicationShareables(module) {
240
+ if (module.hasClasses() === false) {
241
+ return;
242
+ }
243
+ const filename = module.filename;
244
+ const file = await this.#sourceManager.load(filename);
245
+ const code = file.content.toString();
246
+ const sourcedCode = SourceAppender.append(module, code, filename);
247
+ return this.#cacheManager.store(filename, sourcedCode);
248
+ }
249
+ }
@@ -0,0 +1,4 @@
1
+ export default class ImportRewriter {
2
+ #private;
3
+ static rewrite(content: string): string;
4
+ }
@@ -0,0 +1,49 @@
1
+ import * as Keywords from './definitions/Keywords.js';
2
+ const IMPORT_PATTERN = /import(?:["'\s]*([\w*{}\n, ]+)from\s*)?["'\s]*([@\w/_-]+)["'\s].*/g;
3
+ const NON_SYSTEM_INDICATORS = ['.', '/', 'http:', 'https:'];
4
+ class Dependency {
5
+ items;
6
+ from;
7
+ constructor(items, from) {
8
+ this.items = items;
9
+ this.from = from;
10
+ }
11
+ }
12
+ export default class ImportRewriter {
13
+ static rewrite(content) {
14
+ const replacer = (statement) => this.#replaceImport(statement);
15
+ const newContent = content.replaceAll(IMPORT_PATTERN, replacer);
16
+ return newContent !== content
17
+ ? this.#insertGetDependency(newContent)
18
+ : newContent;
19
+ }
20
+ static #replaceImport(statement) {
21
+ const dependency = this.#parseImport(statement);
22
+ return this.#isSystemDependency(dependency)
23
+ ? this.#rewriteImport(dependency)
24
+ : statement;
25
+ }
26
+ static #parseImport(statement) {
27
+ const hasSemicolon = statement.endsWith(';');
28
+ const fromIndex = statement.indexOf('from');
29
+ const endIndex = statement.length - (hasSemicolon ? 1 : 0);
30
+ const items = statement.substring(6, fromIndex).trim();
31
+ const from = statement.substring(fromIndex + 4, endIndex).trim().slice(1, -1);
32
+ return new Dependency(items, from);
33
+ }
34
+ static #isSystemDependency(dependency) {
35
+ return NON_SYSTEM_INDICATORS.some(indicator => dependency.from.startsWith(indicator)) === false;
36
+ }
37
+ static #isJitarDependency(dependency) {
38
+ return dependency.from === Keywords.JITAR;
39
+ }
40
+ static #rewriteImport(dependency) {
41
+ if (this.#isJitarDependency(dependency)) {
42
+ return `import ${dependency.items} from "/jitar/hooks.js";`;
43
+ }
44
+ return `const ${dependency.items} = await getDependency('${dependency.from}');`;
45
+ }
46
+ static #insertGetDependency(module) {
47
+ return `import { getDependency } from "/jitar/hooks.js";\n${module}`;
48
+ }
49
+ }
@@ -0,0 +1,5 @@
1
+ import ApplicationModule from './models/ApplicationModule.js';
2
+ export default class ModuleAppender {
3
+ #private;
4
+ static append(module: ApplicationModule, code: string, filename: string): string;
5
+ }