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.
Files changed (86) hide show
  1. package/lib/compiler/apps/monolyth/stages/4_dump_modules_stage.js +8 -0
  2. package/lib/compiler/compiler.js +1 -1
  3. package/lib/compiler/elements/bucket.element.d.ts +2 -1
  4. package/lib/compiler/elements/bucket.element.js +68 -122
  5. package/lib/compiler/elements/element.js +2 -1
  6. package/lib/compiler/elements/externals.element.js +3 -0
  7. package/lib/compiler/elements/message.element.js +34 -57
  8. package/lib/compiler/elements/queue.element.js +1 -1
  9. package/lib/compiler/helpers/dump_helpers.d.ts +2 -0
  10. package/lib/compiler/helpers/dump_helpers.js +12 -2
  11. package/lib/compiler/stages/4_build_schemas_stage.js +12 -0
  12. package/lib/compiler/stages/5_inject_ts_stage.js +4 -1
  13. package/lib/compiler/stages/7_dump_stage.js +7 -1
  14. package/lib/compiler/treeshake.js +4 -2
  15. package/lib/compiler/typescript/bridge/extract.js +37 -107
  16. package/lib/compiler/typescript/bridge/inject.d.ts +1 -1
  17. package/lib/compiler/typescript/bridge/inject.js +73 -45
  18. package/lib/compiler/typescript/bridge/organize.js +9 -5
  19. package/lib/compiler/typescript/typescript_compiler.d.ts +4 -6
  20. package/lib/compiler/typescript/typescript_compiler.js +139 -75
  21. package/lib/elements/blocks/block.builder.d.ts +1 -10
  22. package/lib/elements/blocks/block.builder.js +0 -32
  23. package/lib/elements/blocks/job/internal/resource_job.builder.d.ts +3 -21
  24. package/lib/elements/blocks/job/job.builder.d.ts +6 -20
  25. package/lib/elements/blocks/job/job.builder.js +0 -4
  26. package/lib/elements/blocks/machine/machine.builder.d.ts +5 -14
  27. package/lib/elements/blocks/machine/machine.builder.js +2 -2
  28. package/lib/elements/blocks/queue/queue.builder.d.ts +6 -15
  29. package/lib/elements/blocks/queue/queue.builder.js +2 -2
  30. package/lib/elements/edge/externals/externals.builder.d.ts +2 -0
  31. package/lib/elements/edge/externals/externals.builder.js +6 -1
  32. package/lib/elements/edge/externals/externals.schema.d.ts +2 -1
  33. package/lib/elements/edge/externals/externals.schema.js +3 -1
  34. package/lib/elements/entities/bucket/adapters/memory.nql.js +1 -1
  35. package/lib/elements/entities/bucket/bucket.builder.d.ts +6 -4
  36. package/lib/elements/entities/bucket/bucket.js +7 -16
  37. package/lib/elements/entities/bucket/bucket.schema.d.ts +2 -1
  38. package/lib/elements/entities/bucket/graph/bucket_graph.infer.d.ts +7 -5
  39. package/lib/elements/entities/bucket/graph/bucket_graph_link.builder.d.ts +2 -1
  40. package/lib/elements/entities/bucket/model/bucket_model.builder.d.ts +1 -1
  41. package/lib/elements/entities/bucket/model/bucket_model.convert.d.ts +1 -1
  42. package/lib/elements/entities/bucket/model/bucket_model.convert.js +4 -4
  43. package/lib/elements/entities/bucket/model/bucket_model.infer.d.ts +45 -9
  44. package/lib/elements/entities/bucket/model/bucket_model.schema.d.ts +5 -6
  45. package/lib/elements/entities/bucket/model/bucket_model.schema.js +64 -21
  46. package/lib/elements/entities/bucket/model/bucket_model_field.builder.d.ts +88 -55
  47. package/lib/elements/entities/bucket/model/bucket_model_field.builder.js +22 -30
  48. package/lib/elements/entities/bucket/query/nql.schema.d.ts +13 -10
  49. package/lib/elements/entities/bucket/query/nql_compiler.js +46 -21
  50. package/lib/elements/entities/bucket/view/bucket_view.builder.js +1 -1
  51. package/lib/elements/entities/bucket/view/bucket_view.d.ts +19 -0
  52. package/lib/elements/entities/bucket/view/bucket_view.js +230 -108
  53. package/lib/elements/entities/bucket/view/bucket_view.schema.d.ts +5 -10
  54. package/lib/elements/entities/bucket/view/bucket_view.schema.js +3 -5
  55. package/lib/elements/entities/bucket/view/bucket_view_field.builder.d.ts +16 -12
  56. package/lib/elements/entities/bucket/view/bucket_view_field.builder.js +55 -40
  57. package/lib/elements/entities/message/message.builder.d.ts +1 -11
  58. package/lib/elements/entities/message/message.builder.js +2 -2
  59. package/lib/elements/entities/message/message.infer.d.ts +6 -30
  60. package/lib/elements/entities/message/message.schema.js +2 -2
  61. package/lib/elements/entities/message/message_parser.d.ts +0 -1
  62. package/lib/elements/entities/message/message_parser.js +1 -68
  63. package/lib/elements/entities/message/template/message_template.builder.js +1 -1
  64. package/lib/elements/entities/message/template/message_template.schema.d.ts +11 -6
  65. package/lib/elements/entities/message/template/message_template.schema.js +29 -6
  66. package/lib/elements/entities/message/template/message_template_field.builder.d.ts +50 -203
  67. package/lib/elements/entities/message/template/message_template_field.builder.js +74 -74
  68. package/lib/elements/entities/message/template/message_template_parser.d.ts +2 -2
  69. package/lib/elements/entities/message/template/message_template_parser.js +137 -71
  70. package/lib/engine/apps/inline.app.js +1 -0
  71. package/lib/engine/data/error.d.ts +12 -11
  72. package/lib/engine/data/error.js +7 -7
  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/util/parse.d.ts +36 -28
  77. package/lib/engine/util/parse.js +53 -43
  78. package/lib/engine/util/type.d.ts +3 -0
  79. package/package.json +1 -1
  80. package/tools/joaquin/bucket.d.ts +9 -0
  81. package/tools/joaquin/bucket.js +49 -0
  82. package/tools/joaquin/message.d.ts +2 -1
  83. package/tools/joaquin/message.js +9 -2
  84. package/tools/joaquin/mock.d.ts +1 -0
  85. package/tools/joaquin/mock.js +13 -5
  86. package/tsconfig.build.tsbuildinfo +1 -1
@@ -16,17 +16,7 @@ export declare class MessageBuilder<Space extends $Space, Module extends $Module
16
16
  private _template;
17
17
  constructor(module: string, name: string);
18
18
  as(alias: string): this;
19
- template<Def extends MessageTemplateDef<Space, Module, Message['name']>>($: Def): MessageBuilder<Space, Module, $MessageInfer<Message["name"], Def, ReturnType<Def>, import("./message.infer").$MessageInputInfer<ReturnType<Def>, ReturnType<Def> extends infer T ? { [K in keyof T]: ReturnType<Def>[K] extends import("./template/message_template_field.builder").MessageTemplateFieldBuilder<any, any, infer I, any, any, infer Opt extends [undefined, undefined], infer Nul extends [null, null]> ? {
20
- path: `${K & string}${keyof I & string}`;
21
- data: I[keyof I];
22
- opt: Opt[0];
23
- nul: Nul[0];
24
- } : never; } : never>, import("./message.infer").$MessageOutputInfer<ReturnType<Def>, ReturnType<Def> extends infer T_1 ? { [K_1 in keyof T_1]: ReturnType<Def>[K_1] extends import("./template/message_template_field.builder").MessageTemplateFieldBuilder<any, any, any, infer O, any, infer Opt_1 extends [undefined, undefined], infer Nul_1 extends [null, null]> ? {
25
- path: `${K_1 & string}${keyof O & string}`;
26
- data: O[keyof O];
27
- opt: Opt_1[1];
28
- nul: Nul_1[1];
29
- } : never; } : never>>>;
19
+ template<Def extends MessageTemplateDef<Space, Module, Message['name']>>($: Def): MessageBuilder<Space, Module, $MessageInfer<Message["name"], Def, ReturnType<Def>, import("./message.infer").$MessageInputInfer<ReturnType<Def>>, import("./message.infer").$MessageOutputInfer<ReturnType<Def>>>>;
30
20
  static build(node: MessageBuilderNode, tree: ModuleTree, module: $Module): $Message;
31
21
  static buildInlines(node: ResolvedBuilderNode, tree: ModuleTree, module: $Module): Record<string, $Message>;
32
22
  }
@@ -21,8 +21,8 @@ class MessageBuilder {
21
21
  return this;
22
22
  }
23
23
  template($) {
24
- const fieldBuilder = new message_template_field_builder_1.MessageTemplateFieldFactory(this.module);
25
- const fields = $(fieldBuilder);
24
+ const factory = new message_template_field_builder_1.MessageTemplateFieldFactory(this.module);
25
+ const fields = $(factory);
26
26
  this._template.fields(fields);
27
27
  return this;
28
28
  }
@@ -2,39 +2,15 @@ import { MessageTemplateFieldBuilder, MessageTemplateFieldBuilders } from './tem
2
2
  import { MessageTemplateDef } from './template/message_template.builder';
3
3
  import { $Module } from "../../../schema";
4
4
  import { $Message } from './message.schema';
5
- export type $MessageInputInfer<Builder, Fields extends Record<string, {
6
- path: any;
7
- data: any;
8
- opt: any;
9
- nul: any;
10
- }> = {
11
- [K in keyof Builder]: Builder[K] extends MessageTemplateFieldBuilder<any, any, infer I, any, any, infer Opt, infer Nul> ? {
12
- path: `${K & string}${keyof I & string}`;
13
- data: I[keyof I];
14
- opt: Opt[0];
15
- nul: Nul[0];
16
- } : never;
17
- }> = {
18
- [K in keyof Fields as Fields[K]['opt'] extends never ? Fields[K]['path'] : never]: Fields[K]['data'] | Fields[K]['nul'];
5
+ export type $MessageInputInfer<Fields extends MessageTemplateFieldBuilders> = {
6
+ [K in keyof Fields as Fields[K]['#optional'][0] extends true ? never : `${K & string}${Fields[K]['#input_suffix']}`]: Fields[K]['#input'];
19
7
  } & {
20
- [K in keyof Fields as Fields[K]['opt'] extends never ? never : Fields[K]['path']]?: Fields[K]['data'] | Fields[K]['nul'];
8
+ [K in keyof Fields as Fields[K]['#optional'][0] extends true ? `${K & string}${Fields[K]['#input_suffix']}` : never]?: Fields[K]['#input'];
21
9
  };
22
- export type $MessageOutputInfer<Builder, Fields extends Record<string, {
23
- path: any;
24
- data: any;
25
- opt: any;
26
- nul: any;
27
- }> = {
28
- [K in keyof Builder]: Builder[K] extends MessageTemplateFieldBuilder<any, any, any, infer O, any, infer Opt, infer Nul> ? {
29
- path: `${K & string}${keyof O & string}`;
30
- data: O[keyof O];
31
- opt: Opt[1];
32
- nul: Nul[1];
33
- } : never;
34
- }> = {
35
- [K in keyof Fields as Fields[K]['opt'] extends never ? Fields[K]['path'] : never]: Fields[K]['data'] | Fields[K]['nul'];
10
+ export type $MessageOutputInfer<Fields extends MessageTemplateFieldBuilders> = {
11
+ [K in keyof Fields as Fields[K]['#optional'][1] extends true ? never : K]: Fields[K]['#output'];
36
12
  } & {
37
- [K in keyof Fields as Fields[K]['opt'] extends never ? never : Fields[K]['path']]?: Fields[K]['data'] | Fields[K]['nul'];
13
+ [K in keyof Fields as Fields[K]['#optional'][1] extends true ? K : never]?: Fields[K]['#output'];
38
14
  };
39
15
  export interface $MessageInfer<Name extends string, Def extends MessageTemplateDef<any, any, any>, Builders extends MessageTemplateFieldBuilders = ReturnType<Def>, Raw = $MessageInputInfer<Builders>, Parsed = $MessageOutputInfer<Builders>> extends $Message {
40
16
  name: Name;
@@ -25,7 +25,7 @@ class $Message {
25
25
  if (field.type === 'id') {
26
26
  str += `(${field.meta.id.bucket.refName})`;
27
27
  }
28
- if (field.type === 'enum') {
28
+ else if (field.type === 'enum') {
29
29
  const options = field.meta.enum.options;
30
30
  if (typeof options === 'object') {
31
31
  str += `(${Object.keys(options)})`;
@@ -34,7 +34,7 @@ class $Message {
34
34
  str += `(${options})`;
35
35
  }
36
36
  }
37
- if (field.array) {
37
+ else if (field.type === 'list') {
38
38
  str += '[]';
39
39
  }
40
40
  str += '\n';
@@ -11,6 +11,5 @@ export declare class MessageParser<$ extends $Message> {
11
11
  constructor(schema: $);
12
12
  static parseWithTrxModule(trx: AnyTrxNode, raw: RawMessageInput<any, any>, sigKey?: string): Promise<any>;
13
13
  parse(trx: AnyTrxNode, raw: $['#raw'], sigKey?: string): Promise<Message<$>>;
14
- private sanitize;
15
14
  }
16
15
  export type AnyMessageParser = MessageParser<$Message>;
@@ -28,78 +28,11 @@ class MessageParser {
28
28
  }
29
29
  return parser.parse(trx, raw, sigKey);
30
30
  }
31
- // TODO: OPTIMIZATION
32
- // Parse everything that's static first, then move on to
33
- // parsing ids etc.
34
31
  async parse(trx, raw, sigKey) {
35
32
  log_1.Log.debug('trx', trx.globalId, `${(0, log_1.scopeTag)('message', this.schema.name)} Parse${sigKey ? ' (signed)' : ''}`, raw);
36
- const applyFieldRules = async (field, parent, value, path) => {
37
- // Apply rules to the field
38
- // If field is an array, the value passed to the rule is the array itself
39
- for (const r in field.rules) {
40
- const rule = field.rules[r];
41
- const res = await rule({ field, value, path: path.join('.'), msg: parsed });
42
- if (typeof res === 'object') {
43
- parent[path.at(-1)] = res.set;
44
- }
45
- else if (res !== true) {
46
- throw error_1.NesoiError.Message.RuleFailed({ rule, error: res });
47
- }
48
- }
49
- if (!value)
50
- return;
51
- if (field.type === 'obj') {
52
- if (field.array) {
53
- for (let i = 0; i < value?.length; i++) {
54
- await applyRules(field.children, value[i] || {}, [...path, i.toString()]);
55
- }
56
- }
57
- else {
58
- await applyRules(field.children, value || {}, path);
59
- }
60
- }
61
- else if (field.type === 'dict') {
62
- if (field.array) {
63
- for (let i = 0; i < value?.length; i++) {
64
- for (const k in value[i]) {
65
- await applyFieldRules(field.children.__dict, value[i], value[i][k], [...path, i.toString(), k]);
66
- }
67
- }
68
- }
69
- else {
70
- for (const k in value) {
71
- await applyFieldRules(field.children.__dict, value, value[k], [...path, k]);
72
- }
73
- }
74
- }
75
- };
76
- const applyRules = async (fields, parent, path = []) => {
77
- for (const f in fields) {
78
- const field = fields[f];
79
- const value = parent[field.name];
80
- const _path = [...path, field.name];
81
- await applyFieldRules(field, parent, value, _path);
82
- }
83
- };
84
33
  const fields = this.schema.template.fields;
85
- const parsed = {};
86
- for (const k in fields) {
87
- const field = fields[k];
88
- const key_raw = field.path_raw.split('.')[0];
89
- const key_parsed = field.path_parsed.split('.')[0];
90
- const value = raw[key_raw];
91
- this.sanitize(value);
92
- parsed[key_parsed] = await (0, message_template_parser_1.MessageTemplateFieldParser)(raw, trx, field, value);
93
- }
94
- await applyRules(this.schema.template.fields, parsed);
34
+ const parsed = await (0, message_template_parser_1.MessageTemplateFieldParser)(trx, fields, raw);
95
35
  return message_1.Message.new(this.schema.name, parsed, sigKey);
96
36
  }
97
- sanitize(value) {
98
- if (typeof value === 'function') {
99
- throw error_1.NesoiError.Message.UnsanitaryValue({
100
- details: 'Functions not allowed as message inputs.'
101
- });
102
- }
103
- }
104
37
  }
105
38
  exports.MessageParser = MessageParser;
@@ -17,7 +17,7 @@ class MessageTemplateBuilder {
17
17
  }
18
18
  /// Build
19
19
  static build(builder, tree, module) {
20
- const fields = message_template_field_builder_1.MessageTemplateFieldBuilder.buildChildren(builder._fields, tree, module);
20
+ const fields = message_template_field_builder_1.MessageTemplateFieldBuilder.buildMany(builder._fields, tree, module);
21
21
  return new message_template_schema_1.$MessageTemplate(fields);
22
22
  }
23
23
  }
@@ -6,6 +6,7 @@ export type $MessageTemplateRule = (def: {
6
6
  path: string;
7
7
  value: any;
8
8
  msg: $Message['#raw'];
9
+ inject: Record<string, any>;
9
10
  }) => {
10
11
  set: any;
11
12
  } | true | string | Promise<{
@@ -47,17 +48,15 @@ export declare class $MessageTemplateField {
47
48
  /** A human name for the field */
48
49
  alias: string;
49
50
  /** The absolute path for reading the field value on the raw object */
50
- path_raw: string;
51
+ pathRaw: string;
51
52
  /** The absolute path for writing the field value on the parsed object */
52
- path_parsed: string;
53
- array: boolean;
53
+ pathParsed: string;
54
54
  required: boolean;
55
55
  defaultValue: any;
56
56
  nullable: boolean;
57
57
  rules: $MessageTemplateRule[];
58
58
  meta: $MessageTemplateFieldMeta;
59
59
  children?: $MessageTemplateFields | undefined;
60
- or?: $MessageTemplateField | undefined;
61
60
  '#raw': unknown;
62
61
  '#parsed': unknown;
63
62
  $t: string;
@@ -72,9 +71,14 @@ export declare class $MessageTemplateField {
72
71
  /** A human name for the field */
73
72
  alias: string,
74
73
  /** The absolute path for reading the field value on the raw object */
75
- path_raw: string,
74
+ pathRaw: string,
76
75
  /** The absolute path for writing the field value on the parsed object */
77
- path_parsed: string, array: boolean, required: boolean, defaultValue: any, nullable: boolean, rules: $MessageTemplateRule[], meta: $MessageTemplateFieldMeta, children?: $MessageTemplateFields | undefined, or?: $MessageTemplateField | undefined);
76
+ pathParsed: string, required: boolean, defaultValue: any, nullable: boolean, rules: $MessageTemplateRule[], meta: $MessageTemplateFieldMeta, children?: $MessageTemplateFields | undefined);
77
+ /**
78
+ * Warning: this does not clone the field's children or union.
79
+ * @returns
80
+ */
81
+ static clone(schema: $MessageTemplateField): $MessageTemplateField;
78
82
  }
79
83
  export type $MessageTemplateFields = {
80
84
  [x: string]: $MessageTemplateField;
@@ -88,4 +92,5 @@ export declare class $MessageTemplate {
88
92
  $t: string;
89
93
  constructor(fields?: $MessageTemplateFields);
90
94
  static fieldsOfType(template: $MessageTemplate, type: $MessageTemplateFieldType): $MessageTemplateField[];
95
+ static forEachField(template: $MessageTemplate, predicate: (field: $MessageTemplateField, path: string) => void): void;
91
96
  }
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.$MessageTemplate = exports.$MessageTemplateField = void 0;
4
+ const deep_1 = require("../../../../engine/util/deep");
4
5
  /**
5
6
  * @category Schemas
6
7
  * @subcategory Entity
@@ -17,24 +18,29 @@ class $MessageTemplateField {
17
18
  /** A human name for the field */
18
19
  alias,
19
20
  /** The absolute path for reading the field value on the raw object */
20
- path_raw,
21
+ pathRaw,
21
22
  /** The absolute path for writing the field value on the parsed object */
22
- path_parsed, array, required, defaultValue, nullable, rules, meta, children, or) {
23
+ pathParsed, required, defaultValue, nullable, rules, meta, children) {
23
24
  this.type = type;
24
25
  this.name = name;
25
26
  this.alias = alias;
26
- this.path_raw = path_raw;
27
- this.path_parsed = path_parsed;
28
- this.array = array;
27
+ this.pathRaw = pathRaw;
28
+ this.pathParsed = pathParsed;
29
29
  this.required = required;
30
30
  this.defaultValue = defaultValue;
31
31
  this.nullable = nullable;
32
32
  this.rules = rules;
33
33
  this.meta = meta;
34
34
  this.children = children;
35
- this.or = or;
36
35
  this.$t = 'message.template.field';
37
36
  }
37
+ /**
38
+ * Warning: this does not clone the field's children or union.
39
+ * @returns
40
+ */
41
+ static clone(schema) {
42
+ return new $MessageTemplateField(schema.type, schema.name, schema.alias, schema.pathRaw, schema.pathParsed, schema.required, schema.defaultValue, schema.nullable, [...schema.rules], deep_1.Deep.copy(schema.meta), undefined);
43
+ }
38
44
  }
39
45
  exports.$MessageTemplateField = $MessageTemplateField;
40
46
  /**
@@ -63,5 +69,22 @@ class $MessageTemplate {
63
69
  }
64
70
  return fields;
65
71
  }
72
+ static forEachField(template, predicate) {
73
+ let poll = Object.entries(template.fields).map(([path, field]) => ({ path, field }));
74
+ while (poll.length) {
75
+ const next = [];
76
+ for (const obj of poll) {
77
+ predicate(obj.field, obj.path);
78
+ if (obj.field.children) {
79
+ next.push(...Object.values(obj.field.children)
80
+ .map((field, i) => ({
81
+ field,
82
+ path: obj.path + '.' + (obj.field.type === 'union' ? i : field.name)
83
+ })));
84
+ }
85
+ }
86
+ poll = next;
87
+ }
88
+ }
66
89
  }
67
90
  exports.$MessageTemplate = $MessageTemplate;
@@ -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";
@@ -18,235 +17,83 @@ export declare class MessageTemplateFieldFactory<Space extends $Space, Module ex
18
17
  private module;
19
18
  private alias?;
20
19
  constructor(module: string);
20
+ /**
21
+ * Specifies an alias for the field.
22
+ */
21
23
  as(alias: string): Omit<typeof this, "as">;
22
- get any(): MessageTemplateFieldBuilder<Module, Message, {
23
- '': any;
24
- }, {
25
- '': any;
26
- }, {}, [never, never], [never, never]>;
27
- ts<T = any>(): MessageTemplateFieldBuilder<Module, Message, {
28
- '': T;
29
- }, {
30
- '': T;
31
- }, {}, [never, never], [never, never]>;
32
- get boolean(): MessageTemplateFieldBuilder<Module, Message, {
33
- '': boolean;
34
- }, {
35
- '': boolean;
36
- }, {}, [never, never], [never, never]>;
37
- get date(): MessageTemplateFieldBuilder<Module, Message, {
38
- '': string;
39
- }, {
40
- '': NesoiDate;
41
- }, {}, [never, never], [never, never]>;
42
- get datetime(): MessageTemplateFieldBuilder<Module, Message, {
43
- '': string;
44
- }, {
45
- '': NesoiDatetime;
46
- }, {}, [never, never], [never, never]>;
47
- get duration(): MessageTemplateFieldBuilder<Module, Message, {
48
- '': string;
49
- }, {
50
- '': NesoiDuration;
51
- }, {}, [never, never], [never, never]>;
52
- decimal(config?: $MessageTemplateFieldMeta['decimal']): MessageTemplateFieldBuilder<Module, Message, {
53
- '': string;
54
- }, {
55
- '': NesoiDecimal;
56
- }, {}, [never, never], [never, never]>;
57
- 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, {
58
- '': (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;
59
- }, {
60
- '': (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;
61
- }, {}, [never, never], [never, never]>;
62
- file(config?: $MessageTemplateFieldMeta['file']): MessageTemplateFieldBuilder<Module, Message, {
63
- '': NesoiFile;
64
- }, {
65
- '': NesoiFile;
66
- }, {}, [never, never], [never, never]>;
67
- get float(): MessageTemplateFieldBuilder<Module, Message, {
68
- '': number;
69
- }, {
70
- '': number;
71
- }, {}, [never, never], [never, never]>;
72
- id<Name extends BucketName<Module>, View extends ViewName<Module['buckets'][Name]> | undefined>(bucket: Name, view?: View): MessageTemplateFieldBuilder<Module, Message, {
73
- _id: (Module["buckets"][Name]["#data"] & NesoiObj)["id"];
74
- }, {
75
- '': undefined extends View ? Module["buckets"][Name]["#data"] : Module["buckets"][Name]["views"][NonNullable<View>]["#data"];
76
- }, {}, [never, never], [never, never]>;
77
- get int(): MessageTemplateFieldBuilder<Module, Message, {
78
- '': number;
79
- }, {
80
- '': number;
81
- }, {}, [never, never], [never, never]>;
82
- get string(): MessageTemplateFieldBuilder<Module, Message, {
83
- '': string;
84
- }, {
85
- '': string;
86
- }, {}, [never, never], [never, never]>;
87
- get string_or_number(): MessageTemplateFieldBuilder<Module, Message, {
88
- '': string | number;
89
- }, {
90
- '': string | number;
91
- }, {}, [never, never], [never, never]>;
92
- obj<Builders extends MessageTemplateFieldBuilders>(children: Builders): MessageTemplateFieldBuilder<Module, Message, {
93
- '': $MessageInputInfer<Builders>;
94
- }, {
95
- '': $MessageOutputInfer<Builders>;
96
- }, Builders, [never, never], [never, never]>;
97
- dict<Builder extends MessageTemplateFieldBuilder<Module, Message, any, any, any>>(item: Builder): MessageTemplateFieldBuilder<Module, Message, {
98
- '': Record<string, Builder extends MessageTemplateFieldBuilder<any, any, infer X, any, any, [never, never], [never, never]> ? X[keyof X] : never>;
99
- }, {
100
- '': Record<string, Builder extends MessageTemplateFieldBuilder<any, any, any, infer X_1, any, [never, never], [never, never]> ? X_1[keyof X_1] : never>;
101
- }, {
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"]>, {
102
40
  __dict: Builder;
103
- }, [never, never], [never, never]>;
104
- msg<MessageName extends keyof Module['messages'], Message extends Module['messages'][MessageName], Builders extends MessageTemplateFieldBuilders>(msg: MessageName, extra: Builders): MessageTemplateFieldBuilder<Module, Message, {
105
- '': Omit<Message["#raw"], "$"> & {
106
- $: any;
107
- } & { [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]> ? {
108
- path: `${K & string}${keyof I & string}`;
109
- data: I[keyof I];
110
- opt: Opt[0];
111
- nul: Nul[0];
112
- } : 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]> ? {
113
- path: `${K & string}${keyof I & string}`;
114
- data: I[keyof I];
115
- opt: Opt[0];
116
- nul: Nul[0];
117
- } : 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]> ? {
118
- path: `${K & string}${keyof I & string}`;
119
- data: I[keyof I];
120
- opt: Opt[0];
121
- nul: Nul[0];
122
- } : 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]> ? {
123
- path: `${K & string}${keyof I & string}`;
124
- data: I[keyof I];
125
- opt: Opt[0];
126
- nul: Nul[0];
127
- } : 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]> ? {
128
- path: `${K & string}${keyof I & string}`;
129
- data: I[keyof I];
130
- opt: Opt[0];
131
- nul: Nul[0];
132
- } : 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]> ? {
133
- path: `${K & string}${keyof I & string}`;
134
- data: I[keyof I];
135
- opt: Opt[0];
136
- nul: Nul[0];
137
- } : 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]> ? {
138
- path: `${K & string}${keyof I & string}`;
139
- data: I[keyof I];
140
- opt: Opt[0];
141
- nul: Nul[0];
142
- } : 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]> ? {
143
- path: `${K & string}${keyof I & string}`;
144
- data: I[keyof I];
145
- opt: Opt[0];
146
- nul: Nul[0];
147
- } : 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]> ? {
148
- path: `${K & string}${keyof I & string}`;
149
- data: I[keyof I];
150
- opt: Opt[0];
151
- nul: Nul[0];
152
- } : 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]> ? {
153
- path: `${K & string}${keyof I & string}`;
154
- data: I[keyof I];
155
- opt: Opt[0];
156
- nul: Nul[0];
157
- } : never; }[K_2]["nul"] | undefined; };
158
- }, {
159
- '': Omit<Message["#parsed"], "$"> & {
160
- $: any;
161
- } & { [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]> ? {
162
- path: `${K_3 & string}${keyof O & string}`;
163
- data: O[keyof O];
164
- opt: Opt_1[1];
165
- nul: Nul_1[1];
166
- } : 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]> ? {
167
- path: `${K_3 & string}${keyof O & string}`;
168
- data: O[keyof O];
169
- opt: Opt_1[1];
170
- nul: Nul_1[1];
171
- } : 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]> ? {
172
- path: `${K_3 & string}${keyof O & string}`;
173
- data: O[keyof O];
174
- opt: Opt_1[1];
175
- nul: Nul_1[1];
176
- } : 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]> ? {
177
- path: `${K_3 & string}${keyof O & string}`;
178
- data: O[keyof O];
179
- opt: Opt_1[1];
180
- nul: Nul_1[1];
181
- } : 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]> ? {
182
- path: `${K_3 & string}${keyof O & string}`;
183
- data: O[keyof O];
184
- opt: Opt_1[1];
185
- nul: Nul_1[1];
186
- } : 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]> ? {
187
- path: `${K_3 & string}${keyof O & string}`;
188
- data: O[keyof O];
189
- opt: Opt_1[1];
190
- nul: Nul_1[1];
191
- } : 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]> ? {
192
- path: `${K_3 & string}${keyof O & string}`;
193
- data: O[keyof O];
194
- opt: Opt_1[1];
195
- nul: Nul_1[1];
196
- } : 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]> ? {
197
- path: `${K_3 & string}${keyof O & string}`;
198
- data: O[keyof O];
199
- opt: Opt_1[1];
200
- nul: Nul_1[1];
201
- } : 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]> ? {
202
- path: `${K_3 & string}${keyof O & string}`;
203
- data: O[keyof O];
204
- opt: Opt_1[1];
205
- nul: Nul_1[1];
206
- } : 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]> ? {
207
- path: `${K_3 & string}${keyof O & string}`;
208
- data: O[keyof O];
209
- opt: Opt_1[1];
210
- nul: Nul_1[1];
211
- } : never; }[K_5]["nul"] | undefined; };
212
- }, {}, [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], "">;
213
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;
214
54
  }
215
55
  /**
216
56
  * @category Builders
217
57
  * @subcategory Entity
218
58
  * */
219
- 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
220
- 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 = ''> {
221
60
  private type;
222
61
  private value;
223
62
  private alias?;
224
63
  private children?;
225
- private _array;
64
+ '#input': Input;
65
+ '#input_suffix': InputSuffix;
66
+ '#output': Output;
67
+ '#optional': Optional;
226
68
  private _required;
227
69
  private _defaultValue?;
228
70
  private _nullable;
229
71
  private _rules;
230
- private _or?;
231
72
  constructor(type: $MessageTemplateFieldType, value: $MessageTemplateFieldMeta, alias?: string | undefined, children?: Children | undefined);
232
73
  as(alias: string): this;
233
- get optional(): MessageTemplateFieldBuilder<Module, Message, DefinedInput, DefinedOutput, Children, [undefined, undefined], Nullable>;
234
- default(value: DefinedInput[keyof DefinedInput] | Nullable[0]): MessageTemplateFieldBuilder<Module, Message, DefinedInput, DefinedOutput, Children, [undefined, never], Nullable>;
235
- get nullable(): MessageTemplateFieldBuilder<Module, Message, DefinedInput, DefinedOutput, Children, Optional, [null, null]>;
236
- rule(rule: MessageTemplateRuleDef<DefinedOutput[keyof DefinedOutput], Message['#raw']>): this;
237
- get array(): MessageTemplateFieldBuilder<Module, Message, { [K in keyof DefinedInput]: DefinedInput[K][]; }, { [K in keyof DefinedOutput]: DefinedOutput[K][]; }, Children, Optional, Nullable>;
238
- 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;
239
84
  static build(builder: AnyMessageTemplateFieldBuilder, name: string, tree: ModuleTree, module: $Module, basePathRaw: string, basePathParsed: string): $MessageTemplateField;
240
- 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;
241
86
  }
242
87
  export type MessageTemplateFieldBuilders = {
243
88
  [x: string]: AnyMessageTemplateFieldBuilder;
244
89
  };
245
- export type AnyMessageTemplateFieldBuilder = MessageTemplateFieldBuilder<any, any, any, any, any>;
90
+ export type AnyMessageTemplateFieldBuilder = MessageTemplateFieldBuilder<any, any, any, any, any, any, any>;
246
91
  export type MessageTemplateRuleDef<I, Msg> = (def: {
247
92
  field: $MessageTemplateField;
93
+ path: string;
248
94
  value: I;
249
95
  msg: Msg;
96
+ inject: Record<string, any>;
250
97
  }) => {
251
98
  set: I;
252
99
  } | true | string | Promise<{