typescript-docs-verifier
Version:
Verifies that typescript examples in markdown files actually compile.
73 lines • 2.94 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) => {
const contents = fileMap.get(fileName) ?? typescript_1.default.sys.readFile(fileName, "utf-8");
return typeof contents === "undefined"
? contents
: typescript_1.default.ScriptSnapshot.fromString(contents);
},
readFile: (fileName) => {
return fileMap.get(fileName) ?? typescript_1.default.sys.readFile(fileName);
},
fileExists: (fileName) => {
return fileMap.has(fileName) || typescript_1.default.sys.fileExists(fileName);
},
getCurrentDirectory: () => workingDirectory,
getDirectories: (...args) => typescript_1.default.sys.getDirectories(...args),
directoryExists: (...args) => typescript_1.default.sys.directoryExists(...args),
getCompilationSettings: () => options,
getDefaultLibFileName: () => typescript_1.default.getDefaultLibFilePath(options),
});
const compile = ({ 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