studiocms
Version:
Astro Native CMS for AstroDB. Built from the ground up by the Astro community.
270 lines (269 loc) • 9.37 kB
JavaScript
import { column, defineDb, defineTable, NOW } from "astro:db";
import { asDrizzleTable } from "@astrojs/db/utils";
const StudioCMSUsers = defineTable({
columns: {
id: column.text({ primaryKey: true }),
url: column.text({ optional: true }),
name: column.text(),
email: column.text({ unique: true, optional: true }),
avatar: column.text({
optional: true,
default: "https://seccdn.libravatar.org/static/img/mm/80.png"
}),
username: column.text(),
password: column.text({ optional: true }),
updatedAt: column.date({ default: NOW, optional: true }),
createdAt: column.date({ default: NOW, optional: true }),
emailVerified: column.boolean({ default: false }),
notifications: column.text({ optional: true })
}
});
const StudioCMSAPIKeys = defineTable({
columns: {
id: column.text({ primaryKey: true }),
userId: column.text({ references: () => StudioCMSUsers.columns.id }),
key: column.text(),
creationDate: column.date({ default: NOW }),
description: column.text({ optional: true })
}
});
const StudioCMSUserResetTokens = defineTable({
columns: {
id: column.text({ primaryKey: true }),
userId: column.text({ references: () => StudioCMSUsers.columns.id }),
token: column.text()
}
});
const StudioCMSOAuthAccounts = defineTable({
columns: {
provider: column.text(),
// github, google, discord, auth0
providerUserId: column.text({ primaryKey: true }),
userId: column.text({ references: () => StudioCMSUsers.columns.id })
}
});
const StudioCMSSessionTable = defineTable({
columns: {
id: column.text({ primaryKey: true }),
userId: column.text({ references: () => StudioCMSUsers.columns.id, optional: false }),
expiresAt: column.date()
}
});
const StudioCMSPermissions = defineTable({
columns: {
user: column.text({ references: () => StudioCMSUsers.columns.id }),
rank: column.text({ enum: ["owner", "admin", "editor", "visitor", "unknown"] })
}
});
const StudioCMSPageFolderStructure = defineTable({
columns: {
id: column.text({ primaryKey: true }),
name: column.text(),
parent: column.text({ optional: true })
}
});
const StudioCMSPageData = defineTable({
columns: {
id: column.text({ primaryKey: true }),
package: column.text({ default: "studiocms" }),
title: column.text(),
description: column.text(),
showOnNav: column.boolean({ default: false }),
publishedAt: column.date({ default: NOW }),
updatedAt: column.date({ optional: true }),
slug: column.text(),
contentLang: column.text({ default: "default" }),
heroImage: column.text({
default: "https://images.unsplash.com/photo-1707343843982-f8275f3994c5?q=80&w=1032&auto=format&fit=crop&ixlib=rb-4.0.3&ixid=M3wxMjA3fDF8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D"
}),
categories: column.json({ default: [], optional: true }),
tags: column.json({ default: [], optional: true }),
authorId: column.text({ optional: true }),
contributorIds: column.json({ default: [], optional: true }),
showAuthor: column.boolean({ default: false, optional: true }),
showContributors: column.boolean({ default: false, optional: true }),
parentFolder: column.text({ optional: true }),
draft: column.boolean({ optional: true }),
augments: column.json({ default: [], optional: true })
}
});
const StudioCMSDiffTracking = defineTable({
columns: {
id: column.text({ primaryKey: true }),
userId: column.text({ references: () => StudioCMSUsers.columns.id }),
pageId: column.text({ references: () => StudioCMSPageData.columns.id }),
timestamp: column.date({ default: NOW, optional: true }),
pageMetaData: column.json({ optional: true }),
pageContentStart: column.text({ multiline: true }),
diff: column.text({ multiline: true, optional: true })
}
});
const StudioCMSPageDataTags = defineTable({
columns: {
id: column.number({ primaryKey: true }),
description: column.text(),
name: column.text(),
slug: column.text(),
meta: column.json()
}
});
const StudioCMSPageDataCategories = defineTable({
columns: {
id: column.number({ primaryKey: true }),
parent: column.number({ optional: true }),
description: column.text(),
name: column.text(),
slug: column.text(),
meta: column.json()
}
});
const StudioCMSPageContent = defineTable({
columns: {
id: column.text({ primaryKey: true }),
contentId: column.text({ references: () => StudioCMSPageData.columns.id }),
contentLang: column.text({ default: "default" }),
content: column.text({ multiline: true, optional: true })
}
});
const StudioCMSEmailVerificationTokens = defineTable({
columns: {
id: column.text({ primaryKey: true }),
userId: column.text({ references: () => StudioCMSUsers.columns.id }),
token: column.text(),
expiresAt: column.date()
}
});
const StudioCMSPluginData = defineTable({
columns: {
id: column.text({ primaryKey: true }),
data: column.json()
}
});
const StudioCMSDynamicConfigSettings = defineTable({
columns: {
id: column.text({ primaryKey: true }),
data: column.json()
}
});
const StudioCMSSiteConfig = defineTable({
deprecated: true,
columns: {
id: column.number({ primaryKey: true }),
title: column.text(),
description: column.text(),
defaultOgImage: column.text({ optional: true }),
siteIcon: column.text({ optional: true }),
loginPageBackground: column.text({ default: "studiocms-curves" }),
loginPageCustomImage: column.text({ optional: true }),
enableDiffs: column.boolean({ default: false }),
diffPerPage: column.number({ default: 10 }),
gridItems: column.json({ default: [] }),
enableMailer: column.boolean({ default: false }),
hideDefaultIndex: column.boolean({ default: false })
}
});
const StudioCMSMailerConfig = defineTable({
deprecated: true,
columns: {
id: column.text({ primaryKey: true }),
host: column.text(),
port: column.number(),
secure: column.boolean(),
proxy: column.text({ optional: true }),
auth_user: column.text({ optional: true }),
auth_pass: column.text({ optional: true }),
tls_rejectUnauthorized: column.boolean({ optional: true }),
tls_servername: column.text({ optional: true }),
default_sender: column.text()
}
});
const StudioCMSNotificationSettings = defineTable({
deprecated: true,
columns: {
id: column.text({ primaryKey: true }),
emailVerification: column.boolean({ default: false }),
requireAdminVerification: column.boolean({ default: false }),
requireEditorVerification: column.boolean({ default: false }),
oAuthBypassVerification: column.boolean({ default: false })
}
});
var config_default = defineDb({
tables: {
StudioCMSPageContent,
StudioCMSPageData,
StudioCMSPageDataCategories,
StudioCMSPageDataTags,
StudioCMSPermissions,
StudioCMSSessionTable,
StudioCMSUsers,
StudioCMSOAuthAccounts,
StudioCMSDiffTracking,
StudioCMSPageFolderStructure,
StudioCMSUserResetTokens,
StudioCMSAPIKeys,
StudioCMSEmailVerificationTokens,
StudioCMSPluginData,
StudioCMSDynamicConfigSettings,
// Deprecated Tables
StudioCMSSiteConfig,
StudioCMSMailerConfig,
StudioCMSNotificationSettings
}
});
const tsUsers = asDrizzleTable("StudioCMSUsers", StudioCMSUsers);
const tsAPIKeys = asDrizzleTable("StudioCMSAPIKeys", StudioCMSAPIKeys);
const tsUserResetTokens = asDrizzleTable(
"StudioCMSUserResetTokens",
StudioCMSUserResetTokens
);
const tsOAuthAccounts = asDrizzleTable("StudioCMSOAuthAccounts", StudioCMSOAuthAccounts);
const tsSessionTable = asDrizzleTable("StudioCMSSessionTable", StudioCMSSessionTable);
const tsPermissions = asDrizzleTable("StudioCMSPermissions", StudioCMSPermissions);
const tsPageFolderStructure = asDrizzleTable(
"StudioCMSPageFolderStructure",
StudioCMSPageFolderStructure
);
const tsPageData = asDrizzleTable("StudioCMSPageData", StudioCMSPageData);
const tsDiffTracking = asDrizzleTable("StudioCMSDiffTracking", StudioCMSDiffTracking);
const tsPageDataTags = asDrizzleTable("StudioCMSPageDataTags", StudioCMSPageDataTags);
const tsPageDataCategories = asDrizzleTable(
"StudioCMSPageDataCategories",
StudioCMSPageDataCategories
);
const tsPageContent = asDrizzleTable("StudioCMSPageContent", StudioCMSPageContent);
const tsEmailVerificationTokens = asDrizzleTable(
"StudioCMSEmailVerificationTokens",
StudioCMSEmailVerificationTokens
);
const tsPluginData = asDrizzleTable("StudioCMSPluginData", StudioCMSPluginData);
const tsDynamicConfigSettings = asDrizzleTable(
"StudioCMSDynamicConfigSettings",
StudioCMSDynamicConfigSettings
);
const tsSiteConfig = asDrizzleTable("StudioCMSSiteConfig", StudioCMSSiteConfig);
const tsMailerConfig = asDrizzleTable("StudioCMSMailerConfig", StudioCMSMailerConfig);
const tsNotificationSettings = asDrizzleTable(
"StudioCMSNotificationSettings",
StudioCMSNotificationSettings
);
export {
config_default as default,
tsAPIKeys,
tsDiffTracking,
tsDynamicConfigSettings,
tsEmailVerificationTokens,
tsMailerConfig,
tsNotificationSettings,
tsOAuthAccounts,
tsPageContent,
tsPageData,
tsPageDataCategories,
tsPageDataTags,
tsPageFolderStructure,
tsPermissions,
tsPluginData,
tsSessionTable,
tsSiteConfig,
tsUserResetTokens,
tsUsers
};