Skip to content

JavaScript Implementation: Core Runtime ​

TIP

For basic usage, please see the Guide: "Embedding into Your Application".

Parser ​

Parser.parse(script: string) ​

Converts a string of AiScript code into an Abstract Syntax Tree (AST).

ts
import { Parser } from '@syuilo/aiscript';

const program = "<: \"Hello, World!\"";

let parser: Parser;

async function run() {
    parser = new Parser();
    const ast = parser.parse(program);
}

run();

Parser.addPlugin(type: PluginType, plugin: ParserPlugin) ​

Adds a plugin to the current instance that receives the AST to perform validation (validate) or modification (transform).


Interpreter ​

AiScript Values must be converted to JavaScript primitive types as needed.

Constructor ​

Interpreter(consts: Record<string, Value>, opts: ...)

consts ​

Specifies properties to be injected at runtime. Provide an object where the keys are property names and the values are the AiScript values to inject.

opts ​

Specifies execution options. All are optional.

  • in(q: string): Promise<string>: This function is called to accept input. q is the value to display in the prompt, and the return value is a Promise that resolves with the string of user input.
  • out(value: Value): void: This function is called to produce output. value is the AiScript Value to be output.
  • err(e: AiScriptError): void: This function is called when a problem occurs during AiScript execution. e is an AiScriptError that extends JavaScript's Error class.
  • log(type: string, params: LogObject): void: This function is called when there is a log from the runtime.
  • maxStep: number: To limit the execution depth, enter the maximum number of steps here.
  • abortOnError: boolean: Whether to stop all other executions handled by the interpreter (including future ones) when an error occurs during execution.
  • irqRate: number: Allows you to specify the Interrupt Request (IRQ) rate.
  • irqSleep() => Promise<void>: Allows you to define the IRQ wait.

Interpreter.exec(script?: Ast.Node[]) ​

Asynchronously executes the AiScript AST specified in script. This is the recommended method for normal use.

Interpreter.execSync(script?: Ast.Node[]) ​

Synchronously executes the AiScript AST specified in script. Use with caution.

DANGER

  • When running synchronously, it is strongly recommended to adjust limits such as the maximum number of steps. Unlike the asynchronous exec, execSync can have a severe impact on the host JavaScript environment if a malicious script (e.g., an infinite loop) is executed with poor configuration.
  • When running synchronously, functions injected via consts that return a Promise (in other words, async functions) cannot be executed and will result in an error.

Interpreter.execFn(fn: VFn, args: Value[]) ​

Asynchronously executes the AiScript function passed in fn. The args array contains the arguments for the function. To execute synchronously, use Interpreter.execFnSync.

Interpreter.execFnSimple(fn: VFn, args: Value[]) ​

Asynchronously executes the AiScript function passed in fn. Unlike execFn, which calls the interpreter's callback (opts.err) if an error occurs within the function, execFnSimple will always throw an Error.

Interpreter.collectMetadata(script?: Ast.Node[]) ​

Retrieves the content of the metadata syntax as a JavaScript value.