nesoi 3.0.21 → 3.1.1
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/2_build_typescript_stage.js +1 -0
- 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 +3 -2
- package/lib/compiler/elements/bucket.element.js +86 -128
- package/lib/compiler/elements/element.js +4 -2
- package/lib/compiler/elements/externals.element.js +3 -0
- package/lib/compiler/elements/machine.element.js +2 -2
- package/lib/compiler/elements/message.element.js +35 -57
- package/lib/compiler/elements/queue.element.js +1 -1
- package/lib/compiler/helpers/dump_helpers.d.ts +5 -3
- package/lib/compiler/helpers/dump_helpers.js +43 -26
- 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/bucket_adapter.d.ts +1 -1
- package/lib/elements/entities/bucket/adapters/memory.bucket_adapter.d.ts +7 -0
- package/lib/elements/entities/bucket/adapters/memory.bucket_adapter.js +46 -36
- 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 +42 -43
- package/lib/elements/entities/bucket/bucket.schema.d.ts +2 -1
- package/lib/elements/entities/bucket/cache/bucket_cache.d.ts +1 -4
- 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 +41 -9
- package/lib/elements/entities/bucket/model/bucket_model.schema.d.ts +8 -6
- package/lib/elements/entities/bucket/model/bucket_model.schema.js +184 -21
- package/lib/elements/entities/bucket/model/bucket_model_field.builder.d.ts +89 -56
- 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.infer.d.ts +6 -30
- package/lib/elements/entities/message/message.schema.js +2 -2
- package/lib/elements/entities/message/template/message_template.builder.js +1 -1
- package/lib/elements/entities/message/template/message_template.schema.d.ts +10 -15
- package/lib/elements/entities/message/template/message_template.schema.js +29 -12
- package/lib/elements/entities/message/template/message_template_field.builder.d.ts +45 -209
- package/lib/elements/entities/message/template/message_template_field.builder.js +69 -85
- package/lib/elements/entities/message/template/message_template_parser.js +52 -64
- package/lib/engine/apps/inline.app.js +1 -0
- 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/space.js +1 -1
- package/lib/engine/transaction/trx_engine.config.d.ts +3 -2
- package/lib/engine/transaction/trx_engine.d.ts +9 -1
- package/lib/engine/transaction/trx_engine.js +52 -9
- package/lib/engine/util/deep.js +4 -0
- package/lib/engine/util/parse.d.ts +22 -14
- package/lib/engine/util/parse.js +20 -5
- 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
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { $Dependency } from "../../../../engine/dependency";
|
|
2
|
-
|
|
2
|
+
import { BucketAdapterConfig } from '../adapters/bucket_adapter';
|
|
3
|
+
export type $BucketModelFieldType = 'boolean' | 'date' | 'datetime' | 'duration' | 'decimal' | 'enum' | 'file' | 'float' | 'int' | 'string' | 'obj' | 'unknown' | 'dict' | 'list' | 'union';
|
|
3
4
|
export type $BucketModelFieldCrypto = {
|
|
4
5
|
algorithm: string;
|
|
5
6
|
key: string;
|
|
@@ -13,7 +14,6 @@ export declare class $BucketModelField {
|
|
|
13
14
|
path: string;
|
|
14
15
|
type: $BucketModelFieldType;
|
|
15
16
|
alias: string;
|
|
16
|
-
array: boolean;
|
|
17
17
|
required: boolean;
|
|
18
18
|
meta?: {
|
|
19
19
|
enum?: {
|
|
@@ -31,10 +31,9 @@ export declare class $BucketModelField {
|
|
|
31
31
|
} | undefined;
|
|
32
32
|
defaultValue?: any | undefined;
|
|
33
33
|
children?: $BucketModelFields | undefined;
|
|
34
|
-
or?: $BucketModelField | undefined;
|
|
35
34
|
crypto?: $BucketModelFieldCrypto | undefined;
|
|
36
35
|
$t: string;
|
|
37
|
-
constructor(name: string, path: string, type: $BucketModelFieldType, alias: string,
|
|
36
|
+
constructor(name: string, path: string, type: $BucketModelFieldType, alias: string, required: boolean, meta?: {
|
|
38
37
|
enum?: {
|
|
39
38
|
options: string | string[];
|
|
40
39
|
dep?: $Dependency;
|
|
@@ -47,7 +46,7 @@ export declare class $BucketModelField {
|
|
|
47
46
|
extnames?: string[];
|
|
48
47
|
maxsize?: number;
|
|
49
48
|
};
|
|
50
|
-
} | undefined, defaultValue?: any | undefined, children?: $BucketModelFields | undefined,
|
|
49
|
+
} | undefined, defaultValue?: any | undefined, children?: $BucketModelFields | undefined, crypto?: $BucketModelFieldCrypto | undefined);
|
|
51
50
|
}
|
|
52
51
|
export type $BucketModelFields = {
|
|
53
52
|
[x: string]: $BucketModelField;
|
|
@@ -67,6 +66,9 @@ export declare class $BucketModel {
|
|
|
67
66
|
constructor(fields: $BucketModelFields & {
|
|
68
67
|
id: $BucketModelField;
|
|
69
68
|
}, defaults?: Record<string, any>, hasFileField?: boolean, hasEncryptedField?: boolean);
|
|
70
|
-
static
|
|
69
|
+
static getField(model: $BucketModel, modelpath: string): $BucketModelField[];
|
|
71
70
|
static fieldsOfType(model: $BucketModel, type: $BucketModelFieldType): $BucketModelField[];
|
|
71
|
+
static forEachField(model: $BucketModel, predicate: (field: $BucketModelField, path: string) => void): void;
|
|
72
|
+
static copy<T extends Record<string, any>>(model: $BucketModel, obj: T, meta?: BucketAdapterConfig['meta']): T;
|
|
73
|
+
static getModelpaths(model: $BucketModel): Record<string, $BucketModelField[]>;
|
|
72
74
|
}
|
|
@@ -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,55 @@ 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 and the path is '*', walk all of 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
|
+
continue;
|
|
72
|
+
}
|
|
73
|
+
const child = field.children[path];
|
|
74
|
+
if (child) {
|
|
75
|
+
next.push({
|
|
76
|
+
i: item.i + 1,
|
|
77
|
+
field: child
|
|
78
|
+
});
|
|
79
|
+
}
|
|
53
80
|
}
|
|
54
|
-
|
|
81
|
+
poll = next;
|
|
55
82
|
}
|
|
56
|
-
return
|
|
83
|
+
return results;
|
|
57
84
|
}
|
|
58
85
|
static fieldsOfType(model, type) {
|
|
59
86
|
const fields = [];
|
|
@@ -72,5 +99,141 @@ class $BucketModel {
|
|
|
72
99
|
}
|
|
73
100
|
return fields;
|
|
74
101
|
}
|
|
102
|
+
static forEachField(model, predicate) {
|
|
103
|
+
let poll = Object.entries(model.fields).map(([path, field]) => ({ path, field }));
|
|
104
|
+
while (poll.length) {
|
|
105
|
+
const next = [];
|
|
106
|
+
for (const obj of poll) {
|
|
107
|
+
predicate(obj.field, obj.path);
|
|
108
|
+
if (obj.field.children) {
|
|
109
|
+
next.push(...Object.values(obj.field.children)
|
|
110
|
+
.map((field, i) => ({
|
|
111
|
+
field,
|
|
112
|
+
path: obj.path + '.' + (obj.field.type === 'union' ? i : field.name)
|
|
113
|
+
})));
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
poll = next;
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
static copy(model, obj, meta = {
|
|
120
|
+
created_at: 'created_at',
|
|
121
|
+
created_by: 'created_by',
|
|
122
|
+
updated_at: 'updated_at',
|
|
123
|
+
updated_by: 'updated_by',
|
|
124
|
+
}) {
|
|
125
|
+
const copy = {};
|
|
126
|
+
let poll = Object.entries(model.fields).map(([path, field]) => ({ path, obj, copy, field }));
|
|
127
|
+
while (poll.length) {
|
|
128
|
+
const next = [];
|
|
129
|
+
for (const entry of poll) {
|
|
130
|
+
const val = obj[entry.path];
|
|
131
|
+
if (val === undefined) {
|
|
132
|
+
continue;
|
|
133
|
+
}
|
|
134
|
+
if (val === null) {
|
|
135
|
+
copy[entry.path] = null;
|
|
136
|
+
continue;
|
|
137
|
+
}
|
|
138
|
+
if (entry.field.type === 'list') {
|
|
139
|
+
if (!Array.isArray(val))
|
|
140
|
+
continue;
|
|
141
|
+
copy[entry.path] = [];
|
|
142
|
+
next.push(...val.map((_, i) => ({
|
|
143
|
+
path: i.toString(),
|
|
144
|
+
obj: val,
|
|
145
|
+
copy: copy[entry.path],
|
|
146
|
+
field: entry.field.children['*']
|
|
147
|
+
})));
|
|
148
|
+
}
|
|
149
|
+
else if (entry.field.type === 'dict') {
|
|
150
|
+
if (typeof val !== 'object' || Array.isArray(val))
|
|
151
|
+
continue;
|
|
152
|
+
copy[entry.path] = {};
|
|
153
|
+
next.push(...Object.keys(val).map((path) => ({
|
|
154
|
+
path,
|
|
155
|
+
obj: val,
|
|
156
|
+
copy: copy[entry.path],
|
|
157
|
+
field: entry.field.children['*']
|
|
158
|
+
})));
|
|
159
|
+
}
|
|
160
|
+
else if (entry.field.type === 'obj') {
|
|
161
|
+
if (typeof val !== 'object' || Array.isArray(val))
|
|
162
|
+
continue;
|
|
163
|
+
copy[entry.path] = {};
|
|
164
|
+
next.push(...Object.keys(entry.field.children).map(path => ({
|
|
165
|
+
path: path,
|
|
166
|
+
obj: val,
|
|
167
|
+
copy: copy[entry.path],
|
|
168
|
+
field: entry.field.children[path]
|
|
169
|
+
})));
|
|
170
|
+
}
|
|
171
|
+
else if (entry.field.type === 'union') {
|
|
172
|
+
// TODO: ??????????
|
|
173
|
+
copy[entry.path] = obj[entry.path];
|
|
174
|
+
}
|
|
175
|
+
else {
|
|
176
|
+
copy[entry.path] = obj[entry.path];
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
poll = next;
|
|
180
|
+
}
|
|
181
|
+
copy[meta.created_at] = obj[meta.created_at];
|
|
182
|
+
copy[meta.created_by] = obj[meta.created_by];
|
|
183
|
+
copy[meta.updated_at] = obj[meta.updated_at];
|
|
184
|
+
copy[meta.updated_by] = obj[meta.updated_by];
|
|
185
|
+
return copy;
|
|
186
|
+
}
|
|
187
|
+
static getModelpaths(model) {
|
|
188
|
+
const modelpaths = {};
|
|
189
|
+
let poll = Object.entries(model.fields).map(([path, field]) => ({ path, field }));
|
|
190
|
+
while (poll.length) {
|
|
191
|
+
const next = [];
|
|
192
|
+
for (const obj of poll) {
|
|
193
|
+
if (obj.field.type === 'union') {
|
|
194
|
+
modelpaths[obj.path] = [obj.field];
|
|
195
|
+
}
|
|
196
|
+
else {
|
|
197
|
+
modelpaths[obj.path] = [obj.field];
|
|
198
|
+
if (obj.field.children) {
|
|
199
|
+
if (obj.field.type === 'dict') {
|
|
200
|
+
modelpaths[obj.path + '{*}'] = [obj.field.children['#']];
|
|
201
|
+
}
|
|
202
|
+
else if (obj.field.type === 'list') {
|
|
203
|
+
modelpaths[obj.path + '[*]'] = [obj.field.children['#']];
|
|
204
|
+
}
|
|
205
|
+
else if (obj.field.type === 'obj') {
|
|
206
|
+
modelpaths[obj.path + '{*}'] = Object.values(obj.field.children);
|
|
207
|
+
}
|
|
208
|
+
for (const key in obj.field.children) {
|
|
209
|
+
const child = obj.field.children[key];
|
|
210
|
+
if (obj.field.type === 'dict') {
|
|
211
|
+
modelpaths[obj.path + '{$${number}}'] = [child];
|
|
212
|
+
next.push({
|
|
213
|
+
field: child,
|
|
214
|
+
path: obj.path + '{${string}}'
|
|
215
|
+
});
|
|
216
|
+
}
|
|
217
|
+
else if (obj.field.type === 'list') {
|
|
218
|
+
modelpaths[obj.path + '[$${number}]'] = [child];
|
|
219
|
+
next.push({
|
|
220
|
+
field: child,
|
|
221
|
+
path: obj.path + '[${number}]'
|
|
222
|
+
});
|
|
223
|
+
}
|
|
224
|
+
else {
|
|
225
|
+
next.push({
|
|
226
|
+
field: child,
|
|
227
|
+
path: obj.path + '.' + child.name
|
|
228
|
+
});
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
poll = next;
|
|
235
|
+
}
|
|
236
|
+
return modelpaths;
|
|
237
|
+
}
|
|
75
238
|
}
|
|
76
239
|
exports.$BucketModel = $BucketModel;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { $Module, $Space } from "../../../../schema";
|
|
2
2
|
import { $BucketModelField, $BucketModelFieldType, $BucketModelFields } from './bucket_model.schema';
|
|
3
3
|
import { NesoiDate } from "../../../../engine/data/date";
|
|
4
|
-
import {
|
|
4
|
+
import { BucketModelpathObjInfer, BucketModelpathDictInfer, BucketModelpathListInfer, BucketModelObjInfer, BucketQuerypathDictInfer, BucketQuerypathListInfer, BucketQuerypathObjInfer, BucketModelpathUnionInfer } from './bucket_model.infer';
|
|
5
5
|
import { EnumFromName, EnumName } from '../../constants/constants.schema';
|
|
6
6
|
import { NesoiDecimal } from "../../../../engine/data/decimal";
|
|
7
7
|
import { NesoiDatetime } from "../../../../engine/data/datetime";
|
|
@@ -16,111 +16,144 @@ export declare class BucketModelFieldFactory<Space extends $Space, Module extend
|
|
|
16
16
|
constructor(module: string);
|
|
17
17
|
private alias?;
|
|
18
18
|
as(alias: string): Omit<typeof this, "as">;
|
|
19
|
-
get any(): BucketModelFieldBuilder<Module, any,
|
|
19
|
+
get any(): BucketModelFieldBuilder<Module, any, any, [false, false], {
|
|
20
|
+
'': any;
|
|
21
|
+
}, {
|
|
20
22
|
'': any;
|
|
21
23
|
}>;
|
|
22
|
-
get boolean(): BucketModelFieldBuilder<Module, boolean,
|
|
24
|
+
get boolean(): BucketModelFieldBuilder<Module, boolean, boolean, [false, false], {
|
|
25
|
+
'': boolean;
|
|
26
|
+
}, {
|
|
23
27
|
'': boolean;
|
|
24
28
|
}>;
|
|
25
|
-
get date(): BucketModelFieldBuilder<Module, NesoiDate,
|
|
29
|
+
get date(): BucketModelFieldBuilder<Module, NesoiDate, NesoiDate, [false, false], {
|
|
30
|
+
'': NesoiDate;
|
|
31
|
+
}, {
|
|
26
32
|
'': NesoiDate;
|
|
27
33
|
}>;
|
|
28
|
-
get datetime(): BucketModelFieldBuilder<Module, NesoiDatetime,
|
|
34
|
+
get datetime(): BucketModelFieldBuilder<Module, NesoiDatetime, NesoiDatetime, [false, false], {
|
|
35
|
+
'': NesoiDatetime;
|
|
36
|
+
}, {
|
|
29
37
|
'': NesoiDatetime;
|
|
30
38
|
}>;
|
|
31
|
-
get duration(): BucketModelFieldBuilder<Module, NesoiDuration,
|
|
39
|
+
get duration(): BucketModelFieldBuilder<Module, NesoiDuration, NesoiDuration, [false, false], {
|
|
40
|
+
'': NesoiDuration;
|
|
41
|
+
}, {
|
|
32
42
|
'': NesoiDuration;
|
|
33
43
|
}>;
|
|
34
44
|
decimal(def?: {
|
|
35
45
|
left?: number;
|
|
36
46
|
right?: number;
|
|
37
|
-
}): BucketModelFieldBuilder<Module, NesoiDecimal,
|
|
47
|
+
}): BucketModelFieldBuilder<Module, NesoiDecimal, NesoiDecimal, [false, false], {
|
|
48
|
+
'': NesoiDecimal;
|
|
49
|
+
}, {
|
|
38
50
|
'': NesoiDecimal;
|
|
39
51
|
}>;
|
|
40
|
-
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],
|
|
41
|
-
'': Options extends string ? EnumFromName<Space, Options>["#data"] : Options extends (infer X)[] | readonly (infer X)[] ? X : Options[keyof Options];
|
|
52
|
+
enum<Enums extends EnumName<Space>, Options extends (keyof Enums & string) | (readonly string[])>(options: Options): BucketModelFieldBuilder<Module, Options extends string ? keyof EnumFromName<Space, Options>["#data"] : Options extends (infer X)[] | readonly (infer X)[] ? X : Options[keyof Options], Options extends string ? keyof EnumFromName<Space, Options>["#data"] : Options extends (infer X)[] | readonly (infer X)[] ? X : Options[keyof Options], [false, false], {
|
|
53
|
+
'': Options extends string ? keyof EnumFromName<Space, Options>["#data"] : Options extends (infer X)[] | readonly (infer X)[] ? X : Options[keyof Options];
|
|
54
|
+
}, {
|
|
55
|
+
'': Options extends string ? keyof EnumFromName<Space, Options>["#data"] : Options extends (infer X)[] | readonly (infer X)[] ? X : Options[keyof Options];
|
|
42
56
|
}>;
|
|
43
|
-
get int(): BucketModelFieldBuilder<Module, number,
|
|
57
|
+
get int(): BucketModelFieldBuilder<Module, number, number, [false, false], {
|
|
58
|
+
'': number;
|
|
59
|
+
}, {
|
|
44
60
|
'': number;
|
|
45
61
|
}>;
|
|
46
|
-
get float(): BucketModelFieldBuilder<Module, number,
|
|
62
|
+
get float(): BucketModelFieldBuilder<Module, number, number, [false, false], {
|
|
63
|
+
'': number;
|
|
64
|
+
}, {
|
|
47
65
|
'': number;
|
|
48
66
|
}>;
|
|
49
|
-
get string(): BucketModelFieldBuilder<Module, string,
|
|
67
|
+
get string(): BucketModelFieldBuilder<Module, string, string, [false, false], {
|
|
68
|
+
'': string;
|
|
69
|
+
}, {
|
|
50
70
|
'': string;
|
|
51
71
|
}>;
|
|
72
|
+
file(def?: {
|
|
73
|
+
extnames?: string[];
|
|
74
|
+
maxsize?: number;
|
|
75
|
+
}): BucketModelFieldBuilder<Module, NesoiFile, NesoiFile, [false, false], {
|
|
76
|
+
'': NesoiFile;
|
|
77
|
+
}, {
|
|
78
|
+
'': NesoiFile;
|
|
79
|
+
}>;
|
|
52
80
|
/**
|
|
53
81
|
* An object with a specific set of child fields.
|
|
54
82
|
*/
|
|
55
|
-
obj<T extends BucketModelFieldBuilders<Module>>(fields?: T): BucketModelFieldBuilder<Module, BucketModelObjInfer<T>,
|
|
83
|
+
obj<T extends BucketModelFieldBuilders<Module>>(fields?: T): BucketModelFieldBuilder<Module, BucketModelObjInfer<T>, BucketModelObjInfer<T>, [false, false], {
|
|
56
84
|
'': BucketModelObjInfer<T>;
|
|
57
|
-
} &
|
|
85
|
+
} & {
|
|
86
|
+
'.*': BucketModelObjInfer<T>[keyof { [K in keyof T as T[K]["#optional"][1] extends true ? never : `${K & string}`]: T[K]["#output"]; } | keyof { [K_1 in keyof T as T[K_1]["#optional"][1] extends true ? `${K_1 & string}` : never]?: T[K_1]["#output"] | undefined; }];
|
|
87
|
+
} & BucketModelpathObjInfer<T>, {
|
|
88
|
+
'': BucketModelObjInfer<T>;
|
|
89
|
+
} & BucketQuerypathObjInfer<T>>;
|
|
58
90
|
/**
|
|
59
91
|
* An object with an unknown number of child fields of a given type.
|
|
60
92
|
*
|
|
61
93
|
* - All child fields are optional. You can specify a default value.
|
|
62
94
|
*/
|
|
63
|
-
dict<T extends BucketModelFieldBuilder<Module, any>>(dictItem: T): BucketModelFieldBuilder<Module, Record<string, T
|
|
64
|
-
'':
|
|
65
|
-
}
|
|
66
|
-
'':
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
'': NesoiFile;
|
|
79
|
-
}>;
|
|
95
|
+
dict<T extends BucketModelFieldBuilder<Module, any, any, any, any>>(dictItem: T): BucketModelFieldBuilder<Module, Record<string, T["#input"]>, Record<string, T["#output"]>, [false, false], {
|
|
96
|
+
'': Record<string, T["#output"]>;
|
|
97
|
+
} & BucketModelpathDictInfer<T>, {
|
|
98
|
+
'': Record<string, T["#output"]>;
|
|
99
|
+
} & BucketQuerypathDictInfer<T>>;
|
|
100
|
+
/**
|
|
101
|
+
* A list of a given type
|
|
102
|
+
* - All child fields are optional. You can specify a default value.
|
|
103
|
+
*/
|
|
104
|
+
list<T extends BucketModelFieldBuilder<Module, any, any, any, any>>(listItem: T): BucketModelFieldBuilder<Module, T["#input"][], T["#output"][], [false, false], {
|
|
105
|
+
'': T["#output"][];
|
|
106
|
+
} & BucketModelpathListInfer<T>, {
|
|
107
|
+
'': T["#output"][];
|
|
108
|
+
} & BucketQuerypathListInfer<T>>;
|
|
109
|
+
union<Builders extends AnyBucketModelFieldBuilder[]>(...children: Builders): BucketModelFieldBuilder<Module, Builders[number]["#input"], Builders[number]["#output"], [false, false], BucketModelpathUnionInfer<Builders>, Builders[number]["#querypath"]>;
|
|
80
110
|
}
|
|
81
111
|
/**
|
|
82
112
|
* @category Builders
|
|
83
113
|
* @subcategory Entity
|
|
84
114
|
* */
|
|
85
|
-
export declare class BucketModelFieldBuilder<Module extends $Module,
|
|
86
|
-
'':
|
|
115
|
+
export declare class BucketModelFieldBuilder<Module extends $Module, Input, Output, Optional = [false, false], Modelpath = {
|
|
116
|
+
'': Output;
|
|
117
|
+
}, Querypath = {
|
|
118
|
+
'': Output;
|
|
87
119
|
}> {
|
|
88
120
|
private module;
|
|
89
121
|
private type;
|
|
90
122
|
private alias?;
|
|
91
123
|
private meta?;
|
|
92
124
|
private children?;
|
|
93
|
-
|
|
125
|
+
'#input': Input;
|
|
126
|
+
'#output': Output;
|
|
127
|
+
'#optional': Optional;
|
|
128
|
+
'#modelpath': Modelpath;
|
|
129
|
+
'#querypath': Querypath;
|
|
94
130
|
private _required;
|
|
95
131
|
private _defaultValue?;
|
|
96
|
-
private _or?;
|
|
97
132
|
private crypto?;
|
|
98
133
|
constructor(module: string, type: $BucketModelFieldType, alias?: string | undefined, meta?: $BucketModelField['meta'], children?: BucketModelFieldBuilders<Module> | undefined);
|
|
99
134
|
as(alias: string): this;
|
|
100
135
|
/**
|
|
101
|
-
* This field can be `undefined`.
|
|
136
|
+
* This field can be `undefined` or `null`.
|
|
102
137
|
*/
|
|
103
|
-
get optional(): BucketModelFieldBuilder<Module,
|
|
138
|
+
get optional(): BucketModelFieldBuilder<Module, Input | null | undefined, Output | null | undefined, [
|
|
139
|
+
true,
|
|
140
|
+
true
|
|
141
|
+
], {
|
|
142
|
+
[K in keyof Modelpath]: Modelpath[K] | null | undefined;
|
|
143
|
+
}, {
|
|
144
|
+
[K in keyof Querypath]: Querypath[K] | null | undefined;
|
|
145
|
+
}>;
|
|
104
146
|
/**
|
|
105
147
|
* If this field is undefined on the source, it will be
|
|
106
148
|
* read as the given value.
|
|
107
|
-
* Also, when
|
|
108
|
-
*
|
|
149
|
+
* Also, when a message is generated for this model,
|
|
150
|
+
* the field can be undefined on the input and will have this value
|
|
151
|
+
* after parsed.
|
|
109
152
|
*/
|
|
110
|
-
default(defaultValue:
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
}>;
|
|
115
|
-
or<Def extends AnyBucketModelFieldBuilder>(def: Def): BucketModelFieldBuilder<Module, DefinedData | (Def extends BucketModelFieldBuilder<any, any, any, infer X, {
|
|
116
|
-
'': infer X;
|
|
117
|
-
}> ? X : never), TypeAppend, DefinedData | (Def extends BucketModelFieldBuilder<any, any, any, infer X, {
|
|
118
|
-
'': infer X;
|
|
119
|
-
}> ? X : never) | TypeAppend, { [K in Exclude<keyof Fieldpath, "">]: Fieldpath[K] | (K extends keyof (Def extends BucketModelFieldBuilder<any, any, any, any, infer X_1> ? X_1 : never) ? (Def extends BucketModelFieldBuilder<any, any, any, any, infer X_1> ? X_1 : never)[K] : undefined); } & {
|
|
120
|
-
"": DefinedData | (Def extends BucketModelFieldBuilder<any, any, any, infer X, {
|
|
121
|
-
'': infer X;
|
|
122
|
-
}> ? X : never) | TypeAppend;
|
|
123
|
-
} & { [K in Exclude<keyof (Def extends BucketModelFieldBuilder<any, any, any, any, infer X_1> ? X_1 : never), "">]: (Def extends BucketModelFieldBuilder<any, any, any, any, infer X_1> ? X_1 : never)[K]; }>;
|
|
153
|
+
default(defaultValue: Output): BucketModelFieldBuilder<Module, Input | undefined, Output, [
|
|
154
|
+
true,
|
|
155
|
+
(Optional & [boolean, boolean])[1]
|
|
156
|
+
], Modelpath, Querypath>;
|
|
124
157
|
/**
|
|
125
158
|
* This can be applied to `string` and `enum` fields,
|
|
126
159
|
* to control storage performance.
|
|
@@ -132,7 +165,7 @@ export declare class BucketModelFieldBuilder<Module extends $Module, DefinedData
|
|
|
132
165
|
*/
|
|
133
166
|
maxLength(val: number | null): void;
|
|
134
167
|
encrypt(key: keyof Module['constants']['values'], algorithm?: string): void;
|
|
135
|
-
static build(builder:
|
|
168
|
+
static build(builder: AnyBucketModelFieldBuilder, name: string, basePath?: string): {
|
|
136
169
|
schema: $BucketModelField;
|
|
137
170
|
hasFile: boolean;
|
|
138
171
|
hasEncrypted: boolean;
|
|
@@ -145,6 +178,6 @@ export declare class BucketModelFieldBuilder<Module extends $Module, DefinedData
|
|
|
145
178
|
};
|
|
146
179
|
}
|
|
147
180
|
export type BucketModelFieldBuilders<Module extends $Module> = {
|
|
148
|
-
[x: string]: BucketModelFieldBuilder<Module, any> | BucketModelFieldBuilders<Module>;
|
|
181
|
+
[x: string]: BucketModelFieldBuilder<Module, any, any, any, any, any> | BucketModelFieldBuilders<Module>;
|
|
149
182
|
};
|
|
150
|
-
export type AnyBucketModelFieldBuilder = BucketModelFieldBuilder<any, any>;
|
|
183
|
+
export type AnyBucketModelFieldBuilder = BucketModelFieldBuilder<any, any, any, any, any, any>;
|
|
@@ -65,6 +65,11 @@ class BucketModelFieldFactory {
|
|
|
65
65
|
get string() {
|
|
66
66
|
return new BucketModelFieldBuilder(this.module, 'string', this.alias);
|
|
67
67
|
}
|
|
68
|
+
file(def) {
|
|
69
|
+
return new BucketModelFieldBuilder(this.module, 'file', this.alias, {
|
|
70
|
+
file: def
|
|
71
|
+
});
|
|
72
|
+
}
|
|
68
73
|
/**
|
|
69
74
|
* An object with a specific set of child fields.
|
|
70
75
|
*/
|
|
@@ -77,13 +82,17 @@ class BucketModelFieldFactory {
|
|
|
77
82
|
* - All child fields are optional. You can specify a default value.
|
|
78
83
|
*/
|
|
79
84
|
dict(dictItem) {
|
|
80
|
-
|
|
81
|
-
return new BucketModelFieldBuilder(this.module, 'dict', this.alias, undefined, { __dict: dictItem });
|
|
85
|
+
return new BucketModelFieldBuilder(this.module, 'dict', this.alias, undefined, { '#': dictItem });
|
|
82
86
|
}
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
+
/**
|
|
88
|
+
* A list of a given type
|
|
89
|
+
* - All child fields are optional. You can specify a default value.
|
|
90
|
+
*/
|
|
91
|
+
list(listItem) {
|
|
92
|
+
return new BucketModelFieldBuilder(this.module, 'list', this.alias, undefined, { '#': listItem });
|
|
93
|
+
}
|
|
94
|
+
union(...children) {
|
|
95
|
+
return new BucketModelFieldBuilder(this.module, 'union', this.alias, undefined, Object.fromEntries(children.map((c, i) => [i, c])));
|
|
87
96
|
}
|
|
88
97
|
}
|
|
89
98
|
exports.BucketModelFieldFactory = BucketModelFieldFactory;
|
|
@@ -101,7 +110,6 @@ class BucketModelFieldBuilder {
|
|
|
101
110
|
this.alias = alias;
|
|
102
111
|
this.meta = meta;
|
|
103
112
|
this.children = children;
|
|
104
|
-
this._array = false;
|
|
105
113
|
this._required = true;
|
|
106
114
|
this._defaultValue = undefined;
|
|
107
115
|
}
|
|
@@ -110,7 +118,7 @@ class BucketModelFieldBuilder {
|
|
|
110
118
|
return this;
|
|
111
119
|
}
|
|
112
120
|
/**
|
|
113
|
-
* This field can be `undefined`.
|
|
121
|
+
* This field can be `undefined` or `null`.
|
|
114
122
|
*/
|
|
115
123
|
get optional() {
|
|
116
124
|
this._required = false;
|
|
@@ -119,26 +127,15 @@ class BucketModelFieldBuilder {
|
|
|
119
127
|
/**
|
|
120
128
|
* If this field is undefined on the source, it will be
|
|
121
129
|
* read as the given value.
|
|
122
|
-
* Also, when
|
|
123
|
-
*
|
|
130
|
+
* Also, when a message is generated for this model,
|
|
131
|
+
* the field can be undefined on the input and will have this value
|
|
132
|
+
* after parsed.
|
|
124
133
|
*/
|
|
125
134
|
default(defaultValue) {
|
|
126
135
|
this._required = false;
|
|
127
136
|
this._defaultValue = defaultValue;
|
|
128
137
|
return this;
|
|
129
138
|
}
|
|
130
|
-
get array() {
|
|
131
|
-
this._array = true;
|
|
132
|
-
if (this._or) {
|
|
133
|
-
// eslint-disable-next-line @typescript-eslint/no-unused-expressions
|
|
134
|
-
this._or.array;
|
|
135
|
-
}
|
|
136
|
-
return this;
|
|
137
|
-
}
|
|
138
|
-
or(def) {
|
|
139
|
-
def._or = this;
|
|
140
|
-
return def;
|
|
141
|
-
}
|
|
142
139
|
/**
|
|
143
140
|
* This can be applied to `string` and `enum` fields,
|
|
144
141
|
* to control storage performance.
|
|
@@ -159,24 +156,19 @@ class BucketModelFieldBuilder {
|
|
|
159
156
|
// Build
|
|
160
157
|
static build(builder, name, basePath = '') {
|
|
161
158
|
const path = basePath + name;
|
|
162
|
-
const
|
|
159
|
+
const childrenPath = path + '.';
|
|
163
160
|
const children = builder.children
|
|
164
|
-
? BucketModelFieldBuilder.buildChildren(builder.module, builder.children,
|
|
161
|
+
? BucketModelFieldBuilder.buildChildren(builder.module, builder.children, childrenPath)
|
|
165
162
|
: undefined;
|
|
166
163
|
const defaults = builder._defaultValue && builder.children
|
|
167
164
|
? Object.assign({}, builder._defaultValue, children?.defaults)
|
|
168
165
|
: builder._defaultValue;
|
|
169
|
-
const
|
|
170
|
-
? this.build(builder._or, name, basePath)
|
|
171
|
-
: undefined;
|
|
172
|
-
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);
|
|
166
|
+
const schema = new bucket_model_schema_1.$BucketModelField(name, path, builder.type, builder.alias || name, builder._required, builder.meta, defaults, children?.schema, builder.crypto);
|
|
173
167
|
const hasFile = builder.type === 'file'
|
|
174
168
|
|| children?.hasFileField
|
|
175
|
-
|| or?.hasFile
|
|
176
169
|
|| false;
|
|
177
170
|
const hasEncrypted = !!builder.crypto
|
|
178
171
|
|| children?.hasEncryptedField
|
|
179
|
-
|| or?.hasEncrypted
|
|
180
172
|
|| false;
|
|
181
173
|
return { schema, hasFile, hasEncrypted };
|
|
182
174
|
}
|