diff --git a/package.json b/package.json index 7bc3ace32..99a50b467 100644 --- a/package.json +++ b/package.json @@ -48,7 +48,7 @@ "@typescript-eslint/eslint-plugin": "^4.22.0", "@typescript-eslint/parser": "^4.18.0", "autoprefixer": "^10.2.6", - "cheerio": "^1.0.0-rc.6", + "cheerio": "^1.0.0-rc.10", "cheerio-select-tmp": "^0.1.1", "del": "^6.0.0", "esbuild": "^0.11.17", diff --git a/packages/astro/package.json b/packages/astro/package.json index 7422c4c79..bece01e25 100644 --- a/packages/astro/package.json +++ b/packages/astro/package.json @@ -45,6 +45,7 @@ "@types/rimraf": "^3.0.2", "@web/rollup-plugin-html": "^1.9.1", "astring": "^1.7.5", + "cheerio": "^1.0.0-rc.10", "ci-info": "^3.2.0", "connect": "^3.7.0", "es-module-lexer": "^0.7.1", diff --git a/packages/astro/src/runtime/hmr.ts b/packages/astro/src/runtime/hmr.ts index 0a7ce4e3c..23c48d5e7 100644 --- a/packages/astro/src/runtime/hmr.ts +++ b/packages/astro/src/runtime/hmr.ts @@ -1,4 +1,4 @@ -import '/@vite/client'; +import '@vite/client'; if (import.meta.hot) { const parser = new DOMParser(); diff --git a/packages/astro/src/runtime/ssr.ts b/packages/astro/src/runtime/ssr.ts index 02ea2c5a2..72661af2e 100644 --- a/packages/astro/src/runtime/ssr.ts +++ b/packages/astro/src/runtime/ssr.ts @@ -169,66 +169,67 @@ export async function ssr({ astroConfig, filePath, logging, mode, origin, pathna pageProps = { ...matchedStaticPath.props } || {}; } - // 3. render page - if (!browserHash && (viteServer as any)._optimizeDepsMetadata?.browserHash) browserHash = (viteServer as any)._optimizeDepsMetadata.browserHash; // note: this is "private" and may change over time - const fullURL = new URL(pathname, origin); + // 3. render page + if (!browserHash && (viteServer as any)._optimizeDepsMetadata?.browserHash) browserHash = (viteServer as any)._optimizeDepsMetadata.browserHash; // note: this is "private" and may change over time + const fullURL = new URL(pathname, origin); - const Component = await mod.default; - const ext = path.posix.extname(filePath.pathname); - if (!Component) - throw new Error(`Expected an exported Astro component but received typeof ${typeof Component}`); - - if (!Component.isAstroComponentFactory) throw new Error(`Unable to SSR non-Astro component (${route?.component})`); + const Component = await mod.default; + const ext = path.posix.extname(filePath.pathname); + if (!Component) throw new Error(`Expected an exported Astro component but received typeof ${typeof Component}`); - const result = { - styles: new Set(), - scripts: new Set(), - /** This function returns the `Astro` faux-global */ - createAstro: (props: any) => { - const site = new URL(origin); - const url = new URL('.' + pathname, site); - const canonicalURL = getCanonicalURL(pathname, astroConfig.buildOptions.site || origin) - const fetchContent = createFetchContent(fileURLToPath(filePath)); - return { - isPage: true, - site, - request: { url, canonicalURL }, - props, - fetchContent + if (!Component.isAstroComponentFactory) throw new Error(`Unable to SSR non-Astro component (${route?.component})`); + + const result = { + styles: new Set(), + scripts: new Set(), + /** This function returns the `Astro` faux-global */ + createAstro: (props: any) => { + const site = new URL(origin); + const url = new URL('.' + pathname, site); + const canonicalURL = getCanonicalURL(pathname, astroConfig.buildOptions.site || origin); + const fetchContent = createFetchContent(fileURLToPath(filePath)); + return { + isPage: true, + site, + request: { url, canonicalURL }, + props, + fetchContent, + }; + }, + _metadata: { importedModules, renderers }, + }; + + const createFetchContent = (currentFilePath: string) => { + const fetchContentCache = new Map(); + return async (pattern: string) => { + const cwd = path.dirname(currentFilePath); + const cacheKey = `${cwd}:${pattern}`; + if (fetchContentCache.has(cacheKey)) { + return fetchContentCache.get(cacheKey); + } + const files = await glob(pattern, { cwd, absolute: true }); + const contents = await Promise.all( + files.map(async (file) => { + const { metadata: astro = {}, frontmatter = {} } = (await viteServer.ssrLoadModule(file)) as any; + return { ...frontmatter, astro }; + }) + ); + fetchContentCache.set(cacheKey, contents); + return contents; }; - }, - _metadata: { importedModules, renderers }, - } + }; - const createFetchContent = (currentFilePath: string) => { - const fetchContentCache = new Map(); - return async (pattern: string) => { - const cwd = path.dirname(currentFilePath); - const cacheKey = `${cwd}:${pattern}`; - if (fetchContentCache.has(cacheKey)) { - return fetchContentCache.get(cacheKey); - } - const files = await glob(pattern, { cwd, absolute: true }); - const contents = await Promise.all(files.map(async file => { - const { metadata: astro = {}, frontmatter = {} } = (await viteServer.ssrLoadModule(file)) as any; - return { ...frontmatter, astro }; - })) - fetchContentCache.set(cacheKey, contents); - return contents; + let html = await renderPage(result, Component, {}, null); + + // 4. modify response + if (mode === 'development') { + // inject Astro HMR code + html = injectAstroHMR(html); + // inject Vite HMR code + html = injectViteClient(html); + // replace client hydration scripts + html = resolveNpmImports(html); } - } - - let html = await renderPage(result, Component, {}, null); - - // 4. modify response - if (mode === 'development') { - // inject Astro HMR code - html = injectAstroHMR(html); - // inject Vite HMR code - html = injectViteClient(html); - // replace client hydration scripts - html = resolveNpmImports(html); - } // 5. finish return html; diff --git a/yarn.lock b/yarn.lock index 9eb0e15a6..1399e3ca3 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3389,7 +3389,7 @@ cheerio-select@^1.5.0: domhandler "^4.2.0" domutils "^2.7.0" -cheerio@^1.0.0-rc.6, cheerio@~1.0.0-rc.3: +cheerio@^1.0.0-rc.10, cheerio@~1.0.0-rc.3: version "1.0.0-rc.10" resolved "https://registry.yarnpkg.com/cheerio/-/cheerio-1.0.0-rc.10.tgz#2ba3dcdfcc26e7956fc1f440e61d51c643379f3e" integrity sha512-g0J0q/O6mW8z5zxQ3A8E8J1hUgp4SMOvEoW/x84OwyHKe/Zccz83PVT4y5Crcr530FV6NgmKI1qvGTKVl9XXVw==