diff --git a/CHANGELOG.md b/CHANGELOG.md index d8ead943..fcc9b9be 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,9 @@ +## [1.3.4](https://github.com/vuejs/vitepress/compare/v1.3.3...v1.3.4) (2024-08-24) + +### Bug Fixes + +- check if `_importGlobMap` (vite internal) exists before using it ([612d66f](https://github.com/vuejs/vitepress/commit/612d66fbb5162d9905cfb10919ca1761ce8c4680)) + ## [1.3.3](https://github.com/vuejs/vitepress/compare/v1.3.2...v1.3.3) (2024-08-17) ### Miscellaneous diff --git a/__tests__/e2e/data-loading/basic.data.mts b/__tests__/e2e/data-loading/basic.data.mts index 1a70d74a..305551c0 100644 --- a/__tests__/e2e/data-loading/basic.data.mts +++ b/__tests__/e2e/data-loading/basic.data.mts @@ -7,14 +7,10 @@ export declare const data: Data export default defineLoader({ watch: ['./data/*'], async load(files: string[]): Promise { - const foo = fs.readFileSync( - files.find((f) => f.endsWith('foo.json'))!, - 'utf-8' - ) - const bar = fs.readFileSync( - files.find((f) => f.endsWith('bar.json'))!, - 'utf-8' - ) - return [JSON.parse(foo), JSON.parse(bar)] + const data: Data = [] + for (const file of files.sort().filter((file) => file.endsWith('.json'))) { + data.push(JSON.parse(fs.readFileSync(file, 'utf-8'))) + } + return data } }) diff --git a/__tests__/e2e/data-loading/data.test.ts b/__tests__/e2e/data-loading/data.test.ts index f12e9766..394ab1d2 100644 --- a/__tests__/e2e/data-loading/data.test.ts +++ b/__tests__/e2e/data-loading/data.test.ts @@ -1,3 +1,6 @@ +import fs from 'node:fs/promises' +import { fileURLToPath } from 'node:url' + describe('static data file support in vite 3', () => { beforeAll(async () => { await goto('/data-loading/data') @@ -7,10 +10,10 @@ describe('static data file support in vite 3', () => { expect(await page.textContent('pre#basic')).toMatchInlineSnapshot(` "[ { - "foo": true + "a": true }, { - "bar": true + "b": true } ]" `) @@ -39,4 +42,68 @@ describe('static data file support in vite 3', () => { ]" `) }) + + // TODO: make it `.runIf(!process.env.VITE_TEST_BUILD)` -- it currently works, but is skipped to avoid vite's ecosystem-ci from failing (https://github.com/vitejs/vite/pull/16471#issuecomment-2308437187) + test.skip('hmr works', async () => { + const a = fileURLToPath(new URL('./data/a.json', import.meta.url)) + const b = fileURLToPath(new URL('./data/b.json', import.meta.url)) + + try { + await fs.writeFile(a, JSON.stringify({ a: false }, null, 2) + '\n') + await page.waitForFunction( + () => + document.querySelector('pre#basic')?.textContent === + JSON.stringify([{ a: false }, { b: true }], null, 2), + undefined, + { timeout: 3000 } + ) + } finally { + await fs.writeFile(a, JSON.stringify({ a: true }, null, 2) + '\n') + } + + let err = true + + try { + await fs.unlink(b) + await page.waitForFunction( + () => + document.querySelector('pre#basic')?.textContent === + JSON.stringify([{ a: true }], null, 2), + undefined, + { timeout: 3000 } + ) + err = false + } finally { + if (err) { + await fs.writeFile(b, JSON.stringify({ b: true }, null, 2) + '\n') + } + } + + try { + await fs.writeFile(b, JSON.stringify({ b: false }, null, 2) + '\n') + await page.waitForFunction( + () => + document.querySelector('pre#basic')?.textContent === + JSON.stringify([{ a: true }, { b: false }], null, 2), + undefined, + { timeout: 3000 } + ) + } finally { + await fs.writeFile(b, JSON.stringify({ b: true }, null, 2) + '\n') + } + }) + + /* + MODIFY a.json with { a: false } + this should trigger a hmr update and the content should be updated to [{ a: false }, { b: true }] + reset a.json + + DELETE b.json + this should trigger a hmr update and the content should be updated to [{ a: true }] + reset b.json if failed + + CREATE b.json with { b: false } + this should trigger a hmr update and the content should be updated to [{ a: true }, { b: false }] + reset b.json + */ }) diff --git a/__tests__/e2e/data-loading/data/a.json b/__tests__/e2e/data-loading/data/a.json new file mode 100644 index 00000000..eb174f2f --- /dev/null +++ b/__tests__/e2e/data-loading/data/a.json @@ -0,0 +1,3 @@ +{ + "a": true +} diff --git a/__tests__/e2e/data-loading/data/b.json b/__tests__/e2e/data-loading/data/b.json new file mode 100644 index 00000000..d44f4ab8 --- /dev/null +++ b/__tests__/e2e/data-loading/data/b.json @@ -0,0 +1,3 @@ +{ + "b": true +} diff --git a/__tests__/e2e/data-loading/data/bar.json b/__tests__/e2e/data-loading/data/bar.json deleted file mode 100644 index 01309803..00000000 --- a/__tests__/e2e/data-loading/data/bar.json +++ /dev/null @@ -1 +0,0 @@ -{ "bar": true } diff --git a/__tests__/e2e/data-loading/data/foo.json b/__tests__/e2e/data-loading/data/foo.json deleted file mode 100644 index 46a10aa7..00000000 --- a/__tests__/e2e/data-loading/data/foo.json +++ /dev/null @@ -1 +0,0 @@ -{ "foo": true } diff --git a/package.json b/package.json index a4c68fef..007ad0f2 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "vitepress", - "version": "1.3.3", + "version": "1.3.4", "description": "Vite & Vue powered static site generator", "keywords": [ "vite", diff --git a/src/node/plugins/staticDataPlugin.ts b/src/node/plugins/staticDataPlugin.ts index 283a5138..1d8d231f 100644 --- a/src/node/plugins/staticDataPlugin.ts +++ b/src/node/plugins/staticDataPlugin.ts @@ -121,7 +121,7 @@ export const staticDataPlugin: Plugin = { }, transform(_code, id) { - if (server && loaderMatch.test(id)) { + if (server && loaderMatch.test(id) && '_importGlobMap' in server) { // register this module as a glob importer const { watch } = idToLoaderModulesMap[id]! if (watch) { diff --git a/template/.vitepress/theme/style.css b/template/.vitepress/theme/style.css index 2a518312..a72e96e6 100644 --- a/template/.vitepress/theme/style.css +++ b/template/.vitepress/theme/style.css @@ -28,7 +28,7 @@ * custom containers. * * - `default`: The color used purely for subtle indication without any - * special meanings attched to it such as bg color for menu hover state. + * special meanings attached to it such as bg color for menu hover state. * * - `brand`: Used for primary brand colors, such as link text, button with * brand theme, etc.