typia 15.0.0 → 15.0.1

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 (110) hide show
  1. package/lib/http.d.ts +49 -24
  2. package/lib/http.js.map +1 -1
  3. package/lib/http.mjs.map +1 -1
  4. package/lib/internal/_httpFormDataReadBigint.js +7 -5
  5. package/lib/internal/_httpFormDataReadBigint.js.map +1 -1
  6. package/lib/internal/_httpFormDataReadBigint.mjs +1 -1
  7. package/lib/internal/_httpFormDataReadBigint.mjs.map +1 -1
  8. package/lib/internal/_httpFormDataReadBoolean.js +12 -10
  9. package/lib/internal/_httpFormDataReadBoolean.js.map +1 -1
  10. package/lib/internal/_httpFormDataReadBoolean.mjs +1 -1
  11. package/lib/internal/_httpFormDataReadBoolean.mjs.map +1 -1
  12. package/lib/internal/_httpFormDataReadNumber.js +7 -5
  13. package/lib/internal/_httpFormDataReadNumber.js.map +1 -1
  14. package/lib/internal/_httpFormDataReadNumber.mjs +1 -1
  15. package/lib/internal/_httpFormDataReadNumber.mjs.map +1 -1
  16. package/lib/internal/_httpFormDataReadString.d.ts +9 -1
  17. package/lib/internal/_httpFormDataReadString.js +10 -2
  18. package/lib/internal/_httpFormDataReadString.js.map +1 -1
  19. package/lib/internal/_httpFormDataReadString.mjs +9 -1
  20. package/lib/internal/_httpFormDataReadString.mjs.map +1 -1
  21. package/lib/internal/_httpHeaderReadBigint.js +5 -1
  22. package/lib/internal/_httpHeaderReadBigint.js.map +1 -1
  23. package/lib/internal/_httpHeaderReadBigint.mjs +2 -1
  24. package/lib/internal/_httpHeaderReadBigint.mjs.map +1 -1
  25. package/lib/internal/_httpHeaderReadNumber.js +5 -1
  26. package/lib/internal/_httpHeaderReadNumber.js.map +1 -1
  27. package/lib/internal/_httpHeaderReadNumber.mjs +2 -1
  28. package/lib/internal/_httpHeaderReadNumber.mjs.map +1 -1
  29. package/lib/internal/_httpParameterReadBigint.js +4 -0
  30. package/lib/internal/_httpParameterReadBigint.js.map +1 -1
  31. package/lib/internal/_httpParameterReadBigint.mjs +1 -0
  32. package/lib/internal/_httpParameterReadBigint.mjs.map +1 -1
  33. package/lib/internal/_httpParameterReadNumber.js +4 -0
  34. package/lib/internal/_httpParameterReadNumber.js.map +1 -1
  35. package/lib/internal/_httpParameterReadNumber.mjs +1 -0
  36. package/lib/internal/_httpParameterReadNumber.mjs.map +1 -1
  37. package/lib/internal/_httpParameterReadString.d.ts +9 -1
  38. package/lib/internal/_httpParameterReadString.js +9 -1
  39. package/lib/internal/_httpParameterReadString.js.map +1 -1
  40. package/lib/internal/_httpParameterReadString.mjs +9 -1
  41. package/lib/internal/_httpParameterReadString.mjs.map +1 -1
  42. package/lib/internal/_httpQueryReadBigint.js +8 -1
  43. package/lib/internal/_httpQueryReadBigint.js.map +1 -1
  44. package/lib/internal/_httpQueryReadBigint.mjs +1 -1
  45. package/lib/internal/_httpQueryReadBigint.mjs.map +1 -1
  46. package/lib/internal/_httpQueryReadBoolean.js +4 -1
  47. package/lib/internal/_httpQueryReadBoolean.js.map +1 -1
  48. package/lib/internal/_httpQueryReadBoolean.mjs +1 -1
  49. package/lib/internal/_httpQueryReadBoolean.mjs.map +1 -1
  50. package/lib/internal/_httpQueryReadNumber.js +8 -1
  51. package/lib/internal/_httpQueryReadNumber.js.map +1 -1
  52. package/lib/internal/_httpQueryReadNumber.mjs +1 -1
  53. package/lib/internal/_httpQueryReadNumber.mjs.map +1 -1
  54. package/lib/internal/_httpQueryReadString.d.ts +9 -1
  55. package/lib/internal/_httpQueryReadString.js +9 -1
  56. package/lib/internal/_httpQueryReadString.js.map +1 -1
  57. package/lib/internal/_httpQueryReadString.mjs +9 -1
  58. package/lib/internal/_httpQueryReadString.mjs.map +1 -1
  59. package/lib/internal/_randomBigint.d.ts +12 -1
  60. package/lib/internal/_randomBigint.js +90 -2
  61. package/lib/internal/_randomBigint.js.map +1 -1
  62. package/lib/internal/_randomBigint.mjs +70 -2
  63. package/lib/internal/_randomBigint.mjs.map +1 -1
  64. package/lib/internal/_randomInteger.js +21 -12
  65. package/lib/internal/_randomInteger.js.map +1 -1
  66. package/lib/internal/_randomInteger.mjs +21 -16
  67. package/lib/internal/_randomInteger.mjs.map +1 -1
  68. package/lib/internal/_randomNumber.js +19 -10
  69. package/lib/internal/_randomNumber.js.map +1 -1
  70. package/lib/internal/_randomNumber.mjs +19 -14
  71. package/lib/internal/_randomNumber.mjs.map +1 -1
  72. package/native/cmd/ttsc-typia/llm_evaluation_rejects_invalid_probability_test.go +9 -0
  73. package/native/cmd/ttsc-typia/random_recursive_min_items_diagnostic_test.go +18 -1
  74. package/native/core/factories/ExpressionFactory.go +16 -1
  75. package/native/core/factories/MetadataCommentTagFactory.go +177 -29
  76. package/native/core/factories/expression_factory_number_spells_non_finite_values_test.go +69 -0
  77. package/native/core/factories/metadata_comment_tag_factory_holds_bigint_tags_exact_test.go +168 -0
  78. package/native/core/factories/metadata_comment_tag_factory_reads_javascript_numbers_test.go +158 -0
  79. package/native/core/programmers/functional/FunctionalAssertParametersProgrammer.go +1 -3
  80. package/native/core/programmers/functional/FunctionalIsParametersProgrammer.go +107 -9
  81. package/native/core/programmers/functional/FunctionalValidateParametersProgrammer.go +1 -3
  82. package/native/core/programmers/http/HttpFormDataProgrammer.go +41 -2
  83. package/native/core/programmers/http/HttpHeadersProgrammer.go +56 -4
  84. package/native/core/programmers/http/HttpParameterProgrammer.go +1 -3
  85. package/native/core/programmers/http/HttpQueryProgrammer.go +26 -43
  86. package/native/core/programmers/iterate/json_schema_jsDocTags.go +10 -3
  87. package/native/core/programmers/iterate/json_schema_jsdoc_tags_cast_reads_javascript_numbers_test.go +64 -0
  88. package/native/core/programmers/llm/LlmEvaluationProgrammer.go +6 -2
  89. package/native/core/programmers/llm/LlmSchemaProgrammer.go +34 -4
  90. package/native/core/utils/NumberUtil.go +195 -0
  91. package/native/core/utils/number_util_rational_keeps_written_value_test.go +62 -0
  92. package/native/core/utils/number_util_reads_javascript_number_grammar_test.go +147 -0
  93. package/package.json +3 -3
  94. package/src/http.ts +61 -34
  95. package/src/internal/_httpFormDataReadBigint.ts +3 -1
  96. package/src/internal/_httpFormDataReadBoolean.ts +3 -1
  97. package/src/internal/_httpFormDataReadNumber.ts +3 -1
  98. package/src/internal/_httpFormDataReadString.ts +10 -1
  99. package/src/internal/_httpHeaderReadBigint.ts +6 -1
  100. package/src/internal/_httpHeaderReadNumber.ts +6 -1
  101. package/src/internal/_httpParameterReadBigint.ts +3 -0
  102. package/src/internal/_httpParameterReadNumber.ts +3 -0
  103. package/src/internal/_httpParameterReadString.ts +12 -2
  104. package/src/internal/_httpQueryReadBigint.ts +7 -1
  105. package/src/internal/_httpQueryReadBoolean.ts +3 -1
  106. package/src/internal/_httpQueryReadNumber.ts +7 -1
  107. package/src/internal/_httpQueryReadString.ts +10 -1
  108. package/src/internal/_randomBigint.ts +111 -3
  109. package/src/internal/_randomInteger.ts +31 -16
  110. package/src/internal/_randomNumber.ts +23 -12
@@ -30,12 +30,8 @@ const scalar = (props) => {
30
30
  return Math.floor(Math.random() * (maximum - minimum + 1)) + minimum;
31
31
  };
32
32
  const getLowerBoundary = (schema) => {
33
- const inclusive = schema.minimum === undefined
34
- ? null
35
- : { value: schema.minimum, exclusive: false };
36
- const exclusive = schema.exclusiveMinimum === undefined
37
- ? null
38
- : { value: schema.exclusiveMinimum, exclusive: true };
33
+ const inclusive = boundary(schema.minimum, false, "lower");
34
+ const exclusive = boundary(schema.exclusiveMinimum, true, "lower");
39
35
  const selected = selectBoundary(inclusive, exclusive, Math.max);
40
36
  if (selected === null)
41
37
  return null;
@@ -47,12 +43,8 @@ const getLowerBoundary = (schema) => {
47
43
  };
48
44
  };
49
45
  const getUpperBoundary = (schema) => {
50
- const inclusive = schema.maximum === undefined
51
- ? null
52
- : { value: schema.maximum, exclusive: false };
53
- const exclusive = schema.exclusiveMaximum === undefined
54
- ? null
55
- : { value: schema.exclusiveMaximum, exclusive: true };
46
+ const inclusive = boundary(schema.maximum, false, "upper");
47
+ const exclusive = boundary(schema.exclusiveMaximum, true, "upper");
56
48
  const selected = selectBoundary(inclusive, exclusive, Math.min);
57
49
  if (selected === null)
58
50
  return null;
@@ -63,6 +55,23 @@ const getUpperBoundary = (schema) => {
63
55
  exclusive: false,
64
56
  };
65
57
  };
58
+ /**
59
+ * Reads one bound, which may be infinite.
60
+ *
61
+ * A type tag built from an overflowing literal (`Maximum<1e400>`) carries an
62
+ * infinite bound (#2452). `-Infinity` below or `Infinity` above excludes no
63
+ * finite number, so it is no bound at all; `Infinity` below or `-Infinity`
64
+ * above excludes every finite number, so no value can be generated.
65
+ */
66
+ const boundary = (value, exclusive, side) => {
67
+ if (value === undefined)
68
+ return null;
69
+ if (Number.isFinite(value))
70
+ return { value, exclusive };
71
+ if (value === (side === "lower" ? -Infinity : Infinity))
72
+ return null;
73
+ throw new Error("Numeric range has no finite value.");
74
+ };
66
75
  const selectBoundary = (x, y, compare) => {
67
76
  if (x === null)
68
77
  return y;
@@ -1 +1 @@
1
- {"version":3,"file":"_randomInteger.js","sourceRoot":"","sources":["../../src/internal/_randomInteger.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"_randomInteger.js","sourceRoot":"","sources":["../../src/internal/_randomInteger.ts"],"names":[],"mappings":"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"}
@@ -25,14 +25,8 @@ const scalar = (props) => {
25
25
  return Math.floor(Math.random() * (maximum - minimum + 1)) + minimum;
26
26
  };
27
27
  const getLowerBoundary = (schema) => {
28
- const inclusive = schema.minimum === void 0 ? null : {
29
- value: schema.minimum,
30
- exclusive: false
31
- };
32
- const exclusive = schema.exclusiveMinimum === void 0 ? null : {
33
- value: schema.exclusiveMinimum,
34
- exclusive: true
35
- };
28
+ const inclusive = boundary(schema.minimum, false, "lower");
29
+ const exclusive = boundary(schema.exclusiveMinimum, true, "lower");
36
30
  const selected = selectBoundary(inclusive, exclusive, Math.max);
37
31
  if (selected === null) return null;
38
32
  return {
@@ -41,14 +35,8 @@ const getLowerBoundary = (schema) => {
41
35
  };
42
36
  };
43
37
  const getUpperBoundary = (schema) => {
44
- const inclusive = schema.maximum === void 0 ? null : {
45
- value: schema.maximum,
46
- exclusive: false
47
- };
48
- const exclusive = schema.exclusiveMaximum === void 0 ? null : {
49
- value: schema.exclusiveMaximum,
50
- exclusive: true
51
- };
38
+ const inclusive = boundary(schema.maximum, false, "upper");
39
+ const exclusive = boundary(schema.exclusiveMaximum, true, "upper");
52
40
  const selected = selectBoundary(inclusive, exclusive, Math.min);
53
41
  if (selected === null) return null;
54
42
  return {
@@ -56,6 +44,23 @@ const getUpperBoundary = (schema) => {
56
44
  exclusive: false
57
45
  };
58
46
  };
47
+ /**
48
+ * Reads one bound, which may be infinite.
49
+ *
50
+ * A type tag built from an overflowing literal (`Maximum<1e400>`) carries an
51
+ * infinite bound (#2452). `-Infinity` below or `Infinity` above excludes no
52
+ * finite number, so it is no bound at all; `Infinity` below or `-Infinity`
53
+ * above excludes every finite number, so no value can be generated.
54
+ */
55
+ const boundary = (value, exclusive, side) => {
56
+ if (value === void 0) return null;
57
+ if (Number.isFinite(value)) return {
58
+ value,
59
+ exclusive
60
+ };
61
+ if (value === (side === "lower" ? -Infinity : Infinity)) return null;
62
+ throw new Error("Numeric range has no finite value.");
63
+ };
59
64
  const selectBoundary = (x, y, compare) => {
60
65
  if (x === null) return y;
61
66
  if (y === null) return x;
@@ -1 +1 @@
1
- {"version":3,"file":"_randomInteger.mjs","names":[],"sources":["../../src/internal/_randomInteger.ts"],"sourcesContent":["import { OpenApi } from \"@typia/interface\";\n\nimport { _randomMultiple } from \"./_randomMultiple\";\n\nexport const _randomInteger = (\n schema: OpenApi.IJsonSchema.IInteger,\n): number => {\n const lower: IBoundary | null = getLowerBoundary(schema);\n const upper: IBoundary | null = getUpperBoundary(schema);\n const minimum: number =\n lower?.value ?? (upper === null ? 0 : upper.value - 100);\n const maximum: number =\n upper?.value ?? (lower === null ? 100 : lower.value + 100);\n if (minimum > maximum)\n throw new Error(\"Minimum value is greater than maximum value.\");\n return schema.multipleOf === undefined\n ? scalar({ minimum, maximum })\n : _randomMultiple({\n minimum,\n maximum,\n multipleOf: schema.multipleOf,\n exclusiveMinimum: lower?.exclusive ?? false,\n exclusiveMaximum: upper?.exclusive ?? false,\n integer: true,\n });\n};\n\nconst scalar = (props: { minimum: number; maximum: number }): number => {\n const minimum: number = Math.ceil(props.minimum);\n const maximum: number = Math.floor(props.maximum);\n if (minimum > maximum) throw new Error(\"The integer range is empty.\");\n return Math.floor(Math.random() * (maximum - minimum + 1)) + minimum;\n};\n\nconst getLowerBoundary = (\n schema: OpenApi.IJsonSchema.IInteger,\n): IBoundary | null => {\n const inclusive: IBoundary | null =\n schema.minimum === undefined\n ? null\n : { value: schema.minimum, exclusive: false };\n const exclusive: IBoundary | null =\n schema.exclusiveMinimum === undefined\n ? null\n : { value: schema.exclusiveMinimum, exclusive: true };\n const selected: IBoundary | null = selectBoundary(\n inclusive,\n exclusive,\n Math.max,\n );\n if (selected === null) return null;\n return {\n value: selected.exclusive\n ? Math.floor(selected.value) + 1\n : Math.ceil(selected.value),\n exclusive: false,\n };\n};\n\nconst getUpperBoundary = (\n schema: OpenApi.IJsonSchema.IInteger,\n): IBoundary | null => {\n const inclusive: IBoundary | null =\n schema.maximum === undefined\n ? null\n : { value: schema.maximum, exclusive: false };\n const exclusive: IBoundary | null =\n schema.exclusiveMaximum === undefined\n ? null\n : { value: schema.exclusiveMaximum, exclusive: true };\n const selected: IBoundary | null = selectBoundary(\n inclusive,\n exclusive,\n Math.min,\n );\n if (selected === null) return null;\n return {\n value: selected.exclusive\n ? Math.ceil(selected.value) - 1\n : Math.floor(selected.value),\n exclusive: false,\n };\n};\n\nconst selectBoundary = (\n x: IBoundary | null,\n y: IBoundary | null,\n compare: (x: number, y: number) => number,\n): IBoundary | null => {\n if (x === null) return y;\n if (y === null) return x;\n if (x.value === y.value)\n return { value: x.value, exclusive: x.exclusive || y.exclusive };\n return compare(x.value, y.value) === x.value ? x : y;\n};\n\ninterface IBoundary {\n value: number;\n exclusive: boolean;\n}\n"],"mappings":";;AAIA,MAAa,kBACX,WACW;CACX,MAAM,QAA0B,iBAAiB,MAAM;CACvD,MAAM,QAA0B,iBAAiB,MAAM;CACvD,MAAM,UACJ,OAAO,UAAU,UAAU,OAAO,IAAI,MAAM,QAAQ;CACtD,MAAM,UACJ,OAAO,UAAU,UAAU,OAAO,MAAM,MAAM,QAAQ;CACxD,IAAI,UAAU,SACZ,MAAM,IAAI,MAAM,8CAA8C;CAChE,OAAO,OAAO,eAAe,KAAA,IACzB,OAAO;EAAE;EAAS;CAAQ,CAAC,IAC3B,gBAAgB;EACd;EACA;EACA,YAAY,OAAO;EACnB,kBAAkB,OAAO,aAAa;EACtC,kBAAkB,OAAO,aAAa;EACtC,SAAS;CACX,CAAC;AACP;AAEA,MAAM,UAAU,UAAwD;CACtE,MAAM,UAAkB,KAAK,KAAK,MAAM,OAAO;CAC/C,MAAM,UAAkB,KAAK,MAAM,MAAM,OAAO;CAChD,IAAI,UAAU,SAAS,MAAM,IAAI,MAAM,6BAA6B;CACpE,OAAO,KAAK,MAAM,KAAK,OAAO,KAAK,UAAU,UAAU,EAAE,IAAI;AAC/D;AAEA,MAAM,oBACJ,WACqB;CACrB,MAAM,YACJ,OAAO,YAAY,KAAA,IACf,OACA;EAAE,OAAO,OAAO;EAAS,WAAW;CAAM;CAChD,MAAM,YACJ,OAAO,qBAAqB,KAAA,IACxB,OACA;EAAE,OAAO,OAAO;EAAkB,WAAW;CAAK;CACxD,MAAM,WAA6B,eACjC,WACA,WACA,KAAK,GACP;CACA,IAAI,aAAa,MAAM,OAAO;CAC9B,OAAO;EACL,OAAO,SAAS,YACZ,KAAK,MAAM,SAAS,KAAK,IAAI,IAC7B,KAAK,KAAK,SAAS,KAAK;EAC5B,WAAW;CACb;AACF;AAEA,MAAM,oBACJ,WACqB;CACrB,MAAM,YACJ,OAAO,YAAY,KAAA,IACf,OACA;EAAE,OAAO,OAAO;EAAS,WAAW;CAAM;CAChD,MAAM,YACJ,OAAO,qBAAqB,KAAA,IACxB,OACA;EAAE,OAAO,OAAO;EAAkB,WAAW;CAAK;CACxD,MAAM,WAA6B,eACjC,WACA,WACA,KAAK,GACP;CACA,IAAI,aAAa,MAAM,OAAO;CAC9B,OAAO;EACL,OAAO,SAAS,YACZ,KAAK,KAAK,SAAS,KAAK,IAAI,IAC5B,KAAK,MAAM,SAAS,KAAK;EAC7B,WAAW;CACb;AACF;AAEA,MAAM,kBACJ,GACA,GACA,YACqB;CACrB,IAAI,MAAM,MAAM,OAAO;CACvB,IAAI,MAAM,MAAM,OAAO;CACvB,IAAI,EAAE,UAAU,EAAE,OAChB,OAAO;EAAE,OAAO,EAAE;EAAO,WAAW,EAAE,aAAa,EAAE;CAAU;CACjE,OAAO,QAAQ,EAAE,OAAO,EAAE,KAAK,MAAM,EAAE,QAAQ,IAAI;AACrD"}
1
+ {"version":3,"file":"_randomInteger.mjs","names":[],"sources":["../../src/internal/_randomInteger.ts"],"sourcesContent":["import { OpenApi } from \"@typia/interface\";\n\nimport { _randomMultiple } from \"./_randomMultiple\";\n\nexport const _randomInteger = (\n schema: OpenApi.IJsonSchema.IInteger,\n): number => {\n const lower: IBoundary | null = getLowerBoundary(schema);\n const upper: IBoundary | null = getUpperBoundary(schema);\n const minimum: number =\n lower?.value ?? (upper === null ? 0 : upper.value - 100);\n const maximum: number =\n upper?.value ?? (lower === null ? 100 : lower.value + 100);\n if (minimum > maximum)\n throw new Error(\"Minimum value is greater than maximum value.\");\n return schema.multipleOf === undefined\n ? scalar({ minimum, maximum })\n : _randomMultiple({\n minimum,\n maximum,\n multipleOf: schema.multipleOf,\n exclusiveMinimum: lower?.exclusive ?? false,\n exclusiveMaximum: upper?.exclusive ?? false,\n integer: true,\n });\n};\n\nconst scalar = (props: { minimum: number; maximum: number }): number => {\n const minimum: number = Math.ceil(props.minimum);\n const maximum: number = Math.floor(props.maximum);\n if (minimum > maximum) throw new Error(\"The integer range is empty.\");\n return Math.floor(Math.random() * (maximum - minimum + 1)) + minimum;\n};\n\nconst getLowerBoundary = (\n schema: OpenApi.IJsonSchema.IInteger,\n): IBoundary | null => {\n const inclusive: IBoundary | null = boundary(schema.minimum, false, \"lower\");\n const exclusive: IBoundary | null = boundary(\n schema.exclusiveMinimum,\n true,\n \"lower\",\n );\n const selected: IBoundary | null = selectBoundary(\n inclusive,\n exclusive,\n Math.max,\n );\n if (selected === null) return null;\n return {\n value: selected.exclusive\n ? Math.floor(selected.value) + 1\n : Math.ceil(selected.value),\n exclusive: false,\n };\n};\n\nconst getUpperBoundary = (\n schema: OpenApi.IJsonSchema.IInteger,\n): IBoundary | null => {\n const inclusive: IBoundary | null = boundary(schema.maximum, false, \"upper\");\n const exclusive: IBoundary | null = boundary(\n schema.exclusiveMaximum,\n true,\n \"upper\",\n );\n const selected: IBoundary | null = selectBoundary(\n inclusive,\n exclusive,\n Math.min,\n );\n if (selected === null) return null;\n return {\n value: selected.exclusive\n ? Math.ceil(selected.value) - 1\n : Math.floor(selected.value),\n exclusive: false,\n };\n};\n\n/**\n * Reads one bound, which may be infinite.\n *\n * A type tag built from an overflowing literal (`Maximum<1e400>`) carries an\n * infinite bound (#2452). `-Infinity` below or `Infinity` above excludes no\n * finite number, so it is no bound at all; `Infinity` below or `-Infinity`\n * above excludes every finite number, so no value can be generated.\n */\nconst boundary = (\n value: number | undefined,\n exclusive: boolean,\n side: \"lower\" | \"upper\",\n): IBoundary | null => {\n if (value === undefined) return null;\n if (Number.isFinite(value)) return { value, exclusive };\n if (value === (side === \"lower\" ? -Infinity : Infinity)) return null;\n throw new Error(\"Numeric range has no finite value.\");\n};\n\nconst selectBoundary = (\n x: IBoundary | null,\n y: IBoundary | null,\n compare: (x: number, y: number) => number,\n): IBoundary | null => {\n if (x === null) return y;\n if (y === null) return x;\n if (x.value === y.value)\n return { value: x.value, exclusive: x.exclusive || y.exclusive };\n return compare(x.value, y.value) === x.value ? x : y;\n};\n\ninterface IBoundary {\n value: number;\n exclusive: boolean;\n}\n"],"mappings":";;AAIA,MAAa,kBACX,WACW;CACX,MAAM,QAA0B,iBAAiB,MAAM;CACvD,MAAM,QAA0B,iBAAiB,MAAM;CACvD,MAAM,UACJ,OAAO,UAAU,UAAU,OAAO,IAAI,MAAM,QAAQ;CACtD,MAAM,UACJ,OAAO,UAAU,UAAU,OAAO,MAAM,MAAM,QAAQ;CACxD,IAAI,UAAU,SACZ,MAAM,IAAI,MAAM,8CAA8C;CAChE,OAAO,OAAO,eAAe,KAAA,IACzB,OAAO;EAAE;EAAS;CAAQ,CAAC,IAC3B,gBAAgB;EACd;EACA;EACA,YAAY,OAAO;EACnB,kBAAkB,OAAO,aAAa;EACtC,kBAAkB,OAAO,aAAa;EACtC,SAAS;CACX,CAAC;AACP;AAEA,MAAM,UAAU,UAAwD;CACtE,MAAM,UAAkB,KAAK,KAAK,MAAM,OAAO;CAC/C,MAAM,UAAkB,KAAK,MAAM,MAAM,OAAO;CAChD,IAAI,UAAU,SAAS,MAAM,IAAI,MAAM,6BAA6B;CACpE,OAAO,KAAK,MAAM,KAAK,OAAO,KAAK,UAAU,UAAU,EAAE,IAAI;AAC/D;AAEA,MAAM,oBACJ,WACqB;CACrB,MAAM,YAA8B,SAAS,OAAO,SAAS,OAAO,OAAO;CAC3E,MAAM,YAA8B,SAClC,OAAO,kBACP,MACA,OACF;CACA,MAAM,WAA6B,eACjC,WACA,WACA,KAAK,GACP;CACA,IAAI,aAAa,MAAM,OAAO;CAC9B,OAAO;EACL,OAAO,SAAS,YACZ,KAAK,MAAM,SAAS,KAAK,IAAI,IAC7B,KAAK,KAAK,SAAS,KAAK;EAC5B,WAAW;CACb;AACF;AAEA,MAAM,oBACJ,WACqB;CACrB,MAAM,YAA8B,SAAS,OAAO,SAAS,OAAO,OAAO;CAC3E,MAAM,YAA8B,SAClC,OAAO,kBACP,MACA,OACF;CACA,MAAM,WAA6B,eACjC,WACA,WACA,KAAK,GACP;CACA,IAAI,aAAa,MAAM,OAAO;CAC9B,OAAO;EACL,OAAO,SAAS,YACZ,KAAK,KAAK,SAAS,KAAK,IAAI,IAC5B,KAAK,MAAM,SAAS,KAAK;EAC7B,WAAW;CACb;AACF;;;;;;;;;AAUA,MAAM,YACJ,OACA,WACA,SACqB;CACrB,IAAI,UAAU,KAAA,GAAW,OAAO;CAChC,IAAI,OAAO,SAAS,KAAK,GAAG,OAAO;EAAE;EAAO;CAAU;CACtD,IAAI,WAAW,SAAS,UAAU,YAAY,WAAW,OAAO;CAChE,MAAM,IAAI,MAAM,oCAAoC;AACtD;AAEA,MAAM,kBACJ,GACA,GACA,YACqB;CACrB,IAAI,MAAM,MAAM,OAAO;CACvB,IAAI,MAAM,MAAM,OAAO;CACvB,IAAI,EAAE,UAAU,EAAE,OAChB,OAAO;EAAE,OAAO,EAAE;EAAO,WAAW,EAAE,aAAa,EAAE;CAAU;CACjE,OAAO,QAAQ,EAAE,OAAO,EAAE,KAAK,MAAM,EAAE,QAAQ,IAAI;AACrD"}
@@ -41,16 +41,25 @@ const scalar = (props) => {
41
41
  }
42
42
  return value;
43
43
  };
44
- const getLowerBoundary = (schema) => selectBoundary(schema.minimum === undefined
45
- ? null
46
- : { value: schema.minimum, exclusive: false }, schema.exclusiveMinimum === undefined
47
- ? null
48
- : { value: schema.exclusiveMinimum, exclusive: true }, Math.max);
49
- const getUpperBoundary = (schema) => selectBoundary(schema.maximum === undefined
50
- ? null
51
- : { value: schema.maximum, exclusive: false }, schema.exclusiveMaximum === undefined
52
- ? null
53
- : { value: schema.exclusiveMaximum, exclusive: true }, Math.min);
44
+ const getLowerBoundary = (schema) => selectBoundary(boundary(schema.minimum, false, "lower"), boundary(schema.exclusiveMinimum, true, "lower"), Math.max);
45
+ const getUpperBoundary = (schema) => selectBoundary(boundary(schema.maximum, false, "upper"), boundary(schema.exclusiveMaximum, true, "upper"), Math.min);
46
+ /**
47
+ * Reads one bound, which may be infinite.
48
+ *
49
+ * A type tag built from an overflowing literal (`Maximum<1e400>`) carries an
50
+ * infinite bound (#2452). `-Infinity` below or `Infinity` above excludes no
51
+ * finite number, so it is no bound at all; `Infinity` below or `-Infinity`
52
+ * above excludes every finite number, so no value can be generated.
53
+ */
54
+ const boundary = (value, exclusive, side) => {
55
+ if (value === undefined)
56
+ return null;
57
+ if (Number.isFinite(value))
58
+ return { value, exclusive };
59
+ if (value === (side === "lower" ? -Infinity : Infinity))
60
+ return null;
61
+ throw new Error("Numeric range has no finite value.");
62
+ };
54
63
  const selectBoundary = (x, y, compare) => {
55
64
  if (x === null)
56
65
  return y;
@@ -1 +1 @@
1
- {"version":3,"file":"_randomNumber.js","sourceRoot":"","sources":["../../src/internal/_randomNumber.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"_randomNumber.js","sourceRoot":"","sources":["../../src/internal/_randomNumber.ts"],"names":[],"mappings":";;;AAEA,uDAAoD;AAE7C,MAAM,aAAa,GAAG,CAAC,MAAmC,EAAU,EAAE;;IAC3E,MAAM,KAAK,GAAqB,gBAAgB,CAAC,MAAM,CAAC,CAAC;IACzD,MAAM,KAAK,GAAqB,gBAAgB,CAAC,MAAM,CAAC,CAAC;IACzD,MAAM,OAAO,SACX,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,KAAK,mCAAI,CAAC,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,GAAG,GAAG,CAAC,CAAC;IAC3D,MAAM,OAAO,SACX,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,KAAK,mCAAI,CAAC,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,GAAG,GAAG,CAAC,CAAC;IAC7D,IAAI,OAAO,GAAG,OAAO;QACnB,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC;IAClE,OAAO,MAAM,CAAC,UAAU,KAAK,SAAS;QACpC,CAAC,CAAC,MAAM,CAAC;YACL,OAAO;YACP,OAAO;YACP,gBAAgB,QAAE,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,SAAS,mCAAI,KAAK;YAC3C,gBAAgB,QAAE,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,SAAS,mCAAI,KAAK;SAC5C,CAAC;QACJ,CAAC,CAAC,IAAA,iCAAe,EAAC;YACd,OAAO;YACP,OAAO;YACP,UAAU,EAAE,MAAM,CAAC,UAAU;YAC7B,gBAAgB,QAAE,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,SAAS,mCAAI,KAAK;YAC3C,gBAAgB,QAAE,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,SAAS,mCAAI,KAAK;YAC3C,OAAO,EAAE,KAAK;SACf,CAAC,CAAC;AACT,CAAC,CAAC;AAxBW,QAAA,aAAa,GAAb,aAAa,CAwBxB;AAEF,MAAM,MAAM,GAAG,CAAC,KAKf,EAAU,EAAE;IACX,IACE,KAAK,CAAC,OAAO,KAAK,KAAK,CAAC,OAAO;QAC/B,CAAC,KAAK,CAAC,gBAAgB,IAAI,KAAK,CAAC,gBAAgB,CAAC;QAElD,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;IACvD,MAAM,KAAK,GACT,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC;IAClE,IACE,CAAC,KAAK,CAAC,gBAAgB,IAAI,KAAK,KAAK,KAAK,CAAC,OAAO,CAAC;QACnD,CAAC,KAAK,CAAC,gBAAgB,IAAI,KAAK,KAAK,KAAK,CAAC,OAAO,CAAC,EACnD,CAAC;QACD,MAAM,MAAM,GAAW,KAAK,CAAC,OAAO,GAAG,CAAC,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAC3E,IAAI,MAAM,IAAI,KAAK,CAAC,OAAO,IAAI,MAAM,IAAI,KAAK,CAAC,OAAO;YACpD,MAAM,IAAI,KAAK,CAAC,qDAAqD,CAAC,CAAC;QACzE,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC,CAAC;AAEF,MAAM,gBAAgB,GAAG,CACvB,MAAmC,EACjB,EAAE,CACpB,cAAc,CACZ,QAAQ,CAAC,MAAM,CAAC,OAAO,EAAE,KAAK,EAAE,OAAO,CAAC,EACxC,QAAQ,CAAC,MAAM,CAAC,gBAAgB,EAAE,IAAI,EAAE,OAAO,CAAC,EAChD,IAAI,CAAC,GAAG,CACT,CAAC;AAEJ,MAAM,gBAAgB,GAAG,CACvB,MAAmC,EACjB,EAAE,CACpB,cAAc,CACZ,QAAQ,CAAC,MAAM,CAAC,OAAO,EAAE,KAAK,EAAE,OAAO,CAAC,EACxC,QAAQ,CAAC,MAAM,CAAC,gBAAgB,EAAE,IAAI,EAAE,OAAO,CAAC,EAChD,IAAI,CAAC,GAAG,CACT,CAAC;AAEJ;;;;;;;GAOG;AACH,MAAM,QAAQ,GAAG,CACf,KAAyB,EACzB,SAAkB,EAClB,IAAuB,EACL,EAAE;IACpB,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,IAAI,CAAC;IACrC,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;IACxD,IAAI,KAAK,KAAK,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC;QAAE,OAAO,IAAI,CAAC;IACrE,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;AACxD,CAAC,CAAC;AAEF,MAAM,cAAc,GAAG,CACrB,CAAmB,EACnB,CAAmB,EACnB,OAAyC,EACvB,EAAE;IACpB,IAAI,CAAC,KAAK,IAAI;QAAE,OAAO,CAAC,CAAC;IACzB,IAAI,CAAC,KAAK,IAAI;QAAE,OAAO,CAAC,CAAC;IACzB,IAAI,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,KAAK;QACrB,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC,SAAS,EAAE,CAAC;IACnE,OAAO,OAAO,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACvD,CAAC,CAAC"}
@@ -30,20 +30,25 @@ const scalar = (props) => {
30
30
  }
31
31
  return value;
32
32
  };
33
- const getLowerBoundary = (schema) => selectBoundary(schema.minimum === void 0 ? null : {
34
- value: schema.minimum,
35
- exclusive: false
36
- }, schema.exclusiveMinimum === void 0 ? null : {
37
- value: schema.exclusiveMinimum,
38
- exclusive: true
39
- }, Math.max);
40
- const getUpperBoundary = (schema) => selectBoundary(schema.maximum === void 0 ? null : {
41
- value: schema.maximum,
42
- exclusive: false
43
- }, schema.exclusiveMaximum === void 0 ? null : {
44
- value: schema.exclusiveMaximum,
45
- exclusive: true
46
- }, Math.min);
33
+ const getLowerBoundary = (schema) => selectBoundary(boundary(schema.minimum, false, "lower"), boundary(schema.exclusiveMinimum, true, "lower"), Math.max);
34
+ const getUpperBoundary = (schema) => selectBoundary(boundary(schema.maximum, false, "upper"), boundary(schema.exclusiveMaximum, true, "upper"), Math.min);
35
+ /**
36
+ * Reads one bound, which may be infinite.
37
+ *
38
+ * A type tag built from an overflowing literal (`Maximum<1e400>`) carries an
39
+ * infinite bound (#2452). `-Infinity` below or `Infinity` above excludes no
40
+ * finite number, so it is no bound at all; `Infinity` below or `-Infinity`
41
+ * above excludes every finite number, so no value can be generated.
42
+ */
43
+ const boundary = (value, exclusive, side) => {
44
+ if (value === void 0) return null;
45
+ if (Number.isFinite(value)) return {
46
+ value,
47
+ exclusive
48
+ };
49
+ if (value === (side === "lower" ? -Infinity : Infinity)) return null;
50
+ throw new Error("Numeric range has no finite value.");
51
+ };
47
52
  const selectBoundary = (x, y, compare) => {
48
53
  if (x === null) return y;
49
54
  if (y === null) return x;
@@ -1 +1 @@
1
- {"version":3,"file":"_randomNumber.mjs","names":[],"sources":["../../src/internal/_randomNumber.ts"],"sourcesContent":["import { OpenApi } from \"@typia/interface\";\n\nimport { _randomMultiple } from \"./_randomMultiple\";\n\nexport const _randomNumber = (schema: OpenApi.IJsonSchema.INumber): number => {\n const lower: IBoundary | null = getLowerBoundary(schema);\n const upper: IBoundary | null = getUpperBoundary(schema);\n const minimum: number =\n lower?.value ?? (upper === null ? 0 : upper.value - 100);\n const maximum: number =\n upper?.value ?? (lower === null ? 100 : lower.value + 100);\n if (minimum > maximum)\n throw new Error(\"Minimum value is greater than maximum value.\");\n return schema.multipleOf === undefined\n ? scalar({\n minimum,\n maximum,\n exclusiveMinimum: lower?.exclusive ?? false,\n exclusiveMaximum: upper?.exclusive ?? false,\n })\n : _randomMultiple({\n minimum,\n maximum,\n multipleOf: schema.multipleOf,\n exclusiveMinimum: lower?.exclusive ?? false,\n exclusiveMaximum: upper?.exclusive ?? false,\n integer: false,\n });\n};\n\nconst scalar = (props: {\n minimum: number;\n maximum: number;\n exclusiveMinimum: boolean;\n exclusiveMaximum: boolean;\n}): number => {\n if (\n props.minimum === props.maximum &&\n (props.exclusiveMinimum || props.exclusiveMaximum)\n )\n throw new Error(\"Exclusive numeric range is empty.\");\n const value: number =\n Math.random() * (props.maximum - props.minimum) + props.minimum;\n if (\n (props.exclusiveMinimum && value === props.minimum) ||\n (props.exclusiveMaximum && value === props.maximum)\n ) {\n const middle: number = props.minimum + (props.maximum - props.minimum) / 2;\n if (middle <= props.minimum || middle >= props.maximum)\n throw new Error(\"Exclusive numeric range has no representable value.\");\n return middle;\n }\n return value;\n};\n\nconst getLowerBoundary = (\n schema: OpenApi.IJsonSchema.INumber,\n): IBoundary | null =>\n selectBoundary(\n schema.minimum === undefined\n ? null\n : { value: schema.minimum, exclusive: false },\n schema.exclusiveMinimum === undefined\n ? null\n : { value: schema.exclusiveMinimum, exclusive: true },\n Math.max,\n );\n\nconst getUpperBoundary = (\n schema: OpenApi.IJsonSchema.INumber,\n): IBoundary | null =>\n selectBoundary(\n schema.maximum === undefined\n ? null\n : { value: schema.maximum, exclusive: false },\n schema.exclusiveMaximum === undefined\n ? null\n : { value: schema.exclusiveMaximum, exclusive: true },\n Math.min,\n );\n\nconst selectBoundary = (\n x: IBoundary | null,\n y: IBoundary | null,\n compare: (x: number, y: number) => number,\n): IBoundary | null => {\n if (x === null) return y;\n if (y === null) return x;\n if (x.value === y.value)\n return { value: x.value, exclusive: x.exclusive || y.exclusive };\n return compare(x.value, y.value) === x.value ? x : y;\n};\n\ninterface IBoundary {\n value: number;\n exclusive: boolean;\n}\n"],"mappings":";;AAIA,MAAa,iBAAiB,WAAgD;CAC5E,MAAM,QAA0B,iBAAiB,MAAM;CACvD,MAAM,QAA0B,iBAAiB,MAAM;CACvD,MAAM,UACJ,OAAO,UAAU,UAAU,OAAO,IAAI,MAAM,QAAQ;CACtD,MAAM,UACJ,OAAO,UAAU,UAAU,OAAO,MAAM,MAAM,QAAQ;CACxD,IAAI,UAAU,SACZ,MAAM,IAAI,MAAM,8CAA8C;CAChE,OAAO,OAAO,eAAe,KAAA,IACzB,OAAO;EACL;EACA;EACA,kBAAkB,OAAO,aAAa;EACtC,kBAAkB,OAAO,aAAa;CACxC,CAAC,IACD,gBAAgB;EACd;EACA;EACA,YAAY,OAAO;EACnB,kBAAkB,OAAO,aAAa;EACtC,kBAAkB,OAAO,aAAa;EACtC,SAAS;CACX,CAAC;AACP;AAEA,MAAM,UAAU,UAKF;CACZ,IACE,MAAM,YAAY,MAAM,YACvB,MAAM,oBAAoB,MAAM,mBAEjC,MAAM,IAAI,MAAM,mCAAmC;CACrD,MAAM,QACJ,KAAK,OAAO,KAAK,MAAM,UAAU,MAAM,WAAW,MAAM;CAC1D,IACG,MAAM,oBAAoB,UAAU,MAAM,WAC1C,MAAM,oBAAoB,UAAU,MAAM,SAC3C;EACA,MAAM,SAAiB,MAAM,WAAW,MAAM,UAAU,MAAM,WAAW;EACzE,IAAI,UAAU,MAAM,WAAW,UAAU,MAAM,SAC7C,MAAM,IAAI,MAAM,qDAAqD;EACvE,OAAO;CACT;CACA,OAAO;AACT;AAEA,MAAM,oBACJ,WAEA,eACE,OAAO,YAAY,KAAA,IACf,OACA;CAAE,OAAO,OAAO;CAAS,WAAW;AAAM,GAC9C,OAAO,qBAAqB,KAAA,IACxB,OACA;CAAE,OAAO,OAAO;CAAkB,WAAW;AAAK,GACtD,KAAK,GACP;AAEF,MAAM,oBACJ,WAEA,eACE,OAAO,YAAY,KAAA,IACf,OACA;CAAE,OAAO,OAAO;CAAS,WAAW;AAAM,GAC9C,OAAO,qBAAqB,KAAA,IACxB,OACA;CAAE,OAAO,OAAO;CAAkB,WAAW;AAAK,GACtD,KAAK,GACP;AAEF,MAAM,kBACJ,GACA,GACA,YACqB;CACrB,IAAI,MAAM,MAAM,OAAO;CACvB,IAAI,MAAM,MAAM,OAAO;CACvB,IAAI,EAAE,UAAU,EAAE,OAChB,OAAO;EAAE,OAAO,EAAE;EAAO,WAAW,EAAE,aAAa,EAAE;CAAU;CACjE,OAAO,QAAQ,EAAE,OAAO,EAAE,KAAK,MAAM,EAAE,QAAQ,IAAI;AACrD"}
1
+ {"version":3,"file":"_randomNumber.mjs","names":[],"sources":["../../src/internal/_randomNumber.ts"],"sourcesContent":["import { OpenApi } from \"@typia/interface\";\n\nimport { _randomMultiple } from \"./_randomMultiple\";\n\nexport const _randomNumber = (schema: OpenApi.IJsonSchema.INumber): number => {\n const lower: IBoundary | null = getLowerBoundary(schema);\n const upper: IBoundary | null = getUpperBoundary(schema);\n const minimum: number =\n lower?.value ?? (upper === null ? 0 : upper.value - 100);\n const maximum: number =\n upper?.value ?? (lower === null ? 100 : lower.value + 100);\n if (minimum > maximum)\n throw new Error(\"Minimum value is greater than maximum value.\");\n return schema.multipleOf === undefined\n ? scalar({\n minimum,\n maximum,\n exclusiveMinimum: lower?.exclusive ?? false,\n exclusiveMaximum: upper?.exclusive ?? false,\n })\n : _randomMultiple({\n minimum,\n maximum,\n multipleOf: schema.multipleOf,\n exclusiveMinimum: lower?.exclusive ?? false,\n exclusiveMaximum: upper?.exclusive ?? false,\n integer: false,\n });\n};\n\nconst scalar = (props: {\n minimum: number;\n maximum: number;\n exclusiveMinimum: boolean;\n exclusiveMaximum: boolean;\n}): number => {\n if (\n props.minimum === props.maximum &&\n (props.exclusiveMinimum || props.exclusiveMaximum)\n )\n throw new Error(\"Exclusive numeric range is empty.\");\n const value: number =\n Math.random() * (props.maximum - props.minimum) + props.minimum;\n if (\n (props.exclusiveMinimum && value === props.minimum) ||\n (props.exclusiveMaximum && value === props.maximum)\n ) {\n const middle: number = props.minimum + (props.maximum - props.minimum) / 2;\n if (middle <= props.minimum || middle >= props.maximum)\n throw new Error(\"Exclusive numeric range has no representable value.\");\n return middle;\n }\n return value;\n};\n\nconst getLowerBoundary = (\n schema: OpenApi.IJsonSchema.INumber,\n): IBoundary | null =>\n selectBoundary(\n boundary(schema.minimum, false, \"lower\"),\n boundary(schema.exclusiveMinimum, true, \"lower\"),\n Math.max,\n );\n\nconst getUpperBoundary = (\n schema: OpenApi.IJsonSchema.INumber,\n): IBoundary | null =>\n selectBoundary(\n boundary(schema.maximum, false, \"upper\"),\n boundary(schema.exclusiveMaximum, true, \"upper\"),\n Math.min,\n );\n\n/**\n * Reads one bound, which may be infinite.\n *\n * A type tag built from an overflowing literal (`Maximum<1e400>`) carries an\n * infinite bound (#2452). `-Infinity` below or `Infinity` above excludes no\n * finite number, so it is no bound at all; `Infinity` below or `-Infinity`\n * above excludes every finite number, so no value can be generated.\n */\nconst boundary = (\n value: number | undefined,\n exclusive: boolean,\n side: \"lower\" | \"upper\",\n): IBoundary | null => {\n if (value === undefined) return null;\n if (Number.isFinite(value)) return { value, exclusive };\n if (value === (side === \"lower\" ? -Infinity : Infinity)) return null;\n throw new Error(\"Numeric range has no finite value.\");\n};\n\nconst selectBoundary = (\n x: IBoundary | null,\n y: IBoundary | null,\n compare: (x: number, y: number) => number,\n): IBoundary | null => {\n if (x === null) return y;\n if (y === null) return x;\n if (x.value === y.value)\n return { value: x.value, exclusive: x.exclusive || y.exclusive };\n return compare(x.value, y.value) === x.value ? x : y;\n};\n\ninterface IBoundary {\n value: number;\n exclusive: boolean;\n}\n"],"mappings":";;AAIA,MAAa,iBAAiB,WAAgD;CAC5E,MAAM,QAA0B,iBAAiB,MAAM;CACvD,MAAM,QAA0B,iBAAiB,MAAM;CACvD,MAAM,UACJ,OAAO,UAAU,UAAU,OAAO,IAAI,MAAM,QAAQ;CACtD,MAAM,UACJ,OAAO,UAAU,UAAU,OAAO,MAAM,MAAM,QAAQ;CACxD,IAAI,UAAU,SACZ,MAAM,IAAI,MAAM,8CAA8C;CAChE,OAAO,OAAO,eAAe,KAAA,IACzB,OAAO;EACL;EACA;EACA,kBAAkB,OAAO,aAAa;EACtC,kBAAkB,OAAO,aAAa;CACxC,CAAC,IACD,gBAAgB;EACd;EACA;EACA,YAAY,OAAO;EACnB,kBAAkB,OAAO,aAAa;EACtC,kBAAkB,OAAO,aAAa;EACtC,SAAS;CACX,CAAC;AACP;AAEA,MAAM,UAAU,UAKF;CACZ,IACE,MAAM,YAAY,MAAM,YACvB,MAAM,oBAAoB,MAAM,mBAEjC,MAAM,IAAI,MAAM,mCAAmC;CACrD,MAAM,QACJ,KAAK,OAAO,KAAK,MAAM,UAAU,MAAM,WAAW,MAAM;CAC1D,IACG,MAAM,oBAAoB,UAAU,MAAM,WAC1C,MAAM,oBAAoB,UAAU,MAAM,SAC3C;EACA,MAAM,SAAiB,MAAM,WAAW,MAAM,UAAU,MAAM,WAAW;EACzE,IAAI,UAAU,MAAM,WAAW,UAAU,MAAM,SAC7C,MAAM,IAAI,MAAM,qDAAqD;EACvE,OAAO;CACT;CACA,OAAO;AACT;AAEA,MAAM,oBACJ,WAEA,eACE,SAAS,OAAO,SAAS,OAAO,OAAO,GACvC,SAAS,OAAO,kBAAkB,MAAM,OAAO,GAC/C,KAAK,GACP;AAEF,MAAM,oBACJ,WAEA,eACE,SAAS,OAAO,SAAS,OAAO,OAAO,GACvC,SAAS,OAAO,kBAAkB,MAAM,OAAO,GAC/C,KAAK,GACP;;;;;;;;;AAUF,MAAM,YACJ,OACA,WACA,SACqB;CACrB,IAAI,UAAU,KAAA,GAAW,OAAO;CAChC,IAAI,OAAO,SAAS,KAAK,GAAG,OAAO;EAAE;EAAO;CAAU;CACtD,IAAI,WAAW,SAAS,UAAU,YAAY,WAAW,OAAO;CAChE,MAAM,IAAI,MAAM,oCAAoC;AACtD;AAEA,MAAM,kBACJ,GACA,GACA,YACqB;CACrB,IAAI,MAAM,MAAM,OAAO;CACvB,IAAI,MAAM,MAAM,OAAO;CACvB,IAAI,EAAE,UAAU,EAAE,OAChB,OAAO;EAAE,OAAO,EAAE;EAAO,WAAW,EAAE,aAAa,EAAE;CAAU;CACjE,OAAO,QAAQ,EAAE,OAAO,EAAE,KAAK,MAAM,EAAE,QAAQ,IAAI;AACrD"}
@@ -29,6 +29,9 @@ func TestLlmEvaluationRejectsInvalidProbability(t *testing.T) {
29
29
  "- $input.tagUnder\n - LLM evaluation tags.Probability must be in [0, 1], but got -0.1.",
30
30
  "- $input.commentText\n - LLM evaluation @probability must be a number in [0, 1], but got \"high\".",
31
31
  "- $input.commentEmpty\n - LLM evaluation @probability must be a number in [0, 1], but got \"\".",
32
+ // Go's float syntax reads `0x1p-1` as 0.5, JavaScript's `Number()` does not
33
+ // (samchon/typia#2442).
34
+ "- $input.commentGoFloat\n - LLM evaluation @probability must be a number in [0, 1], but got \"0x1p-1\".",
32
35
  "- $input.commentOver\n - LLM evaluation @probability must be in [0, 1], but got 2.",
33
36
  "- $input.commentTwice\n - LLM evaluation @probability is declared more than once; keep only one.",
34
37
  "- $input.both\n - LLM evaluation boolean has both tags.Probability and @probability; keep only one.",
@@ -150,6 +153,12 @@ typia.llm.evaluation<{
150
153
  * @probability
151
154
  */
152
155
  commentEmpty: boolean;
156
+ /**
157
+ * Go float?
158
+ *
159
+ * @probability 0x1p-1
160
+ */
161
+ commentGoFloat: boolean;
153
162
  /**
154
163
  * Over?
155
164
  *
@@ -13,7 +13,8 @@ import (
13
13
  // with a positive `MinItems` constraint is unsatisfiable. The build command must
14
14
  // report a real transform diagnostic across direct aliases, type aliases, graph
15
15
  // cycles, map-key and map-value graph cycles, nested direct aliases, and
16
- // tuple-union nesting for both immediate and factory random entrypoints.
16
+ // tuple-union nesting for both immediate and factory random entrypoints, and
17
+ // for the `@minItems` comment-tag spelling.
17
18
  //
18
19
  // 1. Build a recursive object whose child array has `MinItems<1>`.
19
20
  // 2. Build a direct recursive array alias with `MinItems<1>`.
@@ -25,6 +26,7 @@ func TestRandomRecursiveMinItemsDiagnostic(t *testing.T) {
25
26
  source string
26
27
  }{
27
28
  {"object-child", randomRecursiveMinItemsObjectSource},
29
+ {"comment-tag", randomRecursiveMinItemsCommentTagSource},
28
30
  {"property-alias", randomRecursiveMinItemsPropertyAliasSource},
29
31
  {"mutual-graph", randomRecursiveMinItemsGraphSource},
30
32
  {"map-key-graph", randomRecursiveMinItemsMapKeyGraphSource},
@@ -121,6 +123,21 @@ typia.random<INode>();
121
123
  typia.createRandom<INode>();
122
124
  `
123
125
 
126
+ // The JSDoc spelling of the same constraint must fail the same way. Its count
127
+ // used to be stored as a pointer the positivity check could not read, so the
128
+ // comment tag silently let the unsatisfiable type through.
129
+ const randomRecursiveMinItemsCommentTagSource = `import typia from "typia";
130
+
131
+ interface INode {
132
+ value: string;
133
+ /** @minItems 1 */
134
+ children: INode[];
135
+ }
136
+
137
+ typia.random<INode>();
138
+ typia.createRandom<INode>();
139
+ `
140
+
124
141
  const randomRecursiveMinItemsPropertyAliasSource = `import typia, { tags } from "typia";
125
142
 
126
143
  type Children = INode[] & tags.MinItems<1>;
@@ -57,7 +57,22 @@ var expressionFactory_factory = shimast.NewNodeFactory(shimast.NodeFactoryHooks{
57
57
  func (expressionFactoryNamespace) Number(value any, emit ...*shimprinter.EmitContext) *shimast.Node {
58
58
  f := nativecontext.EmitFactoryOf(expressionFactory_factory, emit...)
59
59
  text, numeric := expressionFactory_number_text(value)
60
- if numeric < 0 {
60
+ // Go spells the non-finite floats `NaN`, `+Inf`, and `-Inf`. Only the first
61
+ // happens to be JavaScript; `+Inf` evaluates an undeclared `Inf` and throws a
62
+ // ReferenceError when the emitted function first runs (samchon/typia#2452).
63
+ // Spell them as the globals, as TypeScript's own factory does.
64
+ if math.IsNaN(numeric) {
65
+ return f.NewIdentifier("NaN")
66
+ }
67
+ if math.IsInf(numeric, 0) {
68
+ if numeric < 0 {
69
+ return f.NewPrefixUnaryExpression(shimast.KindMinusToken, f.NewIdentifier("Infinity"))
70
+ }
71
+ return f.NewIdentifier("Infinity")
72
+ }
73
+ // Negative zero takes the same negation as every negative value; its text
74
+ // `-0` is not a numeric literal on its own.
75
+ if numeric < 0 || (numeric == 0 && math.Signbit(numeric)) {
61
76
  return f.NewPrefixUnaryExpression(
62
77
  shimast.KindMinusToken,
63
78
  f.NewNumericLiteral(expressionFactory_number_abs_text(numeric), shimast.TokenFlagsNone),