nesoi 3.0.21 → 3.1.0
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/stages/4_dump_modules_stage.js +8 -0
- package/lib/compiler/compiler.js +1 -1
- package/lib/compiler/elements/bucket.element.d.ts +2 -1
- package/lib/compiler/elements/bucket.element.js +68 -122
- package/lib/compiler/elements/element.js +2 -1
- package/lib/compiler/elements/externals.element.js +3 -0
- package/lib/compiler/elements/message.element.js +34 -57
- package/lib/compiler/elements/queue.element.js +1 -1
- package/lib/compiler/helpers/dump_helpers.d.ts +2 -0
- package/lib/compiler/helpers/dump_helpers.js +12 -2
- package/lib/compiler/stages/4_build_schemas_stage.js +12 -0
- package/lib/compiler/stages/5_inject_ts_stage.js +4 -1
- package/lib/compiler/stages/7_dump_stage.js +7 -1
- package/lib/compiler/treeshake.js +4 -2
- package/lib/compiler/typescript/bridge/extract.js +37 -107
- package/lib/compiler/typescript/bridge/inject.d.ts +1 -1
- package/lib/compiler/typescript/bridge/inject.js +73 -45
- package/lib/compiler/typescript/bridge/organize.js +9 -5
- package/lib/compiler/typescript/typescript_compiler.d.ts +4 -6
- package/lib/compiler/typescript/typescript_compiler.js +139 -75
- package/lib/elements/blocks/block.builder.d.ts +1 -10
- package/lib/elements/blocks/block.builder.js +0 -32
- package/lib/elements/blocks/job/internal/resource_job.builder.d.ts +3 -21
- package/lib/elements/blocks/job/job.builder.d.ts +6 -20
- package/lib/elements/blocks/job/job.builder.js +0 -4
- package/lib/elements/blocks/machine/machine.builder.d.ts +5 -14
- package/lib/elements/blocks/machine/machine.builder.js +2 -2
- package/lib/elements/blocks/queue/queue.builder.d.ts +6 -15
- package/lib/elements/blocks/queue/queue.builder.js +2 -2
- package/lib/elements/edge/externals/externals.builder.d.ts +2 -0
- package/lib/elements/edge/externals/externals.builder.js +6 -1
- package/lib/elements/edge/externals/externals.schema.d.ts +2 -1
- package/lib/elements/edge/externals/externals.schema.js +3 -1
- package/lib/elements/entities/bucket/adapters/memory.nql.js +1 -1
- package/lib/elements/entities/bucket/bucket.builder.d.ts +6 -4
- package/lib/elements/entities/bucket/bucket.js +7 -16
- package/lib/elements/entities/bucket/bucket.schema.d.ts +2 -1
- package/lib/elements/entities/bucket/graph/bucket_graph.infer.d.ts +7 -5
- package/lib/elements/entities/bucket/graph/bucket_graph_link.builder.d.ts +2 -1
- package/lib/elements/entities/bucket/model/bucket_model.builder.d.ts +1 -1
- package/lib/elements/entities/bucket/model/bucket_model.convert.d.ts +1 -1
- package/lib/elements/entities/bucket/model/bucket_model.convert.js +4 -4
- package/lib/elements/entities/bucket/model/bucket_model.infer.d.ts +45 -9
- package/lib/elements/entities/bucket/model/bucket_model.schema.d.ts +5 -6
- package/lib/elements/entities/bucket/model/bucket_model.schema.js +64 -21
- package/lib/elements/entities/bucket/model/bucket_model_field.builder.d.ts +88 -55
- package/lib/elements/entities/bucket/model/bucket_model_field.builder.js +22 -30
- package/lib/elements/entities/bucket/query/nql.schema.d.ts +13 -10
- package/lib/elements/entities/bucket/query/nql_compiler.js +46 -21
- package/lib/elements/entities/bucket/view/bucket_view.builder.js +1 -1
- package/lib/elements/entities/bucket/view/bucket_view.d.ts +19 -0
- package/lib/elements/entities/bucket/view/bucket_view.js +230 -108
- package/lib/elements/entities/bucket/view/bucket_view.schema.d.ts +5 -10
- package/lib/elements/entities/bucket/view/bucket_view.schema.js +3 -5
- package/lib/elements/entities/bucket/view/bucket_view_field.builder.d.ts +16 -12
- package/lib/elements/entities/bucket/view/bucket_view_field.builder.js +55 -40
- package/lib/elements/entities/message/message.builder.d.ts +1 -11
- package/lib/elements/entities/message/message.infer.d.ts +6 -30
- package/lib/elements/entities/message/message.schema.js +2 -2
- package/lib/elements/entities/message/template/message_template.builder.js +1 -1
- package/lib/elements/entities/message/template/message_template.schema.d.ts +10 -15
- package/lib/elements/entities/message/template/message_template.schema.js +29 -12
- package/lib/elements/entities/message/template/message_template_field.builder.d.ts +45 -209
- package/lib/elements/entities/message/template/message_template_field.builder.js +69 -85
- package/lib/elements/entities/message/template/message_template_parser.js +50 -65
- package/lib/engine/apps/inline.app.js +1 -0
- package/lib/engine/data/trash.js +7 -7
- package/lib/engine/data/tree.d.ts +3 -0
- package/lib/engine/data/tree.js +36 -0
- package/lib/engine/util/parse.d.ts +22 -14
- package/lib/engine/util/parse.js +18 -3
- package/lib/engine/util/type.d.ts +3 -0
- package/package.json +1 -1
- package/tools/joaquin/bucket.d.ts +9 -0
- package/tools/joaquin/bucket.js +49 -0
- package/tools/joaquin/message.d.ts +2 -1
- package/tools/joaquin/message.js +9 -2
- package/tools/joaquin/mock.d.ts +1 -0
- package/tools/joaquin/mock.js +13 -5
- package/tsconfig.build.tsbuildinfo +1 -1
|
@@ -86,7 +86,7 @@ class TypeScriptCompiler {
|
|
|
86
86
|
/**
|
|
87
87
|
* Extract all import nodes
|
|
88
88
|
*/
|
|
89
|
-
extractImports(filepath
|
|
89
|
+
extractImports(filepath) {
|
|
90
90
|
log_1.Log.trace('compiler', 'ts', `Extracting imports for file ${(0, string_1.colored)(filepath, 'blue')}`);
|
|
91
91
|
const source = this.getSource(filepath);
|
|
92
92
|
const imports = this.findAll(source, node => {
|
|
@@ -94,15 +94,45 @@ class TypeScriptCompiler {
|
|
|
94
94
|
return;
|
|
95
95
|
}
|
|
96
96
|
const spec = parser_1.Parser.parseNode(node.moduleSpecifier).value;
|
|
97
|
-
//
|
|
98
|
-
|
|
99
|
-
|
|
97
|
+
// Absolute import, use as it is
|
|
98
|
+
let from;
|
|
99
|
+
if (spec.startsWith(path.sep)) {
|
|
100
|
+
from = spec;
|
|
100
101
|
}
|
|
101
|
-
|
|
102
|
-
if (
|
|
103
|
-
|
|
102
|
+
// Relative import
|
|
103
|
+
else if (spec.startsWith('.' + path.sep) || spec.startsWith('..' + path.sep)) {
|
|
104
|
+
from = path.resolve(filepath, '..', spec);
|
|
105
|
+
}
|
|
106
|
+
// Typing import (future)
|
|
107
|
+
else if (spec.startsWith('.nesoi' + path.sep)) {
|
|
108
|
+
from = space_1.Space.path(this.space, spec);
|
|
109
|
+
}
|
|
110
|
+
// Non-relative import
|
|
111
|
+
else {
|
|
112
|
+
from = space_1.Space.path(this.space, spec);
|
|
113
|
+
// Check if it exists rooted on the space path (usually libs)
|
|
114
|
+
// If not, use the original (it comes from a path alias or node_modules)
|
|
115
|
+
if (!fs.existsSync(from + '.ts'))
|
|
116
|
+
from = spec;
|
|
117
|
+
}
|
|
118
|
+
const declarations = [];
|
|
119
|
+
// import Something from '...'
|
|
120
|
+
if (node.importClause?.name) {
|
|
121
|
+
declarations.push(ts.factory.createImportDeclaration(node.modifiers, ts.factory.createImportClause(node.importClause.isTypeOnly, node.importClause.name, undefined), ts.factory.createStringLiteral(from, true)));
|
|
122
|
+
}
|
|
123
|
+
// import { Something } from '...'
|
|
124
|
+
if (node.importClause?.namedBindings) {
|
|
125
|
+
// import * as Something from '...'
|
|
126
|
+
if ((node.importClause?.namedBindings).name) {
|
|
127
|
+
declarations.push(ts.factory.createImportDeclaration(node.modifiers, ts.factory.createImportClause(node.importClause.isTypeOnly, undefined, node.importClause?.namedBindings), ts.factory.createStringLiteral(from, true)));
|
|
128
|
+
}
|
|
129
|
+
else {
|
|
130
|
+
for (const el of node.importClause.namedBindings.elements) {
|
|
131
|
+
declarations.push(ts.factory.createImportDeclaration(node.modifiers, ts.factory.createImportClause(node.importClause.isTypeOnly, undefined, ts.factory.createNamedImports([el])), ts.factory.createStringLiteral(from, true)));
|
|
132
|
+
}
|
|
133
|
+
}
|
|
104
134
|
}
|
|
105
|
-
return
|
|
135
|
+
return declarations;
|
|
106
136
|
});
|
|
107
137
|
const printer = ts.createPrinter({ newLine: ts.NewLineKind.LineFeed });
|
|
108
138
|
const importStrs = imports.map(node => printer.printNode(ts.EmitHint.Unspecified, node, source));
|
|
@@ -162,11 +192,25 @@ class TypeScriptCompiler {
|
|
|
162
192
|
if (!loopStart && loop.query !== undefined) {
|
|
163
193
|
loop.query += '.' + p;
|
|
164
194
|
}
|
|
195
|
+
// Optional
|
|
196
|
+
let optional = false;
|
|
197
|
+
if (p.endsWith('?')) {
|
|
198
|
+
optional = true;
|
|
199
|
+
p = p.slice(0, -1);
|
|
200
|
+
}
|
|
165
201
|
// Filter step
|
|
166
|
-
|
|
202
|
+
const new_results = results.map(result => {
|
|
167
203
|
const ptr = result.node;
|
|
168
|
-
//
|
|
204
|
+
// Function Call
|
|
169
205
|
if (ts.isCallExpression(ptr)) {
|
|
206
|
+
// '#': any argument
|
|
207
|
+
if (p === '#') {
|
|
208
|
+
return ptr.arguments.map((arg, i) => ({
|
|
209
|
+
path: result.path + '▹' + i.toString(),
|
|
210
|
+
node: arg
|
|
211
|
+
}));
|
|
212
|
+
}
|
|
213
|
+
// Integer: argument by position
|
|
170
214
|
const argIdx = parseInt(p);
|
|
171
215
|
if (!isNaN(argIdx)) {
|
|
172
216
|
if (argIdx >= ptr.arguments.length) {
|
|
@@ -177,29 +221,37 @@ class TypeScriptCompiler {
|
|
|
177
221
|
node: ptr.arguments[argIdx]
|
|
178
222
|
};
|
|
179
223
|
}
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
224
|
+
const ps = p.includes('|') ? p.split('|') : [p];
|
|
225
|
+
// '~': Any call in the chain
|
|
226
|
+
// string: chain property by name
|
|
227
|
+
return this.findInCallChain(ptr, $ => {
|
|
228
|
+
return ps.includes('~') || ps.includes($.path.at(-1) || '~');
|
|
229
|
+
}).map($ => {
|
|
230
|
+
const firstArg = $.firstArg === '' ? '@' : $.firstArg;
|
|
187
231
|
return {
|
|
188
|
-
path: result.path + '▹' +
|
|
189
|
-
node,
|
|
232
|
+
path: result.path + '▹' + $.path.at(-1) + (firstArg ? ('▹' + firstArg) : ''),
|
|
233
|
+
node: $.isCall ? $.node.parent : $.node,
|
|
190
234
|
};
|
|
191
235
|
});
|
|
192
236
|
}
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
})
|
|
237
|
+
// Property Access
|
|
238
|
+
else if (ts.isPropertyAccessExpression(ptr)) {
|
|
239
|
+
const ps = p.includes('|') ? p.split('|') : [p];
|
|
240
|
+
// '~': Any call in the chain
|
|
241
|
+
// string: chain property by name
|
|
242
|
+
return this.findInCallChain(ptr, $ => {
|
|
243
|
+
return ps.includes('~') || ps.includes($.path.at(-1) || '~');
|
|
244
|
+
}).map($ => {
|
|
245
|
+
const firstArg = $.firstArg === '' ? '@' : $.firstArg;
|
|
246
|
+
return {
|
|
247
|
+
path: result.path + '▹' + $.path.at(-1) + (firstArg ? ('▹' + firstArg) : ''),
|
|
248
|
+
node: $.isCall ? $.node.parent : $.node,
|
|
249
|
+
};
|
|
250
|
+
});
|
|
201
251
|
}
|
|
202
|
-
|
|
252
|
+
// Function
|
|
253
|
+
else if (ts.isFunctionExpression(ptr) || ts.isArrowFunction(ptr)) {
|
|
254
|
+
// 'return': Return node of function
|
|
203
255
|
if (p === 'return') {
|
|
204
256
|
const node = this.getReturnNode(ptr);
|
|
205
257
|
if (!node) {
|
|
@@ -210,9 +262,13 @@ class TypeScriptCompiler {
|
|
|
210
262
|
node
|
|
211
263
|
};
|
|
212
264
|
}
|
|
213
|
-
|
|
265
|
+
return [];
|
|
214
266
|
}
|
|
215
|
-
|
|
267
|
+
// Object
|
|
268
|
+
else if (ts.isObjectLiteralExpression(ptr)) {
|
|
269
|
+
// '*': Any key
|
|
270
|
+
// '**': Any key, recursively
|
|
271
|
+
// string: A specific key
|
|
216
272
|
const parseObj = (node, path, nested = false) => {
|
|
217
273
|
return node.properties.map(prop => {
|
|
218
274
|
if (!ts.isPropertyAssignment(prop)) {
|
|
@@ -248,6 +304,12 @@ class TypeScriptCompiler {
|
|
|
248
304
|
}
|
|
249
305
|
return [];
|
|
250
306
|
}).flat(1);
|
|
307
|
+
if (optional) {
|
|
308
|
+
results = [...results, ...new_results];
|
|
309
|
+
}
|
|
310
|
+
else {
|
|
311
|
+
results = new_results;
|
|
312
|
+
}
|
|
251
313
|
// Loop behavior
|
|
252
314
|
if (loopEnd) {
|
|
253
315
|
let loopResults = results;
|
|
@@ -376,7 +438,7 @@ class TypeScriptCompiler {
|
|
|
376
438
|
}
|
|
377
439
|
findAllNesoiBuilders(node) {
|
|
378
440
|
const Nesoi = this.getNesoiSymbol('Space', 'lib/engine/space.d.ts');
|
|
379
|
-
const allBuilders = this.findAll(node, node => this.isCall(node, Nesoi) ? node : undefined);
|
|
441
|
+
const allBuilders = this.findAll(node, node => this.isCall(node, Nesoi) ? [node] : undefined);
|
|
380
442
|
const builders = {};
|
|
381
443
|
allBuilders.forEach(b => {
|
|
382
444
|
if (!ts.isCallExpression(b)) {
|
|
@@ -419,7 +481,7 @@ class TypeScriptCompiler {
|
|
|
419
481
|
const visit = (node) => {
|
|
420
482
|
const result = predicate(node);
|
|
421
483
|
if (result) {
|
|
422
|
-
found.push(result);
|
|
484
|
+
found.push(...result);
|
|
423
485
|
}
|
|
424
486
|
return node.forEachChild((child) => visit(child));
|
|
425
487
|
};
|
|
@@ -437,71 +499,73 @@ class TypeScriptCompiler {
|
|
|
437
499
|
}
|
|
438
500
|
findInCallChain(node, predicate) {
|
|
439
501
|
const results = [];
|
|
440
|
-
const from = this.
|
|
441
|
-
const to = this.
|
|
502
|
+
const from = this.seekChainUntilLeaf(node);
|
|
503
|
+
const to = this.seekChainUntilRoot(node);
|
|
442
504
|
from.reverse();
|
|
443
505
|
const calls = [
|
|
444
506
|
...from,
|
|
445
|
-
...(ts.
|
|
507
|
+
...(ts.isPropertyAccessExpression(node) ? [node] : []),
|
|
446
508
|
...to
|
|
447
509
|
];
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
510
|
+
const path = [];
|
|
511
|
+
for (const node of calls) {
|
|
512
|
+
path.push(node.name.text);
|
|
513
|
+
const isCall = ts.isCallExpression(node.parent) && node.parent.expression === node;
|
|
514
|
+
// [Nesoi Syntax]
|
|
515
|
+
// If the first argument of a call expression is a string,
|
|
516
|
+
// we assume it's relevant to the path
|
|
517
|
+
// So we add it after the call expresion name
|
|
518
|
+
let firstArg = undefined;
|
|
519
|
+
if (isCall
|
|
520
|
+
&& node.parent.arguments.length
|
|
521
|
+
&& ts.isStringLiteral(node.parent.arguments[0])) {
|
|
522
|
+
firstArg = node.parent.arguments[0].text;
|
|
523
|
+
}
|
|
524
|
+
if (predicate({ node, path, isCall, firstArg })) {
|
|
525
|
+
results.push({ node, path: [...path], isCall, firstArg });
|
|
451
526
|
}
|
|
452
527
|
}
|
|
453
528
|
return results;
|
|
454
529
|
}
|
|
455
|
-
|
|
456
|
-
const
|
|
457
|
-
let
|
|
458
|
-
while (
|
|
459
|
-
if (!ts.isCallExpression(
|
|
460
|
-
|
|
461
|
-
}
|
|
462
|
-
if (!node.expression || !ts.isPropertyAccessExpression(node.expression)) {
|
|
463
|
-
return calls;
|
|
464
|
-
}
|
|
465
|
-
if (!node.expression.expression) {
|
|
466
|
-
return calls;
|
|
530
|
+
seekChainUntilLeaf(from) {
|
|
531
|
+
const chain = [];
|
|
532
|
+
let child = from.expression;
|
|
533
|
+
while (child) {
|
|
534
|
+
if (!ts.isCallExpression(child) && !ts.isPropertyAccessExpression(child)) {
|
|
535
|
+
break;
|
|
467
536
|
}
|
|
468
|
-
if (ts.isCallExpression(
|
|
469
|
-
|
|
470
|
-
node = node.expression.expression;
|
|
537
|
+
if (ts.isCallExpression(child)) {
|
|
538
|
+
child = child.expression;
|
|
471
539
|
}
|
|
472
|
-
else if (ts.isPropertyAccessExpression(
|
|
473
|
-
|
|
474
|
-
|
|
540
|
+
else if (ts.isPropertyAccessExpression(child)) {
|
|
541
|
+
chain.push(child);
|
|
542
|
+
child = child.expression;
|
|
475
543
|
}
|
|
476
544
|
else {
|
|
477
|
-
|
|
545
|
+
break;
|
|
478
546
|
}
|
|
479
547
|
}
|
|
480
|
-
return
|
|
548
|
+
return chain;
|
|
481
549
|
}
|
|
482
|
-
|
|
483
|
-
const
|
|
484
|
-
let
|
|
485
|
-
while (
|
|
486
|
-
if (!
|
|
487
|
-
|
|
488
|
-
}
|
|
489
|
-
if (!node.parent.parent) {
|
|
490
|
-
return calls;
|
|
550
|
+
seekChainUntilRoot(from) {
|
|
551
|
+
const chain = [];
|
|
552
|
+
let parent = from.parent;
|
|
553
|
+
while (parent) {
|
|
554
|
+
if (!ts.isCallExpression(parent) && !ts.isPropertyAccessExpression(parent)) {
|
|
555
|
+
break;
|
|
491
556
|
}
|
|
492
|
-
if (ts.
|
|
493
|
-
|
|
494
|
-
node = node.parent;
|
|
557
|
+
if (ts.isCallExpression(parent)) {
|
|
558
|
+
parent = parent.parent;
|
|
495
559
|
}
|
|
496
|
-
else if (ts.
|
|
497
|
-
|
|
498
|
-
|
|
560
|
+
else if (ts.isPropertyAccessExpression(parent)) {
|
|
561
|
+
chain.push(parent);
|
|
562
|
+
parent = parent.parent;
|
|
499
563
|
}
|
|
500
564
|
else {
|
|
501
|
-
|
|
565
|
+
break;
|
|
502
566
|
}
|
|
503
567
|
}
|
|
504
|
-
return
|
|
568
|
+
return chain;
|
|
505
569
|
}
|
|
506
570
|
static logDiagnostics(diagnostics) {
|
|
507
571
|
if (!diagnostics.length) {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { $Module, $Space } from "../../schema";
|
|
2
2
|
import { $BlockOutput, $BlockType } from './block.schema';
|
|
3
|
-
import { MessageTemplateDef
|
|
3
|
+
import { MessageTemplateDef } from "../entities/message/template/message_template.builder";
|
|
4
4
|
import { $Dependency, BuilderNode } from "../../engine/dependency";
|
|
5
5
|
/**
|
|
6
6
|
* @category Builders
|
|
@@ -25,15 +25,6 @@ export declare abstract class BlockBuilder<Space extends $Space, Module extends
|
|
|
25
25
|
* @returns The Builder, for call-chaining
|
|
26
26
|
*/
|
|
27
27
|
protected message<Name extends string, Def extends MessageTemplateDef<Space, Module, Name>>(name: Name, def: Def): unknown;
|
|
28
|
-
/**
|
|
29
|
-
* @deprecated
|
|
30
|
-
* Inline messages. These messages are exposed to the module,
|
|
31
|
-
* with a name prefixed by the block name.
|
|
32
|
-
* @param def A method which takes a field factory as input and outputs a template builder
|
|
33
|
-
* @returns The Builder, for call-chaining
|
|
34
|
-
*/
|
|
35
|
-
/** @deprecated Use `.message` instead. Will be removed on 3.1 */
|
|
36
|
-
protected messages<Def extends MultiMessageTemplateDef<Space, Module>>(def: Def): unknown;
|
|
37
28
|
authn(...providers: string[]): unknown;
|
|
38
29
|
protected _input(...names: string[]): unknown;
|
|
39
30
|
protected outputRaw(): unknown;
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.BlockBuilder = void 0;
|
|
4
|
-
const message_template_field_builder_1 = require("../entities/message/template/message_template_field.builder");
|
|
5
4
|
const message_builder_1 = require("../entities/message/message.builder");
|
|
6
5
|
const dependency_1 = require("../../engine/dependency");
|
|
7
6
|
const name_helpers_1 = require("../../compiler/helpers/name_helpers");
|
|
@@ -33,7 +32,6 @@ class BlockBuilder {
|
|
|
33
32
|
*/
|
|
34
33
|
message(name, def) {
|
|
35
34
|
const msgName = `${this.name}${name.length ? ('.' + name) : ''}`;
|
|
36
|
-
this._inputMsgs.push(new dependency_1.$Dependency(this.module, 'message', msgName));
|
|
37
35
|
const builder = new message_builder_1.MessageBuilder(this.module, msgName)
|
|
38
36
|
.template(def);
|
|
39
37
|
this._inlineNodes.push(new dependency_1.BuilderNode({
|
|
@@ -45,36 +43,6 @@ class BlockBuilder {
|
|
|
45
43
|
filepath: [], // This is added later by Treeshake.blockInlineNodes()
|
|
46
44
|
dependencies: [] // This is added later by Treeshake.*()
|
|
47
45
|
}));
|
|
48
|
-
const dep = new dependency_1.$Dependency(this.module, 'message', msgName);
|
|
49
|
-
this._inputMsgs.push(dep);
|
|
50
|
-
return this;
|
|
51
|
-
}
|
|
52
|
-
/**
|
|
53
|
-
* @deprecated
|
|
54
|
-
* Inline messages. These messages are exposed to the module,
|
|
55
|
-
* with a name prefixed by the block name.
|
|
56
|
-
* @param def A method which takes a field factory as input and outputs a template builder
|
|
57
|
-
* @returns The Builder, for call-chaining
|
|
58
|
-
*/
|
|
59
|
-
/** @deprecated Use `.message` instead. Will be removed on 3.1 */
|
|
60
|
-
messages(def) {
|
|
61
|
-
const factory = new message_template_field_builder_1.MessageTemplateFieldFactory(this.module);
|
|
62
|
-
const schema = def(factory);
|
|
63
|
-
for (const key in schema) {
|
|
64
|
-
const name = `${this.name}${key.length ? ('.' + key) : ''}`;
|
|
65
|
-
this._inputMsgs.push(new dependency_1.$Dependency(this.module, 'message', name));
|
|
66
|
-
const builder = new message_builder_1.MessageBuilder(this.module, name)
|
|
67
|
-
.template(() => schema[key]);
|
|
68
|
-
this._inlineNodes.push(new dependency_1.BuilderNode({
|
|
69
|
-
module: this.module,
|
|
70
|
-
type: 'message',
|
|
71
|
-
name,
|
|
72
|
-
builder,
|
|
73
|
-
isInline: true,
|
|
74
|
-
filepath: [], // This is added later by Treeshake.blockInlineNodes()
|
|
75
|
-
dependencies: [] // This is added later by Treeshake.*()
|
|
76
|
-
}));
|
|
77
|
-
}
|
|
78
46
|
return this;
|
|
79
47
|
}
|
|
80
48
|
// Authentication
|
|
@@ -48,29 +48,11 @@ export declare class ResourceJobBuilder<Space extends $Space, Module extends $Mo
|
|
|
48
48
|
*/
|
|
49
49
|
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, {
|
|
50
50
|
'': RequiredInput[K];
|
|
51
|
-
}, any, [
|
|
51
|
+
}, any, [false, false], "">; }, import("../../../entities/message/message.infer").$MessageInputInfer<ReturnType<Def> & { [K in keyof RequiredInput]: MessageTemplateFieldBuilder<any, any, any, {
|
|
52
52
|
'': RequiredInput[K];
|
|
53
|
-
}, any, [
|
|
53
|
+
}, any, [false, false], "">; }>, import("../../../entities/message/message.infer").$MessageOutputInfer<ReturnType<Def> & { [K in keyof RequiredInput]: MessageTemplateFieldBuilder<any, any, any, {
|
|
54
54
|
'': RequiredInput[K];
|
|
55
|
-
}, any, [
|
|
56
|
-
'': RequiredInput[K];
|
|
57
|
-
}, 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]> ? {
|
|
58
|
-
path: `${K_1 & string}${keyof I & string}`;
|
|
59
|
-
data: I[keyof I];
|
|
60
|
-
opt: Opt[0];
|
|
61
|
-
nul: Nul[0];
|
|
62
|
-
} : never; } : never>, import("../../../entities/message/message.infer").$MessageOutputInfer<ReturnType<Def> & { [K in keyof RequiredInput]: MessageTemplateFieldBuilder<any, any, any, {
|
|
63
|
-
'': RequiredInput[K];
|
|
64
|
-
}, any, [never, never], [never, never]>; }, ReturnType<Def> & { [K in keyof RequiredInput]: MessageTemplateFieldBuilder<any, any, any, {
|
|
65
|
-
'': RequiredInput[K];
|
|
66
|
-
}, 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, {
|
|
67
|
-
'': RequiredInput[K];
|
|
68
|
-
}, 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]> ? {
|
|
69
|
-
path: `${K_2 & string}${keyof O & string}`;
|
|
70
|
-
data: O[keyof O];
|
|
71
|
-
opt: Opt_1[1];
|
|
72
|
-
nul: Nul_1[1];
|
|
73
|
-
} : never; } : never>>, MsgExtras, Ctx, CtxAfter>;
|
|
55
|
+
}, any, [false, false], "">; }>>, MsgExtras, Ctx, CtxAfter>;
|
|
74
56
|
/**
|
|
75
57
|
* A function that will build new fields on the input message to be
|
|
76
58
|
* consumed by the job.
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { $Module, $Space, ScopedMessage, ScopedMessageName } from "../../../schema";
|
|
2
2
|
import { $Job, $JobAssert, $JobMethod } from './job.schema';
|
|
3
3
|
import { BlockBuilder } from '../block.builder';
|
|
4
|
-
import { MessageTemplateDef
|
|
4
|
+
import { MessageTemplateDef } from "../../entities/message/template/message_template.builder";
|
|
5
5
|
import { Overlay } from "../../../engine/util/type";
|
|
6
6
|
import { $MessageInfer } from "../../entities/message/message.infer";
|
|
7
7
|
import { TrxNode } from "../../../engine/transaction/trx_node";
|
|
@@ -18,7 +18,9 @@ export type JobExtrasAndAsserts = ({
|
|
|
18
18
|
* @category Builders
|
|
19
19
|
* @subcategory Block
|
|
20
20
|
*/
|
|
21
|
-
export declare class JobBuilder<Space extends $Space, Module extends $Module, Job extends $Job = $Job
|
|
21
|
+
export declare class JobBuilder<Space extends $Space, Module extends $Module, Job extends $Job = $Job & {
|
|
22
|
+
'#input': never;
|
|
23
|
+
}, Ctx = {}> extends BlockBuilder<Space, Module, 'job'> {
|
|
22
24
|
$b: "job";
|
|
23
25
|
$j: "Job";
|
|
24
26
|
private _extrasAndAsserts;
|
|
@@ -35,25 +37,9 @@ export declare class JobBuilder<Space extends $Space, Module extends $Module, Jo
|
|
|
35
37
|
}>;
|
|
36
38
|
message<Name extends string, Def extends MessageTemplateDef<Space, Module, Name>, FullName extends string = `${Job['name']}${Name extends '' ? '' : '.'}${Name & string}`, Msg extends $Message = $MessageInfer<FullName, ($: any) => ReturnType<Def>>>(name: Name, def: Def): JobBuilder<Space, Overlay<Module, {
|
|
37
39
|
messages: Overlay<Module["messages"], { [K in FullName]: Msg; }>;
|
|
38
|
-
}>, Overlay<Job, {
|
|
39
|
-
"#input": Msg;
|
|
40
|
-
}>, Ctx>;
|
|
41
|
-
/** @deprecated Use `.message` instead. Will be removed on 3.1 */
|
|
42
|
-
messages<Def extends MultiMessageTemplateDef<Space, Module>>(def: Def): JobBuilder<Space, Overlay<Module, {
|
|
43
|
-
messages: Overlay<Module["messages"], { [K in keyof ReturnType<Def> as `${Job["name"]}${K extends "" ? "" : "."}${K & string}`]: $MessageInfer<`${Job["name"]}${K extends "" ? "" : "."}${K & string}`, ($: any) => ReturnType<Def>[K], ReturnType<Def>[K], import("../../entities/message/message.infer").$MessageInputInfer<ReturnType<Def>[K], ReturnType<Def>[K] extends infer T ? { [K_1 in keyof T]: ReturnType<Def>[K][K_1] extends import("../../entities/message/template/message_template_field.builder").MessageTemplateFieldBuilder<any, any, infer I, any, any, infer Opt extends [undefined, undefined], infer Nul extends [null, null]> ? {
|
|
44
|
-
path: `${K_1 & string}${keyof I & string}`;
|
|
45
|
-
data: I[keyof I];
|
|
46
|
-
opt: Opt[0];
|
|
47
|
-
nul: Nul[0];
|
|
48
|
-
} : never; } : never>, import("../../entities/message/message.infer").$MessageOutputInfer<ReturnType<Def>[K], ReturnType<Def>[K] extends infer T_1 ? { [K_2 in keyof T_1]: ReturnType<Def>[K][K_2] extends import("../../entities/message/template/message_template_field.builder").MessageTemplateFieldBuilder<any, any, any, infer O, any, infer Opt_1 extends [undefined, undefined], infer Nul_1 extends [null, null]> ? {
|
|
49
|
-
path: `${K_2 & string}${keyof O & string}`;
|
|
50
|
-
data: O[keyof O];
|
|
51
|
-
opt: Opt_1[1];
|
|
52
|
-
nul: Nul_1[1];
|
|
53
|
-
} : never; } : never>>; }>;
|
|
54
40
|
}>, Job, Ctx>;
|
|
55
|
-
input<MsgName extends ScopedMessageName<Module, Job['name']>, Msg extends NoInfer<ScopedMessage<Module, Job['name'], MsgName
|
|
56
|
-
"#input": Msg;
|
|
41
|
+
input<MsgName extends ScopedMessageName<Module, Job['name']>, Msg extends NoInfer<ScopedMessage<Module, Job['name'], MsgName>>, PreInput extends $Message = Job['#input']['#raw']['$'] extends string ? Job['#input'] : never>(...def: MsgName[]): JobBuilder<Space, Module, Overlay<Job, {
|
|
42
|
+
"#input": PreInput | Msg;
|
|
57
43
|
}>, Ctx>;
|
|
58
44
|
get output(): {
|
|
59
45
|
raw: <T>() => JobBuilder<Space, Module, Overlay<Job, {
|
|
@@ -34,10 +34,6 @@ class JobBuilder extends block_builder_1.BlockBuilder {
|
|
|
34
34
|
message(name, def) {
|
|
35
35
|
return super.message(name, def);
|
|
36
36
|
}
|
|
37
|
-
/** @deprecated Use `.message` instead. Will be removed on 3.1 */
|
|
38
|
-
messages(def) {
|
|
39
|
-
return super.messages(def);
|
|
40
|
-
}
|
|
41
37
|
input(...def) {
|
|
42
38
|
return super._input(...def);
|
|
43
39
|
}
|
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
import { $Module, $Space } from "../../../schema";
|
|
2
2
|
import { $Machine, $MachineLogFn } from './machine.schema';
|
|
3
|
-
import {
|
|
3
|
+
import { MessageTemplateDef } from "../../entities/message/template/message_template.builder";
|
|
4
4
|
import { $MessageInfer } from "../../entities/message/message.infer";
|
|
5
5
|
import { MachineStateDef } from './machine_state.builder';
|
|
6
6
|
import { BlockBuilder } from '../block.builder';
|
|
7
7
|
import { Overlay } from "../../../engine/util/type";
|
|
8
8
|
import { ModuleTree } from "../../../engine/tree";
|
|
9
9
|
import { ResolvedBuilderNode } from "../../../engine/dependency";
|
|
10
|
+
import { $Message } from "../..";
|
|
10
11
|
/**
|
|
11
12
|
* @category Builders
|
|
12
13
|
* @subcategory Block
|
|
@@ -22,18 +23,8 @@ export declare class MachineBuilder<Space extends $Space, Module extends $Module
|
|
|
22
23
|
authn<U extends keyof Space['authnUsers']>(...providers: U[]): MachineBuilder<Space, Module, Name, Overlay<$, {
|
|
23
24
|
"#authn": { [K in U]: Space["authnUsers"][K]; };
|
|
24
25
|
}>>;
|
|
25
|
-
|
|
26
|
-
messages: Overlay<Module["messages"], { [K in
|
|
27
|
-
path: `${K_1 & string}${keyof I & string}`;
|
|
28
|
-
data: I[keyof I];
|
|
29
|
-
opt: Opt[0];
|
|
30
|
-
nul: Nul[0];
|
|
31
|
-
} : never; } : never>, import("../../entities/message/message.infer").$MessageOutputInfer<ReturnType<Def>[K], ReturnType<Def>[K] extends infer T_1 ? { [K_2 in keyof T_1]: ReturnType<Def>[K][K_2] extends import("../../entities/message/template/message_template_field.builder").MessageTemplateFieldBuilder<any, any, any, infer O, any, infer Opt_1 extends [undefined, undefined], infer Nul_1 extends [null, null]> ? {
|
|
32
|
-
path: `${K_2 & string}${keyof O & string}`;
|
|
33
|
-
data: O[keyof O];
|
|
34
|
-
opt: Opt_1[1];
|
|
35
|
-
nul: Nul_1[1];
|
|
36
|
-
} : never; } : never>>; }>;
|
|
26
|
+
message<Name extends string, Def extends MessageTemplateDef<Space, Module, Name>, FullName extends string = `${$['name']}${Name extends '' ? '' : '.'}${Name & string}`, Msg extends $Message = $MessageInfer<FullName, ($: any) => ReturnType<Def>>>(name: Name, def: Def): MachineBuilder<Space, Overlay<Module, {
|
|
27
|
+
messages: Overlay<Module["messages"], { [K in FullName]: Msg; }>;
|
|
37
28
|
}>, Name, $>;
|
|
38
29
|
bucket<M extends keyof Module['buckets']>(names: M | M[]): MachineBuilder<Space, Module, Name, $ & {
|
|
39
30
|
"#data": Module["buckets"][M]["#data"];
|
|
@@ -49,7 +40,7 @@ export declare class MachineBuilder<Space extends $Space, Module extends $Module
|
|
|
49
40
|
static build(node: MachineBuilderNode, tree: ModuleTree, module: $Module): {
|
|
50
41
|
schema: $Machine;
|
|
51
42
|
inlineMessages: {
|
|
52
|
-
[x: string]:
|
|
43
|
+
[x: string]: $Message;
|
|
53
44
|
};
|
|
54
45
|
inlineJobs: Record<string, import("../..").$Job>;
|
|
55
46
|
};
|
|
@@ -23,8 +23,8 @@ class MachineBuilder extends block_builder_1.BlockBuilder {
|
|
|
23
23
|
authn(...providers) {
|
|
24
24
|
return super.authn(...providers);
|
|
25
25
|
}
|
|
26
|
-
|
|
27
|
-
return super.
|
|
26
|
+
message(name, def) {
|
|
27
|
+
return super.message(name, def);
|
|
28
28
|
}
|
|
29
29
|
/* [Data] */
|
|
30
30
|
bucket(names) {
|
|
@@ -3,9 +3,10 @@ import { $Queue } from './queue.schema';
|
|
|
3
3
|
import { ResolvedBuilderNode } from "../../../engine/dependency";
|
|
4
4
|
import { BlockBuilder } from '../block.builder';
|
|
5
5
|
import { Overlay } from "../../../engine/util/type";
|
|
6
|
-
import {
|
|
6
|
+
import { MessageTemplateDef } from "../../entities/message/template/message_template.builder";
|
|
7
7
|
import { $MessageInfer } from "../../entities/message/message.infer";
|
|
8
8
|
import { ModuleTree } from "../../../engine/tree";
|
|
9
|
+
import { $Message } from "../../entities/message/message.schema";
|
|
9
10
|
/**
|
|
10
11
|
* @category Builders
|
|
11
12
|
* @subcategory Block
|
|
@@ -16,25 +17,15 @@ export declare class QueueBuilder<Space extends $Space, M extends $Module, $ ext
|
|
|
16
17
|
authn<U extends keyof Space['authnUsers']>(...providers: U[]): QueueBuilder<Space, M, $ & {
|
|
17
18
|
"#authn": U extends any[] ? U[number] : U;
|
|
18
19
|
}>;
|
|
19
|
-
|
|
20
|
-
messages: Overlay<M["messages"], { [K in
|
|
21
|
-
path: `${K_1 & string}${keyof I & string}`;
|
|
22
|
-
data: I[keyof I];
|
|
23
|
-
opt: Opt[0];
|
|
24
|
-
nul: Nul[0];
|
|
25
|
-
} : never; } : never>, import("../../entities/message/message.infer").$MessageOutputInfer<ReturnType<Def>[K], ReturnType<Def>[K] extends infer T_1 ? { [K_2 in keyof T_1]: ReturnType<Def>[K][K_2] extends import("../../entities/message/template/message_template_field.builder").MessageTemplateFieldBuilder<any, any, any, infer O, any, infer Opt_1 extends [undefined, undefined], infer Nul_1 extends [null, null]> ? {
|
|
26
|
-
path: `${K_2 & string}${keyof O & string}`;
|
|
27
|
-
data: O[keyof O];
|
|
28
|
-
opt: Opt_1[1];
|
|
29
|
-
nul: Nul_1[1];
|
|
30
|
-
} : never; } : never>>; }>;
|
|
20
|
+
message<Name extends string, Def extends MessageTemplateDef<Space, M, Name>, FullName extends string = `${$['name']}${Name extends '' ? '' : '.'}${Name & string}`, Msg extends $Message = $MessageInfer<FullName, ($: any) => ReturnType<Def>>>(name: Name, def: Def): QueueBuilder<Space, Overlay<M, {
|
|
21
|
+
messages: Overlay<M["messages"], { [K in FullName]: Msg; }>;
|
|
31
22
|
}>, $>;
|
|
32
23
|
input<MsgName extends ScopedMessageName<M, $['name']>, Msg extends ScopedMessage<M, $['name'], MsgName>>(...def: MsgName[]): QueueBuilder<Space, M, Overlay<$, {
|
|
33
|
-
"#input": Msg;
|
|
24
|
+
"#input": $["#input"] | Msg;
|
|
34
25
|
}>>;
|
|
35
26
|
static build(node: QueueBuilderNode, tree: ModuleTree, module: $Module): {
|
|
36
27
|
schema: $Queue;
|
|
37
|
-
inlineMessages: Record<string,
|
|
28
|
+
inlineMessages: Record<string, $Message>;
|
|
38
29
|
};
|
|
39
30
|
}
|
|
40
31
|
export type AnyQueueBuilder = QueueBuilder<any, any, any>;
|
|
@@ -17,8 +17,8 @@ class QueueBuilder extends block_builder_1.BlockBuilder {
|
|
|
17
17
|
authn(...providers) {
|
|
18
18
|
return super.authn(...providers);
|
|
19
19
|
}
|
|
20
|
-
|
|
21
|
-
return super.
|
|
20
|
+
message(name, def) {
|
|
21
|
+
return super.message(name, def);
|
|
22
22
|
}
|
|
23
23
|
input(...def) {
|
|
24
24
|
return super._input(...def);
|
|
@@ -17,10 +17,12 @@ export declare class ExternalsBuilder<Space extends $Space, ModuleName extends k
|
|
|
17
17
|
$b: "externals";
|
|
18
18
|
name: string;
|
|
19
19
|
private buckets;
|
|
20
|
+
private messages;
|
|
20
21
|
private jobs;
|
|
21
22
|
private machines;
|
|
22
23
|
constructor(module: string);
|
|
23
24
|
bucket<M extends keyof Space['modules'], B extends ExternalBucketRefName<Space, ModuleName>>(ref: B): this;
|
|
25
|
+
message<M extends Exclude<keyof Space['modules'], ModuleName>, B extends keyof Space['modules'][M]['messages']>(ref: `${M & string}::${B & string}`): this;
|
|
24
26
|
job<M extends Exclude<keyof Space['modules'], ModuleName>, B extends keyof Space['modules'][M]['jobs']>(ref: `${M & string}::${B & string}`): this;
|
|
25
27
|
machine<M extends Exclude<keyof Space['modules'], ModuleName>, B extends keyof Space['modules'][M]['machines']>(ref: `${M & string}::${B & string}`): this;
|
|
26
28
|
static merge(to: AnyExternalsBuilder, from: AnyExternalsBuilder): void;
|
|
@@ -13,6 +13,7 @@ class ExternalsBuilder {
|
|
|
13
13
|
this.$b = 'externals';
|
|
14
14
|
this.name = '*';
|
|
15
15
|
this.buckets = {};
|
|
16
|
+
this.messages = {};
|
|
16
17
|
this.jobs = {};
|
|
17
18
|
this.machines = {};
|
|
18
19
|
}
|
|
@@ -20,6 +21,10 @@ class ExternalsBuilder {
|
|
|
20
21
|
this.buckets[ref] = new dependency_1.$Dependency(this.module, 'bucket', ref);
|
|
21
22
|
return this;
|
|
22
23
|
}
|
|
24
|
+
message(ref) {
|
|
25
|
+
this.messages[ref] = new dependency_1.$Dependency(this.module, 'message', ref);
|
|
26
|
+
return this;
|
|
27
|
+
}
|
|
23
28
|
job(ref) {
|
|
24
29
|
this.jobs[ref] = new dependency_1.$Dependency(this.module, 'job', ref);
|
|
25
30
|
return this;
|
|
@@ -34,7 +39,7 @@ class ExternalsBuilder {
|
|
|
34
39
|
}
|
|
35
40
|
// Build
|
|
36
41
|
static build(node) {
|
|
37
|
-
node.schema = new externals_schema_1.$Externals(node.module, node.builder.buckets, node.builder.jobs, node.builder.machines);
|
|
42
|
+
node.schema = new externals_schema_1.$Externals(node.module, node.builder.buckets, node.builder.messages, node.builder.jobs, node.builder.machines);
|
|
38
43
|
return node.schema;
|
|
39
44
|
}
|
|
40
45
|
}
|