UNPKG

@strapi/data-transfer

Version:

Data transfer capabilities for Strapi

1 lines 9.99 kB
{"version":3,"file":"index.mjs","sources":["../../../../../../src/strapi/providers/local-destination/strategies/restore/index.ts"],"sourcesContent":["import type { Core, UID, Struct } from '@strapi/types';\nimport type { Model } from '@strapi/database';\nimport { ProviderTransferError } from '../../../../../errors/providers';\nimport * as queries from '../../../../queries';\n\nexport interface IRestoreOptions {\n assets?: boolean; // delete media library files before transfer\n configuration?: {\n webhook?: boolean; // delete webhooks before transfer\n coreStore?: boolean; // delete core store before transfer\n };\n entities?: {\n include?: string[]; // only delete these stage entities before transfer\n exclude?: string[]; // exclude these stage entities from deletion\n filters?: ((contentType: Struct.ContentTypeSchema) => boolean)[]; // custom filters to exclude a content type from deletion\n params?: { [uid: string]: unknown }; // params object passed to deleteMany before transfer for custom deletions\n };\n}\n\ninterface IDeleteResults {\n count: number;\n aggregate: { [uid: string]: { count: number } };\n}\n\nexport const deleteRecords = async (strapi: Core.Strapi, options: IRestoreOptions) => {\n const entities = await deleteEntitiesRecords(strapi, options);\n const configuration = await deleteConfigurationRecords(strapi, options);\n\n return {\n count: entities.count + configuration.count,\n entities,\n configuration,\n };\n};\n\nconst deleteEntitiesRecords = async (\n strapi: Core.Strapi,\n options: IRestoreOptions = {}\n): Promise<IDeleteResults> => {\n const { entities } = options;\n\n const models = strapi.get('models').get() as Model[];\n const contentTypes = Object.values(strapi.contentTypes) as Struct.ContentTypeSchema[];\n\n const contentTypesToClear = contentTypes\n .filter((contentType) => {\n let removeThisContentType = true;\n\n // include means \"only include these types\" so if it's not in here, it's not being included\n if (entities?.include) {\n removeThisContentType = entities.include.includes(contentType.uid);\n }\n\n // if something is excluded, remove it. But lack of being excluded doesn't mean it's kept\n if (entities?.exclude && entities.exclude.includes(contentType.uid)) {\n removeThisContentType = false;\n }\n\n if (entities?.filters) {\n removeThisContentType = entities.filters.every((filter) => filter(contentType));\n }\n\n return removeThisContentType;\n })\n .map((contentType) => contentType.uid);\n\n const modelsToClear = models\n .filter((model) => {\n if (contentTypesToClear.includes(model.uid as UID.ContentType)) {\n return false;\n }\n\n let removeThisModel = true;\n\n // include means \"only include these types\" so if it's not in here, it's not being included\n if (entities?.include) {\n removeThisModel = entities.include.includes(model.uid);\n }\n\n // if something is excluded, remove it. But lack of being excluded doesn't mean it's kept\n if (entities?.exclude && entities.exclude.includes(model.uid)) {\n removeThisModel = false;\n }\n\n return removeThisModel;\n })\n .map((model) => model.uid);\n\n const [results, updateResults] = useResults([...contentTypesToClear, ...modelsToClear]);\n\n const contentTypeQuery = queries.entity.createEntityQuery(strapi);\n\n const contentTypePromises = contentTypesToClear.map(async (uid) => {\n const result = await contentTypeQuery(uid).deleteMany(entities?.params);\n\n if (result) {\n updateResults(result.count || 0, uid);\n }\n });\n\n const modelsPromises = modelsToClear.map(async (uid) => {\n const result = await strapi.db.query(uid).deleteMany({});\n\n if (result) {\n updateResults(result.count || 0, uid);\n }\n });\n\n await Promise.all([...contentTypePromises, ...modelsPromises]);\n\n return results;\n};\n\nconst deleteConfigurationRecords = async (\n strapi: Core.Strapi,\n options: IRestoreOptions = {}\n): Promise<IDeleteResults> => {\n const { coreStore = true, webhook = true } = options?.configuration ?? {};\n\n const models: string[] = [];\n\n if (coreStore) {\n models.push('strapi::core-store');\n }\n\n if (webhook) {\n models.push('strapi::webhook');\n }\n\n const [results, updateResults] = useResults(models);\n\n const deletePromises = models.map(async (uid) => {\n const result = await strapi.db.query(uid).deleteMany({});\n\n if (result) {\n updateResults(result.count, uid);\n }\n });\n\n await Promise.all(deletePromises);\n\n return results;\n};\n\nconst useResults = (\n keys: string[]\n): [IDeleteResults, (count: number, key?: string) => void | never] => {\n const results: IDeleteResults = {\n count: 0,\n aggregate: keys.reduce((acc, key) => ({ ...acc, [key]: { count: 0 } }), {}),\n };\n\n const update = (count: number, key?: string) => {\n if (key) {\n if (!(key in results.aggregate)) {\n throw new ProviderTransferError(`Unknown key \"${key}\" provided in results update`);\n }\n\n results.aggregate[key].count += count;\n }\n\n results.count += count;\n };\n\n return [results, update];\n};\n\nexport * from './entities';\nexport * from './configuration';\nexport * from './links';\n"],"names":["deleteRecords","strapi","options","entities","deleteEntitiesRecords","configuration","deleteConfigurationRecords","count","models","get","contentTypes","Object","values","contentTypesToClear","filter","contentType","removeThisContentType","include","includes","uid","exclude","filters","every","map","modelsToClear","model","removeThisModel","results","updateResults","useResults","contentTypeQuery","queries","contentTypePromises","result","deleteMany","params","modelsPromises","db","query","Promise","all","coreStore","webhook","push","deletePromises","keys","aggregate","reduce","acc","key","update","ProviderTransferError"],"mappings":"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"}