typia 3.5.0-dev.20221219 → 3.5.0-dev.20230107

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 (136) hide show
  1. package/README.md +62 -17
  2. package/lib/executable/internal/TypiaSetupWizard.d.ts +6 -2
  3. package/lib/executable/internal/TypiaSetupWizard.js +25 -23
  4. package/lib/executable/internal/TypiaSetupWizard.js.map +1 -1
  5. package/lib/executable/typia.js +11 -10
  6. package/lib/executable/typia.js.map +1 -1
  7. package/lib/factories/MetadataCollection.d.ts +1 -9
  8. package/lib/factories/MetadataCollection.js +2 -77
  9. package/lib/factories/MetadataCollection.js.map +1 -1
  10. package/lib/factories/MetadataTagFactory.js +4 -1
  11. package/lib/factories/MetadataTagFactory.js.map +1 -1
  12. package/lib/factories/ProtocolFactory.d.ts +0 -1
  13. package/lib/factories/ProtocolFactory.js +0 -6
  14. package/lib/factories/ProtocolFactory.js.map +1 -1
  15. package/lib/factories/internal/metadata/iterate_metadata_object.js +4 -2
  16. package/lib/factories/internal/metadata/iterate_metadata_object.js.map +1 -1
  17. package/lib/factories/internal/protocols/iterate_protocol_main.js +2 -3
  18. package/lib/factories/internal/protocols/iterate_protocol_main.js.map +1 -1
  19. package/lib/factories/internal/protocols/iterate_protocol_map.js +3 -4
  20. package/lib/factories/internal/protocols/iterate_protocol_map.js.map +1 -1
  21. package/lib/factories/internal/protocols/iterate_protocol_metadata.js +2 -0
  22. package/lib/factories/internal/protocols/iterate_protocol_metadata.js.map +1 -1
  23. package/lib/factories/internal/protocols/iterate_protocol_repeated.js +3 -4
  24. package/lib/factories/internal/protocols/iterate_protocol_repeated.js.map +1 -1
  25. package/lib/factories/internal/protocols/iterate_protocol_tuple.js +3 -4
  26. package/lib/factories/internal/protocols/iterate_protocol_tuple.js.map +1 -1
  27. package/lib/functional/$number.js +2 -9
  28. package/lib/functional/$number.js.map +1 -1
  29. package/lib/metadata/Metadata.js +32 -29
  30. package/lib/metadata/Metadata.js.map +1 -1
  31. package/lib/programmers/AssertParseProgrammer.js +12 -1
  32. package/lib/programmers/AssertParseProgrammer.js.map +1 -1
  33. package/lib/programmers/AssertProgrammer.js +3 -2
  34. package/lib/programmers/AssertProgrammer.js.map +1 -1
  35. package/lib/programmers/AssertStringifyProgrammer.js +13 -2
  36. package/lib/programmers/AssertStringifyProgrammer.js.map +1 -1
  37. package/lib/programmers/CheckerProgrammer.d.ts +1 -0
  38. package/lib/programmers/CheckerProgrammer.js +153 -138
  39. package/lib/programmers/CheckerProgrammer.js.map +1 -1
  40. package/lib/programmers/IsParseProgrammer.js +12 -1
  41. package/lib/programmers/IsParseProgrammer.js.map +1 -1
  42. package/lib/programmers/IsProgrammer.js +5 -2
  43. package/lib/programmers/IsProgrammer.js.map +1 -1
  44. package/lib/programmers/IsStringifyProgrammer.js +13 -2
  45. package/lib/programmers/IsStringifyProgrammer.js.map +1 -1
  46. package/lib/programmers/MessageProgrammer.js +11 -6
  47. package/lib/programmers/MessageProgrammer.js.map +1 -1
  48. package/lib/programmers/StringifyProgrammer.js +6 -1
  49. package/lib/programmers/StringifyProgrammer.js.map +1 -1
  50. package/lib/programmers/ValidateParseProgrammer.js +12 -1
  51. package/lib/programmers/ValidateParseProgrammer.js.map +1 -1
  52. package/lib/programmers/ValidateProgrammer.js +3 -2
  53. package/lib/programmers/ValidateProgrammer.js.map +1 -1
  54. package/lib/programmers/ValidateStringifyProgrammer.js +13 -2
  55. package/lib/programmers/ValidateStringifyProgrammer.js.map +1 -1
  56. package/lib/programmers/helpers/OptionPredicator.d.ts +2 -1
  57. package/lib/programmers/helpers/OptionPredicator.js +8 -6
  58. package/lib/programmers/helpers/OptionPredicator.js.map +1 -1
  59. package/lib/programmers/helpers/UnionExplorer.d.ts +23 -29
  60. package/lib/programmers/helpers/UnionExplorer.js +29 -41
  61. package/lib/programmers/helpers/UnionExplorer.js.map +1 -1
  62. package/lib/programmers/internal/application_object.js +9 -9
  63. package/lib/programmers/internal/application_object.js.map +1 -1
  64. package/lib/programmers/internal/application_schema.js +14 -6
  65. package/lib/programmers/internal/application_schema.js.map +1 -1
  66. package/lib/programmers/internal/check_array.js +4 -32
  67. package/lib/programmers/internal/check_array.js.map +1 -1
  68. package/lib/programmers/internal/check_array_length.d.ts +1 -0
  69. package/lib/programmers/internal/check_array_length.js +47 -0
  70. package/lib/programmers/internal/check_array_length.js.map +1 -0
  71. package/lib/programmers/internal/check_bigint.d.ts +3 -0
  72. package/lib/programmers/internal/check_bigint.js +97 -0
  73. package/lib/programmers/internal/check_bigint.js.map +1 -0
  74. package/lib/programmers/internal/check_number.js +21 -23
  75. package/lib/programmers/internal/check_number.js.map +1 -1
  76. package/lib/programmers/internal/check_union_array_like.d.ts +21 -0
  77. package/lib/programmers/internal/check_union_array_like.js +83 -0
  78. package/lib/programmers/internal/check_union_array_like.js.map +1 -0
  79. package/lib/programmers/internal/check_union_tuple.d.ts +1 -0
  80. package/lib/programmers/internal/check_union_tuple.js +11 -0
  81. package/lib/programmers/internal/check_union_tuple.js.map +1 -0
  82. package/lib/schemas/IJsonSchema.d.ts +3 -5
  83. package/lib/transformers/ITransformOptions.d.ts +43 -2
  84. package/lib/transformers/features/miscellaneous/ApplicationTransformer.js +5 -3
  85. package/lib/transformers/features/miscellaneous/ApplicationTransformer.js.map +1 -1
  86. package/lib/transformers/features/stringifiers/StringifyTransformer.js +12 -1
  87. package/lib/transformers/features/stringifiers/StringifyTransformer.js.map +1 -1
  88. package/lib/utils/NameEncoder.d.ts +4 -0
  89. package/lib/utils/NameEncoder.js +89 -0
  90. package/lib/utils/NameEncoder.js.map +1 -0
  91. package/package.json +6 -5
  92. package/src/executable/internal/TypiaSetupWizard.ts +37 -24
  93. package/src/executable/typia.ts +7 -5
  94. package/src/factories/MetadataCollection.ts +2 -43
  95. package/src/factories/MetadataTagFactory.ts +5 -1
  96. package/src/factories/ProtocolFactory.ts +0 -5
  97. package/src/factories/internal/metadata/iterate_metadata_object.ts +6 -3
  98. package/src/factories/internal/protocols/iterate_protocol_main.ts +2 -3
  99. package/src/factories/internal/protocols/iterate_protocol_map.ts +3 -5
  100. package/src/factories/internal/protocols/iterate_protocol_metadata.ts +1 -0
  101. package/src/factories/internal/protocols/iterate_protocol_repeated.ts +3 -6
  102. package/src/factories/internal/protocols/iterate_protocol_tuple.ts +3 -6
  103. package/src/functional/$number.ts +2 -9
  104. package/src/metadata/Metadata.ts +10 -7
  105. package/src/programmers/AssertParseProgrammer.ts +11 -1
  106. package/src/programmers/AssertProgrammer.ts +4 -3
  107. package/src/programmers/AssertStringifyProgrammer.ts +22 -2
  108. package/src/programmers/CheckerProgrammer.ts +258 -200
  109. package/src/programmers/IsParseProgrammer.ts +11 -1
  110. package/src/programmers/IsProgrammer.ts +5 -2
  111. package/src/programmers/IsStringifyProgrammer.ts +22 -2
  112. package/src/programmers/MessageProgrammer.ts +12 -6
  113. package/src/programmers/StringifyProgrammer.ts +7 -1
  114. package/src/programmers/ValidateParseProgrammer.ts +11 -1
  115. package/src/programmers/ValidateProgrammer.ts +3 -2
  116. package/src/programmers/ValidateStringifyProgrammer.ts +22 -2
  117. package/src/programmers/helpers/OptionPredicator.ts +7 -10
  118. package/src/programmers/helpers/UnionExplorer.ts +75 -238
  119. package/src/programmers/internal/application_default.ts +1 -1
  120. package/src/programmers/internal/application_object.ts +5 -5
  121. package/src/programmers/internal/application_schema.ts +20 -5
  122. package/src/programmers/internal/check_array.ts +3 -25
  123. package/src/programmers/internal/check_array_length.ts +45 -0
  124. package/src/programmers/internal/check_bigint.ts +85 -0
  125. package/src/programmers/internal/check_number.ts +45 -51
  126. package/src/programmers/internal/check_union_array_like.ts +242 -0
  127. package/src/programmers/internal/check_union_tuple.ts +33 -0
  128. package/src/schemas/IJsonSchema.ts +4 -6
  129. package/src/transformers/ITransformOptions.ts +45 -2
  130. package/src/transformers/features/miscellaneous/ApplicationTransformer.ts +7 -3
  131. package/src/transformers/features/stringifiers/StringifyTransformer.ts +11 -1
  132. package/src/utils/NameEncoder.ts +32 -0
  133. package/lib/transformers/features/miscellaneous/CreateInstanceTransformer.d.ts +0 -5
  134. package/lib/transformers/features/miscellaneous/CreateInstanceTransformer.js +0 -29
  135. package/lib/transformers/features/miscellaneous/CreateInstanceTransformer.js.map +0 -1
  136. package/src/transformers/features/miscellaneous/CreateInstanceTransformer.ts +0 -41
@@ -0,0 +1 @@
1
+ {"version":3,"file":"check_union_tuple.js","sourceRoot":"","sources":["../../../src/programmers/internal/check_union_tuple.ts"],"names":[],"mappings":";;;AAOA,0DAAyD;AAOlD,IAAM,iBAAiB,GAC1B,UACI,OAAiB,EACjB,MAAiC,EACjC,QAA0B;IAE9B,OAAA,UACI,MAAqB,EACrB,QAAoB,EACpB,OAAmC,EACnC,IAAoB,EACpB,KAAoB;QAEpB,OAAA,qCAAiB,CAAC,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,CAAC,CAC3D,KAAK,EACL,QAAQ,EACR,OAAO,EACP,IAAI,CACP;IALD,CAKC;AAZL,CAYK,CAAC;AAlBG,QAAA,iBAAiB,qBAkBpB"}
@@ -3,11 +3,11 @@ import { IMetadataTag } from "../metadata/IMetadataTag";
3
3
  import { Atomic } from "../typings/Atomic";
4
4
  export type IJsonSchema = IJsonSchema.NotUnknown | IJsonSchema.IUnknown;
5
5
  export declare namespace IJsonSchema {
6
- type NotUnknown = IEnumeration<"boolean"> | IEnumeration<"number"> | IEnumeration<"bigint"> | IEnumeration<"string"> | IBoolean | INumber | IBigInt | IString | IArray | ITuple | IOneOf | IReference | IRecursiveReference | INullOnly;
7
- interface IEnumeration<Literal extends Atomic.Literal> extends IAtomic<Literal> {
6
+ type NotUnknown = IEnumeration<"boolean"> | IEnumeration<"number"> | IEnumeration<"string"> | IBoolean | INumber | IString | IArray | ITuple | IOneOf | IReference | IRecursiveReference | INullOnly;
7
+ interface IEnumeration<Literal extends Exclude<Atomic.Literal, "bigint">> extends IAtomic<Literal> {
8
8
  enum: Array<Atomic.Mapper[Literal]>;
9
9
  }
10
- interface IAtomic<Literal extends Atomic.Literal> extends ISignificant<Literal> {
10
+ interface IAtomic<Literal extends Exclude<Atomic.Literal, "bigint">> extends ISignificant<Literal> {
11
11
  default?: Atomic.Mapper[Literal];
12
12
  }
13
13
  interface IString extends IAtomic<"string"> {
@@ -25,8 +25,6 @@ export declare namespace IJsonSchema {
25
25
  }
26
26
  interface IBoolean extends IAtomic<"boolean"> {
27
27
  }
28
- interface IBigInt extends IAtomic<"bigint"> {
29
- }
30
28
  interface IArray extends ISignificant<"array"> {
31
29
  items: IJsonSchema;
32
30
  minItems?: number;
@@ -1,4 +1,45 @@
1
1
  export interface ITransformOptions {
2
- functional?: boolean | "checker" | "stringify";
3
- numeric?: boolean | "checker" | "stringify";
2
+ /**
3
+ * Whether to validate finite number or not.
4
+ *
5
+ * If configured true, number typed values would be validated by Number.isNaN().
6
+ *
7
+ * However, whatever you configure, it would be ignored when marshaling or parsing.
8
+ *
9
+ * - when marshaling, always be true
10
+ * - assertStringify()
11
+ * - validateEncode()
12
+ * - when parsing, always be false
13
+ * - assertParse()
14
+ * - isDecode()
15
+ *
16
+ * @default false
17
+ */
18
+ finite?: boolean;
19
+ /**
20
+ * Whether to validate finite number or not.
21
+ *
22
+ * If configured true, number typed values would be validated by Number.isFinite().
23
+ *
24
+ * However, whatever you configure, it can be ignored in below case.
25
+ *
26
+ * - when `finite` option is true, this option would be ignored
27
+ * - when marshaling, always be true
28
+ * - assertStringify()
29
+ * - validateEncode()
30
+ * - when parsing, always be false
31
+ * - assertParse()
32
+ * - isDecode()
33
+ *
34
+ * @default false
35
+ */
36
+ numeric?: boolean;
37
+ /**
38
+ * Whether to validate functional type or not.
39
+ *
40
+ * However, whatever you configure, it becomes false when marshaling or parsing.
41
+ *
42
+ * @default false
43
+ */
44
+ functional?: boolean;
4
45
  }
@@ -32,13 +32,15 @@ var ApplicationTransformer;
32
32
  ? "#/components/schemas"
33
33
  : "components#/schemas";
34
34
  });
35
- var collection = new MetadataCollection_1.MetadataCollection({
36
- replace: MetadataCollection_1.MetadataCollection.replace,
37
- });
35
+ var collection = new MetadataCollection_1.MetadataCollection();
38
36
  var metadatas = types.map(function (type) {
39
37
  return MetadataFactory_1.MetadataFactory.generate(checker, collection, type, {
40
38
  resolve: true,
41
39
  constant: true,
40
+ validate: function (meta) {
41
+ if (meta.atomics.find(function (str) { return str === "bigint"; }))
42
+ throw new Error("Error on typia.application(): does not allow bigint type.");
43
+ },
42
44
  });
43
45
  });
44
46
  var app = ApplicationProgrammer_1.ApplicationProgrammer.generate(metadatas, {
@@ -1 +1 @@
1
- {"version":3,"file":"ApplicationTransformer.js","sourceRoot":"","sources":["../../../../src/transformers/features/miscellaneous/ApplicationTransformer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ApplicationTransformer.js","sourceRoot":"","sources":["../../../../src/transformers/features/miscellaneous/ApplicationTransformer.ts"],"names":[],"mappings":";;;;;;AAAA,0DAA4B;AAE5B,oEAAmE;AACnE,4EAA2E;AAC3E,sEAAqE;AAKrE,oFAAmF;AAInF,IAAiB,sBAAsB,CAiGtC;AAjGD,WAAiB,sBAAsB;IACnC,SAAgB,SAAS,CACrB,EAAqB,EACrB,OAAkC,EAClC,UAA6B;;YAF3B,OAAO,aAAA;QAIT,IAAI,CAAC,CAAA,MAAA,UAAU,CAAC,aAAa,0CAAE,MAAM,CAAA;YACjC,MAAM,IAAI,KAAK,sDAAmC,CAAC;QAMvD,IAAM,GAAG,GAAY,UAAU,CAAC,aAAa,CAAC,CAAC,CAAE,CAAC;QAClD,IAAI,CAAC,oBAAE,CAAC,eAAe,CAAC,GAAG,CAAC;YAAE,OAAO,UAAU,CAAC;aAC3C,IAAI,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAC,KAAK,IAAK,OAAA,CAAC,oBAAE,CAAC,UAAU,CAAC,KAAK,CAAC,EAArB,CAAqB,CAAC;YACxD,OAAO,UAAU,CAAC;QAGtB,IAAM,KAAK,GAAc,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,UAAC,KAAK;YAC5C,OAAA,OAAO,CAAC,mBAAmB,CAAC,KAAoB,CAAC;QAAjD,CAAiD,CACpD,CAAC;QACF,IAAI,KAAK,CAAC,IAAI,CAAC,UAAC,CAAC,IAAK,OAAA,CAAC,CAAC,eAAe,EAAE,EAAnB,CAAmB,CAAC;YACtC,MAAM,IAAI,KAAK,oEAAgC,CAAC;QAGpD,IAAM,OAAO,GAAsB,aAAa,CAC5C,OAAO,EACP,SAAS,EACT,UAAU,CAAC,aAAa,CAAC,CAAC,CAAC,EAC3B,UAAC,GAAG,IAAK,OAAA,GAAG,KAAK,SAAS,IAAI,GAAG,KAAK,KAAK,EAAlC,CAAkC,EAC3C,cAAM,OAAA,SAAS,EAAT,CAAS,CAClB,CAAC;QACF,IAAM,MAAM,GAAW,aAAa,CAChC,OAAO,EACP,QAAQ,EACR,UAAU,CAAC,aAAa,CAAC,CAAC,CAAC,EAC3B,cAAM,OAAA,IAAI,EAAJ,CAAI,EACV;YACI,OAAA,OAAO,KAAK,SAAS;gBACjB,CAAC,CAAC,sBAAsB;gBACxB,CAAC,CAAC,qBAAqB;QAF3B,CAE2B,CAClC,CAAC;QAMF,IAAM,UAAU,GAAuB,IAAI,uCAAkB,EAAE,CAAC;QAChE,IAAM,SAAS,GAAoB,KAAK,CAAC,GAAG,CAAC,UAAC,IAAI;YAC9C,OAAA,iCAAe,CAAC,QAAQ,CAAC,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE;gBAChD,OAAO,EAAE,IAAI;gBACb,QAAQ,EAAE,IAAI;gBACd,QAAQ,EAAE,UAAC,IAAI;oBACX,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,UAAC,GAAG,IAAK,OAAA,GAAG,KAAK,QAAQ,EAAhB,CAAgB,CAAC;wBAC5C,MAAM,IAAI,KAAK,6DAAwB,CAAC;gBAChD,CAAC;aACJ,CAAC;QAPF,CAOE,CACL,CAAC;QAGF,IAAM,GAAG,GAAqB,6CAAqB,CAAC,QAAQ,CACxD,SAAS,EACT;YACI,OAAO,SAAA;YACP,MAAM,QAAA;SACT,CACJ,CAAC;QAGF,OAAO,+BAAc,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;IACxC,CAAC;IAtEe,gCAAS,YAsExB,CAAA;IAED,SAAS,aAAa,CAClB,OAAuB,EACvB,IAAY,EACZ,IAA6B,EAC7B,UAAsC,EACtC,SAAkB;QAElB,IAAI,CAAC,IAAI;YAAE,OAAO,SAAS,EAAE,CAAC;QAG9B,IAAM,IAAI,GAAY,OAAO,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC;QACxD,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;YACjB,MAAM,IAAI,KAAK,CACX,2DAAmD,IAAI,yBAAqB,CAC/E,CAAC;QAGN,IAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;QACzB,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,UAAU,CAAC,KAAK,CAAC,KAAK,KAAK;YACxD,MAAM,IAAI,KAAK,CACX,4EAAoE,IAAI,QAAI,CAC/E,CAAC;QACN,OAAO,KAAU,CAAC;IACtB,CAAC;AACL,CAAC,EAjGgB,sBAAsB,GAAtB,8BAAsB,KAAtB,8BAAsB,QAiGtC"}
@@ -1,4 +1,15 @@
1
1
  "use strict";
2
+ var __assign = (this && this.__assign) || function () {
3
+ __assign = Object.assign || function(t) {
4
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
5
+ s = arguments[i];
6
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
7
+ t[p] = s[p];
8
+ }
9
+ return t;
10
+ };
11
+ return __assign.apply(this, arguments);
12
+ };
2
13
  var __importDefault = (this && this.__importDefault) || function (mod) {
3
14
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
15
  };
@@ -16,7 +27,7 @@ var StringifyTransformer;
16
27
  : project.checker.getTypeAtLocation(expression.arguments[0]);
17
28
  if (type.isTypeParameter())
18
29
  throw new Error("Error on typia.stringify(): non-specified generic argument.");
19
- return typescript_1.default.factory.createCallExpression(StringifyProgrammer_1.StringifyProgrammer.generate(project, modulo)(type), undefined, [expression.arguments[0]]);
30
+ return typescript_1.default.factory.createCallExpression(StringifyProgrammer_1.StringifyProgrammer.generate(__assign(__assign({}, project), { options: __assign(__assign({}, project.options), { functional: false, numeric: true }) }), modulo)(type), undefined, [expression.arguments[0]]);
20
31
  }
21
32
  StringifyTransformer.transform = transform;
22
33
  })(StringifyTransformer = exports.StringifyTransformer || (exports.StringifyTransformer = {}));
@@ -1 +1 @@
1
- {"version":3,"file":"StringifyTransformer.js","sourceRoot":"","sources":["../../../../src/transformers/features/stringifiers/StringifyTransformer.ts"],"names":[],"mappings":";;;;;;AAAA,0DAA4B;AAE5B,gFAA+E;AAI/E,IAAiB,oBAAoB,CAwBpC;AAxBD,WAAiB,oBAAoB;IACjC,SAAgB,SAAS,CACrB,OAAiB,EACjB,MAAiC,EACjC,UAA6B;QAE7B,IAAI,UAAU,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC;YACjC,MAAM,IAAI,KAAK,+CAA8B,CAAC;QAElD,IAAM,IAAI,GACN,UAAU,CAAC,aAAa,IAAI,UAAU,CAAC,aAAa,CAAC,CAAC,CAAC;YACnD,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,mBAAmB,CAC/B,UAAU,CAAC,aAAa,CAAC,CAAC,CAAC,CAC9B;YACH,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,iBAAiB,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAE,CAAC,CAAC;QACtE,IAAI,IAAI,CAAC,eAAe,EAAE;YACtB,MAAM,IAAI,KAAK,+DAAgC,CAAC;QAEpD,OAAO,oBAAE,CAAC,OAAO,CAAC,oBAAoB,CAClC,yCAAmB,CAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,IAAI,CAAC,EACnD,SAAS,EACT,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAE,CAAC,CAC7B,CAAC;IACN,CAAC;IAtBe,8BAAS,YAsBxB,CAAA;AACL,CAAC,EAxBgB,oBAAoB,GAApB,4BAAoB,KAApB,4BAAoB,QAwBpC"}
1
+ {"version":3,"file":"StringifyTransformer.js","sourceRoot":"","sources":["../../../../src/transformers/features/stringifiers/StringifyTransformer.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,0DAA4B;AAE5B,gFAA+E;AAI/E,IAAiB,oBAAoB,CAkCpC;AAlCD,WAAiB,oBAAoB;IACjC,SAAgB,SAAS,CACrB,OAAiB,EACjB,MAAiC,EACjC,UAA6B;QAE7B,IAAI,UAAU,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC;YACjC,MAAM,IAAI,KAAK,+CAA8B,CAAC;QAElD,IAAM,IAAI,GACN,UAAU,CAAC,aAAa,IAAI,UAAU,CAAC,aAAa,CAAC,CAAC,CAAC;YACnD,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,mBAAmB,CAC/B,UAAU,CAAC,aAAa,CAAC,CAAC,CAAC,CAC9B;YACH,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,iBAAiB,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAE,CAAC,CAAC;QACtE,IAAI,IAAI,CAAC,eAAe,EAAE;YACtB,MAAM,IAAI,KAAK,+DAAgC,CAAC;QAEpD,OAAO,oBAAE,CAAC,OAAO,CAAC,oBAAoB,CAClC,yCAAmB,CAAC,QAAQ,uBAEjB,OAAO,KACV,OAAO,wBACA,OAAO,CAAC,OAAO,KAClB,UAAU,EAAE,KAAK,EACjB,OAAO,EAAE,IAAI,QAGrB,MAAM,CACT,CAAC,IAAI,CAAC,EACP,SAAS,EACT,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAE,CAAC,CAC7B,CAAC;IACN,CAAC;IAhCe,8BAAS,YAgCxB,CAAA;AACL,CAAC,EAlCgB,oBAAoB,GAApB,4BAAoB,KAApB,4BAAoB,QAkCpC"}
@@ -0,0 +1,4 @@
1
+ export declare namespace NameEncoder {
2
+ function encode(str: string): string;
3
+ function decode(str: string): string;
4
+ }
@@ -0,0 +1,89 @@
1
+ "use strict";
2
+ var __values = (this && this.__values) || function(o) {
3
+ var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
4
+ if (m) return m.call(o);
5
+ if (o && typeof o.length === "number") return {
6
+ next: function () {
7
+ if (o && i >= o.length) o = void 0;
8
+ return { value: o && o[i++], done: !o };
9
+ }
10
+ };
11
+ throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
12
+ };
13
+ var __read = (this && this.__read) || function (o, n) {
14
+ var m = typeof Symbol === "function" && o[Symbol.iterator];
15
+ if (!m) return o;
16
+ var i = m.call(o), r, ar = [], e;
17
+ try {
18
+ while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
19
+ }
20
+ catch (error) { e = { error: error }; }
21
+ finally {
22
+ try {
23
+ if (r && !r.done && (m = i["return"])) m.call(i);
24
+ }
25
+ finally { if (e) throw e.error; }
26
+ }
27
+ return ar;
28
+ };
29
+ Object.defineProperty(exports, "__esModule", { value: true });
30
+ exports.NameEncoder = void 0;
31
+ var NameEncoder;
32
+ (function (NameEncoder) {
33
+ function encode(str) {
34
+ var e_1, _a;
35
+ try {
36
+ for (var REPLACERS_1 = __values(REPLACERS), REPLACERS_1_1 = REPLACERS_1.next(); !REPLACERS_1_1.done; REPLACERS_1_1 = REPLACERS_1.next()) {
37
+ var _b = __read(REPLACERS_1_1.value, 2), before = _b[0], after = _b[1];
38
+ str = str.split(before).join(after);
39
+ }
40
+ }
41
+ catch (e_1_1) { e_1 = { error: e_1_1 }; }
42
+ finally {
43
+ try {
44
+ if (REPLACERS_1_1 && !REPLACERS_1_1.done && (_a = REPLACERS_1.return)) _a.call(REPLACERS_1);
45
+ }
46
+ finally { if (e_1) throw e_1.error; }
47
+ }
48
+ return str;
49
+ }
50
+ NameEncoder.encode = encode;
51
+ function decode(str) {
52
+ var e_2, _a;
53
+ try {
54
+ for (var REPLACERS_2 = __values(REPLACERS), REPLACERS_2_1 = REPLACERS_2.next(); !REPLACERS_2_1.done; REPLACERS_2_1 = REPLACERS_2.next()) {
55
+ var _b = __read(REPLACERS_2_1.value, 2), before = _b[0], after = _b[1];
56
+ if (after !== "")
57
+ str = str.split(after).join(before);
58
+ }
59
+ }
60
+ catch (e_2_1) { e_2 = { error: e_2_1 }; }
61
+ finally {
62
+ try {
63
+ if (REPLACERS_2_1 && !REPLACERS_2_1.done && (_a = REPLACERS_2.return)) _a.call(REPLACERS_2);
64
+ }
65
+ finally { if (e_2) throw e_2.error; }
66
+ }
67
+ return str;
68
+ }
69
+ NameEncoder.decode = decode;
70
+ })(NameEncoder = exports.NameEncoder || (exports.NameEncoder = {}));
71
+ var REPLACERS = [
72
+ ["$", "_dollar_"],
73
+ ["&", "_and_"],
74
+ ["|", "_or_"],
75
+ ["{", "_blt_"],
76
+ ["}", "_bgt_"],
77
+ ["<", "_lt_"],
78
+ [">", "_gt_"],
79
+ ["(", "_lp_"],
80
+ [")", "_rp_"],
81
+ ["[", "_alt_"],
82
+ ["]", "_agt_"],
83
+ [",", "_comma_"],
84
+ ["`", "_backquote_"],
85
+ ["'", "_singlequote_"],
86
+ ['"', "_doublequote_"],
87
+ [" ", "_space_"],
88
+ ];
89
+ //# sourceMappingURL=NameEncoder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NameEncoder.js","sourceRoot":"","sources":["../../src/utils/NameEncoder.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,IAAiB,WAAW,CAY3B;AAZD,WAAiB,WAAW;IACxB,SAAgB,MAAM,CAAC,GAAW;;;YAC9B,KAA8B,IAAA,cAAA,SAAA,SAAS,CAAA,oCAAA;gBAA5B,IAAA,KAAA,8BAAe,EAAd,MAAM,QAAA,EAAE,KAAK,QAAA;gBACrB,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;aAAA;;;;;;;;;QACxC,OAAO,GAAG,CAAC;IACf,CAAC;IAJe,kBAAM,SAIrB,CAAA;IAED,SAAgB,MAAM,CAAC,GAAW;;;YAC9B,KAA8B,IAAA,cAAA,SAAA,SAAS,CAAA,oCAAA;gBAA5B,IAAA,KAAA,8BAAe,EAAd,MAAM,QAAA,EAAE,KAAK,QAAA;gBACrB,IAAI,KAAK,KAAK,EAAE;oBAAE,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;aAAA;;;;;;;;;QAC1D,OAAO,GAAG,CAAC;IACf,CAAC;IAJe,kBAAM,SAIrB,CAAA;AACL,CAAC,EAZgB,WAAW,GAAX,mBAAW,KAAX,mBAAW,QAY3B;AAED,IAAM,SAAS,GAAuB;IAClC,CAAC,GAAG,EAAE,UAAU,CAAC;IACjB,CAAC,GAAG,EAAE,OAAO,CAAC;IACd,CAAC,GAAG,EAAE,MAAM,CAAC;IACb,CAAC,GAAG,EAAE,OAAO,CAAC;IACd,CAAC,GAAG,EAAE,OAAO,CAAC;IACd,CAAC,GAAG,EAAE,MAAM,CAAC;IACb,CAAC,GAAG,EAAE,MAAM,CAAC;IACb,CAAC,GAAG,EAAE,MAAM,CAAC;IACb,CAAC,GAAG,EAAE,MAAM,CAAC;IACb,CAAC,GAAG,EAAE,OAAO,CAAC;IACd,CAAC,GAAG,EAAE,OAAO,CAAC;IACd,CAAC,GAAG,EAAE,SAAS,CAAC;IAChB,CAAC,GAAG,EAAE,aAAa,CAAC;IACpB,CAAC,GAAG,EAAE,eAAe,CAAC;IACtB,CAAC,GAAG,EAAE,eAAe,CAAC;IACtB,CAAC,GAAG,EAAE,SAAS,CAAC;CACnB,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "typia",
3
- "version": "3.5.0-dev.20221219",
3
+ "version": "3.5.0-dev.20230107",
4
4
  "description": "Runtime type checkers and 5x faster JSON.stringify() function",
5
5
  "main": "lib/index.js",
6
6
  "typings": "lib/index.d.ts",
@@ -8,19 +8,20 @@
8
8
  "typia": "./lib/executable/typia.js"
9
9
  },
10
10
  "scripts": {
11
- "benchmark": "npm run build:test && node bin/benchmark",
11
+ "benchmark": "npm run build:benchmark && node measure/benchmark",
12
12
  "build": "rimraf lib && ttsc --removeComments --declaration false && ttsc --emitDeclarationOnly",
13
13
  "build:test": "rimraf bin && ttsc -p tsconfig.test.json",
14
+ "build:benchmark": "rimraf measure && ttsc -p tsconfig.benchmark.json",
14
15
  "build:test:prettier": "npm run build:test && prettier --write ./bin/**/*.js",
15
16
  "dev": "rimraf lib && ttsc --watch",
16
17
  "dev:test": "rimraf bin && ttsc -p tsconfig.test.json --watch",
17
18
  "eslint": "eslint ./**/*.ts",
18
19
  "eslint:fix": "eslint ./**/*.ts --fix",
19
20
  "issue": "node test/issue",
21
+ "package:latest": "ts-node build/publish.ts latest",
22
+ "package:next": "ts-node build/publish.ts next",
23
+ "package:deprecate": "npm deprecate typescript-json \"Renamed to typia\"",
20
24
  "prettier": "prettier --write ./**/*.ts",
21
- "publish:latest": "ts-node build/publish.ts latest",
22
- "publish:next": "ts-node build/publish.ts next",
23
- "publish:deprecate": "npm deprecate typescript-json \"Renamed to typia\"",
24
25
  "test": "node bin/test",
25
26
  "test:generate": "ts-node -P tsconfig.test.json build/test.ts",
26
27
  "test:manual": "node test/manual"
@@ -3,19 +3,24 @@ import type Comment from "comment-json";
3
3
  import fs from "fs";
4
4
 
5
5
  export namespace TypiaSetupWizard {
6
- export async function ttypescript(manager: string): Promise<void> {
6
+ export interface IArguments {
7
+ manager: "npm" | "pnpm" | "yarn";
8
+ project: string;
9
+ }
10
+
11
+ export async function ttypescript(args: IArguments): Promise<void> {
7
12
  // INSTALL
8
- const pack: any = await prepare(manager);
9
- add(manager)(pack)("ttypescript", true);
10
- add(manager)(pack)("ts-node", true);
13
+ const pack: any = await prepare(args.manager);
14
+ add(args.manager)(pack)("ttypescript", true);
15
+ add(args.manager)(pack)("ts-node", true);
11
16
 
12
17
  // TSCONFIG.JSON
13
- await configure(manager)(pack);
18
+ await configure(args)(pack);
14
19
  }
15
20
 
16
- export async function tsPatch(manager: string): Promise<void> {
21
+ export async function tsPatch(args: IArguments): Promise<void> {
17
22
  // INSTALL
18
- add(manager)(await prepare(manager))("ts-patch", true);
23
+ add(args.manager)(await prepare(args.manager))("ts-patch", true);
19
24
  execute("npx ts-patch install");
20
25
 
21
26
  // PACKAGE.JSON
@@ -37,7 +42,7 @@ export namespace TypiaSetupWizard {
37
42
  );
38
43
 
39
44
  // TSCONFIG.JSON
40
- await configure(manager)(pack);
45
+ await configure(args)(pack);
41
46
  }
42
47
 
43
48
  async function prepare(manager: string): Promise<any> {
@@ -48,29 +53,31 @@ export namespace TypiaSetupWizard {
48
53
  await fs.promises.readFile("package.json", "utf8"),
49
54
  );
50
55
  const wizard = add(manager)(pack);
51
-
52
56
  wizard("typia", false);
53
57
  wizard("typescript", true);
54
58
  return pack;
55
59
  }
56
60
 
57
61
  const configure =
58
- (manager: string) =>
62
+ (args: IArguments) =>
59
63
  async (pack: any): Promise<void> => {
60
64
  // VALIDATE PRERATATION
61
- if (fs.existsSync("tsconfig.json") === false) {
62
- execute("npx tsc --init");
63
- if (fs.existsSync("tsconfig.json") === false)
64
- halt(() => {})("tsconfig.json file does not exist.");
65
+ if (fs.existsSync(args.project) === false) {
66
+ if (args.project === "tsconfig.json") execute("npx tsc --init");
67
+ if (fs.existsSync(args.project) === false)
68
+ halt(() => {})(`${args.project} file does not exist.`);
65
69
  }
66
70
 
71
+ // INSTALL COMMENT-JSON FOR A WHILE
67
72
  const temporary: boolean = !fs.existsSync(
68
73
  "node_modules/comment-json",
69
74
  );
70
- if (temporary === true) add(manager)(pack)("comment-json", true);
75
+ if (temporary === true)
76
+ add(args.manager)(pack)("comment-json", true);
71
77
 
72
78
  const halter: (msg: string) => never = halt(() => {
73
- if (temporary === true) remove(manager)("comment-json", true);
79
+ if (temporary === true)
80
+ remove(args.manager)("comment-json", true);
74
81
  });
75
82
 
76
83
  // READ TSCONFIG FILE
@@ -78,16 +85,17 @@ export namespace TypiaSetupWizard {
78
85
  process.cwd() + "/node_modules/comment-json"
79
86
  );
80
87
  const config: Comment.CommentObject = Comment.parse(
81
- await fs.promises.readFile("tsconfig.json", "utf8"),
88
+ await fs.promises.readFile(args.project, "utf8"),
82
89
  ) as Comment.CommentObject;
83
90
  const options = config.compilerOptions as
84
91
  | Comment.CommentObject
85
92
  | undefined;
86
93
  if (options === undefined)
87
94
  halter(
88
- `tsconfig.json file does not have "compilerOptions" property.`,
95
+ `${args.project} file does not have "compilerOptions" property.`,
89
96
  );
90
97
 
98
+ // PREPARE PLUGINS
91
99
  const plugins: Comment.CommentArray<Comment.CommentObject> =
92
100
  (() => {
93
101
  const plugins = options.plugins as
@@ -97,7 +105,7 @@ export namespace TypiaSetupWizard {
97
105
  return (options.plugins = [] as any);
98
106
  else if (!Array.isArray(plugins))
99
107
  halter(
100
- `"plugins" property of tsconfig.json must be array type.`,
108
+ `"plugins" property of ${args.project} must be array type.`,
101
109
  );
102
110
  return plugins;
103
111
  })();
@@ -113,19 +121,24 @@ export namespace TypiaSetupWizard {
113
121
 
114
122
  if (strict === true && oldbie !== undefined) {
115
123
  console.log(
116
- "you've been already configured the tsconfig.json file.",
124
+ `you've been already configured the ${args.project} file.`,
117
125
  );
118
126
  } else {
119
127
  // DO CONFIGURE
120
128
  options.strict = true;
121
- plugins.push({ transform: "typia/lib/transform" } as any);
122
-
129
+ if (oldbie === undefined)
130
+ plugins.push(
131
+ Comment.parse(`
132
+ {
133
+ "transform": "typia/lib/transform"
134
+ }`) as Comment.CommentObject,
135
+ );
123
136
  await fs.promises.writeFile(
124
- "tsconfig.json",
137
+ args.project,
125
138
  Comment.stringify(config, null, 2),
126
139
  );
127
140
  }
128
- if (temporary === true) remove(manager)("comment-json", false);
141
+ if (temporary === true) remove(args.manager)("comment-json", false);
129
142
  };
130
143
  }
131
144
 
@@ -6,12 +6,13 @@ const USAGE = `Wrong command has been detected. Use like below:
6
6
 
7
7
  npx typia setup \\
8
8
  --compiler (ttypescript|ts-patch) \\
9
- --manager (npm|pnpm|yarn)
9
+ --manager (npm|pnpm|yarn) \\
10
+ --project {tsconfig.json file path}
10
11
 
11
12
  - npx typia setup
12
- - npx typia setup --compiler ttypescript
13
13
  - npx typia setup --compiler ts-patch
14
- - npx typia setup --manager pnpm`;
14
+ - npx typia setup --manager pnpm
15
+ - npx typia setup --project tsconfig.test.json`;
15
16
 
16
17
  function halt(desc: string): never {
17
18
  console.error(desc);
@@ -24,6 +25,7 @@ async function setup(): Promise<void> {
24
25
  );
25
26
  const manager: string = options.manager ?? "npm";
26
27
  const compiler: string = options.compiler ?? "ttypescript";
28
+ const project: string = options.project ?? "tsconfig.json";
27
29
 
28
30
  if (
29
31
  (compiler !== "ttypescript" && compiler !== "ts-patch") ||
@@ -31,8 +33,8 @@ async function setup(): Promise<void> {
31
33
  )
32
34
  halt(USAGE);
33
35
  else if (compiler === "ttypescript")
34
- await TypiaSetupWizard.ttypescript(manager);
35
- else await TypiaSetupWizard.tsPatch(manager);
36
+ await TypiaSetupWizard.ttypescript({ manager, project });
37
+ else await TypiaSetupWizard.tsPatch({ manager, project });
36
38
  }
37
39
 
38
40
  async function main(): Promise<void> {
@@ -14,9 +14,7 @@ export class MetadataCollection {
14
14
  private readonly unions_: Map<string, MetadataObject[]>;
15
15
  private index_: number;
16
16
 
17
- public constructor(
18
- private readonly options?: Partial<MetadataCollection.IOptions>,
19
- ) {
17
+ public constructor() {
20
18
  this.dict_ = new Map();
21
19
  this.names_ = new Map();
22
20
  this.unions_ = new Map();
@@ -67,11 +65,7 @@ export class MetadataCollection {
67
65
  }
68
66
 
69
67
  private get_name(checker: ts.TypeChecker, type: ts.Type): string {
70
- const name: string = (() => {
71
- const str: string = TypeFactory.getFullName(checker, type);
72
- return this.options?.replace ? this.options.replace(str) : str;
73
- })();
74
-
68
+ const name: string = TypeFactory.getFullName(checker, type);
75
69
  const duplicates: Map<ts.Type, string> = MapUtil.take(
76
70
  this.names_,
77
71
  name,
@@ -87,38 +81,3 @@ export class MetadataCollection {
87
81
  return addicted;
88
82
  }
89
83
  }
90
- export namespace MetadataCollection {
91
- export interface IOptions {
92
- replace?(str: string): string;
93
- }
94
-
95
- export function replace(str: string): string {
96
- for (const [before, after] of REPLACERS)
97
- str = str.split(before).join(after);
98
- return str;
99
- }
100
-
101
- export function escape(str: string): string {
102
- for (const [before, after] of REPLACERS)
103
- if (after !== "") str = str.split(after).join(before);
104
- return str;
105
- }
106
- }
107
- const REPLACERS: [string, string][] = [
108
- ["$", "_dollar_"],
109
- ["&", "_and_"],
110
- ["|", "_or_"],
111
- ["{", "_blt_"],
112
- ["}", "_bgt_"],
113
- ["<", "_lt_"],
114
- [">", "_gt_"],
115
- ["(", "_lp_"],
116
- [")", "_rp_"],
117
- ["[", "_alt_"],
118
- ["]", "_agt_"],
119
- [",", "_comma_"],
120
- ["`", "_backquote_"],
121
- ["'", "_singlequote_"],
122
- ['"', "_doublequote_"],
123
- [" ", "_space_"],
124
- ];
@@ -330,8 +330,12 @@ function validate(
330
330
  }
331
331
 
332
332
  function has_atomic(metadata: Metadata, type: "string" | "number"): boolean {
333
+ const valid =
334
+ type === "number"
335
+ ? (atom: string) => atom === type || atom === "bigint"
336
+ : (atom: string) => atom === type;
333
337
  return (
334
- metadata.atomics.find((atom) => atom === type) !== undefined ||
338
+ metadata.atomics.find((atom) => valid(atom)) !== undefined ||
335
339
  metadata.arrays.some((child) => has_atomic(child, type)) ||
336
340
  metadata.tuples.some((tuple) =>
337
341
  tuple.some((child) => has_atomic(child, type)),
@@ -9,11 +9,6 @@ import { emplace_protocol_object } from "./internal/protocols/emplace_protocol_o
9
9
  import { iterate_protocol_main } from "./internal/protocols/iterate_protocol_main";
10
10
 
11
11
  export namespace ProtocolFactory {
12
- export const collection = () =>
13
- new MetadataCollection({
14
- replace: MetadataCollection.replace,
15
- });
16
-
17
12
  export const metadata =
18
13
  (checker: ts.TypeChecker) =>
19
14
  (collection: MetadataCollection) =>
@@ -16,10 +16,13 @@ export const iterate_metadata_object =
16
16
  (collection: MetadataCollection) =>
17
17
  (meta: Metadata, type: ts.Type, parentResolved: boolean): boolean => {
18
18
  const filter = (flag: ts.TypeFlags) => (type.getFlags() & flag) !== 0;
19
- if (!filter(ts.TypeFlags.Object) && !type.isIntersection())
19
+ if (
20
+ !filter(ts.TypeFlags.Object) &&
21
+ !type.isIntersection() &&
22
+ (type as any).intrinsicName !== "object"
23
+ )
20
24
  return false;
21
-
22
- if (type.isIntersection()) {
25
+ else if (type.isIntersection()) {
23
26
  const fakeCollection = new MetadataCollection();
24
27
  const fakeSchema: Metadata = Metadata.initialize();
25
28
 
@@ -1,7 +1,6 @@
1
1
  import { Metadata } from "../../../metadata/Metadata";
2
2
 
3
3
  import { IProtocolMessage } from "../../../messages/IProtocolMessage";
4
- import { MetadataCollection } from "../../MetadataCollection";
5
4
  import { ProtocolMetadataUtil } from "./ProtocolMetadataUtil";
6
5
  import { emplace_protocol_object } from "./emplace_protocol_object";
7
6
 
@@ -10,11 +9,11 @@ export const iterate_protocol_main =
10
9
  (meta: Metadata): string => {
11
10
  // ONLY ONE OBJECT TYPE
12
11
  if (ProtocolMetadataUtil.standalone(meta) && meta.objects.length === 1)
13
- return MetadataCollection.escape(meta.getName());
12
+ return meta.getName();
14
13
 
15
14
  const obj = ProtocolMetadataUtil.object("__Main", dict.size);
16
15
  obj.properties.push(ProtocolMetadataUtil.property("value", meta, []));
17
16
  emplace_protocol_object(dict)(obj);
18
17
 
19
- return MetadataCollection.escape(obj.name);
18
+ return obj.name;
20
19
  };
@@ -2,7 +2,6 @@ import { Metadata } from "../../../metadata/Metadata";
2
2
  import { MetadataObject } from "../../../metadata/MetadataObject";
3
3
 
4
4
  import { IProtocolMessage } from "../../../messages/IProtocolMessage";
5
- import { MetadataCollection } from "../../MetadataCollection";
6
5
  import { ProtocolMetadataUtil } from "./ProtocolMetadataUtil";
7
6
  import { emplace_protocol_object } from "./emplace_protocol_object";
8
7
  import { iterate_protocol_atomic } from "./iterate_protocol_atomic";
@@ -27,14 +26,13 @@ const getValueName =
27
26
  (container: "Object" | "Map") =>
28
27
  (dict: Map<string, IProtocolMessage>) =>
29
28
  (meta: Metadata) => {
30
- if (ProtocolMetadataUtil.standalone(meta))
31
- return MetadataCollection.escape(meta.getName());
29
+ if (ProtocolMetadataUtil.standalone(meta)) return meta.getName();
32
30
 
33
31
  const obj: MetadataObject = ProtocolMetadataUtil.object(
34
- MetadataCollection.replace(`${container}.Value<${meta.getName()}>`),
32
+ `${container}.Value<${meta.getName()}>`,
35
33
  dict.size,
36
34
  );
37
35
  obj.properties.push(ProtocolMetadataUtil.property("value", meta, []));
38
36
  emplace_protocol_object(dict)(obj);
39
- return MetadataCollection.replace(obj.name);
37
+ return obj.name;
40
38
  };
@@ -44,6 +44,7 @@ export const iterate_protocol_metadata =
44
44
  add(iterate_protocol_atomic(tags)(type));
45
45
  for (const constant of meta.constants)
46
46
  add(iterate_protocol_constant(constant));
47
+ if (meta.templates.length) add("string");
47
48
 
48
49
  // INSTANCE TYPES
49
50
  for (const obj of meta.objects)
@@ -3,7 +3,6 @@ import { Metadata } from "../../../metadata/Metadata";
3
3
  import { MetadataObject } from "../../../metadata/MetadataObject";
4
4
 
5
5
  import { IProtocolMessage } from "../../../messages/IProtocolMessage";
6
- import { MetadataCollection } from "../../MetadataCollection";
7
6
  import { ProtocolMetadataUtil } from "./ProtocolMetadataUtil";
8
7
  import { emplace_protocol_object } from "./emplace_protocol_object";
9
8
 
@@ -14,15 +13,13 @@ export const iterate_protocol_repeated =
14
13
  (meta: Metadata) =>
15
14
  (tags: IMetadataTag[]): string => {
16
15
  sole &&= ProtocolMetadataUtil.standalone(meta);
17
- if (sole === true) return MetadataCollection.replace(meta.getName());
16
+ if (sole === true) return meta.getName();
18
17
 
19
18
  const obj: MetadataObject = ProtocolMetadataUtil.object(
20
- MetadataCollection.replace(
21
- `${container}.Element<${meta.getName()}>`,
22
- ),
19
+ `${container}.Element<${meta.getName()}>`,
23
20
  dict.size,
24
21
  );
25
22
  obj.properties.push(ProtocolMetadataUtil.property("value", meta, tags));
26
23
  emplace_protocol_object(dict)(obj);
27
- return MetadataCollection.replace(obj.name);
24
+ return obj.name;
28
25
  };