From 524088f395fd60eaaa5e33539aec717fc70ac0b9 Mon Sep 17 00:00:00 2001 From: Aral Roca Date: Fri, 28 Nov 2025 18:59:18 +0100 Subject: [PATCH 1/8] fix: avoid full-reload in scss modules --- packages/astro/src/vite-plugin-hmr-reload/index.ts | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/packages/astro/src/vite-plugin-hmr-reload/index.ts b/packages/astro/src/vite-plugin-hmr-reload/index.ts index cf151eef6605..c795aa849568 100644 --- a/packages/astro/src/vite-plugin-hmr-reload/index.ts +++ b/packages/astro/src/vite-plugin-hmr-reload/index.ts @@ -1,5 +1,7 @@ import type { EnvironmentModuleNode, Plugin } from 'vite'; +const STYLE_EXT_REGEX = /\.css|scss|sass|less|styl|pcss$/i; + /** * The very last Vite plugin to reload the browser if any SSR-only module are updated * which will require a full page reload. This mimics the behaviour of Vite 5 where @@ -19,6 +21,8 @@ export default function hmrReload(): Plugin { const invalidatedModules = new Set(); for (const mod of modules) { if (mod.id == null) continue; + if (mod.file && STYLE_EXT_REGEX.test(mod.file)) continue; + const clientModule = server.environments.client.moduleGraph.getModuleById(mod.id); if (clientModule != null) continue; From 5df6cc0357a82d7fe5188ff43aff0deaf7fc0ac8 Mon Sep 17 00:00:00 2001 From: Aral Roca Date: Fri, 28 Nov 2025 19:07:58 +0100 Subject: [PATCH 2/8] fix: improve regex --- packages/astro/src/vite-plugin-hmr-reload/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/astro/src/vite-plugin-hmr-reload/index.ts b/packages/astro/src/vite-plugin-hmr-reload/index.ts index c795aa849568..b011e8d0b7af 100644 --- a/packages/astro/src/vite-plugin-hmr-reload/index.ts +++ b/packages/astro/src/vite-plugin-hmr-reload/index.ts @@ -1,6 +1,6 @@ import type { EnvironmentModuleNode, Plugin } from 'vite'; -const STYLE_EXT_REGEX = /\.css|scss|sass|less|styl|pcss$/i; +const STYLE_EXT_REGEX = /\.(css|scss|sass|less|styl|pcss)$/i; /** * The very last Vite plugin to reload the browser if any SSR-only module are updated From 525cd4b0414ef348f620b2c7c4560c1e96b62669 Mon Sep 17 00:00:00 2001 From: Princesseuh <3019731+Princesseuh@users.noreply.github.com> Date: Mon, 19 Jan 2026 23:14:23 +0100 Subject: [PATCH 3/8] fix: ci --- .../fixtures/hmr/src/pages/scss-external.astro | 11 +++++++++++ .../fixtures/hmr/src/styles/scss-external.scss | 3 +++ packages/astro/e2e/hmr.test.js | 15 +++++++++++++++ .../astro/src/vite-plugin-hmr-reload/index.ts | 2 +- 4 files changed, 30 insertions(+), 1 deletion(-) create mode 100644 packages/astro/e2e/fixtures/hmr/src/pages/scss-external.astro create mode 100644 packages/astro/e2e/fixtures/hmr/src/styles/scss-external.scss diff --git a/packages/astro/e2e/fixtures/hmr/src/pages/scss-external.astro b/packages/astro/e2e/fixtures/hmr/src/pages/scss-external.astro new file mode 100644 index 000000000000..0461ddbea3a4 --- /dev/null +++ b/packages/astro/e2e/fixtures/hmr/src/pages/scss-external.astro @@ -0,0 +1,11 @@ + + + Test + + +

This is blue

+ + + diff --git a/packages/astro/e2e/fixtures/hmr/src/styles/scss-external.scss b/packages/astro/e2e/fixtures/hmr/src/styles/scss-external.scss new file mode 100644 index 000000000000..2d50a9a94ea2 --- /dev/null +++ b/packages/astro/e2e/fixtures/hmr/src/styles/scss-external.scss @@ -0,0 +1,3 @@ +.scss-external { + color: blue; +} diff --git a/packages/astro/e2e/hmr.test.js b/packages/astro/e2e/hmr.test.js index 6eeddc1ec920..913e33812085 100644 --- a/packages/astro/e2e/hmr.test.js +++ b/packages/astro/e2e/hmr.test.js @@ -83,4 +83,19 @@ test.describe('Styles', () => { ); await expect(h).toHaveCSS('color', 'rgb(255, 0, 0)'); }); + + test('external SCSS refresh with HMR', async ({ page, astro }) => { + await page.goto(astro.resolveUrl('/scss-external')); + + page.once('load', throwPageShouldNotReload); + + const h = page.locator('h1'); + await expect(h).toHaveCSS('color', 'rgb(0, 0, 255)'); + + await astro.editFile('./src/styles/scss-external.scss', (original) => + original.replace('blue', 'red'), + ); + + await expect(h).toHaveCSS('color', 'rgb(255, 0, 0)'); + }); }); diff --git a/packages/astro/src/vite-plugin-hmr-reload/index.ts b/packages/astro/src/vite-plugin-hmr-reload/index.ts index b011e8d0b7af..6cc7cc90a303 100644 --- a/packages/astro/src/vite-plugin-hmr-reload/index.ts +++ b/packages/astro/src/vite-plugin-hmr-reload/index.ts @@ -1,6 +1,6 @@ import type { EnvironmentModuleNode, Plugin } from 'vite'; -const STYLE_EXT_REGEX = /\.(css|scss|sass|less|styl|pcss)$/i; +const STYLE_EXT_REGEX = /\.(?:css|scss|sass|less|styl|pcss)$/i; /** * The very last Vite plugin to reload the browser if any SSR-only module are updated From 6e6f3c9732c1f9367cd16ad9f51e2309cc8a4724 Mon Sep 17 00:00:00 2001 From: Princesseuh <3019731+Princesseuh@users.noreply.github.com> Date: Wed, 21 Jan 2026 15:13:16 +0100 Subject: [PATCH 4/8] test: add test for modules --- .../e2e/fixtures/hmr/src/pages/scss-module.astro | 12 ++++++++++++ .../hmr/src/styles/scss-module.module.scss | 3 +++ packages/astro/e2e/hmr.test.js | 15 +++++++++++++++ 3 files changed, 30 insertions(+) create mode 100644 packages/astro/e2e/fixtures/hmr/src/pages/scss-module.astro create mode 100644 packages/astro/e2e/fixtures/hmr/src/styles/scss-module.module.scss diff --git a/packages/astro/e2e/fixtures/hmr/src/pages/scss-module.astro b/packages/astro/e2e/fixtures/hmr/src/pages/scss-module.astro new file mode 100644 index 000000000000..e15d2621022b --- /dev/null +++ b/packages/astro/e2e/fixtures/hmr/src/pages/scss-module.astro @@ -0,0 +1,12 @@ +--- +import styles from '../styles/scss-module.module.scss'; +--- + + + + Test + + +

This is blue

+ + diff --git a/packages/astro/e2e/fixtures/hmr/src/styles/scss-module.module.scss b/packages/astro/e2e/fixtures/hmr/src/styles/scss-module.module.scss new file mode 100644 index 000000000000..a8d0d7789396 --- /dev/null +++ b/packages/astro/e2e/fixtures/hmr/src/styles/scss-module.module.scss @@ -0,0 +1,3 @@ +.scssModule { + color: blue; +} diff --git a/packages/astro/e2e/hmr.test.js b/packages/astro/e2e/hmr.test.js index 913e33812085..7238d9798458 100644 --- a/packages/astro/e2e/hmr.test.js +++ b/packages/astro/e2e/hmr.test.js @@ -98,4 +98,19 @@ test.describe('Styles', () => { await expect(h).toHaveCSS('color', 'rgb(255, 0, 0)'); }); + + test('SCSS modules refresh with HMR', async ({ page, astro }) => { + await page.goto(astro.resolveUrl('/scss-module')); + + page.once('load', throwPageShouldNotReload); + + const h = page.locator('h1'); + await expect(h).toHaveCSS('color', 'rgb(0, 0, 255)'); + + await astro.editFile('./src/styles/scss-module.module.scss', (original) => + original.replace('blue', 'red'), + ); + + await expect(h).toHaveCSS('color', 'rgb(255, 0, 0)'); + }); }); From f57b4fb931930d117df9398fcf11598e23e9ee81 Mon Sep 17 00:00:00 2001 From: Aral Roca Date: Sun, 22 Mar 2026 18:18:34 +0100 Subject: [PATCH 5/8] fix(hmr): prevent full-reload for SCSS/CSS module changes MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit SCSS and CSS module file changes were triggering unnecessary full page reloads during development instead of applying HMR updates. This broke the developer experience by losing component state and scroll position on every style edit. Root cause: In the `astro:hmr-reload` Vite plugin, style files (CSS, SCSS, SASS, LESS, etc.) in the SSR module graph were correctly skipped via a regex check, but the handler returned `undefined` instead of an empty array. In Vite 6, returning `undefined` from a `hotUpdate` hook means "I didn't handle this", causing Vite to propagate through the SSR module graph to `.astro` importers. Since `.astro` pages have no HMR boundary, this triggered a full page reload. Changes to `vite-plugin-hmr-reload`: - Extract `isStyleModule()` helper that checks both `mod.file` and `mod.id` (stripping query params like `?inline`, `?used`) against the style extension regex. This correctly identifies all style-related modules including CSS module variants. - Return `[]` (empty array) when only style modules were encountered in the SSR environment. This tells Vite "handled, nothing to update in SSR", preventing the propagation chain that caused full reloads. The client environment handles CSS HMR natively through framework-specific HMR boundaries (Preact, React, Vue, etc.). Changes to e2e test fixtures: - Update the SCSS module HMR test to use a Preact component with `client:load` instead of a pure server-rendered Astro page. This matches the real-world scenario from the original bug report (issue #14869) where Preact + SCSS modules triggered full reloads. CSS module HMR requires a client-side framework to re-render components with updated class name hashes — pure SSR pages cannot hot-update CSS module class names without a full reload. Closes #14869 --- .../astro/e2e/fixtures/hmr/astro.config.mjs | 6 +++++ packages/astro/e2e/fixtures/hmr/package.json | 4 +++ .../hmr/src/components/ScssModuleHeading.jsx | 5 ++++ .../fixtures/hmr/src/pages/scss-module.astro | 4 +-- .../astro/src/vite-plugin-hmr-reload/index.ts | 27 +++++++++++++++++-- pnpm-lock.yaml | 7 +++++ 6 files changed, 49 insertions(+), 4 deletions(-) create mode 100644 packages/astro/e2e/fixtures/hmr/astro.config.mjs create mode 100644 packages/astro/e2e/fixtures/hmr/src/components/ScssModuleHeading.jsx diff --git a/packages/astro/e2e/fixtures/hmr/astro.config.mjs b/packages/astro/e2e/fixtures/hmr/astro.config.mjs new file mode 100644 index 000000000000..7293a16829ef --- /dev/null +++ b/packages/astro/e2e/fixtures/hmr/astro.config.mjs @@ -0,0 +1,6 @@ +import preact from '@astrojs/preact'; +import { defineConfig } from 'astro/config'; + +export default defineConfig({ + integrations: [preact()], +}); diff --git a/packages/astro/e2e/fixtures/hmr/package.json b/packages/astro/e2e/fixtures/hmr/package.json index 1a8bb5d7e05c..6cbd88002873 100644 --- a/packages/astro/e2e/fixtures/hmr/package.json +++ b/packages/astro/e2e/fixtures/hmr/package.json @@ -2,6 +2,10 @@ "name": "@e2e/hmr", "version": "0.0.0", "private": true, + "dependencies": { + "@astrojs/preact": "workspace:*", + "preact": "^10.28.2" + }, "devDependencies": { "astro": "workspace:*", "sass": "^1.97.2" diff --git a/packages/astro/e2e/fixtures/hmr/src/components/ScssModuleHeading.jsx b/packages/astro/e2e/fixtures/hmr/src/components/ScssModuleHeading.jsx new file mode 100644 index 000000000000..ea791e1febb1 --- /dev/null +++ b/packages/astro/e2e/fixtures/hmr/src/components/ScssModuleHeading.jsx @@ -0,0 +1,5 @@ +import styles from '../styles/scss-module.module.scss'; + +export default function ScssModuleHeading() { + return

This is blue

; +} diff --git a/packages/astro/e2e/fixtures/hmr/src/pages/scss-module.astro b/packages/astro/e2e/fixtures/hmr/src/pages/scss-module.astro index e15d2621022b..3c5bd39d36b9 100644 --- a/packages/astro/e2e/fixtures/hmr/src/pages/scss-module.astro +++ b/packages/astro/e2e/fixtures/hmr/src/pages/scss-module.astro @@ -1,5 +1,5 @@ --- -import styles from '../styles/scss-module.module.scss'; +import ScssModuleHeading from '../components/ScssModuleHeading.jsx'; --- @@ -7,6 +7,6 @@ import styles from '../styles/scss-module.module.scss'; Test -

This is blue

+ diff --git a/packages/astro/src/vite-plugin-hmr-reload/index.ts b/packages/astro/src/vite-plugin-hmr-reload/index.ts index 6cc7cc90a303..1df23d747daf 100644 --- a/packages/astro/src/vite-plugin-hmr-reload/index.ts +++ b/packages/astro/src/vite-plugin-hmr-reload/index.ts @@ -2,6 +2,16 @@ import type { EnvironmentModuleNode, Plugin } from 'vite'; const STYLE_EXT_REGEX = /\.(?:css|scss|sass|less|styl|pcss)$/i; +function isStyleModule(mod: EnvironmentModuleNode): boolean { + if (mod.file && STYLE_EXT_REGEX.test(mod.file)) return true; + // CSS modules and other style files may have query params in their id (e.g. ?used, ?direct) + if (mod.id) { + const idPath = mod.id.split('?')[0]; + if (STYLE_EXT_REGEX.test(idPath)) return true; + } + return false; +} + /** * The very last Vite plugin to reload the browser if any SSR-only module are updated * which will require a full page reload. This mimics the behaviour of Vite 5 where @@ -17,12 +27,16 @@ export default function hmrReload(): Plugin { if (this.environment.name !== 'ssr') return; let hasSsrOnlyModules = false; + let hasSkippedStyleModules = false; const invalidatedModules = new Set(); for (const mod of modules) { if (mod.id == null) continue; - if (mod.file && STYLE_EXT_REGEX.test(mod.file)) continue; - + if (isStyleModule(mod)) { + hasSkippedStyleModules = true; + continue; + } + const clientModule = server.environments.client.moduleGraph.getModuleById(mod.id); if (clientModule != null) continue; @@ -34,6 +48,15 @@ export default function hmrReload(): Plugin { server.ws.send({ type: 'full-reload' }); return []; } + + // When style modules were skipped, return an empty array to prevent Vite's + // default SSR HMR propagation. Without this, Vite would propagate through the + // module graph to .astro importers, find no HMR acceptor, and trigger a + // full page reload. The client environment handles CSS HMR natively through + // framework-specific HMR boundaries (e.g. Preact, React, Vue components). + if (hasSkippedStyleModules) { + return []; + } }, }, }; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 40a1584d5978..b3c744da9823 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1111,6 +1111,13 @@ importers: version: 3.5.26(typescript@5.9.3) packages/astro/e2e/fixtures/hmr: + dependencies: + '@astrojs/preact': + specifier: workspace:* + version: link:../../../../integrations/preact + preact: + specifier: ^10.28.2 + version: 10.28.2 devDependencies: astro: specifier: workspace:* From cb227853f0d06c7cc4f147f07d2158d7d5c5c9af Mon Sep 17 00:00:00 2001 From: Aral Roca Date: Sun, 29 Mar 2026 14:59:36 +0200 Subject: [PATCH 6/8] fix(hmr): clarify comment about CSS HMR working for all pages The previous comment suggested CSS HMR only worked through framework-specific boundaries. Vite's built-in style update mechanism handles it for all pages, with or without framework components (covered by the scss-external test). Co-Authored-By: Claude Opus 4.6 (1M context) --- packages/astro/src/vite-plugin-hmr-reload/index.ts | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/packages/astro/src/vite-plugin-hmr-reload/index.ts b/packages/astro/src/vite-plugin-hmr-reload/index.ts index 994b8b6bc4ef..a504939a618a 100644 --- a/packages/astro/src/vite-plugin-hmr-reload/index.ts +++ b/packages/astro/src/vite-plugin-hmr-reload/index.ts @@ -67,8 +67,9 @@ export default function hmrReload(): Plugin { // When style modules were skipped, return an empty array to prevent Vite's // default SSR HMR propagation. Without this, Vite would propagate through the // module graph to .astro importers, find no HMR acceptor, and trigger a - // full page reload. The client environment handles CSS HMR natively through - // framework-specific HMR boundaries (e.g. Preact, React, Vue components). + // full page reload. The client environment handles CSS HMR natively via + // Vite's built-in style update mechanism, which works for all pages + // (with or without framework components). if (hasSkippedStyleModules) { return []; } From 151b02b325ee8266c037abb87c81fd2d29eefed8 Mon Sep 17 00:00:00 2001 From: Matthew Phillips Date: Fri, 3 Apr 2026 15:01:57 -0400 Subject: [PATCH 7/8] update pnpm-lock.yaml --- pnpm-lock.yaml | 319 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 319 insertions(+) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index d7aa4cc1d036..83c3b91e5c94 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -7162,6 +7162,15 @@ importers: specifier: ^3.1.6 version: 3.1.6(typescript@5.9.3) + triage/current: + dependencies: + '@astrojs/vercel': + specifier: ^10.0.0-beta.4 + version: link:../../packages/integrations/vercel + astro: + specifier: 6.0.0-beta.11 + version: 6.0.0-beta.11(@azure/identity@4.13.0)(@netlify/blobs@10.7.0)(@types/node@25.2.3)(@vercel/functions@3.4.3)(jiti@2.6.1)(lightningcss@1.31.1)(rollup@4.58.0)(sass@1.97.3)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.2) + packages: '@antfu/utils@0.7.10': @@ -7272,6 +7281,16 @@ packages: '@astrojs/compiler@3.0.0': resolution: {integrity: sha512-MwAbDE5mawZ1SS+D8qWiHdprdME5Tlj2e0YjxnEICvcOpbSukNS7Sa7hA5PK+6RrmUr/t6Gi5YgrdZKjbO/WPQ==} + '@astrojs/internal-helpers@0.8.0-beta.1': + resolution: {integrity: sha512-nX39HmVNrto0AwlGnk6Vj8fQ35v4VVIuSxsbvaANGeAIK7uAjOY3ca7xz+gejWeqGbY7vkGk6vsz3i0jTClCSQ==} + + '@astrojs/markdown-remark@7.0.0-beta.6': + resolution: {integrity: sha512-6SRUg3feMrLUyKdjPXrrzE1Gmb+x1jDKqoUmZZcbMzByipCZKAi82DmbuZmRqg7Bb49xGW+iS/F8urOPz8/L+A==} + + '@astrojs/prism@4.0.0-beta.2': + resolution: {integrity: sha512-3snR85nTXnXvgmFJ43AacCQcylk+mpsiQ5Gmr9hcR5IrEA6+EvaYfaF9jlxZqJIZYey/9ubSRmaERtwDhV/FeA==} + engines: {node: ^20.19.1 || >=22.12.0} + '@astrojs/solid-js@5.1.3': resolution: {integrity: sha512-KxfYt4y1d7BuSw6EsN1EaPoGYsIES7bEI6AtTbncuabRUUMZs+mOWOeOdmgnwVLj+jbNbhBjUZsqr77eUviZdw==} engines: {node: 18.20.8 || ^20.3.0 || >=22.0.0} @@ -7282,6 +7301,10 @@ packages: solid-devtools: optional: true + '@astrojs/telemetry@3.3.0': + resolution: {integrity: sha512-UFBgfeldP06qu6khs/yY+q1cDAaArM2/7AEIqQ9Cuvf7B1hNLq0xDrZkct+QoIGyjq56y8IaE2I3CTvG99mlhQ==} + engines: {node: 18.20.8 || ^20.3.0 || >=22.0.0} + '@astrojs/vue@5.1.4': resolution: {integrity: sha512-srE+3tgSnGG4FVr7Bs9JAgLcUAg1mtGrbBFdwlj++Y05Awwlc967WCcmOK6rnxQ6q5PcK5+WL2x2tKoWh5SN7A==} engines: {node: 18.20.8 || ^20.3.0 || >=22.0.0} @@ -9860,18 +9883,30 @@ packages: resolution: {integrity: sha512-Nqc90v4lWCXyakD6xNyNACBJNJ0tNCwj2WNk/7ivyacYHxiITVgmLUFXTBOeCdy79iz6HtN9Y31uw/jbLrdOAg==} engines: {node: '>=20.0.0'} + '@shikijs/core@3.23.0': + resolution: {integrity: sha512-NSWQz0riNb67xthdm5br6lAkvpDJRTgB36fxlo37ZzM2yq0PQFFzbd8psqC2XMPgCzo1fW6cVi18+ArJ44wqgA==} + '@shikijs/core@4.0.0': resolution: {integrity: sha512-tvV94Dwyz4qFZ8R0MUaFx5Yptgy8yrloa4dwynEJDGjKz+8vqO8Q6FmPZL9W1gSzFHOUMOGQzIHK62aGourFxA==} engines: {node: '>=20'} + '@shikijs/engine-javascript@3.23.0': + resolution: {integrity: sha512-aHt9eiGFobmWR5uqJUViySI1bHMqrAgamWE1TYSUoftkAeCCAiGawPMwM+VCadylQtF4V3VNOZ5LmfItH5f3yA==} + '@shikijs/engine-javascript@4.0.0': resolution: {integrity: sha512-+PEyTS+JTz2lLy2C1Dwwx6hzoehIzqxQYh5MEjv9V4JtSabx+bIkRHfQT+6DnBmPAplGH0exBknWeiJSXC7w1w==} engines: {node: '>=20'} + '@shikijs/engine-oniguruma@3.23.0': + resolution: {integrity: sha512-1nWINwKXxKKLqPibT5f4pAFLej9oZzQTsby8942OTlsJzOBZ0MWKiwzMsd+jhzu8YPCHAswGnnN1YtQfirL35g==} + '@shikijs/engine-oniguruma@4.0.0': resolution: {integrity: sha512-KXmq4b6Xw16+4+rz5M4NZMoe/tzs5kTOMSJz8+LCyxSrwmxwTBAM/ab85iSO2Gw79E47HkW4B9HPHUXhrNOivw==} engines: {node: '>=20'} + '@shikijs/langs@3.23.0': + resolution: {integrity: sha512-2Ep4W3Re5aB1/62RSYQInK9mM3HsLeB91cHqznAJMuylqjzNVAVCMnNWRHFtcNHXsoNRayP9z1qj4Sq3nMqYXg==} + '@shikijs/langs@4.0.0': resolution: {integrity: sha512-dSAT6fBcnOcYZQMWZO8+OmzUKKm+OO0As/qZ3TXLiSy0JsCTEYz1TaX7TDupnYLz7dr0oF2DOTEgPocx1D3aFw==} engines: {node: '>=20'} @@ -9884,6 +9919,9 @@ packages: resolution: {integrity: sha512-zvvK1H763oSOH7jh2eVMYwM2zDEVVqboSn4ChIC1W8SnB5kQwanZYdIWJrWJPlzCjyd8loHlp0a9mOTds8QtGA==} engines: {node: '>=20'} + '@shikijs/themes@3.23.0': + resolution: {integrity: sha512-5qySYa1ZgAT18HR/ypENL9cUSGOeI2x+4IvYJu4JgVJdizn6kG4ia5Q1jDEOi7gTbN4RbuYtmHh0W3eccOrjMA==} + '@shikijs/themes@4.0.0': resolution: {integrity: sha512-xe42kvxOXan5ouXxULez6qwDNUJkoP6kicfg0wKuJBkeIaHLxZBZa2gEGYutL1q27DQZ5+XoR6caVX+E/aNR5A==} engines: {node: '>=20'} @@ -9894,6 +9932,9 @@ packages: peerDependencies: typescript: '>=5.5.0' + '@shikijs/types@3.23.0': + resolution: {integrity: sha512-3JZ5HXOZfYjsYSk0yPwBrkupyYSLpAE26Qc0HLghhZNGTZg/SKxXIIgoxOpmmeQP0RRSDJTk1/vPfw9tbw+jSQ==} + '@shikijs/types@4.0.0': resolution: {integrity: sha512-LCnfBTtQKNtJyc1qMShZr2dJt1uxNI6pI0/YTc2DSNET91aUvnMGHUHsucVCC5AJVcv5XyBqk2NgYRwd20EjbA==} engines: {node: '>=20'} @@ -10749,6 +10790,9 @@ packages: alpinejs@3.15.8: resolution: {integrity: sha512-zxIfCRTBGvF1CCLIOMQOxAyBuqibxSEwS6Jm1a3HGA9rgrJVcjEWlwLcQTVGAWGS8YhAsTRLVrtQ5a5QT9bSSQ==} + ansi-align@3.0.1: + resolution: {integrity: sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==} + ansi-colors@4.1.3: resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==} engines: {node: '>=6'} @@ -10856,6 +10900,11 @@ packages: resolution: {integrity: sha512-jL5skNQLA0YBc1R3bVGXyHew3FqGqsT7AgLzWAVeTLzFkwVMUYvs4/lKJSmS7ygcF1GnHnoKG6++8GL9VtWwGQ==} engines: {node: '>=18.14.1'} + astro@6.0.0-beta.11: + resolution: {integrity: sha512-kQvgIJnjgnVgkAOcSXB9/iRHvw437/40dnvi+7J1RQxPAWVahh9fhNPjbCWqcQV4bblzG3SAQLSJCf7FcKnV8g==} + engines: {node: ^20.19.1 || >=22.12.0, npm: '>=9.6.5', pnpm: '>=7.1.0'} + hasBin: true + async-sema@3.1.1: resolution: {integrity: sha512-tLRNUXati5MFePdAk8dw7Qt7DpxPB60ofAgn8WRhW6a2rcimZnYBP9oxHiv0OHy+Wz7kPMG+t4LGdt31+4EmGg==} @@ -10938,6 +10987,9 @@ packages: bare-abort-controller: optional: true + base-64@1.0.0: + resolution: {integrity: sha512-kwDPIFCGx0NZHog36dj+tHiwP4QMzsZ3AgMViUBKI0+V5n4U0ufTCUMhnQ04diaRI8EX/QcPfql7zlhZ7j4zgg==} + base64-js@1.5.1: resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} @@ -10995,6 +11047,10 @@ packages: boundary@2.0.0: resolution: {integrity: sha512-rJKn5ooC9u8q13IMCrW0RSp31pxBCHE3y9V/tp3TdWSLf8Em3p6Di4NBpfzbJge9YjjFEsD0RtFEjtvHL5VyEA==} + boxen@8.0.1: + resolution: {integrity: sha512-F3PH5k5juxom4xktynS7MoFY+NUWH5LC4CnH11YB8NPew+HLpmBLCybSAEyb2F+4pRXhuhWqFesoQd6DAyc2hw==} + engines: {node: '>=18'} + brace-expansion@1.1.12: resolution: {integrity: sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==} @@ -11081,6 +11137,10 @@ packages: resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} engines: {node: '>=10'} + camelcase@8.0.0: + resolution: {integrity: sha512-8WB3Jcas3swSvjIeA2yvCJ+Miyz5l1ZmB6HFb9R1317dt9LCQoswg/BGrmAmkWVEszSrrg4RwmO46qIm2OEnSA==} + engines: {node: '>=16'} + caniuse-lite@1.0.30001774: resolution: {integrity: sha512-DDdwPGz99nmIEv216hKSgLD+D4ikHQHjBC/seF98N9CPqRX4M5mSxT9eTV6oyisnJcuzxtZy4n17yKKQYmYQOA==} @@ -11175,6 +11235,10 @@ packages: cjs-module-lexer@1.4.3: resolution: {integrity: sha512-9z8TZaGM1pfswYeXrUpzPrkx8UnWYdhJclsiYMm6x/w5+nN+8Tf/LnAgfLGQCm59qAOxU8WwHEq2vNwF6i4j+Q==} + cli-boxes@3.0.0: + resolution: {integrity: sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g==} + engines: {node: '>=10'} + cli-cursor@4.0.0: resolution: {integrity: sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} @@ -11606,6 +11670,10 @@ packages: peerDependencies: typescript: ^5.4.4 + deterministic-object-hash@2.0.2: + resolution: {integrity: sha512-KxektNH63SrbfUyDiwXqRb1rLwKt33AmMv+5Nhsw1kqZ13SJBRTgZHtGbE+hH3a1mVW1cz+4pqSWVPAtLVXTzQ==} + engines: {node: '>=18'} + dettle@1.0.5: resolution: {integrity: sha512-ZVyjhAJ7sCe1PNXEGveObOH9AC8QvMga3HJIghHawtG7mE4K5pW9nz/vDGAr/U7a3LWgdOzEE7ac9MURnyfaTA==} @@ -12916,6 +12984,10 @@ packages: keyv@4.5.4: resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} + kleur@3.0.3: + resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==} + engines: {node: '>=6'} + kleur@4.1.5: resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==} engines: {node: '>=6'} @@ -14285,6 +14357,10 @@ packages: promise-limit@2.7.0: resolution: {integrity: sha512-7nJ6v5lnJsXwGprnGXga4wx6d1POjvi5Qmf1ivTRxTjH4Z/9Czja/UCMLVmB9N93GeWOU93XaFaEt6jbuoagNw==} + prompts@2.4.2: + resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==} + engines: {node: '>= 6'} + property-information@7.1.0: resolution: {integrity: sha512-TwEZ+X+yCJmYfL7TPUOcvBZ4QfoT5YenQiJuX//0th53DE6w0xxLEtfK3iyryQFddXuvkIk51EEgrJQ0WJkOmQ==} @@ -14733,6 +14809,9 @@ packages: resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} engines: {node: '>=8'} + shiki@3.23.0: + resolution: {integrity: sha512-55Dj73uq9ZXL5zyeRPzHQsK7Nbyt6Y10k5s7OjuFZGMhpp4r/rsLBH0o/0fstIzX1Lep9VxefWljK/SKCzygIA==} + shiki@4.0.0: resolution: {integrity: sha512-rjKoiw30ZaFsM0xnPPwxco/Jftz/XXqZkcQZBTX4LGheDw8gCDEH87jdgaKDEG3FZO2bFOK27+sR/sDHhbBXfg==} engines: {node: '>=20'} @@ -15952,6 +16031,10 @@ packages: wicked-good-xpath@1.3.0: resolution: {integrity: sha512-Gd9+TUn5nXdwj/hFsPVx5cuHHiF5Bwuc30jZ4+ronF1qHK5O7HD0sgmXWSEgwKquT3ClLoKPVbO6qGwVwLzvAw==} + widest-line@5.0.0: + resolution: {integrity: sha512-c9bZp7b5YtRj2wOe6dlj32MK+Bx/M/d+9VB2SHM1OtsUHR0aV0tdP6DWh/iMt0kWi1t5g1Iudu6hQRNd1A4PVA==} + engines: {node: '>=18'} + winston-transport@4.9.0: resolution: {integrity: sha512-8drMJ4rkgaPo1Me4zD/3WLfI/zPdA9o2IipKODunnGDcuqbHwjsbB79ylv04LCGGzU0xQ6vTznOMpQGaLhhm6A==} engines: {node: '>= 12.0.0'} @@ -15994,6 +16077,10 @@ packages: resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} engines: {node: '>=12'} + wrap-ansi@9.0.2: + resolution: {integrity: sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==} + engines: {node: '>=18'} + wrappy@1.0.2: resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} @@ -16122,6 +16209,10 @@ packages: resolution: {integrity: sha512-4LCcse/U2MHZ63HAJVE+v71o7yOdIe4cZ70Wpf8D/IyjDKYQLV5GD46B+hSTjJsvV5PztjvHoU580EftxjDZFQ==} engines: {node: '>=12.20'} + yocto-spinner@1.1.0: + resolution: {integrity: sha512-/BY0AUXnS7IKO354uLLA2eRcWiqDifEbd6unXCsOxkFDAkhgUL3PH9X2bFoaU0YchnDXsF+iKleeTLJGckbXfA==} + engines: {node: '>=18.19'} + yoctocolors@2.1.2: resolution: {integrity: sha512-CzhO+pFNo8ajLM2d2IW/R93ipy99LWjtwblvC1RsoSUMZgyLbYFr221TnSNT7GjGdYui6P459mw9JH/g/zW2ug==} engines: {node: '>=18'} @@ -16255,6 +16346,37 @@ snapshots: '@astrojs/compiler@3.0.0': {} + '@astrojs/internal-helpers@0.8.0-beta.1': {} + + '@astrojs/markdown-remark@7.0.0-beta.6': + dependencies: + '@astrojs/internal-helpers': 0.8.0-beta.1 + '@astrojs/prism': 4.0.0-beta.2 + github-slugger: 2.0.0 + hast-util-from-html: 2.0.3 + hast-util-to-text: 4.0.2 + js-yaml: 4.1.1 + mdast-util-definitions: 6.0.0 + rehype-raw: 7.0.0 + rehype-stringify: 10.0.1 + remark-gfm: 4.0.1 + remark-parse: 11.0.0 + remark-rehype: 11.1.2 + remark-smartypants: 3.0.2 + shiki: 3.23.0 + smol-toml: 1.6.0 + unified: 11.0.5 + unist-util-remove-position: 5.0.0 + unist-util-visit: 5.1.0 + unist-util-visit-parents: 6.0.2 + vfile: 6.0.3 + transitivePeerDependencies: + - supports-color + + '@astrojs/prism@4.0.0-beta.2': + dependencies: + prismjs: 1.30.0 + '@astrojs/solid-js@5.1.3(@types/node@25.2.3)(jiti@2.6.1)(lightningcss@1.31.1)(sass@1.97.3)(solid-js@1.9.11)(tsx@4.21.0)(yaml@2.8.2)': dependencies: solid-js: 1.9.11 @@ -16275,6 +16397,18 @@ snapshots: - tsx - yaml + '@astrojs/telemetry@3.3.0': + dependencies: + ci-info: 4.4.0 + debug: 4.4.3(supports-color@8.1.1) + dlv: 1.1.3 + dset: 3.1.4 + is-docker: 3.0.0 + is-wsl: 3.1.1 + which-pm-runs: 1.1.0 + transitivePeerDependencies: + - supports-color + '@astrojs/vue@5.1.4(@types/node@25.2.3)(astro@packages+astro)(jiti@2.6.1)(lightningcss@1.31.1)(rollup@4.58.0)(sass@1.97.3)(tsx@4.21.0)(vue@3.5.29(typescript@5.9.3))(yaml@2.8.2)': dependencies: '@vitejs/plugin-vue': 5.2.4(vite@6.4.1(@types/node@25.2.3)(jiti@2.6.1)(lightningcss@1.31.1)(sass@1.97.3)(tsx@4.21.0)(yaml@2.8.2))(vue@3.5.29(typescript@5.9.3)) @@ -18857,6 +18991,13 @@ snapshots: '@secretlint/types@10.2.2': {} + '@shikijs/core@3.23.0': + dependencies: + '@shikijs/types': 3.23.0 + '@shikijs/vscode-textmate': 10.0.2 + '@types/hast': 3.0.4 + hast-util-to-html: 9.0.5 + '@shikijs/core@4.0.0': dependencies: '@shikijs/primitive': 4.0.0 @@ -18865,17 +19006,32 @@ snapshots: '@types/hast': 3.0.4 hast-util-to-html: 9.0.5 + '@shikijs/engine-javascript@3.23.0': + dependencies: + '@shikijs/types': 3.23.0 + '@shikijs/vscode-textmate': 10.0.2 + oniguruma-to-es: 4.3.4 + '@shikijs/engine-javascript@4.0.0': dependencies: '@shikijs/types': 4.0.0 '@shikijs/vscode-textmate': 10.0.2 oniguruma-to-es: 4.3.4 + '@shikijs/engine-oniguruma@3.23.0': + dependencies: + '@shikijs/types': 3.23.0 + '@shikijs/vscode-textmate': 10.0.2 + '@shikijs/engine-oniguruma@4.0.0': dependencies: '@shikijs/types': 4.0.0 '@shikijs/vscode-textmate': 10.0.2 + '@shikijs/langs@3.23.0': + dependencies: + '@shikijs/types': 3.23.0 + '@shikijs/langs@4.0.0': dependencies: '@shikijs/types': 4.0.0 @@ -18895,6 +19051,10 @@ snapshots: unified: 11.0.5 unist-util-visit: 5.1.0 + '@shikijs/themes@3.23.0': + dependencies: + '@shikijs/types': 3.23.0 + '@shikijs/themes@4.0.0': dependencies: '@shikijs/types': 4.0.0 @@ -18908,6 +19068,11 @@ snapshots: transitivePeerDependencies: - supports-color + '@shikijs/types@3.23.0': + dependencies: + '@shikijs/vscode-textmate': 10.0.2 + '@types/hast': 3.0.4 + '@shikijs/types@4.0.0': dependencies: '@shikijs/vscode-textmate': 10.0.2 @@ -20001,6 +20166,10 @@ snapshots: dependencies: '@vue/reactivity': 3.1.5 + ansi-align@3.0.1: + dependencies: + string-width: 4.2.3 + ansi-colors@4.1.3: {} ansi-escapes@5.0.0: @@ -20106,6 +20275,103 @@ snapshots: marked-smartypants: 1.1.11(marked@12.0.2) ultrahtml: 1.6.0 + astro@6.0.0-beta.11(@azure/identity@4.13.0)(@netlify/blobs@10.7.0)(@types/node@25.2.3)(@vercel/functions@3.4.3)(jiti@2.6.1)(lightningcss@1.31.1)(rollup@4.58.0)(sass@1.97.3)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.2): + dependencies: + '@astrojs/compiler': 3.0.0 + '@astrojs/internal-helpers': 0.8.0-beta.1 + '@astrojs/markdown-remark': 7.0.0-beta.6 + '@astrojs/telemetry': 3.3.0 + '@capsizecss/unpack': 4.0.0 + '@oslojs/encoding': 1.1.0 + '@rollup/pluginutils': 5.3.0(rollup@4.58.0) + aria-query: 5.3.2 + axobject-query: 4.1.0 + boxen: 8.0.1 + ci-info: 4.4.0 + clsx: 2.1.1 + common-ancestor-path: 2.0.0 + cookie: 1.1.1 + cssesc: 3.0.0 + debug: 4.4.3(supports-color@8.1.1) + deterministic-object-hash: 2.0.2 + devalue: 5.6.3 + diff: 8.0.3 + dlv: 1.1.3 + dset: 3.1.4 + es-module-lexer: 2.0.0 + esbuild: 0.25.5 + flattie: 1.1.1 + fontace: 0.4.1 + github-slugger: 2.0.0 + html-escaper: 3.0.3 + http-cache-semantics: 4.2.0 + js-yaml: 4.1.1 + magic-string: 0.30.21 + magicast: 0.5.2 + mrmime: 2.0.1 + neotraverse: 0.6.18 + p-limit: 7.3.0 + p-queue: 9.1.0 + package-manager-detector: 1.6.0 + piccolore: 0.1.3 + picomatch: 4.0.3 + prompts: 2.4.2 + rehype: 13.0.2 + semver: 7.7.4 + shiki: 3.23.0 + smol-toml: 1.6.0 + svgo: 4.0.0 + tinyexec: 1.0.2 + tinyglobby: 0.2.15 + tsconfck: 3.1.6(typescript@5.9.3) + ultrahtml: 1.6.0 + unifont: 0.7.4 + unist-util-visit: 5.1.0 + unstorage: 1.17.4(@azure/identity@4.13.0)(@netlify/blobs@10.7.0)(@vercel/functions@3.4.3) + vfile: 6.0.3 + vite: 7.3.1(@types/node@25.2.3)(jiti@2.6.1)(lightningcss@1.31.1)(sass@1.97.3)(tsx@4.21.0)(yaml@2.8.2) + vitefu: 1.1.2(vite@7.3.1(@types/node@25.2.3)(jiti@2.6.1)(lightningcss@1.31.1)(sass@1.97.3)(tsx@4.21.0)(yaml@2.8.2)) + xxhash-wasm: 1.1.0 + yargs-parser: 22.0.0 + yocto-spinner: 1.1.0 + zod: 4.3.6 + optionalDependencies: + sharp: 0.34.5 + transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@capacitor/preferences' + - '@deno/kv' + - '@netlify/blobs' + - '@planetscale/database' + - '@types/node' + - '@upstash/redis' + - '@vercel/blob' + - '@vercel/functions' + - '@vercel/kv' + - aws4fetch + - db0 + - idb-keyval + - ioredis + - jiti + - less + - lightningcss + - rollup + - sass + - sass-embedded + - stylus + - sugarss + - supports-color + - terser + - tsx + - typescript + - uploadthing + - yaml + async-sema@3.1.1: {} async@3.2.6: {} @@ -20201,6 +20467,8 @@ snapshots: bare-events@2.8.2: {} + base-64@1.0.0: {} + base64-js@1.5.1: {} baseline-browser-mapping@2.9.19: {} @@ -20265,6 +20533,17 @@ snapshots: boundary@2.0.0: {} + boxen@8.0.1: + dependencies: + ansi-align: 3.0.1 + camelcase: 8.0.0 + chalk: 5.6.2 + cli-boxes: 3.0.0 + string-width: 7.2.0 + type-fest: 4.41.0 + widest-line: 5.0.0 + wrap-ansi: 9.0.2 + brace-expansion@1.1.12: dependencies: balanced-match: 1.0.2 @@ -20350,6 +20629,8 @@ snapshots: camelcase@6.3.0: {} + camelcase@8.0.0: {} + caniuse-lite@1.0.30001774: {} canvas-confetti@1.9.4: {} @@ -20453,6 +20734,8 @@ snapshots: cjs-module-lexer@1.4.3: {} + cli-boxes@3.0.0: {} + cli-cursor@4.0.0: dependencies: restore-cursor: 4.0.0 @@ -20825,6 +21108,10 @@ snapshots: transitivePeerDependencies: - supports-color + deterministic-object-hash@2.0.2: + dependencies: + base-64: 1.0.0 + dettle@1.0.5: {} devalue@5.6.3: {} @@ -22311,6 +22598,8 @@ snapshots: dependencies: json-buffer: 3.0.1 + kleur@3.0.3: {} + kleur@4.1.5: {} knip@5.82.1(@types/node@18.19.130)(typescript@5.9.3): @@ -24057,6 +24346,11 @@ snapshots: promise-limit@2.7.0: {} + prompts@2.4.2: + dependencies: + kleur: 3.0.3 + sisteransi: 1.0.5 + property-information@7.1.0: {} proxy-addr@2.0.7: @@ -24681,6 +24975,17 @@ snapshots: shebang-regex@3.0.0: {} + shiki@3.23.0: + dependencies: + '@shikijs/core': 3.23.0 + '@shikijs/engine-javascript': 3.23.0 + '@shikijs/engine-oniguruma': 3.23.0 + '@shikijs/langs': 3.23.0 + '@shikijs/themes': 3.23.0 + '@shikijs/types': 3.23.0 + '@shikijs/vscode-textmate': 10.0.2 + '@types/hast': 3.0.4 + shiki@4.0.0: dependencies: '@shikijs/core': 4.0.0 @@ -25964,6 +26269,10 @@ snapshots: wicked-good-xpath@1.3.0: {} + widest-line@5.0.0: + dependencies: + string-width: 7.2.0 + winston-transport@4.9.0: dependencies: logform: 2.7.0 @@ -26031,6 +26340,12 @@ snapshots: string-width: 5.1.2 strip-ansi: 7.1.2 + wrap-ansi@9.0.2: + dependencies: + ansi-styles: 6.2.3 + string-width: 7.2.0 + strip-ansi: 7.1.2 + wrappy@1.0.2: {} write-file-atomic@5.0.1: @@ -26152,6 +26467,10 @@ snapshots: yocto-queue@1.2.2: {} + yocto-spinner@1.1.0: + dependencies: + yoctocolors: 2.1.2 + yoctocolors@2.1.2: {} youch-core@0.3.3: From 28f4b2f8fa653c6a4802d679c76f78eceb046c9e Mon Sep 17 00:00:00 2001 From: Matthew Phillips Date: Mon, 13 Apr 2026 11:39:12 -0400 Subject: [PATCH 8/8] chore: add changeset for SCSS/CSS module HMR fix --- .changeset/famous-heads-flash.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/famous-heads-flash.md diff --git a/.changeset/famous-heads-flash.md b/.changeset/famous-heads-flash.md new file mode 100644 index 000000000000..063d5d274cd6 --- /dev/null +++ b/.changeset/famous-heads-flash.md @@ -0,0 +1,5 @@ +--- +'astro': patch +--- + +Fixes SCSS and CSS module file changes triggering a full page reload instead of hot-updating styles in place during development