typia 4.1.2-dev.20230630 → 4.1.3-dev.20230704

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 (246) hide show
  1. package/README.md +1 -0
  2. package/lib/factories/internal/metadata/emplace_metadata_object.js +24 -32
  3. package/lib/factories/internal/metadata/emplace_metadata_object.js.map +1 -1
  4. package/lib/factories/internal/metadata/iterate_metadata_collection.js +2 -0
  5. package/lib/factories/internal/metadata/iterate_metadata_collection.js.map +1 -1
  6. package/lib/factories/internal/metadata/iterate_metadata_tag.d.ts +2 -0
  7. package/lib/factories/internal/metadata/iterate_metadata_tag.js +50 -0
  8. package/lib/factories/internal/metadata/iterate_metadata_tag.js.map +1 -0
  9. package/lib/metadata/MetadataObject.js +2 -0
  10. package/lib/metadata/MetadataObject.js.map +1 -1
  11. package/package.json +1 -1
  12. package/src/CustomValidatorMap.ts +126 -126
  13. package/src/IRandomGenerator.ts +34 -34
  14. package/src/IValidation.ts +21 -21
  15. package/src/Primitive.ts +131 -131
  16. package/src/TypeGuardError.ts +36 -36
  17. package/src/executable/TypiaGenerateWizard.ts +85 -85
  18. package/src/executable/TypiaSetupWizard.ts +133 -133
  19. package/src/executable/setup/ArgumentParser.ts +45 -45
  20. package/src/executable/setup/CommandExecutor.ts +8 -8
  21. package/src/executable/setup/FileRetriever.ts +22 -22
  22. package/src/executable/setup/PackageManager.ts +71 -71
  23. package/src/executable/setup/PluginConfigurator.ts +70 -70
  24. package/src/executable/typia.ts +52 -52
  25. package/src/factories/CommentFactory.ts +64 -64
  26. package/src/factories/ExpressionFactory.ts +70 -70
  27. package/src/factories/IdentifierFactory.ts +59 -59
  28. package/src/factories/LiteralFactory.ts +39 -39
  29. package/src/factories/MetadataCollection.ts +254 -254
  30. package/src/factories/MetadataFactory.ts +30 -30
  31. package/src/factories/MetadataTagFactory.ts +355 -355
  32. package/src/factories/StatementFactory.ts +24 -24
  33. package/src/factories/TemplateFactory.ts +58 -58
  34. package/src/factories/TypeFactory.ts +124 -124
  35. package/src/factories/ValueFactory.ts +12 -12
  36. package/src/factories/internal/metadata/MetadataHelper.ts +12 -12
  37. package/src/factories/internal/metadata/emend_metadata_atomics.ts +33 -33
  38. package/src/factories/internal/metadata/emplace_metadata_array.ts +34 -34
  39. package/src/factories/internal/metadata/emplace_metadata_definition.ts +35 -35
  40. package/src/factories/internal/metadata/emplace_metadata_object.ts +137 -140
  41. package/src/factories/internal/metadata/emplace_metadata_tuple.ts +53 -53
  42. package/src/factories/internal/metadata/explore_metadata.ts +40 -40
  43. package/src/factories/internal/metadata/iterate_metadata.ts +81 -81
  44. package/src/factories/internal/metadata/iterate_metadata_alias.ts +30 -30
  45. package/src/factories/internal/metadata/iterate_metadata_array.ts +24 -24
  46. package/src/factories/internal/metadata/iterate_metadata_atomic.ts +59 -59
  47. package/src/factories/internal/metadata/iterate_metadata_coalesce.ts +33 -33
  48. package/src/factories/internal/metadata/iterate_metadata_collection.ts +133 -130
  49. package/src/factories/internal/metadata/iterate_metadata_constant.ts +58 -58
  50. package/src/factories/internal/metadata/iterate_metadata_intersection.ts +83 -83
  51. package/src/factories/internal/metadata/iterate_metadata_map.ts +41 -41
  52. package/src/factories/internal/metadata/iterate_metadata_native.ts +219 -219
  53. package/src/factories/internal/metadata/iterate_metadata_object.ts +43 -43
  54. package/src/factories/internal/metadata/iterate_metadata_resolve.ts +49 -49
  55. package/src/factories/internal/metadata/iterate_metadata_set.ts +33 -33
  56. package/src/factories/internal/metadata/iterate_metadata_sort.ts +69 -69
  57. package/src/factories/internal/metadata/iterate_metadata_tag.ts +31 -0
  58. package/src/factories/internal/metadata/iterate_metadata_template.ts +38 -38
  59. package/src/factories/internal/metadata/iterate_metadata_tuple.ts +24 -24
  60. package/src/factories/internal/metadata/iterate_metadata_union.ts +24 -24
  61. package/src/functional/$any.ts +2 -2
  62. package/src/functional/$dictionary.ts +25 -25
  63. package/src/functional/$every.ts +11 -11
  64. package/src/functional/$guard.ts +35 -35
  65. package/src/functional/$is_between.ts +2 -2
  66. package/src/functional/$is_custom.ts +14 -14
  67. package/src/functional/$is_date.ts +3 -3
  68. package/src/functional/$is_datetime.ts +2 -2
  69. package/src/functional/$is_email.ts +4 -4
  70. package/src/functional/$is_ipv4.ts +4 -4
  71. package/src/functional/$is_ipv6.ts +4 -4
  72. package/src/functional/$is_url.ts +4 -4
  73. package/src/functional/$is_uuid.ts +4 -4
  74. package/src/functional/$join.ts +46 -46
  75. package/src/functional/$number.ts +12 -12
  76. package/src/functional/$report.ts +15 -15
  77. package/src/functional/$rest.ts +3 -3
  78. package/src/functional/$string.ts +37 -37
  79. package/src/functional/$tail.ts +5 -5
  80. package/src/functional/Namespace.ts +127 -127
  81. package/src/index.ts +4 -4
  82. package/src/metadata/ICommentTag.ts +4 -4
  83. package/src/metadata/IJsDocTagInfo.ts +10 -10
  84. package/src/metadata/IMetadata.ts +28 -28
  85. package/src/metadata/IMetadataAlias.ts +12 -12
  86. package/src/metadata/IMetadataApplication.ts +7 -7
  87. package/src/metadata/IMetadataArray.ts +10 -10
  88. package/src/metadata/IMetadataCollection.ts +11 -11
  89. package/src/metadata/IMetadataConstant.ts +16 -16
  90. package/src/metadata/IMetadataDictionary.ts +14 -14
  91. package/src/metadata/IMetadataEntry.ts +6 -6
  92. package/src/metadata/IMetadataObject.ts +18 -18
  93. package/src/metadata/IMetadataProperty.ts +11 -11
  94. package/src/metadata/IMetadataResolved.ts +6 -6
  95. package/src/metadata/IMetadataTag.ts +105 -105
  96. package/src/metadata/IMetadataTuple.ts +10 -10
  97. package/src/metadata/Metadata.ts +599 -599
  98. package/src/metadata/MetadataAlias.ts +61 -61
  99. package/src/metadata/MetadataArray.ts +55 -55
  100. package/src/metadata/MetadataConstant.ts +3 -3
  101. package/src/metadata/MetadataObject.ts +129 -118
  102. package/src/metadata/MetadataProperty.ts +64 -64
  103. package/src/metadata/MetadataResolved.ts +51 -51
  104. package/src/metadata/MetadataTuple.ts +53 -53
  105. package/src/module.ts +2038 -2038
  106. package/src/programmers/ApplicationProgrammer.ts +47 -47
  107. package/src/programmers/AssertCloneProgrammer.ts +71 -71
  108. package/src/programmers/AssertParseProgrammer.ts +66 -66
  109. package/src/programmers/AssertProgrammer.ts +279 -279
  110. package/src/programmers/AssertPruneProgrammer.ts +68 -68
  111. package/src/programmers/AssertStringifyProgrammer.ts +66 -66
  112. package/src/programmers/CheckerProgrammer.ts +1182 -1182
  113. package/src/programmers/CloneProgrammer.ts +587 -587
  114. package/src/programmers/FeatureProgrammer.ts +495 -495
  115. package/src/programmers/IsCloneProgrammer.ts +78 -78
  116. package/src/programmers/IsParseProgrammer.ts +72 -72
  117. package/src/programmers/IsProgrammer.ts +239 -239
  118. package/src/programmers/IsPruneProgrammer.ts +73 -73
  119. package/src/programmers/IsStringifyProgrammer.ts +76 -76
  120. package/src/programmers/LiteralsProgrammer.ts +60 -60
  121. package/src/programmers/PruneProgrammer.ts +542 -542
  122. package/src/programmers/RandomProgrammer.ts +581 -581
  123. package/src/programmers/StringifyProgrammer.ts +978 -978
  124. package/src/programmers/TypiaProgrammer.ts +129 -129
  125. package/src/programmers/ValidateCloneProgrammer.ts +85 -85
  126. package/src/programmers/ValidateParseProgrammer.ts +70 -70
  127. package/src/programmers/ValidateProgrammer.ts +305 -305
  128. package/src/programmers/ValidatePruneProgrammer.ts +78 -78
  129. package/src/programmers/ValidateStringifyProgrammer.ts +84 -84
  130. package/src/programmers/helpers/AtomicPredicator.ts +31 -31
  131. package/src/programmers/helpers/CloneJoiner.ts +131 -131
  132. package/src/programmers/helpers/FunctionImporeter.ts +78 -78
  133. package/src/programmers/helpers/ICheckEntry.ts +12 -12
  134. package/src/programmers/helpers/IExpressionEntry.ts +12 -12
  135. package/src/programmers/helpers/OptionPredicator.ts +15 -15
  136. package/src/programmers/helpers/PruneJoiner.ts +143 -143
  137. package/src/programmers/helpers/RandomJoiner.ts +173 -173
  138. package/src/programmers/helpers/RandomRanger.ts +216 -216
  139. package/src/programmers/helpers/StringifyJoinder.ts +113 -113
  140. package/src/programmers/helpers/StringifyPredicator.ts +12 -12
  141. package/src/programmers/helpers/UnionExplorer.ts +301 -301
  142. package/src/programmers/helpers/UnionPredicator.ts +81 -81
  143. package/src/programmers/helpers/disable_function_importer_declare.ts +26 -26
  144. package/src/programmers/internal/JSON_SCHEMA_PREFIX.ts +1 -1
  145. package/src/programmers/internal/application_alias.ts +47 -47
  146. package/src/programmers/internal/application_array.ts +30 -30
  147. package/src/programmers/internal/application_boolean.ts +15 -15
  148. package/src/programmers/internal/application_constant.ts +26 -26
  149. package/src/programmers/internal/application_default.ts +17 -17
  150. package/src/programmers/internal/application_default_string.ts +33 -33
  151. package/src/programmers/internal/application_native.ts +39 -39
  152. package/src/programmers/internal/application_number.ts +74 -74
  153. package/src/programmers/internal/application_object.ts +162 -162
  154. package/src/programmers/internal/application_resolved.ts +55 -55
  155. package/src/programmers/internal/application_schema.ts +157 -157
  156. package/src/programmers/internal/application_string.ts +44 -44
  157. package/src/programmers/internal/application_templates.ts +25 -25
  158. package/src/programmers/internal/application_tuple.ts +57 -57
  159. package/src/programmers/internal/check_array.ts +30 -30
  160. package/src/programmers/internal/check_array_length.ts +35 -35
  161. package/src/programmers/internal/check_bigint.ts +82 -82
  162. package/src/programmers/internal/check_custom.ts +31 -31
  163. package/src/programmers/internal/check_dynamic_properties.ts +194 -194
  164. package/src/programmers/internal/check_everything.ts +28 -28
  165. package/src/programmers/internal/check_native.ts +21 -21
  166. package/src/programmers/internal/check_number.ts +177 -177
  167. package/src/programmers/internal/check_object.ts +55 -55
  168. package/src/programmers/internal/check_string.ts +25 -25
  169. package/src/programmers/internal/check_string_tags.ts +67 -67
  170. package/src/programmers/internal/check_template.ts +56 -56
  171. package/src/programmers/internal/check_union_array_like.ts +329 -329
  172. package/src/programmers/internal/decode_union_object.ts +73 -73
  173. package/src/programmers/internal/feature_object_entries.ts +63 -63
  174. package/src/programmers/internal/get_comment_tags.ts +23 -23
  175. package/src/programmers/internal/metadata_to_pattern.ts +34 -34
  176. package/src/programmers/internal/prune_object_properties.ts +60 -60
  177. package/src/programmers/internal/random_custom.ts +29 -29
  178. package/src/programmers/internal/stringify_dynamic_properties.ts +167 -167
  179. package/src/programmers/internal/stringify_native.ts +7 -7
  180. package/src/programmers/internal/stringify_regular_properties.ts +83 -83
  181. package/src/programmers/internal/template_to_pattern.ts +15 -15
  182. package/src/programmers/internal/wrap_metadata_rest_tuple.ts +16 -16
  183. package/src/schemas/IJsonApplication.ts +8 -8
  184. package/src/schemas/IJsonComponents.ts +33 -33
  185. package/src/schemas/IJsonSchema.ts +133 -133
  186. package/src/transform.ts +27 -27
  187. package/src/transformers/CallExpressionTransformer.ts +179 -179
  188. package/src/transformers/FileTransformer.ts +47 -47
  189. package/src/transformers/IProject.ts +11 -11
  190. package/src/transformers/ITransformOptions.ts +62 -62
  191. package/src/transformers/ImportTransformer.ts +66 -66
  192. package/src/transformers/NodeTransformer.ts +13 -13
  193. package/src/transformers/features/miscellaneous/ApplicationTransformer.ts +104 -104
  194. package/src/transformers/features/miscellaneous/AssertCloneTransformer.ts +9 -9
  195. package/src/transformers/features/miscellaneous/AssertPruneTransformer.ts +9 -9
  196. package/src/transformers/features/miscellaneous/CloneTransformer.ts +9 -9
  197. package/src/transformers/features/miscellaneous/CreateAssertCloneTransformer.ts +9 -9
  198. package/src/transformers/features/miscellaneous/CreateAssertPruneTransformer.ts +9 -9
  199. package/src/transformers/features/miscellaneous/CreateCloneTransformer.ts +9 -9
  200. package/src/transformers/features/miscellaneous/CreateIsCloneTransformer.ts +9 -9
  201. package/src/transformers/features/miscellaneous/CreateIsPruneTransformer.ts +9 -9
  202. package/src/transformers/features/miscellaneous/CreatePruneTransformer.ts +9 -9
  203. package/src/transformers/features/miscellaneous/CreateRandomTransformer.ts +39 -39
  204. package/src/transformers/features/miscellaneous/CreateValidateCloneTransformer.ts +9 -9
  205. package/src/transformers/features/miscellaneous/CreateValidatePruneTransformer.ts +9 -9
  206. package/src/transformers/features/miscellaneous/IsCloneTransformer.ts +9 -9
  207. package/src/transformers/features/miscellaneous/IsPruneTransformer.ts +9 -9
  208. package/src/transformers/features/miscellaneous/LiteralsTransformer.ts +28 -28
  209. package/src/transformers/features/miscellaneous/MetadataTransformer.ts +53 -53
  210. package/src/transformers/features/miscellaneous/PruneTransformer.ts +9 -9
  211. package/src/transformers/features/miscellaneous/RandomTransformer.ts +42 -42
  212. package/src/transformers/features/miscellaneous/ValidateCloneTransformer.ts +9 -9
  213. package/src/transformers/features/miscellaneous/ValidatePruneTransformer.ts +9 -9
  214. package/src/transformers/features/parsers/AssertParseTransformer.ts +9 -9
  215. package/src/transformers/features/parsers/CreateAssertParseTransformer.ts +9 -9
  216. package/src/transformers/features/parsers/CreateIsParseTransformer.ts +9 -9
  217. package/src/transformers/features/parsers/CreateValidateParseTransformer.ts +9 -9
  218. package/src/transformers/features/parsers/IsParseTransformer.ts +9 -9
  219. package/src/transformers/features/parsers/ValidateParseTransformer.ts +9 -9
  220. package/src/transformers/features/stringifiers/AssertStringifyTransformer.ts +10 -10
  221. package/src/transformers/features/stringifiers/CreateAssertStringifyTransformer.ts +12 -12
  222. package/src/transformers/features/stringifiers/CreateIsStringifyTransformer.ts +9 -9
  223. package/src/transformers/features/stringifiers/CreateStringifyTransformer.ts +9 -9
  224. package/src/transformers/features/stringifiers/CreateValidateStringifyProgrammer.ts +12 -12
  225. package/src/transformers/features/stringifiers/IsStringifyTransformer.ts +9 -9
  226. package/src/transformers/features/stringifiers/StringifyTransformer.ts +9 -9
  227. package/src/transformers/features/stringifiers/ValidateStringifyTransformer.ts +10 -10
  228. package/src/transformers/features/validators/AssertTransformer.ts +11 -11
  229. package/src/transformers/features/validators/CreateAssertTransformer.ts +13 -13
  230. package/src/transformers/features/validators/CreateIsTransformer.ts +11 -11
  231. package/src/transformers/features/validators/CreateValidateTransformer.ts +13 -13
  232. package/src/transformers/features/validators/IsTransformer.ts +11 -11
  233. package/src/transformers/features/validators/ValidateTransformer.ts +11 -11
  234. package/src/transformers/internal/GenericTransformer.ts +97 -97
  235. package/src/typings/Atomic.ts +17 -17
  236. package/src/typings/ClassProperties.ts +5 -5
  237. package/src/typings/Customizable.ts +5 -5
  238. package/src/typings/OmitNever.ts +3 -3
  239. package/src/typings/SpecialFields.ts +3 -3
  240. package/src/typings/Writable.ts +11 -11
  241. package/src/utils/ArrayUtil.ts +45 -45
  242. package/src/utils/Escaper.ts +45 -45
  243. package/src/utils/MapUtil.ts +12 -12
  244. package/src/utils/PatternUtil.ts +30 -30
  245. package/src/utils/RandomGenerator.ts +81 -81
  246. package/src/utils/Singleton.ts +17 -17
@@ -1,74 +1,74 @@
1
- import { IJsonSchema } from "../../module";
2
- import { application_default } from "./application_default";
3
-
4
- /**
5
- * @internal
6
- */
7
- export const application_number = (
8
- attribute: IJsonSchema.IAttribute,
9
- ): IJsonSchema.INumber | IJsonSchema.IInteger => {
10
- const output: IJsonSchema.INumber | IJsonSchema.IInteger = {
11
- ...attribute,
12
- type: "number" as "number" | "integer",
13
- };
14
- for (const tag of attribute["x-typia-metaTags"] ?? []) {
15
- // CHECK TYPE
16
- if (
17
- tag.kind === "type" &&
18
- (tag.value === "int" ||
19
- tag.value === "uint" ||
20
- tag.value === "{int}" ||
21
- tag.value === "{uint}")
22
- )
23
- output.type = "integer";
24
- // RANGE TAG
25
- else if (tag.kind === "minimum") output.minimum = tag.value;
26
- else if (tag.kind === "maximum") output.maximum = tag.value;
27
- else if (tag.kind === "exclusiveMinimum") {
28
- output.minimum = tag.value;
29
- output.exclusiveMinimum = true;
30
- } else if (tag.kind === "exclusiveMaximum") {
31
- output.maximum = tag.value;
32
- output.exclusiveMaximum = true;
33
- }
34
- // MULTIPLE-OF
35
- else if (tag.kind === "multipleOf") output.multipleOf = tag.value;
36
- }
37
-
38
- // WHEN UNSIGNED INT
39
- if (
40
- output.type === "integer" &&
41
- (attribute["x-typia-metaTags"] ?? []).find(
42
- (tag) => tag.kind === "type" && tag.value === "uint",
43
- )
44
- )
45
- if (
46
- output.minimum === undefined ||
47
- (output.exclusiveMaximum !== true && output.minimum < 0)
48
- )
49
- output.minimum = 0;
50
- else if (output.exclusiveMinimum === true && output.minimum < -1) {
51
- output.maximum = 0;
52
- delete output.exclusiveMinimum;
53
- }
54
-
55
- // DEFAULT CONFIGURATION
56
- output.default = application_default(attribute)((str) => {
57
- const value: number = Number(str);
58
- const conditions: boolean[] = [!Number.isNaN(value)];
59
- if (output.minimum !== undefined)
60
- if (output.exclusiveMinimum === true)
61
- conditions.push(value > output.minimum);
62
- else conditions.push(value >= output.minimum);
63
- if (output.maximum !== undefined)
64
- if (output.exclusiveMaximum === true)
65
- conditions.push(value < output.maximum);
66
- else conditions.push(value <= output.maximum);
67
- if (output.multipleOf !== undefined)
68
- conditions.push(value % output.multipleOf === 0);
69
- return conditions.every((cond) => cond);
70
- })((str) => Number(str));
71
-
72
- // RETURNS
73
- return output;
74
- };
1
+ import { IJsonSchema } from "../../module";
2
+ import { application_default } from "./application_default";
3
+
4
+ /**
5
+ * @internal
6
+ */
7
+ export const application_number = (
8
+ attribute: IJsonSchema.IAttribute,
9
+ ): IJsonSchema.INumber | IJsonSchema.IInteger => {
10
+ const output: IJsonSchema.INumber | IJsonSchema.IInteger = {
11
+ ...attribute,
12
+ type: "number" as "number" | "integer",
13
+ };
14
+ for (const tag of attribute["x-typia-metaTags"] ?? []) {
15
+ // CHECK TYPE
16
+ if (
17
+ tag.kind === "type" &&
18
+ (tag.value === "int" ||
19
+ tag.value === "uint" ||
20
+ tag.value === "{int}" ||
21
+ tag.value === "{uint}")
22
+ )
23
+ output.type = "integer";
24
+ // RANGE TAG
25
+ else if (tag.kind === "minimum") output.minimum = tag.value;
26
+ else if (tag.kind === "maximum") output.maximum = tag.value;
27
+ else if (tag.kind === "exclusiveMinimum") {
28
+ output.minimum = tag.value;
29
+ output.exclusiveMinimum = true;
30
+ } else if (tag.kind === "exclusiveMaximum") {
31
+ output.maximum = tag.value;
32
+ output.exclusiveMaximum = true;
33
+ }
34
+ // MULTIPLE-OF
35
+ else if (tag.kind === "multipleOf") output.multipleOf = tag.value;
36
+ }
37
+
38
+ // WHEN UNSIGNED INT
39
+ if (
40
+ output.type === "integer" &&
41
+ (attribute["x-typia-metaTags"] ?? []).find(
42
+ (tag) => tag.kind === "type" && tag.value === "uint",
43
+ )
44
+ )
45
+ if (
46
+ output.minimum === undefined ||
47
+ (output.exclusiveMaximum !== true && output.minimum < 0)
48
+ )
49
+ output.minimum = 0;
50
+ else if (output.exclusiveMinimum === true && output.minimum < -1) {
51
+ output.maximum = 0;
52
+ delete output.exclusiveMinimum;
53
+ }
54
+
55
+ // DEFAULT CONFIGURATION
56
+ output.default = application_default(attribute)((str) => {
57
+ const value: number = Number(str);
58
+ const conditions: boolean[] = [!Number.isNaN(value)];
59
+ if (output.minimum !== undefined)
60
+ if (output.exclusiveMinimum === true)
61
+ conditions.push(value > output.minimum);
62
+ else conditions.push(value >= output.minimum);
63
+ if (output.maximum !== undefined)
64
+ if (output.exclusiveMaximum === true)
65
+ conditions.push(value < output.maximum);
66
+ else conditions.push(value <= output.maximum);
67
+ if (output.multipleOf !== undefined)
68
+ conditions.push(value % output.multipleOf === 0);
69
+ return conditions.every((cond) => cond);
70
+ })((str) => Number(str));
71
+
72
+ // RETURNS
73
+ return output;
74
+ };
@@ -1,162 +1,162 @@
1
- import { CommentFactory } from "../../factories/CommentFactory";
2
-
3
- import { IJsDocTagInfo } from "../../metadata/IJsDocTagInfo";
4
- import { Metadata } from "../../metadata/Metadata";
5
- import { MetadataObject } from "../../metadata/MetadataObject";
6
- import { IJsonComponents } from "../../schemas/IJsonComponents";
7
-
8
- import { PatternUtil } from "../../utils/PatternUtil";
9
-
10
- import { IJsonSchema } from "../../module";
11
- import { ApplicationProgrammer } from "../ApplicationProgrammer";
12
- import { JSON_COMPONENTS_PREFIX } from "./JSON_SCHEMA_PREFIX";
13
- import { application_schema } from "./application_schema";
14
- import { metadata_to_pattern } from "./metadata_to_pattern";
15
-
16
- /**
17
- * @internal
18
- */
19
- export const application_object =
20
- (options: ApplicationProgrammer.IOptions) =>
21
- (components: IJsonComponents) =>
22
- (obj: MetadataObject) =>
23
- (nullable: boolean): IJsonSchema.IReference => {
24
- const key: string =
25
- options.purpose === "ajv"
26
- ? obj.name
27
- : `${obj.name}${nullable ? ".Nullable" : ""}`;
28
- const $id: string = `${JSON_COMPONENTS_PREFIX}/schemas/${key}`;
29
- const output = { $ref: $id };
30
-
31
- // TEMPORARY ASSIGNMENT
32
- if (components.schemas?.[key] !== undefined) return output;
33
- components.schemas ??= {};
34
- components.schemas[key] = {} as any;
35
-
36
- // ITERATE PROPERTIES
37
- const properties: Record<string, any> = {};
38
- const extraMeta: ISuperfluous = {
39
- patternProperties: {},
40
- additionalProperties: undefined,
41
- };
42
- const required: string[] = [];
43
-
44
- for (const property of obj.properties) {
45
- if (
46
- property.value.functional === true &&
47
- property.value.nullable === false &&
48
- property.value.required === true &&
49
- property.value.size() === 0
50
- )
51
- continue;
52
-
53
- const key: string | null = property.key.getSoleLiteral();
54
- const schema: IJsonSchema | null = application_schema(options)(
55
- true,
56
- )(components)(property.value)({
57
- deprecated:
58
- !!property.jsDocTags.find(
59
- (tag) => tag.name === "deprecated",
60
- ) || undefined,
61
- title: (() => {
62
- const info: IJsDocTagInfo | undefined =
63
- property.jsDocTags.find((tag) => tag.name === "title");
64
- return info?.text?.length
65
- ? CommentFactory.merge(info.text)
66
- : undefined;
67
- })(),
68
- description: property.description ?? undefined,
69
- "x-typia-metaTags": property.tags.length
70
- ? property.tags
71
- : undefined,
72
- "x-typia-jsDocTags": property.jsDocTags.length
73
- ? property.jsDocTags
74
- : undefined,
75
- "x-typia-required": property.value.required,
76
- "x-typia-optional": property.value.optional,
77
- });
78
-
79
- if (schema === null) continue;
80
- else if (key !== null) {
81
- properties[key] = schema;
82
- if (property.value.required === true) required.push(key);
83
- } else {
84
- const pattern: string = metadata_to_pattern(true)(property.key);
85
- if (pattern === PatternUtil.STRING)
86
- extraMeta.additionalProperties = [property.value, schema];
87
- else
88
- extraMeta.patternProperties[pattern] = [
89
- property.value,
90
- schema,
91
- ];
92
- }
93
- }
94
-
95
- const extraProps = {
96
- additionalProperties: extraMeta.additionalProperties?.[1],
97
- patternProperties: (() => {
98
- if (Object.keys(extraMeta.patternProperties).length === 0)
99
- return undefined;
100
- const output: Record<string, IJsonSchema> = {};
101
- for (const [key, value] of Object.entries(
102
- extraMeta.patternProperties,
103
- ))
104
- output[key] = value[1];
105
- return output;
106
- })(),
107
- };
108
- const schema: IJsonComponents.IObject = {
109
- $id: options.purpose === "ajv" ? $id : undefined,
110
- // $recursiveAnchor:
111
- // (options.purpose === "ajv" && obj.recursive) || undefined,
112
- type: "object",
113
- properties,
114
- nullable: options.purpose === "swagger" ? nullable : undefined,
115
- required: required.length ? required : undefined,
116
- description: obj.description,
117
- "x-typia-jsDocTags": obj.jsDocTags,
118
- ...(options.purpose === "ajv"
119
- ? extraProps
120
- : {
121
- // swagger can't express patternProperties
122
- "x-typia-additionalProperties":
123
- extraProps.additionalProperties,
124
- "x-typia-patternProperties": extraProps.patternProperties,
125
- additionalProperties:
126
- join(options)(components)(extraMeta),
127
- }),
128
- };
129
- components.schemas[key] = schema;
130
- return output;
131
- };
132
-
133
- const join =
134
- (options: ApplicationProgrammer.IOptions) =>
135
- (components: IJsonComponents) =>
136
- (extra: ISuperfluous): IJsonSchema | undefined => {
137
- // LIST UP METADATA
138
- const elements: [Metadata, IJsonSchema][] = Object.values(
139
- extra.patternProperties || {},
140
- );
141
- if (extra.additionalProperties)
142
- elements.push(extra.additionalProperties);
143
-
144
- // SHORT RETURN
145
- if (elements.length === 0) return undefined;
146
- else if (elements.length === 1) return elements[0]![1]!;
147
-
148
- // MERGE METADATA AND GENERATE VULNERABLE SCHEMA
149
- const meta: Metadata = elements
150
- .map((tuple) => tuple[0])
151
- .reduce((x, y) => Metadata.merge(x, y));
152
- return (
153
- application_schema(options)(true)(components)(meta)({
154
- "x-typia-required": false,
155
- }) ?? undefined
156
- );
157
- };
158
-
159
- interface ISuperfluous {
160
- additionalProperties?: [Metadata, IJsonSchema];
161
- patternProperties: Record<string, [Metadata, IJsonSchema]>;
162
- }
1
+ import { CommentFactory } from "../../factories/CommentFactory";
2
+
3
+ import { IJsDocTagInfo } from "../../metadata/IJsDocTagInfo";
4
+ import { Metadata } from "../../metadata/Metadata";
5
+ import { MetadataObject } from "../../metadata/MetadataObject";
6
+ import { IJsonComponents } from "../../schemas/IJsonComponents";
7
+
8
+ import { PatternUtil } from "../../utils/PatternUtil";
9
+
10
+ import { IJsonSchema } from "../../module";
11
+ import { ApplicationProgrammer } from "../ApplicationProgrammer";
12
+ import { JSON_COMPONENTS_PREFIX } from "./JSON_SCHEMA_PREFIX";
13
+ import { application_schema } from "./application_schema";
14
+ import { metadata_to_pattern } from "./metadata_to_pattern";
15
+
16
+ /**
17
+ * @internal
18
+ */
19
+ export const application_object =
20
+ (options: ApplicationProgrammer.IOptions) =>
21
+ (components: IJsonComponents) =>
22
+ (obj: MetadataObject) =>
23
+ (nullable: boolean): IJsonSchema.IReference => {
24
+ const key: string =
25
+ options.purpose === "ajv"
26
+ ? obj.name
27
+ : `${obj.name}${nullable ? ".Nullable" : ""}`;
28
+ const $id: string = `${JSON_COMPONENTS_PREFIX}/schemas/${key}`;
29
+ const output = { $ref: $id };
30
+
31
+ // TEMPORARY ASSIGNMENT
32
+ if (components.schemas?.[key] !== undefined) return output;
33
+ components.schemas ??= {};
34
+ components.schemas[key] = {} as any;
35
+
36
+ // ITERATE PROPERTIES
37
+ const properties: Record<string, any> = {};
38
+ const extraMeta: ISuperfluous = {
39
+ patternProperties: {},
40
+ additionalProperties: undefined,
41
+ };
42
+ const required: string[] = [];
43
+
44
+ for (const property of obj.properties) {
45
+ if (
46
+ property.value.functional === true &&
47
+ property.value.nullable === false &&
48
+ property.value.required === true &&
49
+ property.value.size() === 0
50
+ )
51
+ continue;
52
+
53
+ const key: string | null = property.key.getSoleLiteral();
54
+ const schema: IJsonSchema | null = application_schema(options)(
55
+ true,
56
+ )(components)(property.value)({
57
+ deprecated:
58
+ !!property.jsDocTags.find(
59
+ (tag) => tag.name === "deprecated",
60
+ ) || undefined,
61
+ title: (() => {
62
+ const info: IJsDocTagInfo | undefined =
63
+ property.jsDocTags.find((tag) => tag.name === "title");
64
+ return info?.text?.length
65
+ ? CommentFactory.merge(info.text)
66
+ : undefined;
67
+ })(),
68
+ description: property.description ?? undefined,
69
+ "x-typia-metaTags": property.tags.length
70
+ ? property.tags
71
+ : undefined,
72
+ "x-typia-jsDocTags": property.jsDocTags.length
73
+ ? property.jsDocTags
74
+ : undefined,
75
+ "x-typia-required": property.value.required,
76
+ "x-typia-optional": property.value.optional,
77
+ });
78
+
79
+ if (schema === null) continue;
80
+ else if (key !== null) {
81
+ properties[key] = schema;
82
+ if (property.value.required === true) required.push(key);
83
+ } else {
84
+ const pattern: string = metadata_to_pattern(true)(property.key);
85
+ if (pattern === PatternUtil.STRING)
86
+ extraMeta.additionalProperties = [property.value, schema];
87
+ else
88
+ extraMeta.patternProperties[pattern] = [
89
+ property.value,
90
+ schema,
91
+ ];
92
+ }
93
+ }
94
+
95
+ const extraProps = {
96
+ additionalProperties: extraMeta.additionalProperties?.[1],
97
+ patternProperties: (() => {
98
+ if (Object.keys(extraMeta.patternProperties).length === 0)
99
+ return undefined;
100
+ const output: Record<string, IJsonSchema> = {};
101
+ for (const [key, value] of Object.entries(
102
+ extraMeta.patternProperties,
103
+ ))
104
+ output[key] = value[1];
105
+ return output;
106
+ })(),
107
+ };
108
+ const schema: IJsonComponents.IObject = {
109
+ $id: options.purpose === "ajv" ? $id : undefined,
110
+ // $recursiveAnchor:
111
+ // (options.purpose === "ajv" && obj.recursive) || undefined,
112
+ type: "object",
113
+ properties,
114
+ nullable: options.purpose === "swagger" ? nullable : undefined,
115
+ required: required.length ? required : undefined,
116
+ description: obj.description,
117
+ "x-typia-jsDocTags": obj.jsDocTags,
118
+ ...(options.purpose === "ajv"
119
+ ? extraProps
120
+ : {
121
+ // swagger can't express patternProperties
122
+ "x-typia-additionalProperties":
123
+ extraProps.additionalProperties,
124
+ "x-typia-patternProperties": extraProps.patternProperties,
125
+ additionalProperties:
126
+ join(options)(components)(extraMeta),
127
+ }),
128
+ };
129
+ components.schemas[key] = schema;
130
+ return output;
131
+ };
132
+
133
+ const join =
134
+ (options: ApplicationProgrammer.IOptions) =>
135
+ (components: IJsonComponents) =>
136
+ (extra: ISuperfluous): IJsonSchema | undefined => {
137
+ // LIST UP METADATA
138
+ const elements: [Metadata, IJsonSchema][] = Object.values(
139
+ extra.patternProperties || {},
140
+ );
141
+ if (extra.additionalProperties)
142
+ elements.push(extra.additionalProperties);
143
+
144
+ // SHORT RETURN
145
+ if (elements.length === 0) return undefined;
146
+ else if (elements.length === 1) return elements[0]![1]!;
147
+
148
+ // MERGE METADATA AND GENERATE VULNERABLE SCHEMA
149
+ const meta: Metadata = elements
150
+ .map((tuple) => tuple[0])
151
+ .reduce((x, y) => Metadata.merge(x, y));
152
+ return (
153
+ application_schema(options)(true)(components)(meta)({
154
+ "x-typia-required": false,
155
+ }) ?? undefined
156
+ );
157
+ };
158
+
159
+ interface ISuperfluous {
160
+ additionalProperties?: [Metadata, IJsonSchema];
161
+ patternProperties: Record<string, [Metadata, IJsonSchema]>;
162
+ }
@@ -1,55 +1,55 @@
1
- import { Metadata } from "../../metadata/Metadata";
2
- import { MetadataResolved } from "../../metadata/MetadataResolved";
3
-
4
- import { IJsonComponents, IJsonSchema } from "../../module";
5
- import { ApplicationProgrammer } from "../ApplicationProgrammer";
6
- import { application_schema } from "./application_schema";
7
-
8
- export const application_resolved =
9
- (options: ApplicationProgrammer.IOptions) =>
10
- <BlockNever extends boolean>(blockNever: BlockNever) =>
11
- (components: IJsonComponents) =>
12
- (resolved: MetadataResolved) =>
13
- (attribute: IJsonSchema.IAttribute): IJsonSchema[] => {
14
- const output = application_schema(options)(blockNever)(components)(
15
- resolved.returns,
16
- )(attribute);
17
- if (output === null) return [];
18
-
19
- if (is_date(new Set())(resolved.original)) {
20
- const string: IJsonSchema.IString | undefined = is_string(output)
21
- ? output
22
- : is_one_of(output)
23
- ? output.oneOf.find(is_string)
24
- : undefined;
25
- if (
26
- string !== undefined &&
27
- string.format !== "date" &&
28
- string.format !== "date-time"
29
- )
30
- string.format = "date-time";
31
- }
32
- return is_one_of(output) ? output.oneOf : [output];
33
- };
34
-
35
- const is_string = (elem: IJsonSchema): elem is IJsonSchema.IString =>
36
- (elem as IJsonSchema.IString).type === "string";
37
-
38
- const is_one_of = (elem: IJsonSchema): elem is IJsonSchema.IOneOf =>
39
- Array.isArray((elem as IJsonSchema.IOneOf).oneOf);
40
-
41
- const is_date =
42
- (visited: Set<Metadata>) =>
43
- (meta: Metadata): boolean => {
44
- if (visited.has(meta)) return false;
45
- visited.add(meta);
46
-
47
- return (
48
- meta.natives.some((name) => name === "Date") ||
49
- meta.arrays.some((array) => is_date(visited)(array.value)) ||
50
- meta.tuples.some((tuple) =>
51
- tuple.elements.some(is_date(visited)),
52
- ) ||
53
- meta.aliases.some((alias) => is_date(visited)(alias.value))
54
- );
55
- };
1
+ import { Metadata } from "../../metadata/Metadata";
2
+ import { MetadataResolved } from "../../metadata/MetadataResolved";
3
+
4
+ import { IJsonComponents, IJsonSchema } from "../../module";
5
+ import { ApplicationProgrammer } from "../ApplicationProgrammer";
6
+ import { application_schema } from "./application_schema";
7
+
8
+ export const application_resolved =
9
+ (options: ApplicationProgrammer.IOptions) =>
10
+ <BlockNever extends boolean>(blockNever: BlockNever) =>
11
+ (components: IJsonComponents) =>
12
+ (resolved: MetadataResolved) =>
13
+ (attribute: IJsonSchema.IAttribute): IJsonSchema[] => {
14
+ const output = application_schema(options)(blockNever)(components)(
15
+ resolved.returns,
16
+ )(attribute);
17
+ if (output === null) return [];
18
+
19
+ if (is_date(new Set())(resolved.original)) {
20
+ const string: IJsonSchema.IString | undefined = is_string(output)
21
+ ? output
22
+ : is_one_of(output)
23
+ ? output.oneOf.find(is_string)
24
+ : undefined;
25
+ if (
26
+ string !== undefined &&
27
+ string.format !== "date" &&
28
+ string.format !== "date-time"
29
+ )
30
+ string.format = "date-time";
31
+ }
32
+ return is_one_of(output) ? output.oneOf : [output];
33
+ };
34
+
35
+ const is_string = (elem: IJsonSchema): elem is IJsonSchema.IString =>
36
+ (elem as IJsonSchema.IString).type === "string";
37
+
38
+ const is_one_of = (elem: IJsonSchema): elem is IJsonSchema.IOneOf =>
39
+ Array.isArray((elem as IJsonSchema.IOneOf).oneOf);
40
+
41
+ const is_date =
42
+ (visited: Set<Metadata>) =>
43
+ (meta: Metadata): boolean => {
44
+ if (visited.has(meta)) return false;
45
+ visited.add(meta);
46
+
47
+ return (
48
+ meta.natives.some((name) => name === "Date") ||
49
+ meta.arrays.some((array) => is_date(visited)(array.value)) ||
50
+ meta.tuples.some((tuple) =>
51
+ tuple.elements.some(is_date(visited)),
52
+ ) ||
53
+ meta.aliases.some((alias) => is_date(visited)(alias.value))
54
+ );
55
+ };