next-auto-import 0.0.1 → 0.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -13,11 +13,11 @@ Auto-import generator for Next.js projects. Automatically scans your directories
13
13
  ## Installation
14
14
 
15
15
  ```bash
16
- pnpm add next-auto-import
16
+ pnpm add swc-plugin-auto-import next-auto-import -D
17
17
  # or
18
- npm install next-auto-import
18
+ npm install swc-plugin-auto-import next-auto-import -D
19
19
  # or
20
- yarn add next-auto-import
20
+ yarn add swc-plugin-auto-import next-auto-import -D
21
21
  ```
22
22
 
23
23
  ## Usage
@@ -53,10 +53,12 @@ Make sure to include the generated `.d.ts` file in your `tsconfig.json`:
53
53
  }
54
54
  ```
55
55
 
56
- ## Related
56
+ ## Credits
57
57
 
58
58
  - [unplugin-auto-import](https://github.com/unplugin/unplugin-auto-import) - The original auto-import plugin for Vite, Webpack, Rollup, and more
59
59
 
60
+ - [swc-plugin-auto-import](https://github.com/Debbl/swc-plugin-auto-import) - The original auto-import plugin for SWC
61
+
60
62
  ## License
61
63
 
62
64
  MIT
package/dist/index.cjs CHANGED
@@ -91,23 +91,6 @@ const presets = {
91
91
  "react-dom": react_dom_default
92
92
  };
93
93
 
94
- //#endregion
95
- //#region src/core/biomelintrc.ts
96
- function generateBiomeLintConfigs(imports) {
97
- const config = { javascript: { globals: imports.map((i) => i.as ?? i.name).filter(Boolean).sort() } };
98
- return JSON.stringify(config, null, 2);
99
- }
100
-
101
- //#endregion
102
- //#region src/core/eslintrc.ts
103
- function generateESLintConfigs(imports, eslintrc) {
104
- const eslintConfigs = { globals: {} };
105
- imports.map((i) => i.as ?? i.name).filter(Boolean).sort().forEach((name) => {
106
- eslintConfigs.globals[name] = eslintrc.globalsPropValue;
107
- });
108
- return JSON.stringify(eslintConfigs, null, 2);
109
- }
110
-
111
94
  //#endregion
112
95
  //#region src/core/resolvers.ts
113
96
  function normalizeImport(info, name) {
@@ -171,15 +154,7 @@ function resolversAddon(resolvers) {
171
154
  //#region src/core/ctx.ts
172
155
  function createContext(options = {}, root = node_process.default.cwd()) {
173
156
  root = (0, __antfu_utils.slash)(root);
174
- const { dts: preferDTS = (0, local_pkg.isPackageExists)("typescript"), dtsMode = "append", dtsPreserveExts = false, dirsScanOptions, dirs } = options;
175
- const eslintrc = options.eslintrc || {};
176
- eslintrc.enabled = eslintrc.enabled === void 0 ? false : eslintrc.enabled;
177
- eslintrc.filepath = eslintrc.filepath || "./.eslintrc-auto-import.json";
178
- eslintrc.globalsPropValue = eslintrc.globalsPropValue === void 0 ? true : eslintrc.globalsPropValue;
179
- const biomelintrc = options.biomelintrc || {};
180
- biomelintrc.enabled = biomelintrc.enabled !== void 0;
181
- biomelintrc.filepath = biomelintrc.filepath || "./.biomelintrc-auto-import.json";
182
- const dumpUnimportItems = options.dumpUnimportItems === true ? "./.unimport-items.json" : options.dumpUnimportItems ?? false;
157
+ const { dts: preferDTS = (0, local_pkg.isPackageExists)("typescript"), dtsPreserveExts = false, dirsScanOptions, dirs } = options;
183
158
  const resolvers = options.resolvers ? [options.resolvers].flat(2) : [];
184
159
  const injectAtEnd = options.injectAtEnd !== false;
185
160
  const unimport$1 = (0, unimport.createUnimport)({
@@ -222,50 +197,22 @@ ${dts$1}`.trim()}\n`;
222
197
  return unimport$1.getInternalContext().replaceImports(imports);
223
198
  });
224
199
  const dts = preferDTS === false ? false : preferDTS === true ? (0, node_path.resolve)(root, "auto-imports.d.ts") : (0, node_path.resolve)(root, preferDTS);
225
- const multilineCommentsRE = /\/\*.*?\*\//gs;
226
- const singlelineCommentsRE = /\/\/.*$/gm;
227
- const dtsReg = /declare\s+global\s*\{(.*?)[\n\r]\}/s;
228
- function parseDTS(dts$1) {
229
- dts$1 = dts$1.replace(multilineCommentsRE, "").replace(singlelineCommentsRE, "");
230
- const code = dts$1.match(dtsReg)?.[0];
231
- if (!code) return;
232
- return Object.fromEntries(Array.from(code.matchAll(/['"]?(const\s*[^\s'"]+)['"]?\s*:\s*(.+?)[,;\r\n]/g)).map((i) => [i[1], i[2]]));
233
- }
234
200
  async function generateDTS(file) {
235
201
  await importsPromise;
236
202
  const dir = (0, node_path.dirname)(file);
237
- const originalDTS = parseDTS((0, node_fs.existsSync)(file) ? await node_fs.promises.readFile(file, "utf-8") : "");
238
- const currentContent = await unimport$1.generateTypeDeclarations({ resolvePath: (i) => {
203
+ return await unimport$1.generateTypeDeclarations({ resolvePath: (i) => {
239
204
  if (i.from.startsWith(".") || (0, node_path.isAbsolute)(i.from)) {
240
205
  const related = (0, __antfu_utils.slash)(dtsPreserveExts ? (0, node_path.relative)(dir, i.from) : (0, node_path.relative)(dir, i.from).replace(/\.ts(x)?$/, ""));
241
206
  return !related.startsWith(".") ? `./${related}` : related;
242
207
  }
243
208
  return i.from;
244
209
  } });
245
- if (dtsMode === "append") {
246
- const currentDTS = parseDTS(currentContent);
247
- if (originalDTS) {
248
- Object.assign(originalDTS, currentDTS);
249
- const dtsList = Object.keys(originalDTS).sort().map((k) => ` ${k}: ${originalDTS[k]}`);
250
- return currentContent.replace(dtsReg, () => `declare global {\n${dtsList.join("\n")}\n}`);
251
- }
252
- }
253
- return currentContent;
254
- }
255
- async function generateESLint() {
256
- return generateESLintConfigs(await unimport$1.getImports(), eslintrc);
257
- }
258
- async function generateBiomeLint() {
259
- return generateBiomeLintConfigs(await unimport$1.getImports());
260
210
  }
261
211
  async function writeFile(filePath, content = "") {
262
212
  await node_fs.promises.mkdir((0, node_path.dirname)(filePath), { recursive: true });
263
213
  return await node_fs.promises.writeFile(filePath, content, "utf-8");
264
214
  }
265
215
  let lastDTS;
266
- let lastESLint;
267
- let lastBiomeLint;
268
- let lastUnimportItems;
269
216
  async function writeConfigFiles() {
270
217
  const promises = [];
271
218
  if (dts) promises.push(generateDTS(dts).then((content) => {
@@ -274,32 +221,6 @@ ${dts$1}`.trim()}\n`;
274
221
  return writeFile(dts, content);
275
222
  }
276
223
  }));
277
- if (eslintrc.enabled && eslintrc.filepath) {
278
- const filepath = eslintrc.filepath;
279
- promises.push(generateESLint().then(async (content) => {
280
- if (filepath.endsWith(".cjs")) content = `module.exports = ${content}`;
281
- else if (filepath.endsWith(".mjs") || filepath.endsWith(".js")) content = `export default ${content}`;
282
- content = `${content}\n`;
283
- if (content.trim() !== lastESLint?.trim()) {
284
- lastESLint = content;
285
- return writeFile(eslintrc.filepath, content);
286
- }
287
- }));
288
- }
289
- if (biomelintrc.enabled) promises.push(generateBiomeLint().then((content) => {
290
- if (content !== lastBiomeLint) {
291
- lastBiomeLint = content;
292
- return writeFile(biomelintrc.filepath, content);
293
- }
294
- }));
295
- if (dumpUnimportItems) promises.push(unimport$1.getImports().then((items) => {
296
- if (!dumpUnimportItems) return;
297
- const content = JSON.stringify(items, null, 2);
298
- if (content !== lastUnimportItems) {
299
- lastUnimportItems = content;
300
- return writeFile(dumpUnimportItems, content);
301
- }
302
- }));
303
224
  return Promise.all(promises);
304
225
  }
305
226
  return { writeConfigFiles };
@@ -341,7 +262,10 @@ function createAutoImport(options = {}) {
341
262
  ...nextConfig,
342
263
  experimental: {
343
264
  ...nextConfig.experimental,
344
- swcPlugins: [["swc-plugin-auto-import", { imports: options.imports }], ...nextConfig.experimental?.swcPlugins ?? []]
265
+ swcPlugins: [["swc-plugin-auto-import", {
266
+ imports: options.imports,
267
+ debug: options.debug
268
+ }], ...nextConfig.experimental?.swcPlugins ?? []]
345
269
  }
346
270
  };
347
271
  };
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","names":["react","reactDom","eslintConfigs: any","dynamic: ImportExtended[]","sideEffects: ImportExtended[]","process","eslintrc: ESLintrc","biomelintrc: BiomeLintrc","unimport","dts","i","fs","lastDTS: string | undefined","lastESLint: string | undefined","lastBiomeLint: string | undefined","lastUnimportItems: string | undefined","promises: any[]","resolved: Import[]"],"sources":["../src/presets/react.ts","../src/presets/react-dom.ts","../src/presets/index.ts","../src/core/biomelintrc.ts","../src/core/eslintrc.ts","../src/core/resolvers.ts","../src/core/ctx.ts","../src/index.ts"],"sourcesContent":["import type { ImportsMap } from '../types'\n\nexport const CommonReactAPI = [\n 'useState',\n 'useCallback',\n 'useMemo',\n 'useEffect',\n 'useRef',\n 'useContext',\n 'useReducer',\n 'useImperativeHandle',\n 'useDebugValue',\n 'useDeferredValue',\n 'useLayoutEffect',\n 'useTransition',\n 'startTransition',\n 'useSyncExternalStore',\n 'useInsertionEffect',\n 'useId',\n 'lazy',\n 'memo',\n 'createRef',\n 'forwardRef',\n] as const\n\nexport default {\n react: [\n ...CommonReactAPI,\n 'cache',\n 'cacheSignal',\n 'createContext',\n 'use',\n 'useOptimistic',\n 'useEffectEvent',\n 'useActionState',\n 'Fragment',\n 'Suspense',\n 'Activity',\n ],\n} as const satisfies ImportsMap\n","import type { ImportsMap } from '../types'\n\nexport default {\n 'react-dom': [\n 'useFormStatus',\n 'createPortal',\n 'flushSync',\n 'preconnect',\n 'prefetchDNS',\n 'preinit',\n 'preinitModule',\n 'preload',\n 'preloadModule',\n ],\n} as const satisfies ImportsMap\n","import react from './react'\nimport reactDom from './react-dom'\n\nexport const presets = {\n 'react': react,\n 'react-dom': reactDom,\n}\n\nexport type PresetName = keyof typeof presets\n","import type { Import } from 'unimport'\n\nexport function generateBiomeLintConfigs(imports: Import[]) {\n const names = imports\n .map((i) => i.as ?? i.name)\n .filter(Boolean)\n .sort()\n\n const config = { javascript: { globals: names } }\n const jsonBody = JSON.stringify(config, null, 2)\n\n return jsonBody\n}\n","import type { Import } from 'unimport'\nimport type { ESLintrc } from '../types'\n\nexport function generateESLintConfigs(imports: Import[], eslintrc: ESLintrc) {\n const eslintConfigs: any = { globals: {} }\n\n imports\n .map((i) => i.as ?? i.name)\n .filter(Boolean)\n .sort()\n .forEach((name) => {\n eslintConfigs.globals[name] = eslintrc.globalsPropValue\n })\n const jsonBody = JSON.stringify(eslintConfigs, null, 2)\n return jsonBody\n}\n","import { toArray } from '@antfu/utils'\nimport type { Addon, Import } from 'unimport'\nimport type {\n ImportExtended,\n ImportLegacy,\n Resolver,\n ResolverResult,\n} from '../types'\n\nexport function normalizeImport(\n info: Import | ResolverResult | ImportExtended | ImportLegacy | string,\n name: string,\n): ImportExtended {\n if (typeof info === 'string') {\n return {\n name: 'default',\n as: name,\n from: info,\n }\n }\n if ('path' in info) {\n return {\n from: info.path,\n as: info.name,\n name: info.importName!,\n sideEffects: info.sideEffects,\n }\n }\n return {\n name,\n as: name,\n ...info,\n }\n}\n\nexport async function firstMatchedResolver(\n resolvers: Resolver[],\n fullname: string,\n) {\n let name = fullname\n for (const resolver of resolvers) {\n if (typeof resolver === 'object' && resolver.type === 'directive') {\n if (name.startsWith('v')) name = name.slice(1)\n else continue\n }\n const resolved = await (typeof resolver === 'function'\n ? resolver(name)\n : resolver.resolve(name))\n if (resolved) return normalizeImport(resolved, fullname)\n }\n}\n\nexport function resolversAddon(resolvers: Resolver[]): Addon {\n return {\n name: 'unplugin-auto-import:resolvers',\n async matchImports(names, matched) {\n if (!resolvers.length) return\n const dynamic: ImportExtended[] = []\n const sideEffects: ImportExtended[] = []\n await Promise.all(\n [...names].map(async (name) => {\n const matchedImport = matched.find((i) => i.as === name)\n if (matchedImport) {\n if ('sideEffects' in matchedImport)\n sideEffects.push(\n ...toArray((matchedImport as ImportExtended).sideEffects).map(\n (i) => normalizeImport(i, ''),\n ),\n )\n\n return\n }\n const resolved = await firstMatchedResolver(resolvers, name)\n if (resolved) dynamic.push(resolved)\n\n if (resolved?.sideEffects)\n sideEffects.push(\n ...toArray(resolved?.sideEffects).map((i) =>\n normalizeImport(i, ''),\n ),\n )\n }),\n )\n\n if (dynamic.length) {\n this.dynamicImports.push(...dynamic)\n this.invalidate()\n }\n\n if (dynamic.length || sideEffects.length)\n return [...matched, ...dynamic, ...sideEffects]\n },\n }\n}\n","import { existsSync, promises as fs } from 'node:fs'\nimport { dirname, isAbsolute, relative, resolve } from 'node:path'\nimport process from 'node:process'\nimport { slash, toArray } from '@antfu/utils'\nimport { isPackageExists } from 'local-pkg'\nimport { createUnimport, resolvePreset } from 'unimport'\nimport { presets } from '../presets'\nimport { generateBiomeLintConfigs } from './biomelintrc'\nimport { generateESLintConfigs } from './eslintrc'\nimport { resolversAddon } from './resolvers'\nimport type { Import, InlinePreset } from 'unimport'\nimport type { BiomeLintrc, ESLintrc, Options } from '../types'\n\nexport const INCLUDE_RE_LIST = [/\\.[jt]sx?$/]\nexport const EXCLUDE_RE_LIST = [/[\\\\/]node_modules[\\\\/]/, /[\\\\/]\\.git[\\\\/]/]\n\nexport function createContext(options: Options = {}, root = process.cwd()) {\n root = slash(root)\n\n const {\n dts: preferDTS = isPackageExists('typescript'),\n dtsMode = 'append',\n dtsPreserveExts = false,\n dirsScanOptions,\n dirs,\n } = options\n\n const eslintrc: ESLintrc = options.eslintrc || {}\n eslintrc.enabled = eslintrc.enabled === undefined ? false : eslintrc.enabled\n eslintrc.filepath = eslintrc.filepath || './.eslintrc-auto-import.json'\n eslintrc.globalsPropValue =\n eslintrc.globalsPropValue === undefined ? true : eslintrc.globalsPropValue\n\n const biomelintrc: BiomeLintrc = options.biomelintrc || {}\n biomelintrc.enabled = biomelintrc.enabled !== undefined\n biomelintrc.filepath =\n biomelintrc.filepath || './.biomelintrc-auto-import.json'\n\n const dumpUnimportItems =\n options.dumpUnimportItems === true\n ? './.unimport-items.json'\n : (options.dumpUnimportItems ?? false)\n\n const resolvers = options.resolvers ? [options.resolvers].flat(2) : []\n\n // When \"options.injectAtEnd\" is undefined or true, it's true.\n const injectAtEnd = options.injectAtEnd !== false\n\n const unimport = createUnimport({\n imports: [],\n presets:\n options.packagePresets?.map((p) =>\n typeof p === 'string' ? { package: p } : p,\n ) ?? [],\n dirsScanOptions: {\n ...dirsScanOptions,\n cwd: root,\n },\n dirs,\n injectAtEnd,\n parser: options.parser,\n addons: {\n addons: [\n resolversAddon(resolvers),\n {\n name: 'unplugin-auto-import:dts',\n declaration(dts) {\n return `${`\n/* eslint-disable */\n/* prettier-ignore */\n// @ts-nocheck\n// noinspection JSUnusedGlobalSymbols\n// Generated by unplugin-auto-import\n// biome-ignore lint: disable\n${dts}`.trim()}\\n`\n },\n },\n ],\n },\n })\n\n const importsPromise = flattenImports(options.imports).then((imports) => {\n if (!imports.length && !resolvers.length && !dirs?.length)\n console.warn(\n '[auto-import] plugin installed but no imports has defined, see https://github.com/antfu/unplugin-auto-import#configurations for configurations',\n )\n\n const compare = (\n left: string | undefined,\n right: NonNullable<Options['ignore'] | Options['ignoreDts']>[number],\n ) => {\n return right instanceof RegExp ? right.test(left!) : right === left\n }\n\n options.ignore?.forEach((name) => {\n const i = imports.find((i) => compare(i.as, name))\n if (i) i.disabled = true\n })\n\n options.ignoreDts?.forEach((name) => {\n const i = imports.find((i) => compare(i.as, name))\n if (i) i.dtsDisabled = true\n })\n\n return unimport.getInternalContext().replaceImports(imports)\n })\n\n const dts =\n preferDTS === false\n ? false\n : preferDTS === true\n ? resolve(root, 'auto-imports.d.ts')\n : resolve(root, preferDTS)\n\n const multilineCommentsRE = /\\/\\*.*?\\*\\//gs\n const singlelineCommentsRE = /\\/\\/.*$/gm\n const dtsReg = /declare\\s+global\\s*\\{(.*?)[\\n\\r]\\}/s\n function parseDTS(dts: string) {\n dts = dts.replace(multilineCommentsRE, '').replace(singlelineCommentsRE, '')\n\n const code = dts.match(dtsReg)?.[0]\n if (!code) return\n\n return Object.fromEntries(\n Array.from(\n code.matchAll(/['\"]?(const\\s*[^\\s'\"]+)['\"]?\\s*:\\s*(.+?)[,;\\r\\n]/g),\n ).map((i) => [i[1], i[2]]),\n )\n }\n\n async function generateDTS(file: string) {\n await importsPromise\n const dir = dirname(file)\n const originalContent = existsSync(file)\n ? await fs.readFile(file, 'utf-8')\n : ''\n const originalDTS = parseDTS(originalContent)\n const currentContent = await unimport.generateTypeDeclarations({\n resolvePath: (i) => {\n if (i.from.startsWith('.') || isAbsolute(i.from)) {\n const related = slash(\n dtsPreserveExts\n ? relative(dir, i.from)\n : relative(dir, i.from).replace(/\\.ts(x)?$/, ''),\n )\n return !related.startsWith('.') ? `./${related}` : related\n }\n return i.from\n },\n })\n\n if (dtsMode === 'append') {\n const currentDTS = parseDTS(currentContent)!\n if (originalDTS) {\n Object.assign(originalDTS, currentDTS)\n\n const dtsList = Object.keys(originalDTS)\n .sort()\n .map((k) => ` ${k}: ${originalDTS[k]}`)\n return currentContent.replace(\n dtsReg,\n () => `declare global {\\n${dtsList.join('\\n')}\\n}`,\n )\n }\n }\n\n return currentContent\n }\n\n async function generateESLint() {\n return generateESLintConfigs(await unimport.getImports(), eslintrc)\n }\n\n async function generateBiomeLint() {\n return generateBiomeLintConfigs(await unimport.getImports())\n }\n\n // eslint-disable-next-line unicorn/consistent-function-scoping\n async function writeFile(filePath: string, content = '') {\n await fs.mkdir(dirname(filePath), { recursive: true })\n return await fs.writeFile(filePath, content, 'utf-8')\n }\n\n let lastDTS: string | undefined\n let lastESLint: string | undefined\n let lastBiomeLint: string | undefined\n let lastUnimportItems: string | undefined\n\n async function writeConfigFiles() {\n const promises: any[] = []\n if (dts) {\n promises.push(\n generateDTS(dts).then((content) => {\n if (content !== lastDTS) {\n lastDTS = content\n return writeFile(dts, content)\n }\n }),\n )\n }\n if (eslintrc.enabled && eslintrc.filepath) {\n const filepath = eslintrc.filepath\n promises.push(\n generateESLint().then(async (content) => {\n if (filepath.endsWith('.cjs')) content = `module.exports = ${content}`\n else if (filepath.endsWith('.mjs') || filepath.endsWith('.js'))\n content = `export default ${content}`\n\n content = `${content}\\n`\n if (content.trim() !== lastESLint?.trim()) {\n lastESLint = content\n return writeFile(eslintrc.filepath!, content)\n }\n }),\n )\n }\n\n if (biomelintrc.enabled) {\n promises.push(\n generateBiomeLint().then((content) => {\n if (content !== lastBiomeLint) {\n lastBiomeLint = content\n return writeFile(biomelintrc.filepath!, content)\n }\n }),\n )\n }\n\n if (dumpUnimportItems) {\n promises.push(\n unimport.getImports().then((items) => {\n if (!dumpUnimportItems) return\n const content = JSON.stringify(items, null, 2)\n if (content !== lastUnimportItems) {\n lastUnimportItems = content\n return writeFile(dumpUnimportItems, content)\n }\n }),\n )\n }\n\n return Promise.all(promises)\n }\n\n return {\n writeConfigFiles,\n }\n}\n\nexport async function flattenImports(\n map: Options['imports'],\n): Promise<Import[]> {\n const promises = await Promise.all(\n toArray(map).map(async (definition) => {\n if (typeof definition === 'string') {\n if (!presets[definition])\n throw new Error(`[auto-import] preset ${definition} not found`)\n const preset = presets[definition]\n definition = preset\n }\n\n if ('from' in definition && 'imports' in definition) {\n return await resolvePreset(definition as InlinePreset)\n } else {\n const resolved: Import[] = []\n for (const mod of Object.keys(definition)) {\n for (const id of definition[mod]) {\n const meta = {\n from: mod,\n } as Import\n if (Array.isArray(id)) {\n meta.name = id[0]\n meta.as = id[1]\n } else {\n meta.name = id\n meta.as = id\n }\n resolved.push(meta)\n }\n }\n return resolved\n }\n }),\n )\n\n return promises.flat()\n}\n","import { createContext } from './core/ctx'\nimport type { NextConfig } from 'next'\nimport type { Options } from './types'\n\n/**\n * Creates a Next.js auto-import context\n */\nexport function createAutoImport(options: Options = {}) {\n const ctx = createContext(options)\n\n ctx.writeConfigFiles()\n\n return (nextConfig: NextConfig = {}): NextConfig => {\n return {\n ...nextConfig,\n experimental: {\n ...nextConfig.experimental,\n swcPlugins: [\n [\n 'swc-plugin-auto-import',\n {\n imports: options.imports,\n },\n ],\n ...(nextConfig.experimental?.swcPlugins ?? []),\n ],\n },\n }\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEA,MAAa,iBAAiB;CAC5B;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACD;AAED,oBAAe,EACb,OAAO;CACL,GAAG;CACH;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACD,EACF;;;;ACrCD,wBAAe,EACb,aAAa;CACX;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACD,EACF;;;;ACXD,MAAa,UAAU;CACrB,SAASA;CACT,aAAaC;CACd;;;;ACJD,SAAgB,yBAAyB,SAAmB;CAM1D,MAAM,SAAS,EAAE,YAAY,EAAE,SALjB,QACX,KAAK,MAAM,EAAE,MAAM,EAAE,KAAK,CAC1B,OAAO,QAAQ,CACf,MAAM,EAEsC,EAAE;AAGjD,QAFiB,KAAK,UAAU,QAAQ,MAAM,EAAE;;;;;ACNlD,SAAgB,sBAAsB,SAAmB,UAAoB;CAC3E,MAAMC,gBAAqB,EAAE,SAAS,EAAE,EAAE;AAE1C,SACG,KAAK,MAAM,EAAE,MAAM,EAAE,KAAK,CAC1B,OAAO,QAAQ,CACf,MAAM,CACN,SAAS,SAAS;AACjB,gBAAc,QAAQ,QAAQ,SAAS;GACvC;AAEJ,QADiB,KAAK,UAAU,eAAe,MAAM,EAAE;;;;;ACJzD,SAAgB,gBACd,MACA,MACgB;AAChB,KAAI,OAAO,SAAS,SAClB,QAAO;EACL,MAAM;EACN,IAAI;EACJ,MAAM;EACP;AAEH,KAAI,UAAU,KACZ,QAAO;EACL,MAAM,KAAK;EACX,IAAI,KAAK;EACT,MAAM,KAAK;EACX,aAAa,KAAK;EACnB;AAEH,QAAO;EACL;EACA,IAAI;EACJ,GAAG;EACJ;;AAGH,eAAsB,qBACpB,WACA,UACA;CACA,IAAI,OAAO;AACX,MAAK,MAAM,YAAY,WAAW;AAChC,MAAI,OAAO,aAAa,YAAY,SAAS,SAAS,YACpD,KAAI,KAAK,WAAW,IAAI,CAAE,QAAO,KAAK,MAAM,EAAE;MACzC;EAEP,MAAM,WAAW,OAAO,OAAO,aAAa,aACxC,SAAS,KAAK,GACd,SAAS,QAAQ,KAAK;AAC1B,MAAI,SAAU,QAAO,gBAAgB,UAAU,SAAS;;;AAI5D,SAAgB,eAAe,WAA8B;AAC3D,QAAO;EACL,MAAM;EACN,MAAM,aAAa,OAAO,SAAS;AACjC,OAAI,CAAC,UAAU,OAAQ;GACvB,MAAMC,UAA4B,EAAE;GACpC,MAAMC,cAAgC,EAAE;AACxC,SAAM,QAAQ,IACZ,CAAC,GAAG,MAAM,CAAC,IAAI,OAAO,SAAS;IAC7B,MAAM,gBAAgB,QAAQ,MAAM,MAAM,EAAE,OAAO,KAAK;AACxD,QAAI,eAAe;AACjB,SAAI,iBAAiB,cACnB,aAAY,KACV,8BAAY,cAAiC,YAAY,CAAC,KACvD,MAAM,gBAAgB,GAAG,GAAG,CAC9B,CACF;AAEH;;IAEF,MAAM,WAAW,MAAM,qBAAqB,WAAW,KAAK;AAC5D,QAAI,SAAU,SAAQ,KAAK,SAAS;AAEpC,QAAI,UAAU,YACZ,aAAY,KACV,8BAAW,UAAU,YAAY,CAAC,KAAK,MACrC,gBAAgB,GAAG,GAAG,CACvB,CACF;KACH,CACH;AAED,OAAI,QAAQ,QAAQ;AAClB,SAAK,eAAe,KAAK,GAAG,QAAQ;AACpC,SAAK,YAAY;;AAGnB,OAAI,QAAQ,UAAU,YAAY,OAChC,QAAO;IAAC,GAAG;IAAS,GAAG;IAAS,GAAG;IAAY;;EAEpD;;;;;AC5EH,SAAgB,cAAc,UAAmB,EAAE,EAAE,OAAOC,qBAAQ,KAAK,EAAE;AACzE,iCAAa,KAAK;CAElB,MAAM,EACJ,KAAK,2CAA4B,aAAa,EAC9C,UAAU,UACV,kBAAkB,OAClB,iBACA,SACE;CAEJ,MAAMC,WAAqB,QAAQ,YAAY,EAAE;AACjD,UAAS,UAAU,SAAS,YAAY,SAAY,QAAQ,SAAS;AACrE,UAAS,WAAW,SAAS,YAAY;AACzC,UAAS,mBACP,SAAS,qBAAqB,SAAY,OAAO,SAAS;CAE5D,MAAMC,cAA2B,QAAQ,eAAe,EAAE;AAC1D,aAAY,UAAU,YAAY,YAAY;AAC9C,aAAY,WACV,YAAY,YAAY;CAE1B,MAAM,oBACJ,QAAQ,sBAAsB,OAC1B,2BACC,QAAQ,qBAAqB;CAEpC,MAAM,YAAY,QAAQ,YAAY,CAAC,QAAQ,UAAU,CAAC,KAAK,EAAE,GAAG,EAAE;CAGtE,MAAM,cAAc,QAAQ,gBAAgB;CAE5C,MAAMC,0CAA0B;EAC9B,SAAS,EAAE;EACX,SACE,QAAQ,gBAAgB,KAAK,MAC3B,OAAO,MAAM,WAAW,EAAE,SAAS,GAAG,GAAG,EAC1C,IAAI,EAAE;EACT,iBAAiB;GACf,GAAG;GACH,KAAK;GACN;EACD;EACA;EACA,QAAQ,QAAQ;EAChB,QAAQ,EACN,QAAQ,CACN,eAAe,UAAU,EACzB;GACE,MAAM;GACN,YAAY,OAAK;AACf,WAAO,GAAG;;;;;;;EAOpBC,QAAM,MAAM,CAAC;;GAEN,CACF,EACF;EACF,CAAC;CAEF,MAAM,iBAAiB,eAAe,QAAQ,QAAQ,CAAC,MAAM,YAAY;AACvE,MAAI,CAAC,QAAQ,UAAU,CAAC,UAAU,UAAU,CAAC,MAAM,OACjD,SAAQ,KACN,iJACD;EAEH,MAAM,WACJ,MACA,UACG;AACH,UAAO,iBAAiB,SAAS,MAAM,KAAK,KAAM,GAAG,UAAU;;AAGjE,UAAQ,QAAQ,SAAS,SAAS;GAChC,MAAM,IAAI,QAAQ,MAAM,QAAM,QAAQC,IAAE,IAAI,KAAK,CAAC;AAClD,OAAI,EAAG,GAAE,WAAW;IACpB;AAEF,UAAQ,WAAW,SAAS,SAAS;GACnC,MAAM,IAAI,QAAQ,MAAM,QAAM,QAAQA,IAAE,IAAI,KAAK,CAAC;AAClD,OAAI,EAAG,GAAE,cAAc;IACvB;AAEF,SAAOF,WAAS,oBAAoB,CAAC,eAAe,QAAQ;GAC5D;CAEF,MAAM,MACJ,cAAc,QACV,QACA,cAAc,8BACJ,MAAM,oBAAoB,0BAC1B,MAAM,UAAU;CAEhC,MAAM,sBAAsB;CAC5B,MAAM,uBAAuB;CAC7B,MAAM,SAAS;CACf,SAAS,SAAS,OAAa;AAC7B,UAAMC,MAAI,QAAQ,qBAAqB,GAAG,CAAC,QAAQ,sBAAsB,GAAG;EAE5E,MAAM,OAAOA,MAAI,MAAM,OAAO,GAAG;AACjC,MAAI,CAAC,KAAM;AAEX,SAAO,OAAO,YACZ,MAAM,KACJ,KAAK,SAAS,oDAAoD,CACnE,CAAC,KAAK,MAAM,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,CAC3B;;CAGH,eAAe,YAAY,MAAc;AACvC,QAAM;EACN,MAAM,6BAAc,KAAK;EAIzB,MAAM,cAAc,iCAHe,KAAK,GACpC,MAAME,iBAAG,SAAS,MAAM,QAAQ,GAChC,GACyC;EAC7C,MAAM,iBAAiB,MAAMH,WAAS,yBAAyB,EAC7D,cAAc,MAAM;AAClB,OAAI,EAAE,KAAK,WAAW,IAAI,8BAAe,EAAE,KAAK,EAAE;IAChD,MAAM,mCACJ,0CACa,KAAK,EAAE,KAAK,2BACZ,KAAK,EAAE,KAAK,CAAC,QAAQ,aAAa,GAAG,CACnD;AACD,WAAO,CAAC,QAAQ,WAAW,IAAI,GAAG,KAAK,YAAY;;AAErD,UAAO,EAAE;KAEZ,CAAC;AAEF,MAAI,YAAY,UAAU;GACxB,MAAM,aAAa,SAAS,eAAe;AAC3C,OAAI,aAAa;AACf,WAAO,OAAO,aAAa,WAAW;IAEtC,MAAM,UAAU,OAAO,KAAK,YAAY,CACrC,MAAM,CACN,KAAK,MAAM,KAAK,EAAE,IAAI,YAAY,KAAK;AAC1C,WAAO,eAAe,QACpB,cACM,qBAAqB,QAAQ,KAAK,KAAK,CAAC,KAC/C;;;AAIL,SAAO;;CAGT,eAAe,iBAAiB;AAC9B,SAAO,sBAAsB,MAAMA,WAAS,YAAY,EAAE,SAAS;;CAGrE,eAAe,oBAAoB;AACjC,SAAO,yBAAyB,MAAMA,WAAS,YAAY,CAAC;;CAI9D,eAAe,UAAU,UAAkB,UAAU,IAAI;AACvD,QAAMG,iBAAG,6BAAc,SAAS,EAAE,EAAE,WAAW,MAAM,CAAC;AACtD,SAAO,MAAMA,iBAAG,UAAU,UAAU,SAAS,QAAQ;;CAGvD,IAAIC;CACJ,IAAIC;CACJ,IAAIC;CACJ,IAAIC;CAEJ,eAAe,mBAAmB;EAChC,MAAMC,WAAkB,EAAE;AAC1B,MAAI,IACF,UAAS,KACP,YAAY,IAAI,CAAC,MAAM,YAAY;AACjC,OAAI,YAAY,SAAS;AACvB,cAAU;AACV,WAAO,UAAU,KAAK,QAAQ;;IAEhC,CACH;AAEH,MAAI,SAAS,WAAW,SAAS,UAAU;GACzC,MAAM,WAAW,SAAS;AAC1B,YAAS,KACP,gBAAgB,CAAC,KAAK,OAAO,YAAY;AACvC,QAAI,SAAS,SAAS,OAAO,CAAE,WAAU,oBAAoB;aACpD,SAAS,SAAS,OAAO,IAAI,SAAS,SAAS,MAAM,CAC5D,WAAU,kBAAkB;AAE9B,cAAU,GAAG,QAAQ;AACrB,QAAI,QAAQ,MAAM,KAAK,YAAY,MAAM,EAAE;AACzC,kBAAa;AACb,YAAO,UAAU,SAAS,UAAW,QAAQ;;KAE/C,CACH;;AAGH,MAAI,YAAY,QACd,UAAS,KACP,mBAAmB,CAAC,MAAM,YAAY;AACpC,OAAI,YAAY,eAAe;AAC7B,oBAAgB;AAChB,WAAO,UAAU,YAAY,UAAW,QAAQ;;IAElD,CACH;AAGH,MAAI,kBACF,UAAS,KACPR,WAAS,YAAY,CAAC,MAAM,UAAU;AACpC,OAAI,CAAC,kBAAmB;GACxB,MAAM,UAAU,KAAK,UAAU,OAAO,MAAM,EAAE;AAC9C,OAAI,YAAY,mBAAmB;AACjC,wBAAoB;AACpB,WAAO,UAAU,mBAAmB,QAAQ;;IAE9C,CACH;AAGH,SAAO,QAAQ,IAAI,SAAS;;AAG9B,QAAO,EACL,kBACD;;AAGH,eAAsB,eACpB,KACmB;AAkCnB,SAjCiB,MAAM,QAAQ,+BACrB,IAAI,CAAC,IAAI,OAAO,eAAe;AACrC,MAAI,OAAO,eAAe,UAAU;AAClC,OAAI,CAAC,QAAQ,YACX,OAAM,IAAI,MAAM,wBAAwB,WAAW,YAAY;AAEjE,gBADe,QAAQ;;AAIzB,MAAI,UAAU,cAAc,aAAa,WACvC,QAAO,kCAAoB,WAA2B;OACjD;GACL,MAAMS,WAAqB,EAAE;AAC7B,QAAK,MAAM,OAAO,OAAO,KAAK,WAAW,CACvC,MAAK,MAAM,MAAM,WAAW,MAAM;IAChC,MAAM,OAAO,EACX,MAAM,KACP;AACD,QAAI,MAAM,QAAQ,GAAG,EAAE;AACrB,UAAK,OAAO,GAAG;AACf,UAAK,KAAK,GAAG;WACR;AACL,UAAK,OAAO;AACZ,UAAK,KAAK;;AAEZ,aAAS,KAAK,KAAK;;AAGvB,UAAO;;GAET,CACH,EAEe,MAAM;;;;;;;;ACtRxB,SAAgB,iBAAiB,UAAmB,EAAE,EAAE;AAGtD,CAFY,cAAc,QAAQ,CAE9B,kBAAkB;AAEtB,SAAQ,aAAyB,EAAE,KAAiB;AAClD,SAAO;GACL,GAAG;GACH,cAAc;IACZ,GAAG,WAAW;IACd,YAAY,CACV,CACE,0BACA,EACE,SAAS,QAAQ,SAClB,CACF,EACD,GAAI,WAAW,cAAc,cAAc,EAAE,CAC9C;IACF;GACF"}
1
+ {"version":3,"file":"index.cjs","names":["react","reactDom","dynamic: ImportExtended[]","sideEffects: ImportExtended[]","process","unimport","dts","i","fs","lastDTS: string | undefined","promises: any[]","resolved: Import[]"],"sources":["../src/presets/react.ts","../src/presets/react-dom.ts","../src/presets/index.ts","../src/core/resolvers.ts","../src/core/ctx.ts","../src/index.ts"],"sourcesContent":["import type { ImportsMap } from '../types'\n\nexport const CommonReactAPI = [\n 'useState',\n 'useCallback',\n 'useMemo',\n 'useEffect',\n 'useRef',\n 'useContext',\n 'useReducer',\n 'useImperativeHandle',\n 'useDebugValue',\n 'useDeferredValue',\n 'useLayoutEffect',\n 'useTransition',\n 'startTransition',\n 'useSyncExternalStore',\n 'useInsertionEffect',\n 'useId',\n 'lazy',\n 'memo',\n 'createRef',\n 'forwardRef',\n] as const\n\nexport default {\n react: [\n ...CommonReactAPI,\n 'cache',\n 'cacheSignal',\n 'createContext',\n 'use',\n 'useOptimistic',\n 'useEffectEvent',\n 'useActionState',\n 'Fragment',\n 'Suspense',\n 'Activity',\n ],\n} as const satisfies ImportsMap\n","import type { ImportsMap } from '../types'\n\nexport default {\n 'react-dom': [\n 'useFormStatus',\n 'createPortal',\n 'flushSync',\n 'preconnect',\n 'prefetchDNS',\n 'preinit',\n 'preinitModule',\n 'preload',\n 'preloadModule',\n ],\n} as const satisfies ImportsMap\n","import react from './react'\nimport reactDom from './react-dom'\n\nexport const presets = {\n 'react': react,\n 'react-dom': reactDom,\n}\n\nexport type PresetName = keyof typeof presets\n","import { toArray } from '@antfu/utils'\nimport type { Addon, Import } from 'unimport'\nimport type {\n ImportExtended,\n ImportLegacy,\n Resolver,\n ResolverResult,\n} from '../types'\n\nexport function normalizeImport(\n info: Import | ResolverResult | ImportExtended | ImportLegacy | string,\n name: string,\n): ImportExtended {\n if (typeof info === 'string') {\n return {\n name: 'default',\n as: name,\n from: info,\n }\n }\n if ('path' in info) {\n return {\n from: info.path,\n as: info.name,\n name: info.importName!,\n sideEffects: info.sideEffects,\n }\n }\n return {\n name,\n as: name,\n ...info,\n }\n}\n\nexport async function firstMatchedResolver(\n resolvers: Resolver[],\n fullname: string,\n) {\n let name = fullname\n for (const resolver of resolvers) {\n if (typeof resolver === 'object' && resolver.type === 'directive') {\n if (name.startsWith('v')) name = name.slice(1)\n else continue\n }\n const resolved = await (typeof resolver === 'function'\n ? resolver(name)\n : resolver.resolve(name))\n if (resolved) return normalizeImport(resolved, fullname)\n }\n}\n\nexport function resolversAddon(resolvers: Resolver[]): Addon {\n return {\n name: 'unplugin-auto-import:resolvers',\n async matchImports(names, matched) {\n if (!resolvers.length) return\n const dynamic: ImportExtended[] = []\n const sideEffects: ImportExtended[] = []\n await Promise.all(\n [...names].map(async (name) => {\n const matchedImport = matched.find((i) => i.as === name)\n if (matchedImport) {\n if ('sideEffects' in matchedImport)\n sideEffects.push(\n ...toArray((matchedImport as ImportExtended).sideEffects).map(\n (i) => normalizeImport(i, ''),\n ),\n )\n\n return\n }\n const resolved = await firstMatchedResolver(resolvers, name)\n if (resolved) dynamic.push(resolved)\n\n if (resolved?.sideEffects)\n sideEffects.push(\n ...toArray(resolved?.sideEffects).map((i) =>\n normalizeImport(i, ''),\n ),\n )\n }),\n )\n\n if (dynamic.length) {\n this.dynamicImports.push(...dynamic)\n this.invalidate()\n }\n\n if (dynamic.length || sideEffects.length)\n return [...matched, ...dynamic, ...sideEffects]\n },\n }\n}\n","import { promises as fs } from 'node:fs'\nimport { dirname, isAbsolute, relative, resolve } from 'node:path'\nimport process from 'node:process'\nimport { slash, toArray } from '@antfu/utils'\nimport { isPackageExists } from 'local-pkg'\nimport { createUnimport, resolvePreset } from 'unimport'\nimport { presets } from '../presets'\nimport { resolversAddon } from './resolvers'\nimport type { Import, InlinePreset } from 'unimport'\nimport type { Options } from '../types'\n\nexport const INCLUDE_RE_LIST = [/\\.[jt]sx?$/]\nexport const EXCLUDE_RE_LIST = [/[\\\\/]node_modules[\\\\/]/, /[\\\\/]\\.git[\\\\/]/]\n\nexport function createContext(options: Options = {}, root = process.cwd()) {\n root = slash(root)\n\n const {\n dts: preferDTS = isPackageExists('typescript'),\n dtsPreserveExts = false,\n dirsScanOptions,\n dirs,\n } = options\n\n const resolvers = options.resolvers ? [options.resolvers].flat(2) : []\n\n // When \"options.injectAtEnd\" is undefined or true, it's true.\n const injectAtEnd = options.injectAtEnd !== false\n\n const unimport = createUnimport({\n imports: [],\n presets:\n options.packagePresets?.map((p) =>\n typeof p === 'string' ? { package: p } : p,\n ) ?? [],\n dirsScanOptions: {\n ...dirsScanOptions,\n cwd: root,\n },\n dirs,\n injectAtEnd,\n parser: options.parser,\n addons: {\n addons: [\n resolversAddon(resolvers),\n {\n name: 'unplugin-auto-import:dts',\n declaration(dts) {\n return `${`\n/* eslint-disable */\n/* prettier-ignore */\n// @ts-nocheck\n// noinspection JSUnusedGlobalSymbols\n// Generated by unplugin-auto-import\n// biome-ignore lint: disable\n${dts}`.trim()}\\n`\n },\n },\n ],\n },\n })\n\n const importsPromise = flattenImports(options.imports).then((imports) => {\n if (!imports.length && !resolvers.length && !dirs?.length)\n console.warn(\n '[auto-import] plugin installed but no imports has defined, see https://github.com/antfu/unplugin-auto-import#configurations for configurations',\n )\n\n const compare = (\n left: string | undefined,\n right: NonNullable<Options['ignore'] | Options['ignoreDts']>[number],\n ) => {\n return right instanceof RegExp ? right.test(left!) : right === left\n }\n\n options.ignore?.forEach((name) => {\n const i = imports.find((i) => compare(i.as, name))\n if (i) i.disabled = true\n })\n\n options.ignoreDts?.forEach((name) => {\n const i = imports.find((i) => compare(i.as, name))\n if (i) i.dtsDisabled = true\n })\n\n return unimport.getInternalContext().replaceImports(imports)\n })\n\n const dts =\n preferDTS === false\n ? false\n : preferDTS === true\n ? resolve(root, 'auto-imports.d.ts')\n : resolve(root, preferDTS)\n\n async function generateDTS(file: string) {\n await importsPromise\n const dir = dirname(file)\n const currentContent = await unimport.generateTypeDeclarations({\n resolvePath: (i) => {\n if (i.from.startsWith('.') || isAbsolute(i.from)) {\n const related = slash(\n dtsPreserveExts\n ? relative(dir, i.from)\n : relative(dir, i.from).replace(/\\.ts(x)?$/, ''),\n )\n return !related.startsWith('.') ? `./${related}` : related\n }\n return i.from\n },\n })\n\n return currentContent\n }\n\n // eslint-disable-next-line unicorn/consistent-function-scoping\n async function writeFile(filePath: string, content = '') {\n await fs.mkdir(dirname(filePath), { recursive: true })\n return await fs.writeFile(filePath, content, 'utf-8')\n }\n\n let lastDTS: string | undefined\n\n async function writeConfigFiles() {\n const promises: any[] = []\n if (dts) {\n promises.push(\n generateDTS(dts).then((content) => {\n if (content !== lastDTS) {\n lastDTS = content\n return writeFile(dts, content)\n }\n }),\n )\n }\n\n return Promise.all(promises)\n }\n\n return {\n writeConfigFiles,\n }\n}\n\nexport async function flattenImports(\n map: Options['imports'],\n): Promise<Import[]> {\n const promises = await Promise.all(\n toArray(map).map(async (definition) => {\n if (typeof definition === 'string') {\n if (!presets[definition])\n throw new Error(`[auto-import] preset ${definition} not found`)\n const preset = presets[definition]\n definition = preset\n }\n\n if ('from' in definition && 'imports' in definition) {\n return await resolvePreset(definition as InlinePreset)\n } else {\n const resolved: Import[] = []\n for (const mod of Object.keys(definition)) {\n for (const id of definition[mod]) {\n const meta = {\n from: mod,\n } as Import\n if (Array.isArray(id)) {\n meta.name = id[0]\n meta.as = id[1]\n } else {\n meta.name = id\n meta.as = id\n }\n resolved.push(meta)\n }\n }\n return resolved\n }\n }),\n )\n\n return promises.flat()\n}\n","import { createContext } from './core/ctx'\nimport type { NextConfig } from 'next'\nimport type { Options } from './types'\n\n/**\n * Creates a Next.js auto-import context\n */\nexport function createAutoImport(options: Options = {}) {\n const ctx = createContext(options)\n\n ctx.writeConfigFiles()\n\n return (nextConfig: NextConfig = {}): NextConfig => {\n return {\n ...nextConfig,\n experimental: {\n ...nextConfig.experimental,\n swcPlugins: [\n [\n 'swc-plugin-auto-import',\n {\n imports: options.imports,\n debug: options.debug,\n },\n ],\n ...(nextConfig.experimental?.swcPlugins ?? []),\n ],\n },\n }\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEA,MAAa,iBAAiB;CAC5B;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACD;AAED,oBAAe,EACb,OAAO;CACL,GAAG;CACH;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACD,EACF;;;;ACrCD,wBAAe,EACb,aAAa;CACX;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACD,EACF;;;;ACXD,MAAa,UAAU;CACrB,SAASA;CACT,aAAaC;CACd;;;;ACGD,SAAgB,gBACd,MACA,MACgB;AAChB,KAAI,OAAO,SAAS,SAClB,QAAO;EACL,MAAM;EACN,IAAI;EACJ,MAAM;EACP;AAEH,KAAI,UAAU,KACZ,QAAO;EACL,MAAM,KAAK;EACX,IAAI,KAAK;EACT,MAAM,KAAK;EACX,aAAa,KAAK;EACnB;AAEH,QAAO;EACL;EACA,IAAI;EACJ,GAAG;EACJ;;AAGH,eAAsB,qBACpB,WACA,UACA;CACA,IAAI,OAAO;AACX,MAAK,MAAM,YAAY,WAAW;AAChC,MAAI,OAAO,aAAa,YAAY,SAAS,SAAS,YACpD,KAAI,KAAK,WAAW,IAAI,CAAE,QAAO,KAAK,MAAM,EAAE;MACzC;EAEP,MAAM,WAAW,OAAO,OAAO,aAAa,aACxC,SAAS,KAAK,GACd,SAAS,QAAQ,KAAK;AAC1B,MAAI,SAAU,QAAO,gBAAgB,UAAU,SAAS;;;AAI5D,SAAgB,eAAe,WAA8B;AAC3D,QAAO;EACL,MAAM;EACN,MAAM,aAAa,OAAO,SAAS;AACjC,OAAI,CAAC,UAAU,OAAQ;GACvB,MAAMC,UAA4B,EAAE;GACpC,MAAMC,cAAgC,EAAE;AACxC,SAAM,QAAQ,IACZ,CAAC,GAAG,MAAM,CAAC,IAAI,OAAO,SAAS;IAC7B,MAAM,gBAAgB,QAAQ,MAAM,MAAM,EAAE,OAAO,KAAK;AACxD,QAAI,eAAe;AACjB,SAAI,iBAAiB,cACnB,aAAY,KACV,8BAAY,cAAiC,YAAY,CAAC,KACvD,MAAM,gBAAgB,GAAG,GAAG,CAC9B,CACF;AAEH;;IAEF,MAAM,WAAW,MAAM,qBAAqB,WAAW,KAAK;AAC5D,QAAI,SAAU,SAAQ,KAAK,SAAS;AAEpC,QAAI,UAAU,YACZ,aAAY,KACV,8BAAW,UAAU,YAAY,CAAC,KAAK,MACrC,gBAAgB,GAAG,GAAG,CACvB,CACF;KACH,CACH;AAED,OAAI,QAAQ,QAAQ;AAClB,SAAK,eAAe,KAAK,GAAG,QAAQ;AACpC,SAAK,YAAY;;AAGnB,OAAI,QAAQ,UAAU,YAAY,OAChC,QAAO;IAAC,GAAG;IAAS,GAAG;IAAS,GAAG;IAAY;;EAEpD;;;;;AC9EH,SAAgB,cAAc,UAAmB,EAAE,EAAE,OAAOC,qBAAQ,KAAK,EAAE;AACzE,iCAAa,KAAK;CAElB,MAAM,EACJ,KAAK,2CAA4B,aAAa,EAC9C,kBAAkB,OAClB,iBACA,SACE;CAEJ,MAAM,YAAY,QAAQ,YAAY,CAAC,QAAQ,UAAU,CAAC,KAAK,EAAE,GAAG,EAAE;CAGtE,MAAM,cAAc,QAAQ,gBAAgB;CAE5C,MAAMC,0CAA0B;EAC9B,SAAS,EAAE;EACX,SACE,QAAQ,gBAAgB,KAAK,MAC3B,OAAO,MAAM,WAAW,EAAE,SAAS,GAAG,GAAG,EAC1C,IAAI,EAAE;EACT,iBAAiB;GACf,GAAG;GACH,KAAK;GACN;EACD;EACA;EACA,QAAQ,QAAQ;EAChB,QAAQ,EACN,QAAQ,CACN,eAAe,UAAU,EACzB;GACE,MAAM;GACN,YAAY,OAAK;AACf,WAAO,GAAG;;;;;;;EAOpBC,QAAM,MAAM,CAAC;;GAEN,CACF,EACF;EACF,CAAC;CAEF,MAAM,iBAAiB,eAAe,QAAQ,QAAQ,CAAC,MAAM,YAAY;AACvE,MAAI,CAAC,QAAQ,UAAU,CAAC,UAAU,UAAU,CAAC,MAAM,OACjD,SAAQ,KACN,iJACD;EAEH,MAAM,WACJ,MACA,UACG;AACH,UAAO,iBAAiB,SAAS,MAAM,KAAK,KAAM,GAAG,UAAU;;AAGjE,UAAQ,QAAQ,SAAS,SAAS;GAChC,MAAM,IAAI,QAAQ,MAAM,QAAM,QAAQC,IAAE,IAAI,KAAK,CAAC;AAClD,OAAI,EAAG,GAAE,WAAW;IACpB;AAEF,UAAQ,WAAW,SAAS,SAAS;GACnC,MAAM,IAAI,QAAQ,MAAM,QAAM,QAAQA,IAAE,IAAI,KAAK,CAAC;AAClD,OAAI,EAAG,GAAE,cAAc;IACvB;AAEF,SAAOF,WAAS,oBAAoB,CAAC,eAAe,QAAQ;GAC5D;CAEF,MAAM,MACJ,cAAc,QACV,QACA,cAAc,8BACJ,MAAM,oBAAoB,0BAC1B,MAAM,UAAU;CAEhC,eAAe,YAAY,MAAc;AACvC,QAAM;EACN,MAAM,6BAAc,KAAK;AAezB,SAduB,MAAMA,WAAS,yBAAyB,EAC7D,cAAc,MAAM;AAClB,OAAI,EAAE,KAAK,WAAW,IAAI,8BAAe,EAAE,KAAK,EAAE;IAChD,MAAM,mCACJ,0CACa,KAAK,EAAE,KAAK,2BACZ,KAAK,EAAE,KAAK,CAAC,QAAQ,aAAa,GAAG,CACnD;AACD,WAAO,CAAC,QAAQ,WAAW,IAAI,GAAG,KAAK,YAAY;;AAErD,UAAO,EAAE;KAEZ,CAAC;;CAMJ,eAAe,UAAU,UAAkB,UAAU,IAAI;AACvD,QAAMG,iBAAG,6BAAc,SAAS,EAAE,EAAE,WAAW,MAAM,CAAC;AACtD,SAAO,MAAMA,iBAAG,UAAU,UAAU,SAAS,QAAQ;;CAGvD,IAAIC;CAEJ,eAAe,mBAAmB;EAChC,MAAMC,WAAkB,EAAE;AAC1B,MAAI,IACF,UAAS,KACP,YAAY,IAAI,CAAC,MAAM,YAAY;AACjC,OAAI,YAAY,SAAS;AACvB,cAAU;AACV,WAAO,UAAU,KAAK,QAAQ;;IAEhC,CACH;AAGH,SAAO,QAAQ,IAAI,SAAS;;AAG9B,QAAO,EACL,kBACD;;AAGH,eAAsB,eACpB,KACmB;AAkCnB,SAjCiB,MAAM,QAAQ,+BACrB,IAAI,CAAC,IAAI,OAAO,eAAe;AACrC,MAAI,OAAO,eAAe,UAAU;AAClC,OAAI,CAAC,QAAQ,YACX,OAAM,IAAI,MAAM,wBAAwB,WAAW,YAAY;AAEjE,gBADe,QAAQ;;AAIzB,MAAI,UAAU,cAAc,aAAa,WACvC,QAAO,kCAAoB,WAA2B;OACjD;GACL,MAAMC,WAAqB,EAAE;AAC7B,QAAK,MAAM,OAAO,OAAO,KAAK,WAAW,CACvC,MAAK,MAAM,MAAM,WAAW,MAAM;IAChC,MAAM,OAAO,EACX,MAAM,KACP;AACD,QAAI,MAAM,QAAQ,GAAG,EAAE;AACrB,UAAK,OAAO,GAAG;AACf,UAAK,KAAK,GAAG;WACR;AACL,UAAK,OAAO;AACZ,UAAK,KAAK;;AAEZ,aAAS,KAAK,KAAK;;AAGvB,UAAO;;GAET,CACH,EAEe,MAAM;;;;;;;;AC7KxB,SAAgB,iBAAiB,UAAmB,EAAE,EAAE;AAGtD,CAFY,cAAc,QAAQ,CAE9B,kBAAkB;AAEtB,SAAQ,aAAyB,EAAE,KAAiB;AAClD,SAAO;GACL,GAAG;GACH,cAAc;IACZ,GAAG,WAAW;IACd,YAAY,CACV,CACE,0BACA;KACE,SAAS,QAAQ;KACjB,OAAO,QAAQ;KAChB,CACF,EACD,GAAI,WAAW,cAAc,cAAc,EAAE,CAC9C;IACF;GACF"}
package/dist/index.d.cts CHANGED
@@ -1,7 +1,6 @@
1
1
  import { NextConfig } from "next";
2
2
  import { Arrayable, Awaitable } from "@antfu/utils";
3
3
  import { Import, InlinePreset, PackagePreset, ScanDirExportsOptions, UnimportOptions } from "unimport";
4
- import { FilterPattern } from "unplugin-utils";
5
4
 
6
5
  //#region src/presets/index.d.ts
7
6
  declare const presets: {
@@ -47,36 +46,13 @@ interface ScanDir {
47
46
  glob: string;
48
47
  types?: boolean;
49
48
  }
50
- type ESLintGlobalsPropValue = boolean | 'readonly' | 'readable' | 'writable' | 'writeable';
51
- interface ESLintrc {
52
- /**
53
- * @default false
54
- */
55
- enabled?: boolean;
49
+ interface Options {
56
50
  /**
57
- * Filepath to save the generated eslint config
51
+ * Enable debug mode
58
52
  *
59
- * @default './.eslintrc-auto-import.json'
60
- */
61
- filepath?: string;
62
- /**
63
- * @default true
64
- */
65
- globalsPropValue?: ESLintGlobalsPropValue;
66
- }
67
- interface BiomeLintrc {
68
- /**
69
53
  * @default false
70
54
  */
71
- enabled?: boolean;
72
- /**
73
- * Filepath to save the generated eslint config
74
- *
75
- * @default './.eslintrc-auto-import.json'
76
- */
77
- filepath?: string;
78
- }
79
- interface Options {
55
+ debug?: boolean;
80
56
  /**
81
57
  * Preset names or custom imports map
82
58
  *
@@ -133,60 +109,12 @@ interface Options {
133
109
  * Set to `false` to disable this feature.
134
110
  */
135
111
  dts?: string | boolean;
136
- /**
137
- * Mode for generating the .d.ts file.
138
- * - `overwrite`: overwrite the whole existing .d.ts file with the new type definitions.
139
- * - `append`: only append the new type definitions to the existing .d.ts file, means the existing type definitions will be kept.
140
- * @default 'append'
141
- */
142
- dtsMode?: 'overwrite' | 'append';
143
112
  /**
144
113
  * Preserve the original file extensions in the generated .d.ts file.
145
114
  * Set to `true` to keep the extensions for .ts and .tsx files.
146
115
  * @default false
147
116
  */
148
117
  dtsPreserveExts?: boolean;
149
- /**
150
- * Set default export alias by file name
151
- *
152
- * @default false
153
- */
154
- defaultExportByFilename?: boolean;
155
- /**
156
- * Rules to include transforming target.
157
- *
158
- * @default [/\.[jt]sx?$/, /\.astro$/, /\.vue$/, /\.vue\?vue/, /\.vue\.[tj]sx?\?vue/, /\.svelte$/]
159
- */
160
- include?: FilterPattern;
161
- /**
162
- * Rules to exclude transforming target.
163
- *
164
- * @default [/[\\/]node_modules[\\/]/, /[\\/]\.git[\\/]/]
165
- */
166
- exclude?: FilterPattern;
167
- /**
168
- * Generate corresponding .eslintrc-auto-import.json file.
169
- */
170
- eslintrc?: ESLintrc;
171
- /**
172
- * Generate corresponding .biomelintrc.json file.
173
- */
174
- biomelintrc?: BiomeLintrc;
175
- /**
176
- * Save unimport items into a JSON file for other tools to consume.
177
- * Provide a filepath to save the JSON file.
178
- *
179
- * When set to `true`, it will save to `./.unimport-items.json`
180
- *
181
- * @default false
182
- */
183
- dumpUnimportItems?: boolean | string;
184
- /**
185
- * Include auto-imported packages in Vite's `optimizeDeps` option
186
- *
187
- * @default true
188
- */
189
- viteOptimizeDeps?: boolean;
190
118
  }
191
119
  //#endregion
192
120
  //#region src/index.d.ts
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.cts","names":[],"sources":["../src/presets/index.ts","../src/types.ts","../src/index.ts"],"sourcesContent":[],"mappings":";;;;;;cAGa;;;;;;EAAA,CAAA;AAKb,CAAA;KAAY,UAAA,gBAA0B;;;;ACoCxB,UAhBG,cAAA,SAAuB,MAgB1B,CAAA;EAIG,WAAA,CAAA,EAnBD,eAmBqB;EAQzB,QAAA,CAAA,EAAQ,KAAA,GAAA,UAAG;AAKvB;AAKiB,KAjCL,eAAA,GAiCY,CAAA,MAAA,EAAA,MAAA,CAAA;AAOZ,KAvCA,eAAA,GAAkB,SAuCI,CAvCM,cAuCN,GAAA,MAAA,CAAA,GAAA,SAAA;AAOjB,UA5CA,cAAA,CA0DI;EAGJ,EAAA,CAAA,EAAA,MAAA;EAaA,IAAA,CAAA,EAAA,MAAO;EAMF,IAAA,EAAA,MAAA;;AAA0B,KA1EpC,gBAAA,GA0EoC,CAAA,IAAA,EAAA,MAAA,EAAA,GAxE3C,SAwE2C,CAAA,MAAA,GAvErC,cAuEqC,GAvEpB,cAuEoB,GAAA,IAAA,GAAA,SAAA,GAAA,IAAA,CAAA;AAApC,UApEK,oBAAA,CAoEL;EAUQ,IAAA,EAAA,WAAA,GAAA,WAAA;EAKC,OAAA,EAjFV,gBAiFU;;;;;AA6Ba,KAxGtB,QAAA,GAAW,gBAwGW,GAxGQ,oBAwGR;;;;AA4CtB,KA/IA,UAAA,GAAa,MA+Ib,CAAA,MAAA,EAAA,CAAA,MAAA,GA/IsC,eA+ItC,CAAA,EAAA,CAAA;;;;AAiBe,UA3JV,OAAA,CA2JU;;;;ACtNe,KDkE9B,sBAAA,GClE8B,OAAA,GAAA,UAAA,GAAA,UAAA,GAAA,UAAA,GAAA,WAAA;AAKpB,UDoEL,QAAA,CCpEK;EAAkB;;;;;;;;;;;;;qBDkFnB;;UAGJ,WAAA;;;;;;;;;;;;UAaA,OAAA;;;;;;YAML,UAAU,aAAa,aAAa;;;;;;;;;oBAU5B;;;;qBAKC;;;;wBAKG;;;;;;;;;;oBAYJ,KAAK;;;;mBAKN;;;;;;cAOL,UAAU,UAAU;;;;;;;WAQvB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;YAoCC;;;;;;YAOA;;;;aAKC;;;;gBAKG;;;;;;;;;;;;;;;;;;;;;;iBCtNA,gBAAA,WAA0B,wBAKpB,eAAkB"}
1
+ {"version":3,"file":"index.d.cts","names":[],"sources":["../src/presets/index.ts","../src/types.ts","../src/index.ts"],"sourcesContent":[],"mappings":";;;;;cAGa;;;;;IAAA,SAGZ,WAAA,EAAA,CAAA,eAAA,EAAA,cAAA,EAAA,WAAA,EAAA,YAAA,EAAA,aAAA,EAAA,SAAA,EAAA,eAAA,EAAA,SAAA,EAAA,eAAA,CAAA;EAEW,CAAA;;KAAA,UAAA,gBAA0B;;;;ACmCxB,UAhBG,cAAA,SAAuB,MAgB1B,CAAA;EAIG,WAAA,CAAA,EAnBD,eAmBqB;EAQzB,QAAA,CAAA,EAAQ,KAAA,GAAA,UAAG;AAKvB;AAKiB,KAjCL,eAAA,GAiCY,CAAA,MAAA,EAAA,MAAA,CAAA;AA4CP,KA5EL,eAAA,GAAkB,SA4EN,CA5EgB,cA4EhB,GAAA,MAAA,CAAA,GAAA,SAAA;AAaF,UAvFL,cAAA,CAuFK;EAAa,EAAA,CAAA,EAAA,MAAA;EAAa,IAAA,CAAA,EAAA,MAAA;EAApC,IAAA,EAAA,MAAA;;AAeS,KAhGT,gBAAA,GAgGS,CAAA,IAAA,EAAA,MAAA,EAAA,GA9FhB,SA8FgB,CAAA,MAAA,GA7FV,cA6FU,GA7FO,cA6FP,GAAA,IAAA,GAAA,SAAA,GAAA,IAAA,CAAA;AAKG,UA/FP,oBAAA,CA+FO;EAYC,IAAA,EAAA,WAAA,GAAA,WAAA;EAAL,OAAA,EAzGT,gBAyGS;;;;;AAoBT,KAvHC,QAAA,GAAW,gBAuHZ,GAvH+B,oBAuH/B;;;;KAlHC,UAAA,GAAa,yBAAyB;ACrDlD;;;AAKwC,UDqDvB,OAAA,CCrDuB;EAAU,IAAA,EAAA,MAAA;;;UDiGjC,OAAA;;;;;;;;;;;;YAaL,UAAU,aAAa,aAAa;;;;;;;;;oBAU5B;;;;qBAKC;;;;wBAKG;;;;;;;;;;oBAYJ,KAAK;;;;mBAKN;;;;;;cAOL,UAAU,UAAU;;;;;;;WAQvB;;;;;;;;;;;;;;;;;;;AD3KE,iBEIG,gBAAA,CFDf,OAAA,CAAA,EECyC,OFDzC,CAAA,EAAA,CAAA,UAAA,CAAA,EEMqB,UFNrB,EAAA,GEMuC,UFNvC"}
package/dist/index.d.mts CHANGED
@@ -1,7 +1,6 @@
1
1
  import { Arrayable, Awaitable } from "@antfu/utils";
2
2
  import { Import, InlinePreset, PackagePreset, ScanDirExportsOptions, UnimportOptions } from "unimport";
3
3
  import { NextConfig } from "next";
4
- import { FilterPattern } from "unplugin-utils";
5
4
 
6
5
  //#region src/presets/index.d.ts
7
6
  declare const presets: {
@@ -47,36 +46,13 @@ interface ScanDir {
47
46
  glob: string;
48
47
  types?: boolean;
49
48
  }
50
- type ESLintGlobalsPropValue = boolean | 'readonly' | 'readable' | 'writable' | 'writeable';
51
- interface ESLintrc {
52
- /**
53
- * @default false
54
- */
55
- enabled?: boolean;
49
+ interface Options {
56
50
  /**
57
- * Filepath to save the generated eslint config
51
+ * Enable debug mode
58
52
  *
59
- * @default './.eslintrc-auto-import.json'
60
- */
61
- filepath?: string;
62
- /**
63
- * @default true
64
- */
65
- globalsPropValue?: ESLintGlobalsPropValue;
66
- }
67
- interface BiomeLintrc {
68
- /**
69
53
  * @default false
70
54
  */
71
- enabled?: boolean;
72
- /**
73
- * Filepath to save the generated eslint config
74
- *
75
- * @default './.eslintrc-auto-import.json'
76
- */
77
- filepath?: string;
78
- }
79
- interface Options {
55
+ debug?: boolean;
80
56
  /**
81
57
  * Preset names or custom imports map
82
58
  *
@@ -133,60 +109,12 @@ interface Options {
133
109
  * Set to `false` to disable this feature.
134
110
  */
135
111
  dts?: string | boolean;
136
- /**
137
- * Mode for generating the .d.ts file.
138
- * - `overwrite`: overwrite the whole existing .d.ts file with the new type definitions.
139
- * - `append`: only append the new type definitions to the existing .d.ts file, means the existing type definitions will be kept.
140
- * @default 'append'
141
- */
142
- dtsMode?: 'overwrite' | 'append';
143
112
  /**
144
113
  * Preserve the original file extensions in the generated .d.ts file.
145
114
  * Set to `true` to keep the extensions for .ts and .tsx files.
146
115
  * @default false
147
116
  */
148
117
  dtsPreserveExts?: boolean;
149
- /**
150
- * Set default export alias by file name
151
- *
152
- * @default false
153
- */
154
- defaultExportByFilename?: boolean;
155
- /**
156
- * Rules to include transforming target.
157
- *
158
- * @default [/\.[jt]sx?$/, /\.astro$/, /\.vue$/, /\.vue\?vue/, /\.vue\.[tj]sx?\?vue/, /\.svelte$/]
159
- */
160
- include?: FilterPattern;
161
- /**
162
- * Rules to exclude transforming target.
163
- *
164
- * @default [/[\\/]node_modules[\\/]/, /[\\/]\.git[\\/]/]
165
- */
166
- exclude?: FilterPattern;
167
- /**
168
- * Generate corresponding .eslintrc-auto-import.json file.
169
- */
170
- eslintrc?: ESLintrc;
171
- /**
172
- * Generate corresponding .biomelintrc.json file.
173
- */
174
- biomelintrc?: BiomeLintrc;
175
- /**
176
- * Save unimport items into a JSON file for other tools to consume.
177
- * Provide a filepath to save the JSON file.
178
- *
179
- * When set to `true`, it will save to `./.unimport-items.json`
180
- *
181
- * @default false
182
- */
183
- dumpUnimportItems?: boolean | string;
184
- /**
185
- * Include auto-imported packages in Vite's `optimizeDeps` option
186
- *
187
- * @default true
188
- */
189
- viteOptimizeDeps?: boolean;
190
118
  }
191
119
  //#endregion
192
120
  //#region src/index.d.ts
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.mts","names":[],"sources":["../src/presets/index.ts","../src/types.ts","../src/index.ts"],"sourcesContent":[],"mappings":";;;;;;cAGa;;;;;;EAAA,CAAA;AAKb,CAAA;KAAY,UAAA,gBAA0B;;;;ACoCxB,UAhBG,cAAA,SAAuB,MAgB1B,CAAA;EAIG,WAAA,CAAA,EAnBD,eAmBqB;EAQzB,QAAA,CAAA,EAAQ,KAAA,GAAA,UAAG;AAKvB;AAKiB,KAjCL,eAAA,GAiCY,CAAA,MAAA,EAAA,MAAA,CAAA;AAOZ,KAvCA,eAAA,GAAkB,SAuCI,CAvCM,cAuCN,GAAA,MAAA,CAAA,GAAA,SAAA;AAOjB,UA5CA,cAAA,CA0DI;EAGJ,EAAA,CAAA,EAAA,MAAA;EAaA,IAAA,CAAA,EAAA,MAAO;EAMF,IAAA,EAAA,MAAA;;AAA0B,KA1EpC,gBAAA,GA0EoC,CAAA,IAAA,EAAA,MAAA,EAAA,GAxE3C,SAwE2C,CAAA,MAAA,GAvErC,cAuEqC,GAvEpB,cAuEoB,GAAA,IAAA,GAAA,SAAA,GAAA,IAAA,CAAA;AAApC,UApEK,oBAAA,CAoEL;EAUQ,IAAA,EAAA,WAAA,GAAA,WAAA;EAKC,OAAA,EAjFV,gBAiFU;;;;;AA6Ba,KAxGtB,QAAA,GAAW,gBAwGW,GAxGQ,oBAwGR;;;;AA4CtB,KA/IA,UAAA,GAAa,MA+Ib,CAAA,MAAA,EAAA,CAAA,MAAA,GA/IsC,eA+ItC,CAAA,EAAA,CAAA;;;;AAiBe,UA3JV,OAAA,CA2JU;;;;ACtNe,KDkE9B,sBAAA,GClE8B,OAAA,GAAA,UAAA,GAAA,UAAA,GAAA,UAAA,GAAA,WAAA;AAKpB,UDoEL,QAAA,CCpEK;EAAkB;;;;;;;;;;;;;qBDkFnB;;UAGJ,WAAA;;;;;;;;;;;;UAaA,OAAA;;;;;;YAML,UAAU,aAAa,aAAa;;;;;;;;;oBAU5B;;;;qBAKC;;;;wBAKG;;;;;;;;;;oBAYJ,KAAK;;;;mBAKN;;;;;;cAOL,UAAU,UAAU;;;;;;;WAQvB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;YAoCC;;;;;;YAOA;;;;aAKC;;;;gBAKG;;;;;;;;;;;;;;;;;;;;;;iBCtNA,gBAAA,WAA0B,wBAKpB,eAAkB"}
1
+ {"version":3,"file":"index.d.mts","names":[],"sources":["../src/presets/index.ts","../src/types.ts","../src/index.ts"],"sourcesContent":[],"mappings":";;;;;cAGa;;;;;IAAA,SAGZ,WAAA,EAAA,CAAA,eAAA,EAAA,cAAA,EAAA,WAAA,EAAA,YAAA,EAAA,aAAA,EAAA,SAAA,EAAA,eAAA,EAAA,SAAA,EAAA,eAAA,CAAA;EAEW,CAAA;;KAAA,UAAA,gBAA0B;;;;ACmCxB,UAhBG,cAAA,SAAuB,MAgB1B,CAAA;EAIG,WAAA,CAAA,EAnBD,eAmBqB;EAQzB,QAAA,CAAA,EAAQ,KAAA,GAAA,UAAG;AAKvB;AAKiB,KAjCL,eAAA,GAiCY,CAAA,MAAA,EAAA,MAAA,CAAA;AA4CP,KA5EL,eAAA,GAAkB,SA4EN,CA5EgB,cA4EhB,GAAA,MAAA,CAAA,GAAA,SAAA;AAaF,UAvFL,cAAA,CAuFK;EAAa,EAAA,CAAA,EAAA,MAAA;EAAa,IAAA,CAAA,EAAA,MAAA;EAApC,IAAA,EAAA,MAAA;;AAeS,KAhGT,gBAAA,GAgGS,CAAA,IAAA,EAAA,MAAA,EAAA,GA9FhB,SA8FgB,CAAA,MAAA,GA7FV,cA6FU,GA7FO,cA6FP,GAAA,IAAA,GAAA,SAAA,GAAA,IAAA,CAAA;AAKG,UA/FP,oBAAA,CA+FO;EAYC,IAAA,EAAA,WAAA,GAAA,WAAA;EAAL,OAAA,EAzGT,gBAyGS;;;;;AAoBT,KAvHC,QAAA,GAAW,gBAuHZ,GAvH+B,oBAuH/B;;;;KAlHC,UAAA,GAAa,yBAAyB;ACrDlD;;;AAKwC,UDqDvB,OAAA,CCrDuB;EAAU,IAAA,EAAA,MAAA;;;UDiGjC,OAAA;;;;;;;;;;;;YAaL,UAAU,aAAa,aAAa;;;;;;;;;oBAU5B;;;;qBAKC;;;;wBAKG;;;;;;;;;;oBAYJ,KAAK;;;;mBAKN;;;;;;cAOL,UAAU,UAAU;;;;;;;WAQvB;;;;;;;;;;;;;;;;;;;AD3KE,iBEIG,gBAAA,CFDf,OAAA,CAAA,EECyC,OFDzC,CAAA,EAAA,CAAA,UAAA,CAAA,EEMqB,UFNrB,EAAA,GEMuC,UFNvC"}
package/dist/index.mjs CHANGED
@@ -1,4 +1,4 @@
1
- import { existsSync, promises } from "node:fs";
1
+ import { promises } from "node:fs";
2
2
  import { dirname, isAbsolute, relative, resolve } from "node:path";
3
3
  import process from "node:process";
4
4
  import { slash, toArray } from "@antfu/utils";
@@ -63,23 +63,6 @@ const presets = {
63
63
  "react-dom": react_dom_default
64
64
  };
65
65
 
66
- //#endregion
67
- //#region src/core/biomelintrc.ts
68
- function generateBiomeLintConfigs(imports) {
69
- const config = { javascript: { globals: imports.map((i) => i.as ?? i.name).filter(Boolean).sort() } };
70
- return JSON.stringify(config, null, 2);
71
- }
72
-
73
- //#endregion
74
- //#region src/core/eslintrc.ts
75
- function generateESLintConfigs(imports, eslintrc) {
76
- const eslintConfigs = { globals: {} };
77
- imports.map((i) => i.as ?? i.name).filter(Boolean).sort().forEach((name) => {
78
- eslintConfigs.globals[name] = eslintrc.globalsPropValue;
79
- });
80
- return JSON.stringify(eslintConfigs, null, 2);
81
- }
82
-
83
66
  //#endregion
84
67
  //#region src/core/resolvers.ts
85
68
  function normalizeImport(info, name) {
@@ -143,15 +126,7 @@ function resolversAddon(resolvers) {
143
126
  //#region src/core/ctx.ts
144
127
  function createContext(options = {}, root = process.cwd()) {
145
128
  root = slash(root);
146
- const { dts: preferDTS = isPackageExists("typescript"), dtsMode = "append", dtsPreserveExts = false, dirsScanOptions, dirs } = options;
147
- const eslintrc = options.eslintrc || {};
148
- eslintrc.enabled = eslintrc.enabled === void 0 ? false : eslintrc.enabled;
149
- eslintrc.filepath = eslintrc.filepath || "./.eslintrc-auto-import.json";
150
- eslintrc.globalsPropValue = eslintrc.globalsPropValue === void 0 ? true : eslintrc.globalsPropValue;
151
- const biomelintrc = options.biomelintrc || {};
152
- biomelintrc.enabled = biomelintrc.enabled !== void 0;
153
- biomelintrc.filepath = biomelintrc.filepath || "./.biomelintrc-auto-import.json";
154
- const dumpUnimportItems = options.dumpUnimportItems === true ? "./.unimport-items.json" : options.dumpUnimportItems ?? false;
129
+ const { dts: preferDTS = isPackageExists("typescript"), dtsPreserveExts = false, dirsScanOptions, dirs } = options;
155
130
  const resolvers = options.resolvers ? [options.resolvers].flat(2) : [];
156
131
  const injectAtEnd = options.injectAtEnd !== false;
157
132
  const unimport = createUnimport({
@@ -194,50 +169,22 @@ ${dts$1}`.trim()}\n`;
194
169
  return unimport.getInternalContext().replaceImports(imports);
195
170
  });
196
171
  const dts = preferDTS === false ? false : preferDTS === true ? resolve(root, "auto-imports.d.ts") : resolve(root, preferDTS);
197
- const multilineCommentsRE = /\/\*.*?\*\//gs;
198
- const singlelineCommentsRE = /\/\/.*$/gm;
199
- const dtsReg = /declare\s+global\s*\{(.*?)[\n\r]\}/s;
200
- function parseDTS(dts$1) {
201
- dts$1 = dts$1.replace(multilineCommentsRE, "").replace(singlelineCommentsRE, "");
202
- const code = dts$1.match(dtsReg)?.[0];
203
- if (!code) return;
204
- return Object.fromEntries(Array.from(code.matchAll(/['"]?(const\s*[^\s'"]+)['"]?\s*:\s*(.+?)[,;\r\n]/g)).map((i) => [i[1], i[2]]));
205
- }
206
172
  async function generateDTS(file) {
207
173
  await importsPromise;
208
174
  const dir = dirname(file);
209
- const originalDTS = parseDTS(existsSync(file) ? await promises.readFile(file, "utf-8") : "");
210
- const currentContent = await unimport.generateTypeDeclarations({ resolvePath: (i) => {
175
+ return await unimport.generateTypeDeclarations({ resolvePath: (i) => {
211
176
  if (i.from.startsWith(".") || isAbsolute(i.from)) {
212
177
  const related = slash(dtsPreserveExts ? relative(dir, i.from) : relative(dir, i.from).replace(/\.ts(x)?$/, ""));
213
178
  return !related.startsWith(".") ? `./${related}` : related;
214
179
  }
215
180
  return i.from;
216
181
  } });
217
- if (dtsMode === "append") {
218
- const currentDTS = parseDTS(currentContent);
219
- if (originalDTS) {
220
- Object.assign(originalDTS, currentDTS);
221
- const dtsList = Object.keys(originalDTS).sort().map((k) => ` ${k}: ${originalDTS[k]}`);
222
- return currentContent.replace(dtsReg, () => `declare global {\n${dtsList.join("\n")}\n}`);
223
- }
224
- }
225
- return currentContent;
226
- }
227
- async function generateESLint() {
228
- return generateESLintConfigs(await unimport.getImports(), eslintrc);
229
- }
230
- async function generateBiomeLint() {
231
- return generateBiomeLintConfigs(await unimport.getImports());
232
182
  }
233
183
  async function writeFile(filePath, content = "") {
234
184
  await promises.mkdir(dirname(filePath), { recursive: true });
235
185
  return await promises.writeFile(filePath, content, "utf-8");
236
186
  }
237
187
  let lastDTS;
238
- let lastESLint;
239
- let lastBiomeLint;
240
- let lastUnimportItems;
241
188
  async function writeConfigFiles() {
242
189
  const promises$1 = [];
243
190
  if (dts) promises$1.push(generateDTS(dts).then((content) => {
@@ -246,32 +193,6 @@ ${dts$1}`.trim()}\n`;
246
193
  return writeFile(dts, content);
247
194
  }
248
195
  }));
249
- if (eslintrc.enabled && eslintrc.filepath) {
250
- const filepath = eslintrc.filepath;
251
- promises$1.push(generateESLint().then(async (content) => {
252
- if (filepath.endsWith(".cjs")) content = `module.exports = ${content}`;
253
- else if (filepath.endsWith(".mjs") || filepath.endsWith(".js")) content = `export default ${content}`;
254
- content = `${content}\n`;
255
- if (content.trim() !== lastESLint?.trim()) {
256
- lastESLint = content;
257
- return writeFile(eslintrc.filepath, content);
258
- }
259
- }));
260
- }
261
- if (biomelintrc.enabled) promises$1.push(generateBiomeLint().then((content) => {
262
- if (content !== lastBiomeLint) {
263
- lastBiomeLint = content;
264
- return writeFile(biomelintrc.filepath, content);
265
- }
266
- }));
267
- if (dumpUnimportItems) promises$1.push(unimport.getImports().then((items) => {
268
- if (!dumpUnimportItems) return;
269
- const content = JSON.stringify(items, null, 2);
270
- if (content !== lastUnimportItems) {
271
- lastUnimportItems = content;
272
- return writeFile(dumpUnimportItems, content);
273
- }
274
- }));
275
196
  return Promise.all(promises$1);
276
197
  }
277
198
  return { writeConfigFiles };
@@ -313,7 +234,10 @@ function createAutoImport(options = {}) {
313
234
  ...nextConfig,
314
235
  experimental: {
315
236
  ...nextConfig.experimental,
316
- swcPlugins: [["swc-plugin-auto-import", { imports: options.imports }], ...nextConfig.experimental?.swcPlugins ?? []]
237
+ swcPlugins: [["swc-plugin-auto-import", {
238
+ imports: options.imports,
239
+ debug: options.debug
240
+ }], ...nextConfig.experimental?.swcPlugins ?? []]
317
241
  }
318
242
  };
319
243
  };
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","names":["react","reactDom","eslintConfigs: any","dynamic: ImportExtended[]","sideEffects: ImportExtended[]","eslintrc: ESLintrc","biomelintrc: BiomeLintrc","dts","i","fs","lastDTS: string | undefined","lastESLint: string | undefined","lastBiomeLint: string | undefined","lastUnimportItems: string | undefined","promises: any[]","promises","resolved: Import[]"],"sources":["../src/presets/react.ts","../src/presets/react-dom.ts","../src/presets/index.ts","../src/core/biomelintrc.ts","../src/core/eslintrc.ts","../src/core/resolvers.ts","../src/core/ctx.ts","../src/index.ts"],"sourcesContent":["import type { ImportsMap } from '../types'\n\nexport const CommonReactAPI = [\n 'useState',\n 'useCallback',\n 'useMemo',\n 'useEffect',\n 'useRef',\n 'useContext',\n 'useReducer',\n 'useImperativeHandle',\n 'useDebugValue',\n 'useDeferredValue',\n 'useLayoutEffect',\n 'useTransition',\n 'startTransition',\n 'useSyncExternalStore',\n 'useInsertionEffect',\n 'useId',\n 'lazy',\n 'memo',\n 'createRef',\n 'forwardRef',\n] as const\n\nexport default {\n react: [\n ...CommonReactAPI,\n 'cache',\n 'cacheSignal',\n 'createContext',\n 'use',\n 'useOptimistic',\n 'useEffectEvent',\n 'useActionState',\n 'Fragment',\n 'Suspense',\n 'Activity',\n ],\n} as const satisfies ImportsMap\n","import type { ImportsMap } from '../types'\n\nexport default {\n 'react-dom': [\n 'useFormStatus',\n 'createPortal',\n 'flushSync',\n 'preconnect',\n 'prefetchDNS',\n 'preinit',\n 'preinitModule',\n 'preload',\n 'preloadModule',\n ],\n} as const satisfies ImportsMap\n","import react from './react'\nimport reactDom from './react-dom'\n\nexport const presets = {\n 'react': react,\n 'react-dom': reactDom,\n}\n\nexport type PresetName = keyof typeof presets\n","import type { Import } from 'unimport'\n\nexport function generateBiomeLintConfigs(imports: Import[]) {\n const names = imports\n .map((i) => i.as ?? i.name)\n .filter(Boolean)\n .sort()\n\n const config = { javascript: { globals: names } }\n const jsonBody = JSON.stringify(config, null, 2)\n\n return jsonBody\n}\n","import type { Import } from 'unimport'\nimport type { ESLintrc } from '../types'\n\nexport function generateESLintConfigs(imports: Import[], eslintrc: ESLintrc) {\n const eslintConfigs: any = { globals: {} }\n\n imports\n .map((i) => i.as ?? i.name)\n .filter(Boolean)\n .sort()\n .forEach((name) => {\n eslintConfigs.globals[name] = eslintrc.globalsPropValue\n })\n const jsonBody = JSON.stringify(eslintConfigs, null, 2)\n return jsonBody\n}\n","import { toArray } from '@antfu/utils'\nimport type { Addon, Import } from 'unimport'\nimport type {\n ImportExtended,\n ImportLegacy,\n Resolver,\n ResolverResult,\n} from '../types'\n\nexport function normalizeImport(\n info: Import | ResolverResult | ImportExtended | ImportLegacy | string,\n name: string,\n): ImportExtended {\n if (typeof info === 'string') {\n return {\n name: 'default',\n as: name,\n from: info,\n }\n }\n if ('path' in info) {\n return {\n from: info.path,\n as: info.name,\n name: info.importName!,\n sideEffects: info.sideEffects,\n }\n }\n return {\n name,\n as: name,\n ...info,\n }\n}\n\nexport async function firstMatchedResolver(\n resolvers: Resolver[],\n fullname: string,\n) {\n let name = fullname\n for (const resolver of resolvers) {\n if (typeof resolver === 'object' && resolver.type === 'directive') {\n if (name.startsWith('v')) name = name.slice(1)\n else continue\n }\n const resolved = await (typeof resolver === 'function'\n ? resolver(name)\n : resolver.resolve(name))\n if (resolved) return normalizeImport(resolved, fullname)\n }\n}\n\nexport function resolversAddon(resolvers: Resolver[]): Addon {\n return {\n name: 'unplugin-auto-import:resolvers',\n async matchImports(names, matched) {\n if (!resolvers.length) return\n const dynamic: ImportExtended[] = []\n const sideEffects: ImportExtended[] = []\n await Promise.all(\n [...names].map(async (name) => {\n const matchedImport = matched.find((i) => i.as === name)\n if (matchedImport) {\n if ('sideEffects' in matchedImport)\n sideEffects.push(\n ...toArray((matchedImport as ImportExtended).sideEffects).map(\n (i) => normalizeImport(i, ''),\n ),\n )\n\n return\n }\n const resolved = await firstMatchedResolver(resolvers, name)\n if (resolved) dynamic.push(resolved)\n\n if (resolved?.sideEffects)\n sideEffects.push(\n ...toArray(resolved?.sideEffects).map((i) =>\n normalizeImport(i, ''),\n ),\n )\n }),\n )\n\n if (dynamic.length) {\n this.dynamicImports.push(...dynamic)\n this.invalidate()\n }\n\n if (dynamic.length || sideEffects.length)\n return [...matched, ...dynamic, ...sideEffects]\n },\n }\n}\n","import { existsSync, promises as fs } from 'node:fs'\nimport { dirname, isAbsolute, relative, resolve } from 'node:path'\nimport process from 'node:process'\nimport { slash, toArray } from '@antfu/utils'\nimport { isPackageExists } from 'local-pkg'\nimport { createUnimport, resolvePreset } from 'unimport'\nimport { presets } from '../presets'\nimport { generateBiomeLintConfigs } from './biomelintrc'\nimport { generateESLintConfigs } from './eslintrc'\nimport { resolversAddon } from './resolvers'\nimport type { Import, InlinePreset } from 'unimport'\nimport type { BiomeLintrc, ESLintrc, Options } from '../types'\n\nexport const INCLUDE_RE_LIST = [/\\.[jt]sx?$/]\nexport const EXCLUDE_RE_LIST = [/[\\\\/]node_modules[\\\\/]/, /[\\\\/]\\.git[\\\\/]/]\n\nexport function createContext(options: Options = {}, root = process.cwd()) {\n root = slash(root)\n\n const {\n dts: preferDTS = isPackageExists('typescript'),\n dtsMode = 'append',\n dtsPreserveExts = false,\n dirsScanOptions,\n dirs,\n } = options\n\n const eslintrc: ESLintrc = options.eslintrc || {}\n eslintrc.enabled = eslintrc.enabled === undefined ? false : eslintrc.enabled\n eslintrc.filepath = eslintrc.filepath || './.eslintrc-auto-import.json'\n eslintrc.globalsPropValue =\n eslintrc.globalsPropValue === undefined ? true : eslintrc.globalsPropValue\n\n const biomelintrc: BiomeLintrc = options.biomelintrc || {}\n biomelintrc.enabled = biomelintrc.enabled !== undefined\n biomelintrc.filepath =\n biomelintrc.filepath || './.biomelintrc-auto-import.json'\n\n const dumpUnimportItems =\n options.dumpUnimportItems === true\n ? './.unimport-items.json'\n : (options.dumpUnimportItems ?? false)\n\n const resolvers = options.resolvers ? [options.resolvers].flat(2) : []\n\n // When \"options.injectAtEnd\" is undefined or true, it's true.\n const injectAtEnd = options.injectAtEnd !== false\n\n const unimport = createUnimport({\n imports: [],\n presets:\n options.packagePresets?.map((p) =>\n typeof p === 'string' ? { package: p } : p,\n ) ?? [],\n dirsScanOptions: {\n ...dirsScanOptions,\n cwd: root,\n },\n dirs,\n injectAtEnd,\n parser: options.parser,\n addons: {\n addons: [\n resolversAddon(resolvers),\n {\n name: 'unplugin-auto-import:dts',\n declaration(dts) {\n return `${`\n/* eslint-disable */\n/* prettier-ignore */\n// @ts-nocheck\n// noinspection JSUnusedGlobalSymbols\n// Generated by unplugin-auto-import\n// biome-ignore lint: disable\n${dts}`.trim()}\\n`\n },\n },\n ],\n },\n })\n\n const importsPromise = flattenImports(options.imports).then((imports) => {\n if (!imports.length && !resolvers.length && !dirs?.length)\n console.warn(\n '[auto-import] plugin installed but no imports has defined, see https://github.com/antfu/unplugin-auto-import#configurations for configurations',\n )\n\n const compare = (\n left: string | undefined,\n right: NonNullable<Options['ignore'] | Options['ignoreDts']>[number],\n ) => {\n return right instanceof RegExp ? right.test(left!) : right === left\n }\n\n options.ignore?.forEach((name) => {\n const i = imports.find((i) => compare(i.as, name))\n if (i) i.disabled = true\n })\n\n options.ignoreDts?.forEach((name) => {\n const i = imports.find((i) => compare(i.as, name))\n if (i) i.dtsDisabled = true\n })\n\n return unimport.getInternalContext().replaceImports(imports)\n })\n\n const dts =\n preferDTS === false\n ? false\n : preferDTS === true\n ? resolve(root, 'auto-imports.d.ts')\n : resolve(root, preferDTS)\n\n const multilineCommentsRE = /\\/\\*.*?\\*\\//gs\n const singlelineCommentsRE = /\\/\\/.*$/gm\n const dtsReg = /declare\\s+global\\s*\\{(.*?)[\\n\\r]\\}/s\n function parseDTS(dts: string) {\n dts = dts.replace(multilineCommentsRE, '').replace(singlelineCommentsRE, '')\n\n const code = dts.match(dtsReg)?.[0]\n if (!code) return\n\n return Object.fromEntries(\n Array.from(\n code.matchAll(/['\"]?(const\\s*[^\\s'\"]+)['\"]?\\s*:\\s*(.+?)[,;\\r\\n]/g),\n ).map((i) => [i[1], i[2]]),\n )\n }\n\n async function generateDTS(file: string) {\n await importsPromise\n const dir = dirname(file)\n const originalContent = existsSync(file)\n ? await fs.readFile(file, 'utf-8')\n : ''\n const originalDTS = parseDTS(originalContent)\n const currentContent = await unimport.generateTypeDeclarations({\n resolvePath: (i) => {\n if (i.from.startsWith('.') || isAbsolute(i.from)) {\n const related = slash(\n dtsPreserveExts\n ? relative(dir, i.from)\n : relative(dir, i.from).replace(/\\.ts(x)?$/, ''),\n )\n return !related.startsWith('.') ? `./${related}` : related\n }\n return i.from\n },\n })\n\n if (dtsMode === 'append') {\n const currentDTS = parseDTS(currentContent)!\n if (originalDTS) {\n Object.assign(originalDTS, currentDTS)\n\n const dtsList = Object.keys(originalDTS)\n .sort()\n .map((k) => ` ${k}: ${originalDTS[k]}`)\n return currentContent.replace(\n dtsReg,\n () => `declare global {\\n${dtsList.join('\\n')}\\n}`,\n )\n }\n }\n\n return currentContent\n }\n\n async function generateESLint() {\n return generateESLintConfigs(await unimport.getImports(), eslintrc)\n }\n\n async function generateBiomeLint() {\n return generateBiomeLintConfigs(await unimport.getImports())\n }\n\n // eslint-disable-next-line unicorn/consistent-function-scoping\n async function writeFile(filePath: string, content = '') {\n await fs.mkdir(dirname(filePath), { recursive: true })\n return await fs.writeFile(filePath, content, 'utf-8')\n }\n\n let lastDTS: string | undefined\n let lastESLint: string | undefined\n let lastBiomeLint: string | undefined\n let lastUnimportItems: string | undefined\n\n async function writeConfigFiles() {\n const promises: any[] = []\n if (dts) {\n promises.push(\n generateDTS(dts).then((content) => {\n if (content !== lastDTS) {\n lastDTS = content\n return writeFile(dts, content)\n }\n }),\n )\n }\n if (eslintrc.enabled && eslintrc.filepath) {\n const filepath = eslintrc.filepath\n promises.push(\n generateESLint().then(async (content) => {\n if (filepath.endsWith('.cjs')) content = `module.exports = ${content}`\n else if (filepath.endsWith('.mjs') || filepath.endsWith('.js'))\n content = `export default ${content}`\n\n content = `${content}\\n`\n if (content.trim() !== lastESLint?.trim()) {\n lastESLint = content\n return writeFile(eslintrc.filepath!, content)\n }\n }),\n )\n }\n\n if (biomelintrc.enabled) {\n promises.push(\n generateBiomeLint().then((content) => {\n if (content !== lastBiomeLint) {\n lastBiomeLint = content\n return writeFile(biomelintrc.filepath!, content)\n }\n }),\n )\n }\n\n if (dumpUnimportItems) {\n promises.push(\n unimport.getImports().then((items) => {\n if (!dumpUnimportItems) return\n const content = JSON.stringify(items, null, 2)\n if (content !== lastUnimportItems) {\n lastUnimportItems = content\n return writeFile(dumpUnimportItems, content)\n }\n }),\n )\n }\n\n return Promise.all(promises)\n }\n\n return {\n writeConfigFiles,\n }\n}\n\nexport async function flattenImports(\n map: Options['imports'],\n): Promise<Import[]> {\n const promises = await Promise.all(\n toArray(map).map(async (definition) => {\n if (typeof definition === 'string') {\n if (!presets[definition])\n throw new Error(`[auto-import] preset ${definition} not found`)\n const preset = presets[definition]\n definition = preset\n }\n\n if ('from' in definition && 'imports' in definition) {\n return await resolvePreset(definition as InlinePreset)\n } else {\n const resolved: Import[] = []\n for (const mod of Object.keys(definition)) {\n for (const id of definition[mod]) {\n const meta = {\n from: mod,\n } as Import\n if (Array.isArray(id)) {\n meta.name = id[0]\n meta.as = id[1]\n } else {\n meta.name = id\n meta.as = id\n }\n resolved.push(meta)\n }\n }\n return resolved\n }\n }),\n )\n\n return promises.flat()\n}\n","import { createContext } from './core/ctx'\nimport type { NextConfig } from 'next'\nimport type { Options } from './types'\n\n/**\n * Creates a Next.js auto-import context\n */\nexport function createAutoImport(options: Options = {}) {\n const ctx = createContext(options)\n\n ctx.writeConfigFiles()\n\n return (nextConfig: NextConfig = {}): NextConfig => {\n return {\n ...nextConfig,\n experimental: {\n ...nextConfig.experimental,\n swcPlugins: [\n [\n 'swc-plugin-auto-import',\n {\n imports: options.imports,\n },\n ],\n ...(nextConfig.experimental?.swcPlugins ?? []),\n ],\n },\n }\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.mjs","names":["react","reactDom","dynamic: ImportExtended[]","sideEffects: ImportExtended[]","dts","i","fs","lastDTS: string | undefined","promises: any[]","promises","resolved: Import[]"],"sources":["../src/presets/react.ts","../src/presets/react-dom.ts","../src/presets/index.ts","../src/core/resolvers.ts","../src/core/ctx.ts","../src/index.ts"],"sourcesContent":["import type { ImportsMap } from '../types'\n\nexport const CommonReactAPI = [\n 'useState',\n 'useCallback',\n 'useMemo',\n 'useEffect',\n 'useRef',\n 'useContext',\n 'useReducer',\n 'useImperativeHandle',\n 'useDebugValue',\n 'useDeferredValue',\n 'useLayoutEffect',\n 'useTransition',\n 'startTransition',\n 'useSyncExternalStore',\n 'useInsertionEffect',\n 'useId',\n 'lazy',\n 'memo',\n 'createRef',\n 'forwardRef',\n] as const\n\nexport default {\n react: [\n ...CommonReactAPI,\n 'cache',\n 'cacheSignal',\n 'createContext',\n 'use',\n 'useOptimistic',\n 'useEffectEvent',\n 'useActionState',\n 'Fragment',\n 'Suspense',\n 'Activity',\n ],\n} as const satisfies ImportsMap\n","import type { ImportsMap } from '../types'\n\nexport default {\n 'react-dom': [\n 'useFormStatus',\n 'createPortal',\n 'flushSync',\n 'preconnect',\n 'prefetchDNS',\n 'preinit',\n 'preinitModule',\n 'preload',\n 'preloadModule',\n ],\n} as const satisfies ImportsMap\n","import react from './react'\nimport reactDom from './react-dom'\n\nexport const presets = {\n 'react': react,\n 'react-dom': reactDom,\n}\n\nexport type PresetName = keyof typeof presets\n","import { toArray } from '@antfu/utils'\nimport type { Addon, Import } from 'unimport'\nimport type {\n ImportExtended,\n ImportLegacy,\n Resolver,\n ResolverResult,\n} from '../types'\n\nexport function normalizeImport(\n info: Import | ResolverResult | ImportExtended | ImportLegacy | string,\n name: string,\n): ImportExtended {\n if (typeof info === 'string') {\n return {\n name: 'default',\n as: name,\n from: info,\n }\n }\n if ('path' in info) {\n return {\n from: info.path,\n as: info.name,\n name: info.importName!,\n sideEffects: info.sideEffects,\n }\n }\n return {\n name,\n as: name,\n ...info,\n }\n}\n\nexport async function firstMatchedResolver(\n resolvers: Resolver[],\n fullname: string,\n) {\n let name = fullname\n for (const resolver of resolvers) {\n if (typeof resolver === 'object' && resolver.type === 'directive') {\n if (name.startsWith('v')) name = name.slice(1)\n else continue\n }\n const resolved = await (typeof resolver === 'function'\n ? resolver(name)\n : resolver.resolve(name))\n if (resolved) return normalizeImport(resolved, fullname)\n }\n}\n\nexport function resolversAddon(resolvers: Resolver[]): Addon {\n return {\n name: 'unplugin-auto-import:resolvers',\n async matchImports(names, matched) {\n if (!resolvers.length) return\n const dynamic: ImportExtended[] = []\n const sideEffects: ImportExtended[] = []\n await Promise.all(\n [...names].map(async (name) => {\n const matchedImport = matched.find((i) => i.as === name)\n if (matchedImport) {\n if ('sideEffects' in matchedImport)\n sideEffects.push(\n ...toArray((matchedImport as ImportExtended).sideEffects).map(\n (i) => normalizeImport(i, ''),\n ),\n )\n\n return\n }\n const resolved = await firstMatchedResolver(resolvers, name)\n if (resolved) dynamic.push(resolved)\n\n if (resolved?.sideEffects)\n sideEffects.push(\n ...toArray(resolved?.sideEffects).map((i) =>\n normalizeImport(i, ''),\n ),\n )\n }),\n )\n\n if (dynamic.length) {\n this.dynamicImports.push(...dynamic)\n this.invalidate()\n }\n\n if (dynamic.length || sideEffects.length)\n return [...matched, ...dynamic, ...sideEffects]\n },\n }\n}\n","import { promises as fs } from 'node:fs'\nimport { dirname, isAbsolute, relative, resolve } from 'node:path'\nimport process from 'node:process'\nimport { slash, toArray } from '@antfu/utils'\nimport { isPackageExists } from 'local-pkg'\nimport { createUnimport, resolvePreset } from 'unimport'\nimport { presets } from '../presets'\nimport { resolversAddon } from './resolvers'\nimport type { Import, InlinePreset } from 'unimport'\nimport type { Options } from '../types'\n\nexport const INCLUDE_RE_LIST = [/\\.[jt]sx?$/]\nexport const EXCLUDE_RE_LIST = [/[\\\\/]node_modules[\\\\/]/, /[\\\\/]\\.git[\\\\/]/]\n\nexport function createContext(options: Options = {}, root = process.cwd()) {\n root = slash(root)\n\n const {\n dts: preferDTS = isPackageExists('typescript'),\n dtsPreserveExts = false,\n dirsScanOptions,\n dirs,\n } = options\n\n const resolvers = options.resolvers ? [options.resolvers].flat(2) : []\n\n // When \"options.injectAtEnd\" is undefined or true, it's true.\n const injectAtEnd = options.injectAtEnd !== false\n\n const unimport = createUnimport({\n imports: [],\n presets:\n options.packagePresets?.map((p) =>\n typeof p === 'string' ? { package: p } : p,\n ) ?? [],\n dirsScanOptions: {\n ...dirsScanOptions,\n cwd: root,\n },\n dirs,\n injectAtEnd,\n parser: options.parser,\n addons: {\n addons: [\n resolversAddon(resolvers),\n {\n name: 'unplugin-auto-import:dts',\n declaration(dts) {\n return `${`\n/* eslint-disable */\n/* prettier-ignore */\n// @ts-nocheck\n// noinspection JSUnusedGlobalSymbols\n// Generated by unplugin-auto-import\n// biome-ignore lint: disable\n${dts}`.trim()}\\n`\n },\n },\n ],\n },\n })\n\n const importsPromise = flattenImports(options.imports).then((imports) => {\n if (!imports.length && !resolvers.length && !dirs?.length)\n console.warn(\n '[auto-import] plugin installed but no imports has defined, see https://github.com/antfu/unplugin-auto-import#configurations for configurations',\n )\n\n const compare = (\n left: string | undefined,\n right: NonNullable<Options['ignore'] | Options['ignoreDts']>[number],\n ) => {\n return right instanceof RegExp ? right.test(left!) : right === left\n }\n\n options.ignore?.forEach((name) => {\n const i = imports.find((i) => compare(i.as, name))\n if (i) i.disabled = true\n })\n\n options.ignoreDts?.forEach((name) => {\n const i = imports.find((i) => compare(i.as, name))\n if (i) i.dtsDisabled = true\n })\n\n return unimport.getInternalContext().replaceImports(imports)\n })\n\n const dts =\n preferDTS === false\n ? false\n : preferDTS === true\n ? resolve(root, 'auto-imports.d.ts')\n : resolve(root, preferDTS)\n\n async function generateDTS(file: string) {\n await importsPromise\n const dir = dirname(file)\n const currentContent = await unimport.generateTypeDeclarations({\n resolvePath: (i) => {\n if (i.from.startsWith('.') || isAbsolute(i.from)) {\n const related = slash(\n dtsPreserveExts\n ? relative(dir, i.from)\n : relative(dir, i.from).replace(/\\.ts(x)?$/, ''),\n )\n return !related.startsWith('.') ? `./${related}` : related\n }\n return i.from\n },\n })\n\n return currentContent\n }\n\n // eslint-disable-next-line unicorn/consistent-function-scoping\n async function writeFile(filePath: string, content = '') {\n await fs.mkdir(dirname(filePath), { recursive: true })\n return await fs.writeFile(filePath, content, 'utf-8')\n }\n\n let lastDTS: string | undefined\n\n async function writeConfigFiles() {\n const promises: any[] = []\n if (dts) {\n promises.push(\n generateDTS(dts).then((content) => {\n if (content !== lastDTS) {\n lastDTS = content\n return writeFile(dts, content)\n }\n }),\n )\n }\n\n return Promise.all(promises)\n }\n\n return {\n writeConfigFiles,\n }\n}\n\nexport async function flattenImports(\n map: Options['imports'],\n): Promise<Import[]> {\n const promises = await Promise.all(\n toArray(map).map(async (definition) => {\n if (typeof definition === 'string') {\n if (!presets[definition])\n throw new Error(`[auto-import] preset ${definition} not found`)\n const preset = presets[definition]\n definition = preset\n }\n\n if ('from' in definition && 'imports' in definition) {\n return await resolvePreset(definition as InlinePreset)\n } else {\n const resolved: Import[] = []\n for (const mod of Object.keys(definition)) {\n for (const id of definition[mod]) {\n const meta = {\n from: mod,\n } as Import\n if (Array.isArray(id)) {\n meta.name = id[0]\n meta.as = id[1]\n } else {\n meta.name = id\n meta.as = id\n }\n resolved.push(meta)\n }\n }\n return resolved\n }\n }),\n )\n\n return promises.flat()\n}\n","import { createContext } from './core/ctx'\nimport type { NextConfig } from 'next'\nimport type { Options } from './types'\n\n/**\n * Creates a Next.js auto-import context\n */\nexport function createAutoImport(options: Options = {}) {\n const ctx = createContext(options)\n\n ctx.writeConfigFiles()\n\n return (nextConfig: NextConfig = {}): NextConfig => {\n return {\n ...nextConfig,\n experimental: {\n ...nextConfig.experimental,\n swcPlugins: [\n [\n 'swc-plugin-auto-import',\n {\n imports: options.imports,\n debug: options.debug,\n },\n ],\n ...(nextConfig.experimental?.swcPlugins ?? []),\n ],\n },\n }\n }\n}\n"],"mappings":";;;;;;;;AAEA,MAAa,iBAAiB;CAC5B;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACD;AAED,oBAAe,EACb,OAAO;CACL,GAAG;CACH;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACD,EACF;;;;ACrCD,wBAAe,EACb,aAAa;CACX;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACD,EACF;;;;ACXD,MAAa,UAAU;CACrB,SAASA;CACT,aAAaC;CACd;;;;ACGD,SAAgB,gBACd,MACA,MACgB;AAChB,KAAI,OAAO,SAAS,SAClB,QAAO;EACL,MAAM;EACN,IAAI;EACJ,MAAM;EACP;AAEH,KAAI,UAAU,KACZ,QAAO;EACL,MAAM,KAAK;EACX,IAAI,KAAK;EACT,MAAM,KAAK;EACX,aAAa,KAAK;EACnB;AAEH,QAAO;EACL;EACA,IAAI;EACJ,GAAG;EACJ;;AAGH,eAAsB,qBACpB,WACA,UACA;CACA,IAAI,OAAO;AACX,MAAK,MAAM,YAAY,WAAW;AAChC,MAAI,OAAO,aAAa,YAAY,SAAS,SAAS,YACpD,KAAI,KAAK,WAAW,IAAI,CAAE,QAAO,KAAK,MAAM,EAAE;MACzC;EAEP,MAAM,WAAW,OAAO,OAAO,aAAa,aACxC,SAAS,KAAK,GACd,SAAS,QAAQ,KAAK;AAC1B,MAAI,SAAU,QAAO,gBAAgB,UAAU,SAAS;;;AAI5D,SAAgB,eAAe,WAA8B;AAC3D,QAAO;EACL,MAAM;EACN,MAAM,aAAa,OAAO,SAAS;AACjC,OAAI,CAAC,UAAU,OAAQ;GACvB,MAAMC,UAA4B,EAAE;GACpC,MAAMC,cAAgC,EAAE;AACxC,SAAM,QAAQ,IACZ,CAAC,GAAG,MAAM,CAAC,IAAI,OAAO,SAAS;IAC7B,MAAM,gBAAgB,QAAQ,MAAM,MAAM,EAAE,OAAO,KAAK;AACxD,QAAI,eAAe;AACjB,SAAI,iBAAiB,cACnB,aAAY,KACV,GAAG,QAAS,cAAiC,YAAY,CAAC,KACvD,MAAM,gBAAgB,GAAG,GAAG,CAC9B,CACF;AAEH;;IAEF,MAAM,WAAW,MAAM,qBAAqB,WAAW,KAAK;AAC5D,QAAI,SAAU,SAAQ,KAAK,SAAS;AAEpC,QAAI,UAAU,YACZ,aAAY,KACV,GAAG,QAAQ,UAAU,YAAY,CAAC,KAAK,MACrC,gBAAgB,GAAG,GAAG,CACvB,CACF;KACH,CACH;AAED,OAAI,QAAQ,QAAQ;AAClB,SAAK,eAAe,KAAK,GAAG,QAAQ;AACpC,SAAK,YAAY;;AAGnB,OAAI,QAAQ,UAAU,YAAY,OAChC,QAAO;IAAC,GAAG;IAAS,GAAG;IAAS,GAAG;IAAY;;EAEpD;;;;;AC9EH,SAAgB,cAAc,UAAmB,EAAE,EAAE,OAAO,QAAQ,KAAK,EAAE;AACzE,QAAO,MAAM,KAAK;CAElB,MAAM,EACJ,KAAK,YAAY,gBAAgB,aAAa,EAC9C,kBAAkB,OAClB,iBACA,SACE;CAEJ,MAAM,YAAY,QAAQ,YAAY,CAAC,QAAQ,UAAU,CAAC,KAAK,EAAE,GAAG,EAAE;CAGtE,MAAM,cAAc,QAAQ,gBAAgB;CAE5C,MAAM,WAAW,eAAe;EAC9B,SAAS,EAAE;EACX,SACE,QAAQ,gBAAgB,KAAK,MAC3B,OAAO,MAAM,WAAW,EAAE,SAAS,GAAG,GAAG,EAC1C,IAAI,EAAE;EACT,iBAAiB;GACf,GAAG;GACH,KAAK;GACN;EACD;EACA;EACA,QAAQ,QAAQ;EAChB,QAAQ,EACN,QAAQ,CACN,eAAe,UAAU,EACzB;GACE,MAAM;GACN,YAAY,OAAK;AACf,WAAO,GAAG;;;;;;;EAOpBC,QAAM,MAAM,CAAC;;GAEN,CACF,EACF;EACF,CAAC;CAEF,MAAM,iBAAiB,eAAe,QAAQ,QAAQ,CAAC,MAAM,YAAY;AACvE,MAAI,CAAC,QAAQ,UAAU,CAAC,UAAU,UAAU,CAAC,MAAM,OACjD,SAAQ,KACN,iJACD;EAEH,MAAM,WACJ,MACA,UACG;AACH,UAAO,iBAAiB,SAAS,MAAM,KAAK,KAAM,GAAG,UAAU;;AAGjE,UAAQ,QAAQ,SAAS,SAAS;GAChC,MAAM,IAAI,QAAQ,MAAM,QAAM,QAAQC,IAAE,IAAI,KAAK,CAAC;AAClD,OAAI,EAAG,GAAE,WAAW;IACpB;AAEF,UAAQ,WAAW,SAAS,SAAS;GACnC,MAAM,IAAI,QAAQ,MAAM,QAAM,QAAQA,IAAE,IAAI,KAAK,CAAC;AAClD,OAAI,EAAG,GAAE,cAAc;IACvB;AAEF,SAAO,SAAS,oBAAoB,CAAC,eAAe,QAAQ;GAC5D;CAEF,MAAM,MACJ,cAAc,QACV,QACA,cAAc,OACZ,QAAQ,MAAM,oBAAoB,GAClC,QAAQ,MAAM,UAAU;CAEhC,eAAe,YAAY,MAAc;AACvC,QAAM;EACN,MAAM,MAAM,QAAQ,KAAK;AAezB,SAduB,MAAM,SAAS,yBAAyB,EAC7D,cAAc,MAAM;AAClB,OAAI,EAAE,KAAK,WAAW,IAAI,IAAI,WAAW,EAAE,KAAK,EAAE;IAChD,MAAM,UAAU,MACd,kBACI,SAAS,KAAK,EAAE,KAAK,GACrB,SAAS,KAAK,EAAE,KAAK,CAAC,QAAQ,aAAa,GAAG,CACnD;AACD,WAAO,CAAC,QAAQ,WAAW,IAAI,GAAG,KAAK,YAAY;;AAErD,UAAO,EAAE;KAEZ,CAAC;;CAMJ,eAAe,UAAU,UAAkB,UAAU,IAAI;AACvD,QAAMC,SAAG,MAAM,QAAQ,SAAS,EAAE,EAAE,WAAW,MAAM,CAAC;AACtD,SAAO,MAAMA,SAAG,UAAU,UAAU,SAAS,QAAQ;;CAGvD,IAAIC;CAEJ,eAAe,mBAAmB;EAChC,MAAMC,aAAkB,EAAE;AAC1B,MAAI,IACF,YAAS,KACP,YAAY,IAAI,CAAC,MAAM,YAAY;AACjC,OAAI,YAAY,SAAS;AACvB,cAAU;AACV,WAAO,UAAU,KAAK,QAAQ;;IAEhC,CACH;AAGH,SAAO,QAAQ,IAAIC,WAAS;;AAG9B,QAAO,EACL,kBACD;;AAGH,eAAsB,eACpB,KACmB;AAkCnB,SAjCiB,MAAM,QAAQ,IAC7B,QAAQ,IAAI,CAAC,IAAI,OAAO,eAAe;AACrC,MAAI,OAAO,eAAe,UAAU;AAClC,OAAI,CAAC,QAAQ,YACX,OAAM,IAAI,MAAM,wBAAwB,WAAW,YAAY;AAEjE,gBADe,QAAQ;;AAIzB,MAAI,UAAU,cAAc,aAAa,WACvC,QAAO,MAAM,cAAc,WAA2B;OACjD;GACL,MAAMC,WAAqB,EAAE;AAC7B,QAAK,MAAM,OAAO,OAAO,KAAK,WAAW,CACvC,MAAK,MAAM,MAAM,WAAW,MAAM;IAChC,MAAM,OAAO,EACX,MAAM,KACP;AACD,QAAI,MAAM,QAAQ,GAAG,EAAE;AACrB,UAAK,OAAO,GAAG;AACf,UAAK,KAAK,GAAG;WACR;AACL,UAAK,OAAO;AACZ,UAAK,KAAK;;AAEZ,aAAS,KAAK,KAAK;;AAGvB,UAAO;;GAET,CACH,EAEe,MAAM;;;;;;;;AC7KxB,SAAgB,iBAAiB,UAAmB,EAAE,EAAE;AAGtD,CAFY,cAAc,QAAQ,CAE9B,kBAAkB;AAEtB,SAAQ,aAAyB,EAAE,KAAiB;AAClD,SAAO;GACL,GAAG;GACH,cAAc;IACZ,GAAG,WAAW;IACd,YAAY,CACV,CACE,0BACA;KACE,SAAS,QAAQ;KACjB,OAAO,QAAQ;KAChB,CACF,EACD,GAAI,WAAW,cAAc,cAAc,EAAE,CAC9C;IACF;GACF"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "next-auto-import",
3
3
  "type": "module",
4
- "version": "0.0.1",
4
+ "version": "0.0.2",
5
5
  "description": "Auto-import generator for Next.js projects",
6
6
  "author": "Brendan Dash <me@aiwan.run> (https://aiwan.run)",
7
7
  "license": "MIT",
@@ -34,7 +34,7 @@
34
34
  ],
35
35
  "peerDependencies": {
36
36
  "next": "^16.1.1",
37
- "swc-plugin-auto-import": "0.0.2"
37
+ "swc-plugin-auto-import": "0.0.5"
38
38
  },
39
39
  "dependencies": {
40
40
  "@antfu/utils": "^9.3.0",
@@ -64,7 +64,7 @@
64
64
  "dev": "node ./src/index.ts",
65
65
  "build": "tsdown",
66
66
  "test": "vitest",
67
- "release": "pnpm build && bumpp && pnpm publish",
67
+ "release": "pnpm build && bumpp",
68
68
  "typecheck": "tsc --noEmit",
69
69
  "lint": "eslint .",
70
70
  "lint:fix": "eslint . --fix"
package/src/core/ctx.ts CHANGED
@@ -1,15 +1,13 @@
1
- import { existsSync, promises as fs } from 'node:fs'
1
+ import { promises as fs } from 'node:fs'
2
2
  import { dirname, isAbsolute, relative, resolve } from 'node:path'
3
3
  import process from 'node:process'
4
4
  import { slash, toArray } from '@antfu/utils'
5
5
  import { isPackageExists } from 'local-pkg'
6
6
  import { createUnimport, resolvePreset } from 'unimport'
7
7
  import { presets } from '../presets'
8
- import { generateBiomeLintConfigs } from './biomelintrc'
9
- import { generateESLintConfigs } from './eslintrc'
10
8
  import { resolversAddon } from './resolvers'
11
9
  import type { Import, InlinePreset } from 'unimport'
12
- import type { BiomeLintrc, ESLintrc, Options } from '../types'
10
+ import type { Options } from '../types'
13
11
 
14
12
  export const INCLUDE_RE_LIST = [/\.[jt]sx?$/]
15
13
  export const EXCLUDE_RE_LIST = [/[\\/]node_modules[\\/]/, /[\\/]\.git[\\/]/]
@@ -19,28 +17,11 @@ export function createContext(options: Options = {}, root = process.cwd()) {
19
17
 
20
18
  const {
21
19
  dts: preferDTS = isPackageExists('typescript'),
22
- dtsMode = 'append',
23
20
  dtsPreserveExts = false,
24
21
  dirsScanOptions,
25
22
  dirs,
26
23
  } = options
27
24
 
28
- const eslintrc: ESLintrc = options.eslintrc || {}
29
- eslintrc.enabled = eslintrc.enabled === undefined ? false : eslintrc.enabled
30
- eslintrc.filepath = eslintrc.filepath || './.eslintrc-auto-import.json'
31
- eslintrc.globalsPropValue =
32
- eslintrc.globalsPropValue === undefined ? true : eslintrc.globalsPropValue
33
-
34
- const biomelintrc: BiomeLintrc = options.biomelintrc || {}
35
- biomelintrc.enabled = biomelintrc.enabled !== undefined
36
- biomelintrc.filepath =
37
- biomelintrc.filepath || './.biomelintrc-auto-import.json'
38
-
39
- const dumpUnimportItems =
40
- options.dumpUnimportItems === true
41
- ? './.unimport-items.json'
42
- : (options.dumpUnimportItems ?? false)
43
-
44
25
  const resolvers = options.resolvers ? [options.resolvers].flat(2) : []
45
26
 
46
27
  // When "options.injectAtEnd" is undefined or true, it's true.
@@ -112,29 +93,9 @@ ${dts}`.trim()}\n`
112
93
  ? resolve(root, 'auto-imports.d.ts')
113
94
  : resolve(root, preferDTS)
114
95
 
115
- const multilineCommentsRE = /\/\*.*?\*\//gs
116
- const singlelineCommentsRE = /\/\/.*$/gm
117
- const dtsReg = /declare\s+global\s*\{(.*?)[\n\r]\}/s
118
- function parseDTS(dts: string) {
119
- dts = dts.replace(multilineCommentsRE, '').replace(singlelineCommentsRE, '')
120
-
121
- const code = dts.match(dtsReg)?.[0]
122
- if (!code) return
123
-
124
- return Object.fromEntries(
125
- Array.from(
126
- code.matchAll(/['"]?(const\s*[^\s'"]+)['"]?\s*:\s*(.+?)[,;\r\n]/g),
127
- ).map((i) => [i[1], i[2]]),
128
- )
129
- }
130
-
131
96
  async function generateDTS(file: string) {
132
97
  await importsPromise
133
98
  const dir = dirname(file)
134
- const originalContent = existsSync(file)
135
- ? await fs.readFile(file, 'utf-8')
136
- : ''
137
- const originalDTS = parseDTS(originalContent)
138
99
  const currentContent = await unimport.generateTypeDeclarations({
139
100
  resolvePath: (i) => {
140
101
  if (i.from.startsWith('.') || isAbsolute(i.from)) {
@@ -149,32 +110,9 @@ ${dts}`.trim()}\n`
149
110
  },
150
111
  })
151
112
 
152
- if (dtsMode === 'append') {
153
- const currentDTS = parseDTS(currentContent)!
154
- if (originalDTS) {
155
- Object.assign(originalDTS, currentDTS)
156
-
157
- const dtsList = Object.keys(originalDTS)
158
- .sort()
159
- .map((k) => ` ${k}: ${originalDTS[k]}`)
160
- return currentContent.replace(
161
- dtsReg,
162
- () => `declare global {\n${dtsList.join('\n')}\n}`,
163
- )
164
- }
165
- }
166
-
167
113
  return currentContent
168
114
  }
169
115
 
170
- async function generateESLint() {
171
- return generateESLintConfigs(await unimport.getImports(), eslintrc)
172
- }
173
-
174
- async function generateBiomeLint() {
175
- return generateBiomeLintConfigs(await unimport.getImports())
176
- }
177
-
178
116
  // eslint-disable-next-line unicorn/consistent-function-scoping
179
117
  async function writeFile(filePath: string, content = '') {
180
118
  await fs.mkdir(dirname(filePath), { recursive: true })
@@ -182,9 +120,6 @@ ${dts}`.trim()}\n`
182
120
  }
183
121
 
184
122
  let lastDTS: string | undefined
185
- let lastESLint: string | undefined
186
- let lastBiomeLint: string | undefined
187
- let lastUnimportItems: string | undefined
188
123
 
189
124
  async function writeConfigFiles() {
190
125
  const promises: any[] = []
@@ -198,46 +133,6 @@ ${dts}`.trim()}\n`
198
133
  }),
199
134
  )
200
135
  }
201
- if (eslintrc.enabled && eslintrc.filepath) {
202
- const filepath = eslintrc.filepath
203
- promises.push(
204
- generateESLint().then(async (content) => {
205
- if (filepath.endsWith('.cjs')) content = `module.exports = ${content}`
206
- else if (filepath.endsWith('.mjs') || filepath.endsWith('.js'))
207
- content = `export default ${content}`
208
-
209
- content = `${content}\n`
210
- if (content.trim() !== lastESLint?.trim()) {
211
- lastESLint = content
212
- return writeFile(eslintrc.filepath!, content)
213
- }
214
- }),
215
- )
216
- }
217
-
218
- if (biomelintrc.enabled) {
219
- promises.push(
220
- generateBiomeLint().then((content) => {
221
- if (content !== lastBiomeLint) {
222
- lastBiomeLint = content
223
- return writeFile(biomelintrc.filepath!, content)
224
- }
225
- }),
226
- )
227
- }
228
-
229
- if (dumpUnimportItems) {
230
- promises.push(
231
- unimport.getImports().then((items) => {
232
- if (!dumpUnimportItems) return
233
- const content = JSON.stringify(items, null, 2)
234
- if (content !== lastUnimportItems) {
235
- lastUnimportItems = content
236
- return writeFile(dumpUnimportItems, content)
237
- }
238
- }),
239
- )
240
- }
241
136
 
242
137
  return Promise.all(promises)
243
138
  }
package/src/index.ts CHANGED
@@ -20,6 +20,7 @@ export function createAutoImport(options: Options = {}) {
20
20
  'swc-plugin-auto-import',
21
21
  {
22
22
  imports: options.imports,
23
+ debug: options.debug,
23
24
  },
24
25
  ],
25
26
  ...(nextConfig.experimental?.swcPlugins ?? []),
package/src/types.ts CHANGED
@@ -6,7 +6,6 @@ import type {
6
6
  ScanDirExportsOptions,
7
7
  UnimportOptions,
8
8
  } from 'unimport'
9
- import type { FilterPattern } from 'unplugin-utils'
10
9
  import type { PresetName } from './presets'
11
10
 
12
11
  export interface ImportLegacy {
@@ -109,6 +108,13 @@ export interface BiomeLintrc {
109
108
  }
110
109
 
111
110
  export interface Options {
111
+ /**
112
+ * Enable debug mode
113
+ *
114
+ * @default false
115
+ */
116
+ debug?: boolean
117
+
112
118
  /**
113
119
  * Preset names or custom imports map
114
120
  *
@@ -175,68 +181,12 @@ export interface Options {
175
181
  */
176
182
  dts?: string | boolean
177
183
 
178
- /**
179
- * Mode for generating the .d.ts file.
180
- * - `overwrite`: overwrite the whole existing .d.ts file with the new type definitions.
181
- * - `append`: only append the new type definitions to the existing .d.ts file, means the existing type definitions will be kept.
182
- * @default 'append'
183
- */
184
- dtsMode?: 'overwrite' | 'append'
185
-
186
184
  /**
187
185
  * Preserve the original file extensions in the generated .d.ts file.
188
186
  * Set to `true` to keep the extensions for .ts and .tsx files.
189
187
  * @default false
190
188
  */
191
189
  dtsPreserveExts?: boolean
192
-
193
- /**
194
- * Set default export alias by file name
195
- *
196
- * @default false
197
- */
198
- defaultExportByFilename?: boolean
199
-
200
- /**
201
- * Rules to include transforming target.
202
- *
203
- * @default [/\.[jt]sx?$/, /\.astro$/, /\.vue$/, /\.vue\?vue/, /\.vue\.[tj]sx?\?vue/, /\.svelte$/]
204
- */
205
- include?: FilterPattern
206
-
207
- /**
208
- * Rules to exclude transforming target.
209
- *
210
- * @default [/[\\/]node_modules[\\/]/, /[\\/]\.git[\\/]/]
211
- */
212
- exclude?: FilterPattern
213
-
214
- /**
215
- * Generate corresponding .eslintrc-auto-import.json file.
216
- */
217
- eslintrc?: ESLintrc
218
-
219
- /**
220
- * Generate corresponding .biomelintrc.json file.
221
- */
222
- biomelintrc?: BiomeLintrc
223
-
224
- /**
225
- * Save unimport items into a JSON file for other tools to consume.
226
- * Provide a filepath to save the JSON file.
227
- *
228
- * When set to `true`, it will save to `./.unimport-items.json`
229
- *
230
- * @default false
231
- */
232
- dumpUnimportItems?: boolean | string
233
-
234
- /**
235
- * Include auto-imported packages in Vite's `optimizeDeps` option
236
- *
237
- * @default true
238
- */
239
- viteOptimizeDeps?: boolean
240
190
  }
241
191
 
242
192
  export { PresetName }