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.
- package/README.md +33 -2
- package/lib/bundler/browser/browser.app.d.ts +32 -0
- package/lib/bundler/browser/browser.app.js +51 -0
- package/lib/bundler/browser/browser.bundler.d.ts +5 -0
- package/lib/bundler/browser/browser.bundler.js +27 -0
- package/lib/bundler/browser/stages/8_replace_nesoi_for_browser_stage.d.ts +13 -0
- package/lib/bundler/browser/stages/8_replace_nesoi_for_browser_stage.js +74 -0
- package/lib/bundler/distributed/distributed.app.config.d.ts +43 -0
- package/lib/{engine/apps → bundler}/distributed/distributed.app.config.js +1 -1
- package/lib/{engine/apps → bundler}/distributed/distributed.app.d.ts +14 -14
- package/lib/{engine/apps → bundler}/distributed/distributed.app.js +8 -3
- package/lib/{compiler/apps/distributed/distributed_compiler.d.ts → bundler/distributed/distributed.bundler.d.ts} +7 -7
- package/lib/{compiler/apps/distributed/distributed_compiler.js → bundler/distributed/distributed.bundler.js} +11 -11
- package/lib/{engine/apps → bundler}/distributed/distributed_node.app.d.ts +14 -20
- package/lib/{engine/apps → bundler}/distributed/distributed_node.app.js +18 -50
- package/lib/bundler/distributed/stages/1_mkdir_stage.d.ts +15 -0
- package/lib/{compiler/apps → bundler}/distributed/stages/1_mkdir_stage.js +6 -6
- package/lib/bundler/distributed/stages/2_build_typescript_stage.d.ts +15 -0
- package/lib/{compiler/apps → bundler}/distributed/stages/2_build_typescript_stage.js +7 -7
- package/lib/bundler/distributed/stages/3_copy_types_stage.d.ts +15 -0
- package/lib/{compiler/apps → bundler}/distributed/stages/3_copy_types_stage.js +7 -7
- package/lib/bundler/distributed/stages/4_dump_modules_stage.d.ts +16 -0
- package/lib/{compiler/apps → bundler}/distributed/stages/4_dump_modules_stage.js +5 -5
- package/lib/{compiler/apps → bundler}/distributed/stages/5_copy_static_stage.js +3 -3
- package/lib/{compiler/apps → bundler}/distributed/stages/6_dump_cli_stage.js +3 -3
- package/lib/{compiler/apps → bundler}/distributed/stages/7_dump_package_json_stage.js +3 -3
- package/lib/{engine/apps → bundler}/monolyth/monolyth.app.d.ts +13 -13
- package/lib/{engine/apps → bundler}/monolyth/monolyth.app.js +13 -10
- package/lib/{compiler/apps/monolyth/monolyth_compiler.d.ts → bundler/monolyth/monolyth.bundler.d.ts} +9 -7
- package/lib/{compiler/apps/monolyth/monolyth_compiler.js → bundler/monolyth/monolyth.bundler.js} +13 -12
- package/lib/bundler/monolyth/stages/1_mkdir_stage.d.ts +15 -0
- package/lib/{compiler/apps → bundler}/monolyth/stages/1_mkdir_stage.js +6 -6
- package/lib/bundler/monolyth/stages/2_build_typescript_stage.d.ts +15 -0
- package/lib/{compiler/apps → bundler}/monolyth/stages/2_build_typescript_stage.js +8 -7
- package/lib/bundler/monolyth/stages/3_copy_types_stage.d.ts +15 -0
- package/lib/{compiler/apps → bundler}/monolyth/stages/3_copy_types_stage.js +7 -7
- package/lib/{compiler/apps → bundler}/monolyth/stages/4_dump_modules_stage.d.ts +4 -4
- package/lib/{compiler/apps → bundler}/monolyth/stages/4_dump_modules_stage.js +29 -16
- package/lib/{compiler/apps → bundler}/monolyth/stages/5_copy_static_stage.d.ts +4 -4
- package/lib/{compiler/apps → bundler}/monolyth/stages/5_copy_static_stage.js +7 -7
- package/lib/bundler/monolyth/stages/6_dump_cli_stage.d.ts +15 -0
- package/lib/{compiler/apps → bundler}/monolyth/stages/6_dump_cli_stage.js +4 -4
- package/lib/{compiler/apps → bundler}/monolyth/stages/7_dump_package_json_stage.d.ts +4 -4
- package/lib/{compiler/apps → bundler}/monolyth/stages/7_dump_package_json_stage.js +13 -10
- package/lib/compiler/compiler.d.ts +1 -6
- package/lib/compiler/compiler.js +1 -1
- package/lib/compiler/elements/bucket.element.d.ts +2 -1
- package/lib/compiler/elements/bucket.element.js +16 -21
- package/lib/compiler/elements/cached.element.d.ts +1 -1
- package/lib/compiler/elements/cached.element.js +2 -2
- package/lib/compiler/elements/constants.element.d.ts +1 -1
- package/lib/compiler/elements/constants.element.js +2 -0
- package/lib/compiler/elements/controller.element.js +3 -3
- package/lib/compiler/elements/element.d.ts +6 -13
- package/lib/compiler/elements/element.js +11 -9
- package/lib/compiler/elements/externals.element.js +2 -2
- package/lib/compiler/elements/job.element.d.ts +1 -1
- package/lib/compiler/elements/job.element.js +1 -1
- package/lib/compiler/elements/machine.element.d.ts +2 -2
- package/lib/compiler/elements/machine.element.js +7 -7
- package/lib/compiler/elements/message.element.d.ts +1 -1
- package/lib/compiler/elements/message.element.js +26 -26
- package/lib/compiler/elements/queue.element.js +1 -1
- package/lib/compiler/elements/resource.element.d.ts +1 -1
- package/lib/compiler/elements/resource.element.js +9 -9
- package/lib/compiler/elements/topic.element.js +1 -1
- package/lib/compiler/error.d.ts +1 -5
- package/lib/compiler/error.js +3 -15
- package/lib/compiler/helpers/dump_helpers.d.ts +1 -1
- package/lib/compiler/helpers/dump_helpers.js +1 -1
- package/lib/compiler/index.d.ts +1 -3
- package/lib/compiler/index.js +15 -7
- package/lib/compiler/module.js +12 -12
- package/lib/compiler/progressive.d.ts +3 -4
- package/lib/compiler/progressive.js +3 -4
- package/lib/compiler/stages/2_treeshake_stage.js +4 -0
- package/lib/compiler/stages/3_extract_ts_stage.js +7 -7
- package/lib/compiler/stages/4_build_schemas_stage.js +3 -16
- package/lib/compiler/stages/6_build_elements_stage.js +1 -1
- package/lib/compiler/stages/7_dump_stage.js +35 -10
- package/lib/compiler/typescript/bridge/extract.js +24 -0
- package/lib/compiler/typescript/bridge/inject.js +18 -3
- package/lib/compiler/typescript/bridge/organize.d.ts +4 -0
- package/lib/compiler/typescript/bridge/organize.js +41 -22
- package/lib/compiler/typescript/error.d.ts +2 -83
- package/lib/compiler/typescript/error.js +6 -219
- package/lib/compiler/typescript/parser.js +3 -3
- package/lib/compiler/typescript/source.d.ts +2 -2
- package/lib/compiler/typescript/transformers/app_inject.transformer.js +13 -4
- package/lib/compiler/typescript/typescript_compiler.d.ts +3 -3
- package/lib/compiler/typescript/typescript_compiler.js +2 -2
- package/lib/elements/blocks/block.builder.d.ts +7 -4
- package/lib/elements/blocks/block.builder.js +24 -13
- package/lib/elements/blocks/block.js +2 -2
- package/lib/elements/blocks/block.schema.d.ts +12 -9
- package/lib/elements/blocks/block.schema.js +2 -2
- package/lib/elements/blocks/job/internal/machine_job.builder.d.ts +6 -5
- package/lib/elements/blocks/job/internal/machine_job.builder.js +3 -3
- package/lib/elements/blocks/job/internal/resource_job.builder.d.ts +11 -10
- package/lib/elements/blocks/job/internal/resource_job.builder.js +9 -6
- package/lib/elements/blocks/job/internal/resource_job.js +3 -6
- package/lib/elements/blocks/job/job.builder.d.ts +5 -5
- package/lib/elements/blocks/job/job.builder.js +7 -7
- package/lib/elements/blocks/job/job.js +1 -1
- package/lib/elements/blocks/job/job.schema.d.ts +5 -5
- package/lib/elements/blocks/job/job.schema.js +3 -3
- package/lib/elements/blocks/machine/machine.builder.d.ts +2 -2
- package/lib/elements/blocks/machine/machine.builder.js +12 -9
- package/lib/elements/blocks/machine/machine.js +7 -7
- package/lib/elements/blocks/machine/machine.schema.d.ts +23 -23
- package/lib/elements/blocks/machine/machine.schema.js +9 -9
- package/lib/elements/blocks/machine/machine_state.builder.d.ts +1 -0
- package/lib/elements/blocks/machine/machine_state.builder.js +31 -29
- package/lib/elements/blocks/machine/machine_transition.builder.d.ts +2 -2
- package/lib/elements/blocks/machine/machine_transition.builder.js +8 -8
- package/lib/elements/blocks/queue/queue.builder.d.ts +3 -3
- package/lib/elements/blocks/queue/queue.builder.js +3 -3
- package/lib/elements/blocks/queue/queue.schema.d.ts +6 -6
- package/lib/elements/blocks/queue/queue.schema.js +3 -3
- package/lib/elements/blocks/resource/resource.builder.d.ts +2 -2
- package/lib/elements/blocks/resource/resource.builder.js +37 -40
- package/lib/elements/blocks/resource/resource.d.ts +2 -2
- package/lib/elements/blocks/resource/resource.js +10 -18
- package/lib/elements/blocks/resource/resource.schema.d.ts +15 -15
- package/lib/elements/blocks/resource/resource.schema.js +8 -8
- package/lib/elements/blocks/topic/topic.builder.d.ts +2 -2
- package/lib/elements/blocks/topic/topic.builder.js +4 -4
- package/lib/elements/blocks/topic/topic.d.ts +2 -2
- package/lib/elements/blocks/topic/topic.js +7 -7
- package/lib/elements/blocks/topic/topic.schema.d.ts +6 -6
- package/lib/elements/blocks/topic/topic.schema.js +3 -3
- package/lib/elements/edge/controller/adapters/cli.controller_adapter.js +1 -1
- package/lib/elements/edge/controller/adapters/controller_adapter.d.ts +2 -2
- package/lib/elements/edge/controller/adapters/controller_adapter.js +2 -2
- package/lib/elements/edge/controller/controller.builder.d.ts +14 -13
- package/lib/elements/edge/controller/controller.builder.js +52 -42
- package/lib/elements/edge/controller/controller.d.ts +3 -3
- package/lib/elements/edge/controller/controller.js +12 -12
- package/lib/elements/edge/controller/controller.schema.d.ts +17 -16
- package/lib/elements/edge/controller/controller.schema.js +11 -11
- package/lib/elements/edge/externals/externals.builder.d.ts +8 -13
- package/lib/elements/edge/externals/externals.builder.js +43 -11
- package/lib/elements/edge/externals/externals.schema.d.ts +8 -7
- package/lib/elements/edge/externals/externals.schema.js +5 -3
- package/lib/elements/entities/bucket/adapters/browserdb.bucket_adapter.d.ts +45 -0
- package/lib/elements/entities/bucket/adapters/browserdb.bucket_adapter.js +164 -0
- package/lib/elements/entities/bucket/adapters/browserdb.service.d.ts +30 -0
- package/lib/elements/entities/bucket/adapters/browserdb.service.js +97 -0
- package/lib/elements/entities/bucket/adapters/bucket_adapter.d.ts +6 -1
- package/lib/elements/entities/bucket/adapters/bucket_adapter.js +7 -6
- package/lib/elements/entities/bucket/adapters/json.bucket_adapter.d.ts +1 -1
- package/lib/elements/entities/bucket/adapters/json.bucket_adapter.js +1 -0
- package/lib/elements/entities/bucket/adapters/memory.bucket_adapter.d.ts +1 -0
- package/lib/elements/entities/bucket/adapters/memory.bucket_adapter.js +14 -13
- package/lib/elements/entities/bucket/adapters/memory.nql.js +41 -35
- package/lib/elements/entities/bucket/bucket.builder.d.ts +6 -8
- package/lib/elements/entities/bucket/bucket.builder.js +19 -34
- package/lib/elements/entities/bucket/bucket.d.ts +2 -2
- package/lib/elements/entities/bucket/bucket.infer.d.ts +5 -5
- package/lib/elements/entities/bucket/bucket.js +24 -22
- package/lib/elements/entities/bucket/bucket.schema.d.ts +3 -3
- package/lib/elements/entities/bucket/bucket.schema.js +2 -2
- package/lib/elements/entities/bucket/cache/bucket_cache.js +14 -2
- package/lib/elements/entities/bucket/graph/bucket_graph.d.ts +3 -3
- package/lib/elements/entities/bucket/graph/bucket_graph.js +102 -30
- package/lib/elements/entities/bucket/graph/bucket_graph.schema.d.ts +3 -3
- package/lib/elements/entities/bucket/graph/bucket_graph_link.builder.d.ts +2 -2
- package/lib/elements/entities/bucket/graph/bucket_graph_link.builder.js +5 -3
- package/lib/elements/entities/bucket/model/bucket_model.builder.d.ts +2 -1
- package/lib/elements/entities/bucket/model/bucket_model.builder.js +2 -2
- package/lib/elements/entities/bucket/model/bucket_model.convert.js +3 -6
- package/lib/elements/entities/bucket/model/bucket_model.d.ts +13 -0
- package/lib/elements/entities/bucket/model/bucket_model.js +93 -0
- package/lib/elements/entities/bucket/model/bucket_model.schema.d.ts +4 -8
- package/lib/elements/entities/bucket/model/bucket_model.schema.js +0 -68
- package/lib/elements/entities/bucket/model/bucket_model_field.builder.d.ts +12 -4
- package/lib/elements/entities/bucket/model/bucket_model_field.builder.js +30 -33
- package/lib/elements/entities/bucket/query/nql.schema.d.ts +1 -1
- package/lib/elements/entities/bucket/query/nql_compiler.d.ts +8 -4
- package/lib/elements/entities/bucket/query/nql_compiler.js +44 -38
- package/lib/elements/entities/bucket/query/nql_engine.d.ts +1 -1
- package/lib/elements/entities/bucket/query/nql_engine.js +5 -2
- package/lib/elements/entities/bucket/view/bucket_view.builder.d.ts +2 -2
- package/lib/elements/entities/bucket/view/bucket_view.js +113 -81
- package/lib/elements/entities/bucket/view/bucket_view_field.builder.d.ts +9 -8
- package/lib/elements/entities/bucket/view/bucket_view_field.builder.js +8 -10
- package/lib/elements/entities/constants/constants.builder.d.ts +3 -3
- package/lib/elements/entities/constants/constants.builder.js +8 -8
- package/lib/elements/entities/constants/constants.schema.d.ts +8 -3
- package/lib/elements/entities/constants/constants.schema.js +7 -2
- package/lib/elements/entities/message/message.infer.d.ts +1 -5
- package/lib/elements/entities/message/message.js +2 -7
- package/lib/elements/entities/message/message.schema.js +1 -1
- package/lib/elements/entities/message/template/message_template.schema.d.ts +7 -5
- package/lib/elements/entities/message/template/message_template_field.builder.d.ts +18 -3
- package/lib/elements/entities/message/template/message_template_field.builder.js +49 -30
- package/lib/elements/entities/message/template/message_template_parser.js +2 -2
- package/lib/engine/{apps → app}/app.config.d.ts +11 -5
- package/lib/engine/{apps → app}/app.config.js +2 -2
- package/lib/engine/{apps → app}/app.d.ts +3 -2
- package/lib/engine/{apps → app}/app.js +3 -1
- package/lib/engine/{apps/distributed → app}/inc/inc.client.js +1 -1
- package/lib/engine/{apps/distributed → app}/inc/inc.server.js +3 -3
- package/lib/engine/{apps/distributed → app}/inc/sandbox.js +1 -1
- package/lib/engine/{apps → app}/inline.app.d.ts +2 -12
- package/lib/engine/{apps → app}/inline.app.js +37 -34
- package/lib/engine/auth/authn.d.ts +10 -12
- package/lib/engine/auth/zero.authn_provider.d.ts +3 -4
- package/lib/engine/auth/zero.authn_provider.js +0 -1
- package/lib/engine/builder.d.ts +28 -0
- package/lib/engine/builder.js +99 -0
- package/lib/engine/cli/cli.js +3 -2
- package/lib/engine/cli/ui.js +1 -0
- package/lib/engine/daemon.d.ts +28 -25
- package/lib/engine/daemon.js +37 -8
- package/lib/engine/data/error.d.ts +37 -3
- package/lib/engine/data/error.js +58 -16
- package/lib/engine/data/file.d.ts +1 -0
- package/lib/engine/data/file.js +4 -0
- package/lib/engine/dependency.d.ts +53 -81
- package/lib/engine/dependency.js +246 -120
- package/lib/engine/module.d.ts +18 -48
- package/lib/engine/module.js +78 -158
- package/lib/engine/space.d.ts +2 -2
- package/lib/engine/space.js +6 -6
- package/lib/engine/transaction/nodes/bucket.trx_node.d.ts +7 -4
- package/lib/engine/transaction/nodes/bucket.trx_node.js +66 -43
- package/lib/engine/transaction/nodes/bucket_query.trx_node.d.ts +10 -4
- package/lib/engine/transaction/nodes/bucket_query.trx_node.js +56 -45
- package/lib/engine/transaction/nodes/external.trx_node.d.ts +15 -0
- package/lib/engine/transaction/nodes/external.trx_node.js +53 -0
- package/lib/engine/transaction/nodes/job.trx_node.d.ts +7 -3
- package/lib/engine/transaction/nodes/job.trx_node.js +49 -29
- package/lib/engine/transaction/nodes/machine.trx_node.js +6 -6
- package/lib/engine/transaction/nodes/queue.trx_node.js +3 -3
- package/lib/engine/transaction/nodes/resource.trx_node.d.ts +7 -4
- package/lib/engine/transaction/nodes/resource.trx_node.js +68 -51
- package/lib/engine/transaction/nodes/topic.trx_node.js +9 -9
- package/lib/engine/transaction/trx.d.ts +15 -12
- package/lib/engine/transaction/trx.js +19 -3
- package/lib/engine/transaction/trx_engine.config.d.ts +4 -4
- package/lib/engine/transaction/trx_engine.d.ts +25 -7
- package/lib/engine/transaction/trx_engine.js +67 -16
- package/lib/engine/transaction/trx_node.d.ts +25 -21
- package/lib/engine/transaction/trx_node.js +99 -57
- package/lib/engine/tree.d.ts +4 -16
- package/lib/engine/tree.js +87 -57
- package/lib/{compiler → engine}/treeshake.d.ts +32 -32
- package/lib/{compiler → engine}/treeshake.js +272 -242
- package/lib/engine/util/console.js +3 -0
- package/lib/engine/util/crypto.d.ts +4 -3
- package/lib/engine/util/crypto.js +15 -5
- package/lib/engine/util/hash.js +5 -0
- package/lib/engine/util/log.d.ts +6 -8
- package/lib/engine/util/log.js +1 -1
- package/lib/engine/util/name_helpers.d.ts +37 -0
- package/lib/{compiler/helpers → engine/util}/name_helpers.js +33 -0
- package/lib/engine/util/parse.d.ts +4 -3
- package/lib/engine/util/parse.js +13 -28
- package/lib/engine/util/path.d.ts +1 -0
- package/lib/engine/util/path.js +14 -0
- package/lib/engine/util/random.d.ts +4 -0
- package/lib/engine/util/random.js +31 -0
- package/lib/engine/util/type.d.ts +8 -0
- package/lib/schema.d.ts +1 -1
- package/package.json +4 -1
- package/tools/joaquin/bucket.js +1 -1
- package/tools/joaquin/job.js +1 -1
- package/tools/joaquin/message.js +1 -1
- package/tools/joaquin/mock.js +2 -1
- package/tsconfig.build.tsbuildinfo +1 -1
- package/lib/compiler/apps/distributed/stages/1_mkdir_stage.d.ts +0 -15
- package/lib/compiler/apps/distributed/stages/2_build_typescript_stage.d.ts +0 -15
- package/lib/compiler/apps/distributed/stages/3_copy_types_stage.d.ts +0 -15
- package/lib/compiler/apps/distributed/stages/4_dump_modules_stage.d.ts +0 -16
- package/lib/compiler/apps/monolyth/stages/1_mkdir_stage.d.ts +0 -15
- package/lib/compiler/apps/monolyth/stages/2_build_typescript_stage.d.ts +0 -15
- package/lib/compiler/apps/monolyth/stages/3_copy_types_stage.d.ts +0 -15
- package/lib/compiler/apps/monolyth/stages/6_dump_cli_stage.d.ts +0 -15
- package/lib/compiler/helpers/name_helpers.d.ts +0 -20
- package/lib/engine/apps/distributed/distributed.app.config.d.ts +0 -44
- package/lib/engine/apps/distributed/elements/distributed_job.d.ts +0 -7
- package/lib/engine/apps/distributed/elements/distributed_job.js +0 -11
- /package/lib/{compiler/apps → bundler}/distributed/stages/5_copy_static_stage.d.ts +0 -0
- /package/lib/{compiler/apps → bundler}/distributed/stages/6_dump_cli_stage.d.ts +0 -0
- /package/lib/{compiler/apps → bundler}/distributed/stages/7_dump_package_json_stage.d.ts +0 -0
- /package/lib/engine/{apps/distributed → app}/inc/inc.client.d.ts +0 -0
- /package/lib/engine/{apps/distributed → app}/inc/inc.server.d.ts +0 -0
- /package/lib/engine/{apps/distributed → app}/inc/sandbox.d.ts +0 -0
- /package/lib/engine/{apps → app}/service.d.ts +0 -0
- /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
|
-
},
|
|
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,
|
|
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
|
|
31
|
-
|
|
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,
|
|
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,
|
|
@@ -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
|
|
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 =
|
|
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 =
|
|
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 =
|
|
71
|
+
const input = this.model.copy(obj);
|
|
71
72
|
this.data[input.id] = input;
|
|
72
|
-
const output =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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
|
-
|
|
93
|
-
|
|
94
|
-
const interOut = _inter(inter,
|
|
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
|
-
|
|
101
|
-
|
|
102
|
-
|
|
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
|
-
|
|
109
|
-
return false;
|
|
114
|
+
out = _union(rule, remaining, params);
|
|
110
115
|
}
|
|
111
116
|
// <Rule>
|
|
112
117
|
else {
|
|
113
|
-
|
|
114
|
-
|
|
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
|
|
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 (
|
|
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(
|
|
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 { $
|
|
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 {
|
|
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']>>(
|
|
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):
|
|
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
|
|
65
|
-
static
|
|
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(
|
|
31
|
-
|
|
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
|
-
|
|
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 =
|
|
71
|
+
$ext = dependency_1.Tag.resolve(extend.tag, tree);
|
|
68
72
|
// Model
|
|
69
|
-
|
|
70
|
-
|
|
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,
|
|
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 =
|
|
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)(
|
|
94
|
+
default: (0, bucket_model_convert_1.convertToView)(model, 'default')
|
|
110
95
|
};
|
|
111
96
|
if (extend) {
|
|
112
|
-
const ext =
|
|
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],
|
|
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/
|
|
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
|
-
|
|
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,
|
|
3
|
-
export type $BucketViewFieldsInfer<Builder extends
|
|
4
|
-
[K in keyof Builder]: Builder[K] extends
|
|
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
|
|
11
|
-
[K in keyof Builder]: Builder[K] extends
|
|
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>;
|