typia 7.0.0-dev.20241011 → 7.0.0-dev.20241012

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 (250) hide show
  1. package/lib/factories/MetadataCollection.d.ts +4 -4
  2. package/lib/factories/MetadataCollection.js +6 -4
  3. package/lib/factories/MetadataCollection.js.map +1 -1
  4. package/lib/factories/MetadataFactory.d.ts +2 -2
  5. package/lib/factories/MetadataFactory.js +8 -2
  6. package/lib/factories/MetadataFactory.js.map +1 -1
  7. package/lib/factories/MetadataTypeTagFactory.d.ts +2 -2
  8. package/lib/factories/MetadataTypeTagFactory.js +6 -6
  9. package/lib/factories/MetadataTypeTagFactory.js.map +1 -1
  10. package/lib/factories/MetadataTypeTagSchemaFactory.d.ts +2 -2
  11. package/lib/factories/MetadataTypeTagSchemaFactory.js +1 -1
  12. package/lib/factories/MetadataTypeTagSchemaFactory.js.map +1 -1
  13. package/lib/factories/ProtobufFactory.js +12 -22
  14. package/lib/factories/ProtobufFactory.js.map +1 -1
  15. package/lib/factories/internal/metadata/emplace_metadata_object.d.ts +2 -2
  16. package/lib/factories/internal/metadata/iterate_metadata_collection.js +2 -1
  17. package/lib/factories/internal/metadata/iterate_metadata_collection.js.map +1 -1
  18. package/lib/factories/internal/metadata/iterate_metadata_comment_tags.d.ts +2 -2
  19. package/lib/factories/internal/metadata/iterate_metadata_intersection.js +5 -2
  20. package/lib/factories/internal/metadata/iterate_metadata_intersection.js.map +1 -1
  21. package/lib/factories/internal/metadata/iterate_metadata_object.js +5 -1
  22. package/lib/factories/internal/metadata/iterate_metadata_object.js.map +1 -1
  23. package/lib/factories/internal/metadata/iterate_metadata_sort.js +6 -2
  24. package/lib/factories/internal/metadata/iterate_metadata_sort.js.map +1 -1
  25. package/lib/internal/$ProtobufSizer.js +1 -8
  26. package/lib/internal/$ProtobufSizer.js.map +1 -1
  27. package/lib/json.d.ts +1 -1
  28. package/lib/module.d.ts +1 -1
  29. package/lib/module.js +1 -1
  30. package/lib/module.js.map +1 -1
  31. package/lib/programmers/CheckerProgrammer.d.ts +2 -2
  32. package/lib/programmers/CheckerProgrammer.js +5 -3
  33. package/lib/programmers/CheckerProgrammer.js.map +1 -1
  34. package/lib/programmers/FeatureProgrammer.d.ts +5 -5
  35. package/lib/programmers/FeatureProgrammer.js.map +1 -1
  36. package/lib/programmers/IsProgrammer.d.ts +2 -2
  37. package/lib/programmers/RandomProgrammer.js +1 -1
  38. package/lib/programmers/RandomProgrammer.js.map +1 -1
  39. package/lib/programmers/helpers/ProtobufUtil.d.ts +2 -2
  40. package/lib/programmers/helpers/ProtobufUtil.js.map +1 -1
  41. package/lib/programmers/helpers/PruneJoiner.d.ts +2 -2
  42. package/lib/programmers/helpers/RandomJoiner.d.ts +2 -2
  43. package/lib/programmers/helpers/UnionExplorer.d.ts +3 -3
  44. package/lib/programmers/helpers/UnionExplorer.js.map +1 -1
  45. package/lib/programmers/helpers/UnionPredicator.d.ts +3 -3
  46. package/lib/programmers/helpers/UnionPredicator.js.map +1 -1
  47. package/lib/programmers/http/HttpFormDataProgrammer.js +1 -1
  48. package/lib/programmers/http/HttpFormDataProgrammer.js.map +1 -1
  49. package/lib/programmers/http/HttpHeadersProgrammer.js +1 -1
  50. package/lib/programmers/http/HttpHeadersProgrammer.js.map +1 -1
  51. package/lib/programmers/http/HttpQueryProgrammer.js +2 -2
  52. package/lib/programmers/http/HttpQueryProgrammer.js.map +1 -1
  53. package/lib/programmers/internal/application_union_discriminator.js +2 -2
  54. package/lib/programmers/internal/application_union_discriminator.js.map +1 -1
  55. package/lib/programmers/internal/application_v30_alias.js +1 -1
  56. package/lib/programmers/internal/application_v30_alias.js.map +1 -1
  57. package/lib/programmers/internal/application_v30_schema.js +1 -1
  58. package/lib/programmers/internal/application_v30_schema.js.map +1 -1
  59. package/lib/programmers/internal/application_v31_alias.js +1 -1
  60. package/lib/programmers/internal/application_v31_alias.js.map +1 -1
  61. package/lib/programmers/internal/application_v31_schema.js +1 -1
  62. package/lib/programmers/internal/application_v31_schema.js.map +1 -1
  63. package/lib/programmers/internal/llm_schema_object.js +1 -1
  64. package/lib/programmers/internal/llm_schema_object.js.map +1 -1
  65. package/lib/programmers/internal/llm_schema_station.js +2 -2
  66. package/lib/programmers/internal/llm_schema_station.js.map +1 -1
  67. package/lib/programmers/internal/prune_object_properties.js.map +1 -1
  68. package/lib/programmers/json/JsonApplicationProgrammer.js +6 -5
  69. package/lib/programmers/json/JsonApplicationProgrammer.js.map +1 -1
  70. package/lib/programmers/json/JsonSchemasProgrammer.d.ts +1 -1
  71. package/lib/programmers/json/JsonStringifyProgrammer.js +3 -3
  72. package/lib/programmers/json/JsonStringifyProgrammer.js.map +1 -1
  73. package/lib/programmers/llm/LlmApplicationProgrammer.js +7 -6
  74. package/lib/programmers/llm/LlmApplicationProgrammer.js.map +1 -1
  75. package/lib/programmers/llm/LlmSchemaProgrammer.js +1 -1
  76. package/lib/programmers/llm/LlmSchemaProgrammer.js.map +1 -1
  77. package/lib/programmers/misc/MiscCloneProgrammer.js +1 -1
  78. package/lib/programmers/misc/MiscCloneProgrammer.js.map +1 -1
  79. package/lib/programmers/misc/MiscPruneProgrammer.js +1 -1
  80. package/lib/programmers/misc/MiscPruneProgrammer.js.map +1 -1
  81. package/lib/programmers/notations/NotationGeneralProgrammer.js +1 -1
  82. package/lib/programmers/notations/NotationGeneralProgrammer.js.map +1 -1
  83. package/lib/programmers/protobuf/ProtobufDecodeProgrammer.js +6 -6
  84. package/lib/programmers/protobuf/ProtobufDecodeProgrammer.js.map +1 -1
  85. package/lib/programmers/protobuf/ProtobufEncodeProgrammer.js +1 -1
  86. package/lib/programmers/protobuf/ProtobufEncodeProgrammer.js.map +1 -1
  87. package/lib/programmers/protobuf/ProtobufMessageProgrammer.js +3 -3
  88. package/lib/programmers/protobuf/ProtobufMessageProgrammer.js.map +1 -1
  89. package/lib/schemas/json/IJsonSchemaCollection.js +3 -0
  90. package/lib/schemas/json/IJsonSchemaCollection.js.map +1 -0
  91. package/lib/schemas/metadata/IMetadata.d.ts +4 -1
  92. package/lib/schemas/metadata/IMetadataArray.d.ts +1 -2
  93. package/lib/schemas/metadata/IMetadataComponents.d.ts +2 -2
  94. package/lib/schemas/metadata/IMetadataDictionary.d.ts +2 -2
  95. package/lib/schemas/metadata/IMetadataObject.d.ts +2 -8
  96. package/lib/schemas/metadata/IMetadataObjectType.d.ts +11 -0
  97. package/lib/schemas/{json/IJsonSchemaList.js → metadata/IMetadataObjectType.js} +1 -1
  98. package/lib/schemas/metadata/IMetadataObjectType.js.map +1 -0
  99. package/lib/schemas/metadata/IMetadataTuple.d.ts +1 -2
  100. package/lib/schemas/metadata/Metadata.js +14 -15
  101. package/lib/schemas/metadata/Metadata.js.map +1 -1
  102. package/lib/schemas/metadata/MetadataArray.js +1 -1
  103. package/lib/schemas/metadata/MetadataArray.js.map +1 -1
  104. package/lib/schemas/metadata/MetadataComponents.d.ts +2 -2
  105. package/lib/schemas/metadata/MetadataComponents.js +2 -2
  106. package/lib/schemas/metadata/MetadataComponents.js.map +1 -1
  107. package/lib/schemas/metadata/MetadataObject.d.ts +8 -12
  108. package/lib/schemas/metadata/MetadataObject.js +44 -82
  109. package/lib/schemas/metadata/MetadataObject.js.map +1 -1
  110. package/lib/schemas/metadata/MetadataObjectType.d.ts +20 -0
  111. package/lib/schemas/metadata/MetadataObjectType.js +106 -0
  112. package/lib/schemas/metadata/MetadataObjectType.js.map +1 -0
  113. package/lib/schemas/metadata/MetadataTuple.js +1 -1
  114. package/lib/schemas/metadata/MetadataTuple.js.map +1 -1
  115. package/lib/transformers/TransformerError.js.map +1 -1
  116. package/package.json +2 -2
  117. package/src/executable/TypiaGenerateWizard.ts +83 -83
  118. package/src/executable/TypiaSetupWizard.ts +174 -174
  119. package/src/executable/setup/ArgumentParser.ts +42 -42
  120. package/src/executable/setup/FileRetriever.ts +19 -19
  121. package/src/executable/setup/PackageManager.ts +87 -87
  122. package/src/factories/IdentifierFactory.ts +89 -89
  123. package/src/factories/MetadataCollection.ts +280 -278
  124. package/src/factories/MetadataFactory.ts +11 -5
  125. package/src/factories/MetadataTypeTagFactory.ts +386 -385
  126. package/src/factories/MetadataTypeTagSchemaFactory.ts +82 -82
  127. package/src/factories/NumericRangeFactory.ts +72 -72
  128. package/src/factories/ProtobufFactory.ts +14 -28
  129. package/src/factories/StatementFactory.ts +90 -90
  130. package/src/factories/TemplateFactory.ts +64 -64
  131. package/src/factories/TypeFactory.ts +140 -140
  132. package/src/factories/internal/metadata/emplace_metadata_alias.ts +32 -32
  133. package/src/factories/internal/metadata/emplace_metadata_array_type.ts +39 -39
  134. package/src/factories/internal/metadata/emplace_metadata_object.ts +2 -2
  135. package/src/factories/internal/metadata/emplace_metadata_tuple.ts +56 -56
  136. package/src/factories/internal/metadata/explore_metadata.ts +30 -30
  137. package/src/factories/internal/metadata/iterate_metadata.ts +54 -54
  138. package/src/factories/internal/metadata/iterate_metadata_alias.ts +28 -28
  139. package/src/factories/internal/metadata/iterate_metadata_array.ts +63 -63
  140. package/src/factories/internal/metadata/iterate_metadata_atomic.ts +62 -62
  141. package/src/factories/internal/metadata/iterate_metadata_coalesce.ts +28 -28
  142. package/src/factories/internal/metadata/iterate_metadata_collection.ts +4 -3
  143. package/src/factories/internal/metadata/iterate_metadata_comment_tags.ts +2 -2
  144. package/src/factories/internal/metadata/iterate_metadata_constant.ts +76 -76
  145. package/src/factories/internal/metadata/iterate_metadata_escape.ts +49 -49
  146. package/src/factories/internal/metadata/iterate_metadata_intersection.ts +219 -216
  147. package/src/factories/internal/metadata/iterate_metadata_map.ts +52 -52
  148. package/src/factories/internal/metadata/iterate_metadata_native.ts +236 -236
  149. package/src/factories/internal/metadata/iterate_metadata_object.ts +35 -27
  150. package/src/factories/internal/metadata/iterate_metadata_set.ts +39 -39
  151. package/src/factories/internal/metadata/iterate_metadata_sort.ts +87 -83
  152. package/src/factories/internal/metadata/iterate_metadata_template.ts +42 -42
  153. package/src/factories/internal/metadata/iterate_metadata_tuple.ts +26 -26
  154. package/src/factories/internal/metadata/iterate_metadata_union.ts +19 -19
  155. package/src/internal/$ProtobufSizer.ts +1 -7
  156. package/src/json.ts +1 -1
  157. package/src/module.ts +1 -1
  158. package/src/programmers/CheckerProgrammer.ts +7 -5
  159. package/src/programmers/FeatureProgrammer.ts +9 -6
  160. package/src/programmers/IsProgrammer.ts +2 -2
  161. package/src/programmers/RandomProgrammer.ts +3 -3
  162. package/src/programmers/functional/FunctionalIsFunctionProgrammer.ts +72 -72
  163. package/src/programmers/functional/FunctionalIsParametersProgrammer.ts +113 -113
  164. package/src/programmers/functional/FunctionalIsReturnProgrammer.ts +116 -116
  165. package/src/programmers/functional/internal/FunctionalGeneralProgrammer.ts +34 -34
  166. package/src/programmers/helpers/AtomicPredicator.ts +35 -35
  167. package/src/programmers/helpers/CloneJoiner.ts +143 -143
  168. package/src/programmers/helpers/HttpMetadataUtil.ts +21 -21
  169. package/src/programmers/helpers/NotationJoiner.ts +144 -144
  170. package/src/programmers/helpers/ProtobufUtil.ts +125 -125
  171. package/src/programmers/helpers/PruneJoiner.ts +148 -148
  172. package/src/programmers/helpers/RandomJoiner.ts +2 -2
  173. package/src/programmers/helpers/StringifyPredicator.ts +13 -13
  174. package/src/programmers/helpers/UnionExplorer.ts +372 -372
  175. package/src/programmers/helpers/UnionPredicator.ts +79 -77
  176. package/src/programmers/http/HttpFormDataProgrammer.ts +3 -3
  177. package/src/programmers/http/HttpHeadersProgrammer.ts +3 -3
  178. package/src/programmers/http/HttpQueryProgrammer.ts +4 -4
  179. package/src/programmers/internal/application_array.ts +56 -56
  180. package/src/programmers/internal/application_bigint.ts +25 -25
  181. package/src/programmers/internal/application_boolean.ts +25 -25
  182. package/src/programmers/internal/application_escaped.ts +96 -96
  183. package/src/programmers/internal/application_number.ts +25 -25
  184. package/src/programmers/internal/application_plugin.ts +19 -19
  185. package/src/programmers/internal/application_string.ts +25 -25
  186. package/src/programmers/internal/application_templates.ts +64 -64
  187. package/src/programmers/internal/application_union_discriminator.ts +35 -35
  188. package/src/programmers/internal/application_v30_alias.ts +59 -59
  189. package/src/programmers/internal/application_v30_native.ts +29 -29
  190. package/src/programmers/internal/application_v30_object.ts +165 -165
  191. package/src/programmers/internal/application_v30_schema.ts +220 -220
  192. package/src/programmers/internal/application_v30_tuple.ts +33 -33
  193. package/src/programmers/internal/application_v31_alias.ts +47 -47
  194. package/src/programmers/internal/application_v31_constant.ts +29 -29
  195. package/src/programmers/internal/application_v31_native.ts +25 -25
  196. package/src/programmers/internal/application_v31_object.ts +147 -147
  197. package/src/programmers/internal/application_v31_schema.ts +215 -215
  198. package/src/programmers/internal/application_v31_tuple.ts +22 -22
  199. package/src/programmers/internal/check_array_length.ts +46 -46
  200. package/src/programmers/internal/check_bigint.ts +49 -49
  201. package/src/programmers/internal/check_everything.ts +23 -23
  202. package/src/programmers/internal/check_native.ts +27 -27
  203. package/src/programmers/internal/check_number.ts +111 -111
  204. package/src/programmers/internal/check_string.ts +49 -49
  205. package/src/programmers/internal/check_template.ts +48 -48
  206. package/src/programmers/internal/check_union_array_like.ts +334 -334
  207. package/src/programmers/internal/decode_union_object.ts +116 -116
  208. package/src/programmers/internal/feature_object_entries.ts +2 -2
  209. package/src/programmers/internal/llm_schema_array.ts +22 -22
  210. package/src/programmers/internal/llm_schema_escaped.ts +84 -84
  211. package/src/programmers/internal/llm_schema_object.ts +132 -132
  212. package/src/programmers/internal/llm_schema_station.ts +190 -190
  213. package/src/programmers/internal/metadata_to_pattern.ts +42 -42
  214. package/src/programmers/internal/postfix_of_tuple.ts +5 -5
  215. package/src/programmers/internal/prune_object_properties.ts +2 -2
  216. package/src/programmers/internal/stringify_dynamic_properties.ts +162 -162
  217. package/src/programmers/internal/stringify_regular_properties.ts +81 -81
  218. package/src/programmers/internal/template_to_pattern.ts +23 -23
  219. package/src/programmers/internal/wrap_metadata_rest_tuple.ts +23 -23
  220. package/src/programmers/json/JsonApplicationProgrammer.ts +3 -3
  221. package/src/programmers/json/JsonSchemasProgrammer.ts +1 -1
  222. package/src/programmers/json/JsonStringifyProgrammer.ts +5 -5
  223. package/src/programmers/llm/LlmApplicationProgrammer.ts +4 -4
  224. package/src/programmers/llm/LlmSchemaProgrammer.ts +1 -1
  225. package/src/programmers/misc/MiscCloneProgrammer.ts +3 -3
  226. package/src/programmers/misc/MiscPruneProgrammer.ts +3 -3
  227. package/src/programmers/notations/NotationGeneralProgrammer.ts +3 -3
  228. package/src/programmers/protobuf/ProtobufDecodeProgrammer.ts +11 -11
  229. package/src/programmers/protobuf/ProtobufEncodeProgrammer.ts +8 -8
  230. package/src/programmers/protobuf/ProtobufMessageProgrammer.ts +201 -201
  231. package/src/schemas/json/{IJsonSchemaList.ts → IJsonSchemaCollection.ts} +22 -22
  232. package/src/schemas/metadata/IMetadata.ts +4 -1
  233. package/src/schemas/metadata/IMetadataArray.ts +1 -2
  234. package/src/schemas/metadata/IMetadataComponents.ts +2 -2
  235. package/src/schemas/metadata/IMetadataDictionary.ts +11 -11
  236. package/src/schemas/metadata/IMetadataObject.ts +6 -13
  237. package/src/schemas/metadata/IMetadataObjectType.ts +13 -0
  238. package/src/schemas/metadata/IMetadataTuple.ts +1 -2
  239. package/src/schemas/metadata/Metadata.ts +616 -616
  240. package/src/schemas/metadata/MetadataArray.ts +1 -1
  241. package/src/schemas/metadata/MetadataComponents.ts +98 -98
  242. package/src/schemas/metadata/MetadataObject.ts +48 -139
  243. package/src/schemas/metadata/MetadataObjectType.ts +149 -0
  244. package/src/schemas/metadata/MetadataTuple.ts +1 -1
  245. package/src/transformers/TransformerError.ts +8 -7
  246. package/src/transformers/features/json/JsonSchemasTransformer.ts +1 -1
  247. package/src/utils/MapUtil.ts +14 -14
  248. package/src/utils/NameEncoder.ts +32 -32
  249. package/lib/schemas/json/IJsonSchemaList.js.map +0 -1
  250. /package/lib/schemas/json/{IJsonSchemaList.d.ts → IJsonSchemaCollection.d.ts} +0 -0
@@ -1,42 +1,42 @@
1
- import { Metadata } from "../../schemas/metadata/Metadata";
2
-
3
- import { PatternUtil } from "../../utils/PatternUtil";
4
-
5
- import { template_to_pattern } from "./template_to_pattern";
6
-
7
- /**
8
- * @internal
9
- */
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 "(.*)";
16
-
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
- );
38
-
39
- const pattern: string =
40
- values.length === 1 ? values[0]! : "(" + values.join("|") + ")";
41
- return props.top ? PatternUtil.fix(pattern) : pattern;
42
- };
1
+ import { Metadata } from "../../schemas/metadata/Metadata";
2
+
3
+ import { PatternUtil } from "../../utils/PatternUtil";
4
+
5
+ import { template_to_pattern } from "./template_to_pattern";
6
+
7
+ /**
8
+ * @internal
9
+ */
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 "(.*)";
16
+
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
+ );
38
+
39
+ const pattern: string =
40
+ values.length === 1 ? values[0]! : "(" + values.join("|") + ")";
41
+ return props.top ? PatternUtil.fix(pattern) : pattern;
42
+ };
@@ -1,5 +1,5 @@
1
- /**
2
- * @internal
3
- */
4
- export const postfix_of_tuple = (str: string): string =>
5
- str.endsWith('"') ? str.slice(0, -1) : `${str} + "`;
1
+ /**
2
+ * @internal
3
+ */
4
+ export const postfix_of_tuple = (str: string): string =>
5
+ str.endsWith('"') ? str.slice(0, -1) : `${str} + "`;
@@ -1,13 +1,13 @@
1
1
  import ts from "typescript";
2
2
 
3
- import { MetadataObject } from "../../schemas/metadata/MetadataObject";
3
+ import { MetadataObjectType } from "../../schemas/metadata/MetadataObjectType";
4
4
 
5
5
  import { metadata_to_pattern } from "./metadata_to_pattern";
6
6
 
7
7
  /**
8
8
  * @internal
9
9
  */
10
- export const prune_object_properties = (object: MetadataObject) => {
10
+ export const prune_object_properties = (object: MetadataObjectType) => {
11
11
  const input: ts.Expression = ts.factory.createIdentifier("input");
12
12
  const key: ts.Expression = ts.factory.createIdentifier("key");
13
13
 
@@ -1,162 +1,162 @@
1
- import ts from "typescript";
2
-
3
- import { IdentifierFactory } from "../../factories/IdentifierFactory";
4
- import { TemplateFactory } from "../../factories/TemplateFactory";
5
-
6
- import { IExpressionEntry } from "../helpers/IExpressionEntry";
7
- import { metadata_to_pattern } from "./metadata_to_pattern";
8
-
9
- /**
10
- * @internal
11
- */
12
- export const stringify_dynamic_properties = (
13
- dynamic: IExpressionEntry<ts.Expression>[],
14
- regular: string[],
15
- ): ts.Expression => {
16
- // BASIC STATMEMENT, CHECK UNDEFINED
17
- const statements: ts.Statement[] = [
18
- ts.factory.createIfStatement(
19
- ts.factory.createStrictEquality(
20
- ts.factory.createIdentifier("undefined"),
21
- ts.factory.createIdentifier("value"),
22
- ),
23
- ts.factory.createReturnStatement(ts.factory.createStringLiteral("")),
24
- ),
25
- ];
26
-
27
- // PREPARE RETURN FUNCTION
28
- const output = () => {
29
- const mapped = ts.factory.createCallExpression(
30
- IdentifierFactory.access(
31
- ts.factory.createCallExpression(
32
- ts.factory.createIdentifier("Object.entries"),
33
- undefined,
34
- [ts.factory.createIdentifier("input")],
35
- ),
36
- "map",
37
- ),
38
- undefined,
39
- [
40
- ts.factory.createArrowFunction(
41
- undefined,
42
- undefined,
43
- [
44
- IdentifierFactory.parameter(
45
- ts.factory.createArrayBindingPattern([
46
- ts.factory.createBindingElement(undefined, undefined, "key"),
47
- ts.factory.createBindingElement(undefined, undefined, "value"),
48
- ]),
49
- ts.factory.createTypeReferenceNode("[string, any]"),
50
- ),
51
- ],
52
- undefined,
53
- undefined,
54
- ts.factory.createBlock(statements),
55
- ),
56
- ],
57
- );
58
- const filtered = ts.factory.createCallExpression(
59
- IdentifierFactory.access(mapped, "filter"),
60
- undefined,
61
- [
62
- ts.factory.createArrowFunction(
63
- undefined,
64
- undefined,
65
- [IdentifierFactory.parameter("str")],
66
- undefined,
67
- undefined,
68
- ts.factory.createStrictInequality(
69
- ts.factory.createStringLiteral(""),
70
- ts.factory.createIdentifier("str"),
71
- ),
72
- ),
73
- ],
74
- );
75
- return ts.factory.createCallExpression(
76
- IdentifierFactory.access(filtered, "join"),
77
- undefined,
78
- [ts.factory.createStringLiteral(",")],
79
- );
80
- };
81
-
82
- // WHEN REGULAR PROPERTY EXISTS
83
- if (regular.length)
84
- statements.push(
85
- ts.factory.createIfStatement(
86
- ts.factory.createCallExpression(
87
- IdentifierFactory.access(
88
- ts.factory.createArrayLiteralExpression(
89
- regular.map((key) => ts.factory.createStringLiteral(key)),
90
- ),
91
- "some",
92
- ),
93
- undefined,
94
- [
95
- ts.factory.createArrowFunction(
96
- undefined,
97
- undefined,
98
- [IdentifierFactory.parameter("regular")],
99
- undefined,
100
- undefined,
101
- ts.factory.createStrictEquality(
102
- ts.factory.createIdentifier("regular"),
103
- ts.factory.createIdentifier("key"),
104
- ),
105
- ),
106
- ],
107
- ),
108
- ts.factory.createReturnStatement(ts.factory.createStringLiteral("")),
109
- ),
110
- );
111
-
112
- // ONLY STRING TYPED KEY EXISTS
113
- const simple: boolean =
114
- dynamic.length === 1 &&
115
- dynamic[0]!.key.size() === 1 &&
116
- dynamic[0]!.key.atomics[0]?.type === "string";
117
- if (simple === true) {
118
- statements.push(stringify(dynamic[0]!));
119
- return output();
120
- }
121
-
122
- // COMPOSITE TEMPLATE LITERAL TYPES
123
- for (const entry of dynamic) {
124
- const condition: ts.IfStatement = ts.factory.createIfStatement(
125
- ts.factory.createCallExpression(
126
- ts.factory.createIdentifier(
127
- `RegExp(/${metadata_to_pattern({
128
- top: true,
129
- metadata: entry.key,
130
- })}/).test`,
131
- ),
132
- undefined,
133
- [ts.factory.createIdentifier("key")],
134
- ),
135
- stringify(entry),
136
- );
137
- statements.push(condition);
138
- }
139
- statements.push(
140
- ts.factory.createReturnStatement(ts.factory.createStringLiteral("")),
141
- );
142
-
143
- return output();
144
- };
145
-
146
- /**
147
- * @internal
148
- */
149
- const stringify = (
150
- entry: IExpressionEntry<ts.Expression>,
151
- ): ts.ReturnStatement =>
152
- ts.factory.createReturnStatement(
153
- TemplateFactory.generate([
154
- ts.factory.createCallExpression(
155
- ts.factory.createIdentifier("JSON.stringify"),
156
- [],
157
- [ts.factory.createIdentifier("key")],
158
- ),
159
- ts.factory.createStringLiteral(":"),
160
- entry.expression,
161
- ]),
162
- );
1
+ import ts from "typescript";
2
+
3
+ import { IdentifierFactory } from "../../factories/IdentifierFactory";
4
+ import { TemplateFactory } from "../../factories/TemplateFactory";
5
+
6
+ import { IExpressionEntry } from "../helpers/IExpressionEntry";
7
+ import { metadata_to_pattern } from "./metadata_to_pattern";
8
+
9
+ /**
10
+ * @internal
11
+ */
12
+ export const stringify_dynamic_properties = (
13
+ dynamic: IExpressionEntry<ts.Expression>[],
14
+ regular: string[],
15
+ ): ts.Expression => {
16
+ // BASIC STATMEMENT, CHECK UNDEFINED
17
+ const statements: ts.Statement[] = [
18
+ ts.factory.createIfStatement(
19
+ ts.factory.createStrictEquality(
20
+ ts.factory.createIdentifier("undefined"),
21
+ ts.factory.createIdentifier("value"),
22
+ ),
23
+ ts.factory.createReturnStatement(ts.factory.createStringLiteral("")),
24
+ ),
25
+ ];
26
+
27
+ // PREPARE RETURN FUNCTION
28
+ const output = () => {
29
+ const mapped = ts.factory.createCallExpression(
30
+ IdentifierFactory.access(
31
+ ts.factory.createCallExpression(
32
+ ts.factory.createIdentifier("Object.entries"),
33
+ undefined,
34
+ [ts.factory.createIdentifier("input")],
35
+ ),
36
+ "map",
37
+ ),
38
+ undefined,
39
+ [
40
+ ts.factory.createArrowFunction(
41
+ undefined,
42
+ undefined,
43
+ [
44
+ IdentifierFactory.parameter(
45
+ ts.factory.createArrayBindingPattern([
46
+ ts.factory.createBindingElement(undefined, undefined, "key"),
47
+ ts.factory.createBindingElement(undefined, undefined, "value"),
48
+ ]),
49
+ ts.factory.createTypeReferenceNode("[string, any]"),
50
+ ),
51
+ ],
52
+ undefined,
53
+ undefined,
54
+ ts.factory.createBlock(statements),
55
+ ),
56
+ ],
57
+ );
58
+ const filtered = ts.factory.createCallExpression(
59
+ IdentifierFactory.access(mapped, "filter"),
60
+ undefined,
61
+ [
62
+ ts.factory.createArrowFunction(
63
+ undefined,
64
+ undefined,
65
+ [IdentifierFactory.parameter("str")],
66
+ undefined,
67
+ undefined,
68
+ ts.factory.createStrictInequality(
69
+ ts.factory.createStringLiteral(""),
70
+ ts.factory.createIdentifier("str"),
71
+ ),
72
+ ),
73
+ ],
74
+ );
75
+ return ts.factory.createCallExpression(
76
+ IdentifierFactory.access(filtered, "join"),
77
+ undefined,
78
+ [ts.factory.createStringLiteral(",")],
79
+ );
80
+ };
81
+
82
+ // WHEN REGULAR PROPERTY EXISTS
83
+ if (regular.length)
84
+ statements.push(
85
+ ts.factory.createIfStatement(
86
+ ts.factory.createCallExpression(
87
+ IdentifierFactory.access(
88
+ ts.factory.createArrayLiteralExpression(
89
+ regular.map((key) => ts.factory.createStringLiteral(key)),
90
+ ),
91
+ "some",
92
+ ),
93
+ undefined,
94
+ [
95
+ ts.factory.createArrowFunction(
96
+ undefined,
97
+ undefined,
98
+ [IdentifierFactory.parameter("regular")],
99
+ undefined,
100
+ undefined,
101
+ ts.factory.createStrictEquality(
102
+ ts.factory.createIdentifier("regular"),
103
+ ts.factory.createIdentifier("key"),
104
+ ),
105
+ ),
106
+ ],
107
+ ),
108
+ ts.factory.createReturnStatement(ts.factory.createStringLiteral("")),
109
+ ),
110
+ );
111
+
112
+ // ONLY STRING TYPED KEY EXISTS
113
+ const simple: boolean =
114
+ dynamic.length === 1 &&
115
+ dynamic[0]!.key.size() === 1 &&
116
+ dynamic[0]!.key.atomics[0]?.type === "string";
117
+ if (simple === true) {
118
+ statements.push(stringify(dynamic[0]!));
119
+ return output();
120
+ }
121
+
122
+ // COMPOSITE TEMPLATE LITERAL TYPES
123
+ for (const entry of dynamic) {
124
+ const condition: ts.IfStatement = ts.factory.createIfStatement(
125
+ ts.factory.createCallExpression(
126
+ ts.factory.createIdentifier(
127
+ `RegExp(/${metadata_to_pattern({
128
+ top: true,
129
+ metadata: entry.key,
130
+ })}/).test`,
131
+ ),
132
+ undefined,
133
+ [ts.factory.createIdentifier("key")],
134
+ ),
135
+ stringify(entry),
136
+ );
137
+ statements.push(condition);
138
+ }
139
+ statements.push(
140
+ ts.factory.createReturnStatement(ts.factory.createStringLiteral("")),
141
+ );
142
+
143
+ return output();
144
+ };
145
+
146
+ /**
147
+ * @internal
148
+ */
149
+ const stringify = (
150
+ entry: IExpressionEntry<ts.Expression>,
151
+ ): ts.ReturnStatement =>
152
+ ts.factory.createReturnStatement(
153
+ TemplateFactory.generate([
154
+ ts.factory.createCallExpression(
155
+ ts.factory.createIdentifier("JSON.stringify"),
156
+ [],
157
+ [ts.factory.createIdentifier("key")],
158
+ ),
159
+ ts.factory.createStringLiteral(":"),
160
+ entry.expression,
161
+ ]),
162
+ );
@@ -1,81 +1,81 @@
1
- import ts from "typescript";
2
-
3
- import { TemplateFactory } from "../../factories/TemplateFactory";
4
- import { ValueFactory } from "../../factories/ValueFactory";
5
-
6
- import { Metadata } from "../../schemas/metadata/Metadata";
7
-
8
- import { IExpressionEntry } from "../helpers/IExpressionEntry";
9
-
10
- /**
11
- * @internal
12
- */
13
- export const stringify_regular_properties = (props: {
14
- regular: IExpressionEntry<ts.Expression>[];
15
- dynamic: IExpressionEntry<ts.Expression>[];
16
- }): ts.Expression[] => {
17
- const output: ts.Expression[] = [];
18
-
19
- props.regular.sort((x, y) => sequence(x.meta) - sequence(y.meta));
20
- props.regular.forEach((entry, index) => {
21
- // BASE ELEMENTS
22
- const key: string = entry.key.getSoleLiteral()!;
23
- const base: ts.Expression[] = [
24
- ts.factory.createStringLiteral(`${JSON.stringify(key)}:`),
25
- entry.expression,
26
- ];
27
- if (index !== props.regular.length - 1 || props.dynamic.length !== 0)
28
- base.push(ts.factory.createStringLiteral(`,`));
29
-
30
- const empty: boolean =
31
- (entry.meta.isRequired() === false &&
32
- entry.meta.nullable === false &&
33
- entry.meta.size() === 0) ||
34
- (!!entry.meta.functions.length &&
35
- entry.meta.nullable === false &&
36
- entry.meta.size() === 1);
37
-
38
- if (empty === true) return;
39
- else if (
40
- entry.meta.isRequired() === false ||
41
- entry.meta.functions.length ||
42
- entry.meta.any === true
43
- )
44
- output.push(
45
- ts.factory.createConditionalExpression(
46
- (() => {
47
- const conditions: ts.BinaryExpression[] = [];
48
- if (entry.meta.isRequired() === false || entry.meta.any)
49
- conditions.push(
50
- ts.factory.createStrictEquality(
51
- ts.factory.createIdentifier("undefined"),
52
- entry.input,
53
- ),
54
- );
55
- if (entry.meta.functions.length || entry.meta.any)
56
- conditions.push(
57
- ts.factory.createStrictEquality(
58
- ts.factory.createStringLiteral("function"),
59
- ValueFactory.TYPEOF(entry.input),
60
- ),
61
- );
62
- return conditions.length === 1
63
- ? conditions[0]!
64
- : conditions.reduce((x, y) => ts.factory.createLogicalOr(x, y));
65
- })(),
66
- undefined,
67
- ts.factory.createStringLiteral(""),
68
- undefined,
69
- TemplateFactory.generate(base),
70
- ),
71
- );
72
- else output.push(...base);
73
- });
74
- return output;
75
- };
76
-
77
- /**
78
- * @internal
79
- */
80
- const sequence = (meta: Metadata): number =>
81
- meta.any || !meta.isRequired() || meta.functions.length ? 0 : 1;
1
+ import ts from "typescript";
2
+
3
+ import { TemplateFactory } from "../../factories/TemplateFactory";
4
+ import { ValueFactory } from "../../factories/ValueFactory";
5
+
6
+ import { Metadata } from "../../schemas/metadata/Metadata";
7
+
8
+ import { IExpressionEntry } from "../helpers/IExpressionEntry";
9
+
10
+ /**
11
+ * @internal
12
+ */
13
+ export const stringify_regular_properties = (props: {
14
+ regular: IExpressionEntry<ts.Expression>[];
15
+ dynamic: IExpressionEntry<ts.Expression>[];
16
+ }): ts.Expression[] => {
17
+ const output: ts.Expression[] = [];
18
+
19
+ props.regular.sort((x, y) => sequence(x.meta) - sequence(y.meta));
20
+ props.regular.forEach((entry, index) => {
21
+ // BASE ELEMENTS
22
+ const key: string = entry.key.getSoleLiteral()!;
23
+ const base: ts.Expression[] = [
24
+ ts.factory.createStringLiteral(`${JSON.stringify(key)}:`),
25
+ entry.expression,
26
+ ];
27
+ if (index !== props.regular.length - 1 || props.dynamic.length !== 0)
28
+ base.push(ts.factory.createStringLiteral(`,`));
29
+
30
+ const empty: boolean =
31
+ (entry.meta.isRequired() === false &&
32
+ entry.meta.nullable === false &&
33
+ entry.meta.size() === 0) ||
34
+ (!!entry.meta.functions.length &&
35
+ entry.meta.nullable === false &&
36
+ entry.meta.size() === 1);
37
+
38
+ if (empty === true) return;
39
+ else if (
40
+ entry.meta.isRequired() === false ||
41
+ entry.meta.functions.length ||
42
+ entry.meta.any === true
43
+ )
44
+ output.push(
45
+ ts.factory.createConditionalExpression(
46
+ (() => {
47
+ const conditions: ts.BinaryExpression[] = [];
48
+ if (entry.meta.isRequired() === false || entry.meta.any)
49
+ conditions.push(
50
+ ts.factory.createStrictEquality(
51
+ ts.factory.createIdentifier("undefined"),
52
+ entry.input,
53
+ ),
54
+ );
55
+ if (entry.meta.functions.length || entry.meta.any)
56
+ conditions.push(
57
+ ts.factory.createStrictEquality(
58
+ ts.factory.createStringLiteral("function"),
59
+ ValueFactory.TYPEOF(entry.input),
60
+ ),
61
+ );
62
+ return conditions.length === 1
63
+ ? conditions[0]!
64
+ : conditions.reduce((x, y) => ts.factory.createLogicalOr(x, y));
65
+ })(),
66
+ undefined,
67
+ ts.factory.createStringLiteral(""),
68
+ undefined,
69
+ TemplateFactory.generate(base),
70
+ ),
71
+ );
72
+ else output.push(...base);
73
+ });
74
+ return output;
75
+ };
76
+
77
+ /**
78
+ * @internal
79
+ */
80
+ const sequence = (meta: Metadata): number =>
81
+ meta.any || !meta.isRequired() || meta.functions.length ? 0 : 1;
@@ -1,23 +1,23 @@
1
- import { Metadata } from "../../schemas/metadata/Metadata";
2
-
3
- import { PatternUtil } from "../../utils/PatternUtil";
4
-
5
- import { metadata_to_pattern } from "./metadata_to_pattern";
6
-
7
- /**
8
- * @internal
9
- */
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
- )
21
- .join("");
22
- return props.top ? PatternUtil.fix(pattern) : pattern;
23
- };
1
+ import { Metadata } from "../../schemas/metadata/Metadata";
2
+
3
+ import { PatternUtil } from "../../utils/PatternUtil";
4
+
5
+ import { metadata_to_pattern } from "./metadata_to_pattern";
6
+
7
+ /**
8
+ * @internal
9
+ */
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
+ )
21
+ .join("");
22
+ return props.top ? PatternUtil.fix(pattern) : pattern;
23
+ };