///
import {
BaseBasicRuntimeSysAbstractionParams,
BaseBasicSysAbstraction,
WrapperBasicSysAbstraction,
} from "../base-sys-abstraction.js";
import { BasicRuntimeService, BasicSysAbstraction } from "../sys-abstraction.js";
import { Env, envFactory, EnvFactory } from "../sys-env.js";
import { TxtEnDecoderSingleton } from "../txt-en-decoder.js";
export class DenoRuntimeService implements BasicRuntimeService {
readonly _envFactory: EnvFactory;
constructor(envFactory: EnvFactory) {
this._envFactory = envFactory;
}
Env(): Env {
return this._envFactory();
}
Args(): string[] {
return Deno.args;
}
Stdout(): WritableStream {
return Deno.stdout.writable;
}
Stderr(): WritableStream {
return Deno.stderr.writable;
}
}
let baseBasicSysAbstraction: BaseBasicSysAbstraction | undefined = undefined;
export function DenoBasicSysAbstraction(param: Partial = {}): BasicSysAbstraction {
const ende = param.TxtEnDecoder ?? TxtEnDecoderSingleton();
baseBasicSysAbstraction =
baseBasicSysAbstraction ??
new BaseBasicSysAbstraction({
TxtEnDecoder: ende,
});
return new WrapperBasicSysAbstraction(baseBasicSysAbstraction, {
basicRuntimeService: new DenoRuntimeService(envFactory),
...param,
});
}