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.
Files changed (91) hide show
  1. package/lib/compiler/apps/monolyth/stages/2_build_typescript_stage.js +1 -0
  2. package/lib/compiler/apps/monolyth/stages/4_dump_modules_stage.js +8 -0
  3. package/lib/compiler/compiler.js +1 -1
  4. package/lib/compiler/elements/bucket.element.d.ts +3 -2
  5. package/lib/compiler/elements/bucket.element.js +86 -128
  6. package/lib/compiler/elements/element.js +4 -2
  7. package/lib/compiler/elements/externals.element.js +3 -0
  8. package/lib/compiler/elements/machine.element.js +2 -2
  9. package/lib/compiler/elements/message.element.js +35 -57
  10. package/lib/compiler/elements/queue.element.js +1 -1
  11. package/lib/compiler/helpers/dump_helpers.d.ts +5 -3
  12. package/lib/compiler/helpers/dump_helpers.js +43 -26
  13. package/lib/compiler/stages/4_build_schemas_stage.js +12 -0
  14. package/lib/compiler/stages/5_inject_ts_stage.js +4 -1
  15. package/lib/compiler/stages/7_dump_stage.js +7 -1
  16. package/lib/compiler/treeshake.js +4 -2
  17. package/lib/compiler/typescript/bridge/extract.js +37 -107
  18. package/lib/compiler/typescript/bridge/inject.d.ts +1 -1
  19. package/lib/compiler/typescript/bridge/inject.js +73 -45
  20. package/lib/compiler/typescript/bridge/organize.js +9 -5
  21. package/lib/compiler/typescript/typescript_compiler.d.ts +4 -6
  22. package/lib/compiler/typescript/typescript_compiler.js +139 -75
  23. package/lib/elements/blocks/block.builder.d.ts +1 -10
  24. package/lib/elements/blocks/block.builder.js +0 -32
  25. package/lib/elements/blocks/job/internal/resource_job.builder.d.ts +3 -21
  26. package/lib/elements/blocks/job/job.builder.d.ts +6 -20
  27. package/lib/elements/blocks/job/job.builder.js +0 -4
  28. package/lib/elements/blocks/machine/machine.builder.d.ts +5 -14
  29. package/lib/elements/blocks/machine/machine.builder.js +2 -2
  30. package/lib/elements/blocks/queue/queue.builder.d.ts +6 -15
  31. package/lib/elements/blocks/queue/queue.builder.js +2 -2
  32. package/lib/elements/edge/externals/externals.builder.d.ts +2 -0
  33. package/lib/elements/edge/externals/externals.builder.js +6 -1
  34. package/lib/elements/edge/externals/externals.schema.d.ts +2 -1
  35. package/lib/elements/edge/externals/externals.schema.js +3 -1
  36. package/lib/elements/entities/bucket/adapters/bucket_adapter.d.ts +1 -1
  37. package/lib/elements/entities/bucket/adapters/memory.bucket_adapter.d.ts +7 -0
  38. package/lib/elements/entities/bucket/adapters/memory.bucket_adapter.js +46 -36
  39. package/lib/elements/entities/bucket/adapters/memory.nql.js +1 -1
  40. package/lib/elements/entities/bucket/bucket.builder.d.ts +6 -4
  41. package/lib/elements/entities/bucket/bucket.js +42 -43
  42. package/lib/elements/entities/bucket/bucket.schema.d.ts +2 -1
  43. package/lib/elements/entities/bucket/cache/bucket_cache.d.ts +1 -4
  44. package/lib/elements/entities/bucket/graph/bucket_graph.infer.d.ts +7 -5
  45. package/lib/elements/entities/bucket/graph/bucket_graph_link.builder.d.ts +2 -1
  46. package/lib/elements/entities/bucket/model/bucket_model.builder.d.ts +1 -1
  47. package/lib/elements/entities/bucket/model/bucket_model.convert.d.ts +1 -1
  48. package/lib/elements/entities/bucket/model/bucket_model.convert.js +4 -4
  49. package/lib/elements/entities/bucket/model/bucket_model.infer.d.ts +41 -9
  50. package/lib/elements/entities/bucket/model/bucket_model.schema.d.ts +8 -6
  51. package/lib/elements/entities/bucket/model/bucket_model.schema.js +184 -21
  52. package/lib/elements/entities/bucket/model/bucket_model_field.builder.d.ts +89 -56
  53. package/lib/elements/entities/bucket/model/bucket_model_field.builder.js +22 -30
  54. package/lib/elements/entities/bucket/query/nql.schema.d.ts +13 -10
  55. package/lib/elements/entities/bucket/query/nql_compiler.js +46 -21
  56. package/lib/elements/entities/bucket/view/bucket_view.builder.js +1 -1
  57. package/lib/elements/entities/bucket/view/bucket_view.d.ts +19 -0
  58. package/lib/elements/entities/bucket/view/bucket_view.js +230 -108
  59. package/lib/elements/entities/bucket/view/bucket_view.schema.d.ts +5 -10
  60. package/lib/elements/entities/bucket/view/bucket_view.schema.js +3 -5
  61. package/lib/elements/entities/bucket/view/bucket_view_field.builder.d.ts +16 -12
  62. package/lib/elements/entities/bucket/view/bucket_view_field.builder.js +55 -40
  63. package/lib/elements/entities/message/message.builder.d.ts +1 -11
  64. package/lib/elements/entities/message/message.infer.d.ts +6 -30
  65. package/lib/elements/entities/message/message.schema.js +2 -2
  66. package/lib/elements/entities/message/template/message_template.builder.js +1 -1
  67. package/lib/elements/entities/message/template/message_template.schema.d.ts +10 -15
  68. package/lib/elements/entities/message/template/message_template.schema.js +29 -12
  69. package/lib/elements/entities/message/template/message_template_field.builder.d.ts +45 -209
  70. package/lib/elements/entities/message/template/message_template_field.builder.js +69 -85
  71. package/lib/elements/entities/message/template/message_template_parser.js +52 -64
  72. package/lib/engine/apps/inline.app.js +1 -0
  73. package/lib/engine/data/trash.js +7 -7
  74. package/lib/engine/data/tree.d.ts +3 -0
  75. package/lib/engine/data/tree.js +36 -0
  76. package/lib/engine/space.js +1 -1
  77. package/lib/engine/transaction/trx_engine.config.d.ts +3 -2
  78. package/lib/engine/transaction/trx_engine.d.ts +9 -1
  79. package/lib/engine/transaction/trx_engine.js +52 -9
  80. package/lib/engine/util/deep.js +4 -0
  81. package/lib/engine/util/parse.d.ts +22 -14
  82. package/lib/engine/util/parse.js +20 -5
  83. package/lib/engine/util/type.d.ts +3 -0
  84. package/package.json +1 -1
  85. package/tools/joaquin/bucket.d.ts +9 -0
  86. package/tools/joaquin/bucket.js +49 -0
  87. package/tools/joaquin/message.d.ts +2 -1
  88. package/tools/joaquin/message.js +9 -2
  89. package/tools/joaquin/mock.d.ts +1 -0
  90. package/tools/joaquin/mock.js +13 -5
  91. package/tsconfig.build.tsbuildinfo +1 -1
@@ -4,7 +4,6 @@ import { $MessageInputInfer, $MessageOutputInfer, $MessageTemplateBuilderInfer }
4
4
  import { NesoiDate } from "../../../../engine/data/date";
5
5
  import { $Message } from '../message.schema';
6
6
  import { ModuleTree } from "../../../../engine/tree";
7
- import { NesoiObj } from "../../../../engine/data/obj";
8
7
  import { MessageEnumpath } from '../../constants/constants.schema';
9
8
  import { NesoiDecimal } from "../../../../engine/data/decimal";
10
9
  import { NesoiDatetime } from "../../../../engine/data/datetime";
@@ -20,238 +19,75 @@ export declare class MessageTemplateFieldFactory<Space extends $Space, Module ex
20
19
  constructor(module: string);
21
20
  /**
22
21
  * Specifies an alias for the field.
23
- * - If this field is a union (.or), this alias is used when
24
- * referring to the union and it's first option.
25
- * - You can specify a different alias for the first options
26
- * by also using the .as() after the type
27
22
  */
28
23
  as(alias: string): Omit<typeof this, "as">;
29
- get any(): MessageTemplateFieldBuilder<Module, Message, {
30
- '': any;
31
- }, {
32
- '': any;
33
- }, {}, [never, never], [never, never]>;
34
- ts<T = any>(): MessageTemplateFieldBuilder<Module, Message, {
35
- '': T;
36
- }, {
37
- '': T;
38
- }, {}, [never, never], [never, never]>;
39
- get boolean(): MessageTemplateFieldBuilder<Module, Message, {
40
- '': boolean;
41
- }, {
42
- '': boolean;
43
- }, {}, [never, never], [never, never]>;
44
- get date(): MessageTemplateFieldBuilder<Module, Message, {
45
- '': string;
46
- }, {
47
- '': NesoiDate;
48
- }, {}, [never, never], [never, never]>;
49
- get datetime(): MessageTemplateFieldBuilder<Module, Message, {
50
- '': string;
51
- }, {
52
- '': NesoiDatetime;
53
- }, {}, [never, never], [never, never]>;
54
- get duration(): MessageTemplateFieldBuilder<Module, Message, {
55
- '': string;
56
- }, {
57
- '': NesoiDuration;
58
- }, {}, [never, never], [never, never]>;
59
- decimal(config?: $MessageTemplateFieldMeta['decimal']): MessageTemplateFieldBuilder<Module, Message, {
60
- '': string;
61
- }, {
62
- '': NesoiDecimal;
63
- }, {}, [never, never], [never, never]>;
64
- enum<Enumpaths extends MessageEnumpath<Module, Module['messages'][MsgName], Space['modules']>, Options extends (keyof Enumpaths & string) | readonly string[] | Record<string, any>>(options: Options): MessageTemplateFieldBuilder<Module, Message, {
65
- '': (Options extends string ? keyof Enumpaths[Options & keyof Enumpaths]["options" & keyof Enumpaths[Options & keyof Enumpaths]] : Options extends (infer X)[] | readonly (infer X)[] ? X : keyof Options) & string;
66
- }, {
67
- '': (Options extends string ? keyof Enumpaths[Options & keyof Enumpaths]["options" & keyof Enumpaths[Options & keyof Enumpaths]] : Options extends (infer X)[] | readonly (infer X)[] ? X : keyof Options) & string;
68
- }, {}, [never, never], [never, never]>;
69
- file(config?: $MessageTemplateFieldMeta['file']): MessageTemplateFieldBuilder<Module, Message, {
70
- '': NesoiFile;
71
- }, {
72
- '': NesoiFile;
73
- }, {}, [never, never], [never, never]>;
74
- get float(): MessageTemplateFieldBuilder<Module, Message, {
75
- '': number;
76
- }, {
77
- '': number;
78
- }, {}, [never, never], [never, never]>;
79
- id<Name extends BucketName<Module>, View extends ViewName<Module['buckets'][Name]> | undefined>(bucket: Name, view?: View): MessageTemplateFieldBuilder<Module, Message, {
80
- _id: (Module["buckets"][Name]["#data"] & NesoiObj)["id"];
81
- }, {
82
- '': undefined extends View ? Module["buckets"][Name]["#data"] : Module["buckets"][Name]["views"][NonNullable<View>]["#data"];
83
- }, {}, [never, never], [never, never]>;
84
- get int(): MessageTemplateFieldBuilder<Module, Message, {
85
- '': number;
86
- }, {
87
- '': number;
88
- }, {}, [never, never], [never, never]>;
89
- get string(): MessageTemplateFieldBuilder<Module, Message, {
90
- '': string;
91
- }, {
92
- '': string;
93
- }, {}, [never, never], [never, never]>;
94
- get string_or_number(): MessageTemplateFieldBuilder<Module, Message, {
95
- '': string | number;
96
- }, {
97
- '': string | number;
98
- }, {}, [never, never], [never, never]>;
99
- obj<Builders extends MessageTemplateFieldBuilders>(children: Builders): MessageTemplateFieldBuilder<Module, Message, {
100
- '': $MessageInputInfer<Builders>;
101
- }, {
102
- '': $MessageOutputInfer<Builders>;
103
- }, Builders, [never, never], [never, never]>;
104
- dict<Builder extends MessageTemplateFieldBuilder<Module, Message, any, any, any>>(item: Builder): MessageTemplateFieldBuilder<Module, Message, {
105
- '': Record<string, Builder extends MessageTemplateFieldBuilder<any, any, infer X, any, any, [never, never], [never, never]> ? X[keyof X] : never>;
106
- }, {
107
- '': Record<string, Builder extends MessageTemplateFieldBuilder<any, any, any, infer X_1, any, [never, never], [never, never]> ? X_1[keyof X_1] : never>;
108
- }, {
24
+ get any(): MessageTemplateFieldBuilder<Module, Message, any, any, {}, [false, false], "">;
25
+ ts<T = any>(): MessageTemplateFieldBuilder<Module, Message, T, T, {}, [false, false], "">;
26
+ get boolean(): MessageTemplateFieldBuilder<Module, Message, boolean, boolean, {}, [false, false], "">;
27
+ get date(): MessageTemplateFieldBuilder<Module, Message, string, NesoiDate, {}, [false, false], "">;
28
+ get datetime(): MessageTemplateFieldBuilder<Module, Message, string, NesoiDatetime, {}, [false, false], "">;
29
+ get duration(): MessageTemplateFieldBuilder<Module, Message, string, NesoiDuration, {}, [false, false], "">;
30
+ decimal(config?: $MessageTemplateFieldMeta['decimal']): MessageTemplateFieldBuilder<Module, Message, string, NesoiDecimal, {}, [false, false], "">;
31
+ enum<Enumpaths extends MessageEnumpath<Module, Module['messages'][MsgName], Space['modules']>, Options extends (keyof Enumpaths & string) | readonly string[] | Record<string, any>>(options: Options): MessageTemplateFieldBuilder<Module, Message, (Options extends string ? keyof Enumpaths[Options & keyof Enumpaths]["options" & keyof Enumpaths[Options & keyof Enumpaths]] : Options extends (infer X)[] | readonly (infer X)[] ? X : keyof Options) & string, (Options extends string ? keyof Enumpaths[Options & keyof Enumpaths]["options" & keyof Enumpaths[Options & keyof Enumpaths]] : Options extends (infer X)[] | readonly (infer X)[] ? X : keyof Options) & string, {}, [false, false], "">;
32
+ file(config?: $MessageTemplateFieldMeta['file']): MessageTemplateFieldBuilder<Module, Message, NesoiFile, NesoiFile, {}, [false, false], "">;
33
+ get float(): MessageTemplateFieldBuilder<Module, Message, number, number, {}, [false, false], "">;
34
+ id<Name extends BucketName<Module>, View extends ViewName<Module['buckets'][Name]> | undefined>(bucket: Name, view?: View): MessageTemplateFieldBuilder<Module, Message, Module["buckets"][Name]["#data"]["id"], undefined extends View ? Module["buckets"][Name]["#data"] : Module["buckets"][Name]["views"][NonNullable<View>]["#data"], {}, [false, false], "_id">;
35
+ get int(): MessageTemplateFieldBuilder<Module, Message, number, number, {}, [false, false], "">;
36
+ get string(): MessageTemplateFieldBuilder<Module, Message, string, string, {}, [false, false], "">;
37
+ get string_or_number(): MessageTemplateFieldBuilder<Module, Message, string | number, string | number, {}, [false, false], "">;
38
+ obj<Builders extends MessageTemplateFieldBuilders>(children: Builders): MessageTemplateFieldBuilder<Module, Message, $MessageInputInfer<Builders>, $MessageOutputInfer<Builders>, Builders, [false, false], "">;
39
+ dict<Builder extends MessageTemplateFieldBuilder<Module, Message, any, any, any, any, any>>(item: Builder): MessageTemplateFieldBuilder<Module, Message, Record<string, Builder["#input"]>, Record<string, Builder["#output"]>, {
109
40
  __dict: Builder;
110
- }, [never, never], [never, never]>;
111
- msg<MessageName extends keyof Module['messages'], Message extends Module['messages'][MessageName], Builders extends MessageTemplateFieldBuilders>(msg: MessageName, extra: Builders): MessageTemplateFieldBuilder<Module, Message, {
112
- '': Omit<Message["#raw"], "$"> & {
113
- $: any;
114
- } & { [K_1 in keyof { [K in keyof Builders]: Builders[K] extends MessageTemplateFieldBuilder<any, any, infer I, any, any, infer Opt extends [undefined, undefined], infer Nul extends [null, null]> ? {
115
- path: `${K & string}${keyof I & string}`;
116
- data: I[keyof I];
117
- opt: Opt[0];
118
- nul: Nul[0];
119
- } : never; } as { [K in keyof Builders]: Builders[K] extends MessageTemplateFieldBuilder<any, any, infer I, any, any, infer Opt extends [undefined, undefined], infer Nul extends [null, null]> ? {
120
- path: `${K & string}${keyof I & string}`;
121
- data: I[keyof I];
122
- opt: Opt[0];
123
- nul: Nul[0];
124
- } : never; }[K_1]["opt"] extends never ? { [K in keyof Builders]: Builders[K] extends MessageTemplateFieldBuilder<any, any, infer I, any, any, infer Opt extends [undefined, undefined], infer Nul extends [null, null]> ? {
125
- path: `${K & string}${keyof I & string}`;
126
- data: I[keyof I];
127
- opt: Opt[0];
128
- nul: Nul[0];
129
- } : never; }[K_1]["path"] : never]: { [K in keyof Builders]: Builders[K] extends MessageTemplateFieldBuilder<any, any, infer I, any, any, infer Opt extends [undefined, undefined], infer Nul extends [null, null]> ? {
130
- path: `${K & string}${keyof I & string}`;
131
- data: I[keyof I];
132
- opt: Opt[0];
133
- nul: Nul[0];
134
- } : never; }[K_1]["data"] | { [K in keyof Builders]: Builders[K] extends MessageTemplateFieldBuilder<any, any, infer I, any, any, infer Opt extends [undefined, undefined], infer Nul extends [null, null]> ? {
135
- path: `${K & string}${keyof I & string}`;
136
- data: I[keyof I];
137
- opt: Opt[0];
138
- nul: Nul[0];
139
- } : never; }[K_1]["nul"]; } & { [K_2 in keyof { [K in keyof Builders]: Builders[K] extends MessageTemplateFieldBuilder<any, any, infer I, any, any, infer Opt extends [undefined, undefined], infer Nul extends [null, null]> ? {
140
- path: `${K & string}${keyof I & string}`;
141
- data: I[keyof I];
142
- opt: Opt[0];
143
- nul: Nul[0];
144
- } : never; } as { [K in keyof Builders]: Builders[K] extends MessageTemplateFieldBuilder<any, any, infer I, any, any, infer Opt extends [undefined, undefined], infer Nul extends [null, null]> ? {
145
- path: `${K & string}${keyof I & string}`;
146
- data: I[keyof I];
147
- opt: Opt[0];
148
- nul: Nul[0];
149
- } : never; }[K_2]["opt"] extends never ? never : { [K in keyof Builders]: Builders[K] extends MessageTemplateFieldBuilder<any, any, infer I, any, any, infer Opt extends [undefined, undefined], infer Nul extends [null, null]> ? {
150
- path: `${K & string}${keyof I & string}`;
151
- data: I[keyof I];
152
- opt: Opt[0];
153
- nul: Nul[0];
154
- } : never; }[K_2]["path"]]?: { [K in keyof Builders]: Builders[K] extends MessageTemplateFieldBuilder<any, any, infer I, any, any, infer Opt extends [undefined, undefined], infer Nul extends [null, null]> ? {
155
- path: `${K & string}${keyof I & string}`;
156
- data: I[keyof I];
157
- opt: Opt[0];
158
- nul: Nul[0];
159
- } : never; }[K_2]["data"] | { [K in keyof Builders]: Builders[K] extends MessageTemplateFieldBuilder<any, any, infer I, any, any, infer Opt extends [undefined, undefined], infer Nul extends [null, null]> ? {
160
- path: `${K & string}${keyof I & string}`;
161
- data: I[keyof I];
162
- opt: Opt[0];
163
- nul: Nul[0];
164
- } : never; }[K_2]["nul"] | undefined; };
165
- }, {
166
- '': Omit<Message["#parsed"], "$"> & {
167
- $: any;
168
- } & { [K_4 in keyof { [K_3 in keyof Builders]: Builders[K_3] extends MessageTemplateFieldBuilder<any, any, any, infer O, any, infer Opt_1 extends [undefined, undefined], infer Nul_1 extends [null, null]> ? {
169
- path: `${K_3 & string}${keyof O & string}`;
170
- data: O[keyof O];
171
- opt: Opt_1[1];
172
- nul: Nul_1[1];
173
- } : never; } as { [K_3 in keyof Builders]: Builders[K_3] extends MessageTemplateFieldBuilder<any, any, any, infer O, any, infer Opt_1 extends [undefined, undefined], infer Nul_1 extends [null, null]> ? {
174
- path: `${K_3 & string}${keyof O & string}`;
175
- data: O[keyof O];
176
- opt: Opt_1[1];
177
- nul: Nul_1[1];
178
- } : never; }[K_4]["opt"] extends never ? { [K_3 in keyof Builders]: Builders[K_3] extends MessageTemplateFieldBuilder<any, any, any, infer O, any, infer Opt_1 extends [undefined, undefined], infer Nul_1 extends [null, null]> ? {
179
- path: `${K_3 & string}${keyof O & string}`;
180
- data: O[keyof O];
181
- opt: Opt_1[1];
182
- nul: Nul_1[1];
183
- } : never; }[K_4]["path"] : never]: { [K_3 in keyof Builders]: Builders[K_3] extends MessageTemplateFieldBuilder<any, any, any, infer O, any, infer Opt_1 extends [undefined, undefined], infer Nul_1 extends [null, null]> ? {
184
- path: `${K_3 & string}${keyof O & string}`;
185
- data: O[keyof O];
186
- opt: Opt_1[1];
187
- nul: Nul_1[1];
188
- } : never; }[K_4]["data"] | { [K_3 in keyof Builders]: Builders[K_3] extends MessageTemplateFieldBuilder<any, any, any, infer O, any, infer Opt_1 extends [undefined, undefined], infer Nul_1 extends [null, null]> ? {
189
- path: `${K_3 & string}${keyof O & string}`;
190
- data: O[keyof O];
191
- opt: Opt_1[1];
192
- nul: Nul_1[1];
193
- } : never; }[K_4]["nul"]; } & { [K_5 in keyof { [K_3 in keyof Builders]: Builders[K_3] extends MessageTemplateFieldBuilder<any, any, any, infer O, any, infer Opt_1 extends [undefined, undefined], infer Nul_1 extends [null, null]> ? {
194
- path: `${K_3 & string}${keyof O & string}`;
195
- data: O[keyof O];
196
- opt: Opt_1[1];
197
- nul: Nul_1[1];
198
- } : never; } as { [K_3 in keyof Builders]: Builders[K_3] extends MessageTemplateFieldBuilder<any, any, any, infer O, any, infer Opt_1 extends [undefined, undefined], infer Nul_1 extends [null, null]> ? {
199
- path: `${K_3 & string}${keyof O & string}`;
200
- data: O[keyof O];
201
- opt: Opt_1[1];
202
- nul: Nul_1[1];
203
- } : never; }[K_5]["opt"] extends never ? never : { [K_3 in keyof Builders]: Builders[K_3] extends MessageTemplateFieldBuilder<any, any, any, infer O, any, infer Opt_1 extends [undefined, undefined], infer Nul_1 extends [null, null]> ? {
204
- path: `${K_3 & string}${keyof O & string}`;
205
- data: O[keyof O];
206
- opt: Opt_1[1];
207
- nul: Nul_1[1];
208
- } : never; }[K_5]["path"]]?: { [K_3 in keyof Builders]: Builders[K_3] extends MessageTemplateFieldBuilder<any, any, any, infer O, any, infer Opt_1 extends [undefined, undefined], infer Nul_1 extends [null, null]> ? {
209
- path: `${K_3 & string}${keyof O & string}`;
210
- data: O[keyof O];
211
- opt: Opt_1[1];
212
- nul: Nul_1[1];
213
- } : never; }[K_5]["data"] | { [K_3 in keyof Builders]: Builders[K_3] extends MessageTemplateFieldBuilder<any, any, any, infer O, any, infer Opt_1 extends [undefined, undefined], infer Nul_1 extends [null, null]> ? {
214
- path: `${K_3 & string}${keyof O & string}`;
215
- data: O[keyof O];
216
- opt: Opt_1[1];
217
- nul: Nul_1[1];
218
- } : never; }[K_5]["nul"] | undefined; };
219
- }, {}, [never, never], [never, never]>;
41
+ }, [false, false], "">;
42
+ list<Builder extends MessageTemplateFieldBuilder<Module, Message, any, any, any, any, any>>(item: Builder): MessageTemplateFieldBuilder<Module, Message, Builder["#input"][], Builder["#output"][], {
43
+ '#': Builder;
44
+ }, [false, false], "">;
45
+ union<Builders extends AnyMessageTemplateFieldBuilder[]>(...children: Builders): MessageTemplateFieldBuilder<Module, Message, Builders[number]["#input"], Builders[number]["#output"], {
46
+ [x: number]: Builders[number];
47
+ }, [false, false], "">;
48
+ msg<MessageName extends keyof Module['messages'], Message extends Module['messages'][MessageName], Builders extends MessageTemplateFieldBuilders>(msg: MessageName, extra?: Builders): MessageTemplateFieldBuilder<Module, Message, Omit<Message["#raw"], "$"> & {
49
+ $: any;
50
+ } & { [K in keyof Builders as Builders[K]["#optional"][0] extends true ? never : `${K & string}${Builders[K]["#input_suffix"]}`]: Builders[K]["#input"]; } & { [K_1 in keyof Builders as Builders[K_1]["#optional"][0] extends true ? `${K_1 & string}${Builders[K_1]["#input_suffix"]}` : never]?: Builders[K_1]["#input"] | undefined; }, Omit<Message["#parsed"], "$"> & {
51
+ $: any;
52
+ } & { [K_2 in keyof Builders as Builders[K_2]["#optional"][1] extends true ? never : K_2]: Builders[K_2]["#output"]; } & { [K_3 in keyof Builders as Builders[K_3]["#optional"][1] extends true ? K_3 : never]?: Builders[K_3]["#output"] | undefined; }, {}, [false, false], "">;
220
53
  extend<MsgName extends keyof Module['messages'], Builders extends MessageTemplateFieldBuilders>(name: MsgName, fields: Builders): $MessageTemplateBuilderInfer<Module, Module["messages"][MsgName], Module["messages"][MsgName]["#raw"], Module["messages"][MsgName]["#parsed"]> & Builders;
221
54
  }
222
55
  /**
223
56
  * @category Builders
224
57
  * @subcategory Entity
225
58
  * */
226
- export declare class MessageTemplateFieldBuilder<Module extends $Module, Message extends $Message, DefinedInput, DefinedOutput, Children extends MessageTemplateFieldBuilders, Optional extends [undefined | never, undefined | never] = [never, never], // Used to infer the message type
227
- Nullable extends [null | never, null | never] = [never, never]> {
59
+ export declare class MessageTemplateFieldBuilder<Module extends $Module, Message extends $Message, Input, Output, Children extends MessageTemplateFieldBuilders, Optional = [false, false], InputSuffix extends string = ''> {
228
60
  private type;
229
61
  private value;
230
62
  private alias?;
231
63
  private children?;
232
- private _array;
64
+ '#input': Input;
65
+ '#input_suffix': InputSuffix;
66
+ '#output': Output;
67
+ '#optional': Optional;
233
68
  private _required;
234
69
  private _defaultValue?;
235
70
  private _nullable;
236
71
  private _rules;
237
- private _arrayRules;
238
- private _or?;
239
- private preAlias?;
240
72
  constructor(type: $MessageTemplateFieldType, value: $MessageTemplateFieldMeta, alias?: string | undefined, children?: Children | undefined);
241
73
  as(alias: string): this;
242
- get optional(): MessageTemplateFieldBuilder<Module, Message, DefinedInput, DefinedOutput, Children, [undefined, undefined], Nullable>;
243
- default(value: DefinedInput[keyof DefinedInput] | Nullable[0]): MessageTemplateFieldBuilder<Module, Message, DefinedInput, DefinedOutput, Children, [undefined, never], Nullable>;
244
- get nullable(): MessageTemplateFieldBuilder<Module, Message, DefinedInput, DefinedOutput, Children, Optional, [null, null]>;
245
- rule(rule: MessageTemplateRuleDef<DefinedOutput[keyof DefinedOutput], Message['#raw']>): this;
246
- get array(): MessageTemplateFieldBuilder<Module, Message, { [K in keyof DefinedInput]: DefinedInput[K][]; }, { [K in keyof DefinedOutput]: DefinedOutput[K][]; }, Children, Optional, Nullable>;
247
- or<Def extends AnyMessageTemplateFieldBuilder>(def: Def): MessageTemplateFieldBuilder<Module, Message, { [K in keyof DefinedInput]: DefinedInput[K] | (Def extends MessageTemplateFieldBuilder<any, any, infer X, any, any, [never, never], [never, never]> ? X : never)[keyof (Def extends MessageTemplateFieldBuilder<any, any, infer X, any, any, [never, never], [never, never]> ? X : never)]; }, { [K in keyof DefinedOutput]: DefinedOutput[K] | (Def extends MessageTemplateFieldBuilder<any, any, any, infer X, any, [never, never], [never, never]> ? X : never)[keyof (Def extends MessageTemplateFieldBuilder<any, any, any, infer X, any, [never, never], [never, never]> ? X : never)]; }, Children, Optional, Nullable>;
74
+ get optional(): MessageTemplateFieldBuilder<Module, Message, Input | undefined, Output | undefined, Children, [
75
+ true,
76
+ true
77
+ ], InputSuffix>;
78
+ default(value: Output): MessageTemplateFieldBuilder<Module, Message, Input | undefined, Output, Children, [
79
+ true,
80
+ (Optional & [boolean, boolean])[1]
81
+ ], InputSuffix>;
82
+ get nullable(): MessageTemplateFieldBuilder<Module, Message, Input | null, Output | null, Children, Optional, InputSuffix>;
83
+ rule(rule: MessageTemplateRuleDef<Output, Message['#raw']>): this;
248
84
  static build(builder: AnyMessageTemplateFieldBuilder, name: string, tree: ModuleTree, module: $Module, basePathRaw: string, basePathParsed: string): $MessageTemplateField;
249
- static buildChildren(fields: MessageTemplateFieldBuilders, tree: ModuleTree, module: $Module, basePathRaw?: string, basePathParsed?: string): $MessageTemplateFields;
85
+ static buildMany(fields: MessageTemplateFieldBuilders, tree: ModuleTree, module: $Module, basePathRaw?: string, basePathParsed?: string, name?: string, key?: string): $MessageTemplateFields;
250
86
  }
251
87
  export type MessageTemplateFieldBuilders = {
252
88
  [x: string]: AnyMessageTemplateFieldBuilder;
253
89
  };
254
- export type AnyMessageTemplateFieldBuilder = MessageTemplateFieldBuilder<any, any, any, any, any>;
90
+ export type AnyMessageTemplateFieldBuilder = MessageTemplateFieldBuilder<any, any, any, any, any, any, any>;
255
91
  export type MessageTemplateRuleDef<I, Msg> = (def: {
256
92
  field: $MessageTemplateField;
257
93
  path: string;
@@ -14,10 +14,6 @@ class MessageTemplateFieldFactory {
14
14
  }
15
15
  /**
16
16
  * Specifies an alias for the field.
17
- * - If this field is a union (.or), this alias is used when
18
- * referring to the union and it's first option.
19
- * - You can specify a different alias for the first options
20
- * by also using the .as() after the type
21
17
  */
22
18
  as(alias) {
23
19
  const chain = new MessageTemplateFieldFactory(this.module);
@@ -82,10 +78,15 @@ class MessageTemplateFieldFactory {
82
78
  return new MessageTemplateFieldBuilder('obj', {}, this.alias, children);
83
79
  }
84
80
  dict(item) {
85
- item = item.optional;
86
81
  return new MessageTemplateFieldBuilder('dict', {}, this.alias, { __dict: item });
87
82
  }
88
- msg(msg, extra) {
83
+ list(item) {
84
+ return new MessageTemplateFieldBuilder('list', {}, this.alias, { '#': item });
85
+ }
86
+ union(...children) {
87
+ return new MessageTemplateFieldBuilder('union', {}, this.alias, Object.fromEntries(children.map((c, i) => [i, c])));
88
+ }
89
+ msg(msg, extra = {}) {
89
90
  // Module and tag are updated on build
90
91
  const ref = new dependency_1.$Dependency(this.module, 'message', msg);
91
92
  return new MessageTemplateFieldBuilder('msg', { msg: ref }, this.alias, extra);
@@ -109,13 +110,10 @@ class MessageTemplateFieldBuilder {
109
110
  this.value = value;
110
111
  this.alias = alias;
111
112
  this.children = children;
112
- this._array = false;
113
113
  this._required = true;
114
114
  this._defaultValue = undefined;
115
- this._nullable = true;
115
+ this._nullable = false;
116
116
  this._rules = [];
117
- this._arrayRules = [];
118
- this.preAlias = alias;
119
117
  }
120
118
  as(alias) {
121
119
  this.alias = alias;
@@ -123,105 +121,91 @@ class MessageTemplateFieldBuilder {
123
121
  }
124
122
  get optional() {
125
123
  this._required = false;
126
- if (this._or) {
127
- // eslint-disable-next-line @typescript-eslint/no-unused-expressions
128
- this._or.optional;
129
- }
130
124
  return this;
131
125
  }
132
126
  default(value) {
133
127
  this._required = false;
134
128
  this._defaultValue = value;
135
- if (this._or) {
136
- this._or.default(value);
137
- }
138
129
  return this;
139
130
  }
140
131
  get nullable() {
141
132
  this._nullable = true;
142
- if (this._or) {
143
- // eslint-disable-next-line @typescript-eslint/no-unused-expressions
144
- this._or.nullable;
145
- }
146
133
  return this;
147
134
  }
148
135
  rule(rule) {
149
- if (this._array) {
150
- this._arrayRules.push(rule);
151
- }
152
- else {
153
- this._rules.push(rule);
154
- }
155
- return this;
156
- }
157
- get array() {
158
- this._array = true;
159
- if (this._or) {
160
- // eslint-disable-next-line @typescript-eslint/no-unused-expressions
161
- this._or.array;
162
- }
163
- return this;
164
- }
165
- or(def) {
166
- this._or = def;
167
- this._or.preAlias = this.preAlias;
168
- this._or._array = this._array;
169
- this._or._defaultValue = this._defaultValue;
170
- this._or._nullable = this._nullable;
171
- this._or._required = this._required;
172
- this._or._arrayRules = this._arrayRules;
136
+ this._rules.push(rule);
173
137
  return this;
174
138
  }
175
139
  // Build
176
140
  static build(builder, name, tree, module, basePathRaw, basePathParsed) {
177
- const or = builder._or
178
- ? this.build(builder._or, name, tree, module, basePathRaw, basePathParsed)
179
- : undefined;
141
+ const pathRaw = basePathRaw + (builder.type === 'id' ? `${name}_id` : name);
180
142
  const pathParsed = basePathParsed + name;
181
- const pathRaw = basePathParsed + (builder.type === 'id'
182
- ? builder._array ? `${name}_ids` : `${name}_id`
183
- : name);
184
- const childrenBasePathRaw = pathRaw + (builder._array ? '.#.' : '.');
185
- const childrenBasePathParsed = pathParsed + (builder._array ? '.#.' : '.');
186
- if (builder.value.id) {
143
+ const childrenBasePathRaw = pathRaw + '.';
144
+ const childrenBasePathParsed = pathParsed + '.';
145
+ let type = builder.type;
146
+ let children;
147
+ if (builder.type === 'id') {
187
148
  const bucket = tree.getSchema(builder.value.id.bucket);
188
149
  builder.value.id.type = bucket.model.fields.id.type;
189
150
  }
190
- return new message_template_schema_1.$MessageTemplateField(builder.type, name, builder.alias || name, builder.preAlias || name, pathRaw, pathParsed, builder._array, builder._required, builder._defaultValue, builder._nullable, builder._rules, builder._arrayRules, builder.value, builder.children ? MessageTemplateFieldBuilder.buildChildren(builder.children, tree, module, childrenBasePathRaw, childrenBasePathParsed) : undefined, or);
151
+ // A .msg() parameter is an obj which takes fields from
152
+ // another message
153
+ else if (builder.type === 'msg') {
154
+ const dep = builder.value.msg;
155
+ if (dep.type !== 'message') {
156
+ throw error_1.NesoiError.Builder.Message.UnknownModuleMessage(dep.tag);
157
+ }
158
+ const $msg = tree.getSchema(dep);
159
+ if (!$msg) {
160
+ throw error_1.NesoiError.Builder.Message.UnknownModuleMessage(dep.tag);
161
+ }
162
+ if (dep.module !== module.name) {
163
+ if (!(dep.refName in module.externals.messages)) {
164
+ throw error_1.NesoiError.Builder.Message.UnknownModuleMessage(dep.tag);
165
+ }
166
+ }
167
+ const injectFields = (target, fields) => {
168
+ for (const key in fields) {
169
+ target[key] = message_template_schema_1.$MessageTemplateField.clone(fields[key]);
170
+ target[key].pathRaw = childrenBasePathRaw + target[key].pathRaw;
171
+ target[key].pathParsed = childrenBasePathParsed + target[key].pathParsed;
172
+ if (fields[key].children) {
173
+ target[key].children = {};
174
+ injectFields(target[key].children, fields[key].children);
175
+ }
176
+ }
177
+ };
178
+ type = 'obj';
179
+ children = {};
180
+ injectFields(children, $msg.template.fields);
181
+ }
182
+ else if (builder.type === 'list') {
183
+ children = MessageTemplateFieldBuilder.buildMany(builder.children, tree, module, childrenBasePathRaw, childrenBasePathParsed, '#', '#');
184
+ }
185
+ else if (builder.type === 'dict') {
186
+ children = MessageTemplateFieldBuilder.buildMany(builder.children, tree, module, childrenBasePathRaw, childrenBasePathParsed, '#', '#');
187
+ }
188
+ else if (builder.type === 'union') {
189
+ children = MessageTemplateFieldBuilder.buildMany(builder.children, tree, module, basePathRaw, basePathParsed, name, undefined);
190
+ }
191
+ // All other fields build their children directly
192
+ else if (builder.children) {
193
+ children = MessageTemplateFieldBuilder.buildMany(builder.children, tree, module, childrenBasePathRaw, childrenBasePathParsed);
194
+ }
195
+ return new message_template_schema_1.$MessageTemplateField(type, name, builder.alias || name, pathRaw, pathParsed, builder._required, builder._defaultValue, builder._nullable, builder._rules, builder.value, children);
191
196
  }
192
- static buildChildren(fields, tree, module, basePathRaw = '', basePathParsed = '') {
197
+ static buildMany(fields, tree, module, basePathRaw = '', basePathParsed = '', name, key) {
193
198
  const schema = {};
194
199
  for (const c in fields) {
195
- const child = fields[c];
196
- // Extended fields inherit from other messages
197
- if (child.__ext) {
198
- const ext = tree.getSchema(child.__ext);
199
- schema[c].children = Object.assign({}, ext.template.fields, schema[c].children || {});
200
- continue;
201
- }
202
- const param = c;
203
- // A .msg() parameter is an obj which takes fields from
204
- // another message
205
- if (child.type === 'msg') {
206
- const name = child.value.msg.name;
207
- const $msg = module.messages[name];
208
- if (!$msg) {
209
- throw error_1.NesoiError.Builder.Message.UnknownModuleMessage(name);
210
- }
211
- const builder = new MessageTemplateFieldFactory(module.name).obj({});
212
- builder.alias = child.alias;
213
- builder._required = child._required;
214
- builder._defaultValue = child._defaultValue;
215
- builder._nullable = child._nullable;
216
- builder._rules = child._rules.slice(0, -1);
217
- builder.children = child.children;
218
- schema[param] = MessageTemplateFieldBuilder.build(builder, c, tree, module, basePathRaw, basePathParsed);
219
- schema[param].children = schema[param].children || {};
220
- Object.assign(schema[param].children, $msg.template.fields);
200
+ if (c === '__ext')
221
201
  continue;
222
- }
223
- // All other parameters are built directly
224
- schema[param] = MessageTemplateFieldBuilder.build(child, c, tree, module, basePathRaw, basePathParsed);
202
+ const child = fields[c];
203
+ schema[key || c] = MessageTemplateFieldBuilder.build(child, name || c, tree, module, basePathRaw, basePathParsed);
204
+ }
205
+ // Extended field groups inherit from other messages
206
+ if ('__ext' in fields) {
207
+ const ext = tree.getSchema(fields.__ext);
208
+ Object.assign(schema, ext.template.fields);
225
209
  }
226
210
  return schema;
227
211
  }