unimport.af6409e3.cjs 36 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414
  1. 'use strict';
  2. const addons = require('./unimport.a78aa044.cjs');
  3. const os = require('node:os');
  4. const node_fs = require('node:fs');
  5. const mlly = require('mlly');
  6. const pkgTypes = require('pkg-types');
  7. const pathe = require('pathe');
  8. const process = require('node:process');
  9. const localPkg = require('local-pkg');
  10. const promises = require('node:fs/promises');
  11. const path = require('node:path');
  12. const node_url = require('node:url');
  13. const fg = require('fast-glob');
  14. const scule = require('scule');
  15. function _interopDefaultCompat (e) { return e && typeof e === 'object' && 'default' in e ? e.default : e; }
  16. const os__default = /*#__PURE__*/_interopDefaultCompat(os);
  17. const process__default = /*#__PURE__*/_interopDefaultCompat(process);
  18. const path__default = /*#__PURE__*/_interopDefaultCompat(path);
  19. const fg__default = /*#__PURE__*/_interopDefaultCompat(fg);
  20. const CACHE_PATH = /* @__PURE__ */ pathe.join(os__default.tmpdir(), "unimport");
  21. let CACHE_WRITEABLE;
  22. async function resolvePackagePreset(preset) {
  23. const scanned = await extractExports(preset.package, preset.url, preset.cache);
  24. const filtered = scanned.filter((name) => {
  25. for (const item of preset.ignore || []) {
  26. if (typeof item === "string" && item === name)
  27. return false;
  28. if (item instanceof RegExp && item.test(name))
  29. return false;
  30. if (typeof item === "function" && item(name) === false)
  31. return false;
  32. }
  33. return true;
  34. });
  35. return filtered.map((name) => ({
  36. from: preset.package,
  37. name
  38. }));
  39. }
  40. async function extractExports(name, url, cache = true) {
  41. const packageJsonPath = await pkgTypes.resolvePackageJSON(name, { url });
  42. const packageJson = await pkgTypes.readPackageJSON(packageJsonPath);
  43. const version = packageJson.version;
  44. const cachePath = pathe.join(CACHE_PATH, `${name}@${version}`, "exports.json");
  45. if (cache && CACHE_WRITEABLE === void 0) {
  46. try {
  47. CACHE_WRITEABLE = isWritable(CACHE_PATH);
  48. } catch {
  49. CACHE_WRITEABLE = false;
  50. }
  51. }
  52. const useCache = cache && version && CACHE_WRITEABLE;
  53. if (useCache && node_fs.existsSync(cachePath))
  54. return JSON.parse(await node_fs.promises.readFile(cachePath, "utf-8"));
  55. const scanned = await mlly.resolveModuleExportNames(name, { url });
  56. if (useCache) {
  57. await node_fs.promises.mkdir(pathe.dirname(cachePath), { recursive: true });
  58. await node_fs.promises.writeFile(cachePath, JSON.stringify(scanned), "utf-8");
  59. }
  60. return scanned;
  61. }
  62. function isWritable(filename) {
  63. try {
  64. node_fs.accessSync(filename, node_fs.constants.W_OK);
  65. return true;
  66. } catch {
  67. return false;
  68. }
  69. }
  70. const pinia = addons.defineUnimportPreset({
  71. from: "pinia",
  72. imports: [
  73. // https://pinia.esm.dev/api/modules/pinia.html#functions
  74. "acceptHMRUpdate",
  75. "createPinia",
  76. "defineStore",
  77. "getActivePinia",
  78. "mapActions",
  79. "mapGetters",
  80. "mapState",
  81. "mapStores",
  82. "mapWritableState",
  83. "setActivePinia",
  84. "setMapStoreSuffix",
  85. "storeToRefs"
  86. ]
  87. });
  88. const preact = addons.defineUnimportPreset({
  89. from: "preact",
  90. imports: [
  91. "useState",
  92. "useCallback",
  93. "useMemo",
  94. "useEffect",
  95. "useRef",
  96. "useContext",
  97. "useReducer"
  98. ]
  99. });
  100. const quasar = addons.defineUnimportPreset({
  101. from: "quasar",
  102. imports: [
  103. // https://quasar.dev/vue-composables
  104. "useQuasar",
  105. "useDialogPluginComponent",
  106. "useFormChild",
  107. "useMeta"
  108. ]
  109. });
  110. const react = addons.defineUnimportPreset({
  111. from: "react",
  112. imports: [
  113. "useState",
  114. "useCallback",
  115. "useMemo",
  116. "useEffect",
  117. "useRef",
  118. "useContext",
  119. "useReducer"
  120. ]
  121. });
  122. const ReactRouterHooks = [
  123. "useOutletContext",
  124. "useHref",
  125. "useInRouterContext",
  126. "useLocation",
  127. "useNavigationType",
  128. "useNavigate",
  129. "useOutlet",
  130. "useParams",
  131. "useResolvedPath",
  132. "useRoutes"
  133. ];
  134. const reactRouter = addons.defineUnimportPreset({
  135. from: "react-router",
  136. imports: [
  137. ...ReactRouterHooks
  138. ]
  139. });
  140. const reactRouterDom = addons.defineUnimportPreset({
  141. from: "react-router-dom",
  142. imports: [
  143. ...ReactRouterHooks,
  144. // react-router-dom only hooks
  145. "useLinkClickHandler",
  146. "useSearchParams",
  147. // react-router-dom Component
  148. // call once in general
  149. // 'BrowserRouter',
  150. // 'HashRouter',
  151. // 'MemoryRouter',
  152. "Link",
  153. "NavLink",
  154. "Navigate",
  155. "Outlet",
  156. "Route",
  157. "Routes"
  158. ]
  159. });
  160. const svelteAnimate = addons.defineUnimportPreset({
  161. from: "svelte/animate",
  162. imports: [
  163. "flip"
  164. ]
  165. });
  166. const svelteEasing = addons.defineUnimportPreset({
  167. from: "svelte/easing",
  168. imports: [
  169. "back",
  170. "bounce",
  171. "circ",
  172. "cubic",
  173. "elastic",
  174. "expo",
  175. "quad",
  176. "quart",
  177. "quint",
  178. "sine"
  179. ].reduce((acc, e) => {
  180. acc.push(`${e}In`, `${e}Out`, `${e}InOut`);
  181. return acc;
  182. }, ["linear"])
  183. });
  184. const svelteStore = addons.defineUnimportPreset({
  185. from: "svelte/store",
  186. imports: [
  187. "writable",
  188. "readable",
  189. "derived",
  190. "get"
  191. ]
  192. });
  193. const svelteMotion = addons.defineUnimportPreset({
  194. from: "svelte/motion",
  195. imports: [
  196. "tweened",
  197. "spring"
  198. ]
  199. });
  200. const svelteTransition = addons.defineUnimportPreset({
  201. from: "svelte/transition",
  202. imports: [
  203. "fade",
  204. "blur",
  205. "fly",
  206. "slide",
  207. "scale",
  208. "draw",
  209. "crossfade"
  210. ]
  211. });
  212. const svelte = addons.defineUnimportPreset({
  213. from: "svelte",
  214. imports: [
  215. // lifecycle
  216. "onMount",
  217. "beforeUpdate",
  218. "afterUpdate",
  219. "onDestroy",
  220. // tick
  221. "tick",
  222. // context
  223. "setContext",
  224. "getContext",
  225. "hasContext",
  226. "getAllContexts",
  227. // event dispatcher
  228. "createEventDispatcher"
  229. ]
  230. });
  231. const veeValidate = addons.defineUnimportPreset({
  232. from: "vee-validate",
  233. imports: [
  234. // https://vee-validate.logaretm.com/v4/guide/composition-api/api-review
  235. // https://github.com/logaretm/vee-validate/blob/main/packages/vee-validate/src/index.ts
  236. "validate",
  237. "defineRule",
  238. "configure",
  239. "useField",
  240. "useForm",
  241. "useFieldArray",
  242. "useResetForm",
  243. "useIsFieldDirty",
  244. "useIsFieldTouched",
  245. "useIsFieldValid",
  246. "useIsSubmitting",
  247. "useValidateField",
  248. "useIsFormDirty",
  249. "useIsFormTouched",
  250. "useIsFormValid",
  251. "useValidateForm",
  252. "useSubmitCount",
  253. "useFieldValue",
  254. "useFormValues",
  255. "useFormErrors",
  256. "useFieldError",
  257. "useSubmitForm",
  258. "FormContextKey",
  259. "FieldContextKey"
  260. ]
  261. });
  262. const vitepress = addons.defineUnimportPreset({
  263. from: "vitepress",
  264. imports: [
  265. // helper methods
  266. "useData",
  267. "useRoute",
  268. "useRouter",
  269. "withBase"
  270. ]
  271. });
  272. const CommonCompositionAPI = [
  273. // lifecycle
  274. "onActivated",
  275. "onBeforeMount",
  276. "onBeforeUnmount",
  277. "onBeforeUpdate",
  278. "onErrorCaptured",
  279. "onDeactivated",
  280. "onMounted",
  281. "onServerPrefetch",
  282. "onUnmounted",
  283. "onUpdated",
  284. // setup helpers
  285. "useAttrs",
  286. "useSlots",
  287. // reactivity,
  288. "computed",
  289. "customRef",
  290. "isReadonly",
  291. "isRef",
  292. "isProxy",
  293. "isReactive",
  294. "markRaw",
  295. "reactive",
  296. "readonly",
  297. "ref",
  298. "shallowReactive",
  299. "shallowReadonly",
  300. "shallowRef",
  301. "triggerRef",
  302. "toRaw",
  303. "toRef",
  304. "toRefs",
  305. "toValue",
  306. "unref",
  307. "watch",
  308. "watchEffect",
  309. "watchPostEffect",
  310. "watchSyncEffect",
  311. // component
  312. "defineComponent",
  313. "defineAsyncComponent",
  314. "getCurrentInstance",
  315. "h",
  316. "inject",
  317. "nextTick",
  318. "provide",
  319. "useCssModule",
  320. "createApp",
  321. // effect scope
  322. "effectScope",
  323. "EffectScope",
  324. "getCurrentScope",
  325. "onScopeDispose",
  326. // types
  327. ...[
  328. "Component",
  329. "ComponentPublicInstance",
  330. "ComputedRef",
  331. "ExtractDefaultPropTypes",
  332. "ExtractPropTypes",
  333. "ExtractPublicPropTypes",
  334. "InjectionKey",
  335. "PropType",
  336. "Ref",
  337. "VNode",
  338. "WritableComputedRef"
  339. ].map((name) => ({ name, type: true }))
  340. ];
  341. const vue = addons.defineUnimportPreset({
  342. from: "vue",
  343. imports: [
  344. ...CommonCompositionAPI,
  345. // vue3 only
  346. "onRenderTracked",
  347. "onRenderTriggered",
  348. "resolveComponent",
  349. "useCssVars"
  350. ]
  351. });
  352. const vueMacros = addons.defineUnimportPreset({
  353. from: "vue/macros",
  354. imports: [
  355. // https://vuejs.org/guide/extras/reactivity-transform.html#refs-vs-reactive-variables
  356. "$",
  357. "$$",
  358. "$ref",
  359. "$shallowRef",
  360. "$toRef",
  361. "$customRef",
  362. "$computed"
  363. ]
  364. });
  365. const vueDemi = addons.defineUnimportPreset({
  366. from: "vue-demi",
  367. imports: CommonCompositionAPI
  368. });
  369. const vueI18n = addons.defineUnimportPreset({
  370. from: "vue-i18n",
  371. imports: [
  372. "useI18n"
  373. ]
  374. });
  375. const vueRouter = addons.defineUnimportPreset({
  376. from: "vue-router",
  377. imports: [
  378. "useRouter",
  379. "useRoute",
  380. "useLink",
  381. "onBeforeRouteLeave",
  382. "onBeforeRouteUpdate"
  383. ]
  384. });
  385. const vueCompositionApi = addons.defineUnimportPreset({
  386. from: "@vue/composition-api",
  387. imports: CommonCompositionAPI
  388. });
  389. let _cache;
  390. const vueuseCore = () => {
  391. const excluded = ["toRefs", "utils"];
  392. if (!_cache) {
  393. try {
  394. const corePath = localPkg.resolveModule("@vueuse/core") || process__default.cwd();
  395. const path = localPkg.resolveModule("@vueuse/core/indexes.json") || localPkg.resolveModule("@vueuse/metadata/index.json") || localPkg.resolveModule("@vueuse/metadata/index.json", { paths: [corePath] });
  396. const indexesJson = JSON.parse(node_fs.readFileSync(path, "utf-8"));
  397. _cache = addons.defineUnimportPreset({
  398. from: "@vueuse/core",
  399. imports: indexesJson.functions.filter((i) => ["core", "shared"].includes(i.package)).map((i) => i.name).filter((i) => i && i.length >= 4 && !excluded.includes(i))
  400. });
  401. } catch (error) {
  402. console.error(error);
  403. throw new Error("[auto-import] failed to load @vueuse/core, have you installed it?");
  404. }
  405. }
  406. return _cache;
  407. };
  408. const vueuseHead = addons.defineUnimportPreset({
  409. from: "@vueuse/head",
  410. imports: [
  411. "useHead"
  412. ]
  413. });
  414. const vuex = addons.defineUnimportPreset({
  415. from: "vuex",
  416. imports: [
  417. // https://next.vuex.vuejs.org/api/#createstore
  418. "createStore",
  419. // https://github.com/vuejs/vuex/blob/4.0/types/logger.d.ts#L20
  420. "createLogger",
  421. // https://next.vuex.vuejs.org/api/#component-binding-helpers
  422. "mapState",
  423. "mapGetters",
  424. "mapActions",
  425. "mapMutations",
  426. "createNamespacedHelpers",
  427. // https://next.vuex.vuejs.org/api/#composable-functions
  428. "useStore"
  429. ]
  430. });
  431. const vitest = addons.defineUnimportPreset({
  432. from: "vitest",
  433. imports: [
  434. // suite
  435. "suite",
  436. "test",
  437. "describe",
  438. "it",
  439. // chai
  440. "chai",
  441. "expect",
  442. "assert",
  443. // utils
  444. "vitest",
  445. "vi",
  446. // hooks
  447. "beforeAll",
  448. "afterAll",
  449. "beforeEach",
  450. "afterEach"
  451. ]
  452. });
  453. const uniApp = addons.defineUnimportPreset({
  454. from: "@dcloudio/uni-app",
  455. imports: [
  456. "onAddToFavorites",
  457. "onBackPress",
  458. "onError",
  459. "onHide",
  460. "onLaunch",
  461. "onLoad",
  462. "onNavigationBarButtonTap",
  463. "onNavigationBarSearchInputChanged",
  464. "onNavigationBarSearchInputClicked",
  465. "onNavigationBarSearchInputConfirmed",
  466. "onNavigationBarSearchInputFocusChanged",
  467. "onPageNotFound",
  468. "onPageScroll",
  469. "onPullDownRefresh",
  470. "onReachBottom",
  471. "onReady",
  472. "onResize",
  473. "onShareAppMessage",
  474. "onShareTimeline",
  475. "onShow",
  476. "onTabItemTap",
  477. "onThemeChange",
  478. "onUnhandledRejection",
  479. "onUnload"
  480. ]
  481. });
  482. const solidCore = addons.defineUnimportPreset({
  483. from: "solid-js",
  484. imports: [
  485. "createSignal",
  486. "createEffect",
  487. "createMemo",
  488. "createResource",
  489. "onMount",
  490. "onCleanup",
  491. "onError",
  492. "untrack",
  493. "batch",
  494. "on",
  495. "createRoot",
  496. "mergeProps",
  497. "splitProps",
  498. "useTransition",
  499. "observable",
  500. "mapArray",
  501. "indexArray",
  502. "createContext",
  503. "useContext",
  504. "children",
  505. "lazy",
  506. "createDeferred",
  507. "createRenderEffect",
  508. "createSelector",
  509. "For",
  510. "Show",
  511. "Switch",
  512. "Match",
  513. "Index",
  514. "ErrorBoundary",
  515. "Suspense",
  516. "SuspenseList"
  517. ]
  518. });
  519. const solidStore = addons.defineUnimportPreset({
  520. from: "solid-js/store",
  521. imports: [
  522. "createStore",
  523. "produce",
  524. "reconcile",
  525. "createMutable"
  526. ]
  527. });
  528. const solidWeb = addons.defineUnimportPreset({
  529. from: "solid-js/web",
  530. imports: [
  531. "Dynamic",
  532. "hydrate",
  533. "render",
  534. "renderToString",
  535. "renderToStringAsync",
  536. "renderToStream",
  537. "isServer",
  538. "Portal"
  539. ]
  540. });
  541. const solid = addons.defineUnimportPreset({
  542. from: "solid-js",
  543. imports: [
  544. solidCore,
  545. solidStore,
  546. solidWeb
  547. ]
  548. });
  549. const solidAppRouter = addons.defineUnimportPreset({
  550. from: "solid-app-router",
  551. imports: [
  552. "Link",
  553. "NavLink",
  554. "Navigate",
  555. "Outlet",
  556. "Route",
  557. "Router",
  558. "Routes",
  559. "_mergeSearchString",
  560. "createIntegration",
  561. "hashIntegration",
  562. "normalizeIntegration",
  563. "pathIntegration",
  564. "staticIntegration",
  565. "useHref",
  566. "useIsRouting",
  567. "useLocation",
  568. "useMatch",
  569. "useNavigate",
  570. "useParams",
  571. "useResolvedPath",
  572. "useRouteData",
  573. "useRoutes",
  574. "useSearchParams"
  575. ]
  576. });
  577. const vueRouterComposables = addons.defineUnimportPreset({
  578. from: "vue-router/composables",
  579. imports: [
  580. "useRouter",
  581. "useRoute",
  582. "useLink",
  583. "onBeforeRouteLeave",
  584. "onBeforeRouteUpdate"
  585. ]
  586. });
  587. const rxjs = addons.defineUnimportPreset({
  588. from: "rxjs",
  589. imports: [
  590. "of",
  591. "from",
  592. "map",
  593. "tap",
  594. "filter",
  595. "forkJoin",
  596. "throwError",
  597. "catchError",
  598. "Observable",
  599. "mergeMap",
  600. "switchMap",
  601. "merge",
  602. "zip",
  603. "take",
  604. "takeUntil",
  605. "first",
  606. "lastValueFrom",
  607. "skip",
  608. "skipUntil",
  609. "distinct",
  610. "distinctUntilChanged",
  611. "throttle",
  612. "throttleTime",
  613. "retry",
  614. "retryWhen",
  615. "timeout",
  616. "delay",
  617. "debounce",
  618. "debounceTime",
  619. "find",
  620. "every"
  621. ]
  622. });
  623. const dateFns = addons.defineUnimportPreset({
  624. from: "date-fns",
  625. imports: [
  626. "add",
  627. "addBusinessDays",
  628. "addDays",
  629. "addHours",
  630. "addISOWeekYears",
  631. "addMilliseconds",
  632. "addMinutes",
  633. "addMonths",
  634. "addQuarters",
  635. "addSeconds",
  636. "addWeeks",
  637. "addYears",
  638. "areIntervalsOverlapping",
  639. "clamp",
  640. "closestIndexTo",
  641. "closestTo",
  642. "compareAsc",
  643. "compareDesc",
  644. "constants",
  645. "daysToWeeks",
  646. "differenceInBusinessDays",
  647. "differenceInCalendarDays",
  648. "differenceInCalendarISOWeekYears",
  649. "differenceInCalendarISOWeeks",
  650. "differenceInCalendarMonths",
  651. "differenceInCalendarQuarters",
  652. "differenceInCalendarWeeks",
  653. "differenceInCalendarYears",
  654. "differenceInDays",
  655. "differenceInHours",
  656. "differenceInISOWeekYears",
  657. "differenceInMilliseconds",
  658. "differenceInMinutes",
  659. "differenceInMonths",
  660. "differenceInQuarters",
  661. "differenceInSeconds",
  662. "differenceInWeeks",
  663. "differenceInYears",
  664. "eachDayOfInterval",
  665. "eachHourOfInterval",
  666. "eachMinuteOfInterval",
  667. "eachMonthOfInterval",
  668. "eachQuarterOfInterval",
  669. "eachWeekOfInterval",
  670. "eachWeekendOfInterval",
  671. "eachWeekendOfMonth",
  672. "eachWeekendOfYear",
  673. "eachYearOfInterval",
  674. "endOfDay",
  675. "endOfDecade",
  676. "endOfHour",
  677. "endOfISOWeek",
  678. "endOfISOWeekYear",
  679. "endOfMinute",
  680. "endOfMonth",
  681. "endOfQuarter",
  682. "endOfSecond",
  683. "endOfToday",
  684. "endOfTomorrow",
  685. "endOfWeek",
  686. "endOfYear",
  687. "endOfYesterday",
  688. "format",
  689. "formatDistance",
  690. "formatDistanceStrict",
  691. "formatDistanceToNow",
  692. "formatDistanceToNowStrict",
  693. "formatDuration",
  694. "formatISO",
  695. "formatISO9075",
  696. "formatISODuration",
  697. "formatRFC3339",
  698. "formatRFC7231",
  699. "formatRelative",
  700. "fromUnixTime",
  701. "getDate",
  702. "getDay",
  703. "getDayOfYear",
  704. "getDaysInMonth",
  705. "getDaysInYear",
  706. "getDecade",
  707. "getDefaultOptions",
  708. "getHours",
  709. "getISODay",
  710. "getISOWeek",
  711. "getISOWeekYear",
  712. "getISOWeeksInYear",
  713. "getMilliseconds",
  714. "getMinutes",
  715. "getMonth",
  716. "getOverlappingDaysInIntervals",
  717. "getQuarter",
  718. "getSeconds",
  719. "getTime",
  720. "getUnixTime",
  721. "getWeek",
  722. "getWeekOfMonth",
  723. "getWeekYear",
  724. "getWeeksInMonth",
  725. "getYear",
  726. "hoursToMilliseconds",
  727. "hoursToMinutes",
  728. "hoursToSeconds",
  729. "intervalToDuration",
  730. "intlFormat",
  731. "intlFormatDistance",
  732. "isAfter",
  733. "isBefore",
  734. "isDate",
  735. "isEqual",
  736. "isExists",
  737. "isFirstDayOfMonth",
  738. "isFriday",
  739. "isFuture",
  740. "isLastDayOfMonth",
  741. "isLeapYear",
  742. "isMatch",
  743. "isMonday",
  744. "isPast",
  745. "isSameDay",
  746. "isSameHour",
  747. "isSameISOWeek",
  748. "isSameISOWeekYear",
  749. "isSameMinute",
  750. "isSameMonth",
  751. "isSameQuarter",
  752. "isSameSecond",
  753. "isSameWeek",
  754. "isSameYear",
  755. "isSaturday",
  756. "isSunday",
  757. "isThisHour",
  758. "isThisISOWeek",
  759. "isThisMinute",
  760. "isThisMonth",
  761. "isThisQuarter",
  762. "isThisSecond",
  763. "isThisWeek",
  764. "isThisYear",
  765. "isThursday",
  766. "isToday",
  767. "isTomorrow",
  768. "isTuesday",
  769. "isValid",
  770. "isWednesday",
  771. "isWeekend",
  772. "isWithinInterval",
  773. "isYesterday",
  774. "lastDayOfDecade",
  775. "lastDayOfISOWeek",
  776. "lastDayOfISOWeekYear",
  777. "lastDayOfMonth",
  778. "lastDayOfQuarter",
  779. "lastDayOfWeek",
  780. "lastDayOfYear",
  781. "lightFormat",
  782. "locale",
  783. "max",
  784. "milliseconds",
  785. "millisecondsToHours",
  786. "millisecondsToMinutes",
  787. "millisecondsToSeconds",
  788. "min",
  789. "minutesToHours",
  790. "minutesToMilliseconds",
  791. "minutesToSeconds",
  792. "monthsToQuarters",
  793. "monthsToYears",
  794. "nextDay",
  795. "nextFriday",
  796. "nextMonday",
  797. "nextSaturday",
  798. "nextSunday",
  799. "nextThursday",
  800. "nextTuesday",
  801. "nextWednesday",
  802. "parse",
  803. "parseISO",
  804. "parseJSON",
  805. "previousDay",
  806. "previousFriday",
  807. "previousMonday",
  808. "previousSaturday",
  809. "previousSunday",
  810. "previousThursday",
  811. "previousTuesday",
  812. "previousWednesday",
  813. "quartersToMonths",
  814. "quartersToYears",
  815. "roundToNearestMinutes",
  816. "secondsToHours",
  817. "secondsToMilliseconds",
  818. "secondsToMinutes",
  819. "set",
  820. "setDate",
  821. "setDay",
  822. "setDayOfYear",
  823. "setDefaultOptions",
  824. "setHours",
  825. "setISODay",
  826. "setISOWeek",
  827. "setISOWeekYear",
  828. "setMilliseconds",
  829. "setMinutes",
  830. "setMonth",
  831. "setQuarter",
  832. "setSeconds",
  833. "setWeek",
  834. "setWeekYear",
  835. "setYear",
  836. "startOfDay",
  837. "startOfDecade",
  838. "startOfHour",
  839. "startOfISOWeek",
  840. "startOfISOWeekYear",
  841. "startOfMinute",
  842. "startOfMonth",
  843. "startOfQuarter",
  844. "startOfSecond",
  845. "startOfToday",
  846. "startOfTomorrow",
  847. "startOfWeek",
  848. "startOfWeekYear",
  849. "startOfYear",
  850. "startOfYesterday",
  851. "sub",
  852. "subBusinessDays",
  853. "subDays",
  854. "subHours",
  855. "subISOWeekYears",
  856. "subMilliseconds",
  857. "subMinutes",
  858. "subMonths",
  859. "subQuarters",
  860. "subSeconds",
  861. "subWeeks",
  862. "subYears",
  863. "toDate",
  864. "weeksToDays",
  865. "yearsToMonths",
  866. "yearsToQuarters"
  867. ]
  868. });
  869. const builtinPresets = {
  870. "@vue/composition-api": vueCompositionApi,
  871. "@vueuse/core": vueuseCore,
  872. "@vueuse/head": vueuseHead,
  873. "pinia": pinia,
  874. "preact": preact,
  875. "quasar": quasar,
  876. "react": react,
  877. "react-router": reactRouter,
  878. "react-router-dom": reactRouterDom,
  879. "svelte": svelte,
  880. "svelte/animate": svelteAnimate,
  881. "svelte/easing": svelteEasing,
  882. "svelte/motion": svelteMotion,
  883. "svelte/store": svelteStore,
  884. "svelte/transition": svelteTransition,
  885. "vee-validate": veeValidate,
  886. "vitepress": vitepress,
  887. "vue-demi": vueDemi,
  888. "vue-i18n": vueI18n,
  889. "vue-router": vueRouter,
  890. "vue-router-composables": vueRouterComposables,
  891. "vue": vue,
  892. "vue/macros": vueMacros,
  893. "vuex": vuex,
  894. "vitest": vitest,
  895. "uni-app": uniApp,
  896. "solid-js": solid,
  897. "solid-app-router": solidAppRouter,
  898. "rxjs": rxjs,
  899. "date-fns": dateFns
  900. };
  901. const commonProps = [
  902. "from",
  903. "priority",
  904. "disabled",
  905. "dtsDisabled",
  906. "meta",
  907. "type"
  908. ];
  909. async function resolvePreset(preset) {
  910. const imports = [];
  911. if ("package" in preset)
  912. return await resolvePackagePreset(preset);
  913. const common = {};
  914. commonProps.forEach((i) => {
  915. if (i in preset) {
  916. common[i] = preset[i];
  917. }
  918. });
  919. for (const _import of preset.imports) {
  920. if (typeof _import === "string")
  921. imports.push({ ...common, name: _import, as: _import });
  922. else if (Array.isArray(_import))
  923. imports.push({ ...common, name: _import[0], as: _import[1] || _import[0], from: _import[2] || preset.from });
  924. else if (_import.imports)
  925. imports.push(...await resolvePreset(_import));
  926. else
  927. imports.push({ ...common, ..._import });
  928. }
  929. return imports;
  930. }
  931. async function resolveBuiltinPresets(presets) {
  932. const resolved = await Promise.all(presets.map(async (p) => {
  933. let preset = typeof p === "string" ? builtinPresets[p] : p;
  934. if (typeof preset === "function")
  935. preset = preset();
  936. return await resolvePreset(preset);
  937. }));
  938. return resolved.flat();
  939. }
  940. const version = "3.11.1";
  941. async function scanFilesFromDir(dir, options) {
  942. const dirs = (Array.isArray(dir) ? dir : [dir]).map((d) => pathe.normalize(d));
  943. const fileFilter = options?.fileFilter || (() => true);
  944. const filePatterns = options?.filePatterns || ["*.{ts,js,mjs,cjs,mts,cts}"];
  945. const result = await Promise.all(
  946. // Do multiple glob searches to persist the order of input dirs
  947. dirs.map(
  948. async (i) => await fg__default(
  949. [i, ...filePatterns.map((p) => pathe.join(i, p))],
  950. {
  951. absolute: true,
  952. cwd: options?.cwd || process__default.cwd(),
  953. onlyFiles: true,
  954. followSymbolicLinks: true
  955. }
  956. ).then(
  957. (r) => r.map((f) => pathe.normalize(f)).sort()
  958. )
  959. )
  960. );
  961. return Array.from(new Set(result.flat())).filter(fileFilter);
  962. }
  963. async function scanDirExports(dir, options) {
  964. const files = await scanFilesFromDir(dir, options);
  965. const includeTypes = options?.types ?? true;
  966. const fileExports = await Promise.all(files.map((i) => scanExports(i, includeTypes)));
  967. const exports = fileExports.flat();
  968. const deduped = dedupeDtsExports(exports);
  969. return deduped;
  970. }
  971. const FileExtensionLookup = [
  972. ".mts",
  973. ".cts",
  974. ".ts",
  975. ".mjs",
  976. ".cjs",
  977. ".js"
  978. ];
  979. function dedupeDtsExports(exports) {
  980. return exports.filter((i) => {
  981. if (!i.type)
  982. return true;
  983. if (i.declarationType === "enum")
  984. return true;
  985. return !exports.find((e) => e.as === i.as && e.name === i.name && !e.type);
  986. });
  987. }
  988. async function scanExports(filepath, includeTypes, seen = /* @__PURE__ */ new Set()) {
  989. if (seen.has(filepath)) {
  990. console.warn(`[unimport] "${filepath}" is already scanned, skipping`);
  991. return [];
  992. }
  993. seen.add(filepath);
  994. const imports = [];
  995. const code = await promises.readFile(filepath, "utf-8");
  996. const exports = mlly.findExports(code);
  997. const defaultExport = exports.find((i) => i.type === "default");
  998. if (defaultExport) {
  999. let name = pathe.parse(filepath).name;
  1000. if (name === "index")
  1001. name = pathe.parse(filepath.split("/").slice(0, -1).join("/")).name;
  1002. const as = /[-_.]/.test(name) ? scule.camelCase(name) : name;
  1003. imports.push({ name: "default", as, from: filepath });
  1004. }
  1005. async function toImport(exports2, additional) {
  1006. for (const exp of exports2) {
  1007. if (exp.type === "named") {
  1008. for (const name of exp.names)
  1009. imports.push({ name, as: name, from: filepath, ...additional });
  1010. } else if (exp.type === "declaration") {
  1011. if (exp.name) {
  1012. imports.push({ name: exp.name, as: exp.name, from: filepath, ...additional });
  1013. if (exp.declarationType === "enum")
  1014. imports.push({ name: exp.name, as: exp.name, from: filepath, type: true, declarationType: exp.declarationType, ...additional });
  1015. }
  1016. } else if (exp.type === "star" && exp.specifier) {
  1017. if (exp.name) {
  1018. imports.push({ name: exp.name, as: exp.name, from: filepath, ...additional });
  1019. } else {
  1020. const subfile = exp.specifier;
  1021. let subfilepath = pathe.resolve(pathe.dirname(filepath), subfile);
  1022. let subfilepathResolved = false;
  1023. for (const ext of FileExtensionLookup) {
  1024. if (node_fs.existsSync(`${subfilepath}${ext}`)) {
  1025. subfilepath = `${subfilepath}${ext}`;
  1026. break;
  1027. } else if (node_fs.existsSync(`${subfilepath}/index${ext}`)) {
  1028. subfilepath = `${subfilepath}/index${ext}`;
  1029. break;
  1030. }
  1031. }
  1032. if (node_fs.existsSync(subfilepath)) {
  1033. subfilepathResolved = true;
  1034. } else {
  1035. try {
  1036. subfilepath = await mlly.resolve(exp.specifier);
  1037. subfilepath = node_url.fileURLToPath(subfilepath).replaceAll(path__default.sep, "/");
  1038. if (node_fs.existsSync(subfilepath)) {
  1039. subfilepathResolved = true;
  1040. }
  1041. } catch {
  1042. }
  1043. }
  1044. if (!subfilepathResolved) {
  1045. console.warn(`[unimport] failed to resolve "${subfilepath}", skip scanning`);
  1046. continue;
  1047. }
  1048. const nested = await scanExports(subfilepath, includeTypes, seen);
  1049. imports.push(...additional ? nested.map((i) => ({ ...i, ...additional })) : nested);
  1050. }
  1051. }
  1052. }
  1053. }
  1054. const isDts = filepath.match(/\.d\.[mc]?ts$/);
  1055. if (isDts) {
  1056. if (includeTypes) {
  1057. await toImport(exports, { type: true });
  1058. await toImport(mlly.findTypeExports(code), { type: true });
  1059. }
  1060. } else {
  1061. await toImport(exports);
  1062. if (includeTypes)
  1063. await toImport(mlly.findTypeExports(code), { type: true });
  1064. }
  1065. return imports;
  1066. }
  1067. async function detectImportsRegex(code, ctx, options) {
  1068. const s = addons.getMagicString(code);
  1069. const original = s.original;
  1070. const strippedCode = addons.stripCommentsAndStrings(
  1071. original,
  1072. // Do not strip comments if they are virtual import names
  1073. options?.transformVirtualImports !== false && ctx.options.virtualImports?.length ? {
  1074. filter: (i) => !ctx.options.virtualImports.includes(i),
  1075. fillChar: "-"
  1076. } : void 0
  1077. );
  1078. const syntax = mlly.detectSyntax(strippedCode);
  1079. const isCJSContext = syntax.hasCJS && !syntax.hasESM;
  1080. let matchedImports = [];
  1081. const occurrenceMap = /* @__PURE__ */ new Map();
  1082. const map = await ctx.getImportMap();
  1083. if (options?.autoImport !== false) {
  1084. Array.from(strippedCode.matchAll(addons.matchRE)).forEach((i) => {
  1085. if (i[1] === ".")
  1086. return null;
  1087. const end = strippedCode[i.index + i[0].length];
  1088. const before = strippedCode[i.index - 1];
  1089. if (end === ":" && !["?", "case"].includes(i[1].trim()) && before !== ":")
  1090. return null;
  1091. const name = i[2];
  1092. const occurrence = i.index + i[1].length;
  1093. if (occurrenceMap.get(name) || Number.POSITIVE_INFINITY > occurrence)
  1094. occurrenceMap.set(name, occurrence);
  1095. });
  1096. for (const regex of addons.excludeRE) {
  1097. for (const match of strippedCode.matchAll(regex)) {
  1098. const segments = [...match[1]?.split(addons.separatorRE) || [], ...match[2]?.split(addons.separatorRE) || []];
  1099. for (const segment of segments) {
  1100. const identifier = segment.replace(addons.importAsRE, "").trim();
  1101. occurrenceMap.delete(identifier);
  1102. }
  1103. }
  1104. }
  1105. const identifiers = new Set(occurrenceMap.keys());
  1106. matchedImports = Array.from(identifiers).map((name) => {
  1107. const item = map.get(name);
  1108. if (item && !item.disabled)
  1109. return item;
  1110. occurrenceMap.delete(name);
  1111. return null;
  1112. }).filter(Boolean);
  1113. for (const addon of ctx.addons)
  1114. matchedImports = await addon.matchImports?.call(ctx, identifiers, matchedImports) || matchedImports;
  1115. }
  1116. if (options?.transformVirtualImports !== false && ctx.options.virtualImports?.length) {
  1117. const virtualImports = parseVirtualImportsRegex(strippedCode, map, ctx.options.virtualImports);
  1118. virtualImports.ranges.forEach(([start, end]) => {
  1119. s.remove(start, end);
  1120. });
  1121. matchedImports.push(...virtualImports.imports);
  1122. }
  1123. const firstOccurrence = Math.min(...Array.from(occurrenceMap.entries()).map((i) => i[1]));
  1124. return {
  1125. s,
  1126. strippedCode,
  1127. isCJSContext,
  1128. matchedImports,
  1129. firstOccurrence
  1130. };
  1131. }
  1132. function parseVirtualImportsRegex(strippedCode, importMap, virtualImports) {
  1133. const imports = [];
  1134. const ranges = [];
  1135. if (virtualImports?.length) {
  1136. mlly.findStaticImports(strippedCode).filter((i) => virtualImports.includes(i.specifier)).map((i) => mlly.parseStaticImport(i)).forEach((i) => {
  1137. ranges.push([i.start, i.end]);
  1138. Object.entries(i.namedImports || {}).forEach(([name, as]) => {
  1139. const original = importMap.get(name);
  1140. if (!original)
  1141. throw new Error(`[unimport] failed to find "${name}" imported from "${i.specifier}"`);
  1142. imports.push({
  1143. from: original.from,
  1144. name: original.name,
  1145. as
  1146. });
  1147. });
  1148. });
  1149. }
  1150. return {
  1151. imports,
  1152. ranges
  1153. };
  1154. }
  1155. async function detectImports(code, ctx, options) {
  1156. if (options?.parser === "acorn")
  1157. return import('../chunks/detect-acorn.cjs').then((r) => r.detectImportsAcorn(code, ctx, options));
  1158. return detectImportsRegex(code, ctx, options);
  1159. }
  1160. function createUnimport(opts) {
  1161. const ctx = createInternalContext(opts);
  1162. async function generateTypeDeclarations(options) {
  1163. const opts2 = {
  1164. resolvePath: (i) => addons.stripFileExtension(i.typeFrom || i.from),
  1165. ...options
  1166. };
  1167. const {
  1168. typeReExports = true
  1169. } = opts2;
  1170. const imports = await ctx.getImports();
  1171. let dts = addons.toTypeDeclarationFile(imports.filter((i) => !i.type && !i.dtsDisabled), opts2);
  1172. const typeOnly = imports.filter((i) => i.type);
  1173. if (typeReExports && typeOnly.length)
  1174. dts += `
  1175. ${addons.toTypeReExports(typeOnly, opts2)}`;
  1176. for (const addon of ctx.addons)
  1177. dts = await addon.declaration?.call(ctx, dts, opts2) ?? dts;
  1178. return dts;
  1179. }
  1180. async function scanImportsFromFile(filepath, includeTypes = true) {
  1181. const additions = await scanExports(filepath, includeTypes);
  1182. await ctx.modifyDynamicImports((imports) => imports.filter((i) => i.from !== filepath).concat(additions));
  1183. return additions;
  1184. }
  1185. async function scanImportsFromDir(dirs = ctx.options.dirs || [], options = ctx.options.dirsScanOptions) {
  1186. const files = await scanFilesFromDir(dirs, options);
  1187. const includeTypes = options?.types ?? true;
  1188. const imports = (await Promise.all(files.map((dir) => scanExports(dir, includeTypes)))).flat();
  1189. const deduped = dedupeDtsExports(imports);
  1190. await ctx.modifyDynamicImports((imports2) => imports2.filter((i) => !files.includes(i.from)).concat(deduped));
  1191. return imports;
  1192. }
  1193. async function injectImportsWithContext(code, id, options) {
  1194. const result = await injectImports(code, id, ctx, {
  1195. ...opts,
  1196. ...options
  1197. });
  1198. const metadata = ctx.getMetadata();
  1199. if (metadata) {
  1200. result.imports.forEach((i) => {
  1201. metadata.injectionUsage[i.name] = metadata.injectionUsage[i.name] || { import: i, count: 0, moduleIds: [] };
  1202. metadata.injectionUsage[i.name].count++;
  1203. if (id && !metadata.injectionUsage[i.name].moduleIds.includes(id))
  1204. metadata.injectionUsage[i.name].moduleIds.push(id);
  1205. });
  1206. }
  1207. return result;
  1208. }
  1209. async function init() {
  1210. if (ctx.options.dirs?.length)
  1211. await scanImportsFromDir();
  1212. }
  1213. return {
  1214. version,
  1215. init,
  1216. clearDynamicImports: () => ctx.clearDynamicImports(),
  1217. modifyDynamicImports: (fn) => ctx.modifyDynamicImports(fn),
  1218. scanImportsFromDir,
  1219. scanImportsFromFile,
  1220. getImports: () => ctx.getImports(),
  1221. getImportMap: () => ctx.getImportMap(),
  1222. detectImports: (code) => detectImports(code, ctx),
  1223. injectImports: injectImportsWithContext,
  1224. generateTypeDeclarations: (options) => generateTypeDeclarations(options),
  1225. getMetadata: () => ctx.getMetadata(),
  1226. getInternalContext: () => ctx,
  1227. // Deprecated
  1228. toExports: async (filepath, includeTypes = false) => addons.toExports(await ctx.getImports(), filepath, includeTypes)
  1229. };
  1230. }
  1231. function createInternalContext(opts) {
  1232. let _combinedImports;
  1233. const _map = /* @__PURE__ */ new Map();
  1234. const addons$1 = [];
  1235. if (Array.isArray(opts.addons))
  1236. addons$1.push(...opts.addons);
  1237. else if (opts.addons?.vueTemplate)
  1238. addons$1.push(addons.vueTemplateAddon());
  1239. opts.addons = addons$1;
  1240. opts.commentsDisable = opts.commentsDisable ?? ["@unimport-disable", "@imports-disable"];
  1241. opts.commentsDebug = opts.commentsDebug ?? ["@unimport-debug", "@imports-debug"];
  1242. let metadata;
  1243. if (opts.collectMeta) {
  1244. metadata = {
  1245. injectionUsage: {}
  1246. };
  1247. }
  1248. let resolvePromise;
  1249. const ctx = {
  1250. version,
  1251. options: opts,
  1252. addons: addons$1,
  1253. staticImports: [...opts.imports || []].filter(Boolean),
  1254. dynamicImports: [],
  1255. modifyDynamicImports,
  1256. clearDynamicImports,
  1257. async getImports() {
  1258. await resolvePromise;
  1259. return updateImports();
  1260. },
  1261. async replaceImports(imports) {
  1262. ctx.staticImports = [...imports || []].filter(Boolean);
  1263. ctx.invalidate();
  1264. await resolvePromise;
  1265. return updateImports();
  1266. },
  1267. async getImportMap() {
  1268. await ctx.getImports();
  1269. return _map;
  1270. },
  1271. getMetadata() {
  1272. return metadata;
  1273. },
  1274. invalidate() {
  1275. _combinedImports = void 0;
  1276. },
  1277. resolveId: (id, parentId) => opts.resolveId?.(id, parentId)
  1278. };
  1279. resolvePromise = resolveBuiltinPresets(opts.presets || []).then((r) => {
  1280. ctx.staticImports.unshift(...r);
  1281. _combinedImports = void 0;
  1282. updateImports();
  1283. });
  1284. function updateImports() {
  1285. if (!_combinedImports) {
  1286. let imports = addons.normalizeImports(addons.dedupeImports([...ctx.staticImports, ...ctx.dynamicImports], opts.warn || console.warn));
  1287. for (const addon of ctx.addons) {
  1288. if (addon.extendImports)
  1289. imports = addon.extendImports.call(ctx, imports) ?? imports;
  1290. }
  1291. imports = imports.filter((i) => !i.disabled);
  1292. _map.clear();
  1293. for (const _import of imports) {
  1294. if (!_import.type)
  1295. _map.set(_import.as ?? _import.name, _import);
  1296. }
  1297. _combinedImports = imports;
  1298. }
  1299. return _combinedImports;
  1300. }
  1301. async function modifyDynamicImports(fn) {
  1302. const result = await fn(ctx.dynamicImports);
  1303. if (Array.isArray(result))
  1304. ctx.dynamicImports = result;
  1305. ctx.invalidate();
  1306. }
  1307. function clearDynamicImports() {
  1308. ctx.dynamicImports.length = 0;
  1309. ctx.invalidate();
  1310. }
  1311. return ctx;
  1312. }
  1313. async function injectImports(code, id, ctx, options) {
  1314. const s = addons.getMagicString(code);
  1315. if (ctx.options.commentsDisable?.some((c) => s.original.includes(c))) {
  1316. return {
  1317. s,
  1318. get code() {
  1319. return s.toString();
  1320. },
  1321. imports: []
  1322. };
  1323. }
  1324. for (const addon of ctx.addons)
  1325. await addon.transform?.call(ctx, s, id);
  1326. const { isCJSContext, matchedImports, firstOccurrence } = await detectImports(s, ctx, options);
  1327. const imports = await resolveImports(ctx, matchedImports, id);
  1328. if (ctx.options.commentsDebug?.some((c) => s.original.includes(c))) {
  1329. const log = ctx.options.debugLog || console.log;
  1330. log(`[unimport] ${imports.length} imports detected in "${id}"${imports.length ? `: ${imports.map((i) => i.name).join(", ")}` : ""}`);
  1331. }
  1332. return {
  1333. ...addons.addImportToCode(
  1334. s,
  1335. imports,
  1336. isCJSContext,
  1337. options?.mergeExisting,
  1338. options?.injectAtEnd,
  1339. firstOccurrence,
  1340. (imports2) => {
  1341. for (const addon of ctx.addons)
  1342. imports2 = addon.injectImportsResolved?.call(ctx, imports2, s, id) ?? imports2;
  1343. return imports2;
  1344. },
  1345. (str, imports2) => {
  1346. for (const addon of ctx.addons)
  1347. str = addon.injectImportsStringified?.call(ctx, str, imports2, s, id) ?? str;
  1348. return str;
  1349. }
  1350. ),
  1351. imports
  1352. };
  1353. }
  1354. async function resolveImports(ctx, imports, id) {
  1355. const resolveCache = /* @__PURE__ */ new Map();
  1356. const _imports = await Promise.all(imports.map(async (i) => {
  1357. if (!resolveCache.has(i.from))
  1358. resolveCache.set(i.from, await ctx.resolveId(i.from, id) || i.from);
  1359. const from = resolveCache.get(i.from);
  1360. if (i.from === id || !from || from === "." || from === id)
  1361. return;
  1362. return {
  1363. ...i,
  1364. from
  1365. };
  1366. }));
  1367. return _imports.filter(Boolean);
  1368. }
  1369. exports.builtinPresets = builtinPresets;
  1370. exports.createUnimport = createUnimport;
  1371. exports.dedupeDtsExports = dedupeDtsExports;
  1372. exports.resolveBuiltinPresets = resolveBuiltinPresets;
  1373. exports.resolvePreset = resolvePreset;
  1374. exports.scanDirExports = scanDirExports;
  1375. exports.scanExports = scanExports;
  1376. exports.scanFilesFromDir = scanFilesFromDir;
  1377. exports.version = version;