UNPKG

@strapi/data-transfer

Version:

Data transfer capabilities for Strapi

1 lines 10.6 kB
{"version":3,"file":"entity.mjs","sources":["../../../src/strapi/queries/entity.ts"],"sourcesContent":["import { assign, isArray, isEmpty, isObject, map, omit, size } from 'lodash/fp';\n\nimport type { Core, UID, Data, Struct } from '@strapi/types';\nimport * as componentsService from '../../utils/components';\n\nconst sanitizeComponentLikeAttributes = <T extends Struct.Schema>(\n model: T,\n data: Data.Entity<T['uid']>\n) => {\n const { attributes } = model;\n\n const componentLikeAttributesKey = Object.entries(attributes)\n .filter(([, attribute]) => attribute.type === 'component' || attribute.type === 'dynamiczone')\n .map(([key]) => key);\n\n return omit(componentLikeAttributesKey, data);\n};\n\nconst omitInvalidCreationAttributes = omit(['id']);\n\nconst createEntityQuery = (strapi: Core.Strapi): any => {\n const components = {\n async assignToEntity(uid: UID.Schema, data: any) {\n const model = strapi.getModel(uid);\n\n const entityComponents = await componentsService.createComponents(uid, data);\n const dataWithoutComponents = sanitizeComponentLikeAttributes(model, data);\n\n return assign(entityComponents, dataWithoutComponents);\n },\n\n async get<T extends object>(uid: string, entity: T) {\n return componentsService.getComponents(uid as UID.Schema, entity as any);\n },\n\n delete<T extends object>(uid: string, componentsToDelete: T) {\n return componentsService.deleteComponents(uid as UID.Schema, componentsToDelete as any, {\n loadComponents: false,\n });\n },\n };\n\n const query = (uid: UID.Schema) => {\n const create = async <T extends { data: U }, U extends object>(params: T) => {\n const dataWithComponents = await components.assignToEntity(uid, params.data);\n const sanitizedData = omitInvalidCreationAttributes(dataWithComponents);\n\n return strapi.db.query(uid).create({ ...params, data: sanitizedData });\n };\n\n const createMany = async <T extends { data: U[] }, U extends object>(params: T) => {\n return (\n Promise.resolve(params.data)\n // Create components for each entity\n .then(map((data) => components.assignToEntity(uid, data)))\n // Remove unwanted attributes\n .then(map(omitInvalidCreationAttributes))\n // Execute a strapi db createMany query with all the entities + their created components\n .then((data) => strapi.db.query(uid).createMany({ ...params, data }))\n );\n };\n\n const deleteMany = async <T extends object>(params?: T) => {\n const entitiesToDelete = await strapi.db.query(uid).findMany(params ?? {});\n\n if (!entitiesToDelete.length) {\n return null;\n }\n\n const componentsToDelete = await Promise.all(\n entitiesToDelete.map((entityToDelete) => components.get(uid, entityToDelete))\n );\n\n const deletedEntities = await strapi.db.query(uid).deleteMany(params);\n await Promise.all(componentsToDelete.map((compos) => components.delete(uid, compos)));\n\n return deletedEntities;\n };\n\n const getDeepPopulateComponentLikeQuery = (\n contentType: Struct.Schema,\n params = { select: '*' }\n ) => {\n const { attributes } = contentType;\n\n const populate: any = {};\n\n const entries: [string, any][] = Object.entries(attributes);\n\n for (const [key, attribute] of entries) {\n if (attribute.type === 'component') {\n const component = strapi.getModel(attribute.component);\n const subPopulate = getDeepPopulateComponentLikeQuery(component, params);\n\n if ((isArray(subPopulate) || isObject(subPopulate)) && size(subPopulate) > 0) {\n populate[key] = { ...params, populate: subPopulate };\n }\n\n if (isArray(subPopulate) && isEmpty(subPopulate)) {\n populate[key] = { ...params };\n }\n }\n\n if (attribute.type === 'dynamiczone') {\n const { components: componentsUID } = attribute;\n\n const on: any = {};\n\n for (const componentUID of componentsUID) {\n const component = strapi.getModel(componentUID);\n const subPopulate = getDeepPopulateComponentLikeQuery(component, params);\n\n if ((isArray(subPopulate) || isObject(subPopulate)) && size(subPopulate) > 0) {\n on[componentUID] = { ...params, populate: subPopulate };\n }\n\n if (isArray(subPopulate) && isEmpty(subPopulate)) {\n on[componentUID] = { ...params };\n }\n }\n\n populate[key] = size(on) > 0 ? { on } : true;\n }\n }\n\n const values = Object.values(populate);\n\n if (values.every((value) => value === true)) {\n return Object.keys(populate);\n }\n\n return populate;\n };\n\n return {\n create,\n createMany,\n deleteMany,\n getDeepPopulateComponentLikeQuery,\n\n get deepPopulateComponentLikeQuery() {\n const contentType = strapi.getModel(uid);\n\n return getDeepPopulateComponentLikeQuery(contentType);\n },\n };\n };\n\n return query;\n};\n\nexport { createEntityQuery };\n"],"names":["sanitizeComponentLikeAttributes","model","data","attributes","componentLikeAttributesKey","Object","entries","filter","attribute","type","map","key","omit","omitInvalidCreationAttributes","createEntityQuery","strapi","components","assignToEntity","uid","getModel","entityComponents","componentsService","dataWithoutComponents","assign","get","entity","delete","componentsToDelete","loadComponents","query","create","params","dataWithComponents","sanitizedData","db","createMany","Promise","resolve","then","deleteMany","entitiesToDelete","findMany","length","all","entityToDelete","deletedEntities","compos","getDeepPopulateComponentLikeQuery","contentType","select","populate","component","subPopulate","isArray","isObject","size","isEmpty","componentsUID","on","componentUID","values","every","value","keys","deepPopulateComponentLikeQuery"],"mappings":"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"}