typia 4.0.9 → 4.0.10-dev.20230616

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 (58) hide show
  1. package/lib/factories/MetadataTagFactory.js +64 -20
  2. package/lib/factories/MetadataTagFactory.js.map +1 -1
  3. package/lib/factories/internal/metadata/explore_metadata.js +4 -2
  4. package/lib/factories/internal/metadata/explore_metadata.js.map +1 -1
  5. package/lib/factories/internal/metadata/iterate_metadata_collection.js +3 -3
  6. package/lib/factories/internal/metadata/iterate_metadata_collection.js.map +1 -1
  7. package/lib/factories/internal/metadata/iterate_metadata_resolve.js +9 -3
  8. package/lib/factories/internal/metadata/iterate_metadata_resolve.js.map +1 -1
  9. package/lib/factories/internal/metadata/iterate_metadata_sort.js +1 -1
  10. package/lib/factories/internal/metadata/iterate_metadata_sort.js.map +1 -1
  11. package/lib/metadata/IMetadata.d.ts +2 -1
  12. package/lib/metadata/IMetadataResolved.d.ts +5 -0
  13. package/lib/metadata/IMetadataResolved.js +3 -0
  14. package/lib/metadata/IMetadataResolved.js.map +1 -0
  15. package/lib/metadata/Metadata.d.ts +2 -1
  16. package/lib/metadata/Metadata.js +31 -24
  17. package/lib/metadata/Metadata.js.map +1 -1
  18. package/lib/metadata/MetadataArray.d.ts +4 -2
  19. package/lib/metadata/MetadataArray.js.map +1 -1
  20. package/lib/metadata/MetadataResolved.d.ts +12 -0
  21. package/lib/metadata/MetadataResolved.js +31 -0
  22. package/lib/metadata/MetadataResolved.js.map +1 -0
  23. package/lib/programmers/CloneProgrammer.js +1 -1
  24. package/lib/programmers/CloneProgrammer.js.map +1 -1
  25. package/lib/programmers/RandomProgrammer.js +1 -1
  26. package/lib/programmers/RandomProgrammer.js.map +1 -1
  27. package/lib/programmers/StringifyProgrammer.js +1 -1
  28. package/lib/programmers/StringifyProgrammer.js.map +1 -1
  29. package/lib/programmers/helpers/StringifyPredicator.js +1 -1
  30. package/lib/programmers/helpers/StringifyPredicator.js.map +1 -1
  31. package/lib/programmers/internal/application_resolved.d.ts +4 -0
  32. package/lib/programmers/internal/application_resolved.js +50 -0
  33. package/lib/programmers/internal/application_resolved.js.map +1 -0
  34. package/lib/programmers/internal/application_schema.js +28 -5
  35. package/lib/programmers/internal/application_schema.js.map +1 -1
  36. package/lib/transformers/features/miscellaneous/MetadataTransformer.js +1 -1
  37. package/lib/transformers/features/miscellaneous/MetadataTransformer.js.map +1 -1
  38. package/package.json +1 -1
  39. package/src/factories/MetadataTagFactory.ts +80 -25
  40. package/src/factories/internal/metadata/emend_metadata_atomics.ts +33 -33
  41. package/src/factories/internal/metadata/explore_metadata.ts +40 -37
  42. package/src/factories/internal/metadata/iterate_metadata.ts +85 -85
  43. package/src/factories/internal/metadata/iterate_metadata_collection.ts +3 -3
  44. package/src/factories/internal/metadata/iterate_metadata_resolve.ts +49 -38
  45. package/src/factories/internal/metadata/iterate_metadata_sort.ts +2 -1
  46. package/src/factories/internal/metadata/iterate_metadata_union.ts +24 -24
  47. package/src/metadata/IMetadata.ts +2 -1
  48. package/src/metadata/IMetadataResolved.ts +6 -0
  49. package/src/metadata/Metadata.ts +17 -4
  50. package/src/metadata/MetadataArray.ts +4 -1
  51. package/src/metadata/MetadataResolved.ts +51 -0
  52. package/src/programmers/CloneProgrammer.ts +1 -1
  53. package/src/programmers/RandomProgrammer.ts +5 -1
  54. package/src/programmers/StringifyProgrammer.ts +983 -983
  55. package/src/programmers/helpers/StringifyPredicator.ts +1 -1
  56. package/src/programmers/internal/application_resolved.ts +55 -0
  57. package/src/programmers/internal/application_schema.ts +7 -6
  58. package/src/transformers/features/miscellaneous/MetadataTransformer.ts +1 -1
@@ -6,7 +6,7 @@ export namespace StringifyPredicator {
6
6
 
7
7
  export const undefindable = (meta: Metadata): boolean =>
8
8
  meta.required === false ||
9
- (meta.resolved !== null && meta.resolved.required === false);
9
+ (meta.resolved !== null && meta.resolved.returns.required === false);
10
10
 
11
11
  const ESCAPED = ['"', "\\", "\b", "\f", "\n", "\n", "\r", "\t"];
12
12
  }
@@ -0,0 +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
+ };
@@ -11,6 +11,7 @@ import { application_constant } from "./application_constant";
11
11
  import { application_native } from "./application_native";
12
12
  import { application_number } from "./application_number";
13
13
  import { application_object } from "./application_object";
14
+ import { application_resolved } from "./application_resolved";
14
15
  import { application_string } from "./application_string";
15
16
  import { application_templates } from "./application_templates";
16
17
  import { application_tuple } from "./application_tuple";
@@ -57,12 +58,12 @@ export const application_schema =
57
58
  : (schema: IJsonSchema) => union.push(schema);
58
59
 
59
60
  // toJSON() METHOD
60
- if (meta.resolved !== null) {
61
- const resolved = application_schema(options)(blockNever)(
62
- components,
63
- )(meta.resolved)(attribute);
64
- if (resolved !== null) union.push(resolved);
65
- }
61
+ if (meta.resolved !== null)
62
+ union.push(
63
+ ...application_resolved(options)(blockNever)(components)(
64
+ meta.resolved,
65
+ )(attribute),
66
+ );
66
67
 
67
68
  // ATOMIC TYPES
68
69
  if (meta.templates.length && AtomicPredicator.template(meta))
@@ -33,7 +33,7 @@ export namespace MetadataTransformer {
33
33
  const collection: MetadataCollection = new MetadataCollection();
34
34
  const metadatas: Array<Metadata> = types.map((type) =>
35
35
  MetadataFactory.analyze(checker)({
36
- resolve: false,
36
+ resolve: true,
37
37
  constant: true,
38
38
  absorb: true,
39
39
  })(collection)(type),