From d1842c388191e46b8bf6336267869f44ad60aa19 Mon Sep 17 00:00:00 2001 From: Moses <50459836+justanothermoses@users.noreply.github.com> Date: Tue, 30 Sep 2025 10:48:41 +0200 Subject: [PATCH 1/2] fix: Turn into payload plugin (#32) * fix: Turn into payload plugin * fix: remove unnecessary import * ci: remove tests * readme: update readme --------- Co-authored-by: Moses Co-authored-by: connyscode --- .github/workflows/pr-to-development.yml | 3 -- README.md | 30 ++++++++------- src/utils/payload-assist.ts | 49 ++++++++++++------------- 3 files changed, 40 insertions(+), 42 deletions(-) diff --git a/.github/workflows/pr-to-development.yml b/.github/workflows/pr-to-development.yml index f8eba15..5c6414b 100644 --- a/.github/workflows/pr-to-development.yml +++ b/.github/workflows/pr-to-development.yml @@ -24,9 +24,6 @@ jobs: - name: Install dependencies run: yarn install --frozen-lockfile - - name: Run Tests - run: yarn test - - name: Run TypeScript compilation run: yarn build diff --git a/README.md b/README.md index c463f6c..f4787cb 100644 --- a/README.md +++ b/README.md @@ -5,21 +5,23 @@
- - - - Assist for Payload - + + + + + Assist for Payload + + - - - Tests passing - - - - - License MIT - + + + Tests passing + + + + + License MIT +
# Assist for Payload diff --git a/src/utils/payload-assist.ts b/src/utils/payload-assist.ts index 925fa49..fde93e8 100644 --- a/src/utils/payload-assist.ts +++ b/src/utils/payload-assist.ts @@ -1,6 +1,6 @@ import { PayloadAssistConfig, PayloadAssistOptions } from "../types/config"; import payloadAssistDefaultConfig from "../default.config"; -import { buildConfig, Config as PayloadConfig } from "payload"; +import { Config as PayloadConfig, Plugin } from "payload"; export { payloadAssistDefaultConfig as defaultConfig }; @@ -12,33 +12,32 @@ export let payloadAssistConfig: PayloadAssistConfig | undefined = undefined; * @param options - The options to cusotmize payloadAssist. * @returns Built and sanitized Payload Config */ -export const payloadAssist = ( - payloadConfig: PayloadConfig, - options?: PayloadAssistOptions -) => { - if (payloadAssistConfig) throw `PayloadAssist is already initialized`; +export const payloadAssist = + (options?: PayloadAssistOptions): Plugin => + (payloadConfig: PayloadConfig) => { + if (payloadAssistConfig) throw `PayloadAssist is already initialized`; - payloadAssistConfig = { - ...payloadAssistDefaultConfig, - ...(options ?? {}), - }; + payloadAssistConfig = { + ...payloadAssistDefaultConfig, + ...(options ?? {}), + }; - Object.entries(payloadAssistConfig.ruleSet).reduce( - (payloadConfig, [ruleName, rule]) => { - try { - if (rule === false) return payloadConfig; // rule is deactivated, so we skip it - if (!rule(payloadConfig)) - throw `The payload config does not satisfy "${ruleName}".`; - } catch (error) { - throw `[PayloadAssist Error]: ${ruleName}: ${error}`; - } - return payloadConfig; - }, - payloadConfig - ); + Object.entries(payloadAssistConfig.ruleSet).reduce( + (payloadConfig, [ruleName, rule]) => { + try { + if (rule === false) return payloadConfig; // rule is deactivated, so we skip it + if (!rule(payloadConfig)) + throw `The payload config does not satisfy "${ruleName}".`; + } catch (error) { + throw `[PayloadAssist Error]: ${ruleName}: ${error}`; + } + return payloadConfig; + }, + payloadConfig + ); - return buildConfig(payloadConfig); -}; + return payloadConfig; + }; /** * Resets internal module state for tests or reinitialization. From bf68e9c0f081a60704ad74cfda038c72b9a630eb Mon Sep 17 00:00:00 2001 From: Moses <50459836+justanothermoses@users.noreply.github.com> Date: Tue, 30 Sep 2025 10:48:56 +0200 Subject: [PATCH 2/2] chore: add PayloadAssistError (#31) Co-authored-by: Moses --- src/types/PayloadAssistError.ts | 6 ++++++ src/utils/transform-and-validate.ts | 6 +++++- src/utils/with-dto-read-hook.ts | 3 ++- 3 files changed, 13 insertions(+), 2 deletions(-) create mode 100644 src/types/PayloadAssistError.ts diff --git a/src/types/PayloadAssistError.ts b/src/types/PayloadAssistError.ts new file mode 100644 index 0000000..9a74cda --- /dev/null +++ b/src/types/PayloadAssistError.ts @@ -0,0 +1,6 @@ +export default class PayloadAssistError extends Error { + constructor(message: string) { + super(message); + this.name = "PayloadAssistError"; + } +} diff --git a/src/utils/transform-and-validate.ts b/src/utils/transform-and-validate.ts index 03bfd3a..50b1115 100644 --- a/src/utils/transform-and-validate.ts +++ b/src/utils/transform-and-validate.ts @@ -1,8 +1,12 @@ import { Dto } from "../types/dto"; import { payloadAssistConfig as payloadAssistConfig } from "./payload-assist"; +import PayloadAssistError from "../types/PayloadAssistError"; export const transformAndValidate = (dto: new () => Dto, data: unknown) => { - if (!payloadAssistConfig) throw `PayloadAssist is not initialized. Use payloadAssist() to initialize it.`; + if (!payloadAssistConfig) + throw new PayloadAssistError( + `PayloadAssist is not initialized. Use payloadAssist() to initialize it.` + ); return payloadAssistConfig.transformAndValidate(dto, data); }; diff --git a/src/utils/with-dto-read-hook.ts b/src/utils/with-dto-read-hook.ts index a0c0a2b..0d667d4 100644 --- a/src/utils/with-dto-read-hook.ts +++ b/src/utils/with-dto-read-hook.ts @@ -1,6 +1,7 @@ import type { CollectionAfterReadHook } from "payload"; import { Dto } from "../types/dto"; import { payloadAssistConfig as payloadAssistConfig } from "./payload-assist"; +import PayloadAssistError from "../types/PayloadAssistError"; /** * Dtos is an array of objects with the following properties: @@ -39,7 +40,7 @@ type afterReadHook = CollectionAfterReadHook & { */ export const withDtoReadHook = (dtos: Dtos) => { const afterReadHook: afterReadHook = async (args) => { - if (!payloadAssistConfig) throw `PayloadAssist is not initialized. Use payloadAssist() to initialize it.`; + if (!payloadAssistConfig) throw new PayloadAssistError(`PayloadAssist is not initialized. Use payloadAssist() to initialize it.`); const { doc, req } = args; if (req.payloadAPI === "local") return doc; // requests from local payload api don't require DTOs