]> git.ipfire.org Git - thirdparty/vuejs/pinia.git/commitdiff
fix(nuxt): resolve auto-imports in layers (#3035)
authorRijk van Zanten <rijkvanzanten@me.com>
Tue, 4 Nov 2025 10:24:52 +0000 (05:24 -0500)
committerGitHub <noreply@github.com>
Tue, 4 Nov 2025 10:24:52 +0000 (11:24 +0100)
Co-authored-by: Eduardo San Martin Morote <posva13@gmail.com>
package.json
packages/nuxt/playground/layers/layer-domain/nuxt.config.ts [new file with mode: 0644]
packages/nuxt/playground/layers/layer-domain/stores/basic.ts [new file with mode: 0644]
packages/nuxt/playground/pages/index.vue
packages/nuxt/src/module.ts
packages/nuxt/test/nuxt.spec.ts
pnpm-lock.yaml

index b50b6a8bd43870c36485302252f3b0d25be28f44..07e1be7179be42dade57afac27b2f3eadf3a0611 100644 (file)
@@ -76,7 +76,6 @@
     ]
   },
   "resolutions": {
-    "@nuxt/kit": "^3.9.0",
     "@nuxt/schema": "^3.9.0"
   },
   "pnpm": {
diff --git a/packages/nuxt/playground/layers/layer-domain/nuxt.config.ts b/packages/nuxt/playground/layers/layer-domain/nuxt.config.ts
new file mode 100644 (file)
index 0000000..268da7f
--- /dev/null
@@ -0,0 +1 @@
+export default defineNuxtConfig({})
diff --git a/packages/nuxt/playground/layers/layer-domain/stores/basic.ts b/packages/nuxt/playground/layers/layer-domain/stores/basic.ts
new file mode 100644 (file)
index 0000000..b72bee6
--- /dev/null
@@ -0,0 +1,5 @@
+export const useBasicStore = defineStore('layer-basic', () => {
+  const count = ref(0)
+
+  return { count }
+})
index 450e65a2d31c12802c361a54ff36aa9ba8086d17..77cbee7d12fe39b313956df9e20005d979a917a7 100644 (file)
@@ -3,8 +3,9 @@
 
 const counter = useCounter()
 
-useTestStore()
-useSomeStoreStore()
+useTestStore() // ~/domain/one/stores/testStore.ts
+useSomeStoreStore() // ~/stores/nested/some-stores.ts
+const layerStore = useBasicStore() // ~~/layers/layer-domain/stores/basic.ts
 
 // await useAsyncData('counter', () => counter.asyncIncrement().then(() => true))
 
@@ -17,5 +18,7 @@ if (import.meta.server) {
   <div>
     <p>Count: {{ counter.$state.count }}</p>
     <button @click="counter.increment()">+</button>
+
+    <p>Layer store: {{ layerStore.count }}</p>
   </div>
 </template>
index 7542ccec29d52bd9d88a851d53b4d6d28ba75a3a..f0dc3457af2c52f6208683f4f0f8fd92105775a0 100644 (file)
@@ -7,6 +7,7 @@ import {
   addImports,
   createResolver,
   addImportsDir,
+  getLayerDirectories,
 } from '@nuxt/kit'
 import type { NuxtModule } from '@nuxt/schema'
 import { fileURLToPath } from 'node:url'
@@ -73,8 +74,12 @@ const module: NuxtModule<ModuleOptions> = defineNuxtModule<ModuleOptions>({
     }
 
     if (options.storesDirs) {
+      const layers = getLayerDirectories(nuxt)
+
       for (const storeDir of options.storesDirs) {
-        addImportsDir(resolve(nuxt.options.rootDir, storeDir))
+        for (const layer of layers) {
+          addImportsDir(resolve(layer.app, storeDir))
+        }
       }
     }
   },
index 357ed64839d6f603b3117933cf7f3672f79c0fc9..ac5e0b4da1f8dd68b02082756d8c6f2454dd52db 100644 (file)
@@ -33,4 +33,8 @@ describe('Nuxt', async () => {
     expect(html).not.toContain('I should not be serialized or hydrated')
     expect(html).toContain('skipHydrate-wrapped state is correct')
   })
+
+  it('can auto import from layers', async () => {
+    expect(await $fetch('/')).toContain('Layer store: 0')
+  })
 })
index 6873074ec46212e65bfed9b65e0f90844f36f8a3..dce08fd7deae71166758d322f4ea3521afcaf204 100644 (file)
@@ -5,7 +5,6 @@ settings:
   excludeLinksFromLockfile: false
 
 overrides:
-  '@nuxt/kit': ^3.9.0
   '@nuxt/schema': ^3.9.0
 
 importers:
@@ -139,7 +138,7 @@ importers:
   packages/nuxt:
     dependencies:
       '@nuxt/kit':
-        specifier: ^3.9.0
+        specifier: ^3.20.0
         version: 3.20.0(magicast@0.5.1)
     devDependencies:
       '@nuxt/module-builder':
@@ -970,6 +969,10 @@ packages:
     resolution: {integrity: sha512-EoF1Gf0SPj9vxgAIcGEH+a4PRLC7Dwsy21K6f5+POzylT8DgssN8zL5pwXC+X7OcfzBrwYFh7mM7phvh7ubgeg==}
     engines: {node: '>=18.12.0'}
 
+  '@nuxt/kit@4.2.0':
+    resolution: {integrity: sha512-1yN3LL6RDN5GjkNLPUYCbNRkaYnat6hqejPyfIBBVzrWOrpiQeNMGxQM/IcVdaSuBJXAnu0sUvTKXpXkmPhljg==}
+    engines: {node: '>=18.12.0'}
+
   '@nuxt/module-builder@1.0.2':
     resolution: {integrity: sha512-9M+0oZimbwom1J+HrfDuR5NDPED6C+DlM+2xfXju9wqB6VpVfYkS6WNEmS0URw8kpJcKBuogAc7ADO7vRS4s4A==}
     engines: {node: ^18.0.0 || >=20.0.0}
@@ -4355,7 +4358,6 @@ packages:
     engines: {node: '>=0.6.0', teleport: '>=0.2.0'}
     deprecated: |-
       You or someone you depend on is using Q, the JavaScript Promise library that gave JavaScript developers strong feelings about promises. They can almost certainly migrate to the native JavaScript promise now. Thank you literally everyone for joining me in this bet against the odds. Be excellent to each other.
-
       (For a CapTP with native promises, see @endo/eventual-send and @endo/captp)
 
   qs@6.14.0:
@@ -5979,7 +5981,7 @@ snapshots:
   '@dxup/nuxt@0.1.1(magicast@0.5.1)':
     dependencies:
       '@dxup/unimport': 0.1.1
-      '@nuxt/kit': 3.20.0(magicast@0.5.1)
+      '@nuxt/kit': 4.2.0(magicast@0.5.1)
       chokidar: 4.0.3
       pathe: 2.0.3
     transitivePeerDependencies:
@@ -6461,6 +6463,31 @@ snapshots:
     transitivePeerDependencies:
       - magicast
 
+  '@nuxt/kit@4.2.0(magicast@0.5.1)':
+    dependencies:
+      c12: 3.3.1(magicast@0.5.1)
+      consola: 3.4.2
+      defu: 6.1.4
+      destr: 2.0.5
+      errx: 0.1.0
+      exsolve: 1.0.7
+      ignore: 7.0.5
+      jiti: 2.6.1
+      klona: 2.0.6
+      mlly: 1.8.0
+      ohash: 2.0.11
+      pathe: 2.0.3
+      pkg-types: 2.3.0
+      rc9: 2.1.2
+      scule: 1.3.0
+      semver: 7.7.3
+      tinyglobby: 0.2.15
+      ufo: 1.6.1
+      unctx: 2.4.1
+      untyped: 2.0.0
+    transitivePeerDependencies:
+      - magicast
+
   '@nuxt/module-builder@1.0.2(@nuxt/cli@3.30.0(magicast@0.5.1))(@vue/compiler-core@3.5.22)(esbuild@0.25.12)(typescript@5.9.3)(vue-tsc@3.1.3(typescript@5.9.3))(vue@3.5.22(typescript@5.9.3))':
     dependencies:
       '@nuxt/cli': 3.30.0(magicast@0.5.1)
@@ -6575,7 +6602,7 @@ snapshots:
 
   '@nuxt/test-utils@3.20.1(@vitest/ui@3.2.4)(@vue/test-utils@2.4.6)(happy-dom@20.0.10)(magicast@0.5.1)(typescript@5.9.3)(vitest@3.2.4)':
     dependencies:
-      '@nuxt/kit': 3.20.0(magicast@0.5.1)
+      '@nuxt/kit': 4.2.0(magicast@0.5.1)
       c12: 3.3.1(magicast@0.5.1)
       consola: 3.4.2
       defu: 6.1.4