Files
2024-02-18 21:46:01 -06:00

83 lines
2.2 KiB
JavaScript

// adapter-appwrites.js
import { writeFileSync } from "node:fs";
import { fileURLToPath } from "url";
const files = fileURLToPath(new URL("./files", import.meta.url).href);
/** @type {import('./index.js').default} */
export default function (opts = {}) {
const { out = "build", precompress } = opts;
return {
name: "adapter-appwrite",
async adapt(builder) {
const tmp = builder.getBuildDirectory("adapter-appwrite");
// Clean up previous builds using builder's rimraf function
builder.rimraf(tmp);
builder.rimraf(out);
builder.mkdirp(tmp);
builder.mkdirp(out);
builder.log.minor("Copying assets");
builder.writeClient(`${out}/client`);
builder.writePrerendered(`${out}/prerendered`);
if (precompress) {
builder.log.minor("Compressing assets");
await Promise.all([
builder.compress(`${out}/client`),
builder.compress(`${out}/prerendered`),
]);
}
builder.log.minor("Building server");
builder.writeServer(tmp);
builder.log.info("Preparing application for Appwrite...");
let prerendered_entries = Array.from(builder.prerendered.pages.entries());
if (builder.config.kit.paths.base) {
prerendered_entries = prerendered_entries.map(([path, { file }]) => [
path,
{ file: `${builder.config.kit.paths.base}/${file}` },
]);
}
writeFileSync(
`${tmp}/manifest.js`,
[
`export const manifest = ${builder.generateManifest({
relativePath: "./",
})};`,
`export const prerendered = new Set(${JSON.stringify(
builder.prerendered.paths
)});`,
].join("\n\n")
);
// Use builder.copy to process and move the entry file
builder.copy(files, out, {
replace: {
SERVER: `./server/index.js`,
MANIFEST: "./server/manifest.js",
},
});
builder.copy(tmp, `${out}/server`, {
replace: {
SERVER: `./index.js`,
MANIFEST: ".//manifest.js",
},
});
builder.log.info("Application prepared for Appwrite");
},
supports: {
read: () => true,
},
};
}