Simulate Vite resolve id to url (#4239)
* Simulate Vite resolve id to url * Add changeset
This commit is contained in:
parent
df26aa220b
commit
a9baa45af3
3 changed files with 27 additions and 5 deletions
5
.changeset/nervous-socks-sin.md
Normal file
5
.changeset/nervous-socks-sin.md
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
---
|
||||||
|
'astro': patch
|
||||||
|
---
|
||||||
|
|
||||||
|
Fix Astro client scripts sourcemap 404
|
|
@ -1,4 +1,5 @@
|
||||||
import { fileURLToPath } from 'url';
|
import { fileURLToPath } from 'url';
|
||||||
|
import path from 'path';
|
||||||
import type { ViteDevServer } from 'vite';
|
import type { ViteDevServer } from 'vite';
|
||||||
import type {
|
import type {
|
||||||
AstroConfig,
|
AstroConfig,
|
||||||
|
@ -12,7 +13,7 @@ import type {
|
||||||
import { prependForwardSlash } from '../../../core/path.js';
|
import { prependForwardSlash } from '../../../core/path.js';
|
||||||
import { PAGE_SCRIPT_ID } from '../../../vite-plugin-scripts/index.js';
|
import { PAGE_SCRIPT_ID } from '../../../vite-plugin-scripts/index.js';
|
||||||
import { LogOptions } from '../../logger/core.js';
|
import { LogOptions } from '../../logger/core.js';
|
||||||
import { isPage } from '../../util.js';
|
import { isPage, resolveIdToUrl } from '../../util.js';
|
||||||
import { render as coreRender } from '../core.js';
|
import { render as coreRender } from '../core.js';
|
||||||
import { RouteCache } from '../route-cache.js';
|
import { RouteCache } from '../route-cache.js';
|
||||||
import { collectMdMetadata } from '../util.js';
|
import { collectMdMetadata } from '../util.js';
|
||||||
|
@ -116,7 +117,7 @@ export async function render(
|
||||||
scripts.add({
|
scripts.add({
|
||||||
props: {
|
props: {
|
||||||
type: 'module',
|
type: 'module',
|
||||||
src: '/@id/astro/runtime/client/hmr.js',
|
src: await resolveIdToUrl(viteServer, 'astro/runtime/client/hmr.js'),
|
||||||
},
|
},
|
||||||
children: '',
|
children: '',
|
||||||
});
|
});
|
||||||
|
@ -186,7 +187,7 @@ export async function render(
|
||||||
if (s.startsWith('/@fs')) {
|
if (s.startsWith('/@fs')) {
|
||||||
return resolveClientDevPath(s);
|
return resolveClientDevPath(s);
|
||||||
}
|
}
|
||||||
return '/@id' + prependForwardSlash(s);
|
return await resolveIdToUrl(viteServer, s);
|
||||||
},
|
},
|
||||||
renderers,
|
renderers,
|
||||||
request,
|
request,
|
||||||
|
|
|
@ -4,9 +4,9 @@ import path from 'path';
|
||||||
import resolve from 'resolve';
|
import resolve from 'resolve';
|
||||||
import slash from 'slash';
|
import slash from 'slash';
|
||||||
import { fileURLToPath, pathToFileURL } from 'url';
|
import { fileURLToPath, pathToFileURL } from 'url';
|
||||||
import type { ErrorPayload } from 'vite';
|
import type { ErrorPayload, ViteDevServer } from 'vite';
|
||||||
import type { AstroConfig } from '../@types/astro';
|
import type { AstroConfig } from '../@types/astro';
|
||||||
import { removeTrailingForwardSlash } from './path.js';
|
import { prependForwardSlash, removeTrailingForwardSlash } from './path.js';
|
||||||
|
|
||||||
// process.env.PACKAGE_VERSION is injected when we build and publish the astro package.
|
// process.env.PACKAGE_VERSION is injected when we build and publish the astro package.
|
||||||
export const ASTRO_VERSION = process.env.PACKAGE_VERSION ?? 'development';
|
export const ASTRO_VERSION = process.env.PACKAGE_VERSION ?? 'development';
|
||||||
|
@ -207,3 +207,19 @@ export function getLocalAddress(serverAddress: string, host: string | boolean):
|
||||||
return serverAddress;
|
return serverAddress;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Simulate Vite's resolve and import analysis so we can import the id as an URL
|
||||||
|
* through a script tag or a dynamic import as-is.
|
||||||
|
*/
|
||||||
|
// NOTE: `/@id/` should only be used when the id is fully resolved
|
||||||
|
export async function resolveIdToUrl(viteServer: ViteDevServer, id: string) {
|
||||||
|
const result = await viteServer.pluginContainer.resolveId(id);
|
||||||
|
if (!result) {
|
||||||
|
return VALID_ID_PREFIX + id;
|
||||||
|
}
|
||||||
|
if (path.isAbsolute(result.id)) {
|
||||||
|
return '/@fs' + prependForwardSlash(result.id);
|
||||||
|
}
|
||||||
|
return VALID_ID_PREFIX + result.id;
|
||||||
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue