From f6d7007e972f3956673ffd7cc8d1b4204fb4035a Mon Sep 17 00:00:00 2001 From: Dominik G Date: Sat, 17 Sep 2022 17:28:58 +0200 Subject: [PATCH] fix: update svelte-hmr and enable partial accept (#440) * fix: update svelte-hmr and enable partial accept to allow context=module updates, see issue #134 * test: harden partialAccept test (#441) * refactor: improve test logic to avoid jest syntax from hell Co-authored-by: rixo --- .changeset/little-ligers-look.md | 5 +++++ packages/e2e-tests/hmr/__tests__/hmr.spec.ts | 17 ++++++++++++++++ packages/e2e-tests/hmr/src/App.svelte | 4 ++++ .../partial-hmr/ModuleContext.svelte | 12 +++++++++++ .../components/partial-hmr/PartialHmr.svelte | 7 +++++++ .../components/partial-hmr/UsingNamed.svelte | 5 +++++ .../partial-hmr/UsingOnlyDefault.svelte | 5 +++++ packages/e2e-tests/testUtils.ts | 6 +++++- .../kit-demo-app/src/routes/about/+page.js | 2 +- packages/vite-plugin-svelte/package.json | 2 +- .../vite-plugin-svelte/src/utils/options.ts | 20 +++++++++++++++++-- pnpm-lock.yaml | 8 ++++---- 12 files changed, 84 insertions(+), 9 deletions(-) create mode 100644 .changeset/little-ligers-look.md create mode 100644 packages/e2e-tests/hmr/src/components/partial-hmr/ModuleContext.svelte create mode 100644 packages/e2e-tests/hmr/src/components/partial-hmr/PartialHmr.svelte create mode 100644 packages/e2e-tests/hmr/src/components/partial-hmr/UsingNamed.svelte create mode 100644 packages/e2e-tests/hmr/src/components/partial-hmr/UsingOnlyDefault.svelte diff --git a/.changeset/little-ligers-look.md b/.changeset/little-ligers-look.md new file mode 100644 index 000000000..62a6686f8 --- /dev/null +++ b/.changeset/little-ligers-look.md @@ -0,0 +1,5 @@ +--- +'@sveltejs/vite-plugin-svelte': patch +--- + +update svelte-hmr and enable partial hmr accept by default (fixes #134) diff --git a/packages/e2e-tests/hmr/__tests__/hmr.spec.ts b/packages/e2e-tests/hmr/__tests__/hmr.spec.ts index d1fc383f9..241ed8ff5 100644 --- a/packages/e2e-tests/hmr/__tests__/hmr.spec.ts +++ b/packages/e2e-tests/hmr/__tests__/hmr.spec.ts @@ -4,6 +4,7 @@ import { getEl, getText, editFileAndWaitForHmrComplete, + hmrCount, untilMatches, sleep, getColor, @@ -54,6 +55,10 @@ test('should respect transforms', async () => { if (!isBuild) { describe('hmr', () => { const updateHmrTest = editFileAndWaitForHmrComplete.bind(null, 'src/components/HmrTest.svelte'); + const updateModuleContext = editFileAndWaitForHmrComplete.bind( + null, + 'src/components/partial-hmr/ModuleContext.svelte' + ); const updateApp = editFileAndWaitForHmrComplete.bind(null, 'src/App.svelte'); const updateStore = editFileAndWaitForHmrComplete.bind(null, 'src/stores/hmr-stores.js'); @@ -136,6 +141,18 @@ if (!isBuild) { expect(await getText(`#hmr-test-3 .counter`)).toBe('0'); }); + test('should work when editing script context="module"', async () => { + expect(await getText(`#hmr-with-context`)).toContain('x=0 y=1 slot=1'); + expect(await getText(`#hmr-without-context`)).toContain('x=0 y=1 slot='); + expect(hmrCount('UsingNamed.svelte'), 'updates for UsingNamed.svelte').toBe(0); + expect(hmrCount('UsingDefault.svelte'), 'updates for UsingDefault.svelte').toBe(0); + await updateModuleContext((content) => content.replace('y = 1', 'y = 2')); + expect(await getText(`#hmr-with-context`)).toContain('x=0 y=2 slot=2'); + expect(await getText(`#hmr-without-context`)).toContain('x=0 y=2 slot='); + expect(hmrCount('UsingNamed.svelte'), 'updates for UsingNamed.svelte').toBe(1); + expect(hmrCount('UsingDefault.svelte'), 'updates for UsingDefault.svelte').toBe(0); + }); + test('should work with emitCss: false in vite config', async () => { await editViteConfig((c) => c.replace('svelte()', 'svelte({emitCss:false})')); expect(await getText(`#hmr-test-1 .counter`)).toBe('0'); diff --git a/packages/e2e-tests/hmr/src/App.svelte b/packages/e2e-tests/hmr/src/App.svelte index 995c1e178..399824ca6 100644 --- a/packages/e2e-tests/hmr/src/App.svelte +++ b/packages/e2e-tests/hmr/src/App.svelte @@ -2,6 +2,7 @@ import StaticImport from './components/StaticImport.svelte'; import Dependency from 'e2e-test-dep-svelte-simple'; import HmrTest from './components/HmrTest.svelte'; + import PartialHmr from './components/partial-hmr/PartialHmr.svelte'; const jsTransform = '__JS_TRANSFORM_1__'; let dynamicImportComponent; function importDynamic() { @@ -25,6 +26,9 @@ + + +