typia 5.0.0-dev.20230820-2 → 5.0.0-dev.20230821

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 (217) hide show
  1. package/README.md +1 -1
  2. package/lib/factories/MetadataTagFactory.js.map +1 -1
  3. package/lib/programmers/RandomProgrammer.js +15 -12
  4. package/lib/programmers/RandomProgrammer.js.map +1 -1
  5. package/lib/programmers/helpers/RandomRanger.js +2 -2
  6. package/lib/programmers/helpers/RandomRanger.js.map +1 -1
  7. package/lib/programmers/internal/application_number.js +6 -1
  8. package/lib/programmers/internal/application_number.js.map +1 -1
  9. package/lib/programmers/internal/check_bigint.js +8 -11
  10. package/lib/programmers/internal/check_bigint.js.map +1 -1
  11. package/lib/programmers/internal/check_number.js +12 -2
  12. package/lib/programmers/internal/check_number.js.map +1 -1
  13. package/package.json +1 -1
  14. package/src/factories/ExpressionFactory.ts +115 -115
  15. package/src/factories/MetadataCollection.ts +269 -269
  16. package/src/factories/MetadataFactory.ts +34 -34
  17. package/src/factories/MetadataTagFactory.ts +364 -364
  18. package/src/factories/ProtobufFactory.ts +251 -251
  19. package/src/factories/StatementFactory.ts +72 -72
  20. package/src/factories/internal/metadata/MetadataHelper.ts +12 -12
  21. package/src/factories/internal/metadata/emend_metadata_atomics.ts +33 -33
  22. package/src/factories/internal/metadata/emplace_metadata_alias.ts +40 -40
  23. package/src/factories/internal/metadata/emplace_metadata_array.ts +34 -34
  24. package/src/factories/internal/metadata/emplace_metadata_object.ts +136 -136
  25. package/src/factories/internal/metadata/emplace_metadata_tuple.ts +50 -50
  26. package/src/factories/internal/metadata/explore_metadata.ts +38 -38
  27. package/src/factories/internal/metadata/iterate_metadata.ts +81 -81
  28. package/src/factories/internal/metadata/iterate_metadata_alias.ts +30 -30
  29. package/src/factories/internal/metadata/iterate_metadata_array.ts +24 -24
  30. package/src/factories/internal/metadata/iterate_metadata_atomic.ts +59 -59
  31. package/src/factories/internal/metadata/iterate_metadata_coalesce.ts +33 -33
  32. package/src/factories/internal/metadata/iterate_metadata_collection.ts +133 -133
  33. package/src/factories/internal/metadata/iterate_metadata_constant.ts +58 -58
  34. package/src/factories/internal/metadata/iterate_metadata_intersection.ts +84 -84
  35. package/src/factories/internal/metadata/iterate_metadata_map.ts +41 -41
  36. package/src/factories/internal/metadata/iterate_metadata_native.ts +219 -219
  37. package/src/factories/internal/metadata/iterate_metadata_object.ts +43 -43
  38. package/src/factories/internal/metadata/iterate_metadata_resolve.ts +49 -49
  39. package/src/factories/internal/metadata/iterate_metadata_set.ts +33 -33
  40. package/src/factories/internal/metadata/iterate_metadata_sort.ts +69 -69
  41. package/src/factories/internal/metadata/iterate_metadata_tag.ts +31 -31
  42. package/src/factories/internal/metadata/iterate_metadata_template.ts +38 -38
  43. package/src/factories/internal/metadata/iterate_metadata_tuple.ts +24 -24
  44. package/src/factories/internal/metadata/iterate_metadata_union.ts +24 -24
  45. package/src/functional/$ProtobufReader.ts +188 -188
  46. package/src/functional/$ProtobufSizer.ts +144 -144
  47. package/src/functional/$ProtobufWriter.ts +152 -152
  48. package/src/functional/$number.ts +13 -13
  49. package/src/functional/$strlen.ts +7 -7
  50. package/src/functional/$varint.ts +130 -130
  51. package/src/functional/$zigzag.ts +39 -39
  52. package/src/functional/IProtobufWriter.ts +18 -18
  53. package/src/functional/Namespace.ts +149 -149
  54. package/src/json.ts +648 -648
  55. package/src/misc.ts +651 -651
  56. package/src/module.ts +708 -708
  57. package/src/programmers/CheckerProgrammer.ts +1173 -1173
  58. package/src/programmers/FeatureProgrammer.ts +497 -497
  59. package/src/programmers/IsProgrammer.ts +239 -239
  60. package/src/programmers/IsPruneProgrammer.ts +73 -73
  61. package/src/programmers/RandomProgrammer.ts +578 -584
  62. package/src/programmers/helpers/AtomicPredicator.ts +31 -31
  63. package/src/programmers/helpers/CloneJoiner.ts +107 -107
  64. package/src/programmers/helpers/FunctionImporeter.ts +89 -89
  65. package/src/programmers/helpers/IExpressionEntry.ts +12 -12
  66. package/src/programmers/helpers/ProtobufUtil.ts +24 -24
  67. package/src/programmers/helpers/ProtobufWire.ts +34 -34
  68. package/src/programmers/helpers/PruneJoiner.ts +143 -143
  69. package/src/programmers/helpers/RandomJoiner.ts +173 -173
  70. package/src/programmers/helpers/RandomRanger.ts +208 -216
  71. package/src/programmers/helpers/StringifyPredicator.ts +13 -13
  72. package/src/programmers/helpers/UnionExplorer.ts +310 -310
  73. package/src/programmers/helpers/UnionPredicator.ts +81 -81
  74. package/src/programmers/helpers/disable_function_importer_declare.ts +27 -27
  75. package/src/programmers/internal/application_alias.ts +66 -66
  76. package/src/programmers/internal/application_array.ts +30 -30
  77. package/src/programmers/internal/application_constant.ts +26 -26
  78. package/src/programmers/internal/application_default.ts +17 -17
  79. package/src/programmers/internal/application_default_string.ts +33 -33
  80. package/src/programmers/internal/application_native.ts +39 -39
  81. package/src/programmers/internal/application_number.ts +81 -77
  82. package/src/programmers/internal/application_object.ts +165 -165
  83. package/src/programmers/internal/application_resolved.ts +55 -55
  84. package/src/programmers/internal/application_schema.ts +157 -157
  85. package/src/programmers/internal/application_string.ts +44 -44
  86. package/src/programmers/internal/application_templates.ts +25 -25
  87. package/src/programmers/internal/application_tuple.ts +57 -57
  88. package/src/programmers/internal/check_array.ts +30 -30
  89. package/src/programmers/internal/check_array_length.ts +35 -35
  90. package/src/programmers/internal/check_bigint.ts +110 -92
  91. package/src/programmers/internal/check_custom.ts +31 -31
  92. package/src/programmers/internal/check_number.ts +258 -230
  93. package/src/programmers/internal/check_string.ts +25 -25
  94. package/src/programmers/internal/check_string_tags.ts +67 -67
  95. package/src/programmers/internal/check_template.ts +56 -56
  96. package/src/programmers/internal/check_union_array_like.ts +329 -329
  97. package/src/programmers/internal/decode_union_object.ts +84 -84
  98. package/src/programmers/internal/feature_object_entries.ts +63 -63
  99. package/src/programmers/internal/get_comment_tags.ts +23 -23
  100. package/src/programmers/internal/metadata_to_pattern.ts +34 -34
  101. package/src/programmers/internal/prune_object_properties.ts +60 -60
  102. package/src/programmers/internal/random_custom.ts +29 -29
  103. package/src/programmers/internal/stringify_regular_properties.ts +83 -83
  104. package/src/programmers/internal/template_to_pattern.ts +15 -15
  105. package/src/programmers/internal/wrap_metadata_rest_tuple.ts +16 -16
  106. package/src/programmers/json/JsonApplicationProgrammer.ts +47 -47
  107. package/src/programmers/json/JsonAssertParseProgrammer.ts +66 -66
  108. package/src/programmers/json/JsonAssertStringifyProgrammer.ts +66 -66
  109. package/src/programmers/json/JsonIsParseProgrammer.ts +72 -72
  110. package/src/programmers/json/JsonIsStringifyProgrammer.ts +76 -76
  111. package/src/programmers/json/JsonStringifyProgrammer.ts +987 -987
  112. package/src/programmers/json/JsonValidateParseProgrammer.ts +70 -70
  113. package/src/programmers/json/JsonValidateStringifyProgrammer.ts +84 -84
  114. package/src/programmers/misc/MiscAssertCloneProgrammer.ts +71 -71
  115. package/src/programmers/misc/MiscAssertPruneProgrammer.ts +68 -68
  116. package/src/programmers/misc/MiscCloneProgrammer.ts +587 -587
  117. package/src/programmers/misc/MiscIsCloneProgrammer.ts +78 -78
  118. package/src/programmers/misc/MiscLiteralsProgrammer.ts +64 -64
  119. package/src/programmers/misc/MiscPruneProgrammer.ts +542 -542
  120. package/src/programmers/misc/MiscValidateCloneProgrammer.ts +85 -85
  121. package/src/programmers/misc/MiscValidatePruneProgrammer.ts +78 -78
  122. package/src/programmers/protobuf/ProtobufAssertDecodeProgrammer.ts +69 -69
  123. package/src/programmers/protobuf/ProtobufAssertEncodeProgrammer.ts +66 -66
  124. package/src/programmers/protobuf/ProtobufDecodeProgrammer.ts +38 -38
  125. package/src/programmers/protobuf/ProtobufEncodeProgrammer.ts +920 -920
  126. package/src/programmers/protobuf/ProtobufIsDecodeProgrammer.ts +75 -75
  127. package/src/programmers/protobuf/ProtobufIsEncodeProgrammer.ts +76 -76
  128. package/src/programmers/protobuf/ProtobufMessageProgrammer.ts +178 -178
  129. package/src/programmers/protobuf/ProtobufValidateDecodeProgrammer.ts +83 -83
  130. package/src/programmers/protobuf/ProtobufValidateEncodeProgrammer.ts +86 -86
  131. package/src/protobuf.ts +239 -239
  132. package/src/schemas/json/IJsonApplication.ts +8 -8
  133. package/src/schemas/json/IJsonComponents.ts +33 -33
  134. package/src/schemas/json/IJsonSchema.ts +133 -133
  135. package/src/schemas/metadata/ICommentTag.ts +4 -4
  136. package/src/schemas/metadata/IJsDocTagInfo.ts +10 -10
  137. package/src/schemas/metadata/IMetadata.ts +28 -28
  138. package/src/schemas/metadata/IMetadataAlias.ts +14 -14
  139. package/src/schemas/metadata/IMetadataApplication.ts +7 -7
  140. package/src/schemas/metadata/IMetadataArray.ts +10 -10
  141. package/src/schemas/metadata/IMetadataCollection.ts +11 -11
  142. package/src/schemas/metadata/IMetadataConstant.ts +16 -16
  143. package/src/schemas/metadata/IMetadataDictionary.ts +14 -14
  144. package/src/schemas/metadata/IMetadataEntry.ts +6 -6
  145. package/src/schemas/metadata/IMetadataObject.ts +18 -18
  146. package/src/schemas/metadata/IMetadataProperty.ts +11 -11
  147. package/src/schemas/metadata/IMetadataResolved.ts +6 -6
  148. package/src/schemas/metadata/IMetadataTag.ts +112 -112
  149. package/src/schemas/metadata/IMetadataTuple.ts +10 -10
  150. package/src/schemas/metadata/Metadata.ts +637 -637
  151. package/src/schemas/metadata/MetadataAlias.ts +66 -66
  152. package/src/schemas/metadata/MetadataArray.ts +55 -55
  153. package/src/schemas/metadata/MetadataConstant.ts +3 -3
  154. package/src/schemas/metadata/MetadataObject.ts +139 -139
  155. package/src/schemas/metadata/MetadataProperty.ts +64 -64
  156. package/src/schemas/metadata/MetadataResolved.ts +51 -51
  157. package/src/schemas/metadata/MetadataTuple.ts +58 -58
  158. package/src/transformers/CallExpressionTransformer.ts +240 -240
  159. package/src/transformers/features/AssertTransformer.ts +11 -11
  160. package/src/transformers/features/CreateAssertTransformer.ts +13 -13
  161. package/src/transformers/features/CreateIsTransformer.ts +11 -11
  162. package/src/transformers/features/CreateRandomTransformer.ts +39 -39
  163. package/src/transformers/features/CreateValidateTransformer.ts +13 -13
  164. package/src/transformers/features/IsTransformer.ts +11 -11
  165. package/src/transformers/features/RandomTransformer.ts +42 -42
  166. package/src/transformers/features/ValidateTransformer.ts +11 -11
  167. package/src/transformers/features/json/JsonApplicationTransformer.ts +111 -111
  168. package/src/transformers/features/json/JsonAssertParseTransformer.ts +10 -10
  169. package/src/transformers/features/json/JsonAssertStringifyTransformer.ts +10 -10
  170. package/src/transformers/features/json/JsonCreateAssertParseTransformer.ts +10 -10
  171. package/src/transformers/features/json/JsonCreateAssertStringifyTransformer.ts +12 -12
  172. package/src/transformers/features/json/JsonCreateIsParseTransformer.ts +9 -9
  173. package/src/transformers/features/json/JsonCreateIsStringifyTransformer.ts +10 -10
  174. package/src/transformers/features/json/JsonCreateStringifyTransformer.ts +9 -9
  175. package/src/transformers/features/json/JsonCreateValidateParseTransformer.ts +10 -10
  176. package/src/transformers/features/json/JsonCreateValidateStringifyProgrammer.ts +12 -12
  177. package/src/transformers/features/json/JsonIsParseTransformer.ts +9 -9
  178. package/src/transformers/features/json/JsonIsStringifyTransformer.ts +10 -10
  179. package/src/transformers/features/json/JsonStringifyTransformer.ts +9 -9
  180. package/src/transformers/features/json/JsonValidateParseTransformer.ts +10 -10
  181. package/src/transformers/features/json/JsonValidateStringifyTransformer.ts +10 -10
  182. package/src/transformers/features/misc/MetadataTransformer.ts +53 -53
  183. package/src/transformers/features/misc/MiscAssertCloneTransformer.ts +10 -10
  184. package/src/transformers/features/misc/MiscAssertPruneTransformer.ts +10 -10
  185. package/src/transformers/features/misc/MiscCloneTransformer.ts +9 -9
  186. package/src/transformers/features/misc/MiscCreateAssertCloneTransformer.ts +10 -10
  187. package/src/transformers/features/misc/MiscCreateAssertPruneTransformer.ts +10 -10
  188. package/src/transformers/features/misc/MiscCreateCloneTransformer.ts +9 -9
  189. package/src/transformers/features/misc/MiscCreateIsCloneTransformer.ts +9 -9
  190. package/src/transformers/features/misc/MiscCreateIsPruneTransformer.ts +9 -9
  191. package/src/transformers/features/misc/MiscCreatePruneTransformer.ts +9 -9
  192. package/src/transformers/features/misc/MiscCreateValidateCloneTransformer.ts +10 -10
  193. package/src/transformers/features/misc/MiscCreateValidatePruneTransformer.ts +10 -10
  194. package/src/transformers/features/misc/MiscIsCloneTransformer.ts +9 -9
  195. package/src/transformers/features/misc/MiscIsPruneTransformer.ts +9 -9
  196. package/src/transformers/features/misc/MiscLiteralsTransformer.ts +28 -28
  197. package/src/transformers/features/misc/MiscPruneTransformer.ts +9 -9
  198. package/src/transformers/features/misc/MiscValidateCloneTransformer.ts +10 -10
  199. package/src/transformers/features/misc/MiscValidatePruneTransformer.ts +10 -10
  200. package/src/transformers/features/protobuf/CreateProtobufAssertDecodeTransformer.ts +12 -12
  201. package/src/transformers/features/protobuf/CreateProtobufAssertEncodeTransformer.ts +12 -12
  202. package/src/transformers/features/protobuf/CreateProtobufDecodeTransformer.ts +9 -9
  203. package/src/transformers/features/protobuf/CreateProtobufEncodeTransformer.ts +9 -9
  204. package/src/transformers/features/protobuf/CreateProtobufIsDecodeTransformer.ts +12 -12
  205. package/src/transformers/features/protobuf/CreateProtobufIsEncodeTransformer.ts +12 -12
  206. package/src/transformers/features/protobuf/CreateProtobufValidateDecodeTransformer.ts +12 -12
  207. package/src/transformers/features/protobuf/CreateProtobufValidateEncodeTransformer.ts +12 -12
  208. package/src/transformers/features/protobuf/ProtobufAssertDecodeTransformer.ts +10 -10
  209. package/src/transformers/features/protobuf/ProtobufAssertEncodeTransformer.ts +10 -10
  210. package/src/transformers/features/protobuf/ProtobufDecodeTransformer.ts +10 -10
  211. package/src/transformers/features/protobuf/ProtobufEncodeTransformer.ts +10 -10
  212. package/src/transformers/features/protobuf/ProtobufIsDecodeTransformer.ts +10 -10
  213. package/src/transformers/features/protobuf/ProtobufIsEncodeTransformer.ts +10 -10
  214. package/src/transformers/features/protobuf/ProtobufMessageTransformer.ts +31 -31
  215. package/src/transformers/features/protobuf/ProtobufValidateDecodeTransformer.ts +12 -12
  216. package/src/transformers/features/protobuf/ProtobufValidateEncodeTransformer.ts +12 -12
  217. package/src/utils/NameEncoder.ts +32 -32
@@ -1,152 +1,152 @@
1
- import { $ProtobufSizer } from "./$ProtobufSizer";
2
- import { IProtobufWriter } from "./IProtobufWriter";
3
-
4
- export class $ProtobufWriter implements IProtobufWriter {
5
- /**
6
- * Related sizer
7
- */
8
- private readonly sizer: $ProtobufSizer;
9
-
10
- /**
11
- * Current pointer.
12
- */
13
- private ptr: number;
14
-
15
- /**
16
- * Protobuf buffer.
17
- */
18
- private buf: Uint8Array;
19
-
20
- /**
21
- * DataView for buffer.
22
- */
23
- private view: DataView;
24
-
25
- /**
26
- * Index in varlen array from sizer.
27
- */
28
- private varlenidx: number;
29
-
30
- constructor(sizer: $ProtobufSizer) {
31
- this.sizer = sizer;
32
- this.buf = new Uint8Array(sizer.len);
33
- this.view = new DataView(this.buf.buffer);
34
- this.ptr = 0;
35
- this.varlenidx = 0;
36
- }
37
-
38
- buffer(): Uint8Array {
39
- return this.buf;
40
- }
41
-
42
- bool(value: boolean): void {
43
- this.byte(value ? 1 : 0);
44
- }
45
-
46
- byte(value: number): void {
47
- this.buf[this.ptr++] = value & 255;
48
- }
49
-
50
- int32(value: number): void {
51
- if (value < 0) this.int64(value);
52
- else this.variant32(value >>> 0);
53
- }
54
-
55
- sint32(value: number): void {
56
- this.variant32((value << 1) ^ (value >> 31));
57
- }
58
-
59
- uint32(value: number): void {
60
- this.variant32(value);
61
- }
62
-
63
- sint64(value: number | bigint): void {
64
- value = BigInt(value);
65
- this.variant64((value << ND01) ^ (value >> ND63));
66
- }
67
-
68
- int64(value: number | bigint): void {
69
- this.variant64(BigInt(value));
70
- }
71
-
72
- uint64(value: number | bigint): void {
73
- this.variant64(BigInt(value));
74
- }
75
-
76
- float(val: number): void {
77
- this.view.setFloat32(this.ptr, val, true);
78
- this.ptr += 4;
79
- }
80
-
81
- double(val: number): void {
82
- this.view.setFloat64(this.ptr, val, true);
83
- this.ptr += 8;
84
- }
85
-
86
- bytes(value: Uint8Array): void {
87
- this.fork();
88
- this.uint32(value.byteLength);
89
- for (let i = 0; i < value.byteLength; i++)
90
- this.buf[this.ptr++] = value[i]!;
91
- }
92
-
93
- string(value: string): void {
94
- const len: number = this.varlen(); // use precomputed length
95
- this.uint32(len);
96
-
97
- const binary: Uint8Array = utf8.encode(value);
98
- for (let i = 0; i < binary.byteLength; i++)
99
- this.buf[this.ptr++] = binary[i]!;
100
- }
101
-
102
- fork(): void {
103
- this.uint32(this.varlen()); // use precomputed length
104
- }
105
-
106
- ldelim(): void {
107
- // nothing to do - all dirty work done by sizer
108
- }
109
-
110
- finish(): Uint8Array {
111
- return this.buf;
112
- }
113
-
114
- reset(): void {
115
- this.buf = new Uint8Array(this.sizer.len);
116
- this.view = new DataView(this.buf.buffer);
117
- this.ptr = 0;
118
- this.varlenidx = 0;
119
- }
120
-
121
- private variant32(val: number): void {
122
- while (val > 0x7f) {
123
- this.buf[this.ptr++] = (val & 0x7f) | 0x80;
124
- val = val >>> 7;
125
- }
126
- this.buf[this.ptr++] = val;
127
- }
128
-
129
- private variant64(val: bigint): void {
130
- val = BigInt.asUintN(64, val);
131
- while (val > NX7F) {
132
- this.buf[this.ptr++] = Number((val & NX7F) | NX80);
133
- val = val >> ND07; // @todo
134
- // (val / (128n) % 2n === 1n)
135
- }
136
- this.buf[this.ptr++] = Number(val);
137
- }
138
-
139
- private varlen(): number {
140
- return this.varlenidx >= this.sizer.varlen.length
141
- ? 0
142
- : this.sizer.varlen[this.varlenidx++]!;
143
- }
144
- }
145
-
146
- const utf8 = new TextEncoder();
147
-
148
- const ND01 = BigInt(1);
149
- const ND07 = BigInt(7);
150
- const ND63 = BigInt(63);
151
- const NX7F = BigInt(0x7f);
152
- const NX80 = BigInt(0x80);
1
+ import { $ProtobufSizer } from "./$ProtobufSizer";
2
+ import { IProtobufWriter } from "./IProtobufWriter";
3
+
4
+ export class $ProtobufWriter implements IProtobufWriter {
5
+ /**
6
+ * Related sizer
7
+ */
8
+ private readonly sizer: $ProtobufSizer;
9
+
10
+ /**
11
+ * Current pointer.
12
+ */
13
+ private ptr: number;
14
+
15
+ /**
16
+ * Protobuf buffer.
17
+ */
18
+ private buf: Uint8Array;
19
+
20
+ /**
21
+ * DataView for buffer.
22
+ */
23
+ private view: DataView;
24
+
25
+ /**
26
+ * Index in varlen array from sizer.
27
+ */
28
+ private varlenidx: number;
29
+
30
+ constructor(sizer: $ProtobufSizer) {
31
+ this.sizer = sizer;
32
+ this.buf = new Uint8Array(sizer.len);
33
+ this.view = new DataView(this.buf.buffer);
34
+ this.ptr = 0;
35
+ this.varlenidx = 0;
36
+ }
37
+
38
+ buffer(): Uint8Array {
39
+ return this.buf;
40
+ }
41
+
42
+ bool(value: boolean): void {
43
+ this.byte(value ? 1 : 0);
44
+ }
45
+
46
+ byte(value: number): void {
47
+ this.buf[this.ptr++] = value & 255;
48
+ }
49
+
50
+ int32(value: number): void {
51
+ if (value < 0) this.int64(value);
52
+ else this.variant32(value >>> 0);
53
+ }
54
+
55
+ sint32(value: number): void {
56
+ this.variant32((value << 1) ^ (value >> 31));
57
+ }
58
+
59
+ uint32(value: number): void {
60
+ this.variant32(value);
61
+ }
62
+
63
+ sint64(value: number | bigint): void {
64
+ value = BigInt(value);
65
+ this.variant64((value << ND01) ^ (value >> ND63));
66
+ }
67
+
68
+ int64(value: number | bigint): void {
69
+ this.variant64(BigInt(value));
70
+ }
71
+
72
+ uint64(value: number | bigint): void {
73
+ this.variant64(BigInt(value));
74
+ }
75
+
76
+ float(val: number): void {
77
+ this.view.setFloat32(this.ptr, val, true);
78
+ this.ptr += 4;
79
+ }
80
+
81
+ double(val: number): void {
82
+ this.view.setFloat64(this.ptr, val, true);
83
+ this.ptr += 8;
84
+ }
85
+
86
+ bytes(value: Uint8Array): void {
87
+ this.fork();
88
+ this.uint32(value.byteLength);
89
+ for (let i = 0; i < value.byteLength; i++)
90
+ this.buf[this.ptr++] = value[i]!;
91
+ }
92
+
93
+ string(value: string): void {
94
+ const len: number = this.varlen(); // use precomputed length
95
+ this.uint32(len);
96
+
97
+ const binary: Uint8Array = utf8.encode(value);
98
+ for (let i = 0; i < binary.byteLength; i++)
99
+ this.buf[this.ptr++] = binary[i]!;
100
+ }
101
+
102
+ fork(): void {
103
+ this.uint32(this.varlen()); // use precomputed length
104
+ }
105
+
106
+ ldelim(): void {
107
+ // nothing to do - all dirty work done by sizer
108
+ }
109
+
110
+ finish(): Uint8Array {
111
+ return this.buf;
112
+ }
113
+
114
+ reset(): void {
115
+ this.buf = new Uint8Array(this.sizer.len);
116
+ this.view = new DataView(this.buf.buffer);
117
+ this.ptr = 0;
118
+ this.varlenidx = 0;
119
+ }
120
+
121
+ private variant32(val: number): void {
122
+ while (val > 0x7f) {
123
+ this.buf[this.ptr++] = (val & 0x7f) | 0x80;
124
+ val = val >>> 7;
125
+ }
126
+ this.buf[this.ptr++] = val;
127
+ }
128
+
129
+ private variant64(val: bigint): void {
130
+ val = BigInt.asUintN(64, val);
131
+ while (val > NX7F) {
132
+ this.buf[this.ptr++] = Number((val & NX7F) | NX80);
133
+ val = val >> ND07; // @todo
134
+ // (val / (128n) % 2n === 1n)
135
+ }
136
+ this.buf[this.ptr++] = Number(val);
137
+ }
138
+
139
+ private varlen(): number {
140
+ return this.varlenidx >= this.sizer.varlen.length
141
+ ? 0
142
+ : this.sizer.varlen[this.varlenidx++]!;
143
+ }
144
+ }
145
+
146
+ const utf8 = new TextEncoder();
147
+
148
+ const ND01 = BigInt(1);
149
+ const ND07 = BigInt(7);
150
+ const ND63 = BigInt(63);
151
+ const NX7F = BigInt(0x7f);
152
+ const NX80 = BigInt(0x80);
@@ -1,13 +1,13 @@
1
- import { TypeGuardError } from "../TypeGuardError";
2
-
3
- export const $number = (value: number): number => {
4
- if (isFinite(value) === false)
5
- throw new TypeGuardError({
6
- method: "typia.json.stringify",
7
- expected: "number",
8
- value,
9
- message:
10
- "Error on typia.json.stringify(): infinite or not a number.",
11
- });
12
- return value;
13
- };
1
+ import { TypeGuardError } from "../TypeGuardError";
2
+
3
+ export const $number = (value: number): number => {
4
+ if (isFinite(value) === false)
5
+ throw new TypeGuardError({
6
+ method: "typia.json.stringify",
7
+ expected: "number",
8
+ value,
9
+ message:
10
+ "Error on typia.json.stringify(): infinite or not a number.",
11
+ });
12
+ return value;
13
+ };
@@ -1,7 +1,7 @@
1
- export const $strlen = (s: string): number => {
2
- let b: number;
3
- let i: number;
4
- let c: number;
5
- for (b = i = 0; (c = s.charCodeAt(i++)); b += c >> 11 ? 3 : c >> 7 ? 2 : 1);
6
- return b;
7
- };
1
+ export const $strlen = (s: string): number => {
2
+ let b: number;
3
+ let i: number;
4
+ let c: number;
5
+ for (b = i = 0; (c = s.charCodeAt(i++)); b += c >> 11 ? 3 : c >> 7 ? 2 : 1);
6
+ return b;
7
+ };
@@ -1,130 +1,130 @@
1
- function EncodeVarNumber(
2
- dst: Uint8Array,
3
- offset: number,
4
- value: number,
5
- ): number {
6
- value = (value | 0) >>> 0; // 32-bit integer
7
-
8
- while (value > 127) {
9
- dst[offset++] = (value & 0b01111111) | 0b10000000;
10
- value >>>= 7;
11
- }
12
- dst[offset++] = value;
13
-
14
- return offset;
15
- }
16
-
17
- function DecodeVarNumber(
18
- buf: Uint8Array,
19
- offset: number,
20
- ): [value: number, offset: number] {
21
- let value = 0;
22
- let shift = 0;
23
-
24
- while (true) {
25
- const byte = buf[offset++]!;
26
- value |= (byte & 0b01111111) << shift;
27
- if (byte < 128) {
28
- break;
29
- }
30
- shift += 7;
31
- }
32
-
33
- return [value | 0, offset];
34
- }
35
-
36
- function DecodeVarBigInt(
37
- buf: Uint8Array,
38
- offset: number,
39
- ): [value: bigint, offset: number] {
40
- let value = BigInt(0);
41
- let shift = BigInt(0);
42
-
43
- while (true) {
44
- const byte = buf[offset++]!;
45
- value |= BigInt(byte & 0b01111111) << shift;
46
- if (byte < 128) {
47
- break;
48
- }
49
- shift += BigInt(7);
50
- }
51
-
52
- return [BigInt.asIntN(64, value), offset];
53
- }
54
-
55
- export function $varint_decode_i32(
56
- buf: Uint8Array,
57
- offset: number,
58
- ): [value: number, offset: number] {
59
- const [v, o] = DecodeVarNumber(buf, offset);
60
- return [v, o];
61
- }
62
-
63
- export function $varint_decode_u32(
64
- buf: Uint8Array,
65
- offset: number,
66
- ): [value: number, offset: number] {
67
- const [v, o] = DecodeVarNumber(buf, offset);
68
- return [v >>> 0, o];
69
- }
70
-
71
- export function $varint_decode_i64(
72
- buf: Uint8Array,
73
- offset: number,
74
- ): [value: bigint, offset: number] {
75
- const [v, o] = DecodeVarBigInt(buf, offset);
76
- return [v, o];
77
- }
78
-
79
- export function $varint_decode_u64(
80
- buf: Uint8Array,
81
- offset: number,
82
- ): [value: bigint, offset: number] {
83
- const [v, o] = DecodeVarBigInt(buf, offset);
84
- return [BigInt.asUintN(64, v), o];
85
- }
86
-
87
- function EncodeVarBigInt(
88
- dst: Uint8Array,
89
- offset: number,
90
- value: bigint,
91
- ): number {
92
- value = BigInt.asUintN(64, value);
93
-
94
- while (value > BigInt(127)) {
95
- dst[offset++] = Number(value & BigInt(0b01111111)) | 0b10000000;
96
- value >>= BigInt(7);
97
- }
98
- dst[offset++] = Number(value);
99
-
100
- return offset;
101
- }
102
-
103
- export function $varint_encode(
104
- dst: Uint8Array,
105
- offset: number,
106
- value: number,
107
- ): number;
108
- export function $varint_encode(
109
- dst: Uint8Array,
110
- offset: number,
111
- value: bigint,
112
- ): number;
113
-
114
- export function $varint_encode(
115
- dst: Uint8Array,
116
- offset: number,
117
- value: number | bigint,
118
- ): number {
119
- if (typeof value === "bigint") {
120
- offset = EncodeVarBigInt(dst, offset, value);
121
- } else {
122
- if (value < 0) {
123
- // NOTE: Protocol Buffers signed varint encoding uses two's complement of 64-bit unsigned integers.
124
- offset = EncodeVarBigInt(dst, offset, BigInt(value));
125
- } else {
126
- offset = EncodeVarNumber(dst, offset, value);
127
- }
128
- }
129
- return offset;
130
- }
1
+ function EncodeVarNumber(
2
+ dst: Uint8Array,
3
+ offset: number,
4
+ value: number,
5
+ ): number {
6
+ value = (value | 0) >>> 0; // 32-bit integer
7
+
8
+ while (value > 127) {
9
+ dst[offset++] = (value & 0b01111111) | 0b10000000;
10
+ value >>>= 7;
11
+ }
12
+ dst[offset++] = value;
13
+
14
+ return offset;
15
+ }
16
+
17
+ function DecodeVarNumber(
18
+ buf: Uint8Array,
19
+ offset: number,
20
+ ): [value: number, offset: number] {
21
+ let value = 0;
22
+ let shift = 0;
23
+
24
+ while (true) {
25
+ const byte = buf[offset++]!;
26
+ value |= (byte & 0b01111111) << shift;
27
+ if (byte < 128) {
28
+ break;
29
+ }
30
+ shift += 7;
31
+ }
32
+
33
+ return [value | 0, offset];
34
+ }
35
+
36
+ function DecodeVarBigInt(
37
+ buf: Uint8Array,
38
+ offset: number,
39
+ ): [value: bigint, offset: number] {
40
+ let value = BigInt(0);
41
+ let shift = BigInt(0);
42
+
43
+ while (true) {
44
+ const byte = buf[offset++]!;
45
+ value |= BigInt(byte & 0b01111111) << shift;
46
+ if (byte < 128) {
47
+ break;
48
+ }
49
+ shift += BigInt(7);
50
+ }
51
+
52
+ return [BigInt.asIntN(64, value), offset];
53
+ }
54
+
55
+ export function $varint_decode_i32(
56
+ buf: Uint8Array,
57
+ offset: number,
58
+ ): [value: number, offset: number] {
59
+ const [v, o] = DecodeVarNumber(buf, offset);
60
+ return [v, o];
61
+ }
62
+
63
+ export function $varint_decode_u32(
64
+ buf: Uint8Array,
65
+ offset: number,
66
+ ): [value: number, offset: number] {
67
+ const [v, o] = DecodeVarNumber(buf, offset);
68
+ return [v >>> 0, o];
69
+ }
70
+
71
+ export function $varint_decode_i64(
72
+ buf: Uint8Array,
73
+ offset: number,
74
+ ): [value: bigint, offset: number] {
75
+ const [v, o] = DecodeVarBigInt(buf, offset);
76
+ return [v, o];
77
+ }
78
+
79
+ export function $varint_decode_u64(
80
+ buf: Uint8Array,
81
+ offset: number,
82
+ ): [value: bigint, offset: number] {
83
+ const [v, o] = DecodeVarBigInt(buf, offset);
84
+ return [BigInt.asUintN(64, v), o];
85
+ }
86
+
87
+ function EncodeVarBigInt(
88
+ dst: Uint8Array,
89
+ offset: number,
90
+ value: bigint,
91
+ ): number {
92
+ value = BigInt.asUintN(64, value);
93
+
94
+ while (value > BigInt(127)) {
95
+ dst[offset++] = Number(value & BigInt(0b01111111)) | 0b10000000;
96
+ value >>= BigInt(7);
97
+ }
98
+ dst[offset++] = Number(value);
99
+
100
+ return offset;
101
+ }
102
+
103
+ export function $varint_encode(
104
+ dst: Uint8Array,
105
+ offset: number,
106
+ value: number,
107
+ ): number;
108
+ export function $varint_encode(
109
+ dst: Uint8Array,
110
+ offset: number,
111
+ value: bigint,
112
+ ): number;
113
+
114
+ export function $varint_encode(
115
+ dst: Uint8Array,
116
+ offset: number,
117
+ value: number | bigint,
118
+ ): number {
119
+ if (typeof value === "bigint") {
120
+ offset = EncodeVarBigInt(dst, offset, value);
121
+ } else {
122
+ if (value < 0) {
123
+ // NOTE: Protocol Buffers signed varint encoding uses two's complement of 64-bit unsigned integers.
124
+ offset = EncodeVarBigInt(dst, offset, BigInt(value));
125
+ } else {
126
+ offset = EncodeVarNumber(dst, offset, value);
127
+ }
128
+ }
129
+ return offset;
130
+ }
@@ -1,39 +1,39 @@
1
- export function $zigzag_encode(value: number): number;
2
- export function $zigzag_encode(value: bigint): bigint;
3
- export function $zigzag_encode(value: number | bigint): any {
4
- // TODO: optimize (branchless solution exists)
5
-
6
- if (typeof value === "bigint") {
7
- if (value < BigInt(0)) {
8
- value = -value;
9
- return value * BigInt(2) - BigInt(1);
10
- }
11
- return value * BigInt(2);
12
- }
13
-
14
- if (value < 0) {
15
- value = -value;
16
- return value * 2 - 1;
17
- }
18
- return value * 2;
19
- }
20
-
21
- export function $zigzag_decode(value: number): number;
22
- export function $zigzag_decode(value: bigint): bigint;
23
- export function $zigzag_decode(value: number | bigint): any {
24
- // TODO: optimize (branchless solution exists)
25
-
26
- if (typeof value === "bigint") {
27
- value = BigInt.asUintN(64, value);
28
- if (value & BigInt(1)) {
29
- return -(value + BigInt(1)) / BigInt(2);
30
- }
31
- return value / BigInt(2);
32
- }
33
-
34
- value = value >>> 0;
35
- if (value & 1) {
36
- return -(value + 1) / 2;
37
- }
38
- return value / 2;
39
- }
1
+ export function $zigzag_encode(value: number): number;
2
+ export function $zigzag_encode(value: bigint): bigint;
3
+ export function $zigzag_encode(value: number | bigint): any {
4
+ // TODO: optimize (branchless solution exists)
5
+
6
+ if (typeof value === "bigint") {
7
+ if (value < BigInt(0)) {
8
+ value = -value;
9
+ return value * BigInt(2) - BigInt(1);
10
+ }
11
+ return value * BigInt(2);
12
+ }
13
+
14
+ if (value < 0) {
15
+ value = -value;
16
+ return value * 2 - 1;
17
+ }
18
+ return value * 2;
19
+ }
20
+
21
+ export function $zigzag_decode(value: number): number;
22
+ export function $zigzag_decode(value: bigint): bigint;
23
+ export function $zigzag_decode(value: number | bigint): any {
24
+ // TODO: optimize (branchless solution exists)
25
+
26
+ if (typeof value === "bigint") {
27
+ value = BigInt.asUintN(64, value);
28
+ if (value & BigInt(1)) {
29
+ return -(value + BigInt(1)) / BigInt(2);
30
+ }
31
+ return value / BigInt(2);
32
+ }
33
+
34
+ value = value >>> 0;
35
+ if (value & 1) {
36
+ return -(value + 1) / 2;
37
+ }
38
+ return value / 2;
39
+ }