nesoi 3.0.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 (348) hide show
  1. package/lib/adapters/postgres/src/migrator/database.d.ts +37 -0
  2. package/lib/adapters/postgres/src/migrator/database.js +88 -0
  3. package/lib/adapters/postgres/src/migrator/index.d.ts +1 -0
  4. package/lib/adapters/postgres/src/migrator/index.js +5 -0
  5. package/lib/adapters/postgres/src/migrator/migration.d.ts +73 -0
  6. package/lib/adapters/postgres/src/migrator/migration.js +351 -0
  7. package/lib/adapters/postgres/src/migrator/migrator.d.ts +21 -0
  8. package/lib/adapters/postgres/src/migrator/migrator.js +73 -0
  9. package/lib/adapters/postgres/src/migrator/runner.d.ts +61 -0
  10. package/lib/adapters/postgres/src/migrator/runner.js +202 -0
  11. package/lib/adapters/postgres/src/postgres.bucket_adapter.d.ts +45 -0
  12. package/lib/adapters/postgres/src/postgres.bucket_adapter.js +278 -0
  13. package/lib/adapters/postgres/src/postgres.cli.d.ts +46 -0
  14. package/lib/adapters/postgres/src/postgres.cli.js +124 -0
  15. package/lib/adapters/postgres/src/postgres.nql.d.ts +12 -0
  16. package/lib/adapters/postgres/src/postgres.nql.js +69 -0
  17. package/lib/adapters/postgres/test/postgres.bucket_adapter.test.d.ts +1 -0
  18. package/lib/adapters/postgres/test/postgres.bucket_adapter.test.js +173 -0
  19. package/lib/adapters/postgres/test/postgres.bucket_query.test.d.ts +0 -0
  20. package/lib/adapters/postgres/test/postgres.bucket_query.test.js +136 -0
  21. package/lib/compiler/apps/monolyth/monolyth_compiler.d.ts +21 -0
  22. package/lib/compiler/apps/monolyth/monolyth_compiler.js +95 -0
  23. package/lib/compiler/apps/monolyth/stages/1_mkdir_stage.d.ts +12 -0
  24. package/lib/compiler/apps/monolyth/stages/1_mkdir_stage.js +80 -0
  25. package/lib/compiler/apps/monolyth/stages/2_build_typescript_stage.d.ts +12 -0
  26. package/lib/compiler/apps/monolyth/stages/2_build_typescript_stage.js +128 -0
  27. package/lib/compiler/apps/monolyth/stages/3_copy_types_stage.d.ts +12 -0
  28. package/lib/compiler/apps/monolyth/stages/3_copy_types_stage.js +75 -0
  29. package/lib/compiler/apps/monolyth/stages/4_dump_modules_stage.d.ts +13 -0
  30. package/lib/compiler/apps/monolyth/stages/4_dump_modules_stage.js +130 -0
  31. package/lib/compiler/apps/monolyth/stages/5_dump_cli_stage.d.ts +12 -0
  32. package/lib/compiler/apps/monolyth/stages/5_dump_cli_stage.js +65 -0
  33. package/lib/compiler/apps/monolyth/stages/6_dump_package_json_stage.d.ts +12 -0
  34. package/lib/compiler/apps/monolyth/stages/6_dump_package_json_stage.js +74 -0
  35. package/lib/compiler/compiler.d.ts +19 -0
  36. package/lib/compiler/compiler.js +83 -0
  37. package/lib/compiler/elements/bucket.element.d.ts +23 -0
  38. package/lib/compiler/elements/bucket.element.js +304 -0
  39. package/lib/compiler/elements/constants.element.d.ts +9 -0
  40. package/lib/compiler/elements/constants.element.js +88 -0
  41. package/lib/compiler/elements/controller.element.d.ts +6 -0
  42. package/lib/compiler/elements/controller.element.js +22 -0
  43. package/lib/compiler/elements/element.d.ts +49 -0
  44. package/lib/compiler/elements/element.js +105 -0
  45. package/lib/compiler/elements/externals.element.d.ts +19 -0
  46. package/lib/compiler/elements/externals.element.js +83 -0
  47. package/lib/compiler/elements/job.element.d.ts +7 -0
  48. package/lib/compiler/elements/job.element.js +62 -0
  49. package/lib/compiler/elements/machine.element.d.ts +10 -0
  50. package/lib/compiler/elements/machine.element.js +98 -0
  51. package/lib/compiler/elements/message.element.d.ts +9 -0
  52. package/lib/compiler/elements/message.element.js +175 -0
  53. package/lib/compiler/elements/queue.element.d.ts +6 -0
  54. package/lib/compiler/elements/queue.element.js +24 -0
  55. package/lib/compiler/elements/resource.element.d.ts +7 -0
  56. package/lib/compiler/elements/resource.element.js +64 -0
  57. package/lib/compiler/error.d.ts +21 -0
  58. package/lib/compiler/error.js +57 -0
  59. package/lib/compiler/helpers/dump_helpers.d.ts +11 -0
  60. package/lib/compiler/helpers/dump_helpers.js +157 -0
  61. package/lib/compiler/helpers/name_helpers.d.ts +20 -0
  62. package/lib/compiler/helpers/name_helpers.js +44 -0
  63. package/lib/compiler/index.d.ts +2 -0
  64. package/lib/compiler/index.js +7 -0
  65. package/lib/compiler/module.d.ts +24 -0
  66. package/lib/compiler/module.js +122 -0
  67. package/lib/compiler/stages/1_scan_stage.d.ts +10 -0
  68. package/lib/compiler/stages/1_scan_stage.js +23 -0
  69. package/lib/compiler/stages/2_treeshake_stage.d.ts +11 -0
  70. package/lib/compiler/stages/2_treeshake_stage.js +24 -0
  71. package/lib/compiler/stages/3_extract_ts_stage.d.ts +10 -0
  72. package/lib/compiler/stages/3_extract_ts_stage.js +71 -0
  73. package/lib/compiler/stages/4_build_schemas_stage.d.ts +10 -0
  74. package/lib/compiler/stages/4_build_schemas_stage.js +25 -0
  75. package/lib/compiler/stages/5_inject_ts_stage.d.ts +10 -0
  76. package/lib/compiler/stages/5_inject_ts_stage.js +22 -0
  77. package/lib/compiler/stages/6_build_elements_stage.d.ts +11 -0
  78. package/lib/compiler/stages/6_build_elements_stage.js +22 -0
  79. package/lib/compiler/stages/7_dump_stage.d.ts +14 -0
  80. package/lib/compiler/stages/7_dump_stage.js +208 -0
  81. package/lib/compiler/stages/8_diagnose_stage.d.ts +16 -0
  82. package/lib/compiler/stages/8_diagnose_stage.js +43 -0
  83. package/lib/compiler/treeshake.d.ts +58 -0
  84. package/lib/compiler/treeshake.js +424 -0
  85. package/lib/compiler/typescript/bridge/extract.d.ts +11 -0
  86. package/lib/compiler/typescript/bridge/extract.js +270 -0
  87. package/lib/compiler/typescript/bridge/inject.d.ts +10 -0
  88. package/lib/compiler/typescript/bridge/inject.js +140 -0
  89. package/lib/compiler/typescript/bridge/organize.d.ts +61 -0
  90. package/lib/compiler/typescript/bridge/organize.js +258 -0
  91. package/lib/compiler/typescript/error.d.ts +88 -0
  92. package/lib/compiler/typescript/error.js +265 -0
  93. package/lib/compiler/typescript/parser.d.ts +48 -0
  94. package/lib/compiler/typescript/parser.js +581 -0
  95. package/lib/compiler/typescript/source.d.ts +12 -0
  96. package/lib/compiler/typescript/source.js +87 -0
  97. package/lib/compiler/typescript/transformers/app_inject.transformer.d.ts +2 -0
  98. package/lib/compiler/typescript/transformers/app_inject.transformer.js +89 -0
  99. package/lib/compiler/typescript/transformers/replace_import.transformer.d.ts +4 -0
  100. package/lib/compiler/typescript/transformers/replace_import.transformer.js +102 -0
  101. package/lib/compiler/typescript/typescript_compiler.d.ts +63 -0
  102. package/lib/compiler/typescript/typescript_compiler.js +602 -0
  103. package/lib/elements/blocks/block.builder.d.ts +29 -0
  104. package/lib/elements/blocks/block.builder.js +87 -0
  105. package/lib/elements/blocks/block.d.ts +15 -0
  106. package/lib/elements/blocks/block.js +37 -0
  107. package/lib/elements/blocks/block.schema.d.ts +23 -0
  108. package/lib/elements/blocks/block.schema.js +15 -0
  109. package/lib/elements/blocks/externals/externals.builder.d.ts +30 -0
  110. package/lib/elements/blocks/externals/externals.builder.js +37 -0
  111. package/lib/elements/blocks/externals/externals.schema.d.ts +11 -0
  112. package/lib/elements/blocks/externals/externals.schema.js +19 -0
  113. package/lib/elements/blocks/job/internal/machine_job.builder.d.ts +52 -0
  114. package/lib/elements/blocks/job/internal/machine_job.builder.js +74 -0
  115. package/lib/elements/blocks/job/internal/machine_job.schema.d.ts +5 -0
  116. package/lib/elements/blocks/job/internal/machine_job.schema.js +10 -0
  117. package/lib/elements/blocks/job/internal/resource_job.builder.d.ts +109 -0
  118. package/lib/elements/blocks/job/internal/resource_job.builder.js +146 -0
  119. package/lib/elements/blocks/job/internal/resource_job.d.ts +14 -0
  120. package/lib/elements/blocks/job/internal/resource_job.js +30 -0
  121. package/lib/elements/blocks/job/internal/resource_job.schema.d.ts +11 -0
  122. package/lib/elements/blocks/job/internal/resource_job.schema.js +15 -0
  123. package/lib/elements/blocks/job/job.builder.d.ts +118 -0
  124. package/lib/elements/blocks/job/job.builder.js +137 -0
  125. package/lib/elements/blocks/job/job.d.ts +13 -0
  126. package/lib/elements/blocks/job/job.js +40 -0
  127. package/lib/elements/blocks/job/job.schema.d.ts +26 -0
  128. package/lib/elements/blocks/job/job.schema.js +20 -0
  129. package/lib/elements/blocks/machine/machine.builder.d.ts +58 -0
  130. package/lib/elements/blocks/machine/machine.builder.js +135 -0
  131. package/lib/elements/blocks/machine/machine.d.ts +86 -0
  132. package/lib/elements/blocks/machine/machine.js +228 -0
  133. package/lib/elements/blocks/machine/machine.schema.d.ts +85 -0
  134. package/lib/elements/blocks/machine/machine.schema.js +64 -0
  135. package/lib/elements/blocks/machine/machine_state.builder.d.ts +58 -0
  136. package/lib/elements/blocks/machine/machine_state.builder.js +186 -0
  137. package/lib/elements/blocks/machine/machine_transition.builder.d.ts +48 -0
  138. package/lib/elements/blocks/machine/machine_transition.builder.js +98 -0
  139. package/lib/elements/blocks/queue/adapters/bucket.queue_adapter.d.ts +10 -0
  140. package/lib/elements/blocks/queue/adapters/bucket.queue_adapter.js +17 -0
  141. package/lib/elements/blocks/queue/adapters/queue_adapter.d.ts +6 -0
  142. package/lib/elements/blocks/queue/adapters/queue_adapter.js +6 -0
  143. package/lib/elements/blocks/queue/queue.builder.d.ts +40 -0
  144. package/lib/elements/blocks/queue/queue.builder.js +31 -0
  145. package/lib/elements/blocks/queue/queue.d.ts +9 -0
  146. package/lib/elements/blocks/queue/queue.js +11 -0
  147. package/lib/elements/blocks/queue/queue.schema.d.ts +12 -0
  148. package/lib/elements/blocks/queue/queue.schema.js +17 -0
  149. package/lib/elements/blocks/resource/resource.builder.d.ts +60 -0
  150. package/lib/elements/blocks/resource/resource.builder.js +224 -0
  151. package/lib/elements/blocks/resource/resource.d.ts +48 -0
  152. package/lib/elements/blocks/resource/resource.js +125 -0
  153. package/lib/elements/blocks/resource/resource.schema.d.ts +32 -0
  154. package/lib/elements/blocks/resource/resource.schema.js +30 -0
  155. package/lib/elements/blocks/resource/resource.types.d.ts +38 -0
  156. package/lib/elements/blocks/resource/resource.types.js +3 -0
  157. package/lib/elements/edge/controller/adapters/cli.controller_adapter.d.ts +8 -0
  158. package/lib/elements/edge/controller/adapters/cli.controller_adapter.js +17 -0
  159. package/lib/elements/edge/controller/adapters/controller_adapter.d.ts +14 -0
  160. package/lib/elements/edge/controller/adapters/controller_adapter.js +44 -0
  161. package/lib/elements/edge/controller/controller.builder.d.ts +78 -0
  162. package/lib/elements/edge/controller/controller.builder.js +178 -0
  163. package/lib/elements/edge/controller/controller.config.d.ts +6 -0
  164. package/lib/elements/edge/controller/controller.config.js +2 -0
  165. package/lib/elements/edge/controller/controller.d.ts +22 -0
  166. package/lib/elements/edge/controller/controller.js +41 -0
  167. package/lib/elements/edge/controller/controller.schema.d.ts +44 -0
  168. package/lib/elements/edge/controller/controller.schema.js +51 -0
  169. package/lib/elements/entities/bucket/adapters/bucket_adapter.d.ts +107 -0
  170. package/lib/elements/entities/bucket/adapters/bucket_adapter.js +41 -0
  171. package/lib/elements/entities/bucket/adapters/memory.bucket_adapter.d.ts +37 -0
  172. package/lib/elements/entities/bucket/adapters/memory.bucket_adapter.js +149 -0
  173. package/lib/elements/entities/bucket/adapters/memory.bucket_query copy.d.ts +0 -0
  174. package/lib/elements/entities/bucket/adapters/memory.bucket_query copy.js +218 -0
  175. package/lib/elements/entities/bucket/adapters/memory.nql.d.ts +19 -0
  176. package/lib/elements/entities/bucket/adapters/memory.nql.js +212 -0
  177. package/lib/elements/entities/bucket/adapters/slow_memory.bucket_adapter.d.ts +20 -0
  178. package/lib/elements/entities/bucket/adapters/slow_memory.bucket_adapter.js +31 -0
  179. package/lib/elements/entities/bucket/bucket.builder.d.ts +61 -0
  180. package/lib/elements/entities/bucket/bucket.builder.js +130 -0
  181. package/lib/elements/entities/bucket/bucket.config.d.ts +29 -0
  182. package/lib/elements/entities/bucket/bucket.config.js +2 -0
  183. package/lib/elements/entities/bucket/bucket.d.ts +36 -0
  184. package/lib/elements/entities/bucket/bucket.infer.d.ts +22 -0
  185. package/lib/elements/entities/bucket/bucket.infer.js +85 -0
  186. package/lib/elements/entities/bucket/bucket.js +125 -0
  187. package/lib/elements/entities/bucket/bucket.schema.d.ts +24 -0
  188. package/lib/elements/entities/bucket/bucket.schema.js +16 -0
  189. package/lib/elements/entities/bucket/bucket.types.d.ts +32 -0
  190. package/lib/elements/entities/bucket/bucket.types.js +2 -0
  191. package/lib/elements/entities/bucket/cache/bucket_cache.d.ts +35 -0
  192. package/lib/elements/entities/bucket/cache/bucket_cache.js +182 -0
  193. package/lib/elements/entities/bucket/graph/bucket_graph.builder.d.ts +11 -0
  194. package/lib/elements/entities/bucket/graph/bucket_graph.builder.js +27 -0
  195. package/lib/elements/entities/bucket/graph/bucket_graph.d.ts +16 -0
  196. package/lib/elements/entities/bucket/graph/bucket_graph.infer.d.ts +9 -0
  197. package/lib/elements/entities/bucket/graph/bucket_graph.infer.js +2 -0
  198. package/lib/elements/entities/bucket/graph/bucket_graph.js +136 -0
  199. package/lib/elements/entities/bucket/graph/bucket_graph.schema.d.ts +28 -0
  200. package/lib/elements/entities/bucket/graph/bucket_graph.schema.js +27 -0
  201. package/lib/elements/entities/bucket/graph/bucket_graph_link.builder.d.ts +36 -0
  202. package/lib/elements/entities/bucket/graph/bucket_graph_link.builder.js +56 -0
  203. package/lib/elements/entities/bucket/model/bucket_model.builder.d.ts +13 -0
  204. package/lib/elements/entities/bucket/model/bucket_model.builder.js +24 -0
  205. package/lib/elements/entities/bucket/model/bucket_model.convert.d.ts +5 -0
  206. package/lib/elements/entities/bucket/model/bucket_model.convert.js +51 -0
  207. package/lib/elements/entities/bucket/model/bucket_model.infer.d.ts +13 -0
  208. package/lib/elements/entities/bucket/model/bucket_model.infer.js +2 -0
  209. package/lib/elements/entities/bucket/model/bucket_model.schema.d.ts +35 -0
  210. package/lib/elements/entities/bucket/model/bucket_model.schema.js +47 -0
  211. package/lib/elements/entities/bucket/model/bucket_model_field.builder.d.ts +119 -0
  212. package/lib/elements/entities/bucket/model/bucket_model_field.builder.js +154 -0
  213. package/lib/elements/entities/bucket/query/nql.schema.d.ts +140 -0
  214. package/lib/elements/entities/bucket/query/nql.schema.js +2 -0
  215. package/lib/elements/entities/bucket/query/nql_compiler.d.ts +44 -0
  216. package/lib/elements/entities/bucket/query/nql_compiler.js +620 -0
  217. package/lib/elements/entities/bucket/query/nql_engine.d.ts +16 -0
  218. package/lib/elements/entities/bucket/query/nql_engine.js +42 -0
  219. package/lib/elements/entities/bucket/view/bucket_view.builder.d.ts +14 -0
  220. package/lib/elements/entities/bucket/view/bucket_view.builder.js +24 -0
  221. package/lib/elements/entities/bucket/view/bucket_view.d.ts +10 -0
  222. package/lib/elements/entities/bucket/view/bucket_view.js +102 -0
  223. package/lib/elements/entities/bucket/view/bucket_view.schema.d.ts +55 -0
  224. package/lib/elements/entities/bucket/view/bucket_view.schema.js +42 -0
  225. package/lib/elements/entities/bucket/view/bucket_view_field.builder.d.ts +37 -0
  226. package/lib/elements/entities/bucket/view/bucket_view_field.builder.js +138 -0
  227. package/lib/elements/entities/constants/constants.builder.d.ts +57 -0
  228. package/lib/elements/entities/constants/constants.builder.js +116 -0
  229. package/lib/elements/entities/constants/constants.d.ts +7 -0
  230. package/lib/elements/entities/constants/constants.js +15 -0
  231. package/lib/elements/entities/constants/constants.schema.d.ts +51 -0
  232. package/lib/elements/entities/constants/constants.schema.js +45 -0
  233. package/lib/elements/entities/message/message.builder.d.ts +33 -0
  234. package/lib/elements/entities/message/message.builder.js +41 -0
  235. package/lib/elements/entities/message/message.d.ts +11 -0
  236. package/lib/elements/entities/message/message.infer.d.ts +63 -0
  237. package/lib/elements/entities/message/message.infer.js +2 -0
  238. package/lib/elements/entities/message/message.js +52 -0
  239. package/lib/elements/entities/message/message.schema.d.ts +15 -0
  240. package/lib/elements/entities/message/message.schema.js +13 -0
  241. package/lib/elements/entities/message/message_parser.d.ts +12 -0
  242. package/lib/elements/entities/message/message_parser.js +112 -0
  243. package/lib/elements/entities/message/template/message_template.builder.d.ts +14 -0
  244. package/lib/elements/entities/message/template/message_template.builder.js +20 -0
  245. package/lib/elements/entities/message/template/message_template.schema.d.ts +57 -0
  246. package/lib/elements/entities/message/template/message_template.schema.js +28 -0
  247. package/lib/elements/entities/message/template/message_template_field.builder.d.ts +225 -0
  248. package/lib/elements/entities/message/template/message_template_field.builder.js +172 -0
  249. package/lib/elements/entities/message/template/message_template_parser.d.ts +3 -0
  250. package/lib/elements/entities/message/template/message_template_parser.js +83 -0
  251. package/lib/elements/index.d.ts +11 -0
  252. package/lib/elements/index.js +23 -0
  253. package/lib/engine/apps/app.config.d.ts +49 -0
  254. package/lib/engine/apps/app.config.js +38 -0
  255. package/lib/engine/apps/app.d.ts +70 -0
  256. package/lib/engine/apps/app.js +101 -0
  257. package/lib/engine/apps/inline.app.d.ts +48 -0
  258. package/lib/engine/apps/inline.app.js +144 -0
  259. package/lib/engine/apps/monolyth/monolyth.app.d.ts +20 -0
  260. package/lib/engine/apps/monolyth/monolyth.app.js +94 -0
  261. package/lib/engine/apps/monolyth/monolyth.cli.d.ts +45 -0
  262. package/lib/engine/apps/monolyth/monolyth.cli.js +362 -0
  263. package/lib/engine/auth/authn.d.ts +18 -0
  264. package/lib/engine/auth/authn.js +9 -0
  265. package/lib/engine/auth/zero.authn_provider.d.ts +13 -0
  266. package/lib/engine/auth/zero.authn_provider.js +13 -0
  267. package/lib/engine/cli/cli.d.ts +19 -0
  268. package/lib/engine/cli/cli.js +88 -0
  269. package/lib/engine/cli/cli_adapter.d.ts +18 -0
  270. package/lib/engine/cli/cli_adapter.js +61 -0
  271. package/lib/engine/cli/ui.d.ts +36 -0
  272. package/lib/engine/cli/ui.js +188 -0
  273. package/lib/engine/daemon.d.ts +35 -0
  274. package/lib/engine/daemon.js +66 -0
  275. package/lib/engine/data/date.d.ts +10 -0
  276. package/lib/engine/data/date.js +32 -0
  277. package/lib/engine/data/datetime.d.ts +12 -0
  278. package/lib/engine/data/datetime.js +31 -0
  279. package/lib/engine/data/decimal.d.ts +11 -0
  280. package/lib/engine/data/decimal.js +70 -0
  281. package/lib/engine/data/error.d.ts +213 -0
  282. package/lib/engine/data/error.js +386 -0
  283. package/lib/engine/data/obj.d.ts +16 -0
  284. package/lib/engine/data/obj.js +5 -0
  285. package/lib/engine/data/tree.d.ts +17 -0
  286. package/lib/engine/data/tree.js +111 -0
  287. package/lib/engine/dependency.d.ts +68 -0
  288. package/lib/engine/dependency.js +91 -0
  289. package/lib/engine/module.d.ts +97 -0
  290. package/lib/engine/module.js +335 -0
  291. package/lib/engine/space.d.ts +54 -0
  292. package/lib/engine/space.js +138 -0
  293. package/lib/engine/transaction/nodes/bucket.trx_node.d.ts +53 -0
  294. package/lib/engine/transaction/nodes/bucket.trx_node.js +522 -0
  295. package/lib/engine/transaction/nodes/bucket_query.trx_node.d.ts +17 -0
  296. package/lib/engine/transaction/nodes/bucket_query.trx_node.js +82 -0
  297. package/lib/engine/transaction/nodes/job.trx_node.d.ts +13 -0
  298. package/lib/engine/transaction/nodes/job.trx_node.js +40 -0
  299. package/lib/engine/transaction/nodes/machine.trx_node.d.ts +12 -0
  300. package/lib/engine/transaction/nodes/machine.trx_node.js +39 -0
  301. package/lib/engine/transaction/nodes/queue.trx_node.d.ts +10 -0
  302. package/lib/engine/transaction/nodes/queue.trx_node.js +24 -0
  303. package/lib/engine/transaction/nodes/resource.trx_node.d.ts +24 -0
  304. package/lib/engine/transaction/nodes/resource.trx_node.js +77 -0
  305. package/lib/engine/transaction/trx.d.ts +50 -0
  306. package/lib/engine/transaction/trx.js +94 -0
  307. package/lib/engine/transaction/trx_engine.config.d.ts +15 -0
  308. package/lib/engine/transaction/trx_engine.config.js +2 -0
  309. package/lib/engine/transaction/trx_engine.d.ts +27 -0
  310. package/lib/engine/transaction/trx_engine.js +95 -0
  311. package/lib/engine/transaction/trx_node.d.ts +61 -0
  312. package/lib/engine/transaction/trx_node.js +175 -0
  313. package/lib/engine/tree.d.ts +34 -0
  314. package/lib/engine/tree.js +237 -0
  315. package/lib/engine/util/cache.d.ts +6 -0
  316. package/lib/engine/util/cache.js +20 -0
  317. package/lib/engine/util/console.d.ts +4 -0
  318. package/lib/engine/util/console.js +24 -0
  319. package/lib/engine/util/deep.d.ts +7 -0
  320. package/lib/engine/util/deep.js +2 -0
  321. package/lib/engine/util/dotenv.d.ts +15 -0
  322. package/lib/engine/util/dotenv.js +94 -0
  323. package/lib/engine/util/i18n.d.ts +5 -0
  324. package/lib/engine/util/i18n.js +19 -0
  325. package/lib/engine/util/log.d.ts +17 -0
  326. package/lib/engine/util/log.js +93 -0
  327. package/lib/engine/util/parse.d.ts +63 -0
  328. package/lib/engine/util/parse.js +229 -0
  329. package/lib/engine/util/promise.d.ts +3 -0
  330. package/lib/engine/util/promise.js +14 -0
  331. package/lib/engine/util/shell.d.ts +6 -0
  332. package/lib/engine/util/shell.js +44 -0
  333. package/lib/engine/util/string.d.ts +18 -0
  334. package/lib/engine/util/string.js +25 -0
  335. package/lib/engine/util/type.d.ts +7 -0
  336. package/lib/engine/util/type.js +3 -0
  337. package/lib/schema.d.ts +63 -0
  338. package/lib/schema.js +2 -0
  339. package/package.json +22 -0
  340. package/tools/compile.d.ts +1 -0
  341. package/tools/compile.js +68 -0
  342. package/tools/joaquin/job.d.ts +40 -0
  343. package/tools/joaquin/job.js +47 -0
  344. package/tools/joaquin/message.d.ts +12 -0
  345. package/tools/joaquin/message.js +47 -0
  346. package/tools/joaquin/mock.d.ts +28 -0
  347. package/tools/joaquin/mock.js +128 -0
  348. package/tsconfig.build.tsbuildinfo +1 -0
@@ -0,0 +1,178 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ControllerBuilder = exports.ControllerDomainBuilder = exports.ControllerGroupBuilder = exports.ControllerEndpointBuilder = void 0;
4
+ const controller_schema_1 = require("./controller.schema");
5
+ const dependency_1 = require("../../../engine/dependency");
6
+ class ControllerEndpointBuilder {
7
+ constructor(module, name) {
8
+ this.module = module;
9
+ this.name = name;
10
+ this._authn = [];
11
+ this._tags = [];
12
+ }
13
+ as(alias) {
14
+ this._alias = alias;
15
+ return this;
16
+ }
17
+ authn(providers) {
18
+ if (!Array.isArray(providers)) {
19
+ providers = [providers];
20
+ }
21
+ this._authn = providers;
22
+ return this;
23
+ }
24
+ tag(tag) {
25
+ this._tags.push(tag);
26
+ return this;
27
+ }
28
+ tags(tags) {
29
+ this._tags.push(...tags);
30
+ return this;
31
+ }
32
+ msg(msg) {
33
+ this._msg = new dependency_1.$Dependency(this.module, 'message', msg);
34
+ return this;
35
+ }
36
+ toJob(job) {
37
+ this._target = new dependency_1.$Dependency(this.module, 'job', job);
38
+ return this;
39
+ }
40
+ toResource(resource) {
41
+ this._target = new dependency_1.$Dependency(this.module, 'resource', resource);
42
+ return this;
43
+ }
44
+ toMachine(machine) {
45
+ this._target = new dependency_1.$Dependency(this.module, 'machine', machine);
46
+ return this;
47
+ }
48
+ static build(builder) {
49
+ return new controller_schema_1.$ControllerEndpoint(builder.name, builder._alias || builder.name, builder._authn, builder._tags, builder._msg, builder._target);
50
+ }
51
+ }
52
+ exports.ControllerEndpointBuilder = ControllerEndpointBuilder;
53
+ class ControllerGroupBuilder {
54
+ constructor(module, name) {
55
+ this.module = module;
56
+ this.name = name;
57
+ this._authn = [];
58
+ this.groups = {};
59
+ this.endpoints = {};
60
+ }
61
+ as(alias) {
62
+ this._alias = alias;
63
+ return this;
64
+ }
65
+ authn(providers) {
66
+ if (!Array.isArray(providers)) {
67
+ providers = [providers];
68
+ }
69
+ this._authn = providers;
70
+ return this;
71
+ }
72
+ endpoint(name, $) {
73
+ const builder = new ControllerEndpointBuilder(this.module, name);
74
+ $(builder);
75
+ this.endpoints[name] = builder;
76
+ return this;
77
+ }
78
+ group(name, $) {
79
+ const builder = new ControllerGroupBuilder(this.module, name);
80
+ $(builder);
81
+ this.groups[name] = builder;
82
+ return this;
83
+ }
84
+ static build(builder) {
85
+ const endpoints = this.buildEndpoints(builder.endpoints);
86
+ const groups = this.buildGroups(builder.groups);
87
+ return new controller_schema_1.$ControllerGroup(builder.name, builder._alias || builder.name, builder._authn, groups, endpoints);
88
+ }
89
+ static buildGroups(builders) {
90
+ const groups = {};
91
+ for (const g in builders) {
92
+ const group = builders[g];
93
+ groups[g] = this.build(group);
94
+ }
95
+ return groups;
96
+ }
97
+ static buildEndpoints(builders) {
98
+ const endpoints = {};
99
+ for (const g in builders) {
100
+ const endpoint = builders[g];
101
+ endpoints[g] = ControllerEndpointBuilder.build(endpoint);
102
+ }
103
+ return endpoints;
104
+ }
105
+ }
106
+ exports.ControllerGroupBuilder = ControllerGroupBuilder;
107
+ class ControllerDomainBuilder extends ControllerGroupBuilder {
108
+ constructor() {
109
+ super(...arguments);
110
+ this._version = 'v1';
111
+ }
112
+ version(version) {
113
+ this._version = version;
114
+ return this;
115
+ }
116
+ static build(builder) {
117
+ const group = ControllerGroupBuilder.build(builder);
118
+ return new controller_schema_1.$ControllerDomain(group.name, group.alias, group.authn, builder._version, group.groups, group.endpoints);
119
+ }
120
+ }
121
+ exports.ControllerDomainBuilder = ControllerDomainBuilder;
122
+ class ControllerBuilder {
123
+ constructor(module, name) {
124
+ this.module = module;
125
+ this.name = name;
126
+ this.$b = 'controller';
127
+ this._authn = [];
128
+ this.domains = {};
129
+ }
130
+ as(alias) {
131
+ this._alias = alias;
132
+ return this;
133
+ }
134
+ authn(providers) {
135
+ if (!Array.isArray(providers)) {
136
+ providers = [providers];
137
+ }
138
+ this._authn = providers;
139
+ return this;
140
+ }
141
+ domain(name, $) {
142
+ const builder = new ControllerDomainBuilder(this.module, name);
143
+ $(builder);
144
+ const version = builder._version;
145
+ this.domains[name + '.' + version] = builder;
146
+ return this;
147
+ }
148
+ // Build
149
+ static build(node) {
150
+ const domains = this.buildDomains(node.builder.domains);
151
+ const input = Object.values(domains)
152
+ .map(domain => this.buildInput(domain))
153
+ .flat();
154
+ node.schema = new controller_schema_1.$Controller(node.module, node.builder.name, node.builder._alias || node.builder.name, node.builder._authn, input, domains);
155
+ return node.schema;
156
+ }
157
+ static buildInput(group) {
158
+ const input = [];
159
+ for (const e in group.endpoints) {
160
+ const endpoint = group.endpoints[e];
161
+ input.push(endpoint.msg);
162
+ }
163
+ for (const e in group.groups) {
164
+ const groupInput = this.buildInput(group.groups[e]);
165
+ input.push(...groupInput);
166
+ }
167
+ return input;
168
+ }
169
+ static buildDomains(builders) {
170
+ const domains = {};
171
+ for (const g in builders) {
172
+ const domain = builders[g];
173
+ domains[g] = ControllerDomainBuilder.build(domain);
174
+ }
175
+ return domains;
176
+ }
177
+ }
178
+ exports.ControllerBuilder = ControllerBuilder;
@@ -0,0 +1,6 @@
1
+ import { ControllerAdapter } from './adapters/controller_adapter';
2
+ import { $Controller } from './controller.schema';
3
+ export type ControllerConfig<B extends $Controller, Providers extends Record<string, any>> = {
4
+ /** Adapter used by this Controller to communicate with a data source */
5
+ adapter?: (schema: B, providers: Providers) => ControllerAdapter;
6
+ };
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,22 @@
1
+ import { $Module, $Space } from "../../../schema";
2
+ import { Module } from "../../../engine/module";
3
+ import { $Controller, $ControllerEndpoint } from './controller.schema';
4
+ import { ControllerAdapter } from './adapters/controller_adapter';
5
+ import { ControllerConfig } from './controller.config';
6
+ import { AnyDaemon } from "../../../engine/daemon";
7
+ export declare class ControllerEndpoint<$ extends $ControllerEndpoint> {
8
+ schema: $;
9
+ adapter: ControllerAdapter;
10
+ path: string;
11
+ constructor(schema: $, adapter: ControllerAdapter, path: string);
12
+ invoke(data: Record<string, any>): Promise<import("../../../engine/transaction/trx").TrxStatus<any>>;
13
+ }
14
+ export declare class Controller<S extends $Space, M extends $Module, $ extends $Controller> {
15
+ schema: $;
16
+ config?: ControllerConfig<$, any> | undefined;
17
+ providers: Record<string, any>;
18
+ adapter: ControllerAdapter;
19
+ constructor(module: Module<S, M>, schema: $, config?: ControllerConfig<$, any> | undefined, providers?: Record<string, any>);
20
+ bind(daemon: AnyDaemon): void;
21
+ }
22
+ export type AnyController = Controller<any, any, any>;
@@ -0,0 +1,41 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Controller = exports.ControllerEndpoint = void 0;
4
+ const cli_controller_adapter_1 = require("./adapters/cli.controller_adapter");
5
+ class ControllerEndpoint {
6
+ constructor(schema, adapter, path) {
7
+ this.schema = schema;
8
+ this.adapter = adapter;
9
+ this.path = path;
10
+ }
11
+ invoke(data) {
12
+ const raw = {
13
+ ...data,
14
+ $: this.schema.msg.name
15
+ };
16
+ return this.adapter.trx(async ($) => {
17
+ if (this.schema.target.type === 'job') {
18
+ return $.job(this.schema.target.refName).run(raw);
19
+ }
20
+ if (this.schema.target.type === 'resource') {
21
+ return $.resource(this.schema.target.refName).run(raw);
22
+ }
23
+ if (this.schema.target.type === 'machine') {
24
+ return $.machine(this.schema.target.refName).run(raw);
25
+ }
26
+ });
27
+ }
28
+ }
29
+ exports.ControllerEndpoint = ControllerEndpoint;
30
+ class Controller {
31
+ constructor(module, schema, config, providers = {}) {
32
+ this.schema = schema;
33
+ this.config = config;
34
+ this.providers = providers;
35
+ this.adapter = config?.adapter?.(schema, providers) || new cli_controller_adapter_1.CLIControllerAdapter(schema);
36
+ }
37
+ bind(daemon) {
38
+ this.adapter.bind(daemon);
39
+ }
40
+ }
41
+ exports.Controller = Controller;
@@ -0,0 +1,44 @@
1
+ import { $Message } from "../../entities/message/message.schema";
2
+ import { AnyUsers } from "../../../engine/auth/authn";
3
+ import { $Dependency } from "../../../engine/dependency";
4
+ export declare class $ControllerEndpoint {
5
+ name: string;
6
+ alias: string;
7
+ authn: string[];
8
+ tags: string[];
9
+ msg: $Dependency;
10
+ target: $Dependency;
11
+ $t: string;
12
+ constructor(name: string, alias: string, authn: string[], tags: string[], msg: $Dependency, target: $Dependency);
13
+ }
14
+ export declare class $ControllerGroup {
15
+ name: string;
16
+ alias: string;
17
+ authn: string[];
18
+ groups: Record<string, $ControllerGroup>;
19
+ endpoints: Record<string, $ControllerEndpoint>;
20
+ $t: string;
21
+ constructor(name: string, alias: string, authn: string[], groups?: Record<string, $ControllerGroup>, endpoints?: Record<string, $ControllerEndpoint>);
22
+ }
23
+ export declare class $ControllerDomain extends $ControllerGroup {
24
+ name: string;
25
+ alias: string;
26
+ authn: string[];
27
+ version: string;
28
+ groups: Record<string, $ControllerGroup>;
29
+ endpoints: Record<string, $ControllerEndpoint>;
30
+ $t: string;
31
+ constructor(name: string, alias: string, authn: string[], version: string, groups?: Record<string, $ControllerGroup>, endpoints?: Record<string, $ControllerEndpoint>);
32
+ }
33
+ export declare class $Controller {
34
+ module: string;
35
+ name: string;
36
+ alias: string;
37
+ authn: string[];
38
+ input: $Dependency[];
39
+ domains: Record<string, $ControllerDomain>;
40
+ $t: "controller";
41
+ '#authn': AnyUsers;
42
+ '#input': $Message;
43
+ constructor(module: string, name: string, alias: string, authn: string[], input: $Dependency[], domains?: Record<string, $ControllerDomain>);
44
+ }
@@ -0,0 +1,51 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.$Controller = exports.$ControllerDomain = exports.$ControllerGroup = exports.$ControllerEndpoint = void 0;
4
+ class $ControllerEndpoint {
5
+ constructor(name, alias, authn, tags, msg, target) {
6
+ this.name = name;
7
+ this.alias = alias;
8
+ this.authn = authn;
9
+ this.tags = tags;
10
+ this.msg = msg;
11
+ this.target = target;
12
+ this.$t = 'controller.endpoint';
13
+ }
14
+ }
15
+ exports.$ControllerEndpoint = $ControllerEndpoint;
16
+ class $ControllerGroup {
17
+ constructor(name, alias, authn, groups = {}, endpoints = {}) {
18
+ this.name = name;
19
+ this.alias = alias;
20
+ this.authn = authn;
21
+ this.groups = groups;
22
+ this.endpoints = endpoints;
23
+ this.$t = 'controller.group';
24
+ }
25
+ }
26
+ exports.$ControllerGroup = $ControllerGroup;
27
+ class $ControllerDomain extends $ControllerGroup {
28
+ constructor(name, alias, authn, version, groups = {}, endpoints = {}) {
29
+ super(name, alias, authn, groups, endpoints);
30
+ this.name = name;
31
+ this.alias = alias;
32
+ this.authn = authn;
33
+ this.version = version;
34
+ this.groups = groups;
35
+ this.endpoints = endpoints;
36
+ this.$t = 'controller.domain';
37
+ }
38
+ }
39
+ exports.$ControllerDomain = $ControllerDomain;
40
+ class $Controller {
41
+ constructor(module, name, alias, authn, input, domains = {}) {
42
+ this.module = module;
43
+ this.name = name;
44
+ this.alias = alias;
45
+ this.authn = authn;
46
+ this.input = input;
47
+ this.domains = domains;
48
+ this.$t = 'controller';
49
+ }
50
+ }
51
+ exports.$Controller = $Controller;
@@ -0,0 +1,107 @@
1
+ import { AnyTrxNode } from "../../../../engine/transaction/trx_node";
2
+ import { NesoiObj, NewOrOldObj } from "../../../../engine/data/obj";
3
+ import { BucketCacheSync } from '../cache/bucket_cache';
4
+ import { NQL_AnyQuery, NQL_Pagination } from '../query/nql.schema';
5
+ import { NQLRunner } from '../query/nql_engine';
6
+ import { $Bucket } from "../../..";
7
+ export type BucketAdapterConfig = {
8
+ updatedAtField: string;
9
+ };
10
+ export declare abstract class BucketAdapter<Obj extends NesoiObj> {
11
+ protected schema: $Bucket;
12
+ protected nql: NQLRunner;
13
+ protected config: BucketAdapterConfig;
14
+ constructor(schema: $Bucket, nql: NQLRunner, config?: Partial<BucketAdapterConfig>);
15
+ /**
16
+ * **Dangerous!**
17
+ * This should only be used on inner adapters of bucket caches.
18
+ * Be extremely careful when implementing this on permanent storage adapters.
19
+ */
20
+ protected abstract deleteEverything(trx: AnyTrxNode): Promise<void>;
21
+ /**
22
+ * Return one entity by ID
23
+ */
24
+ abstract get(trx: AnyTrxNode, id: Obj['id']): Promise<undefined | Obj>;
25
+ /**
26
+ * Return all entities
27
+ */
28
+ abstract index(trx: AnyTrxNode): Promise<Obj[]>;
29
+ /**
30
+ * Return the results of a query
31
+ */
32
+ query<MetadataOnly extends boolean>(trx: AnyTrxNode, query: NQL_AnyQuery, pagination?: NQL_Pagination, config?: {
33
+ metadataOnly: MetadataOnly;
34
+ }): Promise<MetadataOnly extends true ? {
35
+ id: Obj['id'];
36
+ [x: string]: any;
37
+ }[] : Obj[]>;
38
+ /**
39
+ * Create/update an entity and return it.
40
+ *
41
+ * - If the `obj` has an `id` property, it's a **replace**.
42
+ * - If not, it's a **create**.
43
+ */
44
+ abstract put(trx: AnyTrxNode, obj: NewOrOldObj<Obj>): Promise<Obj>;
45
+ /**
46
+ * Create/update many entities and return them.
47
+ *
48
+ * For each `obj` of `objs`:
49
+ * - If the `obj` has an `id` property, it's a **replace**.
50
+ * - If not, it's a **create**.
51
+ */
52
+ abstract putMany(trx: AnyTrxNode, objs: NewOrOldObj<Obj>[]): Promise<Obj[]>;
53
+ /**
54
+ * Delete an entity by ID
55
+ */
56
+ abstract delete(trx: AnyTrxNode, id: Obj['id']): Promise<void>;
57
+ /**
58
+ * Delete many entities by their IDs
59
+ */
60
+ abstract deleteMany(trx: AnyTrxNode, ids: Obj['id'][]): Promise<void>;
61
+ getUpdateEpoch(obj: Obj): number;
62
+ /**
63
+ * Given an id, sync that object only.
64
+ * - If the id doesn't exist on the source, return 'deleted'
65
+ * - If it does, check if it changed since lastObjUpdateEpoch
66
+ * - If yes, return the updated object
67
+ * - If not, return null
68
+ * @returns
69
+ * - null: Object hasn't changed
70
+ * - Obj: Object has changed
71
+ * - 'deleted': Object was deleted
72
+ */
73
+ abstract syncOne(trx: AnyTrxNode, id: Obj['id'], lastObjUpdateEpoch: number): Promise<null | 'deleted' | BucketCacheSync<Obj>>;
74
+ /**
75
+ * Given an id, if the object was not deleted and has changed on source,
76
+ * sync the object and all objects of this bucket updated before it.
77
+ * @returns
78
+ * - null: Object hasn't changed
79
+ * - Obj[]: Object or past objects changed
80
+ * - 'deleted': Object was deleted
81
+ */
82
+ abstract syncOneAndPast(trx: AnyTrxNode, id: Obj['id'], lastUpdateEpoch: number): Promise<null | 'deleted' | BucketCacheSync<Obj>[]>;
83
+ /**
84
+ * Resync the entire cache.
85
+ * - Hash the ids, check if it matches the incoming hash
86
+ * - If yes, read all data that changed since last time
87
+ * - If not, read all data and return a hard resync (previous data will be wiped)
88
+ @returns
89
+ * - null: Cache hasn't changed
90
+ * - { data: Obj[], hash: string, hard: true }: Cache has changed
91
+ */
92
+ abstract syncAll(trx: AnyTrxNode, lastHash?: string, lastUpdateEpoch?: number): Promise<null | {
93
+ sync: BucketCacheSync<Obj>[];
94
+ hash: string;
95
+ updateEpoch: number;
96
+ reset: boolean;
97
+ }>;
98
+ /**
99
+ * Returns a scope string, used to optimize queries.
100
+ * Should be the same for adapters that can be queried together.
101
+ */
102
+ abstract getQueryMeta(): {
103
+ scope: string;
104
+ avgTime: number;
105
+ };
106
+ }
107
+ export type AnyBucketAdapter = BucketAdapter<any>;
@@ -0,0 +1,41 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.BucketAdapter = void 0;
4
+ const trx_node_1 = require("../../../../engine/transaction/trx_node");
5
+ const error_1 = require("../../../../engine/data/error");
6
+ const datetime_1 = require("../../../../engine/data/datetime");
7
+ const nql_compiler_1 = require("../query/nql_compiler");
8
+ class BucketAdapter {
9
+ constructor(schema, nql, config) {
10
+ this.schema = schema;
11
+ this.nql = nql;
12
+ this.config = {
13
+ updatedAtField: config?.updatedAtField || 'updated_at'
14
+ };
15
+ }
16
+ /**
17
+ * Return the results of a query
18
+ */
19
+ async query(trx, query, pagination, config) {
20
+ const module = trx_node_1.TrxNode.getModule(trx);
21
+ const compiled = await nql_compiler_1.NQL_Compiler.build(module, this.schema.name, query);
22
+ const results = await module.nql.run(trx, compiled);
23
+ if (config?.metadataOnly) {
24
+ return results.map(obj => ({
25
+ id: obj.id,
26
+ [this.config.updatedAtField]: this.getUpdateEpoch(obj)
27
+ }));
28
+ }
29
+ return results;
30
+ }
31
+ /* Cache Operations */
32
+ getUpdateEpoch(obj) {
33
+ const objUpdateStr = obj[this.config.updatedAtField];
34
+ if (!objUpdateStr) {
35
+ throw error_1.NesoiError.Bucket.NoUpdatedAtField({ bucket: 'TODO', id: obj.id, field: this.config.updatedAtField });
36
+ }
37
+ const objUpdate = datetime_1.NesoiDatetime.fromISO(objUpdateStr);
38
+ return objUpdate.epoch;
39
+ }
40
+ }
41
+ exports.BucketAdapter = BucketAdapter;
@@ -0,0 +1,37 @@
1
+ import { BucketAdapter, BucketAdapterConfig } from './bucket_adapter';
2
+ import { NesoiObj, NewOrOldObj } from "../../../../engine/data/obj";
3
+ import { AnyTrxNode } from "../../../../engine/transaction/trx_node";
4
+ import { $Bucket } from "../../..";
5
+ export declare class MemoryBucketAdapter<Obj extends NesoiObj> extends BucketAdapter<Obj> {
6
+ schema: $Bucket;
7
+ data: Record<Obj['id'], Obj>;
8
+ constructor(schema: $Bucket, data?: Record<Obj['id'], Obj>, config?: BucketAdapterConfig);
9
+ getQueryMeta(): {
10
+ scope: string;
11
+ avgTime: number;
12
+ };
13
+ protected deleteEverything(trx: AnyTrxNode): Promise<void>;
14
+ index(trx: AnyTrxNode): Promise<Obj[]>;
15
+ get(trx: AnyTrxNode, id: Obj['id']): Promise<Awaited<Record<Obj["id"], Obj>[Obj["id"]]>>;
16
+ put(trx: AnyTrxNode, obj: NewOrOldObj<Obj>): Promise<any>;
17
+ putMany(trx: AnyTrxNode, objs: NewOrOldObj<Obj>[]): Promise<any[]>;
18
+ delete(trx: AnyTrxNode, id: Obj['id']): Promise<void>;
19
+ deleteMany(trx: AnyTrxNode, ids: Obj['id'][]): Promise<void>;
20
+ syncOne(trx: AnyTrxNode, id: Obj['id'], lastObjUpdateEpoch: number): Promise<"deleted" | {
21
+ obj: Awaited<Record<Obj["id"], Obj>[Obj["id"]]>;
22
+ updateEpoch: number;
23
+ } | null>;
24
+ syncOneAndPast(trx: AnyTrxNode, id: Obj['id'], lastUpdateEpoch: number): Promise<"deleted" | {
25
+ obj: Obj;
26
+ updateEpoch: number;
27
+ }[] | null>;
28
+ syncAll(trx: AnyTrxNode, lastHash?: string, lastUpdateEpoch?: number): Promise<{
29
+ sync: {
30
+ obj: Obj;
31
+ updateEpoch: number;
32
+ }[];
33
+ hash: string;
34
+ updateEpoch: number;
35
+ reset: boolean;
36
+ } | null>;
37
+ }
@@ -0,0 +1,149 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.MemoryBucketAdapter = void 0;
4
+ const bucket_adapter_1 = require("./bucket_adapter");
5
+ const crypto_1 = require("crypto");
6
+ const memory_nql_1 = require("./memory.nql");
7
+ class MemoryBucketAdapter extends bucket_adapter_1.BucketAdapter {
8
+ constructor(schema, data = {}, config) {
9
+ const nql = new memory_nql_1.MemoryNQLRunner();
10
+ super(schema, nql, config);
11
+ this.schema = schema;
12
+ this.data = data;
13
+ nql.bind(this);
14
+ }
15
+ getQueryMeta() {
16
+ return {
17
+ scope: `memory.${this.schema.name}`,
18
+ avgTime: 10
19
+ };
20
+ }
21
+ /* Dangerous, used on cache only */
22
+ deleteEverything(trx) {
23
+ this.data = {};
24
+ return Promise.resolve();
25
+ }
26
+ /* Read operations */
27
+ index(trx) {
28
+ const objs = Object.values(this.data);
29
+ return Promise.resolve(objs);
30
+ }
31
+ get(trx, id) {
32
+ return Promise.resolve(this.data[id]);
33
+ }
34
+ /* Write Operations */
35
+ async put(trx, obj) {
36
+ if (!obj.id) {
37
+ const lastId = (await this.index(trx))
38
+ .map((obj) => parseInt(obj.id))
39
+ .sort((a, b) => b - a)[0] || 0;
40
+ obj.id = lastId + 1;
41
+ }
42
+ this.data[obj.id] = obj;
43
+ return Promise.resolve(obj);
44
+ }
45
+ putMany(trx, objs) {
46
+ return Promise.all(objs.map(obj => this.put(trx, obj)));
47
+ }
48
+ delete(trx, id) {
49
+ delete this.data[id];
50
+ return Promise.resolve();
51
+ }
52
+ deleteMany(trx, ids) {
53
+ for (const id of ids) {
54
+ delete this.data[id];
55
+ }
56
+ return Promise.resolve();
57
+ }
58
+ /* Cache Operations */
59
+ async syncOne(trx, id, lastObjUpdateEpoch) {
60
+ // 1. Check if object was deleted
61
+ const obj = await this.get(trx, id);
62
+ if (!obj) {
63
+ return 'deleted';
64
+ }
65
+ // 2. Check if object was updated
66
+ const updateEpoch = this.getUpdateEpoch(obj);
67
+ const hasObjUpdated = updateEpoch > lastObjUpdateEpoch;
68
+ if (!hasObjUpdated) {
69
+ return null;
70
+ }
71
+ // 3. Return updated object and epoch
72
+ return {
73
+ obj,
74
+ updateEpoch
75
+ };
76
+ }
77
+ async syncOneAndPast(trx, id, lastUpdateEpoch) {
78
+ // 1. Check if object was deleted
79
+ const obj = await this.get(trx, id);
80
+ if (!obj) {
81
+ return 'deleted';
82
+ }
83
+ // 2. Check if object was updated
84
+ const objUpdateEpoch = this.getUpdateEpoch(obj);
85
+ const hasObjUpdated = objUpdateEpoch > lastUpdateEpoch;
86
+ if (!hasObjUpdated) {
87
+ return null;
88
+ }
89
+ // 3. Return all objects updated and the max epoch
90
+ let updateEpoch = 0;
91
+ const changed = Object.values(this.data)
92
+ .map(obj => {
93
+ const epoch = this.getUpdateEpoch(obj);
94
+ if (epoch > updateEpoch) {
95
+ updateEpoch = epoch;
96
+ }
97
+ return { obj, updateEpoch: epoch };
98
+ })
99
+ .filter(obj => obj.updateEpoch > lastUpdateEpoch);
100
+ if (!changed.length) {
101
+ return null;
102
+ }
103
+ return changed;
104
+ }
105
+ async syncAll(trx, lastHash, lastUpdateEpoch = 0) {
106
+ // 1. Hash the current ids
107
+ const idStr = Object.keys(this.data).sort().join('');
108
+ const hash = (0, crypto_1.createHash)('md5').update(idStr).digest('hex');
109
+ // 2. If hash changed, return a reset sync with all objects
110
+ if (hash !== lastHash) {
111
+ let updateEpoch = 0;
112
+ const sync = (await this.index(trx))
113
+ .map(obj => {
114
+ const epoch = this.getUpdateEpoch(obj);
115
+ if (epoch > updateEpoch) {
116
+ updateEpoch = epoch;
117
+ }
118
+ return { obj, updateEpoch: epoch };
119
+ });
120
+ return {
121
+ sync,
122
+ hash,
123
+ updateEpoch,
124
+ reset: true
125
+ };
126
+ }
127
+ // 3. Find the data that changed and return it
128
+ let updateEpoch = 0;
129
+ const sync = Object.values(this.data)
130
+ .map(obj => {
131
+ const epoch = this.getUpdateEpoch(obj);
132
+ if (epoch > updateEpoch) {
133
+ updateEpoch = epoch;
134
+ }
135
+ return { obj, updateEpoch: epoch };
136
+ })
137
+ .filter(obj => obj.updateEpoch > lastUpdateEpoch);
138
+ if (!sync.length) {
139
+ return null;
140
+ }
141
+ return {
142
+ sync,
143
+ hash,
144
+ updateEpoch,
145
+ reset: false
146
+ };
147
+ }
148
+ }
149
+ exports.MemoryBucketAdapter = MemoryBucketAdapter;