UNPKG

unbag

Version:

一个专门用来开发npm工具的包

146 lines (145 loc) 4.8 kB
"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;