typia 5.0.0-dev.20230822 → 5.0.0-dev.20230823-2

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 (137) hide show
  1. package/README.md +1 -1
  2. package/lib/Primitive.d.ts +14 -12
  3. package/lib/Resolved.d.ts +46 -0
  4. package/lib/{schemas/metadata/IMetadataResolved.js → Resolved.js} +1 -1
  5. package/lib/Resolved.js.map +1 -0
  6. package/lib/factories/MetadataFactory.d.ts +1 -1
  7. package/lib/factories/MetadataTagFactory.js +6 -6
  8. package/lib/factories/MetadataTagFactory.js.map +1 -1
  9. package/lib/factories/ProtobufFactory.js +2 -2
  10. package/lib/factories/ProtobufFactory.js.map +1 -1
  11. package/lib/factories/internal/metadata/explore_metadata.js +3 -3
  12. package/lib/factories/internal/metadata/explore_metadata.js.map +1 -1
  13. package/lib/factories/internal/metadata/iterate_metadata_collection.js +6 -6
  14. package/lib/factories/internal/metadata/iterate_metadata_collection.js.map +1 -1
  15. package/lib/factories/internal/metadata/iterate_metadata_native.js +2 -10
  16. package/lib/factories/internal/metadata/iterate_metadata_native.js.map +1 -1
  17. package/lib/factories/internal/metadata/iterate_metadata_resolve.js +6 -6
  18. package/lib/factories/internal/metadata/iterate_metadata_resolve.js.map +1 -1
  19. package/lib/factories/internal/metadata/iterate_metadata_sort.js +2 -2
  20. package/lib/factories/internal/metadata/iterate_metadata_sort.js.map +1 -1
  21. package/lib/functional/$ProtobufWriter.js.map +1 -1
  22. package/lib/json.d.ts +15 -15
  23. package/lib/misc.d.ts +42 -42
  24. package/lib/module.d.ts +18 -17
  25. package/lib/module.js +1 -0
  26. package/lib/module.js.map +1 -1
  27. package/lib/programmers/AssertProgrammer.js +1 -1
  28. package/lib/programmers/AssertProgrammer.js.map +1 -1
  29. package/lib/programmers/CheckerProgrammer.js +1 -1
  30. package/lib/programmers/CheckerProgrammer.js.map +1 -1
  31. package/lib/programmers/IsProgrammer.js +2 -2
  32. package/lib/programmers/IsProgrammer.js.map +1 -1
  33. package/lib/programmers/RandomProgrammer.js +307 -132
  34. package/lib/programmers/RandomProgrammer.js.map +1 -1
  35. package/lib/programmers/ValidateProgrammer.js +1 -1
  36. package/lib/programmers/ValidateProgrammer.js.map +1 -1
  37. package/lib/programmers/helpers/FunctionImporeter.d.ts +2 -0
  38. package/lib/programmers/helpers/FunctionImporeter.js +2 -1
  39. package/lib/programmers/helpers/FunctionImporeter.js.map +1 -1
  40. package/lib/programmers/helpers/StringifyPredicator.js +1 -2
  41. package/lib/programmers/helpers/StringifyPredicator.js.map +1 -1
  42. package/lib/programmers/helpers/disable_function_importer_declare.js +1 -0
  43. package/lib/programmers/helpers/disable_function_importer_declare.js.map +1 -1
  44. package/lib/programmers/internal/application_resolved.d.ts +2 -2
  45. package/lib/programmers/internal/application_resolved.js.map +1 -1
  46. package/lib/programmers/internal/application_schema.js +2 -2
  47. package/lib/programmers/internal/application_schema.js.map +1 -1
  48. package/lib/programmers/json/JsonStringifyProgrammer.js +4 -4
  49. package/lib/programmers/json/JsonStringifyProgrammer.js.map +1 -1
  50. package/lib/programmers/misc/MiscAssertCloneProgrammer.js +1 -1
  51. package/lib/programmers/misc/MiscAssertCloneProgrammer.js.map +1 -1
  52. package/lib/programmers/misc/MiscCloneProgrammer.js +114 -33
  53. package/lib/programmers/misc/MiscCloneProgrammer.js.map +1 -1
  54. package/lib/programmers/misc/MiscIsCloneProgrammer.js +1 -1
  55. package/lib/programmers/misc/MiscIsCloneProgrammer.js.map +1 -1
  56. package/lib/programmers/misc/MiscLiteralsProgrammer.js +1 -1
  57. package/lib/programmers/misc/MiscLiteralsProgrammer.js.map +1 -1
  58. package/lib/programmers/misc/MiscPruneProgrammer.js +2 -2
  59. package/lib/programmers/misc/MiscPruneProgrammer.js.map +1 -1
  60. package/lib/programmers/misc/MiscValidateCloneProgrammer.js +1 -1
  61. package/lib/programmers/misc/MiscValidateCloneProgrammer.js.map +1 -1
  62. package/lib/programmers/protobuf/ProtobufAssertDecodeProgrammer.js +3 -3
  63. package/lib/programmers/protobuf/ProtobufAssertDecodeProgrammer.js.map +1 -1
  64. package/lib/programmers/protobuf/ProtobufDecodeProgrammer.js +15 -10
  65. package/lib/programmers/protobuf/ProtobufDecodeProgrammer.js.map +1 -1
  66. package/lib/programmers/protobuf/ProtobufEncodeProgrammer.js +8 -6
  67. package/lib/programmers/protobuf/ProtobufEncodeProgrammer.js.map +1 -1
  68. package/lib/programmers/protobuf/ProtobufIsDecodeProgrammer.js +2 -2
  69. package/lib/programmers/protobuf/ProtobufIsDecodeProgrammer.js.map +1 -1
  70. package/lib/programmers/protobuf/ProtobufValidateDecodeProgrammer.js +1 -1
  71. package/lib/programmers/protobuf/ProtobufValidateDecodeProgrammer.js.map +1 -1
  72. package/lib/protobuf.d.ts +631 -10
  73. package/lib/protobuf.js +13 -13
  74. package/lib/protobuf.js.map +1 -1
  75. package/lib/schemas/metadata/IMetadata.d.ts +2 -2
  76. package/lib/schemas/metadata/{IMetadataResolved.d.ts → IMetadataEscaped.d.ts} +1 -1
  77. package/lib/schemas/metadata/IMetadataEscaped.js +3 -0
  78. package/lib/schemas/metadata/IMetadataEscaped.js.map +1 -0
  79. package/lib/schemas/metadata/Metadata.d.ts +2 -2
  80. package/lib/schemas/metadata/Metadata.js +15 -15
  81. package/lib/schemas/metadata/Metadata.js.map +1 -1
  82. package/lib/schemas/metadata/{MetadataResolved.d.ts → MetadataEscaped.d.ts} +3 -3
  83. package/lib/schemas/metadata/{MetadataResolved.js → MetadataEscaped.js} +11 -11
  84. package/lib/schemas/metadata/MetadataEscaped.js.map +1 -0
  85. package/lib/transformers/features/json/JsonApplicationTransformer.js +1 -1
  86. package/lib/transformers/features/json/JsonApplicationTransformer.js.map +1 -1
  87. package/lib/transformers/features/misc/MetadataTransformer.js +1 -1
  88. package/lib/transformers/features/misc/MetadataTransformer.js.map +1 -1
  89. package/lib/utils/RandomGenerator.js +3 -2
  90. package/lib/utils/RandomGenerator.js.map +1 -1
  91. package/package.json +2 -1
  92. package/src/Primitive.ts +19 -15
  93. package/src/Resolved.ts +116 -0
  94. package/src/factories/MetadataFactory.ts +1 -1
  95. package/src/factories/MetadataTagFactory.ts +6 -6
  96. package/src/factories/ProtobufFactory.ts +2 -2
  97. package/src/factories/internal/metadata/explore_metadata.ts +3 -3
  98. package/src/factories/internal/metadata/iterate_metadata_collection.ts +6 -6
  99. package/src/factories/internal/metadata/iterate_metadata_native.ts +0 -9
  100. package/src/factories/internal/metadata/iterate_metadata_resolve.ts +6 -6
  101. package/src/factories/internal/metadata/iterate_metadata_sort.ts +2 -2
  102. package/src/functional/$ProtobufWriter.ts +1 -2
  103. package/src/json.ts +15 -15
  104. package/src/misc.ts +42 -42
  105. package/src/module.ts +18 -17
  106. package/src/programmers/AssertProgrammer.ts +3 -1
  107. package/src/programmers/CheckerProgrammer.ts +1 -1
  108. package/src/programmers/IsProgrammer.ts +4 -2
  109. package/src/programmers/RandomProgrammer.ts +322 -26
  110. package/src/programmers/ValidateProgrammer.ts +3 -1
  111. package/src/programmers/helpers/FunctionImporeter.ts +2 -0
  112. package/src/programmers/helpers/StringifyPredicator.ts +1 -2
  113. package/src/programmers/helpers/disable_function_importer_declare.ts +6 -1
  114. package/src/programmers/internal/application_resolved.ts +2 -2
  115. package/src/programmers/internal/application_schema.ts +2 -2
  116. package/src/programmers/json/JsonStringifyProgrammer.ts +6 -4
  117. package/src/programmers/misc/MiscAssertCloneProgrammer.ts +1 -1
  118. package/src/programmers/misc/MiscCloneProgrammer.ts +229 -41
  119. package/src/programmers/misc/MiscIsCloneProgrammer.ts +1 -1
  120. package/src/programmers/misc/MiscLiteralsProgrammer.ts +1 -1
  121. package/src/programmers/misc/MiscPruneProgrammer.ts +4 -2
  122. package/src/programmers/misc/MiscValidateCloneProgrammer.ts +1 -1
  123. package/src/programmers/protobuf/ProtobufAssertDecodeProgrammer.ts +18 -9
  124. package/src/programmers/protobuf/ProtobufDecodeProgrammer.ts +45 -25
  125. package/src/programmers/protobuf/ProtobufEncodeProgrammer.ts +15 -13
  126. package/src/programmers/protobuf/ProtobufIsDecodeProgrammer.ts +12 -2
  127. package/src/programmers/protobuf/ProtobufValidateDecodeProgrammer.ts +2 -2
  128. package/src/protobuf.ts +663 -31
  129. package/src/schemas/metadata/IMetadata.ts +2 -2
  130. package/src/schemas/metadata/{IMetadataResolved.ts → IMetadataEscaped.ts} +1 -1
  131. package/src/schemas/metadata/Metadata.ts +17 -20
  132. package/src/schemas/metadata/{MetadataResolved.ts → MetadataEscaped.ts} +9 -9
  133. package/src/transformers/features/json/JsonApplicationTransformer.ts +1 -1
  134. package/src/transformers/features/misc/MetadataTransformer.ts +1 -1
  135. package/src/utils/RandomGenerator.ts +4 -2
  136. package/lib/schemas/metadata/IMetadataResolved.js.map +0 -1
  137. package/lib/schemas/metadata/MetadataResolved.js.map +0 -1
@@ -42,7 +42,9 @@ export namespace JsonStringifyProgrammer {
42
42
 
43
43
  export const write =
44
44
  (project: IProject) => (modulo: ts.LeftHandSideExpression) => {
45
- const importer: FunctionImporter = new FunctionImporter();
45
+ const importer: FunctionImporter = new FunctionImporter(
46
+ modulo.getText(),
47
+ );
46
48
  const config: FeatureProgrammer.IConfig =
47
49
  configure(project)(importer);
48
50
 
@@ -186,14 +188,14 @@ export namespace JsonStringifyProgrammer {
186
188
  const unions: IUnion[] = [];
187
189
 
188
190
  // toJSON() METHOD
189
- if (meta.resolved !== null)
191
+ if (meta.escaped !== null)
190
192
  unions.push({
191
193
  type: "resolved",
192
194
  is: () => IsProgrammer.decode_to_json(false)(input),
193
195
  value: () =>
194
196
  decode_to_json(project)(config)(importer)(
195
197
  input,
196
- meta.resolved!.returns,
198
+ meta.escaped!.returns,
197
199
  explore,
198
200
  ),
199
201
  });
@@ -931,7 +933,7 @@ export namespace JsonStringifyProgrammer {
931
933
  (type) => {
932
934
  const collection: MetadataCollection = new MetadataCollection();
933
935
  const meta: Metadata = MetadataFactory.analyze(checker)({
934
- resolve: true,
936
+ escape: true,
935
937
  constant: true,
936
938
  absorb: true,
937
939
  validate: (meta) => {
@@ -24,7 +24,7 @@ export namespace MiscAssertCloneProgrammer {
24
24
  ),
25
25
  ],
26
26
  ts.factory.createTypeReferenceNode(
27
- `typia.Primitive<${
27
+ `typia.Resolved<${
28
28
  name ?? TypeFactory.getFullName(project.checker)(type)
29
29
  }>`,
30
30
  ),
@@ -26,7 +26,9 @@ import { wrap_metadata_rest_tuple } from "../internal/wrap_metadata_rest_tuple";
26
26
  export namespace MiscCloneProgrammer {
27
27
  export const write =
28
28
  (project: IProject) => (modulo: ts.LeftHandSideExpression) => {
29
- const importer: FunctionImporter = new FunctionImporter();
29
+ const importer: FunctionImporter = new FunctionImporter(
30
+ modulo.getText(),
31
+ );
30
32
  return FeatureProgrammer.write(project)({
31
33
  ...configure(project)(importer),
32
34
  addition: (collection) => [
@@ -137,19 +139,6 @@ export namespace MiscCloneProgrammer {
137
139
  //----
138
140
  // LIST UP UNION TYPES
139
141
  //----
140
- // toJSON() METHOD
141
- if (meta.resolved !== null)
142
- unions.push({
143
- type: "resolved",
144
- is: () => IsProgrammer.decode_to_json(true)(input),
145
- value: () =>
146
- decode_to_json(project)(config)(importer)(
147
- input,
148
- meta.resolved!.returns,
149
- explore,
150
- ),
151
- });
152
-
153
142
  // TUPLES
154
143
  for (const tuple of meta.tuples)
155
144
  unions.push({
@@ -195,13 +184,26 @@ export namespace MiscCloneProgrammer {
195
184
  unions.push({
196
185
  type: "set",
197
186
  is: () => ExpressionFactory.isInstanceOf("Set")(input),
198
- value: () => ts.factory.createIdentifier("{}"),
187
+ value: () =>
188
+ explore_sets(project)(config)(importer)(
189
+ input,
190
+ meta.sets,
191
+ { ...explore, from: "array" },
192
+ ),
199
193
  });
200
194
  if (meta.maps.length)
201
195
  unions.push({
202
196
  type: "map",
203
197
  is: () => ExpressionFactory.isInstanceOf("Map")(input),
204
- value: () => ts.factory.createIdentifier("{}"),
198
+ value: () =>
199
+ explore_maps(project)(config)(importer)(
200
+ input,
201
+ meta.maps,
202
+ {
203
+ ...explore,
204
+ from: "array",
205
+ },
206
+ ),
205
207
  });
206
208
  for (const native of meta.natives)
207
209
  unions.push({
@@ -216,7 +218,7 @@ export namespace MiscCloneProgrammer {
216
218
  undefined,
217
219
  undefined,
218
220
  )
219
- : ts.factory.createIdentifier("{}"),
221
+ : decode_native(native)(input),
220
222
  });
221
223
 
222
224
  // OBJECTS
@@ -251,26 +253,6 @@ export namespace MiscCloneProgrammer {
251
253
  );
252
254
  };
253
255
 
254
- const decode_to_json =
255
- (project: IProject) =>
256
- (config: FeatureProgrammer.IConfig) =>
257
- (importer: FunctionImporter) =>
258
- (
259
- input: ts.Expression,
260
- resolved: Metadata,
261
- explore: FeatureProgrammer.IExplore,
262
- ): ts.Expression => {
263
- return decode(project)(config)(importer)(
264
- ts.factory.createCallExpression(
265
- IdentifierFactory.access(input)("toJSON"),
266
- undefined,
267
- [],
268
- ),
269
- resolved,
270
- explore,
271
- );
272
- };
273
-
274
256
  const decode_object = (importer: FunctionImporter) =>
275
257
  FeatureProgrammer.decode_object({
276
258
  trace: false,
@@ -393,9 +375,204 @@ export namespace MiscCloneProgrammer {
393
375
  return CloneJoiner.tuple(children, rest);
394
376
  };
395
377
 
378
+ /* -----------------------------------------------------------
379
+ NATIVE CLASSES
380
+ ----------------------------------------------------------- */
381
+ const decode_native = (type: string) => (input: ts.Expression) =>
382
+ type === "Date" ||
383
+ type === "Uint8Array" ||
384
+ type === "Uint8ClampedArray" ||
385
+ type === "Uint16Array" ||
386
+ type === "Uint32Array" ||
387
+ type === "BigUint64Array" ||
388
+ type === "Int8Array" ||
389
+ type === "Int16Array" ||
390
+ type === "Int32Array" ||
391
+ type === "BigInt64Array" ||
392
+ type === "Float32Array" ||
393
+ type === "Float64Array"
394
+ ? decode_native_copyable(type)(input)
395
+ : type === "ArrayBuffer" || type === "SharedArrayBuffer"
396
+ ? decode_native_buffer(type)(input)
397
+ : type === "DataView"
398
+ ? decode_native_data_view(input)
399
+ : ts.factory.createCallExpression(
400
+ ts.factory.createIdentifier(type),
401
+ undefined,
402
+ [],
403
+ );
404
+
405
+ const decode_native_copyable = (type: string) => (input: ts.Expression) =>
406
+ ts.factory.createNewExpression(
407
+ ts.factory.createIdentifier(type),
408
+ undefined,
409
+ [input],
410
+ );
411
+
412
+ const decode_native_buffer =
413
+ (type: "ArrayBuffer" | "SharedArrayBuffer") => (input: ts.Expression) =>
414
+ ExpressionFactory.selfCall(
415
+ ts.factory.createBlock(
416
+ [
417
+ StatementFactory.constant(
418
+ "buffer",
419
+ ts.factory.createNewExpression(
420
+ ts.factory.createIdentifier(type),
421
+ undefined,
422
+ [IdentifierFactory.access(input)("byteLength")],
423
+ ),
424
+ ),
425
+ ts.factory.createExpressionStatement(
426
+ ts.factory.createCallExpression(
427
+ IdentifierFactory.access(
428
+ ts.factory.createNewExpression(
429
+ ts.factory.createIdentifier(
430
+ "Uint8Array",
431
+ ),
432
+ undefined,
433
+ [ts.factory.createIdentifier("buffer")],
434
+ ),
435
+ )("set"),
436
+ undefined,
437
+ [
438
+ ts.factory.createNewExpression(
439
+ ts.factory.createIdentifier(
440
+ "Uint8Array",
441
+ ),
442
+ undefined,
443
+ [input],
444
+ ),
445
+ ],
446
+ ),
447
+ ),
448
+ ts.factory.createReturnStatement(
449
+ ts.factory.createIdentifier("buffer"),
450
+ ),
451
+ ],
452
+ true,
453
+ ),
454
+ );
455
+
456
+ const decode_native_data_view = (input: ts.Expression) =>
457
+ ts.factory.createNewExpression(
458
+ ts.factory.createIdentifier("DataView"),
459
+ undefined,
460
+ [IdentifierFactory.access(input)("buffer")],
461
+ );
462
+
396
463
  /* -----------------------------------------------------------
397
464
  EXPLORERS FOR UNION TYPES
398
465
  ----------------------------------------------------------- */
466
+ const explore_sets =
467
+ (project: IProject) =>
468
+ (config: FeatureProgrammer.IConfig) =>
469
+ (importer: FunctionImporter) =>
470
+ (
471
+ input: ts.Expression,
472
+ sets: Metadata[],
473
+ explore: FeatureProgrammer.IExplore,
474
+ ): ts.Expression =>
475
+ ts.factory.createCallExpression(
476
+ UnionExplorer.set({
477
+ checker: IsProgrammer.decode(project)(importer),
478
+ decoder: (input, array, explore) =>
479
+ ts.factory.createNewExpression(
480
+ ts.factory.createIdentifier("Set"),
481
+ [TypeFactory.keyword("any")],
482
+ [
483
+ decode_array(config)(importer)(
484
+ input,
485
+ array,
486
+ explore,
487
+ ),
488
+ ],
489
+ ),
490
+ empty: ts.factory.createNewExpression(
491
+ ts.factory.createIdentifier("Set"),
492
+ [TypeFactory.keyword("any")],
493
+ [],
494
+ ),
495
+ success: ts.factory.createTrue(),
496
+ failure: (input, expected) =>
497
+ create_throw_error(importer)(expected)(input),
498
+ })([])(input, sets, explore, [], []),
499
+ undefined,
500
+ undefined,
501
+ );
502
+
503
+ const explore_maps =
504
+ (project: IProject) =>
505
+ (config: FeatureProgrammer.IConfig) =>
506
+ (importer: FunctionImporter) =>
507
+ (
508
+ input: ts.Expression,
509
+ maps: Metadata.Entry[],
510
+ explore: FeatureProgrammer.IExplore,
511
+ ): ts.Expression =>
512
+ ts.factory.createCallExpression(
513
+ UnionExplorer.map({
514
+ checker: (top, entry, explore) => {
515
+ const func = IsProgrammer.decode(project)(importer);
516
+ return ts.factory.createLogicalAnd(
517
+ func(
518
+ ts.factory.createElementAccessExpression(
519
+ top,
520
+ 0,
521
+ ),
522
+ entry[0],
523
+ {
524
+ ...explore,
525
+ postfix: `${explore.postfix}[0]`,
526
+ },
527
+ [],
528
+ [],
529
+ ),
530
+ func(
531
+ ts.factory.createElementAccessExpression(
532
+ top,
533
+ 1,
534
+ ),
535
+ entry[1],
536
+ {
537
+ ...explore,
538
+ postfix: `${explore.postfix}[1]`,
539
+ },
540
+ [],
541
+ [],
542
+ ),
543
+ );
544
+ },
545
+ decoder: (input, array, explore) =>
546
+ ts.factory.createNewExpression(
547
+ ts.factory.createIdentifier("Map"),
548
+ [
549
+ TypeFactory.keyword("any"),
550
+ TypeFactory.keyword("any"),
551
+ ],
552
+ [
553
+ decode_array(config)(importer)(
554
+ input,
555
+ array,
556
+ explore,
557
+ ),
558
+ ],
559
+ ),
560
+ empty: ts.factory.createNewExpression(
561
+ ts.factory.createIdentifier("Map"),
562
+ [
563
+ TypeFactory.keyword("any"),
564
+ TypeFactory.keyword("any"),
565
+ ],
566
+ [],
567
+ ),
568
+ success: ts.factory.createTrue(),
569
+ failure: (input, expected) =>
570
+ create_throw_error(importer)(expected)(input),
571
+ })([])(input, maps, explore, [], []),
572
+ undefined,
573
+ undefined,
574
+ );
575
+
399
576
  const explore_objects =
400
577
  (config: FeatureProgrammer.IConfig) =>
401
578
  (importer: FunctionImporter) =>
@@ -514,7 +691,7 @@ export namespace MiscCloneProgrammer {
514
691
  ),
515
692
  output: (type, name) =>
516
693
  ts.factory.createTypeReferenceNode(
517
- `typia.Primitive<${
694
+ `typia.Resolved<${
518
695
  name ??
519
696
  TypeFactory.getFullName(project.checker)(type)
520
697
  }>`,
@@ -523,7 +700,7 @@ export namespace MiscCloneProgrammer {
523
700
  prefix: PREFIX,
524
701
  trace: false,
525
702
  path: false,
526
- initializer,
703
+ initializer: initializer(importer.method),
527
704
  decoder: () => decode(project)(config)(importer),
528
705
  objector: {
529
706
  checker: () => IsProgrammer.decode(project)(importer),
@@ -547,14 +724,25 @@ export namespace MiscCloneProgrammer {
547
724
  return config;
548
725
  };
549
726
 
550
- const initializer: FeatureProgrammer.IConfig["initializer"] =
727
+ const initializer =
728
+ (method: string): FeatureProgrammer.IConfig["initializer"] =>
551
729
  ({ checker }) =>
552
730
  (type) => {
553
731
  const collection = new MetadataCollection();
554
732
  const meta = MetadataFactory.analyze(checker)({
555
- resolve: true,
733
+ escape: false,
556
734
  constant: true,
557
735
  absorb: true,
736
+ validate: (meta) => {
737
+ if (meta.natives.some((n) => n === "WeakSet"))
738
+ throw new Error(
739
+ `Error on ${method}(): WeakSet is not supported.`,
740
+ );
741
+ else if (meta.natives.some((n) => n === "WeakMap"))
742
+ throw new Error(
743
+ `Error on ${method}(): WeakMap is not supported.`,
744
+ );
745
+ },
558
746
  })(collection)(type);
559
747
  return [collection, meta];
560
748
  };
@@ -25,7 +25,7 @@ export namespace MiscIsCloneProgrammer {
25
25
  ],
26
26
  ts.factory.createUnionTypeNode([
27
27
  ts.factory.createTypeReferenceNode(
28
- `typia.Primitive<${
28
+ `typia.Resolved<${
29
29
  name ??
30
30
  TypeFactory.getFullName(project.checker)(type)
31
31
  }>`,
@@ -15,7 +15,7 @@ import { ArrayUtil } from "../../utils/ArrayUtil";
15
15
  export namespace MiscLiteralsProgrammer {
16
16
  export const write = (project: IProject) => (type: ts.Type) => {
17
17
  const meta: Metadata = MetadataFactory.analyze(project.checker)({
18
- resolve: true,
18
+ escape: true,
19
19
  constant: true,
20
20
  absorb: true,
21
21
  validate: (meta) => {
@@ -26,7 +26,9 @@ import { wrap_metadata_rest_tuple } from "../internal/wrap_metadata_rest_tuple";
26
26
  export namespace MiscPruneProgrammer {
27
27
  export const write =
28
28
  (project: IProject) => (modulo: ts.LeftHandSideExpression) => {
29
- const importer: FunctionImporter = new FunctionImporter();
29
+ const importer: FunctionImporter = new FunctionImporter(
30
+ modulo.getText(),
31
+ );
30
32
  return FeatureProgrammer.write(project)({
31
33
  ...configure(project)(importer),
32
34
  addition: (collection) => [
@@ -507,7 +509,7 @@ export namespace MiscPruneProgrammer {
507
509
  (type) => {
508
510
  const collection = new MetadataCollection();
509
511
  const meta = MetadataFactory.analyze(checker)({
510
- resolve: false,
512
+ escape: false,
511
513
  constant: true,
512
514
  absorb: true,
513
515
  })(collection)(type);
@@ -24,7 +24,7 @@ export namespace MiscValidateCloneProgrammer {
24
24
  ),
25
25
  ],
26
26
  ts.factory.createTypeReferenceNode(
27
- `typia.IValidation<typia.Primitive<${
27
+ `typia.IValidation<typia.Resolved<${
28
28
  name ?? TypeFactory.getFullName(project.checker)(type)
29
29
  }>>`,
30
30
  ),
@@ -24,7 +24,9 @@ export namespace ProtobufAssertDecodeProgrammer {
24
24
  ),
25
25
  ],
26
26
  ts.factory.createTypeReferenceNode(
27
- name ?? TypeFactory.getFullName(project.checker)(type),
27
+ `typia.Resolved<${
28
+ name ?? TypeFactory.getFullName(project.checker)(type)
29
+ }>`,
28
30
  ),
29
31
  undefined,
30
32
  ts.factory.createBlock([
@@ -41,10 +43,14 @@ export namespace ProtobufAssertDecodeProgrammer {
41
43
  ),
42
44
  StatementFactory.constant(
43
45
  "assert",
44
- AssertProgrammer.write(project)(modulo)(false)(
45
- type,
46
- name,
47
- ),
46
+ AssertProgrammer.write({
47
+ ...project,
48
+ options: {
49
+ ...project.options,
50
+ functional: false,
51
+ numeric: false,
52
+ },
53
+ })(modulo)(false)(type, name),
48
54
  ),
49
55
  StatementFactory.constant(
50
56
  "output",
@@ -55,10 +61,13 @@ export namespace ProtobufAssertDecodeProgrammer {
55
61
  ),
56
62
  ),
57
63
  ts.factory.createReturnStatement(
58
- ts.factory.createCallExpression(
59
- ts.factory.createIdentifier("assert"),
60
- undefined,
61
- [ts.factory.createIdentifier("output")],
64
+ ts.factory.createAsExpression(
65
+ ts.factory.createCallExpression(
66
+ ts.factory.createIdentifier("assert"),
67
+ undefined,
68
+ [ts.factory.createIdentifier("output")],
69
+ ),
70
+ TypeFactory.keyword("any"),
62
71
  ),
63
72
  ),
64
73
  ]),
@@ -26,7 +26,9 @@ export namespace ProtobufDecodeProgrammer {
26
26
  (project: IProject) =>
27
27
  (modulo: ts.LeftHandSideExpression) =>
28
28
  (type: ts.Type, name?: string): ts.ArrowFunction => {
29
- const importer: FunctionImporter = new FunctionImporter();
29
+ const importer: FunctionImporter = new FunctionImporter(
30
+ modulo.getText(),
31
+ );
30
32
  const collection: MetadataCollection = new MetadataCollection();
31
33
  const meta: Metadata = ProtobufFactory.metadata(modulo.getText())(
32
34
  project.checker,
@@ -60,7 +62,9 @@ export namespace ProtobufDecodeProgrammer {
60
62
  ),
61
63
  ],
62
64
  ts.factory.createTypeReferenceNode(
63
- name ?? TypeFactory.getFullName(project.checker)(type),
65
+ `typia.Resolved<${
66
+ name ?? TypeFactory.getFullName(project.checker)(type)
67
+ }>`,
64
68
  ),
65
69
  undefined,
66
70
  ts.factory.createBlock(
@@ -279,35 +283,51 @@ export namespace ProtobufDecodeProgrammer {
279
283
  tags: IMetadataTag[],
280
284
  ): ts.CaseClause[] => {
281
285
  const clauses: ts.CaseClause[] = [];
282
- const emplace = (v: ts.Expression | ts.Statement[]) =>
283
- clauses.push(
284
- ts.factory.createCaseClause(
285
- ts.factory.createNumericLiteral(index++),
286
- Array.isArray(v)
287
- ? [...v, ts.factory.createBreakStatement()]
288
- : [
289
- ts.factory.createExpressionStatement(
290
- ts.factory.createBinaryExpression(
291
- accessor,
292
- ts.factory.createToken(
293
- ts.SyntaxKind.EqualsToken,
286
+ const emplace =
287
+ (name: string) => (v: ts.Expression | ts.Statement[]) =>
288
+ clauses.push(
289
+ ts.factory.createCaseClause(
290
+ ts.factory.createNumericLiteral(index++),
291
+ Array.isArray(v)
292
+ ? [
293
+ ts.factory.createExpressionStatement(
294
+ ts.factory.createIdentifier(
295
+ `// type: ${name}`,
294
296
  ),
295
- v,
296
297
  ),
297
- ),
298
- ts.factory.createBreakStatement(),
299
- ],
300
- ),
301
- );
298
+ ...v,
299
+ ts.factory.createBreakStatement(),
300
+ ]
301
+ : [
302
+ ts.factory.createExpressionStatement(
303
+ ts.factory.createIdentifier(
304
+ `// ${name}`,
305
+ ),
306
+ ),
307
+ ts.factory.createExpressionStatement(
308
+ ts.factory.createBinaryExpression(
309
+ accessor,
310
+ ts.factory.createToken(
311
+ ts.SyntaxKind.EqualsToken,
312
+ ),
313
+ v,
314
+ ),
315
+ ),
316
+ ts.factory.createBreakStatement(),
317
+ ],
318
+ ),
319
+ );
302
320
 
303
321
  const required: boolean = meta.isRequired() && !meta.nullable;
304
322
  for (const atomic of ProtobufUtil.getAtomics(meta))
305
- emplace(decode_atomic(atomic, tags));
306
- if (meta.natives.length) emplace(decode_bytes("bytes"));
323
+ emplace(atomic)(decode_atomic(atomic, tags));
324
+ if (meta.natives.length) emplace("bytes")(decode_bytes("bytes"));
307
325
  for (const array of meta.arrays)
308
- emplace(decode_array(accessor, array, required, tags));
326
+ emplace(`Array<${array.value.getName()}>`)(
327
+ decode_array(accessor, array, required, tags),
328
+ );
309
329
  for (const map of meta.maps)
310
- emplace(
330
+ emplace(`Map<string, ${map.value.getName()}>`)(
311
331
  decode_map(project)(importer)(
312
332
  accessor,
313
333
  map,
@@ -316,7 +336,7 @@ export namespace ProtobufDecodeProgrammer {
316
336
  ),
317
337
  );
318
338
  for (const obj of meta.objects)
319
- emplace(
339
+ emplace(obj.name)(
320
340
  ProtobufUtil.isStaticObject(obj)
321
341
  ? decode_regular_object(false)(obj)
322
342
  : decode_dynamic_object(project)(importer)(