Skip to content

Commit 2c91f54

Browse files
committed
some important stability improvements
1 parent 5ed6254 commit 2c91f54

File tree

2 files changed

+13
-4
lines changed

2 files changed

+13
-4
lines changed

packages/core/src/core/formats/kv-fmt.ts

+2-4
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import { JSON } from "../json.js";
1414
import {
1515
createNumber,
1616
isScalar,
17+
isValidNumberToken,
1718
scalarTypeOf,
1819
} from "../schema/definition/scalar.js";
1920

@@ -86,10 +87,7 @@ export const KV: {
8687
return JSON.parse(
8788
`"${token.slice(1, -1).replace(/\\.|\\'|"|\n/g, (match) => ({ [`\\'`]: `'`, [`"`]: `\\"`, ["\n"]: "\\n" })[match] ?? match)}"`,
8889
);
89-
// 0, 100, 1.1e+10, 1.1e-10
90-
case /^-?(?:0|[1-9][0-9]*(?:[.][0-9]+)?)(?:e[-+]?[0-9]+)?$/i.test(
91-
token,
92-
):
90+
case isValidNumberToken(token):
9391
return createNumber(token);
9492
case /^[+-]/.test(token):
9593
throw new Error("invalid numeric: " + token);

packages/core/src/core/schema/definition/scalar.ts

+11
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,10 @@ export function convertScalar(
5252
return createNumber(value["source"]);
5353
}
5454

55+
if (typeof value === 'string' && !isValidNumberToken(value)) {
56+
return value;
57+
}
58+
5559
return unboxed ? Number(value) : createNumber(String(value));
5660
case "string":
5761
return String(value);
@@ -113,6 +117,13 @@ export function scalarTypeOf(value?: unknown): ScalarType | undefined {
113117
: (typeof value as ScalarType);
114118
}
115119

120+
// 0, 100, 1.1e+10, 1.1e-10
121+
const numberRegex = /^-?(?:0|[1-9][0-9]*(?:[.][0-9]+)?)(?:e[-+]?[0-9]+)?$/;
122+
123+
export function isValidNumberToken(n: string) {
124+
return numberRegex.test(n);
125+
}
126+
116127
export function createNumber(source: string, value?: number) {
117128
const numberObject = Object.assign(new Number(value ?? source), { source });
118129

0 commit comments

Comments
 (0)