diff --git a/src/routes/blog/+layout.server.ts b/src/routes/blog/+layout.server.ts new file mode 100644 index 0000000..df46931 --- /dev/null +++ b/src/routes/blog/+layout.server.ts @@ -0,0 +1 @@ +export const prerender = 'auto'; diff --git a/src/routes/blog/+page.server.ts b/src/routes/blog/+page.server.ts index 1826d0d..189f71e 100644 --- a/src/routes/blog/+page.server.ts +++ b/src/routes/blog/+page.server.ts @@ -1,64 +1 @@ -import { BlogController } from '$lib/blog/BlogController.js'; -import type { Actions } from '@sveltejs/kit'; -import { error, redirect } from '@sveltejs/kit'; -import { dump as dumpYaml } from 'js-yaml'; -import { resolve } from 'path'; - -const thisDirectory = import.meta.url - .replace('file://', '') - .split('/') - .filter((part) => part !== '+server.ts') - .join('/'); - -export const actions = { - default: async ({ getClientAddress, request }) => { - console.log(`Received request to create new blog post.`); - const address = await getClientAddress(); - let markdownContent: string; - let title: string; - let date: string; - let slug: string; - let author: string; - - try { - const requestBody = await request.formData(); - markdownContent = requestBody.get('content') as string; - title = requestBody.get('title') as string; - date = requestBody.get('date') as string; - slug = requestBody.get('slug') as string; - author = requestBody.get('author') as string; - } catch (e: any) { - console.log(`Caught error destructuring request body`); - console.error(e); - error(400, 'Error in request body.'); - } - - if ([markdownContent, title, date, slug, author].includes(undefined)) { - error(400, `Missing parameters.`); - } else if (!['127.0.0.1', '::1'].includes(address)) { - console.log(address); - error(403, `Forbidden.`); - } - - const controller = await BlogController.singleton(); - - const worryinglyManualFrontMatter = [ - `---`, - dumpYaml({ title, date: new Date(date), slug, author }), - `---`, - ].join(`\n`); - - const escapedMarkdown = markdownContent.replaceAll(/\\n/g, '\n'); - - const contentWithFrontmatter = [worryinglyManualFrontMatter, escapedMarkdown].join(`\n`); - - const resolvedFileName = resolve(thisDirectory, `../../../content/blog/${slug}.md`); - - console.log({ resolvedFileName }); - console.log(`\n${contentWithFrontmatter}\n`); - - await controller.createBlogPost(resolvedFileName, contentWithFrontmatter); - - redirect(307, `/blog/${slug}`); - }, -} satisfies Actions; +export const prerender = true; diff --git a/src/routes/blog/[slug]/+page.server.ts b/src/routes/blog/[slug]/+page.server.ts deleted file mode 100644 index 189f71e..0000000 --- a/src/routes/blog/[slug]/+page.server.ts +++ /dev/null @@ -1 +0,0 @@ -export const prerender = true; diff --git a/src/routes/blog/new/+page.server.ts b/src/routes/blog/new/+page.server.ts new file mode 100644 index 0000000..411d711 --- /dev/null +++ b/src/routes/blog/new/+page.server.ts @@ -0,0 +1,65 @@ +import { BlogController } from '$lib/blog/BlogController.js'; +import type { Actions } from '@sveltejs/kit'; +import { error, redirect } from '@sveltejs/kit'; +import { dump as dumpYaml } from 'js-yaml'; +import { resolve } from 'path'; + +export const prerender = false; +const thisDirectory = import.meta.url + .replace('file://', '') + .split('/') + .filter((part) => part !== '+server.ts') + .join('/'); + +export const actions = { + default: async ({ getClientAddress, request }) => { + console.log(`Received request to create new blog post.`); + const address = await getClientAddress(); + let markdownContent: string; + let title: string; + let date: string; + let slug: string; + let author: string; + + try { + const requestBody = await request.formData(); + markdownContent = requestBody.get('content') as string; + title = requestBody.get('title') as string; + date = requestBody.get('date') as string; + slug = requestBody.get('slug') as string; + author = requestBody.get('author') as string; + } catch (e: any) { + console.log(`Caught error destructuring request body`); + console.error(e); + error(400, 'Error in request body.'); + } + + if ([markdownContent, title, date, slug, author].includes(undefined)) { + error(400, `Missing parameters.`); + } else if (!['127.0.0.1', '::1'].includes(address)) { + console.log(address); + error(403, `Forbidden.`); + } + + const controller = await BlogController.singleton(); + + const worryinglyManualFrontMatter = [ + `---`, + dumpYaml({ title, date: new Date(date), slug, author }), + `---`, + ].join(`\n`); + + const escapedMarkdown = markdownContent.replaceAll(/\\n/g, '\n'); + + const contentWithFrontmatter = [worryinglyManualFrontMatter, escapedMarkdown].join(`\n`); + + const resolvedFileName = resolve(thisDirectory, `../../../content/blog/${slug}.md`); + + console.log({ resolvedFileName }); + console.log(`\n${contentWithFrontmatter}\n`); + + await controller.createBlogPost(resolvedFileName, contentWithFrontmatter); + + redirect(307, `/blog/${slug}`); + }, +} satisfies Actions; diff --git a/src/routes/blog/new/+page.svelte b/src/routes/blog/new/+page.svelte index 22965ee..76468a5 100644 --- a/src/routes/blog/new/+page.svelte +++ b/src/routes/blog/new/+page.svelte @@ -26,7 +26,7 @@
Back to Blog

New Blog Post

-
+