///
import type {
BasicRuntimeService,
Env,
BasicSysAbstraction,
EnvFactory,
BaseBasicSysAbstraction,
WithCementWrapperSysAbstractionParams,
} from "@adviser/cement";
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: WithCementWrapperSysAbstractionParams): BasicSysAbstraction {
const ende = param.TxtEnDecoder ?? param.cement.TxtEnDecoderSingleton();
baseBasicSysAbstraction =
baseBasicSysAbstraction ??
new param.cement.BaseBasicSysAbstraction({
TxtEnDecoder: ende,
});
return new param.cement.WrapperBasicSysAbstraction(baseBasicSysAbstraction, {
basicRuntimeService: new DenoRuntimeService(param?.cement.envFactory),
...param,
});
}