@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
JavaScript
;
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