${article.publication_date}
${article.title}
${article.meta_description ?? "No description provided"}
import { readFile, mkdir, writeFile } from "node:fs/promises";
import { join } from "node:path";
import { md } from "$lib/utils";
import type { Actions, PageServerLoad } from "./$types";
export const load: PageServerLoad = async ({ params, fetch, cookies, locals }) => {
const websiteOverviewData = await fetch(
`http://localhost:3000/website_overview?id=eq.${params.websiteId}`,
{
method: "GET",
headers: {
"Content-Type": "application/json",
Authorization: `Bearer ${cookies.get("session_token")}`,
Accept: "application/vnd.pgrst.object+json"
}
}
);
const websiteOverview = await websiteOverviewData.json();
generateStaticFiles(websiteOverview);
return {
websiteOverview
};
};
export const actions: Actions = {
publishWebsite: async ({ request, params, locals }) => {
const data = await request.formData();
const websiteOverview = JSON.parse(data.get("website-overview") as string);
generateStaticFiles(websiteOverview, false);
}
};
const generateStaticFiles = async (websiteData: any, isPreview: boolean = true) => {
const templatePath = join(
process.cwd(),
"..",
"templates",
websiteData.content_type.toLowerCase()
);
const indexFile = await readFile(join(templatePath, "index.html"), { encoding: "utf-8" });
const articleFile = await readFile(join(templatePath, "article.html"), {
encoding: "utf-8"
});
const indexFileContents = indexFile
.replace(
"{{logo}}",
websiteData.logo_type === "text"
? `${websiteData.logo_text}`
: ``
)
.replace("{{title}}", `
${article.publication_date}
${article.meta_description ?? "No description provided"}
No articles available at this time.
" ) .replace("{{additional_text}}", md.render(websiteData.additional_text ?? "")); let uploadDir = ""; if (isPreview) { uploadDir = join(process.cwd(), "static", "user-websites", websiteData.user_id, websiteData.id); } else { uploadDir = join("/", "var", "www", "archtika-websites", websiteData.user_id, websiteData.id); } await mkdir(uploadDir, { recursive: true }); await writeFile(join(uploadDir, "index.html"), indexFileContents); await mkdir(join(uploadDir, "articles"), { recursive: true }); for (const article of websiteData.articles ?? []) { const articleFileName = article.title.toLowerCase().split(" ").join("-"); const articleFileContents = articleFile .replace( "{{logo}}", websiteData.logo_type === "text" ? `${websiteData.logo_text}` : `${article.publication_date}
`) .replace("{{main_content}}", md.render(article.main_content ?? "")) .replace("{{additional_text}}", md.render(websiteData.additional_text ?? "")); await writeFile(join(uploadDir, "articles", `${articleFileName}.html`), articleFileContents); } };