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.
Files changed (80) hide show
  1. package/lib/compiler/apps/monolyth/stages/4_dump_modules_stage.js +8 -0
  2. package/lib/compiler/compiler.js +1 -1
  3. package/lib/compiler/elements/bucket.element.d.ts +2 -1
  4. package/lib/compiler/elements/bucket.element.js +68 -122
  5. package/lib/compiler/elements/element.js +2 -1
  6. package/lib/compiler/elements/externals.element.js +3 -0
  7. package/lib/compiler/elements/message.element.js +34 -57
  8. package/lib/compiler/elements/queue.element.js +1 -1
  9. package/lib/compiler/helpers/dump_helpers.d.ts +2 -0
  10. package/lib/compiler/helpers/dump_helpers.js +12 -2
  11. package/lib/compiler/stages/4_build_schemas_stage.js +12 -0
  12. package/lib/compiler/stages/5_inject_ts_stage.js +4 -1
  13. package/lib/compiler/stages/7_dump_stage.js +7 -1
  14. package/lib/compiler/treeshake.js +4 -2
  15. package/lib/compiler/typescript/bridge/extract.js +37 -107
  16. package/lib/compiler/typescript/bridge/inject.d.ts +1 -1
  17. package/lib/compiler/typescript/bridge/inject.js +73 -45
  18. package/lib/compiler/typescript/bridge/organize.js +9 -5
  19. package/lib/compiler/typescript/typescript_compiler.d.ts +4 -6
  20. package/lib/compiler/typescript/typescript_compiler.js +139 -75
  21. package/lib/elements/blocks/block.builder.d.ts +1 -10
  22. package/lib/elements/blocks/block.builder.js +0 -32
  23. package/lib/elements/blocks/job/internal/resource_job.builder.d.ts +3 -21
  24. package/lib/elements/blocks/job/job.builder.d.ts +6 -20
  25. package/lib/elements/blocks/job/job.builder.js +0 -4
  26. package/lib/elements/blocks/machine/machine.builder.d.ts +5 -14
  27. package/lib/elements/blocks/machine/machine.builder.js +2 -2
  28. package/lib/elements/blocks/queue/queue.builder.d.ts +6 -15
  29. package/lib/elements/blocks/queue/queue.builder.js +2 -2
  30. package/lib/elements/edge/externals/externals.builder.d.ts +2 -0
  31. package/lib/elements/edge/externals/externals.builder.js +6 -1
  32. package/lib/elements/edge/externals/externals.schema.d.ts +2 -1
  33. package/lib/elements/edge/externals/externals.schema.js +3 -1
  34. package/lib/elements/entities/bucket/adapters/memory.nql.js +1 -1
  35. package/lib/elements/entities/bucket/bucket.builder.d.ts +6 -4
  36. package/lib/elements/entities/bucket/bucket.js +7 -16
  37. package/lib/elements/entities/bucket/bucket.schema.d.ts +2 -1
  38. package/lib/elements/entities/bucket/graph/bucket_graph.infer.d.ts +7 -5
  39. package/lib/elements/entities/bucket/graph/bucket_graph_link.builder.d.ts +2 -1
  40. package/lib/elements/entities/bucket/model/bucket_model.builder.d.ts +1 -1
  41. package/lib/elements/entities/bucket/model/bucket_model.convert.d.ts +1 -1
  42. package/lib/elements/entities/bucket/model/bucket_model.convert.js +4 -4
  43. package/lib/elements/entities/bucket/model/bucket_model.infer.d.ts +45 -9
  44. package/lib/elements/entities/bucket/model/bucket_model.schema.d.ts +5 -6
  45. package/lib/elements/entities/bucket/model/bucket_model.schema.js +64 -21
  46. package/lib/elements/entities/bucket/model/bucket_model_field.builder.d.ts +88 -55
  47. package/lib/elements/entities/bucket/model/bucket_model_field.builder.js +22 -30
  48. package/lib/elements/entities/bucket/query/nql.schema.d.ts +13 -10
  49. package/lib/elements/entities/bucket/query/nql_compiler.js +46 -21
  50. package/lib/elements/entities/bucket/view/bucket_view.builder.js +1 -1
  51. package/lib/elements/entities/bucket/view/bucket_view.d.ts +19 -0
  52. package/lib/elements/entities/bucket/view/bucket_view.js +230 -108
  53. package/lib/elements/entities/bucket/view/bucket_view.schema.d.ts +5 -10
  54. package/lib/elements/entities/bucket/view/bucket_view.schema.js +3 -5
  55. package/lib/elements/entities/bucket/view/bucket_view_field.builder.d.ts +16 -12
  56. package/lib/elements/entities/bucket/view/bucket_view_field.builder.js +55 -40
  57. package/lib/elements/entities/message/message.builder.d.ts +1 -11
  58. package/lib/elements/entities/message/message.infer.d.ts +6 -30
  59. package/lib/elements/entities/message/message.schema.js +2 -2
  60. package/lib/elements/entities/message/template/message_template.builder.js +1 -1
  61. package/lib/elements/entities/message/template/message_template.schema.d.ts +10 -15
  62. package/lib/elements/entities/message/template/message_template.schema.js +29 -12
  63. package/lib/elements/entities/message/template/message_template_field.builder.d.ts +45 -209
  64. package/lib/elements/entities/message/template/message_template_field.builder.js +69 -85
  65. package/lib/elements/entities/message/template/message_template_parser.js +50 -65
  66. package/lib/engine/apps/inline.app.js +1 -0
  67. package/lib/engine/data/trash.js +7 -7
  68. package/lib/engine/data/tree.d.ts +3 -0
  69. package/lib/engine/data/tree.js +36 -0
  70. package/lib/engine/util/parse.d.ts +22 -14
  71. package/lib/engine/util/parse.js +18 -3
  72. package/lib/engine/util/type.d.ts +3 -0
  73. package/package.json +1 -1
  74. package/tools/joaquin/bucket.d.ts +9 -0
  75. package/tools/joaquin/bucket.js +49 -0
  76. package/tools/joaquin/message.d.ts +2 -1
  77. package/tools/joaquin/message.js +9 -2
  78. package/tools/joaquin/mock.d.ts +1 -0
  79. package/tools/joaquin/mock.js +13 -5
  80. package/tsconfig.build.tsbuildinfo +1 -1
@@ -75,6 +75,14 @@ class DumpModulesStage {
75
75
  }
76
76
  str += '\n },';
77
77
  }
78
+ if (Object.keys(externals.messages).length) {
79
+ str += '\n messages: {';
80
+ for (const b in externals.messages) {
81
+ const dep = externals.messages[b];
82
+ str += `\n '${b}': ${JSON.stringify(dep, undefined, 2).replace(/\n/g, '\n ')},`;
83
+ }
84
+ str += '\n },';
85
+ }
78
86
  if (Object.keys(externals.jobs).length) {
79
87
  str += '\n jobs: {\n';
80
88
  for (const b in externals.jobs) {
@@ -14,9 +14,9 @@ const _4_build_schemas_stage_1 = require("./stages/4_build_schemas_stage");
14
14
  const _5_inject_ts_stage_1 = require("./stages/5_inject_ts_stage");
15
15
  const _6_build_elements_stage_1 = require("./stages/6_build_elements_stage");
16
16
  const _7_dump_stage_1 = require("./stages/7_dump_stage");
17
+ const _8_diagnose_stage_1 = require("./stages/8_diagnose_stage");
17
18
  const console_1 = __importDefault(require("../engine/util/console"));
18
19
  const log_1 = require("../engine/util/log");
19
- const _8_diagnose_stage_1 = require("./stages/8_diagnose_stage");
20
20
  const fs_1 = __importDefault(require("fs"));
21
21
  class Compiler {
22
22
  constructor(space, config) {
@@ -14,7 +14,8 @@ export declare class BucketElement extends Element<$Bucket> {
14
14
  private buildModelFieldType;
15
15
  private buildCompositionType;
16
16
  buildModelType(fields?: $BucketModelFields): ObjTypeAsObj;
17
- buildModelFieldNamesType(model: ObjTypeAsObj, fields?: $BucketModelFields): Record<string, TypeAsObj>;
17
+ buildModelpath(fields?: $BucketModelFields): Record<string, TypeAsObj>;
18
+ buildQuerypath(fields?: $BucketModelFields): Record<string, TypeAsObj>;
18
19
  private buildGraphType;
19
20
  private buildViewsType;
20
21
  private buildViewType;
@@ -1,16 +1,17 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.BucketElement = void 0;
4
+ const bucket_model_schema_1 = require("../../elements/entities/bucket/model/bucket_model.schema");
4
5
  const element_1 = require("./element");
5
6
  const name_helpers_1 = require("../helpers/name_helpers");
6
7
  const dependency_1 = require("../../engine/dependency");
7
- const tree_1 = require("../../engine/data/tree");
8
8
  const dump_helpers_1 = require("../helpers/dump_helpers");
9
9
  class BucketElement extends element_1.Element {
10
10
  // Prepare
11
11
  prepare() {
12
12
  this.schema['#data'] = element_1.Element.Any;
13
- this.schema['#fieldpath'] = element_1.Element.Any;
13
+ this.schema['#modelpath'] = element_1.Element.Any;
14
+ this.schema['#querypath'] = element_1.Element.Any;
14
15
  this.schema['#composition'] = element_1.Element.Any;
15
16
  this.schema['#defaults'] = element_1.Element.Any;
16
17
  this.prepareGraph(this.schema.graph.links);
@@ -34,9 +35,6 @@ class BucketElement extends element_1.Element {
34
35
  if (field.children) {
35
36
  this.prepareViewFields(field.children);
36
37
  }
37
- else {
38
- field.children = element_1.Element.Never;
39
- }
40
38
  });
41
39
  }
42
40
  // Imports
@@ -48,13 +46,16 @@ class BucketElement extends element_1.Element {
48
46
  buildType() {
49
47
  const model = this.buildModelType();
50
48
  const bucket = dump_helpers_1.DumpHelpers.dumpValueToType(this.schema, {
49
+ model: () => 'any', // = this.buildModelType(),
51
50
  graph: () => this.buildGraphType(),
52
- views: () => this.buildViewsType(model)
51
+ views: () => this.buildViewsType()
53
52
  });
54
- const fieldpaths = this.buildModelFieldNamesType(model);
53
+ const modelpath = this.buildModelpath();
54
+ const querypath = this.buildQuerypath();
55
55
  const composition = this.buildCompositionType();
56
56
  Object.assign(bucket, {
57
- '#fieldpath': fieldpaths,
57
+ '#modelpath': modelpath,
58
+ '#querypath': querypath,
58
59
  '#composition': composition,
59
60
  '#defaults': bucket.defaults || '{}',
60
61
  '#data': this.highName
@@ -64,7 +65,7 @@ class BucketElement extends element_1.Element {
64
65
  bucket
65
66
  };
66
67
  }
67
- buildModelFieldType(field, isUnion = false) {
68
+ buildModelFieldType(field) {
68
69
  let type = 'unknown';
69
70
  if (field.type === 'boolean') {
70
71
  type = 'boolean';
@@ -116,40 +117,27 @@ class BucketElement extends element_1.Element {
116
117
  }
117
118
  else if (field.type === 'dict') {
118
119
  type = this.buildModelType({
119
- '[x in string]': field.children.__dict
120
+ '[x in string]': field.children['#']
120
121
  });
121
122
  }
122
- if (field.or) {
123
- const orType = this.buildModelFieldType(field.or, true);
123
+ else if (field.type === 'list') {
124
+ type = this.buildModelFieldType(field.children['#']);
124
125
  if (typeof type === 'object') {
125
- type.__or = orType;
126
- }
127
- else if (typeof orType === 'object') {
128
- const nonObj = type;
129
- type = orType;
130
- type.__or = nonObj;
126
+ type.__array = true;
131
127
  }
132
128
  else {
133
- type = `${type} | ${orType}`;
129
+ type = `(${type})[]`;
134
130
  }
135
131
  }
136
- if (!isUnion) {
137
- if (!field.required && field.defaultValue === undefined) {
138
- if (typeof type === 'object') {
139
- type.__optional = true;
140
- }
141
- else {
142
- type = `(${type}) | undefined`;
143
- }
144
- }
145
- if (field.array) {
146
- if (typeof type === 'object') {
147
- type.__array = true;
148
- }
149
- else {
150
- type = `(${type})[]`;
151
- }
152
- }
132
+ else if (field.type === 'union') {
133
+ const types = Object.values(this.buildModelType(field.children));
134
+ type = dump_helpers_1.DumpHelpers.dumpUnionType(types);
135
+ }
136
+ if (!field.required) {
137
+ type = '('
138
+ + dump_helpers_1.DumpHelpers.dumpType(type)
139
+ + ' | null | undefined'
140
+ + ')';
153
141
  }
154
142
  return type;
155
143
  }
@@ -174,24 +162,13 @@ class BucketElement extends element_1.Element {
174
162
  });
175
163
  return model;
176
164
  }
177
- buildModelFieldNamesType(model, fields = this.schema.model.fields) {
178
- const fieldPaths = {};
179
- Object.entries(fields).forEach(([key, field]) => {
180
- if (key === '__dict') {
181
- return;
182
- }
183
- fieldPaths[field.path] = model[key];
184
- if (field.children) {
185
- let nextFields = field.children;
186
- if ('__dict' in field.children) {
187
- nextFields = field.children.__dict.children;
188
- }
189
- if (nextFields) {
190
- Object.assign(fieldPaths, this.buildModelFieldNamesType(model[key], nextFields));
191
- }
192
- }
193
- });
194
- return fieldPaths;
165
+ buildModelpath(fields = this.schema.model.fields) {
166
+ const modelpath = {};
167
+ return modelpath;
168
+ }
169
+ buildQuerypath(fields = this.schema.model.fields) {
170
+ const querypath = {};
171
+ return querypath;
195
172
  }
196
173
  buildGraphType() {
197
174
  const links = {};
@@ -208,90 +185,59 @@ class BucketElement extends element_1.Element {
208
185
  links
209
186
  };
210
187
  }
211
- buildViewsType(model) {
188
+ buildViewsType() {
212
189
  const views = {};
213
190
  Object.entries(this.schema.views).forEach(([key, view]) => {
214
- views[key] = this.buildViewType(model, view.fields, key);
191
+ views[key] = this.buildViewType(view.fields, key);
215
192
  });
216
193
  return views;
217
194
  }
218
- buildViewType(model, schema, name) {
195
+ buildViewType(schema, name) {
219
196
  if (!schema) {
220
197
  return;
221
198
  }
222
- const fields = {};
223
- const data = {};
224
- Object.entries(schema).forEach(([key, field]) => {
225
- if (field.scope === 'model' && 'model' in field.value) {
226
- data[key] = tree_1.Tree.get(model, field.value.model.key, 0) || {};
227
- let children;
228
- if (field.type === 'obj') {
229
- children = field.children &&
230
- this.buildViewType(model, field.children, field.name);
231
- data[key] = Object.assign({}, data[key], children?.['#data']);
199
+ const buildFields = (fields) => {
200
+ const data = {};
201
+ for (const key in fields) {
202
+ const field = fields[key];
203
+ if (field.scope === 'model' && 'model' in field.meta) {
204
+ const modelFields = bucket_model_schema_1.$BucketModel.getField(this.schema.model, field.meta.model.path);
205
+ const types = [];
206
+ if (!field.children || '__raw' in field.children) {
207
+ types.push(dump_helpers_1.DumpHelpers.dumpUnionType(modelFields.map(f => this.buildModelFieldType(f))));
208
+ }
209
+ // Contains children
210
+ if (field.children) {
211
+ types.push(buildFields(field.children));
212
+ }
213
+ data[key] = dump_helpers_1.DumpHelpers.dumpIntersectionType(types);
232
214
  }
233
- fields[key] = {
234
- '#data': data[key],
235
- children: children?.fields
236
- };
237
- }
238
- else if (field.scope === 'graph' && 'graph' in field.value) {
239
- const link = this.schema.graph.links[field.value.graph.link];
240
- const bucket = dependency_1.$Dependency.typeName(link.bucket, this.module);
241
- if (field.value.graph.view) {
242
- data[key] = `${bucket}['views']['${field.value.graph.view}']['#data']${link.many ? '[]' : ''}${link.optional ? ' | undefined' : ''}`;
215
+ else if (field.scope === 'graph' && 'graph' in field.meta) {
216
+ const link = this.schema.graph.links[field.meta.graph.link];
217
+ const bucket = dependency_1.$Dependency.typeName(link.bucket, this.module);
218
+ if (field.meta.graph.view) {
219
+ data[key] = `${bucket}['views']['${field.meta.graph.view}']['#data']${link.many ? '[]' : ''}${link.optional ? ' | undefined' : ''}`;
220
+ }
221
+ else {
222
+ data[key] = `${bucket}['#data']${link.many ? '[]' : ''}${link.optional ? ' | undefined' : ''}`;
223
+ }
243
224
  }
244
- else {
245
- data[key] = `${bucket}['#data']${link.many ? '[]' : ''}${link.optional ? ' | undefined' : ''}`;
225
+ else if (field.scope === 'computed') {
226
+ data[key] = field['#data'];
246
227
  }
247
- fields[key] = {
248
- '#data': data[key],
249
- children: 'undefined'
250
- };
251
- }
252
- else if (field.scope === 'computed') {
253
- data[key] = field['#data'];
254
- fields[key] = {
255
- '#data': data[key],
256
- children: 'undefined'
257
- };
258
- }
259
- else if (field.scope === 'view' || field.scope === 'group') {
260
- const children = this.buildViewType(model, field.children, field.name);
261
- data[key] = children['#data'];
262
- fields[key] = {
263
- '#data': data[key],
264
- children: children.fields
265
- };
266
- }
267
- else if (field.scope === 'drive') {
268
- fields[key] = {
269
- '#data': 'string',
270
- children: 'undefined'
271
- };
272
- }
273
- const { children, ...f } = field;
274
- const type = dump_helpers_1.DumpHelpers.dumpValueToType(f, {
275
- $t: () => dump_helpers_1.DumpHelpers.dumpValueToType('bucket.view.field'),
276
- value: {
277
- model: v => ({
278
- key: dump_helpers_1.DumpHelpers.dumpValueToType(v.key),
279
- enumOptions: v.enumOptions ? dump_helpers_1.DumpHelpers.dumpValueToType(v.enumOptions) : 'undefined'
280
- }),
281
- graph: v => ({
282
- link: dump_helpers_1.DumpHelpers.dumpValueToType(v.link),
283
- view: v.view ? dump_helpers_1.DumpHelpers.dumpValueToType(v.view) : 'undefined'
284
- }),
285
- drive: v => dump_helpers_1.DumpHelpers.dumpValueToType(v)
228
+ else if (field.scope === 'view' || field.scope === 'group') {
229
+ const children = this.buildViewType(field.children, field.name);
230
+ data[key] = children['#data'];
286
231
  }
287
- });
288
- Object.assign(fields[key], type);
289
- });
232
+ }
233
+ return data;
234
+ };
235
+ const data = buildFields(schema);
290
236
  return {
291
237
  $t: dump_helpers_1.DumpHelpers.dumpValueToType('bucket.view'),
238
+ fields: 'any',
292
239
  '#data': data,
293
240
  name: dump_helpers_1.DumpHelpers.dumpValueToType(name),
294
- fields: 'any' // TODO: review if this might be needed
295
241
  };
296
242
  }
297
243
  // Dump
@@ -27,7 +27,8 @@ class Element {
27
27
  }
28
28
  bridgeImports() {
29
29
  let imports = '';
30
- for (const imp of this.bridge?.imports || []) {
30
+ const uniqueImports = new Set(this.bridge?.imports || []);
31
+ for (const imp of uniqueImports) {
31
32
  imports += imp + '\n';
32
33
  }
33
34
  return imports;
@@ -33,6 +33,9 @@ class ExternalsElement extends element_1.Element {
33
33
  Object.values(this.schema.buckets).forEach(ref => {
34
34
  externalModules.add(ref.module);
35
35
  });
36
+ Object.values(this.schema.messages).forEach(ref => {
37
+ externalModules.add(ref.module);
38
+ });
36
39
  Object.values(this.schema.jobs).forEach(ref => {
37
40
  externalModules.add(ref.module);
38
41
  });
@@ -124,76 +124,53 @@ 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 in string]': child.input.__dict
127
+ '[x in string]': child.input['#']
128
128
  };
129
129
  output[key] = {
130
- '[x in string]': child.output.__dict
130
+ '[x in string]': child.output['#']
131
131
  };
132
132
  }
133
- else if (field.type === 'msg') {
134
- input[key] = 'any';
135
- output[key] = 'any';
136
- }
137
- else {
138
- input[key] = 'unknown';
139
- output[key] = 'unknown';
140
- }
141
- if (field.or) {
142
- const orType = buildField(key, field.or, true);
133
+ else if (field.type === 'list') {
134
+ const child = this.buildIO(field.children);
135
+ input[key] = child.input['#'];
136
+ output[key] = child.output['#'];
143
137
  if (typeof input[key] === 'object') {
144
- input[key].__or = orType;
145
- }
146
- else if (typeof orType === 'object') {
147
- const nonObj = input[key];
148
- input[key] = orType;
149
- input[key].__or = nonObj;
138
+ input[key].__array = true;
150
139
  }
151
140
  else {
152
- input[key] = `${input[key]} | ${orType}`;
141
+ input[key] = `(${input[key]})[]`;
153
142
  }
154
143
  if (typeof output[key] === 'object') {
155
- output[key].__or = orType;
156
- }
157
- else if (typeof orType === 'object') {
158
- const nonObj = output[key];
159
- output[key] = orType;
160
- output[key].__or = nonObj;
144
+ output[key].__array = true;
161
145
  }
162
146
  else {
163
- output[key] = `${output[key]} | ${orType}`;
147
+ output[key] = `(${output[key]})[]`;
164
148
  }
165
149
  }
166
- if (!isUnion) {
167
- if (!field.required) {
168
- if (typeof input[key] === 'object') {
169
- input[key].__optional = true;
170
- }
171
- else {
172
- input[key] = `(${input[key]}) | undefined`;
173
- }
174
- if (field.defaultValue === undefined) {
175
- if (typeof output[key] === 'object') {
176
- output[key].__optional = true;
177
- }
178
- else {
179
- output[key] = `(${output[key]}) | undefined`;
180
- }
181
- }
182
- }
183
- if (field.array) {
184
- if (typeof input[key] === 'object') {
185
- input[key].__array = true;
186
- }
187
- else {
188
- input[key] = `(${input[key]})[]`;
189
- }
190
- if (typeof output[key] === 'object') {
191
- output[key].__array = true;
192
- }
193
- else {
194
- output[key] = `(${output[key]})[]`;
195
- }
196
- }
150
+ else if (field.type === 'union') {
151
+ const child = this.buildIO(field.children);
152
+ input[key] = '(' + Object.values(child.input).map(t => dump_helpers_1.DumpHelpers.dumpType(t)).join(' | ') + ')';
153
+ output[key] = '(' + Object.values(child.output).map(t => dump_helpers_1.DumpHelpers.dumpType(t)).join(' | ') + ')';
154
+ }
155
+ else if (field.type === 'msg') {
156
+ input[key] = 'any';
157
+ output[key] = 'any';
158
+ }
159
+ else {
160
+ input[key] = 'unknown';
161
+ output[key] = 'unknown';
162
+ }
163
+ if (!field.required || field.nullable) {
164
+ input[key] = '('
165
+ + dump_helpers_1.DumpHelpers.dumpType(input[key])
166
+ + (!field.required ? ' | undefined' : '')
167
+ + (field.nullable ? ' | null' : '')
168
+ + ')';
169
+ output[key] = '('
170
+ + dump_helpers_1.DumpHelpers.dumpType(output[key])
171
+ + ((!field.required && field.defaultValue === undefined) ? ' | undefined' : '')
172
+ + (field.nullable ? ' | null' : '')
173
+ + ')';
197
174
  }
198
175
  };
199
176
  Object.entries(fields).forEach(([key, field]) => {
@@ -6,7 +6,7 @@ const dump_helpers_1 = require("../helpers/dump_helpers");
6
6
  class QueueElement extends element_1.Element {
7
7
  prepare() {
8
8
  this.schema['#authn'] = element_1.Element.Any;
9
- this.schema['#input'] = element_1.Element.Any;
9
+ this.schema['#input'] = element_1.Element.Never;
10
10
  this.schema['#output'] = element_1.Element.Any;
11
11
  }
12
12
  buildType() {
@@ -3,6 +3,8 @@ type TransformTypes = {
3
3
  [x: string]: TransformTypes | ((v?: any) => TypeAsObj);
4
4
  };
5
5
  export declare class DumpHelpers {
6
+ static dumpUnionType(types: TypeAsObj[]): string;
7
+ static dumpIntersectionType(types: TypeAsObj[]): string;
6
8
  static dumpType(type: TypeAsObj, d?: number): string;
7
9
  static dumpSchema(val: any, d?: number): string;
8
10
  private static dumpFunction;
@@ -2,6 +2,16 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.DumpHelpers = void 0;
4
4
  class DumpHelpers {
5
+ static dumpUnionType(types) {
6
+ if (types.length < 2)
7
+ return this.dumpType(types[0]);
8
+ return '(' + types.map(t => this.dumpType(t)).join(' | ') + ')';
9
+ }
10
+ static dumpIntersectionType(types) {
11
+ if (types.length < 2)
12
+ return this.dumpType(types[0]);
13
+ return '(' + types.map(t => this.dumpType(t)).join(' | ') + ')';
14
+ }
5
15
  static dumpType(type, d = 0) {
6
16
  const pad0 = ' '.repeat(d);
7
17
  const pad1 = ' '.repeat(d + 1);
@@ -109,8 +119,8 @@ class DumpHelpers {
109
119
  }
110
120
  static dumpFunction(fn, padding = '') {
111
121
  // Functions should have been replaced by { __fn: ... } by the Compiler,
112
- // if any is missed, this flag causes a typescript error when compiling.
113
- return `/* TS BRIDGE ERROR: function not properly extracted from source. Function: ${fn.toString()} */`;
122
+ // if not, we try to use the JS version.
123
+ return `/* TS BRIDGE WARN: function not properly extracted from source. Attempting JS version (imports will not work) */ (${fn.toString()}) as any`;
114
124
  }
115
125
  static dumpValueToType(value, transform = {}, d = 2) {
116
126
  if (value === undefined) {
@@ -17,6 +17,7 @@ class BuildSchemasStage {
17
17
  log_1.Log.info('compiler', 'stage.build_schemas', 'Building schemas...');
18
18
  const t0 = new Date().getTime();
19
19
  await this.compiler.tree.traverse('Building schemas ', async (node) => {
20
+ var _a;
20
21
  const module = this.compiler.modules[node.module].module;
21
22
  if (node.progressive) {
22
23
  await module.inject({
@@ -24,6 +25,17 @@ class BuildSchemasStage {
24
25
  });
25
26
  return;
26
27
  }
28
+ // Accummulate imports from depencies
29
+ // (Given that dependencies are built in order)
30
+ node.bridge ?? (node.bridge = { imports: [] });
31
+ (_a = node.bridge).imports ?? (_a.imports = []);
32
+ for (const dep of node.dependencies) {
33
+ // If a dependency is inline and the node is it's root,
34
+ // they already share imports.
35
+ if (dep.node.root == node)
36
+ continue;
37
+ node.bridge.imports.push(...(dep.node.bridge?.imports || []));
38
+ }
27
39
  // Inline nodes are built by their root builder
28
40
  if (node.isInline) {
29
41
  return;
@@ -19,7 +19,10 @@ class InjectTSStage {
19
19
  const t0 = new Date().getTime();
20
20
  const { tree } = this.compiler;
21
21
  const nodes = tree.allNodes();
22
- inject_1.TSBridgeInject.inject(this.compiler, nodes);
22
+ tree.traverse('inject', node => {
23
+ inject_1.TSBridgeInject.inject(this.compiler, nodes, node);
24
+ return Promise.resolve();
25
+ });
23
26
  const t = new Date().getTime();
24
27
  log_1.Log.debug('compiler', 'stage.inject_ts', `[t: ${(t - t0) / 1000} ms]`);
25
28
  log_1.Log.trace('compiler', 'stage.inject_ts', 'Finished injecting TS code');
@@ -38,9 +38,9 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
38
38
  Object.defineProperty(exports, "__esModule", { value: true });
39
39
  exports.DumpStage = void 0;
40
40
  const fs = __importStar(require("fs"));
41
+ const path_1 = __importDefault(require("path"));
41
42
  const log_1 = require("../../engine/util/log");
42
43
  const name_helpers_1 = require("../helpers/name_helpers");
43
- const path_1 = __importDefault(require("path"));
44
44
  const dependency_1 = require("../../engine/dependency");
45
45
  const bucket_element_1 = require("../elements/bucket.element");
46
46
  const dump_helpers_1 = require("../helpers/dump_helpers");
@@ -240,6 +240,12 @@ class DumpStage {
240
240
  Object.entries(externals.schema.buckets).forEach(([tag, ref]) => {
241
241
  type.buckets[tag] = dependency_1.$Dependency.typeName(ref, module.lowName);
242
242
  });
243
+ if (!type.messages) {
244
+ type.messages = {};
245
+ }
246
+ Object.entries(externals.schema.messages).forEach(([tag, ref]) => {
247
+ type.messages[tag] = dependency_1.$Dependency.typeName(ref, module.lowName);
248
+ });
243
249
  if (!type.jobs) {
244
250
  type.jobs = {};
245
251
  }
@@ -19,10 +19,12 @@ class Treeshake {
19
19
  const b = node.builder;
20
20
  const $b = b.$b;
21
21
  const buckets = b.buckets;
22
+ const messages = b.messages;
22
23
  const jobs = b.jobs;
23
24
  log_1.Log.trace('compiler', 'treeshake', `${' '.repeat(depth)} └ Treeshaking node ${(0, log_1.scopeTag)($b, node.name)}`);
24
25
  node.dependencies = [
25
26
  ...Object.values(buckets),
27
+ ...Object.values(messages),
26
28
  ...Object.values(jobs)
27
29
  ];
28
30
  node.dependencies = this.cleanNodeDependencies(node);
@@ -141,10 +143,10 @@ class Treeshake {
141
143
  nestedInlines.push(...deps.inlines);
142
144
  }
143
145
  }
144
- // Inlines have a dependency on their parent node
146
+ // Inlines are a dependency of their parent node
145
147
  const inlines = [..._inlineNodes, ...nestedInlines];
146
148
  inlines.forEach(inline => {
147
- inline.dependencies.push(new dependency_1.$Dependency(node.module, node.type, node.name));
149
+ dependencies.push(new dependency_1.$Dependency(inline.module, inline.type, inline.name));
148
150
  });
149
151
  return {
150
152
  dependencies,