From 9322f1b00b85bdd704930415494a5bff29b52fac Mon Sep 17 00:00:00 2001 From: patak Date: Fri, 11 Aug 2023 08:16:54 +0200 Subject: [PATCH 01/29] docs: viteconf 23 link (#14075) --- .../theme/components/AsideSponsors.vue | 63 +++++++++++++++++++ docs/index.md | 3 + docs/public/viteconf.svg | 25 +++++++- 3 files changed, 90 insertions(+), 1 deletion(-) diff --git a/docs/.vitepress/theme/components/AsideSponsors.vue b/docs/.vitepress/theme/components/AsideSponsors.vue index 90e6addab959a5..dcaf44921ae737 100644 --- a/docs/.vitepress/theme/components/AsideSponsors.vue +++ b/docs/.vitepress/theme/components/AsideSponsors.vue @@ -18,5 +18,68 @@ const sponsors = computed(() => { + + diff --git a/docs/index.md b/docs/index.md index bdf716bc3d20a7..07d3c0a01dbb9c 100644 --- a/docs/index.md +++ b/docs/index.md @@ -21,6 +21,9 @@ hero: - theme: alt text: View on GitHub link: https://github.com/vitejs/vite + - theme: brand + text: ViteConf 23! + link: https://viteconf.org/23 features: - icon: 💡 diff --git a/docs/public/viteconf.svg b/docs/public/viteconf.svg index a01c0bd224407c..2ca20c23f890ff 100644 --- a/docs/public/viteconf.svg +++ b/docs/public/viteconf.svg @@ -1 +1,24 @@ - \ No newline at end of file + + + + + + + + + + + + + + + + + + + + + + + + From 77175099489ffbabefb9d98d448c782ced2986b5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Joaqu=C3=ADn=20S=C3=A1nchez?= Date: Fri, 11 Aug 2023 17:40:33 +0200 Subject: [PATCH 02/29] docs(cli): include `--profile` option (#14079) --- docs/guide/cli.md | 38 ++++++++++++++++++----------------- docs/guide/troubleshooting.md | 22 ++++++++++++++++++++ 2 files changed, 42 insertions(+), 18 deletions(-) diff --git a/docs/guide/cli.md b/docs/guide/cli.md index 050610701c4d70..497ad66115ab05 100644 --- a/docs/guide/cli.md +++ b/docs/guide/cli.md @@ -14,24 +14,25 @@ vite [root] #### Options -| Options | | -| ------------------------ | ----------------------------------------------------------------- | -| `--host [host]` | Specify hostname (`string`) | -| `--port ` | Specify port (`number`) | -| `--https` | Use TLS + HTTP/2 (`boolean`) | -| `--open [path]` | Open browser on startup (`boolean \| string`) | -| `--cors` | Enable CORS (`boolean`) | -| `--strictPort` | Exit if specified port is already in use (`boolean`) | -| `--force` | Force the optimizer to ignore the cache and re-bundle (`boolean`) | -| `-c, --config ` | Use specified config file (`string`) | -| `--base ` | Public base path (default: `/`) (`string`) | -| `-l, --logLevel ` | Info \| warn \| error \| silent (`string`) | -| `--clearScreen` | Allow/disable clear screen when logging (`boolean`) | -| `-d, --debug [feat]` | Show debug logs (`string \| boolean`) | -| `-f, --filter ` | Filter debug logs (`string`) | -| `-m, --mode ` | Set env mode (`string`) | -| `-h, --help` | Display available CLI options | -| `-v, --version` | Display version number | +| Options | | +| ------------------------ | ------------------------------------------------------------------------------------------------------------------ | +| `--host [host]` | Specify hostname (`string`) | +| `--port ` | Specify port (`number`) | +| `--https` | Use TLS + HTTP/2 (`boolean`) | +| `--open [path]` | Open browser on startup (`boolean \| string`) | +| `--cors` | Enable CORS (`boolean`) | +| `--strictPort` | Exit if specified port is already in use (`boolean`) | +| `--force` | Force the optimizer to ignore the cache and re-bundle (`boolean`) | +| `-c, --config ` | Use specified config file (`string`) | +| `--base ` | Public base path (default: `/`) (`string`) | +| `-l, --logLevel ` | Info \| warn \| error \| silent (`string`) | +| `--clearScreen` | Allow/disable clear screen when logging (`boolean`) | +| `--profile` | Start built-in Node.js inspector (check [Performance bottlenecks](/guide/troubleshooting#performance-bottlenecks)) | +| `-d, --debug [feat]` | Show debug logs (`string \| boolean`) | +| `-f, --filter ` | Filter debug logs (`string`) | +| `-m, --mode ` | Set env mode (`string`) | +| `-h, --help` | Display available CLI options | +| `-v, --version` | Display version number | ## Build @@ -65,6 +66,7 @@ vite build [root] | `--base ` | Public base path (default: `/`) (`string`) | | `-l, --logLevel ` | Info \| warn \| error \| silent (`string`) | | `--clearScreen` | Allow/disable clear screen when logging (`boolean`) | +| `--profile` | Start built-in Node.js inspector (check [Performance bottlenecks](/guide/troubleshooting#performance-bottlenecks)) | | `-d, --debug [feat]` | Show debug logs (`string \| boolean`) | | `-f, --filter ` | Filter debug logs (`string`) | | `-m, --mode ` | Set env mode (`string`) | diff --git a/docs/guide/troubleshooting.md b/docs/guide/troubleshooting.md index 4108902477bbfa..75af887e0efa57 100644 --- a/docs/guide/troubleshooting.md +++ b/docs/guide/troubleshooting.md @@ -144,6 +144,28 @@ You will need to access the file with `http` protocol. The easiest way to achiev The hash key used to invalidate optimized dependencies depend on the package lock contents, the patches applied to dependencies, and the options in the Vite config file that affects the bundling of node modules. This means that Vite will detect when a dependency is overridden using a feature as [npm overrides](https://docs.npmjs.com/cli/v9/configuring-npm/package-json#overrides), and re-bundle your dependencies on the next server start. Vite won't invalidate the dependencies when you use a feature like [npm link](https://docs.npmjs.com/cli/v9/commands/npm-link). In case you link or unlink a dependency, you'll need to force re-optimization on the next server start by using `vite --force`. We recommend using overrides instead, which are supported now by every package manager (see also [pnpm overrides](https://pnpm.io/package_json#pnpmoverrides) and [yarn resolutions](https://yarnpkg.com/configuration/manifest/#resolutions)). +## Performance bottlenecks + +If you suffer any application performance bottlenecks resulting in slow load times, you can start the built-in Node.js inspector with your Vite dev server or when building your application to create the CPU profile: + +::: code-group + +```bash [dev server] +vite --profile --open +``` + +```bash [build] +vite build --profile +``` + +::: + +::: tip Vite Dev Server +Once your application is opened in the browser, just await finish loading it and then go back to the terminal and press `p` key (will stop the Node.js inspector) then press `q` key to stop the dev server. +::: + +Node.js inspector will generate `vite-profile-0.cpuprofile` in the root folder, go to https://www.speedscope.app/, and upload the CPU profile using the `BROWSE` button to inspect the result. + ## Others ### Module externalized for browser compatibility From d36d6fb91d50b338f689e6c554e3896b3d739390 Mon Sep 17 00:00:00 2001 From: patak Date: Fri, 11 Aug 2023 20:53:26 +0200 Subject: [PATCH 03/29] docs: icon in ViteConf action --- docs/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/index.md b/docs/index.md index 07d3c0a01dbb9c..fb683307bd6f4b 100644 --- a/docs/index.md +++ b/docs/index.md @@ -22,7 +22,7 @@ hero: text: View on GitHub link: https://github.com/vitejs/vite - theme: brand - text: ViteConf 23! + text: 🎉 ViteConf 23! link: https://viteconf.org/23 features: From 0768625ada7c9862a803f69bb6c480232a7ad35c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=BF=A0=20/=20green?= Date: Mon, 14 Aug 2023 18:51:05 +0900 Subject: [PATCH 04/29] test: remove plugin-vue from tailwind playground (#14073) --- .../postcss-plugins-different-dir.spec.ts | 2 +- playground/tailwind/__test__/tailwind.spec.ts | 114 +++++++++--------- playground/tailwind/index.html | 19 +-- playground/tailwind/src/App.vue | 12 -- playground/tailwind/src/assets/logo.png | Bin 6849 -> 0 bytes .../tailwind/src/components/HelloWorld.vue | 10 -- .../tailwind/src/components/PugTemplate.vue | 3 - .../tailwind/src/components/component1.js | 9 ++ playground/tailwind/src/main.js | 22 +++- playground/tailwind/src/router.ts | 16 --- playground/tailwind/src/utils.ts | 2 - playground/tailwind/src/views/Page.vue | 33 ----- playground/tailwind/src/views/view1.js | 8 ++ playground/tailwind/tailwind.config.js | 6 +- playground/tailwind/vite.config.ts | 13 +- playground/test-utils.ts | 25 +++- 16 files changed, 130 insertions(+), 164 deletions(-) delete mode 100644 playground/tailwind/src/App.vue delete mode 100644 playground/tailwind/src/assets/logo.png delete mode 100644 playground/tailwind/src/components/HelloWorld.vue delete mode 100644 playground/tailwind/src/components/PugTemplate.vue create mode 100644 playground/tailwind/src/components/component1.js delete mode 100644 playground/tailwind/src/router.ts delete mode 100644 playground/tailwind/src/utils.ts delete mode 100644 playground/tailwind/src/views/Page.vue create mode 100644 playground/tailwind/src/views/view1.js diff --git a/playground/css/__tests__/postcss-plugins-different-dir/postcss-plugins-different-dir.spec.ts b/playground/css/__tests__/postcss-plugins-different-dir/postcss-plugins-different-dir.spec.ts index fb748bf2c8fff2..1d21eb760dabfd 100644 --- a/playground/css/__tests__/postcss-plugins-different-dir/postcss-plugins-different-dir.spec.ts +++ b/playground/css/__tests__/postcss-plugins-different-dir/postcss-plugins-different-dir.spec.ts @@ -21,7 +21,7 @@ test.runIf(isServe)('postcss plugins in different dir', async () => { await server.listen() try { await page.goto(`http://localhost:${port}`) - const tailwindStyle = await page.$('.tailwind-style') + const tailwindStyle = page.locator('#tailwind-style') expect(await getBgColor(tailwindStyle)).toBe('rgb(254, 226, 226)') expect(await getColor(tailwindStyle)).toBe('rgb(136, 136, 136)') } finally { diff --git a/playground/tailwind/__test__/tailwind.spec.ts b/playground/tailwind/__test__/tailwind.spec.ts index e639678331e9e5..c67ef115073b69 100644 --- a/playground/tailwind/__test__/tailwind.spec.ts +++ b/playground/tailwind/__test__/tailwind.spec.ts @@ -1,84 +1,82 @@ import { expect, test } from 'vitest' import { editFile, - getBgColor, getColor, - isBuild, + isServe, page, untilBrowserLogAfter, untilUpdated, } from '~utils' test('should render', async () => { - expect(await page.textContent('#pagetitle')).toBe('|Page title|') + expect(await page.textContent('#pagetitle')).toBe('Page title') }) -if (!isBuild) { - test('regenerate CSS and HMR (glob pattern)', async () => { - const el = await page.$('#pagetitle') - const el2 = await page.$('#helloroot') - expect(await getColor(el)).toBe('rgb(11, 22, 33)') +test.runIf(isServe)('regenerate CSS and HMR (glob pattern)', async () => { + const el = page.locator('#view1-text') + expect(await getColor(el)).toBe('rgb(22, 163, 74)') - await untilBrowserLogAfter( - () => - editFile('src/views/Page.vue', (code) => - code.replace('|Page title|', '|Page title updated|'), - ), - [ - '[vite] css hot updated: /index.css', - '[vite] hot updated: /src/views/Page.vue', - ], - false, - ) - await untilUpdated(() => el.textContent(), '|Page title updated|') + await untilBrowserLogAfter( + () => + editFile('src/views/view1.js', (code) => + code.replace('|view1|', '|view1 updated|'), + ), + [ + '[vite] css hot updated: /index.css', + '[vite] hot updated: /src/views/view1.js via /src/main.js', + ], + false, + ) + await untilUpdated(() => el.textContent(), '|view1 updated|') - await untilBrowserLogAfter( - () => - editFile('src/components/HelloWorld.vue', (code) => - code.replace('text-gray-800', 'text-[rgb(10,20,30)]'), - ), - [ - '[vite] css hot updated: /index.css', - '[vite] hot updated: /src/components/HelloWorld.vue', - ], - false, - ) - await untilUpdated(() => getColor(el2), 'rgb(10, 20, 30)') - }) + await untilBrowserLogAfter( + () => + editFile('src/views/view1.js', (code) => + code.replace('text-green-600', 'text-orange-600'), + ), + [ + '[vite] css hot updated: /index.css', + '[vite] hot updated: /src/views/view1.js via /src/main.js', + ], + false, + ) + // await new Promise(resolve => setTimeout(resolve, 10)) + await untilUpdated(async () => getColor(el), 'rgb(234, 88, 12)') +}) - test('regenerate CSS and HMR (relative path)', async () => { - const el = await page.$('h1') - expect(await getColor(el)).toBe('black') +test.runIf(isServe)( + 'same file duplicated in module graph (#4267)', + async () => { + const el = page.locator('#component1') + expect(await getColor(el)).toBe('rgb(220, 38, 38)') + // when duplicated, page reload happens await untilBrowserLogAfter( () => - editFile('src/App.vue', (code) => - code.replace('text-black', 'text-[rgb(11,22,33)]'), + editFile('src/components/component1.js', (code) => + code.replace('text-red-600', 'text-blue-600'), ), [ '[vite] css hot updated: /index.css', - '[vite] hot updated: /src/App.vue', + '[vite] hot updated: /src/components/component1.js', ], false, ) - await untilUpdated(() => getColor(el), 'rgb(11, 22, 33)') - }) + await untilUpdated(() => getColor(el), 'rgb(37, 99, 235)') + }, +) - test('regenerate CSS and HMR (pug template)', async () => { - const el = await page.$('.pug') - expect(await getBgColor(el)).toBe('rgb(248, 113, 113)') +test.runIf(isServe)('regenerate CSS and HMR (relative path)', async () => { + const el = page.locator('#pagetitle') + expect(await getColor(el)).toBe('rgb(124, 58, 237)') - await untilBrowserLogAfter( - () => - editFile('src/components/PugTemplate.vue', (code) => - code.replace('bg-red-400', 'bg-red-600'), - ), - [ - '[vite] css hot updated: /index.css', - '[vite] hot updated: /src/components/PugTemplate.vue?vue&type=template&lang.js', - ], - false, - ) - await untilUpdated(() => getBgColor(el), 'rgb(220, 38, 38)') - }) -} + await untilBrowserLogAfter( + () => + editFile('src/main.js', (code) => + code.replace('text-violet-600', 'text-cyan-600'), + ), + ['[vite] css hot updated: /index.css', '[vite] hot updated: /src/main.js'], + false, + ) + await untilUpdated(() => getColor(el), 'rgb(8, 145, 178)') +}) diff --git a/playground/tailwind/index.html b/playground/tailwind/index.html index d28c699ba6d465..0c7bee6b26884f 100644 --- a/playground/tailwind/index.html +++ b/playground/tailwind/index.html @@ -1,14 +1,5 @@ - - - - - - - Vite App - - - -
- - - + + +
+ + diff --git a/playground/tailwind/src/App.vue b/playground/tailwind/src/App.vue deleted file mode 100644 index 25835fc414a06f..00000000000000 --- a/playground/tailwind/src/App.vue +++ /dev/null @@ -1,12 +0,0 @@ - - - diff --git a/playground/tailwind/src/assets/logo.png b/playground/tailwind/src/assets/logo.png deleted file mode 100644 index f3d2503fc2a44b5053b0837ebea6e87a2d339a43..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6849 zcmaKRcUV(fvo}bjDT-7nLI_nlK}sT_69H+`qzVWDA|yaU?}j417wLi^B1KB1SLsC& zL0ag7$U(XW5YR7p&Ux?sP$d4lvMt8C^+TcQu4F zQqv!UF!I+kw)c0jhd6+g6oCr9P?7)?!qX1ui*iL{p}sKCAGuJ{{W)0z1pLF|=>h}& zt(2Lr0Z`2ig8<5i%Zk}cO5Fm=LByqGWaS`oqChZdEFmc`0hSb#gg|Aap^{+WKOYcj zHjINK)KDG%&s?Mt4CL(T=?;~U@bU2x_mLKN!#GJuK_CzbNw5SMEJorG!}_5;?R>@1 zSl)jns3WlU7^J%=(hUtfmuUCU&C3%8B5C^f5>W2Cy8jW3#{Od{lF1}|?c61##3dzA zsPlFG;l_FzBK}8>|H_Ru_H#!_7$UH4UKo3lKOA}g1(R&|e@}GINYVzX?q=_WLZCgh z)L|eJMce`D0EIwgRaNETDsr+?vQknSGAi=7H00r`QnI%oQnFxm`G2umXso9l+8*&Q z7WqF|$p49js$mdzo^BXpH#gURy=UO;=IMrYc5?@+sR4y_?d*~0^YP7d+y0{}0)zBM zIKVM(DBvICK#~7N0a+PY6)7;u=dutmNqK3AlsrUU9U`d;msiucB_|8|2kY=(7XA;G zwDA8AR)VCA#JOkxm#6oHNS^YVuOU;8p$N)2{`;oF|rQ?B~K$%rHDxXs+_G zF5|-uqHZvSzq}L;5Kcy_P+x0${33}Ofb6+TX&=y;;PkEOpz%+_bCw_{<&~ zeLV|!bP%l1qxywfVr9Z9JI+++EO^x>ZuCK);=$VIG1`kxK8F2M8AdC$iOe3cj1fo(ce4l-9 z7*zKy3={MixvUk=enQE;ED~7tv%qh&3lR<0m??@w{ILF|e#QOyPkFYK!&Up7xWNtL zOW%1QMC<3o;G9_S1;NkPB6bqbCOjeztEc6TsBM<(q9((JKiH{01+Ud=uw9B@{;(JJ z-DxI2*{pMq`q1RQc;V8@gYAY44Z!%#W~M9pRxI(R?SJ7sy7em=Z5DbuDlr@*q|25V)($-f}9c#?D%dU^RS<(wz?{P zFFHtCab*!rl(~j@0(Nadvwg8q|4!}L^>d?0al6}Rrv9$0M#^&@zjbfJy_n!%mVHK4 z6pLRIQ^Uq~dnyy$`ay51Us6WaP%&O;@49m&{G3z7xV3dLtt1VTOMYl3UW~Rm{Eq4m zF?Zl_v;?7EFx1_+#WFUXxcK78IV)FO>42@cm@}2I%pVbZqQ}3;p;sDIm&knay03a^ zn$5}Q$G!@fTwD$e(x-~aWP0h+4NRz$KlnO_H2c< z(XX#lPuW_%H#Q+c&(nRyX1-IadKR-%$4FYC0fsCmL9ky3 zKpxyjd^JFR+vg2!=HWf}2Z?@Td`0EG`kU?{8zKrvtsm)|7>pPk9nu@2^z96aU2<#` z2QhvH5w&V;wER?mopu+nqu*n8p~(%QkwSs&*0eJwa zMXR05`OSFpfyRb!Y_+H@O%Y z0=K^y6B8Gcbl?SA)qMP3Z+=C(?8zL@=74R=EVnE?vY!1BQy2@q*RUgRx4yJ$k}MnL zs!?74QciNb-LcG*&o<9=DSL>1n}ZNd)w1z3-0Pd^4ED1{qd=9|!!N?xnXjM!EuylY z5=!H>&hSofh8V?Jofyd!h`xDI1fYAuV(sZwwN~{$a}MX^=+0TH*SFp$vyxmUv7C*W zv^3Gl0+eTFgBi3FVD;$nhcp)ka*4gSskYIqQ&+M}xP9yLAkWzBI^I%zR^l1e?bW_6 zIn{mo{dD=)9@V?s^fa55jh78rP*Ze<3`tRCN4*mpO$@7a^*2B*7N_|A(Ve2VB|)_o z$=#_=aBkhe(ifX}MLT()@5?OV+~7cXC3r!%{QJxriXo9I%*3q4KT4Xxzyd{ z9;_%=W%q!Vw$Z7F3lUnY+1HZ*lO;4;VR2+i4+D(m#01OYq|L_fbnT;KN<^dkkCwtd zF7n+O7KvAw8c`JUh6LmeIrk4`F3o|AagKSMK3))_5Cv~y2Bb2!Ibg9BO7Vkz?pAYX zoI=B}+$R22&IL`NCYUYjrdhwjnMx_v=-Qcx-jmtN>!Zqf|n1^SWrHy zK|MwJ?Z#^>)rfT5YSY{qjZ&`Fjd;^vv&gF-Yj6$9-Dy$<6zeP4s+78gS2|t%Z309b z0^fp~ue_}i`U9j!<|qF92_3oB09NqgAoehQ`)<)dSfKoJl_A6Ec#*Mx9Cpd-p#$Ez z={AM*r-bQs6*z$!*VA4|QE7bf@-4vb?Q+pPKLkY2{yKsw{&udv_2v8{Dbd zm~8VAv!G~s)`O3|Q6vFUV%8%+?ZSVUa(;fhPNg#vab@J*9XE4#D%)$UU-T5`fwjz! z6&gA^`OGu6aUk{l*h9eB?opVdrHK>Q@U>&JQ_2pR%}TyOXGq_6s56_`U(WoOaAb+K zXQr#6H}>a-GYs9^bGP2Y&hSP5gEtW+GVC4=wy0wQk=~%CSXj=GH6q z-T#s!BV`xZVxm{~jr_ezYRpqqIcXC=Oq`b{lu`Rt(IYr4B91hhVC?yg{ol4WUr3v9 zOAk2LG>CIECZ-WIs0$N}F#eoIUEtZudc7DPYIjzGqDLWk_A4#(LgacooD z2K4IWs@N`Bddm-{%oy}!k0^i6Yh)uJ1S*90>|bm3TOZxcV|ywHUb(+CeX-o1|LTZM zwU>dY3R&U)T(}5#Neh?-CWT~@{6Ke@sI)uSuzoah8COy)w)B)aslJmp`WUcjdia-0 zl2Y}&L~XfA`uYQboAJ1;J{XLhYjH){cObH3FDva+^8ioOQy%Z=xyjGLmWMrzfFoH; zEi3AG`_v+%)&lDJE;iJWJDI@-X9K5O)LD~j*PBe(wu+|%ar~C+LK1+-+lK=t# z+Xc+J7qp~5q=B~rD!x78)?1+KUIbYr^5rcl&tB-cTtj+e%{gpZZ4G~6r15+d|J(ky zjg@@UzMW0k9@S#W(1H{u;Nq(7llJbq;;4t$awM;l&(2s+$l!Ay9^Ge|34CVhr7|BG z?dAR83smef^frq9V(OH+a+ki#q&-7TkWfFM=5bsGbU(8mC;>QTCWL5ydz9s6k@?+V zcjiH`VI=59P-(-DWXZ~5DH>B^_H~;4$)KUhnmGo*G!Tq8^LjfUDO)lASN*=#AY_yS zqW9UX(VOCO&p@kHdUUgsBO0KhXxn1sprK5h8}+>IhX(nSXZKwlNsjk^M|RAaqmCZB zHBolOHYBas@&{PT=R+?d8pZu zUHfyucQ`(umXSW7o?HQ3H21M`ZJal+%*)SH1B1j6rxTlG3hx1IGJN^M7{$j(9V;MZ zRKybgVuxKo#XVM+?*yTy{W+XHaU5Jbt-UG33x{u(N-2wmw;zzPH&4DE103HV@ER86 z|FZEmQb|&1s5#`$4!Cm}&`^{(4V}OP$bk`}v6q6rm;P!H)W|2i^e{7lTk2W@jo_9q z*aw|U7#+g59Fv(5qI`#O-qPj#@_P>PC#I(GSp3DLv7x-dmYK=C7lPF8a)bxb=@)B1 zUZ`EqpXV2dR}B&r`uM}N(TS99ZT0UB%IN|0H%DcVO#T%L_chrgn#m6%x4KE*IMfjX zJ%4veCEqbXZ`H`F_+fELMC@wuy_ch%t*+Z+1I}wN#C+dRrf2X{1C8=yZ_%Pt6wL_~ zZ2NN-hXOT4P4n$QFO7yYHS-4wF1Xfr-meG9Pn;uK51?hfel`d38k{W)F*|gJLT2#T z<~>spMu4(mul-8Q3*pf=N4DcI)zzjqAgbE2eOT7~&f1W3VsdD44Ffe;3mJp-V@8UC z)|qnPc12o~$X-+U@L_lWqv-RtvB~%hLF($%Ew5w>^NR82qC_0FB z)=hP1-OEx?lLi#jnLzH}a;Nvr@JDO-zQWd}#k^an$Kwml;MrD&)sC5b`s0ZkVyPkb zt}-jOq^%_9>YZe7Y}PhW{a)c39G`kg(P4@kxjcYfgB4XOOcmezdUI7j-!gs7oAo2o zx(Ph{G+YZ`a%~kzK!HTAA5NXE-7vOFRr5oqY$rH>WI6SFvWmahFav!CfRMM3%8J&c z*p+%|-fNS_@QrFr(at!JY9jCg9F-%5{nb5Bo~z@Y9m&SHYV`49GAJjA5h~h4(G!Se zZmK{Bo7ivCfvl}@A-ptkFGcWXAzj3xfl{evi-OG(TaCn1FAHxRc{}B|x+Ua1D=I6M z!C^ZIvK6aS_c&(=OQDZfm>O`Nxsw{ta&yiYPA~@e#c%N>>#rq)k6Aru-qD4(D^v)y z*>Rs;YUbD1S8^D(ps6Jbj0K3wJw>L4m)0e(6Pee3Y?gy9i0^bZO?$*sv+xKV?WBlh zAp*;v6w!a8;A7sLB*g-^<$Z4L7|5jXxxP1}hQZ<55f9<^KJ>^mKlWSGaLcO0=$jem zWyZkRwe~u{{tU63DlCaS9$Y4CP4f?+wwa(&1ou)b>72ydrFvm`Rj-0`kBJgK@nd(*Eh!(NC{F-@=FnF&Y!q`7){YsLLHf0_B6aHc# z>WIuHTyJwIH{BJ4)2RtEauC7Yq7Cytc|S)4^*t8Va3HR zg=~sN^tp9re@w=GTx$;zOWMjcg-7X3Wk^N$n;&Kf1RgVG2}2L-(0o)54C509C&77i zrjSi{X*WV=%C17((N^6R4Ya*4#6s_L99RtQ>m(%#nQ#wrRC8Y%yxkH;d!MdY+Tw@r zjpSnK`;C-U{ATcgaxoEpP0Gf+tx);buOMlK=01D|J+ROu37qc*rD(w`#O=3*O*w9?biwNoq3WN1`&Wp8TvKj3C z3HR9ssH7a&Vr<6waJrU zdLg!ieYz%U^bmpn%;(V%%ugMk92&?_XX1K@mwnVSE6!&%P%Wdi7_h`CpScvspMx?N zQUR>oadnG17#hNc$pkTp+9lW+MBKHRZ~74XWUryd)4yd zj98$%XmIL4(9OnoeO5Fnyn&fpQ9b0h4e6EHHw*l68j;>(ya`g^S&y2{O8U>1*>4zR zq*WSI_2o$CHQ?x0!wl9bpx|Cm2+kFMR)oMud1%n2=qn5nE&t@Fgr#=Zv2?}wtEz^T z9rrj=?IH*qI5{G@Rn&}^Z{+TW}mQeb9=8b<_a`&Cm#n%n~ zU47MvCBsdXFB1+adOO)03+nczfWa#vwk#r{o{dF)QWya9v2nv43Zp3%Ps}($lA02*_g25t;|T{A5snSY?3A zrRQ~(Ygh_ebltHo1VCbJb*eOAr;4cnlXLvI>*$-#AVsGg6B1r7@;g^L zFlJ_th0vxO7;-opU@WAFe;<}?!2q?RBrFK5U{*ai@NLKZ^};Ul}beukveh?TQn;$%9=R+DX07m82gP$=}Uo_%&ngV`}Hyv8g{u z3SWzTGV|cwQuFIs7ZDOqO_fGf8Q`8MwL}eUp>q?4eqCmOTcwQuXtQckPy|4F1on8l zP*h>d+cH#XQf|+6c|S{7SF(Lg>bR~l(0uY?O{OEVlaxa5@e%T&xju=o1`=OD#qc16 zSvyH*my(dcp6~VqR;o(#@m44Lug@~_qw+HA=mS#Z^4reBy8iV?H~I;{LQWk3aKK8$bLRyt$g?- -
- HelloWorld - {{ count }} -
- - - diff --git a/playground/tailwind/src/components/PugTemplate.vue b/playground/tailwind/src/components/PugTemplate.vue deleted file mode 100644 index 4169b534dee4ef..00000000000000 --- a/playground/tailwind/src/components/PugTemplate.vue +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/playground/tailwind/src/components/component1.js b/playground/tailwind/src/components/component1.js new file mode 100644 index 00000000000000..df5e36f0bacd56 --- /dev/null +++ b/playground/tailwind/src/components/component1.js @@ -0,0 +1,9 @@ +export const component1 = /* html */ ` +
component1
+` + +import.meta.hot?.accept((mod) => { + document.querySelectorAll('[data-id="component1"]').forEach((d) => { + d.outerHTML = mod.component1 + }) +}) diff --git a/playground/tailwind/src/main.js b/playground/tailwind/src/main.js index 78494e75b4741d..b9f0c5956232d5 100644 --- a/playground/tailwind/src/main.js +++ b/playground/tailwind/src/main.js @@ -1,6 +1,18 @@ -import { createApp } from 'vue' -import App from './App.vue' -import router from './router' -// import '../index.css'; +import { view1 } from './views/view1' -createApp(App).use(router).mount('#app') +export const main = (view1Content) => /* html */ ` +

Page title

+ ${view1Content} + +
style
+` + +document.getElementById('app').innerHTML = main(view1) + +import.meta.hot?.accept((mod) => { + document.getElementById('app').innerHTML = mod.main(view1) +}) + +import.meta.hot?.accept(['./views/view1'], ([mod]) => { + document.getElementById('app').innerHTML = main(mod.view1) +}) diff --git a/playground/tailwind/src/router.ts b/playground/tailwind/src/router.ts deleted file mode 100644 index 10e3980cb07cb8..00000000000000 --- a/playground/tailwind/src/router.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { createRouter, createWebHistory } from 'vue-router' -import Page from './views/Page.vue' - -const history = createWebHistory() - -const router = createRouter({ - history: history, - routes: [ - { - path: '/', - component: Page, - }, - ], -}) - -export default router diff --git a/playground/tailwind/src/utils.ts b/playground/tailwind/src/utils.ts deleted file mode 100644 index 38c21ae7a0f8d8..00000000000000 --- a/playground/tailwind/src/utils.ts +++ /dev/null @@ -1,2 +0,0 @@ -export const NAME = 'Tailwind' -export const INITIAL_COUNT = 1 diff --git a/playground/tailwind/src/views/Page.vue b/playground/tailwind/src/views/Page.vue deleted file mode 100644 index 76f8aabf13d7d3..00000000000000 --- a/playground/tailwind/src/views/Page.vue +++ /dev/null @@ -1,33 +0,0 @@ - - - diff --git a/playground/tailwind/src/views/view1.js b/playground/tailwind/src/views/view1.js new file mode 100644 index 00000000000000..c9e0c0d1745fe2 --- /dev/null +++ b/playground/tailwind/src/views/view1.js @@ -0,0 +1,8 @@ +import { component1 } from '../components/component1' + +export const view1 = /* html */ ` +
+
|view1|
+ ${component1} +
+` diff --git a/playground/tailwind/tailwind.config.js b/playground/tailwind/tailwind.config.js index 1b80b08aba2ef1..e4504c499e78f0 100644 --- a/playground/tailwind/tailwind.config.js +++ b/playground/tailwind/tailwind.config.js @@ -2,10 +2,10 @@ module.exports = { content: [ - // Before editing this section, make sure no paths are matching with `/src/App.vue` + // Before editing this section, make sure no paths are matching with `/src/main.js` // Look https://github.com/vitejs/vite/pull/6959 for more details - __dirname + '/src/{components,views}/**/*.vue', - __dirname + '/src/App.vue', + __dirname + '/src/{components,views}/**/*.js', + __dirname + '/src/main.js', ], theme: { extend: {}, diff --git a/playground/tailwind/vite.config.ts b/playground/tailwind/vite.config.ts index d3680f6c39c3e3..5b97ed1053e382 100644 --- a/playground/tailwind/vite.config.ts +++ b/playground/tailwind/vite.config.ts @@ -1,5 +1,4 @@ import { defineConfig } from 'vite' -import vue from '@vitejs/plugin-vue' export default defineConfig({ resolve: { @@ -7,7 +6,6 @@ export default defineConfig({ '/@': __dirname, }, }, - plugins: [vue()], build: { // to make tests faster minify: false, @@ -17,4 +15,15 @@ export default defineConfig({ // although it should not affect the build origin: 'http://localhost:8080', }, + plugins: [ + { + name: 'delay view', + enforce: 'pre', + async transform(_code, id) { + if (id.includes('views/view1.js')) { + await new Promise((resolve) => setTimeout(resolve, 100)) + } + }, + }, + ], }) diff --git a/playground/test-utils.ts b/playground/test-utils.ts index df68dce9c5e66f..39e2f56c5e6a86 100644 --- a/playground/test-utils.ts +++ b/playground/test-utils.ts @@ -4,7 +4,11 @@ import fs from 'node:fs' import path from 'node:path' import colors from 'css-color-names' -import type { ConsoleMessage, ElementHandle } from 'playwright-chromium' +import type { + ConsoleMessage, + ElementHandle, + Locator, +} from 'playwright-chromium' import type { DepOptimizationMetadata, Manifest } from 'vite' import { normalizePath } from 'vite' import { fromComment } from 'convert-source-map' @@ -74,7 +78,9 @@ function rgbToHex(rgb: string): string { const timeout = (n: number) => new Promise((r) => setTimeout(r, n)) -async function toEl(el: string | ElementHandle): Promise { +async function toEl( + el: string | ElementHandle | Locator, +): Promise { if (typeof el === 'string') { const realEl = await page.$(el) if (realEl == null) { @@ -82,21 +88,30 @@ async function toEl(el: string | ElementHandle): Promise { } return realEl } + if ('elementHandle' in el) { + return el.elementHandle() + } return el } -export async function getColor(el: string | ElementHandle): Promise { +export async function getColor( + el: string | ElementHandle | Locator, +): Promise { el = await toEl(el) const rgb = await el.evaluate((el) => getComputedStyle(el as Element).color) return hexToNameMap[rgbToHex(rgb)] ?? rgb } -export async function getBg(el: string | ElementHandle): Promise { +export async function getBg( + el: string | ElementHandle | Locator, +): Promise { el = await toEl(el) return el.evaluate((el) => getComputedStyle(el as Element).backgroundImage) } -export async function getBgColor(el: string | ElementHandle): Promise { +export async function getBgColor( + el: string | ElementHandle | Locator, +): Promise { el = await toEl(el) return el.evaluate((el) => getComputedStyle(el as Element).backgroundColor) } From 663201851bcef9ad75386d72f7f775407c4ada1d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Joaqu=C3=ADn=20S=C3=A1nchez?= Date: Mon, 14 Aug 2023 12:20:58 +0200 Subject: [PATCH 05/29] docs: include vite-plugin-inspect in troubleshooting page (#14085) --- docs/guide/troubleshooting.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/guide/troubleshooting.md b/docs/guide/troubleshooting.md index 75af887e0efa57..e5bfd3869fb647 100644 --- a/docs/guide/troubleshooting.md +++ b/docs/guide/troubleshooting.md @@ -166,6 +166,8 @@ Once your application is opened in the browser, just await finish loading it and Node.js inspector will generate `vite-profile-0.cpuprofile` in the root folder, go to https://www.speedscope.app/, and upload the CPU profile using the `BROWSE` button to inspect the result. +You can install [vite-plugin-inspect](https://github.com/antfu/vite-plugin-inspect), which lets you inspect the intermediate state of Vite plugins and can also help you to identify which plugins or middlewares are the bottleneck in your applications. The plugin can be used in both dev and build modes. Check the readme file for more details. + ## Others ### Module externalized for browser compatibility From 13ea794c4cf119fa0cae7822fa73da83e097d9f1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Joaqu=C3=ADn=20S=C3=A1nchez?= Date: Mon, 14 Aug 2023 12:22:25 +0200 Subject: [PATCH 06/29] docs: include outline and code-group (#14082) --- docs/.vitepress/config.ts | 4 ++++ docs/guide/assets.md | 4 ++++ docs/guide/cli.md | 4 ++++ docs/guide/dep-pre-bundling.md | 4 ++++ docs/guide/index.md | 14 ++++++-------- docs/guide/why.md | 4 ++++ 6 files changed, 26 insertions(+), 8 deletions(-) diff --git a/docs/.vitepress/config.ts b/docs/.vitepress/config.ts index 7646fb17286f27..5f33edb898458d 100644 --- a/docs/.vitepress/config.ts +++ b/docs/.vitepress/config.ts @@ -164,6 +164,10 @@ export default defineConfig({ text: 'Changelog', link: 'https://github.com/vitejs/vite/blob/main/packages/vite/CHANGELOG.md', }, + { + text: 'Contributing', + link: 'https://github.com/vitejs/vite/blob/main/CONTRIBUTING.md', + }, ], }, ], diff --git a/docs/guide/assets.md b/docs/guide/assets.md index dff926f2c2da31..782d734e2f9ccc 100644 --- a/docs/guide/assets.md +++ b/docs/guide/assets.md @@ -1,3 +1,7 @@ +--- +outline: [2, 3] +--- + # Static Asset Handling - Related: [Public Base Path](./build#public-base-path) diff --git a/docs/guide/cli.md b/docs/guide/cli.md index 497ad66115ab05..84efa501b5e4c6 100644 --- a/docs/guide/cli.md +++ b/docs/guide/cli.md @@ -1,3 +1,7 @@ +--- +outline: [2, 3] +--- + # Command Line Interface ## Dev server diff --git a/docs/guide/dep-pre-bundling.md b/docs/guide/dep-pre-bundling.md index ddfad451322c08..1a8f0f226124b6 100644 --- a/docs/guide/dep-pre-bundling.md +++ b/docs/guide/dep-pre-bundling.md @@ -1,3 +1,7 @@ +--- +outline: [2, 3] +--- + # Dependency Pre-Bundling When you run `vite` for the first time, Vite prebundles your project dependencies before loading your site locally. It is done automatically and transparently by default. diff --git a/docs/guide/index.md b/docs/guide/index.md index ebe76458c21984..b09dedf3b449a5 100644 --- a/docs/guide/index.md +++ b/docs/guide/index.md @@ -45,24 +45,22 @@ The supported template presets are: Vite requires [Node.js](https://nodejs.org/en/) version 14.18+, 16+. However, some templates require a higher Node.js version to work, please upgrade if your package manager warns about it. ::: -With NPM: +::: code-group -```bash +```bash [NPM] $ npm create vite@latest ``` -With Yarn: - -```bash +```bash [Yarn] $ yarn create vite ``` -With PNPM: - -```bash +```bash [PNPM] $ pnpm create vite ``` +::: + Then follow the prompts! You can also directly specify the project name and the template you want to use via additional command line options. For example, to scaffold a Vite + Vue project, run: diff --git a/docs/guide/why.md b/docs/guide/why.md index d58d165ca0228e..1647c7781e93e4 100644 --- a/docs/guide/why.md +++ b/docs/guide/why.md @@ -1,3 +1,7 @@ +--- +outline: [2, 3] +--- + # Why Vite ## The Problems From 63a44511133276f903e54d4dde4296d5d5963298 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Br=C3=BAn=C3=B3=20Salomon?= <35275408+bru02@users.noreply.github.com> Date: Mon, 14 Aug 2023 12:30:32 +0200 Subject: [PATCH 07/29] fix(css): spread lightningcss options (#14024) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Arnaud Barré --- packages/vite/api-extractor.json | 2 -- packages/vite/package.json | 2 +- packages/vite/scripts/api-extractor.ts | 25 ----------------------- packages/vite/scripts/checkBuiltTypes.ts | 4 +++- packages/vite/src/node/index.ts | 2 +- packages/vite/src/node/plugins/css.ts | 14 +++++++++---- packages/vite/src/types/lightningcss.d.ts | 23 --------------------- 7 files changed, 15 insertions(+), 57 deletions(-) delete mode 100644 packages/vite/scripts/api-extractor.ts delete mode 100644 packages/vite/src/types/lightningcss.d.ts diff --git a/packages/vite/api-extractor.json b/packages/vite/api-extractor.json index 642cef99fecd59..0b5b4178c2bd90 100644 --- a/packages/vite/api-extractor.json +++ b/packages/vite/api-extractor.json @@ -5,8 +5,6 @@ "mainEntryPointFilePath": "./temp/node/index.d.ts", - "bundledPackages": ["lightningcss"], - "dtsRollup": { "enabled": true, "untrimmedFilePath": "", diff --git a/packages/vite/package.json b/packages/vite/package.json index 824305fc2a4841..1556478f2ab56b 100644 --- a/packages/vite/package.json +++ b/packages/vite/package.json @@ -57,7 +57,7 @@ "build-types": "run-s build-types-temp build-types-pre-patch build-types-roll build-types-post-patch build-types-check", "build-types-temp": "tsc --emitDeclarationOnly --outDir temp/node -p src/node", "build-types-pre-patch": "tsx scripts/prePatchTypes.ts", - "build-types-roll": "tsx scripts/api-extractor.ts run && rimraf temp", + "build-types-roll": "api-extractor run && rimraf temp", "build-types-post-patch": "tsx scripts/postPatchTypes.ts", "build-types-check": "tsx scripts/checkBuiltTypes.ts && tsc --project tsconfig.check.json", "typecheck": "tsc --noEmit", diff --git a/packages/vite/scripts/api-extractor.ts b/packages/vite/scripts/api-extractor.ts deleted file mode 100644 index 1154830ffa8cd6..00000000000000 --- a/packages/vite/scripts/api-extractor.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { Extractor, ExtractorConfig } from '@microsoft/api-extractor' - -const result = Extractor.invoke( - ExtractorConfig.loadFileAndPrepare('./api-extractor.json'), - { - messageCallback: (message) => { - const ignore = () => { - // @ts-expect-error TS requires to use the const enum, which is not available as the named export in tsx - message.logLevel = 'none' - } - if (message.sourceFilePath?.includes('lightningcss')) { - ignore() - } - if (message.messageId === 'ae-forgotten-export') { - if (message.sourceFilePath?.endsWith('/src/types/lightningcss.d.ts')) { - // We only expose LightningCSS types via prefixed types to avoid - // having confusing name like "Targets" in Vite types - ignore() - } - } - }, - }, -) - -if (!result.succeeded) process.exit(1) diff --git a/packages/vite/scripts/checkBuiltTypes.ts b/packages/vite/scripts/checkBuiltTypes.ts index 5601a1e84fb9cd..43f8a914b63c4d 100644 --- a/packages/vite/scripts/checkBuiltTypes.ts +++ b/packages/vite/scripts/checkBuiltTypes.ts @@ -17,7 +17,9 @@ const distDir = resolve(dir, '../dist') const pkgJson = JSON.parse( readFileSync(resolve(dir, '../package.json'), 'utf-8'), ) -const deps = new Set(Object.keys(pkgJson.dependencies)) +const deps = new Set( + Object.keys(Object.assign(pkgJson.dependencies, pkgJson.peerDependencies)), +) type SpecifierError = { loc: SourceLocation | null | undefined diff --git a/packages/vite/src/node/index.ts b/packages/vite/src/node/index.ts index ffa1d4ecd83a49..942c70b6d2dc87 100644 --- a/packages/vite/src/node/index.ts +++ b/packages/vite/src/node/index.ts @@ -75,6 +75,7 @@ export type { export type { CSSOptions, CSSModulesOptions, + LightningCSSOptions, PreprocessCSSResult, ResolvedCSSOptions, } from './plugins/css' @@ -144,4 +145,3 @@ export type { Terser } from 'dep-types/terser' export type { RollupCommonJSOptions } from 'dep-types/commonjs' export type { RollupDynamicImportVarsOptions } from 'dep-types/dynamicImportVars' export type { Matcher, AnymatchPattern, AnymatchFn } from 'dep-types/anymatch' -export type { LightningCSSOptions } from 'dep-types/lightningcss' diff --git a/packages/vite/src/node/plugins/css.ts b/packages/vite/src/node/plugins/css.ts index 9aa3abf5c2da68..1fdaf97e7f57c4 100644 --- a/packages/vite/src/node/plugins/css.ts +++ b/packages/vite/src/node/plugins/css.ts @@ -20,10 +20,10 @@ import type Sass from 'sass' import type Stylus from 'stylus' import type Less from 'less' import type { Alias } from 'dep-types/alias' -import type { LightningCSSOptions } from 'dep-types/lightningcss' import type { TransformOptions } from 'esbuild' import { formatMessages, transform } from 'esbuild' import type { RawSourceMap } from '@ampproject/remapping' +import type { BundleAsyncOptions, CustomAtRules } from 'lightningcss' import { getCodeWithSourcemap, injectSourcesContent } from '../server/sourcemap' import type { ModuleNode } from '../server/moduleGraph' import type { ResolveFn, ViteDevServer } from '../' @@ -139,6 +139,12 @@ export type ResolvedCSSOptions = Omit & { } } +// remove options set by Vite +export type LightningCSSOptions = Omit< + BundleAsyncOptions, + 'filename' | 'resolver' | 'minify' | 'sourceMap' | 'analyzeDependencies' +> + export function resolveCSSOptions( options: CSSOptions | undefined, ): ResolvedCSSOptions | undefined { @@ -2167,13 +2173,15 @@ async function compileLightningCSS( ? (await importLightningCSS()).transformStyleAttribute({ filename, code: Buffer.from(src), - targets: config.css?.lightningcss?.targets, minify: config.isProduction && !!config.build.cssMinify, + targets: config.css?.lightningcss?.targets, analyzeDependencies: true, + visitor: config.css?.lightningcss?.visitor, }) : await ( await importLightningCSS() ).bundleAsync({ + ...config.css?.lightningcss, filename, resolver: { read(filePath) { @@ -2204,14 +2212,12 @@ async function compileLightningCSS( return id }, }, - targets: config.css?.lightningcss?.targets, minify: config.isProduction && !!config.build.cssMinify, sourceMap: config.css?.devSourcemap, analyzeDependencies: true, cssModules: cssModuleRE.test(id) ? config.css?.lightningcss?.cssModules ?? true : undefined, - drafts: config.css?.lightningcss?.drafts, }) let css = res.code.toString() diff --git a/packages/vite/src/types/lightningcss.d.ts b/packages/vite/src/types/lightningcss.d.ts deleted file mode 100644 index 98367f381283a2..00000000000000 --- a/packages/vite/src/types/lightningcss.d.ts +++ /dev/null @@ -1,23 +0,0 @@ -import type { - CSSModulesConfig, - Drafts, - Features, - NonStandard, - PseudoClasses, - Targets, -} from 'lightningcss' - -/** - * Options are spread, so you can also use options that are not typed here like - * visitor (not exposed because it would impact too much the bundle size) - */ -export type LightningCSSOptions = { - targets?: Targets - include?: Features - exclude?: Features - drafts?: Drafts - nonStandard?: NonStandard - pseudoClasses?: PseudoClasses - unusedSymbols?: string[] - cssModules?: CSSModulesConfig -} From 2c1a45c86cab6ecf02abb6e50385f773d5ed568e Mon Sep 17 00:00:00 2001 From: Bjorn Lu Date: Tue, 15 Aug 2023 21:28:17 +0800 Subject: [PATCH 08/29] feat!: bump minimum node version to 18 (#14030) --- .eslintrc.cjs | 7 ++++--- .github/workflows/ci.yml | 10 ++-------- .github/workflows/publish.yml | 4 ++-- docs/guide/index.md | 2 +- netlify.toml | 2 +- package.json | 2 +- packages/create-vite/README.md | 2 +- packages/create-vite/build.config.ts | 3 ++- packages/create-vite/package.json | 2 +- packages/create-vite/tsconfig.json | 2 +- packages/plugin-legacy/build.config.ts | 3 +++ packages/plugin-legacy/package.json | 2 +- packages/vite/package.json | 2 +- packages/vite/src/node/config.ts | 2 +- packages/vite/tsconfig.base.json | 2 +- playground/tsconfig.json | 2 +- scripts/tsconfig.json | 2 +- vitest.config.e2e.ts | 2 +- vitest.config.ts | 4 +--- 19 files changed, 27 insertions(+), 30 deletions(-) diff --git a/.eslintrc.cjs b/.eslintrc.cjs index 6e07fd52419055..6ddcdb6b4ab971 100644 --- a/.eslintrc.cjs +++ b/.eslintrc.cjs @@ -1,6 +1,7 @@ // @ts-check const { builtinModules } = require('node:module') const { defineConfig } = require('eslint-define-config') +const pkg = require('./package.json') module.exports = defineConfig({ root: true, @@ -16,7 +17,7 @@ module.exports = defineConfig({ parser: '@typescript-eslint/parser', parserOptions: { sourceType: 'module', - ecmaVersion: 2021, + ecmaVersion: 2022, }, rules: { eqeqeq: ['warn', 'always', { null: 'never' }], @@ -173,13 +174,13 @@ module.exports = defineConfig({ 'n/no-unsupported-features/es-builtins': [ 'error', { - version: '^14.18.0 || >=16.0.0', + version: pkg.engines.node, }, ], 'n/no-unsupported-features/node-builtins': [ 'error', { - version: '^14.18.0 || >=16.0.0', + version: pkg.engines.node, }, ], '@typescript-eslint/explicit-module-boundary-types': 'off', diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index e5ead506804b79..fcc0628ec1540e 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -39,7 +39,7 @@ jobs: strategy: matrix: os: [ubuntu-latest] - node_version: [14, 16, 18, 20] + node_version: [18, 20] include: # Active LTS + other OS - os: macos-latest @@ -67,14 +67,8 @@ jobs: packages/create-vite/template** **.md - - name: Install pnpm (node 14, pnpm 7) - if: steps.changed-files.outputs.only_changed != 'true' && matrix.node_version == 14 - uses: pnpm/action-setup@v2.4.0 - with: - version: 7 - - name: Install pnpm - if: steps.changed-files.outputs.only_changed != 'true' && matrix.node_version != 14 + if: steps.changed-files.outputs.only_changed != 'true' uses: pnpm/action-setup@v2.4.0 - name: Set node version to ${{ matrix.node_version }} diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index ed3cd92dd84f33..3102c7176bf9f8 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -23,10 +23,10 @@ jobs: - name: Install pnpm uses: pnpm/action-setup@v2.4.0 - - name: Set node version to 16.x + - name: Set node version to 18 uses: actions/setup-node@v3 with: - node-version: 16.x + node-version: 18 registry-url: https://registry.npmjs.org/ cache: "pnpm" diff --git a/docs/guide/index.md b/docs/guide/index.md index b09dedf3b449a5..c45e1711d69dbe 100644 --- a/docs/guide/index.md +++ b/docs/guide/index.md @@ -42,7 +42,7 @@ The supported template presets are: ## Scaffolding Your First Vite Project ::: tip Compatibility Note -Vite requires [Node.js](https://nodejs.org/en/) version 14.18+, 16+. However, some templates require a higher Node.js version to work, please upgrade if your package manager warns about it. +Vite requires [Node.js](https://nodejs.org/en/) version 18+. 20+. However, some templates require a higher Node.js version to work, please upgrade if your package manager warns about it. ::: ::: code-group diff --git a/netlify.toml b/netlify.toml index 961d936bd686e5..d78254570def67 100644 --- a/netlify.toml +++ b/netlify.toml @@ -1,5 +1,5 @@ [build.environment] - NODE_VERSION = "16" + NODE_VERSION = "18" # don't need playwright for docs build PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD = "1" [build] diff --git a/package.json b/package.json index 4d76a344005691..c1ab7b5cda6a4b 100644 --- a/package.json +++ b/package.json @@ -3,7 +3,7 @@ "private": true, "type": "module", "engines": { - "node": "^14.18.0 || >=16.0.0" + "node": "^18.0.0 || >=20.0.0" }, "homepage": "https://vitejs.dev/", "repository": { diff --git a/packages/create-vite/README.md b/packages/create-vite/README.md index 8776ab3c3aeb3c..ea05ce4009beaf 100644 --- a/packages/create-vite/README.md +++ b/packages/create-vite/README.md @@ -3,7 +3,7 @@ ## Scaffolding Your First Vite Project > **Compatibility Note:** -> Vite requires [Node.js](https://nodejs.org/en/) version 14.18+, 16+. However, some templates require a higher Node.js version to work, please upgrade if your package manager warns about it. +> Vite requires [Node.js](https://nodejs.org/en/) version 18+, 20+. However, some templates require a higher Node.js version to work, please upgrade if your package manager warns about it. With NPM: diff --git a/packages/create-vite/build.config.ts b/packages/create-vite/build.config.ts index 435c39bc937a6a..71d1ba88717d6d 100644 --- a/packages/create-vite/build.config.ts +++ b/packages/create-vite/build.config.ts @@ -11,11 +11,12 @@ export default defineBuildConfig({ rollup: { inlineDependencies: true, esbuild: { + target: 'node18', minify: true, }, }, alias: { - // we can always use non-transpiled code since we support 14.18.0+ + // we can always use non-transpiled code since we support node 18+ prompts: 'prompts/lib/index.js', }, hooks: { diff --git a/packages/create-vite/package.json b/packages/create-vite/package.json index 94134bdd378846..8ee1ddf9224f30 100644 --- a/packages/create-vite/package.json +++ b/packages/create-vite/package.json @@ -20,7 +20,7 @@ "prepublishOnly": "npm run build" }, "engines": { - "node": "^14.18.0 || >=16.0.0" + "node": "^18.0.0 || >=20.0.0" }, "repository": { "type": "git", diff --git a/packages/create-vite/tsconfig.json b/packages/create-vite/tsconfig.json index 65fffe74592b9b..9fc23ebe675e0f 100644 --- a/packages/create-vite/tsconfig.json +++ b/packages/create-vite/tsconfig.json @@ -2,7 +2,7 @@ "include": ["build.config.ts", "src", "__tests__"], "compilerOptions": { "outDir": "dist", - "target": "ES2020", + "target": "ES2022", "module": "ES2020", "moduleResolution": "bundler", "strict": true, diff --git a/packages/plugin-legacy/build.config.ts b/packages/plugin-legacy/build.config.ts index db325ecfa3b0a8..f7e0fdb0bc049f 100644 --- a/packages/plugin-legacy/build.config.ts +++ b/packages/plugin-legacy/build.config.ts @@ -7,5 +7,8 @@ export default defineBuildConfig({ rollup: { emitCJS: true, inlineDependencies: true, + esbuild: { + target: 'node18', + }, }, }) diff --git a/packages/plugin-legacy/package.json b/packages/plugin-legacy/package.json index ee78c70817f109..801dcb557e968e 100644 --- a/packages/plugin-legacy/package.json +++ b/packages/plugin-legacy/package.json @@ -29,7 +29,7 @@ "prepublishOnly": "npm run build" }, "engines": { - "node": "^14.18.0 || >=16.0.0" + "node": "^18.0.0 || >=20.0.0" }, "repository": { "type": "git", diff --git a/packages/vite/package.json b/packages/vite/package.json index 1556478f2ab56b..546eb859ea5f42 100644 --- a/packages/vite/package.json +++ b/packages/vite/package.json @@ -38,7 +38,7 @@ "types" ], "engines": { - "node": "^14.18.0 || >=16.0.0" + "node": "^18.0.0 || >=20.0.0" }, "repository": { "type": "git", diff --git a/packages/vite/src/node/config.ts b/packages/vite/src/node/config.ts index f73ae2ae703e1c..916af948368d9b 100644 --- a/packages/vite/src/node/config.ts +++ b/packages/vite/src/node/config.ts @@ -1017,7 +1017,7 @@ async function bundleConfigFile( entryPoints: [fileName], outfile: 'out.js', write: false, - target: ['node14.18', 'node16'], + target: ['node18'], platform: 'node', bundle: true, format: isESM ? 'esm' : 'cjs', diff --git a/packages/vite/tsconfig.base.json b/packages/vite/tsconfig.base.json index 37eb865185662d..04df5b8dd6f5d7 100644 --- a/packages/vite/tsconfig.base.json +++ b/packages/vite/tsconfig.base.json @@ -1,6 +1,6 @@ { "compilerOptions": { - "target": "ES2020", + "target": "ES2022", "module": "ESNext", "moduleResolution": "node", "strict": true, diff --git a/playground/tsconfig.json b/playground/tsconfig.json index ff409529cce345..e45775a61ff855 100644 --- a/playground/tsconfig.json +++ b/playground/tsconfig.json @@ -3,7 +3,7 @@ "exclude": ["**/dist/**"], "compilerOptions": { "checkJs": true, - "target": "ES2020", + "target": "ES2022", "module": "ESNext", "outDir": "dist", "baseUrl": ".", diff --git a/scripts/tsconfig.json b/scripts/tsconfig.json index 359dd1aeafb2b3..224db1f6787c05 100644 --- a/scripts/tsconfig.json +++ b/scripts/tsconfig.json @@ -2,7 +2,7 @@ "$schema": "https://json.schemastore.org/tsconfig", "include": ["."], "compilerOptions": { - "module": "ES2020", + "module": "ES2022", "target": "ES2020", "moduleResolution": "Node", "strict": true, diff --git a/vitest.config.e2e.ts b/vitest.config.e2e.ts index 471d7859968710..fa0d76f1cd508d 100644 --- a/vitest.config.e2e.ts +++ b/vitest.config.e2e.ts @@ -26,6 +26,6 @@ export default defineConfig({ }, }, esbuild: { - target: 'node14', + target: 'node18', }, }) diff --git a/vitest.config.ts b/vitest.config.ts index 70340ed38cfe7b..98aed39da4f636 100644 --- a/vitest.config.ts +++ b/vitest.config.ts @@ -10,10 +10,8 @@ export default defineConfig({ './playground-temp/**/*.*', ], testTimeout: 20000, - // node14 segfaults often with threads - threads: !process.versions.node.startsWith('14'), }, esbuild: { - target: 'node14', + target: 'node18', }, }) From 7682a625fd74d5b2b4659dc99f2a5645ae839020 Mon Sep 17 00:00:00 2001 From: Prana Adiwira Date: Wed, 16 Aug 2023 12:45:59 +0700 Subject: [PATCH 09/29] fix(css): trim esbuild's minified css (#13893) --- packages/vite/src/node/plugins/css.ts | 20 ++++++++++++++----- .../glob-import/__tests__/glob-import.spec.ts | 2 +- 2 files changed, 16 insertions(+), 6 deletions(-) diff --git a/packages/vite/src/node/plugins/css.ts b/packages/vite/src/node/plugins/css.ts index 1fdaf97e7f57c4..3b5a8a6d09a0e6 100644 --- a/packages/vite/src/node/plugins/css.ts +++ b/packages/vite/src/node/plugins/css.ts @@ -511,7 +511,7 @@ export function cssPostPlugin(config: ResolvedConfig): Plugin { } else { let content = css if (config.build.cssMinify) { - content = await minifyCSS(content, config) + content = await minifyCSS(content, config, true) } code = `export default ${JSON.stringify(content)}` } @@ -1281,7 +1281,7 @@ async function finalizeCss( css = await hoistAtRules(css) } if (minify && config.build.cssMinify) { - css = await minifyCSS(css, config) + css = await minifyCSS(css, config, false) } return css } @@ -1503,7 +1503,15 @@ async function doImportCSSReplace( return `@import ${wrap}${await replacer(rawUrl)}${wrap}` } -async function minifyCSS(css: string, config: ResolvedConfig) { +async function minifyCSS( + css: string, + config: ResolvedConfig, + inlined: boolean, +) { + // We want inlined CSS to not end with a linebreak, while ensuring that + // regular CSS assets do end with a linebreak. + // See https://github.com/vitejs/vite/pull/13893#issuecomment-1678628198 + if (config.build.cssMinify === 'lightningcss') { const { code, warnings } = (await importLightningCSS()).transform({ ...config.css?.lightningcss, @@ -1522,7 +1530,8 @@ async function minifyCSS(css: string, config: ResolvedConfig) { ), ) } - return code.toString() + // LightningCSS output does not return a linebreak at the end + return code.toString() + (inlined ? '' : '\n') } try { const { code, warnings } = await transform(css, { @@ -1536,7 +1545,8 @@ async function minifyCSS(css: string, config: ResolvedConfig) { colors.yellow(`warnings when minifying css:\n${msgs.join('\n')}`), ) } - return code + // esbuild output does return a linebreak at the end + return inlined ? code.trimEnd() : code } catch (e) { if (e.errors) { e.message = '[esbuild css minify] ' + e.message diff --git a/playground/glob-import/__tests__/glob-import.spec.ts b/playground/glob-import/__tests__/glob-import.spec.ts index 931edfd99138de..5ccf9db5c84b41 100644 --- a/playground/glob-import/__tests__/glob-import.spec.ts +++ b/playground/glob-import/__tests__/glob-import.spec.ts @@ -48,7 +48,7 @@ const allResult = { '/dir/baz.json': json, '/dir/foo.css': isBuild ? { - default: '.foo{color:#00f}\n', + default: '.foo{color:#00f}', } : { default: '.foo {\n color: blue;\n}\n', From 9b7b4ed99ff30ca8eed520233b89e5f977015656 Mon Sep 17 00:00:00 2001 From: patak Date: Wed, 16 Aug 2023 09:40:37 +0200 Subject: [PATCH 10/29] fix!: avoid rewriting this (reverts #5312) (#14098) --- packages/vite/src/node/build.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/vite/src/node/build.ts b/packages/vite/src/node/build.ts index dfaab8362784c5..df47b16c1b8dce 100644 --- a/packages/vite/src/node/build.ts +++ b/packages/vite/src/node/build.ts @@ -535,7 +535,6 @@ export async function build( } const rollupOptions: RollupOptions = { - context: 'globalThis', preserveEntrySignatures: ssr ? 'allow-extension' : libOptions From e0eb07c5d174456b19db81839383f39f3abb57fa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=BF=A0=20/=20green?= Date: Wed, 16 Aug 2023 20:34:29 +0900 Subject: [PATCH 11/29] refactor!: merge `PreviewServerForHook` into `PreviewServer` type (#14119) --- docs/guide/api-javascript.md | 13 +++---------- docs/guide/api-plugin.md | 4 ++-- packages/vite/src/node/index.ts | 1 - packages/vite/src/node/plugin.ts | 2 +- packages/vite/src/node/preview.ts | 14 +++++--------- packages/vite/src/node/shortcuts.ts | 9 +++++++-- 6 files changed, 18 insertions(+), 25 deletions(-) diff --git a/docs/guide/api-javascript.md b/docs/guide/api-javascript.md index cb1540950ec23c..4d189800ef0903 100644 --- a/docs/guide/api-javascript.md +++ b/docs/guide/api-javascript.md @@ -201,15 +201,7 @@ import { preview } from 'vite' ## `PreviewServer` ```ts -interface PreviewServer extends PreviewServerForHook { - resolvedUrls: ResolvedServerUrls -} -``` - -## `PreviewServerForHook` - -```ts -interface PreviewServerForHook { +interface PreviewServer { /** * The resolved vite config object */ @@ -228,7 +220,8 @@ interface PreviewServerForHook { */ httpServer: http.Server /** - * The resolved urls Vite prints on the CLI + * The resolved urls Vite prints on the CLI. + * null before server is listening. */ resolvedUrls: ResolvedServerUrls | null /** diff --git a/docs/guide/api-plugin.md b/docs/guide/api-plugin.md index 4ca270afcc53fa..d2f3b6ff8e25c9 100644 --- a/docs/guide/api-plugin.md +++ b/docs/guide/api-plugin.md @@ -311,9 +311,9 @@ Vite plugins can also provide hooks that serve Vite-specific purposes. These hoo ### `configurePreviewServer` -- **Type:** `(server: PreviewServerForHook) => (() => void) | void | Promise<(() => void) | void>` +- **Type:** `(server: PreviewServer) => (() => void) | void | Promise<(() => void) | void>` - **Kind:** `async`, `sequential` -- **See also:** [PreviewServerForHook](./api-javascript#previewserverforhook) +- **See also:** [PreviewServer](./api-javascript#previewserver) Same as [`configureServer`](/guide/api-plugin.html#configureserver) but for the preview server. Similarly to `configureServer`, the `configurePreviewServer` hook is called before other middlewares are installed. If you want to inject a middleware **after** other middlewares, you can return a function from `configurePreviewServer`, which will be called after internal middlewares are installed: diff --git a/packages/vite/src/node/index.ts b/packages/vite/src/node/index.ts index 942c70b6d2dc87..e62cd179b61b3e 100644 --- a/packages/vite/src/node/index.ts +++ b/packages/vite/src/node/index.ts @@ -34,7 +34,6 @@ export type { export type { PreviewOptions, PreviewServer, - PreviewServerForHook, PreviewServerHook, ResolvedPreviewOptions, } from './preview' diff --git a/packages/vite/src/node/plugin.ts b/packages/vite/src/node/plugin.ts index e522295f30c896..4ec7ccc512d920 100644 --- a/packages/vite/src/node/plugin.ts +++ b/packages/vite/src/node/plugin.ts @@ -90,7 +90,7 @@ export interface Plugin extends RollupPlugin { */ configureServer?: ObjectHook /** - * Configure the preview server. The hook receives the {@link PreviewServerForHook} + * Configure the preview server. The hook receives the {@link PreviewServer} * instance. This can also be used to store a reference to the server * for use in other hooks. * diff --git a/packages/vite/src/node/preview.ts b/packages/vite/src/node/preview.ts index 460366446a2f3c..eb15dc55b95057 100644 --- a/packages/vite/src/node/preview.ts +++ b/packages/vite/src/node/preview.ts @@ -45,8 +45,7 @@ export function resolvePreviewOptions( } } -// TODO: merge with PreviewServer in Vite 5 -export interface PreviewServerForHook { +export interface PreviewServer { /** * The resolved vite config object */ @@ -65,7 +64,8 @@ export interface PreviewServerForHook { */ httpServer: http.Server /** - * The resolved urls Vite prints on the CLI + * The resolved urls Vite prints on the CLI. + * null before server is listening. */ resolvedUrls: ResolvedServerUrls | null /** @@ -74,13 +74,9 @@ export interface PreviewServerForHook { printUrls(): void } -export interface PreviewServer extends PreviewServerForHook { - resolvedUrls: ResolvedServerUrls -} - export type PreviewServerHook = ( this: void, - server: PreviewServerForHook, + server: PreviewServer, ) => (() => void) | void | Promise<(() => void) | void> /** @@ -122,7 +118,7 @@ export async function preview( const options = config.preview const logger = config.logger - const server: PreviewServerForHook = { + const server: PreviewServer = { config, middlewares: app, httpServer, diff --git a/packages/vite/src/node/shortcuts.ts b/packages/vite/src/node/shortcuts.ts index 66b45e6b42713b..0c3a7da40ba568 100644 --- a/packages/vite/src/node/shortcuts.ts +++ b/packages/vite/src/node/shortcuts.ts @@ -147,8 +147,13 @@ const BASE_PREVIEW_SHORTCUTS: CLIShortcut[] = [ key: 'o', description: 'open in browser', action(server) { - const url = server.resolvedUrls.local[0] ?? server.resolvedUrls.network[0] - openBrowser(url, true, server.config.logger) + const url = + server.resolvedUrls?.local[0] ?? server.resolvedUrls?.network[0] + if (url) { + openBrowser(url, true, server.config.logger) + } else { + server.config.logger.warn('No URL available to open in browser') + } }, }, { From 72d5d4d83310a7128daf3cf670659d20dd0c7941 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=BF=A0=20/=20green?= Date: Wed, 16 Aug 2023 23:41:09 +0900 Subject: [PATCH 12/29] docs: clarify when `import.meta.env.PROD` is `true` (#14124) --- docs/guide/env-and-mode.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/guide/env-and-mode.md b/docs/guide/env-and-mode.md index e54ba86d1c0cbd..700ecba58f216f 100644 --- a/docs/guide/env-and-mode.md +++ b/docs/guide/env-and-mode.md @@ -8,7 +8,7 @@ Vite exposes env variables on the special **`import.meta.env`** object. Some bui - **`import.meta.env.BASE_URL`**: {string} the base url the app is being served from. This is determined by the [`base` config option](/config/shared-options.md#base). -- **`import.meta.env.PROD`**: {boolean} whether the app is running in production. +- **`import.meta.env.PROD`**: {boolean} whether the app is running in production (running the dev server with `NODE_ENV='production'` or running an app built with `NODE_ENV='production'`). - **`import.meta.env.DEV`**: {boolean} whether the app is running in development (always the opposite of `import.meta.env.PROD`) From 86cbf6977d259cfbe87b287f42cf20668014aef3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=BF=A0=20/=20green?= Date: Wed, 16 Aug 2023 23:48:43 +0900 Subject: [PATCH 13/29] fix(glob): trigger HMR for glob in a package (#14117) --- .../vite/src/node/plugins/importMetaGlob.ts | 6 +++-- .../glob-import/__tests__/glob-import.spec.ts | 23 +++++++++++++++++++ .../glob-import/import-meta-glob-pkg/index.js | 4 ++++ .../import-meta-glob-pkg/package.json | 5 ++++ playground/glob-import/index.html | 6 +++++ playground/glob-import/package.json | 3 +++ playground/glob-import/pkg-pages/foo.js | 1 + pnpm-lock.yaml | 13 ++++++++++- 8 files changed, 58 insertions(+), 3 deletions(-) create mode 100644 playground/glob-import/import-meta-glob-pkg/index.js create mode 100644 playground/glob-import/import-meta-glob-pkg/package.json create mode 100644 playground/glob-import/pkg-pages/foo.js diff --git a/packages/vite/src/node/plugins/importMetaGlob.ts b/packages/vite/src/node/plugins/importMetaGlob.ts index 0daf6b04358b30..60172e0de3a143 100644 --- a/packages/vite/src/node/plugins/importMetaGlob.ts +++ b/packages/vite/src/node/plugins/importMetaGlob.ts @@ -58,8 +58,10 @@ export function getAffectedGlobModules( (!affirmed.length || affirmed.some((glob) => isMatch(file, glob))) && (!negated.length || negated.every((glob) => isMatch(file, glob))), ) - ) - modules.push(...(server.moduleGraph.getModulesByFile(id) || [])) + ) { + const mod = server.moduleGraph.getModuleById(id) + if (mod) modules.push(mod) + } } modules.forEach((i) => { if (i?.file) server.moduleGraph.onFileChange(i.file) diff --git a/playground/glob-import/__tests__/glob-import.spec.ts b/playground/glob-import/__tests__/glob-import.spec.ts index 5ccf9db5c84b41..239278477eea2c 100644 --- a/playground/glob-import/__tests__/glob-import.spec.ts +++ b/playground/glob-import/__tests__/glob-import.spec.ts @@ -11,6 +11,7 @@ import { page, removeFile, untilBrowserLogAfter, + untilUpdated, viteTestUrl, withRetry, } from '~utils' @@ -131,6 +132,12 @@ test('unassigned import processes', async () => { ) }) +test('import glob in package', async () => { + expect(await page.textContent('.in-package')).toBe( + JSON.stringify(['/pkg-pages/foo.js']), + ) +}) + if (!isBuild) { test('hmr for adding/removing files', async () => { const resultElement = page.locator('.result') @@ -190,6 +197,22 @@ if (!isBuild) { response = await request.catch(() => ({ status: () => -1 })) expect(response.status()).toBe(-1) }) + + test('hmr for adding/removing files in package', async () => { + const resultElement = page.locator('.in-package') + + addFile('pkg-pages/bar.js', '// empty') + await untilUpdated( + () => resultElement.textContent(), + JSON.stringify(['/pkg-pages/foo.js', '/pkg-pages/bar.js'].sort()), + ) + + removeFile('pkg-pages/bar.js') + await untilUpdated( + () => resultElement.textContent(), + JSON.stringify(['/pkg-pages/foo.js']), + ) + }) } test('tree-shake eager css', async () => { diff --git a/playground/glob-import/import-meta-glob-pkg/index.js b/playground/glob-import/import-meta-glob-pkg/index.js new file mode 100644 index 00000000000000..44705cf18f9f22 --- /dev/null +++ b/playground/glob-import/import-meta-glob-pkg/index.js @@ -0,0 +1,4 @@ +export const g = import.meta.glob('/pkg-pages/*.js') +document.querySelector('.in-package').textContent = JSON.stringify( + Object.keys(g).sort(), +) diff --git a/playground/glob-import/import-meta-glob-pkg/package.json b/playground/glob-import/import-meta-glob-pkg/package.json new file mode 100644 index 00000000000000..7138de851543cf --- /dev/null +++ b/playground/glob-import/import-meta-glob-pkg/package.json @@ -0,0 +1,5 @@ +{ + "name": "@vitejs/test-import-meta-glob-pkg", + "type": "module", + "main": "./index.js" +} diff --git a/playground/glob-import/index.html b/playground/glob-import/index.html index b726965ff62067..3b72430668e14d 100644 --- a/playground/glob-import/index.html +++ b/playground/glob-import/index.html @@ -23,6 +23,8 @@

Escape alias glob


 

Sub imports


+

In package

+

 
 
 
 
+
+
 
diff --git a/playground/glob-import/package.json b/playground/glob-import/package.json
index 7d9104ab431c28..d71d01109270f1 100644
--- a/playground/glob-import/package.json
+++ b/playground/glob-import/package.json
@@ -11,5 +11,8 @@
     "build": "vite build",
     "debug": "node --inspect-brk ../../packages/vite/bin/vite",
     "preview": "vite preview"
+  },
+  "dependencies": {
+    "@vitejs/test-import-meta-glob-pkg": "file:./import-meta-glob-pkg"
   }
 }
diff --git a/playground/glob-import/pkg-pages/foo.js b/playground/glob-import/pkg-pages/foo.js
new file mode 100644
index 00000000000000..8b1a393741c96c
--- /dev/null
+++ b/playground/glob-import/pkg-pages/foo.js
@@ -0,0 +1 @@
+// empty
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 8ecf2daea5018e..7422db09d4fe33 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -670,7 +670,13 @@ importers:
 
   playground/fs-serve: {}
 
-  playground/glob-import: {}
+  playground/glob-import:
+    dependencies:
+      '@vitejs/test-import-meta-glob-pkg':
+        specifier: file:./import-meta-glob-pkg
+        version: file:playground/glob-import/import-meta-glob-pkg
+
+  playground/glob-import/import-meta-glob-pkg: {}
 
   playground/hmr: {}
 
@@ -10801,6 +10807,11 @@ packages:
       vue: 3.3.4
     dev: false
 
+  file:playground/glob-import/import-meta-glob-pkg:
+    resolution: {directory: playground/glob-import/import-meta-glob-pkg, type: directory}
+    name: '@vitejs/test-import-meta-glob-pkg'
+    dev: false
+
   file:playground/import-assertion/import-assertion-dep:
     resolution: {directory: playground/import-assertion/import-assertion-dep, type: directory}
     name: '@vitejs/test-import-assertion-dep'

From bd9b749fe5c7d390a48368ca3a2f4ac55e730607 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E7=BF=A0=20/=20green?= 
Date: Thu, 17 Aug 2023 03:04:06 +0900
Subject: [PATCH 14/29] fix: ws never connects after restarting server if
 server.hmr.server is set (#14127)

---
 packages/vite/src/node/server/ws.ts | 18 +++++++++++++++---
 1 file changed, 15 insertions(+), 3 deletions(-)

diff --git a/packages/vite/src/node/server/ws.ts b/packages/vite/src/node/server/ws.ts
index 4a298cac1eebd2..7df59370f9e1d8 100644
--- a/packages/vite/src/node/server/ws.ts
+++ b/packages/vite/src/node/server/ws.ts
@@ -1,9 +1,10 @@
 import path from 'node:path'
-import type { Server } from 'node:http'
+import type { IncomingMessage, Server } from 'node:http'
 import { STATUS_CODES, createServer as createHttpServer } from 'node:http'
 import type { ServerOptions as HttpsServerOptions } from 'node:https'
 import { createServer as createHttpsServer } from 'node:https'
 import type { Socket } from 'node:net'
+import type { Duplex } from 'node:stream'
 import colors from 'picocolors'
 import type { WebSocket as WebSocketRaw } from 'ws'
 import { WebSocketServer as WebSocketServerRaw_ } from 'ws'
@@ -104,6 +105,11 @@ export function createWebSocketServer(
   // TODO: the main server port may not have been chosen yet as it may use the next available
   const portsAreCompatible = !hmrPort || hmrPort === config.server.port
   const wsServer = hmrServer || (portsAreCompatible && server)
+  let hmrServerWsListener: (
+    req: InstanceType,
+    socket: Duplex,
+    head: Buffer,
+  ) => void
   const customListeners = new Map>>()
   const clientsMap = new WeakMap()
   const port = hmrPort || 24678
@@ -116,7 +122,7 @@ export function createWebSocketServer(
       hmrBase = path.posix.join(hmrBase, hmrPath)
     }
     wss = new WebSocketServerRaw({ noServer: true })
-    wsServer.on('upgrade', (req, socket, head) => {
+    hmrServerWsListener = (req, socket, head) => {
       if (
         req.headers['sec-websocket-protocol'] === HMR_HEADER &&
         req.url === hmrBase
@@ -125,7 +131,8 @@ export function createWebSocketServer(
           wss.emit('connection', ws, req)
         })
       }
-    })
+    }
+    wsServer.on('upgrade', hmrServerWsListener)
   } else {
     // http server request handler keeps the same with
     // https://github.com/websockets/ws/blob/45e17acea791d865df6b255a55182e9c42e5877a/lib/websocket-server.js#L88-L96
@@ -273,6 +280,11 @@ export function createWebSocketServer(
     },
 
     close() {
+      // should remove listener if hmr.server is set
+      // otherwise the old listener swallows all WebSocket connections
+      if (hmrServerWsListener && wsServer) {
+        wsServer.off('upgrade', hmrServerWsListener)
+      }
       return new Promise((resolve, reject) => {
         wss.clients.forEach((client) => {
           client.terminate()

From d179c01520930cc64f3d9fca882836c329bbd3e4 Mon Sep 17 00:00:00 2001
From: Brian Orora 
Date: Fri, 18 Aug 2023 18:16:18 +0300
Subject: [PATCH 15/29] docs: update esbuild link (#14154)

---
 docs/config/shared-options.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/docs/config/shared-options.md b/docs/config/shared-options.md
index fd193f0fde4966..e7708d80c517cf 100644
--- a/docs/config/shared-options.md
+++ b/docs/config/shared-options.md
@@ -326,7 +326,7 @@ Enabling this disables named imports.
 
 - **Type:** `ESBuildOptions | false`
 
-`ESBuildOptions` extends [esbuild's own transform options](https://esbuild.github.io/api/#transform-api). The most common use case is customizing JSX:
+`ESBuildOptions` extends [esbuild's own transform options](https://esbuild.github.io/api/#transform). The most common use case is customizing JSX:
 
 ```js
 export default defineConfig({

From 094b7324827940ee02c8e4a9ccae5e25c236eecd Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Vincent=20Fran=C3=A7ois?= 
Date: Fri, 18 Aug 2023 17:40:24 +0200
Subject: [PATCH 16/29] docs: add example for mergeConfig with a config in
 callback form (#14144)

---
 docs/guide/api-javascript.md | 9 +++++++++
 1 file changed, 9 insertions(+)

diff --git a/docs/guide/api-javascript.md b/docs/guide/api-javascript.md
index 4d189800ef0903..a9a5a2592bc8cd 100644
--- a/docs/guide/api-javascript.md
+++ b/docs/guide/api-javascript.md
@@ -261,6 +261,15 @@ Deeply merge two Vite configs. `isRoot` represents the level within the Vite con
 
 ::: tip NOTE
 `mergeConfig` accepts only config in object form. If you have a config in callback form, you should call it before passing into `mergeConfig`.
+
+You can use the `defineConfig` helper to merge a config in callback form with another config:
+
+```ts
+export default defineConfig((configEnv) =>
+  mergeConfig(configAsCallback(configEnv), configAsObject),
+)
+```
+
 :::
 
 ## `searchForWorkspaceRoot`

From 387a6e875a77d9c2e515c1b56d9172493916d64d Mon Sep 17 00:00:00 2001
From: btea <2356281422@qq.com>
Date: Sat, 19 Aug 2023 00:10:44 +0800
Subject: [PATCH 17/29] fix: initWasm options should be optional (#14152)

---
 packages/vite/client.d.ts | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/packages/vite/client.d.ts b/packages/vite/client.d.ts
index b73389ec373f1f..0f2c3db286d82f 100644
--- a/packages/vite/client.d.ts
+++ b/packages/vite/client.d.ts
@@ -221,7 +221,7 @@ declare module '*.txt' {
 // wasm?init
 declare module '*.wasm?init' {
   const initWasm: (
-    options: WebAssembly.Imports,
+    options?: WebAssembly.Imports,
   ) => Promise
   export default initWasm
 }

From 89fc7946c04f029bf9fdf09526daa569f4e38fc0 Mon Sep 17 00:00:00 2001
From: Antanas <23581582+Antanasici@users.noreply.github.com>
Date: Fri, 18 Aug 2023 17:44:42 +0100
Subject: [PATCH 18/29] docs: fix typo in cli.md (#14072)

---
 docs/guide/cli.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/docs/guide/cli.md b/docs/guide/cli.md
index 84efa501b5e4c6..5beece69d9064a 100644
--- a/docs/guide/cli.md
+++ b/docs/guide/cli.md
@@ -29,7 +29,7 @@ vite [root]
 | `--force`                | Force the optimizer to ignore the cache and re-bundle (`boolean`)                                                  |
 | `-c, --config `    | Use specified config file (`string`)                                                                               |
 | `--base `          | Public base path (default: `/`) (`string`)                                                                         |
-| `-l, --logLevel ` | Info \| warn \| error \| silent (`string`)                                                                         |
+| `-l, --logLevel ` | info \| warn \| error \| silent (`string`)                                                                         |
 | `--clearScreen`          | Allow/disable clear screen when logging (`boolean`)                                                                |
 | `--profile`              | Start built-in Node.js inspector (check [Performance bottlenecks](/guide/troubleshooting#performance-bottlenecks)) |
 | `-d, --debug [feat]`     | Show debug logs (`string \| boolean`)                                                                              |

From fe1c0b92392ae19a2819aa8ff0087610c67e0f4a Mon Sep 17 00:00:00 2001
From: btea <2356281422@qq.com>
Date: Sat, 19 Aug 2023 01:04:25 +0800
Subject: [PATCH 19/29] chore(client): remove redundant if statement (#14137)

---
 packages/vite/src/client/client.ts | 13 ++++++-------
 1 file changed, 6 insertions(+), 7 deletions(-)

diff --git a/packages/vite/src/client/client.ts b/packages/vite/src/client/client.ts
index 8943fb0521a5d7..b909c1328a9a3b 100644
--- a/packages/vite/src/client/client.ts
+++ b/packages/vite/src/client/client.ts
@@ -289,15 +289,12 @@ function notifyListeners(event: string, data: any): void {
 const enableOverlay = __HMR_ENABLE_OVERLAY__
 
 function createErrorOverlay(err: ErrorPayload['err']) {
-  if (!enableOverlay) return
   clearErrorOverlay()
   document.body.appendChild(new ErrorOverlay(err))
 }
 
 function clearErrorOverlay() {
-  document
-    .querySelectorAll(overlayId)
-    .forEach((n) => (n as ErrorOverlay).close())
+  document.querySelectorAll(overlayId).forEach((n) => n.close())
 }
 
 function hasErrorOverlay() {
@@ -388,9 +385,11 @@ const sheetsMap = new Map()
 // collect existing style elements that may have been inserted during SSR
 // to avoid FOUC or duplicate styles
 if ('document' in globalThis) {
-  document.querySelectorAll('style[data-vite-dev-id]').forEach((el) => {
-    sheetsMap.set(el.getAttribute('data-vite-dev-id')!, el as HTMLStyleElement)
-  })
+  document
+    .querySelectorAll('style[data-vite-dev-id]')
+    .forEach((el) => {
+      sheetsMap.set(el.getAttribute('data-vite-dev-id')!, el)
+    })
 }
 
 // all css imports should be inserted at the same position

From fd9a2ccdf2e78616ff3c937538111dbe1586f537 Mon Sep 17 00:00:00 2001
From: Aleen 
Date: Sun, 20 Aug 2023 00:23:21 +0800
Subject: [PATCH 20/29] feat(css): build assets with the entry name when it is
 an entry point (#11578)

Co-authored-by: sapphi-red 
---
 packages/vite/src/node/plugins/css.ts                  | 10 ++++++----
 .../__tests__/backend-integration.spec.ts              |  5 ++++-
 playground/backend-integration/dir/foo.css             |  2 +-
 .../backend-integration/frontend/dynamic/foo.css       |  3 +++
 playground/backend-integration/frontend/dynamic/foo.ts |  1 +
 .../backend-integration/frontend/entrypoints/main.ts   |  1 +
 playground/backend-integration/vite.config.js          |  2 +-
 7 files changed, 17 insertions(+), 7 deletions(-)
 create mode 100644 playground/backend-integration/frontend/dynamic/foo.css
 create mode 100644 playground/backend-integration/frontend/dynamic/foo.ts

diff --git a/packages/vite/src/node/plugins/css.ts b/packages/vite/src/node/plugins/css.ts
index 3b5a8a6d09a0e6..7ed3eb9d456082 100644
--- a/packages/vite/src/node/plugins/css.ts
+++ b/packages/vite/src/node/plugins/css.ts
@@ -622,9 +622,12 @@ export function cssPostPlugin(config: ResolvedConfig): Plugin {
           pureCssChunks.add(chunk)
         }
         if (opts.format === 'es' || opts.format === 'cjs') {
-          const cssAssetName = chunk.facadeModuleId
-            ? normalizePath(path.relative(config.root, chunk.facadeModuleId))
-            : chunk.name
+          const isEntry = chunk.isEntry && isPureCssChunk
+          const cssAssetName = normalizePath(
+            !isEntry && chunk.facadeModuleId
+              ? path.relative(config.root, chunk.facadeModuleId)
+              : chunk.name,
+          )
 
           const lang = path.extname(cssAssetName).slice(1)
           const cssFileName = ensureFileExt(cssAssetName, '.css')
@@ -654,7 +657,6 @@ export function cssPostPlugin(config: ResolvedConfig): Plugin {
             source: chunkCSS,
           })
           const originalName = isPreProcessor(lang) ? cssAssetName : cssFileName
-          const isEntry = chunk.isEntry && isPureCssChunk
           generatedAssets
             .get(config)!
             .set(referenceId, { originalName, isEntry })
diff --git a/playground/backend-integration/__tests__/backend-integration.spec.ts b/playground/backend-integration/__tests__/backend-integration.spec.ts
index 8d067f0616775d..442ed159219af9 100644
--- a/playground/backend-integration/__tests__/backend-integration.spec.ts
+++ b/playground/backend-integration/__tests__/backend-integration.spec.ts
@@ -37,7 +37,7 @@ describe.runIf(isBuild)('build', () => {
     const cssAssetEntry = manifest['global.css']
     const scssAssetEntry = manifest['nested/blue.scss']
     const imgAssetEntry = manifest['../images/logo.png']
-    const dirFooAssetEntry = manifest['../../dir/foo.css'] // '\\' should not be used even on windows
+    const dirFooAssetEntry = manifest['../dynamic/foo.css'] // '\\' should not be used even on windows
     expect(htmlEntry.css.length).toEqual(1)
     expect(htmlEntry.assets.length).toEqual(1)
     expect(cssAssetEntry?.file).not.toBeUndefined()
@@ -48,6 +48,9 @@ describe.runIf(isBuild)('build', () => {
     expect(imgAssetEntry?.file).not.toBeUndefined()
     expect(imgAssetEntry?.isEntry).toBeUndefined()
     expect(dirFooAssetEntry).not.toBeUndefined()
+    // use the entry name
+    expect(manifest['bar.css']).not.toBeUndefined()
+    expect(manifest['foo.css']).toBeUndefined()
   })
 })
 
diff --git a/playground/backend-integration/dir/foo.css b/playground/backend-integration/dir/foo.css
index c2fad7486d3ab6..1e31c585bebc9c 100644
--- a/playground/backend-integration/dir/foo.css
+++ b/playground/backend-integration/dir/foo.css
@@ -1,3 +1,3 @@
-.windows-path-foo {
+.entry-name-foo {
   color: blue;
 }
diff --git a/playground/backend-integration/frontend/dynamic/foo.css b/playground/backend-integration/frontend/dynamic/foo.css
new file mode 100644
index 00000000000000..c2fad7486d3ab6
--- /dev/null
+++ b/playground/backend-integration/frontend/dynamic/foo.css
@@ -0,0 +1,3 @@
+.windows-path-foo {
+  color: blue;
+}
diff --git a/playground/backend-integration/frontend/dynamic/foo.ts b/playground/backend-integration/frontend/dynamic/foo.ts
new file mode 100644
index 00000000000000..c2441c49231d80
--- /dev/null
+++ b/playground/backend-integration/frontend/dynamic/foo.ts
@@ -0,0 +1 @@
+import './foo.css'
diff --git a/playground/backend-integration/frontend/entrypoints/main.ts b/playground/backend-integration/frontend/entrypoints/main.ts
index f5a332191dd9e4..d63a57a023847e 100644
--- a/playground/backend-integration/frontend/entrypoints/main.ts
+++ b/playground/backend-integration/frontend/entrypoints/main.ts
@@ -1,4 +1,5 @@
 import 'vite/modulepreload-polyfill'
+import('../dynamic/foo') // should be dynamic import to split chunks
 
 export const colorClass = 'text-black'
 
diff --git a/playground/backend-integration/vite.config.js b/playground/backend-integration/vite.config.js
index b9e2c9f35c6fee..881eac1a14688e 100644
--- a/playground/backend-integration/vite.config.js
+++ b/playground/backend-integration/vite.config.js
@@ -19,7 +19,7 @@ function BackendIntegrationExample() {
         .map((filename) => [path.relative(root, filename), filename])
 
       entrypoints.push(['tailwindcss-colors', 'tailwindcss/colors.js'])
-      entrypoints.push(['foo.css', path.resolve(__dirname, './dir/foo.css')])
+      entrypoints.push(['bar.css', path.resolve(__dirname, './dir/foo.css')])
 
       return {
         build: {

From f97ef58787ba02bf6dafa157e9bec534cfc27108 Mon Sep 17 00:00:00 2001
From: Naru 
Date: Mon, 21 Aug 2023 17:16:05 +0900
Subject: [PATCH 21/29] chore: use "kB" everywhere with the correct definition
 (#14061)

---
 docs/config/build-options.md               | 4 ++--
 docs/guide/build.md                        | 4 ++--
 packages/vite/rollup.config.ts             | 8 ++++----
 packages/vite/src/node/build.ts            | 4 ++--
 packages/vite/src/node/plugins/reporter.ts | 2 +-
 playground/assets/vite.config.js           | 2 +-
 6 files changed, 12 insertions(+), 12 deletions(-)

diff --git a/docs/config/build-options.md b/docs/config/build-options.md
index b5872e363de973..9679a5d2d406b0 100644
--- a/docs/config/build-options.md
+++ b/docs/config/build-options.md
@@ -83,7 +83,7 @@ Specify the directory to nest generated assets under (relative to `build.outDir`
 ## build.assetsInlineLimit
 
 - **Type:** `number`
-- **Default:** `4096` (4kb)
+- **Default:** `4096` (4 KiB)
 
 Imported or referenced assets that are smaller than this threshold will be inlined as base64 URLs to avoid extra http requests. Set to `0` to disable inlining altogether.
 
@@ -236,7 +236,7 @@ Enable/disable gzip-compressed size reporting. Compressing large output files ca
 - **Type:** `number`
 - **Default:** `500`
 
-Limit for chunk size warnings (in kbs). It is compared against the uncompressed chunk size as the [JavaScript size itself is related to the execution time](https://v8.dev/blog/cost-of-javascript-2019).
+Limit for chunk size warnings (in kB). It is compared against the uncompressed chunk size as the [JavaScript size itself is related to the execution time](https://v8.dev/blog/cost-of-javascript-2019).
 
 ## build.watch
 
diff --git a/docs/guide/build.md b/docs/guide/build.md
index b2b210b51fcd28..e08946a8435f81 100644
--- a/docs/guide/build.md
+++ b/docs/guide/build.md
@@ -170,8 +170,8 @@ Running `vite build` with this config uses a Rollup preset that is oriented towa
 ```
 $ vite build
 building for production...
-dist/my-lib.js      0.08 KiB / gzip: 0.07 KiB
-dist/my-lib.umd.cjs 0.30 KiB / gzip: 0.16 KiB
+dist/my-lib.js      0.08 kB / gzip: 0.07 kB
+dist/my-lib.umd.cjs 0.30 kB / gzip: 0.16 kB
 ```
 
 Recommended `package.json` for your lib:
diff --git a/packages/vite/rollup.config.ts b/packages/vite/rollup.config.ts
index 6884b6f15f378f..4a147bc5e43b20 100644
--- a/packages/vite/rollup.config.ts
+++ b/packages/vite/rollup.config.ts
@@ -195,7 +195,7 @@ function createCjsConfig(isProduction: boolean) {
       ...Object.keys(pkg.dependencies),
       ...(isProduction ? [] : Object.keys(pkg.devDependencies)),
     ],
-    plugins: [...createNodePlugins(false, false, false), bundleSizeLimit(120)],
+    plugins: [...createNodePlugins(false, false, false), bundleSizeLimit(123)],
   })
 }
 
@@ -317,7 +317,7 @@ const __require = require;
 /**
  * Guard the bundle size
  *
- * @param limit size in KB
+ * @param limit size in kB
  */
 function bundleSizeLimit(limit: number): Plugin {
   return {
@@ -329,10 +329,10 @@ function bundleSizeLimit(limit: number): Plugin {
           .join(''),
         'utf-8',
       )
-      const kb = size / 1024
+      const kb = size / 1000
       if (kb > limit) {
         throw new Error(
-          `Bundle size exceeded ${limit}kb, current size is ${kb.toFixed(
+          `Bundle size exceeded ${limit} kB, current size is ${kb.toFixed(
             2,
           )}kb.`,
         )
diff --git a/packages/vite/src/node/build.ts b/packages/vite/src/node/build.ts
index df47b16c1b8dce..0794eb74a5873e 100644
--- a/packages/vite/src/node/build.ts
+++ b/packages/vite/src/node/build.ts
@@ -107,7 +107,7 @@ export interface BuildOptions {
   assetsDir?: string
   /**
    * Static asset files smaller than this number (in bytes) will be inlined as
-   * base64 strings. Default limit is `4096` (4kb). Set to `0` to disable.
+   * base64 strings. Default limit is `4096` (4 KiB). Set to `0` to disable.
    * @default 4096
    */
   assetsInlineLimit?: number
@@ -234,7 +234,7 @@ export interface BuildOptions {
    */
   reportCompressedSize?: boolean
   /**
-   * Adjust chunk size warning limit (in kbs).
+   * Adjust chunk size warning limit (in kB).
    * @default 500
    */
   chunkSizeWarningLimit?: number
diff --git a/packages/vite/src/node/plugins/reporter.ts b/packages/vite/src/node/plugins/reporter.ts
index cbcb0409d1e3f0..bea7d4facd798b 100644
--- a/packages/vite/src/node/plugins/reporter.ts
+++ b/packages/vite/src/node/plugins/reporter.ts
@@ -285,7 +285,7 @@ export function buildReporterPlugin(config: ResolvedConfig): Plugin {
       ) {
         config.logger.warn(
           colors.yellow(
-            `\n(!) Some chunks are larger than ${chunkLimit} kBs after minification. Consider:\n` +
+            `\n(!) Some chunks are larger than ${chunkLimit} kB after minification. Consider:\n` +
               `- Using dynamic import() to code-split the application\n` +
               `- Use build.rollupOptions.output.manualChunks to improve chunking: https://rollupjs.org/configuration-options/#output-manualchunks\n` +
               `- Adjust chunk size limit for this warning via build.chunkSizeWarningLimit.`,
diff --git a/playground/assets/vite.config.js b/playground/assets/vite.config.js
index 8305a6a0d6ede8..a1bcf02143de76 100644
--- a/playground/assets/vite.config.js
+++ b/playground/assets/vite.config.js
@@ -12,7 +12,7 @@ export default defineConfig({
   assetsInclude: ['**/*.unknown'],
   build: {
     outDir: 'dist/foo',
-    assetsInlineLimit: 8192, // 8kb
+    assetsInlineLimit: 8000, // 8 kB
     manifest: true,
     watch: {},
   },

From fdfb61f2a9ab596dc9b6bc09a6c52645aca18ef4 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E7=BF=A0=20/=20green?= 
Date: Mon, 21 Aug 2023 17:42:25 +0900
Subject: [PATCH 22/29] refactor(glob)!: remove `import.meta.globEager`
 (#14118)

---
 packages/vite/src/node/index.ts               |  1 -
 .../vite/src/node/plugins/importMetaGlob.ts   | 17 +------------
 packages/vite/types/importGlob.d.ts           | 24 -------------------
 packages/vite/types/importMeta.d.ts           |  4 ----
 4 files changed, 1 insertion(+), 45 deletions(-)

diff --git a/packages/vite/src/node/index.ts b/packages/vite/src/node/index.ts
index e62cd179b61b3e..c4afbd2bd4812d 100644
--- a/packages/vite/src/node/index.ts
+++ b/packages/vite/src/node/index.ts
@@ -117,7 +117,6 @@ export type {
 } from 'types/customEvent'
 export type {
   ImportGlobFunction,
-  ImportGlobEagerFunction,
   ImportGlobOptions,
   GeneralImportGlobOptions,
   KnownAsTypeMap,
diff --git a/packages/vite/src/node/plugins/importMetaGlob.ts b/packages/vite/src/node/plugins/importMetaGlob.ts
index 60172e0de3a143..c76ab9f495196d 100644
--- a/packages/vite/src/node/plugins/importMetaGlob.ts
+++ b/packages/vite/src/node/plugins/importMetaGlob.ts
@@ -34,13 +34,11 @@ import { isCSSRequest, isModuleCSSRequest } from './css'
 const { isMatch, scan } = micromatch
 
 export interface ParsedImportGlob {
-  match: RegExpMatchArray
   index: number
   globs: string[]
   globsResolved: string[]
   isRelative: boolean
   options: GeneralImportGlobOptions
-  type: string
   start: number
   end: number
 }
@@ -111,8 +109,7 @@ export function importGlobPlugin(config: ResolvedConfig): Plugin {
   }
 }
 
-const importGlobRE =
-  /\bimport\.meta\.(glob|globEager|globEagerDefault)(?:<\w+>)?\s*\(/g
+const importGlobRE = /\bimport\.meta\.glob(?:<\w+>)?\s*\(/g
 
 const knownOptions = {
   as: ['string'],
@@ -212,7 +209,6 @@ export async function parseImportGlob(
   const matches = Array.from(cleanCode.matchAll(importGlobRE))
 
   const tasks = matches.map(async (match, index) => {
-    const type = match[1]
     const start = match.index!
 
     const err = (msg: string) => {
@@ -319,13 +315,11 @@ export async function parseImportGlob(
     const isRelative = globs.every((i) => '.!'.includes(i[0]))
 
     return {
-      match,
       index,
       globs,
       globsResolved,
       isRelative,
       options,
-      type,
       start,
       end,
     }
@@ -385,15 +379,6 @@ export async function transformGlobImport(
   )
   const matchedFiles = new Set()
 
-  // TODO: backwards compatibility
-  matches.forEach((i) => {
-    if (i.type === 'globEager') i.options.eager = true
-    if (i.type === 'globEagerDefault') {
-      i.options.eager = true
-      i.options.import = 'default'
-    }
-  })
-
   if (!matches.length) return null
 
   const s = new MagicString(code)
diff --git a/packages/vite/types/importGlob.d.ts b/packages/vite/types/importGlob.d.ts
index 98786bbdd9efa5..b9ba52ec1ca881 100644
--- a/packages/vite/types/importGlob.d.ts
+++ b/packages/vite/types/importGlob.d.ts
@@ -71,27 +71,3 @@ export interface ImportGlobFunction {
     options: ImportGlobOptions,
   ): Record
 }
-
-export interface ImportGlobEagerFunction {
-  /**
-   * Eagerly import a list of files with a glob pattern.
-   *
-   * Overload 1: No generic provided, infer the type from `as`
-   */
-  <
-    As extends string,
-    T = As extends keyof KnownAsTypeMap ? KnownAsTypeMap[As] : unknown,
-  >(
-    glob: string | string[],
-    options?: Omit, 'eager'>,
-  ): Record
-  /**
-   * Eagerly import a list of files with a glob pattern.
-   *
-   * Overload 2: Module generic provided
-   */
-  (
-    glob: string | string[],
-    options?: Omit, 'eager'>,
-  ): Record
-}
diff --git a/packages/vite/types/importMeta.d.ts b/packages/vite/types/importMeta.d.ts
index e9047a78117d82..bd4418379951b3 100644
--- a/packages/vite/types/importMeta.d.ts
+++ b/packages/vite/types/importMeta.d.ts
@@ -19,8 +19,4 @@ interface ImportMeta {
   readonly env: ImportMetaEnv
 
   glob: import('./importGlob').ImportGlobFunction
-  /**
-   * @deprecated Use `import.meta.glob('*', { eager: true })` instead
-   */
-  globEager: import('./importGlob').ImportGlobEagerFunction
 }

From d655f283915bf0618ae6204494dac27dc2c068ae Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Mon, 21 Aug 2023 17:47:57 +0800
Subject: [PATCH 23/29] chore(deps): update dependency eslint-plugin-n to v16
 (#13286)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
---
 package.json   |  2 +-
 pnpm-lock.yaml | 83 ++++++++++++--------------------------------------
 2 files changed, 20 insertions(+), 65 deletions(-)

diff --git a/package.json b/package.json
index c1ab7b5cda6a4b..e1eea1c98f1a95 100644
--- a/package.json
+++ b/package.json
@@ -69,7 +69,7 @@
     "eslint": "^8.46.0",
     "eslint-define-config": "^1.23.0",
     "eslint-plugin-import": "^2.28.0",
-    "eslint-plugin-n": "^15.7.0",
+    "eslint-plugin-n": "^16.0.1",
     "eslint-plugin-regexp": "^1.15.0",
     "execa": "^7.2.0",
     "fast-glob": "^3.3.1",
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 7422db09d4fe33..67660465467b37 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -109,8 +109,8 @@ importers:
         specifier: ^2.28.0
         version: 2.28.0(@typescript-eslint/parser@6.2.1)(eslint@8.46.0)
       eslint-plugin-n:
-        specifier: ^15.7.0
-        version: 15.7.0(eslint@8.46.0)
+        specifier: ^16.0.1
+        version: 16.0.1(eslint@8.46.0)
       eslint-plugin-regexp:
         specifier: ^1.15.0
         version: 1.15.0(eslint@8.46.0)
@@ -6026,15 +6026,15 @@ packages:
       - supports-color
     dev: true
 
-  /eslint-plugin-es@4.1.0(eslint@8.46.0):
-    resolution: {integrity: sha512-GILhQTnjYE2WorX5Jyi5i4dz5ALWxBIdQECVQavL6s7cI76IZTDWleTHkxz/QT3kvcs2QlGHvKLYsSlPOlPXnQ==}
-    engines: {node: '>=8.10.0'}
+  /eslint-plugin-es-x@7.2.0(eslint@8.46.0):
+    resolution: {integrity: sha512-9dvv5CcvNjSJPqnS5uZkqb3xmbeqRLnvXKK7iI5+oK/yTusyc46zbBZKENGsOfojm/mKfszyZb+wNqNPAPeGXA==}
+    engines: {node: ^14.18.0 || >=16.0.0}
     peerDependencies:
-      eslint: '>=4.19.1'
+      eslint: '>=8'
     dependencies:
+      '@eslint-community/eslint-utils': 4.4.0(eslint@8.46.0)
+      '@eslint-community/regexpp': 4.6.2
       eslint: 8.46.0
-      eslint-utils: 2.1.0
-      regexpp: 3.2.0
     dev: true
 
   /eslint-plugin-import@2.28.0(@typescript-eslint/parser@6.2.1)(eslint@8.46.0):
@@ -6073,21 +6073,21 @@ packages:
       - supports-color
     dev: true
 
-  /eslint-plugin-n@15.7.0(eslint@8.46.0):
-    resolution: {integrity: sha512-jDex9s7D/Qial8AGVIHq4W7NswpUD5DPDL2RH8Lzd9EloWUuvUkHfv4FRLMipH5q2UtyurorBkPeNi1wVWNh3Q==}
-    engines: {node: '>=12.22.0'}
+  /eslint-plugin-n@16.0.1(eslint@8.46.0):
+    resolution: {integrity: sha512-CDmHegJN0OF3L5cz5tATH84RPQm9kG+Yx39wIqIwPR2C0uhBGMWfbbOtetR83PQjjidA5aXMu+LEFw1jaSwvTA==}
+    engines: {node: '>=16.0.0'}
     peerDependencies:
       eslint: '>=7.0.0'
     dependencies:
+      '@eslint-community/eslint-utils': 4.4.0(eslint@8.46.0)
       builtins: 5.0.1
       eslint: 8.46.0
-      eslint-plugin-es: 4.1.0(eslint@8.46.0)
-      eslint-utils: 3.0.0(eslint@8.46.0)
-      ignore: 5.2.0
-      is-core-module: 2.11.0
+      eslint-plugin-es-x: 7.2.0(eslint@8.46.0)
+      ignore: 5.2.4
+      is-core-module: 2.13.0
       minimatch: 3.1.2
       resolve: 1.22.4
-      semver: 7.3.8
+      semver: 7.5.4
     dev: true
 
   /eslint-plugin-regexp@1.15.0(eslint@8.46.0):
@@ -6115,33 +6115,6 @@ packages:
       estraverse: 5.3.0
     dev: true
 
-  /eslint-utils@2.1.0:
-    resolution: {integrity: sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==}
-    engines: {node: '>=6'}
-    dependencies:
-      eslint-visitor-keys: 1.3.0
-    dev: true
-
-  /eslint-utils@3.0.0(eslint@8.46.0):
-    resolution: {integrity: sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==}
-    engines: {node: ^10.0.0 || ^12.0.0 || >= 14.0.0}
-    peerDependencies:
-      eslint: '>=5'
-    dependencies:
-      eslint: 8.46.0
-      eslint-visitor-keys: 2.1.0
-    dev: true
-
-  /eslint-visitor-keys@1.3.0:
-    resolution: {integrity: sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==}
-    engines: {node: '>=4'}
-    dev: true
-
-  /eslint-visitor-keys@2.1.0:
-    resolution: {integrity: sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==}
-    engines: {node: '>=10'}
-    dev: true
-
   /eslint-visitor-keys@3.4.1:
     resolution: {integrity: sha512-pZnmmLwYzf+kWaM/Qgrvpen51upAktaaiI01nsJD/Yr3lMOdNtq0cxkrrg16w64VtisN6okbs7Q8AfGqj4c9fA==}
     engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
@@ -6938,11 +6911,6 @@ packages:
       minimatch: 5.1.0
     dev: true
 
-  /ignore@5.2.0:
-    resolution: {integrity: sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==}
-    engines: {node: '>= 4'}
-    dev: true
-
   /ignore@5.2.4:
     resolution: {integrity: sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==}
     engines: {node: '>= 4'}
@@ -9054,7 +9022,7 @@ packages:
     resolution: {integrity: sha512-486O8/pQXwj9jV0mVvUnTsxq0uknpBnNJ0eCUhkZqJRQ8KutrT1PhzmumdCeM1hSBF2eMlFPmwECRER4IbKXlQ==}
     engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0}
     dependencies:
-      '@eslint-community/regexpp': 4.5.0
+      '@eslint-community/regexpp': 4.6.2
     dev: true
 
   /regenerate-unicode-properties@10.1.0:
@@ -9082,7 +9050,7 @@ packages:
     resolution: {integrity: sha512-OLxjyjPkVH+rQlBLb1I/P/VTmamSjGkvN5PTV5BXP432k3uVz727J7H29GA5IFiY0m7e1xBN7049Wn59FY3DEQ==}
     engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0}
     dependencies:
-      '@eslint-community/regexpp': 4.5.0
+      '@eslint-community/regexpp': 4.6.2
       refa: 0.11.0
     dev: true
 
@@ -9104,11 +9072,6 @@ packages:
       functions-have-names: 1.2.3
     dev: true
 
-  /regexpp@3.2.0:
-    resolution: {integrity: sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==}
-    engines: {node: '>=8'}
-    dev: true
-
   /regexpu-core@5.3.2:
     resolution: {integrity: sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==}
     engines: {node: '>=4'}
@@ -9326,7 +9289,7 @@ packages:
   /scslre@0.2.0:
     resolution: {integrity: sha512-4hc49fUMmX3jM0XdFUAPBrs1xwEcdHa0KyjEsjFs+Zfc66mpFpq5YmRgDtl+Ffo6AtJIilfei+yKw8fUn3N88w==}
     dependencies:
-      '@eslint-community/regexpp': 4.5.0
+      '@eslint-community/regexpp': 4.6.2
       refa: 0.11.0
       regexp-ast-analysis: 0.6.0
     dev: true
@@ -9359,14 +9322,6 @@ packages:
     resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==}
     hasBin: true
 
-  /semver@7.3.8:
-    resolution: {integrity: sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==}
-    engines: {node: '>=10'}
-    hasBin: true
-    dependencies:
-      lru-cache: 6.0.0
-    dev: true
-
   /semver@7.5.4:
     resolution: {integrity: sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==}
     engines: {node: '>=10'}

From 7f302bcafbc1c6595faa035e2ccb94fe9b696d82 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E7=BF=A0=20/=20green?= 
Date: Mon, 21 Aug 2023 18:50:04 +0900
Subject: [PATCH 24/29] chore(deps): update miniflare to v3 (#14107)

---
 .github/renovate.json5                      |   1 -
 playground/ssr-webworker/__tests__/serve.ts |  26 +-
 playground/ssr-webworker/package.json       |   2 +-
 playground/ssr-webworker/worker.js          |  15 +-
 pnpm-lock.yaml                              | 734 +++++++++-----------
 5 files changed, 339 insertions(+), 439 deletions(-)

diff --git a/.github/renovate.json5 b/.github/renovate.json5
index c58ed06430399a..1a37bc89b336ba 100644
--- a/.github/renovate.json5
+++ b/.github/renovate.json5
@@ -19,6 +19,5 @@
 
     // breaking changes
     "kill-port", // `kill-port:^2.0.0 has perf issues (#8392)
-    "miniflare", // `miniflare:v2.0.0+` only supports node 16.7
   ],
 }
diff --git a/playground/ssr-webworker/__tests__/serve.ts b/playground/ssr-webworker/__tests__/serve.ts
index 8159cf39734510..8d384a696eeaf8 100644
--- a/playground/ssr-webworker/__tests__/serve.ts
+++ b/playground/ssr-webworker/__tests__/serve.ts
@@ -3,7 +3,7 @@
 
 import path from 'node:path'
 import kill from 'kill-port'
-import { isBuild, ports, rootDir } from '~utils'
+import { ports, rootDir } from '~utils'
 
 export const port = ports['ssr-webworker']
 
@@ -26,22 +26,12 @@ export async function serve(): Promise<{ close(): Promise }> {
   })
 
   const { createServer } = await import(path.resolve(rootDir, 'worker.js'))
-  const { app } = await createServer(rootDir, isBuild)
+  const { mf } = await createServer(port)
 
-  return new Promise((resolve, reject) => {
-    try {
-      const server = app.listen(port, () => {
-        resolve({
-          // for test teardown
-          async close() {
-            await new Promise((resolve) => {
-              server.close(resolve)
-            })
-          },
-        })
-      })
-    } catch (e) {
-      reject(e)
-    }
-  })
+  return {
+    // for test teardown
+    async close() {
+      await mf.dispose()
+    },
+  }
 }
diff --git a/playground/ssr-webworker/package.json b/playground/ssr-webworker/package.json
index 6be45e0d653668..675c1bd3c67852 100644
--- a/playground/ssr-webworker/package.json
+++ b/playground/ssr-webworker/package.json
@@ -11,7 +11,7 @@
     "react": "^18.2.0"
   },
   "devDependencies": {
-    "miniflare": "^1.4.1",
+    "miniflare": "^3.20230807.0",
     "@vitejs/test-resolve-linked": "workspace:*"
   }
 }
diff --git a/playground/ssr-webworker/worker.js b/playground/ssr-webworker/worker.js
index 0f4d723a32c454..9c93d3b754c706 100644
--- a/playground/ssr-webworker/worker.js
+++ b/playground/ssr-webworker/worker.js
@@ -6,20 +6,15 @@ const __dirname = path.dirname(fileURLToPath(import.meta.url))
 
 const isTest = !!process.env.TEST
 
-export async function createServer() {
+export async function createServer(port) {
   const mf = new Miniflare({
     scriptPath: path.resolve(__dirname, 'dist/worker/entry-worker.js'),
+    port,
   })
-
-  const app = mf.createServer()
-
-  return { app }
+  await mf.ready
+  return { mf }
 }
 
 if (!isTest) {
-  createServer().then(({ app }) =>
-    app.listen(5173, () => {
-      console.log('http://localhost:5173')
-    }),
-  )
+  createServer(5173).then(() => console.log('http://localhost:5173'))
 }
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 67660465467b37..1e2c6b2b9fd5ab 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -1381,8 +1381,8 @@ importers:
         specifier: workspace:*
         version: link:../resolve-linked
       miniflare:
-        specifier: ^1.4.1
-        version: 1.4.1
+        specifier: ^3.20230807.0
+        version: 3.20230807.0
 
   playground/tailwind:
     dependencies:
@@ -2784,9 +2784,50 @@ packages:
       '@babel/helper-validator-identifier': 7.22.5
       to-fast-properties: 2.0.0
 
-  /@cloudflare/workers-types@2.2.2:
-    resolution: {integrity: sha512-kaMn2rueJ0PL1TYVGknTCh0X0x0d9G+FNXAFep7/4uqecEZoQb/63o6rOmMuiqI09zLuHV6xhKRXinokV/MY9A==}
+  /@cloudflare/workerd-darwin-64@1.20230807.0:
+    resolution: {integrity: sha512-p1XgkX6OcomFSRSHiIo6XbWB40sMExnFUWtZFfSvB7oNmkrtEvUCI3iuh+ibFI5IDSZqsRKyIHx6Oe22Z0ei5A==}
+    engines: {node: '>=16'}
+    cpu: [x64]
+    os: [darwin]
+    requiresBuild: true
+    dev: true
+    optional: true
+
+  /@cloudflare/workerd-darwin-arm64@1.20230807.0:
+    resolution: {integrity: sha512-HjhjRFPvDg3Sh4TXyz38Z+AhaLA+0AiAmYKRadcnKhysjOaTew86POS3xdaKiZ3xG83J7rsLcqajW54znbmCkg==}
+    engines: {node: '>=16'}
+    cpu: [arm64]
+    os: [darwin]
+    requiresBuild: true
+    dev: true
+    optional: true
+
+  /@cloudflare/workerd-linux-64@1.20230807.0:
+    resolution: {integrity: sha512-PPuGKoRILFTlZDC7uGXgrYBucopqkvicaov/ypbPmUVb/DfrXGqftEkNbXlyiXY1g0t10wXRiSZWi7hOBOIH7w==}
+    engines: {node: '>=16'}
+    cpu: [x64]
+    os: [linux]
+    requiresBuild: true
+    dev: true
+    optional: true
+
+  /@cloudflare/workerd-linux-arm64@1.20230807.0:
+    resolution: {integrity: sha512-ESAf2tXarK8dJl07voa/NI2BBpH1duldfgeQQQmor437A3+gSqQSBhAEmh05bjHy6dYHXgZtwLPky+LL6hmyBA==}
+    engines: {node: '>=16'}
+    cpu: [arm64]
+    os: [linux]
+    requiresBuild: true
+    dev: true
+    optional: true
+
+  /@cloudflare/workerd-windows-64@1.20230807.0:
+    resolution: {integrity: sha512-DYKkLtT4lNRdVx+2fbYgPxdF7ypJn9bT2HYMZ93N7XPwaKFx2svBRMrZkwBcvwuNb+99Z0jnaQwdcFnHcFLzZA==}
+    engines: {node: '>=16'}
+    cpu: [x64]
+    os: [win32]
+    requiresBuild: true
     dev: true
+    optional: true
 
   /@cspotcode/source-map-support@0.8.1:
     resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==}
@@ -3351,10 +3392,6 @@ packages:
     engines: {node: '>=6.9.0'}
     dev: true
 
-  /@iarna/toml@2.2.5:
-    resolution: {integrity: sha512-trnsAYxU3xnS1gPHPyU961coFyLkh4gAD/0zQ5mymY4yOZ+CYvsPqUbOFSw0aDM4y0tV7tiFxL/1XfXPNC6IPg==}
-    dev: true
-
   /@jest/schemas@29.4.3:
     resolution: {integrity: sha512-VLYKXQmtmuEz6IxJsrZwzG9NvtkQsWNnWMsKxqWNu3+CnfzJQhp0WDDKWLVV9hLKr0l3SLLFRqcYHjhtyuDVxg==}
     engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
@@ -3468,16 +3505,6 @@ packages:
     resolution: {integrity: sha512-9b8mPpKrfeGRuhFH5iO1iwCLeIIsV6+H1sRfxbkoGXIyQE2BTsPd9zqSqQJ+pv5sJ/hT5M1zvOFL02MnEezFug==}
     dev: true
 
-  /@mrbbot/node-fetch@4.6.0:
-    resolution: {integrity: sha512-GTSOdhpiUnJ9a+XK90NUiqCqOmqXOUU4tqg8WbpZW+nEUTJ4dF3QZ4xhfWg5bqYPagIh/e9r5HxGrftzmulbmw==}
-    engines: {node: '>=10.0.0'}
-    dependencies:
-      '@cloudflare/workers-types': 2.2.2
-      busboy: 0.3.1
-      formdata-node: 2.5.0
-      web-streams-polyfill: 3.2.1
-    dev: true
-
   /@nicolo-ribaudo/semver-v6@6.3.3:
     resolution: {integrity: sha512-3Yc1fUTs69MG/uZbJlLSI3JISMn2UV2rg+1D/vROUqZyh3l6iYHCs7GMp+M40ZD7yOdDbYjJcU1oTJhrc+dGKg==}
     hasBin: true
@@ -3501,33 +3528,6 @@ packages:
       '@nodelib/fs.scandir': 2.1.5
       fastq: 1.13.0
 
-  /@peculiar/asn1-schema@2.1.0:
-    resolution: {integrity: sha512-D6g4C5YRKC/iPujMAOXuZ7YGdaoMx8GsvWzfVSyx2LYeL38ECOKNywlYAuwbqQvON64lgsYdAujWQPX8hhoBLw==}
-    dependencies:
-      '@types/asn1js': 2.0.2
-      asn1js: 2.4.0
-      pvtsutils: 1.3.2
-      tslib: 2.6.1
-    dev: true
-
-  /@peculiar/json-schema@1.1.12:
-    resolution: {integrity: sha512-coUfuoMeIB7B8/NMekxaDzLhaYmp0HZNPEjYRm9goRou8UZIC3z21s0sL9AWoCw4EG876QyO3kYrc61WNF9B/w==}
-    engines: {node: '>=8.0.0'}
-    dependencies:
-      tslib: 2.6.1
-    dev: true
-
-  /@peculiar/webcrypto@1.3.3:
-    resolution: {integrity: sha512-+jkp16Hp18HkphJlMtqsQKjyDWJBh0AhDuoB+vVakuIRbkBdaFb7v26Ldm25altjiYhCyQnR5NChHxwSTvbXJw==}
-    engines: {node: '>=10.12.0'}
-    dependencies:
-      '@peculiar/asn1-schema': 2.1.0
-      '@peculiar/json-schema': 1.1.12
-      pvtsutils: 1.3.2
-      tslib: 2.6.1
-      webcrypto-core: 1.7.3
-    dev: true
-
   /@pkgjs/parseargs@0.11.0:
     resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==}
     engines: {node: '>=14'}
@@ -3751,10 +3751,6 @@ packages:
     resolution: {integrity: sha512-ebDJ9b0e702Yr7pWgB0jzm+CX4Srzz8RcXtLJDJB+BSccqMa36uyH/zUsSYao5+BD1ytv3k3rPYCq4mAE1hsXA==}
     dev: true
 
-  /@types/asn1js@2.0.2:
-    resolution: {integrity: sha512-t4YHCgtD+ERvH0FyxvNlYwJ2ezhqw7t+Ygh4urQ7dJER8i185JPv6oIM3ey5YQmGN6Zp9EMbpohkjZi9t3UxwA==}
-    dev: true
-
   /@types/babel__core@7.20.1:
     resolution: {integrity: sha512-aACu/U/omhdk15O4Nfb+fHgH/z3QsfQzpnvRZhYhThms83ZnAOZz7zZAWO7mn2yyNQaA4xTO8GLK3uqFU4bYYw==}
     dependencies:
@@ -3891,10 +3887,6 @@ packages:
     resolution: {integrity: sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA==}
     dev: true
 
-  /@types/node@15.14.9:
-    resolution: {integrity: sha512-qjd88DrCxupx/kJD5yQgZdcYKZKSIGBVDIBE1/LTGcNm3d2Np/jxojkdePDdfnBHJc5W7vSMpbJ1aB7p/Py69A==}
-    dev: true
-
   /@types/node@18.15.5:
     resolution: {integrity: sha512-Ark2WDjjZO7GmvsyFFf81MXuGTA/d6oP38anyxWOL6EREyBKAxKoFHwBhaZxCfLRLpO8JgVXwqOwSwa7jRcjew==}
     dev: true
@@ -3935,10 +3927,6 @@ packages:
     resolution: {integrity: sha512-G8hZ6XJiHnuhQKR7ZmysCeJWE08o8T0AXtk5darsCaTVsYZhhgUrq53jizaR2FvsoeCwJhlmwTjkXBY5Pn/ZHw==}
     dev: true
 
-  /@types/stack-trace@0.0.29:
-    resolution: {integrity: sha512-TgfOX+mGY/NyNxJLIbDWrO9DjGoVSW9+aB8H2yy1fy32jsvxijhmyJI9fDFgvz3YP4lvJaq9DzdR/M1bOgVc9g==}
-    dev: true
-
   /@types/stylus@0.48.38:
     resolution: {integrity: sha512-B5otJekvD6XM8iTrnO6e2twoTY2tKL9VkL/57/2Lo4tv3EatbCaufdi68VVtn/h4yjO+HVvYEyrNQd0Lzj6riw==}
     dependencies:
@@ -4298,11 +4286,6 @@ packages:
       - vue
     dev: true
 
-  /@wessberg/stringutil@1.0.19:
-    resolution: {integrity: sha512-9AZHVXWlpN8Cn9k5BC/O0Dzb9E9xfEMXzYrNunwvkUTvuK7xgQPVRZpLo+jWCOZ5r8oBa8NIrHuPEu1hzbb6bg==}
-    engines: {node: '>=8.0.0'}
-    dev: true
-
   /JSONStream@1.3.5:
     resolution: {integrity: sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==}
     hasBin: true
@@ -4562,15 +4545,14 @@ packages:
     engines: {node: '>=0.10.0'}
     dev: true
 
-  /asap@2.0.6:
-    resolution: {integrity: sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==}
+  /as-table@1.0.55:
+    resolution: {integrity: sha512-xvsWESUJn0JN421Xb9MQw6AsMHRCUknCe0Wjlxvjud80mU4E6hQf1A6NzQKcYNmYw62MfzEtXc+badstZP3JpQ==}
+    dependencies:
+      printable-characters: 1.0.42
     dev: true
 
-  /asn1js@2.4.0:
-    resolution: {integrity: sha512-PvZC0FMyMut8aOnR2jAEGSkmRtHIUYPe9amUEnGjr9TdnUmsfoOkjrvUkOEU9mzpYBR1HyO9bF+8U1cLTMMHhQ==}
-    engines: {node: '>=6.0.0'}
-    dependencies:
-      pvutils: 1.1.3
+  /asap@2.0.6:
+    resolution: {integrity: sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==}
     dev: true
 
   /assert-never@1.2.1:
@@ -4666,9 +4648,8 @@ packages:
   /balanced-match@1.0.2:
     resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
 
-  /base64-arraybuffer-es6@0.7.0:
-    resolution: {integrity: sha512-ESyU/U1CFZDJUdr+neHRhNozeCv72Y7Vm0m1DCbjX3KBjT6eYocvAJlSk6+8+HkVwXlT1FNxhGW6q3UKAlCvvw==}
-    engines: {node: '>=6.0.0'}
+  /base64-js@1.5.1:
+    resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==}
     dev: true
 
   /bcrypt@5.1.0:
@@ -4683,6 +4664,14 @@ packages:
       - supports-color
     dev: false
 
+  /better-sqlite3@8.5.0:
+    resolution: {integrity: sha512-vbPcv/Hx5WYdyNg/NbcfyaBZyv9s/NVbxb7yCeC5Bq1pVocNxeL2tZmSu3Rlm4IEOTjYdGyzWQgyx0OSdORBzw==}
+    requiresBuild: true
+    dependencies:
+      bindings: 1.5.0
+      prebuild-install: 7.1.1
+    dev: true
+
   /bignumber.js@9.1.1:
     resolution: {integrity: sha512-pHm4LsMJ6lzgNGVfZHjMoO8sdoRhOzOH4MLmY65Jg70bpxCKu5iOHNJyfF6OyvYw7t8Fpf35RuzUyqnQsj8Vig==}
     dev: false
@@ -4691,6 +4680,20 @@ packages:
     resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==}
     engines: {node: '>=8'}
 
+  /bindings@1.5.0:
+    resolution: {integrity: sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==}
+    dependencies:
+      file-uri-to-path: 1.0.0
+    dev: true
+
+  /bl@4.1.0:
+    resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==}
+    dependencies:
+      buffer: 5.7.1
+      inherits: 2.0.4
+      readable-stream: 3.6.0
+    dev: true
+
   /body-parser@1.20.1:
     resolution: {integrity: sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==}
     engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16}
@@ -4746,6 +4749,13 @@ packages:
     resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==}
     dev: true
 
+  /buffer@5.7.1:
+    resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==}
+    dependencies:
+      base64-js: 1.5.1
+      ieee754: 1.2.1
+    dev: true
+
   /builtin-modules@3.3.0:
     resolution: {integrity: sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==}
     engines: {node: '>=6'}
@@ -4757,11 +4767,11 @@ packages:
       semver: 7.5.4
     dev: true
 
-  /busboy@0.3.1:
-    resolution: {integrity: sha512-y7tTxhGKXcyBxRKAni+awqx8uqaJKrSFSNFSeRG5CsWNdmy2BIK+6VGWEW7TZnIO/533mtMEA4rOevQV815YJw==}
-    engines: {node: '>=4.5.0'}
+  /busboy@1.6.0:
+    resolution: {integrity: sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==}
+    engines: {node: '>=10.16.0'}
     dependencies:
-      dicer: 0.3.0
+      streamsearch: 1.1.0
     dev: true
 
   /bytes@3.1.2:
@@ -4809,6 +4819,15 @@ packages:
   /caniuse-lite@1.0.30001519:
     resolution: {integrity: sha512-0QHgqR+Jv4bxHMp8kZ1Kn8CH55OikjKJ6JmKkZYP1F3D7w+lnFXF70nG5eNfsZS89jadi5Ywy5UCSKLAglIRkg==}
 
+  /capnp-ts@0.7.0:
+    resolution: {integrity: sha512-XKxXAC3HVPv7r674zP0VC3RTXz+/JKhfyw94ljvF80yynK6VkTnqE3jMuN8b3dUVmmc43TjyxjW4KTsmB3c86g==}
+    dependencies:
+      debug: 4.3.4
+      tslib: 2.6.1
+    transitivePeerDependencies:
+      - supports-color
+    dev: true
+
   /chai@4.3.7:
     resolution: {integrity: sha512-HLnAzZ2iupm25PlN0xFreAlBA5zaBSv3og0DdeGA4Ar6h6rJ3A0rolRUKJhSF2V10GZKDgWF/VmAEsNWjCRB+A==}
     engines: {node: '>=4'}
@@ -4868,30 +4887,15 @@ packages:
       fsevents: 2.3.2
     patched: true
 
+  /chownr@1.1.4:
+    resolution: {integrity: sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==}
+    dev: true
+
   /chownr@2.0.0:
     resolution: {integrity: sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==}
     engines: {node: '>=10'}
     dev: false
 
-  /cjstoesm@1.1.4(typescript@4.6.4):
-    resolution: {integrity: sha512-cixLJwK2HS8R8J1jJcYwlrLxWUbdNms5EmVQuvP3O0CGvHNv2WVd2gnqTP/tbTEYzbgWiSYQBZDoAakqsSl94Q==}
-    engines: {node: '>=10.0.0'}
-    hasBin: true
-    peerDependencies:
-      typescript: '>=3.2.x || >= 4.x'
-    dependencies:
-      '@wessberg/stringutil': 1.0.19
-      chalk: 4.1.2
-      commander: 7.2.0
-      compatfactory: 0.0.6(typescript@4.6.4)
-      crosspath: 0.0.8
-      fast-glob: 3.3.1
-      helpertypes: 0.0.2
-      reserved-words: 0.1.2
-      resolve: 1.22.4
-      typescript: 4.6.4
-    dev: true
-
   /clean-stack@2.2.0:
     resolution: {integrity: sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==}
     engines: {node: '>=6'}
@@ -4936,11 +4940,6 @@ packages:
       wrap-ansi: 7.0.0
     dev: true
 
-  /cluster-key-slot@1.1.0:
-    resolution: {integrity: sha512-2Nii8p3RwAPiFwsnZvukotvow2rIHM+yQ6ZcBXGHdniadkYGZYiGmkHJIbZPIV9nfv7m/U1IPMVVcAhoWFeklw==}
-    engines: {node: '>=0.10.0'}
-    dev: true
-
   /color-convert@1.9.3:
     resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==}
     dependencies:
@@ -4995,11 +4994,6 @@ packages:
     resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==}
     engines: {node: '>= 6'}
 
-  /commander@7.2.0:
-    resolution: {integrity: sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==}
-    engines: {node: '>= 10'}
-    dev: true
-
   /comment-parser@1.3.1:
     resolution: {integrity: sha512-B52sN2VNghyq5ofvUsqZjmk6YkihBX5vMSChmSK9v4ShjKf3Vk5Xcmgpw4o+iIgtrnM/u5FiMpz9VKb8lpBveA==}
     engines: {node: '>= 12.0.0'}
@@ -5020,16 +5014,6 @@ packages:
       dot-prop: 5.3.0
     dev: true
 
-  /compatfactory@0.0.6(typescript@4.6.4):
-    resolution: {integrity: sha512-F1LpdNxgxay4UdanmeL75+guJPDg2zu8bFZDVih/kse5hA3oa+aMgvk4tLwq7AFBpy3S0ilnPdSfYsTl/L9NXA==}
-    engines: {node: '>=10.0.0'}
-    peerDependencies:
-      typescript: '>=3.x || >= 4.x'
-    dependencies:
-      helpertypes: 0.0.2
-      typescript: 4.6.4
-    dev: true
-
   /concat-map@0.0.1:
     resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==}
 
@@ -5219,11 +5203,6 @@ packages:
   /cookie-signature@1.0.6:
     resolution: {integrity: sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==}
 
-  /cookie@0.4.2:
-    resolution: {integrity: sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==}
-    engines: {node: '>= 0.6'}
-    dev: true
-
   /cookie@0.5.0:
     resolution: {integrity: sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==}
     engines: {node: '>= 0.6'}
@@ -5280,13 +5259,6 @@ packages:
       which: 2.0.2
     dev: true
 
-  /crosspath@0.0.8:
-    resolution: {integrity: sha512-IKlS3MpP0fhJ50M6ltyLO7Q4NzwfhafpmolMH0EDKyyaY81HutF2mH4hLpCdm3fKZ/TSTW5qPIdTy62YnefEyQ==}
-    engines: {node: '>=10.0.0'}
-    dependencies:
-      '@types/node': 15.14.9
-    dev: true
-
   /css-color-names@1.0.1:
     resolution: {integrity: sha512-/loXYOch1qU1biStIFsHH8SxTmOseh1IJqFvy8IujXOm1h+QjUdDhkzOrR5HG8K8mlxREj0yfi8ewCHx0eMxzA==}
     dev: true
@@ -5311,6 +5283,10 @@ packages:
     engines: {node: '>=8'}
     dev: true
 
+  /data-uri-to-buffer@2.0.2:
+    resolution: {integrity: sha512-ND9qDTLc6diwj+Xe5cdAgVTbLVdXbtxTJRXRhli8Mowuaan+0EJOtdqJ0QCHNSSPyoXGx9HX2/VMnKeC34AChA==}
+    dev: true
+
   /data-uri-to-buffer@4.0.0:
     resolution: {integrity: sha512-Vr3mLBA8qWmcuschSLAOogKgQ/Jwxulv3RNE4FXnYWRGujzrRWQI4m12fQqRkwX06C0KanhLr4hK+GydchZsaA==}
     engines: {node: '>= 12'}
@@ -5365,6 +5341,13 @@ packages:
     engines: {node: '>=0.10.0'}
     dev: true
 
+  /decompress-response@6.0.0:
+    resolution: {integrity: sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==}
+    engines: {node: '>=10'}
+    dependencies:
+      mimic-response: 3.1.0
+    dev: true
+
   /deep-eql@4.1.3:
     resolution: {integrity: sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==}
     engines: {node: '>=6'}
@@ -5372,6 +5355,11 @@ packages:
       type-detect: 4.0.8
     dev: true
 
+  /deep-extend@0.6.0:
+    resolution: {integrity: sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==}
+    engines: {node: '>=4.0.0'}
+    dev: true
+
   /deep-is@0.1.4:
     resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==}
     dev: true
@@ -5419,11 +5407,6 @@ packages:
     resolution: {integrity: sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==}
     dev: false
 
-  /denque@1.5.1:
-    resolution: {integrity: sha512-XwE+iZ4D6ZUB7mfYRMb5wByE8L74HCn30FBN7sWnXksWc1LO1bPDl67pBR9o/kC4z/xSNAwkMYcGgqDV3BE3Hw==}
-    engines: {node: '>=0.10'}
-    dev: true
-
   /depd@2.0.0:
     resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==}
     engines: {node: '>= 0.8'}
@@ -5441,14 +5424,6 @@ packages:
   /detect-libc@2.0.1:
     resolution: {integrity: sha512-463v3ZeIrcWtdgIg6vI6XUncguvr2TnGl4SzDXinkt9mSLpBJKXT3mW6xT3VQdDN11+WVs29pgvivTc4Lp8v+w==}
     engines: {node: '>=8'}
-    dev: false
-
-  /dicer@0.3.0:
-    resolution: {integrity: sha512-MdceRRWqltEG2dZqO769g27N/3PXfcKl04VhYnBlo2YhH7zPi88VebsjTKclaOyiuMaGU72hTfw3VkUitGcVCA==}
-    engines: {node: '>=4.5.0'}
-    dependencies:
-      streamsearch: 0.1.2
-    dev: true
 
   /didyoumean@1.2.2:
     resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==}
@@ -5508,11 +5483,6 @@ packages:
     engines: {node: '>=12'}
     dev: true
 
-  /dotenv@8.6.0:
-    resolution: {integrity: sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g==}
-    engines: {node: '>=10'}
-    dev: true
-
   /eastasianwidth@0.2.0:
     resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==}
     dev: true
@@ -5534,16 +5504,17 @@ packages:
     resolution: {integrity: sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==}
     engines: {node: '>= 0.8'}
 
+  /end-of-stream@1.4.4:
+    resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==}
+    dependencies:
+      once: 1.4.0
+    dev: true
+
   /entities@4.4.0:
     resolution: {integrity: sha512-oYp7156SP8LkeGD0GF85ad1X9Ai79WtRsZ2gxJqtBuzH+98YUV6jkHEKlZkMbcrjJjIVJNIDP/3WL9wQkoPbWA==}
     engines: {node: '>=0.12'}
     dev: true
 
-  /env-paths@2.2.1:
-    resolution: {integrity: sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==}
-    engines: {node: '>=6'}
-    dev: true
-
   /errno@0.1.8:
     resolution: {integrity: sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==}
     hasBin: true
@@ -6216,11 +6187,6 @@ packages:
     resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==}
     engines: {node: '>= 0.6'}
 
-  /event-target-shim@6.0.2:
-    resolution: {integrity: sha512-8q3LsZjRezbFZ2PN+uP+Q7pnHUMmAOziU2vA2OwoFaKIXxlxl38IylhSSgUorWu/rf4er67w0ikBqjBFk/pomA==}
-    engines: {node: '>=10.13.0'}
-    dev: true
-
   /eventemitter3@4.0.7:
     resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==}
     dev: true
@@ -6240,6 +6206,16 @@ packages:
       strip-final-newline: 3.0.0
     dev: true
 
+  /exit-hook@2.2.1:
+    resolution: {integrity: sha512-eNTPlAD67BmP31LDINZ3U7HSF8l57TxOY2PmBJ1shpCvpnxBF93mWCE8YHBnXs8qiUZJc9WDcWIeC3a2HIAMfw==}
+    engines: {node: '>=6'}
+    dev: true
+
+  /expand-template@2.0.3:
+    resolution: {integrity: sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==}
+    engines: {node: '>=6'}
+    dev: true
+
   /express@4.18.2:
     resolution: {integrity: sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==}
     engines: {node: '>= 0.10.0'}
@@ -6326,6 +6302,10 @@ packages:
       flat-cache: 3.0.4
     dev: true
 
+  /file-uri-to-path@1.0.0:
+    resolution: {integrity: sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==}
+    dev: true
+
   /fill-range@7.0.1:
     resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==}
     engines: {node: '>=8'}
@@ -6436,13 +6416,6 @@ packages:
       mime-types: 2.1.35
     dev: false
 
-  /formdata-node@2.5.0:
-    resolution: {integrity: sha512-JFSNLq34u2Tqc6F034x5aaK3ksIfrDBMPie8b4KYx2/pVDLxWFXDly52dsvHjZ+A0LGHTZb/w4HBZVdgN74RTw==}
-    engines: {node: '>= 10.17'}
-    dependencies:
-      mime-types: 2.1.29
-    dev: true
-
   /formdata-polyfill@4.0.10:
     resolution: {integrity: sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==}
     engines: {node: '>=12.20.0'}
@@ -6462,6 +6435,10 @@ packages:
     resolution: {integrity: sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==}
     engines: {node: '>= 0.6'}
 
+  /fs-constants@1.0.0:
+    resolution: {integrity: sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==}
+    dev: true
+
   /fs-extra@11.1.1:
     resolution: {integrity: sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==}
     engines: {node: '>=14.14'}
@@ -6575,6 +6552,13 @@ packages:
       yargs: 16.2.0
     dev: true
 
+  /get-source@2.0.12:
+    resolution: {integrity: sha512-X5+4+iD+HoSeEED+uwrQ07BOQr0kEDFMVqqpBuI+RaZBpBpHCuXxo70bjar6f0b0u/DQJsJ7ssurpP0V60Az+w==}
+    dependencies:
+      data-uri-to-buffer: 2.0.2
+      source-map: 0.6.1
+    dev: true
+
   /get-stream@6.0.1:
     resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==}
     engines: {node: '>=10'}
@@ -6629,6 +6613,10 @@ packages:
       ini: 1.3.8
     dev: true
 
+  /github-from-package@0.0.0:
+    resolution: {integrity: sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==}
+    dev: true
+
   /glob-parent@5.1.2:
     resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==}
     engines: {node: '>= 6'}
@@ -6641,6 +6629,10 @@ packages:
     dependencies:
       is-glob: 4.0.3
 
+  /glob-to-regexp@0.4.1:
+    resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==}
+    dev: true
+
   /glob@10.2.7:
     resolution: {integrity: sha512-jTKehsravOJo8IJxUGfZILnkvVJM/MOfHRs8QcXolVef2zNI9Tqyy5+SeuOAZd3upViEZQLyFpQhYiHLrMUNmA==}
     engines: {node: '>=16 || 14 >=14.17'}
@@ -6816,11 +6808,6 @@ packages:
     dependencies:
       function-bind: 1.1.1
 
-  /helpertypes@0.0.2:
-    resolution: {integrity: sha512-PKVtWnJ+dcvPeUJRiqtbraN/Hr2rNEnS14T/IxDBb0KgHkAL5w4YwVxMEPowA9vyoMP0DrwO0TxJ+KH3UF/6YA==}
-    engines: {node: '>=10.0.0'}
-    dev: true
-
   /hookable@5.5.3:
     resolution: {integrity: sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ==}
     dev: true
@@ -6836,10 +6823,6 @@ packages:
       lru-cache: 6.0.0
     dev: true
 
-  /html-rewriter-wasm@0.3.2:
-    resolution: {integrity: sha512-b+pOh+bs00uRVNIZoTgGBREjUKN47pchTNwkxKuP4ecQTFcOA6KJIW+jjvjjXrkSRURZsideLxFKqX7hnxdegQ==}
-    dev: true
-
   /http-cache-semantics@4.1.0:
     resolution: {integrity: sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==}
     dev: true
@@ -6904,6 +6887,10 @@ packages:
       postcss: 8.4.27
     dev: true
 
+  /ieee754@1.2.1:
+    resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==}
+    dev: true
+
   /ignore-walk@5.0.1:
     resolution: {integrity: sha512-yemi4pMf51WKT7khInJqAvsIGzoqYXblnsz0ql8tM+yi1EKYTY1evX4NAbJrLL/Aanr2HyZeluqU+Oi7MGHokw==}
     engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0}
@@ -6982,25 +6969,6 @@ packages:
       side-channel: 1.0.4
     dev: true
 
-  /ioredis@4.28.5:
-    resolution: {integrity: sha512-3GYo0GJtLqgNXj4YhrisLaNNvWSNwSS2wS4OELGfGxH8I69+XfNdnmV1AyN+ZqMh0i7eX+SWjrwFKDBDgfBC1A==}
-    engines: {node: '>=6'}
-    dependencies:
-      cluster-key-slot: 1.1.0
-      debug: 4.3.4
-      denque: 1.5.1
-      lodash.defaults: 4.2.0
-      lodash.flatten: 4.4.0
-      lodash.isarguments: 3.1.0
-      p-map: 2.1.0
-      redis-commands: 1.7.0
-      redis-errors: 1.2.0
-      redis-parser: 3.0.0
-      standard-as-callback: 2.1.0
-    transitivePeerDependencies:
-      - supports-color
-    dev: true
-
   /ipaddr.js@1.9.1:
     resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==}
     engines: {node: '>= 0.10'}
@@ -7374,8 +7342,8 @@ packages:
     engines: {node: '>=6'}
     dev: true
 
-  /kleur@4.1.4:
-    resolution: {integrity: sha512-8QADVssbrFjivHWQU7KkMgptGTl6WAcSdlbBPY4uNF+mWr6DGcKrvY2w4FQJoXch7+fKMjj0dRrL75vk3k23OA==}
+  /kleur@4.1.5:
+    resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==}
     engines: {node: '>=6'}
     dev: true
 
@@ -7623,22 +7591,10 @@ packages:
     resolution: {integrity: sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==}
     dev: false
 
-  /lodash.defaults@4.2.0:
-    resolution: {integrity: sha1-0JF4cW/+pN3p5ft7N/bwgCJ0WAw=}
-    dev: true
-
-  /lodash.flatten@4.4.0:
-    resolution: {integrity: sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8=}
-    dev: true
-
   /lodash.get@4.4.2:
     resolution: {integrity: sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==}
     dev: true
 
-  /lodash.isarguments@3.1.0:
-    resolution: {integrity: sha1-L1c9hcaiQon/AGY7SRwdM4/zRYo=}
-    dev: true
-
   /lodash.isequal@4.5.0:
     resolution: {integrity: sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==}
     dev: true
@@ -7795,22 +7751,10 @@ packages:
       braces: 3.0.2
       picomatch: 2.3.1
 
-  /mime-db@1.46.0:
-    resolution: {integrity: sha512-svXaP8UQRZ5K7or+ZmfNhg2xX3yKDMUzqadsSqi4NCH/KomcH75MAMYAGVlvXn4+b/xOPhS3I2uHKRUzvjY7BQ==}
-    engines: {node: '>= 0.6'}
-    dev: true
-
   /mime-db@1.52.0:
     resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==}
     engines: {node: '>= 0.6'}
 
-  /mime-types@2.1.29:
-    resolution: {integrity: sha512-Y/jMt/S5sR9OaqteJtslsFZKWOIIqMACsJSiHghlCAyhf7jfVYjKBmLiX8OgpWeW+fjJ2b+Az69aPFPkUOY6xQ==}
-    engines: {node: '>= 0.6'}
-    dependencies:
-      mime-db: 1.46.0
-    dev: true
-
   /mime-types@2.1.35:
     resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==}
     engines: {node: '>= 0.6'}
@@ -7832,43 +7776,36 @@ packages:
     engines: {node: '>=12'}
     dev: true
 
+  /mimic-response@3.1.0:
+    resolution: {integrity: sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==}
+    engines: {node: '>=10'}
+    dev: true
+
   /min-indent@1.0.1:
     resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==}
     engines: {node: '>=4'}
     dev: true
 
-  /miniflare@1.4.1:
-    resolution: {integrity: sha512-hJkMbTEM+sSiAo2yuPOucrdFYINLU7vvl9uVkRzAQ/h0CjmkYOCoyBn4jYzWtDZeQ0XrkyS6PGUCO277B5TsXA==}
-    engines: {node: '>=10.12.0'}
-    hasBin: true
+  /miniflare@3.20230807.0:
+    resolution: {integrity: sha512-yq9Y9hzn9RIR2DDoohoGrWTRY7JgCAVmrtO3K3YqzUyjdycSLnUnyzRZmXnx8hep2xafNTbuig2ylKj2MPmGvg==}
+    engines: {node: '>=16.13'}
     dependencies:
-      '@iarna/toml': 2.2.5
-      '@mrbbot/node-fetch': 4.6.0
-      '@peculiar/webcrypto': 1.3.3
-      chokidar: 3.5.3(patch_hash=dzxbf3kgof5pdmbsyih2x43sq4)
-      cjstoesm: 1.1.4(typescript@4.6.4)
-      dotenv: 8.6.0
-      env-paths: 2.2.1
-      event-target-shim: 6.0.2
-      formdata-node: 2.5.0
-      html-rewriter-wasm: 0.3.2
+      acorn: 8.10.0
+      acorn-walk: 8.2.0(acorn@8.10.0)
+      better-sqlite3: 8.5.0
+      capnp-ts: 0.7.0
+      exit-hook: 2.2.1
+      glob-to-regexp: 0.4.1
       http-cache-semantics: 4.1.0
-      ioredis: 4.28.5
-      kleur: 4.1.4
-      node-cron: 2.0.3
-      picomatch: 2.3.1
-      sanitize-filename: 1.6.3
-      selfsigned: 1.10.14
-      semiver: 1.1.0
+      kleur: 4.1.5
+      set-cookie-parser: 2.6.0
       source-map-support: 0.5.21
-      tslib: 2.6.1
-      typescript: 4.6.4
-      typeson: 6.1.0
-      typeson-registry: 1.0.0-alpha.39
-      web-streams-polyfill: 3.2.1
-      ws: 7.5.7
-      yargs: 16.2.0
-      youch: 2.2.2
+      stoppable: 1.1.0
+      undici: 5.23.0
+      workerd: 1.20230807.0
+      ws: 8.13.0
+      youch: 3.2.3
+      zod: 3.21.4
     transitivePeerDependencies:
       - bufferutil
       - supports-color
@@ -7931,6 +7868,10 @@ packages:
       yallist: 4.0.0
     dev: false
 
+  /mkdirp-classic@0.5.3:
+    resolution: {integrity: sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==}
+    dev: true
+
   /mkdirp@1.0.4:
     resolution: {integrity: sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==}
     engines: {node: '>=10'}
@@ -8013,6 +7954,10 @@ packages:
     engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
     hasBin: true
 
+  /napi-build-utils@1.0.2:
+    resolution: {integrity: sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==}
+    dev: true
+
   /natural-compare-lite@1.4.0:
     resolution: {integrity: sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==}
     dev: true
@@ -8051,19 +7996,17 @@ packages:
     resolution: {integrity: sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==}
     dev: true
 
+  /node-abi@3.45.0:
+    resolution: {integrity: sha512-iwXuFrMAcFVi/ZoZiqq8BzAdsLw9kxDfTC0HMyjXfSL/6CSDAGD5UmR7azrAgWV1zKYq7dUUMj4owusBWKLsiQ==}
+    engines: {node: '>=10'}
+    dependencies:
+      semver: 7.5.4
+    dev: true
+
   /node-addon-api@5.0.0:
     resolution: {integrity: sha512-CvkDw2OEnme7ybCykJpVcKH+uAOLV2qLqiyla128dN9TkEWfrYmxG6C2boDe5KcNQqZF3orkqzGgOMvZ/JNekA==}
     dev: false
 
-  /node-cron@2.0.3:
-    resolution: {integrity: sha512-eJI+QitXlwcgiZwNNSRbqsjeZMp5shyajMR81RZCqeW0ZDEj4zU9tpd4nTh/1JsBiKbF8d08FCewiipDmVIYjg==}
-    engines: {node: '>=6.0.0'}
-    requiresBuild: true
-    dependencies:
-      opencollective-postinstall: 2.0.3
-      tz-offset: 0.0.1
-    dev: true
-
   /node-domexception@1.0.0:
     resolution: {integrity: sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==}
     engines: {node: '>=10.5.0'}
@@ -8090,11 +8033,6 @@ packages:
       formdata-polyfill: 4.0.10
     dev: true
 
-  /node-forge@0.10.0:
-    resolution: {integrity: sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA==}
-    engines: {node: '>= 6.0.0'}
-    dev: true
-
   /node-releases@2.0.13:
     resolution: {integrity: sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==}
 
@@ -8292,11 +8230,6 @@ packages:
       is-wsl: 2.2.0
     dev: true
 
-  /opencollective-postinstall@2.0.3:
-    resolution: {integrity: sha512-8AV/sCtuzUeTo8gQK5qDZzARrulB3egtLzFgteqB2tcT4Mw7B8Kt7JcDHmltjz6FOAHsvTevk70gZEbhM4ZS9Q==}
-    hasBin: true
-    dev: true
-
   /optionator@0.9.3:
     resolution: {integrity: sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==}
     engines: {node: '>= 0.8.0'}
@@ -8358,11 +8291,6 @@ packages:
       p-limit: 3.1.0
     dev: true
 
-  /p-map@2.1.0:
-    resolution: {integrity: sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==}
-    engines: {node: '>=6'}
-    dev: true
-
   /p-map@4.0.0:
     resolution: {integrity: sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==}
     engines: {node: '>=10'}
@@ -8699,6 +8627,25 @@ packages:
     resolution: {integrity: sha512-giqJXP8VbtA1tyGa3f1n9wiN7PrHtONrDyE3T+ifjr/tTkg+2N4d/6sjC9WyJKv8wM7rOYDveqy5ZoFmYlwo4w==}
     dev: true
 
+  /prebuild-install@7.1.1:
+    resolution: {integrity: sha512-jAXscXWMcCK8GgCoHOfIr0ODh5ai8mj63L2nWrjuAgXE6tDyYGnx4/8o/rCgU+B4JSyZBKbeZqzhtwtC3ovxjw==}
+    engines: {node: '>=10'}
+    hasBin: true
+    dependencies:
+      detect-libc: 2.0.1
+      expand-template: 2.0.3
+      github-from-package: 0.0.0
+      minimist: 1.2.8
+      mkdirp-classic: 0.5.3
+      napi-build-utils: 1.0.2
+      node-abi: 3.45.0
+      pump: 3.0.0
+      rc: 1.2.8
+      simple-get: 4.0.1
+      tar-fs: 2.1.1
+      tunnel-agent: 0.6.0
+    dev: true
+
   /prelude-ls@1.2.1:
     resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==}
     engines: {node: '>= 0.8.0'}
@@ -8724,6 +8671,10 @@ packages:
       react-is: 18.2.0
     dev: true
 
+  /printable-characters@1.0.42:
+    resolution: {integrity: sha512-dKp+C4iXWK4vVYZmYSd0KBH5F/h1HoZRsbJ82AVKRO3PEo8L4lBS/vLwhVtpwwuYcoIsVY+1JYKR268yn480uQ==}
+    dev: true
+
   /process-nextick-args@2.0.1:
     resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==}
     dev: true
@@ -8860,6 +8811,13 @@ packages:
       pug-strip-comments: 2.0.0
     dev: true
 
+  /pump@3.0.0:
+    resolution: {integrity: sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==}
+    dependencies:
+      end-of-stream: 1.4.4
+      once: 1.4.0
+    dev: true
+
   /punycode@1.4.1:
     resolution: {integrity: sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==}
 
@@ -8868,17 +8826,6 @@ packages:
     engines: {node: '>=6'}
     dev: true
 
-  /pvtsutils@1.3.2:
-    resolution: {integrity: sha512-+Ipe2iNUyrZz+8K/2IOo+kKikdtfhRKzNpQbruF2URmqPtoqAs8g3xS7TJvFF2GcPXjh7DkqMnpVveRFq4PgEQ==}
-    dependencies:
-      tslib: 2.6.1
-    dev: true
-
-  /pvutils@1.1.3:
-    resolution: {integrity: sha512-pMpnA0qRdFp32b1sJl1wOJNxZLQ2cbQx+k6tjNtZ8CpvVhNqEPRgivZ2WOUev2YMajecdH7ctUPDvEe87nariQ==}
-    engines: {node: '>=6.0.0'}
-    dev: true
-
   /qs@6.11.0:
     resolution: {integrity: sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==}
     engines: {node: '>=0.6'}
@@ -8906,6 +8853,16 @@ packages:
       iconv-lite: 0.4.24
       unpipe: 1.0.0
 
+  /rc@1.2.8:
+    resolution: {integrity: sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==}
+    hasBin: true
+    dependencies:
+      deep-extend: 0.6.0
+      ini: 1.3.8
+      minimist: 1.2.8
+      strip-json-comments: 2.0.1
+    dev: true
+
   /react-dom@18.2.0(react@18.2.0):
     resolution: {integrity: sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==}
     peerDependencies:
@@ -9002,22 +8959,6 @@ packages:
       strip-indent: 3.0.0
     dev: true
 
-  /redis-commands@1.7.0:
-    resolution: {integrity: sha512-nJWqw3bTFy21hX/CPKHth6sfhZbdiHP6bTawSgQBlKOVRG7EZkfHbbHwQJnrE4vsQf0CMNE+3gJ4Fmm16vdVlQ==}
-    dev: true
-
-  /redis-errors@1.2.0:
-    resolution: {integrity: sha1-62LSrbFeTq9GEMBK/hUpOEJQq60=}
-    engines: {node: '>=4'}
-    dev: true
-
-  /redis-parser@3.0.0:
-    resolution: {integrity: sha1-tm2CjNyv5rS4pCin3vTGvKwxyLQ=}
-    engines: {node: '>=4'}
-    dependencies:
-      redis-errors: 1.2.0
-    dev: true
-
   /refa@0.11.0:
     resolution: {integrity: sha512-486O8/pQXwj9jV0mVvUnTsxq0uknpBnNJ0eCUhkZqJRQ8KutrT1PhzmumdCeM1hSBF2eMlFPmwECRER4IbKXlQ==}
     engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0}
@@ -9100,10 +9041,6 @@ packages:
     resolution: {integrity: sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=}
     dev: true
 
-  /reserved-words@0.1.2:
-    resolution: {integrity: sha1-AKCUD5jNUBrqqsMWQR2a3FKzGrE=}
-    dev: true
-
   /resolve-from@4.0.0:
     resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==}
     engines: {node: '>=4'}
@@ -9260,12 +9197,6 @@ packages:
   /safer-buffer@2.1.2:
     resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==}
 
-  /sanitize-filename@1.6.3:
-    resolution: {integrity: sha512-y/52Mcy7aw3gRm7IrcGDFx/bCk4AhRh2eI9luHOQM86nZsqwiRkkq2GekHXBBD+SmPidc8i2PqtYZl+pWJ8Oeg==}
-    dependencies:
-      truncate-utf8-bytes: 1.0.2
-    dev: true
-
   /sass@1.64.2:
     resolution: {integrity: sha512-TnDlfc+CRnUAgLO9D8cQLFu/GIjJIzJCGkE7o4ekIGQOH7T3GetiRR/PsTWJUHhkzcSPrARkPI+gNWn5alCzDg==}
     engines: {node: '>=14.0.0'}
@@ -9302,17 +9233,6 @@ packages:
     resolution: {integrity: sha1-DnNQrN7ICxEIUoeG7B1EGNEbOW0=}
     dev: false
 
-  /selfsigned@1.10.14:
-    resolution: {integrity: sha512-lkjaiAye+wBZDCBsu5BGi0XiLRxeUlsGod5ZP924CRSEoGuZAw/f7y9RKu28rwTfiHVhdavhB0qH0INV6P1lEA==}
-    dependencies:
-      node-forge: 0.10.0
-    dev: true
-
-  /semiver@1.1.0:
-    resolution: {integrity: sha512-QNI2ChmuioGC1/xjyYwyZYADILWyW6AmS1UH6gDj/SFUUUS4MBAWs/7mxnkRPc/F4iHezDP+O8t0dO8WHiEOdg==}
-    engines: {node: '>=6'}
-    dev: true
-
   /semver@5.7.2:
     resolution: {integrity: sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==}
     hasBin: true
@@ -9364,6 +9284,10 @@ packages:
     resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==}
     dev: false
 
+  /set-cookie-parser@2.6.0:
+    resolution: {integrity: sha512-RVnVQxTXuerk653XfuliOxBP81Sf0+qfQE73LIYKcyMYHG94AuH0kgrQpRDuTZnSmjpysHmzxJXKNfa6PjFhyQ==}
+    dev: true
+
   /setprototypeof@1.2.0:
     resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==}
 
@@ -9427,6 +9351,18 @@ packages:
     engines: {node: '>=14'}
     dev: true
 
+  /simple-concat@1.0.1:
+    resolution: {integrity: sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==}
+    dev: true
+
+  /simple-get@4.0.1:
+    resolution: {integrity: sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==}
+    dependencies:
+      decompress-response: 6.0.0
+      once: 1.4.0
+      simple-concat: 1.0.1
+    dev: true
+
   /simple-git-hooks@2.9.0:
     resolution: {integrity: sha512-waSQ5paUQtyGC0ZxlHmcMmD9I1rRXauikBwX31bX58l5vTOhCEcBC5Bi+ZDkPXTjDnZAF8TbCqKBY+9+sVPScw==}
     hasBin: true
@@ -9576,16 +9512,15 @@ packages:
     resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==}
     dev: true
 
-  /stack-trace@0.0.10:
-    resolution: {integrity: sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA=}
-    dev: true
-
   /stackback@0.0.2:
     resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==}
     dev: true
 
-  /standard-as-callback@2.1.0:
-    resolution: {integrity: sha512-qoRRSyROncaz1z0mvYqIE4lCd9p2R90i6GxW3uZv5ucSu8tU7B5HXUP1gG8pVZsYNVaXjk8ClXHPttLyxAL48A==}
+  /stacktracey@2.1.8:
+    resolution: {integrity: sha512-Kpij9riA+UNg7TnphqjH7/CzctQ/owJGNbFkfEeve4Z4uxT5+JapVLFXcsurIfN34gnTWZNJ/f7NMG0E8JDzTw==}
+    dependencies:
+      as-table: 1.0.55
+      get-source: 2.0.12
     dev: true
 
   /statuses@1.5.0:
@@ -9601,9 +9536,14 @@ packages:
     resolution: {integrity: sha512-Rz6yejtVyWnVjC1RFvNmYL10kgjC49EOghxWn0RFqlCHGFpQx+Xe7yW3I4ceK1SGrWIGMjD5Kbue8W/udkbMJg==}
     dev: true
 
-  /streamsearch@0.1.2:
-    resolution: {integrity: sha1-gIudDlb8Jz2Am6VzOOkpkZoanxo=}
-    engines: {node: '>=0.8.0'}
+  /stoppable@1.1.0:
+    resolution: {integrity: sha512-KXDYZ9dszj6bzvnEMRYvxgeTHU74QBFL54XKtP3nyMuJ81CFYtABZ3bAzL2EdFUaEwJOBOgENyFj3R7oTzDyyw==}
+    engines: {node: '>=4', npm: '>=6'}
+    dev: true
+
+  /streamsearch@1.1.0:
+    resolution: {integrity: sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==}
+    engines: {node: '>=10.0.0'}
     dev: true
 
   /string-argv@0.3.1:
@@ -9707,6 +9647,11 @@ packages:
       min-indent: 1.0.1
     dev: true
 
+  /strip-json-comments@2.0.1:
+    resolution: {integrity: sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==}
+    engines: {node: '>=0.10.0'}
+    dev: true
+
   /strip-json-comments@3.1.1:
     resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==}
     engines: {node: '>=8'}
@@ -9806,6 +9751,26 @@ packages:
     transitivePeerDependencies:
       - ts-node
 
+  /tar-fs@2.1.1:
+    resolution: {integrity: sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==}
+    dependencies:
+      chownr: 1.1.4
+      mkdirp-classic: 0.5.3
+      pump: 3.0.0
+      tar-stream: 2.2.0
+    dev: true
+
+  /tar-stream@2.2.0:
+    resolution: {integrity: sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==}
+    engines: {node: '>=6'}
+    dependencies:
+      bl: 4.1.0
+      end-of-stream: 1.4.4
+      fs-constants: 1.0.0
+      inherits: 2.0.4
+      readable-stream: 3.6.0
+    dev: true
+
   /tar@6.1.11:
     resolution: {integrity: sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA==}
     engines: {node: '>= 10'}
@@ -9918,24 +9883,11 @@ packages:
     resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==}
     dev: false
 
-  /tr46@2.1.0:
-    resolution: {integrity: sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==}
-    engines: {node: '>=8'}
-    dependencies:
-      punycode: 2.1.1
-    dev: true
-
   /trim-newlines@3.0.1:
     resolution: {integrity: sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==}
     engines: {node: '>=8'}
     dev: true
 
-  /truncate-utf8-bytes@1.0.2:
-    resolution: {integrity: sha512-95Pu1QXQvruGEhv62XCMO3Mm90GscOCClvrIUwCM0PYOXK3kaF3l3sIHxx71ThJfcbM2O5Au6SO3AWCSEfW4mQ==}
-    dependencies:
-      utf8-byte-length: 1.0.4
-    dev: true
-
   /ts-api-utils@1.0.1(typescript@5.0.2):
     resolution: {integrity: sha512-lC/RGlPmwdrIBFTX59wwNzqh7aR2otPNPR/5brHZm/XKFYKsfqxihXUe9pU3JI+3vGkl+vyCoNNnPhJn3aLK1A==}
     engines: {node: '>=16.13.0'}
@@ -10015,6 +9967,12 @@ packages:
       fsevents: 2.3.2
     dev: true
 
+  /tunnel-agent@0.6.0:
+    resolution: {integrity: sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==}
+    dependencies:
+      safe-buffer: 5.2.1
+    dev: true
+
   /type-check@0.4.0:
     resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==}
     engines: {node: '>= 0.8.0'}
@@ -10105,12 +10063,6 @@ packages:
       is-typed-array: 1.1.10
     dev: true
 
-  /typescript@4.6.4:
-    resolution: {integrity: sha512-9ia/jWHIEbo49HfjrLGfKbZSuWo9iTMwXO+Ca3pRsSpbsMbc7/IU8NKdCZVRRBafVPGnoJeFL76ZOAA84I9fEg==}
-    engines: {node: '>=4.2.0'}
-    hasBin: true
-    dev: true
-
   /typescript@5.0.2:
     resolution: {integrity: sha512-wVORMBGO/FAs/++blGNeAVdbNKtIh1rbBL2EyQ1+J9lClJ93KiiKe8PmFIVdXhHcyv44SL9oglmfeSsndo0jRw==}
     engines: {node: '>=12.20'}
@@ -10122,24 +10074,6 @@ packages:
     hasBin: true
     dev: true
 
-  /typeson-registry@1.0.0-alpha.39:
-    resolution: {integrity: sha512-NeGDEquhw+yfwNhguLPcZ9Oj0fzbADiX4R0WxvoY8nGhy98IbzQy1sezjoEFWOywOboj/DWehI+/aUlRVrJnnw==}
-    engines: {node: '>=10.0.0'}
-    dependencies:
-      base64-arraybuffer-es6: 0.7.0
-      typeson: 6.1.0
-      whatwg-url: 8.7.0
-    dev: true
-
-  /typeson@6.1.0:
-    resolution: {integrity: sha512-6FTtyGr8ldU0pfbvW/eOZrEtEkczHRUtduBnA90Jh9kMPCiFNnXIon3vF41N0S4tV1HHQt4Hk1j4srpESziCaA==}
-    engines: {node: '>=0.1.14'}
-    dev: true
-
-  /tz-offset@0.0.1:
-    resolution: {integrity: sha512-kMBmblijHJXyOpKzgDhKx9INYU4u4E1RPMB0HqmKSgWG8vEcf3exEfLh4FFfzd3xdQOw9EuIy/cP0akY6rHopQ==}
-    dev: true
-
   /ufo@1.2.0:
     resolution: {integrity: sha512-RsPyTbqORDNDxqAdQPQBpgqhWle1VcTSou/FraClYlHf6TZnQcGslpLcAphNR+sQW4q5lLWLbOsRlh9j24baQg==}
     dev: true
@@ -10195,6 +10129,13 @@ packages:
       - supports-color
     dev: true
 
+  /undici@5.23.0:
+    resolution: {integrity: sha512-1D7w+fvRsqlQ9GscLBwcAJinqcZGHUKjbOmXdlE/v8BvEGXjeWAax+341q44EuTcHXXnfyKNbKRq4Lg7OzhMmg==}
+    engines: {node: '>=14.0'}
+    dependencies:
+      busboy: 1.6.0
+    dev: true
+
   /unicode-canonical-property-names-ecmascript@2.0.0:
     resolution: {integrity: sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==}
     engines: {node: '>=4'}
@@ -10269,10 +10210,6 @@ packages:
       punycode: 1.4.1
       qs: 6.11.0
 
-  /utf8-byte-length@1.0.4:
-    resolution: {integrity: sha512-4+wkEYLBbWxqTahEsWrhxepcoVOJ+1z5PGIjPZxRkytcdSUaNjIjBM7Xn8E+pdSuV7SzvWovBFA54FO0JSoqhA==}
-    dev: true
-
   /util-deprecate@1.0.2:
     resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==}
 
@@ -10476,25 +10413,10 @@ packages:
     engines: {node: '>= 8'}
     dev: true
 
-  /webcrypto-core@1.7.3:
-    resolution: {integrity: sha512-8TnMtwwC/hQOyvElAOJ26lJKGgcErUG02KnKS1+QhjV4mDvQetVWU1EUEeLF8ICOrdc42+GypocyBJKRqo2kQg==}
-    dependencies:
-      '@peculiar/asn1-schema': 2.1.0
-      '@peculiar/json-schema': 1.1.12
-      asn1js: 2.4.0
-      pvtsutils: 1.3.2
-      tslib: 2.6.1
-    dev: true
-
   /webidl-conversions@3.0.1:
     resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==}
     dev: false
 
-  /webidl-conversions@6.1.0:
-    resolution: {integrity: sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==}
-    engines: {node: '>=10.4'}
-    dev: true
-
   /whatwg-url@5.0.0:
     resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==}
     dependencies:
@@ -10502,15 +10424,6 @@ packages:
       webidl-conversions: 3.0.1
     dev: false
 
-  /whatwg-url@8.7.0:
-    resolution: {integrity: sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==}
-    engines: {node: '>=10'}
-    dependencies:
-      lodash: 4.17.21
-      tr46: 2.1.0
-      webidl-conversions: 6.1.0
-    dev: true
-
   /which-boxed-primitive@1.0.2:
     resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==}
     dependencies:
@@ -10588,6 +10501,19 @@ packages:
     resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==}
     dev: true
 
+  /workerd@1.20230807.0:
+    resolution: {integrity: sha512-yDdHld8wm5lQ6M/WYD68tIzbAmPjcgAoVAYhAHQFaXZSpryjIw9mT3O/NEloyZ8xiickpoPuNSQ4ffxPLao2+Q==}
+    engines: {node: '>=16'}
+    hasBin: true
+    requiresBuild: true
+    optionalDependencies:
+      '@cloudflare/workerd-darwin-64': 1.20230807.0
+      '@cloudflare/workerd-darwin-arm64': 1.20230807.0
+      '@cloudflare/workerd-linux-64': 1.20230807.0
+      '@cloudflare/workerd-linux-arm64': 1.20230807.0
+      '@cloudflare/workerd-windows-64': 1.20230807.0
+    dev: true
+
   /wrap-ansi@6.2.0:
     resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==}
     engines: {node: '>=8'}
@@ -10609,19 +10535,6 @@ packages:
   /wrappy@1.0.2:
     resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
 
-  /ws@7.5.7:
-    resolution: {integrity: sha512-KMvVuFzpKBuiIXW3E4u3mySRO2/mCHSyZDJQM5NQ9Q9KHWHWh0NHgfbRMLLrceUK5qAL4ytALJbpRMjixFZh8A==}
-    engines: {node: '>=8.3.0'}
-    peerDependencies:
-      bufferutil: ^4.0.1
-      utf-8-validate: ^5.0.2
-    peerDependenciesMeta:
-      bufferutil:
-        optional: true
-      utf-8-validate:
-        optional: true
-    dev: true
-
   /ws@8.13.0:
     resolution: {integrity: sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==}
     engines: {node: '>=10.0.0'}
@@ -10692,13 +10605,12 @@ packages:
     engines: {node: '>=12.20'}
     dev: true
 
-  /youch@2.2.2:
-    resolution: {integrity: sha512-/FaCeG3GkuJwaMR34GHVg0l8jCbafZLHiFowSjqLlqhC6OMyf2tPJBu8UirF7/NI9X/R5ai4QfEKUCOxMAGxZQ==}
+  /youch@3.2.3:
+    resolution: {integrity: sha512-ZBcWz/uzZaQVdCvfV4uk616Bbpf2ee+F/AvuKDR5EwX/Y4v06xWdtMluqTD7+KlZdM93lLm9gMZYo0sKBS0pgw==}
     dependencies:
-      '@types/stack-trace': 0.0.29
-      cookie: 0.4.2
+      cookie: 0.5.0
       mustache: 4.2.0
-      stack-trace: 0.0.10
+      stacktracey: 2.1.8
     dev: true
 
   /z-schema@5.0.3:
@@ -10713,6 +10625,10 @@ packages:
       commander: 2.20.3
     dev: true
 
+  /zod@3.21.4:
+    resolution: {integrity: sha512-m46AKbrzKVzOzs/DZgVnG5H55N1sv1M8qZU3A8RIKbs3mrACDNeIOeilDymVb2HdmP8uwshOCF4uJ8uM9rCqJw==}
+    dev: true
+
   file:playground/alias/dir/module:
     resolution: {directory: playground/alias/dir/module, type: directory}
     name: '@vitejs/test-aliased-module'

From 443c235beec4b7b68a0d191e101ec85f4df02f67 Mon Sep 17 00:00:00 2001
From: patak 
Date: Mon, 21 Aug 2023 11:51:26 +0200
Subject: [PATCH 25/29] feat: copyPublicDir out of experimental (#14051)

---
 docs/config/build-options.md                   |  1 -
 packages/vite/src/node/build.ts                |  1 -
 playground/resolve/__tests__/resolve.spec.ts   | 10 +++++++++-
 playground/resolve/public/should-not-be-copied |  0
 playground/resolve/vite.config.js              |  3 +++
 5 files changed, 12 insertions(+), 3 deletions(-)
 create mode 100644 playground/resolve/public/should-not-be-copied

diff --git a/docs/config/build-options.md b/docs/config/build-options.md
index 9679a5d2d406b0..c2c240249c6523 100644
--- a/docs/config/build-options.md
+++ b/docs/config/build-options.md
@@ -218,7 +218,6 @@ By default, Vite will empty the `outDir` on build if it is inside project root.
 
 ## build.copyPublicDir
 
-- **Experimental:** [Give feedback](https://github.com/vitejs/vite/discussions/13807)
 - **Type:** `boolean`
 - **Default:** `true`
 
diff --git a/packages/vite/src/node/build.ts b/packages/vite/src/node/build.ts
index 0794eb74a5873e..d8935a90b99d78 100644
--- a/packages/vite/src/node/build.ts
+++ b/packages/vite/src/node/build.ts
@@ -179,7 +179,6 @@ export interface BuildOptions {
   /**
    * Copy the public directory to outDir on write.
    * @default true
-   * @experimental
    */
   copyPublicDir?: boolean
   /**
diff --git a/playground/resolve/__tests__/resolve.spec.ts b/playground/resolve/__tests__/resolve.spec.ts
index 90d02a761258e6..4a753149552bf2 100644
--- a/playground/resolve/__tests__/resolve.spec.ts
+++ b/playground/resolve/__tests__/resolve.spec.ts
@@ -1,5 +1,7 @@
+import fs from 'node:fs'
+import path from 'node:path'
 import { expect, test } from 'vitest'
-import { isBuild, isWindows, page } from '~utils'
+import { isBuild, isWindows, page, testDir } from '~utils'
 
 test('bom import', async () => {
   expect(await page.textContent('.utf8-bom')).toMatch('[success]')
@@ -199,3 +201,9 @@ test('Resolving slash with imports filed', async () => {
 test('Resolving from other package with imports field', async () => {
   expect(await page.textContent('.imports-pkg-slash')).toMatch('[success]')
 })
+
+test.runIf(isBuild)('public dir is not copied', async () => {
+  expect(
+    fs.existsSync(path.resolve(testDir, 'dist/should-not-be-copied')),
+  ).toBe(false)
+})
diff --git a/playground/resolve/public/should-not-be-copied b/playground/resolve/public/should-not-be-copied
new file mode 100644
index 00000000000000..e69de29bb2d1d6
diff --git a/playground/resolve/vite.config.js b/playground/resolve/vite.config.js
index f4d923d1a05ae0..b27df23e734eeb 100644
--- a/playground/resolve/vite.config.js
+++ b/playground/resolve/vite.config.js
@@ -107,4 +107,7 @@ export default defineConfig({
       '@vitejs/test-resolve-sharp-dir',
     ],
   },
+  build: {
+    copyPublicDir: false,
+  },
 })

From 632385c1d3b2b8cc2ea9071a9df563044b228354 Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Mon, 21 Aug 2023 21:10:13 +0800
Subject: [PATCH 26/29] chore(deps): update dependency lint-staged to v14
 (#14093)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
---
 package.json   |   2 +-
 pnpm-lock.yaml | 185 ++++++++++++++++++-------------------------------
 2 files changed, 70 insertions(+), 117 deletions(-)

diff --git a/package.json b/package.json
index e1eea1c98f1a95..40936c06348ef3 100644
--- a/package.json
+++ b/package.json
@@ -74,7 +74,7 @@
     "execa": "^7.2.0",
     "fast-glob": "^3.3.1",
     "fs-extra": "^11.1.1",
-    "lint-staged": "^13.2.3",
+    "lint-staged": "^14.0.1",
     "npm-run-all": "^4.1.5",
     "picocolors": "^1.0.0",
     "playwright-chromium": "^1.36.2",
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 1e2c6b2b9fd5ab..8ab381c7d07339 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -124,8 +124,8 @@ importers:
         specifier: ^11.1.1
         version: 11.1.1
       lint-staged:
-        specifier: ^13.2.3
-        version: 13.2.3
+        specifier: ^14.0.1
+        version: 14.0.1
       npm-run-all:
         specifier: ^4.1.5
         version: 4.1.5
@@ -4345,14 +4345,6 @@ packages:
       - supports-color
     dev: false
 
-  /aggregate-error@3.1.0:
-    resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==}
-    engines: {node: '>=8'}
-    dependencies:
-      clean-stack: 2.2.0
-      indent-string: 4.0.0
-    dev: true
-
   /ajv@6.12.6:
     resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==}
     dependencies:
@@ -4381,11 +4373,11 @@ packages:
       '@algolia/transporter': 4.13.1
     dev: true
 
-  /ansi-escapes@4.3.2:
-    resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==}
-    engines: {node: '>=8'}
+  /ansi-escapes@5.0.0:
+    resolution: {integrity: sha512-5GFMVX8HqE/TB+FuBJGuO5XG0WrsA6ptUqoODaT/n9mmUaZFkqnBueB4leqGBCmrUHnCnC4PCZTCd0E7QQ83bA==}
+    engines: {node: '>=12'}
     dependencies:
-      type-fest: 0.21.3
+      type-fest: 1.4.0
     dev: true
 
   /ansi-regex@5.0.1:
@@ -4563,11 +4555,6 @@ packages:
     resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==}
     dev: true
 
-  /astral-regex@2.0.0:
-    resolution: {integrity: sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==}
-    engines: {node: '>=8'}
-    dev: true
-
   /asynckit@0.4.0:
     resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==}
     dev: false
@@ -4862,6 +4849,11 @@ packages:
     engines: {node: ^12.17.0 || ^14.13 || >=16.0.0}
     dev: true
 
+  /chalk@5.3.0:
+    resolution: {integrity: sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==}
+    engines: {node: ^12.17.0 || ^14.13 || >=16.0.0}
+    dev: true
+
   /character-parser@2.2.0:
     resolution: {integrity: sha1-x84o821LzZdE5f/CxfzeHHMmH8A=}
     dependencies:
@@ -4896,24 +4888,11 @@ packages:
     engines: {node: '>=10'}
     dev: false
 
-  /clean-stack@2.2.0:
-    resolution: {integrity: sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==}
-    engines: {node: '>=6'}
-    dev: true
-
-  /cli-cursor@3.1.0:
-    resolution: {integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==}
-    engines: {node: '>=8'}
-    dependencies:
-      restore-cursor: 3.1.0
-    dev: true
-
-  /cli-truncate@2.1.0:
-    resolution: {integrity: sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==}
-    engines: {node: '>=8'}
+  /cli-cursor@4.0.0:
+    resolution: {integrity: sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==}
+    engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
     dependencies:
-      slice-ansi: 3.0.0
-      string-width: 4.2.3
+      restore-cursor: 4.0.0
     dev: true
 
   /cli-truncate@3.1.0:
@@ -4964,8 +4943,8 @@ packages:
     hasBin: true
     dev: false
 
-  /colorette@2.0.19:
-    resolution: {integrity: sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==}
+  /colorette@2.0.20:
+    resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==}
     dev: true
 
   /colors@1.2.5:
@@ -4980,9 +4959,9 @@ packages:
       delayed-stream: 1.0.0
     dev: false
 
-  /commander@10.0.0:
-    resolution: {integrity: sha512-zS5PnTI22FIRM6ylNW8G4Ap0IEOyk62fhLSD0+uHRT9McRCLGpkVNvao4bjimpK/GShynyQkFFxHhwMcETmduA==}
-    engines: {node: '>=14'}
+  /commander@11.0.0:
+    resolution: {integrity: sha512-9HMlXtt/BNoYr8ooyjjNRdIilOTkVJXB+GhxMTtOKwk0R4j4lS4NpjuqmRxroBfnfTSHQIHQB7wryHhXarNjmQ==}
+    engines: {node: '>=16'}
     dev: true
 
   /commander@2.20.3:
@@ -6191,6 +6170,10 @@ packages:
     resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==}
     dev: true
 
+  /eventemitter3@5.0.1:
+    resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==}
+    dev: true
+
   /execa@7.2.0:
     resolution: {integrity: sha512-UduyVP7TLB5IcAQl+OzLyLcS/l32W/GLg+AhHJ+ow40FOk2U3SAllPwR44v4vmdFwIWqpdwxxpQbF1n5ta9seA==}
     engines: {node: ^14.18.0 || ^16.14.0 || >=18.0.0}
@@ -7491,46 +7474,41 @@ packages:
   /lines-and-columns@1.2.4:
     resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==}
 
-  /lint-staged@13.2.3:
-    resolution: {integrity: sha512-zVVEXLuQIhr1Y7R7YAWx4TZLdvuzk7DnmrsTNL0fax6Z3jrpFcas+vKbzxhhvp6TA55m1SQuWkpzI1qbfDZbAg==}
-    engines: {node: ^14.13.1 || >=16.0.0}
+  /lint-staged@14.0.1:
+    resolution: {integrity: sha512-Mw0cL6HXnHN1ag0mN/Dg4g6sr8uf8sn98w2Oc1ECtFto9tvRF7nkXGJRbx8gPlHyoR0pLyBr2lQHbWwmUHe1Sw==}
+    engines: {node: ^16.14.0 || >=18.0.0}
     hasBin: true
     dependencies:
-      chalk: 5.2.0
-      cli-truncate: 3.1.0
-      commander: 10.0.0
+      chalk: 5.3.0
+      commander: 11.0.0
       debug: 4.3.4
       execa: 7.2.0
       lilconfig: 2.1.0
-      listr2: 5.0.8
+      listr2: 6.6.1
       micromatch: 4.0.5
-      normalize-path: 3.0.0
-      object-inspect: 1.12.3
       pidtree: 0.6.0
-      string-argv: 0.3.1
+      string-argv: 0.3.2
       yaml: 2.3.1
     transitivePeerDependencies:
       - enquirer
       - supports-color
     dev: true
 
-  /listr2@5.0.8:
-    resolution: {integrity: sha512-mC73LitKHj9w6v30nLNGPetZIlfpUniNSsxxrbaPcWOjDb92SHPzJPi/t+v1YC/lxKz/AJ9egOjww0qUuFxBpA==}
-    engines: {node: ^14.13.1 || >=16.0.0}
+  /listr2@6.6.1:
+    resolution: {integrity: sha512-+rAXGHh0fkEWdXBmX+L6mmfmXmXvDGEKzkjxO+8mP3+nI/r/CWznVBvsibXdxda9Zz0OW2e2ikphN3OwCT/jSg==}
+    engines: {node: '>=16.0.0'}
     peerDependencies:
       enquirer: '>= 2.3.0 < 3'
     peerDependenciesMeta:
       enquirer:
         optional: true
     dependencies:
-      cli-truncate: 2.1.0
-      colorette: 2.0.19
-      log-update: 4.0.0
-      p-map: 4.0.0
+      cli-truncate: 3.1.0
+      colorette: 2.0.20
+      eventemitter3: 5.0.1
+      log-update: 5.0.1
       rfdc: 1.3.0
-      rxjs: 7.8.0
-      through: 2.3.8
-      wrap-ansi: 7.0.0
+      wrap-ansi: 8.1.0
     dev: true
 
   /load-json-file@4.0.0:
@@ -7610,14 +7588,15 @@ packages:
   /lodash@4.17.21:
     resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==}
 
-  /log-update@4.0.0:
-    resolution: {integrity: sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==}
-    engines: {node: '>=10'}
+  /log-update@5.0.1:
+    resolution: {integrity: sha512-5UtUDQ/6edw4ofyljDNcOVJQ4c7OjDro4h3y8e1GQL5iYElYclVHJ3zeWchylvMaKnDbDilC8irOVyexnA/Slw==}
+    engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
     dependencies:
-      ansi-escapes: 4.3.2
-      cli-cursor: 3.1.0
-      slice-ansi: 4.0.0
-      wrap-ansi: 6.2.0
+      ansi-escapes: 5.0.0
+      cli-cursor: 4.0.0
+      slice-ansi: 5.0.0
+      strip-ansi: 7.1.0
+      wrap-ansi: 8.1.0
     dev: true
 
   /loose-envify@1.4.0:
@@ -8291,13 +8270,6 @@ packages:
       p-limit: 3.1.0
     dev: true
 
-  /p-map@4.0.0:
-    resolution: {integrity: sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==}
-    engines: {node: '>=10'}
-    dependencies:
-      aggregate-error: 3.1.0
-    dev: true
-
   /p-try@1.0.0:
     resolution: {integrity: sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==}
     engines: {node: '>=4'}
@@ -9082,9 +9054,9 @@ packages:
       path-parse: 1.0.7
       supports-preserve-symlinks-flag: 1.0.0
 
-  /restore-cursor@3.1.0:
-    resolution: {integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==}
-    engines: {node: '>=8'}
+  /restore-cursor@4.0.0:
+    resolution: {integrity: sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==}
+    engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
     dependencies:
       onetime: 5.1.2
       signal-exit: 3.0.7
@@ -9156,12 +9128,6 @@ packages:
     dependencies:
       queue-microtask: 1.2.3
 
-  /rxjs@7.8.0:
-    resolution: {integrity: sha512-F2+gxDshqmIub1KdvZkaEfGDwLNpPvk9Fs6LD/MyQxNgMds/WH9OdDDXOmxUZpME+iSK3rQCctkL0DYyytUqMg==}
-    dependencies:
-      tslib: 2.6.1
-    dev: true
-
   /sade@1.8.1:
     resolution: {integrity: sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==}
     engines: {node: '>=6'}
@@ -9396,24 +9362,6 @@ packages:
     resolution: {integrity: sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==}
     engines: {node: '>=14.16'}
 
-  /slice-ansi@3.0.0:
-    resolution: {integrity: sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==}
-    engines: {node: '>=8'}
-    dependencies:
-      ansi-styles: 4.3.0
-      astral-regex: 2.0.0
-      is-fullwidth-code-point: 3.0.0
-    dev: true
-
-  /slice-ansi@4.0.0:
-    resolution: {integrity: sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==}
-    engines: {node: '>=10'}
-    dependencies:
-      ansi-styles: 4.3.0
-      astral-regex: 2.0.0
-      is-fullwidth-code-point: 3.0.0
-    dev: true
-
   /slice-ansi@5.0.0:
     resolution: {integrity: sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==}
     engines: {node: '>=12'}
@@ -9551,6 +9499,11 @@ packages:
     engines: {node: '>=0.6.19'}
     dev: true
 
+  /string-argv@0.3.2:
+    resolution: {integrity: sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==}
+    engines: {node: '>=0.6.19'}
+    dev: true
+
   /string-hash@1.1.3:
     resolution: {integrity: sha512-kJUvRUFK49aub+a7T1nNE66EJbZBMnBgoC1UbCZ5n6bsZKBRga4KgBRTMn/pFkeCZSYtNeSyMxPDM0AXWELk2A==}
     dev: true
@@ -9995,11 +9948,6 @@ packages:
     engines: {node: '>=10'}
     dev: true
 
-  /type-fest@0.21.3:
-    resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==}
-    engines: {node: '>=10'}
-    dev: true
-
   /type-fest@0.6.0:
     resolution: {integrity: sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==}
     engines: {node: '>=8'}
@@ -10010,6 +9958,11 @@ packages:
     engines: {node: '>=8'}
     dev: true
 
+  /type-fest@1.4.0:
+    resolution: {integrity: sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==}
+    engines: {node: '>=10'}
+    dev: true
+
   /type-is@1.6.18:
     resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==}
     engines: {node: '>= 0.6'}
@@ -10514,15 +10467,6 @@ packages:
       '@cloudflare/workerd-windows-64': 1.20230807.0
     dev: true
 
-  /wrap-ansi@6.2.0:
-    resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==}
-    engines: {node: '>=8'}
-    dependencies:
-      ansi-styles: 4.3.0
-      string-width: 4.2.3
-      strip-ansi: 6.0.1
-    dev: true
-
   /wrap-ansi@7.0.0:
     resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==}
     engines: {node: '>=10'}
@@ -10532,6 +10476,15 @@ packages:
       strip-ansi: 6.0.1
     dev: true
 
+  /wrap-ansi@8.1.0:
+    resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==}
+    engines: {node: '>=12'}
+    dependencies:
+      ansi-styles: 6.1.0
+      string-width: 5.1.2
+      strip-ansi: 7.1.0
+    dev: true
+
   /wrappy@1.0.2:
     resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
 

From 61e801d10da8d67f6886993e4a723014d3865a08 Mon Sep 17 00:00:00 2001
From: btea <2356281422@qq.com>
Date: Mon, 21 Aug 2023 21:27:43 +0800
Subject: [PATCH 27/29] fix(client): correctly display the config file name
 (#14160)

---
 packages/vite/src/client/overlay.ts                | 4 +++-
 packages/vite/src/node/plugins/clientInjections.ts | 3 +++
 2 files changed, 6 insertions(+), 1 deletion(-)

diff --git a/packages/vite/src/client/overlay.ts b/packages/vite/src/client/overlay.ts
index 9951510f916a30..508eaf7e05bc9e 100644
--- a/packages/vite/src/client/overlay.ts
+++ b/packages/vite/src/client/overlay.ts
@@ -2,7 +2,9 @@ import type { ErrorPayload } from 'types/hmrPayload'
 
 // injected by the hmr plugin when served
 declare const __BASE__: string
+declare const __HMR_CONFIG_NAME__: string
 
+const hmrConfigName = __HMR_CONFIG_NAME__
 const base = __BASE__ || '/'
 
 // set :host styles to make playwright detect the element as visible
@@ -142,7 +144,7 @@ kbd {
     
Click outside, press Esc key, or fix the code to dismiss.
You can also disable this overlay by setting - server.hmr.overlay to false in vite.config.js. + server.hmr.overlay to false in ${hmrConfigName}.
diff --git a/packages/vite/src/node/plugins/clientInjections.ts b/packages/vite/src/node/plugins/clientInjections.ts index 5ac79c8d14ef8e..2a773542aef58c 100644 --- a/packages/vite/src/node/plugins/clientInjections.ts +++ b/packages/vite/src/node/plugins/clientInjections.ts @@ -35,6 +35,7 @@ export function clientInjectionsPlugin(config: ResolvedConfig): Plugin { const timeout = hmrConfig?.timeout || 30000 const overlay = hmrConfig?.overlay !== false const isHmrServerSpecified = !!hmrConfig?.server + const hmrConfigName = path.basename(config.configFile || 'vite.config.js') // hmr.clientPort -> hmr.port // -> (24678 if middleware mode and HMR server is not specified) -> new URL(import.meta.url).port @@ -65,6 +66,7 @@ export function clientInjectionsPlugin(config: ResolvedConfig): Plugin { const hmrBaseReplacement = escapeReplacement(hmrBase) const hmrTimeoutReplacement = escapeReplacement(timeout) const hmrEnableOverlayReplacement = escapeReplacement(overlay) + const hmrConfigNameReplacement = escapeReplacement(hmrConfigName) injectConfigValues = (code: string) => { return code @@ -79,6 +81,7 @@ export function clientInjectionsPlugin(config: ResolvedConfig): Plugin { .replace(`__HMR_BASE__`, hmrBaseReplacement) .replace(`__HMR_TIMEOUT__`, hmrTimeoutReplacement) .replace(`__HMR_ENABLE_OVERLAY__`, hmrEnableOverlayReplacement) + .replace(`__HMR_CONFIG_NAME__`, hmrConfigNameReplacement) } }, transform(code, id, options) { From dfde97f50eb4809bf55270c67e0e579afdca5c12 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 22 Aug 2023 15:47:58 +0800 Subject: [PATCH 28/29] chore(deps): update dependency execa to v8 (#14166) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: bluwy --- package.json | 2 +- pnpm-lock.yaml | 34 ++++++++++++++++++++++++++++++++-- scripts/releaseUtils.ts | 4 ++-- 3 files changed, 35 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index 40936c06348ef3..2dd3d289ce511a 100644 --- a/package.json +++ b/package.json @@ -71,7 +71,7 @@ "eslint-plugin-import": "^2.28.0", "eslint-plugin-n": "^16.0.1", "eslint-plugin-regexp": "^1.15.0", - "execa": "^7.2.0", + "execa": "^8.0.1", "fast-glob": "^3.3.1", "fs-extra": "^11.1.1", "lint-staged": "^14.0.1", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 8ab381c7d07339..9cf1f27d174515 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -115,8 +115,8 @@ importers: specifier: ^1.15.0 version: 1.15.0(eslint@8.46.0) execa: - specifier: ^7.2.0 - version: 7.2.0 + specifier: ^8.0.1 + version: 8.0.1 fast-glob: specifier: ^3.3.1 version: 3.3.1 @@ -6189,6 +6189,21 @@ packages: strip-final-newline: 3.0.0 dev: true + /execa@8.0.1: + resolution: {integrity: sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==} + engines: {node: '>=16.17'} + dependencies: + cross-spawn: 7.0.3 + get-stream: 8.0.1 + human-signals: 5.0.0 + is-stream: 3.0.0 + merge-stream: 2.0.0 + npm-run-path: 5.1.0 + onetime: 6.0.0 + signal-exit: 4.1.0 + strip-final-newline: 3.0.0 + dev: true + /exit-hook@2.2.1: resolution: {integrity: sha512-eNTPlAD67BmP31LDINZ3U7HSF8l57TxOY2PmBJ1shpCvpnxBF93mWCE8YHBnXs8qiUZJc9WDcWIeC3a2HIAMfw==} engines: {node: '>=6'} @@ -6547,6 +6562,11 @@ packages: engines: {node: '>=10'} dev: true + /get-stream@8.0.1: + resolution: {integrity: sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==} + engines: {node: '>=16'} + dev: true + /get-symbol-description@1.0.0: resolution: {integrity: sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==} engines: {node: '>= 0.4'} @@ -6846,6 +6866,11 @@ packages: engines: {node: '>=14.18.0'} dev: true + /human-signals@5.0.0: + resolution: {integrity: sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==} + engines: {node: '>=16.17.0'} + dev: true + /iconv-lite@0.4.24: resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} engines: {node: '>=0.10.0'} @@ -9317,6 +9342,11 @@ packages: engines: {node: '>=14'} dev: true + /signal-exit@4.1.0: + resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} + engines: {node: '>=14'} + dev: true + /simple-concat@1.0.1: resolution: {integrity: sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==} dev: true diff --git a/scripts/releaseUtils.ts b/scripts/releaseUtils.ts index c2315ab883667f..95ffb13ad725b6 100644 --- a/scripts/releaseUtils.ts +++ b/scripts/releaseUtils.ts @@ -8,8 +8,8 @@ import fs from 'fs-extra' export async function run( bin: string, args: string[], - opts: ExecaOptions = {}, -): Promise> { + opts: ExecaOptions = {}, +): Promise { return execa(bin, args, { stdio: 'inherit', ...opts }) } From c39e6c1ccfcb37ff3328a6f5487e11a8f753cec1 Mon Sep 17 00:00:00 2001 From: btea <2356281422@qq.com> Date: Tue, 22 Aug 2023 16:04:28 +0800 Subject: [PATCH 29/29] fix: if host is specified check whether it is valid (#14013) --- packages/vite/src/node/cli.ts | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/packages/vite/src/node/cli.ts b/packages/vite/src/node/cli.ts index df858f403f80c5..f6d3c9b6d6fd15 100644 --- a/packages/vite/src/node/cli.ts +++ b/packages/vite/src/node/cli.ts @@ -102,6 +102,16 @@ function cleanOptions( return ret } +/** + * host may be a number (like 0), should convert to string + */ +const convertHost = (v: any) => { + if (typeof v === 'number') { + return String(v) + } + return v +} + cli .option('-c, --config ', `[string] use specified config file`) .option('--base ', `[string] public base path (default: /)`) @@ -116,7 +126,7 @@ cli .command('[root]', 'start dev server') // default command .alias('serve') // the command is called 'serve' in Vite's API .alias('dev') // alias to align with the script name - .option('--host [host]', `[string] specify hostname`) + .option('--host [host]', `[string] specify hostname`, { type: [convertHost] }) .option('--port ', `[number] specify port`) .option('--https', `[boolean] use TLS + HTTP/2`) .option('--open [path]', `[boolean | string] open browser on startup`) @@ -306,7 +316,7 @@ cli // preview cli .command('preview [root]', 'locally preview production build') - .option('--host [host]', `[string] specify hostname`) + .option('--host [host]', `[string] specify hostname`, { type: [convertHost] }) .option('--port ', `[number] specify port`) .option('--strictPort', `[boolean] exit if specified port is already in use`) .option('--https', `[boolean] use TLS + HTTP/2`)