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 +6 -4
- package/dist/index.cjs +6 -82
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +3 -75
- package/dist/index.d.cts.map +1 -1
- package/dist/index.d.mts +3 -75
- package/dist/index.d.mts.map +1 -1
- package/dist/index.mjs +7 -83
- package/dist/index.mjs.map +1 -1
- package/package.json +3 -3
- package/src/core/ctx.ts +2 -107
- package/src/index.ts +1 -0
- package/src/types.ts +7 -57
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
|
-
##
|
|
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"),
|
|
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
|
-
|
|
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", {
|
|
265
|
+
swcPlugins: [["swc-plugin-auto-import", {
|
|
266
|
+
imports: options.imports,
|
|
267
|
+
debug: options.debug
|
|
268
|
+
}], ...nextConfig.experimental?.swcPlugins ?? []]
|
|
345
269
|
}
|
|
346
270
|
};
|
|
347
271
|
};
|
package/dist/index.cjs.map
CHANGED
|
@@ -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":"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"}
|
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
|
-
|
|
51
|
-
interface ESLintrc {
|
|
52
|
-
/**
|
|
53
|
-
* @default false
|
|
54
|
-
*/
|
|
55
|
-
enabled?: boolean;
|
|
49
|
+
interface Options {
|
|
56
50
|
/**
|
|
57
|
-
*
|
|
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
|
-
|
|
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
|
package/dist/index.d.cts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.cts","names":[],"sources":["../src/presets/index.ts","../src/types.ts","../src/index.ts"],"sourcesContent":[],"mappings":"
|
|
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
|
-
|
|
51
|
-
interface ESLintrc {
|
|
52
|
-
/**
|
|
53
|
-
* @default false
|
|
54
|
-
*/
|
|
55
|
-
enabled?: boolean;
|
|
49
|
+
interface Options {
|
|
56
50
|
/**
|
|
57
|
-
*
|
|
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
|
-
|
|
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
|
package/dist/index.d.mts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.mts","names":[],"sources":["../src/presets/index.ts","../src/types.ts","../src/index.ts"],"sourcesContent":[],"mappings":"
|
|
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 {
|
|
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"),
|
|
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
|
-
|
|
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", {
|
|
237
|
+
swcPlugins: [["swc-plugin-auto-import", {
|
|
238
|
+
imports: options.imports,
|
|
239
|
+
debug: options.debug
|
|
240
|
+
}], ...nextConfig.experimental?.swcPlugins ?? []]
|
|
317
241
|
}
|
|
318
242
|
};
|
|
319
243
|
};
|
package/dist/index.mjs.map
CHANGED
|
@@ -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":"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"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "next-auto-import",
|
|
3
3
|
"type": "module",
|
|
4
|
-
"version": "0.0.
|
|
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.
|
|
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
|
|
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 {
|
|
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 {
|
|
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
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 }
|