typia 7.0.0-dev.20241007 → 7.0.0-dev.20241009

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 (244) hide show
  1. package/lib/factories/ExpressionFactory.d.ts +1 -1
  2. package/lib/factories/ValueFactory.d.ts +1 -1
  3. package/lib/internal/$jsonStringifyString.d.ts +13 -1
  4. package/lib/internal/$jsonStringifyString.js +0 -1
  5. package/lib/internal/$jsonStringifyString.js.map +1 -1
  6. package/lib/programmers/AssertProgrammer.d.ts +5 -2
  7. package/lib/programmers/AssertProgrammer.js +12 -5
  8. package/lib/programmers/AssertProgrammer.js.map +1 -1
  9. package/lib/programmers/ImportProgrammer.d.ts +25 -4
  10. package/lib/programmers/ImportProgrammer.js +67 -31
  11. package/lib/programmers/ImportProgrammer.js.map +1 -1
  12. package/lib/programmers/RandomProgrammer.js +48 -32
  13. package/lib/programmers/RandomProgrammer.js.map +1 -1
  14. package/lib/programmers/ValidateProgrammer.js +10 -4
  15. package/lib/programmers/ValidateProgrammer.js.map +1 -1
  16. package/lib/programmers/functional/FunctionalAssertFunctionProgrammer.js +1 -1
  17. package/lib/programmers/functional/FunctionalAssertFunctionProgrammer.js.map +1 -1
  18. package/lib/programmers/functional/FunctionalValidateFunctionProgrammer.d.ts +1 -0
  19. package/lib/programmers/functional/FunctionalValidateFunctionProgrammer.js +14 -5
  20. package/lib/programmers/functional/FunctionalValidateFunctionProgrammer.js.map +1 -1
  21. package/lib/programmers/functional/FunctionalValidateParametersProgrammer.js +5 -1
  22. package/lib/programmers/functional/FunctionalValidateParametersProgrammer.js.map +1 -1
  23. package/lib/programmers/functional/FunctionalValidateReturnProgrammer.js +1 -0
  24. package/lib/programmers/functional/FunctionalValidateReturnProgrammer.js.map +1 -1
  25. package/lib/programmers/http/HttpAssertFormDataProgrammer.js +4 -1
  26. package/lib/programmers/http/HttpAssertFormDataProgrammer.js.map +1 -1
  27. package/lib/programmers/http/HttpAssertHeadersProgrammer.js +4 -1
  28. package/lib/programmers/http/HttpAssertHeadersProgrammer.js.map +1 -1
  29. package/lib/programmers/http/HttpAssertQueryProgrammer.js +4 -1
  30. package/lib/programmers/http/HttpAssertQueryProgrammer.js.map +1 -1
  31. package/lib/programmers/http/HttpFormDataProgrammer.js +10 -6
  32. package/lib/programmers/http/HttpFormDataProgrammer.js.map +1 -1
  33. package/lib/programmers/http/HttpHeadersProgrammer.js +10 -6
  34. package/lib/programmers/http/HttpHeadersProgrammer.js.map +1 -1
  35. package/lib/programmers/http/HttpQueryProgrammer.js +10 -6
  36. package/lib/programmers/http/HttpQueryProgrammer.js.map +1 -1
  37. package/lib/programmers/http/HttpValidateFormDataProgrammer.js +5 -3
  38. package/lib/programmers/http/HttpValidateFormDataProgrammer.js.map +1 -1
  39. package/lib/programmers/http/HttpValidateHeadersProgrammer.js +5 -3
  40. package/lib/programmers/http/HttpValidateHeadersProgrammer.js.map +1 -1
  41. package/lib/programmers/http/HttpValidateQueryProgrammer.js +5 -3
  42. package/lib/programmers/http/HttpValidateQueryProgrammer.js.map +1 -1
  43. package/lib/programmers/json/JsonAssertParseProgrammer.js +14 -7
  44. package/lib/programmers/json/JsonAssertParseProgrammer.js.map +1 -1
  45. package/lib/programmers/json/JsonAssertStringifyProgrammer.js +4 -1
  46. package/lib/programmers/json/JsonAssertStringifyProgrammer.js.map +1 -1
  47. package/lib/programmers/json/JsonIsParseProgrammer.js +10 -6
  48. package/lib/programmers/json/JsonIsParseProgrammer.js.map +1 -1
  49. package/lib/programmers/json/JsonValidateParseProgrammer.js +16 -4
  50. package/lib/programmers/json/JsonValidateParseProgrammer.js.map +1 -1
  51. package/lib/programmers/json/JsonValidateStringifyProgrammer.js +7 -3
  52. package/lib/programmers/json/JsonValidateStringifyProgrammer.js.map +1 -1
  53. package/lib/programmers/misc/MiscAssertCloneProgrammer.js +4 -1
  54. package/lib/programmers/misc/MiscAssertCloneProgrammer.js.map +1 -1
  55. package/lib/programmers/misc/MiscAssertPruneProgrammer.js +4 -1
  56. package/lib/programmers/misc/MiscAssertPruneProgrammer.js.map +1 -1
  57. package/lib/programmers/misc/MiscCloneProgrammer.js +10 -6
  58. package/lib/programmers/misc/MiscCloneProgrammer.js.map +1 -1
  59. package/lib/programmers/misc/MiscValidateCloneProgrammer.js +5 -3
  60. package/lib/programmers/misc/MiscValidateCloneProgrammer.js.map +1 -1
  61. package/lib/programmers/misc/MiscValidatePruneProgrammer.js +10 -4
  62. package/lib/programmers/misc/MiscValidatePruneProgrammer.js.map +1 -1
  63. package/lib/programmers/notations/NotationAssertGeneralProgrammer.js +4 -1
  64. package/lib/programmers/notations/NotationAssertGeneralProgrammer.js.map +1 -1
  65. package/lib/programmers/notations/NotationGeneralProgrammer.d.ts +2 -1
  66. package/lib/programmers/notations/NotationGeneralProgrammer.js +13 -5
  67. package/lib/programmers/notations/NotationGeneralProgrammer.js.map +1 -1
  68. package/lib/programmers/notations/NotationValidateGeneralProgrammer.js +5 -3
  69. package/lib/programmers/notations/NotationValidateGeneralProgrammer.js.map +1 -1
  70. package/lib/programmers/protobuf/ProtobufAssertDecodeProgrammer.js +4 -1
  71. package/lib/programmers/protobuf/ProtobufAssertDecodeProgrammer.js.map +1 -1
  72. package/lib/programmers/protobuf/ProtobufAssertEncodeProgrammer.js +4 -1
  73. package/lib/programmers/protobuf/ProtobufAssertEncodeProgrammer.js.map +1 -1
  74. package/lib/programmers/protobuf/ProtobufDecodeProgrammer.js +10 -6
  75. package/lib/programmers/protobuf/ProtobufDecodeProgrammer.js.map +1 -1
  76. package/lib/programmers/protobuf/ProtobufValidateDecodeProgrammer.js +5 -3
  77. package/lib/programmers/protobuf/ProtobufValidateDecodeProgrammer.js.map +1 -1
  78. package/lib/programmers/protobuf/ProtobufValidateEncodeProgrammer.js +7 -3
  79. package/lib/programmers/protobuf/ProtobufValidateEncodeProgrammer.js.map +1 -1
  80. package/package.json +1 -1
  81. package/src/factories/JsonMetadataFactory.ts +63 -63
  82. package/src/factories/ProtobufFactory.ts +275 -275
  83. package/src/internal/$jsonStringifyString.ts +0 -1
  84. package/src/programmers/AssertProgrammer.ts +454 -456
  85. package/src/programmers/CheckerProgrammer.ts +1610 -1610
  86. package/src/programmers/ImportProgrammer.ts +184 -109
  87. package/src/programmers/IsProgrammer.ts +273 -273
  88. package/src/programmers/RandomProgrammer.ts +168 -149
  89. package/src/programmers/TypiaProgrammer.ts +171 -171
  90. package/src/programmers/ValidateProgrammer.ts +434 -430
  91. package/src/programmers/functional/FunctionalAssertFunctionProgrammer.ts +1 -1
  92. package/src/programmers/functional/FunctionalValidateFunctionProgrammer.ts +12 -16
  93. package/src/programmers/functional/FunctionalValidateParametersProgrammer.ts +5 -12
  94. package/src/programmers/functional/FunctionalValidateReturnProgrammer.ts +1 -0
  95. package/src/programmers/helpers/OptionPredicator.ts +15 -15
  96. package/src/programmers/http/HttpAssertFormDataProgrammer.ts +99 -96
  97. package/src/programmers/http/HttpAssertHeadersProgrammer.ts +99 -96
  98. package/src/programmers/http/HttpAssertQueryProgrammer.ts +105 -102
  99. package/src/programmers/http/HttpFormDataProgrammer.ts +304 -308
  100. package/src/programmers/http/HttpHeadersProgrammer.ts +400 -404
  101. package/src/programmers/http/HttpIsFormDataProgrammer.ts +108 -108
  102. package/src/programmers/http/HttpIsHeadersProgrammer.ts +108 -108
  103. package/src/programmers/http/HttpIsQueryProgrammer.ts +114 -114
  104. package/src/programmers/http/HttpParameterProgrammer.ts +115 -115
  105. package/src/programmers/http/HttpQueryProgrammer.ts +329 -333
  106. package/src/programmers/http/HttpValidateFormDataProgrammer.ts +92 -90
  107. package/src/programmers/http/HttpValidateHeadersProgrammer.ts +92 -90
  108. package/src/programmers/http/HttpValidateQueryProgrammer.ts +98 -96
  109. package/src/programmers/json/JsonApplicationProgrammer.ts +92 -92
  110. package/src/programmers/json/JsonAssertParseProgrammer.ts +103 -104
  111. package/src/programmers/json/JsonAssertStringifyProgrammer.ts +115 -112
  112. package/src/programmers/json/JsonIsParseProgrammer.ts +114 -118
  113. package/src/programmers/json/JsonIsStringifyProgrammer.ts +108 -108
  114. package/src/programmers/json/JsonStringifyProgrammer.ts +1124 -1124
  115. package/src/programmers/json/JsonValidateParseProgrammer.ts +105 -95
  116. package/src/programmers/json/JsonValidateStringifyProgrammer.ts +124 -119
  117. package/src/programmers/misc/MiscAssertCloneProgrammer.ts +95 -92
  118. package/src/programmers/misc/MiscAssertPruneProgrammer.ts +116 -113
  119. package/src/programmers/misc/MiscCloneProgrammer.ts +1025 -1029
  120. package/src/programmers/misc/MiscIsCloneProgrammer.ts +99 -99
  121. package/src/programmers/misc/MiscIsPruneProgrammer.ts +97 -97
  122. package/src/programmers/misc/MiscLiteralsProgrammer.ts +80 -80
  123. package/src/programmers/misc/MiscPruneProgrammer.ts +725 -725
  124. package/src/programmers/misc/MiscValidateCloneProgrammer.ts +111 -109
  125. package/src/programmers/misc/MiscValidatePruneProgrammer.ts +113 -109
  126. package/src/programmers/notations/NotationAssertGeneralProgrammer.ts +101 -98
  127. package/src/programmers/notations/NotationGeneralProgrammer.ts +977 -973
  128. package/src/programmers/notations/NotationIsGeneralProgrammer.ts +105 -105
  129. package/src/programmers/notations/NotationValidateGeneralProgrammer.ts +119 -117
  130. package/src/programmers/protobuf/ProtobufAssertDecodeProgrammer.ts +98 -95
  131. package/src/programmers/protobuf/ProtobufAssertEncodeProgrammer.ts +102 -99
  132. package/src/programmers/protobuf/ProtobufDecodeProgrammer.ts +708 -711
  133. package/src/programmers/protobuf/ProtobufEncodeProgrammer.ts +1019 -1019
  134. package/src/programmers/protobuf/ProtobufIsDecodeProgrammer.ts +109 -109
  135. package/src/programmers/protobuf/ProtobufIsEncodeProgrammer.ts +98 -98
  136. package/src/programmers/protobuf/ProtobufValidateDecodeProgrammer.ts +92 -90
  137. package/src/programmers/protobuf/ProtobufValidateEncodeProgrammer.ts +119 -114
  138. package/src/transform.ts +35 -35
  139. package/src/transformers/CallExpressionTransformer.ts +540 -540
  140. package/src/transformers/FileTransformer.ts +120 -120
  141. package/src/transformers/IProgrammerProps.ts +11 -11
  142. package/src/transformers/ITransformOptions.ts +62 -62
  143. package/src/transformers/ITransformProps.ts +9 -9
  144. package/src/transformers/ITypiaContext.ts +18 -18
  145. package/src/transformers/ImportTransformer.ts +66 -66
  146. package/src/transformers/NodeTransformer.ts +17 -17
  147. package/src/transformers/TransformerError.ts +59 -59
  148. package/src/transformers/features/AssertTransformer.ts +24 -24
  149. package/src/transformers/features/CreateAssertTransformer.ts +24 -24
  150. package/src/transformers/features/CreateIsTransformer.ts +18 -18
  151. package/src/transformers/features/CreateRandomTransformer.ts +43 -43
  152. package/src/transformers/features/CreateValidateTransformer.ts +18 -18
  153. package/src/transformers/features/IsTransformer.ts +18 -18
  154. package/src/transformers/features/RandomTransformer.ts +41 -41
  155. package/src/transformers/features/ValidateTransformer.ts +18 -18
  156. package/src/transformers/features/functional/FunctionalGenericTransformer.ts +57 -57
  157. package/src/transformers/features/http/CreateHttpAssertFormDataTransformer.ts +13 -13
  158. package/src/transformers/features/http/CreateHttpAssertHeadersTransformer.ts +13 -13
  159. package/src/transformers/features/http/CreateHttpAssertQueryTransformer.ts +13 -13
  160. package/src/transformers/features/http/CreateHttpFormDataTransformer.ts +13 -13
  161. package/src/transformers/features/http/CreateHttpHeadersTransformer.ts +13 -13
  162. package/src/transformers/features/http/CreateHttpIsFormDataTransformer.ts +13 -13
  163. package/src/transformers/features/http/CreateHttpIsHeadersTransformer.ts +13 -13
  164. package/src/transformers/features/http/CreateHttpIsQueryTransformer.ts +13 -13
  165. package/src/transformers/features/http/CreateHttpParameterTransformer.ts +13 -13
  166. package/src/transformers/features/http/CreateHttpQueryTransformer.ts +13 -13
  167. package/src/transformers/features/http/CreateHttpValidateFormDataTransformer.ts +13 -13
  168. package/src/transformers/features/http/CreateHttpValidateHeadersTransformer.ts +13 -13
  169. package/src/transformers/features/http/CreateHttpValidateQueryTransformer.ts +13 -13
  170. package/src/transformers/features/http/HttpAssertFormDataTransformer.ts +13 -13
  171. package/src/transformers/features/http/HttpAssertHeadersTransformer.ts +13 -13
  172. package/src/transformers/features/http/HttpAssertQueryTransformer.ts +13 -13
  173. package/src/transformers/features/http/HttpFormDataTransformer.ts +13 -13
  174. package/src/transformers/features/http/HttpHeadersTransformer.ts +13 -13
  175. package/src/transformers/features/http/HttpIsFormDataTransformer.ts +13 -13
  176. package/src/transformers/features/http/HttpIsHeadersTransformer.ts +13 -13
  177. package/src/transformers/features/http/HttpIsQueryTransformer.ts +13 -13
  178. package/src/transformers/features/http/HttpParameterTransformer.ts +13 -13
  179. package/src/transformers/features/http/HttpQueryTransformer.ts +13 -13
  180. package/src/transformers/features/http/HttpValidateFormDataTransformer.ts +13 -13
  181. package/src/transformers/features/http/HttpValidateHeadersTransformer.ts +13 -13
  182. package/src/transformers/features/http/HttpValidateQueryTransformer.ts +13 -13
  183. package/src/transformers/features/json/JsonApplicationTransformer.ts +130 -130
  184. package/src/transformers/features/json/JsonAssertParseTransformer.ts +13 -13
  185. package/src/transformers/features/json/JsonAssertStringifyTransformer.ts +13 -13
  186. package/src/transformers/features/json/JsonCreateAssertParseTransformer.ts +13 -13
  187. package/src/transformers/features/json/JsonCreateAssertStringifyTransformer.ts +13 -13
  188. package/src/transformers/features/json/JsonCreateIsParseTransformer.ts +13 -13
  189. package/src/transformers/features/json/JsonCreateIsStringifyTransformer.ts +13 -13
  190. package/src/transformers/features/json/JsonCreateStringifyTransformer.ts +13 -13
  191. package/src/transformers/features/json/JsonCreateValidateParseTransformer.ts +13 -13
  192. package/src/transformers/features/json/JsonCreateValidateStringifyProgrammer.ts +13 -13
  193. package/src/transformers/features/json/JsonIsParseTransformer.ts +13 -13
  194. package/src/transformers/features/json/JsonIsStringifyTransformer.ts +13 -13
  195. package/src/transformers/features/json/JsonStringifyTransformer.ts +13 -13
  196. package/src/transformers/features/json/JsonValidateParseTransformer.ts +13 -13
  197. package/src/transformers/features/json/JsonValidateStringifyTransformer.ts +13 -13
  198. package/src/transformers/features/llm/LlmApplicationTransformer.ts +86 -86
  199. package/src/transformers/features/llm/LlmSchemaTransformer.ts +59 -59
  200. package/src/transformers/features/misc/MiscAssertCloneTransformer.ts +13 -13
  201. package/src/transformers/features/misc/MiscAssertPruneTransformer.ts +13 -13
  202. package/src/transformers/features/misc/MiscCloneTransformer.ts +13 -13
  203. package/src/transformers/features/misc/MiscCreateAssertCloneTransformer.ts +13 -13
  204. package/src/transformers/features/misc/MiscCreateAssertPruneTransformer.ts +13 -13
  205. package/src/transformers/features/misc/MiscCreateCloneTransformer.ts +13 -13
  206. package/src/transformers/features/misc/MiscCreateIsCloneTransformer.ts +13 -13
  207. package/src/transformers/features/misc/MiscCreateIsPruneTransformer.ts +13 -13
  208. package/src/transformers/features/misc/MiscCreatePruneTransformer.ts +13 -13
  209. package/src/transformers/features/misc/MiscCreateValidateCloneTransformer.ts +13 -13
  210. package/src/transformers/features/misc/MiscCreateValidatePruneTransformer.ts +13 -13
  211. package/src/transformers/features/misc/MiscIsCloneTransformer.ts +13 -13
  212. package/src/transformers/features/misc/MiscIsPruneTransformer.ts +13 -13
  213. package/src/transformers/features/misc/MiscLiteralsTransformer.ts +35 -35
  214. package/src/transformers/features/misc/MiscPruneTransformer.ts +13 -13
  215. package/src/transformers/features/misc/MiscValidateCloneTransformer.ts +13 -13
  216. package/src/transformers/features/misc/MiscValidatePruneTransformer.ts +13 -13
  217. package/src/transformers/features/notations/NotationAssertGeneralTransformer.ts +20 -20
  218. package/src/transformers/features/notations/NotationCreateAssertGeneralTransformer.ts +20 -20
  219. package/src/transformers/features/notations/NotationCreateGeneralTransformer.ts +20 -20
  220. package/src/transformers/features/notations/NotationCreateIsGeneralTransformer.ts +20 -20
  221. package/src/transformers/features/notations/NotationCreateValidateGeneralTransformer.ts +20 -20
  222. package/src/transformers/features/notations/NotationGeneralTransformer.ts +18 -18
  223. package/src/transformers/features/notations/NotationIsGeneralTransformer.ts +20 -20
  224. package/src/transformers/features/notations/NotationValidateGeneralTransformer.ts +20 -20
  225. package/src/transformers/features/protobuf/ProtobufAssertDecodeTransformer.ts +13 -13
  226. package/src/transformers/features/protobuf/ProtobufAssertEncodeTransformer.ts +13 -13
  227. package/src/transformers/features/protobuf/ProtobufCreateAssertDecodeTransformer.ts +13 -13
  228. package/src/transformers/features/protobuf/ProtobufCreateAssertEncodeTransformer.ts +13 -13
  229. package/src/transformers/features/protobuf/ProtobufCreateDecodeTransformer.ts +13 -13
  230. package/src/transformers/features/protobuf/ProtobufCreateEncodeTransformer.ts +13 -13
  231. package/src/transformers/features/protobuf/ProtobufCreateIsDecodeTransformer.ts +13 -13
  232. package/src/transformers/features/protobuf/ProtobufCreateIsEncodeTransformer.ts +13 -13
  233. package/src/transformers/features/protobuf/ProtobufCreateValidateDecodeTransformer.ts +13 -13
  234. package/src/transformers/features/protobuf/ProtobufCreateValidateEncodeTransformer.ts +13 -13
  235. package/src/transformers/features/protobuf/ProtobufDecodeTransformer.ts +13 -13
  236. package/src/transformers/features/protobuf/ProtobufEncodeTransformer.ts +13 -13
  237. package/src/transformers/features/protobuf/ProtobufIsDecodeTransformer.ts +13 -13
  238. package/src/transformers/features/protobuf/ProtobufIsEncodeTransformer.ts +13 -13
  239. package/src/transformers/features/protobuf/ProtobufMessageTransformer.ts +35 -35
  240. package/src/transformers/features/protobuf/ProtobufValidateDecodeTransformer.ts +13 -13
  241. package/src/transformers/features/protobuf/ProtobufValidateEncodeTransformer.ts +13 -13
  242. package/src/transformers/features/reflect/ReflectMetadataTransformer.ts +69 -69
  243. package/src/transformers/features/reflect/ReflectNameTransformer.ts +82 -82
  244. package/src/transformers/internal/GenericTransformer.ts +101 -101
@@ -1,275 +1,275 @@
1
- import ts from "typescript";
2
-
3
- import { Metadata } from "../schemas/metadata/Metadata";
4
- import { MetadataObject } from "../schemas/metadata/MetadataObject";
5
-
6
- import { ProtobufUtil } from "../programmers/helpers/ProtobufUtil";
7
-
8
- import { TransformerError } from "../transformers/TransformerError";
9
-
10
- import { ValidationPipe } from "../typings/ValidationPipe";
11
-
12
- import { Escaper } from "../utils/Escaper";
13
-
14
- import { MetadataCollection } from "./MetadataCollection";
15
- import { MetadataFactory } from "./MetadataFactory";
16
-
17
- export namespace ProtobufFactory {
18
- export interface IProps {
19
- method: string;
20
- checker: ts.TypeChecker;
21
- transformer?: ts.TransformationContext;
22
- collection: MetadataCollection;
23
- type: ts.Type;
24
- }
25
-
26
- export const metadata = (props: IProps): Metadata => {
27
- // COMPOSE METADATA WITH INDIVIDUAL VALIDATIONS
28
- const result: ValidationPipe<Metadata, MetadataFactory.IError> =
29
- MetadataFactory.analyze({
30
- ...props,
31
- transformer: props.transformer,
32
- options: {
33
- escape: false,
34
- constant: true,
35
- absorb: true,
36
- validate,
37
- },
38
- });
39
- if (result.success === false)
40
- throw TransformerError.from({
41
- code: `typia.protobuf.${props.method}`,
42
- errors: result.errors,
43
- });
44
- return result.data;
45
- };
46
-
47
- const validate = (
48
- meta: Metadata,
49
- explore: MetadataFactory.IExplore,
50
- ): string[] => {
51
- const errors: string[] = [];
52
- const insert = (msg: string) => errors.push(msg);
53
-
54
- if (explore.top === true) {
55
- const onlyObject: boolean =
56
- meta.size() === 1 &&
57
- meta.objects.length === 1 &&
58
- meta.objects[0]!.properties.every((p) => p.key.isSoleLiteral()) &&
59
- meta.isRequired() === true &&
60
- meta.nullable === false;
61
- if (onlyObject === false)
62
- insert("target type must be a sole and static object type");
63
- }
64
-
65
- //----
66
- // NOT SUPPORTED TYPES
67
- //----
68
- const noSupport = (msg: string) => insert(`does not support ${msg}`);
69
-
70
- // PROHIBIT ANY TYPE
71
- if (meta.any) noSupport("any type");
72
- // PROHIBIT FUNCTIONAL TYPE
73
- if (meta.functions.length) noSupport("functional type");
74
- // PROHIBIT TUPLE TYPE
75
- if (meta.tuples.length) noSupport("tuple type");
76
- // PROHIBIT SET TYPE
77
- if (meta.sets.length) noSupport("Set type");
78
- // NATIVE TYPE, BUT NOT Uint8Array
79
- if (meta.natives.length)
80
- for (const native of meta.natives) {
81
- if (native === "Uint8Array") continue;
82
-
83
- const instead = BANNED_NATIVE_TYPES.get(native);
84
- if (instead === undefined) noSupport(`${native} type`);
85
- else noSupport(`${native} type. Use ${instead} type instead.`);
86
- }
87
- //----
88
- // ATOMIC CASES
89
- //----
90
- if (meta.atomics.length) {
91
- const numbers = ProtobufUtil.getNumbers(meta);
92
- const bigints = ProtobufUtil.getBigints(meta);
93
-
94
- for (const type of ["int64", "uint64"])
95
- if (numbers.some((n) => n === type) && bigints.some((b) => b === type))
96
- insert(
97
- `tags.Type<"${type}"> cannot be used in both number and bigint types. Recommend to remove from number type`,
98
- );
99
- }
100
- //----
101
- // ARRRAY CASES
102
- //----
103
- // DO NOT ALLOW MULTI-DIMENTIONAL ARRAY
104
- if (
105
- meta.arrays.length &&
106
- meta.arrays.some((array) => !!array.type.value.arrays.length)
107
- )
108
- noSupport("over two dimenstional array type");
109
- // CHILD OF ARRAY TYPE MUST BE REQUIRED
110
- if (
111
- meta.arrays.length &&
112
- meta.arrays.some(
113
- (array) =>
114
- array.type.value.isRequired() === false ||
115
- array.type.value.nullable === true,
116
- )
117
- )
118
- noSupport("optional type in array");
119
- // UNION IN ARRAY
120
- if (
121
- meta.arrays.length &&
122
- meta.arrays.some(
123
- (a) =>
124
- a.type.value.size() > 1 &&
125
- a.type.value.constants.length !== 1 &&
126
- a.type.value.constants[0]?.values.length !== a.type.value.size(),
127
- )
128
- )
129
- noSupport("union type in array");
130
- // DO DYNAMIC OBJECT IN ARRAY
131
- if (
132
- meta.arrays.length &&
133
- meta.arrays.some(
134
- (a) =>
135
- a.type.value.maps.length ||
136
- (a.type.value.objects.length &&
137
- a.type.value.objects.some(
138
- (o) => ProtobufUtil.isStaticObject(o) === false,
139
- )),
140
- )
141
- )
142
- noSupport("dynamic object in array");
143
- // UNION WITH ARRAY
144
- if (meta.size() > 1 && meta.arrays.length)
145
- noSupport("union type with array type");
146
- //----
147
- // OBJECT CASES
148
- //----
149
- // EMPTY PROPERTY
150
- if (
151
- meta.objects.length &&
152
- meta.objects.some((obj) => obj.properties.length === 0)
153
- )
154
- noSupport("empty object type");
155
- // MULTIPLE DYNAMIC KEY TYPED PROPERTIES
156
- if (
157
- meta.objects.length &&
158
- meta.objects.some(
159
- (obj) =>
160
- obj.properties.filter((p) => !p.key.isSoleLiteral()).length > 1,
161
- )
162
- )
163
- noSupport(
164
- "object type with multiple dynamic key typed properties. Keep only one.",
165
- );
166
- // STATIC AND DYNAMIC PROPERTIES ARE COMPATIBLE
167
- if (
168
- meta.objects.length &&
169
- meta.objects.some(
170
- (obj) =>
171
- obj.properties.some((p) => p.key.isSoleLiteral()) &&
172
- obj.properties.some((p) => !p.key.isSoleLiteral()),
173
- )
174
- )
175
- noSupport(
176
- "object type with mixed static and dynamic key typed properties. Keep statics or dynamic only.",
177
- );
178
- // STATIC PROPERTY, BUT INVALID KEY NAME
179
- if (
180
- meta.objects.length &&
181
- meta.objects.some((obj) =>
182
- obj.properties.some(
183
- (p) =>
184
- p.key.isSoleLiteral() === true &&
185
- Escaper.variable(p.key.getSoleLiteral()!) === false,
186
- ),
187
- )
188
- )
189
- noSupport(`object type with invalid static key name.`);
190
- // DYNAMIC OBJECT, BUT PROPERTY VALUE TYPE IS ARRAY
191
- if (
192
- meta.objects.length &&
193
- isDynamicObject(meta.objects[0]!) &&
194
- meta.objects[0]!.properties.some((p) => !!p.value.arrays.length)
195
- )
196
- noSupport("dynamic object with array value type");
197
- // UNION WITH DYNAMIC OBJECT
198
- if (
199
- meta.size() > 1 &&
200
- meta.objects.length &&
201
- isDynamicObject(meta.objects[0]!)
202
- )
203
- noSupport("union type with dynamic object type");
204
- // UNION IN DYNAMIC PROPERTY VALUE
205
- if (
206
- meta.objects.length &&
207
- meta.objects.some(
208
- (obj) =>
209
- isDynamicObject(obj) &&
210
- obj.properties.some((p) => ProtobufUtil.isUnion(p.value)),
211
- )
212
- )
213
- noSupport("union type in dynamic property");
214
- //----
215
- // MAP CASES
216
- //----
217
- // KEY TYPE IS UNION
218
- if (meta.maps.length && meta.maps.some((m) => ProtobufUtil.isUnion(m.key)))
219
- noSupport("union key typed map");
220
- // KEY TYPE IS NOT ATOMIC
221
- if (
222
- meta.maps.length &&
223
- meta.maps.some((m) => ProtobufUtil.getAtomics(m.key).length !== 1)
224
- )
225
- noSupport("non-atomic key typed map");
226
- // MAP TYPE, BUT PROPERTY KEY TYPE IS OPTIONAL
227
- if (
228
- meta.maps.length &&
229
- meta.maps.some((m) => m.key.isRequired() === false || m.key.nullable)
230
- )
231
- noSupport("optional key typed map");
232
- // MAP TYPE, BUT VALUE TYPE IS ARRAY
233
- if (meta.maps.length && meta.maps.some((m) => !!m.value.arrays.length))
234
- noSupport("map type with array value type");
235
- // UNION WITH MAP
236
- if (meta.size() > 1 && meta.maps.length)
237
- noSupport("union type with map type");
238
- // UNION IN MAP
239
- if (
240
- meta.maps.length &&
241
- meta.maps.some((m) => ProtobufUtil.isUnion(m.value))
242
- )
243
- noSupport("union type in map value type");
244
- return errors;
245
- };
246
- }
247
-
248
- const isDynamicObject = (obj: MetadataObject): boolean =>
249
- obj.properties[0]!.key.isSoleLiteral() === false;
250
-
251
- const BANNED_NATIVE_TYPES: Map<string, string | null> = new Map([
252
- ["Date", "string"],
253
- ["Boolean", "boolean"],
254
- ["BigInt", "bigint"],
255
- ["Number", "number"],
256
- ["String", "string"],
257
- ...[
258
- "Buffer",
259
- "Uint8ClampedArray",
260
- "Uint16Array",
261
- "Uint32Array",
262
- "BigUint64Array",
263
- "Int8Array",
264
- "Int16Array",
265
- "Int32Array",
266
- "BigInt64Array",
267
- "Float32Array",
268
- "Float64Array",
269
- "DataView",
270
- "ArrayBuffer",
271
- "SharedArrayBuffer",
272
- ].map((name) => [name, "Uint8Array"] as const),
273
- ["WeakSet", "Array"],
274
- ["WeakMap", "Map"],
275
- ]);
1
+ import ts from "typescript";
2
+
3
+ import { Metadata } from "../schemas/metadata/Metadata";
4
+ import { MetadataObject } from "../schemas/metadata/MetadataObject";
5
+
6
+ import { ProtobufUtil } from "../programmers/helpers/ProtobufUtil";
7
+
8
+ import { TransformerError } from "../transformers/TransformerError";
9
+
10
+ import { ValidationPipe } from "../typings/ValidationPipe";
11
+
12
+ import { Escaper } from "../utils/Escaper";
13
+
14
+ import { MetadataCollection } from "./MetadataCollection";
15
+ import { MetadataFactory } from "./MetadataFactory";
16
+
17
+ export namespace ProtobufFactory {
18
+ export interface IProps {
19
+ method: string;
20
+ checker: ts.TypeChecker;
21
+ transformer?: ts.TransformationContext;
22
+ collection: MetadataCollection;
23
+ type: ts.Type;
24
+ }
25
+
26
+ export const metadata = (props: IProps): Metadata => {
27
+ // COMPOSE METADATA WITH INDIVIDUAL VALIDATIONS
28
+ const result: ValidationPipe<Metadata, MetadataFactory.IError> =
29
+ MetadataFactory.analyze({
30
+ ...props,
31
+ transformer: props.transformer,
32
+ options: {
33
+ escape: false,
34
+ constant: true,
35
+ absorb: true,
36
+ validate,
37
+ },
38
+ });
39
+ if (result.success === false)
40
+ throw TransformerError.from({
41
+ code: `typia.protobuf.${props.method}`,
42
+ errors: result.errors,
43
+ });
44
+ return result.data;
45
+ };
46
+
47
+ const validate = (
48
+ meta: Metadata,
49
+ explore: MetadataFactory.IExplore,
50
+ ): string[] => {
51
+ const errors: string[] = [];
52
+ const insert = (msg: string) => errors.push(msg);
53
+
54
+ if (explore.top === true) {
55
+ const onlyObject: boolean =
56
+ meta.size() === 1 &&
57
+ meta.objects.length === 1 &&
58
+ meta.objects[0]!.properties.every((p) => p.key.isSoleLiteral()) &&
59
+ meta.isRequired() === true &&
60
+ meta.nullable === false;
61
+ if (onlyObject === false)
62
+ insert("target type must be a sole and static object type");
63
+ }
64
+
65
+ //----
66
+ // NOT SUPPORTED TYPES
67
+ //----
68
+ const noSupport = (msg: string) => insert(`does not support ${msg}`);
69
+
70
+ // PROHIBIT ANY TYPE
71
+ if (meta.any) noSupport("any type");
72
+ // PROHIBIT FUNCTIONAL TYPE
73
+ if (meta.functions.length) noSupport("functional type");
74
+ // PROHIBIT TUPLE TYPE
75
+ if (meta.tuples.length) noSupport("tuple type");
76
+ // PROHIBIT SET TYPE
77
+ if (meta.sets.length) noSupport("Set type");
78
+ // NATIVE TYPE, BUT NOT Uint8Array
79
+ if (meta.natives.length)
80
+ for (const native of meta.natives) {
81
+ if (native === "Uint8Array") continue;
82
+
83
+ const instead = BANNED_NATIVE_TYPES.get(native);
84
+ if (instead === undefined) noSupport(`${native} type`);
85
+ else noSupport(`${native} type. Use ${instead} type instead.`);
86
+ }
87
+ //----
88
+ // ATOMIC CASES
89
+ //----
90
+ if (meta.atomics.length) {
91
+ const numbers = ProtobufUtil.getNumbers(meta);
92
+ const bigints = ProtobufUtil.getBigints(meta);
93
+
94
+ for (const type of ["int64", "uint64"])
95
+ if (numbers.some((n) => n === type) && bigints.some((b) => b === type))
96
+ insert(
97
+ `tags.Type<"${type}"> cannot be used in both number and bigint types. Recommend to remove from number type`,
98
+ );
99
+ }
100
+ //----
101
+ // ARRRAY CASES
102
+ //----
103
+ // DO NOT ALLOW MULTI-DIMENTIONAL ARRAY
104
+ if (
105
+ meta.arrays.length &&
106
+ meta.arrays.some((array) => !!array.type.value.arrays.length)
107
+ )
108
+ noSupport("over two dimenstional array type");
109
+ // CHILD OF ARRAY TYPE MUST BE REQUIRED
110
+ if (
111
+ meta.arrays.length &&
112
+ meta.arrays.some(
113
+ (array) =>
114
+ array.type.value.isRequired() === false ||
115
+ array.type.value.nullable === true,
116
+ )
117
+ )
118
+ noSupport("optional type in array");
119
+ // UNION IN ARRAY
120
+ if (
121
+ meta.arrays.length &&
122
+ meta.arrays.some(
123
+ (a) =>
124
+ a.type.value.size() > 1 &&
125
+ a.type.value.constants.length !== 1 &&
126
+ a.type.value.constants[0]?.values.length !== a.type.value.size(),
127
+ )
128
+ )
129
+ noSupport("union type in array");
130
+ // DO DYNAMIC OBJECT IN ARRAY
131
+ if (
132
+ meta.arrays.length &&
133
+ meta.arrays.some(
134
+ (a) =>
135
+ a.type.value.maps.length ||
136
+ (a.type.value.objects.length &&
137
+ a.type.value.objects.some(
138
+ (o) => ProtobufUtil.isStaticObject(o) === false,
139
+ )),
140
+ )
141
+ )
142
+ noSupport("dynamic object in array");
143
+ // UNION WITH ARRAY
144
+ if (meta.size() > 1 && meta.arrays.length)
145
+ noSupport("union type with array type");
146
+ //----
147
+ // OBJECT CASES
148
+ //----
149
+ // EMPTY PROPERTY
150
+ if (
151
+ meta.objects.length &&
152
+ meta.objects.some((obj) => obj.properties.length === 0)
153
+ )
154
+ noSupport("empty object type");
155
+ // MULTIPLE DYNAMIC KEY TYPED PROPERTIES
156
+ if (
157
+ meta.objects.length &&
158
+ meta.objects.some(
159
+ (obj) =>
160
+ obj.properties.filter((p) => !p.key.isSoleLiteral()).length > 1,
161
+ )
162
+ )
163
+ noSupport(
164
+ "object type with multiple dynamic key typed properties. Keep only one.",
165
+ );
166
+ // STATIC AND DYNAMIC PROPERTIES ARE COMPATIBLE
167
+ if (
168
+ meta.objects.length &&
169
+ meta.objects.some(
170
+ (obj) =>
171
+ obj.properties.some((p) => p.key.isSoleLiteral()) &&
172
+ obj.properties.some((p) => !p.key.isSoleLiteral()),
173
+ )
174
+ )
175
+ noSupport(
176
+ "object type with mixed static and dynamic key typed properties. Keep statics or dynamic only.",
177
+ );
178
+ // STATIC PROPERTY, BUT INVALID KEY NAME
179
+ if (
180
+ meta.objects.length &&
181
+ meta.objects.some((obj) =>
182
+ obj.properties.some(
183
+ (p) =>
184
+ p.key.isSoleLiteral() === true &&
185
+ Escaper.variable(p.key.getSoleLiteral()!) === false,
186
+ ),
187
+ )
188
+ )
189
+ noSupport(`object type with invalid static key name.`);
190
+ // DYNAMIC OBJECT, BUT PROPERTY VALUE TYPE IS ARRAY
191
+ if (
192
+ meta.objects.length &&
193
+ isDynamicObject(meta.objects[0]!) &&
194
+ meta.objects[0]!.properties.some((p) => !!p.value.arrays.length)
195
+ )
196
+ noSupport("dynamic object with array value type");
197
+ // UNION WITH DYNAMIC OBJECT
198
+ if (
199
+ meta.size() > 1 &&
200
+ meta.objects.length &&
201
+ isDynamicObject(meta.objects[0]!)
202
+ )
203
+ noSupport("union type with dynamic object type");
204
+ // UNION IN DYNAMIC PROPERTY VALUE
205
+ if (
206
+ meta.objects.length &&
207
+ meta.objects.some(
208
+ (obj) =>
209
+ isDynamicObject(obj) &&
210
+ obj.properties.some((p) => ProtobufUtil.isUnion(p.value)),
211
+ )
212
+ )
213
+ noSupport("union type in dynamic property");
214
+ //----
215
+ // MAP CASES
216
+ //----
217
+ // KEY TYPE IS UNION
218
+ if (meta.maps.length && meta.maps.some((m) => ProtobufUtil.isUnion(m.key)))
219
+ noSupport("union key typed map");
220
+ // KEY TYPE IS NOT ATOMIC
221
+ if (
222
+ meta.maps.length &&
223
+ meta.maps.some((m) => ProtobufUtil.getAtomics(m.key).length !== 1)
224
+ )
225
+ noSupport("non-atomic key typed map");
226
+ // MAP TYPE, BUT PROPERTY KEY TYPE IS OPTIONAL
227
+ if (
228
+ meta.maps.length &&
229
+ meta.maps.some((m) => m.key.isRequired() === false || m.key.nullable)
230
+ )
231
+ noSupport("optional key typed map");
232
+ // MAP TYPE, BUT VALUE TYPE IS ARRAY
233
+ if (meta.maps.length && meta.maps.some((m) => !!m.value.arrays.length))
234
+ noSupport("map type with array value type");
235
+ // UNION WITH MAP
236
+ if (meta.size() > 1 && meta.maps.length)
237
+ noSupport("union type with map type");
238
+ // UNION IN MAP
239
+ if (
240
+ meta.maps.length &&
241
+ meta.maps.some((m) => ProtobufUtil.isUnion(m.value))
242
+ )
243
+ noSupport("union type in map value type");
244
+ return errors;
245
+ };
246
+ }
247
+
248
+ const isDynamicObject = (obj: MetadataObject): boolean =>
249
+ obj.properties[0]!.key.isSoleLiteral() === false;
250
+
251
+ const BANNED_NATIVE_TYPES: Map<string, string | null> = new Map([
252
+ ["Date", "string"],
253
+ ["Boolean", "boolean"],
254
+ ["BigInt", "bigint"],
255
+ ["Number", "number"],
256
+ ["String", "string"],
257
+ ...[
258
+ "Buffer",
259
+ "Uint8ClampedArray",
260
+ "Uint16Array",
261
+ "Uint32Array",
262
+ "BigUint64Array",
263
+ "Int8Array",
264
+ "Int16Array",
265
+ "Int32Array",
266
+ "BigInt64Array",
267
+ "Float32Array",
268
+ "Float64Array",
269
+ "DataView",
270
+ "ArrayBuffer",
271
+ "SharedArrayBuffer",
272
+ ].map((name) => [name, "Uint8Array"] as const),
273
+ ["WeakSet", "Array"],
274
+ ["WeakMap", "Map"],
275
+ ]);
@@ -7,7 +7,6 @@
7
7
  * This `$string` function is a part of `fast-json-stringify` at that time, and
8
8
  * still being used in `typia` for the string serialization.
9
9
  *
10
- * @internal
11
10
  * @reference https://github.com/fastify/fast-json-stringify/blob/master/lib/serializer.js
12
11
  * @blog https://dev.to/samchon/good-bye-typescript-is-ancestor-of-typia-20000x-faster-validator-49fi
13
12
  */