astro 6.1.6 → 6.1.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/assets/endpoint/shared.js +7 -0
- package/dist/assets/internal.d.ts +1 -0
- package/dist/assets/internal.js +3 -1
- package/dist/assets/utils/inferSourceFormat.d.ts +6 -0
- package/dist/assets/utils/inferSourceFormat.js +21 -0
- package/dist/cli/infra/build-time-astro-version-provider.js +1 -1
- package/dist/content/content-layer.js +3 -3
- package/dist/core/build/plugins/plugin-chunk-imports.js +2 -1
- package/dist/core/build/static-build.js +12 -10
- package/dist/core/build/util.d.ts +6 -1
- package/dist/core/build/util.js +5 -1
- package/dist/core/constants.js +1 -1
- package/dist/core/create-vite.d.ts +5 -0
- package/dist/core/create-vite.js +48 -23
- package/dist/core/dev/container.js +2 -2
- package/dist/core/dev/dev.js +1 -1
- package/dist/core/dev/restart.js +2 -1
- package/dist/core/messages/runtime.js +1 -1
- package/dist/manifest/serialized.js +1 -0
- package/dist/transitions/swap-functions.d.ts +1 -0
- package/dist/transitions/swap-functions.js +22 -5
- package/package.json +8 -10
|
@@ -4,6 +4,7 @@ import { isRemoteAllowed } from "@astrojs/internal-helpers/remote";
|
|
|
4
4
|
import * as mime from "mrmime";
|
|
5
5
|
import { getConfiguredImageService } from "../internal.js";
|
|
6
6
|
import { etag } from "../utils/etag.js";
|
|
7
|
+
import { inferSourceFormat } from "../utils/inferSourceFormat.js";
|
|
7
8
|
async function loadRemoteImage(src) {
|
|
8
9
|
try {
|
|
9
10
|
const res = await fetch(src, { redirect: "manual" });
|
|
@@ -31,6 +32,12 @@ const handleImageRequest = async ({
|
|
|
31
32
|
if (!transform?.src) {
|
|
32
33
|
return new Response("Invalid request", { status: 400 });
|
|
33
34
|
}
|
|
35
|
+
if (transform.format === "svg") {
|
|
36
|
+
const sourceFormat = inferSourceFormat(transform.src);
|
|
37
|
+
if (sourceFormat !== "svg") {
|
|
38
|
+
return new Response("Cannot convert non-SVG source to SVG format", { status: 403 });
|
|
39
|
+
}
|
|
40
|
+
}
|
|
34
41
|
let inputBuffer = void 0;
|
|
35
42
|
if (isRemotePath(transform.src)) {
|
|
36
43
|
if (!isRemoteAllowed(transform.src, imageConfig)) {
|
|
@@ -2,6 +2,7 @@ import type { AstroConfig } from '../types/public/config.js';
|
|
|
2
2
|
import type { AstroAdapterClientConfig } from '../types/public/integrations.js';
|
|
3
3
|
import { type ImageService } from './services/service.js';
|
|
4
4
|
import { type GetImageResult, type UnresolvedImageTransform } from './types.js';
|
|
5
|
+
export { verifyOptions } from './services/service.js';
|
|
5
6
|
export declare const cssFitValues: string[];
|
|
6
7
|
export declare function getConfiguredImageService(): Promise<ImageService>;
|
|
7
8
|
export declare function getImage(options: UnresolvedImageTransform, imageConfig: AstroConfig['image'] & AstroAdapterClientConfig): Promise<GetImageResult>;
|
package/dist/assets/internal.js
CHANGED
|
@@ -15,6 +15,7 @@ import {
|
|
|
15
15
|
import { isESMImportedImage, isRemoteImage, resolveSrc } from "./utils/imageKind.js";
|
|
16
16
|
import { inferRemoteSize } from "./utils/remoteProbe.js";
|
|
17
17
|
import { createPlaceholderURL, stringifyPlaceholderURL } from "./utils/url.js";
|
|
18
|
+
import { verifyOptions } from "./services/service.js";
|
|
18
19
|
const cssFitValues = ["fill", "contain", "cover", "scale-down"];
|
|
19
20
|
async function getConfiguredImageService() {
|
|
20
21
|
if (!globalThis?.astroAsset?.imageService) {
|
|
@@ -190,5 +191,6 @@ async function getImage(options, imageConfig) {
|
|
|
190
191
|
export {
|
|
191
192
|
cssFitValues,
|
|
192
193
|
getConfiguredImageService,
|
|
193
|
-
getImage
|
|
194
|
+
getImage,
|
|
195
|
+
verifyOptions
|
|
194
196
|
};
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Infer the image format from a source path or URL by examining
|
|
3
|
+
* the file extension. For data: URIs, the MIME type is extracted.
|
|
4
|
+
* Returns undefined if the format cannot be determined.
|
|
5
|
+
*/
|
|
6
|
+
export declare function inferSourceFormat(src: string): string | undefined;
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { removeQueryString } from "@astrojs/internal-helpers/path";
|
|
2
|
+
const DATA_PREFIX = "data:";
|
|
3
|
+
function inferSourceFormat(src) {
|
|
4
|
+
if (src.startsWith(DATA_PREFIX)) {
|
|
5
|
+
const mime = src.slice(DATA_PREFIX.length, src.indexOf(";"));
|
|
6
|
+
if (mime === "image/svg+xml") return "svg";
|
|
7
|
+
const sub = mime.split("/")[1];
|
|
8
|
+
return sub || void 0;
|
|
9
|
+
}
|
|
10
|
+
try {
|
|
11
|
+
const cleanSrc = removeQueryString(src).split("#")[0];
|
|
12
|
+
const lastDot = cleanSrc.lastIndexOf(".");
|
|
13
|
+
if (lastDot === -1) return void 0;
|
|
14
|
+
return cleanSrc.slice(lastDot + 1).toLowerCase();
|
|
15
|
+
} catch {
|
|
16
|
+
return void 0;
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
export {
|
|
20
|
+
inferSourceFormat
|
|
21
|
+
};
|
|
@@ -192,7 +192,7 @@ ${contentConfig.error.message}`
|
|
|
192
192
|
logger.info("Content config changed");
|
|
193
193
|
shouldClear = true;
|
|
194
194
|
}
|
|
195
|
-
if (previousAstroVersion && previousAstroVersion !== "6.1.
|
|
195
|
+
if (previousAstroVersion && previousAstroVersion !== "6.1.8") {
|
|
196
196
|
logger.info("Astro version changed");
|
|
197
197
|
shouldClear = true;
|
|
198
198
|
}
|
|
@@ -200,8 +200,8 @@ ${contentConfig.error.message}`
|
|
|
200
200
|
logger.info("Clearing content store");
|
|
201
201
|
this.#store.clearAll();
|
|
202
202
|
}
|
|
203
|
-
if ("6.1.
|
|
204
|
-
this.#store.metaStore().set("astro-version", "6.1.
|
|
203
|
+
if ("6.1.8") {
|
|
204
|
+
this.#store.metaStore().set("astro-version", "6.1.8");
|
|
205
205
|
}
|
|
206
206
|
if (currentConfigDigest) {
|
|
207
207
|
this.#store.metaStore().set("content-config-digest", currentConfigDigest);
|
|
@@ -27,7 +27,8 @@ function pluginChunkImports(options) {
|
|
|
27
27
|
let rewritten = code;
|
|
28
28
|
for (let i = relativeImports.length - 1; i >= 0; i--) {
|
|
29
29
|
const imp = relativeImports[i];
|
|
30
|
-
|
|
30
|
+
const insertAt = imp.d > -1 ? imp.e - 1 : imp.e;
|
|
31
|
+
rewritten = rewritten.slice(0, insertAt) + "?" + queryString + rewritten.slice(insertAt);
|
|
31
32
|
}
|
|
32
33
|
return { code: rewritten, map: null };
|
|
33
34
|
}
|
|
@@ -30,7 +30,7 @@ import {
|
|
|
30
30
|
RESOLVED_LEGACY_SSR_ENTRY_VIRTUAL_MODULE
|
|
31
31
|
} from "./plugins/plugin-ssr.js";
|
|
32
32
|
import { ASTRO_PAGE_EXTENSION_POST_PATTERN } from "./plugins/util.js";
|
|
33
|
-
import {
|
|
33
|
+
import { cleanChunkName, getTimeStat, viteBuildReturnToRollupOutputs } from "./util.js";
|
|
34
34
|
import { NOOP_MODULE_ID } from "./plugins/plugin-noop.js";
|
|
35
35
|
import { ASTRO_VITE_ENVIRONMENT_NAMES } from "../constants.js";
|
|
36
36
|
import { getSSRAssets } from "./internal.js";
|
|
@@ -178,14 +178,13 @@ async function buildEnvironments(opts, internals) {
|
|
|
178
178
|
let suffix = "_[hash].mjs";
|
|
179
179
|
if (name.includes(ASTRO_PAGE_EXTENSION_POST_PATTERN)) {
|
|
180
180
|
const [sanitizedName] = name.split(ASTRO_PAGE_EXTENSION_POST_PATTERN);
|
|
181
|
-
return [prefix, sanitizedName, suffix].join("");
|
|
181
|
+
return [prefix, cleanChunkName(sanitizedName), suffix].join("");
|
|
182
182
|
}
|
|
183
183
|
if (name.startsWith("pages/")) {
|
|
184
184
|
const sanitizedName = name.split(".")[0];
|
|
185
|
-
return [prefix, sanitizedName, suffix].join("");
|
|
185
|
+
return [prefix, cleanChunkName(sanitizedName), suffix].join("");
|
|
186
186
|
}
|
|
187
|
-
|
|
188
|
-
return [prefix, encoded, suffix].join("");
|
|
187
|
+
return [prefix, cleanChunkName(name), suffix].join("");
|
|
189
188
|
},
|
|
190
189
|
assetFileNames: `${settings.config.build.assets}/[name].[hash][extname]`,
|
|
191
190
|
...viteConfig.build?.rollupOptions?.output,
|
|
@@ -244,9 +243,8 @@ async function buildEnvironments(opts, internals) {
|
|
|
244
243
|
if (!internals.clientInput.size) {
|
|
245
244
|
internals.clientInput.add(NOOP_MODULE_ID);
|
|
246
245
|
}
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
);
|
|
246
|
+
const sortedClientInput = Array.from(internals.clientInput).sort();
|
|
247
|
+
builder2.environments.client.config.build.rollupOptions.input = sortedClientInput;
|
|
250
248
|
settings.timer.start("Client build");
|
|
251
249
|
await builder2.build(builder2.environments.client);
|
|
252
250
|
settings.timer.end("Client build");
|
|
@@ -285,8 +283,12 @@ async function buildEnvironments(opts, internals) {
|
|
|
285
283
|
rollupOptions: {
|
|
286
284
|
preserveEntrySignatures: "exports-only",
|
|
287
285
|
output: {
|
|
288
|
-
entryFileNames
|
|
289
|
-
|
|
286
|
+
entryFileNames(chunkInfo) {
|
|
287
|
+
return `${settings.config.build.assets}/${cleanChunkName(chunkInfo.name)}.[hash].js`;
|
|
288
|
+
},
|
|
289
|
+
chunkFileNames(chunkInfo) {
|
|
290
|
+
return `${settings.config.build.assets}/${cleanChunkName(chunkInfo.name)}.[hash].js`;
|
|
291
|
+
},
|
|
290
292
|
assetFileNames: `${settings.config.build.assets}/[name].[hash][extname]`,
|
|
291
293
|
...viteConfig.environments?.client?.build?.rollupOptions?.output
|
|
292
294
|
}
|
|
@@ -6,5 +6,10 @@ export declare function getTimeStat(timeStart: number, timeEnd: number): string;
|
|
|
6
6
|
* Given the Astro configuration, it tells if a slash should be appended or not
|
|
7
7
|
*/
|
|
8
8
|
export declare function shouldAppendForwardSlash(trailingSlash: AstroConfig['trailingSlash'], buildFormat: AstroConfig['build']['format']): boolean;
|
|
9
|
-
|
|
9
|
+
/**
|
|
10
|
+
* Replaces characters in a chunk name that are not safe for filesystem paths or URLs.
|
|
11
|
+
* Characters like `!` and `~` can leak from Vite module IDs into Rollup chunk names
|
|
12
|
+
* and break deploys on platforms like Netlify.
|
|
13
|
+
*/
|
|
14
|
+
export declare function cleanChunkName(name: string): string;
|
|
10
15
|
export declare function viteBuildReturnToRollupOutputs(viteBuildReturn: ViteBuildReturn): Rollup.RollupOutput[];
|
package/dist/core/build/util.js
CHANGED
|
@@ -19,6 +19,10 @@ function shouldAppendForwardSlash(trailingSlash, buildFormat) {
|
|
|
19
19
|
}
|
|
20
20
|
}
|
|
21
21
|
}
|
|
22
|
+
const UNSAFE_CHUNK_CHAR_RE = /[^\w.\-/]/g;
|
|
23
|
+
function cleanChunkName(name) {
|
|
24
|
+
return encodeName(name.replace(UNSAFE_CHUNK_CHAR_RE, "_"));
|
|
25
|
+
}
|
|
22
26
|
function encodeName(name) {
|
|
23
27
|
for (let i = 0; i < name.length; i++) {
|
|
24
28
|
if (name[i] === "%") {
|
|
@@ -40,7 +44,7 @@ function viteBuildReturnToRollupOutputs(viteBuildReturn) {
|
|
|
40
44
|
return result;
|
|
41
45
|
}
|
|
42
46
|
export {
|
|
43
|
-
|
|
47
|
+
cleanChunkName,
|
|
44
48
|
getTimeStat,
|
|
45
49
|
shouldAppendForwardSlash,
|
|
46
50
|
viteBuildReturnToRollupOutputs
|
package/dist/core/constants.js
CHANGED
|
@@ -14,6 +14,11 @@ type CreateViteOptions = {
|
|
|
14
14
|
} | {
|
|
15
15
|
command: 'build';
|
|
16
16
|
});
|
|
17
|
+
/**
|
|
18
|
+
* Clear the crawlFrameworkPkgs cache. Call this when node_modules may have
|
|
19
|
+
* changed (e.g. after a dev server restart triggered by config/lockfile change).
|
|
20
|
+
*/
|
|
21
|
+
export declare function clearCrawlCache(): void;
|
|
17
22
|
/** Return a base vite config as a common starting point for all Vite commands. */
|
|
18
23
|
export declare function createVite(commandConfig: vite.InlineConfig, { settings, logger, mode, command, fs, sync, routesList }: CreateViteOptions): Promise<vite.InlineConfig>;
|
|
19
24
|
export {};
|
package/dist/core/create-vite.js
CHANGED
|
@@ -52,31 +52,55 @@ import { vitePluginEnvironment } from "../vite-plugin-environment/index.js";
|
|
|
52
52
|
import { ASTRO_VITE_ENVIRONMENT_NAMES } from "./constants.js";
|
|
53
53
|
import { vitePluginChromedevtools } from "../vite-plugin-chromedevtools/index.js";
|
|
54
54
|
import { vitePluginAstroServerClient } from "../vite-plugin-overlay/index.js";
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
if (pkgJson?.astro?.external === true) {
|
|
62
|
-
return false;
|
|
63
|
-
}
|
|
64
|
-
return (
|
|
65
|
-
// Attempt: package relies on `astro`. ✅ Definitely an Astro package
|
|
66
|
-
pkgJson.peerDependencies?.astro || pkgJson.dependencies?.astro || // Attempt: package is tagged with `astro` or `astro-component`. ✅ Likely a community package
|
|
67
|
-
pkgJson.keywords?.includes("astro") || pkgJson.keywords?.includes("astro-component") || // Attempt: package is named `astro-something` or `@scope/astro-something`. ✅ Likely a community package
|
|
68
|
-
/^(?:@[^/]+\/)?astro-/.test(pkgJson.name)
|
|
69
|
-
);
|
|
55
|
+
const _crawlCache = /* @__PURE__ */ new Map();
|
|
56
|
+
function cloneCrawlResult(result) {
|
|
57
|
+
return {
|
|
58
|
+
optimizeDeps: {
|
|
59
|
+
include: [...result.optimizeDeps.include],
|
|
60
|
+
exclude: [...result.optimizeDeps.exclude]
|
|
70
61
|
},
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
return false;
|
|
75
|
-
} else {
|
|
76
|
-
return void 0;
|
|
77
|
-
}
|
|
62
|
+
ssr: {
|
|
63
|
+
noExternal: [...result.ssr.noExternal],
|
|
64
|
+
external: [...result.ssr.external]
|
|
78
65
|
}
|
|
79
|
-
}
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
function clearCrawlCache() {
|
|
69
|
+
_crawlCache.clear();
|
|
70
|
+
}
|
|
71
|
+
async function createVite(commandConfig, { settings, logger, mode, command, fs = nodeFs, sync, routesList }) {
|
|
72
|
+
const root = fileURLToPath(settings.config.root);
|
|
73
|
+
const isBuild = command === "build";
|
|
74
|
+
const crawlCacheKey = `${root}:${isBuild}`;
|
|
75
|
+
let astroPkgsConfig = _crawlCache.get(crawlCacheKey);
|
|
76
|
+
if (!astroPkgsConfig) {
|
|
77
|
+
astroPkgsConfig = await crawlFrameworkPkgs({
|
|
78
|
+
root,
|
|
79
|
+
isBuild,
|
|
80
|
+
viteUserConfig: settings.config.vite,
|
|
81
|
+
isFrameworkPkgByJson(pkgJson) {
|
|
82
|
+
if (pkgJson?.astro?.external === true) {
|
|
83
|
+
return false;
|
|
84
|
+
}
|
|
85
|
+
return (
|
|
86
|
+
// Attempt: package relies on `astro`. ✅ Definitely an Astro package
|
|
87
|
+
pkgJson.peerDependencies?.astro || pkgJson.dependencies?.astro || // Attempt: package is tagged with `astro` or `astro-component`. ✅ Likely a community package
|
|
88
|
+
pkgJson.keywords?.includes("astro") || pkgJson.keywords?.includes("astro-component") || // Attempt: package is named `astro-something` or `@scope/astro-something`. ✅ Likely a community package
|
|
89
|
+
/^(?:@[^/]+\/)?astro-/.test(pkgJson.name)
|
|
90
|
+
);
|
|
91
|
+
},
|
|
92
|
+
isFrameworkPkgByName(pkgName) {
|
|
93
|
+
const isNotAstroPkg = isCommonNotAstro(pkgName);
|
|
94
|
+
if (isNotAstroPkg) {
|
|
95
|
+
return false;
|
|
96
|
+
} else {
|
|
97
|
+
return void 0;
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
});
|
|
101
|
+
_crawlCache.set(crawlCacheKey, astroPkgsConfig);
|
|
102
|
+
}
|
|
103
|
+
astroPkgsConfig = cloneCrawlResult(astroPkgsConfig);
|
|
80
104
|
const envLoader = createEnvLoader({
|
|
81
105
|
mode,
|
|
82
106
|
config: settings.config
|
|
@@ -278,5 +302,6 @@ function stringifyForDefine(value) {
|
|
|
278
302
|
return typeof value === "string" || isObject(value) ? JSON.stringify(value) : "undefined";
|
|
279
303
|
}
|
|
280
304
|
export {
|
|
305
|
+
clearCrawlCache,
|
|
281
306
|
createVite
|
|
282
307
|
};
|
|
@@ -26,7 +26,7 @@ async function createContainer({
|
|
|
26
26
|
});
|
|
27
27
|
const {
|
|
28
28
|
base,
|
|
29
|
-
server: { host, headers, open: serverOpen, allowedHosts }
|
|
29
|
+
server: { host, headers, open: serverOpen, allowedHosts, port }
|
|
30
30
|
} = settings.config;
|
|
31
31
|
const isServerOpenURL = typeof serverOpen === "string" && !isRestart;
|
|
32
32
|
const isServerOpenBoolean = serverOpen && !isRestart;
|
|
@@ -50,7 +50,7 @@ async function createContainer({
|
|
|
50
50
|
);
|
|
51
51
|
const viteConfig = await createVite(
|
|
52
52
|
{
|
|
53
|
-
server: { host, headers, open, allowedHosts },
|
|
53
|
+
server: { host, headers, open, allowedHosts, port },
|
|
54
54
|
optimizeDeps: {
|
|
55
55
|
include: rendererClientEntries
|
|
56
56
|
}
|
package/dist/core/dev/dev.js
CHANGED
|
@@ -37,7 +37,7 @@ async function dev(inlineConfig) {
|
|
|
37
37
|
await telemetry.record([]);
|
|
38
38
|
const restart = await createContainerWithAutomaticRestart({ inlineConfig, fs });
|
|
39
39
|
const logger = restart.container.logger;
|
|
40
|
-
const currentVersion = "6.1.
|
|
40
|
+
const currentVersion = "6.1.8";
|
|
41
41
|
const isPrerelease = currentVersion.includes("-");
|
|
42
42
|
if (!isPrerelease) {
|
|
43
43
|
try {
|
package/dist/core/dev/restart.js
CHANGED
|
@@ -7,7 +7,7 @@ import { runHookConfigDone, runHookConfigSetup } from "../../integrations/hooks.
|
|
|
7
7
|
import { SETTINGS_FILE } from "../../preferences/constants.js";
|
|
8
8
|
import { getPrerenderDefault } from "../../prerender/utils.js";
|
|
9
9
|
import { createSettings, resolveConfig } from "../config/index.js";
|
|
10
|
-
import { createVite } from "../create-vite.js";
|
|
10
|
+
import { clearCrawlCache, createVite } from "../create-vite.js";
|
|
11
11
|
import { collectErrorMetadata } from "../errors/dev/utils.js";
|
|
12
12
|
import { isAstroConfigZodError } from "../errors/errors.js";
|
|
13
13
|
import { createSafeError } from "../errors/index.js";
|
|
@@ -42,6 +42,7 @@ function shouldRestartContainer({ settings, inlineConfig, restartInFlight }, cha
|
|
|
42
42
|
async function restartContainerInPlace(container) {
|
|
43
43
|
const { logger, settings: existingSettings, inlineConfig, fs } = container;
|
|
44
44
|
container.restartInFlight = true;
|
|
45
|
+
clearCrawlCache();
|
|
45
46
|
try {
|
|
46
47
|
const { astroConfig } = await resolveConfig(inlineConfig, "dev", fs);
|
|
47
48
|
warnIfCspWithShiki(astroConfig, logger);
|
|
@@ -170,6 +170,7 @@ async function createSerializedManifest(settings, encodedKey) {
|
|
|
170
170
|
inlinedScripts: [],
|
|
171
171
|
i18n: i18nManifest,
|
|
172
172
|
checkOrigin: (settings.config.security?.checkOrigin && settings.buildOutput === "server") ?? false,
|
|
173
|
+
allowedDomains: settings.config.security?.allowedDomains,
|
|
173
174
|
actionBodySizeLimit: settings.config.security?.actionBodySizeLimit ? settings.config.security.actionBodySizeLimit : 1024 * 1024,
|
|
174
175
|
// 1mb default
|
|
175
176
|
serverIslandBodySizeLimit: settings.config.security?.serverIslandBodySizeLimit ? settings.config.security.serverIslandBodySizeLimit : 1024 * 1024,
|
|
@@ -10,6 +10,7 @@ export declare function swapHeadElements(doc: Document): void;
|
|
|
10
10
|
export declare function swapBodyElement(newElement: Element, oldElement: Element): void;
|
|
11
11
|
export declare const saveFocus: () => (() => void);
|
|
12
12
|
export declare const restoreFocus: ({ activeElement, start, end }: SavedFocus) => void;
|
|
13
|
+
export declare const vueScopedStyleId: (el: HTMLStyleElement) => string;
|
|
13
14
|
export declare const swapFunctions: {
|
|
14
15
|
deselectScripts: typeof deselectScripts;
|
|
15
16
|
swapRootAttributes: typeof swapRootAttributes;
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
const PERSIST_ATTR = "data-astro-transition-persist";
|
|
2
2
|
const NON_OVERRIDABLE_ASTRO_ATTRS = ["data-astro-transition", "data-astro-transition-fallback"];
|
|
3
|
+
const knownVueScopedStyles = /* @__PURE__ */ new Map();
|
|
3
4
|
const scriptsAlreadyRan = /* @__PURE__ */ new Set();
|
|
4
5
|
function detectScriptExecuted(script) {
|
|
5
6
|
const key = script.src ? new URL(script.src, location.href).href : script.textContent;
|
|
@@ -33,10 +34,20 @@ function swapHeadElements(doc) {
|
|
|
33
34
|
if (newEl) {
|
|
34
35
|
newEl.remove();
|
|
35
36
|
} else {
|
|
37
|
+
if (import.meta.env.DEV && el instanceof HTMLStyleElement) {
|
|
38
|
+
const viteDevId = vueScopedStyleId(el);
|
|
39
|
+
viteDevId && knownVueScopedStyles.set(viteDevId, el);
|
|
40
|
+
}
|
|
36
41
|
el.remove();
|
|
37
42
|
}
|
|
38
43
|
}
|
|
39
|
-
|
|
44
|
+
if (import.meta.env.DEV) {
|
|
45
|
+
[...doc.head.children].forEach((child) => {
|
|
46
|
+
document.head.append(knownVueScopedStyles.get(child.dataset?.viteDevId) || child);
|
|
47
|
+
});
|
|
48
|
+
} else {
|
|
49
|
+
document.head.append(...doc.head.children);
|
|
50
|
+
}
|
|
40
51
|
}
|
|
41
52
|
function swapBodyElement(newElement, oldElement) {
|
|
42
53
|
const persistPairs = [];
|
|
@@ -106,6 +117,11 @@ const restoreFocus = ({ activeElement, start, end }) => {
|
|
|
106
117
|
}
|
|
107
118
|
}
|
|
108
119
|
};
|
|
120
|
+
const vueScopedStyleId = (el) => {
|
|
121
|
+
const viteDevId = el.dataset.viteDevId || "";
|
|
122
|
+
const url = new URL(viteDevId, location.href);
|
|
123
|
+
return url.searchParams.get("vue") !== null && url.searchParams.get("type") === "style" && url.searchParams.has("scoped") ? viteDevId : "";
|
|
124
|
+
};
|
|
109
125
|
const persistedHeadElement = (el, newDoc) => {
|
|
110
126
|
const id = el.getAttribute(PERSIST_ATTR);
|
|
111
127
|
const newEl = id && newDoc.head.querySelector(`[${PERSIST_ATTR}="${id}"]`);
|
|
@@ -116,9 +132,9 @@ const persistedHeadElement = (el, newDoc) => {
|
|
|
116
132
|
const href = el.getAttribute("href");
|
|
117
133
|
return newDoc.head.querySelector(`link[rel=stylesheet][href="${href}"]`);
|
|
118
134
|
}
|
|
119
|
-
if (import.meta.env.DEV && el
|
|
120
|
-
const viteDevId = el
|
|
121
|
-
if (
|
|
135
|
+
if (import.meta.env.DEV && el instanceof HTMLStyleElement) {
|
|
136
|
+
const viteDevId = vueScopedStyleId(el);
|
|
137
|
+
if (viteDevId) {
|
|
122
138
|
return newDoc.head.querySelector(`style[data-vite-dev-id="${viteDevId}"]`);
|
|
123
139
|
}
|
|
124
140
|
}
|
|
@@ -167,5 +183,6 @@ export {
|
|
|
167
183
|
swapBodyElement,
|
|
168
184
|
swapFunctions,
|
|
169
185
|
swapHeadElements,
|
|
170
|
-
swapRootAttributes
|
|
186
|
+
swapRootAttributes,
|
|
187
|
+
vueScopedStyleId
|
|
171
188
|
};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "astro",
|
|
3
|
-
"version": "6.1.
|
|
3
|
+
"version": "6.1.8",
|
|
4
4
|
"description": "Astro is a modern site builder with web best practices, performance, and DX front-of-mind.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"author": "withastro",
|
|
@@ -153,8 +153,8 @@
|
|
|
153
153
|
"yargs-parser": "^22.0.0",
|
|
154
154
|
"zod": "^4.3.6",
|
|
155
155
|
"@astrojs/internal-helpers": "0.8.0",
|
|
156
|
-
"@astrojs/
|
|
157
|
-
"@astrojs/
|
|
156
|
+
"@astrojs/markdown-remark": "7.1.0",
|
|
157
|
+
"@astrojs/telemetry": "3.3.1"
|
|
158
158
|
},
|
|
159
159
|
"optionalDependencies": {
|
|
160
160
|
"sharp": "^0.34.0"
|
|
@@ -188,8 +188,8 @@
|
|
|
188
188
|
"undici": "^7.22.0",
|
|
189
189
|
"unified": "^11.0.5",
|
|
190
190
|
"vitest": "^4.1.0",
|
|
191
|
-
"
|
|
192
|
-
"
|
|
191
|
+
"astro-scripts": "0.0.14",
|
|
192
|
+
"@astrojs/check": "0.9.8"
|
|
193
193
|
},
|
|
194
194
|
"engines": {
|
|
195
195
|
"node": ">=22.12.0",
|
|
@@ -215,11 +215,9 @@
|
|
|
215
215
|
"test:e2e:match": "playwright test -g",
|
|
216
216
|
"test:e2e:chrome": "playwright test",
|
|
217
217
|
"test:e2e:firefox": "playwright test --config playwright.firefox.config.js",
|
|
218
|
-
"test:types": "tsc --
|
|
219
|
-
"typecheck:tests": "tsc --
|
|
220
|
-
"test:unit": "
|
|
221
|
-
"test:unit:js": "astro-scripts test \"test/units/**/*.test.js\" --teardown ./test/units/teardown.js",
|
|
222
|
-
"test:unit:ts": "astro-scripts test \"test/units/**/*.test.ts\" --strip-types --teardown ./test/units/teardown.js",
|
|
218
|
+
"test:types": "tsc --build test/types/tsconfig.json",
|
|
219
|
+
"typecheck:tests": "tsc --build tsconfig.test.json",
|
|
220
|
+
"test:unit": "astro-scripts test \"test/units/**/*.test.ts\" --strip-types --teardown ./test/units/teardown.ts",
|
|
223
221
|
"test:integration": "pnpm run test:integration:js && pnpm run test:integration:ts",
|
|
224
222
|
"test:integration:js": "astro-scripts test \"test/*.test.js\"",
|
|
225
223
|
"test:integration:ts": "astro-scripts test \"test/*.test.ts\" --strip-types"
|