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,37 @@
1
+ import postgres from 'postgres';
2
+ export type TableColumn = {
3
+ column_name: string;
4
+ data_type: string;
5
+ nullable: boolean;
6
+ field_exists: boolean;
7
+ };
8
+ export declare class Database {
9
+ static connect(config?: postgres.Options<any>): postgres.Sql<{}>;
10
+ /**
11
+ * Check if the connection to PostgreSQL is working, by performing
12
+ * a SELECT on the pg_database table.
13
+ * @param config
14
+ */
15
+ static checkConnection(sql: postgres.Sql<any>): Promise<any>;
16
+ /**
17
+ * List all tables of the database.
18
+ * @param config
19
+ */
20
+ static listTables(sql: postgres.Sql<any>): Promise<any[]>;
21
+ /**
22
+ * Read schema of table.
23
+ * @param config
24
+ */
25
+ private getSchema;
26
+ /**
27
+ * Connect to PostgreSQL and create a database.
28
+ *
29
+ * The `if_exists` flag controls what happens if the database already exists
30
+ * - fail: Throw an exception
31
+ * - keep: Do nothing
32
+ * - delete: *DROP DATABASE*
33
+ */
34
+ static createDatabase(name: string, config?: postgres.Options<any>, $?: {
35
+ if_exists: 'fail' | 'keep' | 'delete';
36
+ }): Promise<void>;
37
+ }
@@ -0,0 +1,88 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.Database = void 0;
7
+ const postgres_1 = __importDefault(require("postgres"));
8
+ const log_1 = require("../../../../engine/util/log");
9
+ class Database {
10
+ static connect(config) {
11
+ return (0, postgres_1.default)(config);
12
+ }
13
+ /**
14
+ * Check if the connection to PostgreSQL is working, by performing
15
+ * a SELECT on the pg_database table.
16
+ * @param config
17
+ */
18
+ static async checkConnection(sql) {
19
+ try {
20
+ await sql `SELECT datname FROM pg_database`;
21
+ }
22
+ catch (e) {
23
+ return e;
24
+ }
25
+ return true;
26
+ }
27
+ /**
28
+ * List all tables of the database.
29
+ * @param config
30
+ */
31
+ static async listTables(sql) {
32
+ const columns = await sql `
33
+ SELECT table_name
34
+ FROM information_schema.tables
35
+ WHERE table_schema='public'
36
+ AND table_type='BASE TABLE'
37
+ `;
38
+ return columns.map(col => col.table_name);
39
+ }
40
+ /**
41
+ * Read schema of table.
42
+ * @param config
43
+ */
44
+ async getSchema(sql, tableName) {
45
+ const columns = await sql `
46
+ SELECT column_name, data_type, is_nullable
47
+ FROM information_schema.columns
48
+ WHERE table_name = ${tableName}`;
49
+ if (!columns.length) {
50
+ return;
51
+ }
52
+ return columns.map(col => ({
53
+ ...col,
54
+ nullable: col.is_nullable === 'YES',
55
+ field_exists: false
56
+ }));
57
+ }
58
+ /**
59
+ * Connect to PostgreSQL and create a database.
60
+ *
61
+ * The `if_exists` flag controls what happens if the database already exists
62
+ * - fail: Throw an exception
63
+ * - keep: Do nothing
64
+ * - delete: *DROP DATABASE*
65
+ */
66
+ static async createDatabase(name, config, $) {
67
+ const sql = (0, postgres_1.default)(Object.assign({}, config, {
68
+ db: 'postgres'
69
+ }));
70
+ const dbs = await sql `SELECT datname FROM pg_database`;
71
+ const alreadyExists = dbs.some(db => db.datname === name);
72
+ if (alreadyExists) {
73
+ if (!$ || $.if_exists === 'fail') {
74
+ throw new Error(`Database ${name} already exists`);
75
+ }
76
+ if ($.if_exists === 'keep') {
77
+ return;
78
+ }
79
+ if ($.if_exists === 'delete') {
80
+ log_1.Log.warn('migrator', 'create_db', `Database '${name}' is being dropped due to a if_exists:'delete' flag.`);
81
+ await sql `DROP DATABASE ${sql(name)}`;
82
+ }
83
+ }
84
+ log_1.Log.info('migrator', 'create_db', `Creating database '${name}'`);
85
+ await sql `CREATE DATABASE ${sql(name)}`;
86
+ }
87
+ }
88
+ exports.Database = Database;
@@ -0,0 +1 @@
1
+ export { Migrator } from './migrator';
@@ -0,0 +1,5 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Migrator = void 0;
4
+ var migrator_1 = require("./migrator");
5
+ Object.defineProperty(exports, "Migrator", { enumerable: true, get: function () { return migrator_1.Migrator; } });
@@ -0,0 +1,73 @@
1
+ import { $Bucket, $Space } from "../../../../elements";
2
+ import postgres from 'postgres';
3
+ import { AnyDaemon } from "../../../../engine/daemon";
4
+ export type MigrationFieldOperation = {
5
+ create: {
6
+ type: string;
7
+ nullable?: boolean;
8
+ pk?: boolean;
9
+ fk?: string;
10
+ };
11
+ } | {
12
+ alter: {
13
+ name?: string;
14
+ type?: string;
15
+ nullable?: boolean;
16
+ fk?: string;
17
+ };
18
+ } | {
19
+ drop: {
20
+ cascade?: boolean;
21
+ };
22
+ };
23
+ export declare class MigrationField {
24
+ oldColumn: string | undefined;
25
+ newColumn: string;
26
+ operation: MigrationFieldOperation;
27
+ constructor(oldColumn: string | undefined, newColumn: string, operation: MigrationFieldOperation);
28
+ describe(): string;
29
+ sql(): string | undefined;
30
+ }
31
+ export declare class Migration {
32
+ private type;
33
+ private tableName;
34
+ private options;
35
+ name: string;
36
+ private fields;
37
+ private needsReview;
38
+ constructor(type: 'create' | 'alter', tableName: string, options: Record<string, MigrationField[]>);
39
+ describe(): string;
40
+ sqlUp(): string;
41
+ sqlDown(): string;
42
+ save(dirpath?: string): void;
43
+ hash(): string;
44
+ /**
45
+ * Generates an encoded version of the migration, which is
46
+ * stored as a comment on the migration file. This can be
47
+ * used to recreate the `Migration` object in memory if needed.
48
+ * > **Attention** This encoded version is NOT used to run the migration.
49
+ * > The SQL is used to run the migration. This can be used
50
+ * > for analysis/display purposes only.
51
+ * > There's no guarantee that this will match the SQL if
52
+ * > the migration file is manually altered.
53
+ * @returns
54
+ */
55
+ private encode;
56
+ private decode;
57
+ private fnUp;
58
+ private fnDown;
59
+ }
60
+ export declare class BucketMigrator<S extends $Space, D extends AnyDaemon, ModuleName extends NoInfer<keyof S['modules']>> {
61
+ private daemon;
62
+ private sql;
63
+ private module;
64
+ private bucket;
65
+ private tableName;
66
+ protected schema: $Bucket;
67
+ constructor(daemon: D, sql: postgres.Sql<any>, module: ModuleName, bucket: NoInfer<keyof S['modules'][ModuleName]['buckets']>, tableName: string);
68
+ generate(): Promise<Migration | undefined>;
69
+ private getCurrentSchema;
70
+ private generateFieldOptions;
71
+ private generateField;
72
+ private fieldType;
73
+ }
@@ -0,0 +1,351 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.BucketMigrator = exports.Migration = exports.MigrationField = void 0;
37
+ const string_1 = require("../../../../engine/util/string");
38
+ const path = __importStar(require("path"));
39
+ const fs = __importStar(require("fs"));
40
+ const crypto_1 = require("crypto");
41
+ const datetime_1 = require("../../../../engine/data/datetime");
42
+ const daemon_1 = require("../../../../engine/daemon");
43
+ class MigrationField {
44
+ constructor(oldColumn, newColumn, operation) {
45
+ this.oldColumn = oldColumn;
46
+ this.newColumn = newColumn;
47
+ this.operation = operation;
48
+ }
49
+ describe() {
50
+ const col_str = (0, string_1.colored)(this.newColumn, 'lightblue');
51
+ if ('create' in this.operation) {
52
+ const type_str = (0, string_1.colored)(this.operation.create.type, 'purple');
53
+ return `Create column ${col_str} as ${type_str}`;
54
+ }
55
+ else if ('alter' in this.operation) {
56
+ const op = this.operation.alter;
57
+ const name_str = op.name ? (0, string_1.colored)(op.name, 'lightcyan') : undefined;
58
+ const type_str = op.type ? (0, string_1.colored)(op.type, 'purple') : undefined;
59
+ const null_str = op.nullable ? (0, string_1.colored)('NOT NULL', 'purple') : undefined;
60
+ const props = (type_str ? `Alter column ${col_str} type to ${type_str};` : '') +
61
+ (null_str ? `Alter column ${col_str} nullable to ${null_str};` : '');
62
+ if (name_str) {
63
+ return `Rename column ${col_str} to ${name_str}.${props}`;
64
+ }
65
+ return props;
66
+ }
67
+ else {
68
+ return (0, string_1.colored)('Unknown', 'lightred');
69
+ }
70
+ }
71
+ sql() {
72
+ if ('create' in this.operation) {
73
+ return `${this.newColumn} ${this.operation.create.type}`;
74
+ }
75
+ }
76
+ }
77
+ exports.MigrationField = MigrationField;
78
+ class Migration {
79
+ constructor(type, tableName, options) {
80
+ this.type = type;
81
+ this.tableName = tableName;
82
+ this.options = options;
83
+ this.name = `${datetime_1.NesoiDatetime.now().epoch}_${this.tableName}`;
84
+ this.needsReview = Object.values(options).some(opts => opts.length > 1);
85
+ this.fields = Object.values(options).map(opts => opts[0]);
86
+ }
87
+ describe() {
88
+ let str = '';
89
+ str += '┌\n';
90
+ str += `│ ${(0, string_1.colored)(this.name, 'lightcyan')}\n`;
91
+ str += `│ ${this.needsReview
92
+ ? (0, string_1.colored)('⚠ More than one option for some fields. Requires review.', 'red')
93
+ : (0, string_1.colored)('✓ Only one option for each field.', 'lightgreen')}\n`;
94
+ str += '└\n\n';
95
+ if (this.type === 'create') {
96
+ str += `◆ Create table ${(0, string_1.colored)(this.tableName, 'lightblue')}\n`;
97
+ }
98
+ else if (this.type === 'alter') {
99
+ str += `◆ Alter table '${this.tableName}'\n`;
100
+ }
101
+ this.fields.forEach(field => {
102
+ str += `└ ${field.describe()}\n`;
103
+ });
104
+ str += '\n';
105
+ str += `${(0, string_1.colored)('▲ UP', 'lightgreen')}:\n`;
106
+ str += this.sqlUp();
107
+ str += '\n';
108
+ str += `${(0, string_1.colored)('▼ DOWN', 'yellow')}:\n`;
109
+ str += this.sqlDown();
110
+ return str;
111
+ }
112
+ sqlUp() {
113
+ if (this.type === 'create') {
114
+ return `CREATE TABLE ${this.tableName} (\n` +
115
+ this.fields.map(field => '\t' + field.sql()).join(',\n')
116
+ + '\n)';
117
+ }
118
+ return '';
119
+ }
120
+ sqlDown() {
121
+ if (this.type === 'create') {
122
+ return `DROP TABLE ${this.tableName}`;
123
+ }
124
+ return '';
125
+ }
126
+ save(dirpath = './migrations') {
127
+ const filepath = path.join(dirpath, this.name + '.ts');
128
+ const { encoded, hash } = this.encode();
129
+ let str = '';
130
+ str += 'import { Migrator } from \'nesoi/lib/adapters/postgres/src/migrator\';\n';
131
+ str += '\n';
132
+ str += '/**\n';
133
+ str += ` * ${this.name}\n`;
134
+ str += ` * $hash[${hash}]\n`;
135
+ str += ' *\n';
136
+ str += ` * $type[${this.type}]\n`;
137
+ str += ` * $table[${this.tableName}]\n`;
138
+ str += ` * $fields[${encoded}]\n`;
139
+ str += ' */\n';
140
+ str += '\n';
141
+ str += 'export default Migrator.migration({\n';
142
+ str += '\t' + this.fnUp().replace(/\n/g, '\n\t') + ',\n';
143
+ str += '\t' + this.fnDown().replace(/\n/g, '\n\t') + '\n';
144
+ str += '})';
145
+ fs.writeFileSync(filepath, str);
146
+ }
147
+ hash() {
148
+ const { hash } = this.encode();
149
+ return hash;
150
+ }
151
+ /**
152
+ * Generates an encoded version of the migration, which is
153
+ * stored as a comment on the migration file. This can be
154
+ * used to recreate the `Migration` object in memory if needed.
155
+ * > **Attention** This encoded version is NOT used to run the migration.
156
+ * > The SQL is used to run the migration. This can be used
157
+ * > for analysis/display purposes only.
158
+ * > There's no guarantee that this will match the SQL if
159
+ * > the migration file is manually altered.
160
+ * @returns
161
+ */
162
+ encode() {
163
+ const v0 = () => {
164
+ const f_str = this.fields.map(field => {
165
+ const [op_key, op] = Object.entries(field.operation)[0];
166
+ const op_str = `[${op_key};${op.type || ''};${op.nullable ? 1 : 0};${op.pk ? 1 : 0};${op.fk || ''};${op.cascade || ''}]`;
167
+ return `${field.oldColumn || ''}:${field.newColumn}:${op_str}`;
168
+ }).join('\n');
169
+ const encoded = btoa(f_str);
170
+ const hash = (0, crypto_1.createHash)('md5').update(encoded).digest('hex');
171
+ return {
172
+ encoded,
173
+ hash: 'v0.' + hash
174
+ };
175
+ };
176
+ return v0();
177
+ }
178
+ decode() {
179
+ // TODO
180
+ }
181
+ fnUp() {
182
+ let str = '';
183
+ str += 'up: async (daemon, sql) => {\n';
184
+ str += '\tawait sql`\n';
185
+ str += '\t\t' + this.sqlUp().replace(/\n/g, '\n\t\t') + '\n';
186
+ str += '\t`\n';
187
+ str += '}';
188
+ return str;
189
+ }
190
+ fnDown() {
191
+ let str = '';
192
+ str += 'down: async (daemon, sql) => {\n';
193
+ str += '\tawait sql`\n';
194
+ str += '\t\t' + this.sqlDown().replace(/\n/g, '\n\t\t') + '\n';
195
+ str += '\t`\n';
196
+ str += '}';
197
+ return str;
198
+ }
199
+ }
200
+ exports.Migration = Migration;
201
+ class BucketMigrator {
202
+ constructor(daemon, sql, module, bucket, tableName) {
203
+ this.daemon = daemon;
204
+ this.sql = sql;
205
+ this.module = module;
206
+ this.bucket = bucket;
207
+ this.tableName = tableName;
208
+ this.schema = daemon_1.Daemon.getModule(daemon, module)
209
+ .buckets[bucket]
210
+ .schema;
211
+ }
212
+ async generate() {
213
+ const current = await this.getCurrentSchema();
214
+ const options = this.generateFieldOptions(current);
215
+ if (!Object.keys(options).length) {
216
+ return;
217
+ }
218
+ const type = current ? 'alter' : 'create';
219
+ return new Migration(type, this.tableName, options);
220
+ }
221
+ async getCurrentSchema() {
222
+ const columns = await this.sql `
223
+ SELECT column_name, data_type, is_nullable
224
+ FROM information_schema.columns
225
+ WHERE table_name = ${this.tableName}`;
226
+ if (!columns.length) {
227
+ return;
228
+ }
229
+ return columns.map(col => ({
230
+ ...col,
231
+ nullable: col.is_nullable === 'YES',
232
+ field_exists: false
233
+ }));
234
+ }
235
+ generateFieldOptions(current) {
236
+ let mappedCurrent;
237
+ if (current) {
238
+ mappedCurrent = {};
239
+ current.forEach(col => {
240
+ mappedCurrent[col.column_name] = col;
241
+ });
242
+ Object.keys(this.schema.model.fields)
243
+ .forEach(name => {
244
+ if (mappedCurrent[name]) {
245
+ mappedCurrent[name].field_exists = true;
246
+ }
247
+ });
248
+ }
249
+ const fields = {};
250
+ Object.entries(this.schema.model.fields)
251
+ .forEach(([name, field]) => {
252
+ const options = this.generateField(name, field, mappedCurrent);
253
+ if (options.length) {
254
+ fields[name] = options;
255
+ }
256
+ });
257
+ return fields;
258
+ }
259
+ generateField(name, $, columns) {
260
+ const type = this.fieldType($);
261
+ const pk = $.name === 'id';
262
+ const nullable = !$.required;
263
+ // Table doesn't exist yet, only option is to create the field
264
+ if (!columns) {
265
+ return [new MigrationField(undefined, $.name, {
266
+ create: { type, pk, nullable }
267
+ })];
268
+ }
269
+ // Table exists, evaluate options
270
+ else {
271
+ // Field exists, alter only what changed
272
+ const column = columns[$.name];
273
+ if (column) {
274
+ if ($.name === 'id') {
275
+ // Id can't be modified for now.
276
+ return [];
277
+ }
278
+ // TODO: check details such as
279
+ // - changes in decimal precision
280
+ // - changes in maxLength
281
+ // - changes in fk (!!!)
282
+ const _type = type.startsWith(column.data_type) ? undefined : column.data_type;
283
+ const _nullable = column.nullable !== nullable ? column.nullable : undefined;
284
+ if (_type !== undefined || _nullable !== undefined) {
285
+ return [new MigrationField(undefined, $.name, {
286
+ alter: { type: _type, nullable: _nullable }
287
+ })];
288
+ }
289
+ return [];
290
+ }
291
+ // If field doesn't exists in columns, it might:
292
+ // - be a new field
293
+ // - be a field of the same type being renamed
294
+ else {
295
+ const options = [];
296
+ options.push(new MigrationField(undefined, $.name, {
297
+ create: { type, pk, nullable }
298
+ }));
299
+ const deletedColumnsOfSameType = Object.values(columns)
300
+ .filter(col => !col.field_exists)
301
+ .filter(col => type.startsWith(col.data_type));
302
+ if (deletedColumnsOfSameType.length) {
303
+ // TODO: check details such as
304
+ // - changes in decimal precision
305
+ // - changes in maxLength
306
+ // - changes in fk (!!!)
307
+ deletedColumnsOfSameType.forEach(col => {
308
+ const _type = type.startsWith(col.data_type) ? undefined : col.data_type;
309
+ const _nullable = col.nullable !== nullable ? col.nullable : undefined;
310
+ if (_type !== undefined || _nullable !== undefined) {
311
+ options.push(new MigrationField(undefined, $.name, {
312
+ alter: { name: col.column_name, type: _type, nullable: _nullable }
313
+ }));
314
+ }
315
+ });
316
+ }
317
+ return options;
318
+ }
319
+ }
320
+ }
321
+ fieldType($) {
322
+ if ($.name === 'id') {
323
+ if ($.type === 'string') {
324
+ return 'character(64) PRIMARY KEY';
325
+ }
326
+ return 'serial4 PRIMARY KEY';
327
+ }
328
+ let type = {
329
+ 'boolean': () => 'boolean',
330
+ 'date': () => 'date',
331
+ 'datetime': () => 'timestamp without time zone',
332
+ 'decimal': () => 'numeric(18,9)', // TODO: read from schema (not stored yet)
333
+ 'dict': () => 'jsonb',
334
+ 'enum': () => 'character(64)', // TODO: read from schema maxLength
335
+ 'file': () => { throw new Error('A file field shouldn\'t be stored on SQL'); },
336
+ 'float': () => 'double precision',
337
+ 'int': () => 'integer',
338
+ 'obj': () => 'jsonb',
339
+ 'string': () => 'character varying', // TODO: char() if maxLength
340
+ 'unknown': () => { throw new Error('An unknown field shouldn\'t be stored on SQL'); },
341
+ }[$.type]();
342
+ if ($.array) {
343
+ type += '[]';
344
+ }
345
+ if ($.required) {
346
+ type += ' NOT NULL';
347
+ }
348
+ return type;
349
+ }
350
+ }
351
+ exports.BucketMigrator = BucketMigrator;
@@ -0,0 +1,21 @@
1
+ import postgres from 'postgres';
2
+ import { Migration } from './migration';
3
+ import { $Space } from "../../../../elements";
4
+ import { MigrationMethod, MigrationStatus } from './runner';
5
+ import { AnyDaemon } from "../../../../engine/daemon";
6
+ export type MigratorConfig = {
7
+ dirpath?: string;
8
+ postgres?: postgres.Options<any>;
9
+ };
10
+ export declare class Migrator<S extends $Space> {
11
+ protected daemon: AnyDaemon;
12
+ private sql;
13
+ dirpath: string;
14
+ static MIGRATION_TABLE_NAME: string;
15
+ status: MigrationStatus;
16
+ private constructor();
17
+ static prepare(daemon: AnyDaemon, sql: postgres.Sql<any>): Promise<Migrator<$Space>>;
18
+ generate(): Promise<Migration[]>;
19
+ generateForBucket<ModuleName extends keyof S['modules']>(module: ModuleName, bucket: keyof S['modules'][ModuleName]['buckets'], tableName: string): Promise<Migration | undefined>;
20
+ static migration<S extends $Space>(...$: ConstructorParameters<typeof MigrationMethod>): MigrationMethod;
21
+ }
@@ -0,0 +1,73 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Migrator = void 0;
4
+ const log_1 = require("../../../../engine/util/log");
5
+ const migration_1 = require("./migration");
6
+ const runner_1 = require("./runner");
7
+ const daemon_1 = require("../../../../engine/daemon");
8
+ const bucket_1 = require("../../../../elements/entities/bucket/bucket");
9
+ const string_1 = require("../../../../engine/util/string");
10
+ class Migrator {
11
+ constructor(daemon, sql, dirpath = './migrations') {
12
+ this.daemon = daemon;
13
+ this.sql = sql;
14
+ this.dirpath = dirpath;
15
+ }
16
+ static async prepare(daemon, sql) {
17
+ const migrator = new Migrator(daemon, sql);
18
+ const oldTable = await migrator.sql `
19
+ SELECT * FROM pg_catalog.pg_tables WHERE tablename = ${Migrator.MIGRATION_TABLE_NAME};
20
+ `;
21
+ if (!oldTable.length) {
22
+ await migrator.sql `CREATE TABLE ${migrator.sql(Migrator.MIGRATION_TABLE_NAME)} (
23
+ id SERIAL PRIMARY KEY,
24
+ name VARCHAR NOT NULL,
25
+ description VARCHAR,
26
+ batch INT4 NOT NULL,
27
+ timestamp TIMESTAMP NOT NULL,
28
+ hash VARCHAR NOT NULL,
29
+ filehash VARCHAR NOT NULL
30
+ )`;
31
+ }
32
+ migrator.status = await runner_1.MigrationRunner.status(migrator.sql, migrator.dirpath);
33
+ return migrator;
34
+ }
35
+ async generate() {
36
+ const modules = daemon_1.Daemon.getModules(this.daemon);
37
+ const migrations = [];
38
+ for (const module of modules) {
39
+ const buckets = daemon_1.Daemon.getModule(this.daemon, module.name).buckets;
40
+ for (const bucket in buckets) {
41
+ const adapter = bucket_1.Bucket.getAdapter(buckets[bucket]);
42
+ if (!adapter?.tableName)
43
+ continue;
44
+ const migration = await this.generateForBucket(module.name, bucket, adapter.tableName);
45
+ if (migration) {
46
+ migrations.push(migration);
47
+ }
48
+ }
49
+ }
50
+ return migrations;
51
+ }
52
+ async generateForBucket(module, bucket, tableName) {
53
+ const migrator = new migration_1.BucketMigrator(this.daemon, this.sql, module, bucket, tableName);
54
+ const migration = await migrator.generate();
55
+ const tag = (0, string_1.colored)(`${module}::bucket:${bucket}`, 'lightcyan');
56
+ if (!migration) {
57
+ log_1.Log.info('migrator', 'bucket', `No changes detected on ${tag}.`);
58
+ return undefined;
59
+ }
60
+ const hash = migration.hash();
61
+ const alreadyExists = this.status.items.find(item => item.hash === hash);
62
+ if (alreadyExists && alreadyExists?.state === 'pending') {
63
+ log_1.Log.warn('migrator', 'bucket', `A similar migration for ${tag} was found pending, ignoring this one.`);
64
+ return undefined;
65
+ }
66
+ return migration;
67
+ }
68
+ static migration(...$) {
69
+ return new runner_1.MigrationMethod(...$);
70
+ }
71
+ }
72
+ exports.Migrator = Migrator;
73
+ Migrator.MIGRATION_TABLE_NAME = '__nesoi_migrations';