diff --git a/config.d.ts b/config.d.ts index fe48d8883b..c10b631c8f 100644 --- a/config.d.ts +++ b/config.d.ts @@ -1 +1,2 @@ -export * from './dist/config'; +export { default as buildConfig } from './dist/src/config/build'; +export * from './dist/src/config/types'; diff --git a/config.js b/config.js new file mode 100644 index 0000000000..8beaff3791 --- /dev/null +++ b/config.js @@ -0,0 +1 @@ +exports.buildConfig = require('./dist/src/config/build'); diff --git a/demo/payload.config.js b/demo/payload.config.js index 5b4439ab23..2b7b07425a 100644 --- a/demo/payload.config.js +++ b/demo/payload.config.js @@ -1,3 +1,5 @@ +const { buildConfig } = require('../config'); + const Admin = require('./collections/Admin'); const AllFields = require('./collections/AllFields'); const AutoLabel = require('./collections/AutoLabel'); @@ -27,7 +29,7 @@ const BlocksGlobal = require('./globals/BlocksGlobal'); const NavigationArray = require('./globals/NavigationArray'); const GlobalWithStrictAccess = require('./globals/GlobalWithStrictAccess'); -module.exports = { +module.exports = buildConfig({ admin: { user: 'admins', // indexHTML: 'custom-index.html', @@ -134,4 +136,4 @@ module.exports = { }, }, webpack: (config) => config, -}; +}); diff --git a/src/collections/config/types.ts b/src/collections/config/types.ts index 1044a44c91..c95c749be2 100644 --- a/src/collections/config/types.ts +++ b/src/collections/config/types.ts @@ -1,3 +1,5 @@ +import { Access, Hook } from '../../config/types'; +import { Field } from '../../fields/config/types'; export type Collection = { slug: string; diff --git a/src/config/build.ts b/src/config/build.ts index b7af8bccde..628cefb315 100644 --- a/src/config/build.ts +++ b/src/config/build.ts @@ -1,12 +1,10 @@ -import { PayloadConfig } from '../types'; +import { Config } from './types'; import sanitize from './sanitize'; import validate from './validate'; -const buildConfig = (config: PayloadConfig) => { +export default function buildConfig(config: Config): Config { const validated = validate(config); const sanitized = sanitize(validated); return sanitized; -}; - -module.exports = buildConfig; +} diff --git a/src/config/types.ts b/src/config/types.ts index bcf5ad93c5..84fa32f599 100644 --- a/src/config/types.ts +++ b/src/config/types.ts @@ -1,8 +1,8 @@ import { Express } from 'express'; -import { CSSProperties } from 'react'; import { Transporter } from 'nodemailer'; import SMTPConnection from 'nodemailer/lib/smtp-connection'; import { Collection } from '../collections/config/types'; +import { Global } from '../globals/config/types'; type MockEmailTransport = { transport?: 'mock'; @@ -67,6 +67,11 @@ export type Config = { graphQL?: string; graphQLPlayground?: string; }; + express: { + json: { + limit?: number + } + }, email?: EmailOptions; local?: boolean; defaultDepth?: number; diff --git a/src/config/validate.ts b/src/config/validate.ts index 9e30c4da83..e7099ece50 100644 --- a/src/config/validate.ts +++ b/src/config/validate.ts @@ -3,9 +3,9 @@ import * as configSchema from './schema.json'; import * as collectionSchema from '../collections/config/schema.json'; import InvalidSchema from '../errors/InvalidSchema'; -import { PayloadConfig } from './types'; +import { Config } from './types'; -const validateSchema = (config: PayloadConfig): PayloadConfig => { +const validateSchema = (config: Config): Config => { const ajv = new Ajv({ useDefaults: true }); const validate = ajv.addSchema(collectionSchema, '../collections/config/schema.json').compile(configSchema); const valid = validate(config); diff --git a/src/email/mockHandler.ts b/src/email/mockHandler.ts index 6b7b9cea74..1f82dd6673 100644 --- a/src/email/mockHandler.ts +++ b/src/email/mockHandler.ts @@ -1,17 +1,17 @@ -import nodemailer, { TestAccount, Transporter } from 'nodemailer'; -import { PayloadEmailOptions } from '../types'; +import nodemailer from 'nodemailer'; +import { EmailOptions } from '../config/types'; import { MockEmailHandler } from './types'; -const mockEmailHandler = async (emailConfig: PayloadEmailOptions): Promise => { +const mockEmailHandler = async (emailConfig: EmailOptions): Promise => { const testAccount = await nodemailer.createTestAccount(); const smtpOptions = { ...emailConfig, - host: "smtp.ethereal.email", + host: 'smtp.ethereal.email', port: 587, secure: false, - fromName: emailConfig.fromName || "Payload CMS", - fromAddress: emailConfig.fromAddress || "info@payloadcms.com", + fromName: emailConfig.fromName || 'Payload CMS', + fromAddress: emailConfig.fromAddress || 'info@payloadcms.com', auth: { user: testAccount.user, pass: testAccount.pass, diff --git a/src/email/types.ts b/src/email/types.ts index 51177951f4..dbc81ccce9 100644 --- a/src/email/types.ts +++ b/src/email/types.ts @@ -2,6 +2,13 @@ import { TestAccount, Transporter } from 'nodemailer'; import Mail from 'nodemailer/lib/mailer'; import SMTPConnection from 'nodemailer/lib/smtp-connection'; +export type Message = { + from: string + to: string + subject: string + html: string +} + export type BuildEmailResult = Promise<{ transport: Mail, transportOptions?: SMTPConnection.Options, diff --git a/src/globals/config/types.ts b/src/globals/config/types.ts index e69de29bb2..b1e1593a83 100644 --- a/src/globals/config/types.ts +++ b/src/globals/config/types.ts @@ -0,0 +1,15 @@ +import { Access } from '../../config/types'; +import { Field } from '../../fields/config/types'; + +export type Global = { + slug: string; + label: string; + access?: { + create?: Access; + read?: Access; + update?: Access; + delete?: Access; + admin?: Access; + }; + fields: Field[]; +}; diff --git a/src/index.ts b/src/index.ts index 5575552022..41f08b9198 100644 --- a/src/index.ts +++ b/src/index.ts @@ -40,7 +40,7 @@ import performFieldOperations from './fields/performFieldOperations'; import localOperations from './collections/operations/local'; import localGlobalOperations from './globals/operations/local'; import { encrypt, decrypt } from './auth/crypto'; -import { MockEmailHandler, BuildEmailResult } from './email/types'; +import { MockEmailHandler, BuildEmailResult, Message } from './email/types'; require('isomorphic-fetch'); @@ -201,7 +201,7 @@ class Payload { if (typeof options.onInit === 'function') options.onInit(); } - async sendEmail(message: string) { + async sendEmail(message: Message) { const email = await this.email; const result = email.transport.sendMail(message); return result; diff --git a/src/utilities/checkDuplicateCollections.ts b/src/utilities/checkDuplicateCollections.ts index b1998c57d6..b806adaf38 100644 --- a/src/utilities/checkDuplicateCollections.ts +++ b/src/utilities/checkDuplicateCollections.ts @@ -1,8 +1,9 @@ import { DuplicateCollection } from '../errors'; +import { Collection } from '../collections/config/types'; const getDuplicates = (arr) => arr.filter((item, index) => arr.indexOf(item) !== index); -const checkDuplicateCollections = (collections) => { +const checkDuplicateCollections = (collections: Collection[]): void => { const duplicateSlugs = getDuplicates(collections.map((c) => c.slug)); if (duplicateSlugs.length > 0) { throw new DuplicateCollection('slug', duplicateSlugs);