astro 6.2.1 → 6.3.0
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/actions/handler.d.ts +32 -0
- package/dist/actions/handler.js +45 -0
- package/dist/actions/runtime/server.js +1 -1
- package/dist/assets/build/generate.js +1 -1
- package/dist/assets/build/remote.d.ts +3 -2
- package/dist/assets/build/remote.js +16 -9
- package/dist/assets/endpoint/generic.js +4 -7
- package/dist/assets/endpoint/shared.js +7 -2
- package/dist/assets/index.d.ts +1 -0
- package/dist/assets/index.js +2 -0
- package/dist/assets/internal.js +16 -1
- package/dist/assets/services/sharp.js +16 -1
- package/dist/assets/utils/index.d.ts +1 -0
- package/dist/assets/utils/index.js +2 -0
- package/dist/assets/utils/redirectValidation.d.ts +48 -0
- package/dist/assets/utils/redirectValidation.js +48 -0
- package/dist/assets/utils/remoteProbe.js +25 -2
- package/dist/cli/add/index.js +7 -4
- package/dist/cli/infra/build-time-astro-version-provider.js +1 -1
- package/dist/container/index.js +18 -14
- package/dist/content/content-layer.js +3 -4
- package/dist/content/loaders/types.d.ts +1 -1
- package/dist/content/server-listeners.js +0 -4
- package/dist/content/vite-plugin-content-virtual-mod.js +9 -1
- package/dist/core/app/base.d.ts +33 -15
- package/dist/core/app/base.js +120 -324
- package/dist/core/app/dev/app.d.ts +3 -2
- package/dist/core/app/dev/app.js +4 -60
- package/dist/core/app/entrypoints/virtual/dev.js +2 -0
- package/dist/core/app/entrypoints/virtual/prod.js +4 -1
- package/dist/core/app/prepare-response.d.ts +11 -0
- package/dist/core/app/prepare-response.js +18 -0
- package/dist/core/app/render-options.d.ts +11 -0
- package/dist/core/app/render-options.js +11 -0
- package/dist/core/base-pipeline.d.ts +38 -1
- package/dist/core/base-pipeline.js +50 -7
- package/dist/core/build/app.d.ts +3 -4
- package/dist/core/build/app.js +3 -17
- package/dist/core/build/plugins/plugin-css.js +7 -1
- package/dist/core/build/plugins/plugin-manifest.js +11 -1
- package/dist/core/build/static-build.js +16 -2
- package/dist/core/cache/handler.d.ts +29 -0
- package/dist/core/cache/handler.js +81 -0
- package/dist/core/compile/style.js +18 -1
- package/dist/core/config/index.d.ts +1 -1
- package/dist/core/config/index.js +4 -1
- package/dist/core/config/schemas/base.d.ts +4 -0
- package/dist/core/config/schemas/base.js +4 -0
- package/dist/core/config/schemas/relative.d.ts +6 -0
- package/dist/core/config/settings.js +2 -4
- package/dist/core/config/tsconfig.d.ts +24 -9
- package/dist/core/config/tsconfig.js +54 -45
- package/dist/core/constants.d.ts +27 -1
- package/dist/core/constants.js +14 -1
- package/dist/core/cookies/cookies.d.ts +7 -2
- package/dist/core/cookies/cookies.js +11 -4
- package/dist/core/cookies/response.d.ts +1 -1
- package/dist/core/cookies/response.js +1 -2
- package/dist/core/create-vite.js +15 -0
- package/dist/core/csp/runtime.js +6 -4
- package/dist/core/dev/dev.js +1 -1
- package/dist/core/errors/build-handler.d.ts +17 -0
- package/dist/core/errors/build-handler.js +22 -0
- package/dist/core/errors/default-handler.d.ts +14 -0
- package/dist/core/errors/default-handler.js +144 -0
- package/dist/core/errors/dev-handler.d.ts +21 -0
- package/dist/core/errors/dev-handler.js +82 -0
- package/dist/core/errors/handler.d.ts +9 -0
- package/dist/core/errors/handler.js +0 -0
- package/dist/core/fetch/default-handler.d.ts +17 -0
- package/dist/core/fetch/default-handler.js +45 -0
- package/dist/core/fetch/fetch-state.d.ts +244 -0
- package/dist/core/fetch/fetch-state.js +779 -0
- package/dist/core/fetch/index.d.ts +61 -0
- package/dist/core/fetch/index.js +121 -0
- package/dist/core/fetch/types.d.ts +6 -0
- package/dist/core/fetch/types.js +0 -0
- package/dist/core/fetch/vite-plugin.d.ts +5 -0
- package/dist/core/fetch/vite-plugin.js +69 -0
- package/dist/core/hono/index.d.ts +21 -0
- package/dist/core/hono/index.js +98 -0
- package/dist/core/i18n/handler.d.ts +18 -0
- package/dist/core/i18n/handler.js +119 -0
- package/dist/core/logger/core.d.ts +8 -0
- package/dist/core/logger/core.js +16 -0
- package/dist/core/messages/runtime.js +1 -1
- package/dist/core/middleware/astro-middleware.d.ts +27 -0
- package/dist/core/middleware/astro-middleware.js +53 -0
- package/dist/core/pages/handler.d.ts +20 -0
- package/dist/core/pages/handler.js +74 -0
- package/dist/core/redirects/render.d.ts +2 -2
- package/dist/core/redirects/render.js +7 -8
- package/dist/core/render/params-and-props.js +1 -1
- package/dist/core/render/slots.js +9 -2
- package/dist/core/rewrites/handler.d.ts +37 -0
- package/dist/core/rewrites/handler.js +67 -0
- package/dist/core/routing/3xx.js +8 -4
- package/dist/core/routing/handler.d.ts +17 -0
- package/dist/core/routing/handler.js +172 -0
- package/dist/core/routing/match.d.ts +0 -7
- package/dist/core/routing/match.js +0 -5
- package/dist/core/routing/pattern.js +1 -1
- package/dist/core/routing/rewrite.js +1 -4
- package/dist/core/routing/trailing-slash-handler.d.ts +18 -0
- package/dist/core/routing/trailing-slash-handler.js +67 -0
- package/dist/core/session/drivers.d.ts +1 -1
- package/dist/core/session/handler.d.ts +11 -0
- package/dist/core/session/handler.js +33 -0
- package/dist/core/session/runtime.js +7 -2
- package/dist/core/util/normalized-url.d.ts +10 -0
- package/dist/core/util/normalized-url.js +21 -0
- package/dist/i18n/middleware.d.ts +10 -0
- package/dist/i18n/middleware.js +4 -88
- package/dist/i18n/utils.js +2 -2
- package/dist/prefetch/index.js +12 -7
- package/dist/runtime/server/astro-island.js +57 -20
- package/dist/runtime/server/astro-island.prebuilt-dev.d.ts +1 -1
- package/dist/runtime/server/astro-island.prebuilt-dev.js +1 -1
- package/dist/runtime/server/astro-island.prebuilt.d.ts +1 -1
- package/dist/runtime/server/astro-island.prebuilt.js +1 -1
- package/dist/runtime/server/render/common.js +10 -4
- package/dist/runtime/server/render/server-islands.js +2 -1
- package/dist/runtime/server/scripts.js +6 -0
- package/dist/types/public/config.d.ts +46 -12
- package/dist/types/public/content.d.ts +4 -4
- package/dist/types/public/internal.d.ts +1 -1
- package/dist/vite-plugin-app/app.d.ts +4 -5
- package/dist/vite-plugin-app/app.js +20 -68
- package/dist/vite-plugin-astro/compile.js +2 -2
- package/dist/vite-plugin-astro/utils.d.ts +1 -0
- package/dist/vite-plugin-astro/utils.js +9 -1
- package/dist/vite-plugin-head/index.js +36 -19
- package/dist/vite-plugin-utils/index.d.ts +1 -0
- package/dist/vite-plugin-utils/index.js +3 -0
- package/package.json +13 -6
- package/dist/core/render-context.d.ts +0 -77
- package/dist/core/render-context.js +0 -826
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { PipelineFeatures } from "../base-pipeline.js";
|
|
2
|
+
import { AstroSession, PERSIST_SYMBOL } from "./runtime.js";
|
|
3
|
+
const SESSION_KEY = "session";
|
|
4
|
+
function provideSession(state) {
|
|
5
|
+
state.pipeline.usedFeatures |= PipelineFeatures.sessions;
|
|
6
|
+
const pipeline = state.pipeline;
|
|
7
|
+
const config = pipeline.manifest.sessionConfig;
|
|
8
|
+
if (!config) return;
|
|
9
|
+
return provideSessionAsync(state, config);
|
|
10
|
+
}
|
|
11
|
+
async function provideSessionAsync(state, config) {
|
|
12
|
+
const pipeline = state.pipeline;
|
|
13
|
+
const driverFactory = await pipeline.getSessionDriver();
|
|
14
|
+
if (!driverFactory) return;
|
|
15
|
+
state.provide(SESSION_KEY, {
|
|
16
|
+
create() {
|
|
17
|
+
const cookies = state.cookies;
|
|
18
|
+
return new AstroSession({
|
|
19
|
+
cookies,
|
|
20
|
+
config,
|
|
21
|
+
runtimeMode: pipeline.runtimeMode,
|
|
22
|
+
driverFactory,
|
|
23
|
+
mockStorage: null
|
|
24
|
+
});
|
|
25
|
+
},
|
|
26
|
+
finalize(session) {
|
|
27
|
+
return session[PERSIST_SYMBOL]();
|
|
28
|
+
}
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
export {
|
|
32
|
+
provideSession
|
|
33
|
+
};
|
|
@@ -121,7 +121,8 @@ class AstroSession {
|
|
|
121
121
|
* Deletes a session value.
|
|
122
122
|
*/
|
|
123
123
|
delete(key) {
|
|
124
|
-
this.#data
|
|
124
|
+
this.#data ??= /* @__PURE__ */ new Map();
|
|
125
|
+
this.#data.delete(key);
|
|
125
126
|
if (this.#partial) {
|
|
126
127
|
this.#toDelete.add(key);
|
|
127
128
|
}
|
|
@@ -272,11 +273,15 @@ class AstroSession {
|
|
|
272
273
|
* If there is existing partial data, it will be merged into the new data object.
|
|
273
274
|
*/
|
|
274
275
|
async #ensureData() {
|
|
275
|
-
const storage = await this.#ensureStorage();
|
|
276
276
|
if (this.#data && !this.#partial) {
|
|
277
277
|
return this.#data;
|
|
278
278
|
}
|
|
279
279
|
this.#data ??= /* @__PURE__ */ new Map();
|
|
280
|
+
if (!this.#sessionID && !this.#cookies.get(this.#cookieName)?.value) {
|
|
281
|
+
this.#partial = false;
|
|
282
|
+
return this.#data;
|
|
283
|
+
}
|
|
284
|
+
const storage = await this.#ensureStorage();
|
|
280
285
|
const raw = await storage.get(this.#ensureSessionID());
|
|
281
286
|
if (!raw) {
|
|
282
287
|
if (this.#sessionIDFromCookie) {
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Creates a normalized URL from a request URL string.
|
|
3
|
+
* Decodes and validates the pathname, collapses duplicate slashes.
|
|
4
|
+
*/
|
|
5
|
+
export declare function createNormalizedUrl(requestUrl: string): URL;
|
|
6
|
+
/**
|
|
7
|
+
* Normalizes an already-parsed URL in place: decodes and validates the
|
|
8
|
+
* pathname, collapses duplicate slashes. Returns the same URL object.
|
|
9
|
+
*/
|
|
10
|
+
export declare function normalizeUrl(url: URL): URL;
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { collapseDuplicateSlashes } from "@astrojs/internal-helpers/path";
|
|
2
|
+
import { validateAndDecodePathname } from "./pathname.js";
|
|
3
|
+
function createNormalizedUrl(requestUrl) {
|
|
4
|
+
return normalizeUrl(new URL(requestUrl));
|
|
5
|
+
}
|
|
6
|
+
function normalizeUrl(url) {
|
|
7
|
+
try {
|
|
8
|
+
url.pathname = validateAndDecodePathname(url.pathname);
|
|
9
|
+
} catch {
|
|
10
|
+
try {
|
|
11
|
+
url.pathname = decodeURI(url.pathname);
|
|
12
|
+
} catch {
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
url.pathname = collapseDuplicateSlashes(url.pathname);
|
|
16
|
+
return url;
|
|
17
|
+
}
|
|
18
|
+
export {
|
|
19
|
+
createNormalizedUrl,
|
|
20
|
+
normalizeUrl
|
|
21
|
+
};
|
|
@@ -1,3 +1,13 @@
|
|
|
1
1
|
import type { SSRManifest } from '../core/app/types.js';
|
|
2
2
|
import type { MiddlewareHandler } from '../types/public/common.js';
|
|
3
|
+
/**
|
|
4
|
+
* Builds a `MiddlewareHandler` that post-processes the rendered response
|
|
5
|
+
* against the given i18n configuration. This is a thin wrapper around
|
|
6
|
+
* `core/i18n/handler.ts#I18n` that preserves the middleware-shaped API
|
|
7
|
+
* exposed to users via `astro:i18n.middleware(...)` for the manual
|
|
8
|
+
* routing strategy.
|
|
9
|
+
*
|
|
10
|
+
* Internal request handling no longer uses this — `AstroHandler.render`
|
|
11
|
+
* invokes `I18n.finalize` directly as an explicit post-processing step.
|
|
12
|
+
*/
|
|
3
13
|
export declare function createI18nMiddleware(i18n: SSRManifest['i18n'], base: SSRManifest['base'], trailingSlash: SSRManifest['trailingSlash'], format: SSRManifest['buildFormat']): MiddlewareHandler;
|
package/dist/i18n/middleware.js
CHANGED
|
@@ -1,95 +1,11 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import { REROUTE_DIRECTIVE_HEADER, ROUTE_TYPE_HEADER } from "../core/constants.js";
|
|
4
|
-
import { computeFallbackRoute } from "./fallback.js";
|
|
5
|
-
import { I18nRouter } from "./router.js";
|
|
1
|
+
import { getFetchStateFromAPIContext } from "../core/fetch/fetch-state.js";
|
|
2
|
+
import { I18n } from "../core/i18n/handler.js";
|
|
6
3
|
function createI18nMiddleware(i18n, base, trailingSlash, format) {
|
|
7
4
|
if (!i18n) return (_, next) => next();
|
|
8
|
-
const
|
|
9
|
-
strategy: i18n.strategy,
|
|
10
|
-
defaultLocale: i18n.defaultLocale,
|
|
11
|
-
locales: i18n.locales,
|
|
12
|
-
base,
|
|
13
|
-
domains: i18n.domainLookupTable ? Object.keys(i18n.domainLookupTable).reduce(
|
|
14
|
-
(acc, domain) => {
|
|
15
|
-
const locale = i18n.domainLookupTable[domain];
|
|
16
|
-
if (!acc[domain]) {
|
|
17
|
-
acc[domain] = [];
|
|
18
|
-
}
|
|
19
|
-
acc[domain].push(locale);
|
|
20
|
-
return acc;
|
|
21
|
-
},
|
|
22
|
-
{}
|
|
23
|
-
) : void 0
|
|
24
|
-
});
|
|
5
|
+
const handler = new I18n(i18n, base, trailingSlash, format);
|
|
25
6
|
return async (context, next) => {
|
|
26
7
|
const response = await next();
|
|
27
|
-
|
|
28
|
-
const isReroute = response.headers.get(REROUTE_DIRECTIVE_HEADER);
|
|
29
|
-
if (isReroute === "no" && typeof i18n.fallback === "undefined") {
|
|
30
|
-
return response;
|
|
31
|
-
}
|
|
32
|
-
if (typeHeader !== "page" && typeHeader !== "fallback") {
|
|
33
|
-
return response;
|
|
34
|
-
}
|
|
35
|
-
const routerContext = {
|
|
36
|
-
currentLocale: context.currentLocale,
|
|
37
|
-
currentDomain: context.url.hostname,
|
|
38
|
-
routeType: typeHeader,
|
|
39
|
-
isReroute: isReroute === "yes"
|
|
40
|
-
};
|
|
41
|
-
const routeDecision = i18nRouter.match(context.url.pathname, routerContext);
|
|
42
|
-
switch (routeDecision.type) {
|
|
43
|
-
case "redirect": {
|
|
44
|
-
let location = routeDecision.location;
|
|
45
|
-
if (shouldAppendForwardSlash(trailingSlash, format)) {
|
|
46
|
-
location = appendForwardSlash(location);
|
|
47
|
-
}
|
|
48
|
-
return context.redirect(location, routeDecision.status);
|
|
49
|
-
}
|
|
50
|
-
case "notFound": {
|
|
51
|
-
if (context.isPrerendered) {
|
|
52
|
-
const prerenderedRes = new Response(response.body, {
|
|
53
|
-
status: 404,
|
|
54
|
-
headers: response.headers
|
|
55
|
-
});
|
|
56
|
-
prerenderedRes.headers.set(REROUTE_DIRECTIVE_HEADER, "no");
|
|
57
|
-
if (routeDecision.location) {
|
|
58
|
-
prerenderedRes.headers.set("Location", routeDecision.location);
|
|
59
|
-
}
|
|
60
|
-
return prerenderedRes;
|
|
61
|
-
}
|
|
62
|
-
const headers = new Headers();
|
|
63
|
-
if (routeDecision.location) {
|
|
64
|
-
headers.set("Location", routeDecision.location);
|
|
65
|
-
}
|
|
66
|
-
return new Response(null, { status: 404, headers });
|
|
67
|
-
}
|
|
68
|
-
case "continue":
|
|
69
|
-
break;
|
|
70
|
-
}
|
|
71
|
-
if (i18n.fallback && i18n.fallbackType) {
|
|
72
|
-
const fallbackDecision = computeFallbackRoute({
|
|
73
|
-
pathname: context.url.pathname,
|
|
74
|
-
responseStatus: response.status,
|
|
75
|
-
currentLocale: context.currentLocale,
|
|
76
|
-
fallback: i18n.fallback,
|
|
77
|
-
fallbackType: i18n.fallbackType,
|
|
78
|
-
locales: i18n.locales,
|
|
79
|
-
defaultLocale: i18n.defaultLocale,
|
|
80
|
-
strategy: i18n.strategy,
|
|
81
|
-
base
|
|
82
|
-
});
|
|
83
|
-
switch (fallbackDecision.type) {
|
|
84
|
-
case "redirect":
|
|
85
|
-
return context.redirect(fallbackDecision.pathname + context.url.search);
|
|
86
|
-
case "rewrite":
|
|
87
|
-
return await context.rewrite(fallbackDecision.pathname + context.url.search);
|
|
88
|
-
case "none":
|
|
89
|
-
break;
|
|
90
|
-
}
|
|
91
|
-
}
|
|
92
|
-
return response;
|
|
8
|
+
return handler.finalize(getFetchStateFromAPIContext(context), response);
|
|
93
9
|
};
|
|
94
10
|
}
|
|
95
11
|
export {
|
package/dist/i18n/utils.js
CHANGED
|
@@ -55,7 +55,7 @@ function computePreferredLocale(request, locales) {
|
|
|
55
55
|
const browserLocaleList = sortAndFilterLocales(parseLocale(acceptHeader), locales);
|
|
56
56
|
const firstResult = browserLocaleList.at(0);
|
|
57
57
|
if (firstResult && firstResult.locale !== "*") {
|
|
58
|
-
for (const currentLocale of locales) {
|
|
58
|
+
outer: for (const currentLocale of locales) {
|
|
59
59
|
if (typeof currentLocale === "string") {
|
|
60
60
|
if (normalizeTheLocale(currentLocale) === normalizeTheLocale(firstResult.locale)) {
|
|
61
61
|
result = currentLocale;
|
|
@@ -65,7 +65,7 @@ function computePreferredLocale(request, locales) {
|
|
|
65
65
|
for (const currentCode of currentLocale.codes) {
|
|
66
66
|
if (normalizeTheLocale(currentCode) === normalizeTheLocale(firstResult.locale)) {
|
|
67
67
|
result = currentCode;
|
|
68
|
-
break;
|
|
68
|
+
break outer;
|
|
69
69
|
}
|
|
70
70
|
}
|
|
71
71
|
}
|
package/dist/prefetch/index.js
CHANGED
|
@@ -24,8 +24,9 @@ function initTapStrategy() {
|
|
|
24
24
|
document.addEventListener(
|
|
25
25
|
event,
|
|
26
26
|
(e) => {
|
|
27
|
-
|
|
28
|
-
|
|
27
|
+
const anchor = e.target.closest("a");
|
|
28
|
+
if (elMatchesStrategy(anchor, "tap")) {
|
|
29
|
+
prefetch(anchor.href, { ignoreSlowConnection: true });
|
|
29
30
|
}
|
|
30
31
|
},
|
|
31
32
|
{ passive: true }
|
|
@@ -37,8 +38,9 @@ function initHoverStrategy() {
|
|
|
37
38
|
document.body.addEventListener(
|
|
38
39
|
"focusin",
|
|
39
40
|
(e) => {
|
|
40
|
-
|
|
41
|
-
|
|
41
|
+
const anchor = e.target.closest("a");
|
|
42
|
+
if (elMatchesStrategy(anchor, "hover")) {
|
|
43
|
+
handleHoverIn(anchor.href);
|
|
42
44
|
}
|
|
43
45
|
},
|
|
44
46
|
{ passive: true }
|
|
@@ -49,13 +51,16 @@ function initHoverStrategy() {
|
|
|
49
51
|
if (listenedAnchors.has(anchor)) continue;
|
|
50
52
|
if (elMatchesStrategy(anchor, "hover")) {
|
|
51
53
|
listenedAnchors.add(anchor);
|
|
52
|
-
anchor.addEventListener(
|
|
54
|
+
anchor.addEventListener(
|
|
55
|
+
"mouseenter",
|
|
56
|
+
(e) => handleHoverIn(e.currentTarget.href),
|
|
57
|
+
{ passive: true }
|
|
58
|
+
);
|
|
53
59
|
anchor.addEventListener("mouseleave", handleHoverOut, { passive: true });
|
|
54
60
|
}
|
|
55
61
|
}
|
|
56
62
|
});
|
|
57
|
-
function handleHoverIn(
|
|
58
|
-
const href = e.target.href;
|
|
63
|
+
function handleHoverIn(href) {
|
|
59
64
|
if (timeout) {
|
|
60
65
|
clearTimeout(timeout);
|
|
61
66
|
}
|
|
@@ -59,6 +59,37 @@ const FORBIDDEN_COMPONENT_EXPORT_KEYS = /* @__PURE__ */ new Set(["__proto__", "c
|
|
|
59
59
|
}
|
|
60
60
|
this.start();
|
|
61
61
|
}
|
|
62
|
+
getRetryImportUrl(url) {
|
|
63
|
+
const parsed = new URL(url, document.baseURI);
|
|
64
|
+
const retryToken = `astro-retry=${Date.now()}`;
|
|
65
|
+
const currentHash = parsed.hash.replace(/^#/, "");
|
|
66
|
+
parsed.hash = currentHash ? `${currentHash}&${retryToken}` : retryToken;
|
|
67
|
+
return parsed.toString();
|
|
68
|
+
}
|
|
69
|
+
async importWithRetry(url) {
|
|
70
|
+
try {
|
|
71
|
+
return await import(url);
|
|
72
|
+
} catch {
|
|
73
|
+
await new Promise((resolve) => setTimeout(resolve, 1e3));
|
|
74
|
+
return import(this.getRetryImportUrl(url));
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
handleHydrationError(error) {
|
|
78
|
+
const componentUrl = this.getAttribute("component-url");
|
|
79
|
+
const event = new CustomEvent("astro:hydration-error", {
|
|
80
|
+
cancelable: true,
|
|
81
|
+
bubbles: true,
|
|
82
|
+
composed: true,
|
|
83
|
+
detail: {
|
|
84
|
+
error,
|
|
85
|
+
componentUrl
|
|
86
|
+
}
|
|
87
|
+
});
|
|
88
|
+
const shouldLogError = this.dispatchEvent(event);
|
|
89
|
+
if (shouldLogError) {
|
|
90
|
+
console.error(`[astro-island] Error hydrating ${componentUrl}`, error);
|
|
91
|
+
}
|
|
92
|
+
}
|
|
62
93
|
async start() {
|
|
63
94
|
const opts = JSON.parse(this.getAttribute("opts"));
|
|
64
95
|
const directive = this.getAttribute("client");
|
|
@@ -70,34 +101,40 @@ const FORBIDDEN_COMPONENT_EXPORT_KEYS = /* @__PURE__ */ new Set(["__proto__", "c
|
|
|
70
101
|
await Astro[directive](
|
|
71
102
|
async () => {
|
|
72
103
|
const rendererUrl = this.getAttribute("renderer-url");
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
if (
|
|
81
|
-
|
|
82
|
-
}
|
|
83
|
-
this.Component = componentModule[componentExport];
|
|
84
|
-
} else {
|
|
85
|
-
this.Component = componentModule;
|
|
86
|
-
for (const part of componentExport.split(".")) {
|
|
87
|
-
if (FORBIDDEN_COMPONENT_EXPORT_KEYS.has(part) || !this.Component || typeof this.Component !== "object" && typeof this.Component !== "function" || !Object.hasOwn(this.Component, part)) {
|
|
104
|
+
try {
|
|
105
|
+
const [componentModule, { default: hydrator }] = await Promise.all([
|
|
106
|
+
this.importWithRetry(this.getAttribute("component-url")),
|
|
107
|
+
rendererUrl ? this.importWithRetry(rendererUrl) : Promise.resolve({ default: () => () => {
|
|
108
|
+
} })
|
|
109
|
+
]);
|
|
110
|
+
const componentExport = this.getAttribute("component-export") || "default";
|
|
111
|
+
if (!componentExport.includes(".")) {
|
|
112
|
+
if (FORBIDDEN_COMPONENT_EXPORT_KEYS.has(componentExport)) {
|
|
88
113
|
throw new Error(`Invalid component export path: ${componentExport}`);
|
|
89
114
|
}
|
|
90
|
-
this.Component =
|
|
115
|
+
this.Component = componentModule[componentExport];
|
|
116
|
+
} else {
|
|
117
|
+
this.Component = componentModule;
|
|
118
|
+
for (const part of componentExport.split(".")) {
|
|
119
|
+
if (FORBIDDEN_COMPONENT_EXPORT_KEYS.has(part) || !this.Component || typeof this.Component !== "object" && typeof this.Component !== "function" || !Object.hasOwn(this.Component, part)) {
|
|
120
|
+
throw new Error(`Invalid component export path: ${componentExport}`);
|
|
121
|
+
}
|
|
122
|
+
this.Component = this.Component[part];
|
|
123
|
+
}
|
|
91
124
|
}
|
|
125
|
+
this.hydrator = hydrator;
|
|
126
|
+
return this.hydrate;
|
|
127
|
+
} catch (error) {
|
|
128
|
+
this.handleHydrationError(error);
|
|
129
|
+
return () => {
|
|
130
|
+
};
|
|
92
131
|
}
|
|
93
|
-
this.hydrator = hydrator;
|
|
94
|
-
return this.hydrate;
|
|
95
132
|
},
|
|
96
133
|
opts,
|
|
97
134
|
this
|
|
98
135
|
);
|
|
99
|
-
} catch (
|
|
100
|
-
|
|
136
|
+
} catch (error) {
|
|
137
|
+
this.handleHydrationError(error);
|
|
101
138
|
}
|
|
102
139
|
}
|
|
103
140
|
hydrate = async () => {
|
|
@@ -3,5 +3,5 @@
|
|
|
3
3
|
* Do not edit this directly, but instead edit that file and rerun the prebuild
|
|
4
4
|
* to generate this file.
|
|
5
5
|
*/
|
|
6
|
-
declare const _default: "(()=>{var
|
|
6
|
+
declare const _default: "(()=>{var g=Object.defineProperty;var w=(d,s,h)=>s in d?g(d,s,{enumerable:!0,configurable:!0,writable:!0,value:h}):d[s]=h;var l=(d,s,h)=>w(d,typeof s!=\"symbol\"?s+\"\":s,h);var E=new Set([\"__proto__\",\"constructor\",\"prototype\"]);{let d={0:t=>y(t),1:t=>h(t),2:t=>new RegExp(t),3:t=>new Date(t),4:t=>new Map(h(t)),5:t=>new Set(h(t)),6:t=>BigInt(t),7:t=>new URL(t),8:t=>new Uint8Array(t),9:t=>new Uint16Array(t),10:t=>new Uint32Array(t),11:t=>Number.POSITIVE_INFINITY*t},s=t=>{let[p,e]=t;return p in d?d[p](e):void 0},h=t=>t.map(s),y=t=>typeof t!=\"object\"||t===null?t:Object.fromEntries(Object.entries(t).map(([p,e])=>[p,s(e)]));class f extends HTMLElement{constructor(){super(...arguments);l(this,\"Component\");l(this,\"hydrator\");l(this,\"hydrate\",async()=>{var b;if(!this.hydrator||!this.isConnected)return;let e=(b=this.parentElement)==null?void 0:b.closest(\"astro-island[ssr]\");if(e){e.addEventListener(\"astro:hydrate\",this.hydrate,{once:!0});return}let n=this.querySelectorAll(\"astro-slot\"),r={},i=this.querySelectorAll(\"template[data-astro-template]\");for(let o of i){let c=o.closest(this.tagName);c!=null&&c.isSameNode(this)&&(r[o.getAttribute(\"data-astro-template\")||\"default\"]=o.innerHTML,o.remove())}for(let o of n){let c=o.closest(this.tagName);c!=null&&c.isSameNode(this)&&(r[o.getAttribute(\"name\")||\"default\"]=o.innerHTML)}let m;try{m=this.hasAttribute(\"props\")?y(JSON.parse(this.getAttribute(\"props\"))):{}}catch(o){let c=this.getAttribute(\"component-url\")||\"<unknown>\",v=this.getAttribute(\"component-export\");throw v&&(c+=` (export ${v})`),console.error(`[hydrate] Error parsing props for component ${c}`,this.getAttribute(\"props\"),o),o}let a,u=this.hydrator(this);a=performance.now(),await u(this.Component,m,r,{client:this.getAttribute(\"client\")}),a&&this.setAttribute(\"client-render-time\",(performance.now()-a).toString()),this.removeAttribute(\"ssr\"),this.dispatchEvent(new CustomEvent(\"astro:hydrate\"))});l(this,\"unmount\",()=>{this.isConnected||this.dispatchEvent(new CustomEvent(\"astro:unmount\"))})}disconnectedCallback(){document.removeEventListener(\"astro:after-swap\",this.unmount),document.addEventListener(\"astro:after-swap\",this.unmount,{once:!0})}connectedCallback(){if(!this.hasAttribute(\"await-children\")||document.readyState===\"interactive\"||document.readyState===\"complete\")this.childrenConnectedCallback();else{let e=()=>{document.removeEventListener(\"DOMContentLoaded\",e),n.disconnect(),this.childrenConnectedCallback()},n=new MutationObserver(()=>{var r;((r=this.lastChild)==null?void 0:r.nodeType)===Node.COMMENT_NODE&&this.lastChild.nodeValue===\"astro:end\"&&(this.lastChild.remove(),e())});n.observe(this,{childList:!0}),document.addEventListener(\"DOMContentLoaded\",e)}}async childrenConnectedCallback(){let e=this.getAttribute(\"before-hydration-url\");e&&await import(e),this.start()}getRetryImportUrl(e){let n=new URL(e,document.baseURI),r=`astro-retry=${Date.now()}`,i=n.hash.replace(/^#/,\"\");return n.hash=i?`${i}&${r}`:r,n.toString()}async importWithRetry(e){try{return await import(e)}catch(n){return await new Promise(r=>setTimeout(r,1e3)),import(this.getRetryImportUrl(e))}}handleHydrationError(e){let n=this.getAttribute(\"component-url\"),r=new CustomEvent(\"astro:hydration-error\",{cancelable:!0,bubbles:!0,composed:!0,detail:{error:e,componentUrl:n}});this.dispatchEvent(r)&&console.error(`[astro-island] Error hydrating ${n}`,e)}async start(){let e=JSON.parse(this.getAttribute(\"opts\")),n=this.getAttribute(\"client\");if(Astro[n]===void 0){window.addEventListener(`astro:${n}`,()=>this.start(),{once:!0});return}try{await Astro[n](async()=>{let r=this.getAttribute(\"renderer-url\");try{let[i,{default:m}]=await Promise.all([this.importWithRetry(this.getAttribute(\"component-url\")),r?this.importWithRetry(r):Promise.resolve({default:()=>()=>{}})]),a=this.getAttribute(\"component-export\")||\"default\";if(a.includes(\".\")){this.Component=i;for(let u of a.split(\".\")){if(E.has(u)||!this.Component||typeof this.Component!=\"object\"&&typeof this.Component!=\"function\"||!Object.hasOwn(this.Component,u))throw new Error(`Invalid component export path: ${a}`);this.Component=this.Component[u]}}else{if(E.has(a))throw new Error(`Invalid component export path: ${a}`);this.Component=i[a]}return this.hydrator=m,this.hydrate}catch(i){return this.handleHydrationError(i),()=>{}}},e,this)}catch(r){this.handleHydrationError(r)}}attributeChangedCallback(){this.hydrate()}}l(f,\"observedAttributes\",[\"props\"]),customElements.get(\"astro-island\")||customElements.define(\"astro-island\",f)}})();";
|
|
7
7
|
export default _default;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
var astro_island_prebuilt_dev_default = `(()=>{var
|
|
1
|
+
var astro_island_prebuilt_dev_default = `(()=>{var g=Object.defineProperty;var w=(d,s,h)=>s in d?g(d,s,{enumerable:!0,configurable:!0,writable:!0,value:h}):d[s]=h;var l=(d,s,h)=>w(d,typeof s!="symbol"?s+"":s,h);var E=new Set(["__proto__","constructor","prototype"]);{let d={0:t=>y(t),1:t=>h(t),2:t=>new RegExp(t),3:t=>new Date(t),4:t=>new Map(h(t)),5:t=>new Set(h(t)),6:t=>BigInt(t),7:t=>new URL(t),8:t=>new Uint8Array(t),9:t=>new Uint16Array(t),10:t=>new Uint32Array(t),11:t=>Number.POSITIVE_INFINITY*t},s=t=>{let[p,e]=t;return p in d?d[p](e):void 0},h=t=>t.map(s),y=t=>typeof t!="object"||t===null?t:Object.fromEntries(Object.entries(t).map(([p,e])=>[p,s(e)]));class f extends HTMLElement{constructor(){super(...arguments);l(this,"Component");l(this,"hydrator");l(this,"hydrate",async()=>{var b;if(!this.hydrator||!this.isConnected)return;let e=(b=this.parentElement)==null?void 0:b.closest("astro-island[ssr]");if(e){e.addEventListener("astro:hydrate",this.hydrate,{once:!0});return}let n=this.querySelectorAll("astro-slot"),r={},i=this.querySelectorAll("template[data-astro-template]");for(let o of i){let c=o.closest(this.tagName);c!=null&&c.isSameNode(this)&&(r[o.getAttribute("data-astro-template")||"default"]=o.innerHTML,o.remove())}for(let o of n){let c=o.closest(this.tagName);c!=null&&c.isSameNode(this)&&(r[o.getAttribute("name")||"default"]=o.innerHTML)}let m;try{m=this.hasAttribute("props")?y(JSON.parse(this.getAttribute("props"))):{}}catch(o){let c=this.getAttribute("component-url")||"<unknown>",v=this.getAttribute("component-export");throw v&&(c+=\` (export \${v})\`),console.error(\`[hydrate] Error parsing props for component \${c}\`,this.getAttribute("props"),o),o}let a,u=this.hydrator(this);a=performance.now(),await u(this.Component,m,r,{client:this.getAttribute("client")}),a&&this.setAttribute("client-render-time",(performance.now()-a).toString()),this.removeAttribute("ssr"),this.dispatchEvent(new CustomEvent("astro:hydrate"))});l(this,"unmount",()=>{this.isConnected||this.dispatchEvent(new CustomEvent("astro:unmount"))})}disconnectedCallback(){document.removeEventListener("astro:after-swap",this.unmount),document.addEventListener("astro:after-swap",this.unmount,{once:!0})}connectedCallback(){if(!this.hasAttribute("await-children")||document.readyState==="interactive"||document.readyState==="complete")this.childrenConnectedCallback();else{let e=()=>{document.removeEventListener("DOMContentLoaded",e),n.disconnect(),this.childrenConnectedCallback()},n=new MutationObserver(()=>{var r;((r=this.lastChild)==null?void 0:r.nodeType)===Node.COMMENT_NODE&&this.lastChild.nodeValue==="astro:end"&&(this.lastChild.remove(),e())});n.observe(this,{childList:!0}),document.addEventListener("DOMContentLoaded",e)}}async childrenConnectedCallback(){let e=this.getAttribute("before-hydration-url");e&&await import(e),this.start()}getRetryImportUrl(e){let n=new URL(e,document.baseURI),r=\`astro-retry=\${Date.now()}\`,i=n.hash.replace(/^#/,"");return n.hash=i?\`\${i}&\${r}\`:r,n.toString()}async importWithRetry(e){try{return await import(e)}catch(n){return await new Promise(r=>setTimeout(r,1e3)),import(this.getRetryImportUrl(e))}}handleHydrationError(e){let n=this.getAttribute("component-url"),r=new CustomEvent("astro:hydration-error",{cancelable:!0,bubbles:!0,composed:!0,detail:{error:e,componentUrl:n}});this.dispatchEvent(r)&&console.error(\`[astro-island] Error hydrating \${n}\`,e)}async start(){let e=JSON.parse(this.getAttribute("opts")),n=this.getAttribute("client");if(Astro[n]===void 0){window.addEventListener(\`astro:\${n}\`,()=>this.start(),{once:!0});return}try{await Astro[n](async()=>{let r=this.getAttribute("renderer-url");try{let[i,{default:m}]=await Promise.all([this.importWithRetry(this.getAttribute("component-url")),r?this.importWithRetry(r):Promise.resolve({default:()=>()=>{}})]),a=this.getAttribute("component-export")||"default";if(a.includes(".")){this.Component=i;for(let u of a.split(".")){if(E.has(u)||!this.Component||typeof this.Component!="object"&&typeof this.Component!="function"||!Object.hasOwn(this.Component,u))throw new Error(\`Invalid component export path: \${a}\`);this.Component=this.Component[u]}}else{if(E.has(a))throw new Error(\`Invalid component export path: \${a}\`);this.Component=i[a]}return this.hydrator=m,this.hydrate}catch(i){return this.handleHydrationError(i),()=>{}}},e,this)}catch(r){this.handleHydrationError(r)}}attributeChangedCallback(){this.hydrate()}}l(f,"observedAttributes",["props"]),customElements.get("astro-island")||customElements.define("astro-island",f)}})();`;
|
|
2
2
|
export {
|
|
3
3
|
astro_island_prebuilt_dev_default as default
|
|
4
4
|
};
|
|
@@ -3,5 +3,5 @@
|
|
|
3
3
|
* Do not edit this directly, but instead edit that file and rerun the prebuild
|
|
4
4
|
* to generate this file.
|
|
5
5
|
*/
|
|
6
|
-
declare const _default: "(()=>{var
|
|
6
|
+
declare const _default: "(()=>{var g=Object.defineProperty;var w=(c,s,d)=>s in c?g(c,s,{enumerable:!0,configurable:!0,writable:!0,value:d}):c[s]=d;var l=(c,s,d)=>w(c,typeof s!=\"symbol\"?s+\"\":s,d);var E=new Set([\"__proto__\",\"constructor\",\"prototype\"]);{let c={0:t=>y(t),1:t=>d(t),2:t=>new RegExp(t),3:t=>new Date(t),4:t=>new Map(d(t)),5:t=>new Set(d(t)),6:t=>BigInt(t),7:t=>new URL(t),8:t=>new Uint8Array(t),9:t=>new Uint16Array(t),10:t=>new Uint32Array(t),11:t=>Number.POSITIVE_INFINITY*t},s=t=>{let[p,e]=t;return p in c?c[p](e):void 0},d=t=>t.map(s),y=t=>typeof t!=\"object\"||t===null?t:Object.fromEntries(Object.entries(t).map(([p,e])=>[p,s(e)]));class f extends HTMLElement{constructor(){super(...arguments);l(this,\"Component\");l(this,\"hydrator\");l(this,\"hydrate\",async()=>{var b;if(!this.hydrator||!this.isConnected)return;let e=(b=this.parentElement)==null?void 0:b.closest(\"astro-island[ssr]\");if(e){e.addEventListener(\"astro:hydrate\",this.hydrate,{once:!0});return}let n=this.querySelectorAll(\"astro-slot\"),r={},i=this.querySelectorAll(\"template[data-astro-template]\");for(let o of i){let a=o.closest(this.tagName);a!=null&&a.isSameNode(this)&&(r[o.getAttribute(\"data-astro-template\")||\"default\"]=o.innerHTML,o.remove())}for(let o of n){let a=o.closest(this.tagName);a!=null&&a.isSameNode(this)&&(r[o.getAttribute(\"name\")||\"default\"]=o.innerHTML)}let u;try{u=this.hasAttribute(\"props\")?y(JSON.parse(this.getAttribute(\"props\"))):{}}catch(o){let a=this.getAttribute(\"component-url\")||\"<unknown>\",v=this.getAttribute(\"component-export\");throw v&&(a+=` (export ${v})`),console.error(`[hydrate] Error parsing props for component ${a}`,this.getAttribute(\"props\"),o),o}let h;await this.hydrator(this)(this.Component,u,r,{client:this.getAttribute(\"client\")}),this.removeAttribute(\"ssr\"),this.dispatchEvent(new CustomEvent(\"astro:hydrate\"))});l(this,\"unmount\",()=>{this.isConnected||this.dispatchEvent(new CustomEvent(\"astro:unmount\"))})}disconnectedCallback(){document.removeEventListener(\"astro:after-swap\",this.unmount),document.addEventListener(\"astro:after-swap\",this.unmount,{once:!0})}connectedCallback(){if(!this.hasAttribute(\"await-children\")||document.readyState===\"interactive\"||document.readyState===\"complete\")this.childrenConnectedCallback();else{let e=()=>{document.removeEventListener(\"DOMContentLoaded\",e),n.disconnect(),this.childrenConnectedCallback()},n=new MutationObserver(()=>{var r;((r=this.lastChild)==null?void 0:r.nodeType)===Node.COMMENT_NODE&&this.lastChild.nodeValue===\"astro:end\"&&(this.lastChild.remove(),e())});n.observe(this,{childList:!0}),document.addEventListener(\"DOMContentLoaded\",e)}}async childrenConnectedCallback(){let e=this.getAttribute(\"before-hydration-url\");e&&await import(e),this.start()}getRetryImportUrl(e){let n=new URL(e,document.baseURI),r=`astro-retry=${Date.now()}`,i=n.hash.replace(/^#/,\"\");return n.hash=i?`${i}&${r}`:r,n.toString()}async importWithRetry(e){try{return await import(e)}catch(n){return await new Promise(r=>setTimeout(r,1e3)),import(this.getRetryImportUrl(e))}}handleHydrationError(e){let n=this.getAttribute(\"component-url\"),r=new CustomEvent(\"astro:hydration-error\",{cancelable:!0,bubbles:!0,composed:!0,detail:{error:e,componentUrl:n}});this.dispatchEvent(r)&&console.error(`[astro-island] Error hydrating ${n}`,e)}async start(){let e=JSON.parse(this.getAttribute(\"opts\")),n=this.getAttribute(\"client\");if(Astro[n]===void 0){window.addEventListener(`astro:${n}`,()=>this.start(),{once:!0});return}try{await Astro[n](async()=>{let r=this.getAttribute(\"renderer-url\");try{let[i,{default:u}]=await Promise.all([this.importWithRetry(this.getAttribute(\"component-url\")),r?this.importWithRetry(r):Promise.resolve({default:()=>()=>{}})]),h=this.getAttribute(\"component-export\")||\"default\";if(h.includes(\".\")){this.Component=i;for(let m of h.split(\".\")){if(E.has(m)||!this.Component||typeof this.Component!=\"object\"&&typeof this.Component!=\"function\"||!Object.hasOwn(this.Component,m))throw new Error(`Invalid component export path: ${h}`);this.Component=this.Component[m]}}else{if(E.has(h))throw new Error(`Invalid component export path: ${h}`);this.Component=i[h]}return this.hydrator=u,this.hydrate}catch(i){return this.handleHydrationError(i),()=>{}}},e,this)}catch(r){this.handleHydrationError(r)}}attributeChangedCallback(){this.hydrate()}}l(f,\"observedAttributes\",[\"props\"]),customElements.get(\"astro-island\")||customElements.define(\"astro-island\",f)}})();";
|
|
7
7
|
export default _default;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
var astro_island_prebuilt_default = `(()=>{var
|
|
1
|
+
var astro_island_prebuilt_default = `(()=>{var g=Object.defineProperty;var w=(c,s,d)=>s in c?g(c,s,{enumerable:!0,configurable:!0,writable:!0,value:d}):c[s]=d;var l=(c,s,d)=>w(c,typeof s!="symbol"?s+"":s,d);var E=new Set(["__proto__","constructor","prototype"]);{let c={0:t=>y(t),1:t=>d(t),2:t=>new RegExp(t),3:t=>new Date(t),4:t=>new Map(d(t)),5:t=>new Set(d(t)),6:t=>BigInt(t),7:t=>new URL(t),8:t=>new Uint8Array(t),9:t=>new Uint16Array(t),10:t=>new Uint32Array(t),11:t=>Number.POSITIVE_INFINITY*t},s=t=>{let[p,e]=t;return p in c?c[p](e):void 0},d=t=>t.map(s),y=t=>typeof t!="object"||t===null?t:Object.fromEntries(Object.entries(t).map(([p,e])=>[p,s(e)]));class f extends HTMLElement{constructor(){super(...arguments);l(this,"Component");l(this,"hydrator");l(this,"hydrate",async()=>{var b;if(!this.hydrator||!this.isConnected)return;let e=(b=this.parentElement)==null?void 0:b.closest("astro-island[ssr]");if(e){e.addEventListener("astro:hydrate",this.hydrate,{once:!0});return}let n=this.querySelectorAll("astro-slot"),r={},i=this.querySelectorAll("template[data-astro-template]");for(let o of i){let a=o.closest(this.tagName);a!=null&&a.isSameNode(this)&&(r[o.getAttribute("data-astro-template")||"default"]=o.innerHTML,o.remove())}for(let o of n){let a=o.closest(this.tagName);a!=null&&a.isSameNode(this)&&(r[o.getAttribute("name")||"default"]=o.innerHTML)}let u;try{u=this.hasAttribute("props")?y(JSON.parse(this.getAttribute("props"))):{}}catch(o){let a=this.getAttribute("component-url")||"<unknown>",v=this.getAttribute("component-export");throw v&&(a+=\` (export \${v})\`),console.error(\`[hydrate] Error parsing props for component \${a}\`,this.getAttribute("props"),o),o}let h;await this.hydrator(this)(this.Component,u,r,{client:this.getAttribute("client")}),this.removeAttribute("ssr"),this.dispatchEvent(new CustomEvent("astro:hydrate"))});l(this,"unmount",()=>{this.isConnected||this.dispatchEvent(new CustomEvent("astro:unmount"))})}disconnectedCallback(){document.removeEventListener("astro:after-swap",this.unmount),document.addEventListener("astro:after-swap",this.unmount,{once:!0})}connectedCallback(){if(!this.hasAttribute("await-children")||document.readyState==="interactive"||document.readyState==="complete")this.childrenConnectedCallback();else{let e=()=>{document.removeEventListener("DOMContentLoaded",e),n.disconnect(),this.childrenConnectedCallback()},n=new MutationObserver(()=>{var r;((r=this.lastChild)==null?void 0:r.nodeType)===Node.COMMENT_NODE&&this.lastChild.nodeValue==="astro:end"&&(this.lastChild.remove(),e())});n.observe(this,{childList:!0}),document.addEventListener("DOMContentLoaded",e)}}async childrenConnectedCallback(){let e=this.getAttribute("before-hydration-url");e&&await import(e),this.start()}getRetryImportUrl(e){let n=new URL(e,document.baseURI),r=\`astro-retry=\${Date.now()}\`,i=n.hash.replace(/^#/,"");return n.hash=i?\`\${i}&\${r}\`:r,n.toString()}async importWithRetry(e){try{return await import(e)}catch(n){return await new Promise(r=>setTimeout(r,1e3)),import(this.getRetryImportUrl(e))}}handleHydrationError(e){let n=this.getAttribute("component-url"),r=new CustomEvent("astro:hydration-error",{cancelable:!0,bubbles:!0,composed:!0,detail:{error:e,componentUrl:n}});this.dispatchEvent(r)&&console.error(\`[astro-island] Error hydrating \${n}\`,e)}async start(){let e=JSON.parse(this.getAttribute("opts")),n=this.getAttribute("client");if(Astro[n]===void 0){window.addEventListener(\`astro:\${n}\`,()=>this.start(),{once:!0});return}try{await Astro[n](async()=>{let r=this.getAttribute("renderer-url");try{let[i,{default:u}]=await Promise.all([this.importWithRetry(this.getAttribute("component-url")),r?this.importWithRetry(r):Promise.resolve({default:()=>()=>{}})]),h=this.getAttribute("component-export")||"default";if(h.includes(".")){this.Component=i;for(let m of h.split(".")){if(E.has(m)||!this.Component||typeof this.Component!="object"&&typeof this.Component!="function"||!Object.hasOwn(this.Component,m))throw new Error(\`Invalid component export path: \${h}\`);this.Component=this.Component[m]}}else{if(E.has(h))throw new Error(\`Invalid component export path: \${h}\`);this.Component=i[h]}return this.hydrator=u,this.hydrate}catch(i){return this.handleHydrationError(i),()=>{}}},e,this)}catch(r){this.handleHydrationError(r)}}attributeChangedCallback(){this.hydrate()}}l(f,"observedAttributes",["props"]),customElements.get("astro-island")||customElements.define("astro-island",f)}})();`;
|
|
2
2
|
export {
|
|
3
3
|
astro_island_prebuilt_default as default
|
|
4
4
|
};
|
|
@@ -19,13 +19,13 @@ function stringifyChunk(result, chunk) {
|
|
|
19
19
|
switch (instruction.type) {
|
|
20
20
|
case "directive": {
|
|
21
21
|
const { hydration } = instruction;
|
|
22
|
-
|
|
23
|
-
|
|
22
|
+
const needsHydrationScript = hydration && determineIfNeedsHydrationScript(result);
|
|
23
|
+
const needsDirectiveScript = hydration && determinesIfNeedsDirectiveScript(result, hydration.directive);
|
|
24
24
|
if (needsHydrationScript) {
|
|
25
|
-
|
|
25
|
+
const prescripts = getPrescripts(result, "both", hydration.directive);
|
|
26
26
|
return markHTMLString(prescripts);
|
|
27
27
|
} else if (needsDirectiveScript) {
|
|
28
|
-
|
|
28
|
+
const prescripts = getPrescripts(result, "directive", hydration.directive);
|
|
29
29
|
return markHTMLString(prescripts);
|
|
30
30
|
} else {
|
|
31
31
|
return "";
|
|
@@ -46,6 +46,9 @@ function stringifyChunk(result, chunk) {
|
|
|
46
46
|
case "renderer-hydration-script": {
|
|
47
47
|
const { rendererSpecificHydrationScripts } = result._metadata;
|
|
48
48
|
const { rendererName } = instruction;
|
|
49
|
+
if (result._metadata.templateDepth > 0) {
|
|
50
|
+
return instruction.render();
|
|
51
|
+
}
|
|
49
52
|
if (!rendererSpecificHydrationScripts.has(rendererName)) {
|
|
50
53
|
rendererSpecificHydrationScripts.add(rendererName);
|
|
51
54
|
return instruction.render();
|
|
@@ -53,6 +56,9 @@ function stringifyChunk(result, chunk) {
|
|
|
53
56
|
return "";
|
|
54
57
|
}
|
|
55
58
|
case "server-island-runtime": {
|
|
59
|
+
if (result._metadata.templateDepth > 0) {
|
|
60
|
+
return renderServerIslandRuntime();
|
|
61
|
+
}
|
|
56
62
|
if (result._metadata.hasRenderedServerIslandRuntime) {
|
|
57
63
|
return "";
|
|
58
64
|
}
|
|
@@ -100,7 +100,8 @@ class ServerIslandComponent {
|
|
|
100
100
|
}
|
|
101
101
|
const componentPath = this.getComponentPath();
|
|
102
102
|
const componentExport = this.getComponentExport();
|
|
103
|
-
|
|
103
|
+
const serverIslandNameMap = await this.result.getServerIslandNameMap();
|
|
104
|
+
let componentId = serverIslandNameMap.get(componentPath);
|
|
104
105
|
if (!componentId) {
|
|
105
106
|
throw new Error(`Could not find server component name ${componentPath}`);
|
|
106
107
|
}
|
|
@@ -2,12 +2,18 @@ import islandScript from "./astro-island.prebuilt.js";
|
|
|
2
2
|
import islandScriptDev from "./astro-island.prebuilt-dev.js";
|
|
3
3
|
import { ISLAND_STYLES } from "./astro-island-styles.js";
|
|
4
4
|
function determineIfNeedsHydrationScript(result) {
|
|
5
|
+
if (result._metadata.templateDepth > 0) {
|
|
6
|
+
return !result._metadata.hasHydrationScript;
|
|
7
|
+
}
|
|
5
8
|
if (result._metadata.hasHydrationScript) {
|
|
6
9
|
return false;
|
|
7
10
|
}
|
|
8
11
|
return result._metadata.hasHydrationScript = true;
|
|
9
12
|
}
|
|
10
13
|
function determinesIfNeedsDirectiveScript(result, directive) {
|
|
14
|
+
if (result._metadata.templateDepth > 0) {
|
|
15
|
+
return !result._metadata.hasDirectives.has(directive);
|
|
16
|
+
}
|
|
11
17
|
if (result._metadata.hasDirectives.has(directive)) {
|
|
12
18
|
return false;
|
|
13
19
|
}
|