@riddance/env
Version:
42 lines • 7.58 kB
JavaScript
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=