typia 7.0.0-dev.20240930 → 7.0.0-dev.20241001

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 (169) hide show
  1. package/lib/index.mjs +25 -25
  2. package/lib/index.mjs.map +1 -1
  3. package/lib/programmers/AssertProgrammer.js +20 -17
  4. package/lib/programmers/AssertProgrammer.js.map +1 -1
  5. package/lib/programmers/CheckerProgrammer.js +274 -216
  6. package/lib/programmers/CheckerProgrammer.js.map +1 -1
  7. package/lib/programmers/FeatureProgrammer.js +16 -8
  8. package/lib/programmers/FeatureProgrammer.js.map +1 -1
  9. package/lib/programmers/IsProgrammer.js +38 -20
  10. package/lib/programmers/IsProgrammer.js.map +1 -1
  11. package/lib/programmers/RandomProgrammer.js +83 -68
  12. package/lib/programmers/RandomProgrammer.js.map +1 -1
  13. package/lib/programmers/TypiaProgrammer.d.ts +2 -2
  14. package/lib/programmers/TypiaProgrammer.js +79 -75
  15. package/lib/programmers/TypiaProgrammer.js.map +1 -1
  16. package/lib/programmers/ValidateProgrammer.js +39 -17
  17. package/lib/programmers/ValidateProgrammer.js.map +1 -1
  18. package/lib/programmers/helpers/CloneJoiner.js +4 -1
  19. package/lib/programmers/helpers/CloneJoiner.js.map +1 -1
  20. package/lib/programmers/helpers/NotationJoiner.d.ts +2 -1
  21. package/lib/programmers/helpers/NotationJoiner.js +34 -33
  22. package/lib/programmers/helpers/NotationJoiner.js.map +1 -1
  23. package/lib/programmers/helpers/PruneJoiner.js +4 -1
  24. package/lib/programmers/helpers/PruneJoiner.js.map +1 -1
  25. package/lib/programmers/helpers/RandomJoiner.d.ts +1 -1
  26. package/lib/programmers/helpers/RandomJoiner.js.map +1 -1
  27. package/lib/programmers/helpers/RandomRanger.js.map +1 -1
  28. package/lib/programmers/helpers/StringifyJoinder.js +4 -1
  29. package/lib/programmers/helpers/StringifyJoinder.js.map +1 -1
  30. package/lib/programmers/helpers/StringifyPredicator.d.ts +1 -1
  31. package/lib/programmers/helpers/StringifyPredicator.js +4 -3
  32. package/lib/programmers/helpers/StringifyPredicator.js.map +1 -1
  33. package/lib/programmers/helpers/UnionExplorer.d.ts +52 -12
  34. package/lib/programmers/helpers/UnionExplorer.js +183 -144
  35. package/lib/programmers/helpers/UnionExplorer.js.map +1 -1
  36. package/lib/programmers/helpers/UnionPredicator.d.ts +1 -1
  37. package/lib/programmers/helpers/UnionPredicator.js +7 -7
  38. package/lib/programmers/http/HttpFormDataProgrammer.js +77 -70
  39. package/lib/programmers/http/HttpFormDataProgrammer.js.map +1 -1
  40. package/lib/programmers/http/HttpHeadersProgrammer.js +69 -68
  41. package/lib/programmers/http/HttpHeadersProgrammer.js.map +1 -1
  42. package/lib/programmers/http/HttpQueryProgrammer.js +69 -62
  43. package/lib/programmers/http/HttpQueryProgrammer.js.map +1 -1
  44. package/lib/programmers/internal/application_escaped.js +4 -4
  45. package/lib/programmers/internal/application_escaped.js.map +1 -1
  46. package/lib/programmers/internal/application_templates.js +8 -2
  47. package/lib/programmers/internal/application_templates.js.map +1 -1
  48. package/lib/programmers/internal/application_union_discriminator.d.ts +1 -1
  49. package/lib/programmers/internal/application_union_discriminator.js +6 -6
  50. package/lib/programmers/internal/application_union_discriminator.js.map +1 -1
  51. package/lib/programmers/internal/application_v30_object.js +6 -3
  52. package/lib/programmers/internal/application_v30_object.js.map +1 -1
  53. package/lib/programmers/internal/application_v31_object.js +4 -1
  54. package/lib/programmers/internal/application_v31_object.js.map +1 -1
  55. package/lib/programmers/internal/check_array_length.js +21 -26
  56. package/lib/programmers/internal/check_array_length.js.map +1 -1
  57. package/lib/programmers/internal/check_bigint.js +18 -26
  58. package/lib/programmers/internal/check_bigint.js.map +1 -1
  59. package/lib/programmers/internal/check_dynamic_key.d.ts +1 -5
  60. package/lib/programmers/internal/check_dynamic_key.js +109 -91
  61. package/lib/programmers/internal/check_dynamic_key.js.map +1 -1
  62. package/lib/programmers/internal/check_dynamic_properties.js +88 -90
  63. package/lib/programmers/internal/check_dynamic_properties.js.map +1 -1
  64. package/lib/programmers/internal/check_native.js +8 -5
  65. package/lib/programmers/internal/check_native.js.map +1 -1
  66. package/lib/programmers/internal/check_number.js +59 -65
  67. package/lib/programmers/internal/check_number.js.map +1 -1
  68. package/lib/programmers/internal/check_object.js +31 -22
  69. package/lib/programmers/internal/check_object.js.map +1 -1
  70. package/lib/programmers/internal/check_string.js +18 -26
  71. package/lib/programmers/internal/check_string.js.map +1 -1
  72. package/lib/programmers/internal/check_template.js +20 -21
  73. package/lib/programmers/internal/check_template.js.map +1 -1
  74. package/lib/programmers/internal/check_union_array_like.js +68 -53
  75. package/lib/programmers/internal/check_union_array_like.js.map +1 -1
  76. package/lib/programmers/internal/decode_union_object.js +59 -49
  77. package/lib/programmers/internal/decode_union_object.js.map +1 -1
  78. package/lib/programmers/internal/feature_object_entries.js +31 -37
  79. package/lib/programmers/internal/feature_object_entries.js.map +1 -1
  80. package/lib/programmers/internal/llm_schema_escaped.js +29 -11
  81. package/lib/programmers/internal/llm_schema_escaped.js.map +1 -1
  82. package/lib/programmers/internal/llm_schema_object.js +4 -1
  83. package/lib/programmers/internal/llm_schema_object.js.map +1 -1
  84. package/lib/programmers/internal/metadata_to_pattern.js +44 -41
  85. package/lib/programmers/internal/metadata_to_pattern.js.map +1 -1
  86. package/lib/programmers/internal/postfix_of_tuple.d.ts +1 -1
  87. package/lib/programmers/internal/postfix_of_tuple.js +3 -0
  88. package/lib/programmers/internal/postfix_of_tuple.js.map +1 -1
  89. package/lib/programmers/internal/prune_object_properties.js +6 -3
  90. package/lib/programmers/internal/prune_object_properties.js.map +1 -1
  91. package/lib/programmers/internal/random_custom.js +8 -14
  92. package/lib/programmers/internal/random_custom.js.map +1 -1
  93. package/lib/programmers/internal/stringify_dynamic_properties.js +4 -1
  94. package/lib/programmers/internal/stringify_dynamic_properties.js.map +1 -1
  95. package/lib/programmers/internal/stringify_regular_properties.js +4 -4
  96. package/lib/programmers/internal/stringify_regular_properties.js.map +1 -1
  97. package/lib/programmers/internal/template_to_pattern.js +10 -5
  98. package/lib/programmers/internal/template_to_pattern.js.map +1 -1
  99. package/lib/programmers/internal/wrap_metadata_rest_tuple.d.ts +1 -2
  100. package/lib/programmers/internal/wrap_metadata_rest_tuple.js +3 -0
  101. package/lib/programmers/internal/wrap_metadata_rest_tuple.js.map +1 -1
  102. package/lib/programmers/json/JsonStringifyProgrammer.js +76 -52
  103. package/lib/programmers/json/JsonStringifyProgrammer.js.map +1 -1
  104. package/lib/programmers/misc/MiscCloneProgrammer.js +143 -115
  105. package/lib/programmers/misc/MiscCloneProgrammer.js.map +1 -1
  106. package/lib/programmers/misc/MiscPruneProgrammer.js +65 -50
  107. package/lib/programmers/misc/MiscPruneProgrammer.js.map +1 -1
  108. package/lib/programmers/notations/NotationGeneralProgrammer.d.ts +4 -1
  109. package/lib/programmers/notations/NotationGeneralProgrammer.js +166 -115
  110. package/lib/programmers/notations/NotationGeneralProgrammer.js.map +1 -1
  111. package/lib/programmers/protobuf/ProtobufEncodeProgrammer.js +32 -24
  112. package/lib/programmers/protobuf/ProtobufEncodeProgrammer.js.map +1 -1
  113. package/lib/utils/NamingConvention/NamingConvention.js +41 -47
  114. package/lib/utils/NamingConvention/NamingConvention.js.map +1 -1
  115. package/package.json +1 -1
  116. package/src/programmers/AssertProgrammer.ts +30 -27
  117. package/src/programmers/CheckerProgrammer.ts +279 -248
  118. package/src/programmers/FeatureProgrammer.ts +17 -15
  119. package/src/programmers/IsProgrammer.ts +34 -20
  120. package/src/programmers/RandomProgrammer.ts +18 -9
  121. package/src/programmers/TypiaProgrammer.ts +48 -34
  122. package/src/programmers/ValidateProgrammer.ts +50 -27
  123. package/src/programmers/helpers/CloneJoiner.ts +4 -1
  124. package/src/programmers/helpers/NotationJoiner.ts +85 -83
  125. package/src/programmers/helpers/ProtobufUtil.ts +2 -2
  126. package/src/programmers/helpers/PruneJoiner.ts +4 -1
  127. package/src/programmers/helpers/RandomJoiner.ts +5 -2
  128. package/src/programmers/helpers/RandomRanger.ts +8 -1
  129. package/src/programmers/helpers/StringifyJoinder.ts +4 -1
  130. package/src/programmers/helpers/StringifyPredicator.ts +4 -3
  131. package/src/programmers/helpers/UnionExplorer.ts +279 -202
  132. package/src/programmers/helpers/UnionPredicator.ts +5 -5
  133. package/src/programmers/http/HttpFormDataProgrammer.ts +135 -114
  134. package/src/programmers/http/HttpHeadersProgrammer.ts +145 -120
  135. package/src/programmers/http/HttpQueryProgrammer.ts +137 -116
  136. package/src/programmers/internal/application_escaped.ts +6 -6
  137. package/src/programmers/internal/application_templates.ts +8 -6
  138. package/src/programmers/internal/application_union_discriminator.ts +6 -6
  139. package/src/programmers/internal/application_v30_object.ts +6 -3
  140. package/src/programmers/internal/application_v31_object.ts +4 -1
  141. package/src/programmers/internal/application_v31_tuple.ts +1 -1
  142. package/src/programmers/internal/check_array_length.ts +31 -30
  143. package/src/programmers/internal/check_bigint.ts +31 -31
  144. package/src/programmers/internal/check_dynamic_key.ts +155 -126
  145. package/src/programmers/internal/check_dynamic_properties.ts +152 -154
  146. package/src/programmers/internal/check_native.ts +11 -5
  147. package/src/programmers/internal/check_number.ts +88 -84
  148. package/src/programmers/internal/check_object.ts +45 -31
  149. package/src/programmers/internal/check_string.ts +31 -30
  150. package/src/programmers/internal/check_template.ts +34 -32
  151. package/src/programmers/internal/check_union_array_like.ts +245 -228
  152. package/src/programmers/internal/decode_union_object.ts +92 -75
  153. package/src/programmers/internal/feature_object_entries.ts +43 -46
  154. package/src/programmers/internal/llm_schema_escaped.ts +36 -13
  155. package/src/programmers/internal/llm_schema_object.ts +4 -1
  156. package/src/programmers/internal/metadata_to_pattern.ts +31 -23
  157. package/src/programmers/internal/postfix_of_tuple.ts +3 -0
  158. package/src/programmers/internal/prune_object_properties.ts +6 -3
  159. package/src/programmers/internal/random_custom.ts +24 -23
  160. package/src/programmers/internal/stringify_dynamic_properties.ts +4 -1
  161. package/src/programmers/internal/stringify_regular_properties.ts +7 -7
  162. package/src/programmers/internal/template_to_pattern.ts +12 -4
  163. package/src/programmers/internal/wrap_metadata_rest_tuple.ts +3 -0
  164. package/src/programmers/json/JsonStringifyProgrammer.ts +71 -51
  165. package/src/programmers/misc/MiscCloneProgrammer.ts +156 -132
  166. package/src/programmers/misc/MiscPruneProgrammer.ts +61 -49
  167. package/src/programmers/notations/NotationGeneralProgrammer.ts +193 -144
  168. package/src/programmers/protobuf/ProtobufEncodeProgrammer.ts +25 -21
  169. package/src/utils/NamingConvention/NamingConvention.ts +40 -42
@@ -7,91 +7,108 @@ import { FeatureProgrammer } from "../FeatureProgrammer";
7
7
  /**
8
8
  * @internal
9
9
  */
10
- export const decode_union_object =
11
- (
12
- checker: (
13
- input: ts.Expression,
14
- obj: MetadataObject,
15
- explore: FeatureProgrammer.IExplore,
16
- ) => ts.Expression,
17
- ) =>
18
- (
19
- decoder: (
20
- input: ts.Expression,
21
- obj: MetadataObject,
22
- explore: FeatureProgrammer.IExplore,
23
- ) => ts.Expression,
24
- ) =>
25
- (success: (exp: ts.Expression) => ts.Expression) =>
26
- (escaper: (value: ts.Expression, expected: string) => ts.Statement) =>
27
- (
28
- input: ts.Expression,
29
- targets: MetadataObject[],
30
- explore: FeatureProgrammer.IExplore,
31
- ): ts.CallExpression =>
32
- ts.factory.createCallExpression(
33
- ts.factory.createArrowFunction(
34
- undefined,
35
- undefined,
36
- [],
37
- undefined,
38
- undefined,
39
- iterate(escaper)(
40
- input,
41
- targets.map((obj) => ({
42
- type: "object",
43
- is: () => success(checker(input, obj, explore)),
44
- value: () => decoder(input, obj, explore),
45
- })),
46
- `(${targets.map((t) => t.name).join(" | ")})`,
47
- ),
48
- ),
10
+ export const decode_union_object = (props: {
11
+ checker: (next: {
12
+ input: ts.Expression;
13
+ object: MetadataObject;
14
+ explore: FeatureProgrammer.IExplore;
15
+ }) => ts.Expression;
16
+ decoder: (next: {
17
+ input: ts.Expression;
18
+ object: MetadataObject;
19
+ explore: FeatureProgrammer.IExplore;
20
+ }) => ts.Expression;
21
+ success: (exp: ts.Expression) => ts.Expression;
22
+ escaper: (next: { input: ts.Expression; expected: string }) => ts.Statement;
23
+ objects: MetadataObject[];
24
+ input: ts.Expression;
25
+ explore: FeatureProgrammer.IExplore;
26
+ }): ts.CallExpression =>
27
+ ts.factory.createCallExpression(
28
+ ts.factory.createArrowFunction(
49
29
  undefined,
50
30
  undefined,
51
- );
31
+ [],
32
+ undefined,
33
+ undefined,
34
+ iterate({
35
+ escaper: props.escaper,
36
+ input: props.input,
37
+ unions: props.objects.map((object) => ({
38
+ type: "object",
39
+ is: () =>
40
+ props.success(
41
+ props.checker({
42
+ input: props.input,
43
+ explore: props.explore,
44
+ object,
45
+ }),
46
+ ),
47
+ value: () =>
48
+ props.decoder({
49
+ input: props.input,
50
+ explore: props.explore,
51
+ object,
52
+ }),
53
+ })),
54
+ expected: `(${props.objects.map((t) => t.name).join(" | ")})`,
55
+ }),
56
+ ),
57
+ undefined,
58
+ undefined,
59
+ );
52
60
 
53
- const iterate =
54
- (escaper: (value: ts.Expression, expected: string) => ts.Statement) =>
55
- (input: ts.Expression, unions: IUnion[], expected: string) => {
56
- interface IBranch {
57
- condition: null | ts.Expression;
58
- value: ts.Expression;
59
- }
60
- const branches: IBranch[] = [];
61
+ /**
62
+ * @internal
63
+ */
64
+ const iterate = (props: {
65
+ escaper: (next: { input: ts.Expression; expected: string }) => ts.Statement;
66
+ unions: IUnion[];
67
+ expected: string;
68
+ input: ts.Expression;
69
+ }) => {
70
+ interface IBranch {
71
+ condition: null | ts.Expression;
72
+ value: ts.Expression;
73
+ }
74
+ const branches: IBranch[] = [];
61
75
 
62
- for (const u of unions) {
63
- const condition: ts.Expression = u.is();
64
- if (condition.kind === ts.SyntaxKind.TrueKeyword) {
65
- branches.push({
66
- condition: null,
67
- value: u.value(),
68
- });
69
- break;
70
- }
76
+ for (const u of props.unions) {
77
+ const condition: ts.Expression = u.is();
78
+ if (condition.kind === ts.SyntaxKind.TrueKeyword) {
71
79
  branches.push({
72
- condition,
80
+ condition: null,
73
81
  value: u.value(),
74
82
  });
83
+ break;
75
84
  }
76
- if (branches.length === 0)
77
- return ts.factory.createBlock([escaper(input, expected)], true);
78
- else if (branches.length === 1 && branches[0]!.condition === null)
79
- return branches[0]!.value;
85
+ branches.push({
86
+ condition,
87
+ value: u.value(),
88
+ });
89
+ }
90
+ if (branches.length === 0)
91
+ return ts.factory.createBlock([props.escaper(props)], true);
92
+ else if (branches.length === 1 && branches[0]!.condition === null)
93
+ return branches[0]!.value;
80
94
 
81
- const statements: ts.Statement[] = branches.map((b) =>
82
- b.condition !== null
83
- ? ts.factory.createIfStatement(
84
- b.condition,
85
- ts.factory.createReturnStatement(b.value),
86
- undefined,
87
- )
88
- : ts.factory.createReturnStatement(b.value),
89
- );
90
- if (branches.at(-1)!.condition !== null)
91
- statements.push(escaper(input, expected));
92
- return ts.factory.createBlock(statements, true);
93
- };
95
+ const statements: ts.Statement[] = branches.map((b) =>
96
+ b.condition !== null
97
+ ? ts.factory.createIfStatement(
98
+ b.condition,
99
+ ts.factory.createReturnStatement(b.value),
100
+ undefined,
101
+ )
102
+ : ts.factory.createReturnStatement(b.value),
103
+ );
104
+ if (branches.at(-1)!.condition !== null)
105
+ statements.push(props.escaper(props));
106
+ return ts.factory.createBlock(statements, true);
107
+ };
94
108
 
109
+ /**
110
+ * @internal
111
+ */
95
112
  interface IUnion {
96
113
  type: string;
97
114
  is: () => ts.Expression;
@@ -12,50 +12,47 @@ import { FunctionImporter } from "../helpers/FunctionImporter";
12
12
  /**
13
13
  * @internal
14
14
  */
15
- export const feature_object_entries =
16
- <Output extends ts.ConciseBody>(
17
- config: Pick<
18
- FeatureProgrammer.IConfig<Output>,
19
- "decoder" | "path" | "trace"
20
- >,
21
- ) =>
22
- (importer: FunctionImporter) =>
23
- (object: MetadataObject) =>
24
- (input: ts.Expression, from: "object" | "top" | "array" = "object") =>
25
- object.properties.map((prop) => {
26
- const sole: string | null = prop.key.getSoleLiteral();
27
- const propInput =
28
- sole === null
29
- ? ts.factory.createIdentifier("value")
30
- : Escaper.variable(sole)
31
- ? ts.factory.createPropertyAccessExpression(
32
- input,
33
- ts.factory.createIdentifier(sole),
34
- )
35
- : ts.factory.createElementAccessExpression(
36
- input,
37
- ts.factory.createStringLiteral(sole),
38
- );
39
- return {
15
+ export const feature_object_entries = <Output extends ts.ConciseBody>(props: {
16
+ config: Pick<FeatureProgrammer.IConfig<Output>, "decoder" | "path" | "trace">;
17
+ importer: FunctionImporter;
18
+ object: MetadataObject;
19
+ input: ts.Expression;
20
+ from?: "object" | "top" | "array";
21
+ }) =>
22
+ props.object.properties.map((next) => {
23
+ const sole: string | null = next.key.getSoleLiteral();
24
+ const propInput =
25
+ sole === null
26
+ ? ts.factory.createIdentifier("value")
27
+ : Escaper.variable(sole)
28
+ ? ts.factory.createPropertyAccessExpression(
29
+ props.input,
30
+ ts.factory.createIdentifier(sole),
31
+ )
32
+ : ts.factory.createElementAccessExpression(
33
+ props.input,
34
+ ts.factory.createStringLiteral(sole),
35
+ );
36
+ return {
37
+ input: propInput,
38
+ key: next.key,
39
+ meta: next.value,
40
+ expression: props.config.decoder({
40
41
  input: propInput,
41
- key: prop.key,
42
- meta: prop.value,
43
- expression: config.decoder({
44
- input: propInput,
45
- metadata: prop.value,
46
- explore: {
47
- tracable: config.path || config.trace,
48
- source: "function",
49
- from,
50
- postfix: config.trace
51
- ? sole !== null
52
- ? IdentifierFactory.postfix(sole)
53
- : (() => {
54
- importer.use("join");
55
- return `$join(key)`;
56
- })()
57
- : "",
58
- },
59
- }),
60
- };
61
- });
42
+ metadata: next.value,
43
+ explore: {
44
+ tracable: props.config.path || props.config.trace,
45
+ source: "function",
46
+ from: props.from ?? "object",
47
+ postfix: props.config.trace
48
+ ? sole !== null
49
+ ? IdentifierFactory.postfix(sole)
50
+ : (() => {
51
+ props.importer.use("join");
52
+ return `$join(key)`;
53
+ })()
54
+ : "",
55
+ },
56
+ }),
57
+ };
58
+ });
@@ -15,7 +15,12 @@ export const llm_schema_escaped = (escaped: MetadataEscaped): ILlmSchema[] => {
15
15
  attribute: {},
16
16
  });
17
17
  if (output === null) return [];
18
- else if (is_date(new Set())(escaped.original)) {
18
+ else if (
19
+ is_date({
20
+ visited: new Set(),
21
+ metadata: escaped.original,
22
+ })
23
+ ) {
19
24
  const string: ILlmSchema.IString | undefined = is_string(output)
20
25
  ? output
21
26
  : is_one_of(output)
@@ -46,16 +51,34 @@ const is_one_of = (elem: ILlmSchema): elem is ILlmSchema.IOneOf =>
46
51
  /**
47
52
  * @internal
48
53
  */
49
- const is_date =
50
- (visited: Set<Metadata>) =>
51
- (meta: Metadata): boolean => {
52
- if (visited.has(meta)) return false;
53
- visited.add(meta);
54
+ const is_date = (props: {
55
+ visited: Set<Metadata>;
56
+ metadata: Metadata;
57
+ }): boolean => {
58
+ if (props.visited.has(props.metadata)) return false;
59
+ props.visited.add(props.metadata);
54
60
 
55
- return (
56
- meta.natives.some((name) => name === "Date") ||
57
- meta.arrays.some((array) => is_date(visited)(array.type.value)) ||
58
- meta.tuples.some((tuple) => tuple.type.elements.some(is_date(visited))) ||
59
- meta.aliases.some((alias) => is_date(visited)(alias.value))
60
- );
61
- };
61
+ return (
62
+ props.metadata.natives.some((name) => name === "Date") ||
63
+ props.metadata.arrays.some((array) =>
64
+ is_date({
65
+ visited: props.visited,
66
+ metadata: array.type.value,
67
+ }),
68
+ ) ||
69
+ props.metadata.tuples.some((tuple) =>
70
+ tuple.type.elements.some((elem) =>
71
+ is_date({
72
+ visited: props.visited,
73
+ metadata: elem,
74
+ }),
75
+ ),
76
+ ) ||
77
+ props.metadata.aliases.some((alias) =>
78
+ is_date({
79
+ visited: props.visited,
80
+ metadata: alias.value,
81
+ }),
82
+ )
83
+ );
84
+ };
@@ -72,7 +72,10 @@ export const llm_schema_object = (props: {
72
72
  properties[key] = schema;
73
73
  if (property.value.isRequired() === true) required.push(key);
74
74
  } else {
75
- const pattern: string = metadata_to_pattern(true)(property.key);
75
+ const pattern: string = metadata_to_pattern({
76
+ top: true,
77
+ metadata: property.key,
78
+ });
76
79
  if (pattern === PatternUtil.STRING)
77
80
  extraMeta.additionalProperties = [property.value, schema];
78
81
  else extraMeta.patternProperties[pattern] = [property.value, schema];
@@ -7,28 +7,36 @@ import { template_to_pattern } from "./template_to_pattern";
7
7
  /**
8
8
  * @internal
9
9
  */
10
- export const metadata_to_pattern =
11
- (top: boolean) =>
12
- (meta: Metadata): string => {
13
- if (meta.atomics.find((a) => a.type === "string") !== undefined)
14
- return "(.*)";
10
+ export const metadata_to_pattern = (props: {
11
+ top: boolean;
12
+ metadata: Metadata;
13
+ }): string => {
14
+ if (props.metadata.atomics.find((a) => a.type === "string") !== undefined)
15
+ return "(.*)";
15
16
 
16
- const values: string[] = meta.constants
17
- .map((c) => {
18
- if (c.type !== "string") return c.values.map((v) => v.toString());
19
- return (c.values.map((v) => v.value) as string[]).map((str) =>
20
- PatternUtil.escape(str),
21
- );
22
- })
23
- .flat();
24
- for (const a of meta.atomics)
25
- if (a.type === "number" || a.type === "bigint")
26
- values.push(PatternUtil.NUMBER);
27
- else if (a.type === "boolean") values.push(PatternUtil.BOOLEAN);
28
- for (const { row } of meta.templates)
29
- values.push("(" + template_to_pattern(false)(row) + ")");
17
+ const values: string[] = props.metadata.constants
18
+ .map((c) => {
19
+ if (c.type !== "string") return c.values.map((v) => v.toString());
20
+ return (c.values.map((v) => v.value) as string[]).map((str) =>
21
+ PatternUtil.escape(str),
22
+ );
23
+ })
24
+ .flat();
25
+ for (const a of props.metadata.atomics)
26
+ if (a.type === "number" || a.type === "bigint")
27
+ values.push(PatternUtil.NUMBER);
28
+ else if (a.type === "boolean") values.push(PatternUtil.BOOLEAN);
29
+ for (const { row } of props.metadata.templates)
30
+ values.push(
31
+ "(" +
32
+ template_to_pattern({
33
+ top: false,
34
+ template: row,
35
+ }) +
36
+ ")",
37
+ );
30
38
 
31
- const pattern: string =
32
- values.length === 1 ? values[0]! : "(" + values.join("|") + ")";
33
- return top ? PatternUtil.fix(pattern) : pattern;
34
- };
39
+ const pattern: string =
40
+ values.length === 1 ? values[0]! : "(" + values.join("|") + ")";
41
+ return props.top ? PatternUtil.fix(pattern) : pattern;
42
+ };
@@ -1,2 +1,5 @@
1
+ /**
2
+ * @internal
3
+ */
1
4
  export const postfix_of_tuple = (str: string): string =>
2
5
  str.endsWith('"') ? str.slice(0, -1) : `${str} + "`;
@@ -9,11 +9,11 @@ import { metadata_to_pattern } from "./metadata_to_pattern";
9
9
  /**
10
10
  * @internal
11
11
  */
12
- export const prune_object_properties = (obj: MetadataObject) => {
12
+ export const prune_object_properties = (object: MetadataObject) => {
13
13
  const input: ts.Expression = ts.factory.createIdentifier("input");
14
14
  const key: ts.Expression = ts.factory.createIdentifier("key");
15
15
 
16
- const condition: ts.Expression[] = obj.properties.map((prop) => {
16
+ const condition: ts.Expression[] = object.properties.map((prop) => {
17
17
  const name: string | null = prop.key.getSoleLiteral();
18
18
  if (name !== null)
19
19
  return ts.factory.createStrictEquality(
@@ -22,7 +22,10 @@ export const prune_object_properties = (obj: MetadataObject) => {
22
22
  );
23
23
  return ts.factory.createCallExpression(
24
24
  ts.factory.createIdentifier(
25
- `RegExp(/${metadata_to_pattern(true)(prop.key)}/).test`,
25
+ `RegExp(/${metadata_to_pattern({
26
+ top: true,
27
+ metadata: prop.key,
28
+ })}/).test`,
26
29
  ),
27
30
  undefined,
28
31
  [key],
@@ -10,28 +10,29 @@ import { Customizable } from "../../typings/Customizable";
10
10
  /**
11
11
  * @internal
12
12
  */
13
- export const random_custom =
14
- (accessor: (name: string) => ts.Expression) =>
15
- (type: keyof Customizable) =>
16
- (tags: IMetadataTypeTag[]) =>
17
- (expression: ts.Expression) =>
18
- ExpressionFactory.coalesce(
19
- ts.factory.createCallChain(
20
- ts.factory.createPropertyAccessChain(
21
- accessor("customs"),
22
- ts.factory.createToken(ts.SyntaxKind.QuestionDotToken),
23
- ts.factory.createIdentifier(type),
24
- ),
13
+ export const random_custom = (props: {
14
+ accessor: (name: string) => ts.Expression;
15
+ type: keyof Customizable;
16
+ tags: IMetadataTypeTag[];
17
+ expression: ts.Expression;
18
+ }) =>
19
+ ExpressionFactory.coalesce(
20
+ ts.factory.createCallChain(
21
+ ts.factory.createPropertyAccessChain(
22
+ props.accessor("customs"),
25
23
  ts.factory.createToken(ts.SyntaxKind.QuestionDotToken),
26
- undefined,
27
- [
28
- LiteralFactory.generate(
29
- tags.map((t) => ({
30
- name: t.name,
31
- kind: t.kind,
32
- value: t.value,
33
- })),
34
- ),
35
- ],
24
+ ts.factory.createIdentifier(props.type),
36
25
  ),
37
- )(expression);
26
+ ts.factory.createToken(ts.SyntaxKind.QuestionDotToken),
27
+ undefined,
28
+ [
29
+ LiteralFactory.generate(
30
+ props.tags.map((t) => ({
31
+ name: t.name,
32
+ kind: t.kind,
33
+ value: t.value,
34
+ })),
35
+ ),
36
+ ],
37
+ ),
38
+ )(props.expression);
@@ -122,7 +122,10 @@ export const stringify_dynamic_properties = (
122
122
  const condition: ts.IfStatement = ts.factory.createIfStatement(
123
123
  ts.factory.createCallExpression(
124
124
  ts.factory.createIdentifier(
125
- `RegExp(/${metadata_to_pattern(true)(entry.key)}/).test`,
125
+ `RegExp(/${metadata_to_pattern({
126
+ top: true,
127
+ metadata: entry.key,
128
+ })}/).test`,
126
129
  ),
127
130
  undefined,
128
131
  [ts.factory.createIdentifier("key")],
@@ -10,21 +10,21 @@ import { IExpressionEntry } from "../helpers/IExpressionEntry";
10
10
  /**
11
11
  * @internal
12
12
  */
13
- export const stringify_regular_properties = (
14
- regular: IExpressionEntry<ts.Expression>[],
15
- dynamic: IExpressionEntry<ts.Expression>[],
16
- ): ts.Expression[] => {
13
+ export const stringify_regular_properties = (props: {
14
+ regular: IExpressionEntry<ts.Expression>[];
15
+ dynamic: IExpressionEntry<ts.Expression>[];
16
+ }): ts.Expression[] => {
17
17
  const output: ts.Expression[] = [];
18
18
 
19
- regular.sort((x, y) => sequence(x.meta) - sequence(y.meta));
20
- regular.forEach((entry, index) => {
19
+ props.regular.sort((x, y) => sequence(x.meta) - sequence(y.meta));
20
+ props.regular.forEach((entry, index) => {
21
21
  // BASE ELEMENTS
22
22
  const key: string = entry.key.getSoleLiteral()!;
23
23
  const base: ts.Expression[] = [
24
24
  ts.factory.createStringLiteral(`${JSON.stringify(key)}:`),
25
25
  entry.expression,
26
26
  ];
27
- if (index !== regular.length - 1 || dynamic.length !== 0)
27
+ if (index !== props.regular.length - 1 || props.dynamic.length !== 0)
28
28
  base.push(ts.factory.createStringLiteral(`,`));
29
29
 
30
30
  const empty: boolean =
@@ -7,9 +7,17 @@ import { metadata_to_pattern } from "./metadata_to_pattern";
7
7
  /**
8
8
  * @internal
9
9
  */
10
- export const template_to_pattern = (top: boolean) => (template: Metadata[]) => {
11
- const pattern: string = template
12
- .map((meta) => metadata_to_pattern(false)(meta))
10
+ export const template_to_pattern = (props: {
11
+ top: boolean;
12
+ template: Metadata[];
13
+ }) => {
14
+ const pattern: string = props.template
15
+ .map((meta) =>
16
+ metadata_to_pattern({
17
+ top: false,
18
+ metadata: meta,
19
+ }),
20
+ )
13
21
  .join("");
14
- return top ? PatternUtil.fix(pattern) : pattern;
22
+ return props.top ? PatternUtil.fix(pattern) : pattern;
15
23
  };
@@ -2,6 +2,9 @@ import { Metadata } from "../../schemas/metadata/Metadata";
2
2
  import { MetadataArray } from "../../schemas/metadata/MetadataArray";
3
3
  import { MetadataArrayType } from "../../schemas/metadata/MetadataArrayType";
4
4
 
5
+ /**
6
+ * @internal
7
+ */
5
8
  export const wrap_metadata_rest_tuple = (rest: Metadata) => {
6
9
  const wrapper: Metadata = Metadata.initialize();
7
10
  wrapper.arrays.push(