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.
- package/lib/compiler/apps/monolyth/monolyth_compiler.d.ts +1 -1
- package/lib/compiler/apps/monolyth/monolyth_compiler.js +7 -7
- package/lib/compiler/apps/monolyth/stages/1_mkdir_stage.d.ts +3 -0
- package/lib/compiler/apps/monolyth/stages/1_mkdir_stage.js +3 -0
- package/lib/compiler/apps/monolyth/stages/2_build_typescript_stage.d.ts +3 -0
- package/lib/compiler/apps/monolyth/stages/2_build_typescript_stage.js +3 -0
- package/lib/compiler/apps/monolyth/stages/3_copy_types_stage.d.ts +3 -0
- package/lib/compiler/apps/monolyth/stages/3_copy_types_stage.js +3 -0
- package/lib/compiler/apps/monolyth/stages/4_dump_modules_stage.d.ts +3 -0
- package/lib/compiler/apps/monolyth/stages/4_dump_modules_stage.js +3 -0
- package/lib/compiler/apps/monolyth/stages/5_dump_cli_stage.d.ts +3 -0
- package/lib/compiler/apps/monolyth/stages/5_dump_cli_stage.js +3 -0
- package/lib/compiler/apps/monolyth/stages/6_dump_package_json_stage.d.ts +3 -0
- package/lib/compiler/apps/monolyth/stages/6_dump_package_json_stage.js +3 -0
- package/lib/compiler/elements/externals.element.d.ts +1 -1
- package/lib/compiler/module.js +1 -1
- package/lib/compiler/stages/1_scan_stage.d.ts +3 -0
- package/lib/compiler/stages/1_scan_stage.js +3 -0
- package/lib/compiler/stages/2_treeshake_stage.d.ts +3 -0
- package/lib/compiler/stages/2_treeshake_stage.js +3 -0
- package/lib/compiler/stages/3_extract_ts_stage.d.ts +3 -0
- package/lib/compiler/stages/3_extract_ts_stage.js +3 -0
- package/lib/compiler/stages/4_build_schemas_stage.d.ts +3 -0
- package/lib/compiler/stages/4_build_schemas_stage.js +3 -0
- package/lib/compiler/stages/5_inject_ts_stage.d.ts +3 -0
- package/lib/compiler/stages/5_inject_ts_stage.js +3 -0
- package/lib/compiler/stages/6_build_elements_stage.d.ts +3 -0
- package/lib/compiler/stages/6_build_elements_stage.js +3 -0
- package/lib/compiler/stages/7_dump_stage.d.ts +3 -0
- package/lib/compiler/stages/7_dump_stage.js +3 -0
- package/lib/compiler/stages/8_diagnose_stage.d.ts +3 -0
- package/lib/compiler/stages/8_diagnose_stage.js +3 -0
- package/lib/compiler/treeshake.js +3 -3
- package/lib/elements/blocks/block.builder.d.ts +6 -2
- package/lib/elements/blocks/block.builder.js +8 -4
- package/lib/elements/blocks/block.schema.d.ts +4 -0
- package/lib/elements/blocks/block.schema.js +4 -0
- package/lib/elements/blocks/job/internal/machine_job.builder.d.ts +6 -3
- package/lib/elements/blocks/job/internal/machine_job.builder.js +5 -2
- package/lib/elements/blocks/job/internal/machine_job.schema.d.ts +4 -0
- package/lib/elements/blocks/job/internal/machine_job.schema.js +4 -0
- package/lib/elements/blocks/job/internal/resource_job.builder.d.ts +4 -0
- package/lib/elements/blocks/job/internal/resource_job.builder.js +4 -0
- package/lib/elements/blocks/job/internal/resource_job.d.ts +4 -0
- package/lib/elements/blocks/job/internal/resource_job.js +4 -0
- package/lib/elements/blocks/job/internal/resource_job.schema.d.ts +4 -0
- package/lib/elements/blocks/job/internal/resource_job.schema.js +4 -0
- package/lib/elements/blocks/job/job.builder.d.ts +4 -0
- package/lib/elements/blocks/job/job.builder.js +4 -0
- package/lib/elements/blocks/job/job.d.ts +4 -0
- package/lib/elements/blocks/job/job.js +4 -0
- package/lib/elements/blocks/job/job.schema.d.ts +4 -0
- package/lib/elements/blocks/job/job.schema.js +4 -0
- package/lib/elements/blocks/machine/machine.builder.d.ts +4 -0
- package/lib/elements/blocks/machine/machine.builder.js +16 -1
- package/lib/elements/blocks/machine/machine.d.ts +12 -0
- package/lib/elements/blocks/machine/machine.js +12 -0
- package/lib/elements/blocks/machine/machine.schema.d.ts +18 -1
- package/lib/elements/blocks/machine/machine.schema.js +18 -2
- package/lib/elements/blocks/machine/machine_state.builder.d.ts +4 -0
- package/lib/elements/blocks/machine/machine_state.builder.js +4 -0
- package/lib/elements/blocks/machine/machine_transition.builder.d.ts +4 -0
- package/lib/elements/blocks/machine/machine_transition.builder.js +4 -0
- package/lib/elements/blocks/queue/adapters/bucket.queue_adapter.d.ts +4 -0
- package/lib/elements/blocks/queue/adapters/bucket.queue_adapter.js +4 -0
- package/lib/elements/blocks/queue/adapters/queue_adapter.d.ts +4 -0
- package/lib/elements/blocks/queue/adapters/queue_adapter.js +4 -0
- package/lib/elements/blocks/queue/queue.builder.d.ts +4 -0
- package/lib/elements/blocks/queue/queue.builder.js +4 -0
- package/lib/elements/blocks/queue/queue.schema.d.ts +4 -0
- package/lib/elements/blocks/queue/queue.schema.js +4 -0
- package/lib/elements/blocks/resource/resource.builder.d.ts +4 -0
- package/lib/elements/blocks/resource/resource.builder.js +4 -0
- package/lib/elements/blocks/resource/resource.d.ts +4 -0
- package/lib/elements/blocks/resource/resource.js +4 -0
- package/lib/elements/blocks/resource/resource.schema.d.ts +4 -0
- package/lib/elements/blocks/resource/resource.schema.js +4 -0
- package/lib/elements/edge/controller/adapters/cli.controller_adapter.d.ts +4 -0
- package/lib/elements/edge/controller/adapters/cli.controller_adapter.js +4 -0
- package/lib/elements/edge/controller/adapters/controller_adapter.d.ts +7 -1
- package/lib/elements/edge/controller/adapters/controller_adapter.js +6 -1
- package/lib/elements/edge/controller/controller.builder.d.ts +16 -0
- package/lib/elements/edge/controller/controller.builder.js +16 -0
- package/lib/elements/edge/controller/controller.config.d.ts +3 -2
- package/lib/elements/edge/controller/controller.d.ts +7 -3
- package/lib/elements/edge/controller/controller.js +7 -3
- package/lib/elements/edge/controller/controller.schema.d.ts +16 -0
- package/lib/elements/edge/controller/controller.schema.js +16 -0
- package/lib/elements/{blocks → edge}/externals/externals.builder.d.ts +4 -0
- package/lib/elements/{blocks → edge}/externals/externals.builder.js +4 -0
- package/lib/elements/{blocks → edge}/externals/externals.schema.d.ts +4 -0
- package/lib/elements/{blocks → edge}/externals/externals.schema.js +4 -0
- package/lib/elements/entities/bucket/adapters/bucket_adapter.d.ts +18 -12
- package/lib/elements/entities/bucket/adapters/bucket_adapter.js +5 -0
- package/lib/elements/entities/bucket/adapters/memory.bucket_adapter.d.ts +4 -0
- package/lib/elements/entities/bucket/adapters/memory.bucket_adapter.js +4 -0
- package/lib/elements/entities/bucket/adapters/memory.nql.d.ts +4 -1
- package/lib/elements/entities/bucket/adapters/memory.nql.js +4 -1
- package/lib/elements/entities/bucket/bucket.builder.d.ts +4 -0
- package/lib/elements/entities/bucket/bucket.builder.js +4 -0
- package/lib/elements/entities/bucket/bucket.config.d.ts +3 -3
- package/lib/elements/entities/bucket/bucket.d.ts +12 -4
- package/lib/elements/entities/bucket/bucket.js +18 -11
- package/lib/elements/entities/bucket/bucket.schema.d.ts +4 -0
- package/lib/elements/entities/bucket/bucket.schema.js +4 -0
- package/lib/elements/entities/bucket/cache/bucket_cache.d.ts +8 -0
- package/lib/elements/entities/bucket/cache/bucket_cache.js +8 -0
- package/lib/elements/entities/bucket/graph/bucket_graph.builder.d.ts +4 -0
- package/lib/elements/entities/bucket/graph/bucket_graph.builder.js +4 -0
- package/lib/elements/entities/bucket/graph/bucket_graph.d.ts +4 -0
- package/lib/elements/entities/bucket/graph/bucket_graph.js +4 -0
- package/lib/elements/entities/bucket/graph/bucket_graph.schema.d.ts +8 -0
- package/lib/elements/entities/bucket/graph/bucket_graph.schema.js +8 -0
- package/lib/elements/entities/bucket/graph/bucket_graph_link.builder.d.ts +8 -0
- package/lib/elements/entities/bucket/graph/bucket_graph_link.builder.js +8 -0
- package/lib/elements/entities/bucket/model/bucket_model.builder.d.ts +4 -0
- package/lib/elements/entities/bucket/model/bucket_model.builder.js +4 -0
- package/lib/elements/entities/bucket/model/bucket_model.convert.d.ts +8 -0
- package/lib/elements/entities/bucket/model/bucket_model.convert.js +8 -0
- package/lib/elements/entities/bucket/model/bucket_model.schema.d.ts +8 -0
- package/lib/elements/entities/bucket/model/bucket_model.schema.js +8 -0
- package/lib/elements/entities/bucket/model/bucket_model_field.builder.d.ts +8 -0
- package/lib/elements/entities/bucket/model/bucket_model_field.builder.js +8 -0
- package/lib/elements/entities/bucket/query/nql_compiler.d.ts +9 -0
- package/lib/elements/entities/bucket/query/nql_compiler.js +9 -0
- package/lib/elements/entities/bucket/query/nql_engine.d.ts +6 -0
- package/lib/elements/entities/bucket/query/nql_engine.js +6 -0
- package/lib/elements/entities/bucket/view/bucket_view.builder.d.ts +4 -0
- package/lib/elements/entities/bucket/view/bucket_view.builder.js +4 -0
- package/lib/elements/entities/bucket/view/bucket_view.d.ts +4 -0
- package/lib/elements/entities/bucket/view/bucket_view.js +10 -2
- package/lib/elements/entities/bucket/view/bucket_view.schema.d.ts +8 -0
- package/lib/elements/entities/bucket/view/bucket_view.schema.js +8 -0
- package/lib/elements/entities/bucket/view/bucket_view_field.builder.d.ts +8 -0
- package/lib/elements/entities/bucket/view/bucket_view_field.builder.js +8 -0
- package/lib/elements/entities/constants/constants.builder.d.ts +21 -6
- package/lib/elements/entities/constants/constants.builder.js +21 -6
- package/lib/elements/entities/constants/constants.d.ts +4 -0
- package/lib/elements/entities/constants/constants.js +4 -0
- package/lib/elements/entities/constants/constants.schema.d.ts +16 -0
- package/lib/elements/entities/constants/constants.schema.js +16 -0
- package/lib/elements/entities/drive/drive_adapter.d.ts +15 -10
- package/lib/elements/entities/drive/drive_adapter.js +5 -2
- package/lib/elements/entities/drive/local.drive_adapter.d.ts +10 -4
- package/lib/elements/entities/drive/local.drive_adapter.js +23 -8
- package/lib/elements/entities/message/message.builder.d.ts +4 -0
- package/lib/elements/entities/message/message.builder.js +4 -0
- package/lib/elements/entities/message/message.d.ts +4 -0
- package/lib/elements/entities/message/message.js +4 -0
- package/lib/elements/entities/message/message.schema.d.ts +4 -0
- package/lib/elements/entities/message/message.schema.js +4 -0
- package/lib/elements/entities/message/message_parser.d.ts +4 -0
- package/lib/elements/entities/message/message_parser.js +4 -0
- package/lib/elements/entities/message/template/message_template.builder.d.ts +4 -0
- package/lib/elements/entities/message/template/message_template.builder.js +4 -0
- package/lib/elements/entities/message/template/message_template.schema.d.ts +9 -0
- package/lib/elements/entities/message/template/message_template.schema.js +25 -0
- package/lib/elements/entities/message/template/message_template_field.builder.d.ts +8 -0
- package/lib/elements/entities/message/template/message_template_field.builder.js +8 -0
- package/lib/elements/index.d.ts +1 -1
- package/lib/elements/index.js +1 -1
- package/lib/engine/apps/app.config.d.ts +15 -11
- package/lib/engine/apps/app.config.js +3 -0
- package/lib/engine/apps/app.d.ts +12 -20
- package/lib/engine/apps/app.js +13 -10
- package/lib/engine/apps/inline.app.d.ts +12 -8
- package/lib/engine/apps/inline.app.js +27 -24
- package/lib/engine/apps/monolyth/monolyth.app.d.ts +13 -5
- package/lib/engine/apps/monolyth/monolyth.app.js +14 -6
- package/lib/engine/apps/service.d.ts +30 -0
- package/lib/engine/apps/service.js +15 -0
- package/lib/engine/auth/authn.d.ts +14 -1
- package/lib/engine/auth/authn.js +4 -0
- package/lib/engine/auth/zero.authn_provider.d.ts +11 -3
- package/lib/engine/auth/zero.authn_provider.js +13 -2
- package/lib/engine/cli/cli.d.ts +8 -2
- package/lib/engine/cli/cli.js +10 -1
- package/lib/engine/cli/cli_adapter.d.ts +11 -1
- package/lib/engine/cli/cli_adapter.js +10 -1
- package/lib/engine/cli/cli_input.d.ts +4 -0
- package/lib/engine/cli/cli_input.js +4 -0
- package/lib/engine/cli/ui.d.ts +14 -2
- package/lib/engine/cli/ui.js +10 -6
- package/lib/engine/daemon.d.ts +96 -9
- package/lib/engine/daemon.js +101 -18
- package/lib/engine/data/date.d.ts +4 -0
- package/lib/engine/data/date.js +4 -0
- package/lib/engine/data/datetime.d.ts +4 -0
- package/lib/engine/data/datetime.js +4 -0
- package/lib/engine/data/decimal.d.ts +4 -0
- package/lib/engine/data/decimal.js +4 -0
- package/lib/engine/data/file.d.ts +23 -23
- package/lib/engine/data/file.js +66 -29
- package/lib/engine/data/json.d.ts +4 -0
- package/lib/engine/data/json.js +4 -0
- package/lib/engine/data/tree.d.ts +4 -0
- package/lib/engine/data/tree.js +4 -0
- package/lib/engine/dependency.d.ts +65 -3
- package/lib/engine/dependency.js +70 -0
- package/lib/engine/module.d.ts +110 -8
- package/lib/engine/module.js +131 -31
- package/lib/engine/space.d.ts +163 -10
- package/lib/engine/space.js +184 -22
- package/lib/engine/transaction/nodes/bucket.trx_node.d.ts +12 -0
- package/lib/engine/transaction/nodes/bucket.trx_node.js +13 -2
- package/lib/engine/transaction/nodes/bucket_query.trx_node.d.ts +4 -0
- package/lib/engine/transaction/nodes/bucket_query.trx_node.js +9 -10
- package/lib/engine/transaction/nodes/job.trx_node.d.ts +4 -0
- package/lib/engine/transaction/nodes/job.trx_node.js +6 -4
- package/lib/engine/transaction/nodes/machine.trx_node.d.ts +4 -0
- package/lib/engine/transaction/nodes/machine.trx_node.js +6 -4
- package/lib/engine/transaction/nodes/queue.trx_node.d.ts +4 -0
- package/lib/engine/transaction/nodes/queue.trx_node.js +5 -2
- package/lib/engine/transaction/nodes/resource.trx_node.d.ts +4 -0
- package/lib/engine/transaction/nodes/resource.trx_node.js +6 -4
- package/lib/engine/transaction/trx.d.ts +14 -4
- package/lib/engine/transaction/trx.js +10 -1
- package/lib/engine/transaction/trx_engine.config.d.ts +2 -2
- package/lib/engine/transaction/trx_engine.d.ts +8 -3
- package/lib/engine/transaction/trx_engine.js +24 -20
- package/lib/engine/transaction/trx_node.d.ts +8 -2
- package/lib/engine/transaction/trx_node.js +17 -1
- package/lib/engine/tree.d.ts +54 -2
- package/lib/engine/tree.js +60 -19
- package/lib/engine/util/mime.d.ts +4 -4
- package/lib/engine/util/mime.js +7 -9
- package/lib/schema.d.ts +2 -2
- package/package.json +2 -3
- package/tools/joaquin/job.js +2 -2
- package/tools/joaquin/message.js +2 -2
- package/tools/joaquin/mock.d.ts +6 -6
- package/tsconfig.build.tsbuildinfo +1 -1
- package/lib/adapters/postgres/src/migrator/bucket.d.ts +0 -20
- package/lib/adapters/postgres/src/migrator/bucket.js +0 -184
- package/lib/adapters/postgres/src/migrator/csv.d.ts +0 -7
- package/lib/adapters/postgres/src/migrator/csv.js +0 -72
- package/lib/adapters/postgres/src/migrator/database.d.ts +0 -37
- package/lib/adapters/postgres/src/migrator/database.js +0 -88
- package/lib/adapters/postgres/src/migrator/index.d.ts +0 -1
- package/lib/adapters/postgres/src/migrator/index.js +0 -5
- package/lib/adapters/postgres/src/migrator/migration.d.ts +0 -57
- package/lib/adapters/postgres/src/migrator/migration.js +0 -203
- package/lib/adapters/postgres/src/migrator/migrator.d.ts +0 -21
- package/lib/adapters/postgres/src/migrator/migrator.js +0 -76
- package/lib/adapters/postgres/src/migrator/runner.d.ts +0 -71
- package/lib/adapters/postgres/src/migrator/runner.js +0 -271
- package/lib/adapters/postgres/src/postgres.bucket_adapter.d.ts +0 -42
- package/lib/adapters/postgres/src/postgres.bucket_adapter.js +0 -294
- package/lib/adapters/postgres/src/postgres.cli.d.ts +0 -66
- package/lib/adapters/postgres/src/postgres.cli.js +0 -184
- package/lib/adapters/postgres/src/postgres.config.d.ts +0 -5
- package/lib/adapters/postgres/src/postgres.config.js +0 -2
- package/lib/adapters/postgres/src/postgres.nql.d.ts +0 -16
- package/lib/adapters/postgres/src/postgres.nql.js +0 -123
- package/lib/adapters/postgres/src/postgres.provider.d.ts +0 -18
- package/lib/adapters/postgres/src/postgres.provider.js +0 -77
- package/lib/adapters/postgres/test/postgres.bucket_adapter.test.d.ts +0 -1
- package/lib/adapters/postgres/test/postgres.bucket_adapter.test.js +0 -210
- package/lib/elements/entities/bucket/adapters/memory.bucket_query copy.d.ts +0 -0
- package/lib/elements/entities/bucket/adapters/memory.bucket_query copy.js +0 -218
- package/lib/elements/entities/bucket/adapters/slow_memory.bucket_adapter.d.ts +0 -0
- package/lib/elements/entities/bucket/adapters/slow_memory.bucket_adapter.js +0 -47
- package/lib/engine/apps/monolyth/monolyth.cli.d.ts +0 -45
- package/lib/engine/apps/monolyth/monolyth.cli.js +0 -362
- package/lib/engine/util/cache.d.ts +0 -6
- package/lib/engine/util/cache.js +0 -20
package/lib/engine/module.js
CHANGED
|
@@ -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/
|
|
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/
|
|
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
|
-
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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
|
-
|
|
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(
|
|
227
|
+
fs.readdirSync(dirpath, { withFileTypes: true })
|
|
173
228
|
.forEach(node => {
|
|
174
|
-
const nodePath = path.resolve(
|
|
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(
|
|
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(
|
|
218
|
-
this.mergeInlineJobs(
|
|
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(
|
|
224
|
-
this.mergeInlineJobs(
|
|
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(
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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,
|
|
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,
|
|
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.
|
|
367
|
+
this.destroyElement('message', name);
|
|
284
368
|
}
|
|
285
369
|
// Destroy buckets
|
|
286
370
|
for (const name in this.buckets || {}) {
|
|
287
|
-
this.
|
|
371
|
+
this.destroyElement('bucket', name);
|
|
288
372
|
}
|
|
289
373
|
// Destroy jobs
|
|
290
374
|
for (const name in this.jobs || []) {
|
|
291
|
-
this.
|
|
375
|
+
this.destroyElement('job', name);
|
|
292
376
|
}
|
|
293
377
|
// Destroy resources
|
|
294
378
|
for (const name in this.resources || []) {
|
|
295
|
-
this.
|
|
379
|
+
this.destroyElement('resource', name);
|
|
296
380
|
}
|
|
297
381
|
// Destroy machines
|
|
298
382
|
for (const name in this.machines || []) {
|
|
299
|
-
this.
|
|
383
|
+
this.destroyElement('machine', name);
|
|
300
384
|
}
|
|
301
385
|
// Destroy queues
|
|
302
386
|
for (const name in this.queues || []) {
|
|
303
|
-
this.
|
|
387
|
+
this.destroyElement('queue', name);
|
|
304
388
|
}
|
|
305
389
|
// Destroy controllers
|
|
306
390
|
for (const name in this.controllers || []) {
|
|
307
|
-
this.
|
|
391
|
+
this.destroyElement('controller', name);
|
|
308
392
|
}
|
|
309
393
|
}
|
|
310
|
-
|
|
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
|
-
|
|
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
|
}
|
package/lib/engine/space.d.ts
CHANGED
|
@@ -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/
|
|
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
|
|
27
|
+
private dirpath;
|
|
17
28
|
private _authn;
|
|
18
29
|
private _name;
|
|
19
|
-
constructor(dirname: string);
|
|
20
30
|
/**
|
|
21
|
-
* Space
|
|
22
|
-
|
|
23
|
-
|
|
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
|
-
|
|
27
|
-
|
|
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
|
-
|
|
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>;
|