@studiocms/blog 0.1.0-beta.6 → 0.1.0-beta.8
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/LICENSE +1 -1
- package/dist/blog.d.js +0 -0
- package/dist/blog.d.ts +8 -0
- package/dist/components/BaseHead.astro +73 -0
- package/dist/components/Footer.astro +26 -0
- package/dist/components/Navigation.astro +83 -0
- package/dist/components/PageList.astro +46 -0
- package/{src → dist}/components/PostHeader.astro +1 -23
- package/dist/components/navigation.css +155 -0
- package/dist/components.d.js +0 -0
- package/dist/components.d.ts +13 -0
- package/dist/index.d.ts +35 -0
- package/dist/index.js +81 -0
- package/dist/layouts/Layout.astro +60 -0
- package/dist/lib.d.js +0 -0
- package/dist/lib.d.ts +82 -0
- package/dist/renderer.d.js +0 -0
- package/dist/renderer.d.ts +9 -0
- package/dist/routes/[...slug].astro +36 -0
- package/dist/routes/blog/[...slug].astro +44 -0
- package/dist/routes/blog/index.astro +32 -0
- package/dist/routes/rss.xml.d.ts +2 -0
- package/dist/routes/rss.xml.js +34 -0
- package/dist/routes/rss.xml.ts +44 -0
- package/dist/routes/sitemap-md.xml.d.ts +2 -0
- package/dist/routes/sitemap-md.xml.js +22 -0
- package/dist/routes/sitemap-md.xml.ts +28 -0
- package/dist/routes/sitemap-posts.xml.d.ts +2 -0
- package/dist/routes/sitemap-posts.xml.js +30 -0
- package/dist/routes/sitemap-posts.xml.ts +38 -0
- package/dist/sdk.d.js +0 -0
- package/dist/sdk.d.ts +56 -0
- package/dist/styles/base.css +245 -0
- package/dist/types.d.ts +34 -0
- package/dist/types.js +0 -0
- package/package.json +23 -20
- package/index.ts +0 -65
- package/schema.ts +0 -35
- package/src/components/PageList.astro +0 -131
- package/src/layouts/BlogLayout.astro +0 -39
- package/src/pages/blog/[...slug].astro +0 -40
- package/src/pages/blog/index.astro +0 -38
- package/src/pages/rss.xml.ts +0 -60
- /package/{src → dist}/components/RSSIcon.astro +0 -0
package/dist/lib.d.ts
ADDED
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
declare module 'studiocms:lib' {
|
|
2
|
+
export const HeadConfigSchema: typeof import('studiocms/lib/head.js').HeadConfigSchema;
|
|
3
|
+
export const createHead: typeof import('studiocms/lib/head.js').createHead;
|
|
4
|
+
export const headDefaults: typeof import('studiocms/lib/headDefaults.js').headDefaults;
|
|
5
|
+
export const stringify: typeof import('studiocms/lib/jsonUtils.js').stringify;
|
|
6
|
+
export const stringifyMap: typeof import('studiocms/lib/jsonUtils.js').stringifyMap;
|
|
7
|
+
export const pathWithBase: typeof import('studiocms/lib/pathGenerators.js').pathWithBase;
|
|
8
|
+
export const fileWithBase: typeof import('studiocms/lib/pathGenerators.js').fileWithBase;
|
|
9
|
+
export const ensureLeadingSlash: typeof import(
|
|
10
|
+
'studiocms/lib/pathGenerators.js'
|
|
11
|
+
).ensureLeadingSlash;
|
|
12
|
+
export const ensureTrailingSlash: typeof import(
|
|
13
|
+
'studiocms/lib/pathGenerators.js'
|
|
14
|
+
).ensureTrailingSlash;
|
|
15
|
+
export const stripLeadingSlash: typeof import(
|
|
16
|
+
'studiocms/lib/pathGenerators.js'
|
|
17
|
+
).stripLeadingSlash;
|
|
18
|
+
export const stripTrailingSlash: typeof import(
|
|
19
|
+
'studiocms/lib/pathGenerators.js'
|
|
20
|
+
).stripTrailingSlash;
|
|
21
|
+
export const stripHtmlExtension: typeof import(
|
|
22
|
+
'studiocms/lib/pathGenerators.js'
|
|
23
|
+
).stripHtmlExtension;
|
|
24
|
+
export const ensureHtmlExtension: typeof import(
|
|
25
|
+
'studiocms/lib/pathGenerators.js'
|
|
26
|
+
).ensureHtmlExtension;
|
|
27
|
+
export const removeLeadingTrailingSlashes: typeof import(
|
|
28
|
+
'studiocms/lib/removeLeadingTrailingSlashes.js'
|
|
29
|
+
).removeLeadingTrailingSlashes;
|
|
30
|
+
export const getSluggedRoute: typeof import('studiocms/lib/routeMap.js').getSluggedRoute;
|
|
31
|
+
export const getEditRoute: typeof import('studiocms/lib/routeMap.js').getEditRoute;
|
|
32
|
+
export const getDeleteRoute: typeof import('studiocms/lib/routeMap.js').getDeleteRoute;
|
|
33
|
+
export const makeNonDashboardRoute: typeof import(
|
|
34
|
+
'studiocms/lib/routeMap.js'
|
|
35
|
+
).makeNonDashboardRoute;
|
|
36
|
+
export const makeDashboardRoute: typeof import('studiocms/lib/routeMap.js').makeDashboardRoute;
|
|
37
|
+
export const StudioCMSRoutes: typeof import('studiocms/lib/routeMap.js').StudioCMSRoutes;
|
|
38
|
+
export const sideBarLinkMap: typeof import('studiocms/lib/routeMap.js').sideBarLinkMap;
|
|
39
|
+
export const urlGenFactory: typeof import('studiocms/lib/urlGen.js').default;
|
|
40
|
+
|
|
41
|
+
export type HeadConfig = import('studiocms/lib/head.js').HeadConfig;
|
|
42
|
+
export type HeadUserConfig = import('studiocms/lib/head.js').HeadUserConfig;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
declare module 'studiocms:config' {
|
|
46
|
+
export const config: import('studiocms/schemas').StudioCMSConfig;
|
|
47
|
+
export default config;
|
|
48
|
+
|
|
49
|
+
export const dashboardConfig: import('studiocms/schemas').StudioCMSConfig['dashboardConfig'];
|
|
50
|
+
export const AuthConfig: import(
|
|
51
|
+
'studiocms/schemas'
|
|
52
|
+
).StudioCMSConfig['dashboardConfig']['AuthConfig'];
|
|
53
|
+
export const developerConfig: import(
|
|
54
|
+
'studiocms/schemas'
|
|
55
|
+
).StudioCMSConfig['dashboardConfig']['developerConfig'];
|
|
56
|
+
export const defaultFrontEndConfig: import(
|
|
57
|
+
'studiocms/schemas'
|
|
58
|
+
).StudioCMSConfig['defaultFrontEndConfig'];
|
|
59
|
+
export const sdk: import('studiocms/schemas').StudioCMSConfig['sdk'];
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
declare module 'studiocms:plugins' {
|
|
63
|
+
const mod: import('studiocms/plugins').SafePluginListType;
|
|
64
|
+
export default mod;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
declare module 'studiocms:plugin-helpers' {
|
|
68
|
+
export type SettingsField = import('studiocms/plugins').SettingsField;
|
|
69
|
+
export type SafePluginListType = import('studiocms/plugins').SafePluginListType;
|
|
70
|
+
export type StudioCMSPlugin = import('studiocms/plugins').StudioCMSPlugin;
|
|
71
|
+
export type StudioCMSPluginOptions = import('studiocms/plugins').StudioCMSPluginOptions;
|
|
72
|
+
export type AvailableDashboardPages = import('studiocms/plugins').AvailableDashboardPages;
|
|
73
|
+
export type FinalDashboardPage = import('studiocms/plugins').FinalDashboardPage;
|
|
74
|
+
export type DashboardPage = import('studiocms/plugins').DashboardPage;
|
|
75
|
+
|
|
76
|
+
export const getPluginDashboardPages: typeof import(
|
|
77
|
+
'studiocms/lib/plugins/index.js'
|
|
78
|
+
).getPluginDashboardPages;
|
|
79
|
+
export const frontendNavigation: typeof import(
|
|
80
|
+
'studiocms/lib/plugins/index.js'
|
|
81
|
+
).frontendNavigation;
|
|
82
|
+
}
|
|
File without changes
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
declare module 'studiocms:renderer' {
|
|
2
|
+
export const StudioCMSRenderer: typeof import('studiocms/Renderer.astro').default;
|
|
3
|
+
}
|
|
4
|
+
|
|
5
|
+
declare module 'studiocms:renderer/current' {
|
|
6
|
+
const deModule: typeof import('studiocms/contentRenderer.js').default;
|
|
7
|
+
export default deModule;
|
|
8
|
+
export const contentRenderer: typeof import('studiocms/contentRenderer.js').contentRenderer;
|
|
9
|
+
}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
---
|
|
2
|
+
import config from 'studiocms:config';
|
|
3
|
+
import { StudioCMSRenderer } from 'studiocms:renderer';
|
|
4
|
+
import studioCMS_SDK from 'studiocms:sdk';
|
|
5
|
+
import studioCMS_SDK_Cache from 'studiocms:sdk/cache';
|
|
6
|
+
import Layout from '../layouts/Layout.astro';
|
|
7
|
+
|
|
8
|
+
// This is here to refresh the cache when needed
|
|
9
|
+
const allPages = await studioCMS_SDK_Cache.GET.pages();
|
|
10
|
+
|
|
11
|
+
if (config.dbStartPage) {
|
|
12
|
+
return Astro.redirect('/start');
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
let { slug } = Astro.params;
|
|
16
|
+
|
|
17
|
+
if (!slug) {
|
|
18
|
+
slug = 'index';
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
const page = await studioCMS_SDK.GET.databaseEntry.pages.bySlug(slug);
|
|
22
|
+
|
|
23
|
+
if (!page) {
|
|
24
|
+
return new Response(null, { status: 404 });
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
const { title, description, heroImage, defaultContent } = page;
|
|
28
|
+
|
|
29
|
+
const content = defaultContent?.content || '';
|
|
30
|
+
---
|
|
31
|
+
|
|
32
|
+
<Layout title={title} description={description} heroImage={heroImage}>
|
|
33
|
+
<main>
|
|
34
|
+
<StudioCMSRenderer content={content} />
|
|
35
|
+
</main>
|
|
36
|
+
</Layout>
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
---
|
|
2
|
+
import { StudioCMSRenderer } from 'studiocms:renderer';
|
|
3
|
+
import studioCMS_SDK from 'studiocms:sdk';
|
|
4
|
+
import studioCMS_SDK_Cache from 'studiocms:sdk/cache';
|
|
5
|
+
import PostHeader from '../../components/PostHeader.astro';
|
|
6
|
+
import Layout from '../../layouts/Layout.astro';
|
|
7
|
+
|
|
8
|
+
// This is here to refresh the cache when needed
|
|
9
|
+
const allPages = await studioCMS_SDK_Cache.GET.pages();
|
|
10
|
+
|
|
11
|
+
// Get the slug from the URL
|
|
12
|
+
const { slug } = Astro.params;
|
|
13
|
+
|
|
14
|
+
// If no slug is provided, redirect to 404
|
|
15
|
+
if (!slug) {
|
|
16
|
+
return new Response(null, { status: 404 });
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
// Fetch the blog post content
|
|
20
|
+
|
|
21
|
+
const post = await studioCMS_SDK.GET.databaseEntry.pages.bySlug(slug);
|
|
22
|
+
|
|
23
|
+
// If no content is found, redirect to 404
|
|
24
|
+
if (!post) {
|
|
25
|
+
return new Response(null, { status: 404 });
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
const { title, description, heroImage, publishedAt, updatedAt, defaultContent } = post;
|
|
29
|
+
|
|
30
|
+
// If no content is found, redirect to 404
|
|
31
|
+
if (!defaultContent) {
|
|
32
|
+
return new Response(null, { status: 404 });
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
const content = defaultContent.content || '';
|
|
36
|
+
---
|
|
37
|
+
<Layout {title} {description} {heroImage}>
|
|
38
|
+
<main>
|
|
39
|
+
<article>
|
|
40
|
+
<PostHeader {title} {description} {heroImage} {publishedAt} {updatedAt} />
|
|
41
|
+
<StudioCMSRenderer {content} />
|
|
42
|
+
</article>
|
|
43
|
+
</main>
|
|
44
|
+
</Layout>
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
---
|
|
2
|
+
import blogConfig from 'studiocms:blog/config';
|
|
3
|
+
import studioCMS_SDK from 'studiocms:sdk/cache';
|
|
4
|
+
import PageList from '../../components/PageList.astro';
|
|
5
|
+
import RSSIcon from '../../components/RSSIcon.astro';
|
|
6
|
+
import Layout from '../../layouts/Layout.astro';
|
|
7
|
+
|
|
8
|
+
const config = (await studioCMS_SDK.GET.siteConfig()).data || {
|
|
9
|
+
description: 'StudioCMS - Database Unavailable',
|
|
10
|
+
};
|
|
11
|
+
|
|
12
|
+
// Set the title and description
|
|
13
|
+
const { description: configDescription } = config;
|
|
14
|
+
|
|
15
|
+
const title: string = blogConfig.title;
|
|
16
|
+
const description: string = configDescription || 'Blog Index';
|
|
17
|
+
const showRSSFeed: boolean = blogConfig.enableRSS;
|
|
18
|
+
|
|
19
|
+
// Get all pages
|
|
20
|
+
const blogPageList = (await studioCMS_SDK.GET.pages())
|
|
21
|
+
.map(({ data }) => data)
|
|
22
|
+
.filter(({ package: pkg }) => pkg === '@studiocms/blog');
|
|
23
|
+
|
|
24
|
+
// Get the RSS feed URL
|
|
25
|
+
const rssPath = '/rss.xml';
|
|
26
|
+
---
|
|
27
|
+
<Layout {title} description={description} >
|
|
28
|
+
<main>
|
|
29
|
+
<h1>{title} {showRSSFeed && rssPath && <a href={rssPath}><RSSIcon /></a>}</h1>
|
|
30
|
+
<PageList {blogPageList} />
|
|
31
|
+
</main>
|
|
32
|
+
</Layout>
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import blogConfig from "studiocms:blog/config";
|
|
2
|
+
import { pathWithBase } from "studiocms:lib";
|
|
3
|
+
import studioCMS_SDK from "studiocms:sdk/cache";
|
|
4
|
+
import rss, {} from "@astrojs/rss";
|
|
5
|
+
const blogRouteFullPath = `${blogConfig.route}/[...slug]`;
|
|
6
|
+
function getBlogRoute(slug) {
|
|
7
|
+
if (blogRouteFullPath) {
|
|
8
|
+
return blogRouteFullPath.replace("[...slug]", slug);
|
|
9
|
+
}
|
|
10
|
+
return "#";
|
|
11
|
+
}
|
|
12
|
+
async function GET(context) {
|
|
13
|
+
const config = (await studioCMS_SDK.GET.siteConfig()).data || {
|
|
14
|
+
title: "StudioCMS - Database Unavailable",
|
|
15
|
+
description: "StudioCMS - Database Unavailable"
|
|
16
|
+
};
|
|
17
|
+
const title = `${config?.title} | ${blogConfig.title}`;
|
|
18
|
+
const description = config?.description ?? "Blog";
|
|
19
|
+
const site = context.site ?? "https://example.com";
|
|
20
|
+
const orderedPosts = (await studioCMS_SDK.GET.pages()).map(({ data }) => data).filter(({ package: pkg }) => pkg === "@studiocms/blog");
|
|
21
|
+
const items = orderedPosts.map((post) => {
|
|
22
|
+
return {
|
|
23
|
+
title: post.title,
|
|
24
|
+
description: post.description,
|
|
25
|
+
pubDate: post.publishedAt,
|
|
26
|
+
link: pathWithBase(getBlogRoute(post.slug)),
|
|
27
|
+
categories: post.categories.map(({ name }) => name)
|
|
28
|
+
};
|
|
29
|
+
});
|
|
30
|
+
return rss({ title, description, site, items });
|
|
31
|
+
}
|
|
32
|
+
export {
|
|
33
|
+
GET
|
|
34
|
+
};
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import blogConfig from 'studiocms:blog/config';
|
|
2
|
+
import { pathWithBase } from 'studiocms:lib';
|
|
3
|
+
import studioCMS_SDK from 'studiocms:sdk/cache';
|
|
4
|
+
import rss, { type RSSFeedItem } from '@astrojs/rss';
|
|
5
|
+
import type { APIContext } from 'astro';
|
|
6
|
+
|
|
7
|
+
const blogRouteFullPath = `${blogConfig.route}/[...slug]`;
|
|
8
|
+
|
|
9
|
+
function getBlogRoute(slug: string) {
|
|
10
|
+
if (blogRouteFullPath) {
|
|
11
|
+
return blogRouteFullPath.replace('[...slug]', slug);
|
|
12
|
+
}
|
|
13
|
+
return '#';
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
export async function GET(context: APIContext) {
|
|
17
|
+
// Get Config from Studio Database
|
|
18
|
+
const config = (await studioCMS_SDK.GET.siteConfig()).data || {
|
|
19
|
+
title: 'StudioCMS - Database Unavailable',
|
|
20
|
+
description: 'StudioCMS - Database Unavailable',
|
|
21
|
+
};
|
|
22
|
+
|
|
23
|
+
// Set Title, Description, and Site
|
|
24
|
+
const title = `${config?.title} | ${blogConfig.title}`;
|
|
25
|
+
const description = config?.description ?? 'Blog';
|
|
26
|
+
const site = context.site ?? 'https://example.com';
|
|
27
|
+
|
|
28
|
+
// Get all Posts from Studio Database
|
|
29
|
+
const orderedPosts = (await studioCMS_SDK.GET.pages())
|
|
30
|
+
.map(({ data }) => data)
|
|
31
|
+
.filter(({ package: pkg }) => pkg === '@studiocms/blog');
|
|
32
|
+
|
|
33
|
+
const items: RSSFeedItem[] = orderedPosts.map((post) => {
|
|
34
|
+
return {
|
|
35
|
+
title: post.title,
|
|
36
|
+
description: post.description,
|
|
37
|
+
pubDate: post.publishedAt,
|
|
38
|
+
link: pathWithBase(getBlogRoute(post.slug)),
|
|
39
|
+
categories: post.categories.map(({ name }) => name),
|
|
40
|
+
};
|
|
41
|
+
});
|
|
42
|
+
|
|
43
|
+
return rss({ title, description, site, items });
|
|
44
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { pathWithBase } from "studiocms:lib";
|
|
2
|
+
import studioCMS_SDK from "studiocms:sdk/cache";
|
|
3
|
+
const template = (entries) => `<?xml version="1.0" encoding="UTF-8"?>
|
|
4
|
+
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
|
|
5
|
+
${entries.map((entry) => `<url><loc>${entry.location}</loc></url>`).join("")}
|
|
6
|
+
</urlset>`;
|
|
7
|
+
const GET = async (context) => {
|
|
8
|
+
const orderedPosts = (await studioCMS_SDK.GET.pages()).map(({ data }) => data).filter(({ package: pkg }) => pkg === "studiocms/markdown");
|
|
9
|
+
const sitemapLinks = orderedPosts.map((post) => ({
|
|
10
|
+
location: new URL(pathWithBase(post.slug), context.url).toString()
|
|
11
|
+
}));
|
|
12
|
+
const sitemap = template(sitemapLinks);
|
|
13
|
+
return new Response(sitemap, {
|
|
14
|
+
status: 200,
|
|
15
|
+
headers: {
|
|
16
|
+
"Content-Type": "application/xml"
|
|
17
|
+
}
|
|
18
|
+
});
|
|
19
|
+
};
|
|
20
|
+
export {
|
|
21
|
+
GET
|
|
22
|
+
};
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { pathWithBase } from 'studiocms:lib';
|
|
2
|
+
import studioCMS_SDK from 'studiocms:sdk/cache';
|
|
3
|
+
import type { APIContext, APIRoute } from 'astro';
|
|
4
|
+
|
|
5
|
+
const template = (entries: { location: string }[]) => `<?xml version="1.0" encoding="UTF-8"?>
|
|
6
|
+
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
|
|
7
|
+
${entries.map((entry) => `<url><loc>${entry.location}</loc></url>`).join('')}
|
|
8
|
+
</urlset>`;
|
|
9
|
+
|
|
10
|
+
export const GET: APIRoute = async (context: APIContext) => {
|
|
11
|
+
// Get all Posts from Studio Database
|
|
12
|
+
const orderedPosts = (await studioCMS_SDK.GET.pages())
|
|
13
|
+
.map(({ data }) => data)
|
|
14
|
+
.filter(({ package: pkg }) => pkg === 'studiocms/markdown');
|
|
15
|
+
|
|
16
|
+
const sitemapLinks = orderedPosts.map((post) => ({
|
|
17
|
+
location: new URL(pathWithBase(post.slug), context.url).toString(),
|
|
18
|
+
}));
|
|
19
|
+
|
|
20
|
+
const sitemap = template(sitemapLinks);
|
|
21
|
+
|
|
22
|
+
return new Response(sitemap, {
|
|
23
|
+
status: 200,
|
|
24
|
+
headers: {
|
|
25
|
+
'Content-Type': 'application/xml',
|
|
26
|
+
},
|
|
27
|
+
});
|
|
28
|
+
};
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import blogConfig from "studiocms:blog/config";
|
|
2
|
+
import { pathWithBase } from "studiocms:lib";
|
|
3
|
+
import studioCMS_SDK from "studiocms:sdk/cache";
|
|
4
|
+
const blogRouteFullPath = `${blogConfig.route}/[...slug]`;
|
|
5
|
+
function getBlogRoute(slug) {
|
|
6
|
+
if (blogRouteFullPath) {
|
|
7
|
+
return blogRouteFullPath.replace("[...slug]", slug);
|
|
8
|
+
}
|
|
9
|
+
return "#";
|
|
10
|
+
}
|
|
11
|
+
const template = (entries) => `<?xml version="1.0" encoding="UTF-8"?>
|
|
12
|
+
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
|
|
13
|
+
${entries.map((entry) => `<url><loc>${entry.location}</loc></url>`).join("")}
|
|
14
|
+
</urlset>`;
|
|
15
|
+
const GET = async (context) => {
|
|
16
|
+
const orderedPosts = (await studioCMS_SDK.GET.pages()).map(({ data }) => data).filter(({ package: pkg }) => pkg === "@studiocms/blog");
|
|
17
|
+
const sitemapLinks = orderedPosts.map((post) => ({
|
|
18
|
+
location: new URL(pathWithBase(getBlogRoute(post.slug)), context.url).toString()
|
|
19
|
+
}));
|
|
20
|
+
const sitemap = template(sitemapLinks);
|
|
21
|
+
return new Response(sitemap, {
|
|
22
|
+
status: 200,
|
|
23
|
+
headers: {
|
|
24
|
+
"Content-Type": "application/xml"
|
|
25
|
+
}
|
|
26
|
+
});
|
|
27
|
+
};
|
|
28
|
+
export {
|
|
29
|
+
GET
|
|
30
|
+
};
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import blogConfig from 'studiocms:blog/config';
|
|
2
|
+
import { pathWithBase } from 'studiocms:lib';
|
|
3
|
+
import studioCMS_SDK from 'studiocms:sdk/cache';
|
|
4
|
+
import type { APIContext, APIRoute } from 'astro';
|
|
5
|
+
|
|
6
|
+
const blogRouteFullPath = `${blogConfig.route}/[...slug]`;
|
|
7
|
+
|
|
8
|
+
function getBlogRoute(slug: string) {
|
|
9
|
+
if (blogRouteFullPath) {
|
|
10
|
+
return blogRouteFullPath.replace('[...slug]', slug);
|
|
11
|
+
}
|
|
12
|
+
return '#';
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
const template = (entries: { location: string }[]) => `<?xml version="1.0" encoding="UTF-8"?>
|
|
16
|
+
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
|
|
17
|
+
${entries.map((entry) => `<url><loc>${entry.location}</loc></url>`).join('')}
|
|
18
|
+
</urlset>`;
|
|
19
|
+
|
|
20
|
+
export const GET: APIRoute = async (context: APIContext) => {
|
|
21
|
+
// Get all Posts from Studio Database
|
|
22
|
+
const orderedPosts = (await studioCMS_SDK.GET.pages())
|
|
23
|
+
.map(({ data }) => data)
|
|
24
|
+
.filter(({ package: pkg }) => pkg === '@studiocms/blog');
|
|
25
|
+
|
|
26
|
+
const sitemapLinks = orderedPosts.map((post) => ({
|
|
27
|
+
location: new URL(pathWithBase(getBlogRoute(post.slug)), context.url).toString(),
|
|
28
|
+
}));
|
|
29
|
+
|
|
30
|
+
const sitemap = template(sitemapLinks);
|
|
31
|
+
|
|
32
|
+
return new Response(sitemap, {
|
|
33
|
+
status: 200,
|
|
34
|
+
headers: {
|
|
35
|
+
'Content-Type': 'application/xml',
|
|
36
|
+
},
|
|
37
|
+
});
|
|
38
|
+
};
|
package/dist/sdk.d.js
ADDED
|
File without changes
|
package/dist/sdk.d.ts
ADDED
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
declare module 'studiocms:sdk' {
|
|
2
|
+
const mod: typeof import('studiocms/sdk/base').studioCMS_SDK;
|
|
3
|
+
export default mod;
|
|
4
|
+
}
|
|
5
|
+
|
|
6
|
+
declare module 'studiocms:sdk/types' {
|
|
7
|
+
export type AvailableLists = import('studiocms/sdk/types').AvailableLists;
|
|
8
|
+
export type CombinedRank = import('studiocms/sdk/types').CombinedRank;
|
|
9
|
+
export type DatabaseTables = import('studiocms/sdk/types').DatabaseTables;
|
|
10
|
+
export type PageContentReturnId = import('studiocms/sdk/types').PageContentReturnId;
|
|
11
|
+
export type PageDataCategoriesInsertResponse = import(
|
|
12
|
+
'studiocms/sdk/types'
|
|
13
|
+
).PageDataCategoriesInsertResponse;
|
|
14
|
+
export type PageDataReturnId = import('studiocms/sdk/types').PageDataReturnId;
|
|
15
|
+
export type PageDataStripped = import('studiocms/sdk/types').PageDataStripped;
|
|
16
|
+
export type PageDataTagsInsertResponse = import('studiocms/sdk/types').PageDataTagsInsertResponse;
|
|
17
|
+
export type SingleRank = import('studiocms/sdk/types').SingleRank;
|
|
18
|
+
export type SiteConfig = import('studiocms/sdk/types').SiteConfig;
|
|
19
|
+
|
|
20
|
+
export type tsDiffTrackingInsert = import('studiocms/sdk/types').tsDiffTrackingInsert;
|
|
21
|
+
export type tsDiffTrackingSelect = import('studiocms/sdk/types').tsDiffTrackingSelect;
|
|
22
|
+
export type CombinedInsertContent = import('studiocms/sdk/types').CombinedInsertContent;
|
|
23
|
+
export type tsOAuthAccountsSelect = import('studiocms/sdk/types').tsOAuthAccountsSelect;
|
|
24
|
+
export type tsPageContentInsert = import('studiocms/sdk/types').tsPageContentInsert;
|
|
25
|
+
export type tsPageContentSelect = import('studiocms/sdk/types').tsPageContentSelect;
|
|
26
|
+
export type tsPageDataCategoriesInsert = import('studiocms/sdk/types').tsPageDataCategoriesInsert;
|
|
27
|
+
export type tsPageDataCategoriesSelect = import('studiocms/sdk/types').tsPageDataCategoriesSelect;
|
|
28
|
+
export type tsPageDataInsert = import('studiocms/sdk/types').tsPageDataInsert;
|
|
29
|
+
export type tsPageDataSelect = import('studiocms/sdk/types').tsPageDataSelect;
|
|
30
|
+
export type tsPageDataTagsInsert = import('studiocms/sdk/types').tsPageDataTagsInsert;
|
|
31
|
+
export type tsPageDataTagsSelect = import('studiocms/sdk/types').tsPageDataTagsSelect;
|
|
32
|
+
export type tsSiteConfigInsert = import('studiocms/sdk/types').tsSiteConfigInsert;
|
|
33
|
+
export type tsSiteConfigSelect = import('studiocms/sdk/types').tsSiteConfigSelect;
|
|
34
|
+
export type tsUsersInsert = import('studiocms/sdk/types').tsUsersInsert;
|
|
35
|
+
export type tsUsersSelect = import('studiocms/sdk/types').tsUsersSelect;
|
|
36
|
+
export type tsUsersUpdate = import('studiocms/sdk/types').tsUsersUpdate;
|
|
37
|
+
export type tsPermissionsInsert = import('studiocms/sdk/types').tsPermissionsInsert;
|
|
38
|
+
export type tsPermissionsSelect = import('studiocms/sdk/types').tsPermissionsSelect;
|
|
39
|
+
export type tsSessionTableInsert = import('studiocms/sdk/types').tsSessionTableInsert;
|
|
40
|
+
export type tsSessionTableSelect = import('studiocms/sdk/types').tsSessionTableSelect;
|
|
41
|
+
|
|
42
|
+
export type addDatabaseEntryInsertPage = import('studiocms/sdk/types').addDatabaseEntryInsertPage;
|
|
43
|
+
export type CombinedUserData = import('studiocms/sdk/types').CombinedUserData;
|
|
44
|
+
export type CombinedPageData = import('studiocms/sdk/types').CombinedPageData;
|
|
45
|
+
export type DeletionResponse = import('studiocms/sdk/types').DeletionResponse;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
declare module 'studiocms:sdk/cache' {
|
|
49
|
+
const studioCMS_SDK_Cache: import('studiocms/sdk/cache').STUDIOCMS_SDK_CACHE;
|
|
50
|
+
export default studioCMS_SDK_Cache;
|
|
51
|
+
|
|
52
|
+
export type STUDIOCMS_SDK_CACHE = import('studiocms/sdk/cache').STUDIOCMS_SDK_CACHE;
|
|
53
|
+
export type PageDataCacheObject = import('studiocms/sdk/cache').PageDataCacheObject;
|
|
54
|
+
export type SiteConfigCacheObject = import('studiocms/sdk/cache').SiteConfigCacheObject;
|
|
55
|
+
export type VersionCacheObject = import('studiocms/sdk/cache').VersionCacheObject;
|
|
56
|
+
}
|