/
Alex_Ural
/
opencode
Обзор
Документация
Войти
/
Alex_Ural
/
opencode
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
dev
packages/codemode/src/stdlib/number.ts
66 строк
2 KB
Aiden Cline
feat(codemode): sync v2 implementation (#35574)
06 июл 2026, 21:19
Не верифицирован
06 июл 2026, 21:19
d5aa79c
Код
Авторство
О чём код?
export const numberMethods = new Set(["toFixed", "toPrecision", "toExponential", "toString"]) export const numberConstants = new Set(["MAX_SAFE_INTEGER", "MIN_SAFE_INTEGER", "MAX_VALUE", "MIN_VALUE", "EPSILON"]) export const numberStatics = new Set(["isInteger", "isFinite", "isNaN", "isSafeInteger", "parseInt", "parseFloat"]) export const invokeNumberMethod = (value: number, name: string, args: Array<unknown>, node: AstNode): unknown => { const optNum = (index: number): number | undefined => { const arg = args[index] if (arg === undefined) return undefined if (typeof arg !== "number") throw new InterpreterRuntimeError(`Number.${name} expects a number argument.`, node) return arg } let result: unknown switch (name) { case "toFixed": result = value.toFixed(optNum(0)) break case "toExponential": result = value.toExponential(optNum(0)) break case "toPrecision": { const digits = optNum(0) result = digits === undefined ? value.toString() : value.toPrecision(digits) break } case "toString": { const radix = optNum(0) if (radix !== undefined && (radix < 2 || radix > 36)) { throw new InterpreterRuntimeError("Number.toString radix must be between 2 and 36.", node) } result = value.toString(radix) break } default: throw new InterpreterRuntimeError(`Number method '${name}' is not available in CodeMode.`, node) } return boundedData(result, `Number.${name} result`) } export const invokeNumberStatic = (name: string, args: Array<unknown>, node: AstNode): unknown => { const value = args[0] switch (name) { case "isInteger": return Number.isInteger(value) case "isFinite": return Number.isFinite(value) case "isNaN": return Number.isNaN(value) case "isSafeInteger": return Number.isSafeInteger(value) case "parseInt": { const radix = args[1] if (radix !== undefined && typeof radix !== "number") { throw new InterpreterRuntimeError("Number.parseInt expects a numeric radix.", node) } return parseInt(coerceToString(value), radix) } case "parseFloat": return parseFloat(coerceToString(value)) default: throw new InterpreterRuntimeError(`Number.${name} is not available in CodeMode.`, node) } } import { type AstNode, InterpreterRuntimeError } from "../interpreter/model.js" import { boundedData, coerceToString } from "./value.js"