import type { LoadFeatureCodeResult } from '@/core/external-input/load-feature-code' import { loadFeatureCode } from '@/core/external-input/load-feature-code' type LdRes = LoadFeatureCodeResult type SettledRes = PromiseSettledResult type FilledRes = PromiseFulfilledResult const unwrapSettledResult = (r: SettledRes): T => (r as FilledRes).value const mapSettledArray = (arr: SettledRes[]): T[] => arr.map(unwrapSettledResult) const mapSettleResult = (p: Promise[]>): Promise => p.then(mapSettledArray) /** * 批量加载组件或插件的代码字符串,获取其导出 feature * * @param codes 代码字符串数组 * @returns 不会失败的 `Promise`。其结果为一个数组,其中每个元素都是代表代码执行结果的对象 */ export const loadFeatureCodeAllSettled = ( codes: string[], ): Promise[]> => lodash(codes) .map>>(loadFeatureCode) .thru>[]>>(arr => Promise.allSettled(arr)) .thru(mapSettleResult) .value()