UNPKG

@riddance/env

Version:

42 lines 7.58 kB
import { relative, resolve } from 'node:path'; import ts from 'typescript'; export function compile(reporter, path) { const configFile = ts.readConfigFile(resolve(path, 'tsconfig.json'), p => ts.sys.readFile(p)); if (configFile.error) { reportDiagnostic(reporter)(configFile.error); return { sourceFiles: [] }; } const tsconfig = ts.parseJsonConfigFileContent(configFile.config, ts.sys, './'); if (tsconfig.errors.length !== 0) { tsconfig.errors.forEach(reportDiagnostic(reporter)); return { sourceFiles: [] }; } const program = ts.createProgram(tsconfig.fileNames, { ...tsconfig.options, listEmittedFiles: true, outDir: path, rootDir: path, typeRoots: [resolve(path, 'node_modules/@types')], }); const sourceFiles = program.getSourceFiles().map(sf => relative(path, sf.fileName)); const diagnostics = ts.getPreEmitDiagnostics(program); diagnostics.forEach(reportDiagnostic(reporter)); const emitResult = program.emit(); emitResult.diagnostics.forEach(reportDiagnostic(reporter)); if (diagnostics.length !== 0 || emitResult.diagnostics.length !== 0 || emitResult.emitSkipped) { return { sourceFiles }; } return { sourceFiles, outputFiles: emitResult.emittedFiles?.map(f => relative(path, f)), }; } export function reportDiagnostic(reporter) { return (diagnostic) => { const { line, character } = diagnostic.start === undefined ? { line: undefined, character: undefined } : (diagnostic.file?.getLineAndCharacterOfPosition(diagnostic.start) ?? {}); reporter.error(ts.flattenDiagnosticMessageText(diagnostic.messageText, '\n'), diagnostic.file?.fileName, line ? line + 1 : undefined, character ? character + 1 : undefined); }; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcGlsZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJjb21waWxlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxNQUFNLFdBQVcsQ0FBQTtBQUM3QyxPQUFPLEVBQUUsTUFBTSxZQUFZLENBQUE7QUFHM0IsTUFBTSxVQUFVLE9BQU8sQ0FBQyxRQUFrQixFQUFFLElBQVk7SUFDcEQsTUFBTSxVQUFVLEdBQUcsRUFBRSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLGVBQWUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQTtJQUM3RixJQUFJLFVBQVUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNuQixnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUE7UUFDNUMsT0FBTyxFQUFFLFdBQVcsRUFBRSxFQUFFLEVBQUUsQ0FBQTtJQUM5QixDQUFDO0lBRUQsTUFBTSxRQUFRLEdBQUcsRUFBRSxDQUFDLDBCQUEwQixDQUFDLFVBQVUsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQTtJQUMvRSxJQUFJLFFBQVEsQ0FBQyxNQUFNLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQy9CLFFBQVEsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUE7UUFDbkQsT0FBTyxFQUFFLFdBQVcsRUFBRSxFQUFFLEVBQUUsQ0FBQTtJQUM5QixDQUFDO0lBRUQsTUFBTSxPQUFPLEdBQUcsRUFBRSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsU0FBUyxFQUFFO1FBQ2pELEdBQUcsUUFBUSxDQUFDLE9BQU87UUFDbkIsZ0JBQWdCLEVBQUUsSUFBSTtRQUN0QixNQUFNLEVBQUUsSUFBSTtRQUNaLE9BQU8sRUFBRSxJQUFJO1FBQ2IsU0FBUyxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxxQkFBcUIsQ0FBQyxDQUFDO0tBQ3BELENBQUMsQ0FBQTtJQUNGLE1BQU0sV0FBVyxHQUFHLE9BQU8sQ0FBQyxjQUFjLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFBO0lBRW5GLE1BQU0sV0FBVyxHQUFHLEVBQUUsQ0FBQyxxQkFBcUIsQ0FBQyxPQUFPLENBQUMsQ0FBQTtJQUNyRCxXQUFXLENBQUMsT0FBTyxDQUFDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUE7SUFDL0MsTUFBTSxVQUFVLEdBQUcsT0FBTyxDQUFDLElBQUksRUFBRSxDQUFBO0lBQ2pDLFVBQVUsQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUE7SUFDMUQsSUFBSSxXQUFXLENBQUMsTUFBTSxLQUFLLENBQUMsSUFBSSxVQUFVLENBQUMsV0FBVyxDQUFDLE1BQU0sS0FBSyxDQUFDLElBQUksVUFBVSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQzVGLE9BQU8sRUFBRSxXQUFXLEVBQUUsQ0FBQTtJQUMxQixDQUFDO0lBQ0QsT0FBTztRQUNILFdBQVc7UUFDWCxXQUFXLEVBQUUsVUFBVSxDQUFDLFlBQVksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO0tBQ3BFLENBQUE7QUFDTCxDQUFDO0FBRUQsTUFBTSxVQUFVLGdCQUFnQixDQUFDLFFBQWtCO0lBQy9DLE9BQU8sQ0FBQyxVQUF5QixFQUFFLEVBQUU7UUFDakMsTUFBTSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsR0FDckIsVUFBVSxDQUFDLEtBQUssS0FBSyxTQUFTO1lBQzFCLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRTtZQUMzQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLDZCQUE2QixDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQTtRQUNsRixRQUFRLENBQUMsS0FBSyxDQUNWLEVBQUUsQ0FBQyw0QkFBNEIsQ0FBQyxVQUFVLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxFQUM3RCxVQUFVLENBQUMsSUFBSSxFQUFFLFFBQVEsRUFDekIsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLEVBQzNCLFNBQVMsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUN4QyxDQUFBO0lBQ0wsQ0FBQyxDQUFBO0FBQ0wsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHJlbGF0aXZlLCByZXNvbHZlIH0gZnJvbSAnbm9kZTpwYXRoJ1xuaW1wb3J0IHRzIGZyb20gJ3R5cGVzY3JpcHQnXG5pbXBvcnQgeyBSZXBvcnRlciB9IGZyb20gJy4vcmVwb3J0ZXIuanMnXG5cbmV4cG9ydCBmdW5jdGlvbiBjb21waWxlKHJlcG9ydGVyOiBSZXBvcnRlciwgcGF0aDogc3RyaW5nKSB7XG4gICAgY29uc3QgY29uZmlnRmlsZSA9IHRzLnJlYWRDb25maWdGaWxlKHJlc29sdmUocGF0aCwgJ3RzY29uZmlnLmpzb24nKSwgcCA9PiB0cy5zeXMucmVhZEZpbGUocCkpXG4gICAgaWYgKGNvbmZpZ0ZpbGUuZXJyb3IpIHtcbiAgICAgICAgcmVwb3J0RGlhZ25vc3RpYyhyZXBvcnRlcikoY29uZmlnRmlsZS5lcnJvcilcbiAgICAgICAgcmV0dXJuIHsgc291cmNlRmlsZXM6IFtdIH1cbiAgICB9XG5cbiAgICBjb25zdCB0c2NvbmZpZyA9IHRzLnBhcnNlSnNvbkNvbmZpZ0ZpbGVDb250ZW50KGNvbmZpZ0ZpbGUuY29uZmlnLCB0cy5zeXMsICcuLycpXG4gICAgaWYgKHRzY29uZmlnLmVycm9ycy5sZW5ndGggIT09IDApIHtcbiAgICAgICAgdHNjb25maWcuZXJyb3JzLmZvckVhY2gocmVwb3J0RGlhZ25vc3RpYyhyZXBvcnRlcikpXG4gICAgICAgIHJldHVybiB7IHNvdXJjZUZpbGVzOiBbXSB9XG4gICAgfVxuXG4gICAgY29uc3QgcHJvZ3JhbSA9IHRzLmNyZWF0ZVByb2dyYW0odHNjb25maWcuZmlsZU5hbWVzLCB7XG4gICAgICAgIC4uLnRzY29uZmlnLm9wdGlvbnMsXG4gICAgICAgIGxpc3RFbWl0dGVkRmlsZXM6IHRydWUsXG4gICAgICAgIG91dERpcjogcGF0aCxcbiAgICAgICAgcm9vdERpcjogcGF0aCxcbiAgICAgICAgdHlwZVJvb3RzOiBbcmVzb2x2ZShwYXRoLCAnbm9kZV9tb2R1bGVzL0B0eXBlcycpXSxcbiAgICB9KVxuICAgIGNvbnN0IHNvdXJjZUZpbGVzID0gcHJvZ3JhbS5nZXRTb3VyY2VGaWxlcygpLm1hcChzZiA9PiByZWxhdGl2ZShwYXRoLCBzZi5maWxlTmFtZSkpXG5cbiAgICBjb25zdCBkaWFnbm9zdGljcyA9IHRzLmdldFByZUVtaXREaWFnbm9zdGljcyhwcm9ncmFtKVxuICAgIGRpYWdub3N0aWNzLmZvckVhY2gocmVwb3J0RGlhZ25vc3RpYyhyZXBvcnRlcikpXG4gICAgY29uc3QgZW1pdFJlc3VsdCA9IHByb2dyYW0uZW1pdCgpXG4gICAgZW1pdFJlc3VsdC5kaWFnbm9zdGljcy5mb3JFYWNoKHJlcG9ydERpYWdub3N0aWMocmVwb3J0ZXIpKVxuICAgIGlmIChkaWFnbm9zdGljcy5sZW5ndGggIT09IDAgfHwgZW1pdFJlc3VsdC5kaWFnbm9zdGljcy5sZW5ndGggIT09IDAgfHwgZW1pdFJlc3VsdC5lbWl0U2tpcHBlZCkge1xuICAgICAgICByZXR1cm4geyBzb3VyY2VGaWxlcyB9XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICAgIHNvdXJjZUZpbGVzLFxuICAgICAgICBvdXRwdXRGaWxlczogZW1pdFJlc3VsdC5lbWl0dGVkRmlsZXM/Lm1hcChmID0+IHJlbGF0aXZlKHBhdGgsIGYpKSxcbiAgICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZXBvcnREaWFnbm9zdGljKHJlcG9ydGVyOiBSZXBvcnRlcikge1xuICAgIHJldHVybiAoZGlhZ25vc3RpYzogdHMuRGlhZ25vc3RpYykgPT4ge1xuICAgICAgICBjb25zdCB7IGxpbmUsIGNoYXJhY3RlciB9ID1cbiAgICAgICAgICAgIGRpYWdub3N0aWMuc3RhcnQgPT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgID8geyBsaW5lOiB1bmRlZmluZWQsIGNoYXJhY3RlcjogdW5kZWZpbmVkIH1cbiAgICAgICAgICAgICAgICA6IChkaWFnbm9zdGljLmZpbGU/LmdldExpbmVBbmRDaGFyYWN0ZXJPZlBvc2l0aW9uKGRpYWdub3N0aWMuc3RhcnQpID8/IHt9KVxuICAgICAgICByZXBvcnRlci5lcnJvcihcbiAgICAgICAgICAgIHRzLmZsYXR0ZW5EaWFnbm9zdGljTWVzc2FnZVRleHQoZGlhZ25vc3RpYy5tZXNzYWdlVGV4dCwgJ1xcbicpLFxuICAgICAgICAgICAgZGlhZ25vc3RpYy5maWxlPy5maWxlTmFtZSxcbiAgICAgICAgICAgIGxpbmUgPyBsaW5lICsgMSA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIGNoYXJhY3RlciA/IGNoYXJhY3RlciArIDEgOiB1bmRlZmluZWQsXG4gICAgICAgIClcbiAgICB9XG59XG4iXX0=