nesoi 3.2.8 → 3.3.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 (291) hide show
  1. package/README.md +33 -2
  2. package/lib/bundler/browser/browser.app.d.ts +32 -0
  3. package/lib/bundler/browser/browser.app.js +51 -0
  4. package/lib/bundler/browser/browser.bundler.d.ts +5 -0
  5. package/lib/bundler/browser/browser.bundler.js +27 -0
  6. package/lib/bundler/browser/stages/8_replace_nesoi_for_browser_stage.d.ts +13 -0
  7. package/lib/bundler/browser/stages/8_replace_nesoi_for_browser_stage.js +74 -0
  8. package/lib/bundler/distributed/distributed.app.config.d.ts +43 -0
  9. package/lib/{engine/apps → bundler}/distributed/distributed.app.config.js +1 -1
  10. package/lib/{engine/apps → bundler}/distributed/distributed.app.d.ts +14 -14
  11. package/lib/{engine/apps → bundler}/distributed/distributed.app.js +8 -3
  12. package/lib/{compiler/apps/distributed/distributed_compiler.d.ts → bundler/distributed/distributed.bundler.d.ts} +7 -7
  13. package/lib/{compiler/apps/distributed/distributed_compiler.js → bundler/distributed/distributed.bundler.js} +11 -11
  14. package/lib/{engine/apps → bundler}/distributed/distributed_node.app.d.ts +14 -20
  15. package/lib/{engine/apps → bundler}/distributed/distributed_node.app.js +18 -50
  16. package/lib/bundler/distributed/stages/1_mkdir_stage.d.ts +15 -0
  17. package/lib/{compiler/apps → bundler}/distributed/stages/1_mkdir_stage.js +6 -6
  18. package/lib/bundler/distributed/stages/2_build_typescript_stage.d.ts +15 -0
  19. package/lib/{compiler/apps → bundler}/distributed/stages/2_build_typescript_stage.js +7 -7
  20. package/lib/bundler/distributed/stages/3_copy_types_stage.d.ts +15 -0
  21. package/lib/{compiler/apps → bundler}/distributed/stages/3_copy_types_stage.js +7 -7
  22. package/lib/bundler/distributed/stages/4_dump_modules_stage.d.ts +16 -0
  23. package/lib/{compiler/apps → bundler}/distributed/stages/4_dump_modules_stage.js +5 -5
  24. package/lib/{compiler/apps → bundler}/distributed/stages/5_copy_static_stage.js +3 -3
  25. package/lib/{compiler/apps → bundler}/distributed/stages/6_dump_cli_stage.js +3 -3
  26. package/lib/{compiler/apps → bundler}/distributed/stages/7_dump_package_json_stage.js +3 -3
  27. package/lib/{engine/apps → bundler}/monolyth/monolyth.app.d.ts +13 -13
  28. package/lib/{engine/apps → bundler}/monolyth/monolyth.app.js +13 -10
  29. package/lib/{compiler/apps/monolyth/monolyth_compiler.d.ts → bundler/monolyth/monolyth.bundler.d.ts} +9 -7
  30. package/lib/{compiler/apps/monolyth/monolyth_compiler.js → bundler/monolyth/monolyth.bundler.js} +13 -12
  31. package/lib/bundler/monolyth/stages/1_mkdir_stage.d.ts +15 -0
  32. package/lib/{compiler/apps → bundler}/monolyth/stages/1_mkdir_stage.js +6 -6
  33. package/lib/bundler/monolyth/stages/2_build_typescript_stage.d.ts +15 -0
  34. package/lib/{compiler/apps → bundler}/monolyth/stages/2_build_typescript_stage.js +8 -7
  35. package/lib/bundler/monolyth/stages/3_copy_types_stage.d.ts +15 -0
  36. package/lib/{compiler/apps → bundler}/monolyth/stages/3_copy_types_stage.js +7 -7
  37. package/lib/{compiler/apps → bundler}/monolyth/stages/4_dump_modules_stage.d.ts +4 -4
  38. package/lib/{compiler/apps → bundler}/monolyth/stages/4_dump_modules_stage.js +29 -16
  39. package/lib/{compiler/apps → bundler}/monolyth/stages/5_copy_static_stage.d.ts +4 -4
  40. package/lib/{compiler/apps → bundler}/monolyth/stages/5_copy_static_stage.js +7 -7
  41. package/lib/bundler/monolyth/stages/6_dump_cli_stage.d.ts +15 -0
  42. package/lib/{compiler/apps → bundler}/monolyth/stages/6_dump_cli_stage.js +4 -4
  43. package/lib/{compiler/apps → bundler}/monolyth/stages/7_dump_package_json_stage.d.ts +4 -4
  44. package/lib/{compiler/apps → bundler}/monolyth/stages/7_dump_package_json_stage.js +13 -10
  45. package/lib/compiler/compiler.d.ts +1 -6
  46. package/lib/compiler/compiler.js +1 -1
  47. package/lib/compiler/elements/bucket.element.d.ts +2 -1
  48. package/lib/compiler/elements/bucket.element.js +16 -21
  49. package/lib/compiler/elements/cached.element.d.ts +1 -1
  50. package/lib/compiler/elements/cached.element.js +2 -2
  51. package/lib/compiler/elements/constants.element.d.ts +1 -1
  52. package/lib/compiler/elements/constants.element.js +2 -0
  53. package/lib/compiler/elements/controller.element.js +3 -3
  54. package/lib/compiler/elements/element.d.ts +6 -13
  55. package/lib/compiler/elements/element.js +11 -9
  56. package/lib/compiler/elements/externals.element.js +2 -2
  57. package/lib/compiler/elements/job.element.d.ts +1 -1
  58. package/lib/compiler/elements/job.element.js +1 -1
  59. package/lib/compiler/elements/machine.element.d.ts +2 -2
  60. package/lib/compiler/elements/machine.element.js +7 -7
  61. package/lib/compiler/elements/message.element.d.ts +1 -1
  62. package/lib/compiler/elements/message.element.js +26 -26
  63. package/lib/compiler/elements/queue.element.js +1 -1
  64. package/lib/compiler/elements/resource.element.d.ts +1 -1
  65. package/lib/compiler/elements/resource.element.js +9 -9
  66. package/lib/compiler/elements/topic.element.js +1 -1
  67. package/lib/compiler/error.d.ts +1 -5
  68. package/lib/compiler/error.js +3 -15
  69. package/lib/compiler/helpers/dump_helpers.d.ts +1 -1
  70. package/lib/compiler/helpers/dump_helpers.js +1 -1
  71. package/lib/compiler/index.d.ts +1 -3
  72. package/lib/compiler/index.js +15 -7
  73. package/lib/compiler/module.js +12 -12
  74. package/lib/compiler/progressive.d.ts +3 -4
  75. package/lib/compiler/progressive.js +3 -4
  76. package/lib/compiler/stages/2_treeshake_stage.js +4 -0
  77. package/lib/compiler/stages/3_extract_ts_stage.js +7 -7
  78. package/lib/compiler/stages/4_build_schemas_stage.js +3 -16
  79. package/lib/compiler/stages/6_build_elements_stage.js +1 -1
  80. package/lib/compiler/stages/7_dump_stage.js +35 -10
  81. package/lib/compiler/typescript/bridge/extract.js +24 -0
  82. package/lib/compiler/typescript/bridge/inject.js +18 -3
  83. package/lib/compiler/typescript/bridge/organize.d.ts +4 -0
  84. package/lib/compiler/typescript/bridge/organize.js +41 -22
  85. package/lib/compiler/typescript/error.d.ts +2 -83
  86. package/lib/compiler/typescript/error.js +6 -219
  87. package/lib/compiler/typescript/parser.js +3 -3
  88. package/lib/compiler/typescript/source.d.ts +2 -2
  89. package/lib/compiler/typescript/transformers/app_inject.transformer.js +13 -4
  90. package/lib/compiler/typescript/typescript_compiler.d.ts +3 -3
  91. package/lib/compiler/typescript/typescript_compiler.js +2 -2
  92. package/lib/elements/blocks/block.builder.d.ts +7 -4
  93. package/lib/elements/blocks/block.builder.js +24 -13
  94. package/lib/elements/blocks/block.js +2 -2
  95. package/lib/elements/blocks/block.schema.d.ts +12 -9
  96. package/lib/elements/blocks/block.schema.js +2 -2
  97. package/lib/elements/blocks/job/internal/machine_job.builder.d.ts +6 -5
  98. package/lib/elements/blocks/job/internal/machine_job.builder.js +3 -3
  99. package/lib/elements/blocks/job/internal/resource_job.builder.d.ts +11 -10
  100. package/lib/elements/blocks/job/internal/resource_job.builder.js +9 -6
  101. package/lib/elements/blocks/job/internal/resource_job.js +3 -6
  102. package/lib/elements/blocks/job/job.builder.d.ts +5 -5
  103. package/lib/elements/blocks/job/job.builder.js +7 -7
  104. package/lib/elements/blocks/job/job.js +1 -1
  105. package/lib/elements/blocks/job/job.schema.d.ts +5 -5
  106. package/lib/elements/blocks/job/job.schema.js +3 -3
  107. package/lib/elements/blocks/machine/machine.builder.d.ts +2 -2
  108. package/lib/elements/blocks/machine/machine.builder.js +12 -9
  109. package/lib/elements/blocks/machine/machine.js +7 -7
  110. package/lib/elements/blocks/machine/machine.schema.d.ts +23 -23
  111. package/lib/elements/blocks/machine/machine.schema.js +9 -9
  112. package/lib/elements/blocks/machine/machine_state.builder.d.ts +1 -0
  113. package/lib/elements/blocks/machine/machine_state.builder.js +31 -29
  114. package/lib/elements/blocks/machine/machine_transition.builder.d.ts +2 -2
  115. package/lib/elements/blocks/machine/machine_transition.builder.js +8 -8
  116. package/lib/elements/blocks/queue/queue.builder.d.ts +3 -3
  117. package/lib/elements/blocks/queue/queue.builder.js +3 -3
  118. package/lib/elements/blocks/queue/queue.schema.d.ts +6 -6
  119. package/lib/elements/blocks/queue/queue.schema.js +3 -3
  120. package/lib/elements/blocks/resource/resource.builder.d.ts +2 -2
  121. package/lib/elements/blocks/resource/resource.builder.js +37 -40
  122. package/lib/elements/blocks/resource/resource.d.ts +2 -2
  123. package/lib/elements/blocks/resource/resource.js +10 -18
  124. package/lib/elements/blocks/resource/resource.schema.d.ts +15 -15
  125. package/lib/elements/blocks/resource/resource.schema.js +8 -8
  126. package/lib/elements/blocks/topic/topic.builder.d.ts +2 -2
  127. package/lib/elements/blocks/topic/topic.builder.js +4 -4
  128. package/lib/elements/blocks/topic/topic.d.ts +2 -2
  129. package/lib/elements/blocks/topic/topic.js +7 -7
  130. package/lib/elements/blocks/topic/topic.schema.d.ts +6 -6
  131. package/lib/elements/blocks/topic/topic.schema.js +3 -3
  132. package/lib/elements/edge/controller/adapters/cli.controller_adapter.js +1 -1
  133. package/lib/elements/edge/controller/adapters/controller_adapter.d.ts +2 -2
  134. package/lib/elements/edge/controller/adapters/controller_adapter.js +2 -2
  135. package/lib/elements/edge/controller/controller.builder.d.ts +14 -13
  136. package/lib/elements/edge/controller/controller.builder.js +52 -42
  137. package/lib/elements/edge/controller/controller.d.ts +3 -3
  138. package/lib/elements/edge/controller/controller.js +12 -12
  139. package/lib/elements/edge/controller/controller.schema.d.ts +17 -16
  140. package/lib/elements/edge/controller/controller.schema.js +11 -11
  141. package/lib/elements/edge/externals/externals.builder.d.ts +8 -13
  142. package/lib/elements/edge/externals/externals.builder.js +43 -11
  143. package/lib/elements/edge/externals/externals.schema.d.ts +8 -7
  144. package/lib/elements/edge/externals/externals.schema.js +5 -3
  145. package/lib/elements/entities/bucket/adapters/browserdb.bucket_adapter.d.ts +45 -0
  146. package/lib/elements/entities/bucket/adapters/browserdb.bucket_adapter.js +164 -0
  147. package/lib/elements/entities/bucket/adapters/browserdb.service.d.ts +30 -0
  148. package/lib/elements/entities/bucket/adapters/browserdb.service.js +97 -0
  149. package/lib/elements/entities/bucket/adapters/bucket_adapter.d.ts +6 -1
  150. package/lib/elements/entities/bucket/adapters/bucket_adapter.js +7 -6
  151. package/lib/elements/entities/bucket/adapters/json.bucket_adapter.d.ts +1 -1
  152. package/lib/elements/entities/bucket/adapters/json.bucket_adapter.js +1 -0
  153. package/lib/elements/entities/bucket/adapters/memory.bucket_adapter.d.ts +1 -0
  154. package/lib/elements/entities/bucket/adapters/memory.bucket_adapter.js +14 -13
  155. package/lib/elements/entities/bucket/adapters/memory.nql.js +41 -35
  156. package/lib/elements/entities/bucket/bucket.builder.d.ts +6 -8
  157. package/lib/elements/entities/bucket/bucket.builder.js +19 -34
  158. package/lib/elements/entities/bucket/bucket.d.ts +2 -2
  159. package/lib/elements/entities/bucket/bucket.infer.d.ts +5 -5
  160. package/lib/elements/entities/bucket/bucket.js +24 -22
  161. package/lib/elements/entities/bucket/bucket.schema.d.ts +3 -3
  162. package/lib/elements/entities/bucket/bucket.schema.js +2 -2
  163. package/lib/elements/entities/bucket/cache/bucket_cache.js +14 -2
  164. package/lib/elements/entities/bucket/graph/bucket_graph.d.ts +3 -3
  165. package/lib/elements/entities/bucket/graph/bucket_graph.js +102 -30
  166. package/lib/elements/entities/bucket/graph/bucket_graph.schema.d.ts +3 -3
  167. package/lib/elements/entities/bucket/graph/bucket_graph_link.builder.d.ts +2 -2
  168. package/lib/elements/entities/bucket/graph/bucket_graph_link.builder.js +5 -3
  169. package/lib/elements/entities/bucket/model/bucket_model.builder.d.ts +2 -1
  170. package/lib/elements/entities/bucket/model/bucket_model.builder.js +2 -2
  171. package/lib/elements/entities/bucket/model/bucket_model.convert.js +3 -6
  172. package/lib/elements/entities/bucket/model/bucket_model.d.ts +13 -0
  173. package/lib/elements/entities/bucket/model/bucket_model.js +93 -0
  174. package/lib/elements/entities/bucket/model/bucket_model.schema.d.ts +4 -8
  175. package/lib/elements/entities/bucket/model/bucket_model.schema.js +0 -68
  176. package/lib/elements/entities/bucket/model/bucket_model_field.builder.d.ts +12 -4
  177. package/lib/elements/entities/bucket/model/bucket_model_field.builder.js +30 -33
  178. package/lib/elements/entities/bucket/query/nql.schema.d.ts +1 -1
  179. package/lib/elements/entities/bucket/query/nql_compiler.d.ts +8 -4
  180. package/lib/elements/entities/bucket/query/nql_compiler.js +44 -38
  181. package/lib/elements/entities/bucket/query/nql_engine.d.ts +1 -1
  182. package/lib/elements/entities/bucket/query/nql_engine.js +5 -2
  183. package/lib/elements/entities/bucket/view/bucket_view.builder.d.ts +2 -2
  184. package/lib/elements/entities/bucket/view/bucket_view.js +113 -81
  185. package/lib/elements/entities/bucket/view/bucket_view_field.builder.d.ts +9 -8
  186. package/lib/elements/entities/bucket/view/bucket_view_field.builder.js +8 -10
  187. package/lib/elements/entities/constants/constants.builder.d.ts +3 -3
  188. package/lib/elements/entities/constants/constants.builder.js +8 -8
  189. package/lib/elements/entities/constants/constants.schema.d.ts +8 -3
  190. package/lib/elements/entities/constants/constants.schema.js +7 -2
  191. package/lib/elements/entities/message/message.infer.d.ts +1 -5
  192. package/lib/elements/entities/message/message.js +2 -7
  193. package/lib/elements/entities/message/message.schema.js +1 -1
  194. package/lib/elements/entities/message/template/message_template.schema.d.ts +7 -5
  195. package/lib/elements/entities/message/template/message_template_field.builder.d.ts +18 -3
  196. package/lib/elements/entities/message/template/message_template_field.builder.js +49 -30
  197. package/lib/elements/entities/message/template/message_template_parser.js +2 -2
  198. package/lib/engine/{apps → app}/app.config.d.ts +11 -5
  199. package/lib/engine/{apps → app}/app.config.js +2 -2
  200. package/lib/engine/{apps → app}/app.d.ts +3 -2
  201. package/lib/engine/{apps → app}/app.js +3 -1
  202. package/lib/engine/{apps/distributed → app}/inc/inc.client.js +1 -1
  203. package/lib/engine/{apps/distributed → app}/inc/inc.server.js +3 -3
  204. package/lib/engine/{apps/distributed → app}/inc/sandbox.js +1 -1
  205. package/lib/engine/{apps → app}/inline.app.d.ts +2 -12
  206. package/lib/engine/{apps → app}/inline.app.js +37 -34
  207. package/lib/engine/auth/authn.d.ts +10 -12
  208. package/lib/engine/auth/zero.authn_provider.d.ts +3 -4
  209. package/lib/engine/auth/zero.authn_provider.js +0 -1
  210. package/lib/engine/builder.d.ts +28 -0
  211. package/lib/engine/builder.js +99 -0
  212. package/lib/engine/cli/cli.js +3 -2
  213. package/lib/engine/cli/ui.js +1 -0
  214. package/lib/engine/daemon.d.ts +28 -25
  215. package/lib/engine/daemon.js +37 -8
  216. package/lib/engine/data/error.d.ts +37 -3
  217. package/lib/engine/data/error.js +58 -16
  218. package/lib/engine/data/file.d.ts +1 -0
  219. package/lib/engine/data/file.js +4 -0
  220. package/lib/engine/dependency.d.ts +53 -81
  221. package/lib/engine/dependency.js +246 -120
  222. package/lib/engine/module.d.ts +18 -48
  223. package/lib/engine/module.js +78 -158
  224. package/lib/engine/space.d.ts +2 -2
  225. package/lib/engine/space.js +6 -6
  226. package/lib/engine/transaction/nodes/bucket.trx_node.d.ts +7 -4
  227. package/lib/engine/transaction/nodes/bucket.trx_node.js +66 -43
  228. package/lib/engine/transaction/nodes/bucket_query.trx_node.d.ts +10 -4
  229. package/lib/engine/transaction/nodes/bucket_query.trx_node.js +56 -45
  230. package/lib/engine/transaction/nodes/external.trx_node.d.ts +15 -0
  231. package/lib/engine/transaction/nodes/external.trx_node.js +53 -0
  232. package/lib/engine/transaction/nodes/job.trx_node.d.ts +7 -3
  233. package/lib/engine/transaction/nodes/job.trx_node.js +49 -29
  234. package/lib/engine/transaction/nodes/machine.trx_node.js +6 -6
  235. package/lib/engine/transaction/nodes/queue.trx_node.js +3 -3
  236. package/lib/engine/transaction/nodes/resource.trx_node.d.ts +7 -4
  237. package/lib/engine/transaction/nodes/resource.trx_node.js +68 -51
  238. package/lib/engine/transaction/nodes/topic.trx_node.js +9 -9
  239. package/lib/engine/transaction/trx.d.ts +15 -12
  240. package/lib/engine/transaction/trx.js +19 -3
  241. package/lib/engine/transaction/trx_engine.config.d.ts +4 -4
  242. package/lib/engine/transaction/trx_engine.d.ts +25 -7
  243. package/lib/engine/transaction/trx_engine.js +67 -16
  244. package/lib/engine/transaction/trx_node.d.ts +25 -21
  245. package/lib/engine/transaction/trx_node.js +99 -57
  246. package/lib/engine/tree.d.ts +4 -16
  247. package/lib/engine/tree.js +87 -57
  248. package/lib/{compiler → engine}/treeshake.d.ts +32 -32
  249. package/lib/{compiler → engine}/treeshake.js +272 -242
  250. package/lib/engine/util/console.js +3 -0
  251. package/lib/engine/util/crypto.d.ts +4 -3
  252. package/lib/engine/util/crypto.js +15 -5
  253. package/lib/engine/util/hash.js +5 -0
  254. package/lib/engine/util/log.d.ts +6 -8
  255. package/lib/engine/util/log.js +1 -1
  256. package/lib/engine/util/name_helpers.d.ts +37 -0
  257. package/lib/{compiler/helpers → engine/util}/name_helpers.js +33 -0
  258. package/lib/engine/util/parse.d.ts +4 -3
  259. package/lib/engine/util/parse.js +13 -28
  260. package/lib/engine/util/path.d.ts +1 -0
  261. package/lib/engine/util/path.js +14 -0
  262. package/lib/engine/util/random.d.ts +4 -0
  263. package/lib/engine/util/random.js +31 -0
  264. package/lib/engine/util/type.d.ts +8 -0
  265. package/lib/schema.d.ts +1 -1
  266. package/package.json +4 -1
  267. package/tools/joaquin/bucket.js +1 -1
  268. package/tools/joaquin/job.js +1 -1
  269. package/tools/joaquin/message.js +1 -1
  270. package/tools/joaquin/mock.js +2 -1
  271. package/tsconfig.build.tsbuildinfo +1 -1
  272. package/lib/compiler/apps/distributed/stages/1_mkdir_stage.d.ts +0 -15
  273. package/lib/compiler/apps/distributed/stages/2_build_typescript_stage.d.ts +0 -15
  274. package/lib/compiler/apps/distributed/stages/3_copy_types_stage.d.ts +0 -15
  275. package/lib/compiler/apps/distributed/stages/4_dump_modules_stage.d.ts +0 -16
  276. package/lib/compiler/apps/monolyth/stages/1_mkdir_stage.d.ts +0 -15
  277. package/lib/compiler/apps/monolyth/stages/2_build_typescript_stage.d.ts +0 -15
  278. package/lib/compiler/apps/monolyth/stages/3_copy_types_stage.d.ts +0 -15
  279. package/lib/compiler/apps/monolyth/stages/6_dump_cli_stage.d.ts +0 -15
  280. package/lib/compiler/helpers/name_helpers.d.ts +0 -20
  281. package/lib/engine/apps/distributed/distributed.app.config.d.ts +0 -44
  282. package/lib/engine/apps/distributed/elements/distributed_job.d.ts +0 -7
  283. package/lib/engine/apps/distributed/elements/distributed_job.js +0 -11
  284. /package/lib/{compiler/apps → bundler}/distributed/stages/5_copy_static_stage.d.ts +0 -0
  285. /package/lib/{compiler/apps → bundler}/distributed/stages/6_dump_cli_stage.d.ts +0 -0
  286. /package/lib/{compiler/apps → bundler}/distributed/stages/7_dump_package_json_stage.d.ts +0 -0
  287. /package/lib/engine/{apps/distributed → app}/inc/inc.client.d.ts +0 -0
  288. /package/lib/engine/{apps/distributed → app}/inc/inc.server.d.ts +0 -0
  289. /package/lib/engine/{apps/distributed → app}/inc/sandbox.d.ts +0 -0
  290. /package/lib/engine/{apps → app}/service.d.ts +0 -0
  291. /package/lib/engine/{apps → app}/service.js +0 -0
@@ -0,0 +1,93 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.BucketModel = void 0;
4
+ const error_1 = require("../../../../engine/data/error");
5
+ /**
6
+ * @category Elements
7
+ * @subcategory Entity
8
+ * */
9
+ class BucketModel {
10
+ constructor(bucket, config) {
11
+ this.config = config;
12
+ this.alias = bucket.alias;
13
+ this.schema = bucket.model;
14
+ }
15
+ copy(obj) {
16
+ const meta = this.config?.meta || {
17
+ created_at: 'created_at',
18
+ created_by: 'created_by',
19
+ updated_at: 'updated_at',
20
+ updated_by: 'updated_by',
21
+ };
22
+ const copy = {};
23
+ let poll = Object.entries(this.schema.fields).map(([path, field]) => ({ path, obj, copy, field }));
24
+ while (poll.length) {
25
+ const next = [];
26
+ for (const entry of poll) {
27
+ const val = entry.obj[entry.path];
28
+ if (val === undefined) {
29
+ continue;
30
+ }
31
+ if (val === null) {
32
+ entry.copy[entry.path] = null;
33
+ continue;
34
+ }
35
+ if (entry.field.type === 'list') {
36
+ if (!Array.isArray(val))
37
+ continue;
38
+ entry.copy[entry.path] = [];
39
+ next.push(...val.map((_, i) => ({
40
+ path: i.toString(),
41
+ obj: val,
42
+ copy: entry.copy[entry.path],
43
+ field: entry.field.children['#']
44
+ })));
45
+ }
46
+ else if (entry.field.type === 'dict') {
47
+ if (typeof val !== 'object' || Array.isArray(val))
48
+ continue;
49
+ entry.copy[entry.path] = {};
50
+ next.push(...Object.keys(val).map((path) => ({
51
+ path,
52
+ obj: val,
53
+ copy: entry.copy[entry.path],
54
+ field: entry.field.children['#']
55
+ })));
56
+ }
57
+ else if (entry.field.type === 'obj') {
58
+ if (typeof val !== 'object' || Array.isArray(val))
59
+ continue;
60
+ entry.copy[entry.path] = {};
61
+ next.push(...Object.keys(entry.field.children).map(path => ({
62
+ path: path,
63
+ obj: val,
64
+ copy: entry.copy[entry.path],
65
+ field: entry.field.children[path]
66
+ })));
67
+ }
68
+ else if (entry.field.type === 'union') {
69
+ // TODO: ??????????
70
+ entry.copy[entry.path] = entry.obj[entry.path];
71
+ }
72
+ else if (entry.field.type === 'enum') {
73
+ const v = entry.obj[entry.path];
74
+ const options = entry.field.meta.enum.options;
75
+ if (!(v in options)) {
76
+ throw error_1.NesoiError.Bucket.Model.InvalidEnum({ bucket: this.alias, value: v, options: Object.keys(options) });
77
+ }
78
+ entry.copy[entry.path] = entry.obj[entry.path];
79
+ }
80
+ else {
81
+ entry.copy[entry.path] = entry.obj[entry.path];
82
+ }
83
+ }
84
+ poll = next;
85
+ }
86
+ copy[meta.created_at] = obj[meta.created_at];
87
+ copy[meta.created_by] = obj[meta.created_by];
88
+ copy[meta.updated_at] = obj[meta.updated_at];
89
+ copy[meta.updated_by] = obj[meta.updated_by];
90
+ return copy;
91
+ }
92
+ }
93
+ exports.BucketModel = BucketModel;
@@ -1,9 +1,8 @@
1
- import { $Dependency } from "../../../../engine/dependency";
2
- import { BucketAdapterConfig } from '../adapters/bucket_adapter';
1
+ import { Tag } from "../../../../engine/dependency";
3
2
  export type $BucketModelFieldType = 'boolean' | 'date' | 'datetime' | 'duration' | 'decimal' | 'enum' | 'file' | 'float' | 'int' | 'string' | 'obj' | 'unknown' | 'dict' | 'list' | 'union' | 'literal';
4
3
  export type $BucketModelFieldCrypto = {
5
4
  algorithm: string;
6
- key: string;
5
+ value: Tag;
7
6
  };
8
7
  /**
9
8
  * @category Schemas
@@ -20,8 +19,7 @@ export declare class $BucketModelField {
20
19
  template: string;
21
20
  };
22
21
  enum?: {
23
- options: string | string[];
24
- dep?: $Dependency;
22
+ options: Record<string, any>;
25
23
  };
26
24
  decimal?: {
27
25
  left?: number;
@@ -41,8 +39,7 @@ export declare class $BucketModelField {
41
39
  template: string;
42
40
  };
43
41
  enum?: {
44
- options: string | string[];
45
- dep?: $Dependency;
42
+ options: Record<string, any>;
46
43
  };
47
44
  decimal?: {
48
45
  left?: number;
@@ -75,6 +72,5 @@ export declare class $BucketModel {
75
72
  static getField(model: $BucketModel, modelpath: string): $BucketModelField[];
76
73
  static fieldsOfType(model: $BucketModel, type: $BucketModelFieldType): $BucketModelField[];
77
74
  static forEachField(model: $BucketModel, predicate: (field: $BucketModelField, path: string) => Promise<void>): Promise<void>;
78
- static copy<T extends Record<string, any>>(model: $BucketModel, obj: T, meta?: BucketAdapterConfig['meta']): T;
79
75
  static getModelpaths(model: $BucketModel): Record<string, $BucketModelField[]>;
80
76
  }
@@ -119,74 +119,6 @@ class $BucketModel {
119
119
  poll = next;
120
120
  }
121
121
  }
122
- static copy(model, obj, meta = {
123
- created_at: 'created_at',
124
- created_by: 'created_by',
125
- updated_at: 'updated_at',
126
- updated_by: 'updated_by',
127
- }) {
128
- const copy = {};
129
- let poll = Object.entries(model.fields).map(([path, field]) => ({ path, obj, copy, field }));
130
- while (poll.length) {
131
- const next = [];
132
- for (const entry of poll) {
133
- const val = entry.obj[entry.path];
134
- if (val === undefined) {
135
- continue;
136
- }
137
- if (val === null) {
138
- entry.copy[entry.path] = null;
139
- continue;
140
- }
141
- if (entry.field.type === 'list') {
142
- if (!Array.isArray(val))
143
- continue;
144
- entry.copy[entry.path] = [];
145
- next.push(...val.map((_, i) => ({
146
- path: i.toString(),
147
- obj: val,
148
- copy: entry.copy[entry.path],
149
- field: entry.field.children['#']
150
- })));
151
- }
152
- else if (entry.field.type === 'dict') {
153
- if (typeof val !== 'object' || Array.isArray(val))
154
- continue;
155
- entry.copy[entry.path] = {};
156
- next.push(...Object.keys(val).map((path) => ({
157
- path,
158
- obj: val,
159
- copy: entry.copy[entry.path],
160
- field: entry.field.children['#']
161
- })));
162
- }
163
- else if (entry.field.type === 'obj') {
164
- if (typeof val !== 'object' || Array.isArray(val))
165
- continue;
166
- entry.copy[entry.path] = {};
167
- next.push(...Object.keys(entry.field.children).map(path => ({
168
- path: path,
169
- obj: val,
170
- copy: entry.copy[entry.path],
171
- field: entry.field.children[path]
172
- })));
173
- }
174
- else if (entry.field.type === 'union') {
175
- // TODO: ??????????
176
- entry.copy[entry.path] = entry.obj[entry.path];
177
- }
178
- else {
179
- entry.copy[entry.path] = entry.obj[entry.path];
180
- }
181
- }
182
- poll = next;
183
- }
184
- copy[meta.created_at] = obj[meta.created_at];
185
- copy[meta.created_by] = obj[meta.created_by];
186
- copy[meta.updated_at] = obj[meta.updated_at];
187
- copy[meta.updated_by] = obj[meta.updated_by];
188
- return copy;
189
- }
190
122
  static getModelpaths(model) {
191
123
  const modelpaths = {};
192
124
  let poll = Object.entries(model.fields).map(([path, field]) => ({ path, field }));
@@ -2,10 +2,12 @@ import { $Module, $Space } from "../../../../schema";
2
2
  import { $BucketModelField, $BucketModelFieldType, $BucketModelFields } from './bucket_model.schema';
3
3
  import { NesoiDate } from "../../../../engine/data/date";
4
4
  import { BucketModelpathObjInfer, BucketModelpathDictInfer, BucketModelpathListInfer, BucketModelObjInfer, BucketQuerypathDictInfer, BucketQuerypathListInfer, BucketQuerypathObjInfer, BucketModelpathUnionInfer } from './bucket_model.infer';
5
+ import { Dependency } from "../../../../engine/dependency";
5
6
  import { NesoiDecimal } from "../../../../engine/data/decimal";
6
7
  import { NesoiDatetime } from "../../../../engine/data/datetime";
7
8
  import { NesoiFile } from "../../../../engine/data/file";
8
9
  import { NesoiDuration } from "../../../../engine/data/duration";
10
+ import { ModuleTree } from "../../../../engine/tree";
9
11
  /**
10
12
  * @category Builders
11
13
  * @subcategory Entity
@@ -134,7 +136,13 @@ export declare class BucketModelFieldBuilder<Module extends $Module, Input, Outp
134
136
  private _required;
135
137
  private _defaultValue?;
136
138
  private crypto?;
137
- constructor(module: string, type: $BucketModelFieldType, alias?: string | undefined, meta?: $BucketModelField['meta'], children?: BucketModelFieldBuilders<Module> | undefined);
139
+ constructor(module: string, type: $BucketModelFieldType, alias?: string | undefined, meta?: (Omit<NonNullable<$BucketModelField["meta"]>, "enum"> & {
140
+ enum?: {
141
+ options: Record<string, any>;
142
+ } | {
143
+ dep: Dependency;
144
+ };
145
+ }) | undefined, children?: BucketModelFieldBuilders<Module> | undefined);
138
146
  as(alias: string): this;
139
147
  /**
140
148
  * This field can be `undefined` or `null`.
@@ -169,12 +177,12 @@ export declare class BucketModelFieldBuilder<Module extends $Module, Input, Outp
169
177
  */
170
178
  maxLength(val: number | null): void;
171
179
  encrypt(key: keyof Module['constants']['values'], algorithm?: string): this;
172
- static build(builder: AnyBucketModelFieldBuilder, name: string, basePath?: string): {
180
+ static build(tree: ModuleTree, builder: AnyBucketModelFieldBuilder, name: string, basePath?: string): {
173
181
  schema: $BucketModelField;
174
182
  hasFile: boolean;
175
183
  hasEncrypted: boolean;
176
184
  };
177
- static buildChildren(module: string, children: BucketModelFieldBuilders<any>, path?: string): {
185
+ static buildChildren(tree: ModuleTree, module: string, children: BucketModelFieldBuilders<any>, path?: string): {
178
186
  schema: $BucketModelFields;
179
187
  defaults: Record<string, any>;
180
188
  hasFileField: boolean;
@@ -182,6 +190,6 @@ export declare class BucketModelFieldBuilder<Module extends $Module, Input, Outp
182
190
  };
183
191
  }
184
192
  export type BucketModelFieldBuilders<Module extends $Module> = {
185
- [x: string]: BucketModelFieldBuilder<Module, any, any, any, any, any> | BucketModelFieldBuilders<Module>;
193
+ [x: string]: BucketModelFieldBuilder<Module, any, any, any, any, any>;
186
194
  };
187
195
  export type AnyBucketModelFieldBuilder = BucketModelFieldBuilder<any, any, any, any, any, any>;
@@ -39,21 +39,22 @@ class BucketModelFieldFactory {
39
39
  });
40
40
  }
41
41
  enum(options) {
42
- const strings = (Array.isArray(options) || typeof options === 'string')
43
- ? options
44
- : Object.keys(options);
45
- let dep;
42
+ let meta;
46
43
  if (typeof options === 'string') {
47
- const tag = dependency_1.$Tag.parseOrFail(options);
48
- if (tag.module) {
49
- dep = new dependency_1.$Dependency(this.module, 'constants', `${tag.module}::*`);
50
- }
51
- else {
52
- dep = new dependency_1.$Dependency(this.module, 'constants', '*');
53
- }
44
+ const tag = dependency_1.Tag.fromNameOrShort(this.module, 'constants.enum', options);
45
+ meta = { dep: new dependency_1.Dependency(this.module, tag, { build: true }) };
46
+ }
47
+ else if (Array.isArray(options)) {
48
+ const opts = {};
49
+ for (const opt of options)
50
+ opts[opt] = opt;
51
+ meta = { options: opts };
52
+ }
53
+ else {
54
+ meta = { options: options };
54
55
  }
55
56
  return new BucketModelFieldBuilder(this.module, 'enum', this.alias, {
56
- enum: { options: strings, dep }
57
+ enum: meta
57
58
  });
58
59
  }
59
60
  get int() {
@@ -155,23 +156,31 @@ class BucketModelFieldBuilder {
155
156
  maxLength(val) {
156
157
  }
157
158
  encrypt(key, algorithm = 'aes256') {
159
+ const tag = dependency_1.Tag.fromNameOrShort(this.module, 'constants.value', key);
158
160
  this.crypto = {
159
161
  algorithm,
160
- key: key
162
+ value: new dependency_1.Dependency(this.module, tag, { build: true })
161
163
  };
162
164
  return this;
163
165
  }
164
166
  // Build
165
- static build(builder, name, basePath = '') {
167
+ static build(tree, builder, name, basePath = '') {
166
168
  const path = basePath + name;
167
169
  const childrenPath = path + '.';
170
+ if (builder.type === 'enum' && 'dep' in builder.meta.enum) {
171
+ const schema = dependency_1.Tag.resolve(builder.meta.enum.dep.tag, tree);
172
+ builder.meta.enum = { options: schema.options };
173
+ }
168
174
  const children = builder.children
169
- ? BucketModelFieldBuilder.buildChildren(builder.module, builder.children, childrenPath)
175
+ ? BucketModelFieldBuilder.buildChildren(tree, builder.module, builder.children, childrenPath)
170
176
  : undefined;
171
177
  const defaults = builder._defaultValue && builder.children
172
178
  ? Object.assign({}, builder._defaultValue, children?.defaults)
173
179
  : builder._defaultValue;
174
- const schema = new bucket_model_schema_1.$BucketModelField(name, path, builder.type, builder.alias || name, builder._required, builder.meta, defaults, children?.schema, builder.crypto);
180
+ const schema = new bucket_model_schema_1.$BucketModelField(name, path, builder.type, builder.alias || name, builder._required, builder.meta, defaults, children?.schema, builder.crypto ? {
181
+ algorithm: builder.crypto.algorithm,
182
+ value: builder.crypto.value.tag
183
+ } : undefined);
175
184
  const hasFile = builder.type === 'file'
176
185
  || children?.hasFileField
177
186
  || false;
@@ -180,29 +189,17 @@ class BucketModelFieldBuilder {
180
189
  || false;
181
190
  return { schema, hasFile, hasEncrypted };
182
191
  }
183
- static buildChildren(module, children, path) {
192
+ static buildChildren(tree, module, children, path) {
184
193
  const schema = {};
185
194
  const defaults = {};
186
195
  let hasFileField = false;
187
196
  let hasEncryptedField = false;
188
197
  for (const c in children) {
189
198
  const child = children[c];
190
- if (child instanceof BucketModelFieldBuilder) {
191
- const out = BucketModelFieldBuilder.build(child, c, path);
192
- schema[c] = out.schema;
193
- hasFileField || (hasFileField = out.hasFile);
194
- hasEncryptedField || (hasEncryptedField = out.hasEncrypted);
195
- }
196
- // Builders are allowed to implicitly declare nested fields.
197
- // The code below transforms these groups into fields of the scope 'group'.
198
- else {
199
- const fieldTypeBuilder = new BucketModelFieldFactory(module);
200
- const fieldBuilder = fieldTypeBuilder.obj(child);
201
- const out = BucketModelFieldBuilder.build(fieldBuilder, c, path);
202
- schema[c] = out.schema;
203
- hasFileField || (hasFileField = out.hasFile);
204
- hasEncryptedField || (hasEncryptedField = out.hasEncrypted);
205
- }
199
+ const out = BucketModelFieldBuilder.build(tree, child, c, path);
200
+ schema[c] = out.schema;
201
+ hasFileField || (hasFileField = out.hasFile);
202
+ hasEncryptedField || (hasEncryptedField = out.hasEncrypted);
206
203
  defaults[c] = schema[c].defaultValue;
207
204
  }
208
205
  return { schema, defaults, hasFileField, hasEncryptedField };
@@ -4,7 +4,7 @@ import { NesoiDate } from "../../../../engine/data/date";
4
4
  import { NesoiDatetime } from "../../../../engine/data/datetime";
5
5
  import { NesoiDuration } from "../../../../engine/data/duration";
6
6
  export type NQL_QueryMeta = {
7
- bucket?: $Bucket;
7
+ schema?: $Bucket;
8
8
  scope?: string;
9
9
  avgTime: number;
10
10
  };
@@ -1,16 +1,20 @@
1
1
  import { NQL_AnyQuery, NQL_Union, NQL_Part, NQL_Node } from './nql.schema';
2
- import { AnyModule } from "../../../../engine/module";
2
+ import { AnyDaemon } from "../../../../engine/daemon";
3
+ import { BucketMetadata } from "../../../../engine/transaction/trx_engine";
3
4
  /**
4
5
  * @category NQL
5
6
  * */
6
7
  export declare class NQL_RuleTree {
8
+ private daemon;
7
9
  private module;
8
10
  private bucketName;
9
11
  private query;
12
+ private customMetadata?;
10
13
  private debug;
11
14
  private static OpByType;
12
15
  root: NQL_Union;
13
- constructor(module: AnyModule, bucketName: string, query: NQL_AnyQuery, debug?: boolean);
16
+ constructor(daemon: AnyDaemon, module: string, bucketName: string, query: NQL_AnyQuery, customMetadata?: BucketMetadata | undefined, debug?: boolean);
17
+ parse(): Promise<void>;
14
18
  private parseUnion;
15
19
  private parseOrder;
16
20
  private parseKey;
@@ -35,8 +39,8 @@ export declare class NQL_RuleTree {
35
39
  * @category NQL
36
40
  * */
37
41
  export declare class NQL_Compiler {
38
- static build(module: AnyModule, bucketName: string, query: NQL_AnyQuery): NQL_CompiledQuery;
39
- static buildUnion(union: NQL_Union): NQL_CompiledQuery;
42
+ static build(daemon: AnyDaemon, module: string, bucketName: string, query: NQL_AnyQuery, customMetadata?: BucketMetadata): Promise<NQL_CompiledQuery>;
43
+ static buildTree(tree: NQL_RuleTree): Promise<NQL_CompiledQuery>;
40
44
  }
41
45
  /**
42
46
  * A query ready to be run by the NQL engine, which will call
@@ -3,32 +3,38 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.NQL_CompiledQuery = exports.NQL_Compiler = exports.NQL_RuleTree = void 0;
4
4
  const bucket_model_schema_1 = require("../model/bucket_model.schema");
5
5
  const string_1 = require("../../../../engine/util/string");
6
+ const daemon_1 = require("../../../../engine/daemon");
7
+ const dependency_1 = require("../../../../engine/dependency");
6
8
  /**
7
9
  * @category NQL
8
10
  * */
9
11
  class NQL_RuleTree {
10
- constructor(module, bucketName, query, debug = false) {
12
+ constructor(daemon, module, bucketName, query, customMetadata, debug = false) {
13
+ this.daemon = daemon;
11
14
  this.module = module;
12
15
  this.bucketName = bucketName;
13
16
  this.query = query;
17
+ this.customMetadata = customMetadata;
14
18
  this.debug = debug;
15
- const bucket = module.buckets[this.bucketName];
16
- this.root = this.parseUnion(bucket, query);
17
- if (debug) {
19
+ }
20
+ async parse() {
21
+ const tag = dependency_1.Tag.fromNameOrShort(this.module, 'bucket', this.bucketName);
22
+ const bucket = this.customMetadata || await daemon_1.Daemon.getBucketMetadata(this.daemon, tag);
23
+ this.root = await this.parseUnion(bucket, this.query);
24
+ if (this.debug) {
18
25
  console.log(this.describe());
19
26
  }
20
27
  this.simplify();
21
28
  this._addDebugId();
22
- if (debug) {
29
+ if (this.debug) {
23
30
  console.log(this.describe());
24
31
  }
25
32
  }
26
33
  // Parse NQL
27
- parseUnion(bucket, query, select) {
28
- const meta = bucket.getQueryMeta();
34
+ async parseUnion(bucket, query, select) {
29
35
  const union = {
30
36
  meta: {
31
- ...meta,
37
+ ...bucket,
32
38
  avgTime: 0
33
39
  },
34
40
  inters: [
@@ -37,14 +43,14 @@ class NQL_RuleTree {
37
43
  };
38
44
  for (const key in query) {
39
45
  const value = query[key];
40
- const parsedKey = this.parseKey(bucket, key);
46
+ const parsedKey = await this.parseKey(bucket, key);
41
47
  // Fieldpath term -> Condition
42
48
  if (parsedKey.type === 'fieldpath') {
43
- const parsed = this.parseValue(value, parsedKey, meta, select);
49
+ const parsed = await this.parseValue(value, parsedKey, bucket, select);
44
50
  const rule = ('subquery' in parsed)
45
51
  ? parsed.subquery.union
46
52
  : {
47
- meta: { ...meta },
53
+ meta: { ...bucket },
48
54
  select,
49
55
  fieldpath: parsedKey.fieldpath,
50
56
  value: parsed,
@@ -71,15 +77,15 @@ class NQL_RuleTree {
71
77
  throw new Error('Graph Link not supported yet');
72
78
  }
73
79
  else if (parsedKey.type === 'and') {
74
- const subInter = this.parseUnion(bucket, value, select);
80
+ const subInter = await this.parseUnion(bucket, value, select);
75
81
  union.inters[0].rules.push(subInter);
76
82
  }
77
83
  else if (parsedKey.type === 'or') {
78
- const subInter = this.parseUnion(bucket, value, select);
84
+ const subInter = await this.parseUnion(bucket, value, select);
79
85
  union.inters.push({ meta: {}, rules: [subInter] });
80
86
  }
81
87
  else if (parsedKey.type === 'order') {
82
- union.order = this.parseOrder(bucket, value);
88
+ union.order = await this.parseOrder(bucket, value);
83
89
  }
84
90
  }
85
91
  if (!union.inters[0]?.rules.length) {
@@ -91,7 +97,7 @@ class NQL_RuleTree {
91
97
  let by = value['by'];
92
98
  if (by) {
93
99
  for (const key of by) {
94
- if (Object.values(bucket.adapter.config.meta).includes(key))
100
+ if (Object.values(bucket.meta).includes(key))
95
101
  continue;
96
102
  const fields = bucket_model_schema_1.$BucketModel.getField(bucket.schema.model, key);
97
103
  if (!fields.length) {
@@ -99,7 +105,7 @@ class NQL_RuleTree {
99
105
  }
100
106
  for (const field of fields) {
101
107
  if (![
102
- 'date', 'datetime', 'duration', 'decimal', 'enum', 'float', 'int', 'string', 'literal', 'boolean'
108
+ 'date', 'datetime', 'duration', 'decimal', 'enum', 'float', 'int', 'string', 'literal', 'boolean', 'unknown'
103
109
  ].includes(field.type)) {
104
110
  throw new Error(`Field '${key}' is not sortable`);
105
111
  }
@@ -122,7 +128,7 @@ class NQL_RuleTree {
122
128
  }
123
129
  return { by, dir: dir };
124
130
  }
125
- parseKey(bucket, key) {
131
+ async parseKey(bucket, key) {
126
132
  if (key === '#order') {
127
133
  return { type: 'order' };
128
134
  }
@@ -138,11 +144,8 @@ class NQL_RuleTree {
138
144
  if (!link) {
139
145
  throw new Error(`Graph Link '${linkName}' doesn't exist on the bucket ${bucket}`);
140
146
  }
141
- const linkBucket = this.module.buckets[link.bucket.refName].schema;
142
- if (!linkBucket) {
143
- throw new Error(`Graph Link '${link}' points to a bucket '${link.bucket}' not found on the module ${this.module.name}`);
144
- }
145
- return { type: 'graphlink', link: link.name, linkBucket };
147
+ const linkBucket = await daemon_1.Daemon.getBucketMetadata(this.daemon, link.bucket);
148
+ return { type: 'graphlink', link: link.name, linkBucket: linkBucket.schema };
146
149
  }
147
150
  else {
148
151
  const term = key.match(/^(or )?([\w|.|*]+)( not)? ?(~)?(.*)$/);
@@ -150,19 +153,19 @@ class NQL_RuleTree {
150
153
  throw new Error(`Invalid term '${key}'`);
151
154
  }
152
155
  const [_, or, fieldpath, not, case_i, op] = term;
153
- if (Object.values(bucket.adapter.config.meta).includes(fieldpath)) {
154
- const _op = this.parseOp(bucket.schema.name, [{ type: 'datetime', name: fieldpath }], op);
156
+ if (Object.values(bucket.meta).includes(fieldpath)) {
157
+ const _op = this.parseOp([{ type: 'datetime', name: fieldpath }], op);
155
158
  return { type: 'fieldpath', or: !!or, fieldpath, not: !!not, case_i: !!case_i, op: _op };
156
159
  }
157
160
  const fields = bucket_model_schema_1.$BucketModel.getField(bucket.schema.model, fieldpath);
158
161
  if (!fields.length) {
159
162
  throw new Error(`Field '${fieldpath}' not found on bucket '${bucket.schema.name}'`);
160
163
  }
161
- const _op = this.parseOp(bucket.schema.name, fields, op);
164
+ const _op = this.parseOp(fields, op);
162
165
  return { type: 'fieldpath', or: !!or, fieldpath, not: !!not, case_i: !!case_i, op: _op };
163
166
  }
164
167
  }
165
- parseOp(bucketName, fields, op) {
168
+ parseOp(fields, op) {
166
169
  const _op = (op === '' ? '==' : op);
167
170
  for (const field of fields) {
168
171
  if (![
@@ -197,14 +200,14 @@ class NQL_RuleTree {
197
200
  }
198
201
  return _op;
199
202
  }
200
- parseValue(value, parsedKey, meta, select) {
203
+ async parseValue(value, parsedKey, meta, select) {
201
204
  if (typeof value === 'object') {
202
205
  // Array
203
206
  if (Array.isArray(value)) {
204
207
  const statyc = [];
205
208
  const params = [];
206
209
  for (const item of value) {
207
- const parsed = this.parseValue(item, parsedKey, meta, select);
210
+ const parsed = await this.parseValue(item, parsedKey, meta, select);
208
211
  if ('static' in parsed) {
209
212
  statyc.push(parsed.static);
210
213
  }
@@ -231,7 +234,7 @@ class NQL_RuleTree {
231
234
  return { param: value['.'] };
232
235
  }
233
236
  // Sub-Query
234
- return { subquery: this.parseSubQuery(value, parsedKey, meta, select) };
237
+ return { subquery: await this.parseSubQuery(value, parsedKey, meta, select) };
235
238
  }
236
239
  }
237
240
  // Static value
@@ -239,7 +242,7 @@ class NQL_RuleTree {
239
242
  return { static: value };
240
243
  }
241
244
  }
242
- parseSubQuery(value, parsedKey, meta, select) {
245
+ async parseSubQuery(value, parsedKey, meta, select) {
243
246
  const union = {
244
247
  meta: {},
245
248
  inters: [
@@ -253,7 +256,8 @@ class NQL_RuleTree {
253
256
  throw new Error(`Invalid bucket field '${key}'`);
254
257
  }
255
258
  const [_, or, refBucket, fieldpath] = refField;
256
- const bucket = this.module.buckets[refBucket];
259
+ const tag = dependency_1.Tag.fromNameOrShort(this.module, 'bucket', refBucket);
260
+ const bucket = await daemon_1.Daemon.getBucketMetadata(this.daemon, tag);
257
261
  if (!bucket) {
258
262
  throw new Error(`Bucket '${bucket}' not found on module`);
259
263
  }
@@ -261,7 +265,7 @@ class NQL_RuleTree {
261
265
  if (!field) {
262
266
  throw new Error(`Field '${fieldpath}' not found on bucket '${bucket.schema.name}'`);
263
267
  }
264
- const refInter = this.parseUnion(bucket, value[key], fieldpath);
268
+ const refInter = await this.parseUnion(bucket, value[key], fieldpath);
265
269
  const rule = {
266
270
  meta: { ...meta },
267
271
  select,
@@ -336,7 +340,7 @@ class NQL_RuleTree {
336
340
  const inter = node[0].inters[0];
337
341
  parent[0].rules.splice(parent[1], 1, ...inter.rules);
338
342
  stack.pop();
339
- stack.push([inter, -1]);
343
+ parent[1]--;
340
344
  continue;
341
345
  }
342
346
  }
@@ -452,7 +456,7 @@ class NQL_RuleTree {
452
456
  + (0, string_1.colored)(`└ ${node._debug_id || ''}[if] `, 'lightcyan')
453
457
  + (0, string_1.colored)(node.select ? '(⊹ ' + node.select + ') ' : '', 'brown')
454
458
  + (0, string_1.colored)(`${node.meta.scope || ''} ${node.meta.avgTime || '?'}ms `, 'black')
455
- + `@${node.meta.bucket?.name}.${node.fieldpath}${node.not ? ' not' : ''} ${node.case_i ? '~' : ''}${node.op}`
459
+ + `@${node.meta.schema?.name}.${node.fieldpath}${node.not ? ' not' : ''} ${node.case_i ? '~' : ''}${node.op}`
456
460
  + (('static' in node.value) ? ` ${node.value.static}`
457
461
  : ('param' in node.value) ? ` ->${node.value.param}`
458
462
  : ' ▼ ' + (0, string_1.colored)('(' + node.value.subquery.bucket.name + '.' + node.value.subquery.select + ')', 'brown'))
@@ -490,11 +494,13 @@ NQL_RuleTree.OpByType = {
490
494
  * @category NQL
491
495
  * */
492
496
  class NQL_Compiler {
493
- static build(module, bucketName, query) {
494
- const tree = new NQL_RuleTree(module, bucketName, query);
495
- return this.buildUnion(tree.root);
497
+ static async build(daemon, module, bucketName, query, customMetadata) {
498
+ const tree = new NQL_RuleTree(daemon, module, bucketName, query, customMetadata);
499
+ return this.buildTree(tree);
496
500
  }
497
- static buildUnion(union) {
501
+ static async buildTree(tree) {
502
+ await tree.parse();
503
+ const union = tree.root;
498
504
  // const debugLog: string[] = [];
499
505
  // Create top-level part
500
506
  const parts = [{
@@ -24,7 +24,7 @@ export declare class NQL_Engine {
24
24
  private module;
25
25
  private runners;
26
26
  constructor(module: AnyModule);
27
- run(trx: AnyTrxNode, query: NQL_CompiledQuery, pagination?: NQL_Pagination, params?: Record<string, any>[], view?: $BucketView, runner?: NQLRunner): Promise<NQL_Result>;
27
+ run(trx: AnyTrxNode, query: NQL_CompiledQuery, pagination?: NQL_Pagination, params?: Record<string, any>[], view?: $BucketView, customRunners?: Record<string, NQLRunner>): Promise<NQL_Result>;
28
28
  linkExternal(bucket: AnyBucket): void;
29
29
  }
30
30
  export {};