Download packages/codemode/src/stdlib/number.ts from SaylorTwift/opencode: direct link, hf CLI and curl.
- Browser
- Download file 2.49 kB
-
https://huggingface.co/SaylorTwift/opencode/resolve/main/packages/codemode/src/stdlib/number.ts
- Command line
-
hf download hf://SaylorTwift/opencode/packages/codemode/src/stdlib/number.ts
-
curl -L -o number.ts https://huggingface.co/SaylorTwift/opencode/resolve/main/packages/codemode/src/stdlib/number.ts
2.49 kB
| 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" | |