typia 3.4.22 → 3.4.23

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 (124) hide show
  1. package/README.md +57 -23
  2. package/lib/programmers/AssertProgrammer.js +79 -70
  3. package/lib/programmers/AssertProgrammer.js.map +1 -1
  4. package/lib/programmers/IsProgrammer.d.ts +1 -0
  5. package/lib/programmers/IsProgrammer.js +4 -0
  6. package/lib/programmers/IsProgrammer.js.map +1 -1
  7. package/lib/programmers/ValidateProgrammer.js +68 -59
  8. package/lib/programmers/ValidateProgrammer.js.map +1 -1
  9. package/lib/programmers/helpers/OptionPredicator.d.ts +1 -0
  10. package/lib/programmers/helpers/OptionPredicator.js +4 -0
  11. package/lib/programmers/helpers/OptionPredicator.js.map +1 -1
  12. package/lib/programmers/internal/check_dynamic_properties.js +5 -0
  13. package/lib/programmers/internal/check_dynamic_properties.js.map +1 -1
  14. package/lib/programmers/internal/check_object.d.ts +1 -0
  15. package/lib/programmers/internal/check_object.js.map +1 -1
  16. package/lib/transformers/ITransformOptions.d.ts +10 -0
  17. package/package.json +2 -2
  18. package/src/IValidation.ts +21 -21
  19. package/src/Primitive.ts +82 -82
  20. package/src/TypeGuardError.ts +36 -36
  21. package/src/executable/internal/CommandParser.ts +15 -15
  22. package/src/factories/CommentFactory.ts +10 -10
  23. package/src/factories/ExpressionFactory.ts +66 -66
  24. package/src/factories/IdentifierFactory.ts +72 -72
  25. package/src/factories/LiteralFactory.ts +44 -44
  26. package/src/factories/StatementFactory.ts +60 -60
  27. package/src/factories/TemplateFactory.ts +56 -56
  28. package/src/factories/TypeFactory.ts +101 -101
  29. package/src/factories/ValueFactory.ts +12 -12
  30. package/src/functional/$every.ts +11 -11
  31. package/src/functional/$is_email.ts +5 -5
  32. package/src/functional/$is_ipv4.ts +5 -5
  33. package/src/functional/$is_ipv6.ts +5 -5
  34. package/src/functional/$is_url.ts +5 -5
  35. package/src/functional/$is_uuid.ts +5 -5
  36. package/src/functional/$join.ts +50 -50
  37. package/src/functional/$report.ts +15 -15
  38. package/src/functional/$rest.ts +3 -3
  39. package/src/functional/$string.ts +37 -37
  40. package/src/functional/$tail.ts +6 -6
  41. package/src/index.ts +4 -4
  42. package/src/metadata/IJsDocTagInfo.ts +10 -10
  43. package/src/metadata/IMetadata.ts +25 -25
  44. package/src/metadata/IMetadataApplication.ts +7 -7
  45. package/src/metadata/IMetadataConstant.ts +16 -16
  46. package/src/metadata/IMetadataEntry.ts +6 -6
  47. package/src/metadata/IMetadataObject.ts +29 -29
  48. package/src/metadata/IMetadataProperty.ts +11 -11
  49. package/src/metadata/MetadataConstant.ts +3 -3
  50. package/src/metadata/MetadataObject.ts +131 -131
  51. package/src/metadata/MetadataProperty.ts +64 -64
  52. package/src/programmers/ApplicationProgrammer.ts +55 -55
  53. package/src/programmers/AssertProgrammer.ts +36 -29
  54. package/src/programmers/IsProgrammer.ts +5 -0
  55. package/src/programmers/ValidateProgrammer.ts +36 -29
  56. package/src/programmers/helpers/AtomicPredicator.ts +15 -15
  57. package/src/programmers/helpers/FunctionImporeter.ts +31 -31
  58. package/src/programmers/helpers/IExpressionEntry.ts +10 -10
  59. package/src/programmers/helpers/OptionPredicator.ts +4 -0
  60. package/src/programmers/helpers/StringifyJoinder.ts +111 -111
  61. package/src/programmers/helpers/StringifyPredicator.ts +18 -18
  62. package/src/programmers/helpers/UnionPredicator.ts +81 -81
  63. package/src/programmers/internal/application_array.ts +47 -47
  64. package/src/programmers/internal/application_boolean.ts +17 -17
  65. package/src/programmers/internal/application_constant.ts +29 -29
  66. package/src/programmers/internal/application_default_string.ts +32 -32
  67. package/src/programmers/internal/application_native.ts +29 -29
  68. package/src/programmers/internal/application_number.ts +76 -76
  69. package/src/programmers/internal/application_string.ts +49 -49
  70. package/src/programmers/internal/application_templates.ts +27 -27
  71. package/src/programmers/internal/application_tuple.ts +29 -29
  72. package/src/programmers/internal/check_dynamic_properties.ts +164 -146
  73. package/src/programmers/internal/check_everything.ts +25 -25
  74. package/src/programmers/internal/check_length.ts +46 -46
  75. package/src/programmers/internal/check_native.ts +9 -9
  76. package/src/programmers/internal/check_object.ts +43 -42
  77. package/src/programmers/internal/check_string.ts +24 -24
  78. package/src/programmers/internal/check_string_tags.ts +63 -63
  79. package/src/programmers/internal/check_template.ts +50 -50
  80. package/src/programmers/internal/decode_union_object.ts +73 -73
  81. package/src/programmers/internal/feature_object_entries.ts +49 -49
  82. package/src/programmers/internal/metadata_to_pattern.ts +31 -31
  83. package/src/programmers/internal/stringify_dynamic_properties.ts +164 -164
  84. package/src/programmers/internal/stringify_native.ts +8 -8
  85. package/src/programmers/internal/stringify_regular_properties.ts +81 -81
  86. package/src/programmers/internal/template_to_pattern.ts +15 -15
  87. package/src/schemas/IJsonApplication.ts +9 -9
  88. package/src/schemas/IJsonComponents.ts +26 -26
  89. package/src/transform.ts +20 -20
  90. package/src/transformers/ExpressionWithArgumentTransformer.ts +66 -66
  91. package/src/transformers/FileTransformer.ts +49 -49
  92. package/src/transformers/IProject.ts +11 -11
  93. package/src/transformers/ITransformOptions.ts +11 -0
  94. package/src/transformers/NodeTransformer.ts +19 -19
  95. package/src/transformers/features/miscellaneous/MetadataTransformer.ts +55 -55
  96. package/src/transformers/features/parsers/AssertParseTransformer.ts +36 -36
  97. package/src/transformers/features/parsers/CreateAssertParseTransformer.ts +32 -32
  98. package/src/transformers/features/parsers/CreateIsParseTransformer.ts +32 -32
  99. package/src/transformers/features/parsers/CreateValidateParseTransformer.ts +32 -32
  100. package/src/transformers/features/parsers/IsParseTransformer.ts +36 -36
  101. package/src/transformers/features/parsers/ValidateParseTransformer.ts +36 -36
  102. package/src/transformers/features/stringifiers/AssertStringifyTransformer.ts +38 -38
  103. package/src/transformers/features/stringifiers/CreateAssertStringifyTransformer.ts +32 -32
  104. package/src/transformers/features/stringifiers/CreateIsStringifyTransformer.ts +32 -32
  105. package/src/transformers/features/stringifiers/CreateStringifyTransformer.ts +31 -31
  106. package/src/transformers/features/stringifiers/CreateValidateStringifyProgrammer.ts +32 -32
  107. package/src/transformers/features/stringifiers/IsStringifyTransformer.ts +38 -38
  108. package/src/transformers/features/stringifiers/ValidateStringifyTransformer.ts +38 -38
  109. package/src/transformers/features/validators/AssertTransformer.ts +43 -43
  110. package/src/transformers/features/validators/CreateAssertTransformer.ts +35 -35
  111. package/src/transformers/features/validators/CreateIsTransformer.ts +35 -35
  112. package/src/transformers/features/validators/CreateValidateTransformer.ts +35 -35
  113. package/src/transformers/features/validators/IsTransformer.ts +43 -43
  114. package/src/transformers/features/validators/ValidateTransformer.ts +43 -43
  115. package/src/typings/Atomic.ts +17 -17
  116. package/src/typings/ClassProperties.ts +5 -5
  117. package/src/typings/OmitNever.ts +3 -3
  118. package/src/typings/SpecialFields.ts +3 -3
  119. package/src/typings/Writable.ts +11 -11
  120. package/src/utils/ArrayUtil.ts +49 -49
  121. package/src/utils/Escaper.ts +50 -50
  122. package/src/utils/MapUtil.ts +14 -14
  123. package/src/utils/PatternUtil.ts +30 -30
  124. package/src/utils/Singleton.ts +17 -17
@@ -1,47 +1,47 @@
1
- import { Metadata } from "../../metadata/Metadata";
2
- import { IJsonComponents } from "../../schemas/IJsonComponents";
3
- import { IJsonSchema } from "../../schemas/IJsonSchema";
4
-
5
- import { ApplicationProgrammer } from "../ApplicationProgrammer";
6
- import { application_schema } from "./application_schema";
7
-
8
- /**
9
- * @internal
10
- */
11
- export const application_array =
12
- (options: ApplicationProgrammer.IOptions) =>
13
- (components: IJsonComponents) =>
14
- (tuple?: IJsonSchema.ITuple) =>
15
- (
16
- metadata: Metadata,
17
- nullable: boolean,
18
- attribute: IJsonSchema.IAttribute,
19
- ): IJsonSchema.IArray => {
20
- // SCHEMA
21
- const output: IJsonSchema.IArray = {
22
- type: "array",
23
- items: application_schema(options)(components)(false)(
24
- metadata,
25
- attribute,
26
- ),
27
- nullable,
28
- "x-typia-tuple": tuple,
29
- ...attribute,
30
- };
31
-
32
- // RANGE
33
- for (const tag of attribute["x-typia-metaTags"] || [])
34
- if (tag.kind === "minItems") output.minItems = tag.value;
35
- else if (tag.kind === "maxItems") output.maxItems = tag.value;
36
- else if (tag.kind === "items") {
37
- if (tag.minimum !== undefined)
38
- output.minItems =
39
- tag.minimum.value +
40
- (tag.minimum.include === true ? 0 : 1);
41
- if (tag.maximum !== undefined)
42
- output.maxItems =
43
- tag.maximum.value -
44
- (tag.maximum.include === true ? 0 : 1);
45
- }
46
- return output;
47
- };
1
+ import { Metadata } from "../../metadata/Metadata";
2
+ import { IJsonComponents } from "../../schemas/IJsonComponents";
3
+ import { IJsonSchema } from "../../schemas/IJsonSchema";
4
+
5
+ import { ApplicationProgrammer } from "../ApplicationProgrammer";
6
+ import { application_schema } from "./application_schema";
7
+
8
+ /**
9
+ * @internal
10
+ */
11
+ export const application_array =
12
+ (options: ApplicationProgrammer.IOptions) =>
13
+ (components: IJsonComponents) =>
14
+ (tuple?: IJsonSchema.ITuple) =>
15
+ (
16
+ metadata: Metadata,
17
+ nullable: boolean,
18
+ attribute: IJsonSchema.IAttribute,
19
+ ): IJsonSchema.IArray => {
20
+ // SCHEMA
21
+ const output: IJsonSchema.IArray = {
22
+ type: "array",
23
+ items: application_schema(options)(components)(false)(
24
+ metadata,
25
+ attribute,
26
+ ),
27
+ nullable,
28
+ "x-typia-tuple": tuple,
29
+ ...attribute,
30
+ };
31
+
32
+ // RANGE
33
+ for (const tag of attribute["x-typia-metaTags"] || [])
34
+ if (tag.kind === "minItems") output.minItems = tag.value;
35
+ else if (tag.kind === "maxItems") output.maxItems = tag.value;
36
+ else if (tag.kind === "items") {
37
+ if (tag.minimum !== undefined)
38
+ output.minItems =
39
+ tag.minimum.value +
40
+ (tag.minimum.include === true ? 0 : 1);
41
+ if (tag.maximum !== undefined)
42
+ output.maxItems =
43
+ tag.maximum.value -
44
+ (tag.maximum.include === true ? 0 : 1);
45
+ }
46
+ return output;
47
+ };
@@ -1,17 +1,17 @@
1
- import { IJsonSchema } from "../../module";
2
- import { application_default } from "./application_default";
3
-
4
- /**
5
- * @internal
6
- */
7
- export const application_boolean = (
8
- nullable: boolean,
9
- attribute: IJsonSchema.IAttribute,
10
- ): IJsonSchema.IBoolean => ({
11
- type: "boolean",
12
- nullable,
13
- ...attribute,
14
- default: application_default(attribute)(
15
- (def) => def === "true" || def === "false",
16
- )((str) => Boolean(str)),
17
- });
1
+ import { IJsonSchema } from "../../module";
2
+ import { application_default } from "./application_default";
3
+
4
+ /**
5
+ * @internal
6
+ */
7
+ export const application_boolean = (
8
+ nullable: boolean,
9
+ attribute: IJsonSchema.IAttribute,
10
+ ): IJsonSchema.IBoolean => ({
11
+ type: "boolean",
12
+ nullable,
13
+ ...attribute,
14
+ default: application_default(attribute)(
15
+ (def) => def === "true" || def === "false",
16
+ )((str) => Boolean(str)),
17
+ });
@@ -1,29 +1,29 @@
1
- import { MetadataConstant } from "../../metadata/MetadataConstant";
2
- import { IJsonSchema } from "../../schemas/IJsonSchema";
3
-
4
- import { application_default } from "./application_default";
5
-
6
- /**
7
- * @internal
8
- */
9
- export const application_constant = (
10
- constant: MetadataConstant,
11
- nullable: boolean,
12
- attribute: IJsonSchema.IAttribute,
13
- ): IJsonSchema.IEnumeration<any> => ({
14
- type: constant.type,
15
- enum: constant.values as any,
16
- nullable,
17
- ...attribute,
18
- default: application_default(attribute)((def) =>
19
- constant.values.some((v) => v.toString() === def),
20
- )(
21
- constant.type === "string"
22
- ? (str) => str
23
- : constant.type === "number"
24
- ? (str) => Number(str)
25
- : constant.type === "boolean"
26
- ? (str) => Boolean(str)
27
- : (str) => BigInt(str) as any,
28
- ),
29
- });
1
+ import { MetadataConstant } from "../../metadata/MetadataConstant";
2
+ import { IJsonSchema } from "../../schemas/IJsonSchema";
3
+
4
+ import { application_default } from "./application_default";
5
+
6
+ /**
7
+ * @internal
8
+ */
9
+ export const application_constant = (
10
+ constant: MetadataConstant,
11
+ nullable: boolean,
12
+ attribute: IJsonSchema.IAttribute,
13
+ ): IJsonSchema.IEnumeration<any> => ({
14
+ type: constant.type,
15
+ enum: constant.values as any,
16
+ nullable,
17
+ ...attribute,
18
+ default: application_default(attribute)((def) =>
19
+ constant.values.some((v) => v.toString() === def),
20
+ )(
21
+ constant.type === "string"
22
+ ? (str) => str
23
+ : constant.type === "number"
24
+ ? (str) => Number(str)
25
+ : constant.type === "boolean"
26
+ ? (str) => Boolean(str)
27
+ : (str) => BigInt(str) as any,
28
+ ),
29
+ });
@@ -1,32 +1,32 @@
1
- import { Metadata } from "../../metadata/Metadata";
2
-
3
- import { IJsonSchema } from "../../module";
4
- import { application_default } from "./application_default";
5
-
6
- /**
7
- * @internal
8
- */
9
- export const application_default_string =
10
- (meta: Metadata, attribute: IJsonSchema.IAttribute) =>
11
- (schema: IJsonSchema.IString) =>
12
- application_default(attribute)((str) => {
13
- const conditions: boolean[] = [];
14
-
15
- // OTHER ATOMIC TYPES
16
- if (meta.atomics.find((t) => t === "number" || t === "bigint"))
17
- conditions.push(Number.isNaN(Number(str)));
18
- if (meta.atomics.find((t) => t === "boolean"))
19
- conditions.push(str !== "true" && str !== "false");
20
- for (const constant of meta.constants)
21
- for (const value of constant.values)
22
- conditions.push(str !== value.toString());
23
-
24
- // CONSIDER TAGS
25
- if (schema.minLength !== undefined)
26
- conditions.push(str.length >= schema.minLength);
27
- if (schema.maxLength !== undefined)
28
- conditions.push(str.length <= schema.maxLength);
29
- if (schema.pattern !== undefined)
30
- conditions.push(new RegExp(schema.pattern).test(str));
31
- return conditions.every((c) => c);
32
- })((str) => str);
1
+ import { Metadata } from "../../metadata/Metadata";
2
+
3
+ import { IJsonSchema } from "../../module";
4
+ import { application_default } from "./application_default";
5
+
6
+ /**
7
+ * @internal
8
+ */
9
+ export const application_default_string =
10
+ (meta: Metadata, attribute: IJsonSchema.IAttribute) =>
11
+ (schema: IJsonSchema.IString) =>
12
+ application_default(attribute)((str) => {
13
+ const conditions: boolean[] = [];
14
+
15
+ // OTHER ATOMIC TYPES
16
+ if (meta.atomics.find((t) => t === "number" || t === "bigint"))
17
+ conditions.push(Number.isNaN(Number(str)));
18
+ if (meta.atomics.find((t) => t === "boolean"))
19
+ conditions.push(str !== "true" && str !== "false");
20
+ for (const constant of meta.constants)
21
+ for (const value of constant.values)
22
+ conditions.push(str !== value.toString());
23
+
24
+ // CONSIDER TAGS
25
+ if (schema.minLength !== undefined)
26
+ conditions.push(str.length >= schema.minLength);
27
+ if (schema.maxLength !== undefined)
28
+ conditions.push(str.length <= schema.maxLength);
29
+ if (schema.pattern !== undefined)
30
+ conditions.push(new RegExp(schema.pattern).test(str));
31
+ return conditions.every((c) => c);
32
+ })((str) => str);
@@ -1,29 +1,29 @@
1
- import { IJsonComponents } from "../../schemas/IJsonComponents";
2
-
3
- import { IJsonSchema } from "../../module";
4
- import { ApplicationProgrammer } from "../ApplicationProgrammer";
5
-
6
- export const application_native =
7
- (options: ApplicationProgrammer.IOptions) =>
8
- (components: IJsonComponents) =>
9
- (name: string) =>
10
- (
11
- nullable: boolean,
12
- attribute: IJsonSchema.IAttribute,
13
- ): IJsonSchema.IReference => {
14
- const key: string = name + (nullable ? ".Nullable" : "");
15
- if (components.schemas[key] === undefined)
16
- components.schemas[key] = {
17
- type: "object",
18
- $id:
19
- options.purpose === "ajv"
20
- ? options.prefix + "/" + key
21
- : undefined,
22
- properties: {},
23
- nullable,
24
- };
25
- return {
26
- $ref: `#/components/schemas/${name}`,
27
- ...attribute,
28
- };
29
- };
1
+ import { IJsonComponents } from "../../schemas/IJsonComponents";
2
+
3
+ import { IJsonSchema } from "../../module";
4
+ import { ApplicationProgrammer } from "../ApplicationProgrammer";
5
+
6
+ export const application_native =
7
+ (options: ApplicationProgrammer.IOptions) =>
8
+ (components: IJsonComponents) =>
9
+ (name: string) =>
10
+ (
11
+ nullable: boolean,
12
+ attribute: IJsonSchema.IAttribute,
13
+ ): IJsonSchema.IReference => {
14
+ const key: string = name + (nullable ? ".Nullable" : "");
15
+ if (components.schemas[key] === undefined)
16
+ components.schemas[key] = {
17
+ type: "object",
18
+ $id:
19
+ options.purpose === "ajv"
20
+ ? options.prefix + "/" + key
21
+ : undefined,
22
+ properties: {},
23
+ nullable,
24
+ };
25
+ return {
26
+ $ref: `#/components/schemas/${name}`,
27
+ ...attribute,
28
+ };
29
+ };
@@ -1,76 +1,76 @@
1
- import { IJsonSchema } from "../../module";
2
- import { application_default } from "./application_default";
3
-
4
- /**
5
- * @internal
6
- */
7
- export const application_number = (
8
- nullable: boolean,
9
- attribute: IJsonSchema.IAttribute,
10
- ): IJsonSchema.INumber => {
11
- const output: IJsonSchema.INumber = {
12
- type: "number",
13
- nullable,
14
- ...attribute,
15
- };
16
- for (const tag of attribute["x-typia-metaTags"] || []) {
17
- // CHECK TYPE
18
- if (
19
- tag.kind === "type" &&
20
- (tag.value === "int" || tag.value === "uint")
21
- )
22
- output.type = "integer";
23
- // RANGE TAG
24
- else if (tag.kind === "minimum") output.minimum = tag.value;
25
- else if (tag.kind === "maximum") output.maximum = tag.value;
26
- else if (tag.kind === "range") {
27
- if (tag.minimum !== undefined)
28
- if (tag.minimum.include === true)
29
- output.minimum = tag.minimum.value;
30
- else output.exclusiveMinimum = tag.minimum.value;
31
- if (tag.maximum !== undefined)
32
- if (tag.maximum.include === true)
33
- output.maximum = tag.maximum.value;
34
- else output.exclusiveMaximum = tag.maximum.value;
35
- }
36
- // MULTIPLE-OF
37
- else if (tag.kind === "multipleOf") output.multipleOf = tag.value;
38
- }
39
-
40
- // WHEN UNSIGNED INT
41
- if (
42
- output.type === "integer" &&
43
- (attribute["x-typia-metaTags"] || []).find(
44
- (tag) => tag.kind === "type" && tag.value === "uint",
45
- )
46
- )
47
- if (output.minimum === undefined || output.minimum < 0)
48
- output.minimum = 0;
49
- else if (
50
- output.exclusiveMinimum === undefined ||
51
- output.exclusiveMinimum < 0
52
- ) {
53
- delete output.exclusiveMinimum;
54
- output.maximum = 0;
55
- }
56
-
57
- // DEFAULT CONFIGURATION
58
- output.default = application_default(attribute)((str) => {
59
- const value: number = Number(str);
60
- const conditions: boolean[] = [!Number.isNaN(value)];
61
- if (output.minimum !== undefined)
62
- conditions.push(value >= output.minimum);
63
- if (output.maximum !== undefined)
64
- conditions.push(value <= output.maximum);
65
- if (output.exclusiveMinimum !== undefined)
66
- conditions.push(value > output.exclusiveMinimum);
67
- if (output.exclusiveMaximum !== undefined)
68
- conditions.push(value < output.exclusiveMaximum);
69
- if (output.multipleOf !== undefined)
70
- conditions.push(value % output.multipleOf === 0);
71
- return conditions.every((cond) => cond);
72
- })((str) => Number(str));
73
-
74
- // RETURNS
75
- return output;
76
- };
1
+ import { IJsonSchema } from "../../module";
2
+ import { application_default } from "./application_default";
3
+
4
+ /**
5
+ * @internal
6
+ */
7
+ export const application_number = (
8
+ nullable: boolean,
9
+ attribute: IJsonSchema.IAttribute,
10
+ ): IJsonSchema.INumber => {
11
+ const output: IJsonSchema.INumber = {
12
+ type: "number",
13
+ nullable,
14
+ ...attribute,
15
+ };
16
+ for (const tag of attribute["x-typia-metaTags"] || []) {
17
+ // CHECK TYPE
18
+ if (
19
+ tag.kind === "type" &&
20
+ (tag.value === "int" || tag.value === "uint")
21
+ )
22
+ output.type = "integer";
23
+ // RANGE TAG
24
+ else if (tag.kind === "minimum") output.minimum = tag.value;
25
+ else if (tag.kind === "maximum") output.maximum = tag.value;
26
+ else if (tag.kind === "range") {
27
+ if (tag.minimum !== undefined)
28
+ if (tag.minimum.include === true)
29
+ output.minimum = tag.minimum.value;
30
+ else output.exclusiveMinimum = tag.minimum.value;
31
+ if (tag.maximum !== undefined)
32
+ if (tag.maximum.include === true)
33
+ output.maximum = tag.maximum.value;
34
+ else output.exclusiveMaximum = tag.maximum.value;
35
+ }
36
+ // MULTIPLE-OF
37
+ else if (tag.kind === "multipleOf") output.multipleOf = tag.value;
38
+ }
39
+
40
+ // WHEN UNSIGNED INT
41
+ if (
42
+ output.type === "integer" &&
43
+ (attribute["x-typia-metaTags"] || []).find(
44
+ (tag) => tag.kind === "type" && tag.value === "uint",
45
+ )
46
+ )
47
+ if (output.minimum === undefined || output.minimum < 0)
48
+ output.minimum = 0;
49
+ else if (
50
+ output.exclusiveMinimum === undefined ||
51
+ output.exclusiveMinimum < 0
52
+ ) {
53
+ delete output.exclusiveMinimum;
54
+ output.maximum = 0;
55
+ }
56
+
57
+ // DEFAULT CONFIGURATION
58
+ output.default = application_default(attribute)((str) => {
59
+ const value: number = Number(str);
60
+ const conditions: boolean[] = [!Number.isNaN(value)];
61
+ if (output.minimum !== undefined)
62
+ conditions.push(value >= output.minimum);
63
+ if (output.maximum !== undefined)
64
+ conditions.push(value <= output.maximum);
65
+ if (output.exclusiveMinimum !== undefined)
66
+ conditions.push(value > output.exclusiveMinimum);
67
+ if (output.exclusiveMaximum !== undefined)
68
+ conditions.push(value < output.exclusiveMaximum);
69
+ if (output.multipleOf !== undefined)
70
+ conditions.push(value % output.multipleOf === 0);
71
+ return conditions.every((cond) => cond);
72
+ })((str) => Number(str));
73
+
74
+ // RETURNS
75
+ return output;
76
+ };
@@ -1,49 +1,49 @@
1
- import { Metadata } from "../../metadata/Metadata";
2
- import { IJsonSchema } from "../../schemas/IJsonSchema";
3
-
4
- import { application_default_string } from "./application_default_string";
5
-
6
- /**
7
- * @internal
8
- */
9
- export const application_string = (
10
- meta: Metadata,
11
- attribute: IJsonSchema.IAttribute,
12
- ): IJsonSchema.IString => {
13
- const output: IJsonSchema.IString = {
14
- type: "string",
15
- nullable: meta.nullable,
16
- ...attribute,
17
- };
18
-
19
- // FORMAT TAG OF METADATA
20
- const formatJsdocTag = attribute["x-typia-jsDocTags"]?.find(
21
- (tag) => tag.name === "format",
22
- );
23
- if (formatJsdocTag?.text?.length)
24
- output.format = formatJsdocTag?.text.map((t) => t.text).join(" ");
25
-
26
- // REGULAR TAGS COMPATIBLE WITH JSON-SCHEMA
27
- for (const tag of attribute["x-typia-metaTags"] || []) {
28
- // RANGE
29
- if (tag.kind === "minLength") output.minLength = tag.value;
30
- else if (tag.kind === "maxLength") output.maxLength = tag.value;
31
- else if (tag.kind === "length") {
32
- if (tag.minimum !== undefined)
33
- output.minLength =
34
- tag.minimum.value + (tag.minimum.include ? 0 : 1);
35
- if (tag.maximum !== undefined)
36
- output.maxLength =
37
- tag.maximum.value - (tag.maximum.include ? 0 : 1);
38
- }
39
- // FORMAT AND PATTERN
40
- else if (tag.kind === "format") output.format = tag.value;
41
- else if (tag.kind === "pattern") output.pattern = tag.value;
42
- }
43
-
44
- // DEFAULT CONFIGURATION
45
- output.default = application_default_string(meta, attribute)(output);
46
-
47
- // RETURNS
48
- return output;
49
- };
1
+ import { Metadata } from "../../metadata/Metadata";
2
+ import { IJsonSchema } from "../../schemas/IJsonSchema";
3
+
4
+ import { application_default_string } from "./application_default_string";
5
+
6
+ /**
7
+ * @internal
8
+ */
9
+ export const application_string = (
10
+ meta: Metadata,
11
+ attribute: IJsonSchema.IAttribute,
12
+ ): IJsonSchema.IString => {
13
+ const output: IJsonSchema.IString = {
14
+ type: "string",
15
+ nullable: meta.nullable,
16
+ ...attribute,
17
+ };
18
+
19
+ // FORMAT TAG OF METADATA
20
+ const formatJsdocTag = attribute["x-typia-jsDocTags"]?.find(
21
+ (tag) => tag.name === "format",
22
+ );
23
+ if (formatJsdocTag?.text?.length)
24
+ output.format = formatJsdocTag?.text.map((t) => t.text).join(" ");
25
+
26
+ // REGULAR TAGS COMPATIBLE WITH JSON-SCHEMA
27
+ for (const tag of attribute["x-typia-metaTags"] || []) {
28
+ // RANGE
29
+ if (tag.kind === "minLength") output.minLength = tag.value;
30
+ else if (tag.kind === "maxLength") output.maxLength = tag.value;
31
+ else if (tag.kind === "length") {
32
+ if (tag.minimum !== undefined)
33
+ output.minLength =
34
+ tag.minimum.value + (tag.minimum.include ? 0 : 1);
35
+ if (tag.maximum !== undefined)
36
+ output.maxLength =
37
+ tag.maximum.value - (tag.maximum.include ? 0 : 1);
38
+ }
39
+ // FORMAT AND PATTERN
40
+ else if (tag.kind === "format") output.format = tag.value;
41
+ else if (tag.kind === "pattern") output.pattern = tag.value;
42
+ }
43
+
44
+ // DEFAULT CONFIGURATION
45
+ output.default = application_default_string(meta, attribute)(output);
46
+
47
+ // RETURNS
48
+ return output;
49
+ };
@@ -1,27 +1,27 @@
1
- import { Metadata } from "../../metadata/Metadata";
2
- import { IJsonSchema } from "../../schemas/IJsonSchema";
3
-
4
- import { application_default_string } from "./application_default_string";
5
- import { metadata_to_pattern } from "./metadata_to_pattern";
6
-
7
- /**
8
- * @internal
9
- */
10
- export const application_templates = (
11
- meta: Metadata,
12
- attribute: IJsonSchema.IAttribute,
13
- ): IJsonSchema.IString => {
14
- // CONSTRUCT PATTERN
15
- const output: IJsonSchema.IString = {
16
- type: "string",
17
- nullable: meta.nullable,
18
- ...attribute,
19
- };
20
- output.pattern = metadata_to_pattern(true)(meta);
21
-
22
- // DEFAULT VALUE
23
- output.default = application_default_string(meta, attribute)(output);
24
-
25
- // RETURNS
26
- return output;
27
- };
1
+ import { Metadata } from "../../metadata/Metadata";
2
+ import { IJsonSchema } from "../../schemas/IJsonSchema";
3
+
4
+ import { application_default_string } from "./application_default_string";
5
+ import { metadata_to_pattern } from "./metadata_to_pattern";
6
+
7
+ /**
8
+ * @internal
9
+ */
10
+ export const application_templates = (
11
+ meta: Metadata,
12
+ attribute: IJsonSchema.IAttribute,
13
+ ): IJsonSchema.IString => {
14
+ // CONSTRUCT PATTERN
15
+ const output: IJsonSchema.IString = {
16
+ type: "string",
17
+ nullable: meta.nullable,
18
+ ...attribute,
19
+ };
20
+ output.pattern = metadata_to_pattern(true)(meta);
21
+
22
+ // DEFAULT VALUE
23
+ output.default = application_default_string(meta, attribute)(output);
24
+
25
+ // RETURNS
26
+ return output;
27
+ };