UNPKG

typescript-docs-verifier

Version:

Verifies that typescript examples in markdown files actually compile.

75 lines 3 kB
"use strict"; 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