typia 5.0.0-dev.20230821 → 5.0.0-dev.20230822

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 (236) hide show
  1. package/lib/factories/MetadataFactory.js +9 -0
  2. package/lib/factories/MetadataFactory.js.map +1 -1
  3. package/lib/factories/ProtobufFactory.js +8 -0
  4. package/lib/factories/ProtobufFactory.js.map +1 -1
  5. package/lib/functional/$ProtobufReader.d.ts +2 -0
  6. package/lib/functional/$ProtobufReader.js +14 -3
  7. package/lib/functional/$ProtobufReader.js.map +1 -1
  8. package/lib/functional/$ProtobufSizer.js +1 -1
  9. package/lib/functional/$ProtobufSizer.js.map +1 -1
  10. package/lib/functional/$ProtobufWriter.js +0 -1
  11. package/lib/functional/$ProtobufWriter.js.map +1 -1
  12. package/lib/programmers/helpers/ProtobufUtil.d.ts +3 -1
  13. package/lib/programmers/helpers/ProtobufUtil.js +5 -1
  14. package/lib/programmers/helpers/ProtobufUtil.js.map +1 -1
  15. package/lib/programmers/json/JsonValidateParseProgrammer.js +2 -3
  16. package/lib/programmers/json/JsonValidateParseProgrammer.js.map +1 -1
  17. package/lib/programmers/protobuf/ProtobufAssertDecodeProgrammer.js +2 -3
  18. package/lib/programmers/protobuf/ProtobufAssertDecodeProgrammer.js.map +1 -1
  19. package/lib/programmers/protobuf/ProtobufDecodeProgrammer.js +357 -6
  20. package/lib/programmers/protobuf/ProtobufDecodeProgrammer.js.map +1 -1
  21. package/lib/programmers/protobuf/ProtobufEncodeProgrammer.js +15 -60
  22. package/lib/programmers/protobuf/ProtobufEncodeProgrammer.js.map +1 -1
  23. package/lib/programmers/protobuf/ProtobufIsDecodeProgrammer.js +1 -1
  24. package/lib/programmers/protobuf/ProtobufIsDecodeProgrammer.js.map +1 -1
  25. package/lib/programmers/protobuf/ProtobufMessageProgrammer.js +1 -1
  26. package/lib/programmers/protobuf/ProtobufMessageProgrammer.js.map +1 -1
  27. package/lib/programmers/protobuf/ProtobufValidateDecodeProgrammer.js +3 -4
  28. package/lib/programmers/protobuf/ProtobufValidateDecodeProgrammer.js.map +1 -1
  29. package/lib/protobuf.d.ts +8 -9
  30. package/lib/protobuf.js +7 -0
  31. package/lib/protobuf.js.map +1 -1
  32. package/package.json +1 -1
  33. package/src/factories/ExpressionFactory.ts +115 -115
  34. package/src/factories/MetadataCollection.ts +269 -269
  35. package/src/factories/MetadataFactory.ts +46 -34
  36. package/src/factories/MetadataTagFactory.ts +364 -364
  37. package/src/factories/ProtobufFactory.ts +266 -251
  38. package/src/factories/StatementFactory.ts +72 -72
  39. package/src/factories/internal/metadata/MetadataHelper.ts +12 -12
  40. package/src/factories/internal/metadata/emend_metadata_atomics.ts +33 -33
  41. package/src/factories/internal/metadata/emplace_metadata_alias.ts +40 -40
  42. package/src/factories/internal/metadata/emplace_metadata_array.ts +34 -34
  43. package/src/factories/internal/metadata/emplace_metadata_object.ts +136 -136
  44. package/src/factories/internal/metadata/emplace_metadata_tuple.ts +50 -50
  45. package/src/factories/internal/metadata/explore_metadata.ts +38 -38
  46. package/src/factories/internal/metadata/iterate_metadata.ts +81 -81
  47. package/src/factories/internal/metadata/iterate_metadata_alias.ts +30 -30
  48. package/src/factories/internal/metadata/iterate_metadata_array.ts +24 -24
  49. package/src/factories/internal/metadata/iterate_metadata_atomic.ts +59 -59
  50. package/src/factories/internal/metadata/iterate_metadata_coalesce.ts +33 -33
  51. package/src/factories/internal/metadata/iterate_metadata_collection.ts +133 -133
  52. package/src/factories/internal/metadata/iterate_metadata_constant.ts +58 -58
  53. package/src/factories/internal/metadata/iterate_metadata_intersection.ts +84 -84
  54. package/src/factories/internal/metadata/iterate_metadata_map.ts +41 -41
  55. package/src/factories/internal/metadata/iterate_metadata_native.ts +219 -219
  56. package/src/factories/internal/metadata/iterate_metadata_object.ts +43 -43
  57. package/src/factories/internal/metadata/iterate_metadata_resolve.ts +49 -49
  58. package/src/factories/internal/metadata/iterate_metadata_set.ts +33 -33
  59. package/src/factories/internal/metadata/iterate_metadata_sort.ts +69 -69
  60. package/src/factories/internal/metadata/iterate_metadata_tag.ts +31 -31
  61. package/src/factories/internal/metadata/iterate_metadata_template.ts +38 -38
  62. package/src/factories/internal/metadata/iterate_metadata_tuple.ts +24 -24
  63. package/src/factories/internal/metadata/iterate_metadata_union.ts +24 -24
  64. package/src/functional/$ProtobufReader.ts +201 -188
  65. package/src/functional/$ProtobufSizer.ts +147 -144
  66. package/src/functional/$ProtobufWriter.ts +152 -152
  67. package/src/functional/$number.ts +13 -13
  68. package/src/functional/$strlen.ts +7 -7
  69. package/src/functional/$varint.ts +130 -130
  70. package/src/functional/$zigzag.ts +39 -39
  71. package/src/functional/IProtobufWriter.ts +18 -18
  72. package/src/functional/Namespace.ts +149 -149
  73. package/src/json.ts +648 -648
  74. package/src/misc.ts +651 -651
  75. package/src/module.ts +708 -708
  76. package/src/programmers/CheckerProgrammer.ts +1173 -1173
  77. package/src/programmers/FeatureProgrammer.ts +497 -497
  78. package/src/programmers/IsProgrammer.ts +239 -239
  79. package/src/programmers/IsPruneProgrammer.ts +73 -73
  80. package/src/programmers/RandomProgrammer.ts +578 -578
  81. package/src/programmers/helpers/AtomicPredicator.ts +31 -31
  82. package/src/programmers/helpers/CloneJoiner.ts +107 -107
  83. package/src/programmers/helpers/FunctionImporeter.ts +89 -89
  84. package/src/programmers/helpers/IExpressionEntry.ts +12 -12
  85. package/src/programmers/helpers/ProtobufUtil.ts +29 -24
  86. package/src/programmers/helpers/ProtobufWire.ts +34 -34
  87. package/src/programmers/helpers/PruneJoiner.ts +143 -143
  88. package/src/programmers/helpers/RandomJoiner.ts +173 -173
  89. package/src/programmers/helpers/RandomRanger.ts +208 -208
  90. package/src/programmers/helpers/StringifyPredicator.ts +13 -13
  91. package/src/programmers/helpers/UnionExplorer.ts +310 -310
  92. package/src/programmers/helpers/UnionPredicator.ts +81 -81
  93. package/src/programmers/helpers/disable_function_importer_declare.ts +27 -27
  94. package/src/programmers/internal/application_alias.ts +66 -66
  95. package/src/programmers/internal/application_array.ts +30 -30
  96. package/src/programmers/internal/application_constant.ts +26 -26
  97. package/src/programmers/internal/application_default.ts +17 -17
  98. package/src/programmers/internal/application_default_string.ts +33 -33
  99. package/src/programmers/internal/application_native.ts +39 -39
  100. package/src/programmers/internal/application_number.ts +81 -81
  101. package/src/programmers/internal/application_object.ts +165 -165
  102. package/src/programmers/internal/application_resolved.ts +55 -55
  103. package/src/programmers/internal/application_schema.ts +157 -157
  104. package/src/programmers/internal/application_string.ts +44 -44
  105. package/src/programmers/internal/application_templates.ts +25 -25
  106. package/src/programmers/internal/application_tuple.ts +57 -57
  107. package/src/programmers/internal/check_array.ts +30 -30
  108. package/src/programmers/internal/check_array_length.ts +35 -35
  109. package/src/programmers/internal/check_bigint.ts +110 -110
  110. package/src/programmers/internal/check_custom.ts +31 -31
  111. package/src/programmers/internal/check_number.ts +258 -258
  112. package/src/programmers/internal/check_string.ts +25 -25
  113. package/src/programmers/internal/check_string_tags.ts +67 -67
  114. package/src/programmers/internal/check_template.ts +56 -56
  115. package/src/programmers/internal/check_union_array_like.ts +329 -329
  116. package/src/programmers/internal/decode_union_object.ts +84 -84
  117. package/src/programmers/internal/feature_object_entries.ts +63 -63
  118. package/src/programmers/internal/get_comment_tags.ts +23 -23
  119. package/src/programmers/internal/metadata_to_pattern.ts +34 -34
  120. package/src/programmers/internal/prune_object_properties.ts +60 -60
  121. package/src/programmers/internal/random_custom.ts +29 -29
  122. package/src/programmers/internal/stringify_regular_properties.ts +83 -83
  123. package/src/programmers/internal/template_to_pattern.ts +15 -15
  124. package/src/programmers/internal/wrap_metadata_rest_tuple.ts +16 -16
  125. package/src/programmers/json/JsonApplicationProgrammer.ts +47 -47
  126. package/src/programmers/json/JsonAssertParseProgrammer.ts +66 -66
  127. package/src/programmers/json/JsonAssertStringifyProgrammer.ts +66 -66
  128. package/src/programmers/json/JsonIsParseProgrammer.ts +72 -72
  129. package/src/programmers/json/JsonIsStringifyProgrammer.ts +76 -76
  130. package/src/programmers/json/JsonStringifyProgrammer.ts +987 -987
  131. package/src/programmers/json/JsonValidateParseProgrammer.ts +63 -70
  132. package/src/programmers/json/JsonValidateStringifyProgrammer.ts +84 -84
  133. package/src/programmers/misc/MiscAssertCloneProgrammer.ts +71 -71
  134. package/src/programmers/misc/MiscAssertPruneProgrammer.ts +68 -68
  135. package/src/programmers/misc/MiscCloneProgrammer.ts +587 -587
  136. package/src/programmers/misc/MiscIsCloneProgrammer.ts +78 -78
  137. package/src/programmers/misc/MiscLiteralsProgrammer.ts +64 -64
  138. package/src/programmers/misc/MiscPruneProgrammer.ts +542 -542
  139. package/src/programmers/misc/MiscValidateCloneProgrammer.ts +85 -85
  140. package/src/programmers/misc/MiscValidatePruneProgrammer.ts +78 -78
  141. package/src/programmers/protobuf/ProtobufAssertDecodeProgrammer.ts +66 -69
  142. package/src/programmers/protobuf/ProtobufAssertEncodeProgrammer.ts +66 -66
  143. package/src/programmers/protobuf/ProtobufDecodeProgrammer.ts +653 -38
  144. package/src/programmers/protobuf/ProtobufEncodeProgrammer.ts +812 -920
  145. package/src/programmers/protobuf/ProtobufIsDecodeProgrammer.ts +75 -75
  146. package/src/programmers/protobuf/ProtobufIsEncodeProgrammer.ts +76 -76
  147. package/src/programmers/protobuf/ProtobufMessageProgrammer.ts +178 -178
  148. package/src/programmers/protobuf/ProtobufValidateDecodeProgrammer.ts +75 -83
  149. package/src/programmers/protobuf/ProtobufValidateEncodeProgrammer.ts +86 -86
  150. package/src/protobuf.ts +249 -239
  151. package/src/schemas/json/IJsonApplication.ts +8 -8
  152. package/src/schemas/json/IJsonComponents.ts +33 -33
  153. package/src/schemas/json/IJsonSchema.ts +133 -133
  154. package/src/schemas/metadata/ICommentTag.ts +4 -4
  155. package/src/schemas/metadata/IJsDocTagInfo.ts +10 -10
  156. package/src/schemas/metadata/IMetadata.ts +28 -28
  157. package/src/schemas/metadata/IMetadataAlias.ts +14 -14
  158. package/src/schemas/metadata/IMetadataApplication.ts +7 -7
  159. package/src/schemas/metadata/IMetadataArray.ts +10 -10
  160. package/src/schemas/metadata/IMetadataCollection.ts +11 -11
  161. package/src/schemas/metadata/IMetadataConstant.ts +16 -16
  162. package/src/schemas/metadata/IMetadataDictionary.ts +14 -14
  163. package/src/schemas/metadata/IMetadataEntry.ts +6 -6
  164. package/src/schemas/metadata/IMetadataObject.ts +18 -18
  165. package/src/schemas/metadata/IMetadataProperty.ts +11 -11
  166. package/src/schemas/metadata/IMetadataResolved.ts +6 -6
  167. package/src/schemas/metadata/IMetadataTag.ts +112 -112
  168. package/src/schemas/metadata/IMetadataTuple.ts +10 -10
  169. package/src/schemas/metadata/Metadata.ts +637 -637
  170. package/src/schemas/metadata/MetadataAlias.ts +66 -66
  171. package/src/schemas/metadata/MetadataArray.ts +55 -55
  172. package/src/schemas/metadata/MetadataConstant.ts +3 -3
  173. package/src/schemas/metadata/MetadataObject.ts +139 -139
  174. package/src/schemas/metadata/MetadataProperty.ts +64 -64
  175. package/src/schemas/metadata/MetadataResolved.ts +51 -51
  176. package/src/schemas/metadata/MetadataTuple.ts +58 -58
  177. package/src/transformers/CallExpressionTransformer.ts +240 -240
  178. package/src/transformers/features/AssertTransformer.ts +11 -11
  179. package/src/transformers/features/CreateAssertTransformer.ts +13 -13
  180. package/src/transformers/features/CreateIsTransformer.ts +11 -11
  181. package/src/transformers/features/CreateRandomTransformer.ts +39 -39
  182. package/src/transformers/features/CreateValidateTransformer.ts +13 -13
  183. package/src/transformers/features/IsTransformer.ts +11 -11
  184. package/src/transformers/features/RandomTransformer.ts +42 -42
  185. package/src/transformers/features/ValidateTransformer.ts +11 -11
  186. package/src/transformers/features/json/JsonApplicationTransformer.ts +111 -111
  187. package/src/transformers/features/json/JsonAssertParseTransformer.ts +10 -10
  188. package/src/transformers/features/json/JsonAssertStringifyTransformer.ts +10 -10
  189. package/src/transformers/features/json/JsonCreateAssertParseTransformer.ts +10 -10
  190. package/src/transformers/features/json/JsonCreateAssertStringifyTransformer.ts +12 -12
  191. package/src/transformers/features/json/JsonCreateIsParseTransformer.ts +9 -9
  192. package/src/transformers/features/json/JsonCreateIsStringifyTransformer.ts +10 -10
  193. package/src/transformers/features/json/JsonCreateStringifyTransformer.ts +9 -9
  194. package/src/transformers/features/json/JsonCreateValidateParseTransformer.ts +10 -10
  195. package/src/transformers/features/json/JsonCreateValidateStringifyProgrammer.ts +12 -12
  196. package/src/transformers/features/json/JsonIsParseTransformer.ts +9 -9
  197. package/src/transformers/features/json/JsonIsStringifyTransformer.ts +10 -10
  198. package/src/transformers/features/json/JsonStringifyTransformer.ts +9 -9
  199. package/src/transformers/features/json/JsonValidateParseTransformer.ts +10 -10
  200. package/src/transformers/features/json/JsonValidateStringifyTransformer.ts +10 -10
  201. package/src/transformers/features/misc/MetadataTransformer.ts +53 -53
  202. package/src/transformers/features/misc/MiscAssertCloneTransformer.ts +10 -10
  203. package/src/transformers/features/misc/MiscAssertPruneTransformer.ts +10 -10
  204. package/src/transformers/features/misc/MiscCloneTransformer.ts +9 -9
  205. package/src/transformers/features/misc/MiscCreateAssertCloneTransformer.ts +10 -10
  206. package/src/transformers/features/misc/MiscCreateAssertPruneTransformer.ts +10 -10
  207. package/src/transformers/features/misc/MiscCreateCloneTransformer.ts +9 -9
  208. package/src/transformers/features/misc/MiscCreateIsCloneTransformer.ts +9 -9
  209. package/src/transformers/features/misc/MiscCreateIsPruneTransformer.ts +9 -9
  210. package/src/transformers/features/misc/MiscCreatePruneTransformer.ts +9 -9
  211. package/src/transformers/features/misc/MiscCreateValidateCloneTransformer.ts +10 -10
  212. package/src/transformers/features/misc/MiscCreateValidatePruneTransformer.ts +10 -10
  213. package/src/transformers/features/misc/MiscIsCloneTransformer.ts +9 -9
  214. package/src/transformers/features/misc/MiscIsPruneTransformer.ts +9 -9
  215. package/src/transformers/features/misc/MiscLiteralsTransformer.ts +28 -28
  216. package/src/transformers/features/misc/MiscPruneTransformer.ts +9 -9
  217. package/src/transformers/features/misc/MiscValidateCloneTransformer.ts +10 -10
  218. package/src/transformers/features/misc/MiscValidatePruneTransformer.ts +10 -10
  219. package/src/transformers/features/protobuf/CreateProtobufAssertDecodeTransformer.ts +12 -12
  220. package/src/transformers/features/protobuf/CreateProtobufAssertEncodeTransformer.ts +12 -12
  221. package/src/transformers/features/protobuf/CreateProtobufDecodeTransformer.ts +9 -9
  222. package/src/transformers/features/protobuf/CreateProtobufEncodeTransformer.ts +9 -9
  223. package/src/transformers/features/protobuf/CreateProtobufIsDecodeTransformer.ts +12 -12
  224. package/src/transformers/features/protobuf/CreateProtobufIsEncodeTransformer.ts +12 -12
  225. package/src/transformers/features/protobuf/CreateProtobufValidateDecodeTransformer.ts +12 -12
  226. package/src/transformers/features/protobuf/CreateProtobufValidateEncodeTransformer.ts +12 -12
  227. package/src/transformers/features/protobuf/ProtobufAssertDecodeTransformer.ts +10 -10
  228. package/src/transformers/features/protobuf/ProtobufAssertEncodeTransformer.ts +10 -10
  229. package/src/transformers/features/protobuf/ProtobufDecodeTransformer.ts +10 -10
  230. package/src/transformers/features/protobuf/ProtobufEncodeTransformer.ts +10 -10
  231. package/src/transformers/features/protobuf/ProtobufIsDecodeTransformer.ts +10 -10
  232. package/src/transformers/features/protobuf/ProtobufIsEncodeTransformer.ts +10 -10
  233. package/src/transformers/features/protobuf/ProtobufMessageTransformer.ts +31 -31
  234. package/src/transformers/features/protobuf/ProtobufValidateDecodeTransformer.ts +12 -12
  235. package/src/transformers/features/protobuf/ProtobufValidateEncodeTransformer.ts +12 -12
  236. package/src/utils/NameEncoder.ts +32 -32
@@ -1,75 +1,75 @@
1
- import ts from "typescript";
2
-
3
- import { IdentifierFactory } from "../../factories/IdentifierFactory";
4
- import { StatementFactory } from "../../factories/StatementFactory";
5
- import { TypeFactory } from "../../factories/TypeFactory";
6
-
7
- import { IProject } from "../../transformers/IProject";
8
-
9
- import { IsProgrammer } from "../IsProgrammer";
10
- import { ProtobufDecodeProgrammer } from "./ProtobufDecodeProgrammer";
11
-
12
- export namespace ProtobufIsDecodeProgrammer {
13
- export const write =
14
- (project: IProject) =>
15
- (modulo: ts.LeftHandSideExpression) =>
16
- (type: ts.Type, name?: string) =>
17
- ts.factory.createArrowFunction(
18
- undefined,
19
- undefined,
20
- [
21
- IdentifierFactory.parameter(
22
- "input",
23
- ts.factory.createTypeReferenceNode("Uint8Array"),
24
- ),
25
- ],
26
- ts.factory.createUnionTypeNode([
27
- ts.factory.createTypeReferenceNode(
28
- name ?? TypeFactory.getFullName(project.checker)(type),
29
- ),
30
- ts.factory.createLiteralTypeNode(ts.factory.createNull()),
31
- ]),
32
- undefined,
33
- ts.factory.createBlock([
34
- StatementFactory.constant(
35
- "is",
36
- IsProgrammer.write(project)(modulo)(false)(type, name),
37
- ),
38
- StatementFactory.constant(
39
- "decode",
40
- ProtobufDecodeProgrammer.write({
41
- ...project,
42
- options: {
43
- ...project.options,
44
- functional: false,
45
- numeric: false,
46
- },
47
- })(modulo)(type, name),
48
- ),
49
- ts.factory.createIfStatement(
50
- ts.factory.createPrefixUnaryExpression(
51
- ts.SyntaxKind.ExclamationToken,
52
- ts.factory.createCallExpression(
53
- ts.factory.createIdentifier("is"),
54
- undefined,
55
- [ts.factory.createIdentifier("input")],
56
- ),
57
- ),
58
- ts.factory.createReturnStatement(
59
- ts.factory.createNull(),
60
- ),
61
- ),
62
- StatementFactory.constant(
63
- "output",
64
- ts.factory.createCallExpression(
65
- ts.factory.createIdentifier("decode"),
66
- undefined,
67
- [ts.factory.createIdentifier("input")],
68
- ),
69
- ),
70
- ts.factory.createReturnStatement(
71
- ts.factory.createIdentifier("output"),
72
- ),
73
- ]),
74
- );
75
- }
1
+ import ts from "typescript";
2
+
3
+ import { IdentifierFactory } from "../../factories/IdentifierFactory";
4
+ import { StatementFactory } from "../../factories/StatementFactory";
5
+ import { TypeFactory } from "../../factories/TypeFactory";
6
+
7
+ import { IProject } from "../../transformers/IProject";
8
+
9
+ import { IsProgrammer } from "../IsProgrammer";
10
+ import { ProtobufDecodeProgrammer } from "./ProtobufDecodeProgrammer";
11
+
12
+ export namespace ProtobufIsDecodeProgrammer {
13
+ export const write =
14
+ (project: IProject) =>
15
+ (modulo: ts.LeftHandSideExpression) =>
16
+ (type: ts.Type, name?: string) =>
17
+ ts.factory.createArrowFunction(
18
+ undefined,
19
+ undefined,
20
+ [
21
+ IdentifierFactory.parameter(
22
+ "input",
23
+ ts.factory.createTypeReferenceNode("Uint8Array"),
24
+ ),
25
+ ],
26
+ ts.factory.createUnionTypeNode([
27
+ ts.factory.createTypeReferenceNode(
28
+ name ?? TypeFactory.getFullName(project.checker)(type),
29
+ ),
30
+ ts.factory.createLiteralTypeNode(ts.factory.createNull()),
31
+ ]),
32
+ undefined,
33
+ ts.factory.createBlock([
34
+ StatementFactory.constant(
35
+ "is",
36
+ IsProgrammer.write(project)(modulo)(false)(type, name),
37
+ ),
38
+ StatementFactory.constant(
39
+ "decode",
40
+ ProtobufDecodeProgrammer.write({
41
+ ...project,
42
+ options: {
43
+ ...project.options,
44
+ functional: false,
45
+ numeric: false,
46
+ },
47
+ })(modulo)(type, name),
48
+ ),
49
+ StatementFactory.constant(
50
+ "output",
51
+ ts.factory.createCallExpression(
52
+ ts.factory.createIdentifier("decode"),
53
+ undefined,
54
+ [ts.factory.createIdentifier("input")],
55
+ ),
56
+ ),
57
+ ts.factory.createIfStatement(
58
+ ts.factory.createPrefixUnaryExpression(
59
+ ts.SyntaxKind.ExclamationToken,
60
+ ts.factory.createCallExpression(
61
+ ts.factory.createIdentifier("is"),
62
+ undefined,
63
+ [ts.factory.createIdentifier("output")],
64
+ ),
65
+ ),
66
+ ts.factory.createReturnStatement(
67
+ ts.factory.createNull(),
68
+ ),
69
+ ),
70
+ ts.factory.createReturnStatement(
71
+ ts.factory.createIdentifier("output"),
72
+ ),
73
+ ]),
74
+ );
75
+ }
@@ -1,76 +1,76 @@
1
- import ts from "typescript";
2
-
3
- import { IdentifierFactory } from "../../factories/IdentifierFactory";
4
- import { StatementFactory } from "../../factories/StatementFactory";
5
- import { TypeFactory } from "../../factories/TypeFactory";
6
-
7
- import { IProject } from "../../transformers/IProject";
8
-
9
- import { IsProgrammer } from "../IsProgrammer";
10
- import { ProtobufEncodeProgrammer } from "./ProtobufEncodeProgrammer";
11
-
12
- export namespace ProtobufIsEncodeProgrammer {
13
- export const write =
14
- (project: IProject) =>
15
- (modulo: ts.LeftHandSideExpression) =>
16
- (type: ts.Type, name?: string) =>
17
- ts.factory.createArrowFunction(
18
- undefined,
19
- undefined,
20
- [
21
- IdentifierFactory.parameter(
22
- "input",
23
- ts.factory.createTypeReferenceNode(
24
- name ??
25
- TypeFactory.getFullName(project.checker)(type),
26
- ),
27
- ),
28
- ],
29
- ts.factory.createUnionTypeNode([
30
- ts.factory.createTypeReferenceNode("Uint8Array"),
31
- ts.factory.createLiteralTypeNode(ts.factory.createNull()),
32
- ]),
33
- undefined,
34
- ts.factory.createBlock([
35
- StatementFactory.constant(
36
- "is",
37
- IsProgrammer.write({
38
- ...project,
39
- options: {
40
- ...project.options,
41
- functional: false,
42
- numeric: true,
43
- },
44
- })(modulo)(false)(type, name),
45
- ),
46
- StatementFactory.constant(
47
- "encode",
48
- ProtobufEncodeProgrammer.write({
49
- ...project,
50
- options: {
51
- ...project.options,
52
- functional: false,
53
- numeric: false,
54
- },
55
- })(modulo)(type, name),
56
- ),
57
- ts.factory.createReturnStatement(
58
- ts.factory.createConditionalExpression(
59
- ts.factory.createCallExpression(
60
- ts.factory.createIdentifier("is"),
61
- undefined,
62
- [ts.factory.createIdentifier("input")],
63
- ),
64
- undefined,
65
- ts.factory.createCallExpression(
66
- ts.factory.createIdentifier("encode"),
67
- undefined,
68
- [ts.factory.createIdentifier("input")],
69
- ),
70
- undefined,
71
- ts.factory.createNull(),
72
- ),
73
- ),
74
- ]),
75
- );
76
- }
1
+ import ts from "typescript";
2
+
3
+ import { IdentifierFactory } from "../../factories/IdentifierFactory";
4
+ import { StatementFactory } from "../../factories/StatementFactory";
5
+ import { TypeFactory } from "../../factories/TypeFactory";
6
+
7
+ import { IProject } from "../../transformers/IProject";
8
+
9
+ import { IsProgrammer } from "../IsProgrammer";
10
+ import { ProtobufEncodeProgrammer } from "./ProtobufEncodeProgrammer";
11
+
12
+ export namespace ProtobufIsEncodeProgrammer {
13
+ export const write =
14
+ (project: IProject) =>
15
+ (modulo: ts.LeftHandSideExpression) =>
16
+ (type: ts.Type, name?: string) =>
17
+ ts.factory.createArrowFunction(
18
+ undefined,
19
+ undefined,
20
+ [
21
+ IdentifierFactory.parameter(
22
+ "input",
23
+ ts.factory.createTypeReferenceNode(
24
+ name ??
25
+ TypeFactory.getFullName(project.checker)(type),
26
+ ),
27
+ ),
28
+ ],
29
+ ts.factory.createUnionTypeNode([
30
+ ts.factory.createTypeReferenceNode("Uint8Array"),
31
+ ts.factory.createLiteralTypeNode(ts.factory.createNull()),
32
+ ]),
33
+ undefined,
34
+ ts.factory.createBlock([
35
+ StatementFactory.constant(
36
+ "is",
37
+ IsProgrammer.write({
38
+ ...project,
39
+ options: {
40
+ ...project.options,
41
+ functional: false,
42
+ numeric: true,
43
+ },
44
+ })(modulo)(false)(type, name),
45
+ ),
46
+ StatementFactory.constant(
47
+ "encode",
48
+ ProtobufEncodeProgrammer.write({
49
+ ...project,
50
+ options: {
51
+ ...project.options,
52
+ functional: false,
53
+ numeric: false,
54
+ },
55
+ })(modulo)(type, name),
56
+ ),
57
+ ts.factory.createReturnStatement(
58
+ ts.factory.createConditionalExpression(
59
+ ts.factory.createCallExpression(
60
+ ts.factory.createIdentifier("is"),
61
+ undefined,
62
+ [ts.factory.createIdentifier("input")],
63
+ ),
64
+ undefined,
65
+ ts.factory.createCallExpression(
66
+ ts.factory.createIdentifier("encode"),
67
+ undefined,
68
+ [ts.factory.createIdentifier("input")],
69
+ ),
70
+ undefined,
71
+ ts.factory.createNull(),
72
+ ),
73
+ ),
74
+ ]),
75
+ );
76
+ }
@@ -1,178 +1,178 @@
1
- import ts from "typescript";
2
-
3
- import { MetadataCollection } from "../../factories/MetadataCollection";
4
- import { ProtobufFactory } from "../../factories/ProtobufFactory";
5
-
6
- import { IMetadataTag } from "../../schemas/metadata/IMetadataTag";
7
- import { Metadata } from "../../schemas/metadata/Metadata";
8
- import { MetadataObject } from "../../schemas/metadata/MetadataObject";
9
-
10
- import { IProject } from "../../transformers/IProject";
11
-
12
- import { Atomic } from "../../typings/Atomic";
13
-
14
- import { MapUtil } from "../../utils/MapUtil";
15
- import { NameEncoder } from "../../utils/NameEncoder";
16
-
17
- import { ProtobufUtil } from "../helpers/ProtobufUtil";
18
-
19
- export namespace ProtobufMessageProgrammer {
20
- export const write =
21
- ({ checker }: IProject) =>
22
- (type: ts.Type) => {
23
- // PARSE TARGET TYPE
24
- const collection: MetadataCollection = new MetadataCollection();
25
- ProtobufFactory.metadata("message")(checker)(collection)(type);
26
-
27
- // STRINGIFY
28
- const hierarchies: Map<string, Hierarchy> = new Map();
29
- for (const obj of collection.objects())
30
- if (is_dynamic_object(obj) === false) emplace(hierarchies)(obj);
31
-
32
- const content: string =
33
- `syntax = "proto3";\n\n` +
34
- [...hierarchies.values()]
35
- .map((hier) => write_hierarchy(hier))
36
- .join("\n\n");
37
-
38
- // RETURNS
39
- return ts.factory.createStringLiteral(content);
40
- };
41
-
42
- const emplace = (dict: Map<string, Hierarchy>) => (obj: MetadataObject) => {
43
- const accessors: string[] = obj.name.split(".");
44
- accessors.forEach((access, i) => {
45
- const hierarchy: Hierarchy = MapUtil.take(dict)(access, () => ({
46
- key: access,
47
- object: null!,
48
- children: new Map(),
49
- }));
50
- dict = hierarchy.children;
51
- if (i === accessors.length - 1) hierarchy.object = obj;
52
- });
53
- };
54
-
55
- const is_dynamic_object = (obj: MetadataObject): boolean =>
56
- obj.properties.length === 1 &&
57
- obj.properties[0]!.key.isSoleLiteral() === false;
58
-
59
- const write_hierarchy = (hierarchy: Hierarchy): string => {
60
- const elements: string[] = [
61
- `message ${NameEncoder.encode(hierarchy.key)} {`,
62
- ];
63
- if (hierarchy.object !== null) {
64
- const text: string = write_object(hierarchy.object);
65
- elements.push(...text.split("\n").map((str) => `${TAB}${str}`));
66
- }
67
- if (hierarchy.children.size)
68
- elements.push(
69
- [...hierarchy.children.values()]
70
- .map((child) => write_hierarchy(child))
71
- .map((body) =>
72
- body
73
- .split("\n")
74
- .map((line) => `${TAB}${line}`)
75
- .join("\n"),
76
- )
77
- .join("\n\n"),
78
- );
79
- elements.push("}");
80
- return elements.join("\n");
81
- };
82
-
83
- const write_object = (obj: MetadataObject): string => {
84
- const ptr: IPointer<number> = { value: 0 };
85
- return obj.properties
86
- .map((prop) => {
87
- const key: string = prop.key.getSoleLiteral()!;
88
- const type: string = decode(ptr)(prop.tags)(prop.value);
89
- return type.indexOf("${name}") !== -1
90
- ? type.replace("${name}", key)
91
- : `${
92
- prop.value.arrays.length || type.startsWith("map<")
93
- ? ""
94
- : !prop.value.isRequired() || prop.value.nullable
95
- ? "optional "
96
- : "required "
97
- }${type} ${key} = ${++ptr.value};`;
98
- })
99
- .join("\n");
100
- };
101
-
102
- /* -----------------------------------------------------------
103
- DECODERS
104
- ----------------------------------------------------------- */
105
- const decode =
106
- (ptr: IPointer<number>) =>
107
- (tags: IMetadataTag[]) =>
108
- (meta: Metadata): string => {
109
- const elements: Set<string> = new Set();
110
- if (meta.natives.length) elements.add("bytes");
111
- for (const atomic of ProtobufUtil.atomics(meta))
112
- elements.add(decode_atomic(tags)(atomic));
113
- for (const array of meta.arrays)
114
- elements.add(`repeated ${decode(ptr)(tags)(array.value)}`);
115
- for (const obj of meta.objects)
116
- elements.add(
117
- is_dynamic_object(obj)
118
- ? decode_map(ptr)(tags)(obj.properties[0]!)
119
- : NameEncoder.encode(obj.name),
120
- );
121
- for (const map of meta.maps)
122
- elements.add(decode_map(ptr)(tags)(map));
123
- return elements.size === 1
124
- ? [...elements][0]!
125
- : [
126
- "oneof ${name} {",
127
- ...[...elements].map(
128
- (str) =>
129
- `${TAB}${str} v${
130
- ptr.value + 1
131
- } = ${++ptr.value};`,
132
- ),
133
- "}",
134
- ].join("\n");
135
- };
136
-
137
- const decode_atomic =
138
- (tags: IMetadataTag[]) =>
139
- (literal: Atomic.Literal): string => {
140
- if (literal === "boolean") return "bool";
141
- else if (literal === "bigint")
142
- return tags.find(
143
- (t) => t.kind === "type" && t.value === "uint64",
144
- )
145
- ? "uint64"
146
- : "int64";
147
- else if (literal === "number") {
148
- const type = tags.find((t) => t.kind === "type") as
149
- | IMetadataTag.INumberType
150
- | undefined;
151
- if (type?.value === undefined) return "double";
152
- else if (type.value === "int") return "int32";
153
- else if (type.value === "uint") return "uint32";
154
- else return type.value;
155
- }
156
- return literal;
157
- };
158
-
159
- const decode_map =
160
- (ptr: IPointer<number>) =>
161
- (tags: IMetadataTag[]) =>
162
- (prop: Metadata.Entry): string =>
163
- `map<${decode(ptr)([])(prop.key)}, ${decode(ptr)(tags)(
164
- prop.value,
165
- )}>`;
166
- }
167
-
168
- interface Hierarchy {
169
- key: string;
170
- object: MetadataObject | null;
171
- children: Map<string, Hierarchy>;
172
- }
173
-
174
- interface IPointer<T> {
175
- value: T;
176
- }
177
-
178
- const TAB = " ".repeat(4);
1
+ import ts from "typescript";
2
+
3
+ import { MetadataCollection } from "../../factories/MetadataCollection";
4
+ import { ProtobufFactory } from "../../factories/ProtobufFactory";
5
+
6
+ import { IMetadataTag } from "../../schemas/metadata/IMetadataTag";
7
+ import { Metadata } from "../../schemas/metadata/Metadata";
8
+ import { MetadataObject } from "../../schemas/metadata/MetadataObject";
9
+
10
+ import { IProject } from "../../transformers/IProject";
11
+
12
+ import { Atomic } from "../../typings/Atomic";
13
+
14
+ import { MapUtil } from "../../utils/MapUtil";
15
+ import { NameEncoder } from "../../utils/NameEncoder";
16
+
17
+ import { ProtobufUtil } from "../helpers/ProtobufUtil";
18
+
19
+ export namespace ProtobufMessageProgrammer {
20
+ export const write =
21
+ ({ checker }: IProject) =>
22
+ (type: ts.Type) => {
23
+ // PARSE TARGET TYPE
24
+ const collection: MetadataCollection = new MetadataCollection();
25
+ ProtobufFactory.metadata("message")(checker)(collection)(type);
26
+
27
+ // STRINGIFY
28
+ const hierarchies: Map<string, Hierarchy> = new Map();
29
+ for (const obj of collection.objects())
30
+ if (is_dynamic_object(obj) === false) emplace(hierarchies)(obj);
31
+
32
+ const content: string =
33
+ `syntax = "proto3";\n\n` +
34
+ [...hierarchies.values()]
35
+ .map((hier) => write_hierarchy(hier))
36
+ .join("\n\n");
37
+
38
+ // RETURNS
39
+ return ts.factory.createStringLiteral(content);
40
+ };
41
+
42
+ const emplace = (dict: Map<string, Hierarchy>) => (obj: MetadataObject) => {
43
+ const accessors: string[] = obj.name.split(".");
44
+ accessors.forEach((access, i) => {
45
+ const hierarchy: Hierarchy = MapUtil.take(dict)(access, () => ({
46
+ key: access,
47
+ object: null!,
48
+ children: new Map(),
49
+ }));
50
+ dict = hierarchy.children;
51
+ if (i === accessors.length - 1) hierarchy.object = obj;
52
+ });
53
+ };
54
+
55
+ const is_dynamic_object = (obj: MetadataObject): boolean =>
56
+ obj.properties.length === 1 &&
57
+ obj.properties[0]!.key.isSoleLiteral() === false;
58
+
59
+ const write_hierarchy = (hierarchy: Hierarchy): string => {
60
+ const elements: string[] = [
61
+ `message ${NameEncoder.encode(hierarchy.key)} {`,
62
+ ];
63
+ if (hierarchy.object !== null) {
64
+ const text: string = write_object(hierarchy.object);
65
+ elements.push(...text.split("\n").map((str) => `${TAB}${str}`));
66
+ }
67
+ if (hierarchy.children.size)
68
+ elements.push(
69
+ [...hierarchy.children.values()]
70
+ .map((child) => write_hierarchy(child))
71
+ .map((body) =>
72
+ body
73
+ .split("\n")
74
+ .map((line) => `${TAB}${line}`)
75
+ .join("\n"),
76
+ )
77
+ .join("\n\n"),
78
+ );
79
+ elements.push("}");
80
+ return elements.join("\n");
81
+ };
82
+
83
+ const write_object = (obj: MetadataObject): string => {
84
+ const ptr: IPointer<number> = { value: 0 };
85
+ return obj.properties
86
+ .map((prop) => {
87
+ const key: string = prop.key.getSoleLiteral()!;
88
+ const type: string = decode(ptr)(prop.tags)(prop.value);
89
+ return type.indexOf("${name}") !== -1
90
+ ? type.replace("${name}", key)
91
+ : `${
92
+ prop.value.arrays.length || type.startsWith("map<")
93
+ ? ""
94
+ : !prop.value.isRequired() || prop.value.nullable
95
+ ? "optional "
96
+ : "required "
97
+ }${type} ${key} = ${++ptr.value};`;
98
+ })
99
+ .join("\n");
100
+ };
101
+
102
+ /* -----------------------------------------------------------
103
+ DECODERS
104
+ ----------------------------------------------------------- */
105
+ const decode =
106
+ (ptr: IPointer<number>) =>
107
+ (tags: IMetadataTag[]) =>
108
+ (meta: Metadata): string => {
109
+ const elements: Set<string> = new Set();
110
+ if (meta.natives.length) elements.add("bytes");
111
+ for (const atomic of ProtobufUtil.getAtomics(meta))
112
+ elements.add(decode_atomic(tags)(atomic));
113
+ for (const array of meta.arrays)
114
+ elements.add(`repeated ${decode(ptr)(tags)(array.value)}`);
115
+ for (const obj of meta.objects)
116
+ elements.add(
117
+ is_dynamic_object(obj)
118
+ ? decode_map(ptr)(tags)(obj.properties[0]!)
119
+ : NameEncoder.encode(obj.name),
120
+ );
121
+ for (const map of meta.maps)
122
+ elements.add(decode_map(ptr)(tags)(map));
123
+ return elements.size === 1
124
+ ? [...elements][0]!
125
+ : [
126
+ "oneof ${name} {",
127
+ ...[...elements].map(
128
+ (str) =>
129
+ `${TAB}${str} v${
130
+ ptr.value + 1
131
+ } = ${++ptr.value};`,
132
+ ),
133
+ "}",
134
+ ].join("\n");
135
+ };
136
+
137
+ const decode_atomic =
138
+ (tags: IMetadataTag[]) =>
139
+ (literal: Atomic.Literal): string => {
140
+ if (literal === "boolean") return "bool";
141
+ else if (literal === "bigint")
142
+ return tags.find(
143
+ (t) => t.kind === "type" && t.value === "uint64",
144
+ )
145
+ ? "uint64"
146
+ : "int64";
147
+ else if (literal === "number") {
148
+ const type = tags.find((t) => t.kind === "type") as
149
+ | IMetadataTag.INumberType
150
+ | undefined;
151
+ if (type?.value === undefined) return "double";
152
+ else if (type.value === "int") return "int32";
153
+ else if (type.value === "uint") return "uint32";
154
+ else return type.value;
155
+ }
156
+ return literal;
157
+ };
158
+
159
+ const decode_map =
160
+ (ptr: IPointer<number>) =>
161
+ (tags: IMetadataTag[]) =>
162
+ (prop: Metadata.Entry): string =>
163
+ `map<${decode(ptr)([])(prop.key)}, ${decode(ptr)(tags)(
164
+ prop.value,
165
+ )}>`;
166
+ }
167
+
168
+ interface Hierarchy {
169
+ key: string;
170
+ object: MetadataObject | null;
171
+ children: Map<string, Hierarchy>;
172
+ }
173
+
174
+ interface IPointer<T> {
175
+ value: T;
176
+ }
177
+
178
+ const TAB = " ".repeat(4);