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
|
@@ -2,24 +2,28 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.$BucketModel = exports.$BucketModelField = void 0;
|
|
4
4
|
class $BucketModelField {
|
|
5
|
-
constructor(name, type, alias, array, required,
|
|
5
|
+
constructor(name, path, type, alias, array, required, meta, defaultValue, children, or, crypto) {
|
|
6
6
|
this.name = name;
|
|
7
|
+
this.path = path;
|
|
7
8
|
this.type = type;
|
|
8
9
|
this.alias = alias;
|
|
9
10
|
this.array = array;
|
|
10
11
|
this.required = required;
|
|
11
|
-
this.
|
|
12
|
+
this.meta = meta;
|
|
12
13
|
this.defaultValue = defaultValue;
|
|
13
14
|
this.children = children;
|
|
14
15
|
this.or = or;
|
|
16
|
+
this.crypto = crypto;
|
|
15
17
|
this.$t = 'bucket.model.field';
|
|
16
18
|
}
|
|
17
19
|
}
|
|
18
20
|
exports.$BucketModelField = $BucketModelField;
|
|
19
21
|
class $BucketModel {
|
|
20
|
-
constructor(fields, defaults = {}) {
|
|
22
|
+
constructor(fields, defaults = {}, hasFileField = false, hasEncryptedField = false) {
|
|
21
23
|
this.fields = fields;
|
|
22
24
|
this.defaults = defaults;
|
|
25
|
+
this.hasFileField = hasFileField;
|
|
26
|
+
this.hasEncryptedField = hasEncryptedField;
|
|
23
27
|
this.$t = 'bucket.model';
|
|
24
28
|
}
|
|
25
29
|
static get(model, fieldpath) {
|
|
@@ -27,7 +31,7 @@ class $BucketModel {
|
|
|
27
31
|
let ref = model.fields;
|
|
28
32
|
for (let i = 0; i < paths.length; i++) {
|
|
29
33
|
const path = paths[i];
|
|
30
|
-
if (path === '
|
|
34
|
+
if (path === '#') {
|
|
31
35
|
continue;
|
|
32
36
|
}
|
|
33
37
|
else {
|
|
@@ -43,5 +47,22 @@ class $BucketModel {
|
|
|
43
47
|
}
|
|
44
48
|
return ref;
|
|
45
49
|
}
|
|
50
|
+
static fieldsOfType(model, type) {
|
|
51
|
+
const fields = [];
|
|
52
|
+
let poll = Object.values(model.fields);
|
|
53
|
+
while (poll.length) {
|
|
54
|
+
const next = [];
|
|
55
|
+
for (const field of poll) {
|
|
56
|
+
if (field.type === type) {
|
|
57
|
+
fields.push(field);
|
|
58
|
+
}
|
|
59
|
+
if (field.children) {
|
|
60
|
+
next.push(...Object.values(field.children));
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
poll = next;
|
|
64
|
+
}
|
|
65
|
+
return fields;
|
|
66
|
+
}
|
|
46
67
|
}
|
|
47
68
|
exports.$BucketModel = $BucketModel;
|
|
@@ -2,10 +2,10 @@ import { $Module, $Space } from "../../../../schema";
|
|
|
2
2
|
import { $BucketModelField, $BucketModelFieldType, $BucketModelFields } from './bucket_model.schema';
|
|
3
3
|
import { NesoiDate } from "../../../../engine/data/date";
|
|
4
4
|
import { BucketFieldpathObjInfer, BucketModelObjInfer } from './bucket_model.infer';
|
|
5
|
-
import { $Dependency } from "../../../../engine/dependency";
|
|
6
5
|
import { EnumFromName, EnumName } from '../../constants/constants.schema';
|
|
7
|
-
import {
|
|
6
|
+
import { NesoiDecimal } from "../../../../engine/data/decimal";
|
|
8
7
|
import { NesoiDatetime } from "../../../../engine/data/datetime";
|
|
8
|
+
import { NesoiFile } from "../../../../engine/data/file";
|
|
9
9
|
export declare class BucketModelFieldFactory<Space extends $Space, Module extends $Module> {
|
|
10
10
|
private module;
|
|
11
11
|
constructor(module: string);
|
|
@@ -26,8 +26,8 @@ export declare class BucketModelFieldFactory<Space extends $Space, Module extend
|
|
|
26
26
|
decimal(def?: {
|
|
27
27
|
left?: number;
|
|
28
28
|
right?: number;
|
|
29
|
-
}): BucketModelFieldBuilder<Module,
|
|
30
|
-
'':
|
|
29
|
+
}): BucketModelFieldBuilder<Module, NesoiDecimal, never, NesoiDecimal, {
|
|
30
|
+
'': NesoiDecimal;
|
|
31
31
|
}>;
|
|
32
32
|
enum<Enums extends EnumName<Space>, Options extends (keyof Enums & string) | (readonly string[])>(options: Options): BucketModelFieldBuilder<Module, Options extends string ? EnumFromName<Space, Options>["#data"] : Options extends (infer X)[] | readonly (infer X)[] ? X : Options[keyof Options], never, Options extends string ? EnumFromName<Space, Options>["#data"] : Options extends (infer X)[] | readonly (infer X)[] ? X : Options[keyof Options], {
|
|
33
33
|
'': Options extends string ? EnumFromName<Space, Options>["#data"] : Options extends (infer X)[] | readonly (infer X)[] ? X : Options[keyof Options];
|
|
@@ -41,9 +41,17 @@ export declare class BucketModelFieldFactory<Space extends $Space, Module extend
|
|
|
41
41
|
get string(): BucketModelFieldBuilder<Module, string, never, string, {
|
|
42
42
|
'': string;
|
|
43
43
|
}>;
|
|
44
|
+
/**
|
|
45
|
+
* An object with a specific set of child fields.
|
|
46
|
+
*/
|
|
44
47
|
obj<T extends BucketModelFieldBuilders<Module>>(fields?: T): BucketModelFieldBuilder<Module, BucketModelObjInfer<T>, never, BucketModelObjInfer<T>, {
|
|
45
48
|
'': BucketModelObjInfer<T>;
|
|
46
49
|
} & BucketFieldpathObjInfer<T, ".">>;
|
|
50
|
+
/**
|
|
51
|
+
* An object with an unknown number of child fields of a given type.
|
|
52
|
+
*
|
|
53
|
+
* - All child fields are optional. You can specify a default value.
|
|
54
|
+
*/
|
|
47
55
|
dict<T extends BucketModelFieldBuilder<Module, any>>(dictItem: T): BucketModelFieldBuilder<Module, Record<string, T extends BucketModelFieldBuilder<any, any, any, infer X, {
|
|
48
56
|
'': infer X;
|
|
49
57
|
}> ? X : never>, never, Record<string, T extends BucketModelFieldBuilder<any, any, any, infer X, {
|
|
@@ -54,7 +62,13 @@ export declare class BucketModelFieldFactory<Space extends $Space, Module extend
|
|
|
54
62
|
}> ? X : never>;
|
|
55
63
|
} & BucketFieldpathObjInfer<{
|
|
56
64
|
'': T;
|
|
57
|
-
}, "
|
|
65
|
+
}, ".#">>;
|
|
66
|
+
file(def?: {
|
|
67
|
+
extnames?: string[];
|
|
68
|
+
maxsize?: number;
|
|
69
|
+
}): BucketModelFieldBuilder<Module, NesoiFile, never, NesoiFile, {
|
|
70
|
+
'': NesoiFile;
|
|
71
|
+
}>;
|
|
58
72
|
}
|
|
59
73
|
export declare class BucketModelFieldBuilder<Module extends $Module, DefinedData, TypeAppend = never, Data = DefinedData | TypeAppend, Fieldpath = {
|
|
60
74
|
'': Data;
|
|
@@ -62,16 +76,14 @@ export declare class BucketModelFieldBuilder<Module extends $Module, DefinedData
|
|
|
62
76
|
private module;
|
|
63
77
|
private type;
|
|
64
78
|
private alias?;
|
|
65
|
-
private
|
|
79
|
+
private meta?;
|
|
66
80
|
private children?;
|
|
67
81
|
private _array;
|
|
68
82
|
private _required;
|
|
69
83
|
private _defaultValue?;
|
|
70
84
|
private _or?;
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
dep?: $Dependency;
|
|
74
|
-
} | undefined, children?: BucketModelFieldBuilders<Module> | undefined);
|
|
85
|
+
private crypto?;
|
|
86
|
+
constructor(module: string, type: $BucketModelFieldType, alias?: string | undefined, meta?: $BucketModelField['meta'], children?: BucketModelFieldBuilders<Module> | undefined);
|
|
75
87
|
as(alias: string): this;
|
|
76
88
|
/**
|
|
77
89
|
* This field can be `undefined`.
|
|
@@ -84,9 +96,9 @@ export declare class BucketModelFieldBuilder<Module extends $Module, DefinedData
|
|
|
84
96
|
* resource method, this value is used if undefined is passed.
|
|
85
97
|
*/
|
|
86
98
|
default(defaultValue: DefinedData): BucketModelFieldBuilder<Module, DefinedData, never, DefinedData, Fieldpath>;
|
|
87
|
-
get array(): BucketModelFieldBuilder<Module, DefinedData[], TypeAppend, DefinedData[] | TypeAppend, { [K in Exclude<keyof Fieldpath, ""> as
|
|
99
|
+
get array(): BucketModelFieldBuilder<Module, DefinedData[], TypeAppend, DefinedData[] | TypeAppend, { [K in Exclude<keyof Fieldpath, ""> as `.#${K & string}`]: Fieldpath[K]; } & {
|
|
88
100
|
"": DefinedData[] | TypeAppend;
|
|
89
|
-
"
|
|
101
|
+
".#": DefinedData | TypeAppend;
|
|
90
102
|
}>;
|
|
91
103
|
or<Def extends AnyBucketModelFieldBuilder>(def: Def): BucketModelFieldBuilder<Module, DefinedData | (Def extends BucketModelFieldBuilder<any, any, any, infer X, {
|
|
92
104
|
'': infer X;
|
|
@@ -107,10 +119,17 @@ export declare class BucketModelFieldBuilder<Module extends $Module, DefinedData
|
|
|
107
119
|
* > If you want unconstrained enum you must specify `null` here.
|
|
108
120
|
*/
|
|
109
121
|
maxLength(val: number | null): void;
|
|
110
|
-
|
|
111
|
-
static
|
|
122
|
+
encrypt(key: keyof Module['constants']['values'], algorithm?: string): void;
|
|
123
|
+
static build(builder: BucketModelFieldBuilder<any, any>, name: string, path?: string): {
|
|
124
|
+
schema: $BucketModelField;
|
|
125
|
+
hasFile: boolean;
|
|
126
|
+
hasEncrypted: boolean;
|
|
127
|
+
};
|
|
128
|
+
static buildChildren(module: string, children: BucketModelFieldBuilders<any>, path?: string): {
|
|
112
129
|
schema: $BucketModelFields;
|
|
113
130
|
defaults: Record<string, any>;
|
|
131
|
+
hasFileField: boolean;
|
|
132
|
+
hasEncryptedField: boolean;
|
|
114
133
|
};
|
|
115
134
|
}
|
|
116
135
|
export type BucketModelFieldBuilders<Module extends $Module> = {
|
|
@@ -27,8 +27,9 @@ class BucketModelFieldFactory {
|
|
|
27
27
|
return new BucketModelFieldBuilder(this.module, 'datetime', this.alias);
|
|
28
28
|
}
|
|
29
29
|
decimal(def) {
|
|
30
|
-
|
|
31
|
-
|
|
30
|
+
return new BucketModelFieldBuilder(this.module, 'decimal', this.alias, {
|
|
31
|
+
decimal: def
|
|
32
|
+
});
|
|
32
33
|
}
|
|
33
34
|
enum(options) {
|
|
34
35
|
const strings = (Array.isArray(options) || typeof options === 'string')
|
|
@@ -44,7 +45,9 @@ class BucketModelFieldFactory {
|
|
|
44
45
|
dep = new dependency_1.$Dependency(this.module, 'constants', '*');
|
|
45
46
|
}
|
|
46
47
|
}
|
|
47
|
-
return new BucketModelFieldBuilder(this.module, 'enum', this.alias, {
|
|
48
|
+
return new BucketModelFieldBuilder(this.module, 'enum', this.alias, {
|
|
49
|
+
enum: { options: strings, dep }
|
|
50
|
+
});
|
|
48
51
|
}
|
|
49
52
|
get int() {
|
|
50
53
|
return new BucketModelFieldBuilder(this.module, 'int', this.alias);
|
|
@@ -55,23 +58,37 @@ class BucketModelFieldFactory {
|
|
|
55
58
|
get string() {
|
|
56
59
|
return new BucketModelFieldBuilder(this.module, 'string', this.alias);
|
|
57
60
|
}
|
|
61
|
+
/**
|
|
62
|
+
* An object with a specific set of child fields.
|
|
63
|
+
*/
|
|
58
64
|
obj(fields) {
|
|
59
65
|
return new BucketModelFieldBuilder(this.module, 'obj', this.alias, undefined, fields);
|
|
60
66
|
}
|
|
67
|
+
/**
|
|
68
|
+
* An object with an unknown number of child fields of a given type.
|
|
69
|
+
*
|
|
70
|
+
* - All child fields are optional. You can specify a default value.
|
|
71
|
+
*/
|
|
61
72
|
dict(dictItem) {
|
|
73
|
+
dictItem = dictItem.optional;
|
|
62
74
|
return new BucketModelFieldBuilder(this.module, 'dict', this.alias, undefined, { __dict: dictItem });
|
|
63
75
|
}
|
|
76
|
+
file(def) {
|
|
77
|
+
return new BucketModelFieldBuilder(this.module, 'file', this.alias, {
|
|
78
|
+
file: def
|
|
79
|
+
});
|
|
80
|
+
}
|
|
64
81
|
}
|
|
65
82
|
exports.BucketModelFieldFactory = BucketModelFieldFactory;
|
|
66
83
|
/*
|
|
67
84
|
Builder
|
|
68
85
|
*/
|
|
69
86
|
class BucketModelFieldBuilder {
|
|
70
|
-
constructor(module, type, alias,
|
|
87
|
+
constructor(module, type, alias, meta, children) {
|
|
71
88
|
this.module = module;
|
|
72
89
|
this.type = type;
|
|
73
90
|
this.alias = alias;
|
|
74
|
-
this.
|
|
91
|
+
this.meta = meta;
|
|
75
92
|
this.children = children;
|
|
76
93
|
this._array = false;
|
|
77
94
|
this._required = true;
|
|
@@ -118,10 +135,19 @@ class BucketModelFieldBuilder {
|
|
|
118
135
|
*/
|
|
119
136
|
maxLength(val) {
|
|
120
137
|
}
|
|
138
|
+
encrypt(key, algorithm = 'aes256') {
|
|
139
|
+
this.crypto = {
|
|
140
|
+
algorithm,
|
|
141
|
+
key: key
|
|
142
|
+
};
|
|
143
|
+
}
|
|
121
144
|
// Build
|
|
122
|
-
static build(builder, name) {
|
|
145
|
+
static build(builder, name, path = '') {
|
|
146
|
+
path += name;
|
|
123
147
|
const children = builder.children
|
|
124
|
-
? BucketModelFieldBuilder.buildChildren(builder.module, builder.children
|
|
148
|
+
? BucketModelFieldBuilder.buildChildren(builder.module, builder.children, builder._array
|
|
149
|
+
? path + '.#.'
|
|
150
|
+
: path + '.')
|
|
125
151
|
: undefined;
|
|
126
152
|
const defaults = builder._defaultValue && builder.children
|
|
127
153
|
? Object.assign({}, builder._defaultValue, children?.defaults)
|
|
@@ -129,26 +155,43 @@ class BucketModelFieldBuilder {
|
|
|
129
155
|
const or = builder._or
|
|
130
156
|
? this.build(builder._or, name)
|
|
131
157
|
: undefined;
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
158
|
+
const schema = new bucket_model_schema_1.$BucketModelField(name, path, builder.type, builder.alias || name, builder._array, builder._required, builder.meta, defaults, children?.schema, or?.schema, builder.crypto);
|
|
159
|
+
const hasFile = builder.type === 'file'
|
|
160
|
+
|| children?.hasFileField
|
|
161
|
+
|| or?.hasFile
|
|
162
|
+
|| false;
|
|
163
|
+
const hasEncrypted = !!builder.crypto
|
|
164
|
+
|| children?.hasEncryptedField
|
|
165
|
+
|| or?.hasEncrypted
|
|
166
|
+
|| false;
|
|
167
|
+
return { schema, hasFile, hasEncrypted };
|
|
168
|
+
}
|
|
169
|
+
static buildChildren(module, children, path) {
|
|
135
170
|
const schema = {};
|
|
136
171
|
const defaults = {};
|
|
172
|
+
let hasFileField = false;
|
|
173
|
+
let hasEncryptedField = false;
|
|
137
174
|
for (const c in children) {
|
|
138
175
|
const child = children[c];
|
|
139
176
|
if (child instanceof BucketModelFieldBuilder) {
|
|
140
|
-
|
|
177
|
+
const out = BucketModelFieldBuilder.build(child, c, path);
|
|
178
|
+
schema[c] = out.schema;
|
|
179
|
+
hasFileField || (hasFileField = out.hasFile);
|
|
180
|
+
hasEncryptedField || (hasEncryptedField = out.hasEncrypted);
|
|
141
181
|
}
|
|
142
182
|
// Builders are allowed to implicitly declare nested fields.
|
|
143
183
|
// The code below transforms these groups into fields of the scope 'group'.
|
|
144
184
|
else {
|
|
145
185
|
const fieldTypeBuilder = new BucketModelFieldFactory(module);
|
|
146
186
|
const fieldBuilder = fieldTypeBuilder.obj(child);
|
|
147
|
-
|
|
187
|
+
const out = BucketModelFieldBuilder.build(fieldBuilder, c, path);
|
|
188
|
+
schema[c] = out.schema;
|
|
189
|
+
hasFileField || (hasFileField = out.hasFile);
|
|
190
|
+
hasEncryptedField || (hasEncryptedField = out.hasEncrypted);
|
|
148
191
|
}
|
|
149
192
|
defaults[c] = schema[c].defaultValue;
|
|
150
193
|
}
|
|
151
|
-
return { schema, defaults };
|
|
194
|
+
return { schema, defaults, hasFileField, hasEncryptedField };
|
|
152
195
|
}
|
|
153
196
|
}
|
|
154
197
|
exports.BucketModelFieldBuilder = BucketModelFieldBuilder;
|
|
@@ -3,7 +3,6 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.NQL_CompiledQuery = exports.NQL_Compiler = exports.NQL_RuleTree = void 0;
|
|
4
4
|
const bucket_model_schema_1 = require("../model/bucket_model.schema");
|
|
5
5
|
const string_1 = require("../../../../engine/util/string");
|
|
6
|
-
const bucket_1 = require("../bucket");
|
|
7
6
|
class NQL_RuleTree {
|
|
8
7
|
constructor(module, bucketName, query, debug = false) {
|
|
9
8
|
this.module = module;
|
|
@@ -23,7 +22,7 @@ class NQL_RuleTree {
|
|
|
23
22
|
}
|
|
24
23
|
// Parse NQL
|
|
25
24
|
parseUnion(bucket, query, select) {
|
|
26
|
-
const meta =
|
|
25
|
+
const meta = bucket.getQueryMeta();
|
|
27
26
|
const union = {
|
|
28
27
|
meta: {
|
|
29
28
|
...meta,
|
|
@@ -283,6 +282,12 @@ class NQL_RuleTree {
|
|
|
283
282
|
const parent = stack.at(-2);
|
|
284
283
|
// Union
|
|
285
284
|
if ('inters' in node[0]) {
|
|
285
|
+
// Union has no child and a parent, should be removed
|
|
286
|
+
if (node[0].inters.length == 0 && parent) {
|
|
287
|
+
parent[0].rules.splice(parent[1], 1); // TODO: investigate 'as any'
|
|
288
|
+
stack.pop();
|
|
289
|
+
continue;
|
|
290
|
+
}
|
|
286
291
|
// Union has a single child and a parent, should be collapsed
|
|
287
292
|
if (node[0].inters.length == 1 && parent) {
|
|
288
293
|
// Parent is a Intersection
|
|
@@ -310,6 +315,12 @@ class NQL_RuleTree {
|
|
|
310
315
|
}
|
|
311
316
|
// Intersection
|
|
312
317
|
else if ('rules' in node[0]) {
|
|
318
|
+
// Intersection has no rule and a parent, should be removed
|
|
319
|
+
if (node[0].rules.length == 0 && parent) {
|
|
320
|
+
parent[0].inters.splice(parent[1], 1); // TODO: investigate 'as any'
|
|
321
|
+
stack.pop();
|
|
322
|
+
continue;
|
|
323
|
+
}
|
|
313
324
|
// Iterate
|
|
314
325
|
node[1]++;
|
|
315
326
|
const next = node[0].rules[node[1]];
|
|
@@ -1,16 +1,23 @@
|
|
|
1
1
|
import { AnyModule } from "../../../../engine/module";
|
|
2
2
|
import { NQL_CompiledQuery } from './nql_compiler';
|
|
3
3
|
import { AnyTrxNode } from "../../../../engine/transaction/trx_node";
|
|
4
|
-
import {
|
|
4
|
+
import { AnyBucket } from '../bucket';
|
|
5
|
+
import { NQL_Pagination, NQL_Part } from './nql.schema';
|
|
5
6
|
type Obj = Record<string, any>;
|
|
6
|
-
type
|
|
7
|
+
export type NQL_Result<T = Obj> = {
|
|
8
|
+
data: T[];
|
|
9
|
+
count?: number;
|
|
10
|
+
page?: number;
|
|
11
|
+
perPage?: number;
|
|
12
|
+
};
|
|
7
13
|
export declare abstract class NQLRunner {
|
|
8
|
-
abstract run(trx: AnyTrxNode, part: NQL_Part, params: Record<string, any
|
|
14
|
+
abstract run(trx: AnyTrxNode, part: NQL_Part, params: Record<string, any>, pagination?: NQL_Pagination): Promise<NQL_Result>;
|
|
9
15
|
}
|
|
10
16
|
export declare class NQL_Engine {
|
|
11
17
|
private module;
|
|
12
18
|
private runners;
|
|
13
19
|
constructor(module: AnyModule);
|
|
14
|
-
run(trx: AnyTrxNode, query: NQL_CompiledQuery, params?: Record<string, any>): Promise<
|
|
20
|
+
run(trx: AnyTrxNode, query: NQL_CompiledQuery, pagination?: NQL_Pagination, params?: Record<string, any>): Promise<NQL_Result>;
|
|
21
|
+
linkExternal(bucket: AnyBucket): void;
|
|
15
22
|
}
|
|
16
23
|
export {};
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.NQL_Engine = exports.NQLRunner = void 0;
|
|
4
|
-
const bucket_1 = require("../bucket");
|
|
5
4
|
class NQLRunner {
|
|
6
5
|
}
|
|
7
6
|
exports.NQLRunner = NQLRunner;
|
|
@@ -11,32 +10,42 @@ class NQL_Engine {
|
|
|
11
10
|
this.runners = {};
|
|
12
11
|
for (const b in module.buckets) {
|
|
13
12
|
const bucket = module.buckets[b];
|
|
14
|
-
const meta =
|
|
13
|
+
const meta = bucket.getQueryMeta();
|
|
15
14
|
if (!(meta.scope in this.runners)) {
|
|
16
|
-
this.runners[meta.scope] =
|
|
15
|
+
this.runners[meta.scope] = bucket.adapter.nql;
|
|
17
16
|
}
|
|
18
17
|
}
|
|
19
18
|
}
|
|
20
|
-
async run(trx, query, params = {}) {
|
|
21
|
-
let
|
|
19
|
+
async run(trx, query, pagination, params = {}) {
|
|
20
|
+
let result = {
|
|
21
|
+
data: []
|
|
22
|
+
};
|
|
22
23
|
for (let i = 0; i < query.execOrder.length; i++) {
|
|
23
24
|
const part_i = query.execOrder[i];
|
|
24
25
|
const part = query.parts[part_i];
|
|
25
26
|
// Run part
|
|
26
27
|
const runner = this.runners[part.union.meta.scope];
|
|
27
|
-
const out = await runner.run(trx, part, params);
|
|
28
|
-
|
|
28
|
+
const out = await runner.run(trx, part, params, pagination);
|
|
29
|
+
result = out;
|
|
29
30
|
// Part failed, return
|
|
30
31
|
// Failure here is only when a single value is expected,
|
|
31
32
|
if (!part.many) {
|
|
32
|
-
if (data.length === 0) {
|
|
33
|
-
return
|
|
33
|
+
if (result.data.length === 0) {
|
|
34
|
+
return {
|
|
35
|
+
data: []
|
|
36
|
+
};
|
|
34
37
|
}
|
|
35
38
|
}
|
|
36
39
|
// Fill part params
|
|
37
|
-
params[`%__${part_i}__%`] = part.many ? data : data[0];
|
|
40
|
+
params[`%__${part_i}__%`] = part.many ? result.data : result.data[0];
|
|
41
|
+
}
|
|
42
|
+
return result;
|
|
43
|
+
}
|
|
44
|
+
linkExternal(bucket) {
|
|
45
|
+
const meta = bucket.getQueryMeta();
|
|
46
|
+
if (!(meta.scope in this.runners)) {
|
|
47
|
+
this.runners[meta.scope] = bucket.adapter.nql;
|
|
38
48
|
}
|
|
39
|
-
return data;
|
|
40
49
|
}
|
|
41
50
|
}
|
|
42
51
|
exports.NQL_Engine = NQL_Engine;
|
|
@@ -6,6 +6,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
6
6
|
exports.BucketView = void 0;
|
|
7
7
|
const promise_1 = __importDefault(require("../../../../engine/util/promise"));
|
|
8
8
|
const tree_1 = require("../../../../engine/data/tree");
|
|
9
|
+
const error_1 = require("../../../../engine/data/error");
|
|
9
10
|
class BucketView {
|
|
10
11
|
constructor(bucket, schema) {
|
|
11
12
|
this.bucket = bucket;
|
|
@@ -21,39 +22,7 @@ class BucketView {
|
|
|
21
22
|
if (prop.scope !== 'model') {
|
|
22
23
|
continue;
|
|
23
24
|
}
|
|
24
|
-
|
|
25
|
-
const rawValue = tree_1.Tree.get(raw, value.key, index);
|
|
26
|
-
if (prop.children) {
|
|
27
|
-
if (prop.array) {
|
|
28
|
-
if (!Array.isArray(rawValue)) {
|
|
29
|
-
continue;
|
|
30
|
-
}
|
|
31
|
-
const parsedArray = [];
|
|
32
|
-
for (let i = 0; i < rawValue.length; i++) {
|
|
33
|
-
const child = await doParse(prop.children, [...(index || []), i]);
|
|
34
|
-
parsedArray.push(child);
|
|
35
|
-
}
|
|
36
|
-
parsedObj[k] = parsedArray;
|
|
37
|
-
continue;
|
|
38
|
-
}
|
|
39
|
-
else if (prop.type === 'dict') {
|
|
40
|
-
if (typeof rawValue !== 'object' || Array.isArray(rawValue)) {
|
|
41
|
-
continue;
|
|
42
|
-
}
|
|
43
|
-
const parsedArray = [];
|
|
44
|
-
for (const k in rawValue) {
|
|
45
|
-
const child = await doParse(prop.children, [...(index || []), k]);
|
|
46
|
-
parsedArray.push(child);
|
|
47
|
-
}
|
|
48
|
-
parsedObj[k] = parsedArray;
|
|
49
|
-
continue;
|
|
50
|
-
}
|
|
51
|
-
else {
|
|
52
|
-
parsedObj[k] = await doParse(prop.children, index || []);
|
|
53
|
-
continue;
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
parsedObj[k] = rawValue;
|
|
25
|
+
parsedObj[k] = await parseModelProp(raw, prop, index);
|
|
57
26
|
}
|
|
58
27
|
// Computed props
|
|
59
28
|
for (const k in schema) {
|
|
@@ -77,7 +46,35 @@ class BucketView {
|
|
|
77
46
|
continue;
|
|
78
47
|
}
|
|
79
48
|
const value = prop.value.graph;
|
|
80
|
-
|
|
49
|
+
let link;
|
|
50
|
+
if (!value.view) {
|
|
51
|
+
link = bucket.graph.readLink(trx, raw, value.link, { silent: true }); // TODO: fieldpath indexes
|
|
52
|
+
}
|
|
53
|
+
else {
|
|
54
|
+
link = bucket.graph.viewLink(trx, raw, value.link, value.view, { silent: true }); // TODO: fieldpath indexes
|
|
55
|
+
}
|
|
56
|
+
parsedObj[k] = await promise_1.default.solve(link);
|
|
57
|
+
}
|
|
58
|
+
// Drive props
|
|
59
|
+
for (const k in schema) {
|
|
60
|
+
const prop = schema[k];
|
|
61
|
+
if (prop.$t !== 'bucket.view.field') {
|
|
62
|
+
continue;
|
|
63
|
+
}
|
|
64
|
+
if (prop.scope !== 'drive') {
|
|
65
|
+
continue;
|
|
66
|
+
}
|
|
67
|
+
if (!bucket.drive) {
|
|
68
|
+
throw error_1.NesoiError.Bucket.Drive.NoAdapter({ bucket: bucket.schema.alias });
|
|
69
|
+
}
|
|
70
|
+
const value = prop.value.drive;
|
|
71
|
+
const model = tree_1.Tree.get(raw, value.path);
|
|
72
|
+
if (Array.isArray(model)) {
|
|
73
|
+
parsedObj[k] = await bucket.drive.public(model);
|
|
74
|
+
}
|
|
75
|
+
else {
|
|
76
|
+
parsedObj[k] = (await bucket.drive.public([model]))[0];
|
|
77
|
+
}
|
|
81
78
|
}
|
|
82
79
|
// Group props
|
|
83
80
|
for (const k in schema) {
|
|
@@ -92,7 +89,38 @@ class BucketView {
|
|
|
92
89
|
}
|
|
93
90
|
return parsedObj;
|
|
94
91
|
};
|
|
95
|
-
const
|
|
92
|
+
const parseModelProp = async (obj, prop, index, key) => {
|
|
93
|
+
const value = prop.value.model;
|
|
94
|
+
const rawValue = tree_1.Tree.get(obj, key || value.key, index);
|
|
95
|
+
if (prop.children) {
|
|
96
|
+
if (prop.array) {
|
|
97
|
+
if (!Array.isArray(rawValue)) {
|
|
98
|
+
return undefined;
|
|
99
|
+
}
|
|
100
|
+
const parsedArray = [];
|
|
101
|
+
for (let i = 0; i < rawValue.length; i++) {
|
|
102
|
+
const child = await doParse(prop.children, [...(index || []), i]);
|
|
103
|
+
parsedArray.push(child);
|
|
104
|
+
}
|
|
105
|
+
return parsedArray;
|
|
106
|
+
}
|
|
107
|
+
else if (prop.type === 'dict') {
|
|
108
|
+
if (typeof rawValue !== 'object' || Array.isArray(rawValue)) {
|
|
109
|
+
return undefined;
|
|
110
|
+
}
|
|
111
|
+
const parsedDict = {};
|
|
112
|
+
for (const j in rawValue) {
|
|
113
|
+
parsedDict[j] = await parseModelProp(rawValue, prop.children.__dict, [...(index || []), j], j);
|
|
114
|
+
}
|
|
115
|
+
return parsedDict;
|
|
116
|
+
}
|
|
117
|
+
else {
|
|
118
|
+
return doParse(prop.children, index || []);
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
return rawValue;
|
|
122
|
+
};
|
|
123
|
+
const parsedObj = await doParse(this.schema.fields, '*');
|
|
96
124
|
return {
|
|
97
125
|
id: raw.id,
|
|
98
126
|
...parsedObj
|
|
@@ -21,11 +21,14 @@ export type $BucketViewFieldValue = {
|
|
|
21
21
|
view?: {
|
|
22
22
|
view: string;
|
|
23
23
|
};
|
|
24
|
+
drive?: {
|
|
25
|
+
path: string;
|
|
26
|
+
};
|
|
24
27
|
group?: {};
|
|
25
28
|
};
|
|
26
29
|
export declare class $BucketViewField {
|
|
27
30
|
name: string;
|
|
28
|
-
scope: 'model' | 'graph' | 'computed' | 'group' | 'view';
|
|
31
|
+
scope: 'model' | 'graph' | 'computed' | 'group' | 'view' | 'drive';
|
|
29
32
|
type: $BucketModelFieldType | 'id';
|
|
30
33
|
alias: string;
|
|
31
34
|
array: boolean | 'unknown';
|
|
@@ -34,7 +37,7 @@ export declare class $BucketViewField {
|
|
|
34
37
|
children?: $BucketViewFields | undefined;
|
|
35
38
|
$t: string;
|
|
36
39
|
'#data': unknown;
|
|
37
|
-
constructor(name: string, scope: 'model' | 'graph' | 'computed' | 'group' | 'view', type: $BucketModelFieldType | 'id', alias: string, array: boolean | 'unknown', required: boolean, value: $BucketViewFieldValue, children?: $BucketViewFields | undefined);
|
|
40
|
+
constructor(name: string, scope: 'model' | 'graph' | 'computed' | 'group' | 'view' | 'drive', type: $BucketModelFieldType | 'id', alias: string, array: boolean | 'unknown', required: boolean, value: $BucketViewFieldValue, children?: $BucketViewFields | undefined);
|
|
38
41
|
}
|
|
39
42
|
export type $BucketViewFields = {
|
|
40
43
|
[x: string]: $BucketViewField;
|
|
@@ -6,6 +6,10 @@ import { BucketViewBuilder } from './bucket_view.builder';
|
|
|
6
6
|
import { $Bucket } from '../bucket.schema';
|
|
7
7
|
import { $BucketViewFieldBuilderInfer } from '../bucket.infer';
|
|
8
8
|
import { TrxNode } from "../../../../engine/transaction/trx_node";
|
|
9
|
+
import { NesoiFile } from "../../../../engine/data/file";
|
|
10
|
+
type DriveFieldpath<Bucket extends $Bucket> = {
|
|
11
|
+
[K in keyof Bucket['#fieldpath']]: NonNullable<Bucket['#fieldpath'][K]> extends NesoiFile ? K : never;
|
|
12
|
+
}[keyof Bucket['#fieldpath']];
|
|
9
13
|
type GraphLinkBucket<Bucket extends $Bucket, L extends keyof Bucket['graph']['links']> = Bucket['graph']['links'][L]['#bucket'];
|
|
10
14
|
type ComputedData<Fn extends $BucketViewFieldFn<any, any>, R = ReturnType<Fn>> = R extends Promise<infer X> ? X : R;
|
|
11
15
|
export declare class BucketViewFieldFactory<Space extends $Space, Module extends $Module, Bucket extends $Bucket> {
|
|
@@ -17,6 +21,7 @@ export declare class BucketViewFieldFactory<Space extends $Space, Module extends
|
|
|
17
21
|
model<K extends keyof Bucket['#fieldpath'], Extra extends BucketViewFieldBuilderTree>(key: K, extra?: Extra): BucketViewFieldBuilder<Bucket["#fieldpath"][K], "model", never>;
|
|
18
22
|
computed<Fn extends $BucketViewFieldFn<TrxNode<Space, Module, Space['authnUsers']>, Bucket>>(fn: Fn): BucketViewFieldBuilder<ComputedData<Fn, ReturnType<Fn>>, "computed", never>;
|
|
19
23
|
graph<L extends keyof Bucket['graph']['links'], LinkBucket extends GraphLinkBucket<Bucket, L>, V extends (keyof LinkBucket['views']) | undefined>(link: L, view?: V): BucketViewFieldBuilder<undefined extends V ? LinkBucket["#data"] : ViewObj<LinkBucket, NonNullable<V>>, "graph", `${LinkBucket["name"]}.${V & string}`>;
|
|
24
|
+
drive<F extends DriveFieldpath<Bucket>>(path: F): BucketViewFieldBuilder<string, "drive", never>;
|
|
20
25
|
view<ViewName extends keyof Bucket['views'], View extends Bucket['views'][ViewName]>(view: ViewName): BucketViewFieldBuilder<View["#data"], "view", never>;
|
|
21
26
|
extend<ViewName extends keyof Bucket['views'], Builders extends BucketViewFieldBuilderTree>(view: ViewName, fields: Builders): $BucketViewFieldBuilderInfer<Bucket["views"][ViewName]["#data"]> & Builders;
|
|
22
27
|
static group(name: string, children: $BucketViewFields): $BucketViewField;
|
|
@@ -24,10 +29,9 @@ export declare class BucketViewFieldFactory<Space extends $Space, Module extends
|
|
|
24
29
|
export declare class BucketViewFieldBuilder<Data, Scope extends $BucketViewField['scope'], GraphLink extends string = never> {
|
|
25
30
|
protected scope: $BucketViewField['scope'];
|
|
26
31
|
protected value: $BucketViewFieldValue;
|
|
27
|
-
protected refKey?: string | undefined;
|
|
28
32
|
protected extra?: BucketViewFieldBuilderTree | undefined;
|
|
29
33
|
protected type: $BucketViewField['type'];
|
|
30
|
-
constructor(scope: $BucketViewField['scope'], value: $BucketViewFieldValue,
|
|
34
|
+
constructor(scope: $BucketViewField['scope'], value: $BucketViewFieldValue, extra?: BucketViewFieldBuilderTree | undefined);
|
|
31
35
|
static build(builder: BucketViewFieldBuilder<any, any>, model: $BucketModel, graph: $BucketGraph, views: $BucketViews, name: string): $BucketViewField;
|
|
32
36
|
static buildFields(fields: BucketViewFieldBuilderTree, model: $BucketModel, graph: $BucketGraph, views: $BucketViews): $BucketViewFields;
|
|
33
37
|
}
|