{"_id":"@alikhalilll/nuxt-auto-middleware","_rev":"8-83caa3ceb80ca1f4bd1abbf00b0f03c2","name":"@alikhalilll/nuxt-auto-middleware","dist-tags":{"latest":"1.2.0"},"versions":{"1.0.0":{"name":"@alikhalilll/nuxt-auto-middleware","version":"1.0.0","keywords":["nuxt","nuxt-module","middleware","layout","route-middleware"],"author":{"name":"alikhalilll"},"license":"MIT","_id":"@alikhalilll/nuxt-auto-middleware@1.0.0","maintainers":[{"name":"alikhalilll","email":"alikhalilll.dev@gmail.com"}],"dist":{"shasum":"6727e1a3b992698006381d96ebe2bd51238b9634","tarball":"https://registry.npmjs.org/@alikhalilll/nuxt-auto-middleware/-/nuxt-auto-middleware-1.0.0.tgz","fileCount":10,"integrity":"sha512-+pfSDjHh+mV/KcwRBODom55+P5FFgQjcKSKC9z86jZtbuLQfO+7JRmOAJSLbjfL3jFWEOyR1jzPm9PmbQOnZYQ==","signatures":[{"sig":"MEUCIA8FW33Cq2QPwkdKscwuH7JgqZKHqVO5iOfJ73qwVDcrAiEA6DJPlin8iG9Glndm75FPhP1UczCJgZ4ALaiQjFyEWic=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":34485},"type":"module","_from":"file:alikhalilll-nuxt-auto-middleware-1.0.0.tgz","types":"./dist/module.d.ts","exports":{".":{"types":"./dist/module.d.ts","import":"./dist/module.mjs"},"./types":{"types":"./dist/types.d.ts","import":"./dist/types.mjs"},"./package.json":"./package.json"},"scripts":{"build":"pnpm clean && tsup","clean":"rimraf dist","typecheck":"tsc --noEmit -p tsconfig.json"},"_npmUser":{"name":"alikhalilll","email":"alikhalilll.dev@gmail.com"},"_resolved":"/private/var/folders/7v/1sk02ysd1xq6wmwprzz6h2cr0000gn/T/ab834aceaddf59f62d9159e95d47bd02/alikhalilll-nuxt-auto-middleware-1.0.0.tgz","_integrity":"sha512-+pfSDjHh+mV/KcwRBODom55+P5FFgQjcKSKC9z86jZtbuLQfO+7JRmOAJSLbjfL3jFWEOyR1jzPm9PmbQOnZYQ==","_npmVersion":"10.9.3","description":"Declarative, layout-based route middleware for Nuxt 3/4, with glob matching, named groups, and per-page overrides.","directories":{},"sideEffects":false,"_nodeVersion":"22.18.0","publishConfig":{"access":"public"},"typesVersions":{"*":{".":["./dist/module.d.ts"],"types":["./dist/types.d.ts"]}},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.0","rimraf":"^6.0.1","@nuxt/kit":"^4.0.0","typescript":"^5.9.2","@types/node":"^22.13.0","@nuxt/schema":"^4.0.0"},"peerDependencies":{"@nuxt/kit":"^3.0.0 || ^4.0.0"},"_npmOperationalInternal":{"tmp":"tmp/nuxt-auto-middleware_1.0.0_1776387530911_0.48024774011494364","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"@alikhalilll/nuxt-auto-middleware","version":"1.0.1","keywords":["nuxt","nuxt-module","middleware","layout","route-middleware"],"author":{"name":"alikhalilll"},"license":"MIT","_id":"@alikhalilll/nuxt-auto-middleware@1.0.1","maintainers":[{"name":"alikhalilll","email":"alikhalilll.dev@gmail.com"}],"homepage":"https://github.com/alikhalilll/ali-nuxt-toolkit#readme","bugs":{"url":"https://github.com/alikhalilll/ali-nuxt-toolkit/issues"},"dist":{"shasum":"9a5d3ff41d338eb414610f688776e74926955763","tarball":"https://registry.npmjs.org/@alikhalilll/nuxt-auto-middleware/-/nuxt-auto-middleware-1.0.1.tgz","fileCount":11,"integrity":"sha512-jRptqql99Tj2FTvaV4Kje2agD1x/87g6jnmYSQni/NSKt0fAl1+O8321rl0nUu3aCppKY0k9kyP5w+E/RVW//Q==","signatures":[{"sig":"MEUCIQCsa9inhSh3Sx6lofjBcR9+qSbry4u1dBFJ+eCwDPPhUwIgUOmndeqm629A0whINyacN9+NVcbifSBRKHGnNSKbO+k=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":35867},"type":"module","_from":"file:alikhalilll-nuxt-auto-middleware-1.0.1.tgz","types":"./dist/module.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./dist/module.d.ts","import":"./dist/module.mjs"},"./types":{"types":"./dist/types.d.ts","import":"./dist/types.mjs"},"./package.json":"./package.json"},"scripts":{"build":"pnpm clean && tsup","clean":"rimraf dist","typecheck":"tsc --noEmit -p tsconfig.json"},"_npmUser":{"name":"alikhalilll","email":"alikhalilll.dev@gmail.com"},"_resolved":"/private/var/folders/7v/1sk02ysd1xq6wmwprzz6h2cr0000gn/T/d6754cb2fdd33ce1c3a734a65c06c4b9/alikhalilll-nuxt-auto-middleware-1.0.1.tgz","_integrity":"sha512-jRptqql99Tj2FTvaV4Kje2agD1x/87g6jnmYSQni/NSKt0fAl1+O8321rl0nUu3aCppKY0k9kyP5w+E/RVW//Q==","repository":{"url":"git+https://github.com/alikhalilll/ali-nuxt-toolkit.git","type":"git","directory":"packages/auto-middleware"},"_npmVersion":"10.9.3","description":"Declarative, layout-based route middleware for Nuxt 3/4, with glob matching, named groups, and per-page overrides.","directories":{},"sideEffects":false,"_nodeVersion":"22.18.0","publishConfig":{"access":"public"},"typesVersions":{"*":{".":["./dist/module.d.ts"],"types":["./dist/types.d.ts"]}},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.0","rimraf":"^6.0.1","@nuxt/kit":"^4.0.0","typescript":"^5.9.2","@types/node":"^22.13.0","@nuxt/schema":"^4.0.0"},"peerDependencies":{"@nuxt/kit":"^3.0.0 || ^4.0.0"},"_npmOperationalInternal":{"tmp":"tmp/nuxt-auto-middleware_1.0.1_1776389381396_0.9006158939336539","host":"s3://npm-registry-packages-npm-production"}},"1.0.2":{"name":"@alikhalilll/nuxt-auto-middleware","version":"1.0.2","keywords":["nuxt","nuxt-module","middleware","layout","route-middleware"],"author":{"name":"alikhalilll"},"license":"MIT","_id":"@alikhalilll/nuxt-auto-middleware@1.0.2","maintainers":[{"name":"alikhalilll","email":"alikhalilll.dev@gmail.com"}],"homepage":"https://github.com/alikhalilll/ali-nuxt-toolkit#readme","bugs":{"url":"https://github.com/alikhalilll/ali-nuxt-toolkit/issues"},"dist":{"shasum":"61c818edf04edafc2c4d564a5ed4caea63a08740","tarball":"https://registry.npmjs.org/@alikhalilll/nuxt-auto-middleware/-/nuxt-auto-middleware-1.0.2.tgz","fileCount":11,"integrity":"sha512-LdodQPok/EDJwscZPFDqZyxs0Aex0UtkWOj1bZLJo+/veaJRTbObkzZpjfQdPZPaAKlCvNiUtHgkEIrZGOnb4A==","signatures":[{"sig":"MEYCIQC6Tp7rJwG5Mi3vJG8o/PjZbBUQJHyWCyGn5QPVWKjpNQIhANOuwcJZGypN4Yww/dHKZUP2jfxlRsc2d16kiUJZdiao","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":35867},"type":"module","_from":"file:alikhalilll-nuxt-auto-middleware-1.0.2.tgz","types":"./dist/module.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./dist/module.d.ts","import":"./dist/module.mjs"},"./types":{"types":"./dist/types.d.ts","import":"./dist/types.mjs"},"./package.json":"./package.json"},"scripts":{"build":"pnpm clean && tsup","clean":"rimraf dist","typecheck":"tsc --noEmit -p tsconfig.json"},"_npmUser":{"name":"alikhalilll","email":"alikhalilll.dev@gmail.com"},"_resolved":"/private/var/folders/7v/1sk02ysd1xq6wmwprzz6h2cr0000gn/T/220c387da97212a26df6f8b7b439f53b/alikhalilll-nuxt-auto-middleware-1.0.2.tgz","_integrity":"sha512-LdodQPok/EDJwscZPFDqZyxs0Aex0UtkWOj1bZLJo+/veaJRTbObkzZpjfQdPZPaAKlCvNiUtHgkEIrZGOnb4A==","repository":{"url":"git+https://github.com/alikhalilll/ali-nuxt-toolkit.git","type":"git","directory":"packages/auto-middleware"},"_npmVersion":"10.9.3","description":"Declarative, layout-based route middleware for Nuxt 3/4, with glob matching, named groups, and per-page overrides.","directories":{},"sideEffects":false,"_nodeVersion":"22.18.0","publishConfig":{"access":"public"},"typesVersions":{"*":{".":["./dist/module.d.ts"],"types":["./dist/types.d.ts"]}},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.0","rimraf":"^6.0.1","@nuxt/kit":"^4.0.0","typescript":"^5.9.2","@types/node":"^22.13.0","@nuxt/schema":"^4.0.0"},"peerDependencies":{"@nuxt/kit":"^3.0.0 || ^4.0.0"},"_npmOperationalInternal":{"tmp":"tmp/nuxt-auto-middleware_1.0.2_1776389686868_0.8968387557363224","host":"s3://npm-registry-packages-npm-production"}},"1.0.3":{"name":"@alikhalilll/nuxt-auto-middleware","version":"1.0.3","keywords":["nuxt","nuxt-module","middleware","layout","route-middleware"],"author":{"name":"alikhalilll"},"license":"MIT","_id":"@alikhalilll/nuxt-auto-middleware@1.0.3","maintainers":[{"name":"alikhalilll","email":"alikhalilll.dev@gmail.com"}],"homepage":"https://github.com/alikhalilll/ali-nuxt-toolkit#readme","bugs":{"url":"https://github.com/alikhalilll/ali-nuxt-toolkit/issues"},"dist":{"shasum":"7ce31be28c90408a742bc9f2454c4de30e8f9f78","tarball":"https://registry.npmjs.org/@alikhalilll/nuxt-auto-middleware/-/nuxt-auto-middleware-1.0.3.tgz","fileCount":11,"integrity":"sha512-UmiRu0DXVG/5RNWlDj5wyXX5N8us9661SI2lg2pY+Rga+OWrdSuswvGoNbOBoQQzDQ6boin3Nr+n4EpZkMkf9w==","signatures":[{"sig":"MEUCIQDZW0DzpHGtaWxkl5+Efsrj2+gU+bD0enQOG5GIqLLhEAIgJNsZz7ypSCi2zErZT9kgAmsyRMMR7AW+TDYFCChcvPs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":35867},"type":"module","_from":"file:alikhalilll-nuxt-auto-middleware-1.0.3.tgz","types":"./dist/module.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./dist/module.d.ts","import":"./dist/module.mjs"},"./types":{"types":"./dist/types.d.ts","import":"./dist/types.mjs"},"./package.json":"./package.json"},"scripts":{"build":"pnpm clean && tsup","clean":"rimraf dist","typecheck":"tsc --noEmit -p tsconfig.json"},"_npmUser":{"name":"alikhalilll","email":"alikhalilll.dev@gmail.com"},"_resolved":"/private/var/folders/7v/1sk02ysd1xq6wmwprzz6h2cr0000gn/T/f93bbaa5f6874033267d14f962b2f912/alikhalilll-nuxt-auto-middleware-1.0.3.tgz","_integrity":"sha512-UmiRu0DXVG/5RNWlDj5wyXX5N8us9661SI2lg2pY+Rga+OWrdSuswvGoNbOBoQQzDQ6boin3Nr+n4EpZkMkf9w==","repository":{"url":"git+https://github.com/alikhalilll/ali-nuxt-toolkit.git","type":"git","directory":"packages/auto-middleware"},"_npmVersion":"10.9.3","description":"Declarative, layout-based route middleware for Nuxt 3/4, with glob matching, named groups, and per-page overrides.","directories":{},"sideEffects":false,"_nodeVersion":"22.18.0","publishConfig":{"access":"public"},"typesVersions":{"*":{".":["./dist/module.d.ts"],"types":["./dist/types.d.ts"]}},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.0","rimraf":"^6.0.1","@nuxt/kit":"^4.0.0","typescript":"^5.9.2","@types/node":"^22.13.0","@nuxt/schema":"^4.0.0"},"peerDependencies":{"@nuxt/kit":"^3.0.0 || ^4.0.0"},"_npmOperationalInternal":{"tmp":"tmp/nuxt-auto-middleware_1.0.3_1776390692597_0.3254717667693008","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"@alikhalilll/nuxt-auto-middleware","version":"1.1.0","keywords":["nuxt","nuxt-module","middleware","layout","route-middleware"],"author":{"name":"alikhalilll"},"license":"MIT","_id":"@alikhalilll/nuxt-auto-middleware@1.1.0","maintainers":[{"name":"alikhalilll","email":"alikhalilll.dev@gmail.com"}],"homepage":"https://github.com/alikhalilll/ali-nuxt-toolkit#readme","bugs":{"url":"https://github.com/alikhalilll/ali-nuxt-toolkit/issues"},"dist":{"shasum":"e12dca3c36ba1f940fb1e160e2c75f0131abd301","tarball":"https://registry.npmjs.org/@alikhalilll/nuxt-auto-middleware/-/nuxt-auto-middleware-1.1.0.tgz","fileCount":11,"integrity":"sha512-DoUK4cnRMQIj7x3asfIYfibb/d6/MYI57r00/DuLAtFhks4i2zzEBRUFgczdrsxya7xwMwyWs8is4eIMyaZK4Q==","signatures":[{"sig":"MEUCIQCJTuJUa0L1pcH00PAEHNQHBcDOvYXBZrRmftdFUWaPJgIgXfUX5BWcbl9ooSnaZmH3FWqecKDXabhIXDzxUX6xOg4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":35685},"type":"module","_from":"file:alikhalilll-nuxt-auto-middleware-1.1.0.tgz","types":"./dist/module.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./dist/module.d.ts","import":"./dist/module.mjs"},"./types":{"types":"./dist/types.d.ts","import":"./dist/types.mjs"},"./package.json":"./package.json"},"scripts":{"build":"pnpm clean && tsup","clean":"rimraf dist","typecheck":"tsc --noEmit -p tsconfig.json"},"_npmUser":{"name":"alikhalilll","email":"alikhalilll.dev@gmail.com"},"_resolved":"/private/var/folders/7v/1sk02ysd1xq6wmwprzz6h2cr0000gn/T/4d042fc751a183539e8d27057c257b18/alikhalilll-nuxt-auto-middleware-1.1.0.tgz","_integrity":"sha512-DoUK4cnRMQIj7x3asfIYfibb/d6/MYI57r00/DuLAtFhks4i2zzEBRUFgczdrsxya7xwMwyWs8is4eIMyaZK4Q==","repository":{"url":"git+https://github.com/alikhalilll/ali-nuxt-toolkit.git","type":"git","directory":"packages/auto-middleware"},"_npmVersion":"10.9.3","description":"Declarative, layout-based route middleware for Nuxt 3/4, with glob matching, named groups, and per-page overrides.","directories":{},"sideEffects":false,"_nodeVersion":"22.18.0","publishConfig":{"access":"public"},"typesVersions":{"*":{".":["./dist/module.d.ts"],"types":["./dist/types.d.ts"]}},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.0","rimraf":"^6.0.1","@nuxt/kit":"^4.0.0","typescript":"^5.9.2","@types/node":"^22.13.0","@nuxt/schema":"^4.0.0"},"peerDependencies":{"@nuxt/kit":"^3.0.0 || ^4.0.0"},"_npmOperationalInternal":{"tmp":"tmp/nuxt-auto-middleware_1.1.0_1776476911140_0.8855809233588099","host":"s3://npm-registry-packages-npm-production"}},"1.1.1":{"name":"@alikhalilll/nuxt-auto-middleware","version":"1.1.1","keywords":["nuxt","nuxt-module","middleware","layout","route-middleware"],"author":{"name":"alikhalilll"},"license":"MIT","_id":"@alikhalilll/nuxt-auto-middleware@1.1.1","maintainers":[{"name":"alikhalilll","email":"alikhalilll.dev@gmail.com"}],"homepage":"https://alikhalilll.github.io/ali-nuxt-toolkit/auto-middleware","bugs":{"url":"https://github.com/alikhalilll/ali-nuxt-toolkit/issues"},"dist":{"shasum":"2617f03a9e18e39f1fcae7f32dbdef52b9e6c989","tarball":"https://registry.npmjs.org/@alikhalilll/nuxt-auto-middleware/-/nuxt-auto-middleware-1.1.1.tgz","fileCount":11,"integrity":"sha512-05cb3LKIlWLIpcLQsz54t9J/RfUYx5c4t1CdTX1cBVCB5FKDtezSo6BaEOXgZWuETfSlV0O/AKk35ZSR9jWpkg==","signatures":[{"sig":"MEUCIBL4SOt9/tZ5G2V1YpM75S0bldlJ8oAJaPw0zKWCmi/KAiEA4AKqGDqrhFUgzKQG320sk8nZeTFspt5cLItQJ84fTSg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":35693},"type":"module","_from":"file:alikhalilll-nuxt-auto-middleware-1.1.1.tgz","types":"./dist/module.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./dist/module.d.ts","import":"./dist/module.mjs"},"./types":{"types":"./dist/types.d.ts","import":"./dist/types.mjs"},"./package.json":"./package.json"},"scripts":{"build":"pnpm clean && tsup","clean":"rimraf dist","typecheck":"tsc --noEmit -p tsconfig.json"},"_npmUser":{"name":"alikhalilll","email":"alikhalilll.dev@gmail.com"},"_resolved":"/private/var/folders/7v/1sk02ysd1xq6wmwprzz6h2cr0000gn/T/ffff5b02ea67856d49b29ff3f379c2a7/alikhalilll-nuxt-auto-middleware-1.1.1.tgz","_integrity":"sha512-05cb3LKIlWLIpcLQsz54t9J/RfUYx5c4t1CdTX1cBVCB5FKDtezSo6BaEOXgZWuETfSlV0O/AKk35ZSR9jWpkg==","repository":{"url":"git+https://github.com/alikhalilll/ali-nuxt-toolkit.git","type":"git","directory":"packages/auto-middleware"},"_npmVersion":"10.9.3","description":"Declarative, layout-based route middleware for Nuxt 3/4, with glob matching, named groups, and per-page overrides.","directories":{},"sideEffects":false,"_nodeVersion":"22.18.0","publishConfig":{"access":"public"},"typesVersions":{"*":{".":["./dist/module.d.ts"],"types":["./dist/types.d.ts"]}},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.0","rimraf":"^6.0.1","@nuxt/kit":"^4.0.0","typescript":"^5.9.2","@types/node":"^22.13.0","@nuxt/schema":"^4.0.0"},"peerDependencies":{"@nuxt/kit":"^3.0.0 || ^4.0.0"},"_npmOperationalInternal":{"tmp":"tmp/nuxt-auto-middleware_1.1.1_1776531469959_0.32123840056580977","host":"s3://npm-registry-packages-npm-production"}},"1.2.0":{"name":"@alikhalilll/nuxt-auto-middleware","version":"1.2.0","keywords":["nuxt","nuxt-module","middleware","layout","route-middleware"],"author":{"name":"alikhalilll"},"license":"MIT","_id":"@alikhalilll/nuxt-auto-middleware@1.2.0","maintainers":[{"name":"alikhalilll","email":"alikhalilll.dev@gmail.com"}],"homepage":"https://alikhalilll.github.io/ali-nuxt-toolkit/auto-middleware","bugs":{"url":"https://github.com/alikhalilll/ali-nuxt-toolkit/issues"},"dist":{"shasum":"6c1d7605be0c1f52b78d149d407996b0a5d0aa61","tarball":"https://registry.npmjs.org/@alikhalilll/nuxt-auto-middleware/-/nuxt-auto-middleware-1.2.0.tgz","fileCount":8,"integrity":"sha512-3JPOxHEHI1VqjZIPEl+miI+s4dbMnftKDTSTfaQ9AqdaT8VRYwel1ZhJod4Kh+aQE4KwDw0RjBMLHuTMUxQ+OQ==","signatures":[{"sig":"MEYCIQDJ09GEC+m45SQSdH4mX01X5mepZF5+rFWq1W139mpCDwIhALVzB/0AAo0hoUSBUpOcRdS5XiJ1B8Hy+skvVLHogmV5","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":35915},"type":"module","_from":"file:alikhalilll-nuxt-auto-middleware-1.2.0.tgz","types":"./dist/module.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./dist/module.d.ts","import":"./dist/module.mjs"},"./types":{"types":"./dist/types.d.ts","import":"./dist/types.mjs"},"./package.json":"./package.json"},"scripts":{"build":"tsdown","clean":"rimraf dist","validate":"pnpm build && pnpm validate-dist && pnpm validate-consumer","typecheck":"tsc --noEmit -p tsconfig.json","validate-dist":"tsx ../../scripts/validate/dist-validate.ts --pkg auto-middleware","validate-consumer":"tsx ../../scripts/validate/consumer-validate.ts --pkg auto-middleware"},"_npmUser":{"name":"alikhalilll","email":"alikhalilll.dev@gmail.com"},"_resolved":"/private/var/folders/4j/cgljlpzd0n550x2mkwwsrj6c0000gn/T/f6cbbaf33337a5164db62c2253c6379c/alikhalilll-nuxt-auto-middleware-1.2.0.tgz","_integrity":"sha512-3JPOxHEHI1VqjZIPEl+miI+s4dbMnftKDTSTfaQ9AqdaT8VRYwel1ZhJod4Kh+aQE4KwDw0RjBMLHuTMUxQ+OQ==","repository":{"url":"git+https://github.com/alikhalilll/ali-nuxt-toolkit.git","type":"git","directory":"packages/auto-middleware"},"_npmVersion":"11.12.1","description":"Declarative, layout-based route middleware for Nuxt 3/4, with glob matching, named groups, and per-page overrides.","directories":{},"sideEffects":false,"_nodeVersion":"26.0.0","publishConfig":{"access":"public"},"typesVersions":{"*":{".":["./dist/module.d.ts"],"types":["./dist/types.d.ts"]}},"_hasShrinkwrap":false,"devDependencies":{"unrun":"0.3.0","rimraf":"^6.0.1","tsdown":"0.22.0","@nuxt/kit":"^4.0.0","typescript":"^5.9.2","@types/node":"^22.13.0","@nuxt/schema":"^4.0.0"},"peerDependencies":{"@nuxt/kit":"^3.0.0 || ^4.0.0"},"_npmOperationalInternal":{"tmp":"tmp/nuxt-auto-middleware_1.2.0_1779969445176_0.22777494017973865","host":"s3://npm-registry-packages-npm-production"}}},"time":{"created":"2026-04-17T00:58:50.798Z","modified":"2026-05-30T18:58:14.281Z","1.0.0":"2026-04-17T00:58:51.092Z","1.0.1":"2026-04-17T01:29:41.537Z","1.0.2":"2026-04-17T01:34:47.044Z","1.0.3":"2026-04-17T01:51:32.735Z","1.1.0":"2026-04-18T01:48:31.289Z","1.1.1":"2026-04-18T16:57:50.098Z","1.2.0":"2026-05-28T11:57:25.329Z"},"bugs":{"url":"https://github.com/alikhalilll/ali-nuxt-toolkit/issues"},"author":{"name":"alikhalilll"},"license":"MIT","homepage":"https://alikhalilll.github.io/ali-nuxt-toolkit/auto-middleware","keywords":["nuxt","nuxt-module","middleware","layout","route-middleware"],"repository":{"url":"git+https://github.com/alikhalilll/ali-nuxt-toolkit.git","type":"git","directory":"packages/auto-middleware"},"description":"Declarative, layout-based route middleware for Nuxt 3/4, with glob matching, named groups, and per-page overrides.","maintainers":[{"email":"alikhalilll.dev@gmail.com","name":"alikhalilll_dev"}],"readme":"# @alikhalilll/nuxt-auto-middleware\n\nDeclarative, layout-based route middleware for Nuxt 3 / 4. Map layouts to middlewares once in your `nuxt.config.ts` — the module generates a single global route middleware that dispatches the right chain on each navigation.\n\n- **Layout → middleware mapping** with **glob patterns** (`dashboard/*`, `admin*`) or RegExp objects.\n- **Named middleware groups** for DRY configuration: `{ auth: ['auth', 'verify-role'] }` referenced as `@auth`.\n- **Per-page overrides** via `definePageMeta({ middlewares: [...] })` or `skipAutoMiddleware: true`.\n- **Typed registry** — the module generates a `AutoMiddlewareName` union type and augments `PageMeta`, so typos are compile errors.\n- **Early termination** — a middleware returning `false` stops the chain; any other value is treated as a navigation result.\n- **Zero runtime deps** — just Nuxt.\n\n---\n\n## Table of contents\n\n1. [Install](#install)\n2. [Register the module](#register-the-module)\n3. [Usage](#usage)\n   - [Basic mapping](#basic-mapping)\n   - [Named groups](#named-groups)\n   - [Glob patterns](#glob-patterns)\n   - [RegExp patterns](#regexp-patterns)\n   - [Per-page extras](#per-page-extras)\n   - [Opt a page out entirely](#opt-a-page-out-entirely)\n   - [Catch-all layout](#catch-all-layout)\n   - [Disabling per-page overrides](#disabling-per-page-overrides)\n   - [Debug logs](#debug-logs)\n4. [Middleware return values](#middleware-return-values)\n5. [Typed registry](#typed-registry)\n6. [Matching rules](#matching-rules)\n7. [Module options reference](#module-options-reference)\n8. [Exported types](#exported-types)\n\n---\n\n## Install\n\n```bash\npnpm add @alikhalilll/nuxt-auto-middleware\n```\n\n## Register the module\n\n```ts\n// nuxt.config.ts\nexport default defineNuxtConfig({\n  modules: ['@alikhalilll/nuxt-auto-middleware'],\n  autoMiddleware: {\n    groups: {\n      auth: ['auth', 'verify-role'],\n    },\n    rules: [\n      { layouts: ['default'], middlewares: ['log-activity'] },\n      { layouts: ['dashboard', 'dashboard/*'], middlewares: ['@auth'] },\n      { layouts: ['admin'], middlewares: ['@auth', 'require-admin'] },\n    ],\n    debug: false,\n    pageMetaField: 'middlewares', // set to false to disable per-page extras\n  },\n});\n```\n\nMiddleware files live in the standard Nuxt location: `~/middleware/auth.ts`, `~/middleware/verify-role.ts`, etc.\n\n## Usage\n\n### Basic mapping\n\nOne layout, one middleware — the simplest rule:\n\n```ts\nautoMiddleware: {\n  rules: [\n    { layouts: ['default'], middlewares: ['track-pageview'] },\n  ],\n},\n```\n\nAny page using the `default` layout (explicitly, or implicitly — no `layout` in `definePageMeta`) will run `~/middleware/track-pageview.ts` before rendering.\n\n### Named groups\n\nGroups keep rules DRY when the same stack of middlewares is used from multiple layouts:\n\n```ts\nautoMiddleware: {\n  groups: {\n    auth:      ['auth', 'verify-role'],\n    adminOnly: ['auth', 'verify-role', 'require-admin'],\n  },\n  rules: [\n    { layouts: ['dashboard', 'dashboard/*'], middlewares: ['@auth'] },\n    { layouts: ['admin', 'admin/*'],         middlewares: ['@adminOnly'] },\n  ],\n},\n```\n\nGroup references are expanded at build time. An unknown `@group` name throws during `nuxt prepare`, so typos don't silently ship.\n\n### Glob patterns\n\nLayouts support `*` (non-slash), `**` (any), and `?` (one non-slash char):\n\n```ts\nrules: [\n  { layouts: ['dashboard/*'], middlewares: ['@auth'] },      // dashboard/x, dashboard/y\n  { layouts: ['admin/**'],    middlewares: ['@adminOnly'] }, // admin/x, admin/x/y, ...\n  { layouts: ['settings-?'],  middlewares: ['verify-role'] }, // settings-a, settings-b\n],\n```\n\n### RegExp patterns\n\nFor anything more expressive, pass a RegExp directly:\n\n```ts\nrules: [\n  { layouts: [/^(dashboard|portal)$/], middlewares: ['@auth'] },\n  { layouts: [/^ops\\//],               middlewares: ['require-ops'] },\n],\n```\n\n### Per-page extras\n\nAppend additional middlewares for one page without changing global rules. The field name (`middlewares` by default) is configurable via `pageMetaField`:\n\n```vue\n<script setup lang=\"ts\">\ndefinePageMeta({\n  layout: 'dashboard',\n  middlewares: ['force-2fa'], // runs AFTER @auth resolved from the layout rule\n});\n</script>\n```\n\nBecause the `AutoMiddlewareName` type is generated from your rules + groups, typos are compile-time errors.\n\n### Opt a page out entirely\n\n```vue\n<script setup lang=\"ts\">\ndefinePageMeta({\n  layout: 'dashboard',\n  skipAutoMiddleware: true, // no middleware runs, even though dashboard would match\n});\n</script>\n```\n\n### Catch-all layout\n\nUse `**` to run middleware for every layout (except pages with `layout: false` or `skipAutoMiddleware: true`):\n\n```ts\nrules: [\n  { layouts: ['**'], middlewares: ['track-pageview'] },\n  { layouts: ['dashboard', 'admin'], middlewares: ['@auth'] },\n],\n```\n\nWhen multiple rules match the same layout, their middlewares are concatenated in config order (duplicates are dropped).\n\n### Disabling per-page overrides\n\n```ts\nautoMiddleware: {\n  pageMetaField: false, // ignore definePageMeta({ middlewares: [...] })\n  rules: [ /* ... */ ],\n},\n```\n\nThe typed registry is still generated (so `AutoMiddlewareName` remains useful elsewhere); the dispatcher just doesn't look at page meta.\n\n### Debug logs\n\n```ts\nautoMiddleware: { debug: true, rules: [ /* ... */ ] }\n```\n\nWith debug on, each navigation logs the resolved layout and the full ordered chain, plus whether any middleware returned `false` or a redirect.\n\n## Middleware return values\n\nMiddleware functions receive `(to, from)` exactly like standard Nuxt route middlewares:\n\n| Return        | Behaviour                                     |\n| ------------- | --------------------------------------------- |\n| `false`       | Stop the chain, allow navigation.             |\n| `true` / void | Continue to the next middleware.              |\n| anything else | Treated as a navigation result — chain stops. |\n\nExample: an auth middleware that redirects to `/login` when the cookie is missing, otherwise lets the chain continue:\n\n```ts\n// ~/middleware/auth.ts\nexport default defineNuxtRouteMiddleware(() => {\n  const token = useCookie('token').value;\n  if (!token) return navigateTo('/login');\n  // undefined → continue to the next middleware\n});\n```\n\nEvery middleware runs inside `callWithNuxt()`, so `useNuxtApp()` / composables work as usual.\n\n## Typed registry\n\nThe module emits `#build/auto-middleware/types.d.ts` with:\n\n```ts\nexport type AutoMiddlewareName = 'auth' | 'verify-role' | 'require-admin' | 'log-activity';\n```\n\n…plus an augmentation that adds `middlewares?: AutoMiddlewareName[]` and `skipAutoMiddleware?: boolean` to `PageMeta`. Both are auto-included in the Nuxt-generated `nuxt.d.ts`, so you don't need to import anything. You _can_ import the type if you're authoring outside of `definePageMeta`:\n\n```ts\nimport type { AutoMiddlewareName } from '#build/auto-middleware/types';\n\nconst stack: AutoMiddlewareName[] = ['auth', 'verify-role'];\n```\n\n## Matching rules\n\n- A page with no explicit layout is treated as `default`.\n- A page with `layout: false` is skipped entirely.\n- A page with `skipAutoMiddleware: true` is skipped entirely.\n- Layout pattern matching is anchored (`^...$`) — partial matches do **not** count.\n- When multiple rules match, middlewares are concatenated in config order and deduped (first occurrence wins).\n\n## Module options reference\n\n| Option          | Type                       | Default         | Purpose                                                                                       |\n| --------------- | -------------------------- | --------------- | --------------------------------------------------------------------------------------------- |\n| `rules`         | `AutoMiddlewareRule[]`     | `[]`            | Layout → middlewares mapping. Required.                                                       |\n| `groups`        | `Record<string, string[]>` | `{}`            | Named reusable middleware lists, referenced via `@name` inside rules.                         |\n| `debug`         | `boolean`                  | `false`         | Log resolution + execution at runtime.                                                        |\n| `pageMetaField` | `string \\| false`          | `'middlewares'` | Page-meta key used to append extra middlewares. Set to `false` to disable per-page overrides. |\n\n## Exported types\n\n```ts\nimport type {\n  AutoMiddlewareOptions,\n  AutoMiddlewareRule,\n} from '@alikhalilll/nuxt-auto-middleware/types';\n```\n\n## License\n\nMIT\n","readmeFilename":"README.md"}