payload 3.70.0 → 3.71.0-internal-debug.cd77e5d
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/collections/config/types.d.ts +9 -2
- package/dist/collections/config/types.d.ts.map +1 -1
- package/dist/collections/config/types.js.map +1 -1
- package/dist/collections/operations/local/find.d.ts +7 -3
- package/dist/collections/operations/local/find.d.ts.map +1 -1
- package/dist/collections/operations/local/find.js.map +1 -1
- package/dist/config/sanitize.d.ts.map +1 -1
- package/dist/config/sanitize.js +6 -8
- package/dist/config/sanitize.js.map +1 -1
- package/dist/config/types.d.ts +7 -0
- package/dist/config/types.d.ts.map +1 -1
- package/dist/config/types.js.map +1 -1
- package/dist/fields/baseFields/timezone/baseField.d.ts +4 -1
- package/dist/fields/baseFields/timezone/baseField.d.ts.map +1 -1
- package/dist/fields/baseFields/timezone/baseField.js +2 -1
- package/dist/fields/baseFields/timezone/baseField.js.map +1 -1
- package/dist/fields/config/client.d.ts.map +1 -1
- package/dist/fields/config/client.js +10 -0
- package/dist/fields/config/client.js.map +1 -1
- package/dist/fields/config/sanitize.d.ts.map +1 -1
- package/dist/fields/config/sanitize.js +14 -1
- package/dist/fields/config/sanitize.js.map +1 -1
- package/dist/fields/config/types.d.ts +33 -2
- package/dist/fields/config/types.d.ts.map +1 -1
- package/dist/fields/config/types.js.map +1 -1
- package/dist/fields/hooks/afterRead/index.d.ts.map +1 -1
- package/dist/fields/hooks/afterRead/index.js +1 -0
- package/dist/fields/hooks/afterRead/index.js.map +1 -1
- package/dist/fields/hooks/afterRead/promise.d.ts +9 -1
- package/dist/fields/hooks/afterRead/promise.d.ts.map +1 -1
- package/dist/fields/hooks/afterRead/promise.js +15 -2
- package/dist/fields/hooks/afterRead/promise.js.map +1 -1
- package/dist/fields/hooks/afterRead/traverseFields.d.ts +9 -1
- package/dist/fields/hooks/afterRead/traverseFields.d.ts.map +1 -1
- package/dist/fields/hooks/afterRead/traverseFields.js +2 -1
- package/dist/fields/hooks/afterRead/traverseFields.js.map +1 -1
- package/dist/index.bundled.d.ts +108 -23
- package/dist/index.d.ts +7 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/queues/config/types/index.d.ts +8 -10
- package/dist/queues/config/types/index.d.ts.map +1 -1
- package/dist/queues/config/types/index.js.map +1 -1
- package/dist/queues/config/types/taskTypes.d.ts +16 -6
- package/dist/queues/config/types/taskTypes.d.ts.map +1 -1
- package/dist/queues/config/types/taskTypes.js.map +1 -1
- package/dist/queues/config/types/workflowTypes.d.ts +2 -2
- package/dist/queues/config/types/workflowTypes.d.ts.map +1 -1
- package/dist/queues/config/types/workflowTypes.js.map +1 -1
- package/dist/queues/errors/index.d.ts +5 -6
- package/dist/queues/errors/index.d.ts.map +1 -1
- package/dist/queues/errors/index.js +6 -5
- package/dist/queues/errors/index.js.map +1 -1
- package/dist/queues/operations/runJobs/index.d.ts +1 -1
- package/dist/queues/operations/runJobs/index.d.ts.map +1 -1
- package/dist/queues/operations/runJobs/index.js +28 -6
- package/dist/queues/operations/runJobs/index.js.map +1 -1
- package/dist/queues/operations/runJobs/runJob/getRunTaskFunction.d.ts.map +1 -1
- package/dist/queues/operations/runJobs/runJob/getRunTaskFunction.js +5 -1
- package/dist/queues/operations/runJobs/runJob/getRunTaskFunction.js.map +1 -1
- package/dist/queues/operations/runJobs/runJob/getUpdateJobFunction.js +1 -3
- package/dist/queues/operations/runJobs/runJob/getUpdateJobFunction.js.map +1 -1
- package/dist/types/index.d.ts +3 -1
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js.map +1 -1
- package/dist/utilities/configToJSONSchema.d.ts.map +1 -1
- package/dist/utilities/configToJSONSchema.js +14 -1
- package/dist/utilities/configToJSONSchema.js.map +1 -1
- package/dist/utilities/isolateObjectProperty.d.ts.map +1 -1
- package/dist/utilities/isolateObjectProperty.js +7 -4
- package/dist/utilities/isolateObjectProperty.js.map +1 -1
- package/dist/utilities/isolateObjectProperty.spec.js +120 -0
- package/dist/utilities/isolateObjectProperty.spec.js.map +1 -0
- package/dist/utilities/optionsAreEqual.d.ts +7 -0
- package/dist/utilities/optionsAreEqual.d.ts.map +1 -0
- package/dist/utilities/optionsAreEqual.js +35 -0
- package/dist/utilities/optionsAreEqual.js.map +1 -0
- package/dist/utilities/optionsAreEqual.spec.js +319 -0
- package/dist/utilities/optionsAreEqual.spec.js.map +1 -0
- package/dist/utilities/validateTimezones.d.ts +20 -0
- package/dist/utilities/validateTimezones.d.ts.map +1 -0
- package/dist/utilities/validateTimezones.js +76 -0
- package/dist/utilities/validateTimezones.js.map +1 -0
- package/dist/utilities/validateTimezones.spec.js +493 -0
- package/dist/utilities/validateTimezones.spec.js.map +1 -0
- package/package.json +2 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../src/queues/operations/runJobs/runJob/getUpdateJobFunction.ts"],"sourcesContent":["import type { Job } from '../../../../index.js'\nimport type { PayloadRequest } from '../../../../types/index.js'\n\nimport { JobCancelledError } from '../../../errors/index.js'\nimport { updateJob } from '../../../utilities/updateJob.js'\n\nexport type UpdateJobFunction = (jobData: Partial<Job>) => Promise<Job>\n\n/**\n * Helper for updating a job that does the following, additionally to updating the job:\n * - Merges incoming data from the updated job into the original job object\n * - Handles job cancellation by throwing a `JobCancelledError` if the job was cancelled.\n */\nexport function getUpdateJobFunction(job: Job, req: PayloadRequest): UpdateJobFunction {\n return async (jobData) => {\n const updatedJob = await updateJob({\n id: job.id,\n data: jobData,\n depth: req.payload.config.jobs.depth,\n disableTransaction: true,\n req,\n })\n\n if (!updatedJob) {\n return job\n }\n\n // Update job object like this to modify the original object - that way, incoming changes (e.g. taskStatus field that will be re-generated through the hook) will be reflected in the calling function\n for (const key in updatedJob) {\n if (key === 'log') {\n // Add all new log entries to the original job.log object. Do not delete any existing log entries.\n // Do not update existing log entries, as existing log entries should be immutable.\n for (const logEntry of updatedJob?.log ?? []) {\n if (!job.log || !job.log.some((entry) => entry.id === logEntry.id)) {\n ;(job.log ??= []).push(logEntry)\n }\n }\n } else {\n ;(job as any)[key] = updatedJob[key as keyof Job]\n }\n }\n\n if ((updatedJob?.error as Record<string, unknown>)?.cancelled) {\n throw new JobCancelledError({
|
|
1
|
+
{"version":3,"sources":["../../../../../src/queues/operations/runJobs/runJob/getUpdateJobFunction.ts"],"sourcesContent":["import type { Job } from '../../../../index.js'\nimport type { PayloadRequest } from '../../../../types/index.js'\n\nimport { JobCancelledError } from '../../../errors/index.js'\nimport { updateJob } from '../../../utilities/updateJob.js'\n\nexport type UpdateJobFunction = (jobData: Partial<Job>) => Promise<Job>\n\n/**\n * Helper for updating a job that does the following, additionally to updating the job:\n * - Merges incoming data from the updated job into the original job object\n * - Handles job cancellation by throwing a `JobCancelledError` if the job was cancelled.\n */\nexport function getUpdateJobFunction(job: Job, req: PayloadRequest): UpdateJobFunction {\n return async (jobData) => {\n const updatedJob = await updateJob({\n id: job.id,\n data: jobData,\n depth: req.payload.config.jobs.depth,\n disableTransaction: true,\n req,\n })\n\n if (!updatedJob) {\n return job\n }\n\n // Update job object like this to modify the original object - that way, incoming changes (e.g. taskStatus field that will be re-generated through the hook) will be reflected in the calling function\n for (const key in updatedJob) {\n if (key === 'log') {\n // Add all new log entries to the original job.log object. Do not delete any existing log entries.\n // Do not update existing log entries, as existing log entries should be immutable.\n for (const logEntry of updatedJob?.log ?? []) {\n if (!job.log || !job.log.some((entry) => entry.id === logEntry.id)) {\n ;(job.log ??= []).push(logEntry)\n }\n }\n } else {\n ;(job as any)[key] = updatedJob[key as keyof Job]\n }\n }\n\n if ((updatedJob?.error as Record<string, unknown>)?.cancelled) {\n throw new JobCancelledError(`Job ${job.id} was cancelled`)\n }\n\n return updatedJob\n }\n}\n"],"names":["JobCancelledError","updateJob","getUpdateJobFunction","job","req","jobData","updatedJob","id","data","depth","payload","config","jobs","disableTransaction","key","logEntry","log","some","entry","push","error","cancelled"],"mappings":"AAGA,SAASA,iBAAiB,QAAQ,2BAA0B;AAC5D,SAASC,SAAS,QAAQ,kCAAiC;AAI3D;;;;CAIC,GACD,OAAO,SAASC,qBAAqBC,GAAQ,EAAEC,GAAmB;IAChE,OAAO,OAAOC;QACZ,MAAMC,aAAa,MAAML,UAAU;YACjCM,IAAIJ,IAAII,EAAE;YACVC,MAAMH;YACNI,OAAOL,IAAIM,OAAO,CAACC,MAAM,CAACC,IAAI,CAACH,KAAK;YACpCI,oBAAoB;YACpBT;QACF;QAEA,IAAI,CAACE,YAAY;YACf,OAAOH;QACT;QAEA,sMAAsM;QACtM,IAAK,MAAMW,OAAOR,WAAY;YAC5B,IAAIQ,QAAQ,OAAO;gBACjB,kGAAkG;gBAClG,mFAAmF;gBACnF,KAAK,MAAMC,YAAYT,YAAYU,OAAO,EAAE,CAAE;oBAC5C,IAAI,CAACb,IAAIa,GAAG,IAAI,CAACb,IAAIa,GAAG,CAACC,IAAI,CAAC,CAACC,QAAUA,MAAMX,EAAE,KAAKQ,SAASR,EAAE,GAAG;;wBAChEJ,CAAAA,IAAIa,GAAG,KAAK,EAAE,AAAD,EAAGG,IAAI,CAACJ;oBACzB;gBACF;YACF,OAAO;;gBACHZ,GAAW,CAACW,IAAI,GAAGR,UAAU,CAACQ,IAAiB;YACnD;QACF;QAEA,IAAKR,YAAYc,OAAmCC,WAAW;YAC7D,MAAM,IAAIrB,kBAAkB,CAAC,IAAI,EAAEG,IAAII,EAAE,CAAC,cAAc,CAAC;QAC3D;QAEA,OAAOD;IACT;AACF"}
|
package/dist/types/index.d.ts
CHANGED
|
@@ -2,7 +2,7 @@ import type { I18n, TFunction } from '@payloadcms/translations';
|
|
|
2
2
|
import type DataLoader from 'dataloader';
|
|
3
3
|
import type { OptionalKeys, RequiredKeys } from 'ts-essentials';
|
|
4
4
|
import type { URL } from 'url';
|
|
5
|
-
import type { DataFromCollectionSlug, TypeWithID, TypeWithTimestamps } from '../collections/config/types.js';
|
|
5
|
+
import type { DataFromCollectionSlug, QueryDraftDataFromCollectionSlug, TypeWithID, TypeWithTimestamps } from '../collections/config/types.js';
|
|
6
6
|
import type payload from '../index.js';
|
|
7
7
|
import type { CollectionSlug, DataFromGlobalSlug, GlobalSlug, Payload, RequestContext, TypedCollectionJoins, TypedCollectionSelect, TypedFallbackLocale, TypedLocale, TypedUser } from '../index.js';
|
|
8
8
|
import type { Operator } from './constants.js';
|
|
@@ -158,10 +158,12 @@ export type TransformDataWithSelect<Data extends Record<string, any>, Select ext
|
|
|
158
158
|
[K in keyof Data as K extends keyof Select ? Select[K] extends object | undefined ? K : never : K]: Data[K];
|
|
159
159
|
};
|
|
160
160
|
export type TransformCollectionWithSelect<TSlug extends CollectionSlug, TSelect extends SelectType> = TSelect extends SelectType ? TransformDataWithSelect<DataFromCollectionSlug<TSlug>, TSelect> : DataFromCollectionSlug<TSlug>;
|
|
161
|
+
export type DraftTransformCollectionWithSelect<TSlug extends CollectionSlug, TSelect extends SelectType> = TSelect extends SelectType ? TransformDataWithSelect<QueryDraftDataFromCollectionSlug<TSlug>, TSelect> : QueryDraftDataFromCollectionSlug<TSlug>;
|
|
161
162
|
export type TransformGlobalWithSelect<TSlug extends GlobalSlug, TSelect extends SelectType> = TSelect extends SelectType ? TransformDataWithSelect<DataFromGlobalSlug<TSlug>, TSelect> : DataFromGlobalSlug<TSlug>;
|
|
162
163
|
export type PopulateType = Partial<TypedCollectionSelect>;
|
|
163
164
|
export type ResolvedFilterOptions = {
|
|
164
165
|
[collection: string]: Where;
|
|
165
166
|
};
|
|
166
167
|
export type PickPreserveOptional<T, K extends keyof T> = Partial<Pick<T, Extract<K, OptionalKeys<T>>>> & Pick<T, Extract<K, RequiredKeys<T>>>;
|
|
168
|
+
export type MaybePromise<T> = Promise<T> | T;
|
|
167
169
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"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"}
|
package/dist/types/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/types/index.ts"],"sourcesContent":["import type { I18n, TFunction } from '@payloadcms/translations'\nimport type DataLoader from 'dataloader'\nimport type { OptionalKeys, RequiredKeys } from 'ts-essentials'\nimport type { URL } from 'url'\n\nimport type {\n DataFromCollectionSlug,\n TypeWithID,\n TypeWithTimestamps,\n} from '../collections/config/types.js'\nimport type payload from '../index.js'\nimport type {\n CollectionSlug,\n DataFromGlobalSlug,\n GlobalSlug,\n Payload,\n RequestContext,\n TypedCollectionJoins,\n TypedCollectionSelect,\n TypedFallbackLocale,\n TypedLocale,\n TypedUser,\n} from '../index.js'\nimport type { Operator } from './constants.js'\nexport type { Payload } from '../index.js'\n\nexport type CustomPayloadRequestProperties = {\n context: RequestContext\n /** The locale that should be used for a field when it is not translated to the requested locale */\n fallbackLocale?: TypedFallbackLocale\n i18n: I18n\n /**\n * The requested locale if specified\n * Only available for localized collections\n *\n * Suppressing warning below as it is a valid use case - won't be an issue if generated types exist\n */\n // eslint-disable-next-line @typescript-eslint/no-redundant-type-constituents\n locale?: 'all' | TypedLocale\n /**\n * The payload object\n */\n payload: typeof payload\n /**\n * The context in which the request is being made\n */\n payloadAPI: 'GraphQL' | 'local' | 'REST'\n /** Optimized document loader */\n payloadDataLoader: {\n /**\n * Wraps `payload.find` with a cache to deduplicate requests\n * @experimental This is may be replaced by a more robust cache strategy in future versions\n * By calling this method with the same arguments many times in one request, it will only be handled one time\n * const result = await req.payloadDataLoader.find({\n * collection,\n * req,\n * where: findWhere,\n * })\n */\n find: Payload['find']\n } & DataLoader<string, TypeWithID>\n /** Resized versions of the image that was uploaded during this request */\n payloadUploadSizes?: Record<string, Buffer>\n /** Query params on the request */\n query: Record<string, unknown>\n /** Any response headers that are required to be set when a response is sent */\n responseHeaders?: Headers\n /** The route parameters\n * @example\n * /:collection/:id -> /posts/123\n * { collection: 'posts', id: '123' }\n */\n routeParams?: Record<string, unknown>\n /** Translate function - duplicate of i18n.t */\n t: TFunction\n /**\n * Identifier for the database transaction for interactions in a single, all-or-nothing operation.\n * Can also be used to ensure consistency when multiple operations try to create a transaction concurrently on the same request.\n */\n transactionID?: number | Promise<number | string> | string\n /**\n * Used to ensure consistency when multiple operations try to create a transaction concurrently on the same request\n * @deprecated This is not used anywhere, instead `transactionID` is used for the above. Will be removed in next major version.\n */\n transactionIDPromise?: Promise<void>\n /** The signed-in user */\n user: null | TypedUser\n} & Pick<\n URL,\n 'hash' | 'host' | 'href' | 'origin' | 'pathname' | 'port' | 'protocol' | 'search' | 'searchParams'\n>\ntype PayloadRequestData = {\n /**\n * Data from the request body\n *\n * Within Payload operations, i.e. hooks, data will be there\n * BUT in custom endpoints it will not be, you will need to\n * use either:\n * 1. `const data = await req.json()`\n *\n * 2. import { addDataAndFileToRequest } from 'payload'\n * `await addDataAndFileToRequest(req)`\n *\n * You should not expect this object to be the document data. It is the request data.\n * */\n data?: JsonObject\n /** The file on the request, same rules apply as the `data` property */\n file?: {\n /**\n * Context of the file when it was uploaded via client side.\n */\n clientUploadContext?: unknown\n data: Buffer\n mimetype: string\n name: string\n size: number\n tempFilePath?: string\n }\n}\nexport interface PayloadRequest\n extends CustomPayloadRequestProperties,\n Partial<Request>,\n PayloadRequestData {\n headers: Request['headers']\n}\n\nexport type { Operator }\n\n// Makes it so things like passing new Date() will error\nexport type JsonValue = JsonArray | JsonObject | unknown //Date | JsonArray | JsonObject | boolean | null | number | string // TODO: Evaluate proper, strong type for this\n\nexport type JsonArray = Array<JsonValue>\n\nexport interface JsonObject {\n [key: string]: any\n}\n\nexport type WhereField = {\n // any json-serializable value\n [key in Operator]?: JsonValue\n}\n\nexport type Where = {\n [key: string]: Where[] | WhereField\n // @ts-expect-error - vestiges of when tsconfig was not strict. Feel free to improve\n and?: Where[]\n // @ts-expect-error - vestiges of when tsconfig was not strict. Feel free to improve\n or?: Where[]\n}\n\nexport type Sort = Array<string> | string\n\ntype SerializableValue = boolean | number | object | string\nexport type DefaultValue =\n | ((args: {\n locale?: TypedLocale\n req: PayloadRequest\n user: PayloadRequest['user']\n }) => SerializableValue)\n | SerializableValue\n\n/**\n * Applies pagination for join fields for including collection relationships\n */\nexport type JoinQuery<TSlug extends CollectionSlug = string> =\n TypedCollectionJoins[TSlug] extends Record<string, string>\n ?\n | false\n | Partial<{\n [K in keyof TypedCollectionJoins[TSlug]]:\n | {\n count?: boolean\n limit?: number\n page?: number\n sort?: string\n where?: Where\n }\n | false\n }>\n : never\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport type Document = any\n\nexport type Operation = 'create' | 'delete' | 'read' | 'update'\nexport type VersionOperations = 'readVersions'\nexport type AuthOperations = 'unlock'\nexport type AllOperations = AuthOperations | Operation | VersionOperations\n\nexport function docHasTimestamps(doc: any): doc is TypeWithTimestamps {\n return doc?.createdAt && doc?.updatedAt\n}\n\nexport type IfAny<T, Y, N> = 0 extends 1 & T ? Y : N // This is a commonly used trick to detect 'any'\nexport type IsAny<T> = IfAny<T, true, false>\nexport type ReplaceAny<T, DefaultType> = IsAny<T> extends true ? DefaultType : T\n\nexport type SelectIncludeType = {\n [k: string]: SelectIncludeType | true\n}\n\nexport type SelectExcludeType = {\n [k: string]: false | SelectExcludeType\n}\n\nexport type SelectMode = 'exclude' | 'include'\n\nexport type SelectType = SelectExcludeType | SelectIncludeType\n\nexport type ApplyDisableErrors<T, DisableErrors = false> = false extends DisableErrors\n ? T\n : null | T\n\nexport type TransformDataWithSelect<\n Data extends Record<string, any>,\n Select extends SelectType,\n> = Select extends never\n ? Data\n : string extends keyof Select\n ? Data\n : // START Handle types when they aren't generated\n // For example in any package in this repository outside of tests / plugins\n // This stil gives us autocomplete when using include select mode, i.e select: {title :true} returns type {title: any, id: string | number}\n string extends keyof Omit<Data, 'id'>\n ? Select extends SelectIncludeType\n ? {\n [K in Data extends TypeWithID ? 'id' | keyof Select : keyof Select]: K extends 'id'\n ? number | string\n : unknown\n }\n : Data\n : // END Handle types when they aren't generated\n // Handle include mode\n Select extends SelectIncludeType\n ? {\n [K in keyof Data as K extends keyof Select\n ? Select[K] extends object | true\n ? K\n : never\n : // select 'id' always\n K extends 'id'\n ? K\n : never]: Data[K]\n }\n : // Handle exclude mode\n {\n [K in keyof Data as K extends keyof Select\n ? Select[K] extends object | undefined\n ? K\n : never\n : K]: Data[K]\n }\n\nexport type TransformCollectionWithSelect<\n TSlug extends CollectionSlug,\n TSelect extends SelectType,\n> = TSelect extends SelectType\n ? TransformDataWithSelect<DataFromCollectionSlug<TSlug>, TSelect>\n : DataFromCollectionSlug<TSlug>\n\nexport type TransformGlobalWithSelect<\n TSlug extends GlobalSlug,\n TSelect extends SelectType,\n> = TSelect extends SelectType\n ? TransformDataWithSelect<DataFromGlobalSlug<TSlug>, TSelect>\n : DataFromGlobalSlug<TSlug>\n\nexport type PopulateType = Partial<TypedCollectionSelect>\n\nexport type ResolvedFilterOptions = { [collection: string]: Where }\n\nexport type PickPreserveOptional<T, K extends keyof T> = Partial<\n Pick<T, Extract<K, OptionalKeys<T>>>\n> &\n Pick<T, Extract<K, RequiredKeys<T>>>\n"],"names":["docHasTimestamps","doc","createdAt","updatedAt"],"mappings":"
|
|
1
|
+
{"version":3,"sources":["../../src/types/index.ts"],"sourcesContent":["import type { I18n, TFunction } from '@payloadcms/translations'\nimport type DataLoader from 'dataloader'\nimport type { OptionalKeys, RequiredKeys } from 'ts-essentials'\nimport type { URL } from 'url'\n\nimport type {\n DataFromCollectionSlug,\n QueryDraftDataFromCollectionSlug,\n TypeWithID,\n TypeWithTimestamps,\n} from '../collections/config/types.js'\nimport type payload from '../index.js'\nimport type {\n CollectionSlug,\n DataFromGlobalSlug,\n GlobalSlug,\n Payload,\n RequestContext,\n TypedCollectionJoins,\n TypedCollectionSelect,\n TypedFallbackLocale,\n TypedLocale,\n TypedUser,\n} from '../index.js'\nimport type { Operator } from './constants.js'\nexport type { Payload } from '../index.js'\n\nexport type CustomPayloadRequestProperties = {\n context: RequestContext\n /** The locale that should be used for a field when it is not translated to the requested locale */\n fallbackLocale?: TypedFallbackLocale\n i18n: I18n\n /**\n * The requested locale if specified\n * Only available for localized collections\n *\n * Suppressing warning below as it is a valid use case - won't be an issue if generated types exist\n */\n // eslint-disable-next-line @typescript-eslint/no-redundant-type-constituents\n locale?: 'all' | TypedLocale\n /**\n * The payload object\n */\n payload: typeof payload\n /**\n * The context in which the request is being made\n */\n payloadAPI: 'GraphQL' | 'local' | 'REST'\n /** Optimized document loader */\n payloadDataLoader: {\n /**\n * Wraps `payload.find` with a cache to deduplicate requests\n * @experimental This is may be replaced by a more robust cache strategy in future versions\n * By calling this method with the same arguments many times in one request, it will only be handled one time\n * const result = await req.payloadDataLoader.find({\n * collection,\n * req,\n * where: findWhere,\n * })\n */\n find: Payload['find']\n } & DataLoader<string, TypeWithID>\n /** Resized versions of the image that was uploaded during this request */\n payloadUploadSizes?: Record<string, Buffer>\n /** Query params on the request */\n query: Record<string, unknown>\n /** Any response headers that are required to be set when a response is sent */\n responseHeaders?: Headers\n /** The route parameters\n * @example\n * /:collection/:id -> /posts/123\n * { collection: 'posts', id: '123' }\n */\n routeParams?: Record<string, unknown>\n /** Translate function - duplicate of i18n.t */\n t: TFunction\n /**\n * Identifier for the database transaction for interactions in a single, all-or-nothing operation.\n * Can also be used to ensure consistency when multiple operations try to create a transaction concurrently on the same request.\n */\n transactionID?: number | Promise<number | string> | string\n /**\n * Used to ensure consistency when multiple operations try to create a transaction concurrently on the same request\n * @deprecated This is not used anywhere, instead `transactionID` is used for the above. Will be removed in next major version.\n */\n transactionIDPromise?: Promise<void>\n /** The signed-in user */\n user: null | TypedUser\n} & Pick<\n URL,\n 'hash' | 'host' | 'href' | 'origin' | 'pathname' | 'port' | 'protocol' | 'search' | 'searchParams'\n>\ntype PayloadRequestData = {\n /**\n * Data from the request body\n *\n * Within Payload operations, i.e. hooks, data will be there\n * BUT in custom endpoints it will not be, you will need to\n * use either:\n * 1. `const data = await req.json()`\n *\n * 2. import { addDataAndFileToRequest } from 'payload'\n * `await addDataAndFileToRequest(req)`\n *\n * You should not expect this object to be the document data. It is the request data.\n * */\n data?: JsonObject\n /** The file on the request, same rules apply as the `data` property */\n file?: {\n /**\n * Context of the file when it was uploaded via client side.\n */\n clientUploadContext?: unknown\n data: Buffer\n mimetype: string\n name: string\n size: number\n tempFilePath?: string\n }\n}\nexport interface PayloadRequest\n extends CustomPayloadRequestProperties,\n Partial<Request>,\n PayloadRequestData {\n headers: Request['headers']\n}\n\nexport type { Operator }\n\n// Makes it so things like passing new Date() will error\nexport type JsonValue = JsonArray | JsonObject | unknown //Date | JsonArray | JsonObject | boolean | null | number | string // TODO: Evaluate proper, strong type for this\n\nexport type JsonArray = Array<JsonValue>\n\nexport interface JsonObject {\n [key: string]: any\n}\n\nexport type WhereField = {\n // any json-serializable value\n [key in Operator]?: JsonValue\n}\n\nexport type Where = {\n [key: string]: Where[] | WhereField\n // @ts-expect-error - vestiges of when tsconfig was not strict. Feel free to improve\n and?: Where[]\n // @ts-expect-error - vestiges of when tsconfig was not strict. Feel free to improve\n or?: Where[]\n}\n\nexport type Sort = Array<string> | string\n\ntype SerializableValue = boolean | number | object | string\nexport type DefaultValue =\n | ((args: {\n locale?: TypedLocale\n req: PayloadRequest\n user: PayloadRequest['user']\n }) => SerializableValue)\n | SerializableValue\n\n/**\n * Applies pagination for join fields for including collection relationships\n */\nexport type JoinQuery<TSlug extends CollectionSlug = string> =\n TypedCollectionJoins[TSlug] extends Record<string, string>\n ?\n | false\n | Partial<{\n [K in keyof TypedCollectionJoins[TSlug]]:\n | {\n count?: boolean\n limit?: number\n page?: number\n sort?: string\n where?: Where\n }\n | false\n }>\n : never\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport type Document = any\n\nexport type Operation = 'create' | 'delete' | 'read' | 'update'\nexport type VersionOperations = 'readVersions'\nexport type AuthOperations = 'unlock'\nexport type AllOperations = AuthOperations | Operation | VersionOperations\n\nexport function docHasTimestamps(doc: any): doc is TypeWithTimestamps {\n return doc?.createdAt && doc?.updatedAt\n}\n\nexport type IfAny<T, Y, N> = 0 extends 1 & T ? Y : N // This is a commonly used trick to detect 'any'\nexport type IsAny<T> = IfAny<T, true, false>\nexport type ReplaceAny<T, DefaultType> = IsAny<T> extends true ? DefaultType : T\n\nexport type SelectIncludeType = {\n [k: string]: SelectIncludeType | true\n}\n\nexport type SelectExcludeType = {\n [k: string]: false | SelectExcludeType\n}\n\nexport type SelectMode = 'exclude' | 'include'\n\nexport type SelectType = SelectExcludeType | SelectIncludeType\n\nexport type ApplyDisableErrors<T, DisableErrors = false> = false extends DisableErrors\n ? T\n : null | T\n\nexport type TransformDataWithSelect<\n Data extends Record<string, any>,\n Select extends SelectType,\n> = Select extends never\n ? Data\n : string extends keyof Select\n ? Data\n : // START Handle types when they aren't generated\n // For example in any package in this repository outside of tests / plugins\n // This stil gives us autocomplete when using include select mode, i.e select: {title :true} returns type {title: any, id: string | number}\n string extends keyof Omit<Data, 'id'>\n ? Select extends SelectIncludeType\n ? {\n [K in Data extends TypeWithID ? 'id' | keyof Select : keyof Select]: K extends 'id'\n ? number | string\n : unknown\n }\n : Data\n : // END Handle types when they aren't generated\n // Handle include mode\n Select extends SelectIncludeType\n ? {\n [K in keyof Data as K extends keyof Select\n ? Select[K] extends object | true\n ? K\n : never\n : // select 'id' always\n K extends 'id'\n ? K\n : never]: Data[K]\n }\n : // Handle exclude mode\n {\n [K in keyof Data as K extends keyof Select\n ? Select[K] extends object | undefined\n ? K\n : never\n : K]: Data[K]\n }\n\nexport type TransformCollectionWithSelect<\n TSlug extends CollectionSlug,\n TSelect extends SelectType,\n> = TSelect extends SelectType\n ? TransformDataWithSelect<DataFromCollectionSlug<TSlug>, TSelect>\n : DataFromCollectionSlug<TSlug>\n\nexport type DraftTransformCollectionWithSelect<\n TSlug extends CollectionSlug,\n TSelect extends SelectType,\n> = TSelect extends SelectType\n ? TransformDataWithSelect<QueryDraftDataFromCollectionSlug<TSlug>, TSelect>\n : QueryDraftDataFromCollectionSlug<TSlug>\n\nexport type TransformGlobalWithSelect<\n TSlug extends GlobalSlug,\n TSelect extends SelectType,\n> = TSelect extends SelectType\n ? TransformDataWithSelect<DataFromGlobalSlug<TSlug>, TSelect>\n : DataFromGlobalSlug<TSlug>\n\nexport type PopulateType = Partial<TypedCollectionSelect>\n\nexport type ResolvedFilterOptions = { [collection: string]: Where }\n\nexport type PickPreserveOptional<T, K extends keyof T> = Partial<\n Pick<T, Extract<K, OptionalKeys<T>>>\n> &\n Pick<T, Extract<K, RequiredKeys<T>>>\n\nexport type MaybePromise<T> = Promise<T> | T\n"],"names":["docHasTimestamps","doc","createdAt","updatedAt"],"mappings":"AA8LA,OAAO,SAASA,iBAAiBC,GAAQ;IACvC,OAAOA,KAAKC,aAAaD,KAAKE;AAChC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"configToJSONSchema.d.ts","sourceRoot":"","sources":["../../src/utilities/configToJSONSchema.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,0BAA0B,CAAA;AACpD,OAAO,KAAK,EAAE,WAAW,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAA;AAGnE,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAA;AAC/E,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AACzD,OAAO,KAAK,EAAsB,cAAc,EAAU,MAAM,2BAA2B,CAAA;AAC3F,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAA;
|
|
1
|
+
{"version":3,"file":"configToJSONSchema.d.ts","sourceRoot":"","sources":["../../src/utilities/configToJSONSchema.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,0BAA0B,CAAA;AACpD,OAAO,KAAK,EAAE,WAAW,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAA;AAGnE,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAA;AAC/E,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AACzD,OAAO,KAAK,EAAsB,cAAc,EAAU,MAAM,2BAA2B,CAAA;AAC3F,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAA;AAqNvE;;GAEG;AACH,wBAAgB,0BAA0B,CACxC,SAAS,EAAE,mBAAmB,EAC9B,UAAU,EAAE,OAAO,GAClB,mBAAmB,GAAG,mBAAmB,EAAE,CAO7C;AA2BD,wBAAgB,kBAAkB;AAChC;;;;GAIG;AACH,sBAAsB,EAAE;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,QAAQ,GAAG,QAAQ,CAAA;CAAE,EAC9D,MAAM,EAAE,cAAc,EAAE;AACxB;;GAEG;AACH,wBAAwB,EAAE,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,EAClD,MAAM,CAAC,EAAE,eAAe,EACxB,IAAI,CAAC,EAAE,IAAI,GACV;IACD,UAAU,EAAE;QACV,CAAC,CAAC,EAAE,MAAM,GAAG,WAAW,CAAA;KACzB,CAAA;IACD,QAAQ,EAAE,MAAM,EAAE,CAAA;CACnB,CA4eA;AAGD,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,eAAe,EACvB,MAAM,EAAE,yBAAyB,GAAG,qBAAqB,EACzD,wBAAwB,EAAE,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,EAClD,aAAa,EAAE,QAAQ,GAAG,MAAM,EAChC,sBAAsB,CAAC,EAAE;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,QAAQ,GAAG,QAAQ,CAAA;CAAE,EAC/D,IAAI,CAAC,EAAE,IAAI,GACV,WAAW,CAwEb;AAED,wBAAgB,wBAAwB,CAAC,EACvC,MAAM,EACN,MAAM,EACN,wBAAwB,GACzB,EAAE;IACD,MAAM,EAAE,eAAe,CAAA;IACvB,MAAM,EAAE,cAAc,EAAE,CAAA;IACxB,wBAAwB,EAAE,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,CAAA;CACnD,GAAG,WAAW,CAgGd;AAgHD,wBAAgB,oCAAoC,CAClD,MAAM,EAAE,yBAAyB,GAChC,WAAW,CA0Bb;AAGD,wBAAgB,qBAAqB,CACnC,kBAAkB,EAAE,eAAe,CAAC,OAAO,CAAC,CAAC,WAAW,CAAC,CAAC,oBAAoB,CAAC,GAC9E,WAAW,CAOb;AAuBD;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,eAAe,EACvB,aAAa,CAAC,EAAE,QAAQ,GAAG,MAAM,EACjC,IAAI,CAAC,EAAE,IAAI,GACV,WAAW,CA2Lb"}
|
|
@@ -3,6 +3,7 @@ import { fieldAffectsData } from '../fields/config/types.js';
|
|
|
3
3
|
import { generateJobsJSONSchemas } from '../queues/config/generateJobsJSONSchemas.js';
|
|
4
4
|
import { formatNames } from './formatLabels.js';
|
|
5
5
|
import { getCollectionIDFieldTypes } from './getCollectionIDFieldTypes.js';
|
|
6
|
+
import { optionsAreEqual } from './optionsAreEqual.js';
|
|
6
7
|
const fieldIsRequired = (field)=>{
|
|
7
8
|
const isConditional = Boolean(field?.admin && field?.admin?.condition);
|
|
8
9
|
if (isConditional) {
|
|
@@ -627,8 +628,11 @@ export function fieldsToJSONSchema(/**
|
|
|
627
628
|
// This works because timezone selects are always inserted right after a date with 'timezone: true'
|
|
628
629
|
const previousField = fields?.[index - 1];
|
|
629
630
|
const isTimezoneField = previousField?.type === 'date' && previousField.timezone && field.name.includes('_tz');
|
|
631
|
+
// Check if the timezone field's options match the global config's supported timezones
|
|
632
|
+
const hasMatchingGlobalTimezones = isTimezoneField && config && optionsAreEqual(field.options, config.admin?.timezones?.supportedTimezones);
|
|
630
633
|
// Timezone selects should reference the supportedTimezones definition
|
|
631
|
-
if
|
|
634
|
+
// only if the field's options match the global config
|
|
635
|
+
if (isTimezoneField && hasMatchingGlobalTimezones) {
|
|
632
636
|
fieldSchema = {
|
|
633
637
|
$ref: `#/definitions/supportedTimezones`
|
|
634
638
|
};
|
|
@@ -1154,6 +1158,12 @@ function generateAuthOperationSchemas(collections) {
|
|
|
1154
1158
|
globals: generateEntitySchemas(config.globals || []),
|
|
1155
1159
|
globalsSelect: generateEntitySelectSchemas(config.globals || []),
|
|
1156
1160
|
locale: generateLocaleEntitySchemas(config.localization),
|
|
1161
|
+
...config.typescript?.strictDraftTypes ? {
|
|
1162
|
+
strictDraftTypes: {
|
|
1163
|
+
type: 'boolean',
|
|
1164
|
+
const: true
|
|
1165
|
+
}
|
|
1166
|
+
} : {},
|
|
1157
1167
|
user: generateAuthEntitySchemas(config.collections)
|
|
1158
1168
|
},
|
|
1159
1169
|
required: [
|
|
@@ -1164,6 +1174,9 @@ function generateAuthOperationSchemas(collections) {
|
|
|
1164
1174
|
'collectionsSelect',
|
|
1165
1175
|
'collectionsJoins',
|
|
1166
1176
|
'globalsSelect',
|
|
1177
|
+
...config.typescript?.strictDraftTypes ? [
|
|
1178
|
+
'strictDraftTypes'
|
|
1179
|
+
] : [],
|
|
1167
1180
|
'globals',
|
|
1168
1181
|
'auth',
|
|
1169
1182
|
'db',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/utilities/configToJSONSchema.ts"],"sourcesContent":["import type { I18n } from '@payloadcms/translations'\nimport type { JSONSchema4, JSONSchema4TypeName } from 'json-schema'\n\nimport type { Auth } from '../auth/types.js'\nimport type { SanitizedCollectionConfig } from '../collections/config/types.js'\nimport type { SanitizedConfig } from '../config/types.js'\nimport type { FieldAffectingData, FlattenedField, Option } from '../fields/config/types.js'\nimport type { SanitizedGlobalConfig } from '../globals/config/types.js'\n\nimport { MissingEditorProp } from '../errors/MissingEditorProp.js'\nimport { fieldAffectsData } from '../fields/config/types.js'\nimport { generateJobsJSONSchemas } from '../queues/config/generateJobsJSONSchemas.js'\nimport { formatNames } from './formatLabels.js'\nimport { getCollectionIDFieldTypes } from './getCollectionIDFieldTypes.js'\n\nconst fieldIsRequired = (field: FlattenedField): boolean => {\n const isConditional = Boolean(field?.admin && field?.admin?.condition)\n if (isConditional) {\n return false\n }\n\n const isMarkedRequired = 'required' in field && field.required === true\n if (fieldAffectsData(field) && isMarkedRequired) {\n return true\n }\n\n // if any subfields are required, this field is required\n if ('fields' in field && field.type !== 'array') {\n return field.flattenedFields.some((subField) => fieldIsRequired(subField))\n }\n\n return false\n}\n\nfunction buildOptionEnums(options: Option[]): string[] {\n return options.map((option) => {\n if (typeof option === 'object' && 'value' in option) {\n return option.value\n }\n\n return option\n })\n}\n\nfunction generateEntitySchemas(\n entities: (SanitizedCollectionConfig | SanitizedGlobalConfig)[],\n): JSONSchema4 {\n const properties = [...entities].reduce(\n (acc, { slug }) => {\n acc[slug] = {\n $ref: `#/definitions/${slug}`,\n }\n\n return acc\n },\n {} as Record<string, JSONSchema4>,\n )\n\n return {\n type: 'object',\n additionalProperties: false,\n properties,\n required: Object.keys(properties),\n }\n}\n\nfunction generateEntitySelectSchemas(\n entities: (SanitizedCollectionConfig | SanitizedGlobalConfig)[],\n): JSONSchema4 {\n const properties = [...entities].reduce(\n (acc, { slug }) => {\n acc[slug] = {\n $ref: `#/definitions/${slug}_select`,\n }\n\n return acc\n },\n {} as Record<string, JSONSchema4>,\n )\n\n return {\n type: 'object',\n additionalProperties: false,\n properties,\n required: Object.keys(properties),\n }\n}\n\nfunction generateCollectionJoinsSchemas(collections: SanitizedCollectionConfig[]): JSONSchema4 {\n const properties = [...collections].reduce<Record<string, JSONSchema4>>(\n (acc, { slug, joins, polymorphicJoins }) => {\n const schema = {\n type: 'object',\n additionalProperties: false,\n properties: {},\n required: [] as string[],\n } satisfies JSONSchema4\n\n for (const collectionSlug in joins) {\n for (const join of joins[collectionSlug]!) {\n ;(schema.properties as any)[join.joinPath] = {\n type: 'string',\n enum: [collectionSlug],\n }\n schema.required.push(join.joinPath)\n }\n }\n\n for (const join of polymorphicJoins) {\n ;(schema.properties as any)[join.joinPath] = {\n type: 'string',\n enum: join.field.collection,\n }\n schema.required.push(join.joinPath)\n }\n\n if (Object.keys(schema.properties).length > 0) {\n acc[slug] = schema\n }\n\n return acc\n },\n {},\n )\n\n return {\n type: 'object',\n additionalProperties: false,\n properties,\n required: Object.keys(properties),\n }\n}\n\nfunction generateLocaleEntitySchemas(localization: SanitizedConfig['localization']): JSONSchema4 {\n if (localization && 'locales' in localization && localization?.locales) {\n const localesFromConfig = localization?.locales\n\n const locales = [...localesFromConfig].map((locale) => {\n return locale.code\n }, [])\n\n return {\n type: 'string',\n enum: locales,\n }\n }\n\n return {\n type: 'null',\n }\n}\n\nfunction generateFallbackLocaleEntitySchemas(\n localization: SanitizedConfig['localization'],\n): JSONSchema4 {\n if (localization && 'localeCodes' in localization && localization?.localeCodes) {\n const localeCodes = [...localization.localeCodes].map((localeCode) => {\n return localeCode\n }, [])\n\n return {\n oneOf: [\n { type: 'string', enum: ['false', 'none', 'null'] },\n { type: 'boolean', enum: [false] },\n { type: 'null' },\n { type: 'string', enum: localeCodes },\n { type: 'array', items: { type: 'string', enum: localeCodes } },\n ],\n }\n }\n\n return {\n type: 'null',\n }\n}\n\nfunction generateAuthEntitySchemas(entities: SanitizedCollectionConfig[]): JSONSchema4 {\n const properties: JSONSchema4[] = [...entities]\n .filter(({ auth }) => Boolean(auth))\n .map(({ slug }) => {\n return {\n allOf: [\n { $ref: `#/definitions/${slug}` },\n {\n type: 'object',\n additionalProperties: false,\n properties: {\n collection: { type: 'string', enum: [slug] },\n },\n required: ['collection'],\n },\n ],\n }\n }, {})\n\n return {\n oneOf: properties,\n }\n}\n\n/**\n * Generates the JSON Schema for database configuration\n *\n * @example { db: idType: string }\n */\nfunction generateDbEntitySchema(config: SanitizedConfig): JSONSchema4 {\n const defaultIDType: JSONSchema4 =\n config.db?.defaultIDType === 'number' ? { type: 'number' } : { type: 'string' }\n\n return {\n type: 'object',\n additionalProperties: false,\n properties: {\n defaultIDType,\n },\n required: ['defaultIDType'],\n }\n}\n\n/**\n * Returns a JSON Schema Type with 'null' added if the field is not required.\n */\nexport function withNullableJSONSchemaType(\n fieldType: JSONSchema4TypeName,\n isRequired: boolean,\n): JSONSchema4TypeName | JSONSchema4TypeName[] {\n const fieldTypes = [fieldType]\n if (isRequired) {\n return fieldType\n }\n fieldTypes.push('null')\n return fieldTypes\n}\n\nfunction entityOrFieldToJsDocs({\n entity,\n i18n,\n}: {\n entity: FlattenedField | SanitizedCollectionConfig | SanitizedGlobalConfig\n i18n?: I18n\n}): string | undefined {\n let description: string | undefined = undefined\n if (entity?.admin?.description) {\n if (typeof entity?.admin?.description === 'string') {\n description = entity?.admin?.description\n } else if (typeof entity?.admin?.description === 'object') {\n if (entity?.admin?.description?.en) {\n description = entity?.admin?.description?.en\n } else if (entity?.admin?.description?.[i18n!.language]) {\n description = entity?.admin?.description?.[i18n!.language]\n }\n } else if (typeof entity?.admin?.description === 'function' && i18n) {\n // do not evaluate description functions for generating JSDocs. The output of\n // those can differ depending on where and when they are called, creating\n // inconsistencies in the generated JSDocs.\n }\n }\n return description\n}\nexport function fieldsToJSONSchema(\n /**\n * Used for relationship fields, to determine whether to use a string or number type for the ID.\n * While there is a default ID field type set by the db adapter, they can differ on a collection-level\n * if they have custom ID fields.\n */\n collectionIDFieldTypes: { [key: string]: 'number' | 'string' },\n fields: FlattenedField[],\n /**\n * Allows you to define new top-level interfaces that can be re-used in the output schema.\n */\n interfaceNameDefinitions: Map<string, JSONSchema4>,\n config?: SanitizedConfig,\n i18n?: I18n,\n): {\n properties: {\n [k: string]: JSONSchema4\n }\n required: string[]\n} {\n const requiredFieldNames = new Set<string>()\n\n return {\n properties: Object.fromEntries(\n fields.reduce((fieldSchemas, field, index) => {\n const isRequired = fieldAffectsData(field) && fieldIsRequired(field)\n\n const fieldDescription = entityOrFieldToJsDocs({ entity: field, i18n })\n const baseFieldSchema: JSONSchema4 = {}\n if (fieldDescription) {\n baseFieldSchema.description = fieldDescription\n }\n\n let fieldSchema: JSONSchema4\n\n switch (field.type) {\n case 'array': {\n fieldSchema = {\n ...baseFieldSchema,\n type: withNullableJSONSchemaType('array', isRequired),\n items: {\n type: 'object',\n additionalProperties: false,\n ...fieldsToJSONSchema(\n collectionIDFieldTypes,\n field.flattenedFields,\n interfaceNameDefinitions,\n config,\n i18n,\n ),\n },\n }\n\n if (field.interfaceName) {\n interfaceNameDefinitions.set(field.interfaceName, fieldSchema)\n\n fieldSchema = {\n $ref: `#/definitions/${field.interfaceName}`,\n }\n }\n break\n }\n case 'blocks': {\n // Check for a case where no blocks are provided.\n // We need to generate an empty array for this case, note that JSON schema 4 doesn't support empty arrays\n // so the best we can get is `unknown[]`\n const hasBlocks = Boolean(\n field.blockReferences ? field.blockReferences.length : field.blocks.length,\n )\n\n fieldSchema = {\n ...baseFieldSchema,\n type: withNullableJSONSchemaType('array', isRequired),\n items: hasBlocks\n ? {\n oneOf: (field.blockReferences ?? field.blocks).map((block) => {\n if (typeof block === 'string') {\n const resolvedBlock = config?.blocks?.find((b) => b.slug === block)\n return {\n $ref: `#/definitions/${resolvedBlock!.interfaceName ?? resolvedBlock!.slug}`,\n }\n }\n const blockFieldSchemas = fieldsToJSONSchema(\n collectionIDFieldTypes,\n block.flattenedFields,\n interfaceNameDefinitions,\n config,\n i18n,\n )\n\n const blockSchema: JSONSchema4 = {\n type: 'object',\n additionalProperties: false,\n properties: {\n ...blockFieldSchemas.properties,\n blockType: {\n const: block.slug,\n },\n },\n required: ['blockType', ...blockFieldSchemas.required],\n }\n\n if (block.interfaceName) {\n interfaceNameDefinitions.set(block.interfaceName, blockSchema)\n\n return {\n $ref: `#/definitions/${block.interfaceName}`,\n }\n }\n\n return blockSchema\n }),\n }\n : {},\n }\n break\n }\n case 'checkbox': {\n fieldSchema = {\n ...baseFieldSchema,\n type: withNullableJSONSchemaType('boolean', isRequired),\n }\n break\n }\n case 'code':\n case 'date':\n case 'email':\n case 'textarea': {\n fieldSchema = {\n ...baseFieldSchema,\n type: withNullableJSONSchemaType('string', isRequired),\n }\n break\n }\n\n case 'group': {\n if (fieldAffectsData(field)) {\n fieldSchema = {\n ...baseFieldSchema,\n type: 'object',\n additionalProperties: false,\n ...fieldsToJSONSchema(\n collectionIDFieldTypes,\n field.flattenedFields,\n interfaceNameDefinitions,\n config,\n i18n,\n ),\n }\n\n if (field.interfaceName) {\n interfaceNameDefinitions.set(field.interfaceName, fieldSchema)\n\n fieldSchema = { $ref: `#/definitions/${field.interfaceName}` }\n }\n }\n break\n }\n\n case 'join': {\n let items: JSONSchema4\n\n if (Array.isArray(field.collection)) {\n items = {\n oneOf: field.collection.map((collection) => ({\n type: 'object',\n additionalProperties: false,\n properties: {\n relationTo: {\n const: collection,\n },\n value: {\n oneOf: [\n {\n type: collectionIDFieldTypes[collection],\n },\n {\n $ref: `#/definitions/${collection}`,\n },\n ],\n },\n },\n required: ['collectionSlug', 'value'],\n })),\n }\n } else {\n items = {\n oneOf: [\n {\n type: collectionIDFieldTypes[field.collection],\n },\n {\n $ref: `#/definitions/${field.collection}`,\n },\n ],\n }\n }\n\n fieldSchema = {\n ...baseFieldSchema,\n type: 'object',\n additionalProperties: false,\n properties: {\n docs: {\n type: 'array',\n items,\n },\n hasNextPage: { type: 'boolean' },\n totalDocs: { type: 'number' },\n },\n }\n break\n }\n\n case 'json': {\n fieldSchema = field.jsonSchema?.schema || {\n ...baseFieldSchema,\n type: ['object', 'array', 'string', 'number', 'boolean', 'null'],\n }\n break\n }\n\n case 'number': {\n if (field.hasMany === true) {\n fieldSchema = {\n ...baseFieldSchema,\n type: withNullableJSONSchemaType('array', isRequired),\n items: { type: 'number' },\n }\n } else {\n fieldSchema = {\n ...baseFieldSchema,\n type: withNullableJSONSchemaType('number', isRequired),\n }\n }\n break\n }\n\n case 'point': {\n fieldSchema = {\n ...baseFieldSchema,\n type: withNullableJSONSchemaType('array', isRequired),\n items: [\n {\n type: 'number',\n },\n {\n type: 'number',\n },\n ],\n maxItems: 2,\n minItems: 2,\n }\n break\n }\n\n case 'radio': {\n fieldSchema = {\n ...baseFieldSchema,\n type: withNullableJSONSchemaType('string', isRequired),\n enum: buildOptionEnums(field.options),\n }\n\n if (field.interfaceName) {\n interfaceNameDefinitions.set(field.interfaceName, fieldSchema)\n\n fieldSchema = {\n $ref: `#/definitions/${field.interfaceName}`,\n }\n }\n\n break\n }\n case 'relationship':\n case 'upload': {\n if (Array.isArray(field.relationTo)) {\n if (field.hasMany) {\n fieldSchema = {\n ...baseFieldSchema,\n type: withNullableJSONSchemaType('array', isRequired),\n items: {\n oneOf: field.relationTo.map((relation) => {\n return {\n type: 'object',\n additionalProperties: false,\n properties: {\n relationTo: {\n const: relation,\n },\n value: {\n oneOf: [\n {\n type: collectionIDFieldTypes[relation],\n },\n {\n $ref: `#/definitions/${relation}`,\n },\n ],\n },\n },\n required: ['value', 'relationTo'],\n }\n }),\n },\n }\n } else {\n fieldSchema = {\n ...baseFieldSchema,\n oneOf: field.relationTo.map((relation) => {\n return {\n type: withNullableJSONSchemaType('object', isRequired),\n additionalProperties: false,\n properties: {\n relationTo: {\n const: relation,\n },\n value: {\n oneOf: [\n {\n type: collectionIDFieldTypes[relation],\n },\n {\n $ref: `#/definitions/${relation}`,\n },\n ],\n },\n },\n required: ['value', 'relationTo'],\n }\n }),\n }\n }\n } else if (field.hasMany) {\n fieldSchema = {\n ...baseFieldSchema,\n type: withNullableJSONSchemaType('array', isRequired),\n items: {\n oneOf: [\n {\n type: collectionIDFieldTypes[field.relationTo],\n },\n {\n $ref: `#/definitions/${field.relationTo}`,\n },\n ],\n },\n }\n } else {\n fieldSchema = {\n ...baseFieldSchema,\n oneOf: [\n {\n type: withNullableJSONSchemaType(\n collectionIDFieldTypes[field.relationTo]!,\n isRequired,\n ),\n },\n { $ref: `#/definitions/${field.relationTo}` },\n ],\n }\n }\n\n break\n }\n case 'richText': {\n if (!field?.editor) {\n throw new MissingEditorProp(field) // while we allow disabling editor functionality, you should not have any richText fields defined if you do not have an editor\n }\n if (typeof field.editor === 'function') {\n throw new Error('Attempted to access unsanitized rich text editor.')\n }\n if (field.editor.outputSchema) {\n fieldSchema = {\n ...baseFieldSchema,\n ...field.editor.outputSchema({\n collectionIDFieldTypes,\n config,\n field,\n i18n,\n interfaceNameDefinitions,\n isRequired,\n }),\n }\n } else {\n // Maintain backwards compatibility with existing rich text editors\n fieldSchema = {\n ...baseFieldSchema,\n type: withNullableJSONSchemaType('array', isRequired),\n items: {\n type: 'object',\n },\n }\n }\n\n break\n }\n\n case 'select': {\n const optionEnums = buildOptionEnums(field.options)\n // We get the previous field to check for a date in the case of a timezone select\n // This works because timezone selects are always inserted right after a date with 'timezone: true'\n const previousField = fields?.[index - 1]\n const isTimezoneField =\n previousField?.type === 'date' && previousField.timezone && field.name.includes('_tz')\n\n // Timezone selects should reference the supportedTimezones definition\n if (isTimezoneField) {\n fieldSchema = {\n $ref: `#/definitions/supportedTimezones`,\n }\n } else {\n if (field.hasMany) {\n fieldSchema = {\n ...baseFieldSchema,\n type: withNullableJSONSchemaType('array', isRequired),\n items: {\n type: 'string',\n },\n }\n if (optionEnums?.length) {\n ;(fieldSchema.items as JSONSchema4).enum = optionEnums\n }\n } else {\n fieldSchema = {\n ...baseFieldSchema,\n type: withNullableJSONSchemaType('string', isRequired),\n }\n if (optionEnums?.length) {\n fieldSchema.enum = optionEnums\n }\n }\n\n if (field.interfaceName) {\n interfaceNameDefinitions.set(field.interfaceName, fieldSchema)\n\n fieldSchema = {\n $ref: `#/definitions/${field.interfaceName}`,\n }\n }\n break\n }\n\n break\n }\n case 'tab': {\n fieldSchema = {\n ...baseFieldSchema,\n type: 'object',\n additionalProperties: false,\n ...fieldsToJSONSchema(\n collectionIDFieldTypes,\n field.flattenedFields,\n interfaceNameDefinitions,\n config,\n i18n,\n ),\n }\n\n if (field.interfaceName) {\n interfaceNameDefinitions.set(field.interfaceName, fieldSchema)\n\n fieldSchema = { $ref: `#/definitions/${field.interfaceName}` }\n }\n break\n }\n\n case 'text':\n if (field.hasMany === true) {\n fieldSchema = {\n ...baseFieldSchema,\n type: withNullableJSONSchemaType('array', isRequired),\n items: { type: 'string' },\n }\n } else {\n fieldSchema = {\n ...baseFieldSchema,\n type: withNullableJSONSchemaType('string', isRequired),\n }\n }\n break\n\n default: {\n break\n }\n }\n\n if ('typescriptSchema' in field && field?.typescriptSchema?.length) {\n for (const schema of field.typescriptSchema) {\n fieldSchema = schema({ jsonSchema: fieldSchema! })\n }\n }\n\n if (fieldSchema! && fieldAffectsData(field)) {\n if (isRequired && fieldSchema.required !== false) {\n requiredFieldNames.add(field.name)\n }\n fieldSchemas.set(field.name, fieldSchema)\n }\n\n return fieldSchemas\n }, new Map<string, JSONSchema4>()),\n ),\n required: Array.from(requiredFieldNames),\n }\n}\n\n// This function is part of the public API and is exported through payload/utilities\nexport function entityToJSONSchema(\n config: SanitizedConfig,\n entity: SanitizedCollectionConfig | SanitizedGlobalConfig,\n interfaceNameDefinitions: Map<string, JSONSchema4>,\n defaultIDType: 'number' | 'text',\n collectionIDFieldTypes?: { [key: string]: 'number' | 'string' },\n i18n?: I18n,\n): JSONSchema4 {\n if (!collectionIDFieldTypes) {\n collectionIDFieldTypes = getCollectionIDFieldTypes({ config, defaultIDType })\n }\n\n const title = entity.typescript?.interface\n ? entity.typescript.interface\n : formatNames(entity.slug).singular\n\n let mutableFields = [...entity.flattenedFields]\n\n const idField: FieldAffectingData = { name: 'id', type: defaultIDType as 'text', required: true }\n const customIdField = mutableFields.find((field) => field.name === 'id') as FieldAffectingData\n\n if (customIdField && customIdField.type !== 'group' && customIdField.type !== 'tab') {\n mutableFields = mutableFields.map((field) => {\n if (field === customIdField) {\n return { ...field, required: true }\n }\n\n return field\n })\n } else {\n mutableFields.unshift(idField)\n }\n\n // mark timestamp fields required\n if ('timestamps' in entity && entity.timestamps !== false) {\n mutableFields = mutableFields.map((field) => {\n if (field.name === 'createdAt' || field.name === 'updatedAt') {\n return {\n ...field,\n required: true,\n }\n }\n return field\n })\n }\n\n if (\n 'auth' in entity &&\n entity.auth &&\n (!entity.auth?.disableLocalStrategy ||\n (typeof entity.auth?.disableLocalStrategy === 'object' &&\n entity.auth.disableLocalStrategy.enableFields))\n ) {\n mutableFields.push({\n name: 'password',\n type: 'text',\n })\n }\n\n const jsonSchema: JSONSchema4 = {\n type: 'object',\n additionalProperties: false,\n title,\n ...fieldsToJSONSchema(\n collectionIDFieldTypes,\n mutableFields,\n interfaceNameDefinitions,\n config,\n i18n,\n ),\n }\n\n const entityDescription = entityOrFieldToJsDocs({ entity, i18n })\n\n if (entityDescription) {\n jsonSchema.description = entityDescription\n }\n\n return jsonSchema\n}\n\nexport function fieldsToSelectJSONSchema({\n config,\n fields,\n interfaceNameDefinitions,\n}: {\n config: SanitizedConfig\n fields: FlattenedField[]\n interfaceNameDefinitions: Map<string, JSONSchema4>\n}): JSONSchema4 {\n const schema: JSONSchema4 = {\n type: 'object',\n additionalProperties: false,\n properties: {},\n }\n\n for (const field of fields) {\n switch (field.type) {\n case 'array':\n case 'group':\n case 'tab': {\n let fieldSchema: JSONSchema4 = fieldsToSelectJSONSchema({\n config,\n fields: field.flattenedFields,\n interfaceNameDefinitions,\n })\n\n if (field.interfaceName) {\n const definition = `${field.interfaceName}_select`\n interfaceNameDefinitions.set(definition, fieldSchema)\n\n fieldSchema = {\n $ref: `#/definitions/${definition}`,\n }\n }\n\n schema.properties![field.name] = {\n oneOf: [\n {\n type: 'boolean',\n },\n fieldSchema,\n ],\n }\n\n break\n }\n\n case 'blocks': {\n const blocksSchema: JSONSchema4 = {\n type: 'object',\n additionalProperties: false,\n properties: {},\n }\n\n for (const block of field.blockReferences ?? field.blocks) {\n if (typeof block === 'string') {\n continue // TODO\n }\n\n let blockSchema = fieldsToSelectJSONSchema({\n config,\n fields: block.flattenedFields,\n interfaceNameDefinitions,\n })\n\n if (block.interfaceName) {\n const definition = `${block.interfaceName}_select`\n interfaceNameDefinitions.set(definition, blockSchema)\n blockSchema = {\n $ref: `#/definitions/${definition}`,\n }\n }\n\n blocksSchema.properties![block.slug] = {\n oneOf: [\n {\n type: 'boolean',\n },\n blockSchema,\n ],\n }\n }\n\n schema.properties![field.name] = {\n oneOf: [\n {\n type: 'boolean',\n },\n blocksSchema,\n ],\n }\n\n break\n }\n\n default:\n schema.properties![field.name] = {\n type: 'boolean',\n }\n break\n }\n }\n\n return schema\n}\n\nconst fieldType: JSONSchema4 = {\n type: 'string',\n required: false,\n}\nconst generateAuthFieldTypes = ({\n type,\n loginWithUsername,\n}: {\n loginWithUsername: Auth['loginWithUsername']\n type: 'forgotOrUnlock' | 'login' | 'register'\n}): JSONSchema4 => {\n if (loginWithUsername) {\n switch (type) {\n case 'forgotOrUnlock': {\n if (loginWithUsername.allowEmailLogin) {\n // allow email or username for unlock/forgot-password\n return {\n additionalProperties: false,\n oneOf: [\n {\n additionalProperties: false,\n properties: { email: fieldType },\n required: ['email'],\n },\n {\n additionalProperties: false,\n properties: { username: fieldType },\n required: ['username'],\n },\n ],\n }\n } else {\n // allow only username for unlock/forgot-password\n return {\n additionalProperties: false,\n properties: { username: fieldType },\n required: ['username'],\n }\n }\n }\n\n case 'login': {\n if (loginWithUsername.allowEmailLogin) {\n // allow username or email and require password for login\n return {\n additionalProperties: false,\n oneOf: [\n {\n additionalProperties: false,\n properties: { email: fieldType, password: fieldType },\n required: ['email', 'password'],\n },\n {\n additionalProperties: false,\n properties: { password: fieldType, username: fieldType },\n required: ['username', 'password'],\n },\n ],\n }\n } else {\n // allow only username and password for login\n return {\n additionalProperties: false,\n properties: {\n password: fieldType,\n username: fieldType,\n },\n required: ['username', 'password'],\n }\n }\n }\n\n case 'register': {\n const requiredFields: ('email' | 'password' | 'username')[] = ['password']\n const properties: {\n email?: JSONSchema4['properties']\n password?: JSONSchema4['properties']\n username?: JSONSchema4['properties']\n } = {\n password: fieldType,\n username: fieldType,\n }\n\n if (loginWithUsername.requireEmail) {\n requiredFields.push('email')\n }\n if (loginWithUsername.requireUsername) {\n requiredFields.push('username')\n }\n if (loginWithUsername.requireEmail || loginWithUsername.allowEmailLogin) {\n properties.email = fieldType\n }\n\n return {\n additionalProperties: false,\n properties,\n required: requiredFields,\n }\n }\n }\n }\n\n // default email (and password for login/register)\n return {\n additionalProperties: false,\n properties: { email: fieldType, password: fieldType },\n required: ['email', 'password'],\n }\n}\n\nexport function authCollectionToOperationsJSONSchema(\n config: SanitizedCollectionConfig,\n): JSONSchema4 {\n const loginWithUsername = config.auth?.loginWithUsername\n const loginUserFields: JSONSchema4 = generateAuthFieldTypes({ type: 'login', loginWithUsername })\n const forgotOrUnlockUserFields: JSONSchema4 = generateAuthFieldTypes({\n type: 'forgotOrUnlock',\n loginWithUsername,\n })\n const registerUserFields: JSONSchema4 = generateAuthFieldTypes({\n type: 'register',\n loginWithUsername,\n })\n\n const properties: JSONSchema4['properties'] = {\n forgotPassword: forgotOrUnlockUserFields,\n login: loginUserFields,\n registerFirstUser: registerUserFields,\n unlock: forgotOrUnlockUserFields,\n }\n\n return {\n type: 'object',\n additionalProperties: false,\n properties,\n required: Object.keys(properties),\n title: `${formatNames(config.slug).singular}AuthOperations`,\n }\n}\n\n// Generates the JSON Schema for supported timezones\nexport function timezonesToJSONSchema(\n supportedTimezones: SanitizedConfig['admin']['timezones']['supportedTimezones'],\n): JSONSchema4 {\n return {\n description: 'Supported timezones in IANA format.',\n enum: supportedTimezones.map((timezone) =>\n typeof timezone === 'string' ? timezone : timezone.value,\n ),\n }\n}\n\nfunction generateAuthOperationSchemas(collections: SanitizedCollectionConfig[]): JSONSchema4 {\n const properties = collections.reduce(\n (acc, collection) => {\n if (collection.auth) {\n acc[collection.slug] = {\n $ref: `#/definitions/auth/${collection.slug}`,\n }\n }\n return acc\n },\n {} as Record<string, JSONSchema4>,\n )\n\n return {\n type: 'object',\n additionalProperties: false,\n properties,\n required: Object.keys(properties),\n }\n}\n\n/**\n * This is used for generating the TypeScript types (payload-types.ts) with the payload generate:types command.\n */\nexport function configToJSONSchema(\n config: SanitizedConfig,\n defaultIDType?: 'number' | 'text',\n i18n?: I18n,\n): JSONSchema4 {\n // a mutable Map to store custom top-level `interfaceName` types. Fields with an `interfaceName` property will be moved to the top-level definitions here\n const interfaceNameDefinitions: Map<string, JSONSchema4> = new Map()\n\n // Used for relationship fields, to determine whether to use a string or number type for the ID.\n const collectionIDFieldTypes = getCollectionIDFieldTypes({\n config,\n defaultIDType: defaultIDType!,\n })\n\n // Collections and Globals have to be moved to the top-level definitions as well. Reason: The top-level type will be the `Config` type - we don't want all collection and global\n // types to be inlined inside the `Config` type\n\n const entities: {\n entity: SanitizedCollectionConfig | SanitizedGlobalConfig\n type: 'collection' | 'global'\n }[] = [\n ...config.globals.map((global) => ({ type: 'global' as const, entity: global })),\n ...config.collections.map((collection) => ({\n type: 'collection' as const,\n entity: collection,\n })),\n ]\n\n const entityDefinitions: { [k: string]: JSONSchema4 } = entities.reduce(\n (acc, { type, entity }) => {\n acc[entity.slug] = entityToJSONSchema(\n config,\n entity,\n interfaceNameDefinitions,\n defaultIDType!,\n collectionIDFieldTypes,\n i18n,\n )\n const select = fieldsToSelectJSONSchema({\n config,\n fields: entity.flattenedFields,\n interfaceNameDefinitions,\n })\n\n if (type === 'global') {\n select.properties!.globalType = {\n type: 'boolean',\n }\n }\n\n acc[`${entity.slug}_select`] = {\n type: 'object',\n additionalProperties: false,\n ...select,\n }\n\n return acc\n },\n {} as Record<string, JSONSchema4>,\n )\n\n const timezoneDefinitions = timezonesToJSONSchema(config.admin.timezones.supportedTimezones)\n\n const authOperationDefinitions = [...config.collections]\n .filter(({ auth }) => Boolean(auth))\n .reduce(\n (acc, authCollection) => {\n acc.auth[authCollection.slug] = authCollectionToOperationsJSONSchema(authCollection)\n return acc\n },\n { auth: {} as Record<string, JSONSchema4> },\n )\n\n const jobsSchemas = config.jobs\n ? generateJobsJSONSchemas(\n config,\n config.jobs,\n interfaceNameDefinitions,\n collectionIDFieldTypes,\n i18n,\n )\n : {}\n\n const blocksDefinition: JSONSchema4 | undefined = {\n type: 'object',\n additionalProperties: false,\n properties: {},\n required: [],\n }\n if (config?.blocks?.length) {\n for (const block of config.blocks) {\n const blockFieldSchemas = fieldsToJSONSchema(\n collectionIDFieldTypes,\n block.flattenedFields,\n interfaceNameDefinitions,\n config,\n i18n,\n )\n\n const blockSchema: JSONSchema4 = {\n type: 'object',\n additionalProperties: false,\n properties: {\n ...blockFieldSchemas.properties,\n blockType: {\n const: block.slug,\n },\n },\n required: ['blockType', ...blockFieldSchemas.required],\n }\n\n const interfaceName = block.interfaceName ?? block.slug\n interfaceNameDefinitions.set(interfaceName, blockSchema)\n\n blocksDefinition.properties![block.slug] = {\n $ref: `#/definitions/${interfaceName}`,\n }\n ;(blocksDefinition.required as string[]).push(block.slug)\n }\n }\n\n let jsonSchema: JSONSchema4 = {\n additionalProperties: false,\n definitions: {\n supportedTimezones: timezoneDefinitions,\n ...entityDefinitions,\n ...Object.fromEntries(interfaceNameDefinitions),\n ...authOperationDefinitions,\n },\n // These properties here will be very simple, as all the complexity is in the definitions. These are just the properties for the top-level `Config` type\n type: 'object',\n properties: {\n auth: generateAuthOperationSchemas(config.collections),\n blocks: blocksDefinition,\n collections: generateEntitySchemas(config.collections || []),\n collectionsJoins: generateCollectionJoinsSchemas(config.collections || []),\n collectionsSelect: generateEntitySelectSchemas(config.collections || []),\n db: generateDbEntitySchema(config),\n fallbackLocale: generateFallbackLocaleEntitySchemas(config.localization),\n globals: generateEntitySchemas(config.globals || []),\n globalsSelect: generateEntitySelectSchemas(config.globals || []),\n locale: generateLocaleEntitySchemas(config.localization),\n user: generateAuthEntitySchemas(config.collections),\n },\n required: [\n 'user',\n 'locale',\n 'fallbackLocale',\n 'collections',\n 'collectionsSelect',\n 'collectionsJoins',\n 'globalsSelect',\n 'globals',\n 'auth',\n 'db',\n 'jobs',\n 'blocks',\n ],\n title: 'Config',\n }\n\n if (jobsSchemas.definitions?.size) {\n for (const [key, value] of jobsSchemas.definitions) {\n jsonSchema.definitions![key] = value\n }\n }\n if (jobsSchemas.properties) {\n jsonSchema.properties!.jobs = {\n type: 'object',\n additionalProperties: false,\n properties: jobsSchemas.properties,\n required: ['tasks', 'workflows'],\n }\n }\n\n if (config?.typescript?.schema?.length) {\n for (const schema of config.typescript.schema) {\n jsonSchema = schema({ collectionIDFieldTypes, config, i18n: i18n!, jsonSchema })\n }\n }\n\n return jsonSchema\n}\n"],"names":["MissingEditorProp","fieldAffectsData","generateJobsJSONSchemas","formatNames","getCollectionIDFieldTypes","fieldIsRequired","field","isConditional","Boolean","admin","condition","isMarkedRequired","required","type","flattenedFields","some","subField","buildOptionEnums","options","map","option","value","generateEntitySchemas","entities","properties","reduce","acc","slug","$ref","additionalProperties","Object","keys","generateEntitySelectSchemas","generateCollectionJoinsSchemas","collections","joins","polymorphicJoins","schema","collectionSlug","join","joinPath","enum","push","collection","length","generateLocaleEntitySchemas","localization","locales","localesFromConfig","locale","code","generateFallbackLocaleEntitySchemas","localeCodes","localeCode","oneOf","items","generateAuthEntitySchemas","filter","auth","allOf","generateDbEntitySchema","config","defaultIDType","db","withNullableJSONSchemaType","fieldType","isRequired","fieldTypes","entityOrFieldToJsDocs","entity","i18n","description","undefined","en","language","fieldsToJSONSchema","collectionIDFieldTypes","fields","interfaceNameDefinitions","requiredFieldNames","Set","fromEntries","fieldSchemas","index","fieldDescription","baseFieldSchema","fieldSchema","interfaceName","set","hasBlocks","blockReferences","blocks","block","resolvedBlock","find","b","blockFieldSchemas","blockSchema","blockType","const","Array","isArray","relationTo","docs","hasNextPage","totalDocs","jsonSchema","hasMany","maxItems","minItems","relation","editor","Error","outputSchema","optionEnums","previousField","isTimezoneField","timezone","name","includes","typescriptSchema","add","Map","from","entityToJSONSchema","title","typescript","interface","singular","mutableFields","idField","customIdField","unshift","timestamps","disableLocalStrategy","enableFields","entityDescription","fieldsToSelectJSONSchema","definition","blocksSchema","generateAuthFieldTypes","loginWithUsername","allowEmailLogin","email","username","password","requiredFields","requireEmail","requireUsername","authCollectionToOperationsJSONSchema","loginUserFields","forgotOrUnlockUserFields","registerUserFields","forgotPassword","login","registerFirstUser","unlock","timezonesToJSONSchema","supportedTimezones","generateAuthOperationSchemas","configToJSONSchema","globals","global","entityDefinitions","select","globalType","timezoneDefinitions","timezones","authOperationDefinitions","authCollection","jobsSchemas","jobs","blocksDefinition","definitions","collectionsJoins","collectionsSelect","fallbackLocale","globalsSelect","user","size","key"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../src/utilities/configToJSONSchema.ts"],"sourcesContent":["import type { I18n } from '@payloadcms/translations'\nimport type { JSONSchema4, JSONSchema4TypeName } from 'json-schema'\n\nimport type { Auth } from '../auth/types.js'\nimport type { SanitizedCollectionConfig } from '../collections/config/types.js'\nimport type { SanitizedConfig } from '../config/types.js'\nimport type { FieldAffectingData, FlattenedField, Option } from '../fields/config/types.js'\nimport type { SanitizedGlobalConfig } from '../globals/config/types.js'\n\nimport { MissingEditorProp } from '../errors/MissingEditorProp.js'\nimport { fieldAffectsData } from '../fields/config/types.js'\nimport { generateJobsJSONSchemas } from '../queues/config/generateJobsJSONSchemas.js'\nimport { formatNames } from './formatLabels.js'\nimport { getCollectionIDFieldTypes } from './getCollectionIDFieldTypes.js'\nimport { optionsAreEqual } from './optionsAreEqual.js'\n\nconst fieldIsRequired = (field: FlattenedField): boolean => {\n const isConditional = Boolean(field?.admin && field?.admin?.condition)\n if (isConditional) {\n return false\n }\n\n const isMarkedRequired = 'required' in field && field.required === true\n if (fieldAffectsData(field) && isMarkedRequired) {\n return true\n }\n\n // if any subfields are required, this field is required\n if ('fields' in field && field.type !== 'array') {\n return field.flattenedFields.some((subField) => fieldIsRequired(subField))\n }\n\n return false\n}\n\nfunction buildOptionEnums(options: Option[]): string[] {\n return options.map((option) => {\n if (typeof option === 'object' && 'value' in option) {\n return option.value\n }\n\n return option\n })\n}\n\nfunction generateEntitySchemas(\n entities: (SanitizedCollectionConfig | SanitizedGlobalConfig)[],\n): JSONSchema4 {\n const properties = [...entities].reduce(\n (acc, { slug }) => {\n acc[slug] = {\n $ref: `#/definitions/${slug}`,\n }\n\n return acc\n },\n {} as Record<string, JSONSchema4>,\n )\n\n return {\n type: 'object',\n additionalProperties: false,\n properties,\n required: Object.keys(properties),\n }\n}\n\nfunction generateEntitySelectSchemas(\n entities: (SanitizedCollectionConfig | SanitizedGlobalConfig)[],\n): JSONSchema4 {\n const properties = [...entities].reduce(\n (acc, { slug }) => {\n acc[slug] = {\n $ref: `#/definitions/${slug}_select`,\n }\n\n return acc\n },\n {} as Record<string, JSONSchema4>,\n )\n\n return {\n type: 'object',\n additionalProperties: false,\n properties,\n required: Object.keys(properties),\n }\n}\n\nfunction generateCollectionJoinsSchemas(collections: SanitizedCollectionConfig[]): JSONSchema4 {\n const properties = [...collections].reduce<Record<string, JSONSchema4>>(\n (acc, { slug, joins, polymorphicJoins }) => {\n const schema = {\n type: 'object',\n additionalProperties: false,\n properties: {},\n required: [] as string[],\n } satisfies JSONSchema4\n\n for (const collectionSlug in joins) {\n for (const join of joins[collectionSlug]!) {\n ;(schema.properties as any)[join.joinPath] = {\n type: 'string',\n enum: [collectionSlug],\n }\n schema.required.push(join.joinPath)\n }\n }\n\n for (const join of polymorphicJoins) {\n ;(schema.properties as any)[join.joinPath] = {\n type: 'string',\n enum: join.field.collection,\n }\n schema.required.push(join.joinPath)\n }\n\n if (Object.keys(schema.properties).length > 0) {\n acc[slug] = schema\n }\n\n return acc\n },\n {},\n )\n\n return {\n type: 'object',\n additionalProperties: false,\n properties,\n required: Object.keys(properties),\n }\n}\n\nfunction generateLocaleEntitySchemas(localization: SanitizedConfig['localization']): JSONSchema4 {\n if (localization && 'locales' in localization && localization?.locales) {\n const localesFromConfig = localization?.locales\n\n const locales = [...localesFromConfig].map((locale) => {\n return locale.code\n }, [])\n\n return {\n type: 'string',\n enum: locales,\n }\n }\n\n return {\n type: 'null',\n }\n}\n\nfunction generateFallbackLocaleEntitySchemas(\n localization: SanitizedConfig['localization'],\n): JSONSchema4 {\n if (localization && 'localeCodes' in localization && localization?.localeCodes) {\n const localeCodes = [...localization.localeCodes].map((localeCode) => {\n return localeCode\n }, [])\n\n return {\n oneOf: [\n { type: 'string', enum: ['false', 'none', 'null'] },\n { type: 'boolean', enum: [false] },\n { type: 'null' },\n { type: 'string', enum: localeCodes },\n { type: 'array', items: { type: 'string', enum: localeCodes } },\n ],\n }\n }\n\n return {\n type: 'null',\n }\n}\n\nfunction generateAuthEntitySchemas(entities: SanitizedCollectionConfig[]): JSONSchema4 {\n const properties: JSONSchema4[] = [...entities]\n .filter(({ auth }) => Boolean(auth))\n .map(({ slug }) => {\n return {\n allOf: [\n { $ref: `#/definitions/${slug}` },\n {\n type: 'object',\n additionalProperties: false,\n properties: {\n collection: { type: 'string', enum: [slug] },\n },\n required: ['collection'],\n },\n ],\n }\n }, {})\n\n return {\n oneOf: properties,\n }\n}\n\n/**\n * Generates the JSON Schema for database configuration\n *\n * @example { db: idType: string }\n */\nfunction generateDbEntitySchema(config: SanitizedConfig): JSONSchema4 {\n const defaultIDType: JSONSchema4 =\n config.db?.defaultIDType === 'number' ? { type: 'number' } : { type: 'string' }\n\n return {\n type: 'object',\n additionalProperties: false,\n properties: {\n defaultIDType,\n },\n required: ['defaultIDType'],\n }\n}\n\n/**\n * Returns a JSON Schema Type with 'null' added if the field is not required.\n */\nexport function withNullableJSONSchemaType(\n fieldType: JSONSchema4TypeName,\n isRequired: boolean,\n): JSONSchema4TypeName | JSONSchema4TypeName[] {\n const fieldTypes = [fieldType]\n if (isRequired) {\n return fieldType\n }\n fieldTypes.push('null')\n return fieldTypes\n}\n\nfunction entityOrFieldToJsDocs({\n entity,\n i18n,\n}: {\n entity: FlattenedField | SanitizedCollectionConfig | SanitizedGlobalConfig\n i18n?: I18n\n}): string | undefined {\n let description: string | undefined = undefined\n if (entity?.admin?.description) {\n if (typeof entity?.admin?.description === 'string') {\n description = entity?.admin?.description\n } else if (typeof entity?.admin?.description === 'object') {\n if (entity?.admin?.description?.en) {\n description = entity?.admin?.description?.en\n } else if (entity?.admin?.description?.[i18n!.language]) {\n description = entity?.admin?.description?.[i18n!.language]\n }\n } else if (typeof entity?.admin?.description === 'function' && i18n) {\n // do not evaluate description functions for generating JSDocs. The output of\n // those can differ depending on where and when they are called, creating\n // inconsistencies in the generated JSDocs.\n }\n }\n return description\n}\nexport function fieldsToJSONSchema(\n /**\n * Used for relationship fields, to determine whether to use a string or number type for the ID.\n * While there is a default ID field type set by the db adapter, they can differ on a collection-level\n * if they have custom ID fields.\n */\n collectionIDFieldTypes: { [key: string]: 'number' | 'string' },\n fields: FlattenedField[],\n /**\n * Allows you to define new top-level interfaces that can be re-used in the output schema.\n */\n interfaceNameDefinitions: Map<string, JSONSchema4>,\n config?: SanitizedConfig,\n i18n?: I18n,\n): {\n properties: {\n [k: string]: JSONSchema4\n }\n required: string[]\n} {\n const requiredFieldNames = new Set<string>()\n\n return {\n properties: Object.fromEntries(\n fields.reduce((fieldSchemas, field, index) => {\n const isRequired = fieldAffectsData(field) && fieldIsRequired(field)\n\n const fieldDescription = entityOrFieldToJsDocs({ entity: field, i18n })\n const baseFieldSchema: JSONSchema4 = {}\n if (fieldDescription) {\n baseFieldSchema.description = fieldDescription\n }\n\n let fieldSchema: JSONSchema4\n\n switch (field.type) {\n case 'array': {\n fieldSchema = {\n ...baseFieldSchema,\n type: withNullableJSONSchemaType('array', isRequired),\n items: {\n type: 'object',\n additionalProperties: false,\n ...fieldsToJSONSchema(\n collectionIDFieldTypes,\n field.flattenedFields,\n interfaceNameDefinitions,\n config,\n i18n,\n ),\n },\n }\n\n if (field.interfaceName) {\n interfaceNameDefinitions.set(field.interfaceName, fieldSchema)\n\n fieldSchema = {\n $ref: `#/definitions/${field.interfaceName}`,\n }\n }\n break\n }\n case 'blocks': {\n // Check for a case where no blocks are provided.\n // We need to generate an empty array for this case, note that JSON schema 4 doesn't support empty arrays\n // so the best we can get is `unknown[]`\n const hasBlocks = Boolean(\n field.blockReferences ? field.blockReferences.length : field.blocks.length,\n )\n\n fieldSchema = {\n ...baseFieldSchema,\n type: withNullableJSONSchemaType('array', isRequired),\n items: hasBlocks\n ? {\n oneOf: (field.blockReferences ?? field.blocks).map((block) => {\n if (typeof block === 'string') {\n const resolvedBlock = config?.blocks?.find((b) => b.slug === block)\n return {\n $ref: `#/definitions/${resolvedBlock!.interfaceName ?? resolvedBlock!.slug}`,\n }\n }\n const blockFieldSchemas = fieldsToJSONSchema(\n collectionIDFieldTypes,\n block.flattenedFields,\n interfaceNameDefinitions,\n config,\n i18n,\n )\n\n const blockSchema: JSONSchema4 = {\n type: 'object',\n additionalProperties: false,\n properties: {\n ...blockFieldSchemas.properties,\n blockType: {\n const: block.slug,\n },\n },\n required: ['blockType', ...blockFieldSchemas.required],\n }\n\n if (block.interfaceName) {\n interfaceNameDefinitions.set(block.interfaceName, blockSchema)\n\n return {\n $ref: `#/definitions/${block.interfaceName}`,\n }\n }\n\n return blockSchema\n }),\n }\n : {},\n }\n break\n }\n case 'checkbox': {\n fieldSchema = {\n ...baseFieldSchema,\n type: withNullableJSONSchemaType('boolean', isRequired),\n }\n break\n }\n case 'code':\n case 'date':\n case 'email':\n case 'textarea': {\n fieldSchema = {\n ...baseFieldSchema,\n type: withNullableJSONSchemaType('string', isRequired),\n }\n break\n }\n\n case 'group': {\n if (fieldAffectsData(field)) {\n fieldSchema = {\n ...baseFieldSchema,\n type: 'object',\n additionalProperties: false,\n ...fieldsToJSONSchema(\n collectionIDFieldTypes,\n field.flattenedFields,\n interfaceNameDefinitions,\n config,\n i18n,\n ),\n }\n\n if (field.interfaceName) {\n interfaceNameDefinitions.set(field.interfaceName, fieldSchema)\n\n fieldSchema = { $ref: `#/definitions/${field.interfaceName}` }\n }\n }\n break\n }\n\n case 'join': {\n let items: JSONSchema4\n\n if (Array.isArray(field.collection)) {\n items = {\n oneOf: field.collection.map((collection) => ({\n type: 'object',\n additionalProperties: false,\n properties: {\n relationTo: {\n const: collection,\n },\n value: {\n oneOf: [\n {\n type: collectionIDFieldTypes[collection],\n },\n {\n $ref: `#/definitions/${collection}`,\n },\n ],\n },\n },\n required: ['collectionSlug', 'value'],\n })),\n }\n } else {\n items = {\n oneOf: [\n {\n type: collectionIDFieldTypes[field.collection],\n },\n {\n $ref: `#/definitions/${field.collection}`,\n },\n ],\n }\n }\n\n fieldSchema = {\n ...baseFieldSchema,\n type: 'object',\n additionalProperties: false,\n properties: {\n docs: {\n type: 'array',\n items,\n },\n hasNextPage: { type: 'boolean' },\n totalDocs: { type: 'number' },\n },\n }\n break\n }\n\n case 'json': {\n fieldSchema = field.jsonSchema?.schema || {\n ...baseFieldSchema,\n type: ['object', 'array', 'string', 'number', 'boolean', 'null'],\n }\n break\n }\n\n case 'number': {\n if (field.hasMany === true) {\n fieldSchema = {\n ...baseFieldSchema,\n type: withNullableJSONSchemaType('array', isRequired),\n items: { type: 'number' },\n }\n } else {\n fieldSchema = {\n ...baseFieldSchema,\n type: withNullableJSONSchemaType('number', isRequired),\n }\n }\n break\n }\n\n case 'point': {\n fieldSchema = {\n ...baseFieldSchema,\n type: withNullableJSONSchemaType('array', isRequired),\n items: [\n {\n type: 'number',\n },\n {\n type: 'number',\n },\n ],\n maxItems: 2,\n minItems: 2,\n }\n break\n }\n\n case 'radio': {\n fieldSchema = {\n ...baseFieldSchema,\n type: withNullableJSONSchemaType('string', isRequired),\n enum: buildOptionEnums(field.options),\n }\n\n if (field.interfaceName) {\n interfaceNameDefinitions.set(field.interfaceName, fieldSchema)\n\n fieldSchema = {\n $ref: `#/definitions/${field.interfaceName}`,\n }\n }\n\n break\n }\n case 'relationship':\n case 'upload': {\n if (Array.isArray(field.relationTo)) {\n if (field.hasMany) {\n fieldSchema = {\n ...baseFieldSchema,\n type: withNullableJSONSchemaType('array', isRequired),\n items: {\n oneOf: field.relationTo.map((relation) => {\n return {\n type: 'object',\n additionalProperties: false,\n properties: {\n relationTo: {\n const: relation,\n },\n value: {\n oneOf: [\n {\n type: collectionIDFieldTypes[relation],\n },\n {\n $ref: `#/definitions/${relation}`,\n },\n ],\n },\n },\n required: ['value', 'relationTo'],\n }\n }),\n },\n }\n } else {\n fieldSchema = {\n ...baseFieldSchema,\n oneOf: field.relationTo.map((relation) => {\n return {\n type: withNullableJSONSchemaType('object', isRequired),\n additionalProperties: false,\n properties: {\n relationTo: {\n const: relation,\n },\n value: {\n oneOf: [\n {\n type: collectionIDFieldTypes[relation],\n },\n {\n $ref: `#/definitions/${relation}`,\n },\n ],\n },\n },\n required: ['value', 'relationTo'],\n }\n }),\n }\n }\n } else if (field.hasMany) {\n fieldSchema = {\n ...baseFieldSchema,\n type: withNullableJSONSchemaType('array', isRequired),\n items: {\n oneOf: [\n {\n type: collectionIDFieldTypes[field.relationTo],\n },\n {\n $ref: `#/definitions/${field.relationTo}`,\n },\n ],\n },\n }\n } else {\n fieldSchema = {\n ...baseFieldSchema,\n oneOf: [\n {\n type: withNullableJSONSchemaType(\n collectionIDFieldTypes[field.relationTo]!,\n isRequired,\n ),\n },\n { $ref: `#/definitions/${field.relationTo}` },\n ],\n }\n }\n\n break\n }\n case 'richText': {\n if (!field?.editor) {\n throw new MissingEditorProp(field) // while we allow disabling editor functionality, you should not have any richText fields defined if you do not have an editor\n }\n if (typeof field.editor === 'function') {\n throw new Error('Attempted to access unsanitized rich text editor.')\n }\n if (field.editor.outputSchema) {\n fieldSchema = {\n ...baseFieldSchema,\n ...field.editor.outputSchema({\n collectionIDFieldTypes,\n config,\n field,\n i18n,\n interfaceNameDefinitions,\n isRequired,\n }),\n }\n } else {\n // Maintain backwards compatibility with existing rich text editors\n fieldSchema = {\n ...baseFieldSchema,\n type: withNullableJSONSchemaType('array', isRequired),\n items: {\n type: 'object',\n },\n }\n }\n\n break\n }\n\n case 'select': {\n const optionEnums = buildOptionEnums(field.options)\n // We get the previous field to check for a date in the case of a timezone select\n // This works because timezone selects are always inserted right after a date with 'timezone: true'\n const previousField = fields?.[index - 1]\n const isTimezoneField =\n previousField?.type === 'date' && previousField.timezone && field.name.includes('_tz')\n\n // Check if the timezone field's options match the global config's supported timezones\n const hasMatchingGlobalTimezones =\n isTimezoneField &&\n config &&\n optionsAreEqual(field.options, config.admin?.timezones?.supportedTimezones)\n\n // Timezone selects should reference the supportedTimezones definition\n // only if the field's options match the global config\n if (isTimezoneField && hasMatchingGlobalTimezones) {\n fieldSchema = {\n $ref: `#/definitions/supportedTimezones`,\n }\n } else {\n if (field.hasMany) {\n fieldSchema = {\n ...baseFieldSchema,\n type: withNullableJSONSchemaType('array', isRequired),\n items: {\n type: 'string',\n },\n }\n if (optionEnums?.length) {\n ;(fieldSchema.items as JSONSchema4).enum = optionEnums\n }\n } else {\n fieldSchema = {\n ...baseFieldSchema,\n type: withNullableJSONSchemaType('string', isRequired),\n }\n if (optionEnums?.length) {\n fieldSchema.enum = optionEnums\n }\n }\n\n if (field.interfaceName) {\n interfaceNameDefinitions.set(field.interfaceName, fieldSchema)\n\n fieldSchema = {\n $ref: `#/definitions/${field.interfaceName}`,\n }\n }\n break\n }\n\n break\n }\n case 'tab': {\n fieldSchema = {\n ...baseFieldSchema,\n type: 'object',\n additionalProperties: false,\n ...fieldsToJSONSchema(\n collectionIDFieldTypes,\n field.flattenedFields,\n interfaceNameDefinitions,\n config,\n i18n,\n ),\n }\n\n if (field.interfaceName) {\n interfaceNameDefinitions.set(field.interfaceName, fieldSchema)\n\n fieldSchema = { $ref: `#/definitions/${field.interfaceName}` }\n }\n break\n }\n\n case 'text':\n if (field.hasMany === true) {\n fieldSchema = {\n ...baseFieldSchema,\n type: withNullableJSONSchemaType('array', isRequired),\n items: { type: 'string' },\n }\n } else {\n fieldSchema = {\n ...baseFieldSchema,\n type: withNullableJSONSchemaType('string', isRequired),\n }\n }\n break\n\n default: {\n break\n }\n }\n\n if ('typescriptSchema' in field && field?.typescriptSchema?.length) {\n for (const schema of field.typescriptSchema) {\n fieldSchema = schema({ jsonSchema: fieldSchema! })\n }\n }\n\n if (fieldSchema! && fieldAffectsData(field)) {\n if (isRequired && fieldSchema.required !== false) {\n requiredFieldNames.add(field.name)\n }\n fieldSchemas.set(field.name, fieldSchema)\n }\n\n return fieldSchemas\n }, new Map<string, JSONSchema4>()),\n ),\n required: Array.from(requiredFieldNames),\n }\n}\n\n// This function is part of the public API and is exported through payload/utilities\nexport function entityToJSONSchema(\n config: SanitizedConfig,\n entity: SanitizedCollectionConfig | SanitizedGlobalConfig,\n interfaceNameDefinitions: Map<string, JSONSchema4>,\n defaultIDType: 'number' | 'text',\n collectionIDFieldTypes?: { [key: string]: 'number' | 'string' },\n i18n?: I18n,\n): JSONSchema4 {\n if (!collectionIDFieldTypes) {\n collectionIDFieldTypes = getCollectionIDFieldTypes({ config, defaultIDType })\n }\n\n const title = entity.typescript?.interface\n ? entity.typescript.interface\n : formatNames(entity.slug).singular\n\n let mutableFields = [...entity.flattenedFields]\n\n const idField: FieldAffectingData = { name: 'id', type: defaultIDType as 'text', required: true }\n const customIdField = mutableFields.find((field) => field.name === 'id') as FieldAffectingData\n\n if (customIdField && customIdField.type !== 'group' && customIdField.type !== 'tab') {\n mutableFields = mutableFields.map((field) => {\n if (field === customIdField) {\n return { ...field, required: true }\n }\n\n return field\n })\n } else {\n mutableFields.unshift(idField)\n }\n\n // mark timestamp fields required\n if ('timestamps' in entity && entity.timestamps !== false) {\n mutableFields = mutableFields.map((field) => {\n if (field.name === 'createdAt' || field.name === 'updatedAt') {\n return {\n ...field,\n required: true,\n }\n }\n return field\n })\n }\n\n if (\n 'auth' in entity &&\n entity.auth &&\n (!entity.auth?.disableLocalStrategy ||\n (typeof entity.auth?.disableLocalStrategy === 'object' &&\n entity.auth.disableLocalStrategy.enableFields))\n ) {\n mutableFields.push({\n name: 'password',\n type: 'text',\n })\n }\n\n const jsonSchema: JSONSchema4 = {\n type: 'object',\n additionalProperties: false,\n title,\n ...fieldsToJSONSchema(\n collectionIDFieldTypes,\n mutableFields,\n interfaceNameDefinitions,\n config,\n i18n,\n ),\n }\n\n const entityDescription = entityOrFieldToJsDocs({ entity, i18n })\n\n if (entityDescription) {\n jsonSchema.description = entityDescription\n }\n\n return jsonSchema\n}\n\nexport function fieldsToSelectJSONSchema({\n config,\n fields,\n interfaceNameDefinitions,\n}: {\n config: SanitizedConfig\n fields: FlattenedField[]\n interfaceNameDefinitions: Map<string, JSONSchema4>\n}): JSONSchema4 {\n const schema: JSONSchema4 = {\n type: 'object',\n additionalProperties: false,\n properties: {},\n }\n\n for (const field of fields) {\n switch (field.type) {\n case 'array':\n case 'group':\n case 'tab': {\n let fieldSchema: JSONSchema4 = fieldsToSelectJSONSchema({\n config,\n fields: field.flattenedFields,\n interfaceNameDefinitions,\n })\n\n if (field.interfaceName) {\n const definition = `${field.interfaceName}_select`\n interfaceNameDefinitions.set(definition, fieldSchema)\n\n fieldSchema = {\n $ref: `#/definitions/${definition}`,\n }\n }\n\n schema.properties![field.name] = {\n oneOf: [\n {\n type: 'boolean',\n },\n fieldSchema,\n ],\n }\n\n break\n }\n\n case 'blocks': {\n const blocksSchema: JSONSchema4 = {\n type: 'object',\n additionalProperties: false,\n properties: {},\n }\n\n for (const block of field.blockReferences ?? field.blocks) {\n if (typeof block === 'string') {\n continue // TODO\n }\n\n let blockSchema = fieldsToSelectJSONSchema({\n config,\n fields: block.flattenedFields,\n interfaceNameDefinitions,\n })\n\n if (block.interfaceName) {\n const definition = `${block.interfaceName}_select`\n interfaceNameDefinitions.set(definition, blockSchema)\n blockSchema = {\n $ref: `#/definitions/${definition}`,\n }\n }\n\n blocksSchema.properties![block.slug] = {\n oneOf: [\n {\n type: 'boolean',\n },\n blockSchema,\n ],\n }\n }\n\n schema.properties![field.name] = {\n oneOf: [\n {\n type: 'boolean',\n },\n blocksSchema,\n ],\n }\n\n break\n }\n\n default:\n schema.properties![field.name] = {\n type: 'boolean',\n }\n break\n }\n }\n\n return schema\n}\n\nconst fieldType: JSONSchema4 = {\n type: 'string',\n required: false,\n}\nconst generateAuthFieldTypes = ({\n type,\n loginWithUsername,\n}: {\n loginWithUsername: Auth['loginWithUsername']\n type: 'forgotOrUnlock' | 'login' | 'register'\n}): JSONSchema4 => {\n if (loginWithUsername) {\n switch (type) {\n case 'forgotOrUnlock': {\n if (loginWithUsername.allowEmailLogin) {\n // allow email or username for unlock/forgot-password\n return {\n additionalProperties: false,\n oneOf: [\n {\n additionalProperties: false,\n properties: { email: fieldType },\n required: ['email'],\n },\n {\n additionalProperties: false,\n properties: { username: fieldType },\n required: ['username'],\n },\n ],\n }\n } else {\n // allow only username for unlock/forgot-password\n return {\n additionalProperties: false,\n properties: { username: fieldType },\n required: ['username'],\n }\n }\n }\n\n case 'login': {\n if (loginWithUsername.allowEmailLogin) {\n // allow username or email and require password for login\n return {\n additionalProperties: false,\n oneOf: [\n {\n additionalProperties: false,\n properties: { email: fieldType, password: fieldType },\n required: ['email', 'password'],\n },\n {\n additionalProperties: false,\n properties: { password: fieldType, username: fieldType },\n required: ['username', 'password'],\n },\n ],\n }\n } else {\n // allow only username and password for login\n return {\n additionalProperties: false,\n properties: {\n password: fieldType,\n username: fieldType,\n },\n required: ['username', 'password'],\n }\n }\n }\n\n case 'register': {\n const requiredFields: ('email' | 'password' | 'username')[] = ['password']\n const properties: {\n email?: JSONSchema4['properties']\n password?: JSONSchema4['properties']\n username?: JSONSchema4['properties']\n } = {\n password: fieldType,\n username: fieldType,\n }\n\n if (loginWithUsername.requireEmail) {\n requiredFields.push('email')\n }\n if (loginWithUsername.requireUsername) {\n requiredFields.push('username')\n }\n if (loginWithUsername.requireEmail || loginWithUsername.allowEmailLogin) {\n properties.email = fieldType\n }\n\n return {\n additionalProperties: false,\n properties,\n required: requiredFields,\n }\n }\n }\n }\n\n // default email (and password for login/register)\n return {\n additionalProperties: false,\n properties: { email: fieldType, password: fieldType },\n required: ['email', 'password'],\n }\n}\n\nexport function authCollectionToOperationsJSONSchema(\n config: SanitizedCollectionConfig,\n): JSONSchema4 {\n const loginWithUsername = config.auth?.loginWithUsername\n const loginUserFields: JSONSchema4 = generateAuthFieldTypes({ type: 'login', loginWithUsername })\n const forgotOrUnlockUserFields: JSONSchema4 = generateAuthFieldTypes({\n type: 'forgotOrUnlock',\n loginWithUsername,\n })\n const registerUserFields: JSONSchema4 = generateAuthFieldTypes({\n type: 'register',\n loginWithUsername,\n })\n\n const properties: JSONSchema4['properties'] = {\n forgotPassword: forgotOrUnlockUserFields,\n login: loginUserFields,\n registerFirstUser: registerUserFields,\n unlock: forgotOrUnlockUserFields,\n }\n\n return {\n type: 'object',\n additionalProperties: false,\n properties,\n required: Object.keys(properties),\n title: `${formatNames(config.slug).singular}AuthOperations`,\n }\n}\n\n// Generates the JSON Schema for supported timezones\nexport function timezonesToJSONSchema(\n supportedTimezones: SanitizedConfig['admin']['timezones']['supportedTimezones'],\n): JSONSchema4 {\n return {\n description: 'Supported timezones in IANA format.',\n enum: supportedTimezones.map((timezone) =>\n typeof timezone === 'string' ? timezone : timezone.value,\n ),\n }\n}\n\nfunction generateAuthOperationSchemas(collections: SanitizedCollectionConfig[]): JSONSchema4 {\n const properties = collections.reduce(\n (acc, collection) => {\n if (collection.auth) {\n acc[collection.slug] = {\n $ref: `#/definitions/auth/${collection.slug}`,\n }\n }\n return acc\n },\n {} as Record<string, JSONSchema4>,\n )\n\n return {\n type: 'object',\n additionalProperties: false,\n properties,\n required: Object.keys(properties),\n }\n}\n\n/**\n * This is used for generating the TypeScript types (payload-types.ts) with the payload generate:types command.\n */\nexport function configToJSONSchema(\n config: SanitizedConfig,\n defaultIDType?: 'number' | 'text',\n i18n?: I18n,\n): JSONSchema4 {\n // a mutable Map to store custom top-level `interfaceName` types. Fields with an `interfaceName` property will be moved to the top-level definitions here\n const interfaceNameDefinitions: Map<string, JSONSchema4> = new Map()\n\n // Used for relationship fields, to determine whether to use a string or number type for the ID.\n const collectionIDFieldTypes = getCollectionIDFieldTypes({\n config,\n defaultIDType: defaultIDType!,\n })\n\n // Collections and Globals have to be moved to the top-level definitions as well. Reason: The top-level type will be the `Config` type - we don't want all collection and global\n // types to be inlined inside the `Config` type\n\n const entities: {\n entity: SanitizedCollectionConfig | SanitizedGlobalConfig\n type: 'collection' | 'global'\n }[] = [\n ...config.globals.map((global) => ({ type: 'global' as const, entity: global })),\n ...config.collections.map((collection) => ({\n type: 'collection' as const,\n entity: collection,\n })),\n ]\n\n const entityDefinitions: { [k: string]: JSONSchema4 } = entities.reduce(\n (acc, { type, entity }) => {\n acc[entity.slug] = entityToJSONSchema(\n config,\n entity,\n interfaceNameDefinitions,\n defaultIDType!,\n collectionIDFieldTypes,\n i18n,\n )\n const select = fieldsToSelectJSONSchema({\n config,\n fields: entity.flattenedFields,\n interfaceNameDefinitions,\n })\n\n if (type === 'global') {\n select.properties!.globalType = {\n type: 'boolean',\n }\n }\n\n acc[`${entity.slug}_select`] = {\n type: 'object',\n additionalProperties: false,\n ...select,\n }\n\n return acc\n },\n {} as Record<string, JSONSchema4>,\n )\n\n const timezoneDefinitions = timezonesToJSONSchema(config.admin.timezones.supportedTimezones)\n\n const authOperationDefinitions = [...config.collections]\n .filter(({ auth }) => Boolean(auth))\n .reduce(\n (acc, authCollection) => {\n acc.auth[authCollection.slug] = authCollectionToOperationsJSONSchema(authCollection)\n return acc\n },\n { auth: {} as Record<string, JSONSchema4> },\n )\n\n const jobsSchemas = config.jobs\n ? generateJobsJSONSchemas(\n config,\n config.jobs,\n interfaceNameDefinitions,\n collectionIDFieldTypes,\n i18n,\n )\n : {}\n\n const blocksDefinition: JSONSchema4 | undefined = {\n type: 'object',\n additionalProperties: false,\n properties: {},\n required: [],\n }\n if (config?.blocks?.length) {\n for (const block of config.blocks) {\n const blockFieldSchemas = fieldsToJSONSchema(\n collectionIDFieldTypes,\n block.flattenedFields,\n interfaceNameDefinitions,\n config,\n i18n,\n )\n\n const blockSchema: JSONSchema4 = {\n type: 'object',\n additionalProperties: false,\n properties: {\n ...blockFieldSchemas.properties,\n blockType: {\n const: block.slug,\n },\n },\n required: ['blockType', ...blockFieldSchemas.required],\n }\n\n const interfaceName = block.interfaceName ?? block.slug\n interfaceNameDefinitions.set(interfaceName, blockSchema)\n\n blocksDefinition.properties![block.slug] = {\n $ref: `#/definitions/${interfaceName}`,\n }\n ;(blocksDefinition.required as string[]).push(block.slug)\n }\n }\n\n let jsonSchema: JSONSchema4 = {\n additionalProperties: false,\n definitions: {\n supportedTimezones: timezoneDefinitions,\n ...entityDefinitions,\n ...Object.fromEntries(interfaceNameDefinitions),\n ...authOperationDefinitions,\n },\n // These properties here will be very simple, as all the complexity is in the definitions. These are just the properties for the top-level `Config` type\n type: 'object',\n properties: {\n auth: generateAuthOperationSchemas(config.collections),\n blocks: blocksDefinition,\n collections: generateEntitySchemas(config.collections || []),\n collectionsJoins: generateCollectionJoinsSchemas(config.collections || []),\n collectionsSelect: generateEntitySelectSchemas(config.collections || []),\n db: generateDbEntitySchema(config),\n fallbackLocale: generateFallbackLocaleEntitySchemas(config.localization),\n globals: generateEntitySchemas(config.globals || []),\n globalsSelect: generateEntitySelectSchemas(config.globals || []),\n locale: generateLocaleEntitySchemas(config.localization),\n ...(config.typescript?.strictDraftTypes\n ? {\n strictDraftTypes: {\n type: 'boolean',\n const: true,\n },\n }\n : {}),\n user: generateAuthEntitySchemas(config.collections),\n },\n required: [\n 'user',\n 'locale',\n 'fallbackLocale',\n 'collections',\n 'collectionsSelect',\n 'collectionsJoins',\n 'globalsSelect',\n ...(config.typescript?.strictDraftTypes ? ['strictDraftTypes'] : []),\n 'globals',\n 'auth',\n 'db',\n 'jobs',\n 'blocks',\n ],\n title: 'Config',\n }\n\n if (jobsSchemas.definitions?.size) {\n for (const [key, value] of jobsSchemas.definitions) {\n jsonSchema.definitions![key] = value\n }\n }\n if (jobsSchemas.properties) {\n jsonSchema.properties!.jobs = {\n type: 'object',\n additionalProperties: false,\n properties: jobsSchemas.properties,\n required: ['tasks', 'workflows'],\n }\n }\n\n if (config?.typescript?.schema?.length) {\n for (const schema of config.typescript.schema) {\n jsonSchema = schema({ collectionIDFieldTypes, config, i18n: i18n!, jsonSchema })\n }\n }\n\n return jsonSchema\n}\n"],"names":["MissingEditorProp","fieldAffectsData","generateJobsJSONSchemas","formatNames","getCollectionIDFieldTypes","optionsAreEqual","fieldIsRequired","field","isConditional","Boolean","admin","condition","isMarkedRequired","required","type","flattenedFields","some","subField","buildOptionEnums","options","map","option","value","generateEntitySchemas","entities","properties","reduce","acc","slug","$ref","additionalProperties","Object","keys","generateEntitySelectSchemas","generateCollectionJoinsSchemas","collections","joins","polymorphicJoins","schema","collectionSlug","join","joinPath","enum","push","collection","length","generateLocaleEntitySchemas","localization","locales","localesFromConfig","locale","code","generateFallbackLocaleEntitySchemas","localeCodes","localeCode","oneOf","items","generateAuthEntitySchemas","filter","auth","allOf","generateDbEntitySchema","config","defaultIDType","db","withNullableJSONSchemaType","fieldType","isRequired","fieldTypes","entityOrFieldToJsDocs","entity","i18n","description","undefined","en","language","fieldsToJSONSchema","collectionIDFieldTypes","fields","interfaceNameDefinitions","requiredFieldNames","Set","fromEntries","fieldSchemas","index","fieldDescription","baseFieldSchema","fieldSchema","interfaceName","set","hasBlocks","blockReferences","blocks","block","resolvedBlock","find","b","blockFieldSchemas","blockSchema","blockType","const","Array","isArray","relationTo","docs","hasNextPage","totalDocs","jsonSchema","hasMany","maxItems","minItems","relation","editor","Error","outputSchema","optionEnums","previousField","isTimezoneField","timezone","name","includes","hasMatchingGlobalTimezones","timezones","supportedTimezones","typescriptSchema","add","Map","from","entityToJSONSchema","title","typescript","interface","singular","mutableFields","idField","customIdField","unshift","timestamps","disableLocalStrategy","enableFields","entityDescription","fieldsToSelectJSONSchema","definition","blocksSchema","generateAuthFieldTypes","loginWithUsername","allowEmailLogin","email","username","password","requiredFields","requireEmail","requireUsername","authCollectionToOperationsJSONSchema","loginUserFields","forgotOrUnlockUserFields","registerUserFields","forgotPassword","login","registerFirstUser","unlock","timezonesToJSONSchema","generateAuthOperationSchemas","configToJSONSchema","globals","global","entityDefinitions","select","globalType","timezoneDefinitions","authOperationDefinitions","authCollection","jobsSchemas","jobs","blocksDefinition","definitions","collectionsJoins","collectionsSelect","fallbackLocale","globalsSelect","strictDraftTypes","user","size","key"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"isolateObjectProperty.d.ts","sourceRoot":"","sources":["../../src/utilities/isolateObjectProperty.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,CAAC,SAAS,MAAM,EAAE,MAAM,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,CAAC,EAAE,GAAG,MAAM,CAAC,GAAG,CAAC,
|
|
1
|
+
{"version":3,"file":"isolateObjectProperty.d.ts","sourceRoot":"","sources":["../../src/utilities/isolateObjectProperty.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,CAAC,SAAS,MAAM,EAAE,MAAM,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,CAAC,EAAE,GAAG,MAAM,CAAC,GAAG,CAAC,CAmChG"}
|
|
@@ -16,19 +16,22 @@
|
|
|
16
16
|
return Reflect.deleteProperty(keys.includes(p) ? delegate : target, p);
|
|
17
17
|
},
|
|
18
18
|
get (target, p, receiver) {
|
|
19
|
-
|
|
19
|
+
if (keys.includes(p)) {
|
|
20
|
+
return Reflect.get(delegate, p, receiver);
|
|
21
|
+
}
|
|
22
|
+
// Use target as receiver to preserve private field access (e.g., Request#headers in Node 24+)
|
|
23
|
+
return Reflect.get(target, p, target);
|
|
20
24
|
},
|
|
21
25
|
has (target, p) {
|
|
22
26
|
return Reflect.has(keys.includes(p) ? delegate : target, p);
|
|
23
27
|
},
|
|
24
|
-
set (target, p, newValue,
|
|
28
|
+
set (target, p, newValue, _receiver) {
|
|
25
29
|
if (keys.includes(p)) {
|
|
26
30
|
// in case of transactionID we must ignore any receiver, because
|
|
27
31
|
// "If provided and target does not have a setter for propertyKey, the property will be set on receiver instead."
|
|
28
32
|
return Reflect.set(delegate, p, newValue);
|
|
29
|
-
} else {
|
|
30
|
-
return Reflect.set(target, p, newValue, receiver);
|
|
31
33
|
}
|
|
34
|
+
return Reflect.set(target, p, newValue, target);
|
|
32
35
|
}
|
|
33
36
|
};
|
|
34
37
|
return new Proxy(object, handler);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/utilities/isolateObjectProperty.ts"],"sourcesContent":["/**\n * Creates a proxy for the given object that has its own property\n */\nexport function isolateObjectProperty<T extends object>(object: T, key: (keyof T)[] | keyof T): T {\n const keys = Array.isArray(key) ? key : [key]\n const delegate = {} as T\n\n // Initialize delegate with the keys, if they exist in the original object\n for (const k of keys) {\n if (k in object) {\n delegate[k] = object[k]\n }\n }\n\n const handler: ProxyHandler<T> = {\n deleteProperty(target, p): boolean {\n return Reflect.deleteProperty(keys.includes(p as keyof T) ? delegate : target, p)\n },\n get(target, p, receiver) {\n
|
|
1
|
+
{"version":3,"sources":["../../src/utilities/isolateObjectProperty.ts"],"sourcesContent":["/**\n * Creates a proxy for the given object that has its own property\n */\nexport function isolateObjectProperty<T extends object>(object: T, key: (keyof T)[] | keyof T): T {\n const keys = Array.isArray(key) ? key : [key]\n const delegate = {} as T\n\n // Initialize delegate with the keys, if they exist in the original object\n for (const k of keys) {\n if (k in object) {\n delegate[k] = object[k]\n }\n }\n\n const handler: ProxyHandler<T> = {\n deleteProperty(target, p): boolean {\n return Reflect.deleteProperty(keys.includes(p as keyof T) ? delegate : target, p)\n },\n get(target, p, receiver) {\n if (keys.includes(p as keyof T)) {\n return Reflect.get(delegate, p, receiver)\n }\n // Use target as receiver to preserve private field access (e.g., Request#headers in Node 24+)\n return Reflect.get(target, p, target)\n },\n has(target, p) {\n return Reflect.has(keys.includes(p as keyof T) ? delegate : target, p)\n },\n set(target, p, newValue, _receiver) {\n if (keys.includes(p as keyof T)) {\n // in case of transactionID we must ignore any receiver, because\n // \"If provided and target does not have a setter for propertyKey, the property will be set on receiver instead.\"\n return Reflect.set(delegate, p, newValue)\n }\n return Reflect.set(target, p, newValue, target)\n },\n }\n return new Proxy(object, handler)\n}\n"],"names":["isolateObjectProperty","object","key","keys","Array","isArray","delegate","k","handler","deleteProperty","target","p","Reflect","includes","get","receiver","has","set","newValue","_receiver","Proxy"],"mappings":"AAAA;;CAEC,GACD,OAAO,SAASA,sBAAwCC,MAAS,EAAEC,GAA0B;IAC3F,MAAMC,OAAOC,MAAMC,OAAO,CAACH,OAAOA,MAAM;QAACA;KAAI;IAC7C,MAAMI,WAAW,CAAC;IAElB,0EAA0E;IAC1E,KAAK,MAAMC,KAAKJ,KAAM;QACpB,IAAII,KAAKN,QAAQ;YACfK,QAAQ,CAACC,EAAE,GAAGN,MAAM,CAACM,EAAE;QACzB;IACF;IAEA,MAAMC,UAA2B;QAC/BC,gBAAeC,MAAM,EAAEC,CAAC;YACtB,OAAOC,QAAQH,cAAc,CAACN,KAAKU,QAAQ,CAACF,KAAgBL,WAAWI,QAAQC;QACjF;QACAG,KAAIJ,MAAM,EAAEC,CAAC,EAAEI,QAAQ;YACrB,IAAIZ,KAAKU,QAAQ,CAACF,IAAe;gBAC/B,OAAOC,QAAQE,GAAG,CAACR,UAAUK,GAAGI;YAClC;YACA,8FAA8F;YAC9F,OAAOH,QAAQE,GAAG,CAACJ,QAAQC,GAAGD;QAChC;QACAM,KAAIN,MAAM,EAAEC,CAAC;YACX,OAAOC,QAAQI,GAAG,CAACb,KAAKU,QAAQ,CAACF,KAAgBL,WAAWI,QAAQC;QACtE;QACAM,KAAIP,MAAM,EAAEC,CAAC,EAAEO,QAAQ,EAAEC,SAAS;YAChC,IAAIhB,KAAKU,QAAQ,CAACF,IAAe;gBAC/B,gEAAgE;gBAChE,iHAAiH;gBACjH,OAAOC,QAAQK,GAAG,CAACX,UAAUK,GAAGO;YAClC;YACA,OAAON,QAAQK,GAAG,CAACP,QAAQC,GAAGO,UAAUR;QAC1C;IACF;IACA,OAAO,IAAIU,MAAMnB,QAAQO;AAC3B"}
|