enables typescript intellisense in buildConfig

This commit is contained in:
James
2020-11-21 13:53:54 -05:00
parent 16d0289c36
commit 3e9ad427ec
12 changed files with 52 additions and 20 deletions

View File

@@ -1,3 +1,5 @@
import { Access, Hook } from '../../config/types';
import { Field } from '../../fields/config/types';
export type Collection = {
slug: string;

View File

@@ -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;
}

View File

@@ -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;

View File

@@ -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);

View File

@@ -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<MockEmailHandler> => {
const mockEmailHandler = async (emailConfig: EmailOptions): Promise<MockEmailHandler> => {
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,

View File

@@ -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,

View File

@@ -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[];
};

View File

@@ -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;

View File

@@ -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);