{"version":3,"file":"repository.mjs","sources":["../../../src/services/document-service/repository.ts"],"sourcesContent":["import { omit, assoc, merge, curry, isEmpty, pick } from 'lodash/fp';\n\nimport {\n  async,\n  contentTypes as contentTypesUtils,\n  validate,\n  errors,\n  createModelCache,\n} from '@strapi/utils';\n\nimport type { UID, Modules } from '@strapi/types';\nimport { wrapInTransaction, type RepositoryFactoryMethod } from './common';\nimport * as DP from './draft-and-publish';\nimport * as i18n from './internationalization';\nimport { copyNonLocalizedFields } from './internationalization';\nimport * as components from './components';\n\nimport { createEntriesService } from './entries';\nimport { ALLOWED_DOCUMENT_ROOT_PARAM_KEYS, pickSelectionParams } from './params';\nimport { createDocumentId } from '../../utils/transform-content-types-to-models';\nimport { getDeepPopulate } from './utils/populate';\nimport { transformParamsToQuery } from './transform/query';\nimport { transformParamsDocumentId } from './transform/id-transform';\nimport { createEventManager } from './events';\nimport * as unidirectionalRelations from './utils/unidirectional-relations';\nimport * as bidirectionalRelations from './utils/bidirectional-relations';\nimport * as selfReferentialRelations from './utils/self-referential-relations';\nimport entityValidator from '../entity-validator';\nimport { addFirstPublishedAtToDraft, filterDataFirstPublishedAt } from './first-published-at';\nimport { runParallelWithOrderedErrors } from './utils/ordered-parallel';\n\nconst { validators } = validate;\n\n// we have to typecast to reconcile the differences between validator and database getModel\nconst getModel = ((schema: UID.Schema) => strapi.getModel(schema)) as (schema: string) => any;\n\n// config.api.documents.strictParams: false/undefined (pass through), true (throw on invalid)\n\n// BCP 47–style locale format: 2–3 letter language code (any case), optional subtags (-XX or -XXX...), max 35 chars\nconst LOCALE_FORMAT = /^[a-zA-Z]{2,3}(-[a-zA-Z0-9]{2,8})*$/;\nconst MAX_LOCALE_LENGTH = 35;\n\n/** Treat as \"param not provided\": null, undefined, or empty string (e.g. from query/JSON). */\nconst isParamEmpty = (v: unknown): boolean => v === undefined || v === null || v === '';\n\nexport const createContentTypeRepository: RepositoryFactoryMethod = (\n  uid,\n  validator = entityValidator\n) => {\n  const contentType = strapi.contentType(uid);\n  const hasDraftAndPublish = contentTypesUtils.hasDraftAndPublish(contentType);\n\n  // Define the validations that should be performed\n  const sortValidations = ['nonAttributesOperators', 'dynamicZones', 'morphRelations'];\n  const fieldValidations = ['scalarAttributes'];\n  const filtersValidations = ['nonAttributesOperators', 'dynamicZones', 'morphRelations'];\n  const populateValidations = {\n    sort: sortValidations,\n    field: fieldValidations,\n    filters: filtersValidations,\n    populate: ['nonAttributesOperators'],\n  };\n\n  /**\n   * Checks status parameter. When strict is true, throws on invalid status.\n   * Valid values are 'published' and 'draft'; for types without D&P they are currently ignored but may throw in the future\n   */\n  const checkStatus = (\n    params: Record<string, unknown>,\n    strict: boolean\n  ): Record<string, unknown> => {\n    if (!strict) {\n      return params;\n    }\n\n    if (isParamEmpty(params.status)) {\n      delete params.status;\n      return params;\n    }\n\n    if (params.status !== 'published' && params.status !== 'draft') {\n      throw new errors.ValidationError(\n        `Invalid parameter at 'status'. Expected 'published' or 'draft', received: ${params.status}`\n      );\n    }\n\n    return params;\n  };\n\n  /**\n   * Checks locale parameter. When strict is true, throws on invalid locale value.\n   * Accepts only: string (single locale or '*'), array of locale strings (e.g. bulk publish),\n   * empty string, null, or undefined (removed but allowed)\n   */\n  const checkLocale = (\n    params: Record<string, unknown>,\n    strict: boolean\n  ): Record<string, unknown> => {\n    if (!strict) {\n      return params;\n    }\n\n    if (isParamEmpty(params.locale)) {\n      delete params.locale;\n      return params;\n    }\n\n    // Reject objects (we only accept string, array of strings, empty string, null, undefined)\n    if (typeof params.locale === 'object' && !Array.isArray(params.locale)) {\n      throw new errors.ValidationError(\n        `Invalid parameter at 'locale'. Expected a string, array of strings, empty string, null, or undefined; received: object`,\n        { received: params.locale }\n      );\n    }\n\n    const validateAndNormalizeOne = (value: unknown, path: string): string => {\n      if (typeof value !== 'string') {\n        throw new errors.ValidationError(\n          `Invalid parameter at '${path}'. Expected a string, received: ${typeof value}`,\n          { received: value }\n        );\n      }\n      if (value === '*') return value;\n      const isEmpty = value.length === 0;\n      const tooLong = value.length > MAX_LOCALE_LENGTH;\n      const invalidFormat = !LOCALE_FORMAT.test(value);\n      if (isEmpty || tooLong || invalidFormat) {\n        let reason: string;\n        if (isEmpty) {\n          reason = 'Locale cannot be empty';\n        } else if (tooLong) {\n          reason = `Locale exceeds maximum length of ${MAX_LOCALE_LENGTH} characters`;\n        } else {\n          reason = 'Locale must be a valid BCP 47 format (e.g. en, en-US, zh-Hans)';\n        }\n        throw new errors.ValidationError(`Invalid parameter at '${path}'. ${reason}.`);\n      }\n      return value;\n    };\n\n    if (Array.isArray(params.locale)) {\n      const filtered = (params.locale as unknown[]).filter(\n        (item): item is string => typeof item === 'string' && !isParamEmpty(item)\n      );\n      if (filtered.length === 0) {\n        delete params.locale;\n        return params;\n      }\n      params.locale = filtered.map((item, i) => validateAndNormalizeOne(item, `locale[${i}]`));\n      return params;\n    }\n\n    params.locale = validateAndNormalizeOne(params.locale, 'locale');\n    return params;\n  };\n\n  /**\n   * Pagination param parsing (used only when strict).\n   * Contract: empty (null/undefined/'') → undefined (omit from result).\n   *           present but invalid → throw ValidationError.\n   *           present and valid → return normalized value.\n   */\n  const parsePaginationInt = (\n    name: string,\n    value: unknown,\n    strict: boolean,\n    spec: { min: number; allowMinusOne?: boolean }\n  ): number | undefined => {\n    if (isParamEmpty(value)) return undefined;\n    const num = Number(value);\n    const valid =\n      Number.isInteger(num) && (num >= spec.min || (spec.allowMinusOne === true && num === -1));\n    if (!valid && strict) {\n      const expected = spec.allowMinusOne\n        ? `integer >= ${spec.min} or -1`\n        : `integer >= ${spec.min}`;\n      throw new errors.ValidationError(\n        `Invalid parameter at '${name}'. Expected ${expected}, received: ${value}`\n      );\n    }\n    return valid ? num : undefined;\n  };\n\n  const parseWithCount = (value: unknown): boolean | undefined => {\n    if (isParamEmpty(value)) return undefined;\n    if (typeof value === 'boolean') return value;\n    if (typeof value === 'string' && (value === 'true' || value === 'false'))\n      return value === 'true';\n    throw new errors.ValidationError(\n      `Invalid parameter at 'withCount'. Expected a boolean, received: ${typeof value}`\n    );\n  };\n\n  const PAGINATION_KEYS = ['page', 'pageSize', 'start', 'limit', 'withCount'] as const;\n\n  /**\n   * When strict: empty → omit, invalid → throw, valid → include.\n   * When not strict: return params unchanged.\n   */\n  const checkPagination = (\n    params: Record<string, unknown>,\n    strict: boolean\n  ): Record<string, unknown> => {\n    if (!strict) return params;\n\n    const hasPage = !isParamEmpty(params.page) || !isParamEmpty(params.pageSize);\n    const hasOffset = !isParamEmpty(params.start) || !isParamEmpty(params.limit);\n    if (hasPage && hasOffset) {\n      throw new errors.ValidationError(\n        'Invalid pagination parameters. Cannot use both page-based (page, pageSize) and offset-based (start, limit) pagination in the same query.'\n      );\n    }\n\n    const page = parsePaginationInt('page', params.page, strict, { min: 1 });\n    const pageSize = parsePaginationInt('pageSize', params.pageSize, strict, { min: 1 });\n    const start = parsePaginationInt('start', params.start, strict, { min: 0 });\n    const limit = parsePaginationInt('limit', params.limit, strict, {\n      min: 1,\n      allowMinusOne: true,\n    });\n    const withCount = parseWithCount(params.withCount);\n\n    const result = { ...omit(PAGINATION_KEYS, params) };\n    if (page !== undefined) result.page = page;\n    if (pageSize !== undefined) result.pageSize = pageSize;\n    if (start !== undefined) result.start = start;\n    if (limit !== undefined) result.limit = limit;\n    if (withCount !== undefined) result.withCount = withCount;\n    return result;\n  };\n\n  /**\n   * When strict is true, strip to allowed root-level keys so only those reach the query.\n   * Extra params (e.g. from content API addQueryParams) are allowed in so middlewares see them,\n   * but are stripped here before the query pipeline; they never affect the document query.\n   */\n  const checkUnrecognizedRootParams = (\n    params: Record<string, unknown>,\n    strict: boolean\n  ): Record<string, unknown> => {\n    if (!strict) {\n      return params;\n    }\n\n    return pick(ALLOWED_DOCUMENT_ROOT_PARAM_KEYS as unknown as string[], params) as Record<\n      string,\n      unknown\n    >;\n  };\n\n  const validateParams = async (\n    params: Modules.Documents.Params.All\n  ): Promise<Modules.Documents.Params.All> => {\n    // Cache model lookups for this request to avoid repeating the same work\n    const modelCache = createModelCache(getModel);\n\n    const ctx = { schema: contentType, getModel: modelCache.getModel };\n\n    // Only validate what is actually provided\n    const validations: Promise<unknown>[] = [];\n\n    if (params.filters && !isEmpty(params.filters)) {\n      validations.push(validators.validateFilters(ctx, params.filters, filtersValidations));\n    }\n\n    if (params.sort && !isEmpty(params.sort)) {\n      validations.push(validators.validateSort(ctx, params.sort, sortValidations));\n    }\n\n    if (params.fields && !isEmpty(params.fields)) {\n      validations.push(validators.validateFields(ctx, params.fields, fieldValidations));\n    }\n\n    if (params.populate && !isEmpty(params.populate)) {\n      validations.push(validators.validatePopulate(ctx, params.populate, populateValidations));\n    }\n\n    // Run validations together but keep the same error order as before\n    await runParallelWithOrderedErrors(validations);\n\n    // Clean up cache after validation\n    modelCache.clear();\n\n    // Strip lookup from params, it's only used internally\n    if (params.lookup) {\n      throw new errors.ValidationError(\"Invalid params: 'lookup'\");\n    }\n\n    // Validate status, locale, and pagination based on config\n    // config.api.documents.strictParams: false/undefined (pass through), true (throw on invalid)\n    const rawStrictParams: unknown = strapi.config.get('api.documents.strictParams', undefined);\n\n    if (rawStrictParams !== undefined && rawStrictParams !== false && rawStrictParams !== true) {\n      throw new errors.ValidationError(\n        `Invalid config.api.documents.strictParams value: \"${rawStrictParams}\". Expected boolean (true or false).`\n      );\n    }\n\n    const strict = rawStrictParams === true;\n\n    let processedParams: Record<string, unknown>;\n    if (strict) {\n      processedParams = checkUnrecognizedRootParams(params as Record<string, unknown>, strict);\n      processedParams = checkStatus(processedParams, strict);\n      processedParams = checkLocale(processedParams, strict);\n      processedParams = checkPagination(processedParams, strict);\n    } else {\n      processedParams = params as Record<string, unknown>;\n    }\n\n    return processedParams as Modules.Documents.Params.All;\n  };\n\n  const entries = createEntriesService(uid, validator);\n\n  const eventManager = createEventManager(strapi, uid);\n  const emitEvent = curry(eventManager.emitEvent);\n\n  async function findMany(params = {} as any) {\n    const query = await async.pipe(\n      validateParams,\n      DP.defaultToDraft,\n      DP.statusToLookup(contentType),\n\n      i18n.defaultLocale(contentType),\n      i18n.multiLocaleToLookup(contentType),\n      transformParamsDocumentId(uid),\n      transformParamsToQuery(uid)\n    )(params || {});\n\n    return strapi.db.query(uid).findMany(query);\n  }\n\n  async function findFirst(params = {} as any) {\n    const query = await async.pipe(\n      validateParams,\n      DP.defaultToDraft,\n      DP.statusToLookup(contentType),\n\n      i18n.defaultLocale(contentType),\n      i18n.localeToLookup(contentType),\n      transformParamsDocumentId(uid),\n      transformParamsToQuery(uid)\n    )(params);\n\n    return strapi.db.query(uid).findOne(query);\n  }\n\n  // TODO: do we really want to add filters on the findOne now that we have findFirst ?\n  async function findOne(opts = {} as any) {\n    const { documentId, ...params } = opts;\n\n    const query = await async.pipe(\n      validateParams,\n      DP.defaultToDraft,\n      DP.statusToLookup(contentType),\n\n      i18n.defaultLocale(contentType),\n      i18n.localeToLookup(contentType),\n      transformParamsDocumentId(uid),\n      transformParamsToQuery(uid),\n      (query) => assoc('where', { ...query.where, documentId }, query)\n    )(params);\n\n    return strapi.db.query(uid).findOne(query);\n  }\n\n  async function deleteDocument(opts = {} as any) {\n    const { documentId, ...params } = opts;\n\n    const lookupQuery = await async.pipe(\n      validateParams,\n      omit('status'),\n      i18n.defaultLocale(contentType),\n      i18n.multiLocaleToLookup(contentType),\n      transformParamsToQuery(uid),\n      (query) => assoc('where', { ...query.where, documentId }, query)\n    )(params);\n\n    const selectionQuery = await async.pipe(\n      validateParams,\n      omit('status'),\n      pickSelectionParams,\n      transformParamsToQuery(uid)\n    )(params);\n\n    if (hasDraftAndPublish && params.status === 'draft') {\n      throw new Error('Cannot delete a draft document');\n    }\n\n    const entriesToDelete = await strapi.db.query(uid).findMany(lookupQuery);\n\n    const deletedEntries = await async.map(entriesToDelete, (entryToDelete: any) =>\n      entries.delete(entryToDelete.id, selectionQuery)\n    );\n\n    entriesToDelete.forEach(emitEvent('entry.delete'));\n\n    return { documentId, entries: deletedEntries };\n  }\n\n  async function create(opts = {} as any) {\n    const { documentId, ...params } = opts;\n\n    const queryParams = await async.pipe(\n      validateParams,\n      DP.filterDataPublishedAt,\n      DP.setStatusToDraft(contentType),\n      DP.statusToData(contentType),\n      i18n.defaultLocale(contentType),\n      i18n.localeToData(contentType)\n    )(params);\n\n    const doc = await entries.create(queryParams);\n\n    emitEvent('entry.create', doc);\n\n    if (hasDraftAndPublish && params.status === 'published') {\n      return publish({\n        ...params,\n        documentId: doc.documentId,\n      }).then((doc) => doc.entries[0]);\n    }\n\n    return doc;\n  }\n\n  async function clone(opts = {} as any) {\n    const { documentId, ...params } = opts;\n\n    const queryParams = await async.pipe(\n      validateParams,\n      DP.filterDataPublishedAt,\n      i18n.defaultLocale(contentType),\n      i18n.multiLocaleToLookup(contentType)\n    )(params);\n\n    // Get deep populate\n    const entriesToClone = await strapi.db.query(uid).findMany({\n      where: {\n        ...queryParams?.lookup,\n        documentId,\n        // DP Enabled: Clone drafts\n        // DP Disabled: Clone only the existing version (published)\n        publishedAt: { $null: hasDraftAndPublish },\n      },\n      populate: getDeepPopulate(uid, { relationalFields: ['id'] }),\n    });\n\n    const clonedEntries = await async.map(\n      entriesToClone,\n      async.pipe(\n        omit(['id', 'createdAt', 'updatedAt']),\n        // assign new documentId\n        assoc('documentId', createDocumentId()),\n        // Merge new data into it\n        (data) => merge(data, queryParams.data),\n        (data) => entries.create({ ...queryParams, data, status: 'draft' })\n      )\n    );\n\n    clonedEntries.forEach(emitEvent('entry.create'));\n\n    return { documentId: clonedEntries.at(0)?.documentId, entries: clonedEntries };\n  }\n\n  async function update(opts = {} as any) {\n    const { documentId, ...params } = opts;\n\n    const queryParams = await async.pipe(\n      validateParams,\n      DP.filterDataPublishedAt,\n      filterDataFirstPublishedAt,\n      DP.setStatusToDraft(contentType),\n      DP.statusToLookup(contentType),\n      DP.statusToData(contentType),\n      // Default locale will be set if not provided\n      i18n.defaultLocale(contentType),\n      i18n.localeToLookup(contentType),\n      i18n.localeToData(contentType)\n    )(params);\n\n    const { data, ...restParams } = await transformParamsDocumentId(uid, queryParams || {});\n    const query = transformParamsToQuery(uid, pickSelectionParams(restParams || {}) as any);\n\n    // Validation\n    // Find if document exists\n    const entryToUpdate = await strapi.db\n      .query(uid)\n      .findOne({ ...query, where: { ...queryParams?.lookup, ...query?.where, documentId } });\n\n    let updatedDraft = null;\n    if (entryToUpdate) {\n      updatedDraft = await entries.update(entryToUpdate, queryParams);\n      emitEvent('entry.update', updatedDraft);\n    }\n\n    if (!updatedDraft) {\n      const documentExists = await strapi.db\n        .query(contentType.uid)\n        .findOne({ where: { documentId } });\n\n      if (documentExists) {\n        const mergedData = await copyNonLocalizedFields(contentType, documentId, {\n          ...queryParams.data,\n          documentId,\n        });\n\n        updatedDraft = await entries.create({\n          ...queryParams,\n          data: mergedData,\n        });\n        emitEvent('entry.create', updatedDraft);\n      }\n    }\n\n    if (hasDraftAndPublish && updatedDraft && params.status === 'published') {\n      return publish({\n        ...params,\n        documentId,\n      }).then((doc) => doc.entries[0]);\n    }\n\n    return updatedDraft;\n  }\n\n  async function count(params = {} as any) {\n    const query = await async.pipe(\n      validateParams,\n      DP.defaultStatus(contentType),\n      DP.statusToLookup(contentType),\n\n      i18n.defaultLocale(contentType),\n      i18n.multiLocaleToLookup(contentType),\n      transformParamsToQuery(uid)\n    )(params);\n\n    return strapi.db.query(uid).count(query);\n  }\n\n  async function publish(opts = {} as any) {\n    const { documentId, ...params } = opts;\n\n    const queryParams = await async.pipe(\n      validateParams,\n      i18n.defaultLocale(contentType),\n      i18n.multiLocaleToLookup(contentType)\n    )(params);\n\n    const [draftsToPublish, oldPublishedVersions] = await Promise.all([\n      strapi.db.query(uid).findMany({\n        where: {\n          ...queryParams?.lookup,\n          documentId,\n          publishedAt: null, // Ignore lookup\n        },\n        // Populate relations, media, compos and dz\n        populate: getDeepPopulate(uid, { relationalFields: ['documentId', 'locale'] }),\n      }),\n      strapi.db.query(uid).findMany({\n        where: {\n          ...queryParams?.lookup,\n          documentId,\n          publishedAt: { $ne: null },\n        },\n        select: ['id', 'locale'],\n      }),\n    ]);\n\n    // Load any unidirectional relation targetting the old published entries\n    const relationsToSync = await unidirectionalRelations.load(\n      uid,\n      {\n        newVersions: draftsToPublish,\n        oldVersions: oldPublishedVersions,\n      },\n      {\n        shouldPropagateRelation: components.createComponentRelationFilter(),\n      }\n    );\n\n    const bidirectionalRelationsToSync = await bidirectionalRelations.load(uid, {\n      newVersions: draftsToPublish,\n      oldVersions: oldPublishedVersions,\n    });\n\n    // Load self-referential relations from draft entries before publishing\n    const selfRelationsToSync = await selfReferentialRelations.load(uid, draftsToPublish);\n\n    // Delete old published versions\n    await async.map(oldPublishedVersions, (entry: any) => entries.delete(entry.id));\n\n    // Add firstPublishedAt to draft if it doesn't exist\n    const updatedDraft = await async.map(draftsToPublish, (draft: any) =>\n      addFirstPublishedAtToDraft(draft, entries.update, contentType)\n    );\n\n    // Transform draft entry data and create published versions\n    const publishedEntries = await async.map(updatedDraft, (draft: any) =>\n      entries.publish(draft, queryParams)\n    );\n\n    // Sync unidirectional relations with the new published entries\n    await unidirectionalRelations.sync(\n      [...oldPublishedVersions, ...updatedDraft],\n      publishedEntries,\n      relationsToSync\n    );\n\n    await bidirectionalRelations.sync(\n      [...oldPublishedVersions, ...updatedDraft],\n      publishedEntries,\n      bidirectionalRelationsToSync\n    );\n\n    // Sync self-referential relations with the new published entries\n    await selfReferentialRelations.sync(draftsToPublish, publishedEntries, selfRelationsToSync);\n\n    publishedEntries.forEach(emitEvent('entry.publish'));\n\n    return { documentId, entries: publishedEntries };\n  }\n\n  async function unpublish(opts = {} as any) {\n    const { documentId, ...params } = opts;\n\n    const query = await async.pipe(\n      validateParams,\n      i18n.defaultLocale(contentType),\n      i18n.multiLocaleToLookup(contentType),\n      transformParamsToQuery(uid),\n      (query) => assoc('where', { ...query.where, documentId, publishedAt: { $ne: null } }, query)\n    )(params);\n\n    // Delete all published versions\n    const versionsToDelete = await strapi.db.query(uid).findMany(query);\n    await async.map(versionsToDelete, (entry: any) => entries.delete(entry.id));\n\n    versionsToDelete.forEach(emitEvent('entry.unpublish'));\n    return { documentId, entries: versionsToDelete };\n  }\n\n  async function discardDraft(opts = {} as any) {\n    const { documentId, ...params } = opts;\n\n    const queryParams = await async.pipe(\n      validateParams,\n      i18n.defaultLocale(contentType),\n      i18n.multiLocaleToLookup(contentType)\n    )(params);\n\n    const [versionsToDraft, oldDrafts] = await Promise.all([\n      strapi.db.query(uid).findMany({\n        where: {\n          ...queryParams?.lookup,\n          documentId,\n          publishedAt: { $ne: null },\n        },\n        // Populate relations, media, compos and dz\n        populate: getDeepPopulate(uid, { relationalFields: ['documentId', 'locale'] }),\n      }),\n      strapi.db.query(uid).findMany({\n        where: {\n          ...queryParams?.lookup,\n          documentId,\n          publishedAt: null,\n        },\n        select: ['id', 'locale'],\n      }),\n    ]);\n\n    // Load any unidirectional relation targeting the old drafts\n    const relationsToSync = await unidirectionalRelations.load(\n      uid,\n      {\n        newVersions: versionsToDraft,\n        oldVersions: oldDrafts,\n      },\n      {\n        shouldPropagateRelation: components.createComponentRelationFilter(),\n      }\n    );\n\n    const bidirectionalRelationsToSync = await bidirectionalRelations.load(uid, {\n      newVersions: versionsToDraft,\n      oldVersions: oldDrafts,\n    });\n\n    // Load self-referential relations from published entries before discarding\n    const selfRelationsToSync = await selfReferentialRelations.load(uid, versionsToDraft);\n\n    // Delete old drafts\n    await async.map(oldDrafts, (entry: any) => entries.delete(entry.id));\n\n    // Transform published entry data and create draft versions\n    const draftEntries = await async.map(versionsToDraft, (entry: any) =>\n      entries.discardDraft(entry, queryParams)\n    );\n\n    // Sync unidirectional relations with the new draft entries\n    await unidirectionalRelations.sync(\n      [...oldDrafts, ...versionsToDraft],\n      draftEntries,\n      relationsToSync\n    );\n\n    await bidirectionalRelations.sync(\n      [...oldDrafts, ...versionsToDraft],\n      draftEntries,\n      bidirectionalRelationsToSync\n    );\n\n    // Sync self-referential relations with the new draft entries\n    await selfReferentialRelations.sync(versionsToDraft, draftEntries, selfRelationsToSync);\n\n    draftEntries.forEach(emitEvent('entry.draft-discard'));\n    return { documentId, entries: draftEntries };\n  }\n\n  async function updateComponents(entry: any, data: any) {\n    return components.updateComponents(uid, entry, data);\n  }\n\n  function omitComponentData(data: any) {\n    return components.omitComponentData(contentType, data);\n  }\n\n  return {\n    findMany: wrapInTransaction(findMany),\n    findFirst: wrapInTransaction(findFirst),\n    findOne: wrapInTransaction(findOne),\n    delete: wrapInTransaction(deleteDocument),\n    create: wrapInTransaction(create),\n    clone: wrapInTransaction(clone),\n    update: wrapInTransaction(update),\n    count: wrapInTransaction(count),\n    publish: hasDraftAndPublish ? wrapInTransaction(publish) : (undefined as any),\n    unpublish: hasDraftAndPublish ? wrapInTransaction(unpublish) : (undefined as any),\n    discardDraft: hasDraftAndPublish ? wrapInTransaction(discardDraft) : (undefined as any),\n\n    updateComponents,\n    omitComponentData,\n  };\n};\n"],"names":["validators","validate","getModel","schema","strapi","LOCALE_FORMAT","MAX_LOCALE_LENGTH","isParamEmpty","v","undefined","createContentTypeRepository","uid","validator","entityValidator","contentType","hasDraftAndPublish","contentTypesUtils","sortValidations","fieldValidations","filtersValidations","populateValidations","sort","field","filters","populate","checkStatus","params","strict","status","errors","ValidationError","checkLocale","locale","Array","isArray","received","validateAndNormalizeOne","value","path","isEmpty","length","tooLong","invalidFormat","test","reason","filtered","filter","item","map","i","parsePaginationInt","name","spec","num","Number","valid","isInteger","min","allowMinusOne","expected","parseWithCount","PAGINATION_KEYS","checkPagination","hasPage","page","pageSize","hasOffset","start","limit","withCount","result","omit","checkUnrecognizedRootParams","pick","ALLOWED_DOCUMENT_ROOT_PARAM_KEYS","validateParams","modelCache","createModelCache","ctx","validations","push","validateFilters","validateSort","fields","validateFields","validatePopulate","runParallelWithOrderedErrors","clear","lookup","rawStrictParams","config","get","processedParams","entries","createEntriesService","eventManager","createEventManager","emitEvent","curry","findMany","query","async","pipe","DP","i18n","transformParamsDocumentId","transformParamsToQuery","db","findFirst","findOne","opts","documentId","assoc","where","deleteDocument","lookupQuery","selectionQuery","pickSelectionParams","Error","entriesToDelete","deletedEntries","entryToDelete","delete","id","forEach","create","queryParams","doc","publish","then","clone","entriesToClone","publishedAt","$null","getDeepPopulate","relationalFields","clonedEntries","createDocumentId","data","merge","at","update","filterDataFirstPublishedAt","restParams","entryToUpdate","updatedDraft","documentExists","mergedData","copyNonLocalizedFields","count","draftsToPublish","oldPublishedVersions","Promise","all","$ne","select","relationsToSync","unidirectionalRelations","newVersions","oldVersions","shouldPropagateRelation","components","bidirectionalRelationsToSync","bidirectionalRelations","selfRelationsToSync","selfReferentialRelations","entry","draft","addFirstPublishedAtToDraft","publishedEntries","unpublish","versionsToDelete","discardDraft","versionsToDraft","oldDrafts","draftEntries","updateComponents","omitComponentData","wrapInTransaction"],"mappings":"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"}