@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
package/README.md
ADDED
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
# Wix Astro Integration
|
|
2
|
+
|
|
3
|
+
## Features
|
|
4
|
+
|
|
5
|
+
### Session Management
|
|
6
|
+
|
|
7
|
+
The Wix Astro integration provides session management for your Astro project.
|
|
8
|
+
|
|
9
|
+
### Integrating into an exinsting Astro project
|
|
10
|
+
|
|
11
|
+
If you already have an Astro project and you want to add the Wix Astro integration to it, follow these steps:
|
|
12
|
+
|
|
13
|
+
1. Install the Wix Astro integration package and the Wix CLI packages:
|
|
14
|
+
|
|
15
|
+
```bash
|
|
16
|
+
npm install @wix/astro @wix/cli @wix/cli-astro
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
2. Add the Wix integration to your Astro project's `astro.config.mjs` file:
|
|
20
|
+
|
|
21
|
+
```js
|
|
22
|
+
import wix from "@wix/astro-internal";
|
|
23
|
+
|
|
24
|
+
export default {
|
|
25
|
+
// ...
|
|
26
|
+
output: "server",
|
|
27
|
+
integrations: [wix()],
|
|
28
|
+
// ...
|
|
29
|
+
};
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
3. Build your Astro project:
|
|
33
|
+
|
|
34
|
+
```bash
|
|
35
|
+
npm run build
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
4. Create a `wix.config.json` at the root of your project:
|
|
39
|
+
|
|
40
|
+
```json
|
|
41
|
+
{
|
|
42
|
+
"siteId": "<your site id>",
|
|
43
|
+
"projectId": "<your project id>"
|
|
44
|
+
}
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
4. Deploy your Astro project to Wix:
|
|
48
|
+
|
|
49
|
+
```bash
|
|
50
|
+
npx wix astro deploy
|
|
51
|
+
```
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export {};
|
|
2
|
+
// NOTE: this file is empty on purpose
|
|
3
|
+
// it allows use to offer `imageService: 'compile'`
|
|
4
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1hZ2UtZW5kcG9pbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZW50cnlwb2ludHMvaW1hZ2UtZW5kcG9pbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLHNDQUFzQztBQUN0QyxtREFBbUQifQ==
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/// <reference types="astro/client" />
|
|
2
|
+
import { joinPaths } from "@astrojs/internal-helpers/path";
|
|
3
|
+
import { baseService } from "astro/assets";
|
|
4
|
+
import { isESMImportedImage, isRemoteAllowed } from "../utils/assets.js";
|
|
5
|
+
const service = {
|
|
6
|
+
...baseService,
|
|
7
|
+
getURL: (options, imageConfig) => {
|
|
8
|
+
const resizingParams = [];
|
|
9
|
+
if (options.width)
|
|
10
|
+
resizingParams.push(`width=${options.width}`);
|
|
11
|
+
if (options.height)
|
|
12
|
+
resizingParams.push(`height=${options.height}`);
|
|
13
|
+
if (options.quality)
|
|
14
|
+
resizingParams.push(`quality=${options.quality}`);
|
|
15
|
+
if (options["fit"])
|
|
16
|
+
resizingParams.push(`fit=${options["fit"]}`);
|
|
17
|
+
if (options.format)
|
|
18
|
+
resizingParams.push(`format=${options.format}`);
|
|
19
|
+
let imageSource = "";
|
|
20
|
+
if (isESMImportedImage(options.src)) {
|
|
21
|
+
imageSource = options.src.src;
|
|
22
|
+
}
|
|
23
|
+
else if (isRemoteAllowed(options.src, imageConfig)) {
|
|
24
|
+
imageSource = options.src;
|
|
25
|
+
}
|
|
26
|
+
else {
|
|
27
|
+
// If it's not an imported image, nor is it allowed using the current domains or remote patterns, we'll just return the original URL
|
|
28
|
+
return options.src;
|
|
29
|
+
}
|
|
30
|
+
const imageEndpoint = joinPaths(import.meta.env.BASE_URL, "/cdn-cgi/image", resizingParams.join(","), imageSource);
|
|
31
|
+
return imageEndpoint;
|
|
32
|
+
},
|
|
33
|
+
};
|
|
34
|
+
export default service;
|
|
35
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1hZ2Utc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9lbnRyeXBvaW50cy9pbWFnZS1zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHNDQUFzQztBQUl0QyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDM0QsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUMzQyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsZUFBZSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFFekUsTUFBTSxPQUFPLEdBQXlCO0lBQ3BDLEdBQUcsV0FBVztJQUNkLE1BQU0sRUFBRSxDQUFDLE9BQU8sRUFBRSxXQUFXLEVBQUUsRUFBRTtRQUMvQixNQUFNLGNBQWMsR0FBRyxFQUFFLENBQUM7UUFDMUIsSUFBSSxPQUFPLENBQUMsS0FBSztZQUFFLGNBQWMsQ0FBQyxJQUFJLENBQUMsU0FBUyxPQUFPLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztRQUNqRSxJQUFJLE9BQU8sQ0FBQyxNQUFNO1lBQUUsY0FBYyxDQUFDLElBQUksQ0FBQyxVQUFVLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO1FBQ3BFLElBQUksT0FBTyxDQUFDLE9BQU87WUFBRSxjQUFjLENBQUMsSUFBSSxDQUFDLFdBQVcsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7UUFDdkUsSUFBSSxPQUFPLENBQUMsS0FBSyxDQUFDO1lBQUUsY0FBYyxDQUFDLElBQUksQ0FBQyxPQUFPLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDakUsSUFBSSxPQUFPLENBQUMsTUFBTTtZQUFFLGNBQWMsQ0FBQyxJQUFJLENBQUMsVUFBVSxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztRQUVwRSxJQUFJLFdBQVcsR0FBRyxFQUFFLENBQUM7UUFDckIsSUFBSSxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUNwQyxXQUFXLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUM7UUFDaEMsQ0FBQzthQUFNLElBQUksZUFBZSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQztZQUNyRCxXQUFXLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQztRQUM1QixDQUFDO2FBQU0sQ0FBQztZQUNOLG9JQUFvSTtZQUNwSSxPQUFPLE9BQU8sQ0FBQyxHQUFHLENBQUM7UUFDckIsQ0FBQztRQUVELE1BQU0sYUFBYSxHQUFHLFNBQVMsQ0FDN0IsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUN4QixnQkFBZ0IsRUFDaEIsY0FBYyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFDeEIsV0FBVyxDQUNaLENBQUM7UUFFRixPQUFPLGFBQWEsQ0FBQztJQUN2QixDQUFDO0NBQ0YsQ0FBQztBQUVGLGVBQWUsT0FBTyxDQUFDIn0=
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
// @ts-expect-error
|
|
2
|
+
import wixManifest from "/src/wix/index";
|
|
3
|
+
export const GET = async ({}) => {
|
|
4
|
+
return Response.json(wixManifest);
|
|
5
|
+
};
|
|
6
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFuaWZlc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZW50cnlwb2ludHMvbWFuaWZlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsbUJBQW1CO0FBQ25CLE9BQU8sV0FBVyxNQUFNLGdCQUFnQixDQUFDO0FBRXpDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsR0FBYSxLQUFLLEVBQUUsRUFBRSxFQUFFLEVBQUU7SUFDeEMsT0FBTyxRQUFRLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0FBQ3BDLENBQUMsQ0FBQyJ9
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { CacheStorage as CLOUDFLARE_CACHESTORAGE, Request as CLOUDFLARE_REQUEST, ExecutionContext } from "@cloudflare/workers-types";
|
|
2
|
+
import type { SSRManifest } from "astro";
|
|
3
|
+
type Env = {
|
|
4
|
+
__STATIC_CONTENT: KVNamespace;
|
|
5
|
+
ASTRO_STUDIO_APP_TOKEN?: string;
|
|
6
|
+
};
|
|
7
|
+
export interface Runtime<T extends object = object> {
|
|
8
|
+
runtime: {
|
|
9
|
+
env: Env & T;
|
|
10
|
+
cf: CLOUDFLARE_REQUEST["cf"];
|
|
11
|
+
caches: CLOUDFLARE_CACHESTORAGE;
|
|
12
|
+
ctx: ExecutionContext;
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
export declare function createExports(manifest: SSRManifest): {
|
|
16
|
+
default: {
|
|
17
|
+
fetch: (request: Request & CLOUDFLARE_REQUEST, env: Env, context: ExecutionContext) => Promise<Response>;
|
|
18
|
+
};
|
|
19
|
+
};
|
|
20
|
+
export {};
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import { App } from "astro/app";
|
|
2
|
+
import { getAssetFromKV } from "@cloudflare/kv-asset-handler";
|
|
3
|
+
// @ts-expect-error
|
|
4
|
+
import staticContentManifest from "__STATIC_CONTENT_MANIFEST";
|
|
5
|
+
import { createClient } from "@wix/sdk";
|
|
6
|
+
// @ts-expect-error
|
|
7
|
+
import wixManifest from "/src/wix/index";
|
|
8
|
+
export function createExports(manifest) {
|
|
9
|
+
const app = new App(manifest);
|
|
10
|
+
const runtimeManifest = wixManifest;
|
|
11
|
+
const client = createClient({});
|
|
12
|
+
for (const extension of runtimeManifest.extensions) {
|
|
13
|
+
if ("register" in extension) {
|
|
14
|
+
extension.register(client);
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
const fetch = async (request, env, context) => {
|
|
18
|
+
const { pathname } = new URL(request.url);
|
|
19
|
+
if (request.method === "POST" && pathname.startsWith("/_wix/events")) {
|
|
20
|
+
await client.webhooks.processRequest(request);
|
|
21
|
+
return new Response(null, { status: 200 });
|
|
22
|
+
}
|
|
23
|
+
if (request.method === "POST" &&
|
|
24
|
+
pathname.startsWith("/_wix/service-plugins")) {
|
|
25
|
+
return client.servicePlugins.processRequest(request);
|
|
26
|
+
}
|
|
27
|
+
const routeData = app.match(request);
|
|
28
|
+
if (!routeData) {
|
|
29
|
+
return await getAssetFromKV({
|
|
30
|
+
request,
|
|
31
|
+
waitUntil: context.waitUntil.bind(context),
|
|
32
|
+
}, {
|
|
33
|
+
ASSET_NAMESPACE: env.__STATIC_CONTENT,
|
|
34
|
+
ASSET_MANIFEST: JSON.parse(staticContentManifest),
|
|
35
|
+
cacheControl: {
|
|
36
|
+
bypassCache: true,
|
|
37
|
+
},
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
Reflect.set(request, Symbol.for("astro.clientAddress"), request.headers.get("cf-connecting-ip"));
|
|
41
|
+
process.env["ASTRO_STUDIO_APP_TOKEN"] ??= (() => {
|
|
42
|
+
if (typeof env.ASTRO_STUDIO_APP_TOKEN === "string") {
|
|
43
|
+
return env.ASTRO_STUDIO_APP_TOKEN;
|
|
44
|
+
}
|
|
45
|
+
})();
|
|
46
|
+
const locals = {
|
|
47
|
+
runtime: {
|
|
48
|
+
env: env,
|
|
49
|
+
cf: request.cf,
|
|
50
|
+
caches: caches,
|
|
51
|
+
ctx: {
|
|
52
|
+
waitUntil: (promise) => context.waitUntil(promise),
|
|
53
|
+
passThroughOnException: () => context.passThroughOnException(),
|
|
54
|
+
},
|
|
55
|
+
},
|
|
56
|
+
};
|
|
57
|
+
const response = await app.render(request, { routeData, locals });
|
|
58
|
+
if (app.setCookieHeaders) {
|
|
59
|
+
for (const setCookieHeader of app.setCookieHeaders(response)) {
|
|
60
|
+
response.headers.append("Set-Cookie", setCookieHeader);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
return response;
|
|
64
|
+
};
|
|
65
|
+
return { default: { fetch } };
|
|
66
|
+
}
|
|
67
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2VudHJ5cG9pbnRzL3NlcnZlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFNQSxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ2hDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUM5RCxtQkFBbUI7QUFDbkIsT0FBTyxxQkFBcUIsTUFBTSwyQkFBMkIsQ0FBQztBQUM5RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBRXhDLG1CQUFtQjtBQUNuQixPQUFPLFdBQVcsTUFBTSxnQkFBZ0IsQ0FBQztBQWdCekMsTUFBTSxVQUFVLGFBQWEsQ0FBQyxRQUFxQjtJQUNqRCxNQUFNLEdBQUcsR0FBRyxJQUFJLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUM5QixNQUFNLGVBQWUsR0FBYSxXQUFXLENBQUM7SUFDOUMsTUFBTSxNQUFNLEdBQUcsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ2hDLEtBQUssTUFBTSxTQUFTLElBQUksZUFBZSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQ25ELElBQUksVUFBVSxJQUFJLFNBQVMsRUFBRSxDQUFDO1lBQzVCLFNBQVMsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDN0IsQ0FBQztJQUNILENBQUM7SUFFRCxNQUFNLEtBQUssR0FBRyxLQUFLLEVBQ2pCLE9BQXFDLEVBQ3JDLEdBQVEsRUFDUixPQUF5QixFQUN6QixFQUFFO1FBQ0YsTUFBTSxFQUFFLFFBQVEsRUFBRSxHQUFHLElBQUksR0FBRyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUUxQyxJQUFJLE9BQU8sQ0FBQyxNQUFNLEtBQUssTUFBTSxJQUFJLFFBQVEsQ0FBQyxVQUFVLENBQUMsY0FBYyxDQUFDLEVBQUUsQ0FBQztZQUNyRSxNQUFNLE1BQU0sQ0FBQyxRQUFRLENBQUMsY0FB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
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { BuildEventDefinition, BuildServicePluginDefinition, EventDefinition, ServicePluginDefinition, WixClient } from "@wix/sdk";
|
|
2
|
+
export type WixExtensionsRegistrar = {
|
|
3
|
+
on<T extends EventDefinition>(event: T, ...args: Parameters<BuildEventDefinition<T>>): Manifest & WixExtensionsRegistrar;
|
|
4
|
+
provide<T extends ServicePluginDefinition<any>>(servicePlugin: {
|
|
5
|
+
provideHandlers: T;
|
|
6
|
+
}, config: unknown, ...impl: Parameters<BuildServicePluginDefinition<T>>): Manifest & WixExtensionsRegistrar;
|
|
7
|
+
plugin(manifest: Manifest): Manifest & WixExtensionsRegistrar;
|
|
8
|
+
permissions(permissions: string[]): Manifest & WixExtensionsRegistrar;
|
|
9
|
+
};
|
|
10
|
+
export type Manifest = {
|
|
11
|
+
extensions: Array<{
|
|
12
|
+
type: "ServicePlugin";
|
|
13
|
+
componentType: string;
|
|
14
|
+
config: unknown;
|
|
15
|
+
register(client: WixClient): void;
|
|
16
|
+
} | {
|
|
17
|
+
type: "EventHandler";
|
|
18
|
+
webhookSlug: string;
|
|
19
|
+
register(client: WixClient): void;
|
|
20
|
+
} | {
|
|
21
|
+
type: "Permission";
|
|
22
|
+
permission: string;
|
|
23
|
+
}>;
|
|
24
|
+
};
|
|
25
|
+
export declare const manifest: Manifest & WixExtensionsRegistrar;
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
function wixManifestRegistrar(manifest = { extensions: [] }) {
|
|
2
|
+
return {
|
|
3
|
+
...manifest,
|
|
4
|
+
plugin(manifest) {
|
|
5
|
+
return wixManifestRegistrar({
|
|
6
|
+
extensions: [...this.extensions, ...manifest.extensions],
|
|
7
|
+
});
|
|
8
|
+
},
|
|
9
|
+
on(event, ...args) {
|
|
10
|
+
const newManifest = {
|
|
11
|
+
...manifest,
|
|
12
|
+
extensions: [
|
|
13
|
+
...manifest.extensions,
|
|
14
|
+
{
|
|
15
|
+
type: "EventHandler",
|
|
16
|
+
webhookSlug: event.type,
|
|
17
|
+
register: (client) => client.use(event)(...args),
|
|
18
|
+
},
|
|
19
|
+
],
|
|
20
|
+
};
|
|
21
|
+
return wixManifestRegistrar(newManifest);
|
|
22
|
+
},
|
|
23
|
+
provide(servicePlugin, config, ...impl) {
|
|
24
|
+
const newManifest = {
|
|
25
|
+
...manifest,
|
|
26
|
+
extensions: [
|
|
27
|
+
...manifest.extensions,
|
|
28
|
+
{
|
|
29
|
+
type: "ServicePlugin",
|
|
30
|
+
componentType: servicePlugin.provideHandlers.componentType,
|
|
31
|
+
config,
|
|
32
|
+
register: (client) => client.use(servicePlugin.provideHandlers)(...impl),
|
|
33
|
+
},
|
|
34
|
+
],
|
|
35
|
+
};
|
|
36
|
+
return wixManifestRegistrar(newManifest);
|
|
37
|
+
},
|
|
38
|
+
permissions(permissions) {
|
|
39
|
+
const newManifest = {
|
|
40
|
+
...manifest,
|
|
41
|
+
extensions: [
|
|
42
|
+
...manifest.extensions,
|
|
43
|
+
...permissions.map((permission) => ({
|
|
44
|
+
type: "Permission",
|
|
45
|
+
permission,
|
|
46
|
+
})),
|
|
47
|
+
],
|
|
48
|
+
};
|
|
49
|
+
return wixManifestRegistrar(newManifest);
|
|
50
|
+
},
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
export const manifest = wixManifestRegistrar();
|
|
54
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXh0ZW5zaW9ucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9leHRlbnNpb25zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQXVDQSxTQUFTLG9CQUFvQixDQUMzQixXQUFxQixFQUFFLFVBQVUsRUFBRSxFQUFFLEVBQUU7SUFFdkMsT0FBTztRQUNMLEdBQUcsUUFBUTtRQUNYLE1BQU0sQ0FBQyxRQUFRO1lBQ2IsT0FBTyxvQkFBb0IsQ0FBQztnQkFDMUIsVUFBVSxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsVUFBVSxFQUFFLEdBQUcsUUFBUSxDQUFDLFVBQVUsQ0FBQzthQUN6RCxDQUFDLENBQUM7UUFDTCxDQUFDO1FBQ0QsRUFBRSxDQUNBLEtBQVEsRUFDUixHQUFHLElBQXlDO1lBRTVDLE1BQU0sV0FBVyxHQUFhO2dCQUM1QixHQUFHLFFBQVE7Z0JBQ1gsVUFBVSxFQUFFO29CQUNWLEdBQUcsUUFBUSxDQUFDLFVBQVU7b0JBQ3RCO3dCQUNFLElBQUksRUFBRSxjQUFjO3dCQUNwQixXQUFXLEVBQUUsS0FBSyxDQUFDLElBQUk7d0JBQ3ZCLFFBQVEsRUFBRSxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQ2xCLE1BQU0sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUE2QixDQUFDLEdBQUcsSUFBSSxDQUFDO3FCQUMxRDtpQkFDRjthQUNGLENBQUM7WUFFRixPQUFPLG9CQUFvQixDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQzNDLENBQUM7UUFDRCxPQUFPLENBQ0wsYUFBcUMsRUFDckMsTUFBZSxFQUNmLEdBQUcsSUFBaUQ7WUFFcEQsTUFBTSxXQUFXLEdBQWE7Z0JBQzVCLEdBQUcsUUFBUTtnQkFDWCxVQUFVLEVBQUU7b0JBQ1YsR0FBRyxRQUFRLENBQUMsVUFBVTtvQkFDdEI7d0JBQ0UsSUFBSSxFQUFFLGVBQWU7d0JBQ3JCLGFBQWEsRUFBRSxhQUFhLENBQUMsZUFBZSxDQUFDLGFBQWE7d0JBQzFELE1BQU07d0JBQ04sUUFBUSxFQUFFLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FFakIsTUFBTSxDQUFDLEdBQUcsQ0FDUixhQUFhLENBQUMsZUFBZSxDQUVoQyxDQUFDLEdBQUcsSUFBSSxDQUFDO3FCQUNiO2lCQUNGO2FBQ0YsQ0FBQztZQUVGLE9BQU8sb0JBQW9CLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDM0MsQ0FBQztRQUNELFdBQVcsQ0FBQyxXQUFxQjtZQUMvQixNQUFNLFdBQVcsR0FBYTtnQkFDNUIsR0FBRyxRQUFRO2dCQUNYLFVBQVUsRUFBRTtvQkFDVixHQUFHLFFBQVEsQ0FBQyxVQUFVO29CQUN0QixHQUFHLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDLENBQUM7d0JBQ2xDLElBQUksRUFBRSxZQUFxQjt3QkFDM0IsVUFBVTtxQkFDWCxDQUFDLENBQUM7aUJBQ0o7YUFDRixDQUFDO1lBRUYsT0FBTyxvQkFBb0IsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUMzQyxDQUFDO0tBQ0YsQ0FBQztBQUNKLENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSxRQUFRLEdBQUcsb0JBQW9CLEVBQUUsQ0FBQyJ9
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import type { AstroIntegration } from "astro";
|
|
2
|
+
export type { Runtime } from "./entrypoints/server.js";
|
|
3
|
+
export type Options = {
|
|
4
|
+
/** Options for handling images. */
|
|
5
|
+
imageService?: "passthrough" | "cloudflare" | "compile" | "custom";
|
|
6
|
+
/** Configuration for `_routes.json` generation. A _routes.json file controls when your Function is invoked. This file will include three different properties:
|
|
7
|
+
*
|
|
8
|
+
* - version: Defines the version of the schema. Currently there is only one version of the schema (version 1), however, we may add more in the future and aim to be backwards compatible.
|
|
9
|
+
* - include: Defines routes that will be invoked by Functions. Accepts wildcard behavior.
|
|
10
|
+
* - exclude: Defines routes that will not be invoked by Functions. Accepts wildcard behavior. `exclude` always take priority over `include`.
|
|
11
|
+
*
|
|
12
|
+
* Wildcards match any number of path segments (slashes). For example, `/users/*` will match everything after the `/users/` path.
|
|
13
|
+
*
|
|
14
|
+
*/
|
|
15
|
+
routes?: {
|
|
16
|
+
/** Extend `_routes.json` */
|
|
17
|
+
extend: {
|
|
18
|
+
/** Paths which should be routed to the SSR function */
|
|
19
|
+
include?: {
|
|
20
|
+
/** Generally this is in pathname format, but does support wildcards, e.g. `/users`, `/products/*` */
|
|
21
|
+
pattern: string;
|
|
22
|
+
}[];
|
|
23
|
+
/** Paths which should be routed as static assets */
|
|
24
|
+
exclude?: {
|
|
25
|
+
/** Generally this is in pathname format, but does support wildcards, e.g. `/static`, `/assets/*`, `/images/avatar.jpg` */
|
|
26
|
+
pattern: string;
|
|
27
|
+
}[];
|
|
28
|
+
};
|
|
29
|
+
};
|
|
30
|
+
/** Enable WebAssembly support */
|
|
31
|
+
wasmModuleImports?: boolean;
|
|
32
|
+
};
|
|
33
|
+
export default function createIntegration(args?: Options): AstroIntegration;
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,290 @@
|
|
|
1
|
+
import { appendForwardSlash, prependForwardSlash, removeLeadingForwardSlash, } from "@astrojs/internal-helpers/path";
|
|
2
|
+
import { createRedirectsFromAstroRoutes } from "@astrojs/underscore-redirects";
|
|
3
|
+
import { AstroError } from "astro/errors";
|
|
4
|
+
import { walk } from "estree-walker";
|
|
5
|
+
import MagicString from "magic-string";
|
|
6
|
+
import { createReadStream } from "node:fs";
|
|
7
|
+
import { appendFile, rename, stat, unlink } from "node:fs/promises";
|
|
8
|
+
import { createRequire } from "node:module";
|
|
9
|
+
import { createInterface } from "node:readline/promises";
|
|
10
|
+
import { createRoutesFile, getParts } from "./utils/generate-routes-json.js";
|
|
11
|
+
import { setImageConfig } from "./utils/image-config.js";
|
|
12
|
+
import { mutateDynamicPageImportsInPlace, mutatePageMapInPlace, } from "./utils/index.js";
|
|
13
|
+
import { NonServerChunkDetector } from "./utils/non-server-chunk-detector.js";
|
|
14
|
+
import { wasmModuleLoader } from "./utils/wasm-module-loader.js";
|
|
15
|
+
import { buildResolver } from "esm-resolve";
|
|
16
|
+
import { fileURLToPath } from "node:url";
|
|
17
|
+
export default function createIntegration(args) {
|
|
18
|
+
let _config;
|
|
19
|
+
// Initialize the unused chunk analyzer as a shared state between hooks.
|
|
20
|
+
// The analyzer is used on earlier hooks to collect information about used hooks on a Vite plugin
|
|
21
|
+
// and then later after the full build to clean up unused chunks, so it has to be shared between them.
|
|
22
|
+
const chunkAnalyzer = new NonServerChunkDetector();
|
|
23
|
+
return {
|
|
24
|
+
name: "@astrojs/cloudflare",
|
|
25
|
+
hooks: {
|
|
26
|
+
"astro:config:setup": async ({ command, config, updateConfig, logger, addMiddleware, injectRoute, }) => {
|
|
27
|
+
const aRequire = buildResolver(fileURLToPath(import.meta.url), {
|
|
28
|
+
resolveToAbsolute: true,
|
|
29
|
+
});
|
|
30
|
+
addMiddleware({
|
|
31
|
+
entrypoint: aRequire("./middleware"),
|
|
32
|
+
order: "pre",
|
|
33
|
+
});
|
|
34
|
+
injectRoute({
|
|
35
|
+
entrypoint: aRequire("./entrypoints/manifest"),
|
|
36
|
+
pattern: "/_wix/manifest.json",
|
|
37
|
+
prerender: true,
|
|
38
|
+
});
|
|
39
|
+
updateConfig({
|
|
40
|
+
build: {
|
|
41
|
+
client: new URL(`.${prependForwardSlash(appendForwardSlash(config.base))}`, config.outDir),
|
|
42
|
+
server: new URL("./_worker.js/", config.outDir),
|
|
43
|
+
serverEntry: "index.js",
|
|
44
|
+
redirects: false,
|
|
45
|
+
},
|
|
46
|
+
vite: {
|
|
47
|
+
// load .wasm files as WebAssembly modules
|
|
48
|
+
plugins: [
|
|
49
|
+
wasmModuleLoader({
|
|
50
|
+
disabled: !args?.wasmModuleImports,
|
|
51
|
+
}),
|
|
52
|
+
chunkAnalyzer.getPlugin(),
|
|
53
|
+
{
|
|
54
|
+
name: "dynamic-imports-analyzer",
|
|
55
|
+
enforce: "post",
|
|
56
|
+
generateBundle(_, bundle) {
|
|
57
|
+
let astrojsSSRVirtualEntryAST;
|
|
58
|
+
const prerenderImports = [];
|
|
59
|
+
let entryChunk;
|
|
60
|
+
// Find all pages (ignore the ssr entrypoint) which are prerendered based on the dynamic imports of the prerender chunk
|
|
61
|
+
for (const chunk of Object.values(bundle)) {
|
|
62
|
+
if (chunk.type !== "chunk")
|
|
63
|
+
continue;
|
|
64
|
+
if (chunk.name === "_@astrojs-ssr-virtual-entry") {
|
|
65
|
+
astrojsSSRVirtualEntryAST = this.parse(chunk.code);
|
|
66
|
+
entryChunk = chunk;
|
|
67
|
+
continue;
|
|
68
|
+
}
|
|
69
|
+
const isPrerendered = chunk.dynamicImports.some((entry) => entry.includes("prerender"));
|
|
70
|
+
if (isPrerendered) {
|
|
71
|
+
prerenderImports.push(chunk.fileName);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
if (!astrojsSSRVirtualEntryAST)
|
|
75
|
+
return;
|
|
76
|
+
if (!entryChunk)
|
|
77
|
+
return;
|
|
78
|
+
const s = new MagicString(entryChunk.code);
|
|
79
|
+
const constsToRemove = [];
|
|
80
|
+
walk(astrojsSSRVirtualEntryAST, {
|
|
81
|
+
leave(node) {
|
|
82
|
+
// We are only looking for VariableDeclarations, since both (dynamic imports and pageMap) are declared as constants in the code
|
|
83
|
+
if (node.type !== "VariableDeclaration")
|
|
84
|
+
return;
|
|
85
|
+
if (!node.declarations[0] ||
|
|
86
|
+
node.declarations[0].type !== "VariableDeclarator")
|
|
87
|
+
return;
|
|
88
|
+
// This function will remove the dynamic imports from the entrypoint
|
|
89
|
+
mutateDynamicPageImportsInPlace(node, prerenderImports, constsToRemove, s);
|
|
90
|
+
// This function will remove the pageMap entries which are invalid now
|
|
91
|
+
mutatePageMapInPlace(node, constsToRemove, s);
|
|
92
|
+
},
|
|
93
|
+
});
|
|
94
|
+
entryChunk.code = s.toString();
|
|
95
|
+
},
|
|
96
|
+
},
|
|
97
|
+
// The plugin is used to inject the Wix SDK context into the client bundle
|
|
98
|
+
// It's currently commented out because there are some issues with the current implementation
|
|
99
|
+
// (currently the magic import is injected into any type of module, not only JS)
|
|
100
|
+
// not sure if it's necessary to inject the Wix SDK context into the client bundle
|
|
101
|
+
// wixSDKContext(),
|
|
102
|
+
],
|
|
103
|
+
},
|
|
104
|
+
image: setImageConfig(args?.imageService ?? "DEFAULT", config.image, command, logger),
|
|
105
|
+
});
|
|
106
|
+
},
|
|
107
|
+
"astro:config:done": async ({ setAdapter, config }) => {
|
|
108
|
+
_config = config;
|
|
109
|
+
if (config.output === "static") {
|
|
110
|
+
throw new AstroError('[@astrojs/cloudflare] `output: "server"` or `output: "hybrid"` is required to use this adapter. Otherwise, this adapter is not necessary to deploy a static site to Cloudflare.');
|
|
111
|
+
}
|
|
112
|
+
setAdapter({
|
|
113
|
+
name: "@astrojs/wix",
|
|
114
|
+
serverEntrypoint: createRequire(import.meta.url).resolve("./entrypoints/server"),
|
|
115
|
+
exports: ["default"],
|
|
116
|
+
adapterFeatures: {
|
|
117
|
+
functionPerRoute: false,
|
|
118
|
+
edgeMiddleware: false,
|
|
119
|
+
},
|
|
120
|
+
supportedAstroFeatures: {
|
|
121
|
+
serverOutput: "stable",
|
|
122
|
+
hybridOutput: "stable",
|
|
123
|
+
staticOutput: "unsupported",
|
|
124
|
+
i18nDomains: "experimental",
|
|
125
|
+
assets: {
|
|
126
|
+
supportKind: "stable",
|
|
127
|
+
isSharpCompatible: false,
|
|
128
|
+
isSquooshCompatible: false,
|
|
129
|
+
},
|
|
130
|
+
},
|
|
131
|
+
});
|
|
132
|
+
},
|
|
133
|
+
"astro:build:setup": ({ vite, target }) => {
|
|
134
|
+
if (target === "server") {
|
|
135
|
+
vite.resolve ||= {};
|
|
136
|
+
vite.resolve.alias ||= {};
|
|
137
|
+
const aliases = [
|
|
138
|
+
{
|
|
139
|
+
find: "react-dom/server",
|
|
140
|
+
replacement: "react-dom/server.browser",
|
|
141
|
+
},
|
|
142
|
+
];
|
|
143
|
+
if (Array.isArray(vite.resolve.alias)) {
|
|
144
|
+
vite.resolve.alias = [...vite.resolve.alias, ...aliases];
|
|
145
|
+
}
|
|
146
|
+
else {
|
|
147
|
+
for (const alias of aliases) {
|
|
148
|
+
vite.resolve.alias[alias.find] =
|
|
149
|
+
alias.replacement;
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
vite.resolve.conditions ||= [];
|
|
153
|
+
// We need those conditions, previous these conditions where applied at the esbuild step which we removed
|
|
154
|
+
// https://github.com/withastro/astro/pull/7092
|
|
155
|
+
vite.resolve.conditions.push("workerd", "worker");
|
|
156
|
+
vite.ssr ||= {};
|
|
157
|
+
vite.ssr.target = "webworker";
|
|
158
|
+
vite.ssr.noExternal = true;
|
|
159
|
+
if (typeof _config.vite.ssr?.external === "undefined")
|
|
160
|
+
vite.ssr.external = ["node:async_hooks"];
|
|
161
|
+
if (typeof _config.vite.ssr?.external === "boolean")
|
|
162
|
+
vite.ssr.external = _config.vite.ssr?.external;
|
|
163
|
+
if (Array.isArray(_config.vite.ssr?.external)) {
|
|
164
|
+
// `@astrojs/vue` sets `@vue/server-renderer` to external
|
|
165
|
+
// https://github.com/withastro/astro/blob/e648c5575a8774af739231cfa9fc27a32086aa5f/packages/integrations/vue/src/index.ts#L119
|
|
166
|
+
// the cloudflare adapter needs to get all dependencies inlined, we use `noExternal` for that, but any `external` config overrides that
|
|
167
|
+
// therefore we need to remove `@vue/server-renderer` from the external config again
|
|
168
|
+
vite.ssr.external = _config.vite.ssr?.external.filter((entry) => entry !== "@vue/server-renderer");
|
|
169
|
+
vite.ssr.external.push("node:async_hooks");
|
|
170
|
+
}
|
|
171
|
+
vite.build ||= {};
|
|
172
|
+
vite.build.rollupOptions ||= {};
|
|
173
|
+
vite.build.rollupOptions.output ||= {};
|
|
174
|
+
// @ts-expect-error
|
|
175
|
+
vite.build.rollupOptions.output.banner ||=
|
|
176
|
+
"globalThis.process ??= {}; globalThis.process.env ??= {};";
|
|
177
|
+
vite.build.rollupOptions.external =
|
|
178
|
+
_config.vite.build?.rollupOptions?.external ?? [];
|
|
179
|
+
// @ts-expect-error
|
|
180
|
+
vite.build.rollupOptions.external.push("__STATIC_CONTENT_MANIFEST");
|
|
181
|
+
// Cloudflare env is only available per request. This isn't feasible for code that access env vars
|
|
182
|
+
// in a global way, so we shim their access as `process.env.*`. This is not the recommended way for users to access environment variables. But we'll add this for compatibility for chosen variables. Mainly to support `@astrojs/db`
|
|
183
|
+
vite.define = {
|
|
184
|
+
"process.env": "process.env",
|
|
185
|
+
...vite.define,
|
|
186
|
+
};
|
|
187
|
+
}
|
|
188
|
+
// we thought that vite config inside `if (target === 'server')` would not apply for client
|
|
189
|
+
// but it seems like the same `vite` reference is used for both
|
|
190
|
+
// so we need to reset the previous conflicting setting
|
|
191
|
+
// in the future we should look into a more robust solution
|
|
192
|
+
if (target === "client") {
|
|
193
|
+
vite.resolve ||= {};
|
|
194
|
+
vite.resolve.conditions ||= [];
|
|
195
|
+
vite.resolve.conditions = vite.resolve.conditions.filter((c) => c !== "workerd" && c !== "worker");
|
|
196
|
+
}
|
|
197
|
+
},
|
|
198
|
+
"astro:build:done": async ({ pages, routes, dir, logger }) => {
|
|
199
|
+
const PLATFORM_FILES = ["_headers", "_redirects", "_routes.json"];
|
|
200
|
+
if (_config.base !== "/") {
|
|
201
|
+
for (const file of PLATFORM_FILES) {
|
|
202
|
+
try {
|
|
203
|
+
await rename(new URL(file, _config.build.client), new URL(file, _config.outDir));
|
|
204
|
+
}
|
|
205
|
+
catch (e) {
|
|
206
|
+
logger.error(`There was an error moving ${file} to the root of the output directory.`);
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
let redirectsExists = false;
|
|
211
|
+
try {
|
|
212
|
+
const redirectsStat = await stat(new URL("./_redirects", _config.outDir));
|
|
213
|
+
if (redirectsStat.isFile()) {
|
|
214
|
+
redirectsExists = true;
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
catch (error) {
|
|
218
|
+
redirectsExists = false;
|
|
219
|
+
}
|
|
220
|
+
const redirects = [];
|
|
221
|
+
if (redirectsExists) {
|
|
222
|
+
const rl = createInterface({
|
|
223
|
+
input: createReadStream(new URL("./_redirects", _config.outDir)),
|
|
224
|
+
crlfDelay: Number.POSITIVE_INFINITY,
|
|
225
|
+
});
|
|
226
|
+
for await (const line of rl) {
|
|
227
|
+
const parts = line.split(" ");
|
|
228
|
+
if (parts.length >= 2) {
|
|
229
|
+
const p = removeLeadingForwardSlash(parts[0])
|
|
230
|
+
.split("/")
|
|
231
|
+
.filter(Boolean)
|
|
232
|
+
.map((s) => {
|
|
233
|
+
const syntax = s
|
|
234
|
+
.replace(/\/:.*?(?=\/|$)/g, "/*")
|
|
235
|
+
// remove query params as they are not supported by cloudflare
|
|
236
|
+
.replace(/\?.*$/, "");
|
|
237
|
+
return getParts(syntax);
|
|
238
|
+
});
|
|
239
|
+
redirects.push(p);
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
let routesExists = false;
|
|
244
|
+
try {
|
|
245
|
+
const routesStat = await stat(new URL("./_routes.json", _config.outDir));
|
|
246
|
+
if (routesStat.isFile()) {
|
|
247
|
+
routesExists = true;
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
catch (error) {
|
|
251
|
+
routesExists = false;
|
|
252
|
+
}
|
|
253
|
+
if (!routesExists) {
|
|
254
|
+
await createRoutesFile(_config, logger, routes, pages, redirects, args?.routes?.extend?.include, args?.routes?.extend?.exclude);
|
|
255
|
+
}
|
|
256
|
+
const redirectRoutes = [];
|
|
257
|
+
for (const route of routes) {
|
|
258
|
+
if (route.type === "redirect")
|
|
259
|
+
redirectRoutes.push([route, ""]);
|
|
260
|
+
}
|
|
261
|
+
const trueRedirects = createRedirectsFromAstroRoutes({
|
|
262
|
+
config: _config,
|
|
263
|
+
routeToDynamicTargetMap: new Map(Array.from(redirectRoutes)),
|
|
264
|
+
dir,
|
|
265
|
+
});
|
|
266
|
+
if (!trueRedirects.empty()) {
|
|
267
|
+
try {
|
|
268
|
+
await appendFile(new URL("./_redirects", _config.outDir), trueRedirects.print());
|
|
269
|
+
}
|
|
270
|
+
catch (error) {
|
|
271
|
+
logger.error("Failed to write _redirects file");
|
|
272
|
+
}
|
|
273
|
+
}
|
|
274
|
+
// Get chunks from the bundle that are not needed on the server and delete them
|
|
275
|
+
// Those modules are build only for prerendering routes.
|
|
276
|
+
const chunksToDelete = chunkAnalyzer.getNonServerChunks();
|
|
277
|
+
for (const chunk of chunksToDelete) {
|
|
278
|
+
try {
|
|
279
|
+
// Chunks are located on `./_worker.js` directory inside of the output directory
|
|
280
|
+
await unlink(new URL(`./_worker.js/${chunk}`, _config.outDir));
|
|
281
|
+
}
|
|
282
|
+
catch (error) {
|
|
283
|
+
logger.warn(`Issue while trying to delete unused file from server bundle: ${new URL(`./_worker.js/${chunk}`, _config.outDir).toString()}`);
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
},
|
|
287
|
+
},
|
|
288
|
+
};
|
|
289
|
+
}
|
|
290
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBR0EsT0FBTyxFQUNMLGtCQUFrQixFQUNsQixtQkFBbUIsRUFDbkIseUJBQXlCLEdBQzFCLE1BQU0sZ0NBQWdDLENBQUM7QUFDeEMsT0FBTyxFQUFFLDhCQUE4QixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDL0UsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUMxQyxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3JDLE9BQU8sV0FBVyxNQUFNLGNBQWMsQ0FBQztBQUN2QyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFDM0MsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ3BFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDNUMsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBRXpELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxRQUFRLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUM3RSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDekQsT0FBTyxFQUNMLCtCQUErQixFQUMvQixvQkFBb0IsR0FDckIsTUFBTSxrQkFBa0IsQ0FBQztBQUMxQixPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUM5RSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUVqRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQzVDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFtQ3pDLE1BQU0sQ0FBQyxPQUFPLFVBQVUsaUJBQWlCLENBQUMsSUFB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
|