[{"data":1,"prerenderedAt":1289},["ShallowReactive",2],{"\u002Fauto-middleware":3},{"id":4,"title":5,"body":6,"description":1282,"extension":1283,"meta":1284,"navigation":1285,"order":161,"package":13,"path":1286,"seo":1287,"stem":5,"__hash__":1288},"docs\u002Fauto-middleware.md","auto-middleware",{"type":7,"value":8,"toc":1266},"minimark",[9,14,23,95,100,125,129,310,320,323,327,372,383,387,397,504,508,523,580,584,655,659,669,743,749,753,810,814,826,870,873,877,884,931,1014,1025,1028,1035,1074,1087,1091,1117,1121,1221,1225,1262],[10,11,13],"h1",{"id":12},"alikhalilllnuxt-auto-middleware","@alikhalilll\u002Fnuxt-auto-middleware",[15,16,17,18,22],"p",{},"Declarative, layout-based route middleware for Nuxt 3 \u002F 4. Map layouts to middlewares once in your ",[19,20,21],"code",{},"nuxt.config.ts"," — the module generates a single global route middleware that dispatches the right chain on each navigation.",[24,25,26,38,52,65,79,89],"ul",{},[27,28,29,33,34,37],"li",{},[30,31,32],"strong",{},"Layout → middleware mapping"," with ",[30,35,36],{},"glob patterns"," or RegExp.",[27,39,40,43,44,47,48,51],{},[30,41,42],{},"Named middleware groups"," for DRY rules: ",[19,45,46],{},"{ auth: ['auth', 'verify-role'] }"," referenced as ",[19,49,50],{},"@auth",".",[27,53,54,57,58,61,62,51],{},[30,55,56],{},"Per-page overrides"," via ",[19,59,60],{},"definePageMeta({ middlewares: [...] })"," or ",[19,63,64],{},"skipAutoMiddleware: true",[27,66,67,70,71,74,75,78],{},[30,68,69],{},"Typed registry"," — the module generates an ",[19,72,73],{},"AutoMiddlewareName"," union and augments ",[19,76,77],{},"PageMeta",", so typos are compile errors.",[27,80,81,84,85,88],{},[30,82,83],{},"Early termination"," — a middleware returning ",[19,86,87],{},"false"," stops the chain; any other value is treated as a navigation result.",[27,90,91,94],{},[30,92,93],{},"Zero runtime deps"," — just Nuxt.",[96,97,99],"h2",{"id":98},"install","Install",[101,102,107],"pre",{"className":103,"code":104,"language":105,"meta":106,"style":106},"language-bash shiki shiki-themes github-dark github-dark","pnpm add @alikhalilll\u002Fnuxt-auto-middleware\n","bash","",[19,108,109],{"__ignoreMap":106},[110,111,114,118,122],"span",{"class":112,"line":113},"line",1,[110,115,117],{"class":116},"sFR8T","pnpm",[110,119,121],{"class":120},"s4wv1"," add",[110,123,124],{"class":120}," @alikhalilll\u002Fnuxt-auto-middleware\n",[96,126,128],{"id":127},"register-the-module","Register the module",[101,130,134],{"className":131,"code":132,"language":133,"meta":106,"style":106},"language-ts shiki shiki-themes github-dark github-dark","\u002F\u002F nuxt.config.ts\nexport default defineNuxtConfig({\n  modules: ['@alikhalilll\u002Fnuxt-auto-middleware'],\n  autoMiddleware: {\n    groups: {\n      auth: ['auth', 'verify-role'],\n    },\n    rules: [\n      { layouts: ['default'], middlewares: ['log-activity'] },\n      { layouts: ['dashboard', 'dashboard\u002F*'], middlewares: ['@auth'] },\n      { layouts: ['admin'], middlewares: ['@auth', 'require-admin'] },\n    ],\n    debug: false,\n    pageMetaField: 'middlewares',\n  },\n});\n","ts",[19,135,136,142,159,171,177,183,200,206,212,230,250,269,275,287,298,304],{"__ignoreMap":106},[110,137,138],{"class":112,"line":113},[110,139,141],{"class":140},"sJ8bj","\u002F\u002F nuxt.config.ts\n",[110,143,145,149,152,155],{"class":112,"line":144},2,[110,146,148],{"class":147},"sOPea","export",[110,150,151],{"class":147}," default",[110,153,154],{"class":116}," defineNuxtConfig",[110,156,158],{"class":157},"suv1-","({\n",[110,160,162,165,168],{"class":112,"line":161},3,[110,163,164],{"class":157},"  modules: [",[110,166,167],{"class":120},"'@alikhalilll\u002Fnuxt-auto-middleware'",[110,169,170],{"class":157},"],\n",[110,172,174],{"class":112,"line":173},4,[110,175,176],{"class":157},"  autoMiddleware: {\n",[110,178,180],{"class":112,"line":179},5,[110,181,182],{"class":157},"    groups: {\n",[110,184,186,189,192,195,198],{"class":112,"line":185},6,[110,187,188],{"class":157},"      auth: [",[110,190,191],{"class":120},"'auth'",[110,193,194],{"class":157},", ",[110,196,197],{"class":120},"'verify-role'",[110,199,170],{"class":157},[110,201,203],{"class":112,"line":202},7,[110,204,205],{"class":157},"    },\n",[110,207,209],{"class":112,"line":208},8,[110,210,211],{"class":157},"    rules: [\n",[110,213,215,218,221,224,227],{"class":112,"line":214},9,[110,216,217],{"class":157},"      { layouts: [",[110,219,220],{"class":120},"'default'",[110,222,223],{"class":157},"], middlewares: [",[110,225,226],{"class":120},"'log-activity'",[110,228,229],{"class":157},"] },\n",[110,231,233,235,238,240,243,245,248],{"class":112,"line":232},10,[110,234,217],{"class":157},[110,236,237],{"class":120},"'dashboard'",[110,239,194],{"class":157},[110,241,242],{"class":120},"'dashboard\u002F*'",[110,244,223],{"class":157},[110,246,247],{"class":120},"'@auth'",[110,249,229],{"class":157},[110,251,253,255,258,260,262,264,267],{"class":112,"line":252},11,[110,254,217],{"class":157},[110,256,257],{"class":120},"'admin'",[110,259,223],{"class":157},[110,261,247],{"class":120},[110,263,194],{"class":157},[110,265,266],{"class":120},"'require-admin'",[110,268,229],{"class":157},[110,270,272],{"class":112,"line":271},12,[110,273,274],{"class":157},"    ],\n",[110,276,278,281,284],{"class":112,"line":277},13,[110,279,280],{"class":157},"    debug: ",[110,282,87],{"class":283},"s8ozJ",[110,285,286],{"class":157},",\n",[110,288,290,293,296],{"class":112,"line":289},14,[110,291,292],{"class":157},"    pageMetaField: ",[110,294,295],{"class":120},"'middlewares'",[110,297,286],{"class":157},[110,299,301],{"class":112,"line":300},15,[110,302,303],{"class":157},"  },\n",[110,305,307],{"class":112,"line":306},16,[110,308,309],{"class":157},"});\n",[15,311,312,313,194,316,319],{},"Middleware files live in the standard Nuxt location: ",[19,314,315],{},"~\u002Fmiddleware\u002Fauth.ts",[19,317,318],{},"~\u002Fmiddleware\u002Fverify-role.ts",", etc.",[321,322],"demo-auto-middleware",{},[96,324,326],{"id":325},"basic-mapping","Basic mapping",[101,328,330],{"className":131,"code":329,"language":133,"meta":106,"style":106},"autoMiddleware: {\n  rules: [\n    { layouts: ['default'], middlewares: ['track-pageview'] },\n  ],\n},\n",[19,331,332,340,348,362,367],{"__ignoreMap":106},[110,333,334,337],{"class":112,"line":113},[110,335,336],{"class":116},"autoMiddleware",[110,338,339],{"class":157},": {\n",[110,341,342,345],{"class":112,"line":144},[110,343,344],{"class":116},"  rules",[110,346,347],{"class":157},": [\n",[110,349,350,353,355,357,360],{"class":112,"line":161},[110,351,352],{"class":157},"    { layouts: [",[110,354,220],{"class":120},[110,356,223],{"class":157},[110,358,359],{"class":120},"'track-pageview'",[110,361,229],{"class":157},[110,363,364],{"class":112,"line":173},[110,365,366],{"class":157},"  ],\n",[110,368,369],{"class":112,"line":179},[110,370,371],{"class":157},"},\n",[15,373,374,375,378,379,382],{},"Any page using the ",[19,376,377],{},"default"," layout will run ",[19,380,381],{},"~\u002Fmiddleware\u002Ftrack-pageview.ts"," before rendering.",[96,384,386],{"id":385},"named-groups","Named groups",[15,388,389,390,393,394,51],{},"Groups keep rules DRY when the same stack is used from multiple layouts. Unknown ",[19,391,392],{},"@group"," names throw during ",[19,395,396],{},"nuxt prepare",[101,398,400],{"className":131,"code":399,"language":133,"meta":106,"style":106},"autoMiddleware: {\n  groups: {\n    auth:      ['auth', 'verify-role'],\n    adminOnly: ['auth', 'verify-role', 'require-admin'],\n  },\n  rules: [\n    { layouts: ['dashboard', 'dashboard\u002F*'], middlewares: ['@auth'] },\n    { layouts: ['admin', 'admin\u002F*'],         middlewares: ['@adminOnly'] },\n  ],\n},\n",[19,401,402,408,415,431,451,455,461,477,496,500],{"__ignoreMap":106},[110,403,404,406],{"class":112,"line":113},[110,405,336],{"class":116},[110,407,339],{"class":157},[110,409,410,413],{"class":112,"line":144},[110,411,412],{"class":116},"  groups",[110,414,339],{"class":157},[110,416,417,420,423,425,427,429],{"class":112,"line":161},[110,418,419],{"class":116},"    auth",[110,421,422],{"class":157},":      [",[110,424,191],{"class":120},[110,426,194],{"class":157},[110,428,197],{"class":120},[110,430,170],{"class":157},[110,432,433,436,439,441,443,445,447,449],{"class":112,"line":173},[110,434,435],{"class":116},"    adminOnly",[110,437,438],{"class":157},": [",[110,440,191],{"class":120},[110,442,194],{"class":157},[110,444,197],{"class":120},[110,446,194],{"class":157},[110,448,266],{"class":120},[110,450,170],{"class":157},[110,452,453],{"class":112,"line":179},[110,454,303],{"class":157},[110,456,457,459],{"class":112,"line":185},[110,458,344],{"class":116},[110,460,347],{"class":157},[110,462,463,465,467,469,471,473,475],{"class":112,"line":202},[110,464,352],{"class":157},[110,466,237],{"class":120},[110,468,194],{"class":157},[110,470,242],{"class":120},[110,472,223],{"class":157},[110,474,247],{"class":120},[110,476,229],{"class":157},[110,478,479,481,483,485,488,491,494],{"class":112,"line":208},[110,480,352],{"class":157},[110,482,257],{"class":120},[110,484,194],{"class":157},[110,486,487],{"class":120},"'admin\u002F*'",[110,489,490],{"class":157},"],         middlewares: [",[110,492,493],{"class":120},"'@adminOnly'",[110,495,229],{"class":157},[110,497,498],{"class":112,"line":214},[110,499,366],{"class":157},[110,501,502],{"class":112,"line":232},[110,503,371],{"class":157},[96,505,507],{"id":506},"glob-patterns","Glob patterns",[15,509,510,511,514,515,518,519,522],{},"Layouts support ",[19,512,513],{},"*"," (non-slash), ",[19,516,517],{},"**"," (any), and ",[19,520,521],{},"?"," (one non-slash char).",[101,524,526],{"className":131,"code":525,"language":133,"meta":106,"style":106},"rules: [\n  { layouts: ['dashboard\u002F*'], middlewares: ['@auth'] },\n  { layouts: ['admin\u002F**'],    middlewares: ['@adminOnly'] },\n  { layouts: ['settings-?'],  middlewares: ['verify-role'] },\n],\n",[19,527,528,535,548,562,576],{"__ignoreMap":106},[110,529,530,533],{"class":112,"line":113},[110,531,532],{"class":116},"rules",[110,534,347],{"class":157},[110,536,537,540,542,544,546],{"class":112,"line":144},[110,538,539],{"class":157},"  { layouts: [",[110,541,242],{"class":120},[110,543,223],{"class":157},[110,545,247],{"class":120},[110,547,229],{"class":157},[110,549,550,552,555,558,560],{"class":112,"line":161},[110,551,539],{"class":157},[110,553,554],{"class":120},"'admin\u002F**'",[110,556,557],{"class":157},"],    middlewares: [",[110,559,493],{"class":120},[110,561,229],{"class":157},[110,563,564,566,569,572,574],{"class":112,"line":173},[110,565,539],{"class":157},[110,567,568],{"class":120},"'settings-?'",[110,570,571],{"class":157},"],  middlewares: [",[110,573,197],{"class":120},[110,575,229],{"class":157},[110,577,578],{"class":112,"line":179},[110,579,170],{"class":157},[96,581,583],{"id":582},"regexp-patterns","RegExp patterns",[101,585,587],{"className":131,"code":586,"language":133,"meta":106,"style":106},"rules: [\n  { layouts: [\u002F^(dashboard|portal)$\u002F], middlewares: ['@auth'] },\n  { layouts: [\u002F^ops\\\u002F\u002F],               middlewares: ['require-ops'] },\n],\n",[19,588,589,595,626,651],{"__ignoreMap":106},[110,590,591,593],{"class":112,"line":113},[110,592,532],{"class":116},[110,594,347],{"class":157},[110,596,597,599,602,605,609,612,615,618,620,622,624],{"class":112,"line":144},[110,598,539],{"class":157},[110,600,601],{"class":120},"\u002F",[110,603,604],{"class":147},"^",[110,606,608],{"class":607},"se7xv","(dashboard",[110,610,611],{"class":147},"|",[110,613,614],{"class":607},"portal)",[110,616,617],{"class":147},"$",[110,619,601],{"class":120},[110,621,223],{"class":157},[110,623,247],{"class":120},[110,625,229],{"class":157},[110,627,628,630,632,634,637,641,643,646,649],{"class":112,"line":161},[110,629,539],{"class":157},[110,631,601],{"class":120},[110,633,604],{"class":147},[110,635,636],{"class":607},"ops",[110,638,640],{"class":639},"s-Lb2","\\\u002F",[110,642,601],{"class":120},[110,644,645],{"class":157},"],               middlewares: [",[110,647,648],{"class":120},"'require-ops'",[110,650,229],{"class":157},[110,652,653],{"class":112,"line":173},[110,654,170],{"class":157},[96,656,658],{"id":657},"per-page-extras","Per-page extras",[15,660,661,662,665,666,51],{},"Append middlewares for one page without changing the global rules. The field name (",[19,663,664],{},"middlewares"," by default) is configurable via ",[19,667,668],{},"pageMetaField",[101,670,674],{"className":671,"code":672,"language":673,"meta":106,"style":106},"language-vue shiki shiki-themes github-dark github-dark","\u003Cscript setup lang=\"ts\">\ndefinePageMeta({\n  layout: 'dashboard',\n  middlewares: ['force-2fa'], \u002F\u002F runs AFTER @auth resolved from the layout rule\n});\n\u003C\u002Fscript>\n","vue",[19,675,676,700,707,716,730,734],{"__ignoreMap":106},[110,677,678,681,685,688,691,694,697],{"class":112,"line":113},[110,679,680],{"class":157},"\u003C",[110,682,684],{"class":683},"sxg3X","script",[110,686,687],{"class":116}," setup",[110,689,690],{"class":116}," lang",[110,692,693],{"class":157},"=",[110,695,696],{"class":120},"\"ts\"",[110,698,699],{"class":157},">\n",[110,701,702,705],{"class":112,"line":144},[110,703,704],{"class":116},"definePageMeta",[110,706,158],{"class":157},[110,708,709,712,714],{"class":112,"line":161},[110,710,711],{"class":157},"  layout: ",[110,713,237],{"class":120},[110,715,286],{"class":157},[110,717,718,721,724,727],{"class":112,"line":173},[110,719,720],{"class":157},"  middlewares: [",[110,722,723],{"class":120},"'force-2fa'",[110,725,726],{"class":157},"], ",[110,728,729],{"class":140},"\u002F\u002F runs AFTER @auth resolved from the layout rule\n",[110,731,732],{"class":112,"line":179},[110,733,309],{"class":157},[110,735,736,739,741],{"class":112,"line":185},[110,737,738],{"class":157},"\u003C\u002F",[110,740,684],{"class":683},[110,742,699],{"class":157},[15,744,745,746,748],{},"Because ",[19,747,73],{}," is generated from your rules + groups, typos are compile-time errors.",[96,750,752],{"id":751},"opt-a-page-out-entirely","Opt a page out entirely",[101,754,756],{"className":671,"code":755,"language":673,"meta":106,"style":106},"\u003Cscript setup lang=\"ts\">\ndefinePageMeta({\n  layout: 'dashboard',\n  skipAutoMiddleware: true,\n});\n\u003C\u002Fscript>\n",[19,757,758,774,780,788,798,802],{"__ignoreMap":106},[110,759,760,762,764,766,768,770,772],{"class":112,"line":113},[110,761,680],{"class":157},[110,763,684],{"class":683},[110,765,687],{"class":116},[110,767,690],{"class":116},[110,769,693],{"class":157},[110,771,696],{"class":120},[110,773,699],{"class":157},[110,775,776,778],{"class":112,"line":144},[110,777,704],{"class":116},[110,779,158],{"class":157},[110,781,782,784,786],{"class":112,"line":161},[110,783,711],{"class":157},[110,785,237],{"class":120},[110,787,286],{"class":157},[110,789,790,793,796],{"class":112,"line":173},[110,791,792],{"class":157},"  skipAutoMiddleware: ",[110,794,795],{"class":283},"true",[110,797,286],{"class":157},[110,799,800],{"class":112,"line":179},[110,801,309],{"class":157},[110,803,804,806,808],{"class":112,"line":185},[110,805,738],{"class":157},[110,807,684],{"class":683},[110,809,699],{"class":157},[96,811,813],{"id":812},"catch-all-layout","Catch-all layout",[15,815,816,817,819,820,61,823,825],{},"Use ",[19,818,517],{}," to run a middleware for every layout (except pages with ",[19,821,822],{},"layout: false",[19,824,64],{},"):",[101,827,829],{"className":131,"code":828,"language":133,"meta":106,"style":106},"rules: [\n  { layouts: ['**'], middlewares: ['track-pageview'] },\n  { layouts: ['dashboard', 'admin'], middlewares: ['@auth'] },\n],\n",[19,830,831,837,850,866],{"__ignoreMap":106},[110,832,833,835],{"class":112,"line":113},[110,834,532],{"class":116},[110,836,347],{"class":157},[110,838,839,841,844,846,848],{"class":112,"line":144},[110,840,539],{"class":157},[110,842,843],{"class":120},"'**'",[110,845,223],{"class":157},[110,847,359],{"class":120},[110,849,229],{"class":157},[110,851,852,854,856,858,860,862,864],{"class":112,"line":161},[110,853,539],{"class":157},[110,855,237],{"class":120},[110,857,194],{"class":157},[110,859,257],{"class":120},[110,861,223],{"class":157},[110,863,247],{"class":120},[110,865,229],{"class":157},[110,867,868],{"class":112,"line":173},[110,869,170],{"class":157},[15,871,872],{},"When multiple rules match, middlewares are concatenated in config order and deduped (first occurrence wins).",[96,874,876],{"id":875},"middleware-return-values","Middleware return values",[15,878,879,880,883],{},"Middleware functions receive ",[19,881,882],{},"(to, from)"," exactly like standard Nuxt route middlewares.",[885,886,887,900],"table",{},[888,889,890],"thead",{},[891,892,893,897],"tr",{},[894,895,896],"th",{},"Return",[894,898,899],{},"Behaviour",[901,902,903,913,923],"tbody",{},[891,904,905,910],{},[906,907,908],"td",{},[19,909,87],{},[906,911,912],{},"Stop the chain, allow navigation.",[891,914,915,920],{},[906,916,917,919],{},[19,918,795],{}," \u002F void",[906,921,922],{},"Continue to the next middleware.",[891,924,925,928],{},[906,926,927],{},"anything else",[906,929,930],{},"Treated as a navigation result — chain stops.",[101,932,934],{"className":131,"code":933,"language":133,"meta":106,"style":106},"\u002F\u002F ~\u002Fmiddleware\u002Fauth.ts\nexport default defineNuxtRouteMiddleware(() => {\n  const token = useCookie('token').value;\n  if (!token) return navigateTo('\u002Flogin');\n});\n",[19,935,936,941,959,982,1010],{"__ignoreMap":106},[110,937,938],{"class":112,"line":113},[110,939,940],{"class":140},"\u002F\u002F ~\u002Fmiddleware\u002Fauth.ts\n",[110,942,943,945,947,950,953,956],{"class":112,"line":144},[110,944,148],{"class":147},[110,946,151],{"class":147},[110,948,949],{"class":116}," defineNuxtRouteMiddleware",[110,951,952],{"class":157},"(() ",[110,954,955],{"class":147},"=>",[110,957,958],{"class":157}," {\n",[110,960,961,964,967,970,973,976,979],{"class":112,"line":161},[110,962,963],{"class":147},"  const",[110,965,966],{"class":283}," token",[110,968,969],{"class":147}," =",[110,971,972],{"class":116}," useCookie",[110,974,975],{"class":157},"(",[110,977,978],{"class":120},"'token'",[110,980,981],{"class":157},").value;\n",[110,983,984,987,990,993,996,999,1002,1004,1007],{"class":112,"line":173},[110,985,986],{"class":147},"  if",[110,988,989],{"class":157}," (",[110,991,992],{"class":147},"!",[110,994,995],{"class":157},"token) ",[110,997,998],{"class":147},"return",[110,1000,1001],{"class":116}," navigateTo",[110,1003,975],{"class":157},[110,1005,1006],{"class":120},"'\u002Flogin'",[110,1008,1009],{"class":157},");\n",[110,1011,1012],{"class":112,"line":179},[110,1013,309],{"class":157},[15,1015,1016,1017,1020,1021,1024],{},"Every middleware runs inside ",[19,1018,1019],{},"callWithNuxt()",", so ",[19,1022,1023],{},"useNuxtApp()"," \u002F composables work as usual.",[96,1026,69],{"id":1027},"typed-registry",[15,1029,1030,1031,1034],{},"The module emits ",[19,1032,1033],{},"#build\u002Fauto-middleware\u002Ftypes.d.ts"," with:",[101,1036,1038],{"className":131,"code":1037,"language":133,"meta":106,"style":106},"export type AutoMiddlewareName = 'auth' | 'verify-role' | 'require-admin' | 'log-activity';\n",[19,1039,1040],{"__ignoreMap":106},[110,1041,1042,1044,1047,1050,1052,1055,1058,1061,1063,1066,1068,1071],{"class":112,"line":113},[110,1043,148],{"class":147},[110,1045,1046],{"class":147}," type",[110,1048,1049],{"class":116}," AutoMiddlewareName",[110,1051,969],{"class":147},[110,1053,1054],{"class":120}," 'auth'",[110,1056,1057],{"class":147}," |",[110,1059,1060],{"class":120}," 'verify-role'",[110,1062,1057],{"class":147},[110,1064,1065],{"class":120}," 'require-admin'",[110,1067,1057],{"class":147},[110,1069,1070],{"class":120}," 'log-activity'",[110,1072,1073],{"class":157},";\n",[15,1075,1076,1077,1080,1081,1084,1085,51],{},"…plus an augmentation that adds ",[19,1078,1079],{},"middlewares?: AutoMiddlewareName[]"," and ",[19,1082,1083],{},"skipAutoMiddleware?: boolean"," to ",[19,1086,77],{},[96,1088,1090],{"id":1089},"matching-rules","Matching rules",[24,1092,1093,1098,1103,1107,1114],{},[27,1094,1095,1096,51],{},"A page with no explicit layout is treated as ",[19,1097,377],{},[27,1099,1100,1102],{},[19,1101,822],{}," is skipped.",[27,1104,1105,1102],{},[19,1106,64],{},[27,1108,1109,1110,1113],{},"Layout pattern matching is ",[30,1111,1112],{},"anchored"," — partial matches don't count.",[27,1115,1116],{},"Multiple matches are concatenated in config order and deduped.",[96,1118,1120],{"id":1119},"module-options","Module options",[885,1122,1123,1139],{},[888,1124,1125],{},[891,1126,1127,1130,1133,1136],{},[894,1128,1129],{},"Option",[894,1131,1132],{},"Type",[894,1134,1135],{},"Default",[894,1137,1138],{},"Purpose",[901,1140,1141,1160,1184,1203],{},[891,1142,1143,1147,1152,1157],{},[906,1144,1145],{},[19,1146,532],{},[906,1148,1149],{},[19,1150,1151],{},"AutoMiddlewareRule[]",[906,1153,1154],{},[19,1155,1156],{},"[]",[906,1158,1159],{},"Layout → middlewares mapping. Required.",[891,1161,1162,1167,1172,1177],{},[906,1163,1164],{},[19,1165,1166],{},"groups",[906,1168,1169],{},[19,1170,1171],{},"Record\u003Cstring, string[]>",[906,1173,1174],{},[19,1175,1176],{},"{}",[906,1178,1179,1180,1183],{},"Named reusable middleware lists, referenced via ",[19,1181,1182],{},"@name"," inside rules.",[891,1185,1186,1191,1196,1200],{},[906,1187,1188],{},[19,1189,1190],{},"debug",[906,1192,1193],{},[19,1194,1195],{},"boolean",[906,1197,1198],{},[19,1199,87],{},[906,1201,1202],{},"Log resolution + execution at runtime.",[891,1204,1205,1209,1214,1218],{},[906,1206,1207],{},[19,1208,668],{},[906,1210,1211],{},[19,1212,1213],{},"string | false",[906,1215,1216],{},[19,1217,295],{},[906,1219,1220],{},"Page-meta key used to append extra middlewares.",[96,1222,1224],{"id":1223},"exported-types","Exported types",[101,1226,1228],{"className":131,"code":1227,"language":133,"meta":106,"style":106},"import type {\n  AutoMiddlewareOptions,\n  AutoMiddlewareRule,\n} from '@alikhalilll\u002Fnuxt-auto-middleware\u002Ftypes';\n",[19,1229,1230,1239,1244,1249],{"__ignoreMap":106},[110,1231,1232,1235,1237],{"class":112,"line":113},[110,1233,1234],{"class":147},"import",[110,1236,1046],{"class":147},[110,1238,958],{"class":157},[110,1240,1241],{"class":112,"line":144},[110,1242,1243],{"class":157},"  AutoMiddlewareOptions,\n",[110,1245,1246],{"class":112,"line":161},[110,1247,1248],{"class":157},"  AutoMiddlewareRule,\n",[110,1250,1251,1254,1257,1260],{"class":112,"line":173},[110,1252,1253],{"class":157},"} ",[110,1255,1256],{"class":147},"from",[110,1258,1259],{"class":120}," '@alikhalilll\u002Fnuxt-auto-middleware\u002Ftypes'",[110,1261,1073],{"class":157},[1263,1264,1265],"style",{},"html pre.shiki code .sFR8T, html code.shiki .sFR8T{--shiki-default:#B392F0;--shiki-dark:#B392F0}html pre.shiki code .s4wv1, html code.shiki .s4wv1{--shiki-default:#9ECBFF;--shiki-dark:#9ECBFF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sOPea, html code.shiki .sOPea{--shiki-default:#F97583;--shiki-dark:#F97583}html pre.shiki code .suv1-, html code.shiki .suv1-{--shiki-default:#E1E4E8;--shiki-dark:#E1E4E8}html pre.shiki code .s8ozJ, html code.shiki .s8ozJ{--shiki-default:#79B8FF;--shiki-dark:#79B8FF}html pre.shiki code .se7xv, html code.shiki .se7xv{--shiki-default:#DBEDFF;--shiki-dark:#DBEDFF}html pre.shiki code .s-Lb2, html code.shiki .s-Lb2{--shiki-default:#85E89D;--shiki-default-font-weight:bold;--shiki-dark:#85E89D;--shiki-dark-font-weight:bold}html pre.shiki code .sxg3X, html code.shiki .sxg3X{--shiki-default:#85E89D;--shiki-dark:#85E89D}",{"title":106,"searchDepth":144,"depth":144,"links":1267},[1268,1269,1270,1271,1272,1273,1274,1275,1276,1277,1278,1279,1280,1281],{"id":98,"depth":144,"text":99},{"id":127,"depth":144,"text":128},{"id":325,"depth":144,"text":326},{"id":385,"depth":144,"text":386},{"id":506,"depth":144,"text":507},{"id":582,"depth":144,"text":583},{"id":657,"depth":144,"text":658},{"id":751,"depth":144,"text":752},{"id":812,"depth":144,"text":813},{"id":875,"depth":144,"text":876},{"id":1027,"depth":144,"text":69},{"id":1089,"depth":144,"text":1090},{"id":1119,"depth":144,"text":1120},{"id":1223,"depth":144,"text":1224},"Declarative, layout-based route middleware for Nuxt 3\u002F4 with glob patterns, named groups, and per-page overrides.","md",{},true,"\u002Fauto-middleware",{"title":5,"description":1282},"cTnpl_5IAOhsYjCQhK47rYI5GOJoy-0qMjxfogX-KB0",1776531510116]