typia 7.0.0-dev.20241002 → 7.0.0-dev.20241003

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 (117) hide show
  1. package/lib/factories/JsonMetadataFactory.js +4 -1
  2. package/lib/factories/JsonMetadataFactory.js.map +1 -1
  3. package/lib/factories/MetadataCollection.js +2 -2
  4. package/lib/factories/MetadataCollection.js.map +1 -1
  5. package/lib/factories/MetadataCommentTagFactory.js +284 -205
  6. package/lib/factories/MetadataCommentTagFactory.js.map +1 -1
  7. package/lib/factories/ProtobufFactory.js +4 -1
  8. package/lib/factories/ProtobufFactory.js.map +1 -1
  9. package/lib/programmers/AssertProgrammer.js +0 -24
  10. package/lib/programmers/AssertProgrammer.js.map +1 -1
  11. package/lib/programmers/CheckerProgrammer.js +9 -6
  12. package/lib/programmers/CheckerProgrammer.js.map +1 -1
  13. package/lib/programmers/RandomProgrammer.js +4 -1
  14. package/lib/programmers/RandomProgrammer.js.map +1 -1
  15. package/lib/programmers/functional/FunctionalAssertFunctionProgrammer.js +4 -1
  16. package/lib/programmers/functional/FunctionalAssertFunctionProgrammer.js.map +1 -1
  17. package/lib/programmers/functional/FunctionalAssertParametersProgrammer.js +0 -12
  18. package/lib/programmers/functional/FunctionalAssertParametersProgrammer.js.map +1 -1
  19. package/lib/programmers/functional/FunctionalIsReturnProgrammer.js +4 -1
  20. package/lib/programmers/functional/FunctionalIsReturnProgrammer.js.map +1 -1
  21. package/lib/programmers/functional/FunctionalValidateParametersProgrammer.js +4 -1
  22. package/lib/programmers/functional/FunctionalValidateParametersProgrammer.js.map +1 -1
  23. package/lib/programmers/functional/FunctionalValidateReturnProgrammer.js +4 -1
  24. package/lib/programmers/functional/FunctionalValidateReturnProgrammer.js.map +1 -1
  25. package/lib/programmers/helpers/UnionPredicator.js +1 -1
  26. package/lib/programmers/helpers/UnionPredicator.js.map +1 -1
  27. package/lib/programmers/http/HttpFormDataProgrammer.js +4 -1
  28. package/lib/programmers/http/HttpFormDataProgrammer.js.map +1 -1
  29. package/lib/programmers/http/HttpHeadersProgrammer.js +5 -2
  30. package/lib/programmers/http/HttpHeadersProgrammer.js.map +1 -1
  31. package/lib/programmers/http/HttpParameterProgrammer.js +4 -1
  32. package/lib/programmers/http/HttpParameterProgrammer.js.map +1 -1
  33. package/lib/programmers/http/HttpQueryProgrammer.js +4 -1
  34. package/lib/programmers/http/HttpQueryProgrammer.js.map +1 -1
  35. package/lib/programmers/misc/MiscCloneProgrammer.js +4 -1
  36. package/lib/programmers/misc/MiscCloneProgrammer.js.map +1 -1
  37. package/lib/programmers/misc/MiscLiteralsProgrammer.js +4 -1
  38. package/lib/programmers/misc/MiscLiteralsProgrammer.js.map +1 -1
  39. package/lib/programmers/misc/MiscPruneProgrammer.js +4 -1
  40. package/lib/programmers/misc/MiscPruneProgrammer.js.map +1 -1
  41. package/lib/programmers/notations/NotationGeneralProgrammer.js +24 -17
  42. package/lib/programmers/notations/NotationGeneralProgrammer.js.map +1 -1
  43. package/lib/programmers/protobuf/ProtobufMessageProgrammer.js +1 -1
  44. package/lib/programmers/protobuf/ProtobufMessageProgrammer.js.map +1 -1
  45. package/lib/transformers/CallExpressionTransformer.d.ts +4 -1
  46. package/lib/transformers/CallExpressionTransformer.js +30 -32
  47. package/lib/transformers/CallExpressionTransformer.js.map +1 -1
  48. package/lib/transformers/FileTransformer.js +36 -30
  49. package/lib/transformers/FileTransformer.js.map +1 -1
  50. package/lib/transformers/NodeTransformer.d.ts +4 -1
  51. package/lib/transformers/NodeTransformer.js +7 -6
  52. package/lib/transformers/NodeTransformer.js.map +1 -1
  53. package/lib/transformers/TransformerError.d.ts +4 -1
  54. package/lib/transformers/TransformerError.js +21 -23
  55. package/lib/transformers/TransformerError.js.map +1 -1
  56. package/lib/transformers/features/json/JsonApplicationTransformer.js +4 -1
  57. package/lib/transformers/features/json/JsonApplicationTransformer.js.map +1 -1
  58. package/lib/transformers/features/llm/LlmApplicationTransformer.js +4 -1
  59. package/lib/transformers/features/llm/LlmApplicationTransformer.js.map +1 -1
  60. package/lib/transformers/features/llm/LlmSchemaTransformer.js +4 -1
  61. package/lib/transformers/features/llm/LlmSchemaTransformer.js.map +1 -1
  62. package/lib/transformers/features/reflect/ReflectMetadataTransformer.js +4 -1
  63. package/lib/transformers/features/reflect/ReflectMetadataTransformer.js.map +1 -1
  64. package/lib/transformers/features/reflect/ReflectNameTransformer.js +4 -1
  65. package/lib/transformers/features/reflect/ReflectNameTransformer.js.map +1 -1
  66. package/lib/utils/MapUtil.d.ts +1 -1
  67. package/lib/utils/MapUtil.js +7 -9
  68. package/lib/utils/MapUtil.js.map +1 -1
  69. package/lib/utils/NameEncoder.d.ts +2 -2
  70. package/lib/utils/NameEncoder.js +4 -6
  71. package/lib/utils/NameEncoder.js.map +1 -1
  72. package/lib/utils/StringUtil/StringUtil.d.ts +5 -1
  73. package/lib/utils/StringUtil/StringUtil.js +8 -4
  74. package/lib/utils/StringUtil/StringUtil.js.map +1 -1
  75. package/package.json +1 -1
  76. package/src/factories/JsonMetadataFactory.ts +4 -1
  77. package/src/factories/MetadataCollection.ts +3 -2
  78. package/src/factories/MetadataCommentTagFactory.ts +212 -133
  79. package/src/factories/ProtobufFactory.ts +4 -3
  80. package/src/programmers/AssertProgrammer.ts +0 -24
  81. package/src/programmers/CheckerProgrammer.ts +9 -8
  82. package/src/programmers/RandomProgrammer.ts +4 -3
  83. package/src/programmers/functional/FunctionalAssertFunctionProgrammer.ts +4 -3
  84. package/src/programmers/functional/FunctionalAssertParametersProgrammer.ts +0 -12
  85. package/src/programmers/functional/FunctionalIsReturnProgrammer.ts +4 -3
  86. package/src/programmers/functional/FunctionalValidateParametersProgrammer.ts +4 -3
  87. package/src/programmers/functional/FunctionalValidateReturnProgrammer.ts +4 -3
  88. package/src/programmers/helpers/UnionPredicator.ts +1 -1
  89. package/src/programmers/http/HttpFormDataProgrammer.ts +4 -3
  90. package/src/programmers/http/HttpHeadersProgrammer.ts +5 -4
  91. package/src/programmers/http/HttpParameterProgrammer.ts +4 -1
  92. package/src/programmers/http/HttpQueryProgrammer.ts +4 -3
  93. package/src/programmers/misc/MiscCloneProgrammer.ts +4 -3
  94. package/src/programmers/misc/MiscLiteralsProgrammer.ts +4 -1
  95. package/src/programmers/misc/MiscPruneProgrammer.ts +4 -3
  96. package/src/programmers/notations/NotationGeneralProgrammer.ts +28 -20
  97. package/src/programmers/protobuf/ProtobufMessageProgrammer.ts +1 -1
  98. package/src/transformers/CallExpressionTransformer.ts +36 -36
  99. package/src/transformers/FileTransformer.ts +42 -32
  100. package/src/transformers/NodeTransformer.ts +10 -6
  101. package/src/transformers/TransformerError.ts +26 -27
  102. package/src/transformers/features/json/JsonApplicationTransformer.ts +4 -1
  103. package/src/transformers/features/llm/LlmApplicationTransformer.ts +4 -1
  104. package/src/transformers/features/llm/LlmSchemaTransformer.ts +4 -1
  105. package/src/transformers/features/reflect/ReflectMetadataTransformer.ts +4 -1
  106. package/src/transformers/features/reflect/ReflectNameTransformer.ts +4 -1
  107. package/src/utils/MapUtil.ts +11 -9
  108. package/src/utils/NameEncoder.ts +4 -4
  109. package/src/utils/StringUtil/StringUtil.ts +11 -4
  110. package/lib/functional/$varint.d.ts +0 -6
  111. package/lib/functional/$varint.js +0 -99
  112. package/lib/functional/$varint.js.map +0 -1
  113. package/lib/functional/$zigzag.d.ts +0 -4
  114. package/lib/functional/$zigzag.js +0 -35
  115. package/lib/functional/$zigzag.js.map +0 -1
  116. package/src/functional/$varint.ts +0 -130
  117. package/src/functional/$zigzag.ts +0 -39
@@ -10,8 +10,6 @@ import { MetadataFactory } from "./MetadataFactory";
10
10
  import { MetadataTypeTagFactory } from "./MetadataTypeTagFactory";
11
11
 
12
12
  /**
13
- * Extremely hard coded, but no reason to maintain.
14
- *
15
13
  * @internal
16
14
  */
17
15
  export namespace MetadataCommentTagFactory {
@@ -116,88 +114,137 @@ export namespace MetadataCommentTagFactory {
116
114
  const next = PARSER[props.tag.name];
117
115
  if (next === undefined) return {};
118
116
 
119
- const text = (props.tag.text || [])[0]?.text;
120
- if (text === undefined && props.tag.name !== "uniqueItems")
117
+ const value = (props.tag.text || [])[0]?.text;
118
+ if (value === undefined && props.tag.name !== "uniqueItems")
121
119
  return props.report(`no comment tag value`);
122
- return next(props.report)(text!);
120
+ return next({
121
+ report: props.report,
122
+ value: value!,
123
+ });
123
124
  };
124
125
  }
125
126
 
127
+ /**
128
+ * @internal
129
+ */
126
130
  type TagRecord = {
127
131
  [P in Target]?: NotDeterminedTypeTag[];
128
132
  };
133
+
134
+ /**
135
+ * @internal
136
+ */
129
137
  type Target = "bigint" | "number" | "string" | "array";
138
+
139
+ /**
140
+ * @internal
141
+ */
130
142
  type NotDeterminedTypeTag = Omit<IMetadataTypeTag, "validate" | "schema"> & {
131
143
  validate: string | null;
132
144
  schema: object | undefined;
133
145
  };
134
146
 
147
+ /**
148
+ * @internal
149
+ */
135
150
  const PARSER: Record<
136
151
  string,
137
- (report: (msg: string) => null) => (text: string) => {
152
+ (props: { report: (msg: string) => null; value: string }) => {
138
153
  [P in Target]?: NotDeterminedTypeTag[];
139
154
  }
140
155
  > = {
141
156
  /* -----------------------------------------------------------
142
157
  ARRAY
143
158
  ----------------------------------------------------------- */
144
- items: (report) => (Value) => ({
159
+ items: ({ report, value }) => ({
145
160
  array: [
146
161
  {
147
- name: `MinItems<${Value}>`,
162
+ name: `MinItems<${value}>`,
148
163
  target: "array",
149
164
  kind: "minItems",
150
- value: parse_integer(report)(true)(Value),
151
- validate: `${Value} <= $input.length`,
165
+ value: parse_integer({
166
+ report,
167
+ value,
168
+ unsigned: true,
169
+ }),
170
+ validate: `${value} <= $input.length`,
152
171
  exclusive: true,
153
172
  schema: {
154
- minItems: parse_integer(report)(true)(Value),
173
+ minItems: parse_integer({
174
+ report,
175
+ value,
176
+ unsigned: true,
177
+ }),
155
178
  },
156
179
  },
157
180
  {
158
- name: `MaxItems<${Value}>`,
181
+ name: `MaxItems<${value}>`,
159
182
  target: "array",
160
183
  kind: "maxItems",
161
- value: parse_integer(report)(true)(Value),
162
- validate: `$input.length <= ${Value}`,
184
+ value: parse_integer({
185
+ report,
186
+ value,
187
+ unsigned: true,
188
+ }),
189
+ validate: `$input.length <= ${value}`,
163
190
  exclusive: true,
164
191
  schema: {
165
- maxItems: parse_integer(report)(true)(Value),
192
+ maxItems: parse_integer({
193
+ report,
194
+ unsigned: true,
195
+ value,
196
+ }),
166
197
  },
167
198
  },
168
199
  ],
169
200
  }),
170
- minItems: (report) => (Value) => ({
201
+ minItems: ({ report, value }) => ({
171
202
  array: [
172
203
  {
173
- name: `MinItems<${Value}>`,
204
+ name: `MinItems<${value}>`,
174
205
  target: "array",
175
206
  kind: "minItems",
176
- value: parse_integer(report)(true)(Value),
177
- validate: `${Value} <= $input.length`,
207
+ value: parse_integer({
208
+ report,
209
+ value,
210
+ unsigned: true,
211
+ }),
212
+ validate: `${value} <= $input.length`,
178
213
  exclusive: true,
179
214
  schema: {
180
- minItems: parse_integer(report)(true)(Value),
215
+ minItems: parse_integer({
216
+ report,
217
+ value,
218
+ unsigned: true,
219
+ }),
181
220
  },
182
221
  },
183
222
  ],
184
223
  }),
185
- maxItems: (report) => (Value) => ({
224
+ maxItems: ({ report, value }) => ({
186
225
  array: [
187
226
  {
188
- name: `MaxItems<${Value}>`,
227
+ name: `MaxItems<${value}>`,
189
228
  target: "array",
190
229
  kind: "maxItems",
191
- value: parse_integer(report)(true)(Value),
192
- validate: `$input.length <= ${Value}`,
230
+ value: parse_integer({
231
+ report,
232
+ value,
233
+ unsigned: true,
234
+ }),
235
+ validate: `$input.length <= ${value}`,
193
236
  exclusive: true,
194
237
  schema: {
195
- maxItems: parse_integer(report)(true)(Value),
238
+ maxItems: parse_integer({
239
+ report,
240
+ value,
241
+ unsigned: true,
242
+ }),
196
243
  },
197
244
  },
198
245
  ],
199
246
  }),
200
- uniqueItems: () => () => ({
247
+ uniqueItems: () => ({
201
248
  array: [
202
249
  {
203
250
  name: `UniqueItems`,
@@ -216,54 +263,54 @@ const PARSER: Record<
216
263
  /* -----------------------------------------------------------
217
264
  NUMBER
218
265
  ----------------------------------------------------------- */
219
- type: () => (Value) => {
266
+ type: ({ value }) => {
220
267
  // EMENDATIONS
221
- if (Value.startsWith("{") && Value.endsWith("}"))
222
- Value = Value.substring(1, Value.length - 1);
223
- if (Value === "int") Value = "int32";
224
- else if (Value === "uint") Value = "uint32";
268
+ if (value.startsWith("{") && value.endsWith("}"))
269
+ value = value.substring(1, value.length - 1);
270
+ if (value === "int") value = "int32";
271
+ else if (value === "uint") value = "uint32";
225
272
 
226
273
  // MUST BE ONE OF THEM
227
274
  if (
228
275
  ["int32", "uint32", "int64", "uint64", "float", "double"].includes(
229
- Value,
276
+ value,
230
277
  ) === false
231
278
  )
232
279
  return {};
233
280
  return {
234
281
  number: [
235
282
  {
236
- name: `Type<${JSON.stringify(Value)}>`,
283
+ name: `Type<${JSON.stringify(value)}>`,
237
284
  target: "number",
238
285
  kind: "type",
239
- value: Value,
286
+ value: value,
240
287
  validate:
241
- Value === "int32"
288
+ value === "int32"
242
289
  ? `Math.floor($input) === $input && -2147483648 <= $input && $input <= 2147483647`
243
- : Value === "uint32"
290
+ : value === "uint32"
244
291
  ? `Math.floor($input) === $input && 0 <= $input && $input <= 4294967295`
245
- : Value === "int64"
292
+ : value === "int64"
246
293
  ? `Math.floor($input) === $input && -9223372036854775808 <= $input && $input <= 9223372036854775807`
247
- : Value === "uint64"
294
+ : value === "uint64"
248
295
  ? `Math.floor($input) === $input && 0 <= $input && $input <= 18446744073709551615`
249
- : Value === "float"
296
+ : value === "float"
250
297
  ? `-1.175494351e38 <= $input && $input <= 3.4028235e38`
251
298
  : `true`,
252
299
  exclusive: true,
253
- schema: ["int32", "uint32", "int64", "uint64"].includes(Value)
300
+ schema: ["int32", "uint32", "int64", "uint64"].includes(value)
254
301
  ? { type: "integer" }
255
302
  : undefined,
256
303
  },
257
304
  ],
258
305
  bigint:
259
- Value === "int64" || "uint64"
306
+ value === "int64" || "uint64"
260
307
  ? [
261
308
  {
262
- name: `Type<${JSON.stringify(Value)}>`,
309
+ name: `Type<${JSON.stringify(value)}>`,
263
310
  target: "bigint",
264
311
  kind: "type",
265
- value: Value,
266
- validate: Value === "int64" ? "true" : "BigInt(0) <= $input",
312
+ value: value,
313
+ validate: value === "int64" ? "true" : "BigInt(0) <= $input",
267
314
  exclusive: true,
268
315
  schema: undefined,
269
316
  },
@@ -271,148 +318,168 @@ const PARSER: Record<
271
318
  : [],
272
319
  };
273
320
  },
274
- minimum: (report) => (Value) => ({
321
+ minimum: (props) => ({
275
322
  number: [
276
323
  {
277
- name: `Minimum<${Value}>`,
324
+ name: `Minimum<${props.value}>`,
278
325
  target: "number",
279
326
  kind: "minimum",
280
- value: parse_number(report)(Value),
281
- validate: `${Value} <= $input`,
327
+ value: parse_number(props),
328
+ validate: `${props.value} <= $input`,
282
329
  exclusive: ["minimum", "exclusiveMinimum"],
283
330
  schema: {
284
- minimum: parse_number(report)(Value),
331
+ minimum: parse_number(props),
285
332
  },
286
333
  },
287
334
  ],
288
335
  bigint: [
289
336
  {
290
- name: `Minimum<${Value}n>`,
337
+ name: `Minimum<${props.value}n>`,
291
338
  target: "bigint",
292
339
  kind: "minimum",
293
340
  value: (() => {
294
- const value = parse_integer(report)(false)(Value);
295
- return value === null ? null : BigInt(value);
341
+ const parsed = parse_integer({
342
+ report: props.report,
343
+ value: props.value,
344
+ unsigned: false,
345
+ });
346
+ return parsed === null ? null : BigInt(parsed);
296
347
  })(),
297
- validate: `${Value} <= $input`,
348
+ validate: `${props.value} <= $input`,
298
349
  exclusive: ["minimum", "exclusiveMinimum"],
299
350
  schema: undefined,
300
351
  },
301
352
  ],
302
353
  }),
303
- maximum: (report) => (Value) => ({
354
+ maximum: (props) => ({
304
355
  number: [
305
356
  {
306
- name: `Maximum<${Value}>`,
357
+ name: `Maximum<${props.value}>`,
307
358
  target: "number",
308
359
  kind: "maximum",
309
- value: parse_number(report)(Value),
310
- validate: `$input <= ${Value}`,
360
+ value: parse_number(props),
361
+ validate: `$input <= ${props.value}`,
311
362
  exclusive: ["maximum", "exclusiveMaximum"],
312
363
  schema: {
313
- maximum: parse_number(report)(Value),
364
+ maximum: parse_number(props),
314
365
  },
315
366
  },
316
367
  ],
317
368
  bigint: [
318
369
  {
319
- name: `Maximum<${Value}n>`,
370
+ name: `Maximum<${props.value}n>`,
320
371
  target: "bigint",
321
372
  kind: "maximum",
322
373
  value: (() => {
323
- const value = parse_integer(report)(false)(Value);
324
- return value === null ? null : BigInt(value);
374
+ const parsed = parse_integer({
375
+ report: props.report,
376
+ value: props.value,
377
+ unsigned: false,
378
+ });
379
+ return parsed === null ? null : BigInt(parsed);
325
380
  })(),
326
- validate: `$input <= ${Value}`,
381
+ validate: `$input <= ${props.value}`,
327
382
  exclusive: ["maximum", "exclusiveMaximum"],
328
383
  schema: undefined,
329
384
  },
330
385
  ],
331
386
  }),
332
- exclusiveMinimum: (report) => (Value) => ({
387
+ exclusiveMinimum: (props) => ({
333
388
  number: [
334
389
  {
335
- name: `ExclusiveMinimum<${Value}>`,
390
+ name: `ExclusiveMinimum<${props.value}>`,
336
391
  target: "number",
337
392
  kind: "exclusiveMinimum",
338
- value: parse_number(report)(Value),
339
- validate: `${Value} < $input`,
393
+ value: parse_number(props),
394
+ validate: `${props.value} < $input`,
340
395
  exclusive: ["minimum", "exclusiveMinimum"],
341
396
  schema: {
342
397
  exclusiveMinimum: true,
343
- minimum: parse_number(report)(Value),
398
+ minimum: parse_number(props),
344
399
  },
345
400
  },
346
401
  ],
347
402
  bigint: [
348
403
  {
349
- name: `ExclusiveMinimum<${Value}n>`,
404
+ name: `ExclusiveMinimum<${props.value}n>`,
350
405
  target: "bigint",
351
406
  kind: "exclusiveMinimum",
352
407
  value: (() => {
353
- const value = parse_integer(report)(false)(Value);
354
- return value === null ? null : BigInt(value);
408
+ const parsed = parse_integer({
409
+ report: props.report,
410
+ value: props.value,
411
+ unsigned: false,
412
+ });
413
+ return parsed === null ? null : BigInt(parsed);
355
414
  })(),
356
- validate: `${Value} < $input`,
415
+ validate: `${props.value} < $input`,
357
416
  exclusive: ["minimum", "exclusiveMinimum"],
358
417
  schema: undefined,
359
418
  },
360
419
  ],
361
420
  }),
362
- exclusiveMaximum: (report) => (Value) => ({
421
+ exclusiveMaximum: (props) => ({
363
422
  number: [
364
423
  {
365
- name: `ExclusiveMaximum<${Value}>`,
424
+ name: `ExclusiveMaximum<${props.value}>`,
366
425
  target: "number",
367
426
  kind: "exclusiveMaximum",
368
- value: parse_number(report)(Value),
369
- validate: `$input < ${Value}`,
427
+ value: parse_number(props),
428
+ validate: `$input < ${props.value}`,
370
429
  exclusive: ["maximum", "exclusiveMaximum"],
371
430
  schema: {
372
431
  exclusiveMaximum: true,
373
- maximum: parse_number(report)(Value),
432
+ maximum: parse_number(props),
374
433
  },
375
434
  },
376
435
  ],
377
436
  bigint: [
378
437
  {
379
- name: `ExclusiveMaximum<${Value}n>`,
438
+ name: `ExclusiveMaximum<${props.value}n>`,
380
439
  target: "bigint",
381
440
  kind: "exclusiveMaximum",
382
441
  value: (() => {
383
- const value = parse_integer(report)(false)(Value);
384
- return value === null ? null : BigInt(value);
442
+ const parsed = parse_integer({
443
+ report: props.report,
444
+ value: props.value,
445
+ unsigned: false,
446
+ });
447
+ return parsed === null ? null : BigInt(parsed);
385
448
  })(),
386
- validate: `$input < ${Value}`,
449
+ validate: `$input < ${props.value}`,
387
450
  exclusive: ["maximum", "exclusiveMaximum"],
388
451
  schema: undefined,
389
452
  },
390
453
  ],
391
454
  }),
392
- multipleOf: (report) => (Value) => ({
455
+ multipleOf: (props) => ({
393
456
  number: [
394
457
  {
395
- name: `MultipleOf<${Value}>`,
458
+ name: `MultipleOf<${props.value}>`,
396
459
  target: "number",
397
460
  kind: "multipleOf",
398
- value: parse_number(report)(Value),
399
- validate: `$input % ${Value} === 0`,
461
+ value: parse_number(props),
462
+ validate: `$input % ${props.value} === 0`,
400
463
  exclusive: true,
401
464
  schema: {
402
- multipleOf: parse_number(report)(Value),
465
+ multipleOf: parse_number(props),
403
466
  },
404
467
  },
405
468
  ],
406
469
  bigint: [
407
470
  {
408
- name: `MultipleOf<${Value}n>`,
471
+ name: `MultipleOf<${props.value}n>`,
409
472
  target: "bigint",
410
473
  kind: "multipleOf",
411
474
  value: (() => {
412
- const value = parse_integer(report)(false)(Value);
413
- return value === null ? null : BigInt(value);
475
+ const parsed = parse_integer({
476
+ report: props.report,
477
+ value: props.value,
478
+ unsigned: false,
479
+ });
480
+ return parsed === null ? null : BigInt(parsed);
414
481
  })(),
415
- validate: `$input % ${Value}n === 0n`,
482
+ validate: `$input % ${props.value}n === 0n`,
416
483
  exclusive: true,
417
484
  schema: undefined,
418
485
  },
@@ -422,8 +489,8 @@ const PARSER: Record<
422
489
  /* -----------------------------------------------------------
423
490
  STRING
424
491
  ----------------------------------------------------------- */
425
- format: () => (Value) => {
426
- const matched = FORMATS.get(Value);
492
+ format: ({ value }) => {
493
+ const matched = FORMATS.get(value);
427
494
  if (matched === undefined) return {};
428
495
  return {
429
496
  string: [
@@ -441,99 +508,111 @@ const PARSER: Record<
441
508
  ],
442
509
  };
443
510
  },
444
- pattern: () => (Value) => ({
511
+ pattern: ({ value }) => ({
445
512
  string: [
446
513
  {
447
- name: `Pattern<${JSON.stringify(Value)}>`,
514
+ name: `Pattern<${JSON.stringify(value)}>`,
448
515
  target: "string",
449
516
  kind: "pattern",
450
- value: Value,
451
- validate: `RegExp(${JSON.stringify(Value)}).test($input)`,
517
+ value: value,
518
+ validate: `RegExp(${JSON.stringify(value)}).test($input)`,
452
519
  exclusive: ["format"],
453
520
  schema: {
454
- pattern: Value,
521
+ pattern: value,
455
522
  },
456
523
  },
457
524
  ],
458
525
  }),
459
- length: (report) => (Value) => ({
526
+ length: (props) => ({
460
527
  string: [
461
528
  {
462
- name: `MinLength<${Value}>`,
529
+ name: `MinLength<${props.value}>`,
463
530
  target: "string",
464
531
  kind: "minLength",
465
- value: parse_number(report)(Value),
466
- validate: `${Value} <= $input.length`,
532
+ value: parse_number(props),
533
+ validate: `${props.value} <= $input.length`,
467
534
  exclusive: true,
468
535
  schema: {
469
- minLength: parse_number(report)(Value),
536
+ minLength: parse_number(props),
470
537
  },
471
538
  },
472
539
  {
473
- name: `MaxLength<${Value}>`,
540
+ name: `MaxLength<${props.value}>`,
474
541
  target: "string",
475
542
  kind: "maxLength",
476
- value: parse_number(report)(Value),
477
- validate: `$input.length <= ${Value}`,
543
+ value: parse_number(props),
544
+ validate: `$input.length <= ${props.value}`,
478
545
  exclusive: true,
479
546
  schema: {
480
- maxLength: parse_number(report)(Value),
547
+ maxLength: parse_number(props),
481
548
  },
482
549
  },
483
550
  ],
484
551
  }),
485
- minLength: (report) => (Value) => ({
552
+ minLength: ({ report, value }) => ({
486
553
  string: [
487
554
  {
488
- name: `MinLength<${Value}>`,
555
+ name: `MinLength<${value}>`,
489
556
  target: "string",
490
557
  kind: "minLength",
491
- value: parse_number(report)(Value),
492
- validate: `${Value} <= $input.length`,
558
+ value: parse_number({ report, value }),
559
+ validate: `${value} <= $input.length`,
493
560
  exclusive: true,
494
561
  schema: {
495
- minLength: parse_number(report)(Value),
562
+ minLength: parse_number({ report, value }),
496
563
  },
497
564
  },
498
565
  ],
499
566
  }),
500
- maxLength: (report) => (Value) => ({
567
+ maxLength: ({ report, value }) => ({
501
568
  string: [
502
569
  {
503
- name: `MaxLength<${Value}>`,
570
+ name: `MaxLength<${value}>`,
504
571
  target: "string",
505
572
  kind: "maxLength",
506
- value: parse_number(report)(Value),
507
- validate: `$input.length <= ${Value}`,
573
+ value: parse_number({ report, value }),
574
+ validate: `$input.length <= ${value}`,
508
575
  exclusive: true,
509
576
  schema: {
510
- maxLength: parse_number(report)(Value),
577
+ maxLength: parse_number({ report, value }),
511
578
  },
512
579
  },
513
580
  ],
514
581
  }),
515
582
  };
516
583
 
517
- const parse_number =
518
- (report: (msg: string) => null) =>
519
- (str: string): number | null => {
520
- const value: number = Number(str);
521
- if (isNaN(value) === true) return report(`invalid number`);
522
- return value;
523
- };
584
+ /**
585
+ * @internal
586
+ */
587
+ const parse_number = (props: {
588
+ report: (msg: string) => null;
589
+ value: string;
590
+ }): number | null => {
591
+ const parsed: number = Number(props.value);
592
+ if (isNaN(parsed) === true) return props.report(`invalid number`);
593
+ return parsed;
594
+ };
524
595
 
525
- const parse_integer =
526
- (report: (msg: string) => null) =>
527
- (unsigned: boolean) =>
528
- (str: string): number | null => {
529
- const value: number | null = parse_number(report)(str);
530
- if (value === null) return null;
531
- else if (Math.floor(value) !== value) return report(`invalid integer`);
532
- else if (unsigned === true && value < 0)
533
- return report(`invalid unsigned integer`);
534
- return value;
535
- };
596
+ /**
597
+ * @internal
598
+ */
599
+ const parse_integer = (props: {
600
+ report: (msg: string) => null;
601
+ unsigned: boolean;
602
+ value: string;
603
+ }): number | null => {
604
+ const parsed: number | null = parse_number(props);
605
+ if (parsed === null) return null;
606
+ else if (Math.floor(parsed) !== parsed)
607
+ return props.report(`invalid integer`);
608
+ else if (props.unsigned === true && parsed < 0)
609
+ return props.report(`invalid unsigned integer`);
610
+ return parsed;
611
+ };
536
612
 
613
+ /**
614
+ * @internal
615
+ */
537
616
  const FORMATS: Map<string, [string, string]> = new Map([
538
617
  ...Object.entries(FormatCheatSheet).map(
539
618
  ([key, value]) => [key, [key, value]] as any,
@@ -37,9 +37,10 @@ export namespace ProtobufFactory {
37
37
  },
38
38
  });
39
39
  if (result.success === false)
40
- throw TransformerError.from(`typia.protobuf.${props.method}`)(
41
- result.errors,
42
- );
40
+ throw TransformerError.from({
41
+ code: `typia.protobuf.${props.method}`,
42
+ errors: result.errors,
43
+ });
43
44
  return result.data;
44
45
  };
45
46
 
@@ -282,30 +282,6 @@ export namespace AssertProgrammer {
282
282
  input: next.input,
283
283
  }),
284
284
  );
285
- // : (() => {
286
- // const addicted = binaries.slice();
287
- // if (
288
- // addicted[addicted.length - 1]!.combined === false
289
- // ) {
290
- // addicted.push({
291
- // combined: true,
292
- // expression: create_guard_call(importer)(
293
- // explore.source === "top"
294
- // ? ts.factory.createTrue()
295
- // : ts.factory.createIdentifier(
296
- // "_exceptionable",
297
- // ),
298
- // )(
299
- // ts.factory.createIdentifier(path),
300
- // expected,
301
- // input,
302
- // ),
303
- // });
304
- // }
305
- // return addicted
306
- // .map((b) => b.expression)
307
- // .reduce(ts.factory.createLogicalOr);
308
- // })();
309
285
  };
310
286
 
311
287
  const assert_object = (props: {