mirror of
https://github.com/anomalyco/opencode.git
synced 2026-07-26 17:03:34 +00:00
49 lines
1.1 KiB
TypeScript
49 lines
1.1 KiB
TypeScript
export const stringMethods = new Set([
|
|
"toLowerCase",
|
|
"toUpperCase",
|
|
"trim",
|
|
"trimStart",
|
|
"trimEnd",
|
|
"split",
|
|
"slice",
|
|
"substring",
|
|
"includes",
|
|
"startsWith",
|
|
"endsWith",
|
|
"indexOf",
|
|
"lastIndexOf",
|
|
"replace",
|
|
"replaceAll",
|
|
"repeat",
|
|
"padStart",
|
|
"padEnd",
|
|
"charAt",
|
|
"charCodeAt",
|
|
"codePointAt",
|
|
"at",
|
|
"concat",
|
|
"toString",
|
|
"match",
|
|
"matchAll",
|
|
"search",
|
|
"localeCompare",
|
|
"normalize",
|
|
])
|
|
|
|
export const stringStatics = new Set(["fromCharCode", "fromCodePoint"])
|
|
|
|
export const invokeStringStatic = (name: string, args: Array<unknown>, node: AstNode): unknown => {
|
|
const codes = args.map((arg) => {
|
|
if (typeof arg !== "number") throw new InterpreterRuntimeError(`String.${name} expects number arguments.`, node)
|
|
return arg
|
|
})
|
|
switch (name) {
|
|
case "fromCharCode":
|
|
return String.fromCharCode(...codes)
|
|
case "fromCodePoint":
|
|
return String.fromCodePoint(...codes)
|
|
default:
|
|
throw new InterpreterRuntimeError(`String.${name} is not available in CodeMode.`, node)
|
|
}
|
|
}
|
|
import { type AstNode, InterpreterRuntimeError } from "../interpreter/model.js"
|