esbuild-isolated-dts
Version:
Generate declarations fast using isolated declarations
51 lines (50 loc) • 2.29 kB
JavaScript
import * as fs from 'node:fs/promises';
import * as path from 'node:path';
import ts from 'typescript';
import { diagnosticToPartialMessage } from './util.js';
export async function transpileDeclaration(filePath, opts, result) {
const code = await fs.readFile(filePath, { encoding: 'utf-8' });
const transpOpts = opts.transpileOptions, compOpts = transpOpts.compilerOptions, { outputText, diagnostics, sourceMapText } = ts.transpileDeclaration(code, {
...transpOpts,
fileName: filePath,
});
const errors = diagnostics
?.filter((d) => d.category === ts.DiagnosticCategory.Error)
.map((d) => diagnosticToPartialMessage(d));
const warnings = diagnostics
?.filter((d) => d.category === ts.DiagnosticCategory.Warning)
.map((d) => diagnosticToPartialMessage(d));
const fileRelative = path.relative(compOpts.rootDir, filePath), parsedFile = path.parse(fileRelative), outDecFilePath = path.join(compOpts.outDir, parsedFile.dir, `${opts.outfile ? path.parse(opts.outfile).name : parsedFile.name}.d${parsedFile.ext}`), outMapFilePath = `${outDecFilePath}.map`;
if (opts.logLevel === 'debug') {
console.log('\nSource:', filePath, '\nRelative file path:', fileRelative, '\nDeclaration output path:', outDecFilePath, '\nMap output path', outMapFilePath);
}
if (!opts.dryRun) {
if (opts.write) {
await fs.mkdir(path.dirname(outDecFilePath), { recursive: true });
await fs.writeFile(outDecFilePath, outputText);
if (sourceMapText)
await fs.writeFile(outMapFilePath, sourceMapText);
}
else {
const encoder = new TextEncoder();
result.outputFiles = result.outputFiles || [];
result.outputFiles.push({
path: outDecFilePath,
hash: '',
contents: encoder.encode(outputText),
text: outputText,
});
if (sourceMapText)
result.outputFiles.push({
path: outMapFilePath,
hash: '',
contents: encoder.encode(sourceMapText),
text: sourceMapText,
});
}
}
return {
errors,
warnings,
};
}