@payloadcms/figma 0.0.1-alpha.44 → 0.0.1-alpha.46
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/api/control-plane.d.ts.map +1 -1
- package/dist/api/control-plane.js +90 -54
- package/dist/api/control-plane.js.map +1 -1
- package/dist/api/figma-api.d.ts +20 -0
- package/dist/api/figma-api.d.ts.map +1 -1
- package/dist/api/figma-api.js +34 -0
- package/dist/api/figma-api.js.map +1 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +6 -0
- package/dist/cli.js.map +1 -1
- package/dist/commands/debug.d.ts +8 -0
- package/dist/commands/debug.d.ts.map +1 -0
- package/dist/commands/debug.js +156 -0
- package/dist/commands/debug.js.map +1 -0
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +17 -14
- package/dist/commands/init.js.map +1 -1
- package/dist/db-content-api/index.d.ts.map +1 -1
- package/dist/db-content-api/index.js +26 -7
- package/dist/db-content-api/index.js.map +1 -1
- package/dist/db-content-api/temp-utilities/types.d.ts +22 -0
- package/dist/db-content-api/temp-utilities/types.d.ts.map +1 -0
- package/dist/db-content-api/temp-utilities/types.js +15 -0
- package/dist/db-content-api/temp-utilities/types.js.map +1 -0
- package/dist/db-content-api/utilities/data/index.d.ts +14 -4
- package/dist/db-content-api/utilities/data/index.d.ts.map +1 -1
- package/dist/db-content-api/utilities/data/index.js +15 -8
- package/dist/db-content-api/utilities/data/index.js.map +1 -1
- package/dist/db-content-api/utilities/data/transformPublishedLocale.d.ts +23 -0
- package/dist/db-content-api/utilities/data/transformPublishedLocale.d.ts.map +1 -0
- package/dist/db-content-api/utilities/data/transformPublishedLocale.js +42 -0
- package/dist/db-content-api/utilities/data/transformPublishedLocale.js.map +1 -0
- package/dist/db-content-api/utilities/meta/buildLocalizedPaths.d.ts.map +1 -1
- package/dist/db-content-api/utilities/meta/buildLocalizedPaths.js +11 -0
- package/dist/db-content-api/utilities/meta/buildLocalizedPaths.js.map +1 -1
- package/dist/db-content-api/utilities/meta/buildMeta.d.ts +17 -2
- package/dist/db-content-api/utilities/meta/buildMeta.d.ts.map +1 -1
- package/dist/db-content-api/utilities/meta/buildMeta.js +4 -1
- package/dist/db-content-api/utilities/meta/buildMeta.js.map +1 -1
- package/dist/db-content-api/utilities/meta/buildPathTypes.d.ts +8 -2
- package/dist/db-content-api/utilities/meta/buildPathTypes.d.ts.map +1 -1
- package/dist/db-content-api/utilities/meta/buildPathTypes.js +41 -11
- package/dist/db-content-api/utilities/meta/buildPathTypes.js.map +1 -1
- package/dist/db-content-api/utilities/where.d.ts +8 -0
- package/dist/db-content-api/utilities/where.d.ts.map +1 -1
- package/dist/db-content-api/utilities/where.js +6 -0
- package/dist/db-content-api/utilities/where.js.map +1 -1
- package/dist/exports/client.d.ts +2 -0
- package/dist/exports/client.d.ts.map +1 -1
- package/dist/exports/client.js +2 -0
- package/dist/exports/client.js.map +1 -1
- package/dist/oauth/components/FigmaAvatar/index.d.ts +4 -0
- package/dist/oauth/components/FigmaAvatar/index.d.ts.map +1 -0
- package/dist/oauth/components/FigmaAvatar/index.js +27 -0
- package/dist/oauth/components/FigmaAvatar/index.js.map +1 -0
- package/dist/oauth/components/FigmaAvatar/index.scss +12 -0
- package/dist/oauth/components/FigmaAvatarCell/index.d.ts +5 -0
- package/dist/oauth/components/FigmaAvatarCell/index.d.ts.map +1 -0
- package/dist/oauth/components/FigmaAvatarCell/index.js +25 -0
- package/dist/oauth/components/FigmaAvatarCell/index.js.map +1 -0
- package/dist/oauth/components/FigmaAvatarCell/index.scss +5 -0
- package/dist/oauth/components/FigmaAvatarPlaceholder/index.d.ts +9 -0
- package/dist/oauth/components/FigmaAvatarPlaceholder/index.d.ts.map +1 -0
- package/dist/oauth/components/FigmaAvatarPlaceholder/index.js +37 -0
- package/dist/oauth/components/FigmaAvatarPlaceholder/index.js.map +1 -0
- package/dist/oauth/components/FigmaAvatarPlaceholder/index.scss +28 -0
- package/dist/oauth/defaults.d.ts.map +1 -1
- package/dist/oauth/defaults.js +38 -5
- package/dist/oauth/defaults.js.map +1 -1
- package/dist/oauth/endpoints/getLoginEndpoint.d.ts.map +1 -1
- package/dist/oauth/endpoints/getLoginEndpoint.js +49 -14
- package/dist/oauth/endpoints/getLoginEndpoint.js.map +1 -1
- package/dist/plugin/build-config.d.ts.map +1 -1
- package/dist/plugin/build-config.js +44 -2
- package/dist/plugin/build-config.js.map +1 -1
- package/dist/templates/README.md +1 -1
- package/dist/types/config.d.ts +2 -1
- package/dist/types/config.d.ts.map +1 -1
- package/dist/types/config.js +0 -2
- package/dist/types/config.js.map +1 -1
- package/dist/types.d.ts +0 -1
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/dist/utils/lambda-config.d.ts +1 -1
- package/dist/utils/lambda-config.d.ts.map +1 -1
- package/dist/utils/lambda-config.js +2 -2
- package/dist/utils/lambda-config.js.map +1 -1
- package/dist/utils/messages.d.ts +1 -1
- package/dist/utils/messages.d.ts.map +1 -1
- package/dist/utils/messages.js +1 -0
- package/dist/utils/messages.js.map +1 -1
- package/dist/utils/package-manager.d.ts +24 -0
- package/dist/utils/package-manager.d.ts.map +1 -1
- package/dist/utils/package-manager.js +53 -0
- package/dist/utils/package-manager.js.map +1 -1
- package/dist/utils/payload-config-modifier.d.ts +1 -1
- package/dist/utils/payload-config-modifier.d.ts.map +1 -1
- package/dist/utils/payload-config-modifier.js +4 -3
- package/dist/utils/payload-config-modifier.js.map +1 -1
- package/dist/utils/project.d.ts +3 -2
- package/dist/utils/project.d.ts.map +1 -1
- package/dist/utils/project.js +4 -2
- package/dist/utils/project.js.map +1 -1
- package/package.json +1 -1
- package/dist/db-content-api/utilities/meta/index.d.ts +0 -5
- package/dist/db-content-api/utilities/meta/index.d.ts.map +0 -1
- package/dist/db-content-api/utilities/meta/index.js +0 -5
- package/dist/db-content-api/utilities/meta/index.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/db-content-api/index.ts"],"sourcesContent":["import type {\n BaseDatabaseAdapter,\n Count,\n CountArgs,\n CountGlobalVersionArgs,\n CountGlobalVersions,\n CountVersions,\n Create,\n CreateArgs,\n CreateGlobal,\n CreateGlobalArgs,\n CreateGlobalVersion,\n CreateGlobalVersionArgs,\n CreateVersion,\n CreateVersionArgs,\n DatabaseAdapterObj,\n DeleteMany,\n DeleteManyArgs,\n DeleteOne,\n DeleteOneArgs,\n DeleteVersions,\n DeleteVersionsArgs,\n Find,\n FindArgs,\n FindGlobal,\n FindGlobalArgs,\n FindGlobalVersions,\n FindGlobalVersionsArgs,\n FindOne,\n FindOneArgs,\n FindVersions,\n FindVersionsArgs,\n QueryDrafts,\n QueryDraftsArgs,\n UpdateGlobal,\n UpdateGlobalArgs,\n UpdateGlobalVersion,\n UpdateGlobalVersionArgs,\n UpdateMany,\n UpdateManyArgs,\n UpdateOne,\n UpdateOneArgs,\n UpdateVersion,\n UpdateVersionArgs,\n Upsert,\n UpsertArgs,\n} from 'payload'\n\nimport createClient from 'openapi-fetch'\nimport { createDatabaseAdapter } from 'payload'\nimport { v4 as uuid } from 'uuid'\n\nimport type { paths } from './generated/content-api-types.js'\n\nimport { getGlobalSlug } from './temp-utilities/slug.js'\nimport { addFallbackSort } from './temp-utilities/sorting.js'\nimport { unwrapDocument, unwrapFindResponse } from './temp-utilities/unwrapDocument.js'\nimport { type AuthMode, createAuthMiddleware, createErrorMiddleware } from './utilities/auth.js'\nimport { dataToContentAPI } from './utilities/data/index.js'\nimport { convertPayloadJoinsToContentAPI } from './utilities/joins.js'\nimport { addFallbackLocale } from './utilities/locale/index.js'\nimport { buildMeta } from './utilities/meta/index.js'\nimport { convertPayloadWhereToContentAPI } from './utilities/where.js'\n\ntype ContentAPIOptions = {\n allowIDOnCreate?: boolean\n auth: AuthMode\n contentSystemId: string\n url: string\n}\n\nexport type ContentAPIAdapter = {\n auth: AuthMode\n clearDatabase: () => Promise<void>\n client: ReturnType<typeof createClient<paths>>\n contentSystemId: string\n url: string\n} & BaseDatabaseAdapter\n\nasync function syncCollections(this: ContentAPIAdapter) {\n let existingIds: Set<string>\n try {\n const { data: response, error } = await this.client.GET(\n '/api/v0/content_systems/{contentSystemId}/collections',\n {\n params: { path: { contentSystemId: this.contentSystemId } },\n },\n )\n\n if (error) {\n throw new Error(JSON.stringify(error))\n }\n if (!response) {\n throw new Error('No response from collections endpoint')\n }\n\n existingIds = new Set(response.data.map((c) => c.id))\n this.payload.logger.info(`Found ${existingIds.size} existing collections`)\n } catch (error) {\n this.payload.logger.warn(\n `Failed to fetch collections, will attempt to create all: ${(error as Error).message}`,\n )\n existingIds = new Set()\n }\n\n for (const collection of this.payload.config.collections) {\n if (!existingIds.has(collection.slug)) {\n await createCollection.call(this, collection.slug)\n }\n }\n\n for (const global of this.payload.config.globals || []) {\n const globalId = `_global-${global.slug}`\n if (!existingIds.has(globalId)) {\n await createCollection.call(this, globalId)\n }\n }\n}\n\nasync function init(this: ContentAPIAdapter) {\n if (this.auth.mode === 'apiKey') {\n this.payload.logger.info('Using API Key authentication')\n } else if (this.auth.mode === 'tokenStore') {\n this.payload.logger.info('Using TokenStore authentication (local dev)')\n } else {\n this.payload.logger.info('Using Dev JWT authentication (testing)')\n }\n\n if (process.env.PAYLOAD_DROP_DATABASE === 'true') {\n await this.clearDatabase()\n }\n\n await syncCollections.call(this)\n}\n\nasync function createCollection(this: ContentAPIAdapter, collectionId: string) {\n try {\n const { error } = await this.client.POST(\n '/api/v0/content_systems/{contentSystemId}/collections',\n {\n body: { id: collectionId },\n params: { path: { contentSystemId: this.contentSystemId } },\n },\n )\n\n if (error) {\n throw new Error(JSON.stringify(error))\n }\n this.payload.logger.info(`Created collection: ${collectionId}`)\n } catch (error) {\n const errorMessage = (error as Error).message\n if (!errorMessage.includes('already exists') && !errorMessage.includes('409')) {\n this.payload.logger.warn(`Failed to create collection ${collectionId}: ${errorMessage}`)\n }\n }\n}\n\nasync function findMany(\n this: ContentAPIAdapter,\n {\n collection,\n joins,\n limit,\n locale: localeArg,\n page,\n pagination: _pagination,\n sort,\n where,\n // Not yet passed to Content API:\n // - select: supported by Content API, pass-through possible\n // Not supported by Content API:\n // - draftsEnabled, versions, projection\n }: Pick<FindArgs, 'joins' | 'locale' | 'pagination' | 'sort' | 'where'> &\n Required<Pick<FindArgs, 'collection' | 'limit' | 'page'>>,\n) {\n const locale = addFallbackLocale(localeArg, this.payload)\n\n const { data: response, error } = await this.client.POST('/api/v0/documents:find', {\n body: {\n collection,\n contentSystemId: this.contentSystemId,\n join: convertPayloadJoinsToContentAPI(this.payload, collection, joins),\n limit,\n locale,\n page: page ?? 1,\n sort: addFallbackSort(sort, this.payload, collection),\n where: convertPayloadWhereToContentAPI(where ?? {}),\n ...buildMeta(this.payload, { collection, locale, where }),\n },\n })\n\n if (error) {\n throw new Error(`Content API findMany error: ${JSON.stringify(error)}`)\n }\n if (!response) {\n throw new Error('No response from findMany')\n }\n\n return unwrapFindResponse(this.payload, response.result, collection)\n}\n\nasync function find(this: ContentAPIAdapter, args: FindArgs) {\n const collectionConfig = this.payload.config.collections.find((c) => c.slug === args.collection)\n return findMany.call(this, {\n collection: args.collection,\n joins: args.joins,\n // TODO: FindArgs.limit should be 'number' not 'number | undefined'\n // is sanitized by Payload Core before calling the adapter (defaults to 10 or 0 based on pagination)\n limit: args.limit!,\n locale: args.locale,\n page: args.page ?? 1,\n pagination: args.pagination,\n sort: args.sort || collectionConfig?.defaultSort,\n where: args.where,\n })\n}\n\n// TODO: remove Omit when this PR is released: https://github.com/payloadcms/payload/pull/15183\nasync function findVersions(this: ContentAPIAdapter, args: Omit<FindVersionsArgs, 'skip'>) {\n const sortWithFallback = addFallbackSort(args.sort || '-updatedAt', this.payload, args.collection)\n\n const whereClause = convertPayloadWhereToContentAPI(args.where ?? {}, {\n parentToDocumentId: true,\n })\n const locale = addFallbackLocale(args.locale, this.payload)\n\n const { data: response, error } = await this.client.POST('/api/v0/document_versions:find', {\n body: {\n collection: args.collection,\n contentSystemId: this.contentSystemId,\n // TODO: FindVersionsArgs.limit should be 'number' not 'number | undefined'\n // is sanitized by Payload Core before calling the adapter (defaults to 10 or 0 based on pagination)\n limit: args.limit!,\n locale,\n page: args.page ?? 1,\n sort: sortWithFallback,\n where: whereClause,\n ...buildMeta(this.payload, {\n collection: args.collection,\n locale,\n where: args.where,\n }),\n },\n })\n\n if (error) {\n throw new Error(`Content API findVersions error: ${JSON.stringify(error)}`)\n }\n if (!response) {\n throw new Error('No response from findVersions')\n }\n\n return unwrapFindResponse(this.payload, response.result, args.collection)\n}\n\nasync function queryDrafts(this: ContentAPIAdapter, args: QueryDraftsArgs) {\n const versionsResult = await this.findVersions({\n collection: args.collection,\n limit: args.limit,\n locale: args.locale,\n page: args.page,\n pagination: args.pagination,\n sort: args.sort,\n where: { ...args.where, latest: { equals: true } },\n })\n\n // queryDrafts should return documents with fields at root level, not nested in 'version'\n // So we need to unwrap the version structure and merge version fields to root\n const docs = versionsResult.docs.map((versionDoc) => {\n const { version, ...versionMeta } = versionDoc\n return {\n ...versionMeta,\n ...version,\n // Keep version metadata like parent, but document fields take precedence\n id: version.id, // Document ID, not version ID\n }\n })\n\n return {\n ...versionsResult,\n docs,\n }\n}\n\nasync function createVersion(this: ContentAPIAdapter, args: CreateVersionArgs) {\n const { data: response, error } = await this.client.POST('/api/v0/document_versions:create', {\n body: {\n collection: args.collectionSlug,\n contentSystemId: this.contentSystemId,\n versionDoc: {\n latest: !args.autosave,\n parent: String(args.parent),\n version: dataToContentAPI(this.payload, args.collectionSlug, args.versionData, {\n applyDefaults: true,\n }),\n },\n },\n })\n\n if (error) {\n throw new Error(`Content API createVersion error: ${JSON.stringify(error)}`)\n }\n if (!response) {\n throw new Error('No response from createVersion')\n }\n return unwrapDocument(this.payload, response.result, args.collectionSlug)\n}\n\nasync function updateVersion(this: ContentAPIAdapter, args: UpdateVersionArgs) {\n const where = args.where ?? { id: { equals: args.id } }\n const locale = addFallbackLocale(args.locale, this.payload)\n\n const { data: response, error } = await this.client.POST('/api/v0/document_versions:update', {\n body: {\n collection: args.collection,\n contentSystemId: this.contentSystemId,\n createOnMissing: false,\n locale,\n versionDoc: {\n version: dataToContentAPI(this.payload, args.collection, args.versionData),\n },\n where: convertPayloadWhereToContentAPI(where),\n ...buildMeta(this.payload, { collection: args.collection, locale, where }),\n },\n })\n\n if (error) {\n throw new Error(`Content API updateVersion error: ${JSON.stringify(error)}`)\n }\n if (!response?.result || !('data' in response.result)) {\n throw new Error('No document data in updateVersion response')\n }\n\n const doc = response.result.data[0]\n if (!doc) {\n return null\n }\n\n return unwrapDocument(this.payload, doc, args.collection)\n}\n\nasync function deleteVersions(this: ContentAPIAdapter, args: DeleteVersionsArgs) {\n if (!args.collection) {\n throw new Error('deleteVersions requires a collection')\n }\n\n const locale = addFallbackLocale(args.locale, this.payload)\n\n const { error } = await this.client.POST('/api/v0/document_versions:delete', {\n body: {\n collection: args.collection,\n contentSystemId: this.contentSystemId,\n locale,\n where: convertPayloadWhereToContentAPI(args.where),\n ...buildMeta(this.payload, {\n collection: args.collection,\n locale,\n where: args.where,\n }),\n },\n })\n\n if (error) {\n throw new Error(`Content API deleteVersions error: ${JSON.stringify(error)}`)\n }\n}\n\nasync function findOne(this: ContentAPIAdapter, args: FindOneArgs) {\n const { docs } = await this.find({\n collection: args.collection,\n joins: args.joins,\n limit: 1,\n locale: args.locale,\n pagination: false,\n where: args.where,\n })\n return docs[0] ?? null\n}\n\nasync function updateMany(this: ContentAPIAdapter, args: UpdateManyArgs) {\n const locale = addFallbackLocale(args.locale, this.payload)\n\n const { data: response, error } = await this.client.POST('/api/v0/documents:update', {\n body: {\n collection: args.collection,\n contentSystemId: this.contentSystemId,\n createOnMissing: false,\n doc: dataToContentAPI(this.payload, args.collection, args.data),\n limit: args.limit,\n locale,\n returning: {},\n sort: addFallbackSort(args.sort || '-updatedAt', this.payload, args.collection),\n where: convertPayloadWhereToContentAPI(args.where),\n ...buildMeta(this.payload, {\n collection: args.collection,\n locale,\n where: args.where,\n }),\n },\n })\n\n if (error) {\n throw new Error(`Content API updateMany error: ${JSON.stringify(error)}`)\n }\n if (!response) {\n throw new Error('No response from updateMany')\n }\n\n if (response.result && 'data' in response.result) {\n return response.result.data.map((doc) => unwrapDocument(this.payload, doc, args.collection))\n }\n return null\n}\n\nasync function updateOne(this: ContentAPIAdapter, args: UpdateOneArgs) {\n const locale = addFallbackLocale(args.locale, this.payload)\n const where = args.where ?? { id: { equals: args.id } }\n\n const { data: response, error } = await this.client.POST('/api/v0/documents:update', {\n body: {\n collection: args.collection,\n contentSystemId: this.contentSystemId,\n createOnMissing: false,\n doc: dataToContentAPI(this.payload, args.collection, args.data),\n locale,\n returning: {},\n where: convertPayloadWhereToContentAPI(where),\n ...buildMeta(this.payload, { collection: args.collection, locale, where }),\n },\n })\n\n if (error) {\n throw new Error(`Content API updateOne error: ${JSON.stringify(error)}`)\n }\n if (!response) {\n throw new Error('No response from updateOne')\n }\n if (!response.result || !('data' in response.result)) {\n throw new Error('Unexpected response format from updateOne')\n }\n\n const doc = response.result.data[0]\n if (!doc) {\n return null\n }\n\n return unwrapDocument(this.payload, doc, args.collection)\n}\n\nasync function deleteMany(this: ContentAPIAdapter, args: DeleteManyArgs) {\n const locale = addFallbackLocale(args.req?.locale, this.payload)\n\n const { error } = await this.client.POST('/api/v0/documents:delete', {\n body: {\n collection: args.collection,\n contentSystemId: this.contentSystemId,\n locale,\n where: convertPayloadWhereToContentAPI(args.where),\n ...buildMeta(this.payload, {\n collection: args.collection,\n locale,\n where: args.where,\n }),\n },\n })\n\n if (error) {\n throw new Error(`Content API deleteMany error: ${JSON.stringify(error)}`)\n }\n}\n\nasync function deleteOne(this: ContentAPIAdapter, args: DeleteOneArgs) {\n const locale = addFallbackLocale(args.req?.locale, this.payload)\n\n const { data: response, error } = await this.client.POST('/api/v0/documents:delete', {\n body: {\n collection: args.collection,\n contentSystemId: this.contentSystemId,\n locale,\n returning: {}, // Request deleted document back\n where: convertPayloadWhereToContentAPI(args.where),\n ...buildMeta(this.payload, {\n collection: args.collection,\n locale,\n where: args.where,\n }),\n },\n })\n\n if (error) {\n throw new Error(`Content API deleteOne error: ${JSON.stringify(error)}`)\n }\n if (!response?.result || !('data' in response.result)) {\n throw new Error('No document data in deleteOne response')\n }\n\n const doc = response.result.data[0]\n if (!doc) {\n return null\n }\n\n return unwrapDocument(this.payload, doc, args.collection)\n}\n\nasync function create(this: ContentAPIAdapter, args: CreateArgs) {\n const isGlobalCollection = args.collection.startsWith('_global-')\n const customIDType = this.payload.collections[args.collection]?.customIDType\n const id =\n (isGlobalCollection || customIDType || this.allowIDOnCreate) &&\n args.data.id != null &&\n (typeof args.data.id === 'string' || typeof args.data.id === 'number')\n ? String(args.data.id)\n : uuid()\n const locale = addFallbackLocale(args.locale, this.payload)\n\n const { data: response, error } = await this.client.POST('/api/v0/documents:create', {\n body: {\n collection: args.collection,\n contentSystemId: this.contentSystemId,\n doc: {\n ...dataToContentAPI(this.payload, args.collection, args.data, {\n applyDefaults: true,\n createdAt: true,\n }),\n id,\n },\n locale,\n ...buildMeta(this.payload, { collection: args.collection, locale }),\n },\n })\n\n if (error) {\n throw new Error(`Content API create error: ${JSON.stringify(error)}`)\n }\n if (!response) {\n throw new Error('No response from create')\n }\n return unwrapDocument(this.payload, response.result, args.collection)\n}\n\nasync function clearDatabase(this: ContentAPIAdapter) {\n this.payload.logger.info(`---- CLEARING CONTENT API DATABASE ----`)\n try {\n await fetch(`${this.url}/dev/clear-db`, {\n headers: { 'Content-Type': 'application/json' },\n method: 'POST',\n })\n this.payload.logger.info('---- CONTENT API DATABASE CLEARED ----')\n\n // Re-sync collections after clearing\n await syncCollections.call(this)\n } catch (error) {\n this.payload.logger.error(`Failed to clear database: ${(error as Error).message}`)\n throw error\n }\n}\n\nasync function count(this: ContentAPIAdapter, args: CountArgs) {\n const locale = addFallbackLocale(args.locale, this.payload)\n\n const { data: response, error } = await this.client.POST('/api/v0/documents:count', {\n body: {\n collection: args.collection,\n contentSystemId: this.contentSystemId,\n locale,\n where: convertPayloadWhereToContentAPI(args.where),\n ...buildMeta(this.payload, {\n collection: args.collection,\n locale,\n where: args.where,\n }),\n },\n })\n\n if (error) {\n throw new Error(`Content API count error: ${JSON.stringify(error)}`)\n }\n if (!response) {\n throw new Error('No response from count')\n }\n\n return { totalDocs: response.result.count }\n}\n\nasync function countVersions(this: ContentAPIAdapter, args: CountArgs) {\n const locale = addFallbackLocale(args.locale, this.payload)\n\n const { data: response, error } = await this.client.POST('/api/v0/document_versions:count', {\n body: {\n collection: args.collection,\n contentSystemId: this.contentSystemId,\n locale,\n where: convertPayloadWhereToContentAPI(args.where),\n ...buildMeta(this.payload, {\n collection: args.collection,\n locale,\n where: args.where,\n }),\n },\n })\n\n if (error) {\n throw new Error(`Content API countVersions error: ${JSON.stringify(error)}`)\n }\n if (!response) {\n throw new Error('No response from countVersions')\n }\n\n return { totalDocs: response.result.count }\n}\n\nasync function upsert(this: ContentAPIAdapter, args: UpsertArgs) {\n let documentId = args.data.id as string | undefined\n if (!documentId && args.where && 'id' in args.where) {\n const idClause = (args.where as Record<string, unknown>).id as Record<string, unknown>\n if (idClause && 'equals' in idClause) {\n documentId = idClause.equals as string\n }\n }\n if (!documentId) {\n documentId = uuid()\n }\n\n const locale = addFallbackLocale(args.locale, this.payload)\n\n const { data: response, error } = await this.client.POST('/api/v0/documents:update', {\n body: {\n collection: args.collection,\n contentSystemId: this.contentSystemId,\n createOnMissing: { id: documentId },\n doc: dataToContentAPI(this.payload, args.collection, args.data, {\n applyDefaults: true,\n createdAt: true,\n }),\n locale,\n where: convertPayloadWhereToContentAPI(args.where),\n ...buildMeta(this.payload, {\n collection: args.collection,\n locale,\n where: args.where,\n }),\n },\n })\n\n if (error) {\n throw new Error(`Content API upsert error: ${JSON.stringify(error)}`)\n }\n if (!response) {\n throw new Error('No response from upsert')\n }\n if (!response.result || !('data' in response.result)) {\n throw new Error('Unexpected response format from upsert')\n }\n\n const doc = response.result.data[0]\n if (!doc) {\n throw new Error('No document data in upsert response')\n }\n\n return unwrapDocument(this.payload, doc, args.collection)\n}\n\nfunction createGlobal(this: ContentAPIAdapter, args: CreateGlobalArgs) {\n return this.create({\n collection: getGlobalSlug(args.slug),\n data: { ...args.data, id: args.slug, globalType: args.slug },\n })\n}\n\nfunction findGlobal(this: ContentAPIAdapter, args: FindGlobalArgs) {\n return this.findOne({\n collection: getGlobalSlug(args.slug),\n locale: args.locale,\n where: args.where ?? {},\n })\n}\n\nasync function updateGlobal(this: ContentAPIAdapter, args: UpdateGlobalArgs) {\n // Use upsert to ensure the global exists\n // Use slug as the consistent document ID for globals\n return this.upsert({\n collection: getGlobalSlug(args.slug),\n data: args.data,\n where: { id: { equals: args.slug } },\n })\n}\n\n// TODO: remove Omit when this PR is released: https://github.com/payloadcms/payload/pull/15183\nfunction findGlobalVersions(this: ContentAPIAdapter, args: Omit<FindGlobalVersionsArgs, 'skip'>) {\n return this.findVersions({\n collection: getGlobalSlug(args.global),\n limit: args.limit,\n locale: args.locale,\n page: args.page,\n pagination: args.pagination,\n sort: args.sort,\n where: args.where,\n })\n}\n\nfunction createGlobalVersion(this: ContentAPIAdapter, args: CreateGlobalVersionArgs) {\n // For globals, use the globalSlug as the consistent document ID\n // This matches what we do in updateGlobal\n return this.createVersion({\n autosave: args.autosave,\n collectionSlug: getGlobalSlug(args.globalSlug),\n createdAt: args.createdAt,\n parent: args.globalSlug,\n updatedAt: args.updatedAt,\n versionData: args.versionData,\n })\n}\n\nfunction updateGlobalVersion(this: ContentAPIAdapter, args: UpdateGlobalVersionArgs) {\n // UpdateVersion requires either id OR where, not both\n if (args.id !== undefined) {\n return this.updateVersion({\n id: args.id,\n collection: getGlobalSlug(args.global),\n locale: args.locale,\n versionData: args.versionData,\n })\n }\n // args.where is guaranteed by Payload when args.id is undefined\n return this.updateVersion({\n collection: getGlobalSlug(args.global),\n locale: args.locale,\n versionData: args.versionData,\n where: args.where,\n })\n}\n\nfunction countGlobalVersions(this: ContentAPIAdapter, args: CountGlobalVersionArgs) {\n return this.countVersions({\n collection: getGlobalSlug(args.global),\n locale: args.locale,\n where: args.where,\n })\n}\n\nexport const contentAPIAdapter = (opts: ContentAPIOptions): DatabaseAdapterObj => ({\n name: 'content-api',\n defaultIDType: 'text',\n init: ({ payload }) => {\n const client = createClient<paths>({ baseUrl: opts.url })\n\n const middlewareOpts = {\n auth: opts.auth,\n contentSystemId: opts.contentSystemId,\n logger: payload.logger,\n url: opts.url,\n }\n\n client.use(createAuthMiddleware(middlewareOpts))\n client.use(createErrorMiddleware(middlewareOpts))\n\n return createDatabaseAdapter<ContentAPIAdapter>({\n name: 'content-api',\n allowIDOnCreate: opts.allowIDOnCreate ?? false,\n auth: opts.auth,\n beginTransaction: () => Promise.resolve(null),\n clearDatabase: clearDatabase as () => Promise<void>,\n client,\n commitTransaction: async () => {},\n contentSystemId: opts.contentSystemId,\n count: count as Count,\n countGlobalVersions: countGlobalVersions as CountGlobalVersions,\n countVersions: countVersions as CountVersions,\n create: create as Create,\n createGlobal: createGlobal as CreateGlobal,\n createGlobalVersion: createGlobalVersion as CreateGlobalVersion,\n createVersion: createVersion as CreateVersion,\n defaultIDType: 'text',\n deleteMany: deleteMany as DeleteMany,\n deleteOne: deleteOne as DeleteOne,\n deleteVersions: deleteVersions as DeleteVersions,\n find: find as Find,\n findDistinct: () =>\n Promise.reject(new Error('findDistinct is not yet implemented for Content API adapter')),\n findGlobal: findGlobal as FindGlobal,\n findGlobalVersions: findGlobalVersions as FindGlobalVersions,\n findOne: findOne as FindOne,\n findVersions: findVersions as FindVersions,\n init,\n packageName: '@payloadcms/db-content-api',\n payload,\n queryDrafts: queryDrafts as QueryDrafts,\n rollbackTransaction: async () => {},\n updateGlobal: updateGlobal as UpdateGlobal,\n updateGlobalVersion: updateGlobalVersion as UpdateGlobalVersion,\n updateMany: updateMany as UpdateMany,\n updateOne: updateOne as UpdateOne,\n updateVersion: updateVersion as UpdateVersion,\n upsert: upsert as Upsert,\n url: opts.url,\n })\n },\n})\n"],"names":["createClient","createDatabaseAdapter","v4","uuid","getGlobalSlug","addFallbackSort","unwrapDocument","unwrapFindResponse","createAuthMiddleware","createErrorMiddleware","dataToContentAPI","convertPayloadJoinsToContentAPI","addFallbackLocale","buildMeta","convertPayloadWhereToContentAPI","syncCollections","existingIds","data","response","error","client","GET","params","path","contentSystemId","Error","JSON","stringify","Set","map","c","id","payload","logger","info","size","warn","message","collection","config","collections","has","slug","createCollection","call","global","globals","globalId","init","auth","mode","process","env","PAYLOAD_DROP_DATABASE","clearDatabase","collectionId","POST","body","errorMessage","includes","findMany","joins","limit","locale","localeArg","page","pagination","_pagination","sort","where","join","result","find","args","collectionConfig","defaultSort","findVersions","sortWithFallback","whereClause","parentToDocumentId","queryDrafts","versionsResult","latest","equals","docs","versionDoc","version","versionMeta","createVersion","collectionSlug","autosave","parent","String","versionData","applyDefaults","updateVersion","createOnMissing","doc","deleteVersions","findOne","updateMany","returning","updateOne","deleteMany","req","deleteOne","create","isGlobalCollection","startsWith","customIDType","allowIDOnCreate","createdAt","fetch","url","headers","method","count","totalDocs","countVersions","upsert","documentId","idClause","createGlobal","globalType","findGlobal","updateGlobal","findGlobalVersions","createGlobalVersion","globalSlug","updatedAt","updateGlobalVersion","undefined","countGlobalVersions","contentAPIAdapter","opts","name","defaultIDType","baseUrl","middlewareOpts","use","beginTransaction","Promise","resolve","commitTransaction","findDistinct","reject","packageName","rollbackTransaction"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../src/db-content-api/index.ts"],"sourcesContent":["import type {\n BaseDatabaseAdapter,\n Count,\n CountArgs,\n CountGlobalVersionArgs,\n CountGlobalVersions,\n CountVersions,\n Create,\n CreateArgs,\n CreateGlobal,\n CreateGlobalArgs,\n CreateGlobalVersion,\n CreateGlobalVersionArgs,\n CreateVersion,\n CreateVersionArgs,\n DatabaseAdapterObj,\n DeleteMany,\n DeleteManyArgs,\n DeleteOne,\n DeleteOneArgs,\n DeleteVersions,\n DeleteVersionsArgs,\n Find,\n FindArgs,\n FindGlobal,\n FindGlobalArgs,\n FindGlobalVersions,\n FindGlobalVersionsArgs,\n FindOne,\n FindOneArgs,\n FindVersions,\n FindVersionsArgs,\n QueryDrafts,\n QueryDraftsArgs,\n UpdateGlobal,\n UpdateGlobalArgs,\n UpdateGlobalVersion,\n UpdateGlobalVersionArgs,\n UpdateMany,\n UpdateManyArgs,\n UpdateOne,\n UpdateOneArgs,\n UpdateVersion,\n UpdateVersionArgs,\n Upsert,\n UpsertArgs,\n} from 'payload'\n\nimport createClient from 'openapi-fetch'\nimport { createDatabaseAdapter } from 'payload'\nimport { v4 as uuid } from 'uuid'\n\nimport type { paths } from './generated/content-api-types.js'\n\nimport { getGlobalSlug } from './temp-utilities/slug.js'\nimport { addFallbackSort } from './temp-utilities/sorting.js'\nimport { unwrapDocument, unwrapFindResponse } from './temp-utilities/unwrapDocument.js'\nimport { type AuthMode, createAuthMiddleware, createErrorMiddleware } from './utilities/auth.js'\nimport { dataToContentAPI } from './utilities/data/index.js'\nimport { convertPayloadJoinsToContentAPI } from './utilities/joins.js'\nimport { addFallbackLocale } from './utilities/locale/index.js'\nimport { buildMeta } from './utilities/meta/buildMeta.js'\nimport { convertPayloadWhereToContentAPI } from './utilities/where.js'\n\ntype ContentAPIOptions = {\n allowIDOnCreate?: boolean\n auth: AuthMode\n contentSystemId: string\n url: string\n}\n\nexport type ContentAPIAdapter = {\n auth: AuthMode\n clearDatabase: () => Promise<void>\n client: ReturnType<typeof createClient<paths>>\n contentSystemId: string\n url: string\n} & BaseDatabaseAdapter\n\nasync function syncCollections(this: ContentAPIAdapter) {\n let existingIds: Set<string>\n try {\n const { data: response, error } = await this.client.GET(\n '/api/v0/content_systems/{contentSystemId}/collections',\n {\n params: { path: { contentSystemId: this.contentSystemId } },\n },\n )\n\n if (error) {\n throw new Error(JSON.stringify(error))\n }\n if (!response) {\n throw new Error('No response from collections endpoint')\n }\n\n existingIds = new Set(response.data.map((c) => c.id))\n this.payload.logger.info(`Found ${existingIds.size} existing collections`)\n } catch (error) {\n this.payload.logger.warn(\n `Failed to fetch collections, will attempt to create all: ${(error as Error).message}`,\n )\n existingIds = new Set()\n }\n\n for (const collection of this.payload.config.collections) {\n if (!existingIds.has(collection.slug)) {\n await createCollection.call(this, collection.slug)\n }\n }\n\n for (const global of this.payload.config.globals || []) {\n const globalId = `_global-${global.slug}`\n if (!existingIds.has(globalId)) {\n await createCollection.call(this, globalId)\n }\n }\n}\n\nasync function init(this: ContentAPIAdapter) {\n if (this.auth.mode === 'apiKey') {\n this.payload.logger.info('Using API Key authentication')\n } else if (this.auth.mode === 'tokenStore') {\n this.payload.logger.info('Using TokenStore authentication (local dev)')\n } else {\n this.payload.logger.info('Using Dev JWT authentication (testing)')\n }\n\n if (process.env.PAYLOAD_DROP_DATABASE === 'true') {\n await this.clearDatabase()\n }\n\n await syncCollections.call(this)\n}\n\nasync function createCollection(this: ContentAPIAdapter, collectionId: string) {\n try {\n const { error } = await this.client.POST(\n '/api/v0/content_systems/{contentSystemId}/collections',\n {\n body: { id: collectionId },\n params: { path: { contentSystemId: this.contentSystemId } },\n },\n )\n\n if (error) {\n throw new Error(JSON.stringify(error))\n }\n this.payload.logger.info(`Created collection: ${collectionId}`)\n } catch (error) {\n const errorMessage = (error as Error).message\n if (!errorMessage.includes('already exists') && !errorMessage.includes('409')) {\n this.payload.logger.warn(`Failed to create collection ${collectionId}: ${errorMessage}`)\n }\n }\n}\n\nasync function findMany(\n this: ContentAPIAdapter,\n {\n collection,\n joins,\n limit,\n locale: localeArg,\n page,\n pagination: _pagination,\n sort,\n where,\n // Not yet passed to Content API:\n // - select: supported by Content API, pass-through possible\n // Not supported by Content API:\n // - draftsEnabled, versions, projection\n }: Pick<FindArgs, 'joins' | 'locale' | 'pagination' | 'sort' | 'where'> &\n Required<Pick<FindArgs, 'collection' | 'limit' | 'page'>>,\n) {\n const locale = addFallbackLocale(localeArg, this.payload)\n\n const { data: response, error } = await this.client.POST('/api/v0/documents:find', {\n body: {\n collection,\n contentSystemId: this.contentSystemId,\n join: convertPayloadJoinsToContentAPI(this.payload, collection, joins),\n limit,\n locale,\n page: page ?? 1,\n sort: addFallbackSort(sort, this.payload, collection),\n where: convertPayloadWhereToContentAPI(where ?? {}),\n ...buildMeta(this.payload, { collection, locale, where }),\n },\n })\n\n if (error) {\n throw new Error(`Content API findMany error: ${JSON.stringify(error)}`)\n }\n if (!response) {\n throw new Error('No response from findMany')\n }\n\n return unwrapFindResponse(this.payload, response.result, collection)\n}\n\nasync function find(this: ContentAPIAdapter, args: FindArgs) {\n const collectionConfig = this.payload.config.collections.find((c) => c.slug === args.collection)\n return findMany.call(this, {\n collection: args.collection,\n joins: args.joins,\n // TODO: FindArgs.limit should be 'number' not 'number | undefined'\n // is sanitized by Payload Core before calling the adapter (defaults to 10 or 0 based on pagination)\n limit: args.limit!,\n locale: args.locale,\n page: args.page ?? 1,\n pagination: args.pagination,\n sort: args.sort || collectionConfig?.defaultSort,\n where: args.where,\n })\n}\n\n// TODO: remove Omit when this PR is released: https://github.com/payloadcms/payload/pull/15183\nasync function findVersions(this: ContentAPIAdapter, args: Omit<FindVersionsArgs, 'skip'>) {\n const sortWithFallback = addFallbackSort(args.sort || '-updatedAt', this.payload, args.collection)\n\n const whereClause = convertPayloadWhereToContentAPI(args.where ?? {}, {\n parentToDocumentId: true,\n stripVersionPrefix: true,\n })\n const locale = addFallbackLocale(args.locale, this.payload)\n\n const { data: response, error } = await this.client.POST('/api/v0/document_versions:find', {\n body: {\n collection: args.collection,\n contentSystemId: this.contentSystemId,\n // TODO: FindVersionsArgs.limit should be 'number' not 'number | undefined'\n // is sanitized by Payload Core before calling the adapter (defaults to 10 or 0 based on pagination)\n limit: args.limit!,\n locale,\n page: args.page ?? 1,\n sort: sortWithFallback,\n where: whereClause,\n ...buildMeta(this.payload, {\n collection: args.collection,\n locale,\n where: args.where,\n }),\n },\n })\n\n if (error) {\n throw new Error(`Content API findVersions error: ${JSON.stringify(error)}`)\n }\n if (!response) {\n throw new Error('No response from findVersions')\n }\n\n return unwrapFindResponse(this.payload, response.result, args.collection)\n}\n\nasync function queryDrafts(this: ContentAPIAdapter, args: QueryDraftsArgs) {\n const versionsResult = await this.findVersions({\n collection: args.collection,\n limit: args.limit,\n locale: args.locale,\n page: args.page,\n pagination: args.pagination,\n sort: args.sort,\n where: { ...args.where, latest: { equals: true } },\n })\n\n // queryDrafts should return documents with fields at root level, not nested in 'version'\n // So we need to unwrap the version structure and merge version fields to root\n const docs = versionsResult.docs.map((versionDoc) => {\n const { version, ...versionMeta } = versionDoc\n return {\n ...versionMeta,\n ...version,\n // Keep version metadata like parent, but document fields take precedence\n id: version.id, // Document ID, not version ID\n }\n })\n\n return {\n ...versionsResult,\n docs,\n }\n}\n\nasync function createVersion(this: ContentAPIAdapter, args: CreateVersionArgs) {\n const { data: response, error } = await this.client.POST('/api/v0/document_versions:create', {\n body: {\n collection: args.collectionSlug,\n contentSystemId: this.contentSystemId,\n versionDoc: {\n createdAt: args.createdAt,\n latest: !args.autosave,\n parent: String(args.parent),\n updatedAt: args.updatedAt,\n version: dataToContentAPI(this.payload, args.collectionSlug, args.versionData, {\n applyDefaults: true,\n publishedLocale: args.publishedLocale,\n }),\n },\n },\n })\n\n if (error) {\n throw new Error(`Content API createVersion error: ${JSON.stringify(error)}`)\n }\n if (!response) {\n throw new Error('No response from createVersion')\n }\n return unwrapDocument(this.payload, response.result, args.collectionSlug)\n}\n\nasync function updateVersion(this: ContentAPIAdapter, args: UpdateVersionArgs) {\n const where = args.where ?? { id: { equals: args.id } }\n const locale = addFallbackLocale(args.locale, this.payload)\n\n // versionData contains version metadata plus nested version content\n const { publishedLocale, version, ...versionMeta } = args.versionData\n\n const { data: response, error } = await this.client.POST('/api/v0/document_versions:update', {\n body: {\n collection: args.collection,\n contentSystemId: this.contentSystemId,\n createOnMissing: false,\n locale,\n versionDoc: {\n createdAt: versionMeta.createdAt,\n latest: versionMeta.latest,\n parent: versionMeta.parent != null ? String(versionMeta.parent) : undefined,\n updatedAt: versionMeta.updatedAt,\n version: dataToContentAPI(this.payload, args.collection, version, { publishedLocale }),\n },\n where: convertPayloadWhereToContentAPI(where, { stripVersionPrefix: true }),\n ...buildMeta(this.payload, { collection: args.collection, locale, where }),\n },\n })\n\n if (error) {\n throw new Error(`Content API updateVersion error: ${JSON.stringify(error)}`)\n }\n if (!response?.result || !('data' in response.result)) {\n throw new Error('No document data in updateVersion response')\n }\n\n const doc = response.result.data[0]\n if (!doc) {\n return null\n }\n\n return unwrapDocument(this.payload, doc, args.collection)\n}\n\nasync function deleteVersions(this: ContentAPIAdapter, args: DeleteVersionsArgs) {\n if (!args.collection) {\n throw new Error('deleteVersions requires a collection')\n }\n\n const locale = addFallbackLocale(args.locale, this.payload)\n\n const { error } = await this.client.POST('/api/v0/document_versions:delete', {\n body: {\n collection: args.collection,\n contentSystemId: this.contentSystemId,\n locale,\n where: convertPayloadWhereToContentAPI(args.where, { stripVersionPrefix: true }),\n ...buildMeta(this.payload, {\n collection: args.collection,\n locale,\n where: args.where,\n }),\n },\n })\n\n if (error) {\n throw new Error(`Content API deleteVersions error: ${JSON.stringify(error)}`)\n }\n}\n\nasync function findOne(this: ContentAPIAdapter, args: FindOneArgs) {\n const { docs } = await this.find({\n collection: args.collection,\n joins: args.joins,\n limit: 1,\n locale: args.locale,\n pagination: false,\n where: args.where,\n })\n return docs[0] ?? null\n}\n\nasync function updateMany(this: ContentAPIAdapter, args: UpdateManyArgs) {\n const locale = addFallbackLocale(args.locale, this.payload)\n\n const { data: response, error } = await this.client.POST('/api/v0/documents:update', {\n body: {\n collection: args.collection,\n contentSystemId: this.contentSystemId,\n createOnMissing: false,\n doc: dataToContentAPI(this.payload, args.collection, args.data),\n limit: args.limit,\n locale,\n returning: {},\n sort: addFallbackSort(args.sort || '-updatedAt', this.payload, args.collection),\n where: convertPayloadWhereToContentAPI(args.where),\n ...buildMeta(this.payload, {\n collection: args.collection,\n locale,\n where: args.where,\n }),\n },\n })\n\n if (error) {\n throw new Error(`Content API updateMany error: ${JSON.stringify(error)}`)\n }\n if (!response) {\n throw new Error('No response from updateMany')\n }\n\n if (response.result && 'data' in response.result) {\n return response.result.data.map((doc) => unwrapDocument(this.payload, doc, args.collection))\n }\n return null\n}\n\nasync function updateOne(this: ContentAPIAdapter, args: UpdateOneArgs) {\n const locale = addFallbackLocale(args.locale, this.payload)\n const where = args.where ?? { id: { equals: args.id } }\n\n const { data: response, error } = await this.client.POST('/api/v0/documents:update', {\n body: {\n collection: args.collection,\n contentSystemId: this.contentSystemId,\n createOnMissing: false,\n doc: dataToContentAPI(this.payload, args.collection, args.data),\n locale,\n returning: {},\n where: convertPayloadWhereToContentAPI(where),\n ...buildMeta(this.payload, { collection: args.collection, locale, where }),\n },\n })\n\n if (error) {\n throw new Error(`Content API updateOne error: ${JSON.stringify(error)}`)\n }\n if (!response) {\n throw new Error('No response from updateOne')\n }\n if (!response.result || !('data' in response.result)) {\n throw new Error('Unexpected response format from updateOne')\n }\n\n const doc = response.result.data[0]\n if (!doc) {\n return null\n }\n\n return unwrapDocument(this.payload, doc, args.collection)\n}\n\nasync function deleteMany(this: ContentAPIAdapter, args: DeleteManyArgs) {\n const locale = addFallbackLocale(args.req?.locale, this.payload)\n\n const { error } = await this.client.POST('/api/v0/documents:delete', {\n body: {\n collection: args.collection,\n contentSystemId: this.contentSystemId,\n locale,\n where: convertPayloadWhereToContentAPI(args.where),\n ...buildMeta(this.payload, {\n collection: args.collection,\n locale,\n where: args.where,\n }),\n },\n })\n\n if (error) {\n throw new Error(`Content API deleteMany error: ${JSON.stringify(error)}`)\n }\n}\n\nasync function deleteOne(this: ContentAPIAdapter, args: DeleteOneArgs) {\n const locale = addFallbackLocale(args.req?.locale, this.payload)\n\n const { data: response, error } = await this.client.POST('/api/v0/documents:delete', {\n body: {\n collection: args.collection,\n contentSystemId: this.contentSystemId,\n locale,\n returning: {}, // Request deleted document back\n where: convertPayloadWhereToContentAPI(args.where),\n ...buildMeta(this.payload, {\n collection: args.collection,\n locale,\n where: args.where,\n }),\n },\n })\n\n if (error) {\n throw new Error(`Content API deleteOne error: ${JSON.stringify(error)}`)\n }\n if (!response?.result || !('data' in response.result)) {\n throw new Error('No document data in deleteOne response')\n }\n\n const doc = response.result.data[0]\n if (!doc) {\n return null\n }\n\n return unwrapDocument(this.payload, doc, args.collection)\n}\n\nasync function create(this: ContentAPIAdapter, args: CreateArgs) {\n const isGlobalCollection = args.collection.startsWith('_global-')\n const customIDType = this.payload.collections[args.collection]?.customIDType\n const id =\n (isGlobalCollection || customIDType || this.allowIDOnCreate) &&\n args.data.id != null &&\n (typeof args.data.id === 'string' || typeof args.data.id === 'number')\n ? String(args.data.id)\n : uuid()\n const locale = addFallbackLocale(args.locale, this.payload)\n\n const { data: response, error } = await this.client.POST('/api/v0/documents:create', {\n body: {\n collection: args.collection,\n contentSystemId: this.contentSystemId,\n doc: {\n ...dataToContentAPI(this.payload, args.collection, args.data, {\n applyDefaults: true,\n createdAt: true,\n }),\n id,\n },\n locale,\n ...buildMeta(this.payload, { collection: args.collection, locale }),\n },\n })\n\n if (error) {\n throw new Error(`Content API create error: ${JSON.stringify(error)}`)\n }\n if (!response) {\n throw new Error('No response from create')\n }\n return unwrapDocument(this.payload, response.result, args.collection)\n}\n\nasync function clearDatabase(this: ContentAPIAdapter) {\n this.payload.logger.info(`---- CLEARING CONTENT API DATABASE ----`)\n try {\n await fetch(`${this.url}/dev/clear-db`, {\n headers: { 'Content-Type': 'application/json' },\n method: 'POST',\n })\n this.payload.logger.info('---- CONTENT API DATABASE CLEARED ----')\n\n // Re-sync collections after clearing\n await syncCollections.call(this)\n } catch (error) {\n this.payload.logger.error(`Failed to clear database: ${(error as Error).message}`)\n throw error\n }\n}\n\nasync function count(this: ContentAPIAdapter, args: CountArgs) {\n const locale = addFallbackLocale(args.locale, this.payload)\n\n const { data: response, error } = await this.client.POST('/api/v0/documents:count', {\n body: {\n collection: args.collection,\n contentSystemId: this.contentSystemId,\n locale,\n where: convertPayloadWhereToContentAPI(args.where),\n ...buildMeta(this.payload, {\n collection: args.collection,\n locale,\n where: args.where,\n }),\n },\n })\n\n if (error) {\n throw new Error(`Content API count error: ${JSON.stringify(error)}`)\n }\n if (!response) {\n throw new Error('No response from count')\n }\n\n return { totalDocs: response.result.count }\n}\n\nasync function countVersions(this: ContentAPIAdapter, args: CountArgs) {\n const locale = addFallbackLocale(args.locale, this.payload)\n\n const { data: response, error } = await this.client.POST('/api/v0/document_versions:count', {\n body: {\n collection: args.collection,\n contentSystemId: this.contentSystemId,\n locale,\n where: convertPayloadWhereToContentAPI(args.where, { stripVersionPrefix: true }),\n ...buildMeta(this.payload, {\n collection: args.collection,\n locale,\n where: args.where,\n }),\n },\n })\n\n if (error) {\n throw new Error(`Content API countVersions error: ${JSON.stringify(error)}`)\n }\n if (!response) {\n throw new Error('No response from countVersions')\n }\n\n return { totalDocs: response.result.count }\n}\n\nasync function upsert(this: ContentAPIAdapter, args: UpsertArgs) {\n let documentId = args.data.id as string | undefined\n if (!documentId && args.where && 'id' in args.where) {\n const idClause = (args.where as Record<string, unknown>).id as Record<string, unknown>\n if (idClause && 'equals' in idClause) {\n documentId = idClause.equals as string\n }\n }\n if (!documentId) {\n documentId = uuid()\n }\n\n const locale = addFallbackLocale(args.locale, this.payload)\n\n const { data: response, error } = await this.client.POST('/api/v0/documents:update', {\n body: {\n collection: args.collection,\n contentSystemId: this.contentSystemId,\n createOnMissing: { id: documentId },\n doc: dataToContentAPI(this.payload, args.collection, args.data, {\n applyDefaults: true,\n createdAt: true,\n }),\n locale,\n where: convertPayloadWhereToContentAPI(args.where),\n ...buildMeta(this.payload, {\n collection: args.collection,\n locale,\n where: args.where,\n }),\n },\n })\n\n if (error) {\n throw new Error(`Content API upsert error: ${JSON.stringify(error)}`)\n }\n if (!response) {\n throw new Error('No response from upsert')\n }\n if (!response.result || !('data' in response.result)) {\n throw new Error('Unexpected response format from upsert')\n }\n\n const doc = response.result.data[0]\n if (!doc) {\n throw new Error('No document data in upsert response')\n }\n\n return unwrapDocument(this.payload, doc, args.collection)\n}\n\nfunction createGlobal(this: ContentAPIAdapter, args: CreateGlobalArgs) {\n return this.create({\n collection: getGlobalSlug(args.slug),\n data: { ...args.data, id: args.slug, globalType: args.slug },\n })\n}\n\nfunction findGlobal(this: ContentAPIAdapter, args: FindGlobalArgs) {\n return this.findOne({\n collection: getGlobalSlug(args.slug),\n locale: args.locale,\n where: args.where ?? {},\n })\n}\n\nasync function updateGlobal(this: ContentAPIAdapter, args: UpdateGlobalArgs) {\n // Use upsert to ensure the global exists\n // Use slug as the consistent document ID for globals\n return this.upsert({\n collection: getGlobalSlug(args.slug),\n data: args.data,\n where: { id: { equals: args.slug } },\n })\n}\n\n// TODO: remove Omit when this PR is released: https://github.com/payloadcms/payload/pull/15183\nfunction findGlobalVersions(this: ContentAPIAdapter, args: Omit<FindGlobalVersionsArgs, 'skip'>) {\n return this.findVersions({\n collection: getGlobalSlug(args.global),\n limit: args.limit,\n locale: args.locale,\n page: args.page,\n pagination: args.pagination,\n sort: args.sort,\n where: args.where,\n })\n}\n\nfunction createGlobalVersion(this: ContentAPIAdapter, args: CreateGlobalVersionArgs) {\n // For globals, use the globalSlug as the consistent document ID\n // This matches what we do in updateGlobal\n return this.createVersion({\n autosave: args.autosave,\n collectionSlug: getGlobalSlug(args.globalSlug),\n createdAt: args.createdAt,\n parent: args.globalSlug,\n publishedLocale: args.publishedLocale,\n updatedAt: args.updatedAt,\n versionData: args.versionData,\n })\n}\n\nfunction updateGlobalVersion(this: ContentAPIAdapter, args: UpdateGlobalVersionArgs) {\n // UpdateVersion requires either id OR where, not both\n if (args.id !== undefined) {\n return this.updateVersion({\n id: args.id,\n collection: getGlobalSlug(args.global),\n locale: args.locale,\n versionData: args.versionData,\n })\n }\n // args.where is guaranteed by Payload when args.id is undefined\n return this.updateVersion({\n collection: getGlobalSlug(args.global),\n locale: args.locale,\n versionData: args.versionData,\n where: args.where,\n })\n}\n\nfunction countGlobalVersions(this: ContentAPIAdapter, args: CountGlobalVersionArgs) {\n return this.countVersions({\n collection: getGlobalSlug(args.global),\n locale: args.locale,\n where: args.where,\n })\n}\n\nexport const contentAPIAdapter = (opts: ContentAPIOptions): DatabaseAdapterObj => ({\n name: 'content-api',\n defaultIDType: 'text',\n init: ({ payload }) => {\n const client = createClient<paths>({ baseUrl: opts.url })\n\n const middlewareOpts = {\n auth: opts.auth,\n contentSystemId: opts.contentSystemId,\n logger: payload.logger,\n url: opts.url,\n }\n\n client.use(createAuthMiddleware(middlewareOpts))\n client.use(createErrorMiddleware(middlewareOpts))\n\n return createDatabaseAdapter<ContentAPIAdapter>({\n name: 'content-api',\n allowIDOnCreate: opts.allowIDOnCreate ?? false,\n auth: opts.auth,\n beginTransaction: () => Promise.resolve(null),\n clearDatabase: clearDatabase as () => Promise<void>,\n client,\n commitTransaction: async () => {},\n contentSystemId: opts.contentSystemId,\n count: count as Count,\n countGlobalVersions: countGlobalVersions as CountGlobalVersions,\n countVersions: countVersions as CountVersions,\n create: create as Create,\n createGlobal: createGlobal as CreateGlobal,\n createGlobalVersion: createGlobalVersion as CreateGlobalVersion,\n createVersion: createVersion as CreateVersion,\n defaultIDType: 'text',\n deleteMany: deleteMany as DeleteMany,\n deleteOne: deleteOne as DeleteOne,\n deleteVersions: deleteVersions as DeleteVersions,\n find: find as Find,\n findDistinct: () =>\n Promise.reject(new Error('findDistinct is not yet implemented for Content API adapter')),\n findGlobal: findGlobal as FindGlobal,\n findGlobalVersions: findGlobalVersions as FindGlobalVersions,\n findOne: findOne as FindOne,\n findVersions: findVersions as FindVersions,\n init,\n packageName: '@payloadcms/db-content-api',\n payload,\n queryDrafts: queryDrafts as QueryDrafts,\n rollbackTransaction: async () => {},\n updateGlobal: updateGlobal as UpdateGlobal,\n updateGlobalVersion: updateGlobalVersion as UpdateGlobalVersion,\n updateMany: updateMany as UpdateMany,\n updateOne: updateOne as UpdateOne,\n updateVersion: updateVersion as UpdateVersion,\n upsert: upsert as Upsert,\n url: opts.url,\n })\n },\n})\n"],"names":["createClient","createDatabaseAdapter","v4","uuid","getGlobalSlug","addFallbackSort","unwrapDocument","unwrapFindResponse","createAuthMiddleware","createErrorMiddleware","dataToContentAPI","convertPayloadJoinsToContentAPI","addFallbackLocale","buildMeta","convertPayloadWhereToContentAPI","syncCollections","existingIds","data","response","error","client","GET","params","path","contentSystemId","Error","JSON","stringify","Set","map","c","id","payload","logger","info","size","warn","message","collection","config","collections","has","slug","createCollection","call","global","globals","globalId","init","auth","mode","process","env","PAYLOAD_DROP_DATABASE","clearDatabase","collectionId","POST","body","errorMessage","includes","findMany","joins","limit","locale","localeArg","page","pagination","_pagination","sort","where","join","result","find","args","collectionConfig","defaultSort","findVersions","sortWithFallback","whereClause","parentToDocumentId","stripVersionPrefix","queryDrafts","versionsResult","latest","equals","docs","versionDoc","version","versionMeta","createVersion","collectionSlug","createdAt","autosave","parent","String","updatedAt","versionData","applyDefaults","publishedLocale","updateVersion","createOnMissing","undefined","doc","deleteVersions","findOne","updateMany","returning","updateOne","deleteMany","req","deleteOne","create","isGlobalCollection","startsWith","customIDType","allowIDOnCreate","fetch","url","headers","method","count","totalDocs","countVersions","upsert","documentId","idClause","createGlobal","globalType","findGlobal","updateGlobal","findGlobalVersions","createGlobalVersion","globalSlug","updateGlobalVersion","countGlobalVersions","contentAPIAdapter","opts","name","defaultIDType","baseUrl","middlewareOpts","use","beginTransaction","Promise","resolve","commitTransaction","findDistinct","reject","packageName","rollbackTransaction"],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PathType can be either a simple string type or an object with additional metadata.
|
|
3
|
+
*
|
|
4
|
+
* Simple types: "array" - for array fields, blocks, or hasMany relationships/selects
|
|
5
|
+
*
|
|
6
|
+
* Relationship types include collection info needed for Content API to perform JOINs:
|
|
7
|
+
* - type: "relationship" for stored references, "join" for virtual reverse lookups
|
|
8
|
+
* - collection: target collection slug (or array for polymorphic)
|
|
9
|
+
* - hasMany: whether it stores multiple references
|
|
10
|
+
*
|
|
11
|
+
* TODO: This type is defined here temporarily so Content API can test the integration.
|
|
12
|
+
* Once Content API implements support for this, the type should be generated from openapi.json.
|
|
13
|
+
*/
|
|
14
|
+
export type PathTypeValue = 'array' | {
|
|
15
|
+
collection: string | string[];
|
|
16
|
+
hasMany?: boolean;
|
|
17
|
+
/** For join fields, the field path in the related collection that points back */
|
|
18
|
+
on?: string;
|
|
19
|
+
type: 'join' | 'relationship';
|
|
20
|
+
};
|
|
21
|
+
export type PathTypesRecord = Record<string, PathTypeValue>;
|
|
22
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/db-content-api/temp-utilities/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,MAAM,MAAM,aAAa,GACrB,OAAO,GACP;IACE,UAAU,EAAE,MAAM,GAAG,MAAM,EAAE,CAAA;IAC7B,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,iFAAiF;IACjF,EAAE,CAAC,EAAE,MAAM,CAAA;IACX,IAAI,EAAE,MAAM,GAAG,cAAc,CAAA;CAC9B,CAAA;AAEL,MAAM,MAAM,eAAe,GAAG,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAA"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PathType can be either a simple string type or an object with additional metadata.
|
|
3
|
+
*
|
|
4
|
+
* Simple types: "array" - for array fields, blocks, or hasMany relationships/selects
|
|
5
|
+
*
|
|
6
|
+
* Relationship types include collection info needed for Content API to perform JOINs:
|
|
7
|
+
* - type: "relationship" for stored references, "join" for virtual reverse lookups
|
|
8
|
+
* - collection: target collection slug (or array for polymorphic)
|
|
9
|
+
* - hasMany: whether it stores multiple references
|
|
10
|
+
*
|
|
11
|
+
* TODO: This type is defined here temporarily so Content API can test the integration.
|
|
12
|
+
* Once Content API implements support for this, the type should be generated from openapi.json.
|
|
13
|
+
*/ export { };
|
|
14
|
+
|
|
15
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/db-content-api/temp-utilities/types.ts"],"sourcesContent":["/**\n * PathType can be either a simple string type or an object with additional metadata.\n *\n * Simple types: \"array\" - for array fields, blocks, or hasMany relationships/selects\n *\n * Relationship types include collection info needed for Content API to perform JOINs:\n * - type: \"relationship\" for stored references, \"join\" for virtual reverse lookups\n * - collection: target collection slug (or array for polymorphic)\n * - hasMany: whether it stores multiple references\n *\n * TODO: This type is defined here temporarily so Content API can test the integration.\n * Once Content API implements support for this, the type should be generated from openapi.json.\n */\nexport type PathTypeValue =\n | 'array'\n | {\n collection: string | string[]\n hasMany?: boolean\n /** For join fields, the field path in the related collection that points back */\n on?: string\n type: 'join' | 'relationship'\n }\n\nexport type PathTypesRecord = Record<string, PathTypeValue>\n"],"names":[],"mappings":"AAAA;;;;;;;;;;;;CAYC,GAWD,WAA2D"}
|
|
@@ -1,6 +1,18 @@
|
|
|
1
1
|
import type { Payload } from 'payload';
|
|
2
2
|
import type { components } from '../../generated/content-api-types.js';
|
|
3
3
|
type DataWithOperations = components['schemas']['DataWithOperations'];
|
|
4
|
+
interface DataToContentAPIOptions {
|
|
5
|
+
/** Apply static defaults for undefined fields */
|
|
6
|
+
applyDefaults?: boolean;
|
|
7
|
+
/** Add createdAt timestamp */
|
|
8
|
+
createdAt?: boolean;
|
|
9
|
+
/**
|
|
10
|
+
* Transform publishedLocale to localizeStatus format.
|
|
11
|
+
* When provided, converts `_status: 'published'` + `publishedLocale: 'en'`
|
|
12
|
+
* to `_status: { en: 'published' }` format.
|
|
13
|
+
*/
|
|
14
|
+
publishedLocale?: string;
|
|
15
|
+
}
|
|
4
16
|
/**
|
|
5
17
|
* Transform data before sending to Content API (WRITE operations)
|
|
6
18
|
*
|
|
@@ -10,13 +22,11 @@ type DataWithOperations = components['schemas']['DataWithOperations'];
|
|
|
10
22
|
* - RichText fields: Objects -> JSON strings
|
|
11
23
|
* - Virtual fields: Remove fields with `virtual: true` (pure virtual fields should never be saved)
|
|
12
24
|
* - Timestamps: Add updatedAt (always), and createdAt (when createdAt=true)
|
|
25
|
+
* - publishedLocale: Transform to localizeStatus format (when publishedLocale is provided)
|
|
13
26
|
*
|
|
14
27
|
* Note: Date fields are automatically converted to ISO strings by JSON.stringify()
|
|
15
28
|
*/
|
|
16
|
-
export declare function dataToContentAPI(payload: Payload, collectionSlug: string, data: unknown, options?:
|
|
17
|
-
applyDefaults?: boolean;
|
|
18
|
-
createdAt?: boolean;
|
|
19
|
-
}): DataWithOperations;
|
|
29
|
+
export declare function dataToContentAPI(payload: Payload, collectionSlug: string, data: unknown, options?: DataToContentAPIOptions): DataWithOperations;
|
|
20
30
|
/**
|
|
21
31
|
* Transform data received from Content API (READ operations)
|
|
22
32
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/db-content-api/utilities/data/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAkC,OAAO,EAA0B,MAAM,SAAS,CAAA;AAI9F,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sCAAsC,CAAA;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/db-content-api/utilities/data/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAkC,OAAO,EAA0B,MAAM,SAAS,CAAA;AAI9F,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sCAAsC,CAAA;AAQtE,KAAK,kBAAkB,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC,oBAAoB,CAAC,CAAA;AAErE,UAAU,uBAAuB;IAC/B,iDAAiD;IACjD,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,8BAA8B;IAC9B,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB;;;;OAIG;IACH,eAAe,CAAC,EAAE,MAAM,CAAA;CACzB;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,OAAO,EAChB,cAAc,EAAE,MAAM,EACtB,IAAI,EAAE,OAAO,EACb,OAAO,CAAC,EAAE,uBAAuB,GAChC,kBAAkB,CAoFpB;AAED;;;;;;;;;GASG;AACH,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,OAAO,EAChB,cAAc,EAAE,MAAM,EACtB,IAAI,EAAE,OAAO,GACZ,OAAO,CA4GT"}
|
|
@@ -3,6 +3,7 @@ import { applyDefaults } from './applyDefaults.js';
|
|
|
3
3
|
import { castFieldValue } from './castFieldValue.js';
|
|
4
4
|
import { removeVirtualFields } from './removeVirtualFields.js';
|
|
5
5
|
import { stripFields } from './stripFields.js';
|
|
6
|
+
import { transformToLocalizeStatus } from './transformPublishedLocale.js';
|
|
6
7
|
/**
|
|
7
8
|
* Transform data before sending to Content API (WRITE operations)
|
|
8
9
|
*
|
|
@@ -12,14 +13,17 @@ import { stripFields } from './stripFields.js';
|
|
|
12
13
|
* - RichText fields: Objects -> JSON strings
|
|
13
14
|
* - Virtual fields: Remove fields with `virtual: true` (pure virtual fields should never be saved)
|
|
14
15
|
* - Timestamps: Add updatedAt (always), and createdAt (when createdAt=true)
|
|
16
|
+
* - publishedLocale: Transform to localizeStatus format (when publishedLocale is provided)
|
|
15
17
|
*
|
|
16
18
|
* Note: Date fields are automatically converted to ISO strings by JSON.stringify()
|
|
17
19
|
*/ export function dataToContentAPI(payload, collectionSlug, data, options) {
|
|
18
20
|
if (!data || typeof data !== 'object') {
|
|
19
21
|
return data;
|
|
20
22
|
}
|
|
23
|
+
// Transform publishedLocale to localizeStatus format before other transformations
|
|
24
|
+
const dataWithLocalizedStatus = transformToLocalizeStatus(data, options?.publishedLocale);
|
|
21
25
|
// Deep clone to avoid mutating original data
|
|
22
|
-
const transformed = JSON.parse(JSON.stringify(
|
|
26
|
+
const transformed = JSON.parse(JSON.stringify(dataWithLocalizedStatus));
|
|
23
27
|
// Get collection config
|
|
24
28
|
const isGlobal = collectionSlug.startsWith('_global-');
|
|
25
29
|
const actualSlug = isGlobal ? collectionSlug.substring(8) : collectionSlug;
|
|
@@ -134,15 +138,18 @@ import { stripFields } from './stripFields.js';
|
|
|
134
138
|
// Content API may store localized fields as JSON strings like "{\"en\":\"value\"}"
|
|
135
139
|
// so we need to parse them back to objects.
|
|
136
140
|
// Note: We return the full locale object - Payload Core handles flattening to requested locale.
|
|
141
|
+
// When requesting a specific locale (not 'all'), values are simple strings that won't parse.
|
|
142
|
+
// In that case, we silently keep the original value.
|
|
137
143
|
if ('localized' in field && field.localized && typeof value === 'string') {
|
|
138
144
|
try {
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
145
|
+
const parsed = JSON.parse(value);
|
|
146
|
+
// Only use parsed value if it's actually an object (locale -> value mapping)
|
|
147
|
+
// Simple strings like "EN Title" would parse to themselves, which we don't want
|
|
148
|
+
if (typeof parsed === 'object' && parsed !== null) {
|
|
149
|
+
current[field.name] = parsed;
|
|
150
|
+
}
|
|
151
|
+
} catch {
|
|
152
|
+
// Not valid JSON - keep original value (this is expected for single-locale requests)
|
|
146
153
|
}
|
|
147
154
|
} else if (field.type === 'richText' && typeof value === 'string') {
|
|
148
155
|
try {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/db-content-api/utilities/data/index.ts"],"sourcesContent":["import type { CollectionConfig, GlobalConfig, Payload, TraverseFieldsCallback } from 'payload'\n\nimport { flattenAllFields, traverseFields } from 'payload'\n\nimport type { components } from '../../generated/content-api-types.js'\n\nimport { applyDefaults } from './applyDefaults.js'\nimport { castFieldValue } from './castFieldValue.js'\nimport { removeVirtualFields } from './removeVirtualFields.js'\nimport { stripFields } from './stripFields.js'\n\ntype DataWithOperations = components['schemas']['DataWithOperations']\n\n/**\n * Transform data before sending to Content API (WRITE operations)\n *\n * Conversions applied:\n * - Default values: Apply static defaults for undefined fields (when applyDefaults=true)\n * - Type casting: Convert values to match field types (e.g., number -> string for text fields)\n * - RichText fields: Objects -> JSON strings\n * - Virtual fields: Remove fields with `virtual: true` (pure virtual fields should never be saved)\n * - Timestamps: Add updatedAt (always), and createdAt (when createdAt=true)\n *\n * Note: Date fields are automatically converted to ISO strings by JSON.stringify()\n */\nexport function dataToContentAPI(\n payload: Payload,\n collectionSlug: string,\n data: unknown,\n options?: { applyDefaults?: boolean; createdAt?: boolean },\n): DataWithOperations {\n if (!data || typeof data !== 'object') {\n return data as DataWithOperations\n }\n\n // Deep clone to avoid mutating original data\n const transformed = JSON.parse(JSON.stringify(data))\n\n // Get collection config\n const isGlobal = collectionSlug.startsWith('_global-')\n const actualSlug = isGlobal ? collectionSlug.substring(8) : collectionSlug\n const collectionConfig: CollectionConfig | GlobalConfig | undefined = isGlobal\n ? payload.config.globals?.find((g) => g.slug === actualSlug)\n : payload.config.collections.find((c) => c.slug === actualSlug)\n\n if (!collectionConfig?.fields) {\n return transformed as DataWithOperations\n }\n\n // Apply static defaults recursively to handle nested structures (arrays, groups)\n // This must happen before traverseFields to ensure defaults are in place\n if (options?.applyDefaults) {\n applyDefaults(transformed, collectionConfig.fields)\n }\n\n // Use Payload's traverseFields to iterate over all fields for transformations\n const callback: TraverseFieldsCallback = ({ field, ref }) => {\n if (!('name' in field) || !field.name) {\n return\n }\n if (!ref || typeof ref !== 'object') {\n return\n }\n\n const current = ref as Record<string, unknown>\n let value = current[field.name]\n\n // Transform existing values\n if (value !== null && value !== undefined) {\n // Step 1: Apply type casting (e.g., number -> string for text fields)\n value = castFieldValue(field, value)\n current[field.name] = value\n\n // Step 2: Apply Content API specific transformations\n // RichText: object -> JSON string\n if (field.type === 'richText' && typeof value !== 'string') {\n current[field.name] = JSON.stringify(value)\n }\n // Date fields are already handled by JSON.stringify() which converts Date -> ISO string\n }\n }\n\n traverseFields({ callback, fields: collectionConfig.fields, fillEmpty: false, ref: transformed })\n\n stripFields({\n config: payload.config,\n data: transformed,\n fields: flattenAllFields({ cache: true, fields: collectionConfig.fields }),\n reservedKeys: ['id', 'globalType'],\n })\n\n removeVirtualFields(transformed, collectionConfig.fields)\n\n // Convert numeric ID to string for Content API\n const customIDType = payload.collections?.[collectionSlug]?.customIDType\n if (customIDType === 'number') {\n transformed.id = String(transformed.id)\n }\n\n // Add timestamps (Content API no longer auto-sets these in DB)\n // updatedAt is always set, createdAt only on create operations\n const now = new Date().toISOString()\n transformed.updatedAt = now\n if (options?.createdAt) {\n transformed.createdAt = now\n }\n\n return transformed as DataWithOperations\n}\n\n/**\n * Transform data received from Content API (READ operations)\n *\n * Conversions applied:\n * - RichText fields: JSON strings -> Objects\n * - Virtual fields: Remove fields with `virtual: true` (should not be in DB but Content API backend may add them)\n *\n * Note: Date fields come as ISO strings from Content API and stay as strings\n * (matching MongoDB and other adapters' behavior)\n */\nexport function dataFromContentAPI(\n payload: Payload,\n collectionSlug: string,\n data: unknown,\n): unknown {\n if (!data || typeof data !== 'object') {\n return data\n }\n\n // Deep clone to avoid mutating original data\n const transformed = JSON.parse(JSON.stringify(data))\n\n // Get collection config\n const isGlobal = collectionSlug.startsWith('_global-')\n const actualSlug = isGlobal ? collectionSlug.substring(8) : collectionSlug\n const collectionConfig: CollectionConfig | GlobalConfig | undefined = isGlobal\n ? payload.config.globals?.find((g) => g.slug === actualSlug)\n : payload.config.collections.find((c) => c.slug === actualSlug)\n\n if (!collectionConfig?.fields) {\n return transformed\n }\n\n // Use Payload's traverseFields to iterate over all fields\n const callback: TraverseFieldsCallback = ({ field, parentPath, ref }) => {\n if (!('name' in field) || !field.name) {\n return\n }\n if (!ref || typeof ref !== 'object') {\n return\n }\n\n const current = ref as Record<string, unknown>\n const value = current[field.name]\n\n // Normalize undefined → null for optional fields\n // Content API may omit fields (undefined) but Payload expects null for optional fields\n if (value === undefined) {\n const isRequired = 'required' in field && field.required\n if (!isRequired) {\n current[field.name] = null\n }\n return\n }\n\n if (value !== null) {\n // Localized fields: JSON string -> parsed object\n // Content API may store localized fields as JSON strings like \"{\\\"en\\\":\\\"value\\\"}\"\n // so we need to parse them back to objects.\n // Note: We return the full locale object - Payload Core handles flattening to requested locale.\n if ('localized' in field && field.localized && typeof value === 'string') {\n try {\n current[field.name] = JSON.parse(value)\n } catch (error) {\n const fieldPath = parentPath ? `${parentPath}.${field.name}` : field.name\n payload.logger.warn({\n err: error instanceof Error ? error : new Error(String(error)),\n msg: `Failed to parse localized field '${fieldPath}' in collection '${collectionSlug}'`,\n })\n }\n }\n // RichText: JSON string -> object\n else if (field.type === 'richText' && typeof value === 'string') {\n try {\n current[field.name] = JSON.parse(value)\n } catch (error) {\n const fieldPath = parentPath ? `${parentPath}.${field.name}` : field.name\n payload.logger.warn({\n err: error instanceof Error ? error : new Error(String(error)),\n msg: `Failed to parse richtext field '${fieldPath}' in collection '${collectionSlug}'`,\n })\n }\n }\n // Date fields: Already ISO strings from Content API, no conversion needed\n }\n }\n\n traverseFields({ callback, fields: collectionConfig.fields, fillEmpty: false, ref: transformed })\n\n // Convert string ID to number if collection uses numeric custom ID\n const customIDType = payload.collections?.[collectionSlug]?.customIDType\n if (customIDType === 'number') {\n transformed.id = Number(transformed.id)\n }\n\n stripFields({\n config: payload.config,\n data: transformed,\n fields: flattenAllFields({ cache: true, fields: collectionConfig.fields }),\n reservedKeys: ['id', 'globalType'],\n })\n\n // Remove virtual fields - must happen AFTER stripFields\n removeVirtualFields(transformed, collectionConfig.fields)\n\n // Handle auth-specific fields that aren't in the field schema\n // When these fields are null in DB, Content API omits them from response (undefined)\n // But Payload expects them to be null, not undefined\n // Only add them if the collection has auth enabled\n if ('auth' in collectionConfig && collectionConfig.auth) {\n const authFields = ['resetPasswordExpiration', 'lockUntil']\n for (const fieldName of authFields) {\n if (!(fieldName in transformed)) {\n transformed[fieldName] = null\n }\n }\n }\n\n return transformed\n}\n"],"names":["flattenAllFields","traverseFields","applyDefaults","castFieldValue","removeVirtualFields","stripFields","dataToContentAPI","payload","collectionSlug","data","options","transformed","JSON","parse","stringify","isGlobal","startsWith","actualSlug","substring","collectionConfig","config","globals","find","g","slug","collections","c","fields","callback","field","ref","name","current","value","undefined","type","fillEmpty","cache","reservedKeys","customIDType","id","String","now","Date","toISOString","updatedAt","createdAt","dataFromContentAPI","parentPath","isRequired","required","localized","error","fieldPath","logger","warn","err","Error","msg","Number","auth","authFields","fieldName"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../../../src/db-content-api/utilities/data/index.ts"],"sourcesContent":["import type { CollectionConfig, GlobalConfig, Payload, TraverseFieldsCallback } from 'payload'\n\nimport { flattenAllFields, traverseFields } from 'payload'\n\nimport type { components } from '../../generated/content-api-types.js'\n\nimport { applyDefaults } from './applyDefaults.js'\nimport { castFieldValue } from './castFieldValue.js'\nimport { removeVirtualFields } from './removeVirtualFields.js'\nimport { stripFields } from './stripFields.js'\nimport { transformToLocalizeStatus } from './transformPublishedLocale.js'\n\ntype DataWithOperations = components['schemas']['DataWithOperations']\n\ninterface DataToContentAPIOptions {\n /** Apply static defaults for undefined fields */\n applyDefaults?: boolean\n /** Add createdAt timestamp */\n createdAt?: boolean\n /**\n * Transform publishedLocale to localizeStatus format.\n * When provided, converts `_status: 'published'` + `publishedLocale: 'en'`\n * to `_status: { en: 'published' }` format.\n */\n publishedLocale?: string\n}\n\n/**\n * Transform data before sending to Content API (WRITE operations)\n *\n * Conversions applied:\n * - Default values: Apply static defaults for undefined fields (when applyDefaults=true)\n * - Type casting: Convert values to match field types (e.g., number -> string for text fields)\n * - RichText fields: Objects -> JSON strings\n * - Virtual fields: Remove fields with `virtual: true` (pure virtual fields should never be saved)\n * - Timestamps: Add updatedAt (always), and createdAt (when createdAt=true)\n * - publishedLocale: Transform to localizeStatus format (when publishedLocale is provided)\n *\n * Note: Date fields are automatically converted to ISO strings by JSON.stringify()\n */\nexport function dataToContentAPI(\n payload: Payload,\n collectionSlug: string,\n data: unknown,\n options?: DataToContentAPIOptions,\n): DataWithOperations {\n if (!data || typeof data !== 'object') {\n return data as DataWithOperations\n }\n\n // Transform publishedLocale to localizeStatus format before other transformations\n const dataWithLocalizedStatus = transformToLocalizeStatus(\n data as Record<string, unknown>,\n options?.publishedLocale,\n )\n\n // Deep clone to avoid mutating original data\n const transformed = JSON.parse(JSON.stringify(dataWithLocalizedStatus))\n\n // Get collection config\n const isGlobal = collectionSlug.startsWith('_global-')\n const actualSlug = isGlobal ? collectionSlug.substring(8) : collectionSlug\n const collectionConfig: CollectionConfig | GlobalConfig | undefined = isGlobal\n ? payload.config.globals?.find((g) => g.slug === actualSlug)\n : payload.config.collections.find((c) => c.slug === actualSlug)\n\n if (!collectionConfig?.fields) {\n return transformed as DataWithOperations\n }\n\n // Apply static defaults recursively to handle nested structures (arrays, groups)\n // This must happen before traverseFields to ensure defaults are in place\n if (options?.applyDefaults) {\n applyDefaults(transformed, collectionConfig.fields)\n }\n\n // Use Payload's traverseFields to iterate over all fields for transformations\n const callback: TraverseFieldsCallback = ({ field, ref }) => {\n if (!('name' in field) || !field.name) {\n return\n }\n if (!ref || typeof ref !== 'object') {\n return\n }\n\n const current = ref as Record<string, unknown>\n let value = current[field.name]\n\n // Transform existing values\n if (value !== null && value !== undefined) {\n // Step 1: Apply type casting (e.g., number -> string for text fields)\n value = castFieldValue(field, value)\n current[field.name] = value\n\n // Step 2: Apply Content API specific transformations\n // RichText: object -> JSON string\n if (field.type === 'richText' && typeof value !== 'string') {\n current[field.name] = JSON.stringify(value)\n }\n // Date fields are already handled by JSON.stringify() which converts Date -> ISO string\n }\n }\n\n traverseFields({ callback, fields: collectionConfig.fields, fillEmpty: false, ref: transformed })\n\n stripFields({\n config: payload.config,\n data: transformed,\n fields: flattenAllFields({ cache: true, fields: collectionConfig.fields }),\n reservedKeys: ['id', 'globalType'],\n })\n\n removeVirtualFields(transformed, collectionConfig.fields)\n\n // Convert numeric ID to string for Content API\n const customIDType = payload.collections?.[collectionSlug]?.customIDType\n if (customIDType === 'number') {\n transformed.id = String(transformed.id)\n }\n\n // Add timestamps (Content API no longer auto-sets these in DB)\n // updatedAt is always set, createdAt only on create operations\n const now = new Date().toISOString()\n transformed.updatedAt = now\n if (options?.createdAt) {\n transformed.createdAt = now\n }\n\n return transformed as DataWithOperations\n}\n\n/**\n * Transform data received from Content API (READ operations)\n *\n * Conversions applied:\n * - RichText fields: JSON strings -> Objects\n * - Virtual fields: Remove fields with `virtual: true` (should not be in DB but Content API backend may add them)\n *\n * Note: Date fields come as ISO strings from Content API and stay as strings\n * (matching MongoDB and other adapters' behavior)\n */\nexport function dataFromContentAPI(\n payload: Payload,\n collectionSlug: string,\n data: unknown,\n): unknown {\n if (!data || typeof data !== 'object') {\n return data\n }\n\n // Deep clone to avoid mutating original data\n const transformed = JSON.parse(JSON.stringify(data))\n\n // Get collection config\n const isGlobal = collectionSlug.startsWith('_global-')\n const actualSlug = isGlobal ? collectionSlug.substring(8) : collectionSlug\n const collectionConfig: CollectionConfig | GlobalConfig | undefined = isGlobal\n ? payload.config.globals?.find((g) => g.slug === actualSlug)\n : payload.config.collections.find((c) => c.slug === actualSlug)\n\n if (!collectionConfig?.fields) {\n return transformed\n }\n\n // Use Payload's traverseFields to iterate over all fields\n const callback: TraverseFieldsCallback = ({ field, parentPath, ref }) => {\n if (!('name' in field) || !field.name) {\n return\n }\n if (!ref || typeof ref !== 'object') {\n return\n }\n\n const current = ref as Record<string, unknown>\n const value = current[field.name]\n\n // Normalize undefined → null for optional fields\n // Content API may omit fields (undefined) but Payload expects null for optional fields\n if (value === undefined) {\n const isRequired = 'required' in field && field.required\n if (!isRequired) {\n current[field.name] = null\n }\n return\n }\n\n if (value !== null) {\n // Localized fields: JSON string -> parsed object\n // Content API may store localized fields as JSON strings like \"{\\\"en\\\":\\\"value\\\"}\"\n // so we need to parse them back to objects.\n // Note: We return the full locale object - Payload Core handles flattening to requested locale.\n // When requesting a specific locale (not 'all'), values are simple strings that won't parse.\n // In that case, we silently keep the original value.\n if ('localized' in field && field.localized && typeof value === 'string') {\n try {\n const parsed = JSON.parse(value)\n // Only use parsed value if it's actually an object (locale -> value mapping)\n // Simple strings like \"EN Title\" would parse to themselves, which we don't want\n if (typeof parsed === 'object' && parsed !== null) {\n current[field.name] = parsed\n }\n } catch {\n // Not valid JSON - keep original value (this is expected for single-locale requests)\n }\n }\n // RichText: JSON string -> object\n else if (field.type === 'richText' && typeof value === 'string') {\n try {\n current[field.name] = JSON.parse(value)\n } catch (error) {\n const fieldPath = parentPath ? `${parentPath}.${field.name}` : field.name\n payload.logger.warn({\n err: error instanceof Error ? error : new Error(String(error)),\n msg: `Failed to parse richtext field '${fieldPath}' in collection '${collectionSlug}'`,\n })\n }\n }\n // Date fields: Already ISO strings from Content API, no conversion needed\n }\n }\n\n traverseFields({ callback, fields: collectionConfig.fields, fillEmpty: false, ref: transformed })\n\n // Convert string ID to number if collection uses numeric custom ID\n const customIDType = payload.collections?.[collectionSlug]?.customIDType\n if (customIDType === 'number') {\n transformed.id = Number(transformed.id)\n }\n\n stripFields({\n config: payload.config,\n data: transformed,\n fields: flattenAllFields({ cache: true, fields: collectionConfig.fields }),\n reservedKeys: ['id', 'globalType'],\n })\n\n // Remove virtual fields - must happen AFTER stripFields\n removeVirtualFields(transformed, collectionConfig.fields)\n\n // Handle auth-specific fields that aren't in the field schema\n // When these fields are null in DB, Content API omits them from response (undefined)\n // But Payload expects them to be null, not undefined\n // Only add them if the collection has auth enabled\n if ('auth' in collectionConfig && collectionConfig.auth) {\n const authFields = ['resetPasswordExpiration', 'lockUntil']\n for (const fieldName of authFields) {\n if (!(fieldName in transformed)) {\n transformed[fieldName] = null\n }\n }\n }\n\n return transformed\n}\n"],"names":["flattenAllFields","traverseFields","applyDefaults","castFieldValue","removeVirtualFields","stripFields","transformToLocalizeStatus","dataToContentAPI","payload","collectionSlug","data","options","dataWithLocalizedStatus","publishedLocale","transformed","JSON","parse","stringify","isGlobal","startsWith","actualSlug","substring","collectionConfig","config","globals","find","g","slug","collections","c","fields","callback","field","ref","name","current","value","undefined","type","fillEmpty","cache","reservedKeys","customIDType","id","String","now","Date","toISOString","updatedAt","createdAt","dataFromContentAPI","parentPath","isRequired","required","localized","parsed","error","fieldPath","logger","warn","err","Error","msg","Number","auth","authFields","fieldName"],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Transform publishedLocale to localizeStatus format
|
|
3
|
+
*
|
|
4
|
+
* publishedLocale is a legacy API that is going to be removed in Payload v4 in favor of localizeStatus.
|
|
5
|
+
* The db-adapter transforms publishedLocale here so Content API doesn't need to know about it.
|
|
6
|
+
*/
|
|
7
|
+
type VersionData = Record<string, unknown>;
|
|
8
|
+
/**
|
|
9
|
+
* Transforms version data to use localizeStatus format
|
|
10
|
+
*
|
|
11
|
+
* If `publishedLocale` is provided and `_status` is a string, transforms to object format.
|
|
12
|
+
* If `_status` is already an object, leaves it unchanged.
|
|
13
|
+
*
|
|
14
|
+
* @example
|
|
15
|
+
* // Input (old format):
|
|
16
|
+
* { _status: 'published', text: 'Hello' }, publishedLocale: 'en'
|
|
17
|
+
*
|
|
18
|
+
* // Output (new format):
|
|
19
|
+
* { _status: { en: 'published' }, text: 'Hello' }
|
|
20
|
+
*/
|
|
21
|
+
export declare function transformToLocalizeStatus(versionData: VersionData, publishedLocale?: string): VersionData;
|
|
22
|
+
export {};
|
|
23
|
+
//# sourceMappingURL=transformPublishedLocale.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transformPublishedLocale.d.ts","sourceRoot":"","sources":["../../../../src/db-content-api/utilities/data/transformPublishedLocale.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,KAAK,WAAW,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;AAE1C;;;;;;;;;;;;GAYG;AACH,wBAAgB,yBAAyB,CACvC,WAAW,EAAE,WAAW,EACxB,eAAe,CAAC,EAAE,MAAM,GACvB,WAAW,CA0Bb"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Transform publishedLocale to localizeStatus format
|
|
3
|
+
*
|
|
4
|
+
* publishedLocale is a legacy API that is going to be removed in Payload v4 in favor of localizeStatus.
|
|
5
|
+
* The db-adapter transforms publishedLocale here so Content API doesn't need to know about it.
|
|
6
|
+
*/ /**
|
|
7
|
+
* Transforms version data to use localizeStatus format
|
|
8
|
+
*
|
|
9
|
+
* If `publishedLocale` is provided and `_status` is a string, transforms to object format.
|
|
10
|
+
* If `_status` is already an object, leaves it unchanged.
|
|
11
|
+
*
|
|
12
|
+
* @example
|
|
13
|
+
* // Input (old format):
|
|
14
|
+
* { _status: 'published', text: 'Hello' }, publishedLocale: 'en'
|
|
15
|
+
*
|
|
16
|
+
* // Output (new format):
|
|
17
|
+
* { _status: { en: 'published' }, text: 'Hello' }
|
|
18
|
+
*/ export function transformToLocalizeStatus(versionData, publishedLocale) {
|
|
19
|
+
// No publishedLocale provided - no transformation needed
|
|
20
|
+
if (!publishedLocale) {
|
|
21
|
+
return versionData;
|
|
22
|
+
}
|
|
23
|
+
const status = versionData._status;
|
|
24
|
+
// If _status is already an object (localizeStatus format), return as-is
|
|
25
|
+
if (typeof status === 'object' && status !== null) {
|
|
26
|
+
return versionData;
|
|
27
|
+
}
|
|
28
|
+
// Transform: publishedLocale + string status → object status
|
|
29
|
+
if (typeof status === 'string') {
|
|
30
|
+
// Only the specified locale gets the status, others remain undefined
|
|
31
|
+
// (Content API / Payload will handle merging with existing locale statuses)
|
|
32
|
+
return {
|
|
33
|
+
...versionData,
|
|
34
|
+
_status: {
|
|
35
|
+
[publishedLocale]: status
|
|
36
|
+
}
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
return versionData;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
//# sourceMappingURL=transformPublishedLocale.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../src/db-content-api/utilities/data/transformPublishedLocale.ts"],"sourcesContent":["/**\n * Transform publishedLocale to localizeStatus format\n *\n * publishedLocale is a legacy API that is going to be removed in Payload v4 in favor of localizeStatus.\n * The db-adapter transforms publishedLocale here so Content API doesn't need to know about it.\n */\n\ntype VersionData = Record<string, unknown>\n\n/**\n * Transforms version data to use localizeStatus format\n *\n * If `publishedLocale` is provided and `_status` is a string, transforms to object format.\n * If `_status` is already an object, leaves it unchanged.\n *\n * @example\n * // Input (old format):\n * { _status: 'published', text: 'Hello' }, publishedLocale: 'en'\n *\n * // Output (new format):\n * { _status: { en: 'published' }, text: 'Hello' }\n */\nexport function transformToLocalizeStatus(\n versionData: VersionData,\n publishedLocale?: string,\n): VersionData {\n // No publishedLocale provided - no transformation needed\n if (!publishedLocale) {\n return versionData\n }\n\n const status = versionData._status\n\n // If _status is already an object (localizeStatus format), return as-is\n if (typeof status === 'object' && status !== null) {\n return versionData\n }\n\n // Transform: publishedLocale + string status → object status\n if (typeof status === 'string') {\n // Only the specified locale gets the status, others remain undefined\n // (Content API / Payload will handle merging with existing locale statuses)\n return {\n ...versionData,\n _status: {\n [publishedLocale]: status,\n },\n }\n }\n\n return versionData\n}\n"],"names":["transformToLocalizeStatus","versionData","publishedLocale","status","_status"],"mappings":"AAAA;;;;;CAKC,GAID;;;;;;;;;;;;CAYC,GACD,OAAO,SAASA,0BACdC,WAAwB,EACxBC,eAAwB;IAExB,yDAAyD;IACzD,IAAI,CAACA,iBAAiB;QACpB,OAAOD;IACT;IAEA,MAAME,SAASF,YAAYG,OAAO;IAElC,wEAAwE;IACxE,IAAI,OAAOD,WAAW,YAAYA,WAAW,MAAM;QACjD,OAAOF;IACT;IAEA,6DAA6D;IAC7D,IAAI,OAAOE,WAAW,UAAU;QAC9B,qEAAqE;QACrE,4EAA4E;QAC5E,OAAO;YACL,GAAGF,WAAW;YACdG,SAAS;gBACP,CAACF,gBAAgB,EAAEC;YACrB;QACF;IACF;IAEA,OAAOF;AACT"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"buildLocalizedPaths.d.ts","sourceRoot":"","sources":["../../../../src/db-content-api/utilities/meta/buildLocalizedPaths.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAS,OAAO,EAAE,MAAM,SAAS,CAAA;AAE7C;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,GAAG,MAAM,EAAE,
|
|
1
|
+
{"version":3,"file":"buildLocalizedPaths.d.ts","sourceRoot":"","sources":["../../../../src/db-content-api/utilities/meta/buildLocalizedPaths.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAS,OAAO,EAAE,MAAM,SAAS,CAAA;AAE7C;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,GAAG,MAAM,EAAE,CAsCtF"}
|
|
@@ -12,6 +12,17 @@
|
|
|
12
12
|
}
|
|
13
13
|
const localizedPaths = [];
|
|
14
14
|
traverseFields(collectionConfig.fields, localizedPaths);
|
|
15
|
+
// Add _status to localized paths if localizeStatus is enabled for this collection
|
|
16
|
+
// _status is a base field added by Payload when versions.drafts is enabled,
|
|
17
|
+
// and it becomes localized when versions.drafts.localizeStatus is true
|
|
18
|
+
// localizeStatus requires both experimental flag AND collection-level config
|
|
19
|
+
const experimentalLocalizeStatus = 'experimental' in payload.config && payload.config.experimental && typeof payload.config.experimental === 'object' && 'localizeStatus' in payload.config.experimental && payload.config.experimental.localizeStatus === true;
|
|
20
|
+
const drafts = collectionConfig.versions && typeof collectionConfig.versions === 'object' ? collectionConfig.versions.drafts : false;
|
|
21
|
+
const collectionLocalizeStatus = drafts && typeof drafts === 'object' && 'localizeStatus' in drafts && drafts.localizeStatus === true;
|
|
22
|
+
const hasLocalizeStatus = payload.config.localization && experimentalLocalizeStatus && collectionLocalizeStatus;
|
|
23
|
+
if (hasLocalizeStatus && !localizedPaths.includes('_status')) {
|
|
24
|
+
localizedPaths.push('_status');
|
|
25
|
+
}
|
|
15
26
|
return localizedPaths;
|
|
16
27
|
}
|
|
17
28
|
/** Recursively traverses fields to find and collect localized paths */ function traverseFields(fields, localizedPaths, parentPath = '', parentIsLocalized = false) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/db-content-api/utilities/meta/buildLocalizedPaths.ts"],"sourcesContent":["import type { Field, Payload } from 'payload'\n\n/**\n * Extracts all localized field paths from a collection's field configuration.\n * Recursively traverses nested structures (groups, arrays, blocks, tabs) to find fields marked as localized.\n *\n * @param payload - The Payload instance containing collection configurations\n * @param collectionSlug - The slug of the collection to extract localized paths from\n * @returns Array of dot-notation paths to localized fields (e.g., ['title', 'metadata.description'])\n */\nexport function buildLocalizedPaths(payload: Payload, collectionSlug: string): string[] {\n const collectionConfig = payload.config.collections.find((c) => c.slug === collectionSlug)\n if (!collectionConfig) {\n return []\n }\n\n const localizedPaths: string[] = []\n traverseFields(collectionConfig.fields, localizedPaths)\n return localizedPaths\n}\n\n/** Recursively traverses fields to find and collect localized paths */\nfunction traverseFields(\n fields: Field[],\n localizedPaths: string[],\n parentPath = '',\n parentIsLocalized = false,\n): void {\n for (const field of fields) {\n // Only field types that have names can support localization\n // See: https://payloadcms.com/docs/configuration/localization\n //\n // This will skip presentational fields like ui, collapsible, row, tabs (if unnamed), groups (if unnamed)\n // which do not store data in the database and thus are not relevant for querying localized paths\n // See: https://payloadcms.com/docs/fields/overview#presentational-fields\n if (!('name' in field)) {\n continue\n }\n\n const fieldPath = buildPath(parentPath, field.name)\n const isLocalized = 'localized' in field && field.localized === true\n const includeNestedPaths = isLocalized || parentIsLocalized\n\n // Add field to results if localized or parent is localized\n if (includeNestedPaths) {\n localizedPaths.push(fieldPath)\n }\n\n // Handle blocks field - has a special 'blocks' array structure and each block has its own nested fields\n if (field.type === 'blocks' && 'blocks' in field) {\n for (const block of field.blocks) {\n if ('fields' in block) {\n traverseFields(block.fields, localizedPaths, fieldPath, includeNestedPaths)\n }\n }\n continue\n }\n\n // Handle field type that support nested fields\n // Recursively handle nested structures (groups, arrays, tab, etc)\n if ('fields' in field) {\n traverseFields(field.fields, localizedPaths, fieldPath, includeNestedPaths)\n }\n }\n}\n\n/** Builds a dot-notation path from parent path and field name */\nfunction buildPath(parentPath: string, fieldName: string): string {\n return parentPath ? `${parentPath}.${fieldName}` : fieldName\n}\n"],"names":["buildLocalizedPaths","payload","collectionSlug","collectionConfig","config","collections","find","c","slug","localizedPaths","traverseFields","fields","parentPath","parentIsLocalized","field","fieldPath","buildPath","name","isLocalized","localized","includeNestedPaths","
|
|
1
|
+
{"version":3,"sources":["../../../../src/db-content-api/utilities/meta/buildLocalizedPaths.ts"],"sourcesContent":["import type { Field, Payload } from 'payload'\n\n/**\n * Extracts all localized field paths from a collection's field configuration.\n * Recursively traverses nested structures (groups, arrays, blocks, tabs) to find fields marked as localized.\n *\n * @param payload - The Payload instance containing collection configurations\n * @param collectionSlug - The slug of the collection to extract localized paths from\n * @returns Array of dot-notation paths to localized fields (e.g., ['title', 'metadata.description'])\n */\nexport function buildLocalizedPaths(payload: Payload, collectionSlug: string): string[] {\n const collectionConfig = payload.config.collections.find((c) => c.slug === collectionSlug)\n if (!collectionConfig) {\n return []\n }\n\n const localizedPaths: string[] = []\n traverseFields(collectionConfig.fields, localizedPaths)\n\n // Add _status to localized paths if localizeStatus is enabled for this collection\n // _status is a base field added by Payload when versions.drafts is enabled,\n // and it becomes localized when versions.drafts.localizeStatus is true\n // localizeStatus requires both experimental flag AND collection-level config\n const experimentalLocalizeStatus =\n 'experimental' in payload.config &&\n payload.config.experimental &&\n typeof payload.config.experimental === 'object' &&\n 'localizeStatus' in payload.config.experimental &&\n payload.config.experimental.localizeStatus === true\n\n const drafts =\n collectionConfig.versions && typeof collectionConfig.versions === 'object'\n ? collectionConfig.versions.drafts\n : false\n const collectionLocalizeStatus =\n drafts &&\n typeof drafts === 'object' &&\n 'localizeStatus' in drafts &&\n drafts.localizeStatus === true\n\n const hasLocalizeStatus =\n payload.config.localization && experimentalLocalizeStatus && collectionLocalizeStatus\n\n if (hasLocalizeStatus && !localizedPaths.includes('_status')) {\n localizedPaths.push('_status')\n }\n\n return localizedPaths\n}\n\n/** Recursively traverses fields to find and collect localized paths */\nfunction traverseFields(\n fields: Field[],\n localizedPaths: string[],\n parentPath = '',\n parentIsLocalized = false,\n): void {\n for (const field of fields) {\n // Only field types that have names can support localization\n // See: https://payloadcms.com/docs/configuration/localization\n //\n // This will skip presentational fields like ui, collapsible, row, tabs (if unnamed), groups (if unnamed)\n // which do not store data in the database and thus are not relevant for querying localized paths\n // See: https://payloadcms.com/docs/fields/overview#presentational-fields\n if (!('name' in field)) {\n continue\n }\n\n const fieldPath = buildPath(parentPath, field.name)\n const isLocalized = 'localized' in field && field.localized === true\n const includeNestedPaths = isLocalized || parentIsLocalized\n\n // Add field to results if localized or parent is localized\n if (includeNestedPaths) {\n localizedPaths.push(fieldPath)\n }\n\n // Handle blocks field - has a special 'blocks' array structure and each block has its own nested fields\n if (field.type === 'blocks' && 'blocks' in field) {\n for (const block of field.blocks) {\n if ('fields' in block) {\n traverseFields(block.fields, localizedPaths, fieldPath, includeNestedPaths)\n }\n }\n continue\n }\n\n // Handle field type that support nested fields\n // Recursively handle nested structures (groups, arrays, tab, etc)\n if ('fields' in field) {\n traverseFields(field.fields, localizedPaths, fieldPath, includeNestedPaths)\n }\n }\n}\n\n/** Builds a dot-notation path from parent path and field name */\nfunction buildPath(parentPath: string, fieldName: string): string {\n return parentPath ? `${parentPath}.${fieldName}` : fieldName\n}\n"],"names":["buildLocalizedPaths","payload","collectionSlug","collectionConfig","config","collections","find","c","slug","localizedPaths","traverseFields","fields","experimentalLocalizeStatus","experimental","localizeStatus","drafts","versions","collectionLocalizeStatus","hasLocalizeStatus","localization","includes","push","parentPath","parentIsLocalized","field","fieldPath","buildPath","name","isLocalized","localized","includeNestedPaths","type","block","blocks","fieldName"],"mappings":"AAEA;;;;;;;CAOC,GACD,OAAO,SAASA,oBAAoBC,OAAgB,EAAEC,cAAsB;IAC1E,MAAMC,mBAAmBF,QAAQG,MAAM,CAACC,WAAW,CAACC,IAAI,CAAC,CAACC,IAAMA,EAAEC,IAAI,KAAKN;IAC3E,IAAI,CAACC,kBAAkB;QACrB,OAAO,EAAE;IACX;IAEA,MAAMM,iBAA2B,EAAE;IACnCC,eAAeP,iBAAiBQ,MAAM,EAAEF;IAExC,kFAAkF;IAClF,4EAA4E;IAC5E,uEAAuE;IACvE,6EAA6E;IAC7E,MAAMG,6BACJ,kBAAkBX,QAAQG,MAAM,IAChCH,QAAQG,MAAM,CAACS,YAAY,IAC3B,OAAOZ,QAAQG,MAAM,CAACS,YAAY,KAAK,YACvC,oBAAoBZ,QAAQG,MAAM,CAACS,YAAY,IAC/CZ,QAAQG,MAAM,CAACS,YAAY,CAACC,cAAc,KAAK;IAEjD,MAAMC,SACJZ,iBAAiBa,QAAQ,IAAI,OAAOb,iBAAiBa,QAAQ,KAAK,WAC9Db,iBAAiBa,QAAQ,CAACD,MAAM,GAChC;IACN,MAAME,2BACJF,UACA,OAAOA,WAAW,YAClB,oBAAoBA,UACpBA,OAAOD,cAAc,KAAK;IAE5B,MAAMI,oBACJjB,QAAQG,MAAM,CAACe,YAAY,IAAIP,8BAA8BK;IAE/D,IAAIC,qBAAqB,CAACT,eAAeW,QAAQ,CAAC,YAAY;QAC5DX,eAAeY,IAAI,CAAC;IACtB;IAEA,OAAOZ;AACT;AAEA,qEAAqE,GACrE,SAASC,eACPC,MAAe,EACfF,cAAwB,EACxBa,aAAa,EAAE,EACfC,oBAAoB,KAAK;IAEzB,KAAK,MAAMC,SAASb,OAAQ;QAC1B,4DAA4D;QAC5D,8DAA8D;QAC9D,EAAE;QACF,yGAAyG;QACzG,iGAAiG;QACjG,yEAAyE;QACzE,IAAI,CAAE,CAAA,UAAUa,KAAI,GAAI;YACtB;QACF;QAEA,MAAMC,YAAYC,UAAUJ,YAAYE,MAAMG,IAAI;QAClD,MAAMC,cAAc,eAAeJ,SAASA,MAAMK,SAAS,KAAK;QAChE,MAAMC,qBAAqBF,eAAeL;QAE1C,2DAA2D;QAC3D,IAAIO,oBAAoB;YACtBrB,eAAeY,IAAI,CAACI;QACtB;QAEA,wGAAwG;QACxG,IAAID,MAAMO,IAAI,KAAK,YAAY,YAAYP,OAAO;YAChD,KAAK,MAAMQ,SAASR,MAAMS,MAAM,CAAE;gBAChC,IAAI,YAAYD,OAAO;oBACrBtB,eAAesB,MAAMrB,MAAM,EAAEF,gBAAgBgB,WAAWK;gBAC1D;YACF;YACA;QACF;QAEA,+CAA+C;QAC/C,kEAAkE;QAClE,IAAI,YAAYN,OAAO;YACrBd,eAAec,MAAMb,MAAM,EAAEF,gBAAgBgB,WAAWK;QAC1D;IACF;AACF;AAEA,+DAA+D,GAC/D,SAASJ,UAAUJ,UAAkB,EAAEY,SAAiB;IACtD,OAAOZ,aAAa,GAAGA,WAAW,CAAC,EAAEY,WAAW,GAAGA;AACrD"}
|