nesoi 3.0.0 → 3.0.3
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 +10 -0
- package/lib/adapters/postgres/src/migrator/bucket.d.ts +20 -0
- package/lib/adapters/postgres/src/migrator/bucket.js +184 -0
- package/lib/adapters/postgres/src/migrator/csv.d.ts +7 -0
- package/lib/adapters/postgres/src/migrator/csv.js +72 -0
- package/lib/adapters/postgres/src/migrator/migration.d.ts +2 -18
- package/lib/adapters/postgres/src/migrator/migration.js +10 -158
- package/lib/adapters/postgres/src/migrator/migrator.js +8 -5
- package/lib/adapters/postgres/src/migrator/runner.d.ts +16 -6
- package/lib/adapters/postgres/src/migrator/runner.js +103 -34
- package/lib/adapters/postgres/src/postgres.bucket_adapter.d.ts +19 -22
- package/lib/adapters/postgres/src/postgres.bucket_adapter.js +116 -100
- package/lib/adapters/postgres/src/postgres.cli.d.ts +23 -3
- package/lib/adapters/postgres/src/postgres.cli.js +70 -10
- package/lib/adapters/postgres/src/postgres.config.d.ts +5 -0
- package/lib/adapters/postgres/src/postgres.config.js +2 -0
- package/lib/adapters/postgres/src/postgres.nql.d.ts +7 -3
- package/lib/adapters/postgres/src/postgres.nql.js +86 -32
- package/lib/adapters/postgres/src/postgres.provider.d.ts +18 -0
- package/lib/adapters/postgres/src/postgres.provider.js +77 -0
- package/lib/adapters/postgres/test/postgres.bucket_adapter.test.js +76 -39
- package/lib/compiler/apps/monolyth/monolyth_compiler.d.ts +3 -0
- package/lib/compiler/apps/monolyth/monolyth_compiler.js +24 -0
- package/lib/compiler/apps/monolyth/stages/2_build_typescript_stage.js +2 -1
- package/lib/compiler/apps/monolyth/stages/5_dump_cli_stage.js +1 -1
- package/lib/compiler/elements/bucket.element.js +26 -11
- package/lib/compiler/elements/constants.element.js +1 -1
- package/lib/compiler/elements/element.d.ts +2 -0
- package/lib/compiler/elements/message.element.js +4 -4
- package/lib/compiler/helpers/dump_helpers.js +5 -2
- package/lib/compiler/stages/7_dump_stage.js +2 -0
- package/lib/compiler/treeshake.js +9 -37
- package/lib/compiler/typescript/bridge/extract.js +12 -0
- package/lib/compiler/typescript/bridge/inject.js +3 -0
- package/lib/compiler/typescript/bridge/organize.js +3 -3
- package/lib/elements/blocks/block.builder.js +4 -2
- package/lib/elements/blocks/job/internal/resource_job.builder.d.ts +22 -20
- package/lib/elements/blocks/job/internal/resource_job.d.ts +2 -1
- package/lib/elements/blocks/job/internal/resource_job.js +17 -4
- package/lib/elements/blocks/job/job.js +3 -0
- package/lib/elements/blocks/job/job.types.d.ts +7 -0
- package/lib/elements/blocks/job/job.types.js +2 -0
- package/lib/elements/blocks/machine/machine.js +3 -2
- package/lib/elements/blocks/resource/resource.builder.js +2 -4
- package/lib/elements/blocks/resource/resource.d.ts +5 -3
- package/lib/elements/blocks/resource/resource.js +26 -17
- package/lib/elements/edge/controller/adapters/controller_adapter.d.ts +2 -1
- package/lib/elements/edge/controller/adapters/controller_adapter.js +11 -2
- package/lib/elements/edge/controller/controller.builder.d.ts +4 -5
- package/lib/elements/edge/controller/controller.builder.js +7 -7
- package/lib/elements/edge/controller/controller.d.ts +2 -1
- package/lib/elements/edge/controller/controller.js +8 -6
- package/lib/elements/entities/bucket/adapters/bucket_adapter.d.ts +61 -23
- package/lib/elements/entities/bucket/adapters/bucket_adapter.js +22 -13
- package/lib/elements/entities/bucket/adapters/memory.bucket_adapter.d.ts +21 -22
- package/lib/elements/entities/bucket/adapters/memory.bucket_adapter.js +68 -2
- package/lib/elements/entities/bucket/adapters/memory.nql.d.ts +10 -6
- package/lib/elements/entities/bucket/adapters/memory.nql.js +38 -3
- package/lib/elements/entities/bucket/adapters/slow_memory.bucket_adapter.d.ts +0 -20
- package/lib/elements/entities/bucket/adapters/slow_memory.bucket_adapter.js +46 -30
- package/lib/elements/entities/bucket/bucket.builder.d.ts +8 -2
- package/lib/elements/entities/bucket/bucket.builder.js +13 -19
- package/lib/elements/entities/bucket/bucket.config.d.ts +5 -1
- package/lib/elements/entities/bucket/bucket.d.ts +180 -19
- package/lib/elements/entities/bucket/bucket.js +658 -48
- package/lib/elements/entities/bucket/bucket.schema.d.ts +7 -1
- package/lib/elements/entities/bucket/bucket.schema.js +2 -1
- package/lib/elements/entities/bucket/bucket.types.d.ts +2 -7
- package/lib/elements/entities/bucket/cache/bucket_cache.d.ts +6 -2
- package/lib/elements/entities/bucket/cache/bucket_cache.js +12 -12
- package/lib/elements/entities/bucket/graph/bucket_graph.d.ts +32 -5
- package/lib/elements/entities/bucket/graph/bucket_graph.js +80 -111
- package/lib/elements/entities/bucket/graph/bucket_graph.schema.d.ts +3 -6
- package/lib/elements/entities/bucket/graph/bucket_graph.schema.js +1 -4
- package/lib/elements/entities/bucket/graph/bucket_graph_link.builder.d.ts +3 -7
- package/lib/elements/entities/bucket/graph/bucket_graph_link.builder.js +6 -2
- package/lib/elements/entities/bucket/model/bucket_model.builder.js +1 -1
- package/lib/elements/entities/bucket/model/bucket_model.convert.js +3 -3
- package/lib/elements/entities/bucket/model/bucket_model.schema.d.ts +37 -8
- package/lib/elements/entities/bucket/model/bucket_model.schema.js +25 -4
- package/lib/elements/entities/bucket/model/bucket_model_field.builder.d.ts +33 -14
- package/lib/elements/entities/bucket/model/bucket_model_field.builder.js +56 -13
- package/lib/elements/entities/bucket/query/nql.schema.d.ts +1 -0
- package/lib/elements/entities/bucket/query/nql_compiler.js +13 -2
- package/lib/elements/entities/bucket/query/nql_engine.d.ts +11 -4
- package/lib/elements/entities/bucket/query/nql_engine.js +20 -11
- package/lib/elements/entities/bucket/view/bucket_view.js +63 -35
- package/lib/elements/entities/bucket/view/bucket_view.schema.d.ts +5 -2
- package/lib/elements/entities/bucket/view/bucket_view_field.builder.d.ts +6 -2
- package/lib/elements/entities/bucket/view/bucket_view_field.builder.js +21 -15
- package/lib/elements/entities/constants/constants.schema.d.ts +1 -1
- package/lib/elements/entities/drive/drive_adapter.d.ts +36 -0
- package/lib/elements/entities/drive/drive_adapter.js +10 -0
- package/lib/elements/entities/drive/local.drive_adapter.d.ts +8 -0
- package/lib/elements/entities/drive/local.drive_adapter.js +28 -0
- package/lib/elements/entities/message/message.schema.d.ts +1 -0
- package/lib/elements/entities/message/message.schema.js +33 -0
- package/lib/elements/entities/message/message_parser.d.ts +5 -1
- package/lib/elements/entities/message/message_parser.js +56 -35
- package/lib/elements/entities/message/template/message_template.schema.d.ts +10 -8
- package/lib/elements/entities/message/template/message_template_field.builder.d.ts +16 -6
- package/lib/elements/entities/message/template/message_template_field.builder.js +25 -0
- package/lib/elements/entities/message/template/message_template_parser.js +2 -1
- package/lib/engine/apps/app.config.d.ts +32 -11
- package/lib/engine/apps/app.config.js +12 -0
- package/lib/engine/apps/app.d.ts +2 -0
- package/lib/engine/apps/app.js +3 -0
- package/lib/engine/apps/inline.app.d.ts +5 -3
- package/lib/engine/apps/inline.app.js +27 -12
- package/lib/engine/apps/monolyth/monolyth.app.d.ts +4 -2
- package/lib/engine/apps/monolyth/monolyth.app.js +22 -10
- package/lib/engine/auth/authn.d.ts +5 -1
- package/lib/engine/auth/zero.authn_provider.d.ts +4 -2
- package/lib/engine/auth/zero.authn_provider.js +2 -2
- package/lib/engine/cli/cli.d.ts +3 -1
- package/lib/engine/cli/cli.js +22 -3
- package/lib/engine/cli/cli_adapter.d.ts +2 -1
- package/lib/engine/cli/cli_adapter.js +2 -1
- package/lib/engine/cli/cli_input.d.ts +19 -0
- package/lib/engine/cli/cli_input.js +207 -0
- package/lib/engine/cli/ui.d.ts +1 -1
- package/lib/engine/cli/ui.js +2 -2
- package/lib/engine/daemon.d.ts +3 -2
- package/lib/engine/daemon.js +14 -2
- package/lib/engine/data/date.js +2 -2
- package/lib/engine/data/datetime.d.ts +40 -4
- package/lib/engine/data/datetime.js +70 -11
- package/lib/engine/data/decimal.d.ts +1 -1
- package/lib/engine/data/decimal.js +3 -3
- package/lib/engine/data/error.d.ts +21 -4
- package/lib/engine/data/error.js +23 -7
- package/lib/engine/data/file.d.ts +23 -0
- package/lib/engine/data/file.js +53 -0
- package/lib/engine/data/json.d.ts +6 -0
- package/lib/engine/data/json.js +26 -0
- package/lib/engine/data/obj.d.ts +1 -1
- package/lib/engine/data/trash.d.ts +14 -0
- package/lib/engine/data/trash.js +2 -0
- package/lib/engine/data/tree.d.ts +7 -12
- package/lib/engine/data/tree.js +101 -49
- package/lib/engine/module.d.ts +2 -1
- package/lib/engine/module.js +2 -5
- package/lib/engine/space.d.ts +1 -0
- package/lib/engine/space.js +6 -0
- package/lib/engine/transaction/nodes/bucket.trx_node.d.ts +156 -24
- package/lib/engine/transaction/nodes/bucket.trx_node.js +297 -467
- package/lib/engine/transaction/nodes/bucket_query.trx_node.d.ts +4 -2
- package/lib/engine/transaction/nodes/bucket_query.trx_node.js +27 -15
- package/lib/engine/transaction/nodes/job.trx_node.d.ts +2 -1
- package/lib/engine/transaction/nodes/job.trx_node.js +6 -0
- package/lib/engine/transaction/trx.d.ts +5 -2
- package/lib/engine/transaction/trx.js +2 -2
- package/lib/engine/transaction/trx_engine.config.d.ts +1 -3
- package/lib/engine/transaction/trx_engine.d.ts +2 -2
- package/lib/engine/transaction/trx_engine.js +14 -11
- package/lib/engine/transaction/trx_node.d.ts +14 -4
- package/lib/engine/transaction/trx_node.js +50 -8
- package/lib/engine/tree.d.ts +1 -1
- package/lib/engine/util/crypto.d.ts +50 -0
- package/lib/engine/util/crypto.js +89 -0
- package/lib/engine/util/deep.d.ts +5 -0
- package/lib/engine/util/deep.js +46 -0
- package/lib/engine/util/dotenv.d.ts +2 -8
- package/lib/engine/util/dotenv.js +14 -36
- package/lib/engine/util/hash.d.ts +3 -0
- package/lib/engine/util/hash.js +23 -0
- package/lib/engine/util/log.js +1 -1
- package/lib/engine/util/mime.d.ts +10 -0
- package/lib/engine/util/mime.js +389 -0
- package/lib/engine/util/parse.d.ts +6 -5
- package/lib/engine/util/parse.js +16 -15
- package/lib/engine/util/path.d.ts +3 -0
- package/lib/engine/util/path.js +92 -0
- package/lib/engine/util/rules.d.ts +4 -0
- package/lib/engine/util/rules.js +12 -0
- package/package.json +1 -1
- package/tools/compile.js +2 -2
- package/tools/dotenv.d.ts +1 -0
- package/tools/dotenv.js +4 -0
- package/tools/joaquin/job.d.ts +5 -5
- package/tools/joaquin/mock.d.ts +23 -2
- package/tools/joaquin/mock.js +127 -21
- package/tsconfig.build.tsbuildinfo +1 -1
- package/lib/adapters/postgres/test/postgres.bucket_query.test.d.ts +0 -0
- package/lib/adapters/postgres/test/postgres.bucket_query.test.js +0 -136
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
import { BucketAdapterConfig } from './bucket_adapter';
|
|
2
|
-
import { MemoryBucketAdapter } from './memory.bucket_adapter';
|
|
3
|
-
import { $Bucket } from '../bucket.schema';
|
|
4
|
-
import { NesoiObj } from "../../../../engine/data/obj";
|
|
5
|
-
import { AnyTrxNode } from "../../../../engine/transaction/trx_node";
|
|
6
|
-
import { NQL_AnyQuery, NQL_Pagination } from '../query/nql.schema';
|
|
7
|
-
export declare class SlowMemoryBucketAdapter<Obj extends NesoiObj> extends MemoryBucketAdapter<Obj> {
|
|
8
|
-
schema: $Bucket;
|
|
9
|
-
protected timeout: number;
|
|
10
|
-
constructor(schema: $Bucket, timeout: number, data?: Record<Obj['id'], Obj>, config?: BucketAdapterConfig);
|
|
11
|
-
private wrap;
|
|
12
|
-
index(trx: AnyTrxNode): Promise<Obj[]>;
|
|
13
|
-
get(trx: AnyTrxNode, id: Obj['id']): Promise<Awaited<Record<Obj["id"], Obj>[Obj["id"]]>>;
|
|
14
|
-
query<MetadataOnly extends boolean>(trx: AnyTrxNode, query: NQL_AnyQuery, pagination?: NQL_Pagination, config?: {
|
|
15
|
-
metadataOnly: MetadataOnly;
|
|
16
|
-
}): Promise<MetadataOnly extends true ? {
|
|
17
|
-
id: Obj['id'];
|
|
18
|
-
[x: string]: any;
|
|
19
|
-
}[] : Obj[]>;
|
|
20
|
-
}
|
|
@@ -1,31 +1,47 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
2
|
+
// import { BucketAdapterConfig } from './bucket_adapter';
|
|
3
|
+
// import { MemoryBucketAdapter } from './memory.bucket_adapter';
|
|
4
|
+
// import { $Bucket } from '../bucket.schema';
|
|
5
|
+
// import { AnyTrxNode } from '~/engine/transaction/trx_node';
|
|
6
|
+
// import { NQL_AnyQuery, NQL_Pagination } from '../query/nql.schema';
|
|
7
|
+
// export class SlowMemoryBucketAdapter<
|
|
8
|
+
// B extends $Bucket,
|
|
9
|
+
// Obj extends B['#data']
|
|
10
|
+
// > extends MemoryBucketAdapter<B, Obj> {
|
|
11
|
+
// constructor(
|
|
12
|
+
// public schema: $Bucket,
|
|
13
|
+
// protected timeout: number,
|
|
14
|
+
// data: Record<Obj['id'], Obj> = {} as any,
|
|
15
|
+
// config?: BucketAdapterConfig
|
|
16
|
+
// ) {
|
|
17
|
+
// super(schema, data, config);
|
|
18
|
+
// }
|
|
19
|
+
// private wrap<T extends Promise<any>>(scale: number, fn: () => T): T {
|
|
20
|
+
// return new Promise((resolve, reject) => {
|
|
21
|
+
// setTimeout(() => {
|
|
22
|
+
// fn()
|
|
23
|
+
// .then(resolve)
|
|
24
|
+
// .catch(reject);
|
|
25
|
+
// }, this.timeout*scale);
|
|
26
|
+
// }) as any;
|
|
27
|
+
// }
|
|
28
|
+
// /* Read operations */
|
|
29
|
+
// index(trx: AnyTrxNode) {
|
|
30
|
+
// return this.wrap(5, () => super.index(trx));
|
|
31
|
+
// }
|
|
32
|
+
// get(trx: AnyTrxNode, id: Obj['id']) {
|
|
33
|
+
// return this.wrap(1, () => super.get(trx, id));
|
|
34
|
+
// }
|
|
35
|
+
// async query<
|
|
36
|
+
// MetadataOnly extends boolean
|
|
37
|
+
// >(
|
|
38
|
+
// trx: AnyTrxNode,
|
|
39
|
+
// query: NQL_AnyQuery,
|
|
40
|
+
// pagination?: NQL_Pagination,
|
|
41
|
+
// config?: {
|
|
42
|
+
// metadataOnly: MetadataOnly
|
|
43
|
+
// }
|
|
44
|
+
// ): Promise<MetadataOnly extends true ? { id: Obj['id'], [x: string]: any }[] : Obj[]> {
|
|
45
|
+
// return this.wrap(3, () => super.query(trx, query, pagination, config));
|
|
46
|
+
// }
|
|
47
|
+
// }
|
|
@@ -2,7 +2,7 @@ import { $Module, $Space, BucketName } from "../../../schema";
|
|
|
2
2
|
import { BucketGraphDef } from './graph/bucket_graph.builder';
|
|
3
3
|
import { $BucketView, $BucketViews } from './view/bucket_view.schema';
|
|
4
4
|
import { BucketViewDef } from './view/bucket_view.builder';
|
|
5
|
-
import { $Bucket } from './bucket.schema';
|
|
5
|
+
import { $Bucket, $BucketTenancy } from './bucket.schema';
|
|
6
6
|
import { BucketModelDef } from './model/bucket_model.builder';
|
|
7
7
|
import { $BucketModelFields } from './model/bucket_model.schema';
|
|
8
8
|
import { $BucketViewDataInfer, $BucketViewFieldsInfer } from './bucket.infer';
|
|
@@ -20,11 +20,12 @@ export declare class BucketBuilder<Space extends $Space, Module extends $Module,
|
|
|
20
20
|
private module;
|
|
21
21
|
private name;
|
|
22
22
|
$b: "bucket";
|
|
23
|
+
private _extend?;
|
|
23
24
|
private _alias?;
|
|
24
25
|
private _model;
|
|
25
26
|
private _graph;
|
|
26
27
|
private _views;
|
|
27
|
-
private
|
|
28
|
+
private _tenancy?;
|
|
28
29
|
constructor(module: string, name: string);
|
|
29
30
|
as(alias: string): this;
|
|
30
31
|
extend<N extends Exclude<BucketName<Module>, Bucket['name']>>(name: N): BucketBuilder<Space, Module, Module["buckets"][N]>;
|
|
@@ -37,6 +38,11 @@ export declare class BucketBuilder<Space extends $Space, Module extends $Module,
|
|
|
37
38
|
'#data': Obj & NesoiObj;
|
|
38
39
|
'#fieldpath': Fieldpath;
|
|
39
40
|
}>>;
|
|
41
|
+
/**
|
|
42
|
+
* Optional query to be appended to every read of this bucket, based on the user
|
|
43
|
+
* This allows implementing complex multi-tenancy rules through NQL
|
|
44
|
+
*/
|
|
45
|
+
tenancy<T extends $BucketTenancy<Module, Bucket>>($: T): void;
|
|
40
46
|
graph<Def extends BucketGraphDef<Module, Bucket>>($: Def): BucketBuilder<Space, Module, Overlay<Bucket, {
|
|
41
47
|
graph: Overlay<Bucket["graph"], {
|
|
42
48
|
links: $BucketGraphLinksInfer<ReturnType<Def>>;
|
|
@@ -34,6 +34,13 @@ class BucketBuilder {
|
|
|
34
34
|
this._model = bucket_model_builder_1.BucketModelBuilder.build(builder);
|
|
35
35
|
return this;
|
|
36
36
|
}
|
|
37
|
+
/**
|
|
38
|
+
* Optional query to be appended to every read of this bucket, based on the user
|
|
39
|
+
* This allows implementing complex multi-tenancy rules through NQL
|
|
40
|
+
*/
|
|
41
|
+
tenancy($) {
|
|
42
|
+
this._tenancy = $;
|
|
43
|
+
}
|
|
37
44
|
graph($) {
|
|
38
45
|
const linkFactory = new bucket_graph_link_builder_1.BucketGraphLinkFactory(this.module);
|
|
39
46
|
const links = $(linkFactory);
|
|
@@ -67,15 +74,14 @@ class BucketBuilder {
|
|
|
67
74
|
}
|
|
68
75
|
const graph = BucketBuilder.buildGraph(node, tree, extend);
|
|
69
76
|
const views = BucketBuilder.buildViews(node.builder, graph, tree, extend);
|
|
70
|
-
|
|
71
|
-
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, extend);
|
|
77
|
+
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);
|
|
72
78
|
return node.schema;
|
|
73
79
|
}
|
|
74
80
|
static mergeModelEnums(fields, constants) {
|
|
75
81
|
Object.values(fields).forEach(field => {
|
|
76
|
-
if (field.type === 'enum' && typeof field.
|
|
77
|
-
field.
|
|
78
|
-
options: constants_schema_1.$ConstantEnum.keys(constants.enums[field.
|
|
82
|
+
if (field.type === 'enum' && typeof field.meta?.enum?.options === 'string') {
|
|
83
|
+
field.meta.enum = {
|
|
84
|
+
options: constants_schema_1.$ConstantEnum.keys(constants.enums[field.meta.enum.options])
|
|
79
85
|
};
|
|
80
86
|
}
|
|
81
87
|
if (field.children) {
|
|
@@ -91,16 +97,6 @@ class BucketBuilder {
|
|
|
91
97
|
}
|
|
92
98
|
const graphBuilder = new bucket_graph_builder_1.BucketGraphBuilder().links(node.builder._graph);
|
|
93
99
|
const graph = bucket_graph_builder_1.BucketGraphBuilder.build(node, graphBuilder);
|
|
94
|
-
Object.values(graph.links).forEach(link => {
|
|
95
|
-
if (link.keyOwner === 'other') {
|
|
96
|
-
link.selfKey || (link.selfKey = 'id');
|
|
97
|
-
link.otherKey || (link.otherKey = node.builder.name + '_id');
|
|
98
|
-
}
|
|
99
|
-
else if (link.keyOwner === 'self') {
|
|
100
|
-
link.selfKey || (link.selfKey = link.bucket.name + '_id');
|
|
101
|
-
link.otherKey || (link.otherKey = 'id');
|
|
102
|
-
}
|
|
103
|
-
});
|
|
104
100
|
graph.links = Object.assign(graph.links, links);
|
|
105
101
|
return graph;
|
|
106
102
|
}
|
|
@@ -119,10 +115,8 @@ class BucketBuilder {
|
|
|
119
115
|
}
|
|
120
116
|
static checkComposition(node, graph) {
|
|
121
117
|
Object.values(graph.links).forEach(link => {
|
|
122
|
-
if (link.rel === 'composition') {
|
|
123
|
-
|
|
124
|
-
throw error_1.NesoiError.Builder.Bucket.CompositionWithPivotNotAllowed();
|
|
125
|
-
}
|
|
118
|
+
if (link.rel === 'composition' && link.keyOwner === 'pivot') {
|
|
119
|
+
throw error_1.NesoiError.Builder.Bucket.CompositionThroughPivotNotAllowed({ bucket: this.name, link: link.name });
|
|
126
120
|
}
|
|
127
121
|
});
|
|
128
122
|
}
|
|
@@ -1,8 +1,12 @@
|
|
|
1
|
+
import { $Module } from "../..";
|
|
1
2
|
import { BucketAdapter } from './adapters/bucket_adapter';
|
|
2
3
|
import { $Bucket } from './bucket.schema';
|
|
3
|
-
|
|
4
|
+
import { DriveAdapter } from '../drive/drive_adapter';
|
|
5
|
+
export type BucketConfig<M extends $Module, B extends $Bucket, Providers extends Record<string, any>> = {
|
|
4
6
|
/** Adapter used by this bucket to communicate with a data source */
|
|
5
7
|
adapter?: (schema: B, providers: Providers) => BucketAdapter<B['#data']>;
|
|
8
|
+
/** Drive Adapter used by this bucket to write/read files */
|
|
9
|
+
drive?: (schema: B, providers: Providers) => DriveAdapter;
|
|
6
10
|
/** Settings for the app cache of this bucket */
|
|
7
11
|
cache?: {
|
|
8
12
|
/** Inner adapter used by the cache to manage cache entry data */
|
|
@@ -1,36 +1,197 @@
|
|
|
1
1
|
import { AnyTrxNode } from "../../../engine/transaction/trx_node";
|
|
2
|
-
import { NesoiObj
|
|
2
|
+
import { NesoiObj } from "../../../engine/data/obj";
|
|
3
3
|
import { $Module, ViewName, ViewObj } from "../../../schema";
|
|
4
4
|
import { $Bucket } from './bucket.schema';
|
|
5
|
-
import {
|
|
5
|
+
import { BucketAdapter } from './adapters/bucket_adapter';
|
|
6
6
|
import { BucketConfig } from './bucket.config';
|
|
7
7
|
import { BucketGraph } from './graph/bucket_graph';
|
|
8
|
-
import { NQL_AnyQuery,
|
|
8
|
+
import { NQL_AnyQuery, NQL_Pagination } from './query/nql.schema';
|
|
9
|
+
import { CreateObj, PatchObj, PutObj } from './bucket.types';
|
|
10
|
+
import { NQL_Result } from './query/nql_engine';
|
|
11
|
+
import { $BucketModelFields } from './model/bucket_model.schema';
|
|
12
|
+
import { DriveAdapter } from '../drive/drive_adapter';
|
|
13
|
+
/**
|
|
14
|
+
* **This should only be used inside a `#composition` of a bucket `create`** to refer to the parent id, which doesn't exist yet.
|
|
15
|
+
*
|
|
16
|
+
* This property has no useful value outside the engine. If you try to `console.log` it, you'll find a Symbol.
|
|
17
|
+
* It's replaced by the bucket after creating the parent, before creating the composition.
|
|
18
|
+
*/
|
|
19
|
+
export declare const $id: string | number;
|
|
9
20
|
export declare class Bucket<M extends $Module, $ extends $Bucket> {
|
|
10
21
|
schema: $;
|
|
11
22
|
private config?;
|
|
12
23
|
providers: Record<string, any>;
|
|
13
|
-
|
|
24
|
+
adapter: BucketAdapter<$['#data']>;
|
|
14
25
|
private cache?;
|
|
15
26
|
graph: BucketGraph<M, $>;
|
|
16
27
|
private views;
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
viewAll<V extends ViewName<$>, Obj extends ViewObj<$, V>>(trx: AnyTrxNode, view: V, pagination?: NQL_Pagination, order?: NQL_Order<$['#fieldpath']>): Promise<Obj[]>;
|
|
22
|
-
buildOne<V extends ViewName<$>, Obj extends ViewObj<$, V>>(trx: AnyTrxNode, obj: $['#data'], view: V): Promise<Obj>;
|
|
23
|
-
buildAll<V extends ViewName<$>, Obj extends ViewObj<$, V>>(trx: AnyTrxNode, objs: $['#data'][], view: V): Promise<Obj[]>;
|
|
24
|
-
put<Obj = $['#data']>(trx: AnyTrxNode, obj: NewOrOldObj<Obj & NesoiObj>): Promise<Obj>;
|
|
25
|
-
delete(trx: AnyTrxNode, id: $['#data']['id']): Promise<void>;
|
|
26
|
-
deleteMany(trx: AnyTrxNode, ids: $['#data']['id'][]): Promise<void>;
|
|
27
|
-
query<V extends ViewName<$>, Obj extends ViewObj<$, V>>(trx: AnyTrxNode, query: NQL_AnyQuery, pagination?: NQL_Pagination, view?: V): Promise<Obj[]>;
|
|
28
|
-
static getQueryMeta(bucket: AnyBucket): {
|
|
29
|
-
bucket: $Bucket;
|
|
28
|
+
drive?: DriveAdapter;
|
|
29
|
+
constructor(schema: $, config?: BucketConfig<any, any, any> | undefined, providers?: Record<string, any>);
|
|
30
|
+
getQueryMeta(): {
|
|
31
|
+
bucket: $;
|
|
30
32
|
scope: string;
|
|
31
33
|
avgTime: number;
|
|
32
34
|
};
|
|
33
|
-
|
|
34
|
-
|
|
35
|
+
/**
|
|
36
|
+
* Read one raw entity by `id`
|
|
37
|
+
*
|
|
38
|
+
* - Options:
|
|
39
|
+
* - `silent`: If not found, return `undefined` instead of throwing an exception
|
|
40
|
+
* - `no_tenancy`: Don't apply tenancy rules.
|
|
41
|
+
*/
|
|
42
|
+
readOne<Obj = $['#data']>(trx: AnyTrxNode, id: (Obj & NesoiObj)['id'], options?: {
|
|
43
|
+
silent?: boolean;
|
|
44
|
+
no_tenancy?: boolean;
|
|
45
|
+
}): Promise<Obj | undefined>;
|
|
46
|
+
/**
|
|
47
|
+
* Read all raw entities
|
|
48
|
+
*
|
|
49
|
+
* - Options:
|
|
50
|
+
* - `no_tenancy`: Don't apply tenancy rules.
|
|
51
|
+
*/
|
|
52
|
+
readAll<Obj = $['#data']>(trx: AnyTrxNode, options?: {
|
|
53
|
+
no_tenancy?: boolean;
|
|
54
|
+
}): Promise<Obj[]>;
|
|
55
|
+
/**
|
|
56
|
+
* Read an entity's view by `id`
|
|
57
|
+
*
|
|
58
|
+
* - Options:
|
|
59
|
+
* - `silent`: If not found, return `undefined` instead of throwing an exception
|
|
60
|
+
* - `no_tenancy`: Don't apply tenancy rules.
|
|
61
|
+
*/
|
|
62
|
+
viewOne<V extends ViewName<$>, Obj extends ViewObj<$, V>>(trx: AnyTrxNode, id: (Obj & NesoiObj)['id'], view: V, options?: {
|
|
63
|
+
silent?: boolean;
|
|
64
|
+
no_tenancy?: boolean;
|
|
65
|
+
}): Promise<Obj | undefined>;
|
|
66
|
+
/**
|
|
67
|
+
* Read a view of all entities
|
|
68
|
+
*
|
|
69
|
+
* - Options:
|
|
70
|
+
* - `no_tenancy`: Don't apply tenancy rules.
|
|
71
|
+
*/
|
|
72
|
+
viewAll<V extends ViewName<$>, Obj extends ViewObj<$, V>>(trx: AnyTrxNode, view: V, options?: {
|
|
73
|
+
no_tenancy: boolean;
|
|
74
|
+
}): Promise<Obj[]>;
|
|
75
|
+
/**
|
|
76
|
+
* Read raw entity of a graph link
|
|
77
|
+
*
|
|
78
|
+
* - Options:
|
|
79
|
+
* - `silent`: If not found, return `undefined` instead of throwing an exception
|
|
80
|
+
* - `no_tenancy`: Don't apply tenancy rules.
|
|
81
|
+
*/
|
|
82
|
+
readLink<LinkName extends keyof $['graph']['links'], Link extends $['graph']['links'][LinkName], LinkBucket extends Link['#bucket'], V extends ViewName<LinkBucket>, Obj extends ViewObj<LinkBucket, V>>(trx: AnyTrxNode, id: $['#data']['id'], link: LinkName, options?: {
|
|
83
|
+
silent?: boolean;
|
|
84
|
+
no_tenancy?: boolean;
|
|
85
|
+
}): Promise<Link['#many'] extends true ? Obj[] : (Obj | undefined)>;
|
|
86
|
+
/**
|
|
87
|
+
* Read the view of an entity of a graph link
|
|
88
|
+
*
|
|
89
|
+
* - Options:
|
|
90
|
+
* - `silent`: If not found, return `undefined` instead of throwing an exception
|
|
91
|
+
* - `no_tenancy`: Don't apply tenancy rules.
|
|
92
|
+
*/
|
|
93
|
+
viewLink<LinkName extends keyof $['graph']['links'], Link extends $['graph']['links'][LinkName], LinkBucket extends Link['#bucket'], V extends ViewName<LinkBucket>, Obj extends ViewObj<LinkBucket, V>>(trx: AnyTrxNode, id: $['#data']['id'], link: LinkName, view: V, options?: {
|
|
94
|
+
silent?: boolean;
|
|
95
|
+
no_tenancy?: boolean;
|
|
96
|
+
}): Promise<Obj | Obj[] | undefined>;
|
|
97
|
+
/**
|
|
98
|
+
* Return true if the graph link refers to at least one object
|
|
99
|
+
*
|
|
100
|
+
* - Options:
|
|
101
|
+
* - `no_tenancy`: Don't apply tenancy rules.
|
|
102
|
+
*/
|
|
103
|
+
hasLink<LinkName extends keyof $['graph']['links']>(trx: AnyTrxNode, id: $['#data']['id'], link: LinkName, options?: {
|
|
104
|
+
no_tenancy?: boolean;
|
|
105
|
+
}): Promise<boolean | undefined>;
|
|
106
|
+
/**
|
|
107
|
+
* Build one object with a view
|
|
108
|
+
*/
|
|
109
|
+
buildOne<V extends ViewName<$>, Obj extends ViewObj<$, V>>(trx: AnyTrxNode, obj: $['#data'], view: V): Promise<Obj>;
|
|
110
|
+
/**
|
|
111
|
+
* Build a list ob objects with a view
|
|
112
|
+
*/
|
|
113
|
+
buildMany<V extends ViewName<$>, Obj extends ViewObj<$, V>>(trx: AnyTrxNode, objs: $['#data'][], view: V): Promise<Obj[]>;
|
|
114
|
+
/**
|
|
115
|
+
* Create an entity
|
|
116
|
+
*/
|
|
117
|
+
create(trx: AnyTrxNode, obj: CreateObj<$>): Promise<$['#data'] | undefined>;
|
|
118
|
+
/**
|
|
119
|
+
* Replace the `$id` symbol on an object with the proper ID value.
|
|
120
|
+
* This is used on composition, to access the ID of the parent.
|
|
121
|
+
*/
|
|
122
|
+
private replaceFutureId;
|
|
123
|
+
/**
|
|
124
|
+
* Update an entity
|
|
125
|
+
*
|
|
126
|
+
* - Options:
|
|
127
|
+
* - `mode`: Type of update to perform (default: `patch`)
|
|
128
|
+
* - `patch`: Only modifies properties that changed
|
|
129
|
+
* - `replace`: Replace the whole object
|
|
130
|
+
* - `no_tenancy`: Don't apply tenancy rules (default: `false`)
|
|
131
|
+
* - `unsafe`:
|
|
132
|
+
* - Don't attempt to read the object before updating. This option is faster, but can throw exceptions directly from the adapter (default: `false`)
|
|
133
|
+
* - **WARNING** Unsafe currently avoids the tenancy check
|
|
134
|
+
*/
|
|
135
|
+
update(trx: AnyTrxNode, obj: PatchObj<$>, options?: {
|
|
136
|
+
mode?: 'patch' | 'replace';
|
|
137
|
+
no_tenancy?: boolean;
|
|
138
|
+
unsafe?: boolean;
|
|
139
|
+
}): Promise<$['#data'] | undefined>;
|
|
140
|
+
/**
|
|
141
|
+
* Create or Replace an entity
|
|
142
|
+
*
|
|
143
|
+
* **WARNING** Tenancy not checked
|
|
144
|
+
*/
|
|
145
|
+
put(trx: AnyTrxNode, obj: PutObj<$>): Promise<$['#data']>;
|
|
146
|
+
/**
|
|
147
|
+
* Delete an entity
|
|
148
|
+
*
|
|
149
|
+
* - Options:
|
|
150
|
+
* - `no_tenancy`: Don't apply tenancy rules (default: `false`)
|
|
151
|
+
* - `unsafe`
|
|
152
|
+
* - Don't attempt to read the object before updating. This option is faster, but can throw exceptions directly from the adapter (default: `false`)
|
|
153
|
+
* - **WARNING** Unsafe currently avoids the tenancy check
|
|
154
|
+
*/
|
|
155
|
+
delete(trx: AnyTrxNode, id: $['#data']['id'], options?: {
|
|
156
|
+
no_tenancy?: boolean;
|
|
157
|
+
unsafe?: boolean;
|
|
158
|
+
}): Promise<void>;
|
|
159
|
+
/**
|
|
160
|
+
* Delete many entities
|
|
161
|
+
*
|
|
162
|
+
* - Options:
|
|
163
|
+
* - `no_tenancy`: Don't apply tenancy rules (default: `false`)
|
|
164
|
+
* - `unsafe`
|
|
165
|
+
* - Don't attempt to read the object before updating. This option is faster, but can throw exceptions directly from the adapter (default: `false`)
|
|
166
|
+
* - **WARNING** Unsafe currently avoids the tenancy check
|
|
167
|
+
*/
|
|
168
|
+
deleteMany(trx: AnyTrxNode, ids: $['#data']['id'][], options?: {
|
|
169
|
+
no_tenancy?: boolean;
|
|
170
|
+
unsafe?: boolean;
|
|
171
|
+
}): Promise<void>;
|
|
172
|
+
/**
|
|
173
|
+
* Query entities using NQL
|
|
174
|
+
*
|
|
175
|
+
* - Options:
|
|
176
|
+
* - `no_tenancy`: Don't apply tenancy rules (default: `false`)
|
|
177
|
+
* - `params`: NQL parameters
|
|
178
|
+
*/
|
|
179
|
+
query<V extends ViewName<$>, Obj extends ViewObj<$, V>>(trx: AnyTrxNode, query: NQL_AnyQuery, pagination?: NQL_Pagination, view?: V, options?: {
|
|
180
|
+
no_tenancy?: boolean;
|
|
181
|
+
params?: Record<string, any>;
|
|
182
|
+
}): Promise<NQL_Result<Obj>>;
|
|
183
|
+
/**
|
|
184
|
+
* Add `created_by`, `created_at`, `updated_by` and `updated_at` fields to object
|
|
185
|
+
*/
|
|
186
|
+
protected addMeta(trx: AnyTrxNode, obj: Record<string, any>, operation: 'create' | 'update'): void;
|
|
187
|
+
getTenancyQuery(trx: AnyTrxNode): import("./query/nql.schema").NQL_Query<any, any> | undefined;
|
|
188
|
+
protected encrypt(trx: AnyTrxNode, obj: Record<string, any>, fields?: $BucketModelFields): void;
|
|
189
|
+
protected decrypt(trx: AnyTrxNode, obj: Record<string, any>, fields?: $BucketModelFields): void;
|
|
190
|
+
/**
|
|
191
|
+
* Copy all files from the object to the bucket's Drive
|
|
192
|
+
* - Call `drive.copy` to send the files preserving the local copy
|
|
193
|
+
* - Replace the file on the object with a new one representing the remote
|
|
194
|
+
*/
|
|
195
|
+
protected copyFilesToDrive(obj: Record<string, any>): Promise<void>;
|
|
35
196
|
}
|
|
36
197
|
export type AnyBucket = Bucket<$Module, $Bucket>;
|