nesoi 3.0.0 → 3.0.6

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 (186) hide show
  1. package/README.md +10 -0
  2. package/lib/adapters/postgres/src/migrator/bucket.d.ts +20 -0
  3. package/lib/adapters/postgres/src/migrator/bucket.js +184 -0
  4. package/lib/adapters/postgres/src/migrator/csv.d.ts +7 -0
  5. package/lib/adapters/postgres/src/migrator/csv.js +72 -0
  6. package/lib/adapters/postgres/src/migrator/migration.d.ts +2 -18
  7. package/lib/adapters/postgres/src/migrator/migration.js +10 -158
  8. package/lib/adapters/postgres/src/migrator/migrator.js +8 -5
  9. package/lib/adapters/postgres/src/migrator/runner.d.ts +16 -6
  10. package/lib/adapters/postgres/src/migrator/runner.js +103 -34
  11. package/lib/adapters/postgres/src/postgres.bucket_adapter.d.ts +19 -22
  12. package/lib/adapters/postgres/src/postgres.bucket_adapter.js +116 -100
  13. package/lib/adapters/postgres/src/postgres.cli.d.ts +23 -3
  14. package/lib/adapters/postgres/src/postgres.cli.js +70 -10
  15. package/lib/adapters/postgres/src/postgres.config.d.ts +5 -0
  16. package/lib/adapters/postgres/src/postgres.config.js +2 -0
  17. package/lib/adapters/postgres/src/postgres.nql.d.ts +7 -3
  18. package/lib/adapters/postgres/src/postgres.nql.js +86 -32
  19. package/lib/adapters/postgres/src/postgres.provider.d.ts +18 -0
  20. package/lib/adapters/postgres/src/postgres.provider.js +77 -0
  21. package/lib/adapters/postgres/test/postgres.bucket_adapter.test.js +76 -39
  22. package/lib/compiler/apps/monolyth/monolyth_compiler.d.ts +3 -0
  23. package/lib/compiler/apps/monolyth/monolyth_compiler.js +24 -0
  24. package/lib/compiler/apps/monolyth/stages/2_build_typescript_stage.js +2 -1
  25. package/lib/compiler/apps/monolyth/stages/5_dump_cli_stage.js +1 -1
  26. package/lib/compiler/apps/monolyth/stages/6_dump_package_json_stage.js +1 -1
  27. package/lib/compiler/elements/bucket.element.js +26 -11
  28. package/lib/compiler/elements/constants.element.js +1 -1
  29. package/lib/compiler/elements/element.d.ts +2 -0
  30. package/lib/compiler/elements/message.element.js +4 -4
  31. package/lib/compiler/helpers/dump_helpers.js +5 -2
  32. package/lib/compiler/stages/7_dump_stage.js +2 -0
  33. package/lib/compiler/treeshake.js +9 -37
  34. package/lib/compiler/typescript/bridge/extract.js +12 -0
  35. package/lib/compiler/typescript/bridge/inject.js +3 -0
  36. package/lib/compiler/typescript/bridge/organize.js +3 -3
  37. package/lib/elements/blocks/block.builder.js +4 -2
  38. package/lib/elements/blocks/job/internal/resource_job.builder.d.ts +22 -20
  39. package/lib/elements/blocks/job/internal/resource_job.d.ts +2 -1
  40. package/lib/elements/blocks/job/internal/resource_job.js +17 -4
  41. package/lib/elements/blocks/job/job.js +3 -0
  42. package/lib/elements/blocks/job/job.types.d.ts +7 -0
  43. package/lib/elements/blocks/job/job.types.js +2 -0
  44. package/lib/elements/blocks/machine/machine.js +3 -2
  45. package/lib/elements/blocks/resource/resource.builder.js +2 -4
  46. package/lib/elements/blocks/resource/resource.d.ts +5 -3
  47. package/lib/elements/blocks/resource/resource.js +26 -17
  48. package/lib/elements/edge/controller/adapters/controller_adapter.d.ts +2 -1
  49. package/lib/elements/edge/controller/adapters/controller_adapter.js +11 -2
  50. package/lib/elements/edge/controller/controller.builder.d.ts +4 -5
  51. package/lib/elements/edge/controller/controller.builder.js +7 -7
  52. package/lib/elements/edge/controller/controller.d.ts +2 -1
  53. package/lib/elements/edge/controller/controller.js +8 -6
  54. package/lib/elements/entities/bucket/adapters/bucket_adapter.d.ts +61 -23
  55. package/lib/elements/entities/bucket/adapters/bucket_adapter.js +22 -13
  56. package/lib/elements/entities/bucket/adapters/memory.bucket_adapter.d.ts +21 -22
  57. package/lib/elements/entities/bucket/adapters/memory.bucket_adapter.js +68 -2
  58. package/lib/elements/entities/bucket/adapters/memory.nql.d.ts +10 -6
  59. package/lib/elements/entities/bucket/adapters/memory.nql.js +38 -3
  60. package/lib/elements/entities/bucket/adapters/slow_memory.bucket_adapter.d.ts +0 -20
  61. package/lib/elements/entities/bucket/adapters/slow_memory.bucket_adapter.js +46 -30
  62. package/lib/elements/entities/bucket/bucket.builder.d.ts +8 -2
  63. package/lib/elements/entities/bucket/bucket.builder.js +13 -19
  64. package/lib/elements/entities/bucket/bucket.config.d.ts +5 -1
  65. package/lib/elements/entities/bucket/bucket.d.ts +180 -19
  66. package/lib/elements/entities/bucket/bucket.js +662 -48
  67. package/lib/elements/entities/bucket/bucket.schema.d.ts +7 -1
  68. package/lib/elements/entities/bucket/bucket.schema.js +2 -1
  69. package/lib/elements/entities/bucket/bucket.types.d.ts +2 -7
  70. package/lib/elements/entities/bucket/cache/bucket_cache.d.ts +6 -2
  71. package/lib/elements/entities/bucket/cache/bucket_cache.js +12 -12
  72. package/lib/elements/entities/bucket/graph/bucket_graph.d.ts +32 -5
  73. package/lib/elements/entities/bucket/graph/bucket_graph.js +80 -111
  74. package/lib/elements/entities/bucket/graph/bucket_graph.schema.d.ts +3 -6
  75. package/lib/elements/entities/bucket/graph/bucket_graph.schema.js +1 -4
  76. package/lib/elements/entities/bucket/graph/bucket_graph_link.builder.d.ts +3 -7
  77. package/lib/elements/entities/bucket/graph/bucket_graph_link.builder.js +6 -2
  78. package/lib/elements/entities/bucket/model/bucket_model.builder.js +1 -1
  79. package/lib/elements/entities/bucket/model/bucket_model.convert.js +3 -3
  80. package/lib/elements/entities/bucket/model/bucket_model.schema.d.ts +37 -8
  81. package/lib/elements/entities/bucket/model/bucket_model.schema.js +25 -4
  82. package/lib/elements/entities/bucket/model/bucket_model_field.builder.d.ts +33 -14
  83. package/lib/elements/entities/bucket/model/bucket_model_field.builder.js +56 -13
  84. package/lib/elements/entities/bucket/query/nql.schema.d.ts +1 -0
  85. package/lib/elements/entities/bucket/query/nql_compiler.js +13 -2
  86. package/lib/elements/entities/bucket/query/nql_engine.d.ts +11 -4
  87. package/lib/elements/entities/bucket/query/nql_engine.js +20 -11
  88. package/lib/elements/entities/bucket/view/bucket_view.js +63 -35
  89. package/lib/elements/entities/bucket/view/bucket_view.schema.d.ts +5 -2
  90. package/lib/elements/entities/bucket/view/bucket_view_field.builder.d.ts +6 -2
  91. package/lib/elements/entities/bucket/view/bucket_view_field.builder.js +22 -16
  92. package/lib/elements/entities/constants/constants.schema.d.ts +1 -1
  93. package/lib/elements/entities/drive/drive_adapter.d.ts +44 -0
  94. package/lib/elements/entities/drive/drive_adapter.js +10 -0
  95. package/lib/elements/entities/drive/local.drive_adapter.d.ts +10 -0
  96. package/lib/elements/entities/drive/local.drive_adapter.js +34 -0
  97. package/lib/elements/entities/message/message.schema.d.ts +1 -0
  98. package/lib/elements/entities/message/message.schema.js +33 -0
  99. package/lib/elements/entities/message/message_parser.d.ts +5 -1
  100. package/lib/elements/entities/message/message_parser.js +56 -35
  101. package/lib/elements/entities/message/template/message_template.schema.d.ts +10 -8
  102. package/lib/elements/entities/message/template/message_template_field.builder.d.ts +16 -6
  103. package/lib/elements/entities/message/template/message_template_field.builder.js +25 -0
  104. package/lib/elements/entities/message/template/message_template_parser.js +2 -1
  105. package/lib/engine/apps/app.config.d.ts +32 -11
  106. package/lib/engine/apps/app.config.js +12 -0
  107. package/lib/engine/apps/app.d.ts +2 -0
  108. package/lib/engine/apps/app.js +3 -0
  109. package/lib/engine/apps/inline.app.d.ts +5 -3
  110. package/lib/engine/apps/inline.app.js +27 -12
  111. package/lib/engine/apps/monolyth/monolyth.app.d.ts +4 -2
  112. package/lib/engine/apps/monolyth/monolyth.app.js +22 -10
  113. package/lib/engine/auth/authn.d.ts +5 -1
  114. package/lib/engine/auth/zero.authn_provider.d.ts +4 -2
  115. package/lib/engine/auth/zero.authn_provider.js +2 -2
  116. package/lib/engine/cli/cli.d.ts +3 -1
  117. package/lib/engine/cli/cli.js +22 -3
  118. package/lib/engine/cli/cli_adapter.d.ts +2 -1
  119. package/lib/engine/cli/cli_adapter.js +2 -1
  120. package/lib/engine/cli/cli_input.d.ts +19 -0
  121. package/lib/engine/cli/cli_input.js +207 -0
  122. package/lib/engine/cli/ui.d.ts +1 -1
  123. package/lib/engine/cli/ui.js +2 -2
  124. package/lib/engine/daemon.d.ts +3 -2
  125. package/lib/engine/daemon.js +14 -2
  126. package/lib/engine/data/date.js +2 -2
  127. package/lib/engine/data/datetime.d.ts +40 -4
  128. package/lib/engine/data/datetime.js +70 -11
  129. package/lib/engine/data/decimal.d.ts +1 -1
  130. package/lib/engine/data/decimal.js +3 -3
  131. package/lib/engine/data/error.d.ts +21 -4
  132. package/lib/engine/data/error.js +23 -7
  133. package/lib/engine/data/file.d.ts +38 -0
  134. package/lib/engine/data/file.js +54 -0
  135. package/lib/engine/data/json.d.ts +6 -0
  136. package/lib/engine/data/json.js +26 -0
  137. package/lib/engine/data/obj.d.ts +1 -1
  138. package/lib/engine/data/trash.d.ts +14 -0
  139. package/lib/engine/data/trash.js +2 -0
  140. package/lib/engine/data/tree.d.ts +7 -12
  141. package/lib/engine/data/tree.js +101 -49
  142. package/lib/engine/module.d.ts +2 -1
  143. package/lib/engine/module.js +2 -5
  144. package/lib/engine/space.d.ts +1 -0
  145. package/lib/engine/space.js +6 -0
  146. package/lib/engine/transaction/nodes/bucket.trx_node.d.ts +184 -24
  147. package/lib/engine/transaction/nodes/bucket.trx_node.js +346 -451
  148. package/lib/engine/transaction/nodes/bucket_query.trx_node.d.ts +4 -2
  149. package/lib/engine/transaction/nodes/bucket_query.trx_node.js +27 -15
  150. package/lib/engine/transaction/nodes/job.trx_node.d.ts +2 -1
  151. package/lib/engine/transaction/nodes/job.trx_node.js +6 -0
  152. package/lib/engine/transaction/trx.d.ts +5 -2
  153. package/lib/engine/transaction/trx.js +2 -2
  154. package/lib/engine/transaction/trx_engine.config.d.ts +1 -3
  155. package/lib/engine/transaction/trx_engine.d.ts +2 -2
  156. package/lib/engine/transaction/trx_engine.js +14 -11
  157. package/lib/engine/transaction/trx_node.d.ts +14 -4
  158. package/lib/engine/transaction/trx_node.js +50 -8
  159. package/lib/engine/tree.d.ts +1 -1
  160. package/lib/engine/util/crypto.d.ts +50 -0
  161. package/lib/engine/util/crypto.js +89 -0
  162. package/lib/engine/util/deep.d.ts +5 -0
  163. package/lib/engine/util/deep.js +46 -0
  164. package/lib/engine/util/dotenv.d.ts +2 -8
  165. package/lib/engine/util/dotenv.js +14 -36
  166. package/lib/engine/util/hash.d.ts +3 -0
  167. package/lib/engine/util/hash.js +23 -0
  168. package/lib/engine/util/log.js +1 -1
  169. package/lib/engine/util/mime.d.ts +10 -0
  170. package/lib/engine/util/mime.js +389 -0
  171. package/lib/engine/util/parse.d.ts +6 -5
  172. package/lib/engine/util/parse.js +16 -15
  173. package/lib/engine/util/path.d.ts +3 -0
  174. package/lib/engine/util/path.js +92 -0
  175. package/lib/engine/util/rules.d.ts +4 -0
  176. package/lib/engine/util/rules.js +12 -0
  177. package/package.json +2 -2
  178. package/tools/compile.js +2 -2
  179. package/tools/dotenv.d.ts +1 -0
  180. package/tools/dotenv.js +4 -0
  181. package/tools/joaquin/job.d.ts +5 -5
  182. package/tools/joaquin/mock.d.ts +23 -2
  183. package/tools/joaquin/mock.js +127 -21
  184. package/tsconfig.build.tsbuildinfo +1 -1
  185. package/lib/adapters/postgres/test/postgres.bucket_query.test.d.ts +0 -0
  186. 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
- this.monolyth.config.libPaths?.forEach(lib => {
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/config");\n';
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';
@@ -51,7 +51,7 @@ class DumpPackageJsonStage {
51
51
  async run() {
52
52
  log_1.Log.info('compiler', 'monolyth', 'Dumping package.json to build folder...');
53
53
  const { config, compiler, dirs } = this.monolyth;
54
- const nesoiPackageJson = await Promise.resolve(`${`${config.nesoiPath || 'node_modules/nesoi'}/package.json`}`).then(s => __importStar(require(s)));
54
+ const nesoiPackageJson = await Promise.resolve(`${`${config.nesoiPath || path.join('..', '..', '..', '..', '..', 'package.json')}`}`).then(s => __importStar(require(s)));
55
55
  const spacePackageJson = await Promise.resolve(`${space_1.Space.path(compiler.space, 'package.json')}`).then(s => __importStar(require(s)));
56
56
  const filePath = path.resolve(dirs.build, 'package.json');
57
57
  const scripts = {
@@ -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._enum.options;
79
+ const options = field.meta.enum.options;
80
80
  if (typeof options === 'string') {
81
- const constants = this.compiler.tree.getSchema(field._enum.dep);
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 = 'File';
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: string]': field.children.__dict
119
+ '[x in string]': field.children.__dict
120
120
  });
121
121
  }
122
- if (!field.required && !field.defaultValue) {
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
- type = dump_helpers_1.DumpHelpers.dumpType(type, 4)
140
- + ' | '
141
- + dump_helpers_1.DumpHelpers.dumpType(this.buildModelFieldType(field.or), 4);
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);
@@ -75,7 +75,7 @@ class ConstantsElement extends element_1.Element {
75
75
  _subs: 'never'
76
76
  };
77
77
  if (_subs.length) {
78
- paths[path + key + '.*'] = {
78
+ paths[path + key + '.#'] = {
79
79
  _enum: _enum,
80
80
  _subs: _subs.map(v => `'${v}'`).join(' | ')
81
81
  };
@@ -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] = 'File';
95
- output[key] = 'File';
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: string]': child.input.__dict
127
+ '[x in string]': child.input.__dict
128
128
  };
129
129
  output[key] = {
130
- '[x: string]': child.output.__dict
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]) => key !== '__array' && key !== '__optional')
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._enum?.dep) {
82
- dependencies.push(field._enum.dep);
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
- const fileBuilders = await Promise.resolve(`${filepath}`).then(s => __importStar(require(s)));
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
- log_1.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.`);
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[nElses].if = node;
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
- this._inputMsgs = names.map((name) => {
60
+ names.forEach((name) => {
60
61
  const fullName = name_helpers_1.NameHelpers.unabbrevName(name, this.name);
61
- return new dependency_1.$Dependency(this.module, 'message', fullName);
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 { AnyQuery } from "../../../entities/bucket/query/nql.schema";
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': AnyQuery<any, any>;
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]) => boolean;
20
- export declare class ResourceJobBuilder<Space extends $Space, Module extends $Module, Name extends string, Prepared, Authn extends AnyUsers = {}, Bucket extends $Bucket = never, ImplicitInput = {}, Trigger extends $Message = never, MsgExtras = {}, Ctx = {}, CtxAfter = {}> extends BlockBuilder<Space, Module, 'job'> {
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, ImplicitInput, $MessageInfer<Name, any, ReturnType<Def> & { [K in keyof ImplicitInput]: MessageTemplateFieldBuilder<any, any, any, {
44
- '': ImplicitInput[K];
45
- }, any, [never, never], [never, never]>; }, import("../../../entities/message/message.infer").$MessageInputInfer<ReturnType<Def> & { [K in keyof ImplicitInput]: MessageTemplateFieldBuilder<any, any, any, {
46
- '': ImplicitInput[K];
47
- }, any, [never, never], [never, never]>; }, ReturnType<Def> & { [K in keyof ImplicitInput]: MessageTemplateFieldBuilder<any, any, any, {
48
- '': ImplicitInput[K];
49
- }, any, [never, never], [never, never]>; } extends infer T ? { [K_1 in keyof T]: (ReturnType<Def> & { [K in keyof ImplicitInput]: MessageTemplateFieldBuilder<any, any, any, {
50
- '': ImplicitInput[K];
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 ImplicitInput]: MessageTemplateFieldBuilder<any, any, any, {
57
- '': ImplicitInput[K];
58
- }, any, [never, never], [never, never]>; }, ReturnType<Def> & { [K in keyof ImplicitInput]: MessageTemplateFieldBuilder<any, any, any, {
59
- '': ImplicitInput[K];
60
- }, any, [never, never], [never, never]>; } extends infer T_1 ? { [K_2 in keyof T_1]: (ReturnType<Def> & { [K in keyof ImplicitInput]: MessageTemplateFieldBuilder<any, any, any, {
61
- '': ImplicitInput[K];
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, ImplicitInput, Trigger, MsgExtras & Extra, Ctx, CtxAfter>;
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, ImplicitInput = {}, Ctx = {}, CtxAfter = {}> = ($: ResourceJobBuilder<S, M, Name, Prepared, Authn, Bucket, ImplicitInput, DefaultTrigger, {}, Ctx, CtxAfter>) => any;
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
+ }>);
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -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).put(obj);
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> | undefined;
46
- static assertThat(trx: AnyTrxNode, bucket: $Dependency, obj: NesoiObj | undefined, type: keyof ResourceAssertions<any>, arg: any): Promise<boolean | undefined>;
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>;