typia 3.8.4 → 4.0.0-dev.20230502

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 (142) hide show
  1. package/README.md +9 -1
  2. package/lib/factories/ProtocolFactory.d.ts +8 -0
  3. package/lib/factories/ProtocolFactory.js +112 -0
  4. package/lib/factories/ProtocolFactory.js.map +1 -0
  5. package/lib/factories/internal/protocols/ProtocolMetadataUtil.d.ts +16 -0
  6. package/lib/factories/internal/protocols/ProtocolMetadataUtil.js +160 -0
  7. package/lib/factories/internal/protocols/ProtocolMetadataUtil.js.map +1 -0
  8. package/lib/factories/internal/protocols/emplace_protocol_object.d.ts +3 -0
  9. package/lib/factories/internal/protocols/emplace_protocol_object.js +47 -0
  10. package/lib/factories/internal/protocols/emplace_protocol_object.js.map +1 -0
  11. package/lib/factories/internal/protocols/emplace_protocol_property.d.ts +4 -0
  12. package/lib/factories/internal/protocols/emplace_protocol_property.js +20 -0
  13. package/lib/factories/internal/protocols/emplace_protocol_property.js.map +1 -0
  14. package/lib/factories/internal/protocols/iterate_protocol_atomic.d.ts +3 -0
  15. package/lib/factories/internal/protocols/iterate_protocol_atomic.js +69 -0
  16. package/lib/factories/internal/protocols/iterate_protocol_atomic.js.map +1 -0
  17. package/lib/factories/internal/protocols/iterate_protocol_constant.d.ts +2 -0
  18. package/lib/factories/internal/protocols/iterate_protocol_constant.js +30 -0
  19. package/lib/factories/internal/protocols/iterate_protocol_constant.js.map +1 -0
  20. package/lib/factories/internal/protocols/iterate_protocol_main.d.ts +3 -0
  21. package/lib/factories/internal/protocols/iterate_protocol_main.js +17 -0
  22. package/lib/factories/internal/protocols/iterate_protocol_main.js.map +1 -0
  23. package/lib/factories/internal/protocols/iterate_protocol_map.d.ts +4 -0
  24. package/lib/factories/internal/protocols/iterate_protocol_map.js +75 -0
  25. package/lib/factories/internal/protocols/iterate_protocol_map.js.map +1 -0
  26. package/lib/factories/internal/protocols/iterate_protocol_metadata.d.ts +5 -0
  27. package/lib/factories/internal/protocols/iterate_protocol_metadata.js +190 -0
  28. package/lib/factories/internal/protocols/iterate_protocol_metadata.js.map +1 -0
  29. package/lib/factories/internal/protocols/iterate_protocol_native.d.ts +2 -0
  30. package/lib/factories/internal/protocols/iterate_protocol_native.js +33 -0
  31. package/lib/factories/internal/protocols/iterate_protocol_native.js.map +1 -0
  32. package/lib/factories/internal/protocols/iterate_protocol_never.d.ts +1 -0
  33. package/lib/factories/internal/protocols/iterate_protocol_never.js +6 -0
  34. package/lib/factories/internal/protocols/iterate_protocol_never.js.map +1 -0
  35. package/lib/factories/internal/protocols/iterate_protocol_object.d.ts +4 -0
  36. package/lib/factories/internal/protocols/iterate_protocol_object.js +157 -0
  37. package/lib/factories/internal/protocols/iterate_protocol_object.js.map +1 -0
  38. package/lib/factories/internal/protocols/iterate_protocol_repeated.d.ts +5 -0
  39. package/lib/factories/internal/protocols/iterate_protocol_repeated.js +25 -0
  40. package/lib/factories/internal/protocols/iterate_protocol_repeated.js.map +1 -0
  41. package/lib/factories/internal/protocols/iterate_protocol_tuple.d.ts +3 -0
  42. package/lib/factories/internal/protocols/iterate_protocol_tuple.js +46 -0
  43. package/lib/factories/internal/protocols/iterate_protocol_tuple.js.map +1 -0
  44. package/lib/functional/$proto_bytes.d.ts +2 -0
  45. package/lib/functional/$proto_bytes.js +37 -0
  46. package/lib/functional/$proto_bytes.js.map +1 -0
  47. package/lib/functional/$proto_field.d.ts +10 -0
  48. package/lib/functional/$proto_field.js +42 -0
  49. package/lib/functional/$proto_field.js.map +1 -0
  50. package/lib/functional/$proto_float.d.ts +4 -0
  51. package/lib/functional/$proto_float.js +28 -0
  52. package/lib/functional/$proto_float.js.map +1 -0
  53. package/lib/functional/$proto_i32.d.ts +2 -0
  54. package/lib/functional/$proto_i32.js +23 -0
  55. package/lib/functional/$proto_i32.js.map +1 -0
  56. package/lib/functional/$proto_i64.d.ts +2 -0
  57. package/lib/functional/$proto_i64.js +31 -0
  58. package/lib/functional/$proto_i64.js.map +1 -0
  59. package/lib/functional/$proto_size.d.ts +6 -0
  60. package/lib/functional/$proto_size.js +76 -0
  61. package/lib/functional/$proto_size.js.map +1 -0
  62. package/lib/functional/$proto_string.d.ts +2 -0
  63. package/lib/functional/$proto_string.js +34 -0
  64. package/lib/functional/$proto_string.js.map +1 -0
  65. package/lib/functional/$varint.d.ts +6 -0
  66. package/lib/functional/$varint.js +99 -0
  67. package/lib/functional/$varint.js.map +1 -0
  68. package/lib/functional/$zigzag.d.ts +4 -0
  69. package/lib/functional/$zigzag.js +34 -0
  70. package/lib/functional/$zigzag.js.map +1 -0
  71. package/lib/messages/IProtocolMap.d.ts +5 -0
  72. package/lib/messages/IProtocolMap.js +3 -0
  73. package/lib/messages/IProtocolMap.js.map +1 -0
  74. package/lib/messages/IProtocolMessage.d.ts +5 -0
  75. package/lib/messages/IProtocolMessage.js +3 -0
  76. package/lib/messages/IProtocolMessage.js.map +1 -0
  77. package/lib/messages/IProtocolProperty.d.ts +12 -0
  78. package/lib/messages/IProtocolProperty.js +3 -0
  79. package/lib/messages/IProtocolProperty.js.map +1 -0
  80. package/lib/metadata/IMetadataTag.d.ts +3 -3
  81. package/lib/metadata/Metadata.js +1 -1
  82. package/lib/metadata/Metadata.js.map +1 -1
  83. package/lib/module.d.ts +2 -0
  84. package/lib/module.js +6 -1
  85. package/lib/module.js.map +1 -1
  86. package/lib/programmers/MessageProgrammer.d.ts +5 -0
  87. package/lib/programmers/MessageProgrammer.js +141 -0
  88. package/lib/programmers/MessageProgrammer.js.map +1 -0
  89. package/lib/transformers/CallExpressionTransformer.js +5 -3
  90. package/lib/transformers/CallExpressionTransformer.js.map +1 -1
  91. package/lib/transformers/features/miscellaneous/ApplicationTransformer.js +1 -3
  92. package/lib/transformers/features/miscellaneous/ApplicationTransformer.js.map +1 -1
  93. package/lib/transformers/features/protocols/MessageTransformer.d.ts +5 -0
  94. package/lib/transformers/features/protocols/MessageTransformer.js +20 -0
  95. package/lib/transformers/features/protocols/MessageTransformer.js.map +1 -0
  96. package/lib/utils/NameEncoder.d.ts +4 -0
  97. package/lib/utils/NameEncoder.js +89 -0
  98. package/lib/utils/NameEncoder.js.map +1 -0
  99. package/package.json +1 -1
  100. package/src/Primitive.ts +123 -123
  101. package/src/factories/MetadataFactory.ts +62 -62
  102. package/src/factories/ProtocolFactory.ts +79 -0
  103. package/src/factories/internal/metadata/emplace_metadata_object.ts +143 -143
  104. package/src/factories/internal/metadata/iterate_metadata_tuple.ts +48 -48
  105. package/src/factories/internal/protocols/ProtocolMetadataUtil.ts +167 -0
  106. package/src/factories/internal/protocols/emplace_protocol_object.ts +25 -0
  107. package/src/factories/internal/protocols/emplace_protocol_property.ts +12 -0
  108. package/src/factories/internal/protocols/iterate_protocol_atomic.ts +34 -0
  109. package/src/factories/internal/protocols/iterate_protocol_constant.ts +27 -0
  110. package/src/factories/internal/protocols/iterate_protocol_main.ts +19 -0
  111. package/src/factories/internal/protocols/iterate_protocol_map.ts +58 -0
  112. package/src/factories/internal/protocols/iterate_protocol_metadata.ts +96 -0
  113. package/src/factories/internal/protocols/iterate_protocol_native.ts +34 -0
  114. package/src/factories/internal/protocols/iterate_protocol_never.ts +1 -0
  115. package/src/factories/internal/protocols/iterate_protocol_object.ts +110 -0
  116. package/src/factories/internal/protocols/iterate_protocol_repeated.ts +34 -0
  117. package/src/factories/internal/protocols/iterate_protocol_tuple.ts +29 -0
  118. package/src/functional/$proto_bytes.ts +25 -0
  119. package/src/functional/$proto_field.ts +30 -0
  120. package/src/functional/$proto_float.ts +37 -0
  121. package/src/functional/$proto_i32.ts +29 -0
  122. package/src/functional/$proto_i64.ts +37 -0
  123. package/src/functional/$proto_size.ts +82 -0
  124. package/src/functional/$proto_string.ts +24 -0
  125. package/src/functional/$varint.ts +130 -0
  126. package/src/functional/$zigzag.ts +39 -0
  127. package/src/messages/IProtocolMap.ts +5 -0
  128. package/src/messages/IProtocolMessage.ts +6 -0
  129. package/src/messages/IProtocolProperty.ts +13 -0
  130. package/src/metadata/IMetadata.ts +26 -26
  131. package/src/metadata/IMetadataTag.ts +11 -3
  132. package/src/metadata/Metadata.ts +543 -539
  133. package/src/module.ts +11 -0
  134. package/src/programmers/CheckerProgrammer.ts +901 -901
  135. package/src/programmers/MessageProgrammer.ts +126 -0
  136. package/src/programmers/internal/application_object.ts +155 -155
  137. package/src/programmers/internal/application_tuple.ts +31 -31
  138. package/src/schemas/IJsonSchema.ts +130 -130
  139. package/src/transformers/CallExpressionTransformer.ts +17 -10
  140. package/src/transformers/features/miscellaneous/ApplicationTransformer.ts +1 -3
  141. package/src/transformers/features/protocols/MessageTransformer.ts +31 -0
  142. package/src/utils/NameEncoder.ts +32 -0
@@ -1,130 +1,130 @@
1
- import { IJsDocTagInfo } from "../metadata/IJsDocTagInfo";
2
- import { IMetadataTag } from "../metadata/IMetadataTag";
3
-
4
- import { Atomic } from "../typings/Atomic";
5
-
6
- export type IJsonSchema = IJsonSchema.Known | IJsonSchema.IUnknown;
7
- export namespace IJsonSchema {
8
- export type Known =
9
- | IEnumeration<"boolean">
10
- | IEnumeration<"number">
11
- | IEnumeration<"string">
12
- | IBoolean
13
- | IInteger
14
- | INumber
15
- | IString
16
- | IArray
17
- | ITuple
18
- | IOneOf
19
- | IReference
20
- | IRecursiveReference
21
- | INullOnly;
22
-
23
- export interface IUnknown extends IAttribute {
24
- type: undefined;
25
- }
26
-
27
- /**
28
- * @deprecated Use {@link Known} type instead.
29
- */
30
- export type NotUnknown = Known;
31
-
32
- /* -----------------------------------------------------------
33
- ATOMICS
34
- ----------------------------------------------------------- */
35
- export interface IEnumeration<
36
- Literal extends Exclude<Atomic.Literal, "bigint">,
37
- > extends IAtomic<Literal> {
38
- enum: Array<Atomic.Mapper[Literal]>;
39
- }
40
- export interface IAtomic<Literal extends Exclude<Atomic.Literal, "bigint">>
41
- extends ISignificant<Literal> {
42
- default?: Atomic.Mapper[Literal];
43
- }
44
- export interface IString extends IAtomic<"string"> {
45
- /**
46
- * @type uint
47
- */
48
- minLength?: number;
49
- /**
50
- * @type uint
51
- */
52
- maxLength?: number;
53
- pattern?: string;
54
- format?: string;
55
- }
56
- export interface INumber extends IAtomic<"number"> {
57
- minimum?: number;
58
- maximum?: number;
59
- exclusiveMinimum?: boolean;
60
- exclusiveMaximum?: boolean;
61
- multipleOf?: number;
62
- }
63
- export interface IInteger extends IAtomic<"integer"> {
64
- /**
65
- * @type int
66
- */
67
- minimum?: number;
68
- /**
69
- * @type int
70
- */
71
- maximum?: number;
72
- exclusiveMinimum?: boolean;
73
- exclusiveMaximum?: boolean;
74
- /**
75
- * @type int
76
- */
77
- multipleOf?: number;
78
- }
79
- export interface IBoolean extends IAtomic<"boolean"> {}
80
-
81
- /* -----------------------------------------------------------
82
- OBJECTS
83
- ----------------------------------------------------------- */
84
- export interface IArray extends ISignificant<"array"> {
85
- items: IJsonSchema;
86
- /**
87
- * @type uint
88
- */
89
- minItems?: number;
90
- /**
91
- * @type uint
92
- */
93
- maxItems?: number;
94
- "x-typia-tuple"?: ITuple;
95
- }
96
- export interface ITuple extends ISignificant<"array"> {
97
- items: IJsonSchema[];
98
- }
99
- export interface IReference extends IAttribute {
100
- $ref: string;
101
- }
102
- export interface IRecursiveReference extends IAttribute {
103
- $recursiveRef: string;
104
- }
105
- export interface INullOnly extends IAttribute {
106
- type: "null";
107
- }
108
-
109
- /* -----------------------------------------------------------
110
- MISCELLANEOUS
111
- ----------------------------------------------------------- */
112
- export interface IOneOf extends IAttribute {
113
- oneOf: IJsonSchema[];
114
- }
115
-
116
- export interface ISignificant<Literal extends string> extends IAttribute {
117
- type: Literal;
118
- nullable: boolean;
119
- }
120
- export interface IAttribute {
121
- deprecated?: boolean;
122
- title?: string;
123
- description?: string;
124
- "x-typia-metaTags"?: IMetadataTag[];
125
- "x-typia-jsDocTags"?: IJsDocTagInfo[];
126
- "x-typia-required"?: boolean;
127
- "x-typia-optional"?: boolean;
128
- "x-typia-rest"?: boolean;
129
- }
130
- }
1
+ import { IJsDocTagInfo } from "../metadata/IJsDocTagInfo";
2
+ import { IMetadataTag } from "../metadata/IMetadataTag";
3
+
4
+ import { Atomic } from "../typings/Atomic";
5
+
6
+ export type IJsonSchema = IJsonSchema.Known | IJsonSchema.IUnknown;
7
+ export namespace IJsonSchema {
8
+ export type Known =
9
+ | IEnumeration<"boolean">
10
+ | IEnumeration<"number">
11
+ | IEnumeration<"string">
12
+ | IBoolean
13
+ | IInteger
14
+ | INumber
15
+ | IString
16
+ | IArray
17
+ | ITuple
18
+ | IOneOf
19
+ | IReference
20
+ | IRecursiveReference
21
+ | INullOnly;
22
+
23
+ export interface IUnknown extends IAttribute {
24
+ type: undefined;
25
+ }
26
+
27
+ /**
28
+ * @deprecated Use {@link Known} type instead.
29
+ */
30
+ export type NotUnknown = Known;
31
+
32
+ /* -----------------------------------------------------------
33
+ ATOMICS
34
+ ----------------------------------------------------------- */
35
+ export interface IEnumeration<
36
+ Literal extends Exclude<Atomic.Literal, "bigint">,
37
+ > extends IAtomic<Literal> {
38
+ enum: Array<Atomic.Mapper[Literal]>;
39
+ }
40
+ export interface IAtomic<Literal extends Exclude<Atomic.Literal, "bigint">>
41
+ extends ISignificant<Literal> {
42
+ default?: Atomic.Mapper[Literal];
43
+ }
44
+ export interface IString extends IAtomic<"string"> {
45
+ /**
46
+ * @type uint
47
+ */
48
+ minLength?: number;
49
+ /**
50
+ * @type uint
51
+ */
52
+ maxLength?: number;
53
+ pattern?: string;
54
+ format?: string;
55
+ }
56
+ export interface INumber extends IAtomic<"number"> {
57
+ minimum?: number;
58
+ maximum?: number;
59
+ exclusiveMinimum?: boolean;
60
+ exclusiveMaximum?: boolean;
61
+ multipleOf?: number;
62
+ }
63
+ export interface IInteger extends IAtomic<"integer"> {
64
+ /**
65
+ * @type int
66
+ */
67
+ minimum?: number;
68
+ /**
69
+ * @type int
70
+ */
71
+ maximum?: number;
72
+ exclusiveMinimum?: boolean;
73
+ exclusiveMaximum?: boolean;
74
+ /**
75
+ * @type int
76
+ */
77
+ multipleOf?: number;
78
+ }
79
+ export interface IBoolean extends IAtomic<"boolean"> {}
80
+
81
+ /* -----------------------------------------------------------
82
+ OBJECTS
83
+ ----------------------------------------------------------- */
84
+ export interface IArray extends ISignificant<"array"> {
85
+ items: IJsonSchema;
86
+ /**
87
+ * @type uint
88
+ */
89
+ minItems?: number;
90
+ /**
91
+ * @type uint
92
+ */
93
+ maxItems?: number;
94
+ "x-typia-tuple"?: ITuple;
95
+ }
96
+ export interface ITuple extends ISignificant<"array"> {
97
+ items: IJsonSchema[];
98
+ }
99
+ export interface IReference extends IAttribute {
100
+ $ref: string;
101
+ }
102
+ export interface IRecursiveReference extends IAttribute {
103
+ $recursiveRef: string;
104
+ }
105
+ export interface INullOnly extends IAttribute {
106
+ type: "null";
107
+ }
108
+
109
+ /* -----------------------------------------------------------
110
+ MISCELLANEOUS
111
+ ----------------------------------------------------------- */
112
+ export interface IOneOf extends IAttribute {
113
+ oneOf: IJsonSchema[];
114
+ }
115
+
116
+ export interface ISignificant<Literal extends string> extends IAttribute {
117
+ type: Literal;
118
+ nullable: boolean;
119
+ }
120
+ export interface IAttribute {
121
+ deprecated?: boolean;
122
+ title?: string;
123
+ description?: string;
124
+ "x-typia-metaTags"?: IMetadataTag[];
125
+ "x-typia-jsDocTags"?: IJsDocTagInfo[];
126
+ "x-typia-required"?: boolean;
127
+ "x-typia-optional"?: boolean;
128
+ "x-typia-rest"?: boolean;
129
+ }
130
+ }
@@ -29,6 +29,7 @@ import { CreateIsParseTransformer } from "./features/parsers/CreateIsParseTransf
29
29
  import { CreateValidateParseTransformer } from "./features/parsers/CreateValidateParseTransformer";
30
30
  import { IsParseTransformer } from "./features/parsers/IsParseTransformer";
31
31
  import { ValidateParseTransformer } from "./features/parsers/ValidateParseTransformer";
32
+ import { MessageTransformer } from "./features/protocols/MessageTransformer";
32
33
  import { AssertStringifyTransformer } from "./features/stringifiers/AssertStringifyTransformer";
33
34
  import { CreateAssertStringifyTransformer } from "./features/stringifiers/CreateAssertStringifyTransformer";
34
35
  import { CreateIsStringifyTransformer } from "./features/stringifiers/CreateIsStringifyTransformer";
@@ -97,7 +98,7 @@ const CLI_PATH = path.resolve(
97
98
 
98
99
  const FUNCTORS: Record<string, () => Task> = {
99
100
  //----
100
- // SINGLE FUNCTIONS
101
+ // VALIDATORS
101
102
  //----
102
103
  // BASIC VALIDATORS
103
104
  assert: () => AssertTransformer.transform(false),
@@ -110,14 +111,24 @@ const FUNCTORS: Record<string, () => Task> = {
110
111
  equals: () => IsTransformer.transform(true),
111
112
  validateEquals: () => ValidateTransformer.transform(true),
112
113
 
113
- // PARSE FUNCTIONS
114
+ //----
115
+ // PROTOCOL BUFFER
116
+ //----
117
+ message: () => MessageTransformer.transform,
118
+
119
+ //----
120
+ // JSON FUNCTIONS
121
+ //----
122
+ // SCHEMA DEFINITION
123
+ application: () => (project) => () =>
124
+ ApplicationTransformer.transform(project),
125
+
126
+ // PARSER FUNCTIONS
114
127
  isParse: () => IsParseTransformer.transform,
115
128
  assertParse: () => AssertParseTransformer.transform,
116
129
  validateParse: () => ValidateParseTransformer.transform,
117
130
 
118
131
  // STRINGIFY FUNCTIONS
119
- application: () => (project) => () =>
120
- ApplicationTransformer.transform(project),
121
132
  stringify: () => StringifyTransformer.transform,
122
133
  assertStringify: () => AssertStringifyTransformer.transform,
123
134
  isStringify: () => IsStringifyTransformer.transform,
@@ -141,23 +152,19 @@ const FUNCTORS: Record<string, () => Task> = {
141
152
  //----
142
153
  // FACTORY FUNCTIONS
143
154
  //----
144
- // BASIC VALIDATORS
155
+ // VALIDATORS
145
156
  createAssert: () => CreateAssertTransformer.transform(false),
146
157
  createAssertType: () => CreateAssertTransformer.transform(false),
147
158
  createIs: () => CreateIsTransformer.transform(false),
148
159
  createValidate: () => CreateValidateTransformer.transform(false),
149
-
150
- // STRICT VALIDATORS
151
160
  createAssertEquals: () => CreateAssertTransformer.transform(true),
152
161
  createEquals: () => CreateIsTransformer.transform(true),
153
162
  createValidateEquals: () => CreateValidateTransformer.transform(true),
154
163
 
155
- // PARSE FUNCTIONS
164
+ // JSON FUNCTIONS
156
165
  createIsParse: () => CreateIsParseTransformer.transform,
157
166
  createAssertParse: () => CreateAssertParseTransformer.transform,
158
167
  createValidateParse: () => CreateValidateParseTransformer.transform,
159
-
160
- // STRINGIFY FUNCTIONS
161
168
  createStringify: () => CreateStringifyTransformer.transform,
162
169
  createAssertStringify: () => CreateAssertStringifyTransformer.transform,
163
170
  createIsStringify: () => CreateIsStringifyTransformer.transform,
@@ -57,9 +57,7 @@ export namespace ApplicationTransformer {
57
57
  // GENERATORS
58
58
  //----
59
59
  // METADATA
60
- const collection: MetadataCollection = new MetadataCollection({
61
- replace: MetadataCollection.replace,
62
- });
60
+ const collection: MetadataCollection = new MetadataCollection();
63
61
  const metadatas: Array<Metadata> = types.map((type) =>
64
62
  MetadataFactory.analyze(checker)({
65
63
  resolve: true,
@@ -0,0 +1,31 @@
1
+ import ts from "typescript";
2
+
3
+ import { MessageProgrammer } from "../../../programmers/MessageProgrammer";
4
+
5
+ import { IProject } from "../../IProject";
6
+
7
+ export namespace MessageTransformer {
8
+ export const transform =
9
+ (project: IProject) =>
10
+ (_modulo: ts.LeftHandSideExpression) =>
11
+ (expression: ts.CallExpression): ts.Expression => {
12
+ // CHECK GENERIC ARGUMENT EXISTENCE
13
+ if (!expression.typeArguments || !expression.typeArguments[0])
14
+ throw new Error(ErrorMessages.NOT_SPECIFIED);
15
+
16
+ // GET TYPE INFO
17
+ const type: ts.Type = project.checker.getTypeFromTypeNode(
18
+ expression.typeArguments[0],
19
+ );
20
+ if (type.isTypeParameter())
21
+ throw new Error(ErrorMessages.GENERIC_ARGUMENT);
22
+
23
+ // DO TRANSFORM
24
+ return MessageProgrammer.generate(project)(type);
25
+ };
26
+ }
27
+
28
+ const enum ErrorMessages {
29
+ NOT_SPECIFIED = "Error on typia.message(): generic argument is not specified.",
30
+ GENERIC_ARGUMENT = "Error on typia.message(): non-specified generic argument.",
31
+ }
@@ -0,0 +1,32 @@
1
+ export namespace NameEncoder {
2
+ export function encode(str: string): string {
3
+ for (const [before, after] of REPLACERS)
4
+ str = str.split(before).join(after);
5
+ return str;
6
+ }
7
+
8
+ export function decode(str: string): string {
9
+ for (const [before, after] of REPLACERS)
10
+ if (after !== "") str = str.split(after).join(before);
11
+ return str;
12
+ }
13
+ }
14
+
15
+ const REPLACERS: [string, string][] = [
16
+ ["$", "_dollar_"],
17
+ ["&", "_and_"],
18
+ ["|", "_or_"],
19
+ ["{", "_blt_"],
20
+ ["}", "_bgt_"],
21
+ ["<", "_lt_"],
22
+ [">", "_gt_"],
23
+ ["(", "_lp_"],
24
+ [")", "_rp_"],
25
+ ["[", "_alt_"],
26
+ ["]", "_agt_"],
27
+ [",", "_comma_"],
28
+ ["`", "_backquote_"],
29
+ ["'", "_singlequote_"],
30
+ ['"', "_doublequote_"],
31
+ [" ", "_space_"],
32
+ ];