@azure-tools/typespec-powershell
Version:
An experimental TypeSpec emitter for PowerShell codegen
48 lines (41 loc) • 1.41 kB
text/typescript
import { Diagnostic, resolvePath } from "@typespec/compiler";
import {
createTestHost,
createTestWrapper,
expectDiagnosticEmpty,
} from "@typespec/compiler/testing";
import { PowershellTsTestLibrary } from "../src/testing/index.js";
export async function createPowershellTsTestHost() {
return createTestHost({
libraries: [PowershellTsTestLibrary],
});
}
export async function createPowershellTsTestRunner() {
const host = await createPowershellTsTestHost();
return createTestWrapper(host, {
compilerOptions: {
noEmit: false,
emit: ["powershell-ts"],
},
});
}
export async function emitWithDiagnostics(
code: string
): Promise<[Record<string, string>, readonly Diagnostic[]]> {
const runner = await createPowershellTsTestRunner();
await runner.compileAndDiagnose(code, {
outputDir: "tsp-output",
});
const emitterOutputDir = "./tsp-output/powershell-ts";
const files = await runner.program.host.readDir(emitterOutputDir);
const result: Record<string, string> = {};
for (const file of files) {
result[file] = (await runner.program.host.readFile(resolvePath(emitterOutputDir, file))).text;
}
return [result, runner.program.diagnostics];
}
export async function emit(code: string): Promise<Record<string, string>> {
const [result, diagnostics] = await emitWithDiagnostics(code);
expectDiagnosticEmpty(diagnostics);
return result;
}