import * as typeScript from "typescript"; import type { EffectFnAff } from "../PureScriptType"; export const compileAsEffectFnAff = (option: { rootNames: ReadonlyArray; outDir: string | null; declaration: boolean; }): EffectFnAff => { return (onError, onSuccess) => { typeScript .createProgram({ rootNames: option.rootNames, options: { target: typeScript.ScriptTarget.ES2020, lib: ["ES2020", "DOM"], esModuleInterop: true, strict: true, forceConsistentCasingInFileNames: true, module: typeScript.ModuleKind.CommonJS, moduleResolution: typeScript.ModuleResolutionKind.NodeJs, isolatedModules: true, skipLibCheck: true, outDir: typeof option.outDir === "string" ? option.outDir : (undefined as unknown as string), noUncheckedIndexedAccess: true, newLine: typeScript.NewLineKind.LineFeed, exactOptionalPropertyTypes: true, declaration: option.declaration, }, }) .emit(); onSuccess(); return (cancelError, cancelerError, cancelerSuccess) => { console.log("Tsc の停止処理は未実装です"); cancelerSuccess(); }; }; };