nesoi 3.0.20 → 3.1.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/lib/compiler/apps/monolyth/stages/4_dump_modules_stage.js +8 -0
- package/lib/compiler/compiler.js +1 -1
- package/lib/compiler/elements/bucket.element.d.ts +2 -1
- package/lib/compiler/elements/bucket.element.js +68 -122
- package/lib/compiler/elements/element.js +2 -1
- package/lib/compiler/elements/externals.element.js +3 -0
- package/lib/compiler/elements/message.element.js +34 -57
- package/lib/compiler/elements/queue.element.js +1 -1
- package/lib/compiler/helpers/dump_helpers.d.ts +2 -0
- package/lib/compiler/helpers/dump_helpers.js +12 -2
- package/lib/compiler/stages/4_build_schemas_stage.js +12 -0
- package/lib/compiler/stages/5_inject_ts_stage.js +4 -1
- package/lib/compiler/stages/7_dump_stage.js +7 -1
- package/lib/compiler/treeshake.js +4 -2
- package/lib/compiler/typescript/bridge/extract.js +37 -107
- package/lib/compiler/typescript/bridge/inject.d.ts +1 -1
- package/lib/compiler/typescript/bridge/inject.js +73 -45
- package/lib/compiler/typescript/bridge/organize.js +9 -5
- package/lib/compiler/typescript/typescript_compiler.d.ts +4 -6
- package/lib/compiler/typescript/typescript_compiler.js +139 -75
- package/lib/elements/blocks/block.builder.d.ts +1 -10
- package/lib/elements/blocks/block.builder.js +0 -32
- package/lib/elements/blocks/job/internal/resource_job.builder.d.ts +3 -21
- package/lib/elements/blocks/job/job.builder.d.ts +6 -20
- package/lib/elements/blocks/job/job.builder.js +0 -4
- package/lib/elements/blocks/machine/machine.builder.d.ts +5 -14
- package/lib/elements/blocks/machine/machine.builder.js +2 -2
- package/lib/elements/blocks/queue/queue.builder.d.ts +6 -15
- package/lib/elements/blocks/queue/queue.builder.js +2 -2
- package/lib/elements/edge/externals/externals.builder.d.ts +2 -0
- package/lib/elements/edge/externals/externals.builder.js +6 -1
- package/lib/elements/edge/externals/externals.schema.d.ts +2 -1
- package/lib/elements/edge/externals/externals.schema.js +3 -1
- package/lib/elements/entities/bucket/adapters/memory.nql.js +1 -1
- package/lib/elements/entities/bucket/bucket.builder.d.ts +6 -4
- package/lib/elements/entities/bucket/bucket.js +7 -16
- package/lib/elements/entities/bucket/bucket.schema.d.ts +2 -1
- package/lib/elements/entities/bucket/graph/bucket_graph.infer.d.ts +7 -5
- package/lib/elements/entities/bucket/graph/bucket_graph_link.builder.d.ts +2 -1
- package/lib/elements/entities/bucket/model/bucket_model.builder.d.ts +1 -1
- package/lib/elements/entities/bucket/model/bucket_model.convert.d.ts +1 -1
- package/lib/elements/entities/bucket/model/bucket_model.convert.js +4 -4
- package/lib/elements/entities/bucket/model/bucket_model.infer.d.ts +45 -9
- package/lib/elements/entities/bucket/model/bucket_model.schema.d.ts +5 -6
- package/lib/elements/entities/bucket/model/bucket_model.schema.js +64 -21
- package/lib/elements/entities/bucket/model/bucket_model_field.builder.d.ts +88 -55
- package/lib/elements/entities/bucket/model/bucket_model_field.builder.js +22 -30
- package/lib/elements/entities/bucket/query/nql.schema.d.ts +13 -10
- package/lib/elements/entities/bucket/query/nql_compiler.js +46 -21
- package/lib/elements/entities/bucket/view/bucket_view.builder.js +1 -1
- package/lib/elements/entities/bucket/view/bucket_view.d.ts +19 -0
- package/lib/elements/entities/bucket/view/bucket_view.js +230 -108
- package/lib/elements/entities/bucket/view/bucket_view.schema.d.ts +5 -10
- package/lib/elements/entities/bucket/view/bucket_view.schema.js +3 -5
- package/lib/elements/entities/bucket/view/bucket_view_field.builder.d.ts +16 -12
- package/lib/elements/entities/bucket/view/bucket_view_field.builder.js +55 -40
- package/lib/elements/entities/message/message.builder.d.ts +1 -11
- package/lib/elements/entities/message/message.builder.js +2 -2
- package/lib/elements/entities/message/message.infer.d.ts +6 -30
- package/lib/elements/entities/message/message.schema.js +2 -2
- package/lib/elements/entities/message/message_parser.d.ts +0 -1
- package/lib/elements/entities/message/message_parser.js +1 -68
- package/lib/elements/entities/message/template/message_template.builder.js +1 -1
- package/lib/elements/entities/message/template/message_template.schema.d.ts +11 -6
- package/lib/elements/entities/message/template/message_template.schema.js +29 -6
- package/lib/elements/entities/message/template/message_template_field.builder.d.ts +50 -203
- package/lib/elements/entities/message/template/message_template_field.builder.js +74 -74
- package/lib/elements/entities/message/template/message_template_parser.d.ts +2 -2
- package/lib/elements/entities/message/template/message_template_parser.js +137 -71
- package/lib/engine/apps/inline.app.js +1 -0
- package/lib/engine/data/error.d.ts +12 -11
- package/lib/engine/data/error.js +7 -7
- package/lib/engine/data/trash.js +7 -7
- package/lib/engine/data/tree.d.ts +3 -0
- package/lib/engine/data/tree.js +36 -0
- package/lib/engine/util/parse.d.ts +36 -28
- package/lib/engine/util/parse.js +53 -43
- package/lib/engine/util/type.d.ts +3 -0
- package/package.json +1 -1
- package/tools/joaquin/bucket.d.ts +9 -0
- package/tools/joaquin/bucket.js +49 -0
- package/tools/joaquin/message.d.ts +2 -1
- package/tools/joaquin/message.js +9 -2
- package/tools/joaquin/mock.d.ts +1 -0
- package/tools/joaquin/mock.js +13 -5
- package/tsconfig.build.tsbuildinfo +1 -1
|
@@ -6,10 +6,11 @@ import { $Dependency } from "../../../engine/dependency";
|
|
|
6
6
|
export declare class $Externals {
|
|
7
7
|
name: string;
|
|
8
8
|
buckets: Record<string, $Dependency>;
|
|
9
|
+
messages: Record<string, $Dependency>;
|
|
9
10
|
jobs: Record<string, $Dependency>;
|
|
10
11
|
machines: Record<string, $Dependency>;
|
|
11
12
|
$t: "externals";
|
|
12
13
|
module: string;
|
|
13
|
-
constructor(name: string, buckets?: Record<string, $Dependency>, jobs?: Record<string, $Dependency>, machines?: Record<string, $Dependency>);
|
|
14
|
+
constructor(name: string, buckets?: Record<string, $Dependency>, messages?: Record<string, $Dependency>, jobs?: Record<string, $Dependency>, machines?: Record<string, $Dependency>);
|
|
14
15
|
static merge(to: $Externals, from: $Externals): void;
|
|
15
16
|
}
|
|
@@ -6,9 +6,10 @@ exports.$Externals = void 0;
|
|
|
6
6
|
* @subcategory Edge
|
|
7
7
|
*/
|
|
8
8
|
class $Externals {
|
|
9
|
-
constructor(name, buckets = {}, jobs = {}, machines = {}) {
|
|
9
|
+
constructor(name, buckets = {}, messages = {}, jobs = {}, machines = {}) {
|
|
10
10
|
this.name = name;
|
|
11
11
|
this.buckets = buckets;
|
|
12
|
+
this.messages = messages;
|
|
12
13
|
this.jobs = jobs;
|
|
13
14
|
this.machines = machines;
|
|
14
15
|
this.$t = 'externals';
|
|
@@ -16,6 +17,7 @@ class $Externals {
|
|
|
16
17
|
}
|
|
17
18
|
static merge(to, from) {
|
|
18
19
|
Object.assign(to.buckets, from.buckets);
|
|
20
|
+
Object.assign(to.messages, from.messages);
|
|
19
21
|
Object.assign(to.jobs, from.jobs);
|
|
20
22
|
Object.assign(to.machines, from.machines);
|
|
21
23
|
}
|
|
@@ -66,7 +66,7 @@ class MemoryNQLRunner extends nql_engine_1.NQLRunner {
|
|
|
66
66
|
if (pagination.returnTotal) {
|
|
67
67
|
totalItems = output.length;
|
|
68
68
|
}
|
|
69
|
-
if (pagination.page || pagination.perPage) {
|
|
69
|
+
if (pagination.page !== undefined || pagination.perPage !== undefined) {
|
|
70
70
|
const a = ((pagination.page || 1) - 1) * (pagination.perPage || 10);
|
|
71
71
|
const b = a + (pagination.perPage || 10);
|
|
72
72
|
output = output.slice(a, b);
|
|
@@ -10,7 +10,7 @@ import { $BucketGraphLinksInfer } from './graph/bucket_graph.infer';
|
|
|
10
10
|
import { $BucketGraph } from './graph/bucket_graph.schema';
|
|
11
11
|
import { $Dependency, ResolvedBuilderNode } from "../../../engine/dependency";
|
|
12
12
|
import { ModuleTree } from "../../../engine/tree";
|
|
13
|
-
import {
|
|
13
|
+
import { BucketModelpathInfer, BucketModelInfer, BucketQuerypathInfer } from './model/bucket_model.infer';
|
|
14
14
|
import { Overlay } from "../../../engine/util/type";
|
|
15
15
|
import { $Constants } from '../constants/constants.schema';
|
|
16
16
|
import { NesoiObj } from "../../../engine/data/obj";
|
|
@@ -33,14 +33,16 @@ export declare class BucketBuilder<Space extends $Space, Module extends $Module,
|
|
|
33
33
|
constructor(module: string, name: string);
|
|
34
34
|
as(alias: string): this;
|
|
35
35
|
extend<N extends Exclude<BucketName<Module>, Bucket['name']>>(name: N): BucketBuilder<Space, Module, Module["buckets"][N]>;
|
|
36
|
-
model<Def extends BucketModelDef<Space, Module>, Obj = BucketModelInfer<Def>,
|
|
36
|
+
model<Def extends BucketModelDef<Space, Module>, Obj = BucketModelInfer<Def>, Modelpath extends {} = BucketModelpathInfer<Def>, Querypath extends {} = BucketQuerypathInfer<Def>>($: Def): BucketBuilder<Space, Overlay<Module, {
|
|
37
37
|
buckets: Overlay<Module["buckets"], { [K in Bucket["name"]]: Overlay<Bucket, {
|
|
38
38
|
'#data': Obj & NesoiObj;
|
|
39
|
-
'#
|
|
39
|
+
'#modelpath': Modelpath;
|
|
40
|
+
'#querypath': Querypath;
|
|
40
41
|
}>; }>;
|
|
41
42
|
}>, Overlay<Bucket, {
|
|
42
43
|
'#data': Obj & NesoiObj;
|
|
43
|
-
'#
|
|
44
|
+
'#modelpath': Modelpath;
|
|
45
|
+
'#querypath': Querypath;
|
|
44
46
|
}>>;
|
|
45
47
|
/**
|
|
46
48
|
* Optional query to be appended to every read of this bucket, based on the user
|
|
@@ -735,22 +735,13 @@ class Bucket {
|
|
|
735
735
|
if (!this.drive) {
|
|
736
736
|
throw error_1.NesoiError.Bucket.Drive.NoAdapter({ bucket: this.schema.alias });
|
|
737
737
|
}
|
|
738
|
-
|
|
739
|
-
|
|
740
|
-
|
|
741
|
-
|
|
742
|
-
|
|
743
|
-
|
|
744
|
-
|
|
745
|
-
}
|
|
746
|
-
tree_1.Tree.set(obj, field.path, () => remoteFiles);
|
|
747
|
-
}
|
|
748
|
-
else {
|
|
749
|
-
const file = tree_1.Tree.get(obj, field.path);
|
|
750
|
-
const remoteFile = await this.drive.upload(file);
|
|
751
|
-
tree_1.Tree.set(obj, field.path, () => remoteFile);
|
|
752
|
-
}
|
|
753
|
-
}
|
|
738
|
+
await bucket_model_schema_1.$BucketModel.forEachField(this.schema.model, async (field) => {
|
|
739
|
+
if (field.type !== 'file')
|
|
740
|
+
return;
|
|
741
|
+
const file = tree_1.Tree.get(obj, field.path);
|
|
742
|
+
const remoteFile = await this.drive.upload(file);
|
|
743
|
+
tree_1.Tree.set(obj, field.path, () => remoteFile);
|
|
744
|
+
});
|
|
754
745
|
}
|
|
755
746
|
}
|
|
756
747
|
exports.Bucket = Bucket;
|
|
@@ -28,7 +28,8 @@ export declare class $Bucket {
|
|
|
28
28
|
many: boolean;
|
|
29
29
|
optional: boolean;
|
|
30
30
|
}>;
|
|
31
|
-
'#
|
|
31
|
+
'#modelpath': {};
|
|
32
|
+
'#querypath': {};
|
|
32
33
|
'#defaults': Record<string, any>;
|
|
33
34
|
constructor(module: string, name: string, alias: string, model: $BucketModel, graph: $BucketGraph, views: $BucketViews, tenancy?: $BucketTenancy<any, any> | undefined, extended?: $Dependency | undefined);
|
|
34
35
|
}
|
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
import { Overlay } from "../../../../engine/util/type";
|
|
2
2
|
import { $BucketGraphLink } from './bucket_graph.schema';
|
|
3
|
-
import {
|
|
3
|
+
import { BucketGraphLinkBuilders } from './bucket_graph_link.builder';
|
|
4
|
+
type Replace<T extends string> = T extends `${infer L}$${infer R}` ? `${L}${string}${Replace<R>}` : T;
|
|
4
5
|
export type $BucketGraphLinksInfer<Builders extends BucketGraphLinkBuilders> = {
|
|
5
|
-
[K in keyof Builders
|
|
6
|
-
'#bucket':
|
|
7
|
-
'#data':
|
|
8
|
-
}
|
|
6
|
+
[K in keyof Builders as Replace<K & string>]: Overlay<$BucketGraphLink, {
|
|
7
|
+
'#bucket': Builders[K]['#other'];
|
|
8
|
+
'#data': Builders[K]['#other']['#data'];
|
|
9
|
+
}>;
|
|
9
10
|
};
|
|
11
|
+
export {};
|
|
@@ -8,7 +8,7 @@ import { NQL_AnyQuery, NQL_Query } from '../query/nql.schema';
|
|
|
8
8
|
* @category Builders
|
|
9
9
|
* @subcategory Entity
|
|
10
10
|
* */
|
|
11
|
-
export declare class BucketGraphLinkFactory<Module extends $Module, SelfBucket extends $Bucket, Fieldpaths = NoInfer<SelfBucket['#
|
|
11
|
+
export declare class BucketGraphLinkFactory<Module extends $Module, SelfBucket extends $Bucket, Fieldpaths = NoInfer<SelfBucket['#modelpath']>> {
|
|
12
12
|
private module;
|
|
13
13
|
private alias?;
|
|
14
14
|
private type;
|
|
@@ -28,6 +28,7 @@ export declare class BucketGraphLinkBuilder<Module extends $Module, SelfBucket e
|
|
|
28
28
|
private query;
|
|
29
29
|
private many;
|
|
30
30
|
private alias?;
|
|
31
|
+
'#other': OtherBucket;
|
|
31
32
|
private _optional;
|
|
32
33
|
constructor(bucket: $Dependency, rel: 'aggregation' | 'composition', query: NQL_AnyQuery, many: boolean, alias?: string | undefined);
|
|
33
34
|
as(alias: string): this;
|
|
@@ -13,5 +13,5 @@ export declare class BucketModelBuilder<Module extends $Module> {
|
|
|
13
13
|
static build(builder: BucketModelBuilder<any>): $BucketModel;
|
|
14
14
|
}
|
|
15
15
|
export type BucketModelDef<Space extends $Space, Module extends $Module> = ($: BucketModelFieldFactory<Space, Module>) => {
|
|
16
|
-
id: BucketModelFieldBuilder<Module, any>;
|
|
16
|
+
id: BucketModelFieldBuilder<Module, any, any, any, any, any>;
|
|
17
17
|
} & BucketModelFieldBuilders<Module>;
|
|
@@ -5,7 +5,7 @@ import { $Message } from "../../message/message.schema";
|
|
|
5
5
|
* @category Elements
|
|
6
6
|
* @subcategory Entity
|
|
7
7
|
* */
|
|
8
|
-
export declare function convertToView<Model extends $BucketModel>(model: Model, name: string, fields?: $BucketModelFields, path?: string): $BucketView;
|
|
8
|
+
export declare function convertToView<Model extends $BucketModel>(model: Model, name: string, fields?: $BucketModelFields, path?: string, depth?: number): $BucketView;
|
|
9
9
|
/**
|
|
10
10
|
* @category Elements
|
|
11
11
|
* @subcategory Entity
|
|
@@ -13,7 +13,7 @@ const dependency_1 = require("../../../../engine/dependency");
|
|
|
13
13
|
* @category Elements
|
|
14
14
|
* @subcategory Entity
|
|
15
15
|
* */
|
|
16
|
-
function convertToView(model, name, fields = model.fields, path) {
|
|
16
|
+
function convertToView(model, name, fields = model.fields, path, depth = 0) {
|
|
17
17
|
const view = new bucket_view_builder_1.BucketViewBuilder(name);
|
|
18
18
|
const convertFields = (fields) => {
|
|
19
19
|
const viewFields = {};
|
|
@@ -24,7 +24,7 @@ function convertToView(model, name, fields = model.fields, path) {
|
|
|
24
24
|
+ field.name;
|
|
25
25
|
const builder = $.model(key);
|
|
26
26
|
const graph = new bucket_graph_schema_1.$BucketGraph();
|
|
27
|
-
viewFields[f] = bucket_view_field_builder_1.BucketViewFieldBuilder.build(builder, model, graph, {}, field.name);
|
|
27
|
+
viewFields[f] = bucket_view_field_builder_1.BucketViewFieldBuilder.build(builder, model, graph, {}, field.name, depth);
|
|
28
28
|
}
|
|
29
29
|
return viewFields;
|
|
30
30
|
};
|
|
@@ -36,12 +36,12 @@ function convertToView(model, name, fields = model.fields, path) {
|
|
|
36
36
|
* */
|
|
37
37
|
function convertToMessage(module, model, name, alias, include = [], exclude = []) {
|
|
38
38
|
const convertField = (field) => {
|
|
39
|
-
return new message_template_schema_1.$MessageTemplateField(field.type, field.name, field.alias, field.path, field.path, field.
|
|
39
|
+
return new message_template_schema_1.$MessageTemplateField(field.type, field.name, field.alias, field.path, field.path, field.required, undefined, false, [], {
|
|
40
40
|
enum: field.meta?.enum ? {
|
|
41
41
|
options: field.meta.enum.options,
|
|
42
42
|
dep: field.meta.enum.dep ? new dependency_1.$Dependency(module, 'constants', `${field.meta.enum.dep.module}::${field.meta.enum.dep.name}`) : undefined
|
|
43
43
|
} : undefined
|
|
44
|
-
}, field.children ? convertFields(field.children, include, exclude) : undefined
|
|
44
|
+
}, field.children ? convertFields(field.children, include, exclude) : undefined);
|
|
45
45
|
};
|
|
46
46
|
const convertFields = (fields, include = [], exclude = [], root = '') => {
|
|
47
47
|
const msgFields = {};
|
|
@@ -1,13 +1,49 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { UnionToIntersection } from "../../../../engine/util/type";
|
|
2
2
|
import { BucketModelDef } from './bucket_model.builder';
|
|
3
|
-
import {
|
|
4
|
-
export type BucketModelObjInfer<
|
|
5
|
-
[K in keyof
|
|
3
|
+
import { AnyBucketModelFieldBuilder, BucketModelFieldBuilders } from './bucket_model_field.builder';
|
|
4
|
+
export type BucketModelObjInfer<Fields extends BucketModelFieldBuilders<any>, Prefix = ''> = {
|
|
5
|
+
[K in keyof Fields as Fields[K]['#optional'][1] extends true ? never : `${Prefix & string}${K & string}`]: Fields[K]['#output'];
|
|
6
|
+
} & {
|
|
7
|
+
[K in keyof Fields as Fields[K]['#optional'][1] extends true ? `${Prefix & string}${K & string}` : never]?: Fields[K]['#output'];
|
|
6
8
|
};
|
|
7
9
|
export type BucketModelInfer<Def extends BucketModelDef<any, any>> = BucketModelObjInfer<ReturnType<Def>>;
|
|
8
|
-
|
|
9
|
-
[K in keyof Builders]:
|
|
10
|
-
[J in keyof
|
|
11
|
-
}
|
|
10
|
+
type BucketModelpathRawInfer<Builders extends BucketModelFieldBuilders<any>> = UnionToIntersection<{
|
|
11
|
+
[K in keyof Builders]: {
|
|
12
|
+
[J in keyof Builders[K]['#modelpath'] as `${K & string}${J & string}`]: Builders[K]['#modelpath'][J];
|
|
13
|
+
};
|
|
12
14
|
}[keyof Builders]>;
|
|
13
|
-
export type
|
|
15
|
+
export type BucketModelpathObjInfer<Builders extends BucketModelFieldBuilders<any>> = UnionToIntersection<{
|
|
16
|
+
[K in keyof Builders]: {
|
|
17
|
+
[J in keyof Builders[K]['#modelpath'] as `.${K & string}${J & string}`]: Builders[K]['#modelpath'][J];
|
|
18
|
+
};
|
|
19
|
+
}[keyof Builders]>;
|
|
20
|
+
export type BucketModelpathListInfer<Builder extends AnyBucketModelFieldBuilder> = {
|
|
21
|
+
[J in keyof Builder['#modelpath'] as `.$${number}${J & string}` | `.${number}${J & string}`]: Builder['#modelpath'][J];
|
|
22
|
+
} & {
|
|
23
|
+
[J in keyof Builder['#modelpath'] as `.${'*'}${J & string}`]: Builder['#modelpath'][J][];
|
|
24
|
+
};
|
|
25
|
+
export type BucketModelpathDictInfer<Builder extends AnyBucketModelFieldBuilder> = {
|
|
26
|
+
[J in keyof Builder['#modelpath'] as `.$${number}${J & string}` | `.${string}${J & string}`]: Builder['#modelpath'][J];
|
|
27
|
+
} & {
|
|
28
|
+
[J in keyof Builder['#modelpath'] as `.${'*'}${J & string}`]: Record<string, Builder['#modelpath'][J]>;
|
|
29
|
+
};
|
|
30
|
+
export type BucketModelpathUnionInfer<Builders extends AnyBucketModelFieldBuilder[]> = Builders[0]['#modelpath'] | Builders[1]['#modelpath'];
|
|
31
|
+
export type BucketModelpathInfer<Def extends BucketModelDef<any, any>> = BucketModelpathRawInfer<ReturnType<Def>>;
|
|
32
|
+
type BucketQuerypathRawInfer<Builders extends BucketModelFieldBuilders<any>> = {
|
|
33
|
+
[K in keyof Builders]: {
|
|
34
|
+
[J in keyof Builders[K]['#querypath'] as `${K & string}${J & string}`]: Builders[K]['#querypath'][J];
|
|
35
|
+
};
|
|
36
|
+
}[keyof Builders];
|
|
37
|
+
export type BucketQuerypathObjInfer<Builders extends BucketModelFieldBuilders<any>> = UnionToIntersection<{
|
|
38
|
+
[K in keyof Builders]: {
|
|
39
|
+
[J in keyof Builders[K]['#querypath'] as `.${K & string}${J & string}`]: Builders[K]['#querypath'][J];
|
|
40
|
+
};
|
|
41
|
+
}[keyof Builders]>;
|
|
42
|
+
export type BucketQuerypathListInfer<Builder extends AnyBucketModelFieldBuilder> = {
|
|
43
|
+
[J in keyof Builder['#querypath'] as `.${number | '#' | '*'}${J & string}`]: Builder['#querypath'][J];
|
|
44
|
+
};
|
|
45
|
+
export type BucketQuerypathDictInfer<Builder extends AnyBucketModelFieldBuilder> = {
|
|
46
|
+
[J in keyof Builder['#querypath'] as `.${string | '#' | '*'}${J & string}`]: Builder['#querypath'][J];
|
|
47
|
+
};
|
|
48
|
+
export type BucketQuerypathInfer<Def extends BucketModelDef<any, any>> = UnionToIntersection<BucketQuerypathRawInfer<ReturnType<Def>>>;
|
|
49
|
+
export {};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { $Dependency } from "../../../../engine/dependency";
|
|
2
|
-
export type $BucketModelFieldType = 'boolean' | 'date' | 'datetime' | 'duration' | 'decimal' | 'enum' | 'file' | 'float' | 'int' | 'string' | 'obj' | 'unknown' | 'dict';
|
|
2
|
+
export type $BucketModelFieldType = 'boolean' | 'date' | 'datetime' | 'duration' | 'decimal' | 'enum' | 'file' | 'float' | 'int' | 'string' | 'obj' | 'unknown' | 'dict' | 'list' | 'union';
|
|
3
3
|
export type $BucketModelFieldCrypto = {
|
|
4
4
|
algorithm: string;
|
|
5
5
|
key: string;
|
|
@@ -13,7 +13,6 @@ export declare class $BucketModelField {
|
|
|
13
13
|
path: string;
|
|
14
14
|
type: $BucketModelFieldType;
|
|
15
15
|
alias: string;
|
|
16
|
-
array: boolean;
|
|
17
16
|
required: boolean;
|
|
18
17
|
meta?: {
|
|
19
18
|
enum?: {
|
|
@@ -31,10 +30,9 @@ export declare class $BucketModelField {
|
|
|
31
30
|
} | undefined;
|
|
32
31
|
defaultValue?: any | undefined;
|
|
33
32
|
children?: $BucketModelFields | undefined;
|
|
34
|
-
or?: $BucketModelField | undefined;
|
|
35
33
|
crypto?: $BucketModelFieldCrypto | undefined;
|
|
36
34
|
$t: string;
|
|
37
|
-
constructor(name: string, path: string, type: $BucketModelFieldType, alias: string,
|
|
35
|
+
constructor(name: string, path: string, type: $BucketModelFieldType, alias: string, required: boolean, meta?: {
|
|
38
36
|
enum?: {
|
|
39
37
|
options: string | string[];
|
|
40
38
|
dep?: $Dependency;
|
|
@@ -47,7 +45,7 @@ export declare class $BucketModelField {
|
|
|
47
45
|
extnames?: string[];
|
|
48
46
|
maxsize?: number;
|
|
49
47
|
};
|
|
50
|
-
} | undefined, defaultValue?: any | undefined, children?: $BucketModelFields | undefined,
|
|
48
|
+
} | undefined, defaultValue?: any | undefined, children?: $BucketModelFields | undefined, crypto?: $BucketModelFieldCrypto | undefined);
|
|
51
49
|
}
|
|
52
50
|
export type $BucketModelFields = {
|
|
53
51
|
[x: string]: $BucketModelField;
|
|
@@ -67,6 +65,7 @@ export declare class $BucketModel {
|
|
|
67
65
|
constructor(fields: $BucketModelFields & {
|
|
68
66
|
id: $BucketModelField;
|
|
69
67
|
}, defaults?: Record<string, any>, hasFileField?: boolean, hasEncryptedField?: boolean);
|
|
70
|
-
static
|
|
68
|
+
static getField(model: $BucketModel, modelpath: string): $BucketModelField[];
|
|
71
69
|
static fieldsOfType(model: $BucketModel, type: $BucketModelFieldType): $BucketModelField[];
|
|
70
|
+
static forEachField(template: $BucketModel, predicate: (field: $BucketModelField, unionKey?: number) => Promise<void>): Promise<void>;
|
|
72
71
|
}
|
|
@@ -6,17 +6,15 @@ exports.$BucketModel = exports.$BucketModelField = void 0;
|
|
|
6
6
|
* @subcategory Entity
|
|
7
7
|
* */
|
|
8
8
|
class $BucketModelField {
|
|
9
|
-
constructor(name, path, type, alias,
|
|
9
|
+
constructor(name, path, type, alias, required, meta, defaultValue, children, crypto) {
|
|
10
10
|
this.name = name;
|
|
11
11
|
this.path = path;
|
|
12
12
|
this.type = type;
|
|
13
13
|
this.alias = alias;
|
|
14
|
-
this.array = array;
|
|
15
14
|
this.required = required;
|
|
16
15
|
this.meta = meta;
|
|
17
16
|
this.defaultValue = defaultValue;
|
|
18
17
|
this.children = children;
|
|
19
|
-
this.or = or;
|
|
20
18
|
this.crypto = crypto;
|
|
21
19
|
this.$t = 'bucket.model.field';
|
|
22
20
|
}
|
|
@@ -34,26 +32,54 @@ class $BucketModel {
|
|
|
34
32
|
this.hasEncryptedField = hasEncryptedField;
|
|
35
33
|
this.$t = 'bucket.model';
|
|
36
34
|
}
|
|
37
|
-
static
|
|
38
|
-
const paths =
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
35
|
+
static getField(model, modelpath) {
|
|
36
|
+
const paths = modelpath.split('.');
|
|
37
|
+
const results = [];
|
|
38
|
+
let poll = [{ i: 0, field: { children: model.fields } }];
|
|
39
|
+
while (poll.length) {
|
|
40
|
+
const next = [];
|
|
41
|
+
for (const item of poll) {
|
|
42
|
+
const path = paths[item.i];
|
|
43
|
+
if (!path) {
|
|
44
|
+
results.push(item.field);
|
|
45
|
+
continue;
|
|
46
|
+
}
|
|
47
|
+
const field = item.field;
|
|
48
|
+
// If the field is a union, add all of it's children with the same path index
|
|
49
|
+
if (field.type === 'union') {
|
|
50
|
+
next.push(...Object.values(field.children).map(field => ({
|
|
51
|
+
i: item.i,
|
|
52
|
+
field
|
|
53
|
+
})));
|
|
54
|
+
continue;
|
|
55
|
+
}
|
|
56
|
+
// If it's a list or dict, or an object
|
|
57
|
+
if (field.type === 'list' || field.type === 'dict') {
|
|
58
|
+
// If not, iterate
|
|
59
|
+
next.push({
|
|
60
|
+
i: item.i + 1,
|
|
61
|
+
field: field.children['#']
|
|
62
|
+
});
|
|
63
|
+
continue;
|
|
64
|
+
}
|
|
65
|
+
// If it's an object, walk it's children
|
|
66
|
+
if (field.type === 'obj' && path === '*') {
|
|
67
|
+
next.push(...Object.values(field.children).map(field => ({
|
|
68
|
+
i: item.i + 1,
|
|
69
|
+
field
|
|
70
|
+
})));
|
|
71
|
+
}
|
|
72
|
+
const child = field.children[path];
|
|
73
|
+
if (child) {
|
|
74
|
+
next.push({
|
|
75
|
+
i: item.i + 1,
|
|
76
|
+
field: child
|
|
77
|
+
});
|
|
78
|
+
}
|
|
53
79
|
}
|
|
54
|
-
|
|
80
|
+
poll = next;
|
|
55
81
|
}
|
|
56
|
-
return
|
|
82
|
+
return results;
|
|
57
83
|
}
|
|
58
84
|
static fieldsOfType(model, type) {
|
|
59
85
|
const fields = [];
|
|
@@ -72,5 +98,22 @@ class $BucketModel {
|
|
|
72
98
|
}
|
|
73
99
|
return fields;
|
|
74
100
|
}
|
|
101
|
+
static async forEachField(template, predicate) {
|
|
102
|
+
let poll = Object.values(template.fields).map(field => ({ field }));
|
|
103
|
+
while (poll.length) {
|
|
104
|
+
const next = [];
|
|
105
|
+
for (const obj of poll) {
|
|
106
|
+
await predicate(obj.field, obj.unionKey);
|
|
107
|
+
if (obj.field.children) {
|
|
108
|
+
next.push(...Object.values(obj.field.children)
|
|
109
|
+
.map((field, i) => ({
|
|
110
|
+
field,
|
|
111
|
+
unionKey: obj.field.type === 'union' ? i : undefined
|
|
112
|
+
})));
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
poll = next;
|
|
116
|
+
}
|
|
117
|
+
}
|
|
75
118
|
}
|
|
76
119
|
exports.$BucketModel = $BucketModel;
|