@wix/astro 0.1.1
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/README.md +51 -0
- package/dist/entrypoints/image-endpoint.d.ts +1 -0
- package/dist/entrypoints/image-endpoint.js +4 -0
- package/dist/entrypoints/image-service.d.ts +3 -0
- package/dist/entrypoints/image-service.js +35 -0
- package/dist/entrypoints/manifest.d.ts +2 -0
- package/dist/entrypoints/manifest.js +6 -0
- package/dist/entrypoints/server.d.ts +20 -0
- package/dist/entrypoints/server.js +67 -0
- package/dist/extensions.d.ts +25 -0
- package/dist/extensions.js +54 -0
- package/dist/index.d.ts +33 -0
- package/dist/index.js +290 -0
- package/dist/middleware.d.ts +2 -0
- package/dist/middleware.js +98 -0
- package/dist/utils/assets.d.ts +9 -0
- package/dist/utils/assets.js +69 -0
- package/dist/utils/generate-routes-json.d.ts +9 -0
- package/dist/utils/generate-routes-json.js +237 -0
- package/dist/utils/image-config.d.ts +12 -0
- package/dist/utils/image-config.js +30 -0
- package/dist/utils/index.d.ts +8 -0
- package/dist/utils/index.js +59 -0
- package/dist/utils/non-server-chunk-detector.d.ts +14 -0
- package/dist/utils/non-server-chunk-detector.js +73 -0
- package/dist/utils/wasm-module-loader.d.ts +13 -0
- package/dist/utils/wasm-module-loader.js +117 -0
- package/dist/vite-plugins/sdk-context.d.ts +2 -0
- package/dist/vite-plugins/sdk-context.js +86 -0
- package/package.json +62 -0
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
import { OAuthStrategy, TokenRole, createClient, } from "@wix/sdk";
|
|
2
|
+
import { z } from "astro/zod";
|
|
3
|
+
import { defineMiddleware } from "astro:middleware";
|
|
4
|
+
import { AsyncLocalStorage } from "node:async_hooks";
|
|
5
|
+
const authStrategyAsyncLocalStorage = new AsyncLocalStorage();
|
|
6
|
+
const sessionClient = createClient({
|
|
7
|
+
auth: {
|
|
8
|
+
async getAuthHeaders() {
|
|
9
|
+
const auth = authStrategyAsyncLocalStorage.getStore()?.auth;
|
|
10
|
+
if (!auth) {
|
|
11
|
+
throw new Error("No authentication strategy found in the current context");
|
|
12
|
+
}
|
|
13
|
+
return auth.getAuthHeaders();
|
|
14
|
+
},
|
|
15
|
+
},
|
|
16
|
+
});
|
|
17
|
+
sessionClient.enableContext("global");
|
|
18
|
+
/**
|
|
19
|
+
* Checks if the incoming request is a request for a dynamic (server-side rendered) page.
|
|
20
|
+
* We can check this by looking at the middleware's `clientAddress` context property because accessing
|
|
21
|
+
* this prop in a static route will throw an error which we can conveniently catch.
|
|
22
|
+
*/
|
|
23
|
+
function checkIsDynamicPageRequest(context) {
|
|
24
|
+
try {
|
|
25
|
+
return context.clientAddress != null;
|
|
26
|
+
}
|
|
27
|
+
catch {
|
|
28
|
+
return false;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
export const onRequest = defineMiddleware(async (context, next) => {
|
|
32
|
+
const { clientId } = getClientEnvVars(context.locals.runtime?.env ?? import.meta.env);
|
|
33
|
+
const wixSessionCookie = checkIsDynamicPageRequest(context)
|
|
34
|
+
? context.cookies.get("wixSession")?.json()
|
|
35
|
+
: undefined;
|
|
36
|
+
let tokens;
|
|
37
|
+
if (wixSessionCookie) {
|
|
38
|
+
const tokensParseResult = z
|
|
39
|
+
.object({
|
|
40
|
+
clientId: z.string(),
|
|
41
|
+
tokens: z.object({
|
|
42
|
+
accessToken: z.object({
|
|
43
|
+
value: z.string(),
|
|
44
|
+
expiresAt: z.number(),
|
|
45
|
+
}),
|
|
46
|
+
refreshToken: z.object({
|
|
47
|
+
value: z.string(),
|
|
48
|
+
role: z.nativeEnum(TokenRole),
|
|
49
|
+
}),
|
|
50
|
+
}),
|
|
51
|
+
})
|
|
52
|
+
.safeParse(wixSessionCookie);
|
|
53
|
+
if (!tokensParseResult.success) {
|
|
54
|
+
throw new Error(`Invalid wixSession cookie: ${tokensParseResult.error}`);
|
|
55
|
+
}
|
|
56
|
+
else {
|
|
57
|
+
if (tokensParseResult.data.clientId === clientId) {
|
|
58
|
+
tokens = tokensParseResult.data.tokens;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
const auth = OAuthStrategy({
|
|
63
|
+
clientId,
|
|
64
|
+
tokens,
|
|
65
|
+
});
|
|
66
|
+
const response = await authStrategyAsyncLocalStorage.run({
|
|
67
|
+
auth,
|
|
68
|
+
}, () => next());
|
|
69
|
+
if (checkIsDynamicPageRequest(context)) {
|
|
70
|
+
context.cookies.set("wixSession", JSON.stringify({ clientId, tokens: auth.getTokens() }), {
|
|
71
|
+
secure: true,
|
|
72
|
+
path: "/",
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
return response;
|
|
76
|
+
});
|
|
77
|
+
function getClientEnvVars(env) {
|
|
78
|
+
const { WIX_CLIENT_ID, WIX_CLIENT_SECRET, WIX_CLIENT_PUBLIC_KEY, WIX_CLIENT_INSTANCE_ID, } = env;
|
|
79
|
+
if (!WIX_CLIENT_ID) {
|
|
80
|
+
throw new Error("Missing environment variable: PUBLIC_WIX_CLIENT_ID");
|
|
81
|
+
}
|
|
82
|
+
if (!WIX_CLIENT_SECRET) {
|
|
83
|
+
throw new Error("Missing environment variable: WIX_CLIENT_SECRET");
|
|
84
|
+
}
|
|
85
|
+
if (!WIX_CLIENT_PUBLIC_KEY) {
|
|
86
|
+
throw new Error("Missing environment variable: WIX_CLIENT_PUBLIC_KEY");
|
|
87
|
+
}
|
|
88
|
+
if (!WIX_CLIENT_INSTANCE_ID) {
|
|
89
|
+
throw new Error("Missing environment variable: WIX_CLIENT_INSTANCE_ID");
|
|
90
|
+
}
|
|
91
|
+
return {
|
|
92
|
+
clientId: WIX_CLIENT_ID,
|
|
93
|
+
clientSecret: WIX_CLIENT_SECRET,
|
|
94
|
+
publicKey: WIX_CLIENT_PUBLIC_KEY,
|
|
95
|
+
instanceId: WIX_CLIENT_INSTANCE_ID,
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWlkZGxld2FyZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9taWRkbGV3YXJlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFTCxhQUFhLEVBQ2IsU0FBUyxFQUNULFlBQVksR0FDYixNQUFNLFVBQVUsQ0FBQztBQUVsQixPQUFPLEVBQUUsQ0FBQyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQzlCLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRXJELE1BQU0sNkJBQTZCLEdBQUcsSUFBSSxpQkFBaUIsRUFFdkQsQ0FBQztBQUVMLE1BQU0sYUFBYSxHQUFHLFlBQVksQ0FBQztJQUNqQyxJQUFJLEVBQUU7UUFDSixLQUFLLENBQUMsY0FBYztZQUNsQixNQUFNLElBQUksR0FBRyw2QkFBNkIsQ0FBQyxRQUFRLEVBQUUsRUFBRSxJQUFJLENBQUM7WUFDNUQsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO2dCQUNWLE1BQU0sSUFBSSxLQUFLLENBQ2IseURBQXlELENBQzFELENBQUM7WUFDSixDQUFDO1lBRUQsT0FBTyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDL0IsQ0FBQztLQUNGO0NBQ0YsQ0FBQyxDQUFDO0FBRUgsYUFBYSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUV0Qzs7OztHQUlHO0FBQ0gsU0FBUyx5QkFBeUIsQ0FDaEMsT0FBeUM7SUFFekMsSUFBSSxDQUFDO1FBQ0gsT0FBTyxPQUFPLENBQUMsYUFBYSxJQUFJLElBQUksQ0FBQztJQUN2QyxDQUFDO0lBQUMsTUFBTSxDQUFDO1FBQ1AsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0FBQ0gsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLFNBQVMsR0FBRyxnQkFBZ0IsQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxF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
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { AstroConfig, ImageMetadata, RemotePattern } from "astro";
|
|
2
|
+
export declare function isESMImportedImage(src: ImageMetadata | string): src is ImageMetadata;
|
|
3
|
+
export declare function matchHostname(url: URL, hostname?: string, allowWildcard?: boolean): boolean;
|
|
4
|
+
export declare function matchPort(url: URL, port?: string): boolean;
|
|
5
|
+
export declare function matchProtocol(url: URL, protocol?: string): boolean;
|
|
6
|
+
export declare function matchPathname(url: URL, pathname?: string, allowWildcard?: boolean): boolean;
|
|
7
|
+
export declare function matchPattern(url: URL, remotePattern: RemotePattern): boolean;
|
|
8
|
+
export declare function isRemoteAllowed(src: string, { domains, remotePatterns, }: Partial<Pick<AstroConfig["image"], "domains" | "remotePatterns">>): boolean;
|
|
9
|
+
export declare function isString(path: unknown): path is string;
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { isRemotePath } from "@astrojs/internal-helpers/path";
|
|
2
|
+
export function isESMImportedImage(src) {
|
|
3
|
+
return typeof src === "object";
|
|
4
|
+
}
|
|
5
|
+
export function matchHostname(url, hostname, allowWildcard) {
|
|
6
|
+
if (!hostname) {
|
|
7
|
+
return true;
|
|
8
|
+
}
|
|
9
|
+
if (!allowWildcard || !hostname.startsWith("*")) {
|
|
10
|
+
return hostname === url.hostname;
|
|
11
|
+
}
|
|
12
|
+
if (hostname.startsWith("**.")) {
|
|
13
|
+
const slicedHostname = hostname.slice(2); // ** length
|
|
14
|
+
return (slicedHostname !== url.hostname && url.hostname.endsWith(slicedHostname));
|
|
15
|
+
}
|
|
16
|
+
if (hostname.startsWith("*.")) {
|
|
17
|
+
const slicedHostname = hostname.slice(1); // * length
|
|
18
|
+
const additionalSubdomains = url.hostname
|
|
19
|
+
.replace(slicedHostname, "")
|
|
20
|
+
.split(".")
|
|
21
|
+
.filter(Boolean);
|
|
22
|
+
return additionalSubdomains.length === 1;
|
|
23
|
+
}
|
|
24
|
+
return false;
|
|
25
|
+
}
|
|
26
|
+
export function matchPort(url, port) {
|
|
27
|
+
return !port || port === url.port;
|
|
28
|
+
}
|
|
29
|
+
export function matchProtocol(url, protocol) {
|
|
30
|
+
return !protocol || protocol === url.protocol.slice(0, -1);
|
|
31
|
+
}
|
|
32
|
+
export function matchPathname(url, pathname, allowWildcard) {
|
|
33
|
+
if (!pathname) {
|
|
34
|
+
return true;
|
|
35
|
+
}
|
|
36
|
+
if (!allowWildcard || !pathname.endsWith("*")) {
|
|
37
|
+
return pathname === url.pathname;
|
|
38
|
+
}
|
|
39
|
+
if (pathname.endsWith("/**")) {
|
|
40
|
+
const slicedPathname = pathname.slice(0, -2); // ** length
|
|
41
|
+
return (slicedPathname !== url.pathname && url.pathname.startsWith(slicedPathname));
|
|
42
|
+
}
|
|
43
|
+
if (pathname.endsWith("/*")) {
|
|
44
|
+
const slicedPathname = pathname.slice(0, -1); // * length
|
|
45
|
+
const additionalPathChunks = url.pathname
|
|
46
|
+
.replace(slicedPathname, "")
|
|
47
|
+
.split("/")
|
|
48
|
+
.filter(Boolean);
|
|
49
|
+
return additionalPathChunks.length === 1;
|
|
50
|
+
}
|
|
51
|
+
return false;
|
|
52
|
+
}
|
|
53
|
+
export function matchPattern(url, remotePattern) {
|
|
54
|
+
return (matchProtocol(url, remotePattern.protocol) &&
|
|
55
|
+
matchHostname(url, remotePattern.hostname, true) &&
|
|
56
|
+
matchPort(url, remotePattern.port) &&
|
|
57
|
+
matchPathname(url, remotePattern.pathname, true));
|
|
58
|
+
}
|
|
59
|
+
export function isRemoteAllowed(src, { domains = [], remotePatterns = [], }) {
|
|
60
|
+
if (!isRemotePath(src))
|
|
61
|
+
return false;
|
|
62
|
+
const url = new URL(src);
|
|
63
|
+
return (domains.some((domain) => matchHostname(url, domain)) ||
|
|
64
|
+
remotePatterns.some((remotePattern) => matchPattern(url, remotePattern)));
|
|
65
|
+
}
|
|
66
|
+
export function isString(path) {
|
|
67
|
+
return typeof path === "string" || path instanceof String;
|
|
68
|
+
}
|
|
69
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNzZXRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3V0aWxzL2Fzc2V0cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFHOUQsTUFBTSxVQUFVLGtCQUFrQixDQUNoQyxHQUEyQjtJQUUzQixPQUFPLE9BQU8sR0FBRyxLQUFLLFFBQVEsQ0FBQztBQUNqQyxDQUFDO0FBQ0QsTUFBTSxVQUFVLGFBQWEsQ0FDM0IsR0FBUSxFQUNSLFFBQWlCLEVBQ2pCLGFBQXVCO0lBRXZCLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNkLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUNELElBQUksQ0FBQyxhQUFhLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7UUFDaEQsT0FBTyxRQUFRLEtBQUssR0FBRyxDQUFDLFFBQVEsQ0FBQztJQUNuQyxDQUFDO0lBQ0QsSUFBSSxRQUFRLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDL0IsTUFBTSxjQUFjLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVk7UUFDdEQsT0FBTyxDQUNMLGNBQWMsS0FBSyxHQUFHLENBQUMsUUFBUSxJQUFJLEdBQUcsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQyxDQUN6RSxDQUFDO0lBQ0osQ0FBQztJQUNELElBQUksUUFBUSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1FBQzlCLE1BQU0sY0FBYyxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXO1FBQ3JELE1BQU0sb0JBQW9CLEdBQUcsR0FBRyxDQUFDLFFBQVE7YUFDdEMsT0FBTyxDQUFDLGNBQWMsRUFBRSxFQUFFLENBQUM7YUFDM0IsS0FBSyxDQUFD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
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { AstroConfig, AstroIntegrationLogger, RouteData, RoutePart } from "astro";
|
|
2
|
+
export declare function getParts(part: string): RoutePart[];
|
|
3
|
+
export declare function createRoutesFile(_config: AstroConfig, logger: AstroIntegrationLogger, routes: RouteData[], pages: {
|
|
4
|
+
pathname: string;
|
|
5
|
+
}[], redirects: RouteData["segments"][], includeExtends: {
|
|
6
|
+
pattern: string;
|
|
7
|
+
}[] | undefined, excludeExtends: {
|
|
8
|
+
pattern: string;
|
|
9
|
+
}[] | undefined): Promise<void>;
|
|
@@ -0,0 +1,237 @@
|
|
|
1
|
+
import { existsSync } from "node:fs";
|
|
2
|
+
import { writeFile } from "node:fs/promises";
|
|
3
|
+
import { posix } from "node:path";
|
|
4
|
+
import { fileURLToPath } from "node:url";
|
|
5
|
+
import { prependForwardSlash, removeLeadingForwardSlash, removeTrailingForwardSlash, } from "@astrojs/internal-helpers/path";
|
|
6
|
+
import glob from "tiny-glob";
|
|
7
|
+
// Copied from https://github.com/withastro/astro/blob/3776ecf0aa9e08a992d3ae76e90682fd04093721/packages/astro/src/core/routing/manifest/create.ts#L45-L70
|
|
8
|
+
// We're not sure how to improve this regex yet
|
|
9
|
+
const ROUTE_DYNAMIC_SPLIT = /\[(.+?\(.+?\)|.+?)\]/;
|
|
10
|
+
const ROUTE_SPREAD = /^\.{3}.+$/;
|
|
11
|
+
export function getParts(part) {
|
|
12
|
+
const result = [];
|
|
13
|
+
part.split(ROUTE_DYNAMIC_SPLIT).map((str, i) => {
|
|
14
|
+
if (!str)
|
|
15
|
+
return;
|
|
16
|
+
const dynamic = i % 2 === 1;
|
|
17
|
+
const [, content] = dynamic
|
|
18
|
+
? /([^(]+)$/.exec(str) || [null, null]
|
|
19
|
+
: [null, str];
|
|
20
|
+
if (!content || (dynamic && !/^(?:\.\.\.)?[\w$]+$/.test(content))) {
|
|
21
|
+
throw new Error("Parameter name must match /^[a-zA-Z0-9_$]+$/");
|
|
22
|
+
}
|
|
23
|
+
result.push({
|
|
24
|
+
content,
|
|
25
|
+
dynamic,
|
|
26
|
+
spread: dynamic && ROUTE_SPREAD.test(content),
|
|
27
|
+
});
|
|
28
|
+
});
|
|
29
|
+
return result;
|
|
30
|
+
}
|
|
31
|
+
async function writeRoutesFileToOutDir(_config, logger, include, exclude) {
|
|
32
|
+
try {
|
|
33
|
+
await writeFile(new URL("./_routes.json", _config.outDir), JSON.stringify({
|
|
34
|
+
version: 1,
|
|
35
|
+
include: include,
|
|
36
|
+
exclude: exclude,
|
|
37
|
+
}, null, 2), "utf-8");
|
|
38
|
+
}
|
|
39
|
+
catch (error) {
|
|
40
|
+
logger.error("There was an error writing the '_routes.json' file to the output directory.");
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
function segmentsToCfSyntax(segments, _config) {
|
|
44
|
+
const pathSegments = [];
|
|
45
|
+
if (removeLeadingForwardSlash(removeTrailingForwardSlash(_config.base)).length >
|
|
46
|
+
0) {
|
|
47
|
+
pathSegments.push(removeLeadingForwardSlash(removeTrailingForwardSlash(_config.base)));
|
|
48
|
+
}
|
|
49
|
+
for (const segment of segments.flat()) {
|
|
50
|
+
if (segment.dynamic)
|
|
51
|
+
pathSegments.push("*");
|
|
52
|
+
else
|
|
53
|
+
pathSegments.push(segment.content);
|
|
54
|
+
}
|
|
55
|
+
return pathSegments;
|
|
56
|
+
}
|
|
57
|
+
class TrieNode {
|
|
58
|
+
children = new Map();
|
|
59
|
+
isEndOfPath = false;
|
|
60
|
+
hasWildcardChild = false;
|
|
61
|
+
}
|
|
62
|
+
class PathTrie {
|
|
63
|
+
root;
|
|
64
|
+
returnHasWildcard = false;
|
|
65
|
+
constructor() {
|
|
66
|
+
this.root = new TrieNode();
|
|
67
|
+
}
|
|
68
|
+
insert(path) {
|
|
69
|
+
let node = this.root;
|
|
70
|
+
for (const segment of path) {
|
|
71
|
+
if (segment === "*") {
|
|
72
|
+
node.hasWildcardChild = true;
|
|
73
|
+
break;
|
|
74
|
+
}
|
|
75
|
+
if (!node.children.has(segment)) {
|
|
76
|
+
node.children.set(segment, new TrieNode());
|
|
77
|
+
}
|
|
78
|
+
// biome-ignore lint/style/noNonNullAssertion: The `if` condition above ensures that the segment exists inside the map
|
|
79
|
+
node = node.children.get(segment);
|
|
80
|
+
}
|
|
81
|
+
node.isEndOfPath = true;
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Depth-first search (dfs), traverses the "graph" segment by segment until the end or wildcard (*).
|
|
85
|
+
* It makes sure that all necessary paths are returned, but not paths with an existing wildcard prefix.
|
|
86
|
+
* e.g. if we have a path like /foo/* and /foo/bar, we only want to return /foo/*
|
|
87
|
+
*/
|
|
88
|
+
dfs(node, path, allPaths) {
|
|
89
|
+
if (node.hasWildcardChild) {
|
|
90
|
+
this.returnHasWildcard = true;
|
|
91
|
+
allPaths.push([...path, "*"]);
|
|
92
|
+
return;
|
|
93
|
+
}
|
|
94
|
+
if (node.isEndOfPath) {
|
|
95
|
+
allPaths.push([...path]);
|
|
96
|
+
}
|
|
97
|
+
for (const [segment, childNode] of node.children) {
|
|
98
|
+
this.dfs(childNode, [...path, segment], allPaths);
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
getAllPaths() {
|
|
102
|
+
const allPaths = [];
|
|
103
|
+
this.dfs(this.root, [], allPaths);
|
|
104
|
+
return [allPaths, this.returnHasWildcard];
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
export async function createRoutesFile(_config, logger, routes, pages, redirects, includeExtends, excludeExtends) {
|
|
108
|
+
const includePaths = [];
|
|
109
|
+
const excludePaths = [];
|
|
110
|
+
/**
|
|
111
|
+
* All files in the `_config.build.assets` path, e.g. `_astro`
|
|
112
|
+
* are considered static assets and should not be handled by the function
|
|
113
|
+
* therefore we exclude a wildcard for that, e.g. `/_astro/*`
|
|
114
|
+
*/
|
|
115
|
+
const assetsPath = segmentsToCfSyntax([
|
|
116
|
+
[{ content: _config.build.assets, dynamic: false, spread: false }],
|
|
117
|
+
[{ content: "", dynamic: true, spread: false }],
|
|
118
|
+
], _config);
|
|
119
|
+
excludePaths.push(assetsPath);
|
|
120
|
+
if (existsSync(fileURLToPath(_config.publicDir))) {
|
|
121
|
+
const staticFiles = await glob(`${fileURLToPath(_config.publicDir)}/**/*`, {
|
|
122
|
+
cwd: fileURLToPath(_config.publicDir),
|
|
123
|
+
filesOnly: true,
|
|
124
|
+
dot: true,
|
|
125
|
+
});
|
|
126
|
+
for (const staticFile of staticFiles) {
|
|
127
|
+
if (["_headers", "_redirects", "_routes.json"].includes(staticFile))
|
|
128
|
+
continue;
|
|
129
|
+
const staticPath = staticFile;
|
|
130
|
+
const segments = removeLeadingForwardSlash(staticPath)
|
|
131
|
+
.split(posix.sep)
|
|
132
|
+
.filter(Boolean)
|
|
133
|
+
.map((s) => {
|
|
134
|
+
return getParts(s);
|
|
135
|
+
});
|
|
136
|
+
excludePaths.push(segmentsToCfSyntax(segments, _config));
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
for (const redirect of redirects) {
|
|
140
|
+
excludePaths.push(segmentsToCfSyntax(redirect, _config));
|
|
141
|
+
}
|
|
142
|
+
let hasPrerendered404 = false;
|
|
143
|
+
for (const route of routes) {
|
|
144
|
+
const convertedPath = segmentsToCfSyntax(route.segments, _config);
|
|
145
|
+
if (route.pathname === "/404" && route.prerender === true)
|
|
146
|
+
hasPrerendered404 = true;
|
|
147
|
+
switch (route.type) {
|
|
148
|
+
case "page":
|
|
149
|
+
if (route.prerender === false)
|
|
150
|
+
includePaths.push(convertedPath);
|
|
151
|
+
break;
|
|
152
|
+
case "endpoint":
|
|
153
|
+
if (route.prerender === false)
|
|
154
|
+
includePaths.push(convertedPath);
|
|
155
|
+
else
|
|
156
|
+
excludePaths.push(convertedPath);
|
|
157
|
+
break;
|
|
158
|
+
case "redirect":
|
|
159
|
+
excludePaths.push(convertedPath);
|
|
160
|
+
break;
|
|
161
|
+
default:
|
|
162
|
+
/**
|
|
163
|
+
* We don't know the type, so we are conservative!
|
|
164
|
+
* Invoking the function on these is a safe-bet because
|
|
165
|
+
* the function will fallback to static asset fetching
|
|
166
|
+
*/
|
|
167
|
+
includePaths.push(convertedPath);
|
|
168
|
+
break;
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
for (const page of pages) {
|
|
172
|
+
if (page.pathname === "404")
|
|
173
|
+
hasPrerendered404 = true;
|
|
174
|
+
const pageSegments = removeLeadingForwardSlash(page.pathname)
|
|
175
|
+
.split(posix.sep)
|
|
176
|
+
.filter(Boolean)
|
|
177
|
+
.map((s) => {
|
|
178
|
+
return getParts(s);
|
|
179
|
+
});
|
|
180
|
+
excludePaths.push(segmentsToCfSyntax(pageSegments, _config));
|
|
181
|
+
}
|
|
182
|
+
const includeTrie = new PathTrie();
|
|
183
|
+
for (const includePath of includePaths) {
|
|
184
|
+
includeTrie.insert(includePath);
|
|
185
|
+
}
|
|
186
|
+
const [deduplicatedIncludePaths, includedPathsHaveWildcard] = includeTrie.getAllPaths();
|
|
187
|
+
const excludeTrie = new PathTrie();
|
|
188
|
+
for (const excludePath of excludePaths) {
|
|
189
|
+
/**
|
|
190
|
+
* A excludePath with starts with a wildcard (*) is a catch-all
|
|
191
|
+
* that would mean all routes are static, that would be equal to a full SSG project
|
|
192
|
+
* the adapter is not needed in this case, so we do not consider such paths
|
|
193
|
+
*/
|
|
194
|
+
if (excludePath[0] === "*")
|
|
195
|
+
continue;
|
|
196
|
+
excludeTrie.insert(excludePath);
|
|
197
|
+
}
|
|
198
|
+
const [deduplicatedExcludePaths, _excludedPathsHaveWildcard] = excludeTrie.getAllPaths();
|
|
199
|
+
/**
|
|
200
|
+
* Cloudflare allows no more than 100 include/exclude rules combined
|
|
201
|
+
* https://developers.cloudflare.com/pages/functions/routing/#limits
|
|
202
|
+
*/
|
|
203
|
+
const CLOUDFLARE_COMBINED_LIMIT = 100;
|
|
204
|
+
/**
|
|
205
|
+
* Caluclate the number of automated and extended include rules
|
|
206
|
+
*/
|
|
207
|
+
const AUTOMATIC_INCLUDE_RULES_COUNT = deduplicatedIncludePaths.length;
|
|
208
|
+
const EXTENDED_INCLUDE_RULES_COUNT = includeExtends?.length ?? 0;
|
|
209
|
+
const INCLUDE_RULES_COUNT = AUTOMATIC_INCLUDE_RULES_COUNT + EXTENDED_INCLUDE_RULES_COUNT;
|
|
210
|
+
/**
|
|
211
|
+
* Caluclate the number of automated and extended exclude rules
|
|
212
|
+
*/
|
|
213
|
+
const AUTOMATIC_EXCLUDE_RULES_COUNT = deduplicatedExcludePaths.length;
|
|
214
|
+
const EXTENDED_EXCLUDE_RULES_COUNT = excludeExtends?.length ?? 0;
|
|
215
|
+
const EXCLUDE_RULES_COUNT = AUTOMATIC_EXCLUDE_RULES_COUNT + EXTENDED_EXCLUDE_RULES_COUNT;
|
|
216
|
+
if (!hasPrerendered404 ||
|
|
217
|
+
INCLUDE_RULES_COUNT > CLOUDFLARE_COMBINED_LIMIT ||
|
|
218
|
+
EXCLUDE_RULES_COUNT > CLOUDFLARE_COMBINED_LIMIT) {
|
|
219
|
+
await writeRoutesFileToOutDir(_config, logger, ["/*"].concat(includeExtends?.map((entry) => entry.pattern) ?? []), deduplicatedExcludePaths
|
|
220
|
+
.map((path) => `${prependForwardSlash(path.join("/"))}`)
|
|
221
|
+
.slice(0, CLOUDFLARE_COMBINED_LIMIT -
|
|
222
|
+
EXTENDED_INCLUDE_RULES_COUNT -
|
|
223
|
+
EXTENDED_EXCLUDE_RULES_COUNT -
|
|
224
|
+
1)
|
|
225
|
+
.concat(excludeExtends?.map((entry) => entry.pattern) ?? []));
|
|
226
|
+
}
|
|
227
|
+
else {
|
|
228
|
+
await writeRoutesFileToOutDir(_config, logger, deduplicatedIncludePaths
|
|
229
|
+
.map((path) => `${prependForwardSlash(path.join("/"))}`)
|
|
230
|
+
.concat(includeExtends?.map((entry) => entry.pattern) ?? []), includedPathsHaveWildcard
|
|
231
|
+
? deduplicatedExcludePaths
|
|
232
|
+
.map((path) => `${prependForwardSlash(path.join("/"))}`)
|
|
233
|
+
.concat(excludeExtends?.map((entry) => entry.pattern) ?? [])
|
|
234
|
+
: []);
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJhdGUtcm91dGVzLWpzb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbHMvZ2VuZXJhdGUtcm91dGVzLWpzb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBT0EsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUNyQyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDN0MsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUNsQyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ3pDLE9BQU8sRUFDTCxtQkFBbUIsRUFDbkIseUJBQXlCLEVBQ3pCLDBCQUEwQixHQUMzQixNQUFNLGdDQUFnQyxDQUFDO0FBQ3hDLE9BQU8sSUFBSSxNQUFNLFdBQVcsQ0FBQztBQUU3QiwwSkFBMEo7QUFDMUosK0NBQStDO0FBQy9DLE1BQU0sbUJBQW1CLEdBQUcsc0JBQXNCLENBQUM7QUFDbkQsTUFBTSxZQUFZLEdBQUcsV0FBVyxDQUFDO0FBQ2pDLE1BQU0sVUFBVSxRQUFRLENBQUMsSUFBWTtJQUNuQyxNQUFNLE1BQU0sR0FBZ0IsRUFBRSxDQUFDO0lBQy9CLElBQUksQ0FBQyxLQUFLLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUU7UUFDN0MsSUFBSSxDQUFDLEdBQUc7WUFBRSxPQUFPO1FBQ2pCLE1BQU0sT0FBTyxHQUFHLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRTVCLE1BQU0sQ0FBQyxFQUFFLE9BQU8sQ0FBQyxHQUFHLE9BQU87WUFDekIsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDO1lBQ3RDLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQztRQUVoQixJQUFJ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
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { AstroConfig, AstroIntegrationLogger } from "astro";
|
|
2
|
+
export declare function setImageConfig(service: string, config: AstroConfig["image"], command: "dev" | "build" | "preview" | "sync", logger: AstroIntegrationLogger): {
|
|
3
|
+
service: import("astro").ImageServiceConfig<Record<string, any>>;
|
|
4
|
+
domains: string[];
|
|
5
|
+
remotePatterns: {
|
|
6
|
+
port?: string | undefined;
|
|
7
|
+
protocol?: string | undefined;
|
|
8
|
+
hostname?: string | undefined;
|
|
9
|
+
pathname?: string | undefined;
|
|
10
|
+
}[];
|
|
11
|
+
endpoint?: string | undefined;
|
|
12
|
+
};
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { passthroughImageService, sharpImageService } from "astro/config";
|
|
2
|
+
export function setImageConfig(service, config, command, logger) {
|
|
3
|
+
switch (service) {
|
|
4
|
+
case "passthrough":
|
|
5
|
+
return { ...config, service: passthroughImageService() };
|
|
6
|
+
case "cloudflare":
|
|
7
|
+
return {
|
|
8
|
+
...config,
|
|
9
|
+
service: command === "dev"
|
|
10
|
+
? sharpImageService()
|
|
11
|
+
: { entrypoint: "@astrojs/cloudflare/image-service" },
|
|
12
|
+
};
|
|
13
|
+
case "compile":
|
|
14
|
+
return {
|
|
15
|
+
...config,
|
|
16
|
+
service: sharpImageService(),
|
|
17
|
+
endpoint: command === "dev" ? undefined : "@astrojs/cloudflare/image-endpoint",
|
|
18
|
+
};
|
|
19
|
+
case "custom":
|
|
20
|
+
return { ...config };
|
|
21
|
+
default:
|
|
22
|
+
if (config.service.entrypoint === "astro/assets/services/sharp" ||
|
|
23
|
+
config.service.entrypoint === "astro/assets/services/squoosh") {
|
|
24
|
+
logger.warn(`The current configuration does not support image optimization. To allow your project to build with the original, unoptimized images, the image service has been automatically switched to the 'noop' option. See https://docs.astro.build/en/reference/configuration-reference/#imageservice`);
|
|
25
|
+
return { ...config, service: passthroughImageService() };
|
|
26
|
+
}
|
|
27
|
+
return { ...config };
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1hZ2UtY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3V0aWxzL2ltYWdlLWNvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFFMUUsTUFBTSxVQUFVLGNBQWMsQ0FDNUIsT0FBZSxFQUNmLE1BQTRCLEVBQzVCLE9BQTZDLEVBQzdDLE1BQThCO0lBRTlCLFFBQVEsT0FBTyxFQUFFLENBQUM7UUFDaEIsS0FBSyxhQUFhO1lBQ2hCLE9BQU8sRUFBRSxHQUFHLE1BQU0sRUFBRSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsRUFBRSxDQUFDO1FBRTNELEtBQUssWUFBWTtZQUNmLE9BQU87Z0JBQ0wsR0FBRyxNQUFNO2dCQUNULE9BQU8sRUFDTCxPQUFPLEtBQUssS0FBSztvQkFDZixDQUFDLENBQUMsaUJBQWlCLEVBQUU7b0JBQ3JCLENBQUMsQ0FBQyxFQUFFLFVBQVUsRUFBRSxtQ0FBbUMsRUFBRTthQUMxRCxDQUFDO1FBRUosS0FBSyxTQUFTO1lBQ1osT0FBTztnQkFDTCxHQUFHLE1BQU07Z0JBQ1QsT0FBTyxFQUFFLGlCQUFpQixFQUFFO2dCQUM1QixRQUFRLEVBQ04sT0FBTyxLQUFLLEtBQUssQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxvQ0FBb0M7YUFDdkUsQ0FBQztRQUVKLEtBQUssUUFBUTtZQUNYLE9BQU8sRUFBRSxHQUFHLE1BQU0sRUFBRSxDQUFDO1FBRXZCO1lBQ0UsSUFDRSxNQUFNLENBQUMsT0FBTyxDQUFDLFVBQVUsS0FBSyw2QkFBNkI7Z0JBQzNELE1BQU0sQ0FBQyxPQUFPLENBQUMsVUFBVSxLQUFLLCtCQUErQixFQUM3RCxDQUFDO2dCQUNELE1BQU0sQ0FBQyxJQUFJLENBQ1QsOFJBQThSLENBQy9SLENBQUM7Z0JBQ0YsT0FBTyxFQUFFLEdBQUcsTUFBTSxFQUFFLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxFQUFFLENBQUM7WUFDM0QsQ0FBQztZQUNELE9BQU8sRUFBRSxHQUFHLE1BQU0sRUFBRSxDQUFDO0lBQ3pCLENBQUM7QUFDSCxDQUFDIn0=
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { Node } from "estree-walker";
|
|
2
|
+
import type MagicString from "magic-string";
|
|
3
|
+
export declare function mutatePageMapInPlace(node: Extract<Node, {
|
|
4
|
+
type: "VariableDeclaration";
|
|
5
|
+
}>, constsToRemove: string[], s: MagicString): void;
|
|
6
|
+
export declare function mutateDynamicPageImportsInPlace(node: Extract<Node, {
|
|
7
|
+
type: "VariableDeclaration";
|
|
8
|
+
}>, prerenderImports: string[], constsToRemove: string[], s: MagicString): void;
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
export function mutatePageMapInPlace(node, constsToRemove, s) {
|
|
2
|
+
const declarator = node.declarations[0];
|
|
3
|
+
if (declarator.id.type !== "Identifier")
|
|
4
|
+
return;
|
|
5
|
+
if (declarator.id.name !== "pageMap")
|
|
6
|
+
return;
|
|
7
|
+
if (!declarator.init || declarator.init.type !== "NewExpression")
|
|
8
|
+
return;
|
|
9
|
+
if (!declarator.init.arguments[0] ||
|
|
10
|
+
declarator.init.arguments[0].type !== "ArrayExpression")
|
|
11
|
+
return;
|
|
12
|
+
for (const arrayExpression of declarator.init.arguments[0].elements) {
|
|
13
|
+
if (!arrayExpression || arrayExpression.type !== "ArrayExpression")
|
|
14
|
+
continue;
|
|
15
|
+
if (!arrayExpression.elements[1] ||
|
|
16
|
+
arrayExpression.elements[1].type !== "Identifier")
|
|
17
|
+
continue;
|
|
18
|
+
if (constsToRemove.includes(arrayExpression.elements[1].name)) {
|
|
19
|
+
// @ts-expect-error - @types/estree seem to be wrong
|
|
20
|
+
if (arrayExpression.start && arrayExpression.end) {
|
|
21
|
+
// @ts-expect-error - @types/estree seem to be wrong
|
|
22
|
+
s.remove(arrayExpression.start, arrayExpression.end);
|
|
23
|
+
// We need to check if there are any leftover commas, which are not part of the `ArrayExpression` node
|
|
24
|
+
// @ts-expect-error - @types/estree seem to be wrong
|
|
25
|
+
const endChar = s.slice(arrayExpression.end, arrayExpression.end + 1);
|
|
26
|
+
if (endChar.includes(",")) {
|
|
27
|
+
// @ts-expect-error - @types/estree seem to be wrong
|
|
28
|
+
s.remove(arrayExpression.end, arrayExpression.end + 1);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
export function mutateDynamicPageImportsInPlace(node, prerenderImports, constsToRemove, s) {
|
|
35
|
+
const declarator = node.declarations[0];
|
|
36
|
+
if (declarator.id.type !== "Identifier")
|
|
37
|
+
return;
|
|
38
|
+
if (!declarator.id.name.startsWith("_page"))
|
|
39
|
+
return;
|
|
40
|
+
if (!declarator.init || declarator.init.type !== "ArrowFunctionExpression")
|
|
41
|
+
return;
|
|
42
|
+
if (!declarator.init.body || declarator.init.body.type !== "ImportExpression")
|
|
43
|
+
return;
|
|
44
|
+
if (!declarator.init.body.source ||
|
|
45
|
+
declarator.init.body.source.type !== "Literal")
|
|
46
|
+
return;
|
|
47
|
+
const sourceValue = declarator.init.body.source.value;
|
|
48
|
+
if (typeof sourceValue !== "string")
|
|
49
|
+
return;
|
|
50
|
+
if (prerenderImports.some((importItem) => sourceValue.includes(importItem))) {
|
|
51
|
+
// @ts-expect-error - @types/estree seem to be wrong
|
|
52
|
+
if (node.start && node.end) {
|
|
53
|
+
constsToRemove.push(declarator.id.name);
|
|
54
|
+
// @ts-expect-error - @types/estree seem to be wrong
|
|
55
|
+
s.remove(node.start, node.end);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbHMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBR0EsTUFBTSxVQUFVLG9CQUFvQixDQUNsQyxJQUFvRCxFQUNwRCxjQUF3QixFQUN4QixDQUFjO0lBRWQsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUUsQ0FBQztJQUN6QyxJQUFJLFVBQVUsQ0FBQyxFQUFFLENBQUMsSUFBSSxLQUFLLFlBQVk7UUFBRSxPQUFPO0lBQ2hELElBQUksVUFBVSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEtBQUssU0FBUztRQUFFLE9BQU87SUFDN0MsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLElBQUksVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLEtBQUssZUFBZTtRQUFFLE9BQU87SUFDekUsSUFDRSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztRQUM3QixVQUFVLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssaUJBQWlCO1FBRXZELE9BQU87SUFFVCxLQUFLLE1BQU0sZUFBZSxJQUFJLFVBQVUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ3BFLElBQUksQ0FBQyxlQUFlLElBQUksZUFBZSxDQUFDLElBQUksS0FBSyxpQkFBaUI7WUFDaEUsU0FBUztRQUNYLElBQ0UsQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztZQUM1QixlQUFlLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxZQUFZO1lBRWpELFNBQVM7UUFFWCxJQUFJLGNBQWMsQ0FBQyxRQUFRLENBQUMsZUFBZSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1lBQzlE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
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { Plugin } from "vite";
|
|
2
|
+
/**
|
|
3
|
+
* A Vite bundle analyzer that identifies chunks that are not used for server rendering.
|
|
4
|
+
*
|
|
5
|
+
* The chunks injected by Astro for prerendering are flagged as non-server chunks.
|
|
6
|
+
* Any chunks that is only used by a non-server chunk are also flagged as non-server chunks.
|
|
7
|
+
* This continues transitively until all non-server chunks are found.
|
|
8
|
+
*/
|
|
9
|
+
export declare class NonServerChunkDetector {
|
|
10
|
+
private nonServerChunks?;
|
|
11
|
+
getPlugin(): Plugin;
|
|
12
|
+
private processBundle;
|
|
13
|
+
getNonServerChunks(): string[];
|
|
14
|
+
}
|