@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,73 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A Vite bundle analyzer that identifies chunks that are not used for server rendering.
|
|
3
|
+
*
|
|
4
|
+
* The chunks injected by Astro for prerendering are flagged as non-server chunks.
|
|
5
|
+
* Any chunks that is only used by a non-server chunk are also flagged as non-server chunks.
|
|
6
|
+
* This continues transitively until all non-server chunks are found.
|
|
7
|
+
*/
|
|
8
|
+
export class NonServerChunkDetector {
|
|
9
|
+
nonServerChunks;
|
|
10
|
+
getPlugin() {
|
|
11
|
+
return {
|
|
12
|
+
name: "non-server-chunk-detector",
|
|
13
|
+
generateBundle: (_, bundle) => {
|
|
14
|
+
// Skip if we bundle for client
|
|
15
|
+
if (!bundle["index.js"])
|
|
16
|
+
return;
|
|
17
|
+
this.processBundle(bundle);
|
|
18
|
+
},
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
processBundle(bundle) {
|
|
22
|
+
const chunkNamesToFiles = new Map();
|
|
23
|
+
const entryChunks = [];
|
|
24
|
+
const chunkToDependencies = new Map();
|
|
25
|
+
for (const chunk of Object.values(bundle)) {
|
|
26
|
+
if (chunk.type !== "chunk")
|
|
27
|
+
continue;
|
|
28
|
+
// Construct a mapping from a chunk name to its file name
|
|
29
|
+
chunkNamesToFiles.set(chunk.name, chunk.fileName);
|
|
30
|
+
// Construct a mapping from a chunk file to all the modules it imports
|
|
31
|
+
chunkToDependencies.set(chunk.fileName, [
|
|
32
|
+
...chunk.imports,
|
|
33
|
+
...chunk.dynamicImports,
|
|
34
|
+
]);
|
|
35
|
+
if (chunk.isEntry) {
|
|
36
|
+
// Entry chunks should always be kept around since they are to be imported by the runtime
|
|
37
|
+
entryChunks.push(chunk.fileName);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
const chunkDecisions = new Map();
|
|
41
|
+
for (const entry of entryChunks) {
|
|
42
|
+
// Entry chunks are used on the server
|
|
43
|
+
chunkDecisions.set(entry, true);
|
|
44
|
+
}
|
|
45
|
+
for (const chunk of ["prerender", "prerender@_@astro"]) {
|
|
46
|
+
// Prerender chunks are not used on the server
|
|
47
|
+
const fileName = chunkNamesToFiles.get(chunk);
|
|
48
|
+
if (fileName) {
|
|
49
|
+
chunkDecisions.set(fileName, false);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
// Start a stack of chunks that are used on the server
|
|
53
|
+
const chunksToWalk = [...entryChunks];
|
|
54
|
+
// Iterate over the chunks, traversing the transitive dependencies of the chunks used on the server
|
|
55
|
+
for (let chunk = chunksToWalk.pop(); chunk; chunk = chunksToWalk.pop()) {
|
|
56
|
+
for (const dep of chunkToDependencies.get(chunk) ?? []) {
|
|
57
|
+
// Skip dependencies already flagged, dependencies may be repeated and/or circular
|
|
58
|
+
if (chunkDecisions.has(dep))
|
|
59
|
+
continue;
|
|
60
|
+
// A dependency of a module used on the server is also used on the server
|
|
61
|
+
chunkDecisions.set(dep, true);
|
|
62
|
+
// Add the dependency to the stack so its own dependencies are also flagged
|
|
63
|
+
chunksToWalk.push(dep);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
// Any chunk not flagged as used on the server is a non-server chunk
|
|
67
|
+
this.nonServerChunks = Array.from(chunkToDependencies.keys()).filter((chunk) => !chunkDecisions.get(chunk));
|
|
68
|
+
}
|
|
69
|
+
getNonServerChunks() {
|
|
70
|
+
return this.nonServerChunks ?? [];
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9uLXNlcnZlci1jaHVuay1kZXRlY3Rvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy9ub24tc2VydmVyLWNodW5rLWRldGVjdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUdBOzs7Ozs7R0FNRztBQUNILE1BQU0sT0FBTyxzQkFBc0I7SUFDekIsZUFBZSxDQUFZO0lBRTVCLFNBQVM7UUFDZCxPQUFPO1lBQ0wsSUFBSSxFQUFFLDJCQUEyQjtZQUNqQyxjQUFjLEVBQUUsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLEVBQUU7Z0JBQzVCLCtCQUErQjtnQkFDL0IsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUM7b0JBQUUsT0FBTztnQkFDaEMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUM3QixDQUFDO1NBQ0YsQ0FBQztJQUNKLENBQUM7SUFFTyxhQUFhLENBQUMsTUFBb0I7UUFDeEMsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLEdBQUcsRUFBa0IsQ0FBQztRQUVwRCxNQUFNLFdBQVcsR0FBYSxFQUFFLENBQUM7UUFDakMsTUFBTSxtQkFBbUIsR0FBRyxJQUFJLEdBQUcsRUFBb0IsQ0FBQztRQUV4RCxLQUFLLE1BQU0sS0FBSyxJQUFJLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztZQUMxQyxJQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUssT0FBTztnQkFBRSxTQUFTO1lBRXJDLHlEQUF5RDtZQUN6RCxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDbEQsc0VBQXNFO1lBQ3RFLG1CQUFtQixDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFO2dCQUN0QyxHQUFHLEtBQUssQ0FBQyxPQUFPO2dCQUNoQixHQUFHLEtBQUssQ0FBQyxjQUFjO2FBQ3hCLENBQUMsQ0FBQztZQUVILElBQUksS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDO2dCQUNsQix5RkFBeUY7Z0JBQ3pGLFdBQVcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ25DLENBQUM7UUFDSCxDQUFDO1FBRUQsTUFBTSxjQUFjLEdBQUcsSUFBSSxHQUFHLEVBQW1CLENBQUM7UUFFbEQsS0FBSyxNQUFNLEtBQUssSUFBSSxXQUFXLEVBQUUsQ0FBQztZQUNoQyxzQ0FBc0M7WUFDdEMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDbEMsQ0FBQztRQUVELEtBQUssTUFBTSxLQUFLLElBQUksQ0FBQyxXQUFXLEVBQUUsbUJBQW1CLENBQUMsRUFBRSxDQUFDO1lBQ3ZELDhDQUE4QztZQUM5QyxNQUFNLFFBQVEsR0FBRyxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDOUMsSUFBSSxRQUFRLEVBQUUsQ0FBQztnQkFDYixjQUFjLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUN0QyxDQUFDO1FBQ0gsQ0FBQztRQUVELHNEQUFzRDtRQUN0RCxNQUFNLFlBQVksR0FBRyxDQUFDLEdBQUcsV0FBVyxDQUFDLENBQUM7UUFFdEMsbUdBQW1HO1FBQ25HLEtBQUssSUFBSSxLQUFLLEdBQUcsWUFBWSxDQUFDLEdBQUcsRUFBRSxFQUFFLEtBQUssRUFBRSxLQUFLLEdBQUcsWUFBWSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUM7WUFDdkUsS0FBSyxNQUFNLEdBQUcsSUFBSSxtQkFBbUIsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUM7Z0JBQ3ZELGtGQUFrRjtnQkFDbEYsSUFBSSxjQUFjLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQztvQkFBRSxTQUFTO2dCQUV0Qyx5RUFBeUU7Z0JBQ3pFLGNBQWMsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO2dCQUM5QiwyRUFBMkU7Z0JBQzNFLFlBQVksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDekIsQ0FBQztRQUNILENBQUM7UUFFRCxvRUFBb0U7UUFDcEUsSUFBSSxDQUFDLGVBQWUsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsTUFBTSxDQUNsRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUN0QyxDQUFDO0lBQ0osQ0FBQztJQUVNLGtCQUFrQjtRQUN2QixPQUFPLElBQUksQ0FBQyxlQUFlLElBQUksRUFBRSxDQUFDO0lBQ3BDLENBQUM7Q0FDRiJ9
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { AstroConfig } from "astro";
|
|
2
|
+
/**
|
|
3
|
+
* Loads '*.wasm?module' imports as WebAssembly modules, which is the only way to load WASM in cloudflare workers.
|
|
4
|
+
* Current proposal for WASM modules: https://github.com/WebAssembly/esm-integration/tree/main/proposals/esm-integration
|
|
5
|
+
* Cloudflare worker WASM from javascript support: https://developers.cloudflare.com/workers/runtime-apis/webassembly/javascript/
|
|
6
|
+
* @param disabled - if true throws a helpful error message if wasm is encountered and wasm imports are not enabled,
|
|
7
|
+
* otherwise it will error obscurely in the esbuild and vite builds
|
|
8
|
+
* @param assetsDirectory - the folder name for the assets directory in the build directory. Usually '_astro'
|
|
9
|
+
* @returns Vite plugin to load WASM tagged with '?module' as a WASM modules
|
|
10
|
+
*/
|
|
11
|
+
export declare function wasmModuleLoader({ disabled, }: {
|
|
12
|
+
disabled: boolean;
|
|
13
|
+
}): NonNullable<AstroConfig["vite"]["plugins"]>[number];
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
import * as fs from "node:fs";
|
|
2
|
+
import * as path from "node:path";
|
|
3
|
+
/**
|
|
4
|
+
* Loads '*.wasm?module' imports as WebAssembly modules, which is the only way to load WASM in cloudflare workers.
|
|
5
|
+
* Current proposal for WASM modules: https://github.com/WebAssembly/esm-integration/tree/main/proposals/esm-integration
|
|
6
|
+
* Cloudflare worker WASM from javascript support: https://developers.cloudflare.com/workers/runtime-apis/webassembly/javascript/
|
|
7
|
+
* @param disabled - if true throws a helpful error message if wasm is encountered and wasm imports are not enabled,
|
|
8
|
+
* otherwise it will error obscurely in the esbuild and vite builds
|
|
9
|
+
* @param assetsDirectory - the folder name for the assets directory in the build directory. Usually '_astro'
|
|
10
|
+
* @returns Vite plugin to load WASM tagged with '?module' as a WASM modules
|
|
11
|
+
*/
|
|
12
|
+
export function wasmModuleLoader({ disabled, }) {
|
|
13
|
+
const postfix = ".wasm?module";
|
|
14
|
+
let isDev = false;
|
|
15
|
+
return {
|
|
16
|
+
name: "vite:wasm-module-loader",
|
|
17
|
+
enforce: "pre",
|
|
18
|
+
configResolved(config) {
|
|
19
|
+
isDev = config.command === "serve";
|
|
20
|
+
},
|
|
21
|
+
config(_, __) {
|
|
22
|
+
// let vite know that file format and the magic import string is intentional, and will be handled in this plugin
|
|
23
|
+
return {
|
|
24
|
+
assetsInclude: ["**/*.wasm?module"],
|
|
25
|
+
build: {
|
|
26
|
+
rollupOptions: {
|
|
27
|
+
// mark the wasm files as external so that they are not bundled and instead are loaded from the files
|
|
28
|
+
external: [
|
|
29
|
+
/^__WASM_ASSET__.+\.wasm$/i,
|
|
30
|
+
/^__WASM_ASSET__.+\.wasm.mjs$/i,
|
|
31
|
+
],
|
|
32
|
+
},
|
|
33
|
+
},
|
|
34
|
+
};
|
|
35
|
+
},
|
|
36
|
+
load(id, _) {
|
|
37
|
+
if (!id.endsWith(postfix)) {
|
|
38
|
+
return;
|
|
39
|
+
}
|
|
40
|
+
if (disabled) {
|
|
41
|
+
throw new Error(`WASM module's cannot be loaded unless you add \`wasmModuleImports: true\` to your astro config.`);
|
|
42
|
+
}
|
|
43
|
+
const filePath = id.slice(0, -1 * "?module".length);
|
|
44
|
+
const data = fs.readFileSync(filePath);
|
|
45
|
+
const base64 = data.toString("base64");
|
|
46
|
+
const base64Module = `const wasmModule = new WebAssembly.Module(Uint8Array.from(atob("${base64}"), c => c.charCodeAt(0)));export default wasmModule;`;
|
|
47
|
+
if (isDev) {
|
|
48
|
+
// no need to wire up the assets in dev mode, just rewrite
|
|
49
|
+
return base64Module;
|
|
50
|
+
}
|
|
51
|
+
// just some shared ID
|
|
52
|
+
const hash = hashString(base64);
|
|
53
|
+
// emit the wasm binary as an asset file, to be picked up later by the esbuild bundle for the worker.
|
|
54
|
+
// give it a shared deterministic name to make things easy for esbuild to switch on later
|
|
55
|
+
const assetName = `${path.basename(filePath).split(".")[0]}.${hash}.wasm`;
|
|
56
|
+
this.emitFile({
|
|
57
|
+
type: "asset",
|
|
58
|
+
// put it explicitly in the _astro assets directory with `fileName` rather than `name` so that
|
|
59
|
+
// vite doesn't give it a random id in its name. We need to be able to easily rewrite from
|
|
60
|
+
// the .mjs loader and the actual wasm asset later in the ESbuild for the worker
|
|
61
|
+
fileName: assetName,
|
|
62
|
+
source: data,
|
|
63
|
+
});
|
|
64
|
+
// however, by default, the SSG generator cannot import the .wasm as a module, so embed as a base64 string
|
|
65
|
+
const chunkId = this.emitFile({
|
|
66
|
+
type: "prebuilt-chunk",
|
|
67
|
+
fileName: `${assetName}.mjs`,
|
|
68
|
+
code: base64Module,
|
|
69
|
+
});
|
|
70
|
+
return `import wasmModule from "__WASM_ASSET__${chunkId}.wasm.mjs";export default wasmModule;`;
|
|
71
|
+
},
|
|
72
|
+
// output original wasm file relative to the chunk
|
|
73
|
+
renderChunk(code, chunk, _) {
|
|
74
|
+
if (isDev)
|
|
75
|
+
return;
|
|
76
|
+
if (!/__WASM_ASSET__/g.test(code))
|
|
77
|
+
return;
|
|
78
|
+
const isPrerendered = Object.keys(chunk.modules).some((moduleId) => this.getModuleInfo(moduleId)?.meta?.["astro"]?.pageOptions
|
|
79
|
+
?.prerender === true);
|
|
80
|
+
let final = code;
|
|
81
|
+
// SSR
|
|
82
|
+
if (!isPrerendered) {
|
|
83
|
+
final = code.replaceAll(/__WASM_ASSET__([A-Za-z\d]+).wasm.mjs/g, (_, assetId) => {
|
|
84
|
+
const fileName = this.getFileName(assetId).replace(/\.mjs$/, "");
|
|
85
|
+
const relativePath = path
|
|
86
|
+
.relative(path.dirname(chunk.fileName), fileName)
|
|
87
|
+
.replaceAll("\\", "/"); // fix windows paths for import
|
|
88
|
+
return `./${relativePath}`;
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
// SSG
|
|
92
|
+
if (isPrerendered) {
|
|
93
|
+
final = code.replaceAll(/__WASM_ASSET__([A-Za-z\d]+).wasm.mjs/g, (_, assetId) => {
|
|
94
|
+
const fileName = this.getFileName(assetId);
|
|
95
|
+
const relativePath = path
|
|
96
|
+
.relative(path.dirname(chunk.fileName), fileName)
|
|
97
|
+
.replaceAll("\\", "/"); // fix windows paths for import
|
|
98
|
+
return `./${relativePath}`;
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
return { code: final };
|
|
102
|
+
},
|
|
103
|
+
};
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Returns a deterministic 32 bit hash code from a string
|
|
107
|
+
*/
|
|
108
|
+
function hashString(str) {
|
|
109
|
+
let hash = 0;
|
|
110
|
+
for (let i = 0; i < str.length; i++) {
|
|
111
|
+
const char = str.charCodeAt(i);
|
|
112
|
+
hash = (hash << 5) - hash + char;
|
|
113
|
+
hash &= hash; // Convert to 32bit integer
|
|
114
|
+
}
|
|
115
|
+
return new Uint32Array([hash])[0].toString(36);
|
|
116
|
+
}
|
|
117
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2FzbS1tb2R1bGUtbG9hZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3V0aWxzL3dhc20tbW9kdWxlLWxvYWRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUM5QixPQUFPLEtBQUssSUFBSSxNQUFNLFdBQVcsQ0FBQztBQUdsQzs7Ozs7Ozs7R0FRRztBQUNILE1BQU0sVUFBVSxnQkFBZ0IsQ0FBQyxFQUMvQixRQUFRLEdBR1Q7SUFDQyxNQUFNLE9BQU8sR0FBRyxjQUFjLENBQUM7SUFDL0IsSUFBSSxLQUFLLEdBQUcsS0FBSyxDQUFDO0lBRWxCLE9BQU87UUFDTCxJQUFJLEVBQUUseUJBQXlCO1FBQy9CLE9BQU8sRUFBRSxLQUFLO1FBQ2QsY0FBYyxDQUFDLE1BQU07WUFDbkIsS0FBSyxHQUFHLE1BQU0sQ0FBQyxPQUFPLEtBQUssT0FBTyxDQUFDO1FBQ3JDLENBQUM7UUFDRCxNQUFNLENBQUMsQ0FBQyxFQUFFLEVBQUU7WUFDVixnSEFBZ0g7WUFDaEgsT0FBTztnQkFDTCxhQUFhLEVBQUUsQ0FBQyxrQkFBa0IsQ0FBQztnQkFDbkMsS0FBSyxFQUFFO29CQUNMLGFBQWEsRUFBRTt3QkFDYixxR0FBcUc7d0JBQ3JHLFFBQVEsRUFBRTs0QkFDUiwyQkFBMkI7NEJBQzNCLCtCQUErQjt5QkFDaEM7cUJBQ0Y7aUJBQ0Y7YUFDRixDQUFDO1FBQ0osQ0FBQztRQUVELElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQztZQUNSLElBQUksQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7Z0JBQzFCLE9BQU87WUFDVCxDQUFDO1lBQ0QsSUFBSSxRQUFRLEVBQUUsQ0FBQztnQkFDYixNQUFNLElBQUksS0FBSyxDQUNiLGlHQUFpRyxDQUNsRyxDQUFDO1lBQ0osQ0FBQztZQUVELE1BQU0sUUFBUSxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUMs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
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import buildResolver from "esm-resolve";
|
|
2
|
+
import MagicString from "magic-string";
|
|
3
|
+
import { fileURLToPath } from "node:url";
|
|
4
|
+
import { join } from "path";
|
|
5
|
+
export function wixSDKContext() {
|
|
6
|
+
let resolvedConfig = null;
|
|
7
|
+
const virtualModuleId = "virtual:@wix-astro/sdk-context";
|
|
8
|
+
const moduleIdsToInject = new Set();
|
|
9
|
+
return {
|
|
10
|
+
name: "inject-wix-sdk-context",
|
|
11
|
+
enforce: "pre",
|
|
12
|
+
configResolved(config) {
|
|
13
|
+
resolvedConfig = config;
|
|
14
|
+
},
|
|
15
|
+
async resolveId(source, importer, options) {
|
|
16
|
+
if (source === virtualModuleId) {
|
|
17
|
+
return virtualModuleId;
|
|
18
|
+
}
|
|
19
|
+
if (importer === join(resolvedConfig.root, "index.html") &&
|
|
20
|
+
!options.ssr &&
|
|
21
|
+
(source.startsWith("/src") ||
|
|
22
|
+
source.startsWith(join(resolvedConfig.root, "src")))) {
|
|
23
|
+
const resolved = await this.resolve(source, importer, {
|
|
24
|
+
skipSelf: true,
|
|
25
|
+
});
|
|
26
|
+
if (resolved) {
|
|
27
|
+
moduleIdsToInject.add(resolved.id);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
},
|
|
31
|
+
load(id) {
|
|
32
|
+
const aRequire = buildResolver(fileURLToPath(import.meta.url), {
|
|
33
|
+
resolveToAbsolute: true,
|
|
34
|
+
});
|
|
35
|
+
const wixSDKResolved = aRequire("@wix/sdk/client");
|
|
36
|
+
const wixSDKAuthResolved = aRequire("@wix/sdk/auth/oauth2");
|
|
37
|
+
if (id === virtualModuleId) {
|
|
38
|
+
return `
|
|
39
|
+
import { createClient } from "${wixSDKResolved}";
|
|
40
|
+
import { OAuthStrategy } from "${wixSDKAuthResolved}";
|
|
41
|
+
|
|
42
|
+
function getCookie(name) {
|
|
43
|
+
// To prevent the for loop in the first place assign an empty array
|
|
44
|
+
// in case there are no cookies at all.
|
|
45
|
+
var cookies = document.cookie ? document.cookie.split('; ') : [];
|
|
46
|
+
var jar = {};
|
|
47
|
+
for (var i = 0; i < cookies.length; i++) {
|
|
48
|
+
var parts = cookies[i].split('=');
|
|
49
|
+
var value = parts.slice(1).join('=');
|
|
50
|
+
|
|
51
|
+
try {
|
|
52
|
+
var found = decodeURIComponent(parts[0]);
|
|
53
|
+
jar[found] = converter.read(value, found);
|
|
54
|
+
|
|
55
|
+
if (name === found) {
|
|
56
|
+
break
|
|
57
|
+
}
|
|
58
|
+
} catch (e) {}
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
return name ? jar[name] : jar
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
createClient({
|
|
65
|
+
auth: OAuthStrategy({
|
|
66
|
+
clientId: import.meta.env.WIX_CLIENT_ID,
|
|
67
|
+
tokens: JSON.parse(getCookie("wixSession") ?? "{}"),
|
|
68
|
+
})
|
|
69
|
+
}).enableContext('global');
|
|
70
|
+
`;
|
|
71
|
+
}
|
|
72
|
+
},
|
|
73
|
+
transform(code, id, options) {
|
|
74
|
+
if (moduleIdsToInject.has(id) && !options?.ssr) {
|
|
75
|
+
const s = new MagicString(code);
|
|
76
|
+
s.prepend(`import '${virtualModuleId}';\n`);
|
|
77
|
+
return {
|
|
78
|
+
code: s.toString(),
|
|
79
|
+
map: s.generateMap(),
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
return code;
|
|
83
|
+
},
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2RrLWNvbnRleHQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdml0ZS1wbHVnaW5zL3Nkay1jb250ZXh0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sYUFBYSxNQUFNLGFBQWEsQ0FBQztBQUN4QyxPQUFPLFdBQVcsTUFBTSxjQUFjLENBQUM7QUFDdkMsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUN6QyxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRzVCLE1BQU0sVUFBVSxhQUFhO0lBQzNCLElBQUksY0FBYyxHQUEwQixJQUFJLENBQUM7SUFDakQsTUFBTSxlQUFlLEdBQUcsZ0NBQWdDLENBQUM7SUFFekQsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLEdBQUcsRUFBVSxDQUFDO0lBRTVDLE9BQU87UUFDTCxJQUFJLEVBQUUsd0JBQXdCO1FBQzlCLE9BQU8sRUFBRSxLQUFLO1FBQ2QsY0FBYyxDQUFDLE1BQU07WUFDbkIsY0FBYyxHQUFHLE1BQU0sQ0FBQztRQUMxQixDQUFDO1FBQ0QsS0FBSyxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUUsUUFBUSxFQUFFLE9BQU87WUFDdkMsSUFBSSxNQUFNLEtBQUssZUFBZSxFQUFFLENBQUM7Z0JBQy9CLE9BQU8sZUFBZSxDQUFDO1lBQ3pCLENBQUM7WUFFRCxJQUNFLFFBQVEsS0FBSyxJQUFJLENBQUMsY0FBZSxDQUFDLElBQUksRUFBRSxZQUFZLENBQUM7Z0JBQ3JELENBQUMsT0FBTyxDQUFDLEdBQUc7Z0JBQ1osQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQztvQkFDeEIsTUFBTSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsY0FBZSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQ3ZELENBQUM7Z0JBQ0QsTUFBTSxRQUFRLEdBQUcsTUFBTSxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxRQUFRLEVBQUU7b0JBQ3BELFFBQVEsRUFBRSxJQUFJO2lCQUNmLENBQUMsQ0FBQztnQkFDSCxJQUFJLFFBQVEsRUFBRSxDQUFDO29CQUNiLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7Z0JBQ3JDLENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQztRQUNELElBQUksQ0FBQyxFQUFFO1lBQ0wsTUFBTSxRQUFRLEdBQUcsYUFBYSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFO2dCQUM3RCxpQkFBaUIsRUFBRSxJQUFJO2FBQ3hCLENBQUMsQ0FBQztZQUVILE1BQU0sY0FBYyxHQUFHLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1lBQ25ELE1BQU0sa0JBQWtCLEdBQUcsUUFBUSxDQUFDLHNCQUFzQixDQUFDLENBQUM7WUFFNUQsSUFBSSxFQUFFLEtBQUssZUFBZSxFQUFFLENBQUM7Z0JBQzNCLE9BQU87MENBQzJCLGNBQWM7MkNBQ2Isa0JBQWtCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7V0E4QmxELENBQUM7WUFDTixDQUFDO1FBQ0gsQ0FBQztRQUNELFNBQVMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxFQUFFLE9BQU87WUFDekIsSUFBSSxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsR0FBRyxFQUFFLENBQUM7Z0JBQy9DLE1BQU0sQ0FBQyxHQUFHLElBQUksV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUNoQyxDQUFDLENBQUMsT0FBTyxDQUFDLFdBQVcsZUFBZSxNQUFNLENBQUMsQ0FBQztnQkFFNUMsT0FBTztvQkFDTCxJQUFJLEVBQUUsQ0FBQyxDQUFDLFFBQVEsRUFBRTtvQkFDbEIsR0FBRyxFQUFFLENBQUMsQ0FBQyxXQUFXLEVBQUU7aUJBQ3JCLENBQUM7WUFDSixDQUFDO1lBQ0QsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO0tBQ0YsQ0FBQztBQUNKLENBQUMifQ==
|
package/package.json
ADDED
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@wix/astro",
|
|
3
|
+
"description": "Develop your Astro site on the Wix Platform",
|
|
4
|
+
"version": "0.1.1",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"license": "MIT",
|
|
7
|
+
"publishConfig": {
|
|
8
|
+
"registry": "https://registry.npmjs.org/",
|
|
9
|
+
"access": "public"
|
|
10
|
+
},
|
|
11
|
+
"keywords": [
|
|
12
|
+
"withastro",
|
|
13
|
+
"astro-adapter"
|
|
14
|
+
],
|
|
15
|
+
"exports": {
|
|
16
|
+
".": "./dist/index.js",
|
|
17
|
+
"./entrypoints/server.js": "./dist/entrypoints/server.js",
|
|
18
|
+
"./image-service": "./dist/entrypoints/image-service.js",
|
|
19
|
+
"./image-endpoint": "./dist/entrypoints/image-endpoint.js",
|
|
20
|
+
"./package.json": "./package.json",
|
|
21
|
+
"./extensions": "./dist/extensions.js"
|
|
22
|
+
},
|
|
23
|
+
"files": [
|
|
24
|
+
"dist"
|
|
25
|
+
],
|
|
26
|
+
"scripts": {
|
|
27
|
+
"build": "tsc",
|
|
28
|
+
"test": ":"
|
|
29
|
+
},
|
|
30
|
+
"dependencies": {
|
|
31
|
+
"@astrojs/internal-helpers": "0.3.0",
|
|
32
|
+
"@astrojs/underscore-redirects": "^0.4.0",
|
|
33
|
+
"@cloudflare/kv-asset-handler": "^0.3.4",
|
|
34
|
+
"@cloudflare/workers-types": "^4.20241205.0",
|
|
35
|
+
"@wix/sdk": "^1.15.6",
|
|
36
|
+
"esbuild": "^0.24.0",
|
|
37
|
+
"esm-resolve": "^1.0.11",
|
|
38
|
+
"estree-walker": "^3.0.3",
|
|
39
|
+
"magic-string": "^0.30.15",
|
|
40
|
+
"tiny-glob": "^0.2.9"
|
|
41
|
+
},
|
|
42
|
+
"peerDependencies": {
|
|
43
|
+
"astro": "^4.2.0"
|
|
44
|
+
},
|
|
45
|
+
"devDependencies": {
|
|
46
|
+
"@types/node": "^18.19.68",
|
|
47
|
+
"astro": "^4.16.17",
|
|
48
|
+
"execa": "^8.0.1",
|
|
49
|
+
"fast-glob": "^3.3.2",
|
|
50
|
+
"rollup": "^4.28.1",
|
|
51
|
+
"strip-ansi": "^7.1.0",
|
|
52
|
+
"typescript": "^5.7.2",
|
|
53
|
+
"vite": "^5.4.11"
|
|
54
|
+
},
|
|
55
|
+
"wix": {
|
|
56
|
+
"artifact": {
|
|
57
|
+
"groupId": "com.wixpress.wixstro",
|
|
58
|
+
"artifactId": "astro-integration"
|
|
59
|
+
}
|
|
60
|
+
},
|
|
61
|
+
"falconPackageHash": "564c110d4cb5d779d71a2f287aad5b7aa66e0d4836d52b16a6820fd6"
|
|
62
|
+
}
|