typescript-docs-verifier
Version:
Verifies that typescript examples in markdown files actually compile.
75 lines • 3 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.compile = void 0;
const typescript_1 = __importDefault(require("typescript"));
const path_1 = __importDefault(require("path"));
const createServiceHost = (options, workingDirectory, fileMap) => ({
getScriptFileNames: () => {
return [...fileMap.keys()];
},
getScriptVersion: () => "1",
getProjectVersion: () => "1",
getScriptSnapshot: (fileName) => {
var _a;
const contents = (_a = fileMap.get(fileName)) !== null && _a !== void 0 ? _a : typescript_1.default.sys.readFile(fileName, "utf-8");
return typeof contents === "undefined"
? contents
: typescript_1.default.ScriptSnapshot.fromString(contents);
},
readFile: (fileName) => {
var _a;
return (_a = fileMap.get(fileName)) !== null && _a !== void 0 ? _a : typescript_1.default.sys.readFile(fileName);
},
fileExists: (fileName) => {
return fileMap.has(fileName) || typescript_1.default.sys.fileExists(fileName);
},
getCurrentDirectory: () => workingDirectory,
getDirectories: typescript_1.default.sys.getDirectories,
directoryExists: typescript_1.default.sys.directoryExists,
getCompilationSettings: () => options,
getDefaultLibFileName: () => typescript_1.default.getDefaultLibFilePath(options),
});
const compile = async ({ compilerOptions, workingDirectory, code, type, }) => {
const id = process.hrtime.bigint().toString();
const filename = path_1.default.join(compilerOptions.rootDir || "", `block-${id}.${type}`);
const fileMap = new Map([[filename, code]]);
const registry = typescript_1.default.createDocumentRegistry(typescript_1.default.sys.useCaseSensitiveFileNames, workingDirectory);
const serviceHost = createServiceHost({
...compilerOptions,
noEmit: false,
declaration: false,
sourceMap: false,
noEmitOnError: true,
incremental: false,
composite: false,
declarationMap: false,
noUnusedLocals: false,
}, workingDirectory, fileMap);
const service = typescript_1.default.createLanguageService(serviceHost, registry);
try {
const output = service.getEmitOutput(filename, false, false);
if (output.emitSkipped) {
const diagnostics = [
...service.getCompilerOptionsDiagnostics(),
...service.getSemanticDiagnostics(filename),
...service.getSyntacticDiagnostics(filename),
];
return {
diagnostics,
hasError: true,
};
}
return {
diagnostics: [],
hasError: false,
};
}
finally {
service.dispose();
}
};
exports.compile = compile;
//# sourceMappingURL=CodeCompiler.js.map