Files
payload/packages/plugin-cloud-storage/dev/src/payload.config.ts
2023-10-24 16:21:12 -04:00

124 lines
3.5 KiB
TypeScript

import { buildConfig } from 'payload/config'
import path from 'path'
import Users from './collections/Users'
import { cloudStorage } from '../../src'
import { s3Adapter } from '../../src/adapters/s3'
import { gcsAdapter } from '../../src/adapters/gcs'
import { azureBlobStorageAdapter } from '../../src/adapters/azure'
import type { Adapter } from '../../src/types'
import { Media } from './collections/Media'
let adapter: Adapter
let uploadOptions
if (process.env.PAYLOAD_PUBLIC_CLOUD_STORAGE_ADAPTER === 'azure') {
adapter = azureBlobStorageAdapter({
connectionString: process.env.AZURE_STORAGE_CONNECTION_STRING,
containerName: process.env.AZURE_STORAGE_CONTAINER_NAME,
allowContainerCreate: process.env.AZURE_STORAGE_ALLOW_CONTAINER_CREATE === 'true',
baseURL: process.env.AZURE_STORAGE_ACCOUNT_BASEURL,
})
// uploadOptions = {
// useTempFiles: true,
// }
}
if (process.env.PAYLOAD_PUBLIC_CLOUD_STORAGE_ADAPTER === 's3') {
// The s3 adapter supports using temp files for uploads
uploadOptions = {
useTempFiles: true,
}
adapter = s3Adapter({
config: {
endpoint: process.env.S3_ENDPOINT,
forcePathStyle: process.env.S3_FORCE_PATH_STYLE === 'true',
region: process.env.S3_REGION,
credentials: {
accessKeyId: process.env.S3_ACCESS_KEY_ID,
secretAccessKey: process.env.S3_SECRET_ACCESS_KEY,
},
},
bucket: process.env.S3_BUCKET,
})
}
if (process.env.PAYLOAD_PUBLIC_CLOUD_STORAGE_ADAPTER === 'gcs') {
adapter = gcsAdapter({
options: {
apiEndpoint: process.env.GCS_ENDPOINT,
projectId: process.env.GCS_PROJECT_ID,
},
bucket: process.env.GCS_BUCKET,
})
}
export default buildConfig({
serverURL: 'http://localhost:3000',
collections: [Media, Users],
upload: uploadOptions,
admin: {
// NOTE - these webpack extensions are only required
// for development of this plugin.
// No need to use these aliases within your own projects.
webpack: (config) => {
const newConfig = {
...config,
resolve: {
...(config.resolve || {}),
alias: {
...(config.resolve.alias || {}),
react: path.resolve(__dirname, '../node_modules/react'),
[path.resolve(__dirname, '../../src/index')]: path.resolve(
__dirname,
'../../src/admin/index.ts',
),
[path.resolve(__dirname, '../../src/adapters/s3/index')]: path.resolve(
__dirname,
'../../src/adapters/s3/mock.js',
),
[path.resolve(__dirname, '../../src/adapters/gcs/index')]: path.resolve(
__dirname,
'../../src/adapters/gcs/mock.js',
),
[path.resolve(__dirname, '../../src/adapters/azure/index')]: path.resolve(
__dirname,
'../../src/adapters/azure/mock.js',
),
},
},
}
return newConfig
},
},
typescript: {
outputFile: path.resolve(__dirname, 'payload-types.ts'),
},
plugins: [
// @ts-expect-error Conflicting types for relative package
cloudStorage({
collections: {
media: {
adapter,
},
},
}),
],
onInit: async (payload) => {
const users = await payload.find({
collection: 'users',
limit: 1,
})
if (!users.docs.length) {
await payload.create({
collection: 'users',
data: {
email: 'dev@payloadcms.com',
password: 'test',
},
})
}
},
})