unbag
Version:
一个专门用来开发npm工具的包
146 lines (145 loc) • 4.8 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.useCompilerOptions = exports.TransformActionTaskDtsOptionsDefault = exports.TransformActionTaskDts = void 0;
var _typescript = _interopRequireDefault(require("typescript"));
var _index = require("../index.cjs");
var _config = require("./../../../../utils/config.cjs");
var _common = require("./../../../../utils/common.cjs");
var _lodash = _interopRequireDefault(require("lodash"));
var _path = require("./../../../../utils/path.cjs");
var _utils = require("../../utils.cjs");
var _log = require("./../../../../utils/log.cjs");
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
const TransformActionTaskDtsOptionsDefault = exports.TransformActionTaskDtsOptionsDefault = {
supportExtensions: {
".ts": true,
".tsx": true,
".d.ts": true,
".js": true,
".jsx": true,
".cts": true,
".d.cts": true,
".cjs": true,
".mts": true,
".d.mts": true,
".mjs": true
},
configFilePath: "tsconfig.json"
};
const useCompilerOptions = params => {
const {
taskOptions,
finalUserConfig
} = params;
const root = (0, _common.useRoot)({
finalUserConfig
});
const {
configFilePath,
compilerOptions: compilerOptionsOverrides
} = taskOptions;
const finalConfigFilePath = root.resolve({
next: configFilePath
});
let compilerOptionsFromFile = void 0;
const {
config
} = _typescript.default.readConfigFile(finalConfigFilePath.content, _typescript.default.sys.readFile);
if (config.compilerOptions) {
const {
options
} = _typescript.default.convertCompilerOptionsFromJson(config?.compilerOptions, root.content, finalConfigFilePath.content);
compilerOptionsFromFile = options;
}
const finalCompilerOptions = _lodash.default.merge({}, compilerOptionsFromFile, compilerOptionsOverrides);
return finalCompilerOptions;
};
exports.useCompilerOptions = useCompilerOptions;
const TransformActionTaskDts = options => {
const finalOptions = (0, _config.mergeConfig)(TransformActionTaskDtsOptionsDefault, options);
const {
supportExtensions,
noLogDiagnosticErrors,
logFilePathRewrite
} = finalOptions;
return (0, _index.defineTransformActionTask)(async params => {
const {
finalUserConfig,
inputDir,
filePaths,
tempDir
} = params;
const matchedFiles = filePaths.filter(e => {
return supportExtensions[e.extname];
}).map(e => {
return inputDir.resolve({
next: e.content
});
});
const transformTempDir = (0, _utils.useTransformTempDir)({
finalUserConfig
});
const compilerOptions = useCompilerOptions({
finalUserConfig,
taskOptions: finalOptions
});
const path = (0, _path.usePath)();
const log = (0, _log.useLog)({
finalUserConfig
});
const outDir = transformTempDir.resolve({
next: "./transform-action-task-dts"
});
const finalCompilerOptions = {
...compilerOptions,
emitDeclarationOnly: true,
declaration: true,
composite: false,
noEmit: false,
outDir: outDir.content
};
const program = _typescript.default.createProgram(matchedFiles.map(e => e.content), finalCompilerOptions);
const dtsFiles = [];
const emitResult = program.emit(void 0, (fileName, text) => {
const filePath = new _path.RelativePath({
content: path.relative(outDir.content, fileName)
});
dtsFiles.push({
path: filePath,
content: text
});
});
if (!noLogDiagnosticErrors) {
const allDiagnostics = _typescript.default.getPreEmitDiagnostics(program).concat(emitResult.diagnostics);
allDiagnostics.forEach(diagnostic => {
if (diagnostic.file) {
let {
line,
character
} = _typescript.default.getLineAndCharacterOfPosition(diagnostic.file, diagnostic.start);
let message = _typescript.default.flattenDiagnosticMessageText(diagnostic.messageText, "\n");
const fileName = logFilePathRewrite ? logFilePathRewrite({
filePath: diagnostic.file.fileName,
inputDir,
tempDir,
finalUserConfig
}) : diagnostic.file.fileName;
log.error(`${fileName} (${line + 1},${character + 1}): ${message}`);
} else {
log.error(_typescript.default.flattenDiagnosticMessageText(diagnostic.messageText, "\n"));
}
});
}
const result = dtsFiles.map(dtsFile => {
return {
type: _index.TransformActionTaskOutFileType.Transformed,
to: dtsFile.path,
content: dtsFile.content
};
});
return result;
});
};
exports.TransformActionTaskDts = TransformActionTaskDts;