Skip to content

달빛약속 / core/mod / YaksokSession

Class: YaksokSession

달빛 약속 코드의 실행 생명주기를 총괄하는 핵심 클래스입니다. 코드 모듈을 등록하고, 실행 파이프라인(토크나이징, 파싱, 실행)을 조율하며, 외부 환경(입출력, FFI)과의 상호작용을 관리합니다.

Description

이 클래스는 달빛 약속 인터프리터의 공개 API(Public API)이자 퍼사드(Facade) 역할을 수행합니다. 모든 코드 실행은 이 세션을 통해 시작되고 관리됩니다.

Example

let output = '';
const session = new YaksokSession({
  stdout: (message) => {
    output += message;
  }
});

session.addModule('main', '"안녕" 보여주기');
await session.runModule('main');
// output: "안녕"

Constructors

new YaksokSession()

new YaksokSession(config): YaksokSession

새로운 달빛 약속 실행 세션을 생성합니다.

Parameters

config

Partial<SessionConfig> = {}

세션의 동작을 사용자화하는 설정 객체입니다.

  • stdout: 코드 내 보여주기 명령의 출력 스트림을 지정합니다.
  • stderr: 오류 메시지 출력 스트림을 지정합니다.
  • executionDelay: 각 실행 가능한 코드 라인 사이의 지연 시간(ms)을 설정합니다. 디버깅이나 시각화에 유용합니다.
  • events: 'runningCode'와 같은 내부 이벤트를 구독할 핸들러를 등록합니다.

Returns

YaksokSession

Defined in

core/session/session.ts:78

Properties

baseContext?

optional baseContext: CodeFile

Defined in

core/session/session.ts:64


entrypoint

entrypoint: CodeFile = null

Defined in

core/session/session.ts:57


executionDelay

executionDelay: number

Defined in

core/session/session.ts:61


extensions

extensions: Extension[] = []

Defined in

core/session/session.ts:63


files

files: Record<string | symbol, CodeFile> = {}

Defined in

core/session/session.ts:68


flags

flags: Partial<Partial<Record<SKIP_VALIDATE_BREAK_OR_RETURN_IN_LOOP, boolean>>> = {}

Defined in

core/session/session.ts:62


isRunning

isRunning: boolean = false

Defined in

core/session/session.ts:56


pubsub

pubsub: PubSub<Events>

Defined in

core/session/session.ts:67


signal

signal: AbortSignal = null

Defined in

core/session/session.ts:65


stderr()

stderr: (message) => void

Parameters

message

string

Returns

void

Defined in

core/session/session.ts:60


stdout()

stdout: (message) => void

Parameters

message

string

Returns

void

Defined in

core/session/session.ts:59

Methods

addModule()

addModule(moduleName, code): CodeFile

세션에 코드 모듈을 추가합니다.

Parameters

moduleName

모듈을 식별하는 고유한 이름 또는 심볼입니다.

string | symbol

code

string

실행할 달빛 약속 소스코드 문자열입니다.

Returns

CodeFile

생성된 CodeFile 인스턴스를 반환합니다.

Description

추가된 코드는 즉시 실행되지 않고, runModule이 호출될 때 참조됩니다. 각 코드는 CodeFile 인스턴스로 변환되어 관리됩니다.

Example

session.addModule('utils', '약속, 더하기 (A) (B)
A + B 반환하기');
session.addModule('main', '(@utils 더하기 1 2) 보여주기');

Defined in

core/session/session.ts:112


addModules()

addModules(modules): void

여러 개의 코드 모듈을 한 번에 추가합니다.

Parameters

modules

Record<string, string>

모듈 이름을 키로, 소스코드를 값으로 하는 객체입니다.

Returns

void

Defined in

core/session/session.ts:130


extend()

extend(extension): Promise<void>

세션에 FFI(Foreign Function Interface)를 위한 확장을 추가합니다.

Parameters

extension

Extension

FFI 런타임을 제공하는 확장 객체입니다.

Returns

Promise<void>

Example

await session.extend(new QuickJS()); // QuickJS 런타임 확장 추가

Defined in

core/session/session.ts:145


getCodeFile()

getCodeFile(fileName): CodeFile

세션에 등록된 CodeFile 인스턴스를 가져옵니다.

Parameters

fileName

string

가져올 모듈의 이름입니다.

Returns

CodeFile

CodeFile 인스턴스를 반환합니다.

Defined in

core/session/session.ts:291


runFFI()

runFFI(runtime, code, args): Promise<ValueType>

등록된 FFI 확장을 통해 외부 코드를 실행합니다.

Parameters

runtime

string

사용할 FFI 런타임의 이름입니다 (예: 'QuickJS').

code

string

FFI 런타임에서 실행할 코드입니다.

args

Record<string, any>

코드를 실행할 때 전달할 인자입니다.

Returns

Promise<ValueType>

실행 결과를 달빛 약속ValueType으로 변환하여 반환합니다.

Defined in

core/session/session.ts:311


runModule()

runModule(moduleName): Promise<RunModuleResult>

지정된 모듈을 엔트리포인트로 하여 코드를 실행합니다.

Parameters

moduleName

실행을 시작할 모듈(엔트리포인트)의 이름입니다.

string | symbol

Returns

Promise<RunModuleResult>

코드 실행 결과를 담은 RunModuleResult 객체를 반환합니다.

Description

이 메서드는 달빛 약속 코드 실행의 전체 과정을 조율합니다.

  1. 상태 잠금: isRunning 플래그를 true로 설정하여 동시 실행을 방지합니다.
  2. 유효성 검사: 실행 전 validate()를 호출하여 코드의 정적 오류를 미리 확인합니다.
  3. 실행: CodeFile.run()을 호출하여 실제 코드 실행을 시작합니다.
  4. 오류 처리: 실행 중 발생하는 모든 종류의 오류를 catch하여 적절한 RunModuleResult로 변환합니다.
  5. 상태 해제: finally 블록에서 isRunning 플래그를 false로 설정하여 세션이 다시 실행 가능한 상태임을 보장합니다.

Defined in

core/session/session.ts:164


setBaseContext()

setBaseContext(code): Promise<void>

모든 모듈이 공유하는 기본 컨텍스트를 설정합니다. 여기에 정의된 변수나 함수는 모든 모듈의 최상위 스코프에서 접근 가능합니다.

Parameters

code

string

기본 컨텍스트로 사용할 달빛 약속 코드입니다.

Returns

Promise<void>

Defined in

core/session/session.ts:244


validate()

validate(entrypoint?): void

지정된 엔트리포인트부터 시작하여 모든 참조된 코드의 유효성을 검사합니다.

Parameters

entrypoint?

유효성 검사를 시작할 모듈의 이름입니다. 지정하지 않으면 모든 모듈을 검사합니다.

string | symbol

Returns

void

Defined in

core/session/session.ts:255