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.
- package/lib/adapters/postgres/src/migrator/database.d.ts +3 -6
- package/lib/adapters/postgres/src/migrator/database.js +20 -20
- package/lib/adapters/postgres/src/migrator/generator/generator.d.ts +22 -0
- package/lib/adapters/postgres/src/migrator/generator/generator.js +326 -0
- package/lib/adapters/postgres/src/migrator/generator/migration.d.ts +66 -0
- package/lib/adapters/postgres/src/migrator/generator/migration.js +249 -0
- package/lib/adapters/postgres/src/migrator/generator/provider.d.ts +19 -0
- package/lib/adapters/postgres/src/migrator/{migrator.js → generator/provider.js} +23 -25
- package/lib/adapters/postgres/src/migrator/index.d.ts +47 -1
- package/lib/adapters/postgres/src/migrator/index.js +20 -3
- package/lib/adapters/postgres/src/migrator/runner/runner.d.ts +17 -0
- package/lib/adapters/postgres/src/migrator/runner/runner.js +249 -0
- package/lib/adapters/postgres/src/migrator/runner/status.d.ts +17 -0
- package/lib/adapters/postgres/src/migrator/runner/status.js +55 -0
- package/lib/adapters/postgres/src/postgres.cli.d.ts +11 -1
- package/lib/adapters/postgres/src/postgres.cli.js +34 -11
- package/lib/adapters/postgres/test/postgres.bucket_adapter.test.js +4 -4
- 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 +4 -0
- 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 +16 -0
- package/lib/elements/blocks/machine/machine.schema.js +16 -1
- 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 +4 -0
- package/lib/elements/edge/controller/adapters/controller_adapter.js +4 -0
- 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.d.ts +4 -0
- package/lib/elements/edge/controller/controller.js +4 -0
- 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 +16 -11
- 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.d.ts +9 -2
- package/lib/elements/entities/bucket/bucket.js +14 -7
- 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 +3 -0
- package/lib/engine/apps/app.config.js +3 -0
- package/lib/engine/apps/app.d.ts +3 -0
- package/lib/engine/apps/app.js +4 -1
- package/lib/engine/apps/inline.app.d.ts +3 -0
- package/lib/engine/apps/inline.app.js +3 -0
- package/lib/engine/apps/monolyth/monolyth.app.d.ts +8 -0
- package/lib/engine/apps/monolyth/monolyth.app.js +8 -0
- package/lib/engine/auth/authn.d.ts +4 -0
- package/lib/engine/auth/authn.js +4 -0
- package/lib/engine/auth/zero.authn_provider.d.ts +4 -0
- package/lib/engine/auth/zero.authn_provider.js +4 -0
- package/lib/engine/cli/cli.d.ts +7 -1
- 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 +93 -6
- package/lib/engine/daemon.js +90 -7
- 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 +63 -2
- package/lib/engine/dependency.js +52 -0
- package/lib/engine/module.d.ts +108 -8
- package/lib/engine/module.js +107 -22
- 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 +12 -0
- package/lib/engine/transaction/nodes/bucket_query.trx_node.d.ts +4 -0
- package/lib/engine/transaction/nodes/bucket_query.trx_node.js +4 -0
- package/lib/engine/transaction/nodes/job.trx_node.d.ts +4 -0
- package/lib/engine/transaction/nodes/job.trx_node.js +4 -0
- package/lib/engine/transaction/nodes/machine.trx_node.d.ts +4 -0
- package/lib/engine/transaction/nodes/machine.trx_node.js +4 -0
- package/lib/engine/transaction/nodes/queue.trx_node.d.ts +4 -0
- package/lib/engine/transaction/nodes/queue.trx_node.js +4 -0
- package/lib/engine/transaction/nodes/resource.trx_node.d.ts +4 -0
- package/lib/engine/transaction/nodes/resource.trx_node.js +4 -0
- package/lib/engine/transaction/trx.d.ts +8 -0
- package/lib/engine/transaction/trx.js +8 -0
- package/lib/engine/transaction/trx_engine.d.ts +4 -0
- package/lib/engine/transaction/trx_engine.js +4 -3
- package/lib/engine/transaction/trx_node.d.ts +4 -0
- package/lib/engine/transaction/trx_node.js +4 -0
- package/lib/engine/tree.d.ts +54 -2
- package/lib/engine/tree.js +54 -2
- package/lib/engine/util/mime.d.ts +4 -4
- package/lib/engine/util/mime.js +7 -9
- package/lib/schema.d.ts +1 -1
- package/package.json +1 -1
- 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/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/runner.d.ts +0 -71
- package/lib/adapters/postgres/src/migrator/runner.js +0 -271
- 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.d.ts
CHANGED
|
@@ -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/
|
|
19
|
-
import { $Externals } from "../elements/
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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>;
|
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,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
|
-
|
|
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(
|
|
216
|
+
fs.readdirSync(dirpath, { withFileTypes: true })
|
|
173
217
|
.forEach(node => {
|
|
174
|
-
const nodePath = path.resolve(
|
|
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(
|
|
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(
|
|
218
|
-
this.mergeInlineJobs(
|
|
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(
|
|
224
|
-
this.mergeInlineJobs(
|
|
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(
|
|
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
|
-
|
|
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
|
-
|
|
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.
|
|
356
|
+
this.destroyElement('message', name);
|
|
284
357
|
}
|
|
285
358
|
// Destroy buckets
|
|
286
359
|
for (const name in this.buckets || {}) {
|
|
287
|
-
this.
|
|
360
|
+
this.destroyElement('bucket', name);
|
|
288
361
|
}
|
|
289
362
|
// Destroy jobs
|
|
290
363
|
for (const name in this.jobs || []) {
|
|
291
|
-
this.
|
|
364
|
+
this.destroyElement('job', name);
|
|
292
365
|
}
|
|
293
366
|
// Destroy resources
|
|
294
367
|
for (const name in this.resources || []) {
|
|
295
|
-
this.
|
|
368
|
+
this.destroyElement('resource', name);
|
|
296
369
|
}
|
|
297
370
|
// Destroy machines
|
|
298
371
|
for (const name in this.machines || []) {
|
|
299
|
-
this.
|
|
372
|
+
this.destroyElement('machine', name);
|
|
300
373
|
}
|
|
301
374
|
// Destroy queues
|
|
302
375
|
for (const name in this.queues || []) {
|
|
303
|
-
this.
|
|
376
|
+
this.destroyElement('queue', name);
|
|
304
377
|
}
|
|
305
378
|
// Destroy controllers
|
|
306
379
|
for (const name in this.controllers || []) {
|
|
307
|
-
this.
|
|
380
|
+
this.destroyElement('controller', name);
|
|
308
381
|
}
|
|
309
382
|
}
|
|
310
|
-
|
|
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
|
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>;
|