nesoi 3.0.0 → 3.0.3
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/README.md +10 -0
- package/lib/adapters/postgres/src/migrator/bucket.d.ts +20 -0
- package/lib/adapters/postgres/src/migrator/bucket.js +184 -0
- package/lib/adapters/postgres/src/migrator/csv.d.ts +7 -0
- package/lib/adapters/postgres/src/migrator/csv.js +72 -0
- package/lib/adapters/postgres/src/migrator/migration.d.ts +2 -18
- package/lib/adapters/postgres/src/migrator/migration.js +10 -158
- package/lib/adapters/postgres/src/migrator/migrator.js +8 -5
- package/lib/adapters/postgres/src/migrator/runner.d.ts +16 -6
- package/lib/adapters/postgres/src/migrator/runner.js +103 -34
- package/lib/adapters/postgres/src/postgres.bucket_adapter.d.ts +19 -22
- package/lib/adapters/postgres/src/postgres.bucket_adapter.js +116 -100
- package/lib/adapters/postgres/src/postgres.cli.d.ts +23 -3
- package/lib/adapters/postgres/src/postgres.cli.js +70 -10
- package/lib/adapters/postgres/src/postgres.config.d.ts +5 -0
- package/lib/adapters/postgres/src/postgres.config.js +2 -0
- package/lib/adapters/postgres/src/postgres.nql.d.ts +7 -3
- package/lib/adapters/postgres/src/postgres.nql.js +86 -32
- package/lib/adapters/postgres/src/postgres.provider.d.ts +18 -0
- package/lib/adapters/postgres/src/postgres.provider.js +77 -0
- package/lib/adapters/postgres/test/postgres.bucket_adapter.test.js +76 -39
- package/lib/compiler/apps/monolyth/monolyth_compiler.d.ts +3 -0
- package/lib/compiler/apps/monolyth/monolyth_compiler.js +24 -0
- package/lib/compiler/apps/monolyth/stages/2_build_typescript_stage.js +2 -1
- package/lib/compiler/apps/monolyth/stages/5_dump_cli_stage.js +1 -1
- package/lib/compiler/elements/bucket.element.js +26 -11
- package/lib/compiler/elements/constants.element.js +1 -1
- package/lib/compiler/elements/element.d.ts +2 -0
- package/lib/compiler/elements/message.element.js +4 -4
- package/lib/compiler/helpers/dump_helpers.js +5 -2
- package/lib/compiler/stages/7_dump_stage.js +2 -0
- package/lib/compiler/treeshake.js +9 -37
- package/lib/compiler/typescript/bridge/extract.js +12 -0
- package/lib/compiler/typescript/bridge/inject.js +3 -0
- package/lib/compiler/typescript/bridge/organize.js +3 -3
- package/lib/elements/blocks/block.builder.js +4 -2
- package/lib/elements/blocks/job/internal/resource_job.builder.d.ts +22 -20
- package/lib/elements/blocks/job/internal/resource_job.d.ts +2 -1
- package/lib/elements/blocks/job/internal/resource_job.js +17 -4
- package/lib/elements/blocks/job/job.js +3 -0
- package/lib/elements/blocks/job/job.types.d.ts +7 -0
- package/lib/elements/blocks/job/job.types.js +2 -0
- package/lib/elements/blocks/machine/machine.js +3 -2
- package/lib/elements/blocks/resource/resource.builder.js +2 -4
- package/lib/elements/blocks/resource/resource.d.ts +5 -3
- package/lib/elements/blocks/resource/resource.js +26 -17
- package/lib/elements/edge/controller/adapters/controller_adapter.d.ts +2 -1
- package/lib/elements/edge/controller/adapters/controller_adapter.js +11 -2
- package/lib/elements/edge/controller/controller.builder.d.ts +4 -5
- package/lib/elements/edge/controller/controller.builder.js +7 -7
- package/lib/elements/edge/controller/controller.d.ts +2 -1
- package/lib/elements/edge/controller/controller.js +8 -6
- package/lib/elements/entities/bucket/adapters/bucket_adapter.d.ts +61 -23
- package/lib/elements/entities/bucket/adapters/bucket_adapter.js +22 -13
- package/lib/elements/entities/bucket/adapters/memory.bucket_adapter.d.ts +21 -22
- package/lib/elements/entities/bucket/adapters/memory.bucket_adapter.js +68 -2
- package/lib/elements/entities/bucket/adapters/memory.nql.d.ts +10 -6
- package/lib/elements/entities/bucket/adapters/memory.nql.js +38 -3
- package/lib/elements/entities/bucket/adapters/slow_memory.bucket_adapter.d.ts +0 -20
- package/lib/elements/entities/bucket/adapters/slow_memory.bucket_adapter.js +46 -30
- package/lib/elements/entities/bucket/bucket.builder.d.ts +8 -2
- package/lib/elements/entities/bucket/bucket.builder.js +13 -19
- package/lib/elements/entities/bucket/bucket.config.d.ts +5 -1
- package/lib/elements/entities/bucket/bucket.d.ts +180 -19
- package/lib/elements/entities/bucket/bucket.js +658 -48
- package/lib/elements/entities/bucket/bucket.schema.d.ts +7 -1
- package/lib/elements/entities/bucket/bucket.schema.js +2 -1
- package/lib/elements/entities/bucket/bucket.types.d.ts +2 -7
- package/lib/elements/entities/bucket/cache/bucket_cache.d.ts +6 -2
- package/lib/elements/entities/bucket/cache/bucket_cache.js +12 -12
- package/lib/elements/entities/bucket/graph/bucket_graph.d.ts +32 -5
- package/lib/elements/entities/bucket/graph/bucket_graph.js +80 -111
- package/lib/elements/entities/bucket/graph/bucket_graph.schema.d.ts +3 -6
- package/lib/elements/entities/bucket/graph/bucket_graph.schema.js +1 -4
- package/lib/elements/entities/bucket/graph/bucket_graph_link.builder.d.ts +3 -7
- package/lib/elements/entities/bucket/graph/bucket_graph_link.builder.js +6 -2
- package/lib/elements/entities/bucket/model/bucket_model.builder.js +1 -1
- package/lib/elements/entities/bucket/model/bucket_model.convert.js +3 -3
- package/lib/elements/entities/bucket/model/bucket_model.schema.d.ts +37 -8
- package/lib/elements/entities/bucket/model/bucket_model.schema.js +25 -4
- package/lib/elements/entities/bucket/model/bucket_model_field.builder.d.ts +33 -14
- package/lib/elements/entities/bucket/model/bucket_model_field.builder.js +56 -13
- package/lib/elements/entities/bucket/query/nql.schema.d.ts +1 -0
- package/lib/elements/entities/bucket/query/nql_compiler.js +13 -2
- package/lib/elements/entities/bucket/query/nql_engine.d.ts +11 -4
- package/lib/elements/entities/bucket/query/nql_engine.js +20 -11
- package/lib/elements/entities/bucket/view/bucket_view.js +63 -35
- package/lib/elements/entities/bucket/view/bucket_view.schema.d.ts +5 -2
- package/lib/elements/entities/bucket/view/bucket_view_field.builder.d.ts +6 -2
- package/lib/elements/entities/bucket/view/bucket_view_field.builder.js +21 -15
- package/lib/elements/entities/constants/constants.schema.d.ts +1 -1
- package/lib/elements/entities/drive/drive_adapter.d.ts +36 -0
- package/lib/elements/entities/drive/drive_adapter.js +10 -0
- package/lib/elements/entities/drive/local.drive_adapter.d.ts +8 -0
- package/lib/elements/entities/drive/local.drive_adapter.js +28 -0
- package/lib/elements/entities/message/message.schema.d.ts +1 -0
- package/lib/elements/entities/message/message.schema.js +33 -0
- package/lib/elements/entities/message/message_parser.d.ts +5 -1
- package/lib/elements/entities/message/message_parser.js +56 -35
- package/lib/elements/entities/message/template/message_template.schema.d.ts +10 -8
- package/lib/elements/entities/message/template/message_template_field.builder.d.ts +16 -6
- package/lib/elements/entities/message/template/message_template_field.builder.js +25 -0
- package/lib/elements/entities/message/template/message_template_parser.js +2 -1
- package/lib/engine/apps/app.config.d.ts +32 -11
- package/lib/engine/apps/app.config.js +12 -0
- package/lib/engine/apps/app.d.ts +2 -0
- package/lib/engine/apps/app.js +3 -0
- package/lib/engine/apps/inline.app.d.ts +5 -3
- package/lib/engine/apps/inline.app.js +27 -12
- package/lib/engine/apps/monolyth/monolyth.app.d.ts +4 -2
- package/lib/engine/apps/monolyth/monolyth.app.js +22 -10
- package/lib/engine/auth/authn.d.ts +5 -1
- package/lib/engine/auth/zero.authn_provider.d.ts +4 -2
- package/lib/engine/auth/zero.authn_provider.js +2 -2
- package/lib/engine/cli/cli.d.ts +3 -1
- package/lib/engine/cli/cli.js +22 -3
- package/lib/engine/cli/cli_adapter.d.ts +2 -1
- package/lib/engine/cli/cli_adapter.js +2 -1
- package/lib/engine/cli/cli_input.d.ts +19 -0
- package/lib/engine/cli/cli_input.js +207 -0
- package/lib/engine/cli/ui.d.ts +1 -1
- package/lib/engine/cli/ui.js +2 -2
- package/lib/engine/daemon.d.ts +3 -2
- package/lib/engine/daemon.js +14 -2
- package/lib/engine/data/date.js +2 -2
- package/lib/engine/data/datetime.d.ts +40 -4
- package/lib/engine/data/datetime.js +70 -11
- package/lib/engine/data/decimal.d.ts +1 -1
- package/lib/engine/data/decimal.js +3 -3
- package/lib/engine/data/error.d.ts +21 -4
- package/lib/engine/data/error.js +23 -7
- package/lib/engine/data/file.d.ts +23 -0
- package/lib/engine/data/file.js +53 -0
- package/lib/engine/data/json.d.ts +6 -0
- package/lib/engine/data/json.js +26 -0
- package/lib/engine/data/obj.d.ts +1 -1
- package/lib/engine/data/trash.d.ts +14 -0
- package/lib/engine/data/trash.js +2 -0
- package/lib/engine/data/tree.d.ts +7 -12
- package/lib/engine/data/tree.js +101 -49
- package/lib/engine/module.d.ts +2 -1
- package/lib/engine/module.js +2 -5
- package/lib/engine/space.d.ts +1 -0
- package/lib/engine/space.js +6 -0
- package/lib/engine/transaction/nodes/bucket.trx_node.d.ts +156 -24
- package/lib/engine/transaction/nodes/bucket.trx_node.js +297 -467
- package/lib/engine/transaction/nodes/bucket_query.trx_node.d.ts +4 -2
- package/lib/engine/transaction/nodes/bucket_query.trx_node.js +27 -15
- package/lib/engine/transaction/nodes/job.trx_node.d.ts +2 -1
- package/lib/engine/transaction/nodes/job.trx_node.js +6 -0
- package/lib/engine/transaction/trx.d.ts +5 -2
- package/lib/engine/transaction/trx.js +2 -2
- package/lib/engine/transaction/trx_engine.config.d.ts +1 -3
- package/lib/engine/transaction/trx_engine.d.ts +2 -2
- package/lib/engine/transaction/trx_engine.js +14 -11
- package/lib/engine/transaction/trx_node.d.ts +14 -4
- package/lib/engine/transaction/trx_node.js +50 -8
- package/lib/engine/tree.d.ts +1 -1
- package/lib/engine/util/crypto.d.ts +50 -0
- package/lib/engine/util/crypto.js +89 -0
- package/lib/engine/util/deep.d.ts +5 -0
- package/lib/engine/util/deep.js +46 -0
- package/lib/engine/util/dotenv.d.ts +2 -8
- package/lib/engine/util/dotenv.js +14 -36
- package/lib/engine/util/hash.d.ts +3 -0
- package/lib/engine/util/hash.js +23 -0
- package/lib/engine/util/log.js +1 -1
- package/lib/engine/util/mime.d.ts +10 -0
- package/lib/engine/util/mime.js +389 -0
- package/lib/engine/util/parse.d.ts +6 -5
- package/lib/engine/util/parse.js +16 -15
- package/lib/engine/util/path.d.ts +3 -0
- package/lib/engine/util/path.js +92 -0
- package/lib/engine/util/rules.d.ts +4 -0
- package/lib/engine/util/rules.js +12 -0
- package/package.json +1 -1
- package/tools/compile.js +2 -2
- package/tools/dotenv.d.ts +1 -0
- package/tools/dotenv.js +4 -0
- package/tools/joaquin/job.d.ts +5 -5
- package/tools/joaquin/mock.d.ts +23 -2
- package/tools/joaquin/mock.js +127 -21
- package/tsconfig.build.tsbuildinfo +1 -1
- package/lib/adapters/postgres/test/postgres.bucket_query.test.d.ts +0 -0
- package/lib/adapters/postgres/test/postgres.bucket_query.test.js +0 -136
|
@@ -50,6 +50,7 @@ const _2_build_typescript_stage_1 = require("./stages/2_build_typescript_stage")
|
|
|
50
50
|
const log_1 = require("../../../engine/util/log");
|
|
51
51
|
const app_1 = require("../../../engine/apps/app");
|
|
52
52
|
const monolyth_app_1 = require("../../../engine/apps/monolyth/monolyth.app");
|
|
53
|
+
const path_1 = require("../../../engine/util/path");
|
|
53
54
|
class MonolythCompiler {
|
|
54
55
|
constructor(compiler, appPath, config = {}) {
|
|
55
56
|
this.compiler = compiler;
|
|
@@ -63,6 +64,8 @@ class MonolythCompiler {
|
|
|
63
64
|
const appFile = space_1.Space.path(this.compiler.space, this.appPath);
|
|
64
65
|
const app = (await Promise.resolve(`${appFile}`).then(s => __importStar(require(s)))).default;
|
|
65
66
|
this.config = Object.assign({}, app_1.App.getInfo(app).config?.compiler || {}, this.config);
|
|
67
|
+
this.mergeProviderPaths(app);
|
|
68
|
+
this.expandLibPaths();
|
|
66
69
|
try {
|
|
67
70
|
await new _1_mkdir_stage_1.MkdirStage(this, app).run();
|
|
68
71
|
await new _2_build_typescript_stage_1.BuildTypescriptStage(this, app).run();
|
|
@@ -76,6 +79,27 @@ class MonolythCompiler {
|
|
|
76
79
|
process.exit();
|
|
77
80
|
}
|
|
78
81
|
}
|
|
82
|
+
mergeProviderPaths(app) {
|
|
83
|
+
var _a;
|
|
84
|
+
const providers = app_1.App.getProviders(app);
|
|
85
|
+
for (const name in providers) {
|
|
86
|
+
const provider = providers[name];
|
|
87
|
+
if (!provider.libPaths)
|
|
88
|
+
continue;
|
|
89
|
+
(_a = this.config).libPaths ?? (_a.libPaths = []);
|
|
90
|
+
this.config.libPaths.push(...provider.libPaths);
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
expandLibPaths() {
|
|
94
|
+
var _a;
|
|
95
|
+
const expandedPaths = [];
|
|
96
|
+
(_a = this.config).libPaths ?? (_a.libPaths = []);
|
|
97
|
+
for (const path of this.config.libPaths) {
|
|
98
|
+
const expanded = path_1.Path.expandWildcard(path);
|
|
99
|
+
expandedPaths.push(...expanded);
|
|
100
|
+
}
|
|
101
|
+
this.config.libPaths = expandedPaths;
|
|
102
|
+
}
|
|
79
103
|
static async scanAll(dir) {
|
|
80
104
|
const apps = [];
|
|
81
105
|
const nodes = fs.readdirSync(dir, { withFileTypes: true });
|
|
@@ -80,7 +80,8 @@ class BuildTypescriptStage {
|
|
|
80
80
|
if (config.nesoiPath) {
|
|
81
81
|
tsPaths['nesoi/*'] = [`${config.nesoiPath}/*`];
|
|
82
82
|
}
|
|
83
|
-
|
|
83
|
+
libPaths.forEach(lib => {
|
|
84
|
+
lib = space_1.Space.relPath(compiler.space, lib);
|
|
84
85
|
replacePaths[lib] = path.resolve(dirs.build, lib);
|
|
85
86
|
tsPaths['.nesoi/*'] = [space_1.Space.path(compiler.space, '.nesoi') + '/*'];
|
|
86
87
|
tsPaths[lib + '/*'] = [space_1.Space.path(compiler.space, lib) + '/*'];
|
|
@@ -50,7 +50,7 @@ class DumpCLIStage {
|
|
|
50
50
|
log_1.Log.info('compiler', 'monolyth', 'Dumping cli.js file to build/bin folder...');
|
|
51
51
|
const { dirs } = this.monolyth;
|
|
52
52
|
let str = '';
|
|
53
|
-
str += 'require("dotenv
|
|
53
|
+
str += 'require("nesoi/tools/dotenv");\n';
|
|
54
54
|
str += 'const app = require(\'../app\').default\n';
|
|
55
55
|
str += 'const { Log } = require(\'nesoi/lib/engine/util/log\');\n';
|
|
56
56
|
str += 'Log.level = \'debug\';\n';
|
|
@@ -76,9 +76,9 @@ class BucketElement extends element_1.Element {
|
|
|
76
76
|
type = 'NesoiDatetime';
|
|
77
77
|
}
|
|
78
78
|
else if (field.type === 'enum') {
|
|
79
|
-
const options = field.
|
|
79
|
+
const options = field.meta.enum.options;
|
|
80
80
|
if (typeof options === 'string') {
|
|
81
|
-
const constants = this.compiler.tree.getSchema(field.
|
|
81
|
+
const constants = this.compiler.tree.getSchema(field.meta.enum.dep);
|
|
82
82
|
const constName = name_helpers_1.NameHelpers.names(constants);
|
|
83
83
|
const tag = dependency_1.$Tag.parseOrFail(options);
|
|
84
84
|
if (tag.module || constants.module !== this.module) {
|
|
@@ -97,7 +97,7 @@ class BucketElement extends element_1.Element {
|
|
|
97
97
|
}
|
|
98
98
|
}
|
|
99
99
|
else if (field.type === 'file') {
|
|
100
|
-
type = '
|
|
100
|
+
type = 'NesoiFile';
|
|
101
101
|
}
|
|
102
102
|
else if (field.type === 'float') {
|
|
103
103
|
type = 'number';
|
|
@@ -116,10 +116,10 @@ class BucketElement extends element_1.Element {
|
|
|
116
116
|
}
|
|
117
117
|
else if (field.type === 'dict') {
|
|
118
118
|
type = this.buildModelType({
|
|
119
|
-
'[x
|
|
119
|
+
'[x in string]': field.children.__dict
|
|
120
120
|
});
|
|
121
121
|
}
|
|
122
|
-
if (!field.required &&
|
|
122
|
+
if (!field.required && field.defaultValue === undefined) {
|
|
123
123
|
if (typeof type === 'object') {
|
|
124
124
|
type.__optional = true;
|
|
125
125
|
}
|
|
@@ -136,9 +136,17 @@ class BucketElement extends element_1.Element {
|
|
|
136
136
|
}
|
|
137
137
|
}
|
|
138
138
|
if (field.or) {
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
139
|
+
const orType = this.buildModelFieldType(field.or);
|
|
140
|
+
if (typeof type === 'object') {
|
|
141
|
+
type.__or = orType;
|
|
142
|
+
}
|
|
143
|
+
else if (typeof orType === 'object') {
|
|
144
|
+
type = orType;
|
|
145
|
+
type.__or = orType;
|
|
146
|
+
}
|
|
147
|
+
else {
|
|
148
|
+
type = `${type} | ${orType}`;
|
|
149
|
+
}
|
|
142
150
|
}
|
|
143
151
|
return type;
|
|
144
152
|
}
|
|
@@ -176,10 +184,10 @@ class BucketElement extends element_1.Element {
|
|
|
176
184
|
let nextKey = keyPath;
|
|
177
185
|
if ('__dict' in field.children) {
|
|
178
186
|
nextFields = field.children.__dict.children;
|
|
179
|
-
nextKey += '
|
|
187
|
+
nextKey += '.#';
|
|
180
188
|
}
|
|
181
189
|
if (field.array)
|
|
182
|
-
nextKey += '
|
|
190
|
+
nextKey += '.#';
|
|
183
191
|
if (nextFields) {
|
|
184
192
|
Object.assign(fieldPaths, this.buildModelFieldNamesType(model[key], nextFields, nextKey));
|
|
185
193
|
}
|
|
@@ -258,6 +266,12 @@ class BucketElement extends element_1.Element {
|
|
|
258
266
|
children: children.fields
|
|
259
267
|
};
|
|
260
268
|
}
|
|
269
|
+
else if (field.scope === 'drive') {
|
|
270
|
+
fields[key] = {
|
|
271
|
+
'#data': 'string',
|
|
272
|
+
children: 'undefined'
|
|
273
|
+
};
|
|
274
|
+
}
|
|
261
275
|
const { children, ...f } = field;
|
|
262
276
|
const type = dump_helpers_1.DumpHelpers.dumpValueToType(f, {
|
|
263
277
|
$t: () => dump_helpers_1.DumpHelpers.dumpValueToType('bucket.view.field'),
|
|
@@ -269,7 +283,8 @@ class BucketElement extends element_1.Element {
|
|
|
269
283
|
graph: v => ({
|
|
270
284
|
link: dump_helpers_1.DumpHelpers.dumpValueToType(v.link),
|
|
271
285
|
view: v.view ? dump_helpers_1.DumpHelpers.dumpValueToType(v.view) : 'undefined'
|
|
272
|
-
})
|
|
286
|
+
}),
|
|
287
|
+
drive: v => dump_helpers_1.DumpHelpers.dumpValueToType(v)
|
|
273
288
|
}
|
|
274
289
|
});
|
|
275
290
|
Object.assign(fields[key], type);
|
|
@@ -10,6 +10,7 @@ export type TypeAsObj = string | ({
|
|
|
10
10
|
} & {
|
|
11
11
|
__array?: boolean;
|
|
12
12
|
__optional?: boolean;
|
|
13
|
+
__or?: TypeAsObj;
|
|
13
14
|
});
|
|
14
15
|
export type ObjTypeAsObj = TypeAsObj & Record<string, any>;
|
|
15
16
|
export declare abstract class Element<T extends AnyElementSchema> {
|
|
@@ -40,6 +41,7 @@ export declare abstract class Element<T extends AnyElementSchema> {
|
|
|
40
41
|
} & {
|
|
41
42
|
__array?: boolean;
|
|
42
43
|
__optional?: boolean;
|
|
44
|
+
__or?: TypeAsObj;
|
|
43
45
|
} & Record<string, any>) | "{}";
|
|
44
46
|
static makeIOType(compiler: Compiler, schema: $Job | $Machine | $MachineState | $MachineTransition | $Queue): {
|
|
45
47
|
input: string;
|
|
@@ -91,8 +91,8 @@ class MessageElement extends element_1.Element {
|
|
|
91
91
|
}
|
|
92
92
|
}
|
|
93
93
|
else if (field.type === 'file') {
|
|
94
|
-
input[key] = '
|
|
95
|
-
output[key] = '
|
|
94
|
+
input[key] = 'NesoiFile';
|
|
95
|
+
output[key] = 'NesoiFile';
|
|
96
96
|
}
|
|
97
97
|
else if (field.type === 'float') {
|
|
98
98
|
input[key] = 'number';
|
|
@@ -124,10 +124,10 @@ class MessageElement extends element_1.Element {
|
|
|
124
124
|
else if (field.type === 'dict') {
|
|
125
125
|
const child = this.buildIO(field.children);
|
|
126
126
|
input[key] = {
|
|
127
|
-
'[x
|
|
127
|
+
'[x in string]': child.input.__dict
|
|
128
128
|
};
|
|
129
129
|
output[key] = {
|
|
130
|
-
'[x
|
|
130
|
+
'[x in string]': child.output.__dict
|
|
131
131
|
};
|
|
132
132
|
}
|
|
133
133
|
else if (field.type === 'msg') {
|
|
@@ -26,7 +26,7 @@ class DumpHelpers {
|
|
|
26
26
|
else {
|
|
27
27
|
str = '{\n' +
|
|
28
28
|
Object.entries(type)
|
|
29
|
-
.filter(([key]) =>
|
|
29
|
+
.filter(([key]) => !['__array', '__optional', '__or'].includes(key))
|
|
30
30
|
.map(([key, value]) => {
|
|
31
31
|
let k = key;
|
|
32
32
|
// If key is not a special [],
|
|
@@ -54,8 +54,11 @@ class DumpHelpers {
|
|
|
54
54
|
+ `\n${pad0}}`;
|
|
55
55
|
}
|
|
56
56
|
if (typeof type === 'object') {
|
|
57
|
+
if (type.__or) {
|
|
58
|
+
str += ' | ' + this.dumpType(type.__or, d);
|
|
59
|
+
}
|
|
57
60
|
if (type.__array) {
|
|
58
|
-
str
|
|
61
|
+
str = `(${str})[]`;
|
|
59
62
|
}
|
|
60
63
|
if (type.__optional) {
|
|
61
64
|
str += ' | undefined';
|
|
@@ -113,6 +113,8 @@ class DumpStage {
|
|
|
113
113
|
moduleFile.push(`import { $Module, $Constants, $Bucket, $Message, $Job, $Resource, $Machine, $Controller, $Queue } from '${nesoiPath}/lib/elements';`);
|
|
114
114
|
moduleFile.push(`import { NesoiDate } from '${nesoiPath}/lib/engine/data/date';`);
|
|
115
115
|
moduleFile.push(`import { NesoiDatetime } from '${nesoiPath}/lib/engine/data/datetime';`);
|
|
116
|
+
moduleFile.push(`import { NesoiDecimal } from '${nesoiPath}/lib/engine/data/decimal';`);
|
|
117
|
+
moduleFile.push(`import { NesoiFile } from '${nesoiPath}/lib/engine/data/file';`);
|
|
116
118
|
// Build module type (with all blocks)
|
|
117
119
|
const type = {
|
|
118
120
|
name: `'${module.lowName}'`,
|
|
@@ -1,37 +1,4 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
-
}) : function(o, v) {
|
|
16
|
-
o["default"] = v;
|
|
17
|
-
});
|
|
18
|
-
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
-
var ownKeys = function(o) {
|
|
20
|
-
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
-
var ar = [];
|
|
22
|
-
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
-
return ar;
|
|
24
|
-
};
|
|
25
|
-
return ownKeys(o);
|
|
26
|
-
};
|
|
27
|
-
return function (mod) {
|
|
28
|
-
if (mod && mod.__esModule) return mod;
|
|
29
|
-
var result = {};
|
|
30
|
-
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
-
__setModuleDefault(result, mod);
|
|
32
|
-
return result;
|
|
33
|
-
};
|
|
34
|
-
})();
|
|
35
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
3
|
exports.Treeshake = void 0;
|
|
37
4
|
const dependency_1 = require("../engine/dependency");
|
|
@@ -78,8 +45,8 @@ class Treeshake {
|
|
|
78
45
|
static bucketModelFields(node, fields) {
|
|
79
46
|
const dependencies = [];
|
|
80
47
|
Object.values(fields).forEach(field => {
|
|
81
|
-
if (field.
|
|
82
|
-
dependencies.push(field.
|
|
48
|
+
if (field.meta?.enum?.dep) {
|
|
49
|
+
dependencies.push(field.meta?.enum.dep);
|
|
83
50
|
}
|
|
84
51
|
if (field.children?.length) {
|
|
85
52
|
dependencies.push(...Treeshake.bucketModelFields(node, field.children));
|
|
@@ -289,12 +256,17 @@ class Treeshake {
|
|
|
289
256
|
*/
|
|
290
257
|
static async file(module, filepath) {
|
|
291
258
|
log_1.Log.debug('compiler', 'treeshake', ` └ Treeshaking file ${(0, string_1.colored)(filepath, 'blue')}`);
|
|
292
|
-
|
|
259
|
+
// Require is used here to avoid cache - which allows watch mode
|
|
260
|
+
delete require.cache[filepath];
|
|
261
|
+
// eslint-disable-next-line @typescript-eslint/no-require-imports
|
|
262
|
+
const fileBuilders = require(filepath);
|
|
293
263
|
const nodes = [];
|
|
294
264
|
for (const key in fileBuilders) {
|
|
295
265
|
const builder = fileBuilders[key];
|
|
296
266
|
if (!builder.$b) {
|
|
297
|
-
|
|
267
|
+
// TODO: check lib paths to re-enable this message
|
|
268
|
+
// without annoying
|
|
269
|
+
// Log.warn('compiler', 'treeshake', `No builder found on file ${filepath}, move it to a library folder or it won't work on the built version.`);
|
|
298
270
|
continue;
|
|
299
271
|
}
|
|
300
272
|
nodes.push(...Treeshake.builder(module, builder, filepath));
|
|
@@ -130,6 +130,10 @@ class TSBridgeExtract {
|
|
|
130
130
|
query: 'resource.*.create.0.return.input.0.return.**.rule.0',
|
|
131
131
|
expectedKinds: [ts.SyntaxKind.FunctionExpression, ts.SyntaxKind.ArrowFunction, ts.SyntaxKind.Identifier, ts.SyntaxKind.CallExpression]
|
|
132
132
|
}));
|
|
133
|
+
functions.push(...tsCompiler.query(node.filepath, {
|
|
134
|
+
query: 'resource.*.create.0.return.extra.0',
|
|
135
|
+
expectedKinds: [ts.SyntaxKind.FunctionExpression, ts.SyntaxKind.ArrowFunction, ts.SyntaxKind.Identifier, ts.SyntaxKind.CallExpression]
|
|
136
|
+
}));
|
|
133
137
|
functions.push(...tsCompiler.query(node.filepath, {
|
|
134
138
|
query: 'resource.*.create.0.return.assert.0',
|
|
135
139
|
expectedKinds: [ts.SyntaxKind.FunctionExpression, ts.SyntaxKind.ArrowFunction, ts.SyntaxKind.Identifier, ts.SyntaxKind.CallExpression]
|
|
@@ -146,6 +150,10 @@ class TSBridgeExtract {
|
|
|
146
150
|
query: 'resource.*.update.0.return.input.0.return.**.rule.0',
|
|
147
151
|
expectedKinds: [ts.SyntaxKind.FunctionExpression, ts.SyntaxKind.ArrowFunction, ts.SyntaxKind.Identifier, ts.SyntaxKind.CallExpression]
|
|
148
152
|
}));
|
|
153
|
+
functions.push(...tsCompiler.query(node.filepath, {
|
|
154
|
+
query: 'resource.*.update.0.return.extra.0',
|
|
155
|
+
expectedKinds: [ts.SyntaxKind.FunctionExpression, ts.SyntaxKind.ArrowFunction, ts.SyntaxKind.Identifier, ts.SyntaxKind.CallExpression]
|
|
156
|
+
}));
|
|
149
157
|
functions.push(...tsCompiler.query(node.filepath, {
|
|
150
158
|
query: 'resource.*.update.0.return.assert.0',
|
|
151
159
|
expectedKinds: [ts.SyntaxKind.FunctionExpression, ts.SyntaxKind.ArrowFunction, ts.SyntaxKind.Identifier, ts.SyntaxKind.CallExpression]
|
|
@@ -162,6 +170,10 @@ class TSBridgeExtract {
|
|
|
162
170
|
query: 'resource.*.delete.0.return.input.0.return.**.rule.0',
|
|
163
171
|
expectedKinds: [ts.SyntaxKind.FunctionExpression, ts.SyntaxKind.ArrowFunction, ts.SyntaxKind.Identifier, ts.SyntaxKind.CallExpression]
|
|
164
172
|
}));
|
|
173
|
+
functions.push(...tsCompiler.query(node.filepath, {
|
|
174
|
+
query: 'resource.*.delete.0.return.extra.0',
|
|
175
|
+
expectedKinds: [ts.SyntaxKind.FunctionExpression, ts.SyntaxKind.ArrowFunction, ts.SyntaxKind.Identifier, ts.SyntaxKind.CallExpression]
|
|
176
|
+
}));
|
|
165
177
|
functions.push(...tsCompiler.query(node.filepath, {
|
|
166
178
|
query: 'resource.*.delete.0.return.assert.0',
|
|
167
179
|
expectedKinds: [ts.SyntaxKind.FunctionExpression, ts.SyntaxKind.ArrowFunction, ts.SyntaxKind.Identifier, ts.SyntaxKind.CallExpression]
|
|
@@ -75,6 +75,9 @@ class TSBridgeInject {
|
|
|
75
75
|
const { tsCompiler } = compiler;
|
|
76
76
|
const schema = node.schema;
|
|
77
77
|
if (extract.extrasAndAsserts) {
|
|
78
|
+
if (extract.extrasAndAsserts.length !== schema.extrasAndAsserts.length) {
|
|
79
|
+
throw new Error(`Mismatching length of extracted asserts/extras for job ${schema.module}::${schema.name}. Expected ${schema.extrasAndAsserts.length}, but found ${extract.extrasAndAsserts.length}`);
|
|
80
|
+
}
|
|
78
81
|
schema.extrasAndAsserts = extract.extrasAndAsserts.map(e => {
|
|
79
82
|
const t = Object.keys(e)[0];
|
|
80
83
|
return {
|
|
@@ -239,13 +239,13 @@ class TSBridgeOrganize {
|
|
|
239
239
|
nElses++;
|
|
240
240
|
extract.transitions ?? (extract.transitions = {});
|
|
241
241
|
(_a = extract.transitions)[msg] ?? (_a[msg] = []);
|
|
242
|
-
const trans = extract.transitions[msg];
|
|
242
|
+
const trans = extract.transitions?.[msg];
|
|
243
|
+
const condition = path.match(/if▹0$/);
|
|
243
244
|
if (trans.length < nElses) {
|
|
244
245
|
trans.push(...Array(nElses - trans.length).map(() => ({})));
|
|
245
246
|
}
|
|
246
|
-
const condition = path.match(/if▹0$/);
|
|
247
247
|
if (condition) {
|
|
248
|
-
trans
|
|
248
|
+
trans.push({ if: node });
|
|
249
249
|
}
|
|
250
250
|
const job = path.match(/runJob▹0▹return/);
|
|
251
251
|
if (job) {
|
|
@@ -32,6 +32,7 @@ class BlockBuilder {
|
|
|
32
32
|
const schema = def(builder);
|
|
33
33
|
for (const key in schema) {
|
|
34
34
|
const name = `${this.name}${key.length ? ('.' + key) : ''}`;
|
|
35
|
+
this._inputMsgs.push(new dependency_1.$Dependency(this.module, 'message', name));
|
|
35
36
|
const builder = new message_builder_1.MessageBuilder(this.module, name)
|
|
36
37
|
.template(() => schema[key]);
|
|
37
38
|
this._inlineNodes.push(new dependency_1.BuilderNode({
|
|
@@ -56,9 +57,10 @@ class BlockBuilder {
|
|
|
56
57
|
}
|
|
57
58
|
// Input/Output
|
|
58
59
|
_input(...names) {
|
|
59
|
-
|
|
60
|
+
names.forEach((name) => {
|
|
60
61
|
const fullName = name_helpers_1.NameHelpers.unabbrevName(name, this.name);
|
|
61
|
-
|
|
62
|
+
const dep = new dependency_1.$Dependency(this.module, 'message', fullName);
|
|
63
|
+
this._inputMsgs.push(dep);
|
|
62
64
|
});
|
|
63
65
|
return this;
|
|
64
66
|
}
|
|
@@ -9,15 +9,17 @@ import { TrxNode } from "../../../../engine/transaction/trx_node";
|
|
|
9
9
|
import { ModuleTree } from "../../../../engine/tree";
|
|
10
10
|
import { BlockBuilder } from '../../block.builder';
|
|
11
11
|
import { ResolvedBuilderNode } from "../../../../engine/dependency";
|
|
12
|
-
import {
|
|
12
|
+
import { NQL_AnyQuery } from "../../../entities/bucket/query/nql.schema";
|
|
13
13
|
import { $Bucket } from "../../../entities/bucket/bucket.schema";
|
|
14
14
|
import { $BlockOutput } from '../../block.schema';
|
|
15
15
|
export type ResourceAssertions<Bucket extends $Bucket> = {
|
|
16
|
-
'query is empty':
|
|
16
|
+
'query is empty': NQL_AnyQuery;
|
|
17
17
|
'has no link': keyof Bucket['graph']['links'];
|
|
18
18
|
};
|
|
19
|
-
export type ResourceAssertionDef<Bucket extends $Bucket> = <T extends keyof ResourceAssertions<Bucket>>(type: T, arg: ResourceAssertions<Bucket>[T]) =>
|
|
20
|
-
|
|
19
|
+
export type ResourceAssertionDef<Bucket extends $Bucket> = <T extends keyof ResourceAssertions<Bucket>>(type: T, arg: ResourceAssertions<Bucket>[T]) => {
|
|
20
|
+
else: (error: string) => Promise<true | string>;
|
|
21
|
+
};
|
|
22
|
+
export declare class ResourceJobBuilder<Space extends $Space, Module extends $Module, Name extends string, Prepared, Authn extends AnyUsers = {}, Bucket extends $Bucket = never, RequiredInput = {}, Trigger extends $Message = never, MsgExtras = {}, Ctx = {}, CtxAfter = {}> extends BlockBuilder<Space, Module, 'job'> {
|
|
21
23
|
protected module: string;
|
|
22
24
|
protected name: Name;
|
|
23
25
|
protected bucket: string;
|
|
@@ -40,25 +42,25 @@ export declare class ResourceJobBuilder<Space extends $Space, Module extends $Mo
|
|
|
40
42
|
*
|
|
41
43
|
* @param def A `$ => ({})` definition for a custom trigger message
|
|
42
44
|
*/
|
|
43
|
-
input<Def extends MessageTemplateDef<Space, Module, Name>>(def: Def): ResourceJobBuilder<Space, Module, Name, Prepared, Authn, Bucket,
|
|
44
|
-
'':
|
|
45
|
-
}, any, [never, never], [never, never]>; }, import("../../../entities/message/message.infer").$MessageInputInfer<ReturnType<Def> & { [K in keyof
|
|
46
|
-
'':
|
|
47
|
-
}, any, [never, never], [never, never]>; }, ReturnType<Def> & { [K in keyof
|
|
48
|
-
'':
|
|
49
|
-
}, any, [never, never], [never, never]>; } extends infer T ? { [K_1 in keyof T]: (ReturnType<Def> & { [K in keyof
|
|
50
|
-
'':
|
|
45
|
+
input<Def extends MessageTemplateDef<Space, Module, Name>>(def: Def): ResourceJobBuilder<Space, Module, Name, Prepared, Authn, Bucket, RequiredInput, $MessageInfer<Name, any, ReturnType<Def> & { [K in keyof RequiredInput]: MessageTemplateFieldBuilder<any, any, any, {
|
|
46
|
+
'': RequiredInput[K];
|
|
47
|
+
}, any, [never, never], [never, never]>; }, import("../../../entities/message/message.infer").$MessageInputInfer<ReturnType<Def> & { [K in keyof RequiredInput]: MessageTemplateFieldBuilder<any, any, any, {
|
|
48
|
+
'': RequiredInput[K];
|
|
49
|
+
}, any, [never, never], [never, never]>; }, ReturnType<Def> & { [K in keyof RequiredInput]: MessageTemplateFieldBuilder<any, any, any, {
|
|
50
|
+
'': RequiredInput[K];
|
|
51
|
+
}, any, [never, never], [never, never]>; } extends infer T ? { [K_1 in keyof T]: (ReturnType<Def> & { [K in keyof RequiredInput]: MessageTemplateFieldBuilder<any, any, any, {
|
|
52
|
+
'': RequiredInput[K];
|
|
51
53
|
}, any, [never, never], [never, never]>; })[K_1] extends MessageTemplateFieldBuilder<any, any, infer I, any, any, infer Opt extends [undefined, undefined], infer Nul extends [null, null]> ? {
|
|
52
54
|
path: `${K_1 & string}${keyof I & string}`;
|
|
53
55
|
data: I[keyof I];
|
|
54
56
|
opt: Opt[0];
|
|
55
57
|
nul: Nul[0];
|
|
56
|
-
} : never; } : never>, import("../../../entities/message/message.infer").$MessageOutputInfer<ReturnType<Def> & { [K in keyof
|
|
57
|
-
'':
|
|
58
|
-
}, any, [never, never], [never, never]>; }, ReturnType<Def> & { [K in keyof
|
|
59
|
-
'':
|
|
60
|
-
}, any, [never, never], [never, never]>; } extends infer T_1 ? { [K_2 in keyof T_1]: (ReturnType<Def> & { [K in keyof
|
|
61
|
-
'':
|
|
58
|
+
} : never; } : never>, import("../../../entities/message/message.infer").$MessageOutputInfer<ReturnType<Def> & { [K in keyof RequiredInput]: MessageTemplateFieldBuilder<any, any, any, {
|
|
59
|
+
'': RequiredInput[K];
|
|
60
|
+
}, any, [never, never], [never, never]>; }, ReturnType<Def> & { [K in keyof RequiredInput]: MessageTemplateFieldBuilder<any, any, any, {
|
|
61
|
+
'': RequiredInput[K];
|
|
62
|
+
}, any, [never, never], [never, never]>; } extends infer T_1 ? { [K_2 in keyof T_1]: (ReturnType<Def> & { [K in keyof RequiredInput]: MessageTemplateFieldBuilder<any, any, any, {
|
|
63
|
+
'': RequiredInput[K];
|
|
62
64
|
}, any, [never, never], [never, never]>; })[K_2] extends MessageTemplateFieldBuilder<any, any, any, infer O, any, infer Opt_1 extends [undefined, undefined], infer Nul_1 extends [null, null]> ? {
|
|
63
65
|
path: `${K_2 & string}${keyof O & string}`;
|
|
64
66
|
data: O[keyof O];
|
|
@@ -73,7 +75,7 @@ export declare class ResourceJobBuilder<Space extends $Space, Module extends $Mo
|
|
|
73
75
|
*/
|
|
74
76
|
extra<Extra extends {
|
|
75
77
|
[_: string]: any;
|
|
76
|
-
}, Trx = NoInfer<TrxNode<Space, Module, Authn>>, Msg = NoInfer<Trigger['#parsed']>, PreviousExtras = NoInfer<MsgExtras>, C = NoInfer<Ctx>>($: $JobMethod<Trx, Msg, Extra, PreviousExtras, C>): ResourceJobBuilder<Space, Module, Name, Prepared, Authn, Bucket,
|
|
78
|
+
}, Trx = NoInfer<TrxNode<Space, Module, Authn>>, Msg = NoInfer<Trigger['#parsed']>, PreviousExtras = NoInfer<MsgExtras>, C = NoInfer<Ctx>>($: $JobMethod<Trx, Msg, Extra, PreviousExtras, C>): ResourceJobBuilder<Space, Module, Name, Prepared, Authn, Bucket, RequiredInput, Trigger, MsgExtras & Extra, Ctx, CtxAfter>;
|
|
77
79
|
/**
|
|
78
80
|
* A function that checks a given condition over the input and throws an exception;
|
|
79
81
|
* This assertion runs before the job method.
|
|
@@ -102,7 +104,7 @@ export declare class ResourceJobBuilder<Space extends $Space, Module extends $Mo
|
|
|
102
104
|
};
|
|
103
105
|
}
|
|
104
106
|
export type AnyResourceJobBuilder = ResourceJobBuilder<any, any, any, any, any, any>;
|
|
105
|
-
export type ResourceJobDef<S extends $Space, M extends $Module, Name extends string, Prepared, Authn extends AnyUsers, Bucket extends $Bucket, DefaultTrigger extends $Message = never,
|
|
107
|
+
export type ResourceJobDef<S extends $Space, M extends $Module, Name extends string, Prepared, Authn extends AnyUsers, Bucket extends $Bucket, DefaultTrigger extends $Message = never, RequiredInput = {}, Ctx = {}, CtxAfter = {}> = ($: ResourceJobBuilder<S, M, Name, Prepared, Authn, Bucket, RequiredInput, DefaultTrigger, {}, Ctx, CtxAfter>) => any;
|
|
106
108
|
export type ResourceJobBuilderNode = Omit<ResolvedBuilderNode, 'builder'> & {
|
|
107
109
|
builder: AnyResourceJobBuilder;
|
|
108
110
|
schema?: $Job;
|
|
@@ -5,8 +5,9 @@ export declare class ResourceJob {
|
|
|
5
5
|
static method($: {
|
|
6
6
|
trx: AnyTrxNode;
|
|
7
7
|
msg: any;
|
|
8
|
+
obj: Record<string, any>;
|
|
8
9
|
job: $Job;
|
|
9
|
-
}): Promise<any>;
|
|
10
|
+
}): Promise<Record<string, any> | undefined>;
|
|
10
11
|
static prepareMsgData($: {
|
|
11
12
|
msg: any;
|
|
12
13
|
}): Promise<Omit<AnyMessage, "$" | "__meta__" | "getData">>;
|
|
@@ -1,14 +1,27 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.ResourceJob = void 0;
|
|
4
|
+
const trx_node_1 = require("../../../../engine/transaction/trx_node");
|
|
4
5
|
class ResourceJob {
|
|
5
6
|
static async method($) {
|
|
7
|
+
// Check authentication
|
|
8
|
+
trx_node_1.TrxNode.checkAuthn($.trx, $.job.authn);
|
|
9
|
+
//
|
|
10
|
+
const id = $.msg.id;
|
|
6
11
|
const scope = $.job.scope;
|
|
7
|
-
let obj;
|
|
8
|
-
if (scope.method === 'update' || scope.method === 'delete') {
|
|
9
|
-
obj = await $.trx.bucket(scope.bucket).readOneOrFail($.msg.id);
|
|
10
|
-
}
|
|
12
|
+
let obj = $.obj;
|
|
11
13
|
obj = await scope.prepareMethod({ ...$, obj, bucket: scope.bucket });
|
|
14
|
+
// Preserve the original message ID (if any),
|
|
15
|
+
// even if the prepare method doesn't add it
|
|
16
|
+
if (scope.method === 'create' || scope.method === 'update') {
|
|
17
|
+
obj.id = id;
|
|
18
|
+
}
|
|
19
|
+
// On delete, the method returns a boolean, so replace it with the id.
|
|
20
|
+
else {
|
|
21
|
+
if (!obj)
|
|
22
|
+
return;
|
|
23
|
+
obj = { id };
|
|
24
|
+
}
|
|
12
25
|
if (scope.execMethod) {
|
|
13
26
|
obj = await scope.execMethod({ ...$, obj, bucket: scope.bucket });
|
|
14
27
|
}
|
|
@@ -7,6 +7,7 @@ exports.Job = void 0;
|
|
|
7
7
|
const block_1 = require("../block");
|
|
8
8
|
const promise_1 = __importDefault(require("../../../engine/util/promise"));
|
|
9
9
|
const message_1 = require("../../entities/message/message");
|
|
10
|
+
const trx_node_1 = require("../../../engine/transaction/trx_node");
|
|
10
11
|
const error_1 = require("../../../engine/data/error");
|
|
11
12
|
class Job extends block_1.Block {
|
|
12
13
|
constructor(module, schema) {
|
|
@@ -15,6 +16,8 @@ class Job extends block_1.Block {
|
|
|
15
16
|
this.schema = schema;
|
|
16
17
|
}
|
|
17
18
|
async run(trx, msg, _ctx = {}) {
|
|
19
|
+
// Check authentication
|
|
20
|
+
trx_node_1.TrxNode.checkAuthn(trx, this.schema.authn);
|
|
18
21
|
const _msg = message_1.Message.clone(msg);
|
|
19
22
|
const extra = {};
|
|
20
23
|
const ctx = { trx, msg: _msg, extra, job: this.schema };
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { $Job } from "../..";
|
|
2
|
+
import { Overlay } from "../../../engine/util/type";
|
|
3
|
+
export type JobInput<Job extends $Job, IntrinsicMsg = Extract<Job['#input']['#raw'], {
|
|
4
|
+
$: Job['name'];
|
|
5
|
+
}>> = Exclude<Job['#input']['#raw'], IntrinsicMsg> | (IntrinsicMsg extends never ? never : Overlay<IntrinsicMsg, {
|
|
6
|
+
$?: Job['name'];
|
|
7
|
+
}>);
|
|
@@ -114,7 +114,6 @@ class Machine extends block_1.Block {
|
|
|
114
114
|
async _run(trx, _msg) {
|
|
115
115
|
const output = new MachineOutput();
|
|
116
116
|
const msg = message_1.Message.clone(_msg);
|
|
117
|
-
const ctx = { trx, msg };
|
|
118
117
|
if (!msg.id) {
|
|
119
118
|
throw error_1.NesoiError.Machine.MessageHasNoId(this.schema.alias);
|
|
120
119
|
}
|
|
@@ -156,6 +155,7 @@ class Machine extends block_1.Block {
|
|
|
156
155
|
for (const transition of transitions) {
|
|
157
156
|
// Transition condition [ .if() ]
|
|
158
157
|
if (transition.condition) {
|
|
158
|
+
const ctx = { trx, msg, obj };
|
|
159
159
|
const conditionResult = await transition.condition(ctx);
|
|
160
160
|
// Condition not met, save message as info and try next transition
|
|
161
161
|
if (conditionResult !== true) {
|
|
@@ -187,7 +187,7 @@ class Machine extends block_1.Block {
|
|
|
187
187
|
if (this.schema.stateAliasField) {
|
|
188
188
|
obj[this.schema.stateAliasField] = nextState.alias;
|
|
189
189
|
}
|
|
190
|
-
obj = await trx.bucket(bucketUsed.refName).
|
|
190
|
+
obj = await trx.bucket(bucketUsed.refName).patch(obj);
|
|
191
191
|
if (nextStateName !== stateName) {
|
|
192
192
|
MachineOutput.add(output, MachineOutputEntry.info_state_changed(state.name, nextState.name));
|
|
193
193
|
}
|
|
@@ -198,6 +198,7 @@ class Machine extends block_1.Block {
|
|
|
198
198
|
await this.runStateJob(trx, output, queue, state.jobs.afterLeave, msg, obj, state.name, state.name, 'after_leave', `Ran job '${state.jobs.afterLeave?.name}' after leaving '${state.name}'`);
|
|
199
199
|
// Run "afterEnter" job of current state (which was the next until now)
|
|
200
200
|
await this.runStateJob(trx, output, queue, nextState.jobs.afterEnter, msg, obj, state.name, nextState.name, 'after_enter', `Ran job '${nextState.jobs.afterEnter?.name}' after entering '${nextState.name}'`);
|
|
201
|
+
break;
|
|
201
202
|
}
|
|
202
203
|
// No transition run,
|
|
203
204
|
if (!nextState) {
|
|
@@ -59,11 +59,9 @@ class ResourceBuilder extends block_builder_1.BlockBuilder {
|
|
|
59
59
|
const jobBuilder = new resource_job_builder_1.ResourceJobBuilder(this.module, name, this._bucket.refName, 'query', alias, resource_1.Resource.query, this._authn)
|
|
60
60
|
.input($ => ({
|
|
61
61
|
view: $.enum(views).default(views[0]),
|
|
62
|
-
query: $.dict($.any),
|
|
62
|
+
query: $.dict($.any).default({}),
|
|
63
63
|
perPage: $.int.default(10),
|
|
64
|
-
page: $.int.default(0)
|
|
65
|
-
orderBy: $.string.optional,
|
|
66
|
-
orderDesc: $.boolean.default(false)
|
|
64
|
+
page: $.int.default(0)
|
|
67
65
|
}))
|
|
68
66
|
.prepare(resource_job_1.ResourceJob.prepareMsgData);
|
|
69
67
|
this._inlineNodes.push(new dependency_1.BuilderNode({
|
|
@@ -27,7 +27,7 @@ export declare class Resource<S extends $Space, M extends $Module, $ extends $Re
|
|
|
27
27
|
trx: AnyTrxNode;
|
|
28
28
|
msg: any;
|
|
29
29
|
job: $Job;
|
|
30
|
-
}): Promise<any
|
|
30
|
+
}): Promise<import("../../entities/bucket/query/nql_engine").NQL_Result<any>>;
|
|
31
31
|
static create($: {
|
|
32
32
|
trx: AnyTrxNode;
|
|
33
33
|
obj: any;
|
|
@@ -42,7 +42,9 @@ export declare class Resource<S extends $Space, M extends $Module, $ extends $Re
|
|
|
42
42
|
trx: AnyTrxNode;
|
|
43
43
|
obj: any;
|
|
44
44
|
job: $Job;
|
|
45
|
-
}): Promise<void
|
|
46
|
-
static assertThat(trx: AnyTrxNode, bucket: $Dependency, obj: NesoiObj | undefined, type: keyof ResourceAssertions<any>, arg: any):
|
|
45
|
+
}): Promise<void>;
|
|
46
|
+
static assertThat(trx: AnyTrxNode, bucket: $Dependency, obj: NesoiObj | undefined, type: keyof ResourceAssertions<any>, arg: any): {
|
|
47
|
+
else: (error: string) => Promise<string | true>;
|
|
48
|
+
};
|
|
47
49
|
}
|
|
48
50
|
export type AnyResource = Resource<any, any, any>;
|