summaryrefslogtreecommitdiff
path: root/apps/web/src/lib/blog-query.ts
diff options
context:
space:
mode:
authorMaze Winther <mazewinther@gmail.com>2025-07-25 15:34:53 +0200
committerMaze Winther <mazewinther@gmail.com>2025-07-25 15:34:53 +0200
commitd667c1095c58490bfdabbf50e044384e7fee943d (patch)
treed1ee64ed535843a83ff14211a92708dcbadf765e /apps/web/src/lib/blog-query.ts
parent9a18a7a4e961375f80417d50a3c326c63e74dfe8 (diff)
parent65c3f9f7f78f787262a88c75b96a118ca5bee15c (diff)
downloadopencut-d667c1095c58490bfdabbf50e044384e7fee943d.tar.gz
Merge branch 'staging' of https://github.com/mazeincoding/AppCut into staging
Diffstat (limited to 'apps/web/src/lib/blog-query.ts')
-rw-r--r--apps/web/src/lib/blog-query.ts87
1 files changed, 48 insertions, 39 deletions
diff --git a/apps/web/src/lib/blog-query.ts b/apps/web/src/lib/blog-query.ts
index 430f58bf..5cba0cf3 100644
--- a/apps/web/src/lib/blog-query.ts
+++ b/apps/web/src/lib/blog-query.ts
@@ -1,4 +1,10 @@
-import type { MarbleAuthorList, MarbleCategoryList, MarblePost, MarblePostList, MarbleTagList } from '@/types/post';
+import type {
+ MarbleAuthorList,
+ MarbleCategoryList,
+ MarblePost,
+ MarblePostList,
+ MarbleTagList,
+} from "@/types/post";
import { unified } from "unified";
import rehypeParse from "rehype-parse";
import rehypeStringify from "rehype-stringify";
@@ -6,50 +12,53 @@ import rehypeSlug from "rehype-slug";
import rehypeAutolinkHeadings from "rehype-autolink-headings";
import rehypeSanitize from "rehype-sanitize";
-const url = process.env.NEXT_PUBLIC_MARBLE_API_URL ?? "https://api.marblecms.com";
+const url =
+ process.env.NEXT_PUBLIC_MARBLE_API_URL ?? "https://api.marblecms.com";
const key = process.env.MARBLE_WORKSPACE_KEY ?? "cmd4iw9mm0006l804kwqv0k46";
async function fetchFromMarble<T>(endpoint: string): Promise<T> {
- try {
- const response = await fetch(`${url}/${key}/${endpoint}`);
- if (!response.ok) {
- throw new Error(`Failed to fetch ${endpoint}: ${response.status} ${response.statusText}`);
- }
- return await response.json() as T;
- } catch (error) {
- console.error(`Error fetching ${endpoint}:`, error);
- throw error;
+ try {
+ const response = await fetch(`${url}/${key}/${endpoint}`);
+ if (!response.ok) {
+ throw new Error(
+ `Failed to fetch ${endpoint}: ${response.status} ${response.statusText}`
+ );
}
+ return (await response.json()) as T;
+ } catch (error) {
+ console.error(`Error fetching ${endpoint}:`, error);
+ throw error;
}
-
- export async function getPosts() {
- return fetchFromMarble<MarblePostList>('posts');
- }
-
- export async function getTags() {
- return fetchFromMarble<MarbleTagList>('tags');
- }
-
- export async function getSinglePost(slug: string) {
- return fetchFromMarble<MarblePost>(`posts/${slug}`);
- }
-
- export async function getCategories() {
- return fetchFromMarble<MarbleCategoryList>('categories');
- }
-
- export async function getAuthors() {
- return fetchFromMarble<MarbleAuthorList>('authors');
- }
+}
+
+export async function getPosts() {
+ return fetchFromMarble<MarblePostList>("posts");
+}
+
+export async function getTags() {
+ return fetchFromMarble<MarbleTagList>("tags");
+}
+
+export async function getSinglePost(slug: string) {
+ return fetchFromMarble<MarblePost>(`posts/${slug}`);
+}
+
+export async function getCategories() {
+ return fetchFromMarble<MarbleCategoryList>("categories");
+}
+
+export async function getAuthors() {
+ return fetchFromMarble<MarbleAuthorList>("authors");
+}
export async function processHtmlContent(html: string): Promise<string> {
- const processor = unified()
- .use(rehypeSanitize)
- .use(rehypeParse, { fragment: true })
- .use(rehypeSlug)
- .use(rehypeAutolinkHeadings, { behavior: "append" })
- .use(rehypeStringify);
+ const processor = unified()
+ .use(rehypeSanitize)
+ .use(rehypeParse, { fragment: true })
+ .use(rehypeSlug)
+ .use(rehypeAutolinkHeadings, { behavior: "append" })
+ .use(rehypeStringify);
- const file = await processor.process(html);
- return String(file);
+ const file = await processor.process(html);
+ return String(file);
}