generated from autonomic-cooperative/astro-payload-template
Compare commits
11 Commits
7dbc81c5b2
...
main
Author | SHA1 | Date | |
---|---|---|---|
6ca3ab875b | |||
e9fb68ec9f | |||
f37a1719b7 | |||
d62e7d788e | |||
8fdfb2fbe4 | |||
0bb0644b55 | |||
b85c62f3fc | |||
910f943a2d | |||
10cb01964b | |||
91073bd498 | |||
cc0a5cb1c5 |
2
.gitignore
vendored
2
.gitignore
vendored
@ -3,4 +3,4 @@ data
|
|||||||
yarn-debug.log*
|
yarn-debug.log*
|
||||||
yarn-error.log*
|
yarn-error.log*
|
||||||
|
|
||||||
payload-types.ts
|
#payload-types.ts
|
@ -11,3 +11,4 @@
|
|||||||
"dev:nobuild": "docker compose up"
|
"dev:nobuild": "docker compose up"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
66
payload-types.ts
Normal file
66
payload-types.ts
Normal file
@ -0,0 +1,66 @@
|
|||||||
|
/* tslint:disable */
|
||||||
|
/* eslint-disable */
|
||||||
|
/**
|
||||||
|
* This file was automatically generated by Payload.
|
||||||
|
* DO NOT MODIFY IT BY HAND. Instead, modify your source Payload config,
|
||||||
|
* and re-run `payload generate:types` to regenerate this file.
|
||||||
|
*/
|
||||||
|
|
||||||
|
export interface Config {
|
||||||
|
collections: {
|
||||||
|
posts: Post;
|
||||||
|
users: User;
|
||||||
|
authors: Author;
|
||||||
|
media: Media;
|
||||||
|
};
|
||||||
|
globals: {};
|
||||||
|
}
|
||||||
|
export interface Post {
|
||||||
|
id: string;
|
||||||
|
title: string;
|
||||||
|
summary?: string;
|
||||||
|
publishedDate?: string;
|
||||||
|
thumbnail: string | Media;
|
||||||
|
content?: {
|
||||||
|
[k: string]: unknown;
|
||||||
|
}[];
|
||||||
|
author?: string | Author;
|
||||||
|
status: 'draft' | 'published' | 'archived';
|
||||||
|
updatedAt: string;
|
||||||
|
createdAt: string;
|
||||||
|
}
|
||||||
|
export interface Media {
|
||||||
|
id: string;
|
||||||
|
alt: string;
|
||||||
|
updatedAt: string;
|
||||||
|
createdAt: string;
|
||||||
|
url?: string;
|
||||||
|
filename?: string;
|
||||||
|
mimeType?: string;
|
||||||
|
filesize?: number;
|
||||||
|
width?: number;
|
||||||
|
height?: number;
|
||||||
|
}
|
||||||
|
export interface Author {
|
||||||
|
id: string;
|
||||||
|
avatar: string | Media;
|
||||||
|
name: string;
|
||||||
|
bio?: string;
|
||||||
|
user?: string | User;
|
||||||
|
updatedAt: string;
|
||||||
|
createdAt: string;
|
||||||
|
}
|
||||||
|
export interface User {
|
||||||
|
id: string;
|
||||||
|
roles: ('ssg' | 'admin' | 'editor' | 'user')[];
|
||||||
|
updatedAt: string;
|
||||||
|
createdAt: string;
|
||||||
|
email: string;
|
||||||
|
resetPasswordToken?: string;
|
||||||
|
resetPasswordExpiration?: string;
|
||||||
|
salt?: string;
|
||||||
|
hash?: string;
|
||||||
|
loginAttempts?: number;
|
||||||
|
lockUntil?: string;
|
||||||
|
password?: string;
|
||||||
|
}
|
@ -6,18 +6,22 @@
|
|||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"dev": "cross-env PAYLOAD_CONFIG_PATH=src/payload.config.ts nodemon",
|
"dev": "cross-env PAYLOAD_CONFIG_PATH=src/payload.config.ts nodemon",
|
||||||
"build:payload": "cross-env PAYLOAD_CONFIG_PATH=src/payload.config.ts node -r tsconfig-paths/register node_modules/payload/dist/bin/index.js build",
|
"build:payload": "cross-env PAYLOAD_CONFIG_PATH=src/payload.config.ts node -r tsconfig-paths/register node_modules/payload/dist/bin/index.js build ",
|
||||||
"build:server": "tsc",
|
"build:server": "tsc",
|
||||||
"build": "yarn build:payload && yarn build:server",
|
"build": "yarn generate:types && yarn build:payload && yarn build:server",
|
||||||
"serve": "cross-env PAYLOAD_CONFIG_PATH=dist/payload.config.js node -r tsconfig-paths/register dist/server.js",
|
"serve": "cross-env PAYLOAD_CONFIG_PATH=dist/payload.config.js node -r tsconfig-paths/register dist/server.js",
|
||||||
"generate:types": "cross-env PAYLOAD_CONFIG_PATH=src/payload.config.ts node -r tsconfig-paths/register node_modules/payload/dist/bin/index.js generate:types",
|
"generate:types": "cross-env PAYLOAD_CONFIG_PATH=src/payload.config.ts node -r tsconfig-paths/register node_modules/payload/dist/bin/index.js generate:types",
|
||||||
"generate:types:listen": "nodemon --watch src --ext ts --exec 'npm run generate:types'"
|
"generate:types:listen": "nodemon --watch src --ext ts --exec 'npm run generate:types'"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
"@payloadcms/bundler-webpack": "^1.0.6",
|
||||||
|
"@payloadcms/db-mongodb": "^1.5.1",
|
||||||
|
"@payloadcms/plugin-cloud": "^3.0.1",
|
||||||
|
"@payloadcms/richtext-slate": "^1.5.2",
|
||||||
"cross-env": "^7.0.3",
|
"cross-env": "^7.0.3",
|
||||||
"dotenv": "^16.3.1",
|
"dotenv": "^16.3.1",
|
||||||
"express": "^4.17.1",
|
"express": "^4.17.1",
|
||||||
"payload": "^1.15.6",
|
"payload": "^2.18.3",
|
||||||
"tsconfig-paths": "^4.2.0"
|
"tsconfig-paths": "^4.2.0"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
import { Access, FieldAccess } from "payload/types";
|
import { Access, FieldAccess } from "payload/types";
|
||||||
import { User } from "../payload-types";
|
import { User } from "@/types/payload-types";
|
||||||
|
|
||||||
export const isAdmin: Access<any, User> = ({ req: { user } }) => {
|
export const isAdmin: Access<any, User> = ({ req: { user } }) => {
|
||||||
// Return true or false based on if the user has an admin role
|
// Return true or false based on if the user has an admin role
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
import { Access, FieldAccess } from "payload/types";
|
import { Access, FieldAccess } from "payload/types";
|
||||||
import { User } from "../payload-types";
|
import { User } from "@/types/payload-types";
|
||||||
|
|
||||||
export const isEditor: Access<any, User> = ({ req: { user } }) => {
|
export const isEditor: Access<any, User> = ({ req: { user } }) => {
|
||||||
// Return true or false based on if the user has an editor role
|
// Return true or false based on if the user has an editor role
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
import { Access, FieldAccess } from "payload/types";
|
import { Access, FieldAccess } from "payload/types";
|
||||||
import { User } from "../payload-types";
|
import { User } from "@/types/payload-types";
|
||||||
|
|
||||||
export const isSSG: Access<any, User> = ({ req: { user } }) => {
|
export const isSSG: Access<any, User> = ({ req: { user } }) => {
|
||||||
// Return true or false based on if the user has an ssg or admin role
|
// Return true or false based on if the user has an ssg or admin role
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
import { Access, FieldAccess } from "payload/types";
|
import { Access, FieldAccess } from "payload/types";
|
||||||
import { User } from "../payload-types";
|
import { User } from "@/types/payload-types";
|
||||||
|
|
||||||
export const isUser: Access<any, User> = ({ req: { user } }) => {
|
export const isUser: Access<any, User> = ({ req: { user } }) => {
|
||||||
// Return true or false based on if the user has an ssg or admin role
|
// Return true or false based on if the user has an ssg or admin role
|
||||||
|
@ -3,6 +3,7 @@ import { isAdmin } from "@/access/isAdmin";
|
|||||||
import { isEditor } from "@/access/isEditor";
|
import { isEditor } from "@/access/isEditor";
|
||||||
import { isSSG } from "@/access/isSSG";
|
import { isSSG } from "@/access/isSSG";
|
||||||
import { isUser } from "@/access/isUser";
|
import { isUser } from "@/access/isUser";
|
||||||
|
import { slateEditor } from '@payloadcms/richtext-slate'
|
||||||
|
|
||||||
const Posts: CollectionConfig = {
|
const Posts: CollectionConfig = {
|
||||||
slug: "posts",
|
slug: "posts",
|
||||||
@ -68,26 +69,28 @@ const Posts: CollectionConfig = {
|
|||||||
required: true,
|
required: true,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "content",
|
name: 'content',
|
||||||
type: "richText",
|
type: 'richText',
|
||||||
admin: {
|
editor: slateEditor({
|
||||||
elements: ["h2", "h3", "h4", "link", "ol", "ul", "upload", "blockquote", "indent"],
|
admin: {
|
||||||
leaves: ["bold", "italic", "underline"],
|
elements: ["h2", "h3", "h4", "link", "ol", "ul", "upload", "blockquote", "indent"],
|
||||||
upload: {
|
leaves: ["bold", "italic", "underline", "strikethrough"],
|
||||||
collections: {
|
upload: {
|
||||||
media: {
|
collections: {
|
||||||
fields: [
|
media: {
|
||||||
{
|
fields: [
|
||||||
name: "image",
|
{
|
||||||
type: "upload",
|
name: "image",
|
||||||
relationTo: "media",
|
type: "upload",
|
||||||
required: true,
|
relationTo: "media",
|
||||||
},
|
required: true,
|
||||||
],
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
})
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "author",
|
name: "author",
|
||||||
|
@ -5,10 +5,16 @@ import Users from "@/collections/Users";
|
|||||||
import Authors from "./collections/Authors";
|
import Authors from "./collections/Authors";
|
||||||
import Media from "@/collections/Media";
|
import Media from "@/collections/Media";
|
||||||
|
|
||||||
|
import { payloadCloud } from '@payloadcms/plugin-cloud'
|
||||||
|
import { mongooseAdapter } from '@payloadcms/db-mongodb'
|
||||||
|
import { webpackBundler } from '@payloadcms/bundler-webpack'
|
||||||
|
import { slateEditor } from '@payloadcms/richtext-slate'
|
||||||
|
|
||||||
export default buildConfig({
|
export default buildConfig({
|
||||||
serverURL: process.env.PAYLOAD_URL,
|
serverURL: process.env.PAYLOAD_URL,
|
||||||
admin: {
|
admin: {
|
||||||
user: Users.slug,
|
user: Users.slug,
|
||||||
|
bundler: webpackBundler(),
|
||||||
webpack: (config) => ({
|
webpack: (config) => ({
|
||||||
...config,
|
...config,
|
||||||
resolve: {
|
resolve: {
|
||||||
@ -24,4 +30,9 @@ export default buildConfig({
|
|||||||
typescript: {
|
typescript: {
|
||||||
outputFile: path.resolve("../", "payload-types.ts"),
|
outputFile: path.resolve("../", "payload-types.ts"),
|
||||||
},
|
},
|
||||||
|
plugins: [payloadCloud()],
|
||||||
|
editor: slateEditor({}),
|
||||||
|
db: mongooseAdapter({
|
||||||
|
url: process.env.MONGODB_URI,
|
||||||
|
}),
|
||||||
});
|
});
|
@ -1,15 +1,17 @@
|
|||||||
import { Payload } from "payload";
|
import { Payload } from "payload";
|
||||||
import { User } from "./payload-types";
|
import { User } from "@/types/payload-types";
|
||||||
|
|
||||||
export const seed = async (payload: Payload): Promise<void> => {
|
export const seed = async (payload: Payload): Promise<void> => {
|
||||||
// Local API methods skip all access control by default
|
// Local API methods skip all access control by default
|
||||||
// so we can easily create an admin user directly in init
|
// so we can easily create an admin user directly in init
|
||||||
await payload.create<User>({
|
|
||||||
|
/* Disable to prevent mistakes */
|
||||||
|
/* await payload.create<User>({
|
||||||
collection: 'users',
|
collection: 'users',
|
||||||
data: {
|
data: {
|
||||||
email: 'astro@ssg.js',
|
email: 'astro@ssg.js',
|
||||||
password: 'password',
|
password: 'password',
|
||||||
roles: ['ssg']
|
roles: ['ssg']
|
||||||
}
|
}
|
||||||
})
|
}) */
|
||||||
}
|
}
|
@ -10,7 +10,7 @@ app.get("/", (_, res) => {
|
|||||||
|
|
||||||
payload.init({
|
payload.init({
|
||||||
secret: process.env.PAYLOAD_SECRET,
|
secret: process.env.PAYLOAD_SECRET,
|
||||||
mongoURL: process.env.MONGODB_URI,
|
//mongoURL: process.env.MONGODB_URI,
|
||||||
express: app,
|
express: app,
|
||||||
onInit: () => {
|
onInit: () => {
|
||||||
payload.logger.info(`Payload Admin URL: ${payload.getAdminURL()}`);
|
payload.logger.info(`Payload Admin URL: ${payload.getAdminURL()}`);
|
||||||
|
@ -7,7 +7,8 @@
|
|||||||
"skipLibCheck": true,
|
"skipLibCheck": true,
|
||||||
"outDir": "./dist",
|
"outDir": "./dist",
|
||||||
"paths": {
|
"paths": {
|
||||||
"@/*": ["./src/*", "./dist/*", "./dist/src/*"]
|
"@/*": ["./src/*", "./dist/*", "./dist/src/*"],
|
||||||
|
"@/types/*": ["../*"]
|
||||||
},
|
},
|
||||||
"jsx": "react"
|
"jsx": "react"
|
||||||
},
|
},
|
||||||
|
4334
payload/yarn.lock
4334
payload/yarn.lock
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user