UNPKG

@modern-js/module-tools-v2

Version:

The meta-framework suite designed from scratch for frontend-focused modern web development.

122 lines (120 loc) 6.32 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.runTsc = void 0; function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; } function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; } function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); } function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; } const getProjectTsconfig = async tsconfigPath => { const { json5, fs } = await Promise.resolve().then(() => _interopRequireWildcard(require('@modern-js/utils'))); if (!fs.existsSync(tsconfigPath)) { return {}; } return json5.parse(fs.readFileSync(tsconfigPath, 'utf-8')); }; const resolveLog = async (childProgress, options) => { var _childProgress$stdout, _childProgress$stdout2, _childProgress$stderr; const { watch = false, watchFn = async () => undefined } = options; const { SectionTitleStatus, BundlelessDtsLogPrefix } = await Promise.resolve().then(() => _interopRequireWildcard(require("../../constants/log"))); const { watchSectionTitle } = await Promise.resolve().then(() => _interopRequireWildcard(require("../../utils/log"))); const { watchDoneText } = await Promise.resolve().then(() => _interopRequireWildcard(require("../../constants/dts"))); /** * tsc 所有的log信息都是从stdout data 事件中获取 * 正常模式下,如果有报错信息,交给 resolveLog 后面的逻辑来处理 * watch 模式下,则使用这里的信息 */ (_childProgress$stdout = childProgress.stdout) === null || _childProgress$stdout === void 0 ? void 0 : _childProgress$stdout.on('data', async data => { if (watch) { console.info(await watchSectionTitle(BundlelessDtsLogPrefix, SectionTitleStatus.Log)); console.info(data.toString()); if (data.toString().includes(watchDoneText)) { await watchFn(); } } }); // 正常以下内容都不会触发,因为tsc 不会产生以下类型的log信息,不过防止意外情况 (_childProgress$stdout2 = childProgress.stdout) === null || _childProgress$stdout2 === void 0 ? void 0 : _childProgress$stdout2.on('error', error => { console.error(error.message); }); (_childProgress$stderr = childProgress.stderr) === null || _childProgress$stderr === void 0 ? void 0 : _childProgress$stderr.on('data', chunk => { console.error(chunk.toString()); }); }; const generatorDts = async config => { const { execa } = await Promise.resolve().then(() => _interopRequireWildcard(require('@modern-js/utils'))); const { InternalDTSError } = await Promise.resolve().then(() => _interopRequireWildcard(require("../../error"))); const { generatorTsConfig } = await Promise.resolve().then(() => _interopRequireWildcard(require("../../utils/dts"))); const { getTscBinPath } = await Promise.resolve().then(() => _interopRequireWildcard(require("../../utils/dts"))); const { tsconfigPath, appDirectory, watch = false } = config; const userTsconfig = await getProjectTsconfig(tsconfigPath); const result = await generatorTsConfig(userTsconfig, config); const tscBinFile = await getTscBinPath(appDirectory); const watchParams = watch ? ['-w'] : []; const childProgress = execa(tscBinFile, ['-p', result.tempTsconfigPath, /* Required parameter, use it stdout have color */ '--pretty', // https://github.com/microsoft/TypeScript/issues/21824 '--preserveWatchOutput', ...watchParams], { stdio: 'pipe', cwd: appDirectory }); resolveLog(childProgress, { watch, watchFn: async () => { const { resolveAlias } = await Promise.resolve().then(() => _interopRequireWildcard(require("../../utils/dts"))); await resolveAlias(config, _objectSpread(_objectSpread({}, result), {}, { userTsconfig })); } }); try { await childProgress; } catch (e) { if (e instanceof Error) { throw new InternalDTSError(e, { buildType: 'bundleless' }); } } return _objectSpread(_objectSpread({}, result), {}, { userTsconfig }); }; const runTsc = async config => { const { resolveAlias } = await Promise.resolve().then(() => _interopRequireWildcard(require("../../utils/dts"))); const result = await generatorDts(config); await resolveAlias(config, result); }; exports.runTsc = runTsc; //# sourceMappingURL=tsc.js.map