달빛약속 / 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
Defined in
Properties
baseContext?
optional
baseContext:CodeFile
Defined in
entrypoint
entrypoint:
CodeFile
=null
Defined in
executionDelay
executionDelay:
number
Defined in
extensions
extensions:
Extension
[] =[]
Defined in
files
files:
Record
<string
|symbol
,CodeFile
> ={}
Defined in
flags
flags:
Partial
<Partial
<Record
<SKIP_VALIDATE_BREAK_OR_RETURN_IN_LOOP
,boolean
>>> ={}
Defined in
isRunning
isRunning:
boolean
=false
Defined in
pubsub
pubsub:
PubSub
<Events
>
Defined in
signal
signal:
AbortSignal
=null
Defined in
stderr()
stderr: (
message
) =>void
Parameters
message
string
Returns
void
Defined in
stdout()
stdout: (
message
) =>void
Parameters
message
string
Returns
void
Defined in
Methods
addModule()
addModule(
moduleName
,code
):CodeFile
세션에 코드 모듈을 추가합니다.
Parameters
moduleName
모듈을 식별하는 고유한 이름 또는 심볼입니다.
string
| symbol
code
string
실행할 달빛 약속
소스코드 문자열입니다.
Returns
생성된 CodeFile
인스턴스를 반환합니다.
Description
추가된 코드는 즉시 실행되지 않고, runModule
이 호출될 때 참조됩니다. 각 코드는 CodeFile
인스턴스로 변환되어 관리됩니다.
Example
session.addModule('utils', '약속, 더하기 (A) (B)
A + B 반환하기');
session.addModule('main', '(@utils 더하기 1 2) 보여주기');
Defined in
addModules()
addModules(
modules
):void
여러 개의 코드 모듈을 한 번에 추가합니다.
Parameters
modules
Record
<string
, string
>
모듈 이름을 키로, 소스코드를 값으로 하는 객체입니다.
Returns
void
Defined in
extend()
extend(
extension
):Promise
<void
>
세션에 FFI(Foreign Function Interface)를 위한 확장을 추가합니다.
Parameters
extension
FFI 런타임을 제공하는 확장 객체입니다.
Returns
Promise
<void
>
Example
await session.extend(new QuickJS()); // QuickJS 런타임 확장 추가
Defined in
getCodeFile()
getCodeFile(
fileName
):CodeFile
세션에 등록된 CodeFile
인스턴스를 가져옵니다.
Parameters
fileName
string
가져올 모듈의 이름입니다.
Returns
CodeFile
인스턴스를 반환합니다.
Defined in
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
runModule()
runModule(
moduleName
):Promise
<RunModuleResult
>
지정된 모듈을 엔트리포인트로 하여 코드를 실행합니다.
Parameters
moduleName
실행을 시작할 모듈(엔트리포인트)의 이름입니다.
string
| symbol
Returns
Promise
<RunModuleResult
>
코드 실행 결과를 담은 RunModuleResult
객체를 반환합니다.
Description
이 메서드는 달빛 약속
코드 실행의 전체 과정을 조율합니다.
- 상태 잠금:
isRunning
플래그를true
로 설정하여 동시 실행을 방지합니다. - 유효성 검사: 실행 전
validate()
를 호출하여 코드의 정적 오류를 미리 확인합니다. - 실행:
CodeFile.run()
을 호출하여 실제 코드 실행을 시작합니다. - 오류 처리: 실행 중 발생하는 모든 종류의 오류를
catch
하여 적절한RunModuleResult
로 변환합니다. - 상태 해제:
finally
블록에서isRunning
플래그를false
로 설정하여 세션이 다시 실행 가능한 상태임을 보장합니다.
Defined in
setBaseContext()
setBaseContext(
code
):Promise
<void
>
모든 모듈이 공유하는 기본 컨텍스트를 설정합니다. 여기에 정의된 변수나 함수는 모든 모듈의 최상위 스코프에서 접근 가능합니다.
Parameters
code
string
기본 컨텍스트로 사용할 달빛 약속
코드입니다.
Returns
Promise
<void
>
Defined in
validate()
validate(
entrypoint
?):void
지정된 엔트리포인트부터 시작하여 모든 참조된 코드의 유효성을 검사합니다.
Parameters
entrypoint?
유효성 검사를 시작할 모듈의 이름입니다. 지정하지 않으면 모든 모듈을 검사합니다.
string
| symbol
Returns
void