typia 5.0.0-dev.20230823 → 5.0.0-dev.2023084

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 (217) hide show
  1. package/lib/Primitive.d.ts +14 -12
  2. package/lib/Resolved.d.ts +46 -0
  3. package/lib/{schemas/metadata/IMetadataResolved.js → Resolved.js} +1 -1
  4. package/lib/Resolved.js.map +1 -0
  5. package/lib/factories/MetadataFactory.d.ts +1 -1
  6. package/lib/factories/MetadataTagFactory.js +10 -8
  7. package/lib/factories/MetadataTagFactory.js.map +1 -1
  8. package/lib/factories/ProtobufFactory.js +4 -3
  9. package/lib/factories/ProtobufFactory.js.map +1 -1
  10. package/lib/factories/internal/metadata/emend_metadata_atomics.js +6 -6
  11. package/lib/factories/internal/metadata/emend_metadata_atomics.js.map +1 -1
  12. package/lib/factories/internal/metadata/explore_metadata.js +3 -3
  13. package/lib/factories/internal/metadata/explore_metadata.js.map +1 -1
  14. package/lib/factories/internal/metadata/iterate_metadata_atomic.js +1 -1
  15. package/lib/factories/internal/metadata/iterate_metadata_atomic.js.map +1 -1
  16. package/lib/factories/internal/metadata/iterate_metadata_collection.js +6 -6
  17. package/lib/factories/internal/metadata/iterate_metadata_collection.js.map +1 -1
  18. package/lib/factories/internal/metadata/iterate_metadata_native.js +2 -10
  19. package/lib/factories/internal/metadata/iterate_metadata_native.js.map +1 -1
  20. package/lib/factories/internal/metadata/iterate_metadata_resolve.js +6 -6
  21. package/lib/factories/internal/metadata/iterate_metadata_resolve.js.map +1 -1
  22. package/lib/factories/internal/metadata/iterate_metadata_sort.js +2 -2
  23. package/lib/factories/internal/metadata/iterate_metadata_sort.js.map +1 -1
  24. package/lib/functional/$ProtobufWriter.js.map +1 -1
  25. package/lib/json.d.ts +15 -15
  26. package/lib/misc.d.ts +42 -42
  27. package/lib/module.d.ts +18 -17
  28. package/lib/module.js +1 -0
  29. package/lib/module.js.map +1 -1
  30. package/lib/programmers/AssertProgrammer.js +1 -1
  31. package/lib/programmers/AssertProgrammer.js.map +1 -1
  32. package/lib/programmers/CheckerProgrammer.js +7 -7
  33. package/lib/programmers/CheckerProgrammer.js.map +1 -1
  34. package/lib/programmers/IsProgrammer.js +2 -2
  35. package/lib/programmers/IsProgrammer.js.map +1 -1
  36. package/lib/programmers/RandomProgrammer.js +311 -136
  37. package/lib/programmers/RandomProgrammer.js.map +1 -1
  38. package/lib/programmers/ValidateProgrammer.js +1 -1
  39. package/lib/programmers/ValidateProgrammer.js.map +1 -1
  40. package/lib/programmers/helpers/AtomicPredicator.js +2 -2
  41. package/lib/programmers/helpers/AtomicPredicator.js.map +1 -1
  42. package/lib/programmers/helpers/FunctionImporeter.d.ts +2 -0
  43. package/lib/programmers/helpers/FunctionImporeter.js +2 -1
  44. package/lib/programmers/helpers/FunctionImporeter.js.map +1 -1
  45. package/lib/programmers/helpers/ProtobufUtil.js +2 -2
  46. package/lib/programmers/helpers/ProtobufUtil.js.map +1 -1
  47. package/lib/programmers/helpers/StringifyPredicator.js +1 -2
  48. package/lib/programmers/helpers/StringifyPredicator.js.map +1 -1
  49. package/lib/programmers/helpers/disable_function_importer_declare.js +1 -0
  50. package/lib/programmers/helpers/disable_function_importer_declare.js.map +1 -1
  51. package/lib/programmers/internal/application_default_string.js +2 -2
  52. package/lib/programmers/internal/application_default_string.js.map +1 -1
  53. package/lib/programmers/internal/application_resolved.d.ts +2 -2
  54. package/lib/programmers/internal/application_resolved.js.map +1 -1
  55. package/lib/programmers/internal/application_schema.js +7 -7
  56. package/lib/programmers/internal/application_schema.js.map +1 -1
  57. package/lib/programmers/internal/metadata_to_pattern.js +4 -4
  58. package/lib/programmers/internal/metadata_to_pattern.js.map +1 -1
  59. package/lib/programmers/internal/stringify_dynamic_properties.js +2 -1
  60. package/lib/programmers/internal/stringify_dynamic_properties.js.map +1 -1
  61. package/lib/programmers/json/JsonStringifyProgrammer.js +20 -14
  62. package/lib/programmers/json/JsonStringifyProgrammer.js.map +1 -1
  63. package/lib/programmers/misc/MiscAssertCloneProgrammer.js +1 -1
  64. package/lib/programmers/misc/MiscAssertCloneProgrammer.js.map +1 -1
  65. package/lib/programmers/misc/MiscCloneProgrammer.js +114 -33
  66. package/lib/programmers/misc/MiscCloneProgrammer.js.map +1 -1
  67. package/lib/programmers/misc/MiscIsCloneProgrammer.js +1 -1
  68. package/lib/programmers/misc/MiscIsCloneProgrammer.js.map +1 -1
  69. package/lib/programmers/misc/MiscLiteralsProgrammer.js +3 -3
  70. package/lib/programmers/misc/MiscLiteralsProgrammer.js.map +1 -1
  71. package/lib/programmers/misc/MiscPruneProgrammer.js +2 -2
  72. package/lib/programmers/misc/MiscPruneProgrammer.js.map +1 -1
  73. package/lib/programmers/misc/MiscValidateCloneProgrammer.js +1 -1
  74. package/lib/programmers/misc/MiscValidateCloneProgrammer.js.map +1 -1
  75. package/lib/programmers/protobuf/ProtobufAssertDecodeProgrammer.js +3 -3
  76. package/lib/programmers/protobuf/ProtobufAssertDecodeProgrammer.js.map +1 -1
  77. package/lib/programmers/protobuf/ProtobufDecodeProgrammer.js +3 -3
  78. package/lib/programmers/protobuf/ProtobufDecodeProgrammer.js.map +1 -1
  79. package/lib/programmers/protobuf/ProtobufEncodeProgrammer.js +1 -1
  80. package/lib/programmers/protobuf/ProtobufEncodeProgrammer.js.map +1 -1
  81. package/lib/programmers/protobuf/ProtobufIsDecodeProgrammer.js +2 -2
  82. package/lib/programmers/protobuf/ProtobufIsDecodeProgrammer.js.map +1 -1
  83. package/lib/programmers/protobuf/ProtobufValidateDecodeProgrammer.js +1 -1
  84. package/lib/programmers/protobuf/ProtobufValidateDecodeProgrammer.js.map +1 -1
  85. package/lib/protobuf.d.ts +631 -10
  86. package/lib/protobuf.js +13 -13
  87. package/lib/protobuf.js.map +1 -1
  88. package/lib/schemas/metadata/IMetadata.d.ts +4 -4
  89. package/lib/schemas/metadata/IMetadataAtomic.d.ts +12 -0
  90. package/lib/schemas/metadata/IMetadataAtomic.js +3 -0
  91. package/lib/schemas/metadata/IMetadataAtomic.js.map +1 -0
  92. package/lib/schemas/metadata/{IMetadataResolved.d.ts → IMetadataEscaped.d.ts} +1 -1
  93. package/lib/schemas/metadata/IMetadataEscaped.js +3 -0
  94. package/lib/schemas/metadata/IMetadataEscaped.js.map +1 -0
  95. package/lib/schemas/metadata/Metadata.d.ts +4 -4
  96. package/lib/schemas/metadata/Metadata.js +64 -59
  97. package/lib/schemas/metadata/Metadata.js.map +1 -1
  98. package/lib/schemas/metadata/{MetadataResolved.d.ts → MetadataEscaped.d.ts} +3 -3
  99. package/lib/schemas/metadata/{MetadataResolved.js → MetadataEscaped.js} +11 -11
  100. package/lib/schemas/metadata/MetadataEscaped.js.map +1 -0
  101. package/lib/tags/ExclusiveMaximum.d.ts +8 -0
  102. package/lib/tags/ExclusiveMaximum.js +3 -0
  103. package/lib/tags/ExclusiveMaximum.js.map +1 -0
  104. package/lib/tags/ExclusiveMinimum.d.ts +8 -0
  105. package/lib/tags/ExclusiveMinimum.js +3 -0
  106. package/lib/tags/ExclusiveMinimum.js.map +1 -0
  107. package/lib/tags/Format.d.ts +8 -0
  108. package/lib/tags/Format.js +3 -0
  109. package/lib/tags/Format.js.map +1 -0
  110. package/lib/tags/MaxItems.d.ts +8 -0
  111. package/lib/tags/MaxItems.js +3 -0
  112. package/lib/tags/MaxItems.js.map +1 -0
  113. package/lib/tags/MaxLength.d.ts +8 -0
  114. package/lib/tags/MaxLength.js +3 -0
  115. package/lib/tags/MaxLength.js.map +1 -0
  116. package/lib/tags/Maximum.d.ts +8 -0
  117. package/lib/tags/Maximum.js +3 -0
  118. package/lib/tags/Maximum.js.map +1 -0
  119. package/lib/tags/MinItems.d.ts +8 -0
  120. package/lib/tags/MinItems.js +3 -0
  121. package/lib/tags/MinItems.js.map +1 -0
  122. package/lib/tags/MinLength.d.ts +8 -0
  123. package/lib/tags/MinLength.js +3 -0
  124. package/lib/tags/MinLength.js.map +1 -0
  125. package/lib/tags/Minimum.d.ts +8 -0
  126. package/lib/tags/Minimum.js +3 -0
  127. package/lib/tags/Minimum.js.map +1 -0
  128. package/lib/tags/MultipleOf.d.ts +8 -0
  129. package/lib/tags/MultipleOf.js +3 -0
  130. package/lib/tags/MultipleOf.js.map +1 -0
  131. package/lib/tags/Pattern.d.ts +8 -0
  132. package/lib/tags/Pattern.js +3 -0
  133. package/lib/tags/Pattern.js.map +1 -0
  134. package/lib/tags/TagBase.d.ts +10 -0
  135. package/lib/tags/TagBase.js +3 -0
  136. package/lib/tags/TagBase.js.map +1 -0
  137. package/lib/tags/Type.d.ts +13 -0
  138. package/lib/tags/Type.js +3 -0
  139. package/lib/tags/Type.js.map +1 -0
  140. package/lib/tags/index.d.ts +12 -0
  141. package/lib/tags/index.js +29 -0
  142. package/lib/tags/index.js.map +1 -0
  143. package/lib/transformers/features/json/JsonApplicationTransformer.js +2 -2
  144. package/lib/transformers/features/json/JsonApplicationTransformer.js.map +1 -1
  145. package/lib/transformers/features/misc/MetadataTransformer.js +1 -1
  146. package/lib/transformers/features/misc/MetadataTransformer.js.map +1 -1
  147. package/lib/utils/RandomGenerator.js +3 -2
  148. package/lib/utils/RandomGenerator.js.map +1 -1
  149. package/package.json +2 -1
  150. package/src/Primitive.ts +135 -131
  151. package/src/Resolved.ts +116 -0
  152. package/src/factories/MetadataFactory.ts +46 -46
  153. package/src/factories/MetadataTagFactory.ts +366 -364
  154. package/src/factories/ProtobufFactory.ts +268 -266
  155. package/src/factories/internal/metadata/emend_metadata_atomics.ts +35 -33
  156. package/src/factories/internal/metadata/explore_metadata.ts +38 -38
  157. package/src/factories/internal/metadata/iterate_metadata_atomic.ts +63 -59
  158. package/src/factories/internal/metadata/iterate_metadata_collection.ts +133 -133
  159. package/src/factories/internal/metadata/iterate_metadata_native.ts +210 -219
  160. package/src/factories/internal/metadata/iterate_metadata_resolve.ts +49 -49
  161. package/src/factories/internal/metadata/iterate_metadata_sort.ts +69 -69
  162. package/src/functional/$ProtobufWriter.ts +151 -151
  163. package/src/json.ts +648 -648
  164. package/src/misc.ts +651 -651
  165. package/src/module.ts +709 -708
  166. package/src/programmers/AssertProgrammer.ts +281 -279
  167. package/src/programmers/CheckerProgrammer.ts +1174 -1173
  168. package/src/programmers/IsProgrammer.ts +241 -239
  169. package/src/programmers/RandomProgrammer.ts +874 -578
  170. package/src/programmers/ValidateProgrammer.ts +307 -305
  171. package/src/programmers/helpers/AtomicPredicator.ts +31 -31
  172. package/src/programmers/helpers/FunctionImporeter.ts +91 -89
  173. package/src/programmers/helpers/ProtobufUtil.ts +29 -29
  174. package/src/programmers/helpers/StringifyPredicator.ts +12 -13
  175. package/src/programmers/helpers/disable_function_importer_declare.ts +32 -27
  176. package/src/programmers/internal/application_default_string.ts +37 -33
  177. package/src/programmers/internal/application_resolved.ts +55 -55
  178. package/src/programmers/internal/application_schema.ts +157 -157
  179. package/src/programmers/internal/metadata_to_pattern.ts +34 -34
  180. package/src/programmers/internal/stringify_dynamic_properties.ts +171 -171
  181. package/src/programmers/json/JsonStringifyProgrammer.ts +995 -987
  182. package/src/programmers/misc/MiscAssertCloneProgrammer.ts +71 -71
  183. package/src/programmers/misc/MiscCloneProgrammer.ts +775 -587
  184. package/src/programmers/misc/MiscIsCloneProgrammer.ts +78 -78
  185. package/src/programmers/misc/MiscLiteralsProgrammer.ts +64 -64
  186. package/src/programmers/misc/MiscPruneProgrammer.ts +544 -542
  187. package/src/programmers/misc/MiscValidateCloneProgrammer.ts +85 -85
  188. package/src/programmers/protobuf/ProtobufAssertDecodeProgrammer.ts +75 -66
  189. package/src/programmers/protobuf/ProtobufDecodeProgrammer.ts +673 -669
  190. package/src/programmers/protobuf/ProtobufEncodeProgrammer.ts +814 -814
  191. package/src/programmers/protobuf/ProtobufIsDecodeProgrammer.ts +85 -75
  192. package/src/programmers/protobuf/ProtobufValidateDecodeProgrammer.ts +75 -75
  193. package/src/protobuf.ts +881 -249
  194. package/src/schemas/metadata/IMetadata.ts +27 -28
  195. package/src/schemas/metadata/IMetadataAtomic.ts +13 -0
  196. package/src/schemas/metadata/{IMetadataResolved.ts → IMetadataEscaped.ts} +6 -6
  197. package/src/schemas/metadata/Metadata.ts +643 -637
  198. package/src/schemas/metadata/{MetadataResolved.ts → MetadataEscaped.ts} +51 -51
  199. package/src/tags/ExclusiveMaximum.ts +8 -0
  200. package/src/tags/ExclusiveMinimum.ts +8 -0
  201. package/src/tags/Format.ts +29 -0
  202. package/src/tags/MaxItems.ts +8 -0
  203. package/src/tags/MaxLength.ts +8 -0
  204. package/src/tags/Maximum.ts +8 -0
  205. package/src/tags/MinItems.ts +8 -0
  206. package/src/tags/MinLength.ts +8 -0
  207. package/src/tags/Minimum.ts +8 -0
  208. package/src/tags/MultipleOf.ts +10 -0
  209. package/src/tags/Pattern.ts +8 -0
  210. package/src/tags/TagBase.ts +17 -0
  211. package/src/tags/Type.ts +30 -0
  212. package/src/tags/index.ts +12 -0
  213. package/src/transformers/features/json/JsonApplicationTransformer.ts +111 -111
  214. package/src/transformers/features/misc/MetadataTransformer.ts +53 -53
  215. package/src/utils/RandomGenerator.ts +83 -81
  216. package/lib/schemas/metadata/IMetadataResolved.js.map +0 -1
  217. package/lib/schemas/metadata/MetadataResolved.js.map +0 -1
@@ -1,78 +1,78 @@
1
- import ts from "typescript";
2
-
3
- import { IdentifierFactory } from "../../factories/IdentifierFactory";
4
- import { StatementFactory } from "../../factories/StatementFactory";
5
- import { TypeFactory } from "../../factories/TypeFactory";
6
-
7
- import { IProject } from "../../transformers/IProject";
8
-
9
- import { IsProgrammer } from "../IsProgrammer";
10
- import { MiscCloneProgrammer } from "./MiscCloneProgrammer";
11
-
12
- export namespace MiscIsCloneProgrammer {
13
- export const write =
14
- (project: IProject) =>
15
- (modulo: ts.LeftHandSideExpression) =>
16
- (type: ts.Type, name?: string) =>
17
- ts.factory.createArrowFunction(
18
- undefined,
19
- undefined,
20
- [
21
- IdentifierFactory.parameter(
22
- "input",
23
- TypeFactory.keyword("any"),
24
- ),
25
- ],
26
- ts.factory.createUnionTypeNode([
27
- ts.factory.createTypeReferenceNode(
28
- `typia.Primitive<${
29
- name ??
30
- TypeFactory.getFullName(project.checker)(type)
31
- }>`,
32
- ),
33
- ts.factory.createLiteralTypeNode(ts.factory.createNull()),
34
- ]),
35
- undefined,
36
- ts.factory.createBlock([
37
- StatementFactory.constant(
38
- "is",
39
- IsProgrammer.write(project)(modulo)(false)(type, name),
40
- ),
41
- StatementFactory.constant(
42
- "clone",
43
- MiscCloneProgrammer.write({
44
- ...project,
45
- options: {
46
- ...project.options,
47
- functional: false,
48
- numeric: false,
49
- },
50
- })(modulo)(type, name),
51
- ),
52
- ts.factory.createIfStatement(
53
- ts.factory.createPrefixUnaryExpression(
54
- ts.SyntaxKind.ExclamationToken,
55
- ts.factory.createCallExpression(
56
- ts.factory.createIdentifier("is"),
57
- undefined,
58
- [ts.factory.createIdentifier("input")],
59
- ),
60
- ),
61
- ts.factory.createReturnStatement(
62
- ts.factory.createNull(),
63
- ),
64
- ),
65
- StatementFactory.constant(
66
- "output",
67
- ts.factory.createCallExpression(
68
- ts.factory.createIdentifier("clone"),
69
- undefined,
70
- [ts.factory.createIdentifier("input")],
71
- ),
72
- ),
73
- ts.factory.createReturnStatement(
74
- ts.factory.createIdentifier("output"),
75
- ),
76
- ]),
77
- );
78
- }
1
+ import ts from "typescript";
2
+
3
+ import { IdentifierFactory } from "../../factories/IdentifierFactory";
4
+ import { StatementFactory } from "../../factories/StatementFactory";
5
+ import { TypeFactory } from "../../factories/TypeFactory";
6
+
7
+ import { IProject } from "../../transformers/IProject";
8
+
9
+ import { IsProgrammer } from "../IsProgrammer";
10
+ import { MiscCloneProgrammer } from "./MiscCloneProgrammer";
11
+
12
+ export namespace MiscIsCloneProgrammer {
13
+ export const write =
14
+ (project: IProject) =>
15
+ (modulo: ts.LeftHandSideExpression) =>
16
+ (type: ts.Type, name?: string) =>
17
+ ts.factory.createArrowFunction(
18
+ undefined,
19
+ undefined,
20
+ [
21
+ IdentifierFactory.parameter(
22
+ "input",
23
+ TypeFactory.keyword("any"),
24
+ ),
25
+ ],
26
+ ts.factory.createUnionTypeNode([
27
+ ts.factory.createTypeReferenceNode(
28
+ `typia.Resolved<${
29
+ name ??
30
+ TypeFactory.getFullName(project.checker)(type)
31
+ }>`,
32
+ ),
33
+ ts.factory.createLiteralTypeNode(ts.factory.createNull()),
34
+ ]),
35
+ undefined,
36
+ ts.factory.createBlock([
37
+ StatementFactory.constant(
38
+ "is",
39
+ IsProgrammer.write(project)(modulo)(false)(type, name),
40
+ ),
41
+ StatementFactory.constant(
42
+ "clone",
43
+ MiscCloneProgrammer.write({
44
+ ...project,
45
+ options: {
46
+ ...project.options,
47
+ functional: false,
48
+ numeric: false,
49
+ },
50
+ })(modulo)(type, name),
51
+ ),
52
+ ts.factory.createIfStatement(
53
+ ts.factory.createPrefixUnaryExpression(
54
+ ts.SyntaxKind.ExclamationToken,
55
+ ts.factory.createCallExpression(
56
+ ts.factory.createIdentifier("is"),
57
+ undefined,
58
+ [ts.factory.createIdentifier("input")],
59
+ ),
60
+ ),
61
+ ts.factory.createReturnStatement(
62
+ ts.factory.createNull(),
63
+ ),
64
+ ),
65
+ StatementFactory.constant(
66
+ "output",
67
+ ts.factory.createCallExpression(
68
+ ts.factory.createIdentifier("clone"),
69
+ undefined,
70
+ [ts.factory.createIdentifier("input")],
71
+ ),
72
+ ),
73
+ ts.factory.createReturnStatement(
74
+ ts.factory.createIdentifier("output"),
75
+ ),
76
+ ]),
77
+ );
78
+ }
@@ -1,64 +1,64 @@
1
- import ts from "typescript";
2
-
3
- import { ExpressionFactory } from "../../factories/ExpressionFactory";
4
- import { MetadataCollection } from "../../factories/MetadataCollection";
5
- import { MetadataFactory } from "../../factories/MetadataFactory";
6
-
7
- import { Metadata } from "../../schemas/metadata/Metadata";
8
-
9
- import { IProject } from "../../transformers/IProject";
10
-
11
- import { Atomic } from "../../typings/Atomic";
12
-
13
- import { ArrayUtil } from "../../utils/ArrayUtil";
14
-
15
- export namespace MiscLiteralsProgrammer {
16
- export const write = (project: IProject) => (type: ts.Type) => {
17
- const meta: Metadata = MetadataFactory.analyze(project.checker)({
18
- resolve: true,
19
- constant: true,
20
- absorb: true,
21
- validate: (meta) => {
22
- const length: number =
23
- meta.constants
24
- .map((c) => c.values.length)
25
- .reduce((a, b) => a + b, 0) +
26
- meta.atomics.filter((type) => type === "boolean").length;
27
- if (0 === length) throw new Error(ErrorMessages.NO);
28
- else if (meta.size() !== length)
29
- throw new Error(ErrorMessages.ONLY);
30
- },
31
- })(new MetadataCollection())(type);
32
- const values: Set<Atomic.Type | null> = new Set([
33
- ...ArrayUtil.flat<Atomic.Type>(meta.constants.map((c) => c.values)),
34
- ...(meta.atomics.filter((type) => type === "boolean").length
35
- ? [true, false]
36
- : []),
37
- ...(meta.nullable ? [null] : []),
38
- ]);
39
- return ts.factory.createAsExpression(
40
- ts.factory.createArrayLiteralExpression(
41
- [...values].map((v) =>
42
- v === null
43
- ? ts.factory.createNull()
44
- : typeof v === "boolean"
45
- ? v
46
- ? ts.factory.createTrue()
47
- : ts.factory.createFalse()
48
- : typeof v === "number"
49
- ? ts.factory.createNumericLiteral(v)
50
- : typeof v === "bigint"
51
- ? ExpressionFactory.bigint(Number(v))
52
- : ts.factory.createStringLiteral(v),
53
- ),
54
- true,
55
- ),
56
- ts.factory.createTypeReferenceNode("const"),
57
- );
58
- };
59
- }
60
-
61
- enum ErrorMessages {
62
- NO = "Error on typia.literals(): no literal type found.",
63
- ONLY = "Error on typia.literals(): only literal type allowed.",
64
- }
1
+ import ts from "typescript";
2
+
3
+ import { ExpressionFactory } from "../../factories/ExpressionFactory";
4
+ import { MetadataCollection } from "../../factories/MetadataCollection";
5
+ import { MetadataFactory } from "../../factories/MetadataFactory";
6
+
7
+ import { Metadata } from "../../schemas/metadata/Metadata";
8
+
9
+ import { IProject } from "../../transformers/IProject";
10
+
11
+ import { Atomic } from "../../typings/Atomic";
12
+
13
+ import { ArrayUtil } from "../../utils/ArrayUtil";
14
+
15
+ export namespace MiscLiteralsProgrammer {
16
+ export const write = (project: IProject) => (type: ts.Type) => {
17
+ const meta: Metadata = MetadataFactory.analyze(project.checker)({
18
+ escape: true,
19
+ constant: true,
20
+ absorb: true,
21
+ validate: (meta) => {
22
+ const length: number =
23
+ meta.constants
24
+ .map((c) => c.values.length)
25
+ .reduce((a, b) => a + b, 0) +
26
+ meta.atomics.filter((a) => a.type === "boolean").length;
27
+ if (0 === length) throw new Error(ErrorMessages.NO);
28
+ else if (meta.size() !== length)
29
+ throw new Error(ErrorMessages.ONLY);
30
+ },
31
+ })(new MetadataCollection())(type);
32
+ const values: Set<Atomic.Type | null> = new Set([
33
+ ...ArrayUtil.flat<Atomic.Type>(meta.constants.map((c) => c.values)),
34
+ ...(meta.atomics.filter((a) => a.type === "boolean").length
35
+ ? [true, false]
36
+ : []),
37
+ ...(meta.nullable ? [null] : []),
38
+ ]);
39
+ return ts.factory.createAsExpression(
40
+ ts.factory.createArrayLiteralExpression(
41
+ [...values].map((v) =>
42
+ v === null
43
+ ? ts.factory.createNull()
44
+ : typeof v === "boolean"
45
+ ? v
46
+ ? ts.factory.createTrue()
47
+ : ts.factory.createFalse()
48
+ : typeof v === "number"
49
+ ? ts.factory.createNumericLiteral(v)
50
+ : typeof v === "bigint"
51
+ ? ExpressionFactory.bigint(Number(v))
52
+ : ts.factory.createStringLiteral(v),
53
+ ),
54
+ true,
55
+ ),
56
+ ts.factory.createTypeReferenceNode("const"),
57
+ );
58
+ };
59
+ }
60
+
61
+ enum ErrorMessages {
62
+ NO = "Error on typia.literals(): no literal type found.",
63
+ ONLY = "Error on typia.literals(): only literal type allowed.",
64
+ }