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,97 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.BrowserDBService = void 0;
4
+ const log_1 = require("../../../../engine/util/log");
5
+ const trx_1 = require("../../../../engine/transaction/trx");
6
+ const service_1 = require("../../../../engine/app/service");
7
+ const memory_nql_1 = require("./memory.nql");
8
+ const browserdb_bucket_adapter_1 = require("./browserdb.bucket_adapter");
9
+ const daemon_1 = require("../../../../engine/daemon");
10
+ /* @nesoi:browser ignore-start */
11
+ const window = {};
12
+ /* @nesoi:browser ignore-end */
13
+ class BrowserDBService extends service_1.Service {
14
+ constructor() {
15
+ super(...arguments);
16
+ // This works on all devices/browsers, and uses IndexedDBShim as a final fallback
17
+ this.indexedDB = window.indexedDB || window.mozIndexedDB || window.webkitIndexedDB || window.msIndexedDB || window.shimIndexedDB;
18
+ this.connected = false;
19
+ }
20
+ async up() {
21
+ this.nql = new memory_nql_1.MemoryNQLRunner();
22
+ }
23
+ async down() {
24
+ await this.db.close();
25
+ }
26
+ // Open (or create) the database
27
+ connect(buckets) {
28
+ return new Promise((resolve, reject) => {
29
+ const request = this.indexedDB.open(this.config.dbName, this.config.dbVersion);
30
+ request.onupgradeneeded = e => {
31
+ this.db = e.currentTarget?.result;
32
+ for (const bucket of buckets) {
33
+ const refName = `${bucket.module}::${bucket.name}`;
34
+ if (!this.db.objectStoreNames.contains(refName)) {
35
+ const autoIncrement = bucket.model.fields.id.type === 'int';
36
+ this.db.createObjectStore(refName, {
37
+ keyPath: 'id',
38
+ autoIncrement
39
+ });
40
+ log_1.Log.info('bucket', 'BrowserDB', `Store ${refName} created on database ${this.config.dbName}@${this.config.dbVersion}`);
41
+ }
42
+ }
43
+ };
44
+ request.onsuccess = e => {
45
+ const db = e.target?.result;
46
+ resolve(db);
47
+ };
48
+ request.onerror = e => {
49
+ log_1.Log.error('bucket', 'browserDB', e.toString());
50
+ reject(e);
51
+ };
52
+ });
53
+ }
54
+ static async db(service, module) {
55
+ if (!service.db) {
56
+ log_1.Log.info('service', 'BrowserDB', 'Connecting to BrowserDB database');
57
+ const modules = daemon_1.Daemon.getModules(module.daemon);
58
+ const buckets = Object.values(modules)
59
+ .map(module => Object.values(module.buckets))
60
+ .flat(1)
61
+ .filter(b => b.adapter instanceof browserdb_bucket_adapter_1.BrowserDBBucketAdapter)
62
+ .map(b => b.schema);
63
+ service.db = await service.connect(buckets);
64
+ }
65
+ return service.db;
66
+ }
67
+ static wrap(service) {
68
+ return async (trx, fn, services) => {
69
+ const module = trx.engine.getModule();
70
+ const db = await BrowserDBService.db(services[service], module);
71
+ const refNames = Object.keys(module.buckets)
72
+ .map(key => key.includes('::')
73
+ ? key
74
+ : `${module.name}::${key}`);
75
+ const trxData = {};
76
+ trx_1.Trx.set(trx.root, service + '.trxData', trxData);
77
+ const output = await fn(trx.root);
78
+ const dbTrx = db.transaction(refNames, 'readwrite');
79
+ for (const tag in trxData) {
80
+ const store = dbTrx.objectStore(tag);
81
+ for (const id in trxData[tag]) {
82
+ const obj = trxData[tag][id];
83
+ if ('__delete' in obj) {
84
+ store.delete(id);
85
+ }
86
+ else {
87
+ store.put(obj);
88
+ }
89
+ }
90
+ }
91
+ dbTrx.commit();
92
+ return output;
93
+ };
94
+ }
95
+ }
96
+ exports.BrowserDBService = BrowserDBService;
97
+ BrowserDBService.defaultName = 'idb';
@@ -4,6 +4,7 @@ import { BucketCacheSync } from '../cache/bucket_cache';
4
4
  import { NQL_AnyQuery, NQL_Pagination } from '../query/nql.schema';
5
5
  import { NQLRunner, NQL_Result } from '../query/nql_engine';
6
6
  import { $Bucket } from "../../..";
7
+ import { BucketMetadata } from "../../../../engine/transaction/trx_engine";
7
8
  export type BucketAdapterConfig = {
8
9
  meta: {
9
10
  created_at: string;
@@ -139,7 +140,11 @@ export declare abstract class BucketAdapter<Obj extends NesoiObj> {
139
140
  query<MetadataOnly extends boolean>(trx: AnyTrxNode, query: NQL_AnyQuery, pagination?: NQL_Pagination, params?: Record<string, any>[], config?: {
140
141
  view?: string;
141
142
  metadataOnly?: MetadataOnly;
142
- }, runner?: NQLRunner): Promise<NQL_Result<MetadataOnly extends true ? {
143
+ }, custom?: {
144
+ module?: string;
145
+ runners?: Record<string, NQLRunner>;
146
+ metadata?: BucketMetadata;
147
+ }): Promise<NQL_Result<MetadataOnly extends true ? {
143
148
  id: Obj['id'];
144
149
  [x: string]: any;
145
150
  } : Obj>>;
@@ -25,14 +25,15 @@ class BucketAdapter {
25
25
  /**
26
26
  * Return the results of a query
27
27
  */
28
- async query(trx, query, pagination, params, config, runner) {
28
+ async query(trx, query, pagination, params, config,
29
+ // When running a temporary local memory adapter,
30
+ // these are required
31
+ custom) {
29
32
  const module = trx_node_1.TrxNode.getModule(trx);
30
- const refName = (module.name === this.schema.module
31
- ? '' : `${this.schema.module}::`)
32
- + this.schema.name;
33
- const compiled = await nql_compiler_1.NQL_Compiler.build(module, refName, query);
33
+ const moduleName = custom?.module || module.name;
34
+ const compiled = await nql_compiler_1.NQL_Compiler.build(module.daemon, moduleName, this.schema.name, query, custom?.metadata);
34
35
  const view = config?.view ? this.schema.views[config.view] : undefined;
35
- const result = await module.nql.run(trx, compiled, pagination, params, view, runner);
36
+ const result = await module.nql.run(trx, compiled, pagination, params, view, custom?.runners);
36
37
  if (config?.metadataOnly) {
37
38
  result.data = result.data.map(obj => ({
38
39
  id: obj.id,
@@ -41,4 +41,4 @@ export declare class JSONBucketAdapter<B extends $Bucket, Obj extends B['#data']
41
41
  reset: boolean;
42
42
  }>;
43
43
  }
44
- export type AnyMemoryBucketAdapter = JSONBucketAdapter<any, any>;
44
+ export type AnyJSONBucketAdapter = JSONBucketAdapter<any, any>;
@@ -1,4 +1,5 @@
1
1
  "use strict";
2
+ /* @nesoi:browser ignore-file */
2
3
  var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
4
  if (k2 === undefined) k2 = k;
4
5
  var desc = Object.getOwnPropertyDescriptor(m, k);
@@ -17,6 +17,7 @@ import { BucketCacheSync } from '../cache/bucket_cache';
17
17
  export declare class MemoryBucketAdapter<B extends $Bucket, Obj extends B['#data']> extends BucketAdapter<Obj> {
18
18
  schema: B;
19
19
  data: NoInfer<Record<Obj['id'], Obj>>;
20
+ private model;
20
21
  constructor(schema: B, data?: NoInfer<Record<Obj['id'], Obj>>, config?: BucketAdapterConfig);
21
22
  getQueryMeta(): {
22
23
  scope: string;
@@ -2,9 +2,9 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.MemoryBucketAdapter = void 0;
4
4
  const bucket_adapter_1 = require("./bucket_adapter");
5
- const crypto_1 = require("crypto");
6
5
  const memory_nql_1 = require("./memory.nql");
7
- const bucket_model_schema_1 = require("../model/bucket_model.schema");
6
+ const hash_1 = require("../../../../engine/util/hash");
7
+ const bucket_model_1 = require("../model/bucket_model");
8
8
  /**
9
9
  * @category Adapters
10
10
  * @subcategory Entity
@@ -23,6 +23,7 @@ class MemoryBucketAdapter extends bucket_adapter_1.BucketAdapter {
23
23
  this.schema = schema;
24
24
  this.data = data;
25
25
  nql.bind(this);
26
+ this.model = new bucket_model_1.BucketModel(schema, config);
26
27
  }
27
28
  getQueryMeta() {
28
29
  return {
@@ -45,7 +46,7 @@ class MemoryBucketAdapter extends bucket_adapter_1.BucketAdapter {
45
46
  }
46
47
  /* Write Operations */
47
48
  async create(trx, obj) {
48
- const input = bucket_model_schema_1.$BucketModel.copy(this.schema.model, obj, this.config.meta);
49
+ const input = this.model.copy(obj);
49
50
  if (!input.id) {
50
51
  const lastId = (await this.index(trx))
51
52
  .map((_obj) => parseInt(_obj.id))
@@ -53,7 +54,7 @@ class MemoryBucketAdapter extends bucket_adapter_1.BucketAdapter {
53
54
  input.id = lastId + 1;
54
55
  }
55
56
  this.data[input.id] = input;
56
- const output = bucket_model_schema_1.$BucketModel.copy(this.schema.model, input, this.config.meta);
57
+ const output = this.model.copy(input);
57
58
  return Promise.resolve(output);
58
59
  }
59
60
  async createMany(trx, objs) {
@@ -67,9 +68,9 @@ class MemoryBucketAdapter extends bucket_adapter_1.BucketAdapter {
67
68
  if (!obj.id || !this.data[obj.id]) {
68
69
  throw new Error(`Object with id ${obj.id} not found for replace`);
69
70
  }
70
- const input = bucket_model_schema_1.$BucketModel.copy(this.schema.model, obj, this.config.meta);
71
+ const input = this.model.copy(obj);
71
72
  this.data[input.id] = input;
72
- const output = bucket_model_schema_1.$BucketModel.copy(this.schema.model, input, this.config.meta);
73
+ const output = this.model.copy(input);
73
74
  return Promise.resolve(output);
74
75
  }
75
76
  async replaceMany(trx, objs) {
@@ -85,7 +86,7 @@ class MemoryBucketAdapter extends bucket_adapter_1.BucketAdapter {
85
86
  throw new Error(`Object with id ${obj.id} not found for patch`);
86
87
  }
87
88
  const data = this.data[obj.id];
88
- const input = bucket_model_schema_1.$BucketModel.copy(this.schema.model, obj, this.config.meta);
89
+ const input = this.model.copy(obj);
89
90
  for (const key in input) {
90
91
  if (input[key] === null) {
91
92
  delete data[key];
@@ -94,7 +95,7 @@ class MemoryBucketAdapter extends bucket_adapter_1.BucketAdapter {
94
95
  data[key] = input[key];
95
96
  }
96
97
  }
97
- const output = bucket_model_schema_1.$BucketModel.copy(this.schema.model, data, this.config.meta);
98
+ const output = this.model.copy(data);
98
99
  return Promise.resolve(output);
99
100
  }
100
101
  async patchMany(trx, objs) {
@@ -106,7 +107,7 @@ class MemoryBucketAdapter extends bucket_adapter_1.BucketAdapter {
106
107
  return Promise.resolve(out);
107
108
  }
108
109
  async put(trx, obj) {
109
- const input = bucket_model_schema_1.$BucketModel.copy(this.schema.model, obj, this.config.meta);
110
+ const input = this.model.copy(obj);
110
111
  if (!input.id) {
111
112
  const lastId = (await this.index(trx))
112
113
  .map((_obj) => parseInt(_obj.id))
@@ -114,7 +115,7 @@ class MemoryBucketAdapter extends bucket_adapter_1.BucketAdapter {
114
115
  input.id = lastId + 1;
115
116
  }
116
117
  this.data[input.id] = input;
117
- const output = bucket_model_schema_1.$BucketModel.copy(this.schema.model, input, this.config.meta);
118
+ const output = this.model.copy(input);
118
119
  return Promise.resolve(output);
119
120
  }
120
121
  async putMany(trx, objs) {
@@ -124,12 +125,12 @@ class MemoryBucketAdapter extends bucket_adapter_1.BucketAdapter {
124
125
  let id = lastId + 1;
125
126
  const out = [];
126
127
  for (const obj of objs) {
127
- const input = bucket_model_schema_1.$BucketModel.copy(this.schema.model, obj, this.config.meta);
128
+ const input = this.model.copy(obj);
128
129
  if (!input.id) {
129
130
  input.id = id;
130
131
  }
131
132
  this.data[input.id] = input;
132
- const output = bucket_model_schema_1.$BucketModel.copy(this.schema.model, input, this.config.meta);
133
+ const output = this.model.copy(input);
133
134
  out.push(output);
134
135
  id++;
135
136
  }
@@ -195,7 +196,7 @@ class MemoryBucketAdapter extends bucket_adapter_1.BucketAdapter {
195
196
  async syncAll(trx, lastHash, lastUpdateEpoch = 0) {
196
197
  // 1. Hash the current ids
197
198
  const idStr = Object.keys(this.data).sort().join('');
198
- const hash = (0, crypto_1.createHash)('md5').update(idStr).digest('hex');
199
+ const hash = hash_1.Hash.string(idStr);
199
200
  // 2. If hash changed, return a reset sync with all objects
200
201
  if (hash !== lastHash) {
201
202
  let updateEpoch = 0;
@@ -85,52 +85,49 @@ class MemoryNQLRunner extends nql_engine_1.NQLRunner {
85
85
  * @returns A dict of results by id
86
86
  */
87
87
  filter(part, objs, params) {
88
+ // Accumulate results from n intersections,
89
+ // avoiding a re-check of already matched objects.
88
90
  const _union = (union, objs, params) => {
89
- // console.log(`::UNION (objs: ${Object.keys(objs)})\n`)
90
91
  const out = {};
92
+ const remaining = { ...objs };
91
93
  for (const inter of union.inters) {
92
- // Pass `out` as blacklist: if already found, can be skipped
93
- const black = out;
94
- const interOut = _inter(inter, objs, params, black);
94
+ if (Object.keys(remaining).length === 0)
95
+ break;
96
+ const interOut = _inter(inter, remaining, params);
95
97
  Object.assign(out, interOut);
98
+ for (const k in interOut) {
99
+ delete remaining[k];
100
+ }
96
101
  }
97
- // console.log(' -> union out\n', out);
98
102
  return out;
99
103
  };
100
- const _inter = (inter, objs, params, black = {}) => {
101
- // console.log(`::INTER (objs: ${Object.keys(objs)}, black: ${Object.keys(black)})\n`)
102
- // Create white set, which will be modified by rules running on this union
103
- const white = new Set(Object.keys(objs));
104
+ // Sieves results from n unions or rules,
105
+ // avoiding a re-check of already filtered-out objects.
106
+ const _inter = (inter, objs, params) => {
104
107
  let out = {};
108
+ const remaining = { ...objs };
105
109
  for (const rule of inter.rules) {
110
+ if (Object.keys(remaining).length === 0)
111
+ break;
106
112
  // <Union>
107
113
  if ('inters' in rule) {
108
- if (!_union(rule, objs, params))
109
- return false;
114
+ out = _union(rule, remaining, params);
110
115
  }
111
116
  // <Rule>
112
117
  else {
113
- const ruleOut = _rule(rule, objs, params, black, white);
114
- out = ruleOut;
118
+ out = _rule(rule, remaining, params);
119
+ }
120
+ for (const k in remaining) {
121
+ if (!(k in out)) {
122
+ delete remaining[k];
123
+ }
115
124
  }
116
- if (white.size == 0)
117
- break;
118
- // console.log(` -> white: ${Array.from(white.values())}\n`)
119
125
  }
120
- // console.log(` -> inter out: ${Object.keys(out)}\n`)
121
126
  return out;
122
127
  };
123
- const _rule = (rule, objs, params, black, white) => {
124
- // console.log(`::RULE (objs: ${Object.keys(objs)}, black: ${Object.keys(black)}, white: ${Array.from(white.values())})\n`)
128
+ const _rule = (rule, objs, params) => {
125
129
  const out = {};
126
130
  for (const id in objs) {
127
- if (!white.has(id)) {
128
- continue;
129
- }
130
- if (id in black) {
131
- white.delete(id);
132
- continue;
133
- }
134
131
  const obj = objs[id];
135
132
  let match = false;
136
133
  for (const paramGroup of params) {
@@ -141,11 +138,7 @@ class MemoryNQLRunner extends nql_engine_1.NQLRunner {
141
138
  if (rule.not) {
142
139
  match = !match;
143
140
  }
144
- if (!match) {
145
- white.delete(id);
146
- continue;
147
- }
148
- if (obj !== undefined) {
141
+ if (match) {
149
142
  if (rule.select) {
150
143
  out[obj.id] = obj[rule.select];
151
144
  }
@@ -154,11 +147,9 @@ class MemoryNQLRunner extends nql_engine_1.NQLRunner {
154
147
  }
155
148
  }
156
149
  }
157
- // console.log(` -> rule out: ${Object.keys(out)}\n`)
158
150
  return out;
159
151
  };
160
152
  const _obj = (rule, obj, params) => {
161
- // console.log(`::OBJ (obj: ${obj.id})\n`)
162
153
  const fieldValue = tree_1.Tree.get(obj, rule.fieldpath);
163
154
  // Value is undefined, only 'present' rule applies
164
155
  if (fieldValue === undefined) {
@@ -200,7 +191,6 @@ class MemoryNQLRunner extends nql_engine_1.NQLRunner {
200
191
  else if ('static' in rule.value) {
201
192
  queryValue = rule.value.static;
202
193
  }
203
- // console.log({fieldpath: rule.fieldpath, op: rule.op, fieldValue, queryValue});
204
194
  // Check each operation
205
195
  // (Compatible operations and types have already been validated)
206
196
  if (rule.op === '<') {
@@ -240,6 +230,14 @@ class MemoryNQLRunner extends nql_engine_1.NQLRunner {
240
230
  return fieldValue.includes(queryValue);
241
231
  }
242
232
  }
233
+ else if (Array.isArray(fieldValue)) {
234
+ if (rule.case_i) {
235
+ return fieldValue.some(f => f.toLowerCase().includes(queryValue.toLowerCase()));
236
+ }
237
+ else {
238
+ return fieldValue.includes(queryValue);
239
+ }
240
+ }
243
241
  else {
244
242
  if (rule.case_i) {
245
243
  return Object.keys(fieldValue).some(f => f.toLowerCase().includes(queryValue.toLowerCase()));
@@ -258,9 +256,17 @@ class MemoryNQLRunner extends nql_engine_1.NQLRunner {
258
256
  return queryValue.some(q => fieldValue.includes(q));
259
257
  }
260
258
  }
259
+ else if (Array.isArray(fieldValue)) {
260
+ if (rule.case_i) {
261
+ return queryValue.some(q => fieldValue.some(f => f.toLowerCase().includes(q.toLowerCase())));
262
+ }
263
+ else {
264
+ return queryValue.some(q => fieldValue.includes(q));
265
+ }
266
+ }
261
267
  else {
262
268
  if (rule.case_i) {
263
- return queryValue.some(q => Object.keys(q).some(k => fieldValue.toLowerCase().includes(q.toLowerCase())));
269
+ return queryValue.some(q => Object.keys(fieldValue).some(k => k.toLowerCase().includes(q.toLowerCase())));
264
270
  }
265
271
  else {
266
272
  return queryValue.some(q => q in fieldValue);
@@ -4,15 +4,14 @@ import { $BucketView, $BucketViews } from './view/bucket_view.schema';
4
4
  import { BucketViewDef } from './view/bucket_view.builder';
5
5
  import { $Bucket, $BucketTenancy } from './bucket.schema';
6
6
  import { BucketModelDef } from './model/bucket_model.builder';
7
- import { $BucketModelFields } from './model/bucket_model.schema';
7
+ import { $BucketModel } from './model/bucket_model.schema';
8
8
  import { $BucketViewDataInfer, $BucketViewFieldsInfer } from './bucket.infer';
9
9
  import { $BucketGraphLinksInfer } from './graph/bucket_graph.infer';
10
10
  import { $BucketGraph } from './graph/bucket_graph.schema';
11
- import { $Dependency, ResolvedBuilderNode } from "../../../engine/dependency";
11
+ import { Dependency, ResolvedBuilderNode } from "../../../engine/dependency";
12
12
  import { ModuleTree } from "../../../engine/tree";
13
13
  import { BucketModelpathInfer, BucketModelInfer, BucketQuerypathInfer } from './model/bucket_model.infer';
14
14
  import { Overlay } from "../../../engine/util/type";
15
- import { $Constants } from '../constants/constants.schema';
16
15
  import { NesoiObj } from "../../../engine/data/obj";
17
16
  /**
18
17
  * @category Builders
@@ -32,7 +31,7 @@ export declare class BucketBuilder<Space extends $Space, Module extends $Module,
32
31
  private _tenancy?;
33
32
  constructor(module: string, name: string);
34
33
  as(alias: string): this;
35
- extend<N extends Exclude<BucketName<Module>, Bucket['name']>>(name: N): BucketBuilder<Space, Module, Module["buckets"][N]>;
34
+ extend<N extends Exclude<BucketName<Module>, Bucket['name']>>(nameOrShort: N): BucketBuilder<Space, Module, Module["buckets"][N]>;
36
35
  model<Def extends BucketModelDef<Space, Module>, Obj = BucketModelInfer<Def>, Modelpath extends {} = BucketModelpathInfer<Def>, Querypath extends {} = BucketQuerypathInfer<Def>>($: Def): BucketBuilder<Space, Overlay<Module, {
37
36
  buckets: Overlay<Module["buckets"], { [K in Bucket["name"]]: Overlay<Bucket, {
38
37
  '#data': Obj & NesoiObj;
@@ -48,7 +47,7 @@ export declare class BucketBuilder<Space extends $Space, Module extends $Module,
48
47
  * Optional query to be appended to every read of this bucket, based on the user
49
48
  * This allows implementing complex multi-tenancy rules through NQL
50
49
  */
51
- tenancy<T extends $BucketTenancy<Module, Bucket>>($: T): void;
50
+ tenancy<T extends $BucketTenancy<Module, Bucket>>($: T): this;
52
51
  graph<Def extends BucketGraphDef<Module, Bucket>>($: Def): BucketBuilder<Space, Module, Overlay<Bucket, {
53
52
  graph: Overlay<Bucket["graph"], {
54
53
  links: $BucketGraphLinksInfer<ReturnType<Def>>;
@@ -61,9 +60,8 @@ export declare class BucketBuilder<Space extends $Space, Module extends $Module,
61
60
  }; };
62
61
  }>;
63
62
  static build(node: BucketBuilderNode, tree: ModuleTree): $Bucket;
64
- static mergeModelEnums(fields: $BucketModelFields, constants: $Constants): void;
65
- static buildGraph(node: BucketBuilderNode, tree: ModuleTree, extend?: $Dependency): $BucketGraph;
66
- static buildViews(builder: AnyBucketBuilder, graph: $BucketGraph, tree: ModuleTree, extend?: $Dependency): $BucketViews;
63
+ static buildGraph(node: BucketBuilderNode, tree: ModuleTree, extend?: Dependency): $BucketGraph;
64
+ static buildViews(builder: AnyBucketBuilder, graph: $BucketGraph, tree: ModuleTree, model: $BucketModel, extend?: Dependency): $BucketViews;
67
65
  static checkComposition(node: BucketBuilderNode, graph: $BucketGraph): void;
68
66
  }
69
67
  export type AnyBucketBuilder = BucketBuilder<any, any>;
@@ -5,11 +5,11 @@ const bucket_graph_builder_1 = require("./graph/bucket_graph.builder");
5
5
  const bucket_view_builder_1 = require("./view/bucket_view.builder");
6
6
  const bucket_schema_1 = require("./bucket.schema");
7
7
  const bucket_model_builder_1 = require("./model/bucket_model.builder");
8
+ const bucket_model_schema_1 = require("./model/bucket_model.schema");
8
9
  const bucket_model_convert_1 = require("./model/bucket_model.convert");
9
10
  const bucket_model_field_builder_1 = require("./model/bucket_model_field.builder");
10
11
  const bucket_graph_link_builder_1 = require("./graph/bucket_graph_link.builder");
11
12
  const dependency_1 = require("../../../engine/dependency");
12
- const constants_schema_1 = require("../constants/constants.schema");
13
13
  const error_1 = require("../../../engine/data/error");
14
14
  /**
15
15
  * @category Builders
@@ -27,15 +27,15 @@ class BucketBuilder {
27
27
  this._alias = alias;
28
28
  return this;
29
29
  }
30
- extend(name) {
31
- this._extend = new dependency_1.$Dependency(this.module, 'bucket', name);
30
+ extend(nameOrShort) {
31
+ const tag = dependency_1.Tag.fromNameOrShort(this.module, 'bucket', nameOrShort);
32
+ this._extend = new dependency_1.Dependency(this.module, tag, { build: true });
32
33
  return this;
33
34
  }
34
35
  model($) {
35
36
  const fieldBuilder = new bucket_model_field_builder_1.BucketModelFieldFactory(this.module);
36
37
  const fields = $(fieldBuilder);
37
- const builder = new bucket_model_builder_1.BucketModelBuilder(this.module).fields(fields);
38
- this._model = bucket_model_builder_1.BucketModelBuilder.build(builder);
38
+ this._model = new bucket_model_builder_1.BucketModelBuilder(this.module).fields(fields);
39
39
  return this;
40
40
  }
41
41
  /**
@@ -44,6 +44,7 @@ class BucketBuilder {
44
44
  */
45
45
  tenancy($) {
46
46
  this._tenancy = $;
47
+ return this;
47
48
  }
48
49
  graph($) {
49
50
  const linkFactory = new bucket_graph_link_builder_1.BucketGraphLinkFactory(this.module);
@@ -59,44 +60,28 @@ class BucketBuilder {
59
60
  }
60
61
  // Build
61
62
  static build(node, tree) {
63
+ const model = node.builder._extend
64
+ ? new bucket_model_schema_1.$BucketModel({}, {})
65
+ : bucket_model_builder_1.BucketModelBuilder.build(node.builder._model, tree);
62
66
  // If there's an external bucket linked, merge some of
63
67
  // the information before starting.
64
68
  let $ext;
65
69
  const extend = node.builder._extend;
66
70
  if (extend) {
67
- $ext = tree.getSchema(extend);
71
+ $ext = dependency_1.Tag.resolve(extend.tag, tree);
68
72
  // Model
69
- node.builder._model = Object.assign({}, $ext?.model || {}, node.builder._model);
70
- // Enums
71
- // (In order to avoid having to import constants definitions for extended buckets)
72
- const constants = tree.getSchema({
73
- module: extend.module,
74
- type: 'constants',
75
- name: '*'
76
- });
77
- this.mergeModelEnums(node.builder._model.fields, constants);
73
+ model.fields = Object.assign({}, $ext.model.fields, model.fields);
74
+ model.defaults = Object.assign({}, $ext.model.defaults, model.defaults);
78
75
  }
79
76
  const graph = BucketBuilder.buildGraph(node, tree, extend);
80
- const views = BucketBuilder.buildViews(node.builder, graph, tree, extend);
81
- node.schema = new bucket_schema_1.$Bucket(node.builder.module, node.builder.name, node.builder._alias || $ext?.alias || node.builder.name, node.builder._model, graph, views, node.builder._tenancy, extend);
77
+ const views = BucketBuilder.buildViews(node.builder, graph, tree, model, extend);
78
+ node.schema = new bucket_schema_1.$Bucket(node.builder.module, node.builder.name, node.builder._alias || $ext?.alias || node.builder.name, model, graph, views, node.builder._tenancy, extend?.tag);
82
79
  return node.schema;
83
80
  }
84
- static mergeModelEnums(fields, constants) {
85
- Object.values(fields).forEach(field => {
86
- if (field.type === 'enum' && typeof field.meta?.enum?.options === 'string') {
87
- field.meta.enum = {
88
- options: constants_schema_1.$ConstantEnum.keys(constants.enums[field.meta.enum.options])
89
- };
90
- }
91
- if (field.children) {
92
- this.mergeModelEnums(field.children, constants);
93
- }
94
- });
95
- }
96
81
  static buildGraph(node, tree, extend) {
97
82
  const links = {};
98
83
  if (extend) {
99
- const ext = tree.getSchema(extend);
84
+ const ext = dependency_1.Tag.resolve(extend.tag, tree);
100
85
  Object.assign(links, ext.graph.links);
101
86
  }
102
87
  const graphBuilder = new bucket_graph_builder_1.BucketGraphBuilder().links(node.builder._graph);
@@ -104,16 +89,16 @@ class BucketBuilder {
104
89
  graph.links = Object.assign(graph.links, links);
105
90
  return graph;
106
91
  }
107
- static buildViews(builder, graph, tree, extend) {
92
+ static buildViews(builder, graph, tree, model, extend) {
108
93
  const views = {
109
- default: (0, bucket_model_convert_1.convertToView)(builder._model, 'default')
94
+ default: (0, bucket_model_convert_1.convertToView)(model, 'default')
110
95
  };
111
96
  if (extend) {
112
- const ext = tree.getSchema(extend);
97
+ const ext = dependency_1.Tag.resolve(extend.tag, tree);
113
98
  Object.assign(views, ext.views);
114
99
  }
115
100
  for (const v in builder._views) {
116
- views[v] = bucket_view_builder_1.BucketViewBuilder.build(builder._views[v], builder._model, graph, views);
101
+ views[v] = bucket_view_builder_1.BucketViewBuilder.build(builder._views[v], model, graph, views);
117
102
  }
118
103
  return views;
119
104
  }
@@ -11,7 +11,7 @@ import { CreateObj, PatchObj, PutObj } from './bucket.types';
11
11
  import { NQL_Result } from './query/nql_engine';
12
12
  import { $BucketModelFields } from './model/bucket_model.schema';
13
13
  import { DriveAdapter } from '../drive/drive_adapter';
14
- import { IService } from "../../../engine/apps/service";
14
+ import { IService } from "../../../engine/app/service";
15
15
  import { AnyModule } from "../../../engine/module";
16
16
  /**
17
17
  * **This should only be used inside a `#composition` of a bucket `create`** to refer to the parent id, which doesn't exist yet.
@@ -39,7 +39,7 @@ export declare class Bucket<M extends $Module, $ extends $Bucket> {
39
39
  drive?: DriveAdapter;
40
40
  constructor(module: AnyModule, schema: $, config?: BucketConfig<any, any, any> | undefined, services?: Record<string, IService>);
41
41
  getQueryMeta(): {
42
- bucket: $;
42
+ schema: $;
43
43
  scope: string;
44
44
  avgTime: number;
45
45
  };
@@ -1,14 +1,14 @@
1
1
  import { $BucketViewField, $BucketViewFields } from './view/bucket_view.schema';
2
- import { BucketViewFieldBuilder, BucketViewFieldBuilderTree } from './view/bucket_view_field.builder';
3
- export type $BucketViewFieldsInfer<Builder extends BucketViewFieldBuilderTree> = Builder extends (...args: any[]) => $BucketViewFields ? ReturnType<Builder> : {
4
- [K in keyof Builder]: Builder[K] extends BucketViewFieldBuilderTree ? ($BucketViewField & {
2
+ import { BucketViewFieldBuilder, BucketViewFieldBuilders } from './view/bucket_view_field.builder';
3
+ export type $BucketViewFieldsInfer<Builder extends BucketViewFieldBuilders> = Builder extends (...args: any[]) => $BucketViewFields ? ReturnType<Builder> : {
4
+ [K in keyof Builder]: Builder[K] extends BucketViewFieldBuilders ? ($BucketViewField & {
5
5
  '#data': $BucketViewFieldsInfer<Builder[K]>;
6
6
  }) : Builder[K] extends BucketViewFieldBuilder<any, any, any> ? $BucketViewField & {
7
7
  '#data': Builder[K] extends BucketViewFieldBuilder<infer X, any> ? X : never;
8
8
  } : never;
9
9
  };
10
- export type $BucketViewDataInfer<Builder extends BucketViewFieldBuilderTree> = {
11
- [K in keyof Builder]: Builder[K] extends BucketViewFieldBuilderTree ? $BucketViewDataInfer<Builder[K]> : Builder[K] extends BucketViewFieldBuilder<infer X, any> ? X : never;
10
+ export type $BucketViewDataInfer<Builder extends BucketViewFieldBuilders> = {
11
+ [K in keyof Builder]: Builder[K] extends BucketViewFieldBuilders ? $BucketViewDataInfer<Builder[K]> : Builder[K] extends BucketViewFieldBuilder<infer X, any> ? X : never;
12
12
  };
13
13
  export type $BucketViewFieldBuilderInfer<Data> = {
14
14
  [K in keyof Data]: BucketViewFieldBuilder<Data[K], any>;