[{"data":1,"prerenderedAt":1701},["ShallowReactive",2],{"navigation":3,"v3-navigation":406,"\u002Fcontributing\u002Ftesting":733,"\u002Fcontributing\u002Ftesting-surround":1696},[4,130,180,277,298,319,346],{"title":5,"order":6,"path":7,"stem":8,"children":9,"page":129},"Guide",10,"\u002Fguide","guide",[10,14,19,24,29,35,40,45,50,56,61,66,71,76,82,87,93,98,103,109,114,119,124],{"title":11,"path":12,"stem":13,"order":6,"group":11},"Getting started","\u002Fguide\u002Fgetting-started","guide\u002Fgetting-started",{"title":15,"path":16,"stem":17,"order":18,"group":11},"Migrating from @nuxtjs\u002Fi18n","\u002Fguide\u002Fmigration","guide\u002Fmigration",20,{"title":20,"path":21,"stem":22,"order":23,"group":11},"Upgrading","\u002Fguide\u002Fupgrade","guide\u002Fupgrade",30,{"title":25,"path":26,"stem":27,"order":28,"group":11},"FAQ","\u002Fguide\u002Ffaq","guide\u002Ffaq",40,{"title":30,"path":31,"stem":32,"order":33,"group":34},"Translation files","\u002Fguide\u002Ftranslations","guide\u002Ftranslations",50,"Core concepts",{"title":36,"path":37,"stem":38,"order":39,"group":34},"Page config","\u002Fguide\u002Fper-component-translations","guide\u002Fper-component-translations",60,{"title":41,"path":42,"stem":43,"order":44,"group":34},"Runtime overrides","\u002Fguide\u002Fruntime-overrides","guide\u002Fruntime-overrides",70,{"title":46,"path":47,"stem":48,"order":49,"group":34},"Server routes and API","\u002Fguide\u002Fserver-side-translations","guide\u002Fserver-side-translations",80,{"title":51,"path":52,"stem":53,"order":54,"group":55},"Routing strategies","\u002Fguide\u002Fstrategy","guide\u002Fstrategy",90,"Routing",{"title":57,"path":58,"stem":59,"order":60,"group":55},"Locale detection","\u002Fguide\u002Flocale-detection","guide\u002Flocale-detection",100,{"title":62,"path":63,"stem":64,"order":65,"group":55},"Localized paths","\u002Fguide\u002Fcustom-locale-routes","guide\u002Fcustom-locale-routes",110,{"title":67,"path":68,"stem":69,"order":70,"group":55},"Custom locale detection","\u002Fguide\u002Fcustom-auto-detect","guide\u002Fcustom-auto-detect",120,{"title":72,"path":73,"stem":74,"order":75,"group":55},"Excluding paths","\u002Fguide\u002Fexcluding-static-files","guide\u002Fexcluding-static-files",130,{"title":77,"path":78,"stem":79,"order":80,"group":81},"SEO","\u002Fguide\u002Fseo","guide\u002Fseo",140,"SEO and domains",{"title":83,"path":84,"stem":85,"order":86,"group":81},"Layers and domains","\u002Fguide\u002Flayers","guide\u002Flayers",150,{"title":88,"path":89,"stem":90,"order":91,"group":92},"Deployment","\u002Fguide\u002Fdeployment","guide\u002Fdeployment",160,"Production",{"title":94,"path":95,"stem":96,"order":97,"group":92},"Performance tuning","\u002Fguide\u002Fperformance","guide\u002Fperformance",170,{"title":99,"path":100,"stem":101,"order":102,"group":92},"Performance Test Results","\u002Fguide\u002Fperformance-results","guide\u002Fperformance-results",180,{"title":104,"path":105,"stem":106,"order":107,"group":108},"DevTools","\u002Fguide\u002Fdevtools","guide\u002Fdevtools",190,"Tooling",{"title":110,"path":111,"stem":112,"order":113,"group":108},"CLI","\u002Fguide\u002Fcli","guide\u002Fcli",200,{"title":115,"path":116,"stem":117,"order":118,"group":108},"Testing your app","\u002Fguide\u002Ftesting","guide\u002Ftesting",210,{"title":120,"path":121,"stem":122,"order":123,"group":108},"Storybook","\u002Fguide\u002Fstorybook","guide\u002Fstorybook",220,{"title":125,"path":126,"stem":127,"order":128,"group":108},"Crowdin","\u002Fguide\u002Fcrowdin","guide\u002Fcrowdin",230,false,{"title":131,"order":18,"path":132,"stem":133,"children":134},"Frameworks","\u002Fintegrations","integrations",[135,138,143,147,151,155,159,163,168,172,176],{"title":136,"path":132,"stem":137,"order":6},"Overview","integrations\u002Findex",{"title":139,"path":140,"stem":141,"order":18,"group":142},"Vue","\u002Fintegrations\u002Fvue-package","integrations\u002Fvue-package","UI frameworks",{"title":144,"path":145,"stem":146,"order":23,"group":142},"React and Preact","\u002Fintegrations\u002Freact-package","integrations\u002Freact-package",{"title":148,"path":149,"stem":150,"order":28,"group":142},"Solid","\u002Fintegrations\u002Fsolid-package","integrations\u002Fsolid-package",{"title":152,"path":153,"stem":154,"order":33,"group":142},"Astro","\u002Fintegrations\u002Fastro-package","integrations\u002Fastro-package",{"title":156,"path":157,"stem":158,"order":39,"group":142},"Astro islands","\u002Fintegrations\u002Fastro-islands","integrations\u002Fastro-islands",{"title":160,"path":161,"stem":162,"order":44,"group":142},"VitePress","\u002Fintegrations\u002Fvitepress-package","integrations\u002Fvitepress-package",{"title":164,"path":165,"stem":166,"order":49,"group":167},"Runtime","\u002Fintegrations\u002Fruntime-package","integrations\u002Fruntime-package","Runtimes",{"title":169,"path":170,"stem":171,"order":54,"group":167},"Node.js","\u002Fintegrations\u002Fnodejs-package","integrations\u002Fnodejs-package",{"title":173,"path":174,"stem":175,"order":60,"group":108},"Types generator","\u002Fintegrations\u002Ftypes-generator","integrations\u002Ftypes-generator",{"title":177,"path":178,"stem":179,"order":65,"group":108},"DevTools UI","\u002Fintegrations\u002Fdevtools-ui-package","integrations\u002Fdevtools-ui-package",{"title":181,"order":23,"path":182,"stem":183,"children":184},"API","\u002Fapi","api",[185,188,192,196,200,204],{"title":186,"path":182,"stem":187,"order":6},"API reference","api\u002Findex",{"title":189,"path":190,"stem":191,"order":18},"Module options","\u002Fapi\u002Fmodule-options","api\u002Fmodule-options",{"title":193,"path":194,"stem":195,"order":23},"CLI commands","\u002Fapi\u002Fcli","api\u002Fcli",{"title":197,"path":198,"stem":199,"order":28},"Helpers","\u002Fapi\u002Fmethods","api\u002Fmethods",{"title":201,"path":202,"stem":203,"order":33},"Hooks","\u002Fapi\u002Fevents","api\u002Fevents",{"title":205,"path":206,"stem":207,"children":208,"order":39},"Package APIs","\u002Fapi\u002Fpackages","api\u002Fpackages",[209,213,217,221,225,229,233,237,241,245,249,253,257,261,265,269,273],{"title":210,"path":211,"stem":212},"astro","\u002Fapi\u002Fpackages\u002Fastro","api\u002Fpackages\u002Fastro",{"title":214,"path":215,"stem":216},"cli","\u002Fapi\u002Fpackages\u002Fcli","api\u002Fpackages\u002Fcli",{"title":218,"path":219,"stem":220},"core","\u002Fapi\u002Fpackages\u002Fcore","api\u002Fpackages\u002Fcore",{"title":222,"path":223,"stem":224},"devtools-ui","\u002Fapi\u002Fpackages\u002Fdevtools-ui","api\u002Fpackages\u002Fdevtools-ui",{"title":226,"path":227,"stem":228},"node","\u002Fapi\u002Fpackages\u002Fnode","api\u002Fpackages\u002Fnode",{"title":230,"path":231,"stem":232},"path-strategy","\u002Fapi\u002Fpackages\u002Fpath-strategy","api\u002Fpackages\u002Fpath-strategy",{"title":234,"path":235,"stem":236},"preact","\u002Fapi\u002Fpackages\u002Fpreact","api\u002Fpackages\u002Fpreact",{"title":238,"path":239,"stem":240},"react","\u002Fapi\u002Fpackages\u002Freact","api\u002Fpackages\u002Freact",{"title":242,"path":243,"stem":244},"route-strategy","\u002Fapi\u002Fpackages\u002Froute-strategy","api\u002Fpackages\u002Froute-strategy",{"title":246,"path":247,"stem":248},"runtime","\u002Fapi\u002Fpackages\u002Fruntime","api\u002Fpackages\u002Fruntime",{"title":250,"path":251,"stem":252},"solid","\u002Fapi\u002Fpackages\u002Fsolid","api\u002Fpackages\u002Fsolid",{"title":254,"path":255,"stem":256},"test-utils","\u002Fapi\u002Fpackages\u002Ftest-utils","api\u002Fpackages\u002Ftest-utils",{"title":258,"path":259,"stem":260},"types","\u002Fapi\u002Fpackages\u002Ftypes","api\u002Fpackages\u002Ftypes",{"title":262,"path":263,"stem":264},"types-generator","\u002Fapi\u002Fpackages\u002Ftypes-generator","api\u002Fpackages\u002Ftypes-generator",{"title":266,"path":267,"stem":268},"utils","\u002Fapi\u002Fpackages\u002Futils","api\u002Fpackages\u002Futils",{"title":270,"path":271,"stem":272},"vitepress","\u002Fapi\u002Fpackages\u002Fvitepress","api\u002Fpackages\u002Fvitepress",{"title":274,"path":275,"stem":276},"vue","\u002Fapi\u002Fpackages\u002Fvue","api\u002Fpackages\u002Fvue",{"title":278,"order":28,"path":279,"stem":280,"children":281,"page":129},"Composables","\u002Fcomposables","composables",[282,286,290,294],{"title":283,"path":284,"stem":285,"order":6},"useI18n","\u002Fcomposables\u002FuseI18n","composables\u002FuseI18n",{"title":287,"path":288,"stem":289,"order":18},"useI18nLocale","\u002Fcomposables\u002FuseI18nLocale","composables\u002FuseI18nLocale",{"title":291,"path":292,"stem":293,"order":23},"useI18nHead","\u002Fcomposables\u002FuseI18nHead","composables\u002FuseI18nHead",{"title":295,"path":296,"stem":297,"order":28},"useLocaleHead","\u002Fcomposables\u002FuseLocaleHead","composables\u002FuseLocaleHead",{"title":299,"order":33,"path":300,"stem":301,"children":302,"page":129},"Components","\u002Fcomponents","components",[303,307,311,315],{"title":304,"path":305,"stem":306,"order":6},"\u003Ci18n-t>","\u002Fcomponents\u002Fi18n-t","components\u002Fi18n-t",{"title":308,"path":309,"stem":310,"order":18},"\u003Ci18n-link>","\u002Fcomponents\u002Fi18n-link","components\u002Fi18n-link",{"title":312,"path":313,"stem":314,"order":23},"\u003Ci18n-switcher>","\u002Fcomponents\u002Fi18n-switcher","components\u002Fi18n-switcher",{"title":316,"path":317,"stem":318,"order":28},"\u003Ci18n-group>","\u002Fcomponents\u002Fi18n-group","components\u002Fi18n-group",{"title":320,"order":39,"path":321,"stem":322,"children":323},"Contributing","\u002Fcontributing","contributing",[324,326,330,334,338,342],{"title":320,"path":321,"stem":325,"order":6},"contributing\u002Findex",{"title":327,"path":328,"stem":329,"order":18},"Architecture","\u002Fcontributing\u002Farchitecture","contributing\u002Farchitecture",{"title":331,"path":332,"stem":333,"order":23},"Testing the module","\u002Fcontributing\u002Ftesting","contributing\u002Ftesting",{"title":335,"path":336,"stem":337,"order":28},"Maintenance commands","\u002Fcontributing\u002Fmaintenance-commands","contributing\u002Fmaintenance-commands",{"title":339,"path":340,"stem":341,"order":33},"Release smoke checks","\u002Fcontributing\u002Frelease-smoke","contributing\u002Frelease-smoke",{"title":343,"path":344,"stem":345,"order":39},"Benchmark methodology","\u002Fcontributing\u002Fperformance-methodology","contributing\u002Fperformance-methodology",{"title":347,"path":348,"stem":349,"children":350,"order":44},"News","\u002Fnews","news\u002Findex",[351,354,358,362,366,370,374,378,382,386,390,394,398,402],{"title":352,"path":348,"stem":349,"order":353},"News & Releases",1,{"title":355,"path":356,"stem":357,"order":6},"v4.0.0","\u002Fnews\u002Fv4.0.0","news\u002Fv4.0.0",{"title":359,"path":360,"stem":361,"order":18},"v3.24.0","\u002Fnews\u002Fv3.24.0","news\u002Fv3.24.0",{"title":363,"path":364,"stem":365,"order":23},"v3.22.0","\u002Fnews\u002Fv3.22.0","news\u002Fv3.22.0",{"title":367,"path":368,"stem":369,"order":28},"v3.21.0","\u002Fnews\u002Fv3.21.0","news\u002Fv3.21.0",{"title":371,"path":372,"stem":373,"order":33},"v3.20.0","\u002Fnews\u002Fv3.20.0","news\u002Fv3.20.0",{"title":375,"path":376,"stem":377,"order":39},"v3.19.0","\u002Fnews\u002Fv3.19.0","news\u002Fv3.19.0",{"title":379,"path":380,"stem":381,"order":44},"v3.0.0","\u002Fnews\u002Fv3.0.0","news\u002Fv3.0.0",{"title":383,"path":384,"stem":385,"order":49},"v2.14.1","\u002Fnews\u002Fv2.14.1","news\u002Fv2.14.1",{"title":387,"path":388,"stem":389,"order":54},"v2.0.0","\u002Fnews\u002Fv2.0.0","news\u002Fv2.0.0",{"title":391,"path":392,"stem":393,"order":60},"v1.73.0","\u002Fnews\u002Fv1.73.0","news\u002Fv1.73.0",{"title":395,"path":396,"stem":397,"order":65},"v1.65.0","\u002Fnews\u002Fv1.65.0","news\u002Fv1.65.0",{"title":399,"path":400,"stem":401,"order":70},"v1.58.0","\u002Fnews\u002Fv1.58.0","news\u002Fv1.58.0",{"title":403,"path":404,"stem":405,"order":75},"v1.1.0","\u002Fnews\u002Fv1.1.0","news\u002Fv1.1.0",[407],{"title":408,"path":409,"stem":410,"children":411},"V3","\u002Fv3","v3",[412,415,552,598,691,712,729],{"title":136,"path":409,"stem":413,"order":414},"v3\u002Findex",0,{"title":5,"order":6,"path":416,"stem":417,"children":418,"page":129},"\u002Fv3\u002Fguide","v3\u002Fguide",[419,424,428,432,436,441,445,449,453,457,461,465,469,473,478,482,487,491,495,499,503,507,511,514,518,522,527,533,538,542,547],{"title":420,"path":421,"stem":422,"order":6,"group":423},"Getting Started","\u002Fv3\u002Fguide\u002Fgetting-started","v3\u002Fguide\u002Fgetting-started","Basics",{"title":425,"path":426,"stem":427,"order":18,"group":423},"Configuration","\u002Fv3\u002Fguide\u002Fconfiguration","v3\u002Fguide\u002Fconfiguration",{"title":429,"path":430,"stem":431,"order":23,"group":423},"Folder Structure","\u002Fv3\u002Fguide\u002Ffolder-structure","v3\u002Fguide\u002Ffolder-structure",{"title":433,"path":434,"stem":435,"order":28,"group":423},"Routing Strategy","\u002Fv3\u002Fguide\u002Fstrategy","v3\u002Fguide\u002Fstrategy",{"title":437,"path":438,"stem":439,"order":33,"group":440},"Translating Content","\u002Fv3\u002Fguide\u002Fusing","v3\u002Fguide\u002Fusing","Usage",{"title":442,"path":443,"stem":444,"order":39,"group":440},"Per Component Translations","\u002Fv3\u002Fguide\u002Fper-component-translations","v3\u002Fguide\u002Fper-component-translations",{"title":446,"path":447,"stem":448,"order":44,"group":440},"Custom Localized Routes","\u002Fv3\u002Fguide\u002Fcustom-locale-routes","v3\u002Fguide\u002Fcustom-locale-routes",{"title":450,"path":451,"stem":452,"order":49,"group":440},"Custom Auto Detect","\u002Fv3\u002Fguide\u002Fcustom-auto-detect","v3\u002Fguide\u002Fcustom-auto-detect",{"title":454,"path":455,"stem":456,"order":54,"group":440},"Runtime Overrides","\u002Fv3\u002Fguide\u002Fruntime-overrides","v3\u002Fguide\u002Fruntime-overrides",{"title":458,"path":459,"stem":460,"order":60,"group":440},"Layers","\u002Fv3\u002Fguide\u002Flayers","v3\u002Fguide\u002Flayers",{"title":77,"path":462,"stem":463,"order":65,"group":464},"\u002Fv3\u002Fguide\u002Fseo","v3\u002Fguide\u002Fseo","SEO & URLs",{"title":466,"path":467,"stem":468,"order":70,"group":464},"Multi Domain Locales","\u002Fv3\u002Fguide\u002Fmulti-domain-locales","v3\u002Fguide\u002Fmulti-domain-locales",{"title":470,"path":471,"stem":472,"order":75,"group":464},"Excluding Static Files","\u002Fv3\u002Fguide\u002Fexcluding-static-files","v3\u002Fguide\u002Fexcluding-static-files",{"title":474,"path":475,"stem":476,"order":80,"group":477},"Performance","\u002Fv3\u002Fguide\u002Fperformance","v3\u002Fguide\u002Fperformance","Performance & Deployment",{"title":479,"path":480,"stem":481,"order":86,"group":477},"Benchmark Results","\u002Fv3\u002Fguide\u002Fperformance-results","v3\u002Fguide\u002Fperformance-results",{"title":483,"path":484,"stem":485,"order":486,"group":477},"Performance methodology","\u002Fv3\u002Fguide\u002Fperformance-methodology","v3\u002Fguide\u002Fperformance-methodology",155,{"title":488,"path":489,"stem":490,"order":91,"group":477},"Server Side Translations","\u002Fv3\u002Fguide\u002Fserver-side-translations","v3\u002Fguide\u002Fserver-side-translations",{"title":492,"path":493,"stem":494,"order":97,"group":477},"Firebase Deployment","\u002Fv3\u002Fguide\u002Ffirebase","v3\u002Fguide\u002Ffirebase",{"title":496,"path":497,"stem":498,"order":102,"group":477},"Release Smoke Checks","\u002Fv3\u002Fguide\u002Frelease-smoke","v3\u002Fguide\u002Frelease-smoke",{"title":500,"path":501,"stem":502,"order":107,"group":477},"Preset local testing","\u002Fv3\u002Fguide\u002Fpreset-local-testing","v3\u002Fguide\u002Fpreset-local-testing",{"title":504,"path":505,"stem":506,"order":113,"group":477},"Maintenance Commands","\u002Fv3\u002Fguide\u002Fmaintenance-commands","v3\u002Fguide\u002Fmaintenance-commands",{"title":508,"path":509,"stem":510,"order":118,"group":108},"CLI Tool","\u002Fv3\u002Fguide\u002Fcli","v3\u002Fguide\u002Fcli",{"title":104,"path":512,"stem":513,"order":123,"group":108},"\u002Fv3\u002Fguide\u002Fdevtools","v3\u002Fguide\u002Fdevtools",{"title":515,"path":516,"stem":517,"order":128,"group":108},"Testing Your App","\u002Fv3\u002Fguide\u002Ftesting","v3\u002Fguide\u002Ftesting",{"title":120,"path":519,"stem":520,"order":521,"group":108},"\u002Fv3\u002Fguide\u002Fstorybook","v3\u002Fguide\u002Fstorybook",240,{"title":523,"path":524,"stem":525,"order":526,"group":108},"Crowdin Integration","\u002Fv3\u002Fguide\u002Fcrowdin","v3\u002Fguide\u002Fcrowdin",250,{"title":528,"path":529,"stem":530,"order":531,"group":532},"Migration from nuxt-i18n","\u002Fv3\u002Fguide\u002Fmigration","v3\u002Fguide\u002Fmigration",260,"Migration & Help",{"title":534,"path":535,"stem":536,"order":537,"group":532},"Upgrade to v3","\u002Fv3\u002Fguide\u002Fv3-upgrade","v3\u002Fguide\u002Fv3-upgrade",270,{"title":25,"path":539,"stem":540,"order":541,"group":532},"\u002Fv3\u002Fguide\u002Ffaq","v3\u002Fguide\u002Ffaq",280,{"title":543,"path":544,"stem":545,"order":546,"group":532},"Contribution","\u002Fv3\u002Fguide\u002Fcontribution","v3\u002Fguide\u002Fcontribution",290,{"title":548,"path":549,"stem":550,"order":551,"group":532},"Testing the Module","\u002Fv3\u002Fguide\u002Ftesting-strategies","v3\u002Fguide\u002Ftesting-strategies",300,{"title":553,"order":18,"path":554,"stem":555,"children":556},"Integrations","\u002Fv3\u002Fintegrations","v3\u002Fintegrations\u002Findex",[557,558,562,566,570,574,578,582,586,590,594],{"title":136,"path":554,"stem":555,"order":6},{"title":559,"path":560,"stem":561,"order":18},"Vue Package","\u002Fv3\u002Fintegrations\u002Fvue-package","v3\u002Fintegrations\u002Fvue-package",{"title":563,"path":564,"stem":565,"order":23},"React Package","\u002Fv3\u002Fintegrations\u002Freact-package","v3\u002Fintegrations\u002Freact-package",{"title":567,"path":568,"stem":569,"order":28},"Preact Package","\u002Fv3\u002Fintegrations\u002Fpreact-package","v3\u002Fintegrations\u002Fpreact-package",{"title":571,"path":572,"stem":573,"order":33},"Solid Package","\u002Fv3\u002Fintegrations\u002Fsolid-package","v3\u002Fintegrations\u002Fsolid-package",{"title":575,"path":576,"stem":577,"order":39},"Astro Package","\u002Fv3\u002Fintegrations\u002Fastro-package","v3\u002Fintegrations\u002Fastro-package",{"title":579,"path":580,"stem":581,"order":44},"VitePress Package","\u002Fv3\u002Fintegrations\u002Fvitepress-package","v3\u002Fintegrations\u002Fvitepress-package",{"title":583,"path":584,"stem":585,"order":49},"Runtime Package","\u002Fv3\u002Fintegrations\u002Fruntime-package","v3\u002Fintegrations\u002Fruntime-package",{"title":587,"path":588,"stem":589,"order":54},"Node.js Package","\u002Fv3\u002Fintegrations\u002Fnodejs-package","v3\u002Fintegrations\u002Fnodejs-package",{"title":591,"path":592,"stem":593,"order":60},"Types Generator","\u002Fv3\u002Fintegrations\u002Ftypes-generator","v3\u002Fintegrations\u002Ftypes-generator",{"title":595,"path":596,"stem":597,"order":65},"Devtools Package","\u002Fv3\u002Fintegrations\u002Fdevtools-ui-package","v3\u002Fintegrations\u002Fdevtools-ui-package",{"title":181,"order":23,"path":599,"stem":600,"children":601},"\u002Fv3\u002Fapi","v3\u002Fapi\u002Findex",[602,603,607,611,615,619],{"title":136,"path":599,"stem":600,"order":6},{"title":604,"path":605,"stem":606,"order":18},"Methods","\u002Fv3\u002Fapi\u002Fmethods","v3\u002Fapi\u002Fmethods",{"title":608,"path":609,"stem":610,"order":23},"Events","\u002Fv3\u002Fapi\u002Fevents","v3\u002Fapi\u002Fevents",{"title":612,"path":613,"stem":614,"order":28},"Translations and Cache","\u002Fv3\u002Fapi\u002Fi18n-cache-api","v3\u002Fapi\u002Fi18n-cache-api",{"title":616,"path":617,"stem":618,"order":33},"Module Options","\u002Fv3\u002Fapi\u002Fmodule-options","v3\u002Fapi\u002Fmodule-options",{"title":205,"path":620,"stem":621,"children":622,"order":39},"\u002Fv3\u002Fapi\u002Fpackages","v3\u002Fapi\u002Fpackages",[623,627,631,635,639,643,647,651,655,659,663,667,671,675,679,683,687],{"title":624,"path":625,"stem":626},"@i18n-micro\u002Fastro","\u002Fv3\u002Fapi\u002Fpackages\u002Fastro","v3\u002Fapi\u002Fpackages\u002Fastro",{"title":628,"path":629,"stem":630},"@i18n-micro\u002Fcore","\u002Fv3\u002Fapi\u002Fpackages\u002Fcore","v3\u002Fapi\u002Fpackages\u002Fcore",{"title":632,"path":633,"stem":634},"@i18n-micro\u002Fdevtools-ui","\u002Fv3\u002Fapi\u002Fpackages\u002Fdevtools-ui","v3\u002Fapi\u002Fpackages\u002Fdevtools-ui",{"title":636,"path":637,"stem":638},"@i18n-micro\u002Fhmr","\u002Fv3\u002Fapi\u002Fpackages\u002Fhmr","v3\u002Fapi\u002Fpackages\u002Fhmr",{"title":640,"path":641,"stem":642},"@i18n-micro\u002Fnode","\u002Fv3\u002Fapi\u002Fpackages\u002Fnode","v3\u002Fapi\u002Fpackages\u002Fnode",{"title":644,"path":645,"stem":646},"@i18n-micro\u002Fpath-strategy","\u002Fv3\u002Fapi\u002Fpackages\u002Fpath-strategy","v3\u002Fapi\u002Fpackages\u002Fpath-strategy",{"title":648,"path":649,"stem":650},"@i18n-micro\u002Fpreact","\u002Fv3\u002Fapi\u002Fpackages\u002Fpreact","v3\u002Fapi\u002Fpackages\u002Fpreact",{"title":652,"path":653,"stem":654},"@i18n-micro\u002Freact","\u002Fv3\u002Fapi\u002Fpackages\u002Freact","v3\u002Fapi\u002Fpackages\u002Freact",{"title":656,"path":657,"stem":658},"@i18n-micro\u002Froute-strategy","\u002Fv3\u002Fapi\u002Fpackages\u002Froute-strategy","v3\u002Fapi\u002Fpackages\u002Froute-strategy",{"title":660,"path":661,"stem":662},"@i18n-micro\u002Fruntime","\u002Fv3\u002Fapi\u002Fpackages\u002Fruntime","v3\u002Fapi\u002Fpackages\u002Fruntime",{"title":664,"path":665,"stem":666},"@i18n-micro\u002Fsolid","\u002Fv3\u002Fapi\u002Fpackages\u002Fsolid","v3\u002Fapi\u002Fpackages\u002Fsolid",{"title":668,"path":669,"stem":670},"@i18n-micro\u002Ftest-utils","\u002Fv3\u002Fapi\u002Fpackages\u002Ftest-utils","v3\u002Fapi\u002Fpackages\u002Ftest-utils",{"title":672,"path":673,"stem":674},"@i18n-micro\u002Ftypes","\u002Fv3\u002Fapi\u002Fpackages\u002Ftypes","v3\u002Fapi\u002Fpackages\u002Ftypes",{"title":676,"path":677,"stem":678},"@i18n-micro\u002Ftypes-generator","\u002Fv3\u002Fapi\u002Fpackages\u002Ftypes-generator","v3\u002Fapi\u002Fpackages\u002Ftypes-generator",{"title":680,"path":681,"stem":682},"@i18n-micro\u002Futils","\u002Fv3\u002Fapi\u002Fpackages\u002Futils","v3\u002Fapi\u002Fpackages\u002Futils",{"title":684,"path":685,"stem":686},"@i18n-micro\u002Fvitepress","\u002Fv3\u002Fapi\u002Fpackages\u002Fvitepress","v3\u002Fapi\u002Fpackages\u002Fvitepress",{"title":688,"path":689,"stem":690},"@i18n-micro\u002Fvue","\u002Fv3\u002Fapi\u002Fpackages\u002Fvue","v3\u002Fapi\u002Fpackages\u002Fvue",{"title":299,"order":28,"path":692,"stem":693,"children":694},"\u002Fv3\u002Fcomponents","v3\u002Fcomponents\u002Findex",[695,696,700,704,708],{"title":136,"path":692,"stem":693,"order":6},{"title":697,"path":698,"stem":699,"order":18},"i18n-t","\u002Fv3\u002Fcomponents\u002Fi18n-t","v3\u002Fcomponents\u002Fi18n-t",{"title":701,"path":702,"stem":703,"order":23},"i18n-switcher","\u002Fv3\u002Fcomponents\u002Fi18n-switcher","v3\u002Fcomponents\u002Fi18n-switcher",{"title":705,"path":706,"stem":707,"order":28},"i18n-link","\u002Fv3\u002Fcomponents\u002Fi18n-link","v3\u002Fcomponents\u002Fi18n-link",{"title":709,"path":710,"stem":711,"order":33},"i18n-group","\u002Fv3\u002Fcomponents\u002Fi18n-group","v3\u002Fcomponents\u002Fi18n-group",{"title":278,"path":713,"stem":714,"children":715,"order":33},"\u002Fv3\u002Fcomposables","v3\u002Fcomposables\u002Findex",[716,717,720,723,726],{"title":136,"path":713,"stem":714,"order":6},{"title":283,"path":718,"stem":719,"order":18},"\u002Fv3\u002Fcomposables\u002FuseI18n","v3\u002Fcomposables\u002FuseI18n",{"title":295,"path":721,"stem":722,"order":23},"\u002Fv3\u002Fcomposables\u002FuseLocaleHead","v3\u002Fcomposables\u002FuseLocaleHead",{"title":291,"path":724,"stem":725,"order":28},"\u002Fv3\u002Fcomposables\u002FuseI18nHead","v3\u002Fcomposables\u002FuseI18nHead",{"title":287,"path":727,"stem":728,"order":33},"\u002Fv3\u002Fcomposables\u002FuseI18nLocale","v3\u002Fcomposables\u002FuseI18nLocale",{"title":730,"path":731,"stem":732,"order":39},"Examples","\u002Fv3\u002Fexamples","v3\u002Fexamples",{"id":734,"title":331,"body":735,"description":1687,"extension":1688,"lastUpdated":1689,"links":1690,"meta":1691,"navigation":1693,"path":332,"seo":1694,"stem":333,"__hash__":1695},"docs\u002Fcontributing\u002Ftesting.md",{"type":736,"value":737,"toc":1677},"minimark",[738,742,746,753,758,852,859,962,972,976,983,1060,1066,1077,1081,1087,1299,1344,1355,1359,1411,1433,1437,1447,1520,1524,1544,1574,1578,1598,1649,1656,1660,1673],[739,740,331],"h1",{"id":741},"testing-the-module",[743,744,745],"p",{},"The repository's tests split into fast unit tests, build-heavy integration suites and browser journeys, all against a few shared Nuxt fixtures. Read this before you add a test or a fixture. You learn which command to run, where a new check belongs, and how builds stay safe to run in parallel.",[743,747,748,749,752],{},"To test your own app, see ",[750,751,115],"a",{"href":116},".",[754,755,757],"h2",{"id":756},"commands","Commands",[759,760,765],"pre",{"className":761,"code":762,"language":763,"meta":764,"style":764},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","pnpm run test:unit         # no builds, no browser\npnpm run test:integration  # suites that build or generate a fixture\npnpm run test:strategies   # static generate of every strategy\npnpm run test:e2e          # browser journeys\npnpm run test:packages     # one project per packages\u002F*\npnpm run test              # all of the above\n","bash","",[766,767,768,787,800,813,826,839],"code",{"__ignoreMap":764},[769,770,772,776,780,783],"span",{"class":771,"line":353},"line",[769,773,775],{"class":774},"sBMFI","pnpm",[769,777,779],{"class":778},"sfazB"," run",[769,781,782],{"class":778}," test:unit",[769,784,786],{"class":785},"sHwdD","         # no builds, no browser\n",[769,788,790,792,794,797],{"class":771,"line":789},2,[769,791,775],{"class":774},[769,793,779],{"class":778},[769,795,796],{"class":778}," test:integration",[769,798,799],{"class":785},"  # suites that build or generate a fixture\n",[769,801,803,805,807,810],{"class":771,"line":802},3,[769,804,775],{"class":774},[769,806,779],{"class":778},[769,808,809],{"class":778}," test:strategies",[769,811,812],{"class":785},"   # static generate of every strategy\n",[769,814,816,818,820,823],{"class":771,"line":815},4,[769,817,775],{"class":774},[769,819,779],{"class":778},[769,821,822],{"class":778}," test:e2e",[769,824,825],{"class":785},"          # browser journeys\n",[769,827,829,831,833,836],{"class":771,"line":828},5,[769,830,775],{"class":774},[769,832,779],{"class":778},[769,834,835],{"class":778}," test:packages",[769,837,838],{"class":785},"     # one project per packages\u002F*\n",[769,840,842,844,846,849],{"class":771,"line":841},6,[769,843,775],{"class":774},[769,845,779],{"class":778},[769,847,848],{"class":778}," test",[769,850,851],{"class":785},"              # all of the above\n",[743,853,854,855,858],{},"Run ",[766,856,857],{},"pnpm exec playwright install chromium"," once before e2e.",[860,861,862,878],"table",{},[863,864,865],"thead",{},[866,867,868,872,875],"tr",{},[869,870,871],"th",{},"Project",[869,873,874],{},"Contents",[869,876,877],{},"Config",[879,880,881,897,927,946],"tbody",{},[866,882,883,889,892],{},[884,885,886],"td",{},[766,887,888],{},"unit",[884,890,891],{},"pure unit tests, no Nuxt build",[884,893,894],{},[766,895,896],{},"vitest.unit.config.ts",[866,898,899,904,922],{},[884,900,901],{},[766,902,903],{},"integration",[884,905,906,907,910,911,914,915,918,919],{},"suites that run ",[766,908,909],{},"nuxi build"," \u002F ",[766,912,913],{},"generate"," or ",[766,916,917],{},"@nuxt\u002Ftest-utils"," ",[766,920,921],{},"setup()",[884,923,924],{},[766,925,926],{},"vitest.integration.config.ts",[866,928,929,934,941],{},[884,930,931],{},[766,932,933],{},"e2e",[884,935,936,937,940],{},"journeys in ",[766,938,939],{},"test\u002Fjourneys\u002F*.spec.ts"," against real servers",[884,942,943],{},[766,944,945],{},"vitest.e2e.config.ts",[866,947,948,951,957],{},[884,949,950],{},"packages",[884,952,953,954],{},"one per ",[766,955,956],{},"packages\u002F*",[884,958,959],{},[766,960,961],{},"packages\u002F*\u002Fvitest.config.ts",[743,963,964,967,968,971],{},[766,965,966],{},"INTEGRATION_TESTS"," in ",[766,969,970],{},"test\u002Fsetup\u002Fheavy-tests.ts"," is the one list of heavy suites: the integration config includes it and the unit config excludes it.",[754,973,975],{"id":974},"fixtures","Fixtures",[743,977,978,979,982],{},"All fixtures are apps under ",[766,980,981],{},"test\u002Ffixtures\u002F",":",[860,984,985,995],{},[863,986,987],{},[866,988,989,992],{},[869,990,991],{},"Fixture",[869,993,994],{},"Covers",[879,996,997,1015,1025,1035,1050],{},[866,998,999,1004],{},[884,1000,1001],{},[766,1002,1003],{},"basic",[884,1005,1006,1007,1010,1011,1014],{},"the public API; ",[766,1008,1009],{},"basic\u002Flayer"," is the only nested app, because ",[766,1012,1013],{},"extends"," needs a second root",[866,1016,1017,1022],{},[884,1018,1019],{},[766,1020,1021],{},"strategy",[884,1023,1024],{},"the four strategies, detection and global URL shapes",[866,1026,1027,1032],{},[884,1028,1029],{},[766,1030,1031],{},"seo",[884,1033,1034],{},"head tags",[866,1036,1037,1041],{},[884,1038,1039],{},[766,1040,133],{},[884,1042,1043,1046,1047],{},[766,1044,1045],{},"@nuxt\u002Fcontent"," and ",[766,1048,1049],{},"@nuxtjs\u002Fseo",[866,1051,1052,1057],{},[884,1053,1054],{},[766,1055,1056],{},"translation-watcher",[884,1058,1059],{},"dev HMR",[743,1061,1062,1063,752],{},"The benchmark apps are not fixtures: they live in ",[766,1064,1065],{},"scripts\u002Fperf-fixtures",[743,1067,1068,1069,1072,1073,1076],{},"A new check goes into an existing fixture as a page. A build creates an empty ",[766,1070,1071],{},"locales\u002Fpages\u002F\u003Cpage>\u002F\u003Clocale>.json"," for every page without one; commit those files. A file that appears mid-run changes the fixture hash, and the forks then reject the recipe (",[766,1074,1075],{},"bound to conflicting identities",").",[754,1078,1080],{"id":1079},"variants-are-recipes","Variants are recipes",[743,1082,1083,1086],{},[766,1084,1085],{},"test\u002Frecipes.ts"," names one build per variant of a fixture. A variant is one recipe line, never a copied directory:",[759,1088,1092],{"className":1089,"code":1090,"language":1091,"meta":764,"style":764},"language-ts shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","'strategy-prefix': app('strategy-prefix', 'strategy', { STRATEGY: 'prefix', LOCALE_COOKIE: 'user-locale' }),\n'basic-n3': app('basic-n3', 'basic', { BASIC_VARIANT: 'n3' }),\n'strategy-baseurl': app('strategy-baseurl', 'strategy', { STRATEGY: 'prefix' }, { app: { baseURL: '\u002Fexamples' } }),\n","ts",[766,1093,1094,1173,1224],{"__ignoreMap":764},[769,1095,1096,1100,1103,1105,1109,1113,1116,1118,1120,1122,1125,1128,1130,1132,1134,1137,1141,1143,1145,1148,1150,1152,1155,1157,1159,1162,1164,1167,1170],{"class":771,"line":353},[769,1097,1099],{"class":1098},"sMK4o","'",[769,1101,1102],{"class":778},"strategy-prefix",[769,1104,1099],{"class":1098},[769,1106,1108],{"class":1107},"sTEyZ",": ",[769,1110,1112],{"class":1111},"s2Zo4","app",[769,1114,1115],{"class":1107},"(",[769,1117,1099],{"class":1098},[769,1119,1102],{"class":778},[769,1121,1099],{"class":1098},[769,1123,1124],{"class":1098},",",[769,1126,1127],{"class":1098}," '",[769,1129,1021],{"class":778},[769,1131,1099],{"class":1098},[769,1133,1124],{"class":1098},[769,1135,1136],{"class":1098}," {",[769,1138,1140],{"class":1139},"swJcz"," STRATEGY",[769,1142,982],{"class":1098},[769,1144,1127],{"class":1098},[769,1146,1147],{"class":778},"prefix",[769,1149,1099],{"class":1098},[769,1151,1124],{"class":1098},[769,1153,1154],{"class":1139}," LOCALE_COOKIE",[769,1156,982],{"class":1098},[769,1158,1127],{"class":1098},[769,1160,1161],{"class":778},"user-locale",[769,1163,1099],{"class":1098},[769,1165,1166],{"class":1098}," }",[769,1168,1169],{"class":1107},")",[769,1171,1172],{"class":1098},",\n",[769,1174,1175,1177,1180,1182,1184,1186,1188,1190,1192,1194,1196,1198,1200,1202,1204,1206,1209,1211,1213,1216,1218,1220,1222],{"class":771,"line":789},[769,1176,1099],{"class":1098},[769,1178,1179],{"class":778},"basic-n3",[769,1181,1099],{"class":1098},[769,1183,1108],{"class":1107},[769,1185,1112],{"class":1111},[769,1187,1115],{"class":1107},[769,1189,1099],{"class":1098},[769,1191,1179],{"class":778},[769,1193,1099],{"class":1098},[769,1195,1124],{"class":1098},[769,1197,1127],{"class":1098},[769,1199,1003],{"class":778},[769,1201,1099],{"class":1098},[769,1203,1124],{"class":1098},[769,1205,1136],{"class":1098},[769,1207,1208],{"class":1139}," BASIC_VARIANT",[769,1210,982],{"class":1098},[769,1212,1127],{"class":1098},[769,1214,1215],{"class":778},"n3",[769,1217,1099],{"class":1098},[769,1219,1166],{"class":1098},[769,1221,1169],{"class":1107},[769,1223,1172],{"class":1098},[769,1225,1226,1228,1231,1233,1235,1237,1239,1241,1243,1245,1247,1249,1251,1253,1255,1257,1259,1261,1263,1265,1267,1270,1272,1275,1277,1279,1282,1284,1286,1289,1291,1293,1295,1297],{"class":771,"line":802},[769,1227,1099],{"class":1098},[769,1229,1230],{"class":778},"strategy-baseurl",[769,1232,1099],{"class":1098},[769,1234,1108],{"class":1107},[769,1236,1112],{"class":1111},[769,1238,1115],{"class":1107},[769,1240,1099],{"class":1098},[769,1242,1230],{"class":778},[769,1244,1099],{"class":1098},[769,1246,1124],{"class":1098},[769,1248,1127],{"class":1098},[769,1250,1021],{"class":778},[769,1252,1099],{"class":1098},[769,1254,1124],{"class":1098},[769,1256,1136],{"class":1098},[769,1258,1140],{"class":1139},[769,1260,982],{"class":1098},[769,1262,1127],{"class":1098},[769,1264,1147],{"class":778},[769,1266,1099],{"class":1098},[769,1268,1269],{"class":1098}," },",[769,1271,1136],{"class":1098},[769,1273,1274],{"class":1139}," app",[769,1276,982],{"class":1098},[769,1278,1136],{"class":1098},[769,1280,1281],{"class":1139}," baseURL",[769,1283,982],{"class":1098},[769,1285,1127],{"class":1098},[769,1287,1288],{"class":778},"\u002Fexamples",[769,1290,1099],{"class":1098},[769,1292,1166],{"class":1098},[769,1294,1166],{"class":1098},[769,1296,1169],{"class":1107},[769,1298,1172],{"class":1098},[1300,1301,1302,1323,1334],"ul",{},[1303,1304,1305,1306,1309,1310,1313,1314,1313,1317,1313,1320,1076],"li",{},"The third argument is env, read by the fixture's ",[766,1307,1308],{},"nuxt.config.ts"," (",[766,1311,1312],{},"BASIC_VARIANT",", ",[766,1315,1316],{},"SEO_VARIANT",[766,1318,1319],{},"STRATEGY",[766,1321,1322],{},"TRANSLATION_PAYLOADS",[1303,1324,1325,1326,1329,1330,1333],{},"The fourth is a ",[766,1327,1328],{},"nuxtConfig"," override, for a global URL shape. It is a defu merge, so arrays concatenate: never pass ",[766,1331,1332],{},"locales"," that way, switch them by env.",[1303,1335,1336,1337,1313,1339,910,1341,1343],{},"A suite that builds a fixture itself (",[766,1338,921],{},[766,1340,909],{},[766,1342,913],{},") sets the same env as the recipe.",[743,1345,1346,1347,1350,1351,1354],{},"Builds are hashed by fixture directory and ",[766,1348,1349],{},"src\u002F",", cached in ",[766,1352,1353],{},"test\u002F.untestutils\u002Fbuilds"," (CI caches that directory) and started once per run.",[754,1356,1358],{"id":1357},"parallel-builds","Parallel builds",[1300,1360,1361,1379,1399],{},[1303,1362,1363,918,1367,1370,1371,1374,1375,1378],{},[1364,1365,1366],"strong",{},"Own build dir per suite.",[766,1368,1369],{},"isolatedBuild(fixture, name)"," points ",[766,1372,1373],{},"NUXT_TEST_BUILD_DIR"," at ",[766,1376,1377],{},"test\u002F.fixture-builds\u002F\u003Cfixture>\u002F\u003Cname>\u002F",", outside the fixture: a build written into it would change the recipe hash mid-run.",[1303,1380,1381,1384,1385,1309,1388,1391,1392,1309,1395,1398],{},[1364,1382,1383],{},"OS-assigned ports."," Take ports from ",[766,1386,1387],{},"getFreePort()",[766,1389,1390],{},"test\u002Fhelpers\u002Fport.ts",") and stop servers with ",[766,1393,1394],{},"stopChild()",[766,1396,1397],{},"test\u002Fhelpers\u002Fsubprocess.ts","), which kills the whole process group. Never free a port by killing whatever owns it: with parallel workers that can kill a sibling suite's server.",[1303,1400,1401,1404,1405,967,1408,752],{},[1364,1402,1403],{},"No writes inside the repo tree."," Specs that edit locale files or start a server from the build output run on a temp copy from ",[766,1406,1407],{},"tmpFixture()",[766,1409,1410],{},"test\u002Fhelpers\u002Ftmp-fixture.ts",[743,1412,1413,1414,1417,1418,1108,1421,1424,1425,1428,1429,1432],{},"Each strategy has one file, ",[766,1415,1416],{},"test\u002Fstrategies-\u003Cstrategy>.test.ts",", so Vitest runs all four at once. They share ",[766,1419,1420],{},"test\u002Fhelpers\u002Fstrategy-suite.ts",[766,1422,1423],{},"nuxi generate"," into an isolated build, then the output is read from disk. It is one chain (a single ",[766,1426,1427],{},"test","), so a strategy costs one build. The server side of the same routes is checked by ",[766,1430,1431],{},"test\u002Fjourneys\u002Fstrategies-*.spec.ts"," on the recipe's server build.",[754,1434,1436],{"id":1435},"journeys","Journeys",[743,1438,1439,1440,1446],{},"Browser e2e runs through ",[750,1441,1445],{"href":1442,"rel":1443},"https:\u002F\u002Fgithub.com\u002Fs00d\u002Funtestutils",[1444],"nofollow","untestutils"," and a real Playwright browser.",[1300,1448,1449,1456,1467,1493,1513],{},[1303,1450,1451,1452,1455],{},"One spec walks one real flow on one recipe: visit, browse, switch locale, reload, detection, head. Each step has a ",[766,1453,1454],{},"\u002F\u002F step n: action → assert"," comment.",[1303,1457,1458,1459,1462,1463,1466],{},"One harness per file: ",[766,1460,1461],{},"test.override({ harness: '\u003Crecipe>' })"," at the top of the ",[766,1464,1465],{},"describe",". A second harness in the same file would reach the first one's server, so split it into its own file.",[1303,1468,1469,1470,1473,1474,1477,1478,1481,1482,1485,1486,1489,1490,752],{},"No ",[766,1471,1472],{},"waitForTimeout",", no ",[766,1475,1476],{},"networkidle",", no optional ",[766,1479,1480],{},"if"," assertions. Statuses come from ",[766,1483,1484],{},"request.get(path)",", with ",[766,1487,1488],{},"{ maxRedirects: 0 }"," where the redirect itself is checked. Arm console collectors before the first ",[766,1491,1492],{},"goto",[1303,1494,1495,1496,1498,1499,1502,1503,1506,1507,1510,1511,752],{},"Specs import ",[766,1497,1427],{}," from ",[766,1500,1501],{},"test\u002Fhelpers\u002Fguarded-test.ts",". It fails a test on any document response >= 500, uncaught page error, console error or hydration warning, even when the assertions pass. A test that expects one calls ",[766,1504,1505],{},"guard.allow(\u002Fpattern\u002F)","; ",[766,1508,1509],{},"test.override({ guardAllow: [\u002Fpattern\u002F] })"," allows a pattern for a whole ",[766,1512,1465],{},[1303,1514,1515,1516,1519],{},"Retries cover infrastructure only (",[766,1517,1518],{},"retryInfra",", CI): a failing assertion fails.",[754,1521,1523],{"id":1522},"routing-goldens","Routing goldens",[743,1525,1526,1529,1530,1533,1534,1313,1537,1313,1540,1543],{},[766,1527,1528],{},"test\u002Frouting-characterization"," runs every app in ",[766,1531,1532],{},"scenarios.ts"," under every strategy and records what each URL reads as and where each navigation lands. The harness calls the code the module calls (",[766,1535,1536],{},"mergeDefineI18nRouteMeta",[766,1538,1539],{},"extractDefineI18nRouteData",[766,1541,1542],{},"RouteGenerator","), so do not copy module logic into it: a copy cannot fail.",[1300,1545,1546,1564,1571],{},[1303,1547,1548,1549,1552,1553,1556,1557,1560,1561,1076],{},"Pages are not only what the file scanner makes: ",[766,1550,1551],{},"modulePages"," are pushed as in ",[766,1554,1555],{},"pages:extend",", with or without a name, and ",[766,1558,1559],{},"noPages"," runs Nuxt's stub router with no records (",[766,1562,1563],{},"pages: false",[1303,1565,1566,1567,1570],{},"Input is frozen, so a package that writes to pages or routes throws in the golden. Every page is tagged with its file, and a record that loses ",[766,1568,1569],{},"meta"," is listed under the invariant breaks.",[1303,1572,1573],{},"A golden diff is either an intended fix or a bug. Read all of it before you regenerate.",[754,1575,1577],{"id":1576},"mutation-testing","Mutation testing",[743,1579,1580,1583,1584,1589,1590,1593,1594,1597],{},[766,1581,1582],{},"pnpm run test:mutation"," runs ",[750,1585,1588],{"href":1586,"rel":1587},"https:\u002F\u002Fstryker-mutator.io\u002F",[1444],"Stryker"," on one package. It changes the source (",[766,1591,1592],{},"\u003C"," to ",[766,1595,1596],{},"\u003C=",", a branch removed, a string emptied) and reruns the tests that cover the change; a surviving mutant is a behaviour no test pins.",[759,1599,1601],{"className":761,"code":1600,"language":763,"meta":764,"style":764},"MUTATE_PACKAGE=core pnpm run test:mutation                      # score; JSON report in test-results\u002Fmutation\u002F\nMUTATE_PACKAGE=core MUTATE_ALL_KILLERS=1 pnpm run test:mutation # record every test that kills each mutant\n",[766,1602,1603,1624],{"__ignoreMap":764},[769,1604,1605,1608,1611,1613,1616,1618,1621],{"class":771,"line":353},[769,1606,1607],{"class":1107},"MUTATE_PACKAGE",[769,1609,1610],{"class":1098},"=",[769,1612,218],{"class":778},[769,1614,1615],{"class":774}," pnpm",[769,1617,779],{"class":778},[769,1619,1620],{"class":778}," test:mutation",[769,1622,1623],{"class":785},"                      # score; JSON report in test-results\u002Fmutation\u002F\n",[769,1625,1626,1628,1630,1632,1635,1637,1640,1642,1644,1646],{"class":771,"line":789},[769,1627,1607],{"class":1107},[769,1629,1610],{"class":1098},[769,1631,218],{"class":778},[769,1633,1634],{"class":1107}," MUTATE_ALL_KILLERS",[769,1636,1610],{"class":1098},[769,1638,1639],{"class":778},"1",[769,1641,1615],{"class":774},[769,1643,779],{"class":778},[769,1645,1620],{"class":778},[769,1647,1648],{"class":785}," # record every test that kills each mutant\n",[743,1650,1651,1652,1655],{},"With ",[766,1653,1654],{},"MUTATE_ALL_KILLERS=1"," the report lists every killing test per mutant, so a test whose mutants are all killed by others can be deleted. Package tests are kept to a small set that still kills every mutant any test kills. New tests are scenarios (set up like a real app, act, assert, act again), not one-line checks.",[754,1657,1659],{"id":1658},"related","Related",[1661,1662,1663,1668,1670],"card-group",{},[1664,1665],"card",{"icon":1666,"title":320,"to":1667},"i-lucide-git-pull-request","\u002Fcontributing\u002F",[1664,1669],{"icon":1666,"title":335,"to":336},[1664,1671],{"icon":1672,"title":115,"to":116},"i-lucide-book-open",[1674,1675,1676],"style",{},"html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}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 .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}",{"title":764,"searchDepth":789,"depth":789,"links":1678},[1679,1680,1681,1682,1683,1684,1685,1686],{"id":756,"depth":789,"text":757},{"id":974,"depth":789,"text":975},{"id":1079,"depth":789,"text":1080},{"id":1357,"depth":789,"text":1358},{"id":1435,"depth":789,"text":1436},{"id":1522,"depth":789,"text":1523},{"id":1576,"depth":789,"text":1577},{"id":1658,"depth":789,"text":1659},"How the nuxt-i18n-micro repo is tested: unit, integration and e2e projects, shared fixtures, recipes, isolated builds and mutation testing.","md","2026-11-04T00:40:16+04:00",null,{"outline":1692},[789,802],{"order":23},{"title":331,"description":1687},"MaSzdnHvu9mxPEP1MCA2tc9Ev9qfspc3dwCEB5ETkhQ",[1697,1699],{"title":327,"path":328,"description":1698},"How the Nuxt module builds, stores, serves and loads translation payloads, and where each part lives in the source.",{"title":335,"path":336,"description":1700},"Repository checks of the scripts CLI: generated docs, API surface, payload budget, dependency and fixture audits, versions and the release preflight.",1793790722710]