From 189bb090e34b7f8f01874ad83bb68c8740c41461 Mon Sep 17 00:00:00 2001 From: Anthony Fu Date: Tue, 26 Apr 2022 21:05:15 +0800 Subject: [PATCH 1/2] fix: clearup auto imports on regenerate --- packages/kit/package.json | 2 +- packages/nuxt/package.json | 2 +- packages/nuxt/src/auto-imports/composables.ts | 60 ------------------- packages/nuxt/src/auto-imports/module.ts | 10 ++-- yarn.lock | 21 ++++++- 5 files changed, 26 insertions(+), 69 deletions(-) delete mode 100644 packages/nuxt/src/auto-imports/composables.ts diff --git a/packages/kit/package.json b/packages/kit/package.json index 7f4ec382b9c..97b0dba79a5 100644 --- a/packages/kit/package.json +++ b/packages/kit/package.json @@ -29,7 +29,7 @@ "scule": "^0.2.1", "semver": "^7.3.7", "unctx": "^1.1.4", - "unimport": "^0.1.6", + "unimport": "^0.1.7", "untyped": "^0.4.4" }, "devDependencies": { diff --git a/packages/nuxt/package.json b/packages/nuxt/package.json index 70f79de6271..c06b46f7268 100644 --- a/packages/nuxt/package.json +++ b/packages/nuxt/package.json @@ -61,7 +61,7 @@ "ufo": "^0.8.3", "unctx": "^1.1.4", "unenv": "^0.4.6", - "unimport": "^0.1.6", + "unimport": "^0.1.7", "unplugin": "^0.6.2", "untyped": "^0.4.4", "vue": "^3.2.33", diff --git a/packages/nuxt/src/auto-imports/composables.ts b/packages/nuxt/src/auto-imports/composables.ts deleted file mode 100644 index a5ec50cae5d..00000000000 --- a/packages/nuxt/src/auto-imports/composables.ts +++ /dev/null @@ -1,60 +0,0 @@ -import { promises as fsp, existsSync } from 'node:fs' -import { parse as parsePath } from 'pathe' -import { findExports } from 'mlly' -import { camelCase } from 'scule' -import { resolveFiles } from '@nuxt/kit' -import { Unimport } from 'unimport' - -export async function scanForComposables (dir: string | string[], ctx: Unimport) { - const performScan = async (entry: string) => { - const files = await resolveFiles(entry, [ - '*.{ts,js,mjs,cjs,mts,cts}', - '*/index.{ts,js,mjs,cjs,mts,cts}' - ]) - - await ctx.modifyDynamicImports(async (dynamicImports) => { - await Promise.all( - files.map(async (path) => { - // Remove original entries from the same import (for build watcher) - filterInPlace(dynamicImports, i => i.from !== path) - - const code = await fsp.readFile(path, 'utf-8') - const exports = findExports(code) - const defaultExport = exports.find(i => i.type === 'default') - - if (defaultExport) { - let name = parsePath(path).name - if (name === 'index') { - name = parsePath(path.split('/').slice(0, -1).join('/')).name - } - dynamicImports.push({ name: 'default', as: camelCase(name), from: path }) - } - for (const exp of exports) { - if (exp.type === 'named') { - for (const name of exp.names) { - dynamicImports.push({ name, as: name, from: path }) - } - } else if (exp.type === 'declaration') { - dynamicImports.push({ name: exp.name, as: exp.name, from: path }) - } - } - }) - ) - }) - } - - for (const entry of Array.isArray(dir) ? dir : [dir]) { - if (!existsSync(entry)) { continue } - - await performScan(entry) - } -} - -function filterInPlace (arr: T[], predicate: (v: T) => any) { - let i = arr.length - while (i--) { - if (!predicate(arr[i])) { - arr.splice(i, 1) - } - } -} diff --git a/packages/nuxt/src/auto-imports/module.ts b/packages/nuxt/src/auto-imports/module.ts index 308d5445f12..532107b9b26 100644 --- a/packages/nuxt/src/auto-imports/module.ts +++ b/packages/nuxt/src/auto-imports/module.ts @@ -1,10 +1,9 @@ import { addVitePlugin, addWebpackPlugin, defineNuxtModule, addTemplate, resolveAlias, useNuxt, addPluginTemplate, logger } from '@nuxt/kit' import { isAbsolute, join, relative, resolve, normalize } from 'pathe' -import { createUnimport, Import, toImports, Unimport } from 'unimport' +import { createUnimport, Import, scanDirExports, toImports, Unimport } from 'unimport' import { AutoImportsOptions, ImportPresetWithDeprecation } from '@nuxt/schema' import { TransformPlugin } from './transform' import { defaultPresets } from './presets' -import { scanForComposables } from './composables' export default defineNuxtModule>({ meta: { @@ -79,11 +78,12 @@ export default defineNuxtModule>({ } const regenerateAutoImports = async () => { - // Scan composables/ - await scanForComposables(composablesDirs, ctx) - // Allow modules extending + ctx.clearDynamicImports() await ctx.modifyDynamicImports(async (imports) => { + // Modules extending await nuxt.callHook('autoImports:extend', imports) + // Scan composables/ + imports.push(...await scanDirExports(composablesDirs)) }) } diff --git a/yarn.lock b/yarn.lock index 686735d91e0..d4e83de5188 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1487,7 +1487,7 @@ __metadata: semver: ^7.3.7 unbuild: latest unctx: ^1.1.4 - unimport: ^0.1.6 + unimport: ^0.1.7 untyped: ^0.4.4 languageName: unknown linkType: soft @@ -10292,7 +10292,7 @@ __metadata: unbuild: latest unctx: ^1.1.4 unenv: ^0.4.6 - unimport: ^0.1.6 + unimport: ^0.1.7 unplugin: ^0.6.2 untyped: ^0.4.4 vue: ^3.2.33 @@ -13587,6 +13587,23 @@ __metadata: languageName: node linkType: hard +"unimport@npm:^0.1.7": + version: 0.1.7 + resolution: "unimport@npm:0.1.7" + dependencies: + "@rollup/pluginutils": ^4.2.1 + escape-string-regexp: ^5.0.0 + globby: ^13.1.1 + local-pkg: ^0.4.1 + magic-string: ^0.26.1 + mlly: ^0.5.2 + pathe: ^0.2.0 + scule: ^0.2.1 + unplugin: ^0.6.2 + checksum: 5ffceaf50cd30aa45daa6df90138d0f69bb0244481292f80f066f720ade8bfcc132fa1ee623e01f7cd7f5ec96ce56730b2dfd4a947768dc655b5723970ef481d + languageName: node + linkType: hard + "unique-filename@npm:^1.1.1": version: 1.1.1 resolution: "unique-filename@npm:1.1.1" From a44d1f5655038d5940e5f6a8794ad7cb124cb337 Mon Sep 17 00:00:00 2001 From: Anthony Fu Date: Tue, 26 Apr 2022 23:44:30 +0800 Subject: [PATCH 2/2] chore: update --- packages/nuxt/src/auto-imports/module.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/nuxt/src/auto-imports/module.ts b/packages/nuxt/src/auto-imports/module.ts index 532107b9b26..6f5b4208abe 100644 --- a/packages/nuxt/src/auto-imports/module.ts +++ b/packages/nuxt/src/auto-imports/module.ts @@ -80,10 +80,10 @@ export default defineNuxtModule>({ const regenerateAutoImports = async () => { ctx.clearDynamicImports() await ctx.modifyDynamicImports(async (imports) => { - // Modules extending - await nuxt.callHook('autoImports:extend', imports) // Scan composables/ imports.push(...await scanDirExports(composablesDirs)) + // Modules extending + await nuxt.callHook('autoImports:extend', imports) }) }