nesoi 3.0.8 → 3.0.9

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 (254) hide show
  1. package/lib/adapters/postgres/src/migrator/database.d.ts +3 -6
  2. package/lib/adapters/postgres/src/migrator/database.js +20 -20
  3. package/lib/adapters/postgres/src/migrator/generator/generator.d.ts +22 -0
  4. package/lib/adapters/postgres/src/migrator/generator/generator.js +326 -0
  5. package/lib/adapters/postgres/src/migrator/generator/migration.d.ts +66 -0
  6. package/lib/adapters/postgres/src/migrator/generator/migration.js +249 -0
  7. package/lib/adapters/postgres/src/migrator/generator/provider.d.ts +19 -0
  8. package/lib/adapters/postgres/src/migrator/{migrator.js → generator/provider.js} +23 -25
  9. package/lib/adapters/postgres/src/migrator/index.d.ts +47 -1
  10. package/lib/adapters/postgres/src/migrator/index.js +20 -3
  11. package/lib/adapters/postgres/src/migrator/runner/runner.d.ts +17 -0
  12. package/lib/adapters/postgres/src/migrator/runner/runner.js +249 -0
  13. package/lib/adapters/postgres/src/migrator/runner/status.d.ts +17 -0
  14. package/lib/adapters/postgres/src/migrator/runner/status.js +55 -0
  15. package/lib/adapters/postgres/src/postgres.cli.d.ts +11 -1
  16. package/lib/adapters/postgres/src/postgres.cli.js +34 -11
  17. package/lib/adapters/postgres/test/postgres.bucket_adapter.test.js +4 -4
  18. package/lib/compiler/apps/monolyth/stages/1_mkdir_stage.d.ts +3 -0
  19. package/lib/compiler/apps/monolyth/stages/1_mkdir_stage.js +3 -0
  20. package/lib/compiler/apps/monolyth/stages/2_build_typescript_stage.d.ts +3 -0
  21. package/lib/compiler/apps/monolyth/stages/2_build_typescript_stage.js +3 -0
  22. package/lib/compiler/apps/monolyth/stages/3_copy_types_stage.d.ts +3 -0
  23. package/lib/compiler/apps/monolyth/stages/3_copy_types_stage.js +3 -0
  24. package/lib/compiler/apps/monolyth/stages/4_dump_modules_stage.d.ts +3 -0
  25. package/lib/compiler/apps/monolyth/stages/4_dump_modules_stage.js +3 -0
  26. package/lib/compiler/apps/monolyth/stages/5_dump_cli_stage.d.ts +3 -0
  27. package/lib/compiler/apps/monolyth/stages/5_dump_cli_stage.js +3 -0
  28. package/lib/compiler/apps/monolyth/stages/6_dump_package_json_stage.d.ts +3 -0
  29. package/lib/compiler/apps/monolyth/stages/6_dump_package_json_stage.js +3 -0
  30. package/lib/compiler/elements/externals.element.d.ts +1 -1
  31. package/lib/compiler/module.js +1 -1
  32. package/lib/compiler/stages/1_scan_stage.d.ts +3 -0
  33. package/lib/compiler/stages/1_scan_stage.js +3 -0
  34. package/lib/compiler/stages/2_treeshake_stage.d.ts +3 -0
  35. package/lib/compiler/stages/2_treeshake_stage.js +3 -0
  36. package/lib/compiler/stages/3_extract_ts_stage.d.ts +3 -0
  37. package/lib/compiler/stages/3_extract_ts_stage.js +3 -0
  38. package/lib/compiler/stages/4_build_schemas_stage.d.ts +3 -0
  39. package/lib/compiler/stages/4_build_schemas_stage.js +3 -0
  40. package/lib/compiler/stages/5_inject_ts_stage.d.ts +3 -0
  41. package/lib/compiler/stages/5_inject_ts_stage.js +3 -0
  42. package/lib/compiler/stages/6_build_elements_stage.d.ts +3 -0
  43. package/lib/compiler/stages/6_build_elements_stage.js +3 -0
  44. package/lib/compiler/stages/7_dump_stage.d.ts +3 -0
  45. package/lib/compiler/stages/7_dump_stage.js +3 -0
  46. package/lib/compiler/stages/8_diagnose_stage.d.ts +3 -0
  47. package/lib/compiler/stages/8_diagnose_stage.js +3 -0
  48. package/lib/compiler/treeshake.js +3 -3
  49. package/lib/elements/blocks/block.builder.d.ts +6 -2
  50. package/lib/elements/blocks/block.builder.js +8 -4
  51. package/lib/elements/blocks/block.schema.d.ts +4 -0
  52. package/lib/elements/blocks/block.schema.js +4 -0
  53. package/lib/elements/blocks/job/internal/machine_job.builder.d.ts +6 -3
  54. package/lib/elements/blocks/job/internal/machine_job.builder.js +5 -2
  55. package/lib/elements/blocks/job/internal/machine_job.schema.d.ts +4 -0
  56. package/lib/elements/blocks/job/internal/machine_job.schema.js +4 -0
  57. package/lib/elements/blocks/job/internal/resource_job.builder.d.ts +4 -0
  58. package/lib/elements/blocks/job/internal/resource_job.builder.js +4 -0
  59. package/lib/elements/blocks/job/internal/resource_job.d.ts +4 -0
  60. package/lib/elements/blocks/job/internal/resource_job.js +4 -0
  61. package/lib/elements/blocks/job/internal/resource_job.schema.d.ts +4 -0
  62. package/lib/elements/blocks/job/internal/resource_job.schema.js +4 -0
  63. package/lib/elements/blocks/job/job.builder.d.ts +4 -0
  64. package/lib/elements/blocks/job/job.builder.js +4 -0
  65. package/lib/elements/blocks/job/job.d.ts +4 -0
  66. package/lib/elements/blocks/job/job.js +4 -0
  67. package/lib/elements/blocks/job/job.schema.d.ts +4 -0
  68. package/lib/elements/blocks/job/job.schema.js +4 -0
  69. package/lib/elements/blocks/machine/machine.builder.d.ts +4 -0
  70. package/lib/elements/blocks/machine/machine.builder.js +4 -0
  71. package/lib/elements/blocks/machine/machine.d.ts +12 -0
  72. package/lib/elements/blocks/machine/machine.js +12 -0
  73. package/lib/elements/blocks/machine/machine.schema.d.ts +16 -0
  74. package/lib/elements/blocks/machine/machine.schema.js +16 -1
  75. package/lib/elements/blocks/machine/machine_state.builder.d.ts +4 -0
  76. package/lib/elements/blocks/machine/machine_state.builder.js +4 -0
  77. package/lib/elements/blocks/machine/machine_transition.builder.d.ts +4 -0
  78. package/lib/elements/blocks/machine/machine_transition.builder.js +4 -0
  79. package/lib/elements/blocks/queue/adapters/bucket.queue_adapter.d.ts +4 -0
  80. package/lib/elements/blocks/queue/adapters/bucket.queue_adapter.js +4 -0
  81. package/lib/elements/blocks/queue/adapters/queue_adapter.d.ts +4 -0
  82. package/lib/elements/blocks/queue/adapters/queue_adapter.js +4 -0
  83. package/lib/elements/blocks/queue/queue.builder.d.ts +4 -0
  84. package/lib/elements/blocks/queue/queue.builder.js +4 -0
  85. package/lib/elements/blocks/queue/queue.schema.d.ts +4 -0
  86. package/lib/elements/blocks/queue/queue.schema.js +4 -0
  87. package/lib/elements/blocks/resource/resource.builder.d.ts +4 -0
  88. package/lib/elements/blocks/resource/resource.builder.js +4 -0
  89. package/lib/elements/blocks/resource/resource.d.ts +4 -0
  90. package/lib/elements/blocks/resource/resource.js +4 -0
  91. package/lib/elements/blocks/resource/resource.schema.d.ts +4 -0
  92. package/lib/elements/blocks/resource/resource.schema.js +4 -0
  93. package/lib/elements/edge/controller/adapters/cli.controller_adapter.d.ts +4 -0
  94. package/lib/elements/edge/controller/adapters/cli.controller_adapter.js +4 -0
  95. package/lib/elements/edge/controller/adapters/controller_adapter.d.ts +4 -0
  96. package/lib/elements/edge/controller/adapters/controller_adapter.js +4 -0
  97. package/lib/elements/edge/controller/controller.builder.d.ts +16 -0
  98. package/lib/elements/edge/controller/controller.builder.js +16 -0
  99. package/lib/elements/edge/controller/controller.d.ts +4 -0
  100. package/lib/elements/edge/controller/controller.js +4 -0
  101. package/lib/elements/edge/controller/controller.schema.d.ts +16 -0
  102. package/lib/elements/edge/controller/controller.schema.js +16 -0
  103. package/lib/elements/{blocks → edge}/externals/externals.builder.d.ts +4 -0
  104. package/lib/elements/{blocks → edge}/externals/externals.builder.js +4 -0
  105. package/lib/elements/{blocks → edge}/externals/externals.schema.d.ts +4 -0
  106. package/lib/elements/{blocks → edge}/externals/externals.schema.js +4 -0
  107. package/lib/elements/entities/bucket/adapters/bucket_adapter.d.ts +16 -11
  108. package/lib/elements/entities/bucket/adapters/bucket_adapter.js +5 -0
  109. package/lib/elements/entities/bucket/adapters/memory.bucket_adapter.d.ts +4 -0
  110. package/lib/elements/entities/bucket/adapters/memory.bucket_adapter.js +4 -0
  111. package/lib/elements/entities/bucket/adapters/memory.nql.d.ts +4 -1
  112. package/lib/elements/entities/bucket/adapters/memory.nql.js +4 -1
  113. package/lib/elements/entities/bucket/bucket.builder.d.ts +4 -0
  114. package/lib/elements/entities/bucket/bucket.builder.js +4 -0
  115. package/lib/elements/entities/bucket/bucket.d.ts +9 -2
  116. package/lib/elements/entities/bucket/bucket.js +14 -7
  117. package/lib/elements/entities/bucket/bucket.schema.d.ts +4 -0
  118. package/lib/elements/entities/bucket/bucket.schema.js +4 -0
  119. package/lib/elements/entities/bucket/cache/bucket_cache.d.ts +8 -0
  120. package/lib/elements/entities/bucket/cache/bucket_cache.js +8 -0
  121. package/lib/elements/entities/bucket/graph/bucket_graph.builder.d.ts +4 -0
  122. package/lib/elements/entities/bucket/graph/bucket_graph.builder.js +4 -0
  123. package/lib/elements/entities/bucket/graph/bucket_graph.d.ts +4 -0
  124. package/lib/elements/entities/bucket/graph/bucket_graph.js +4 -0
  125. package/lib/elements/entities/bucket/graph/bucket_graph.schema.d.ts +8 -0
  126. package/lib/elements/entities/bucket/graph/bucket_graph.schema.js +8 -0
  127. package/lib/elements/entities/bucket/graph/bucket_graph_link.builder.d.ts +8 -0
  128. package/lib/elements/entities/bucket/graph/bucket_graph_link.builder.js +8 -0
  129. package/lib/elements/entities/bucket/model/bucket_model.builder.d.ts +4 -0
  130. package/lib/elements/entities/bucket/model/bucket_model.builder.js +4 -0
  131. package/lib/elements/entities/bucket/model/bucket_model.convert.d.ts +8 -0
  132. package/lib/elements/entities/bucket/model/bucket_model.convert.js +8 -0
  133. package/lib/elements/entities/bucket/model/bucket_model.schema.d.ts +8 -0
  134. package/lib/elements/entities/bucket/model/bucket_model.schema.js +8 -0
  135. package/lib/elements/entities/bucket/model/bucket_model_field.builder.d.ts +8 -0
  136. package/lib/elements/entities/bucket/model/bucket_model_field.builder.js +8 -0
  137. package/lib/elements/entities/bucket/query/nql_compiler.d.ts +9 -0
  138. package/lib/elements/entities/bucket/query/nql_compiler.js +9 -0
  139. package/lib/elements/entities/bucket/query/nql_engine.d.ts +6 -0
  140. package/lib/elements/entities/bucket/query/nql_engine.js +6 -0
  141. package/lib/elements/entities/bucket/view/bucket_view.builder.d.ts +4 -0
  142. package/lib/elements/entities/bucket/view/bucket_view.builder.js +4 -0
  143. package/lib/elements/entities/bucket/view/bucket_view.d.ts +4 -0
  144. package/lib/elements/entities/bucket/view/bucket_view.js +10 -2
  145. package/lib/elements/entities/bucket/view/bucket_view.schema.d.ts +8 -0
  146. package/lib/elements/entities/bucket/view/bucket_view.schema.js +8 -0
  147. package/lib/elements/entities/bucket/view/bucket_view_field.builder.d.ts +8 -0
  148. package/lib/elements/entities/bucket/view/bucket_view_field.builder.js +8 -0
  149. package/lib/elements/entities/constants/constants.builder.d.ts +21 -6
  150. package/lib/elements/entities/constants/constants.builder.js +21 -6
  151. package/lib/elements/entities/constants/constants.d.ts +4 -0
  152. package/lib/elements/entities/constants/constants.js +4 -0
  153. package/lib/elements/entities/constants/constants.schema.d.ts +16 -0
  154. package/lib/elements/entities/constants/constants.schema.js +16 -0
  155. package/lib/elements/entities/drive/drive_adapter.d.ts +15 -10
  156. package/lib/elements/entities/drive/drive_adapter.js +5 -2
  157. package/lib/elements/entities/drive/local.drive_adapter.d.ts +10 -4
  158. package/lib/elements/entities/drive/local.drive_adapter.js +23 -8
  159. package/lib/elements/entities/message/message.builder.d.ts +4 -0
  160. package/lib/elements/entities/message/message.builder.js +4 -0
  161. package/lib/elements/entities/message/message.d.ts +4 -0
  162. package/lib/elements/entities/message/message.js +4 -0
  163. package/lib/elements/entities/message/message.schema.d.ts +4 -0
  164. package/lib/elements/entities/message/message.schema.js +4 -0
  165. package/lib/elements/entities/message/message_parser.d.ts +4 -0
  166. package/lib/elements/entities/message/message_parser.js +4 -0
  167. package/lib/elements/entities/message/template/message_template.builder.d.ts +4 -0
  168. package/lib/elements/entities/message/template/message_template.builder.js +4 -0
  169. package/lib/elements/entities/message/template/message_template.schema.d.ts +9 -0
  170. package/lib/elements/entities/message/template/message_template.schema.js +25 -0
  171. package/lib/elements/entities/message/template/message_template_field.builder.d.ts +8 -0
  172. package/lib/elements/entities/message/template/message_template_field.builder.js +8 -0
  173. package/lib/elements/index.d.ts +1 -1
  174. package/lib/elements/index.js +1 -1
  175. package/lib/engine/apps/app.config.d.ts +3 -0
  176. package/lib/engine/apps/app.config.js +3 -0
  177. package/lib/engine/apps/app.d.ts +3 -0
  178. package/lib/engine/apps/app.js +4 -1
  179. package/lib/engine/apps/inline.app.d.ts +3 -0
  180. package/lib/engine/apps/inline.app.js +3 -0
  181. package/lib/engine/apps/monolyth/monolyth.app.d.ts +8 -0
  182. package/lib/engine/apps/monolyth/monolyth.app.js +8 -0
  183. package/lib/engine/auth/authn.d.ts +4 -0
  184. package/lib/engine/auth/authn.js +4 -0
  185. package/lib/engine/auth/zero.authn_provider.d.ts +4 -0
  186. package/lib/engine/auth/zero.authn_provider.js +4 -0
  187. package/lib/engine/cli/cli.d.ts +7 -1
  188. package/lib/engine/cli/cli.js +10 -1
  189. package/lib/engine/cli/cli_adapter.d.ts +11 -1
  190. package/lib/engine/cli/cli_adapter.js +10 -1
  191. package/lib/engine/cli/cli_input.d.ts +4 -0
  192. package/lib/engine/cli/cli_input.js +4 -0
  193. package/lib/engine/cli/ui.d.ts +14 -2
  194. package/lib/engine/cli/ui.js +10 -6
  195. package/lib/engine/daemon.d.ts +93 -6
  196. package/lib/engine/daemon.js +90 -7
  197. package/lib/engine/data/date.d.ts +4 -0
  198. package/lib/engine/data/date.js +4 -0
  199. package/lib/engine/data/datetime.d.ts +4 -0
  200. package/lib/engine/data/datetime.js +4 -0
  201. package/lib/engine/data/decimal.d.ts +4 -0
  202. package/lib/engine/data/decimal.js +4 -0
  203. package/lib/engine/data/file.d.ts +23 -23
  204. package/lib/engine/data/file.js +66 -29
  205. package/lib/engine/data/json.d.ts +4 -0
  206. package/lib/engine/data/json.js +4 -0
  207. package/lib/engine/data/tree.d.ts +4 -0
  208. package/lib/engine/data/tree.js +4 -0
  209. package/lib/engine/dependency.d.ts +63 -2
  210. package/lib/engine/dependency.js +52 -0
  211. package/lib/engine/module.d.ts +108 -8
  212. package/lib/engine/module.js +107 -22
  213. package/lib/engine/space.d.ts +163 -10
  214. package/lib/engine/space.js +184 -22
  215. package/lib/engine/transaction/nodes/bucket.trx_node.d.ts +12 -0
  216. package/lib/engine/transaction/nodes/bucket.trx_node.js +12 -0
  217. package/lib/engine/transaction/nodes/bucket_query.trx_node.d.ts +4 -0
  218. package/lib/engine/transaction/nodes/bucket_query.trx_node.js +4 -0
  219. package/lib/engine/transaction/nodes/job.trx_node.d.ts +4 -0
  220. package/lib/engine/transaction/nodes/job.trx_node.js +4 -0
  221. package/lib/engine/transaction/nodes/machine.trx_node.d.ts +4 -0
  222. package/lib/engine/transaction/nodes/machine.trx_node.js +4 -0
  223. package/lib/engine/transaction/nodes/queue.trx_node.d.ts +4 -0
  224. package/lib/engine/transaction/nodes/queue.trx_node.js +4 -0
  225. package/lib/engine/transaction/nodes/resource.trx_node.d.ts +4 -0
  226. package/lib/engine/transaction/nodes/resource.trx_node.js +4 -0
  227. package/lib/engine/transaction/trx.d.ts +8 -0
  228. package/lib/engine/transaction/trx.js +8 -0
  229. package/lib/engine/transaction/trx_engine.d.ts +4 -0
  230. package/lib/engine/transaction/trx_engine.js +4 -3
  231. package/lib/engine/transaction/trx_node.d.ts +4 -0
  232. package/lib/engine/transaction/trx_node.js +4 -0
  233. package/lib/engine/tree.d.ts +54 -2
  234. package/lib/engine/tree.js +54 -2
  235. package/lib/engine/util/mime.d.ts +4 -4
  236. package/lib/engine/util/mime.js +7 -9
  237. package/lib/schema.d.ts +1 -1
  238. package/package.json +1 -1
  239. package/tsconfig.build.tsbuildinfo +1 -1
  240. package/lib/adapters/postgres/src/migrator/bucket.d.ts +0 -20
  241. package/lib/adapters/postgres/src/migrator/bucket.js +0 -184
  242. package/lib/adapters/postgres/src/migrator/migration.d.ts +0 -57
  243. package/lib/adapters/postgres/src/migrator/migration.js +0 -203
  244. package/lib/adapters/postgres/src/migrator/migrator.d.ts +0 -21
  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/elements/entities/bucket/adapters/memory.bucket_query copy.d.ts +0 -0
  248. package/lib/elements/entities/bucket/adapters/memory.bucket_query copy.js +0 -218
  249. package/lib/elements/entities/bucket/adapters/slow_memory.bucket_adapter.d.ts +0 -0
  250. package/lib/elements/entities/bucket/adapters/slow_memory.bucket_adapter.js +0 -47
  251. package/lib/engine/apps/monolyth/monolyth.cli.d.ts +0 -45
  252. package/lib/engine/apps/monolyth/monolyth.cli.js +0 -362
  253. package/lib/engine/util/cache.d.ts +0 -6
  254. package/lib/engine/util/cache.js +0 -20
@@ -15,8 +15,8 @@ import { Bucket } from "../elements/entities/bucket/bucket";
15
15
  import { $Constants } from "../elements/entities/constants/constants.schema";
16
16
  import { ConstantsBuilder } from "../elements/entities/constants/constants.builder";
17
17
  import { AnyControllerBuilder } from "../elements/edge/controller/controller.builder";
18
- import { AnyExternalsBuilder } from "../elements/blocks/externals/externals.builder";
19
- import { $Externals } from "../elements/blocks/externals/externals.schema";
18
+ import { AnyExternalsBuilder } from "../elements/edge/externals/externals.builder";
19
+ import { $Externals } from "../elements/edge/externals/externals.schema";
20
20
  import { $Dependency, ResolvedBuilderNode } from './dependency';
21
21
  import { $Bucket } from "../elements/entities/bucket/bucket.schema";
22
22
  import { $Resource } from "../elements/blocks/resource/resource.schema";
@@ -25,7 +25,7 @@ import { $Controller } from "../elements/edge/controller/controller.schema";
25
25
  import { $Job } from "../elements/blocks/job/job.schema";
26
26
  import { ModuleTree } from './tree';
27
27
  import { AnyResourceJobBuilder } from "../elements/blocks/job/internal/resource_job.builder";
28
- import { AnyApp } from './apps/app';
28
+ import { AnyApp, AnyAppProvider } from './apps/app';
29
29
  import { AnyMachineJobBuilder } from "../elements/blocks/job/internal/machine_job.builder";
30
30
  import { AnyQueueBuilder } from "../elements/blocks/queue/queue.builder";
31
31
  import { $Queue } from "../elements/blocks/queue/queue.schema";
@@ -46,6 +46,20 @@ export type VirtualModuleDef = {
46
46
  jobs?: $Dependency[];
47
47
  };
48
48
  };
49
+ /**
50
+ * A `Module` is an isolated named collection of _Elements_.
51
+ *
52
+ * Modules should be designed to work in isolation as much as possible.
53
+ * When declaring external dependencies, these can be injected into the
54
+ * module or linked externally through REST or other means.
55
+ *
56
+ * Each `Module` has a _Transaction Engine_, which keeps track of
57
+ * transactions performed with the Module elements.
58
+ * Transactions can be shared between engines, to allow for a tracking
59
+ * of distributed applications.
60
+ *
61
+ * @category Engine
62
+ */
49
63
  export declare class Module<S extends $Space, $ extends $Module> {
50
64
  name: string;
51
65
  schema: $;
@@ -56,19 +70,48 @@ export declare class Module<S extends $Space, $ extends $Module> {
56
70
  machines: { [B in keyof $["machines"]]: Machine<S, $, $["machines"][B]>; };
57
71
  queues: { [B in keyof $["queues"]]: Queue<$, $["queues"][B]>; };
58
72
  controllers: { [B in keyof $["controllers"]]: Controller<S, $, $["controllers"][B]>; };
73
+ /**
74
+ * Daemon which is running the current module.
75
+ * This is `undefined` when the _Module_ is created for compiling.
76
+ */
59
77
  daemon?: AnyDaemon;
78
+ /**
79
+ * NQL (Nesoi Query Language) Engine for this module.
80
+ */
60
81
  nql: NQL_Engine;
82
+ /**
83
+ * The boot source for this module:
84
+ * - `dirpath`: This module is being run from a Space (Framework mode), so
85
+ * source is the module directory, from which builders will be read
86
+ * - `builders`: This module is being run in Library mode, so source is
87
+ * a list of builders
88
+ */
61
89
  boot?: {
62
- path: string;
90
+ dirpath: string;
63
91
  } | {
64
92
  builders: AnyBuilder[];
65
93
  };
94
+ /**
95
+ * @param name A module name
96
+ * @param boot The boot source for this module
97
+ */
66
98
  constructor(name: string, boot?: {
67
- path: string;
99
+ dirpath: string;
68
100
  } | {
69
101
  builders: AnyBuilder[];
70
102
  });
103
+ /**
104
+ * Log the module elements
105
+ */
71
106
  info(): void;
107
+ /**
108
+ * Inject element schemas into the module.
109
+ * This is used on the compiled version of the `App`, which has
110
+ * the schemas pre-built, so it directly injects them.
111
+ *
112
+ * @param schemas A dictionary of schema(s) by element type
113
+ * @returns The `Module`, for call-chaining
114
+ */
72
115
  inject(schemas: {
73
116
  externals?: $Externals;
74
117
  constants?: $Constants;
@@ -80,19 +123,76 @@ export declare class Module<S extends $Space, $ extends $Module> {
80
123
  queues?: $Queue[];
81
124
  controllers?: $Controller[];
82
125
  }): this;
126
+ /**
127
+ * Include references for external elements on the module.
128
+ * This allows a module to use elements from other modules directly,
129
+ * on single-threaded `Apps`.
130
+ *
131
+ * @param daemon A `Daemon` instance
132
+ * @param dependencies: A dictionary of dependencies by element type
133
+ * @returns The `Module`, for call-chaining
134
+ */
83
135
  injectDependencies(daemon: AnyDaemon, dependencies: {
84
136
  buckets?: $Dependency[];
85
137
  jobs?: $Dependency[];
86
138
  messages?: $Dependency[];
87
139
  machines?: $Dependency[];
88
140
  }): this;
89
- scanFiles(dir: string, exclude?: string[]): string[];
141
+ /**
142
+ * Recursively find all files inside the module dir.
143
+ *
144
+ * @param dirpath A directory to scan
145
+ * @param exclude: A list of patterns to ignore
146
+ * @returns A list of file paths
147
+ */
148
+ scanFiles(dirpath: string, exclude?: string[]): string[];
149
+ /**
150
+ * Build a resolved builder node, then merge the
151
+ * resulting schema(s) to the module.
152
+ * This also merges the resulting inline nodes of building a node.
153
+ *
154
+ * @param node A resolved builder node
155
+ * @param tree A module tree
156
+ */
90
157
  buildNode(node: ResolvedBuilderNode, tree: ModuleTree): Promise<void>;
158
+ /**
159
+ * Merge inline message schemas into the module.
160
+ *
161
+ * @param node A resolved builder node
162
+ * @param schemas A dictionary of Message schemas by name
163
+ */
91
164
  private mergeInlineMessages;
165
+ /**
166
+ * Merge inline job schemas into the module.
167
+ *
168
+ * @param node A resolved builder node
169
+ * @param schemas A dictionary of job schemas by name
170
+ */
92
171
  private mergeInlineJobs;
93
- start(app: AnyApp, providers: Record<string, any>): void;
172
+ /**
173
+ * Create elements from schemas, and the NQL engine for this module.
174
+ *
175
+ * @param app A `App` instance
176
+ * @param providers A dictionary of providers by name
177
+ */
178
+ start(app: AnyApp, providers: Record<string, AnyAppProvider>): void;
179
+ /**
180
+ * Destroy all elements from module.
181
+ */
94
182
  destroy(): void;
95
- private destroyBlock;
183
+ /**
184
+ * Destroy one element from module.
185
+ */
186
+ private destroyElement;
187
+ /**
188
+ * Create a virtual module from a definition.
189
+ * A virtual module can be used to dynamically create
190
+ * and use schemas with limited access to the application elements.
191
+ *
192
+ * @param daemon A `Daemon` instance
193
+ * @param def A definition for a Virtual Module
194
+ * @returns A `Module` instance
195
+ */
96
196
  static virtual(daemon: AnyDaemon, def: VirtualModuleDef): Promise<Module<$Space, $Module>>;
97
197
  }
98
198
  export type AnyModule = Module<any, any>;
@@ -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,6 +159,15 @@ class Module {
131
159
  });
132
160
  return this;
133
161
  }
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
+ *
167
+ * @param daemon A `Daemon` instance
168
+ * @param dependencies: A dictionary of dependencies by element type
169
+ * @returns The `Module`, for call-chaining
170
+ */
134
171
  injectDependencies(daemon, dependencies) {
135
172
  dependencies.buckets?.forEach(dep => {
136
173
  const bucketModule = daemon_1.Daemon.getModule(daemon, dep.module);
@@ -167,11 +204,18 @@ class Module {
167
204
  return this;
168
205
  }
169
206
  // Treeshaking
170
- scanFiles(dir, exclude = []) {
207
+ /**
208
+ * Recursively find all files inside the module dir.
209
+ *
210
+ * @param dirpath A directory to scan
211
+ * @param exclude: A list of patterns to ignore
212
+ * @returns A list of file paths
213
+ */
214
+ scanFiles(dirpath, exclude = []) {
171
215
  const files = [];
172
- fs.readdirSync(dir, { withFileTypes: true })
216
+ fs.readdirSync(dirpath, { withFileTypes: true })
173
217
  .forEach(node => {
174
- const nodePath = path.resolve(dir, node.name);
218
+ const nodePath = path.resolve(dirpath, node.name);
175
219
  // TODO: Wildcards, this is just ugly
176
220
  for (const path of exclude) {
177
221
  if (nodePath.endsWith(path.slice(1))) {
@@ -192,6 +236,14 @@ class Module {
192
236
  return files;
193
237
  }
194
238
  // Build Nodes
239
+ /**
240
+ * Build a resolved builder node, then merge the
241
+ * resulting schema(s) to the module.
242
+ * This also merges the resulting inline nodes of building a node.
243
+ *
244
+ * @param node A resolved builder node
245
+ * @param tree A module tree
246
+ */
195
247
  async buildNode(node, tree) {
196
248
  log_1.Log.trace('compiler', 'module', `Building ${this.name}::${(0, log_1.scopeTag)(node.builder.$b, node.builder.name)}`);
197
249
  if (node.builder.$b === 'constants') {
@@ -209,19 +261,19 @@ class Module {
209
261
  else if (node.builder.$b === 'job') {
210
262
  const { schema, inlineMessages } = job_builder_1.JobBuilder.build(node, tree, this.schema);
211
263
  this.schema.jobs[node.name] = schema;
212
- this.mergeInlineMessages(node, inlineMessages);
264
+ this.mergeInlineMessages(inlineMessages);
213
265
  }
214
266
  else if (node.builder.$b === 'resource') {
215
267
  const { schema, inlineMessages, inlineJobs } = resource_builder_1.ResourceBuilder.build(node, tree, this.schema);
216
268
  this.schema.resources[schema.name] = schema;
217
- this.mergeInlineMessages(node, inlineMessages);
218
- this.mergeInlineJobs(node, inlineJobs);
269
+ this.mergeInlineMessages(inlineMessages);
270
+ this.mergeInlineJobs(inlineJobs);
219
271
  }
220
272
  else if (node.builder.$b === 'machine') {
221
273
  const { schema, inlineMessages, inlineJobs } = machine_builder_1.MachineBuilder.build(node, tree, this.schema);
222
274
  this.schema.machines[schema.name] = schema;
223
- this.mergeInlineMessages(node, inlineMessages);
224
- this.mergeInlineJobs(node, inlineJobs);
275
+ this.mergeInlineMessages(inlineMessages);
276
+ this.mergeInlineJobs(inlineJobs);
225
277
  }
226
278
  else if (node.builder.$b === 'controller') {
227
279
  this.schema.controllers[node.name] = controller_builder_1.ControllerBuilder.build(node);
@@ -229,25 +281,43 @@ class Module {
229
281
  else if (node.builder.$b === 'queue') {
230
282
  const { schema, inlineMessages } = queue_builder_1.QueueBuilder.build(node, tree, this.schema);
231
283
  this.schema.queues[node.name] = schema;
232
- this.mergeInlineMessages(node, inlineMessages);
284
+ this.mergeInlineMessages(inlineMessages);
233
285
  }
234
286
  else {
235
287
  throw error_1.NesoiError.Module.UnknownBuilderType(this, node.filepath.toString(), node.name, node.builder.$b);
236
288
  }
237
289
  }
238
- mergeInlineMessages(node, schemas) {
290
+ /**
291
+ * Merge inline message schemas into the module.
292
+ *
293
+ * @param node A resolved builder node
294
+ * @param schemas A dictionary of Message schemas by name
295
+ */
296
+ mergeInlineMessages(schemas) {
239
297
  for (const name in schemas) {
240
298
  const $msg = schemas[name];
241
299
  this.schema.messages[name] = $msg;
242
300
  }
243
301
  }
244
- mergeInlineJobs(node, schemas) {
302
+ /**
303
+ * Merge inline job schemas into the module.
304
+ *
305
+ * @param node A resolved builder node
306
+ * @param schemas A dictionary of job schemas by name
307
+ */
308
+ mergeInlineJobs(schemas) {
245
309
  for (const name in schemas) {
246
310
  const $job = schemas[name];
247
311
  this.schema.jobs[name] = $job;
248
312
  }
249
313
  }
250
314
  // Start
315
+ /**
316
+ * Create elements from schemas, and the NQL engine for this module.
317
+ *
318
+ * @param app A `App` instance
319
+ * @param providers A dictionary of providers by name
320
+ */
251
321
  start(app, providers) {
252
322
  const info = app_1.App.getInfo(app);
253
323
  const config = info.config;
@@ -277,43 +347,58 @@ class Module {
277
347
  this.nql = new nql_engine_1.NQL_Engine(this);
278
348
  }
279
349
  // Destroy
350
+ /**
351
+ * Destroy all elements from module.
352
+ */
280
353
  destroy() {
281
354
  // Destroy messages
282
355
  for (const name in this.messages || []) {
283
- this.destroyBlock('message', name);
356
+ this.destroyElement('message', name);
284
357
  }
285
358
  // Destroy buckets
286
359
  for (const name in this.buckets || {}) {
287
- this.destroyBlock('bucket', name);
360
+ this.destroyElement('bucket', name);
288
361
  }
289
362
  // Destroy jobs
290
363
  for (const name in this.jobs || []) {
291
- this.destroyBlock('job', name);
364
+ this.destroyElement('job', name);
292
365
  }
293
366
  // Destroy resources
294
367
  for (const name in this.resources || []) {
295
- this.destroyBlock('resource', name);
368
+ this.destroyElement('resource', name);
296
369
  }
297
370
  // Destroy machines
298
371
  for (const name in this.machines || []) {
299
- this.destroyBlock('machine', name);
372
+ this.destroyElement('machine', name);
300
373
  }
301
374
  // Destroy queues
302
375
  for (const name in this.queues || []) {
303
- this.destroyBlock('queue', name);
376
+ this.destroyElement('queue', name);
304
377
  }
305
378
  // Destroy controllers
306
379
  for (const name in this.controllers || []) {
307
- this.destroyBlock('controller', name);
380
+ this.destroyElement('controller', name);
308
381
  }
309
382
  }
310
- async destroyBlock(type, name) {
383
+ /**
384
+ * Destroy one element from module.
385
+ */
386
+ async destroyElement(type, name) {
311
387
  const t = type + 's';
312
388
  log_1.Log.info('module', this.name, 'Destroying');
313
389
  delete this.schema[t][name];
314
390
  delete this[t][name];
315
391
  }
316
392
  // Virtual
393
+ /**
394
+ * Create a virtual module from a definition.
395
+ * A virtual module can be used to dynamically create
396
+ * and use schemas with limited access to the application elements.
397
+ *
398
+ * @param daemon A `Daemon` instance
399
+ * @param def A definition for a Virtual Module
400
+ * @returns A `Module` instance
401
+ */
317
402
  static async virtual(daemon, def) {
318
403
  const virtualModule = new Module(def.name, { builders: [] });
319
404
  // Inject schemas
@@ -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>;