typia 7.0.0-dev.20240928 → 7.0.0-dev.20240930

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 (40) hide show
  1. package/lib/factories/internal/metadata/emplace_metadata_object.js +2 -1
  2. package/lib/factories/internal/metadata/emplace_metadata_object.js.map +1 -1
  3. package/lib/programmers/AssertProgrammer.js +14 -10
  4. package/lib/programmers/AssertProgrammer.js.map +1 -1
  5. package/lib/programmers/CheckerProgrammer.d.ts +5 -1
  6. package/lib/programmers/CheckerProgrammer.js +161 -135
  7. package/lib/programmers/CheckerProgrammer.js.map +1 -1
  8. package/lib/programmers/FeatureProgrammer.d.ts +91 -28
  9. package/lib/programmers/FeatureProgrammer.js +158 -139
  10. package/lib/programmers/FeatureProgrammer.js.map +1 -1
  11. package/lib/programmers/IsProgrammer.d.ts +5 -1
  12. package/lib/programmers/IsProgrammer.js +70 -67
  13. package/lib/programmers/IsProgrammer.js.map +1 -1
  14. package/lib/programmers/ValidateProgrammer.js +7 -3
  15. package/lib/programmers/ValidateProgrammer.js.map +1 -1
  16. package/lib/programmers/helpers/UnionExplorer.js +31 -6
  17. package/lib/programmers/helpers/UnionExplorer.js.map +1 -1
  18. package/lib/programmers/internal/feature_object_entries.js +18 -14
  19. package/lib/programmers/internal/feature_object_entries.js.map +1 -1
  20. package/lib/programmers/json/JsonStringifyProgrammer.js +101 -62
  21. package/lib/programmers/json/JsonStringifyProgrammer.js.map +1 -1
  22. package/lib/programmers/misc/MiscCloneProgrammer.js +101 -62
  23. package/lib/programmers/misc/MiscCloneProgrammer.js.map +1 -1
  24. package/lib/programmers/misc/MiscPruneProgrammer.js +97 -62
  25. package/lib/programmers/misc/MiscPruneProgrammer.js.map +1 -1
  26. package/lib/programmers/notations/NotationGeneralProgrammer.js +118 -60
  27. package/lib/programmers/notations/NotationGeneralProgrammer.js.map +1 -1
  28. package/package.json +1 -1
  29. package/src/factories/internal/metadata/emplace_metadata_object.ts +2 -1
  30. package/src/programmers/AssertProgrammer.ts +14 -10
  31. package/src/programmers/CheckerProgrammer.ts +139 -134
  32. package/src/programmers/FeatureProgrammer.ts +324 -266
  33. package/src/programmers/IsProgrammer.ts +80 -77
  34. package/src/programmers/ValidateProgrammer.ts +7 -3
  35. package/src/programmers/helpers/UnionExplorer.ts +33 -12
  36. package/src/programmers/internal/feature_object_entries.ts +18 -15
  37. package/src/programmers/json/JsonStringifyProgrammer.ts +103 -76
  38. package/src/programmers/misc/MiscCloneProgrammer.ts +122 -95
  39. package/src/programmers/misc/MiscPruneProgrammer.ts +111 -90
  40. package/src/programmers/notations/NotationGeneralProgrammer.ts +138 -91
@@ -9,6 +9,7 @@ import { TypeFactory } from "../../factories/TypeFactory";
9
9
 
10
10
  import { Metadata } from "../../schemas/metadata/Metadata";
11
11
  import { MetadataArray } from "../../schemas/metadata/MetadataArray";
12
+ import { MetadataObject } from "../../schemas/metadata/MetadataObject";
12
13
  import { MetadataTuple } from "../../schemas/metadata/MetadataTuple";
13
14
  import { MetadataTupleType } from "../../schemas/metadata/MetadataTupleType";
14
15
 
@@ -105,9 +106,11 @@ export namespace NotationGeneralProgrammer {
105
106
  ts.factory.createArrowFunction(
106
107
  undefined,
107
108
  undefined,
108
- FeatureProgrammer.parameterDeclarations(props.config)(
109
- TypeFactory.keyword("any"),
110
- )(ts.factory.createIdentifier("input")),
109
+ FeatureProgrammer.parameterDeclarations({
110
+ config: props.config,
111
+ type: TypeFactory.keyword("any"),
112
+ input: ts.factory.createIdentifier("input"),
113
+ }),
111
114
  TypeFactory.keyword("any"),
112
115
  undefined,
113
116
  decode_array_inline({
@@ -143,9 +146,11 @@ export namespace NotationGeneralProgrammer {
143
146
  ts.factory.createArrowFunction(
144
147
  undefined,
145
148
  undefined,
146
- FeatureProgrammer.parameterDeclarations(props.config)(
147
- TypeFactory.keyword("any"),
148
- )(ts.factory.createIdentifier("input")),
149
+ FeatureProgrammer.parameterDeclarations({
150
+ config: props.config,
151
+ type: TypeFactory.keyword("any"),
152
+ input: ts.factory.createIdentifier("input"),
153
+ }),
149
154
  TypeFactory.keyword("any"),
150
155
  undefined,
151
156
  decode_tuple_inline({
@@ -342,12 +347,23 @@ export namespace NotationGeneralProgrammer {
342
347
  }
343
348
  };
344
349
 
345
- const decode_object = (importer: FunctionImporter) =>
350
+ const decode_object = (props: {
351
+ importer: FunctionImporter;
352
+ object: MetadataObject;
353
+ input: ts.Expression;
354
+ explore: FeatureProgrammer.IExplore;
355
+ }) =>
346
356
  FeatureProgrammer.decode_object({
347
- trace: false,
348
- path: false,
349
- prefix: PREFIX,
350
- })(importer);
357
+ config: {
358
+ trace: false,
359
+ path: false,
360
+ prefix: PREFIX,
361
+ },
362
+ importer: props.importer,
363
+ object: props.object,
364
+ input: props.input,
365
+ explore: props.explore,
366
+ });
351
367
 
352
368
  const decode_array = (props: {
353
369
  config: FeatureProgrammer.IConfig;
@@ -364,11 +380,15 @@ export namespace NotationGeneralProgrammer {
364
380
  ),
365
381
  ),
366
382
  undefined,
367
- FeatureProgrammer.argumentsArray(props.config)({
368
- ...props.explore,
369
- source: "function",
370
- from: "array",
371
- })(props.input),
383
+ FeatureProgrammer.argumentsArray({
384
+ config: props.config,
385
+ explore: {
386
+ ...props.explore,
387
+ source: "function",
388
+ from: "array",
389
+ },
390
+ input: props.input,
391
+ }),
372
392
  )
373
393
  : decode_array_inline(props);
374
394
 
@@ -379,9 +399,14 @@ export namespace NotationGeneralProgrammer {
379
399
  array: MetadataArray;
380
400
  explore: FeatureProgrammer.IExplore;
381
401
  }) =>
382
- FeatureProgrammer.decode_array(props.config)(props.importer)(
383
- NotationJoiner.array,
384
- )(props.input, props.array, props.explore);
402
+ FeatureProgrammer.decode_array({
403
+ config: props.config,
404
+ importer: props.importer,
405
+ combiner: NotationJoiner.array,
406
+ array: props.array,
407
+ input: props.input,
408
+ explore: props.explore,
409
+ });
385
410
 
386
411
  const decode_tuple = (props: {
387
412
  context: ITypiaContext;
@@ -399,10 +424,14 @@ export namespace NotationGeneralProgrammer {
399
424
  ),
400
425
  ),
401
426
  undefined,
402
- FeatureProgrammer.argumentsArray(props.config)({
403
- ...props.explore,
404
- source: "function",
405
- })(props.input),
427
+ FeatureProgrammer.argumentsArray({
428
+ config: props.config,
429
+ explore: {
430
+ ...props.explore,
431
+ source: "function",
432
+ },
433
+ input: props.input,
434
+ }),
406
435
  )
407
436
  : decode_tuple_inline({
408
437
  ...props,
@@ -588,19 +617,18 @@ export namespace NotationGeneralProgrammer {
588
617
  explore: FeatureProgrammer.IExplore;
589
618
  }) => {
590
619
  if (props.metadata.objects.length === 1)
591
- return decode_object(props.importer)(
592
- props.input,
593
- props.metadata.objects[0]!,
594
- props.explore,
595
- );
620
+ return decode_object({
621
+ importer: props.importer,
622
+ object: props.metadata.objects[0]!,
623
+ input: props.input,
624
+ explore: props.explore,
625
+ });
596
626
  return ts.factory.createCallExpression(
597
627
  ts.factory.createIdentifier(
598
628
  props.importer.useLocal(`${PREFIX}u${props.metadata.union_index!}`),
599
629
  ),
600
630
  undefined,
601
- FeatureProgrammer.argumentsArray(props.config)(props.explore)(
602
- props.input,
603
- ),
631
+ FeatureProgrammer.argumentsArray(props),
604
632
  );
605
633
  };
606
634
 
@@ -682,9 +710,11 @@ export namespace NotationGeneralProgrammer {
682
710
  props.elements.map((e) => e.type.name).join(" | "),
683
711
  () =>
684
712
  arrow(
685
- FeatureProgrammer.parameterDeclarations(props.config)(
686
- TypeFactory.keyword("any"),
687
- )(ts.factory.createIdentifier("input")),
713
+ FeatureProgrammer.parameterDeclarations({
714
+ config: props.config,
715
+ type: TypeFactory.keyword("any"),
716
+ input: ts.factory.createIdentifier("input"),
717
+ }),
688
718
  )({
689
719
  ...arrayExplore,
690
720
  postfix: "",
@@ -692,7 +722,11 @@ export namespace NotationGeneralProgrammer {
692
722
  ),
693
723
  ),
694
724
  undefined,
695
- FeatureProgrammer.argumentsArray(props.config)(arrayExplore)(props.input),
725
+ FeatureProgrammer.argumentsArray({
726
+ config: props.config,
727
+ explore: arrayExplore,
728
+ input: props.input,
729
+ }),
696
730
  );
697
731
  };
698
732
 
@@ -723,56 +757,70 @@ export namespace NotationGeneralProgrammer {
723
757
  trace: false,
724
758
  path: false,
725
759
  initializer,
726
- decoder: () => (input, metadata, explore) =>
760
+ decoder: (next) =>
727
761
  decode({
728
762
  context: props.context,
729
763
  config,
730
764
  importer: props.importer,
731
- metadata,
732
- explore,
733
- input,
765
+ metadata: next.metadata,
766
+ explore: next.explore,
767
+ input: next.input,
734
768
  }),
735
769
  objector: {
736
- checker: () => (input, metadata, explore) =>
770
+ checker: (next) =>
737
771
  IsProgrammer.decode({
738
772
  context: props.context,
739
773
  importer: props.importer,
740
- input,
741
- metadata,
742
- explore,
774
+ input: next.input,
775
+ metadata: next.metadata,
776
+ explore: next.explore,
743
777
  }),
744
- decoder: () => decode_object(props.importer),
745
- joiner: NotationJoiner.object(props.rename),
746
- unionizer: decode_union_object((input, object, explore) =>
747
- IsProgrammer.decode_object({
748
- context: props.context,
778
+ decoder: (next) =>
779
+ decode_object({
749
780
  importer: props.importer,
750
- object,
751
- input,
752
- explore,
781
+ object: next.object,
782
+ input: next.input,
783
+ explore: next.explore,
753
784
  }),
754
- )(decode_object(props.importer))((exp) => exp)((input, expected) =>
755
- create_throw_error({
756
- importer: props.importer,
757
- expected,
758
- input,
759
- }),
760
- ),
761
- failure: (input, expected) =>
785
+ joiner: NotationJoiner.object(props.rename),
786
+ unionizer: (next) =>
787
+ decode_union_object((input, object, explore) =>
788
+ IsProgrammer.decode_object({
789
+ context: props.context,
790
+ importer: props.importer,
791
+ object,
792
+ input,
793
+ explore,
794
+ }),
795
+ )((input, object, explore) =>
796
+ decode_object({
797
+ importer: props.importer,
798
+ object,
799
+ input,
800
+ explore,
801
+ }),
802
+ )((exp) => exp)((input, expected) =>
803
+ create_throw_error({
804
+ importer: props.importer,
805
+ expected,
806
+ input,
807
+ }),
808
+ )(next.input, next.objects, next.explore),
809
+ failure: (next) =>
762
810
  create_throw_error({
763
811
  importer: props.importer,
764
- expected,
765
- input,
812
+ expected: next.expected,
813
+ input: next.input,
766
814
  }),
767
815
  },
768
816
  generator: {
769
- arrays: () => (collection) =>
817
+ arrays: (collection) =>
770
818
  write_array_functions({
771
819
  importer: props.importer,
772
820
  config,
773
821
  collection,
774
822
  }),
775
- tuples: () => (collection) =>
823
+ tuples: (collection) =>
776
824
  write_tuple_functions({
777
825
  context: props.context,
778
826
  importer: props.importer,
@@ -784,26 +832,25 @@ export namespace NotationGeneralProgrammer {
784
832
  return config;
785
833
  };
786
834
 
787
- const initializer: FeatureProgrammer.IConfig["initializer"] =
788
- (project) => (importer) => (type) => {
789
- const collection = new MetadataCollection();
790
- const result = MetadataFactory.analyze({
791
- checker: project.checker,
792
- transformer: project.transformer,
793
- options: {
794
- escape: false,
795
- constant: true,
796
- absorb: true,
797
- },
798
- collection,
799
- type,
800
- });
801
- if (result.success === false)
802
- throw TransformerError.from(`typia.misc.${importer.method}`)(
803
- result.errors,
804
- );
805
- return [collection, result.data];
806
- };
835
+ const initializer: FeatureProgrammer.IConfig["initializer"] = (props) => {
836
+ const collection = new MetadataCollection();
837
+ const result = MetadataFactory.analyze({
838
+ checker: props.context.checker,
839
+ transformer: props.context.transformer,
840
+ options: {
841
+ escape: false,
842
+ constant: true,
843
+ absorb: true,
844
+ },
845
+ collection,
846
+ type: props.type,
847
+ });
848
+ if (result.success === false)
849
+ throw TransformerError.from(`typia.misc.${props.importer.method}`)(
850
+ result.errors,
851
+ );
852
+ return [collection, result.data];
853
+ };
807
854
 
808
855
  const create_throw_error = (props: {
809
856
  importer: FunctionImporter;
@@ -829,12 +876,12 @@ export namespace NotationGeneralProgrammer {
829
876
  ),
830
877
  );
831
878
 
832
- const is_instance = (meta: Metadata): boolean =>
833
- !!meta.objects.length ||
834
- !!meta.arrays.length ||
835
- !!meta.tuples.length ||
836
- !!meta.sets.length ||
837
- !!meta.maps.length ||
838
- !!meta.natives.length ||
839
- (meta.rest !== null && is_instance(meta.rest));
879
+ const is_instance = (metadata: Metadata): boolean =>
880
+ !!metadata.objects.length ||
881
+ !!metadata.arrays.length ||
882
+ !!metadata.tuples.length ||
883
+ !!metadata.sets.length ||
884
+ !!metadata.maps.length ||
885
+ !!metadata.natives.length ||
886
+ (metadata.rest !== null && is_instance(metadata.rest));
840
887
  }