From 1af94901a3e11bfe4d98ad01e7cacc672f12115e Mon Sep 17 00:00:00 2001 From: Sasha <64744993+r1tsuu@users.noreply.github.com> Date: Sat, 21 Dec 2024 03:12:07 +0200 Subject: [PATCH] inputschema --- .../plugin-scheduled-publish/src/index.ts | 88 ++++------ .../plugin-scheduled-publish/payload-types.ts | 160 +++++++++++++++++- 2 files changed, 190 insertions(+), 58 deletions(-) diff --git a/packages/plugin-scheduled-publish/src/index.ts b/packages/plugin-scheduled-publish/src/index.ts index bff074bdd1..c48085e517 100644 --- a/packages/plugin-scheduled-publish/src/index.ts +++ b/packages/plugin-scheduled-publish/src/index.ts @@ -1,4 +1,4 @@ -import type { Config, TaskHandlerArgs, VersionedCollectionSlug } from 'payload' +import type { Config, Field, TaskHandlerArgs, VersionedCollectionSlug } from 'payload' type Options = { collections: Partial> @@ -11,6 +11,34 @@ type PublishDocumentInput = { } export const pluginScheduledPublish = (options: Options) => { + const inputSchema: Field[] = [ + { + name: 'collectionSlug', + type: 'select', + options: Object.keys(options.collections), + required: true, + }, + { + name: 'documentID', + type: 'json', + jsonSchema: { + fileMatch: ['a://b/foo.json'], + schema: { + oneOf: [ + { + type: 'string', + }, + { + type: 'number', + }, + ], + }, + uri: 'a://b/foo.json', + }, + required: true, + }, + ] + return (config: Config) => { if (options.disabled) { return config @@ -33,8 +61,6 @@ export const pluginScheduledPublish = (options: Options) => { }, }) } - - return config } if (!config.jobs) { @@ -65,33 +91,7 @@ export const pluginScheduledPublish = (options: Options) => { state: 'succeeded', } }, - inputSchema: [ - { - name: 'collectionSlug', - type: 'select', - options: Object.keys(options.collections), - required: true, - }, - { - name: 'documentID', - type: 'json', - jsonSchema: { - fileMatch: ['a://b/foo.json'], - schema: { - oneOf: [ - { - type: 'string', - }, - { - type: 'number', - }, - ], - required: true, - }, - uri: 'a://b/foo.json', - }, - }, - ], + inputSchema, }) config.jobs.tasks.push({ @@ -116,33 +116,7 @@ export const pluginScheduledPublish = (options: Options) => { state: 'succeeded', } }, - inputSchema: [ - { - name: 'collectionSlug', - type: 'select', - options: Object.keys(options.collections), - required: true, - }, - { - name: 'documentID', - type: 'json', - jsonSchema: { - fileMatch: ['a://b/foo.json'], - schema: { - oneOf: [ - { - type: 'string', - }, - { - type: 'number', - }, - ], - required: true, - }, - uri: 'a://b/foo.json', - }, - }, - ], + inputSchema, }) return config diff --git a/test/plugin-scheduled-publish/payload-types.ts b/test/plugin-scheduled-publish/payload-types.ts index a9b49e6a59..603ecc0681 100644 --- a/test/plugin-scheduled-publish/payload-types.ts +++ b/test/plugin-scheduled-publish/payload-types.ts @@ -13,6 +13,7 @@ export interface Config { collections: { posts: Post; users: User; + 'payload-jobs': PayloadJob; 'payload-locked-documents': PayloadLockedDocument; 'payload-preferences': PayloadPreference; 'payload-migrations': PayloadMigration; @@ -21,6 +22,7 @@ export interface Config { collectionsSelect: { posts: PostsSelect | PostsSelect; users: UsersSelect | UsersSelect; + 'payload-jobs': PayloadJobsSelect | PayloadJobsSelect; 'payload-locked-documents': PayloadLockedDocumentsSelect | PayloadLockedDocumentsSelect; 'payload-preferences': PayloadPreferencesSelect | PayloadPreferencesSelect; 'payload-migrations': PayloadMigrationsSelect | PayloadMigrationsSelect; @@ -35,7 +37,14 @@ export interface Config { collection: 'users'; }; jobs: { - tasks: unknown; + tasks: { + PublishDocument: TaskPublishDocument; + UnpublishDocument: TaskUnpublishDocument; + inline: { + input: unknown; + output: unknown; + }; + }; workflows: unknown; }; } @@ -85,6 +94,98 @@ export interface User { lockUntil?: string | null; password?: string | null; } +/** + * This interface was referenced by `Config`'s JSON-Schema + * via the `definition` "payload-jobs". + */ +export interface PayloadJob { + id: string; + /** + * Input data provided to the job + */ + input?: + | { + [k: string]: unknown; + } + | unknown[] + | string + | number + | boolean + | null; + taskStatus?: + | { + [k: string]: unknown; + } + | unknown[] + | string + | number + | boolean + | null; + completedAt?: string | null; + totalTried?: number | null; + /** + * If hasError is true this job will not be retried + */ + hasError?: boolean | null; + /** + * If hasError is true, this is the error that caused it + */ + error?: + | { + [k: string]: unknown; + } + | unknown[] + | string + | number + | boolean + | null; + /** + * Task execution log + */ + log?: + | { + executedAt: string; + completedAt: string; + taskSlug: 'inline' | 'PublishDocument' | 'UnpublishDocument'; + taskID: string; + input?: + | { + [k: string]: unknown; + } + | unknown[] + | string + | number + | boolean + | null; + output?: + | { + [k: string]: unknown; + } + | unknown[] + | string + | number + | boolean + | null; + state: 'failed' | 'succeeded'; + error?: + | { + [k: string]: unknown; + } + | unknown[] + | string + | number + | boolean + | null; + id?: string | null; + }[] + | null; + taskSlug?: ('inline' | 'PublishDocument' | 'UnpublishDocument') | null; + queue?: string | null; + waitUntil?: string | null; + processing?: boolean | null; + updatedAt: string; + createdAt: string; +} /** * This interface was referenced by `Config`'s JSON-Schema * via the `definition` "payload-locked-documents". @@ -99,6 +200,10 @@ export interface PayloadLockedDocument { | ({ relationTo: 'users'; value: string | User; + } | null) + | ({ + relationTo: 'payload-jobs'; + value: string | PayloadJob; } | null); globalSlug?: string | null; user: { @@ -167,6 +272,37 @@ export interface UsersSelect { loginAttempts?: T; lockUntil?: T; } +/** + * This interface was referenced by `Config`'s JSON-Schema + * via the `definition` "payload-jobs_select". + */ +export interface PayloadJobsSelect { + input?: T; + taskStatus?: T; + completedAt?: T; + totalTried?: T; + hasError?: T; + error?: T; + log?: + | T + | { + executedAt?: T; + completedAt?: T; + taskSlug?: T; + taskID?: T; + input?: T; + output?: T; + state?: T; + error?: T; + id?: T; + }; + taskSlug?: T; + queue?: T; + waitUntil?: T; + processing?: T; + updatedAt?: T; + createdAt?: T; +} /** * This interface was referenced by `Config`'s JSON-Schema * via the `definition` "payload-locked-documents_select". @@ -199,6 +335,28 @@ export interface PayloadMigrationsSelect { updatedAt?: T; createdAt?: T; } +/** + * This interface was referenced by `Config`'s JSON-Schema + * via the `definition` "TaskPublishDocument". + */ +export interface TaskPublishDocument { + input: { + collectionSlug: 'posts'; + documentID: string | number; + }; + output?: unknown; +} +/** + * This interface was referenced by `Config`'s JSON-Schema + * via the `definition` "TaskUnpublishDocument". + */ +export interface TaskUnpublishDocument { + input: { + collectionSlug: 'posts'; + documentID: string | number; + }; + output?: unknown; +} /** * This interface was referenced by `Config`'s JSON-Schema * via the `definition` "auth".