nesoi 3.0.8 → 3.0.10

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 (266) hide show
  1. package/lib/compiler/apps/monolyth/monolyth_compiler.d.ts +1 -1
  2. package/lib/compiler/apps/monolyth/monolyth_compiler.js +7 -7
  3. package/lib/compiler/apps/monolyth/stages/1_mkdir_stage.d.ts +3 -0
  4. package/lib/compiler/apps/monolyth/stages/1_mkdir_stage.js +3 -0
  5. package/lib/compiler/apps/monolyth/stages/2_build_typescript_stage.d.ts +3 -0
  6. package/lib/compiler/apps/monolyth/stages/2_build_typescript_stage.js +3 -0
  7. package/lib/compiler/apps/monolyth/stages/3_copy_types_stage.d.ts +3 -0
  8. package/lib/compiler/apps/monolyth/stages/3_copy_types_stage.js +3 -0
  9. package/lib/compiler/apps/monolyth/stages/4_dump_modules_stage.d.ts +3 -0
  10. package/lib/compiler/apps/monolyth/stages/4_dump_modules_stage.js +3 -0
  11. package/lib/compiler/apps/monolyth/stages/5_dump_cli_stage.d.ts +3 -0
  12. package/lib/compiler/apps/monolyth/stages/5_dump_cli_stage.js +3 -0
  13. package/lib/compiler/apps/monolyth/stages/6_dump_package_json_stage.d.ts +3 -0
  14. package/lib/compiler/apps/monolyth/stages/6_dump_package_json_stage.js +3 -0
  15. package/lib/compiler/elements/externals.element.d.ts +1 -1
  16. package/lib/compiler/module.js +1 -1
  17. package/lib/compiler/stages/1_scan_stage.d.ts +3 -0
  18. package/lib/compiler/stages/1_scan_stage.js +3 -0
  19. package/lib/compiler/stages/2_treeshake_stage.d.ts +3 -0
  20. package/lib/compiler/stages/2_treeshake_stage.js +3 -0
  21. package/lib/compiler/stages/3_extract_ts_stage.d.ts +3 -0
  22. package/lib/compiler/stages/3_extract_ts_stage.js +3 -0
  23. package/lib/compiler/stages/4_build_schemas_stage.d.ts +3 -0
  24. package/lib/compiler/stages/4_build_schemas_stage.js +3 -0
  25. package/lib/compiler/stages/5_inject_ts_stage.d.ts +3 -0
  26. package/lib/compiler/stages/5_inject_ts_stage.js +3 -0
  27. package/lib/compiler/stages/6_build_elements_stage.d.ts +3 -0
  28. package/lib/compiler/stages/6_build_elements_stage.js +3 -0
  29. package/lib/compiler/stages/7_dump_stage.d.ts +3 -0
  30. package/lib/compiler/stages/7_dump_stage.js +3 -0
  31. package/lib/compiler/stages/8_diagnose_stage.d.ts +3 -0
  32. package/lib/compiler/stages/8_diagnose_stage.js +3 -0
  33. package/lib/compiler/treeshake.js +3 -3
  34. package/lib/elements/blocks/block.builder.d.ts +6 -2
  35. package/lib/elements/blocks/block.builder.js +8 -4
  36. package/lib/elements/blocks/block.schema.d.ts +4 -0
  37. package/lib/elements/blocks/block.schema.js +4 -0
  38. package/lib/elements/blocks/job/internal/machine_job.builder.d.ts +6 -3
  39. package/lib/elements/blocks/job/internal/machine_job.builder.js +5 -2
  40. package/lib/elements/blocks/job/internal/machine_job.schema.d.ts +4 -0
  41. package/lib/elements/blocks/job/internal/machine_job.schema.js +4 -0
  42. package/lib/elements/blocks/job/internal/resource_job.builder.d.ts +4 -0
  43. package/lib/elements/blocks/job/internal/resource_job.builder.js +4 -0
  44. package/lib/elements/blocks/job/internal/resource_job.d.ts +4 -0
  45. package/lib/elements/blocks/job/internal/resource_job.js +4 -0
  46. package/lib/elements/blocks/job/internal/resource_job.schema.d.ts +4 -0
  47. package/lib/elements/blocks/job/internal/resource_job.schema.js +4 -0
  48. package/lib/elements/blocks/job/job.builder.d.ts +4 -0
  49. package/lib/elements/blocks/job/job.builder.js +4 -0
  50. package/lib/elements/blocks/job/job.d.ts +4 -0
  51. package/lib/elements/blocks/job/job.js +4 -0
  52. package/lib/elements/blocks/job/job.schema.d.ts +4 -0
  53. package/lib/elements/blocks/job/job.schema.js +4 -0
  54. package/lib/elements/blocks/machine/machine.builder.d.ts +4 -0
  55. package/lib/elements/blocks/machine/machine.builder.js +16 -1
  56. package/lib/elements/blocks/machine/machine.d.ts +12 -0
  57. package/lib/elements/blocks/machine/machine.js +12 -0
  58. package/lib/elements/blocks/machine/machine.schema.d.ts +18 -1
  59. package/lib/elements/blocks/machine/machine.schema.js +18 -2
  60. package/lib/elements/blocks/machine/machine_state.builder.d.ts +4 -0
  61. package/lib/elements/blocks/machine/machine_state.builder.js +4 -0
  62. package/lib/elements/blocks/machine/machine_transition.builder.d.ts +4 -0
  63. package/lib/elements/blocks/machine/machine_transition.builder.js +4 -0
  64. package/lib/elements/blocks/queue/adapters/bucket.queue_adapter.d.ts +4 -0
  65. package/lib/elements/blocks/queue/adapters/bucket.queue_adapter.js +4 -0
  66. package/lib/elements/blocks/queue/adapters/queue_adapter.d.ts +4 -0
  67. package/lib/elements/blocks/queue/adapters/queue_adapter.js +4 -0
  68. package/lib/elements/blocks/queue/queue.builder.d.ts +4 -0
  69. package/lib/elements/blocks/queue/queue.builder.js +4 -0
  70. package/lib/elements/blocks/queue/queue.schema.d.ts +4 -0
  71. package/lib/elements/blocks/queue/queue.schema.js +4 -0
  72. package/lib/elements/blocks/resource/resource.builder.d.ts +4 -0
  73. package/lib/elements/blocks/resource/resource.builder.js +4 -0
  74. package/lib/elements/blocks/resource/resource.d.ts +4 -0
  75. package/lib/elements/blocks/resource/resource.js +4 -0
  76. package/lib/elements/blocks/resource/resource.schema.d.ts +4 -0
  77. package/lib/elements/blocks/resource/resource.schema.js +4 -0
  78. package/lib/elements/edge/controller/adapters/cli.controller_adapter.d.ts +4 -0
  79. package/lib/elements/edge/controller/adapters/cli.controller_adapter.js +4 -0
  80. package/lib/elements/edge/controller/adapters/controller_adapter.d.ts +7 -1
  81. package/lib/elements/edge/controller/adapters/controller_adapter.js +6 -1
  82. package/lib/elements/edge/controller/controller.builder.d.ts +16 -0
  83. package/lib/elements/edge/controller/controller.builder.js +16 -0
  84. package/lib/elements/edge/controller/controller.config.d.ts +3 -2
  85. package/lib/elements/edge/controller/controller.d.ts +7 -3
  86. package/lib/elements/edge/controller/controller.js +7 -3
  87. package/lib/elements/edge/controller/controller.schema.d.ts +16 -0
  88. package/lib/elements/edge/controller/controller.schema.js +16 -0
  89. package/lib/elements/{blocks → edge}/externals/externals.builder.d.ts +4 -0
  90. package/lib/elements/{blocks → edge}/externals/externals.builder.js +4 -0
  91. package/lib/elements/{blocks → edge}/externals/externals.schema.d.ts +4 -0
  92. package/lib/elements/{blocks → edge}/externals/externals.schema.js +4 -0
  93. package/lib/elements/entities/bucket/adapters/bucket_adapter.d.ts +18 -12
  94. package/lib/elements/entities/bucket/adapters/bucket_adapter.js +5 -0
  95. package/lib/elements/entities/bucket/adapters/memory.bucket_adapter.d.ts +4 -0
  96. package/lib/elements/entities/bucket/adapters/memory.bucket_adapter.js +4 -0
  97. package/lib/elements/entities/bucket/adapters/memory.nql.d.ts +4 -1
  98. package/lib/elements/entities/bucket/adapters/memory.nql.js +4 -1
  99. package/lib/elements/entities/bucket/bucket.builder.d.ts +4 -0
  100. package/lib/elements/entities/bucket/bucket.builder.js +4 -0
  101. package/lib/elements/entities/bucket/bucket.config.d.ts +3 -3
  102. package/lib/elements/entities/bucket/bucket.d.ts +12 -4
  103. package/lib/elements/entities/bucket/bucket.js +18 -11
  104. package/lib/elements/entities/bucket/bucket.schema.d.ts +4 -0
  105. package/lib/elements/entities/bucket/bucket.schema.js +4 -0
  106. package/lib/elements/entities/bucket/cache/bucket_cache.d.ts +8 -0
  107. package/lib/elements/entities/bucket/cache/bucket_cache.js +8 -0
  108. package/lib/elements/entities/bucket/graph/bucket_graph.builder.d.ts +4 -0
  109. package/lib/elements/entities/bucket/graph/bucket_graph.builder.js +4 -0
  110. package/lib/elements/entities/bucket/graph/bucket_graph.d.ts +4 -0
  111. package/lib/elements/entities/bucket/graph/bucket_graph.js +4 -0
  112. package/lib/elements/entities/bucket/graph/bucket_graph.schema.d.ts +8 -0
  113. package/lib/elements/entities/bucket/graph/bucket_graph.schema.js +8 -0
  114. package/lib/elements/entities/bucket/graph/bucket_graph_link.builder.d.ts +8 -0
  115. package/lib/elements/entities/bucket/graph/bucket_graph_link.builder.js +8 -0
  116. package/lib/elements/entities/bucket/model/bucket_model.builder.d.ts +4 -0
  117. package/lib/elements/entities/bucket/model/bucket_model.builder.js +4 -0
  118. package/lib/elements/entities/bucket/model/bucket_model.convert.d.ts +8 -0
  119. package/lib/elements/entities/bucket/model/bucket_model.convert.js +8 -0
  120. package/lib/elements/entities/bucket/model/bucket_model.schema.d.ts +8 -0
  121. package/lib/elements/entities/bucket/model/bucket_model.schema.js +8 -0
  122. package/lib/elements/entities/bucket/model/bucket_model_field.builder.d.ts +8 -0
  123. package/lib/elements/entities/bucket/model/bucket_model_field.builder.js +8 -0
  124. package/lib/elements/entities/bucket/query/nql_compiler.d.ts +9 -0
  125. package/lib/elements/entities/bucket/query/nql_compiler.js +9 -0
  126. package/lib/elements/entities/bucket/query/nql_engine.d.ts +6 -0
  127. package/lib/elements/entities/bucket/query/nql_engine.js +6 -0
  128. package/lib/elements/entities/bucket/view/bucket_view.builder.d.ts +4 -0
  129. package/lib/elements/entities/bucket/view/bucket_view.builder.js +4 -0
  130. package/lib/elements/entities/bucket/view/bucket_view.d.ts +4 -0
  131. package/lib/elements/entities/bucket/view/bucket_view.js +10 -2
  132. package/lib/elements/entities/bucket/view/bucket_view.schema.d.ts +8 -0
  133. package/lib/elements/entities/bucket/view/bucket_view.schema.js +8 -0
  134. package/lib/elements/entities/bucket/view/bucket_view_field.builder.d.ts +8 -0
  135. package/lib/elements/entities/bucket/view/bucket_view_field.builder.js +8 -0
  136. package/lib/elements/entities/constants/constants.builder.d.ts +21 -6
  137. package/lib/elements/entities/constants/constants.builder.js +21 -6
  138. package/lib/elements/entities/constants/constants.d.ts +4 -0
  139. package/lib/elements/entities/constants/constants.js +4 -0
  140. package/lib/elements/entities/constants/constants.schema.d.ts +16 -0
  141. package/lib/elements/entities/constants/constants.schema.js +16 -0
  142. package/lib/elements/entities/drive/drive_adapter.d.ts +15 -10
  143. package/lib/elements/entities/drive/drive_adapter.js +5 -2
  144. package/lib/elements/entities/drive/local.drive_adapter.d.ts +10 -4
  145. package/lib/elements/entities/drive/local.drive_adapter.js +23 -8
  146. package/lib/elements/entities/message/message.builder.d.ts +4 -0
  147. package/lib/elements/entities/message/message.builder.js +4 -0
  148. package/lib/elements/entities/message/message.d.ts +4 -0
  149. package/lib/elements/entities/message/message.js +4 -0
  150. package/lib/elements/entities/message/message.schema.d.ts +4 -0
  151. package/lib/elements/entities/message/message.schema.js +4 -0
  152. package/lib/elements/entities/message/message_parser.d.ts +4 -0
  153. package/lib/elements/entities/message/message_parser.js +4 -0
  154. package/lib/elements/entities/message/template/message_template.builder.d.ts +4 -0
  155. package/lib/elements/entities/message/template/message_template.builder.js +4 -0
  156. package/lib/elements/entities/message/template/message_template.schema.d.ts +9 -0
  157. package/lib/elements/entities/message/template/message_template.schema.js +25 -0
  158. package/lib/elements/entities/message/template/message_template_field.builder.d.ts +8 -0
  159. package/lib/elements/entities/message/template/message_template_field.builder.js +8 -0
  160. package/lib/elements/index.d.ts +1 -1
  161. package/lib/elements/index.js +1 -1
  162. package/lib/engine/apps/app.config.d.ts +15 -11
  163. package/lib/engine/apps/app.config.js +3 -0
  164. package/lib/engine/apps/app.d.ts +12 -20
  165. package/lib/engine/apps/app.js +13 -10
  166. package/lib/engine/apps/inline.app.d.ts +12 -8
  167. package/lib/engine/apps/inline.app.js +27 -24
  168. package/lib/engine/apps/monolyth/monolyth.app.d.ts +13 -5
  169. package/lib/engine/apps/monolyth/monolyth.app.js +14 -6
  170. package/lib/engine/apps/service.d.ts +30 -0
  171. package/lib/engine/apps/service.js +15 -0
  172. package/lib/engine/auth/authn.d.ts +14 -1
  173. package/lib/engine/auth/authn.js +4 -0
  174. package/lib/engine/auth/zero.authn_provider.d.ts +11 -3
  175. package/lib/engine/auth/zero.authn_provider.js +13 -2
  176. package/lib/engine/cli/cli.d.ts +8 -2
  177. package/lib/engine/cli/cli.js +10 -1
  178. package/lib/engine/cli/cli_adapter.d.ts +11 -1
  179. package/lib/engine/cli/cli_adapter.js +10 -1
  180. package/lib/engine/cli/cli_input.d.ts +4 -0
  181. package/lib/engine/cli/cli_input.js +4 -0
  182. package/lib/engine/cli/ui.d.ts +14 -2
  183. package/lib/engine/cli/ui.js +10 -6
  184. package/lib/engine/daemon.d.ts +96 -9
  185. package/lib/engine/daemon.js +101 -18
  186. package/lib/engine/data/date.d.ts +4 -0
  187. package/lib/engine/data/date.js +4 -0
  188. package/lib/engine/data/datetime.d.ts +4 -0
  189. package/lib/engine/data/datetime.js +4 -0
  190. package/lib/engine/data/decimal.d.ts +4 -0
  191. package/lib/engine/data/decimal.js +4 -0
  192. package/lib/engine/data/file.d.ts +23 -23
  193. package/lib/engine/data/file.js +66 -29
  194. package/lib/engine/data/json.d.ts +4 -0
  195. package/lib/engine/data/json.js +4 -0
  196. package/lib/engine/data/tree.d.ts +4 -0
  197. package/lib/engine/data/tree.js +4 -0
  198. package/lib/engine/dependency.d.ts +65 -3
  199. package/lib/engine/dependency.js +70 -0
  200. package/lib/engine/module.d.ts +110 -8
  201. package/lib/engine/module.js +131 -31
  202. package/lib/engine/space.d.ts +163 -10
  203. package/lib/engine/space.js +184 -22
  204. package/lib/engine/transaction/nodes/bucket.trx_node.d.ts +12 -0
  205. package/lib/engine/transaction/nodes/bucket.trx_node.js +13 -2
  206. package/lib/engine/transaction/nodes/bucket_query.trx_node.d.ts +4 -0
  207. package/lib/engine/transaction/nodes/bucket_query.trx_node.js +9 -10
  208. package/lib/engine/transaction/nodes/job.trx_node.d.ts +4 -0
  209. package/lib/engine/transaction/nodes/job.trx_node.js +6 -4
  210. package/lib/engine/transaction/nodes/machine.trx_node.d.ts +4 -0
  211. package/lib/engine/transaction/nodes/machine.trx_node.js +6 -4
  212. package/lib/engine/transaction/nodes/queue.trx_node.d.ts +4 -0
  213. package/lib/engine/transaction/nodes/queue.trx_node.js +5 -2
  214. package/lib/engine/transaction/nodes/resource.trx_node.d.ts +4 -0
  215. package/lib/engine/transaction/nodes/resource.trx_node.js +6 -4
  216. package/lib/engine/transaction/trx.d.ts +14 -4
  217. package/lib/engine/transaction/trx.js +10 -1
  218. package/lib/engine/transaction/trx_engine.config.d.ts +2 -2
  219. package/lib/engine/transaction/trx_engine.d.ts +8 -3
  220. package/lib/engine/transaction/trx_engine.js +24 -20
  221. package/lib/engine/transaction/trx_node.d.ts +8 -2
  222. package/lib/engine/transaction/trx_node.js +17 -1
  223. package/lib/engine/tree.d.ts +54 -2
  224. package/lib/engine/tree.js +60 -19
  225. package/lib/engine/util/mime.d.ts +4 -4
  226. package/lib/engine/util/mime.js +7 -9
  227. package/lib/schema.d.ts +2 -2
  228. package/package.json +2 -3
  229. package/tools/joaquin/job.js +2 -2
  230. package/tools/joaquin/message.js +2 -2
  231. package/tools/joaquin/mock.d.ts +6 -6
  232. package/tsconfig.build.tsbuildinfo +1 -1
  233. package/lib/adapters/postgres/src/migrator/bucket.d.ts +0 -20
  234. package/lib/adapters/postgres/src/migrator/bucket.js +0 -184
  235. package/lib/adapters/postgres/src/migrator/csv.d.ts +0 -7
  236. package/lib/adapters/postgres/src/migrator/csv.js +0 -72
  237. package/lib/adapters/postgres/src/migrator/database.d.ts +0 -37
  238. package/lib/adapters/postgres/src/migrator/database.js +0 -88
  239. package/lib/adapters/postgres/src/migrator/index.d.ts +0 -1
  240. package/lib/adapters/postgres/src/migrator/index.js +0 -5
  241. package/lib/adapters/postgres/src/migrator/migration.d.ts +0 -57
  242. package/lib/adapters/postgres/src/migrator/migration.js +0 -203
  243. package/lib/adapters/postgres/src/migrator/migrator.d.ts +0 -21
  244. package/lib/adapters/postgres/src/migrator/migrator.js +0 -76
  245. package/lib/adapters/postgres/src/migrator/runner.d.ts +0 -71
  246. package/lib/adapters/postgres/src/migrator/runner.js +0 -271
  247. package/lib/adapters/postgres/src/postgres.bucket_adapter.d.ts +0 -42
  248. package/lib/adapters/postgres/src/postgres.bucket_adapter.js +0 -294
  249. package/lib/adapters/postgres/src/postgres.cli.d.ts +0 -66
  250. package/lib/adapters/postgres/src/postgres.cli.js +0 -184
  251. package/lib/adapters/postgres/src/postgres.config.d.ts +0 -5
  252. package/lib/adapters/postgres/src/postgres.config.js +0 -2
  253. package/lib/adapters/postgres/src/postgres.nql.d.ts +0 -16
  254. package/lib/adapters/postgres/src/postgres.nql.js +0 -123
  255. package/lib/adapters/postgres/src/postgres.provider.d.ts +0 -18
  256. package/lib/adapters/postgres/src/postgres.provider.js +0 -77
  257. package/lib/adapters/postgres/test/postgres.bucket_adapter.test.d.ts +0 -1
  258. package/lib/adapters/postgres/test/postgres.bucket_adapter.test.js +0 -210
  259. package/lib/elements/entities/bucket/adapters/memory.bucket_query copy.d.ts +0 -0
  260. package/lib/elements/entities/bucket/adapters/memory.bucket_query copy.js +0 -218
  261. package/lib/elements/entities/bucket/adapters/slow_memory.bucket_adapter.d.ts +0 -0
  262. package/lib/elements/entities/bucket/adapters/slow_memory.bucket_adapter.js +0 -47
  263. package/lib/engine/apps/monolyth/monolyth.cli.d.ts +0 -45
  264. package/lib/engine/apps/monolyth/monolyth.cli.js +0 -362
  265. package/lib/engine/util/cache.d.ts +0 -6
  266. package/lib/engine/util/cache.js +0 -20
@@ -52,17 +52,34 @@ const bucket_1 = require("../elements/entities/bucket/bucket");
52
52
  const constants_schema_1 = require("../elements/entities/constants/constants.schema");
53
53
  const constants_builder_1 = require("../elements/entities/constants/constants.builder");
54
54
  const controller_builder_1 = require("../elements/edge/controller/controller.builder");
55
- const externals_builder_1 = require("../elements/blocks/externals/externals.builder");
55
+ const externals_builder_1 = require("../elements/edge/externals/externals.builder");
56
56
  const error_1 = require("./data/error");
57
- const externals_schema_1 = require("../elements/blocks/externals/externals.schema");
57
+ const externals_schema_1 = require("../elements/edge/externals/externals.schema");
58
58
  const app_1 = require("./apps/app");
59
59
  const queue_builder_1 = require("../elements/blocks/queue/queue.builder");
60
60
  const nql_engine_1 = require("../elements/entities/bucket/query/nql_engine");
61
61
  const daemon_1 = require("./daemon");
62
+ /**
63
+ * A `Module` is an isolated named collection of _Elements_.
64
+ *
65
+ * Modules should be designed to work in isolation as much as possible.
66
+ * When declaring external dependencies, these can be injected into the
67
+ * module or linked externally through REST or other means.
68
+ *
69
+ * Each `Module` has a _Transaction Engine_, which keeps track of
70
+ * transactions performed with the Module elements.
71
+ * Transactions can be shared between engines, to allow for a tracking
72
+ * of distributed applications.
73
+ *
74
+ * @category Engine
75
+ */
62
76
  class Module {
77
+ /**
78
+ * @param name A module name
79
+ * @param boot The boot source for this module
80
+ */
63
81
  constructor(name, boot) {
64
82
  this.name = name;
65
- // Schemas built by this module
66
83
  this.schema = {
67
84
  constants: new constants_schema_1.$Constants(this.name),
68
85
  externals: new externals_schema_1.$Externals(this.name),
@@ -87,6 +104,9 @@ class Module {
87
104
  this.schema.name = name;
88
105
  this.boot = boot;
89
106
  }
107
+ /**
108
+ * Log the module elements
109
+ */
90
110
  info() {
91
111
  log_1.Log.info('module', this.name, 'Loaded', {
92
112
  values: Object.keys(this.schema.constants.values),
@@ -101,6 +121,14 @@ class Module {
101
121
  });
102
122
  }
103
123
  // Manual injection
124
+ /**
125
+ * Inject element schemas into the module.
126
+ * This is used on the compiled version of the `App`, which has
127
+ * the schemas pre-built, so it directly injects them.
128
+ *
129
+ * @param schemas A dictionary of schema(s) by element type
130
+ * @returns The `Module`, for call-chaining
131
+ */
104
132
  inject(schemas) {
105
133
  if (schemas.externals) {
106
134
  externals_schema_1.$Externals.merge(this.schema.externals, schemas.externals);
@@ -131,9 +159,19 @@ class Module {
131
159
  });
132
160
  return this;
133
161
  }
134
- injectDependencies(daemon, dependencies) {
162
+ /**
163
+ * Include references for external elements on the module.
164
+ * This allows a module to use elements from other modules directly,
165
+ * on single-threaded `Apps`.
166
+ * This implementation also includes transitive dependencies.
167
+ *
168
+ * @param daemon A `Daemon` instance
169
+ * @param dependencies: A dictionary of dependencies by element type
170
+ * @returns The `Module`, for call-chaining
171
+ */
172
+ injectDependencies(modules, dependencies) {
135
173
  dependencies.buckets?.forEach(dep => {
136
- const bucketModule = daemon_1.Daemon.getModule(daemon, dep.module);
174
+ const bucketModule = modules[dep.module];
137
175
  const bucket = bucketModule.buckets[dep.name];
138
176
  if (!bucket) {
139
177
  throw new Error(`Internal Error: unable to find bucket '${dep.tag}' during injection to module '${this.name}'`);
@@ -141,15 +179,19 @@ class Module {
141
179
  this.buckets[dep.refName] = bucket;
142
180
  });
143
181
  dependencies.jobs?.forEach(dep => {
144
- const jobModule = daemon_1.Daemon.getModule(daemon, dep.module);
182
+ const jobModule = modules[dep.module];
145
183
  const job = jobModule.jobs[dep.name];
146
184
  if (!job) {
147
185
  throw new Error(`Internal Error: unable to find job '${dep.tag}' during injection to module '${this.name}'`);
148
186
  }
149
187
  this.jobs[dep.refName] = job;
188
+ const schema = job.schema;
189
+ this.injectDependencies(modules, {
190
+ messages: schema.input
191
+ });
150
192
  });
151
193
  dependencies.messages?.forEach(dep => {
152
- const messageModule = daemon_1.Daemon.getModule(daemon, dep.module);
194
+ const messageModule = modules[dep.module];
153
195
  const message = messageModule.messages[dep.name];
154
196
  if (!message) {
155
197
  throw new Error(`Internal Error: unable to find message '${dep.tag}' during injection to module '${this.name}'`);
@@ -157,21 +199,34 @@ class Module {
157
199
  this.messages[dep.refName] = message;
158
200
  });
159
201
  dependencies.machines?.forEach(dep => {
160
- const machineModule = daemon_1.Daemon.getModule(daemon, dep.module);
202
+ const machineModule = modules[dep.module];
161
203
  const machine = machineModule.machines[dep.name];
162
204
  if (!machine) {
163
205
  throw new Error(`Internal Error: unable to find machine '${dep.tag}' during injection to module '${this.name}'`);
164
206
  }
165
207
  this.machines[dep.refName] = machine;
208
+ const schema = machine.schema;
209
+ this.injectDependencies(modules, {
210
+ messages: schema.input,
211
+ buckets: schema.buckets,
212
+ jobs: schema.jobs
213
+ });
166
214
  });
167
215
  return this;
168
216
  }
169
217
  // Treeshaking
170
- scanFiles(dir, exclude = []) {
218
+ /**
219
+ * Recursively find all files inside the module dir.
220
+ *
221
+ * @param dirpath A directory to scan
222
+ * @param exclude: A list of patterns to ignore
223
+ * @returns A list of file paths
224
+ */
225
+ scanFiles(dirpath, exclude = []) {
171
226
  const files = [];
172
- fs.readdirSync(dir, { withFileTypes: true })
227
+ fs.readdirSync(dirpath, { withFileTypes: true })
173
228
  .forEach(node => {
174
- const nodePath = path.resolve(dir, node.name);
229
+ const nodePath = path.resolve(dirpath, node.name);
175
230
  // TODO: Wildcards, this is just ugly
176
231
  for (const path of exclude) {
177
232
  if (nodePath.endsWith(path.slice(1))) {
@@ -192,6 +247,14 @@ class Module {
192
247
  return files;
193
248
  }
194
249
  // Build Nodes
250
+ /**
251
+ * Build a resolved builder node, then merge the
252
+ * resulting schema(s) to the module.
253
+ * This also merges the resulting inline nodes of building a node.
254
+ *
255
+ * @param node A resolved builder node
256
+ * @param tree A module tree
257
+ */
195
258
  async buildNode(node, tree) {
196
259
  log_1.Log.trace('compiler', 'module', `Building ${this.name}::${(0, log_1.scopeTag)(node.builder.$b, node.builder.name)}`);
197
260
  if (node.builder.$b === 'constants') {
@@ -209,19 +272,19 @@ class Module {
209
272
  else if (node.builder.$b === 'job') {
210
273
  const { schema, inlineMessages } = job_builder_1.JobBuilder.build(node, tree, this.schema);
211
274
  this.schema.jobs[node.name] = schema;
212
- this.mergeInlineMessages(node, inlineMessages);
275
+ this.mergeInlineMessages(inlineMessages);
213
276
  }
214
277
  else if (node.builder.$b === 'resource') {
215
278
  const { schema, inlineMessages, inlineJobs } = resource_builder_1.ResourceBuilder.build(node, tree, this.schema);
216
279
  this.schema.resources[schema.name] = schema;
217
- this.mergeInlineMessages(node, inlineMessages);
218
- this.mergeInlineJobs(node, inlineJobs);
280
+ this.mergeInlineMessages(inlineMessages);
281
+ this.mergeInlineJobs(inlineJobs);
219
282
  }
220
283
  else if (node.builder.$b === 'machine') {
221
284
  const { schema, inlineMessages, inlineJobs } = machine_builder_1.MachineBuilder.build(node, tree, this.schema);
222
285
  this.schema.machines[schema.name] = schema;
223
- this.mergeInlineMessages(node, inlineMessages);
224
- this.mergeInlineJobs(node, inlineJobs);
286
+ this.mergeInlineMessages(inlineMessages);
287
+ this.mergeInlineJobs(inlineJobs);
225
288
  }
226
289
  else if (node.builder.$b === 'controller') {
227
290
  this.schema.controllers[node.name] = controller_builder_1.ControllerBuilder.build(node);
@@ -229,31 +292,49 @@ class Module {
229
292
  else if (node.builder.$b === 'queue') {
230
293
  const { schema, inlineMessages } = queue_builder_1.QueueBuilder.build(node, tree, this.schema);
231
294
  this.schema.queues[node.name] = schema;
232
- this.mergeInlineMessages(node, inlineMessages);
295
+ this.mergeInlineMessages(inlineMessages);
233
296
  }
234
297
  else {
235
298
  throw error_1.NesoiError.Module.UnknownBuilderType(this, node.filepath.toString(), node.name, node.builder.$b);
236
299
  }
237
300
  }
238
- mergeInlineMessages(node, schemas) {
301
+ /**
302
+ * Merge inline message schemas into the module.
303
+ *
304
+ * @param node A resolved builder node
305
+ * @param schemas A dictionary of Message schemas by name
306
+ */
307
+ mergeInlineMessages(schemas) {
239
308
  for (const name in schemas) {
240
309
  const $msg = schemas[name];
241
310
  this.schema.messages[name] = $msg;
242
311
  }
243
312
  }
244
- mergeInlineJobs(node, schemas) {
313
+ /**
314
+ * Merge inline job schemas into the module.
315
+ *
316
+ * @param node A resolved builder node
317
+ * @param schemas A dictionary of job schemas by name
318
+ */
319
+ mergeInlineJobs(schemas) {
245
320
  for (const name in schemas) {
246
321
  const $job = schemas[name];
247
322
  this.schema.jobs[name] = $job;
248
323
  }
249
324
  }
250
325
  // Start
251
- start(app, providers) {
326
+ /**
327
+ * Create elements from schemas, and the NQL engine for this module.
328
+ *
329
+ * @param app A `App` instance
330
+ * @param services A dictionary of services by name
331
+ */
332
+ start(app, services) {
252
333
  const info = app_1.App.getInfo(app);
253
334
  const config = info.config;
254
335
  Object.entries(this.schema.buckets).forEach(([name, schema]) => {
255
336
  const bucketConfig = config.buckets?.[this.name]?.[name];
256
- this.buckets[name] = new bucket_1.Bucket(schema, bucketConfig, providers);
337
+ this.buckets[name] = new bucket_1.Bucket(schema, bucketConfig, services);
257
338
  });
258
339
  Object.entries(this.schema.messages).forEach(([name, schema]) => {
259
340
  this.messages[name] = new message_parser_1.MessageParser(schema);
@@ -269,7 +350,7 @@ class Module {
269
350
  });
270
351
  Object.entries(this.schema.controllers).forEach(([name, schema]) => {
271
352
  const controllerConfig = config.controllers?.[this.name]?.[name];
272
- this.controllers[name] = new controller_1.Controller(this, schema, controllerConfig, providers);
353
+ this.controllers[name] = new controller_1.Controller(this, schema, controllerConfig, services);
273
354
  });
274
355
  Object.entries(this.schema.queues).forEach(([name, schema]) => {
275
356
  this.queues[name] = new queue_1.Queue(this, schema);
@@ -277,43 +358,58 @@ class Module {
277
358
  this.nql = new nql_engine_1.NQL_Engine(this);
278
359
  }
279
360
  // Destroy
361
+ /**
362
+ * Destroy all elements from module.
363
+ */
280
364
  destroy() {
281
365
  // Destroy messages
282
366
  for (const name in this.messages || []) {
283
- this.destroyBlock('message', name);
367
+ this.destroyElement('message', name);
284
368
  }
285
369
  // Destroy buckets
286
370
  for (const name in this.buckets || {}) {
287
- this.destroyBlock('bucket', name);
371
+ this.destroyElement('bucket', name);
288
372
  }
289
373
  // Destroy jobs
290
374
  for (const name in this.jobs || []) {
291
- this.destroyBlock('job', name);
375
+ this.destroyElement('job', name);
292
376
  }
293
377
  // Destroy resources
294
378
  for (const name in this.resources || []) {
295
- this.destroyBlock('resource', name);
379
+ this.destroyElement('resource', name);
296
380
  }
297
381
  // Destroy machines
298
382
  for (const name in this.machines || []) {
299
- this.destroyBlock('machine', name);
383
+ this.destroyElement('machine', name);
300
384
  }
301
385
  // Destroy queues
302
386
  for (const name in this.queues || []) {
303
- this.destroyBlock('queue', name);
387
+ this.destroyElement('queue', name);
304
388
  }
305
389
  // Destroy controllers
306
390
  for (const name in this.controllers || []) {
307
- this.destroyBlock('controller', name);
391
+ this.destroyElement('controller', name);
308
392
  }
309
393
  }
310
- async destroyBlock(type, name) {
394
+ /**
395
+ * Destroy one element from module.
396
+ */
397
+ async destroyElement(type, name) {
311
398
  const t = type + 's';
312
399
  log_1.Log.info('module', this.name, 'Destroying');
313
400
  delete this.schema[t][name];
314
401
  delete this[t][name];
315
402
  }
316
403
  // Virtual
404
+ /**
405
+ * Create a virtual module from a definition.
406
+ * A virtual module can be used to dynamically create
407
+ * and use schemas with limited access to the application elements.
408
+ *
409
+ * @param daemon A `Daemon` instance
410
+ * @param def A definition for a Virtual Module
411
+ * @returns A `Module` instance
412
+ */
317
413
  static async virtual(daemon, def) {
318
414
  const virtualModule = new Module(def.name, { builders: [] });
319
415
  // Inject schemas
@@ -324,7 +420,11 @@ class Module {
324
420
  await virtualModule.start({ config: {} }, {});
325
421
  // Inject externals
326
422
  if (def.externals) {
327
- virtualModule.injectDependencies(daemon, def.externals);
423
+ const modules = {};
424
+ daemon_1.Daemon.getModules(daemon).forEach(module => {
425
+ modules[module.name] = module;
426
+ });
427
+ virtualModule.injectDependencies(modules, def.externals);
328
428
  }
329
429
  return virtualModule;
330
430
  }
@@ -1,7 +1,7 @@
1
1
  import { $Module, $Space } from "../schema";
2
2
  import { MachineBuilder } from "../elements/blocks/machine/machine.builder";
3
3
  import { ConstantsBuilder } from "../elements/entities/constants/constants.builder";
4
- import { ExternalsBuilder } from "../elements/blocks/externals/externals.builder";
4
+ import { ExternalsBuilder } from "../elements/edge/externals/externals.builder";
5
5
  import { JobBuilder } from "../elements/blocks/job/job.builder";
6
6
  import { MessageBuilder } from "../elements/entities/message/message.builder";
7
7
  import { ResourceBuilder } from "../elements/blocks/resource/resource.builder";
@@ -9,47 +9,200 @@ import { ControllerBuilder } from "../elements/edge/controller/controller.builde
9
9
  import { BucketBuilder } from "../elements/entities/bucket/bucket.builder";
10
10
  import { $Message } from "../elements/entities/message/message.schema";
11
11
  import { BucketModelDef } from "../elements/entities/bucket/model/bucket_model.builder";
12
- import { BucketModelInfer } from "../elements/entities/bucket/model/bucket_model.infer";
13
12
  import { QueueBuilder } from "../elements/blocks/queue/queue.builder";
14
13
  import { $Bucket, $Job, $Resource } from "../elements";
14
+ /**
15
+ * When using Nesoi as a framework (not a library), the `Space`
16
+ * is a collection of all modules.
17
+ * The name comes from the linear algebra notion of 'vector space'.
18
+ * It's the 'module space', where all past and future modules exist.
19
+ *
20
+ * The `Space` is mainly used to:
21
+ * - Declare builders which reference the compiled schemas with a minimal syntax
22
+ * - Read modules from the directory structure to compile schemas and apps
23
+ *
24
+ * @category Engine
25
+ */
15
26
  export declare class Space<$ extends $Space> {
16
- private dirname;
27
+ private dirpath;
17
28
  private _authn;
18
29
  private _name;
19
- constructor(dirname: string);
20
30
  /**
21
- * Space Settings
22
- * - Name
23
- * - Authentication
31
+ * @param dirpath The path for the Space root directory
32
+ */
33
+ constructor(dirpath: string);
34
+ /**
35
+ * Set a custom Space name. The default is 'Space'.
36
+ * > This method MUST be called on the root `nesoi.ts` file.
37
+ * @param name A new Space name
38
+ * @returns The current Space, for call-chaining
24
39
  */
25
40
  name(name: string): this;
26
- authn<Name extends string, Def extends BucketModelDef<$, never>, Obj = BucketModelInfer<Def>>(name: Name, $: Def): this;
27
- externals<M extends keyof $['modules']>(module: M): ExternalsBuilder<$, M>;
41
+ /**
42
+ * Set one authentication model.
43
+ * This model MUST be yielded by the `AuthnProvider` assigned
44
+ * to the same name.
45
+ * > This method MUST be called on the root `nesoi.ts` file.
46
+ * @param name A name for the authentication
47
+ * @returns The current Space, for call-chaining
48
+ */
49
+ authn<Name extends string, Def extends BucketModelDef<$, never>>(name: Name, $: Def): this;
50
+ /**
51
+ * > Elements / Entities / Constants
52
+ *
53
+ * `Constants` represent statically-known data, namely `values` and `enums`,
54
+ * which can be referenced from any `Module`.
55
+ *
56
+ * @param module A module name
57
+ * @returns A `Constants` builder
58
+ */
28
59
  constants<M extends keyof $['modules']>(module: M): ConstantsBuilder;
60
+ /**
61
+ * > Elements / Entities / Bucket
62
+ *
63
+ * A `Bucket` represents stored data, on any kind of storage.
64
+ * It contains a definition of the type of data (_model_),
65
+ * the relations between this data and other (_graph_),
66
+ * and different ways to present this data (_view_).
67
+ *
68
+ * The actual storage is linked through a `BucketAdapter`, on the
69
+ * `App` definition. Which means you build a _Bucket_ without
70
+ * knowing how it's data will be stored, and then later plug
71
+ * any adapter (like Memory, or PostgreSQL, etc) into it.
72
+ *
73
+ * @param globalName A _Bucket_ name in the format `module::name`
74
+ * @returns A `Bucket` builder
75
+ */
29
76
  bucket<M extends keyof $['modules'], K extends string, Module extends $Module = $['modules'][M]>(globalName: `${M & string}::${K}`): BucketBuilder<$, Module, $Bucket & {
30
77
  name: K;
31
78
  }>;
79
+ /**
80
+ * > Elements / Entities / Message
81
+ *
82
+ * A `Message` represents data in transit (generally incoming).
83
+ * It contains a definition of the data format (_template_),
84
+ * which includes possibly complex validation rules.
85
+ *
86
+ * This _template_ is used to _parse_ an object into the message format,
87
+ * so a _Message_ has two states: `raw` and `parsed`.
88
+ * - `raw`: A JS object containing a `$` with the message name plus some other properties
89
+ * - `parsed`: A `Message` object containing the parsed data plus some metadata (signature, etc)
90
+ *
91
+ * @param globalName A message name in the format `module::name`
92
+ * @returns A `Constants` builder
93
+ */
32
94
  message<M extends keyof $['modules'], K extends string, Module extends $Module = $['modules'][M]>(globalName: `${M & string}::${K}`): MessageBuilder<$, Module, $Message & {
33
95
  name: K;
34
96
  }>;
97
+ /**
98
+ * > Elements / Blocks / Job
99
+ *
100
+ * A `Job` is a method which accepts one or more _Messages_ as input.
101
+ *
102
+ * It might declare _extra_ data to include on the job input, and
103
+ * conditions which must be met before the method is executed.
104
+ * These can be pre-validate a Job before queuing it, or for
105
+ * organizing the job flow in a more declarative way.
106
+ *
107
+ * This method has access to all elements within it's module.
108
+ *
109
+ * @param globalName A _Job_ name in the format `module::name`
110
+ * @returns A `Job` builder
111
+ */
35
112
  job<M extends keyof $['modules'], K extends string, Module extends $Module = $['modules'][M]>(globalName: `${M & string}::${K}`): JobBuilder<$, Module, $Job & {
36
113
  name: K;
37
114
  }, {}>;
115
+ /**
116
+ * > Elements / Blocks / Resource
117
+ *
118
+ * A `Resource` is a fast way to declare simple CRUD _Jobs_ and _Messages_ for a `Bucket`.
119
+ *
120
+ * It offers 5 types of jobs:
121
+ * - `view`: Read one or all bucket object(s) through a specific view
122
+ * - `query`: Query bucket object(s)
123
+ * - `create`: Create one object on the bucket
124
+ * - `update`: Modify (patch) one object of the bucket
125
+ * - `delete`: Delete one object of the bucket
126
+ *
127
+ * @param globalName A _Resource_ name in the format `module::name`
128
+ * @returns A `Resource` builder
129
+ */
38
130
  resource<M extends keyof $['modules'], K extends string, Module extends $Module = $['modules'][M]>(globalName: `${M & string}::${K}`): ResourceBuilder<$, Module, $Resource & {
39
131
  name: K;
40
132
  }>;
133
+ /**
134
+ * > Elements / Blocks / Machine
135
+ *
136
+ * A `Machine` is a _Statechart_ which reads it's context from a _Bucket_,
137
+ * and uses a specific property to store a discrete state.
138
+ * When this machine receives _Messages_, it follows the definition to possibly
139
+ * advance the state and run _Jobs_.
140
+ *
141
+ * @param globalName A _Machine_ name in the format `module::name`
142
+ * @returns A `Machine` builder
143
+ */
41
144
  machine<M extends keyof $['modules'], K extends string, Module extends $Module = $['modules'][M]>(globalName: `${M & string}::${K}`): MachineBuilder<$, Module, K, Module["machines"][K] & {
42
145
  name: K;
43
146
  }>;
44
- controller<M extends keyof $['modules'], K extends string, Module extends $Module = $['modules'][M]>(globalName: `${M & string}::${K}`): ControllerBuilder<$, Module>;
147
+ /**
148
+ * > Elements / Blocks / Queue
149
+ *
150
+ * A `Queue` stores _Messages_ to be consumed later in order.
151
+ *
152
+ * @param globalName A _Queue_ name in the format `module::name`
153
+ * @returns A `Queue` builder
154
+ */
45
155
  queue<M extends keyof $['modules'], K extends string, Module extends $Module = $['modules'][M]>(globalName: `${M & string}::${K}`): QueueBuilder<$, Module, Module["queues"][K] & {
46
156
  name: K;
47
157
  }>;
48
158
  /**
159
+ * > Elements / Edge / Externals
160
+ *
161
+ * `Externals` references elements from other modules, allowing
162
+ * them to be used by Jobs and other elements from this module.
163
+ *
164
+ * @param module A module name
165
+ * @returns A `Externals` builder
166
+ */
167
+ externals<M extends keyof $['modules']>(module: M): ExternalsBuilder<$, M>;
168
+ /**
169
+ * > Elements / Edge / Controller
170
+ *
171
+ * A `Controller` allows an external application to send
172
+ * and receive messages /from the Nesoi Engine.
173
+ *
174
+ * The controller declares endpoints which accept specific messages
175
+ * and route them to specific elements.
176
+ * On the `App`, each controller is assigned a `ControllerAdapter`, which
177
+ * is responsible for creating the raw _Messages_ and sending them to the Engine.
178
+ *
179
+ * @param globalName A _Controller_ name in the format `module::name`
180
+ * @returns A `Controller` builder
181
+ */
182
+ controller<M extends keyof $['modules'], K extends string, Module extends $Module = $['modules'][M]>(globalName: `${M & string}::${K}`): ControllerBuilder<$, Module>;
183
+ /**
184
+ * Resolve a path relative to the Space root.
49
185
  *
186
+ * @param space A `Space` instance
187
+ * @param relPath One or many path terms
188
+ * @returns A resolved path
50
189
  */
51
190
  static path(space: Space<any>, ...relPath: string[]): string;
191
+ /**
192
+ * Return a path relative to the Space root given an absolute path.
193
+ *
194
+ * @param space A `Space` instance
195
+ * @param relPath One or many path terms
196
+ * @returns A resolved path
197
+ */
52
198
  static relPath(space: Space<any>, absPath: string): string;
199
+ /**
200
+ * Read all module directories from the Space root, then
201
+ * run a callback for each.
202
+ *
203
+ * @param space A `Space` instance
204
+ * @param buildFn A callback to run for each module directory
205
+ */
53
206
  static scan(space: Space<any>, buildFn: (name: string, path: string) => void): void;
54
207
  }
55
208
  export type AnySpace = Space<$Space>;