@strapi/core 0.0.0-experimental.a1a2361a76ebed3473eff9100361668494f36431 → 0.0.0-experimental.a1b9cf7971f495cb61c820da5fd4719066894c38
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.
Potentially problematic release.
This version of @strapi/core might be problematic. Click here for more details.
- package/dist/Strapi.d.ts +1 -0
- package/dist/Strapi.d.ts.map +1 -1
- package/dist/Strapi.js +18 -1
- package/dist/Strapi.js.map +1 -1
- package/dist/Strapi.mjs +18 -1
- package/dist/Strapi.mjs.map +1 -1
- package/dist/constants.d.ts +3 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/constants.js +6 -0
- package/dist/constants.js.map +1 -0
- package/dist/constants.mjs +4 -0
- package/dist/constants.mjs.map +1 -0
- package/dist/core-api/controller/index.d.ts.map +1 -1
- package/dist/core-api/controller/index.js +2 -1
- package/dist/core-api/controller/index.js.map +1 -1
- package/dist/core-api/controller/index.mjs +2 -1
- package/dist/core-api/controller/index.mjs.map +1 -1
- package/dist/core-api/controller/transform.d.ts +3 -2
- package/dist/core-api/controller/transform.d.ts.map +1 -1
- package/dist/core-api/controller/transform.js +13 -3
- package/dist/core-api/controller/transform.js.map +1 -1
- package/dist/core-api/controller/transform.mjs +13 -3
- package/dist/core-api/controller/transform.mjs.map +1 -1
- package/dist/core-api/routes/index.d.ts +4 -22
- package/dist/core-api/routes/index.d.ts.map +1 -1
- package/dist/core-api/routes/index.js +150 -8
- package/dist/core-api/routes/index.js.map +1 -1
- package/dist/core-api/routes/index.mjs +131 -8
- package/dist/core-api/routes/index.mjs.map +1 -1
- package/dist/core-api/routes/validation/attributes.d.ts +244 -0
- package/dist/core-api/routes/validation/attributes.d.ts.map +1 -0
- package/dist/core-api/routes/validation/attributes.js +560 -0
- package/dist/core-api/routes/validation/attributes.js.map +1 -0
- package/dist/core-api/routes/validation/attributes.mjs +521 -0
- package/dist/core-api/routes/validation/attributes.mjs.map +1 -0
- package/dist/core-api/routes/validation/common.d.ts +105 -0
- package/dist/core-api/routes/validation/common.d.ts.map +1 -0
- package/dist/core-api/routes/validation/common.js +116 -0
- package/dist/core-api/routes/validation/common.js.map +1 -0
- package/dist/core-api/routes/validation/common.mjs +95 -0
- package/dist/core-api/routes/validation/common.mjs.map +1 -0
- package/dist/core-api/routes/validation/component.d.ts +34 -0
- package/dist/core-api/routes/validation/component.d.ts.map +1 -0
- package/dist/core-api/routes/validation/component.js +45 -0
- package/dist/core-api/routes/validation/component.js.map +1 -0
- package/dist/core-api/routes/validation/component.mjs +43 -0
- package/dist/core-api/routes/validation/component.mjs.map +1 -0
- package/dist/core-api/routes/validation/constants.d.ts +8 -0
- package/dist/core-api/routes/validation/constants.d.ts.map +1 -0
- package/dist/core-api/routes/validation/constants.js +18 -0
- package/dist/core-api/routes/validation/constants.js.map +1 -0
- package/dist/core-api/routes/validation/constants.mjs +16 -0
- package/dist/core-api/routes/validation/constants.mjs.map +1 -0
- package/dist/core-api/routes/validation/content-type.d.ts +128 -0
- package/dist/core-api/routes/validation/content-type.d.ts.map +1 -0
- package/dist/core-api/routes/validation/content-type.js +201 -0
- package/dist/core-api/routes/validation/content-type.js.map +1 -0
- package/dist/core-api/routes/validation/content-type.mjs +180 -0
- package/dist/core-api/routes/validation/content-type.mjs.map +1 -0
- package/dist/core-api/routes/validation/index.d.ts +5 -0
- package/dist/core-api/routes/validation/index.d.ts.map +1 -0
- package/dist/core-api/routes/validation/mappers.d.ts +105 -0
- package/dist/core-api/routes/validation/mappers.d.ts.map +1 -0
- package/dist/core-api/routes/validation/mappers.js +273 -0
- package/dist/core-api/routes/validation/mappers.js.map +1 -0
- package/dist/core-api/routes/validation/mappers.mjs +249 -0
- package/dist/core-api/routes/validation/mappers.mjs.map +1 -0
- package/dist/core-api/routes/validation/utils.d.ts +47 -0
- package/dist/core-api/routes/validation/utils.d.ts.map +1 -0
- package/dist/core-api/routes/validation/utils.js +128 -0
- package/dist/core-api/routes/validation/utils.js.map +1 -0
- package/dist/core-api/routes/validation/utils.mjs +106 -0
- package/dist/core-api/routes/validation/utils.mjs.map +1 -0
- package/dist/domain/content-type/index.d.ts.map +1 -1
- package/dist/domain/content-type/index.js +17 -1
- package/dist/domain/content-type/index.js.map +1 -1
- package/dist/domain/content-type/index.mjs +17 -1
- package/dist/domain/content-type/index.mjs.map +1 -1
- package/dist/domain/module/index.d.ts.map +1 -1
- package/dist/domain/module/index.js +3 -0
- package/dist/domain/module/index.js.map +1 -1
- package/dist/domain/module/index.mjs +3 -0
- package/dist/domain/module/index.mjs.map +1 -1
- package/dist/factories.d.ts +3 -1
- package/dist/factories.d.ts.map +1 -1
- package/dist/factories.js +10 -2
- package/dist/factories.js.map +1 -1
- package/dist/factories.mjs +10 -3
- package/dist/factories.mjs.map +1 -1
- package/dist/loaders/plugins/index.js +1 -1
- package/dist/loaders/plugins/index.js.map +1 -1
- package/dist/loaders/plugins/index.mjs +1 -1
- package/dist/loaders/plugins/index.mjs.map +1 -1
- package/dist/middlewares/cors.d.ts +9 -1
- package/dist/middlewares/cors.d.ts.map +1 -1
- package/dist/middlewares/cors.js +39 -17
- package/dist/middlewares/cors.js.map +1 -1
- package/dist/middlewares/cors.mjs +39 -18
- package/dist/middlewares/cors.mjs.map +1 -1
- package/dist/migrations/first-published-at.d.ts +4 -0
- package/dist/migrations/first-published-at.d.ts.map +1 -0
- package/dist/migrations/first-published-at.js +51 -0
- package/dist/migrations/first-published-at.js.map +1 -0
- package/dist/migrations/first-published-at.mjs +49 -0
- package/dist/migrations/first-published-at.mjs.map +1 -0
- package/dist/migrations/index.d.ts.map +1 -1
- package/dist/migrations/index.js +5 -0
- package/dist/migrations/index.js.map +1 -1
- package/dist/migrations/index.mjs +5 -0
- package/dist/migrations/index.mjs.map +1 -1
- package/dist/package.json.js +15 -12
- package/dist/package.json.js.map +1 -1
- package/dist/package.json.mjs +15 -12
- package/dist/package.json.mjs.map +1 -1
- package/dist/providers/index.d.ts.map +1 -1
- package/dist/providers/index.js +2 -0
- package/dist/providers/index.js.map +1 -1
- package/dist/providers/index.mjs +2 -0
- package/dist/providers/index.mjs.map +1 -1
- package/dist/providers/session-manager.d.ts +3 -0
- package/dist/providers/session-manager.d.ts.map +1 -0
- package/dist/providers/session-manager.js +23 -0
- package/dist/providers/session-manager.js.map +1 -0
- package/dist/providers/session-manager.mjs +21 -0
- package/dist/providers/session-manager.mjs.map +1 -0
- package/dist/services/content-api/index.d.ts +1 -1
- package/dist/services/content-api/index.d.ts.map +1 -1
- package/dist/services/content-api/index.js +1 -1
- package/dist/services/content-api/index.js.map +1 -1
- package/dist/services/content-api/index.mjs +2 -2
- package/dist/services/content-api/index.mjs.map +1 -1
- package/dist/services/content-source-maps.d.ts +13 -0
- package/dist/services/content-source-maps.d.ts.map +1 -0
- package/dist/services/content-source-maps.js +108 -0
- package/dist/services/content-source-maps.js.map +1 -0
- package/dist/services/content-source-maps.mjs +106 -0
- package/dist/services/content-source-maps.mjs.map +1 -0
- package/dist/services/document-service/components.d.ts +31 -1
- package/dist/services/document-service/components.d.ts.map +1 -1
- package/dist/services/document-service/components.js +109 -0
- package/dist/services/document-service/components.js.map +1 -1
- package/dist/services/document-service/components.mjs +107 -1
- package/dist/services/document-service/components.mjs.map +1 -1
- package/dist/services/document-service/first-published-at.d.ts +7 -0
- package/dist/services/document-service/first-published-at.d.ts.map +1 -0
- package/dist/services/document-service/first-published-at.js +31 -0
- package/dist/services/document-service/first-published-at.js.map +1 -0
- package/dist/services/document-service/first-published-at.mjs +28 -0
- package/dist/services/document-service/first-published-at.mjs.map +1 -0
- package/dist/services/document-service/repository.d.ts.map +1 -1
- package/dist/services/document-service/repository.js +11 -4
- package/dist/services/document-service/repository.js.map +1 -1
- package/dist/services/document-service/repository.mjs +12 -5
- package/dist/services/document-service/repository.mjs.map +1 -1
- package/dist/services/document-service/utils/clean-component-join-table.d.ts +7 -0
- package/dist/services/document-service/utils/clean-component-join-table.d.ts.map +1 -0
- package/dist/services/document-service/utils/clean-component-join-table.js +138 -0
- package/dist/services/document-service/utils/clean-component-join-table.js.map +1 -0
- package/dist/services/document-service/utils/clean-component-join-table.mjs +136 -0
- package/dist/services/document-service/utils/clean-component-join-table.mjs.map +1 -0
- package/dist/services/document-service/utils/unidirectional-relations.d.ts +19 -2
- package/dist/services/document-service/utils/unidirectional-relations.d.ts.map +1 -1
- package/dist/services/document-service/utils/unidirectional-relations.js +21 -6
- package/dist/services/document-service/utils/unidirectional-relations.js.map +1 -1
- package/dist/services/document-service/utils/unidirectional-relations.mjs +21 -6
- package/dist/services/document-service/utils/unidirectional-relations.mjs.map +1 -1
- package/dist/services/metrics/index.d.ts +1 -1
- package/dist/services/metrics/index.d.ts.map +1 -1
- package/dist/services/metrics/index.js +11 -9
- package/dist/services/metrics/index.js.map +1 -1
- package/dist/services/metrics/index.mjs +11 -9
- package/dist/services/metrics/index.mjs.map +1 -1
- package/dist/services/metrics/middleware.d.ts +2 -1
- package/dist/services/metrics/middleware.d.ts.map +1 -1
- package/dist/services/metrics/middleware.js +2 -2
- package/dist/services/metrics/middleware.js.map +1 -1
- package/dist/services/metrics/middleware.mjs +2 -2
- package/dist/services/metrics/middleware.mjs.map +1 -1
- package/dist/services/metrics/sender.d.ts.map +1 -1
- package/dist/services/metrics/sender.js +2 -2
- package/dist/services/metrics/sender.js.map +1 -1
- package/dist/services/metrics/sender.mjs +2 -2
- package/dist/services/metrics/sender.mjs.map +1 -1
- package/dist/services/server/register-routes.js +22 -2
- package/dist/services/server/register-routes.js.map +1 -1
- package/dist/services/server/register-routes.mjs +22 -2
- package/dist/services/server/register-routes.mjs.map +1 -1
- package/dist/services/server/routing.d.ts +10 -0
- package/dist/services/server/routing.d.ts.map +1 -1
- package/dist/services/server/routing.js +7 -1
- package/dist/services/server/routing.js.map +1 -1
- package/dist/services/server/routing.mjs +7 -1
- package/dist/services/server/routing.mjs.map +1 -1
- package/dist/services/session-manager.d.ts +160 -0
- package/dist/services/session-manager.d.ts.map +1 -0
- package/dist/services/session-manager.js +476 -0
- package/dist/services/session-manager.js.map +1 -0
- package/dist/services/session-manager.mjs +473 -0
- package/dist/services/session-manager.mjs.map +1 -0
- package/package.json +15 -12
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import _ from 'lodash';
|
|
2
2
|
import { curry, omit, pipe, assign, has } from 'lodash/fp';
|
|
3
3
|
import { contentTypes, async, errors } from '@strapi/utils';
|
|
4
|
+
import { getComponentJoinTableName, getComponentJoinColumnEntityName, getComponentJoinColumnInverseName, getComponentTypeColumn } from '../../utils/transform-content-types-to-models.mjs';
|
|
4
5
|
|
|
5
6
|
const omitComponentData = curry((schema, data)=>{
|
|
6
7
|
const { attributes } = schema;
|
|
@@ -273,6 +274,111 @@ const deleteComponent = async (uid, componentToDelete)=>{
|
|
|
273
274
|
const assignComponentData = curry((schema, componentData, data)=>{
|
|
274
275
|
return pipe(omitComponentData(schema), assign(componentData))(data);
|
|
275
276
|
});
|
|
277
|
+
/** *************************
|
|
278
|
+
Component relation handling for document operations
|
|
279
|
+
************************** */ /**
|
|
280
|
+
* Find the parent entry of a component instance.
|
|
281
|
+
*
|
|
282
|
+
* Given a component model, a specific component instance id, and the list of
|
|
283
|
+
* possible parent content types (those that can embed this component),
|
|
284
|
+
* this function checks each parent's *_cmps join table to see if the component
|
|
285
|
+
* instance is linked to a parent entity.
|
|
286
|
+
*
|
|
287
|
+
* - Returns the parent uid, parent table name, and parent id if found.
|
|
288
|
+
* - Returns null if no parent relationship exists.
|
|
289
|
+
*/ const findComponentParent = async (componentSchema, componentId, parentSchemasForComponent, opts)=>{
|
|
290
|
+
if (!componentSchema?.uid) return null;
|
|
291
|
+
const schemaBuilder = strapi.db.getSchemaConnection(opts?.trx);
|
|
292
|
+
const withTrx = (qb)=>opts?.trx ? qb.transacting(opts.trx) : qb;
|
|
293
|
+
for (const parent of parentSchemasForComponent){
|
|
294
|
+
if (!parent.collectionName) continue;
|
|
295
|
+
// Use the exact same functions that create the tables
|
|
296
|
+
const identifiers = strapi.db.metadata.identifiers;
|
|
297
|
+
const joinTableName = getComponentJoinTableName(parent.collectionName, identifiers);
|
|
298
|
+
try {
|
|
299
|
+
const tableExists = await schemaBuilder.hasTable(joinTableName);
|
|
300
|
+
if (!tableExists) continue;
|
|
301
|
+
// Use the exact same functions that create the columns
|
|
302
|
+
const entityIdColumn = getComponentJoinColumnEntityName(identifiers);
|
|
303
|
+
const componentIdColumn = getComponentJoinColumnInverseName(identifiers);
|
|
304
|
+
const componentTypeColumn = getComponentTypeColumn(identifiers);
|
|
305
|
+
const parentRow = await withTrx(strapi.db.getConnection(joinTableName)).where({
|
|
306
|
+
[componentIdColumn]: componentId,
|
|
307
|
+
[componentTypeColumn]: componentSchema.uid
|
|
308
|
+
}).first(entityIdColumn);
|
|
309
|
+
if (parentRow) {
|
|
310
|
+
return {
|
|
311
|
+
uid: parent.uid,
|
|
312
|
+
table: parent.collectionName,
|
|
313
|
+
parentId: parentRow[entityIdColumn]
|
|
314
|
+
};
|
|
315
|
+
}
|
|
316
|
+
} catch {
|
|
317
|
+
continue;
|
|
318
|
+
}
|
|
319
|
+
}
|
|
320
|
+
return null;
|
|
321
|
+
};
|
|
322
|
+
/**
|
|
323
|
+
* Finds content types that contain the given component and have draft & publish enabled.
|
|
324
|
+
*/ const getParentSchemasForComponent = (componentSchema)=>{
|
|
325
|
+
// Find direct parents in contentTypes and components
|
|
326
|
+
return [
|
|
327
|
+
...Object.values(strapi.contentTypes),
|
|
328
|
+
...Object.values(strapi.components)
|
|
329
|
+
].filter((schema)=>{
|
|
330
|
+
if (!schema?.attributes) return false;
|
|
331
|
+
return Object.values(schema.attributes).some((attr)=>{
|
|
332
|
+
return attr.type === 'component' && attr.component === componentSchema.uid || attr.type === 'dynamiczone' && attr.components?.includes(componentSchema.uid);
|
|
333
|
+
});
|
|
334
|
+
});
|
|
335
|
+
};
|
|
336
|
+
/**
|
|
337
|
+
* Determines if a component relation should be propagated to a new document version
|
|
338
|
+
* when a document with draft and publish is updated.
|
|
339
|
+
*/ const shouldPropagateComponentRelationToNewVersion = async (componentRelation, componentSchema, parentSchemasForComponent, trx)=>{
|
|
340
|
+
// Get the component ID column name using the actual component model name
|
|
341
|
+
const componentIdColumn = strapi.db.metadata.identifiers.getJoinColumnAttributeIdName(_.snakeCase(componentSchema.modelName));
|
|
342
|
+
const componentId = componentRelation[componentIdColumn] ?? componentRelation.parentId;
|
|
343
|
+
const parent = await findComponentParent(componentSchema, componentId, parentSchemasForComponent, {
|
|
344
|
+
trx
|
|
345
|
+
});
|
|
346
|
+
// Keep relation if component has no parent entry
|
|
347
|
+
if (!parent?.uid) {
|
|
348
|
+
return true;
|
|
349
|
+
}
|
|
350
|
+
if (strapi.components[parent.uid]) {
|
|
351
|
+
// If the parent is a component, we need to check its parents recursively
|
|
352
|
+
const parentComponentSchema = strapi.components[parent.uid];
|
|
353
|
+
const grandParentSchemas = getParentSchemasForComponent(parentComponentSchema);
|
|
354
|
+
return shouldPropagateComponentRelationToNewVersion(parent, parentComponentSchema, grandParentSchemas, trx);
|
|
355
|
+
}
|
|
356
|
+
const parentContentType = strapi.contentTypes[parent.uid];
|
|
357
|
+
// Keep relation if parent doesn't have draft & publish enabled
|
|
358
|
+
if (!parentContentType?.options?.draftAndPublish) {
|
|
359
|
+
return true;
|
|
360
|
+
}
|
|
361
|
+
// Discard relation if parent has draft & publish enabled
|
|
362
|
+
return false;
|
|
363
|
+
};
|
|
364
|
+
/**
|
|
365
|
+
* Creates a filter function for component relations that can be passed to the generic
|
|
366
|
+
* unidirectional relations utility
|
|
367
|
+
*/ const createComponentRelationFilter = ()=>{
|
|
368
|
+
return async (relation, model, trx)=>{
|
|
369
|
+
// Only apply component-specific filtering for components
|
|
370
|
+
if (model.modelType !== 'component') {
|
|
371
|
+
return true;
|
|
372
|
+
}
|
|
373
|
+
const componentSchema = model;
|
|
374
|
+
const parentSchemas = getParentSchemasForComponent(componentSchema);
|
|
375
|
+
// Exit if no draft & publish parent types exist
|
|
376
|
+
if (parentSchemas.length === 0) {
|
|
377
|
+
return true;
|
|
378
|
+
}
|
|
379
|
+
return shouldPropagateComponentRelationToNewVersion(relation, componentSchema, parentSchemas, trx);
|
|
380
|
+
};
|
|
381
|
+
};
|
|
276
382
|
|
|
277
|
-
export { assignComponentData, createComponents, deleteComponent, deleteComponents, getComponents, omitComponentData, updateComponents };
|
|
383
|
+
export { assignComponentData, createComponentRelationFilter, createComponents, deleteComponent, deleteComponents, findComponentParent, getComponents, getParentSchemasForComponent, omitComponentData, updateComponents };
|
|
278
384
|
//# sourceMappingURL=components.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"components.mjs","sources":["../../../src/services/document-service/components.ts"],"sourcesContent":["import _ from 'lodash';\nimport { has, omit, pipe, assign, curry } from 'lodash/fp';\nimport type { Utils, UID, Schema, Data, Modules } from '@strapi/types';\nimport { contentTypes as contentTypesUtils, async, errors } from '@strapi/utils';\n\n// type aliases for readability\ntype Input<T extends UID.Schema> = Modules.Documents.Params.Data.Input<T>;\n\ntype LoadedComponents<TUID extends UID.Schema> = Data.Entity<\n TUID,\n Schema.AttributeNamesByType<TUID, 'component' | 'dynamiczone'>\n>;\n\ntype SingleComponentValue = Schema.Attribute.ComponentValue<UID.Component, false>;\ntype RepeatableComponentValue = Schema.Attribute.ComponentValue<UID.Component, true>;\n\ntype ComponentValue = SingleComponentValue | RepeatableComponentValue;\n\ntype DynamicZoneValue = Schema.Attribute.DynamicZoneValue<UID.Component[]>;\n\ntype ComponentBody = {\n [key: string]: ComponentValue | DynamicZoneValue;\n};\n\nconst omitComponentData = curry(\n (schema: Schema.Schema, data: Input<UID.Schema>): Partial<Input<UID.Schema>> => {\n const { attributes } = schema;\n const componentAttributes = Object.keys(attributes).filter((attributeName) =>\n contentTypesUtils.isComponentAttribute(attributes[attributeName])\n );\n\n return omit(componentAttributes, data);\n }\n);\n\n// NOTE: we could generalize the logic to allow CRUD of relation directly in the DB layer\nconst createComponents = async <TUID extends UID.Schema, TData extends Input<TUID>>(\n uid: TUID,\n data: TData\n) => {\n const { attributes = {} } = strapi.getModel(uid);\n\n const componentBody: ComponentBody = {};\n\n const attributeNames = Object.keys(attributes);\n\n for (const attributeName of attributeNames) {\n const attribute = attributes[attributeName];\n\n if (!has(attributeName, data) || !contentTypesUtils.isComponentAttribute(attribute)) {\n continue;\n }\n\n if (attribute.type === 'component') {\n const { component: componentUID, repeatable = false } = attribute;\n\n const componentValue = data[attributeName as keyof TData];\n\n if (componentValue === null) {\n continue;\n }\n\n if (repeatable === true) {\n if (!Array.isArray(componentValue)) {\n throw new Error('Expected an array to create repeatable component');\n }\n\n const components: RepeatableComponentValue = await async.map(componentValue, (value: any) =>\n createComponent(componentUID, value)\n );\n\n componentBody[attributeName] = components.map(({ id }) => {\n return {\n id,\n __pivot: {\n field: attributeName,\n component_type: componentUID,\n },\n };\n });\n } else {\n const component = await createComponent(\n componentUID,\n componentValue as Input<UID.Component>\n );\n\n componentBody[attributeName] = {\n id: component.id,\n __pivot: {\n field: attributeName,\n component_type: componentUID,\n },\n };\n }\n\n continue;\n }\n\n if (attribute.type === 'dynamiczone') {\n const dynamiczoneValues = data[\n attributeName as keyof TData\n ] as Modules.EntityService.Params.Attribute.GetValue<Schema.Attribute.DynamicZone>;\n\n if (!Array.isArray(dynamiczoneValues)) {\n throw new Error('Expected an array to create repeatable component');\n }\n\n const createDynamicZoneComponents = async (\n value: Utils.Array.Values<typeof dynamiczoneValues>\n ) => {\n const { id } = await createComponent(value.__component, value);\n return {\n id,\n __component: value.__component,\n __pivot: {\n field: attributeName,\n },\n };\n };\n\n // MySQL/MariaDB can cause deadlocks here if concurrency higher than 1\n componentBody[attributeName] = await async.map(\n dynamiczoneValues,\n createDynamicZoneComponents\n );\n\n continue;\n }\n }\n\n return componentBody;\n};\n\nconst getComponents = async <TUID extends UID.Schema>(\n uid: TUID,\n entity: { id: Modules.EntityService.Params.Attribute.ID }\n): Promise<LoadedComponents<TUID>> => {\n const componentAttributes = contentTypesUtils.getComponentAttributes(strapi.getModel(uid));\n\n if (_.isEmpty(componentAttributes)) {\n return {} as LoadedComponents<TUID>;\n }\n\n return strapi.db.query(uid).load(entity, componentAttributes) as Promise<LoadedComponents<TUID>>;\n};\n\n/*\n delete old components\n create or update\n*/\nconst updateComponents = async <TUID extends UID.Schema, TData extends Partial<Input<TUID>>>(\n uid: TUID,\n entityToUpdate: { id: Modules.EntityService.Params.Attribute.ID },\n data: TData\n) => {\n const { attributes = {} } = strapi.getModel(uid);\n\n const componentBody: ComponentBody = {};\n\n for (const attributeName of Object.keys(attributes)) {\n const attribute = attributes[attributeName];\n\n if (!has(attributeName, data)) {\n continue;\n }\n\n if (attribute.type === 'component') {\n const { component: componentUID, repeatable = false } = attribute;\n\n const componentValue = data[attributeName as keyof TData] as ComponentValue;\n await deleteOldComponents(uid, componentUID, entityToUpdate, attributeName, componentValue);\n\n if (repeatable === true) {\n if (!Array.isArray(componentValue)) {\n throw new Error('Expected an array to create repeatable component');\n }\n\n // MySQL/MariaDB can cause deadlocks here if concurrency higher than 1\n const components: RepeatableComponentValue = await async.map(componentValue, (value: any) =>\n updateOrCreateComponent(componentUID, value)\n );\n\n componentBody[attributeName] = components.filter(_.negate(_.isNil)).map(({ id }) => {\n return {\n id,\n __pivot: {\n field: attributeName,\n component_type: componentUID,\n },\n };\n });\n } else {\n const component = await updateOrCreateComponent(componentUID, componentValue);\n componentBody[attributeName] = component && {\n id: component.id,\n __pivot: {\n field: attributeName,\n component_type: componentUID,\n },\n };\n }\n } else if (attribute.type === 'dynamiczone') {\n const dynamiczoneValues = data[attributeName as keyof TData] as DynamicZoneValue;\n\n await deleteOldDZComponents(uid, entityToUpdate, attributeName, dynamiczoneValues);\n\n if (!Array.isArray(dynamiczoneValues)) {\n throw new Error('Expected an array to create repeatable component');\n }\n\n // MySQL/MariaDB can cause deadlocks here if concurrency higher than 1\n componentBody[attributeName] = await async.map(dynamiczoneValues, async (value: any) => {\n const { id } = await updateOrCreateComponent(value.__component, value);\n\n return {\n id,\n __component: value.__component,\n __pivot: {\n field: attributeName,\n },\n };\n });\n }\n }\n\n return componentBody;\n};\n\nconst pickStringifiedId = ({\n id,\n}: {\n id: Modules.EntityService.Params.Attribute.ID;\n}): Modules.EntityService.Params.Attribute.ID & string => {\n if (typeof id === 'string') {\n return id;\n }\n\n return `${id}`;\n};\n\nconst deleteOldComponents = async <TUID extends UID.Schema>(\n uid: TUID,\n componentUID: UID.Component,\n entityToUpdate: { id: Modules.EntityService.Params.Attribute.ID },\n attributeName: string,\n componentValue: ComponentValue\n) => {\n const previousValue = (await strapi.db\n .query(uid)\n .load(entityToUpdate, attributeName)) as ComponentValue;\n const idsToKeep = _.castArray(componentValue).filter(has('id')).map(pickStringifiedId);\n const allIds = _.castArray(previousValue).filter(has('id')).map(pickStringifiedId);\n\n idsToKeep.forEach((id) => {\n if (!allIds.includes(id)) {\n throw new errors.ApplicationError(\n `Some of the provided components in ${attributeName} are not related to the entity`\n );\n }\n });\n\n const idsToDelete = _.difference(allIds, idsToKeep);\n\n if (idsToDelete.length > 0) {\n for (const idToDelete of idsToDelete) {\n await deleteComponent(componentUID, { id: idToDelete });\n }\n }\n};\n\nconst deleteOldDZComponents = async <TUID extends UID.Schema>(\n uid: TUID,\n entityToUpdate: { id: Modules.EntityService.Params.Attribute.ID },\n attributeName: string,\n dynamiczoneValues: DynamicZoneValue\n) => {\n const previousValue = (await strapi.db\n .query(uid)\n .load(entityToUpdate, attributeName)) as DynamicZoneValue;\n\n const idsToKeep = _.castArray(dynamiczoneValues)\n .filter(has('id'))\n .map((v) => ({\n id: pickStringifiedId(v),\n __component: v.__component,\n }));\n\n const allIds = _.castArray(previousValue)\n .filter(has('id'))\n .map((v) => ({\n id: pickStringifiedId(v),\n __component: v.__component,\n }));\n\n idsToKeep.forEach(({ id, __component }) => {\n if (!allIds.find((el) => el.id === id && el.__component === __component)) {\n const err = new Error(\n `Some of the provided components in ${attributeName} are not related to the entity`\n );\n\n Object.assign(err, { status: 400 });\n throw err;\n }\n });\n\n type IdsToDelete = DynamicZoneValue;\n\n const idsToDelete = allIds.reduce((acc, { id, __component }) => {\n if (!idsToKeep.find((el) => el.id === id && el.__component === __component)) {\n acc.push({ id, __component });\n }\n\n return acc;\n }, [] as IdsToDelete);\n\n if (idsToDelete.length > 0) {\n for (const idToDelete of idsToDelete) {\n const { id, __component } = idToDelete;\n await deleteComponent(__component, { id });\n }\n }\n};\n\nconst deleteComponents = async <TUID extends UID.Schema, TEntity extends Data.Entity<TUID>>(\n uid: TUID,\n entityToDelete: TEntity,\n { loadComponents = true } = {}\n) => {\n const { attributes = {} } = strapi.getModel(uid);\n\n const attributeNames = Object.keys(attributes);\n\n for (const attributeName of attributeNames) {\n const attribute = attributes[attributeName];\n\n if (attribute.type === 'component' || attribute.type === 'dynamiczone') {\n let value;\n\n if (loadComponents) {\n value = await strapi.db.query(uid).load(entityToDelete, attributeName);\n } else {\n value = entityToDelete[attributeName as keyof TEntity];\n }\n\n if (!value) {\n continue;\n }\n\n if (attribute.type === 'component') {\n const { component: componentUID } = attribute;\n await async.map(_.castArray(value), (subValue: any) =>\n deleteComponent(componentUID, subValue)\n );\n } else {\n await async.map(_.castArray(value), (subValue: any) =>\n deleteComponent(subValue.__component, subValue)\n );\n }\n\n continue;\n }\n }\n};\n\n/** *************************\n Component queries\n************************** */\n\n// components can have nested compos so this must be recursive\nconst createComponent = async <TUID extends UID.Component>(uid: TUID, data: Input<TUID>) => {\n const schema = strapi.getModel(uid);\n\n const componentData = await createComponents(uid, data);\n\n const transform = pipe(\n // Make sure we don't save the component with a pre-defined ID\n omit('id'),\n assignComponentData(schema, componentData)\n );\n\n return strapi.db.query(uid).create({ data: transform(data) });\n};\n\n// components can have nested compos so this must be recursive\nconst updateComponent = async <TUID extends UID.Component>(\n uid: TUID,\n componentToUpdate: { id: Modules.EntityService.Params.Attribute.ID },\n data: Input<TUID>\n) => {\n const schema = strapi.getModel(uid);\n\n const componentData = await updateComponents(uid, componentToUpdate, data);\n\n return strapi.db.query(uid).update({\n where: {\n id: componentToUpdate.id,\n },\n data: assignComponentData(schema, componentData, data),\n });\n};\n\nconst updateOrCreateComponent = <TUID extends UID.Component>(\n componentUID: TUID,\n value: Input<TUID>\n) => {\n if (value === null) {\n return null;\n }\n\n // update\n if ('id' in value && typeof value.id !== 'undefined') {\n // TODO: verify the compo is associated with the entity\n return updateComponent(componentUID, { id: value.id }, value);\n }\n\n // create\n return createComponent(componentUID, value);\n};\n\nconst deleteComponent = async <TUID extends UID.Component>(\n uid: TUID,\n componentToDelete: Data.Component<TUID>\n) => {\n await deleteComponents(uid, componentToDelete);\n await strapi.db.query(uid).delete({ where: { id: componentToDelete.id } });\n};\n\nconst assignComponentData = curry(\n (schema: Schema.Schema, componentData: ComponentBody, data: Input<UID.Schema>) => {\n return pipe(omitComponentData(schema), assign(componentData))(data);\n }\n);\n\nexport {\n omitComponentData,\n assignComponentData,\n getComponents,\n createComponents,\n updateComponents,\n deleteComponents,\n deleteComponent,\n};\n"],"names":["omitComponentData","curry","schema","data","attributes","componentAttributes","Object","keys","filter","attributeName","contentTypesUtils","isComponentAttribute","omit","createComponents","uid","strapi","getModel","componentBody","attributeNames","attribute","has","type","component","componentUID","repeatable","componentValue","Array","isArray","Error","components","async","map","value","createComponent","id","__pivot","field","component_type","dynamiczoneValues","createDynamicZoneComponents","__component","getComponents","entity","getComponentAttributes","_","isEmpty","db","query","load","updateComponents","entityToUpdate","deleteOldComponents","updateOrCreateComponent","negate","isNil","deleteOldDZComponents","pickStringifiedId","previousValue","idsToKeep","castArray","allIds","forEach","includes","errors","ApplicationError","idsToDelete","difference","length","idToDelete","deleteComponent","v","find","el","err","assign","status","reduce","acc","push","deleteComponents","entityToDelete","loadComponents","subValue","componentData","transform","pipe","assignComponentData","create","updateComponent","componentToUpdate","update","where","componentToDelete","delete"],"mappings":";;;;AAwBMA,MAAAA,iBAAAA,GAAoBC,KACxB,CAAA,CAACC,MAAuBC,EAAAA,IAAAA,GAAAA;IACtB,MAAM,EAAEC,UAAU,EAAE,GAAGF,MAAAA;AACvB,IAAA,MAAMG,mBAAsBC,GAAAA,MAAAA,CAAOC,IAAI,CAACH,YAAYI,MAAM,CAAC,CAACC,aAAAA,GAC1DC,YAAkBC,CAAAA,oBAAoB,CAACP,UAAU,CAACK,aAAc,CAAA,CAAA,CAAA;AAGlE,IAAA,OAAOG,KAAKP,mBAAqBF,EAAAA,IAAAA,CAAAA;AACnC,CAAA;AAGF;AACMU,MAAAA,gBAAAA,GAAmB,OACvBC,GACAX,EAAAA,IAAAA,GAAAA;IAEA,MAAM,EAAEC,aAAa,EAAE,EAAE,GAAGW,MAAAA,CAAOC,QAAQ,CAACF,GAAAA,CAAAA;AAE5C,IAAA,MAAMG,gBAA+B,EAAC;IAEtC,MAAMC,cAAAA,GAAiBZ,MAAOC,CAAAA,IAAI,CAACH,UAAAA,CAAAA;IAEnC,KAAK,MAAMK,iBAAiBS,cAAgB,CAAA;QAC1C,MAAMC,SAAAA,GAAYf,UAAU,CAACK,aAAc,CAAA;QAE3C,IAAI,CAACW,IAAIX,aAAeN,EAAAA,IAAAA,CAAAA,IAAS,CAACO,YAAkBC,CAAAA,oBAAoB,CAACQ,SAAY,CAAA,EAAA;AACnF,YAAA;AACF;QAEA,IAAIA,SAAAA,CAAUE,IAAI,KAAK,WAAa,EAAA;AAClC,YAAA,MAAM,EAAEC,SAAWC,EAAAA,YAAY,EAAEC,UAAa,GAAA,KAAK,EAAE,GAAGL,SAAAA;YAExD,MAAMM,cAAAA,GAAiBtB,IAAI,CAACM,aAA6B,CAAA;AAEzD,YAAA,IAAIgB,mBAAmB,IAAM,EAAA;AAC3B,gBAAA;AACF;AAEA,YAAA,IAAID,eAAe,IAAM,EAAA;AACvB,gBAAA,IAAI,CAACE,KAAAA,CAAMC,OAAO,CAACF,cAAiB,CAAA,EAAA;AAClC,oBAAA,MAAM,IAAIG,KAAM,CAAA,kDAAA,CAAA;AAClB;gBAEA,MAAMC,UAAAA,GAAuC,MAAMC,KAAMC,CAAAA,GAAG,CAACN,cAAgB,EAAA,CAACO,KAC5EC,GAAAA,eAAAA,CAAgBV,YAAcS,EAAAA,KAAAA,CAAAA,CAAAA;gBAGhCf,aAAa,CAACR,cAAc,GAAGoB,UAAAA,CAAWE,GAAG,CAAC,CAAC,EAAEG,EAAE,EAAE,GAAA;oBACnD,OAAO;AACLA,wBAAAA,EAAAA;wBACAC,OAAS,EAAA;4BACPC,KAAO3B,EAAAA,aAAAA;4BACP4B,cAAgBd,EAAAA;AAClB;AACF,qBAAA;AACF,iBAAA,CAAA;aACK,MAAA;gBACL,MAAMD,SAAAA,GAAY,MAAMW,eAAAA,CACtBV,YACAE,EAAAA,cAAAA,CAAAA;gBAGFR,aAAa,CAACR,cAAc,GAAG;AAC7ByB,oBAAAA,EAAAA,EAAIZ,UAAUY,EAAE;oBAChBC,OAAS,EAAA;wBACPC,KAAO3B,EAAAA,aAAAA;wBACP4B,cAAgBd,EAAAA;AAClB;AACF,iBAAA;AACF;AAEA,YAAA;AACF;QAEA,IAAIJ,SAAAA,CAAUE,IAAI,KAAK,aAAe,EAAA;YACpC,MAAMiB,iBAAAA,GAAoBnC,IAAI,CAC5BM,aACD,CAAA;AAED,YAAA,IAAI,CAACiB,KAAAA,CAAMC,OAAO,CAACW,iBAAoB,CAAA,EAAA;AACrC,gBAAA,MAAM,IAAIV,KAAM,CAAA,kDAAA,CAAA;AAClB;AAEA,YAAA,MAAMW,8BAA8B,OAClCP,KAAAA,GAAAA;gBAEA,MAAM,EAAEE,EAAE,EAAE,GAAG,MAAMD,eAAgBD,CAAAA,KAAAA,CAAMQ,WAAW,EAAER,KAAAA,CAAAA;gBACxD,OAAO;AACLE,oBAAAA,EAAAA;AACAM,oBAAAA,WAAAA,EAAaR,MAAMQ,WAAW;oBAC9BL,OAAS,EAAA;wBACPC,KAAO3B,EAAAA;AACT;AACF,iBAAA;AACF,aAAA;;AAGAQ,YAAAA,aAAa,CAACR,aAAc,CAAA,GAAG,MAAMqB,KAAMC,CAAAA,GAAG,CAC5CO,iBACAC,EAAAA,2BAAAA,CAAAA;AAGF,YAAA;AACF;AACF;IAEA,OAAOtB,aAAAA;AACT;AAEMwB,MAAAA,aAAAA,GAAgB,OACpB3B,GACA4B,EAAAA,MAAAA,GAAAA;AAEA,IAAA,MAAMrC,sBAAsBK,YAAkBiC,CAAAA,sBAAsB,CAAC5B,MAAAA,CAAOC,QAAQ,CAACF,GAAAA,CAAAA,CAAAA;IAErF,IAAI8B,CAAAA,CAAEC,OAAO,CAACxC,mBAAsB,CAAA,EAAA;AAClC,QAAA,OAAO,EAAC;AACV;IAEA,OAAOU,MAAAA,CAAO+B,EAAE,CAACC,KAAK,CAACjC,GAAKkC,CAAAA,CAAAA,IAAI,CAACN,MAAQrC,EAAAA,mBAAAA,CAAAA;AAC3C;AAEA;;;AAGA,GACM4C,MAAAA,gBAAAA,GAAmB,OACvBnC,GAAAA,EACAoC,cACA/C,EAAAA,IAAAA,GAAAA;IAEA,MAAM,EAAEC,aAAa,EAAE,EAAE,GAAGW,MAAAA,CAAOC,QAAQ,CAACF,GAAAA,CAAAA;AAE5C,IAAA,MAAMG,gBAA+B,EAAC;AAEtC,IAAA,KAAK,MAAMR,aAAAA,IAAiBH,MAAOC,CAAAA,IAAI,CAACH,UAAa,CAAA,CAAA;QACnD,MAAMe,SAAAA,GAAYf,UAAU,CAACK,aAAc,CAAA;QAE3C,IAAI,CAACW,GAAIX,CAAAA,aAAAA,EAAeN,IAAO,CAAA,EAAA;AAC7B,YAAA;AACF;QAEA,IAAIgB,SAAAA,CAAUE,IAAI,KAAK,WAAa,EAAA;AAClC,YAAA,MAAM,EAAEC,SAAWC,EAAAA,YAAY,EAAEC,UAAa,GAAA,KAAK,EAAE,GAAGL,SAAAA;YAExD,MAAMM,cAAAA,GAAiBtB,IAAI,CAACM,aAA6B,CAAA;AACzD,YAAA,MAAM0C,mBAAoBrC,CAAAA,GAAAA,EAAKS,YAAc2B,EAAAA,cAAAA,EAAgBzC,aAAegB,EAAAA,cAAAA,CAAAA;AAE5E,YAAA,IAAID,eAAe,IAAM,EAAA;AACvB,gBAAA,IAAI,CAACE,KAAAA,CAAMC,OAAO,CAACF,cAAiB,CAAA,EAAA;AAClC,oBAAA,MAAM,IAAIG,KAAM,CAAA,kDAAA,CAAA;AAClB;;gBAGA,MAAMC,UAAAA,GAAuC,MAAMC,KAAMC,CAAAA,GAAG,CAACN,cAAgB,EAAA,CAACO,KAC5EoB,GAAAA,uBAAAA,CAAwB7B,YAAcS,EAAAA,KAAAA,CAAAA,CAAAA;AAGxCf,gBAAAA,aAAa,CAACR,aAAc,CAAA,GAAGoB,UAAWrB,CAAAA,MAAM,CAACoC,CAAES,CAAAA,MAAM,CAACT,CAAAA,CAAEU,KAAK,CAAGvB,CAAAA,CAAAA,GAAG,CAAC,CAAC,EAAEG,EAAE,EAAE,GAAA;oBAC7E,OAAO;AACLA,wBAAAA,EAAAA;wBACAC,OAAS,EAAA;4BACPC,KAAO3B,EAAAA,aAAAA;4BACP4B,cAAgBd,EAAAA;AAClB;AACF,qBAAA;AACF,iBAAA,CAAA;aACK,MAAA;gBACL,MAAMD,SAAAA,GAAY,MAAM8B,uBAAAA,CAAwB7B,YAAcE,EAAAA,cAAAA,CAAAA;gBAC9DR,aAAa,CAACR,aAAc,CAAA,GAAGa,SAAa,IAAA;AAC1CY,oBAAAA,EAAAA,EAAIZ,UAAUY,EAAE;oBAChBC,OAAS,EAAA;wBACPC,KAAO3B,EAAAA,aAAAA;wBACP4B,cAAgBd,EAAAA;AAClB;AACF,iBAAA;AACF;AACF,SAAA,MAAO,IAAIJ,SAAAA,CAAUE,IAAI,KAAK,aAAe,EAAA;YAC3C,MAAMiB,iBAAAA,GAAoBnC,IAAI,CAACM,aAA6B,CAAA;YAE5D,MAAM8C,qBAAAA,CAAsBzC,GAAKoC,EAAAA,cAAAA,EAAgBzC,aAAe6B,EAAAA,iBAAAA,CAAAA;AAEhE,YAAA,IAAI,CAACZ,KAAAA,CAAMC,OAAO,CAACW,iBAAoB,CAAA,EAAA;AACrC,gBAAA,MAAM,IAAIV,KAAM,CAAA,kDAAA,CAAA;AAClB;;YAGAX,aAAa,CAACR,cAAc,GAAG,MAAMqB,MAAMC,GAAG,CAACO,mBAAmB,OAAON,KAAAA,GAAAA;gBACvE,MAAM,EAAEE,EAAE,EAAE,GAAG,MAAMkB,uBAAwBpB,CAAAA,KAAAA,CAAMQ,WAAW,EAAER,KAAAA,CAAAA;gBAEhE,OAAO;AACLE,oBAAAA,EAAAA;AACAM,oBAAAA,WAAAA,EAAaR,MAAMQ,WAAW;oBAC9BL,OAAS,EAAA;wBACPC,KAAO3B,EAAAA;AACT;AACF,iBAAA;AACF,aAAA,CAAA;AACF;AACF;IAEA,OAAOQ,aAAAA;AACT;AAEA,MAAMuC,iBAAoB,GAAA,CAAC,EACzBtB,EAAE,EAGH,GAAA;IACC,IAAI,OAAOA,OAAO,QAAU,EAAA;QAC1B,OAAOA,EAAAA;AACT;IAEA,OAAO,CAAC,EAAEA,EAAAA,CAAG,CAAC;AAChB,CAAA;AAEA,MAAMiB,mBAAsB,GAAA,OAC1BrC,GACAS,EAAAA,YAAAA,EACA2B,gBACAzC,aACAgB,EAAAA,cAAAA,GAAAA;IAEA,MAAMgC,aAAAA,GAAiB,MAAM1C,MAAAA,CAAO+B,EAAE,CACnCC,KAAK,CAACjC,GAAAA,CAAAA,CACNkC,IAAI,CAACE,cAAgBzC,EAAAA,aAAAA,CAAAA;IACxB,MAAMiD,SAAAA,GAAYd,CAAEe,CAAAA,SAAS,CAAClC,cAAAA,CAAAA,CAAgBjB,MAAM,CAACY,GAAAA,CAAI,IAAOW,CAAAA,CAAAA,CAAAA,GAAG,CAACyB,iBAAAA,CAAAA;IACpE,MAAMI,MAAAA,GAAShB,CAAEe,CAAAA,SAAS,CAACF,aAAAA,CAAAA,CAAejD,MAAM,CAACY,GAAAA,CAAI,IAAOW,CAAAA,CAAAA,CAAAA,GAAG,CAACyB,iBAAAA,CAAAA;IAEhEE,SAAUG,CAAAA,OAAO,CAAC,CAAC3B,EAAAA,GAAAA;AACjB,QAAA,IAAI,CAAC0B,MAAAA,CAAOE,QAAQ,CAAC5B,EAAK,CAAA,EAAA;YACxB,MAAM,IAAI6B,OAAOC,gBAAgB,CAC/B,CAAC,mCAAmC,EAAEvD,aAAc,CAAA,8BAA8B,CAAC,CAAA;AAEvF;AACF,KAAA,CAAA;AAEA,IAAA,MAAMwD,WAAcrB,GAAAA,CAAAA,CAAEsB,UAAU,CAACN,MAAQF,EAAAA,SAAAA,CAAAA;IAEzC,IAAIO,WAAAA,CAAYE,MAAM,GAAG,CAAG,EAAA;QAC1B,KAAK,MAAMC,cAAcH,WAAa,CAAA;AACpC,YAAA,MAAMI,gBAAgB9C,YAAc,EAAA;gBAAEW,EAAIkC,EAAAA;AAAW,aAAA,CAAA;AACvD;AACF;AACF,CAAA;AAEA,MAAMb,qBAAwB,GAAA,OAC5BzC,GACAoC,EAAAA,cAAAA,EACAzC,aACA6B,EAAAA,iBAAAA,GAAAA;IAEA,MAAMmB,aAAAA,GAAiB,MAAM1C,MAAAA,CAAO+B,EAAE,CACnCC,KAAK,CAACjC,GAAAA,CAAAA,CACNkC,IAAI,CAACE,cAAgBzC,EAAAA,aAAAA,CAAAA;AAExB,IAAA,MAAMiD,SAAYd,GAAAA,CAAAA,CAAEe,SAAS,CAACrB,iBAC3B9B,CAAAA,CAAAA,MAAM,CAACY,GAAAA,CAAI,IACXW,CAAAA,CAAAA,CAAAA,GAAG,CAAC,CAACuC,KAAO;AACXpC,YAAAA,EAAAA,EAAIsB,iBAAkBc,CAAAA,CAAAA,CAAAA;AACtB9B,YAAAA,WAAAA,EAAa8B,EAAE9B;SACjB,CAAA,CAAA;AAEF,IAAA,MAAMoB,MAAShB,GAAAA,CAAAA,CAAEe,SAAS,CAACF,aACxBjD,CAAAA,CAAAA,MAAM,CAACY,GAAAA,CAAI,IACXW,CAAAA,CAAAA,CAAAA,GAAG,CAAC,CAACuC,KAAO;AACXpC,YAAAA,EAAAA,EAAIsB,iBAAkBc,CAAAA,CAAAA,CAAAA;AACtB9B,YAAAA,WAAAA,EAAa8B,EAAE9B;SACjB,CAAA,CAAA;AAEFkB,IAAAA,SAAAA,CAAUG,OAAO,CAAC,CAAC,EAAE3B,EAAE,EAAEM,WAAW,EAAE,GAAA;AACpC,QAAA,IAAI,CAACoB,MAAAA,CAAOW,IAAI,CAAC,CAACC,EAAAA,GAAOA,EAAGtC,CAAAA,EAAE,KAAKA,EAAAA,IAAMsC,EAAGhC,CAAAA,WAAW,KAAKA,WAAc,CAAA,EAAA;YACxE,MAAMiC,GAAAA,GAAM,IAAI7C,KACd,CAAA,CAAC,mCAAmC,EAAEnB,aAAAA,CAAc,8BAA8B,CAAC,CAAA;YAGrFH,MAAOoE,CAAAA,MAAM,CAACD,GAAK,EAAA;gBAAEE,MAAQ,EAAA;AAAI,aAAA,CAAA;YACjC,MAAMF,GAAAA;AACR;AACF,KAAA,CAAA;IAIA,MAAMR,WAAAA,GAAcL,MAAOgB,CAAAA,MAAM,CAAC,CAACC,KAAK,EAAE3C,EAAE,EAAEM,WAAW,EAAE,GAAA;AACzD,QAAA,IAAI,CAACkB,SAAAA,CAAUa,IAAI,CAAC,CAACC,EAAAA,GAAOA,EAAGtC,CAAAA,EAAE,KAAKA,EAAAA,IAAMsC,EAAGhC,CAAAA,WAAW,KAAKA,WAAc,CAAA,EAAA;AAC3EqC,YAAAA,GAAAA,CAAIC,IAAI,CAAC;AAAE5C,gBAAAA,EAAAA;AAAIM,gBAAAA;AAAY,aAAA,CAAA;AAC7B;QAEA,OAAOqC,GAAAA;AACT,KAAA,EAAG,EAAE,CAAA;IAEL,IAAIZ,WAAAA,CAAYE,MAAM,GAAG,CAAG,EAAA;QAC1B,KAAK,MAAMC,cAAcH,WAAa,CAAA;AACpC,YAAA,MAAM,EAAE/B,EAAE,EAAEM,WAAW,EAAE,GAAG4B,UAAAA;AAC5B,YAAA,MAAMC,gBAAgB7B,WAAa,EAAA;AAAEN,gBAAAA;AAAG,aAAA,CAAA;AAC1C;AACF;AACF,CAAA;AAEM6C,MAAAA,gBAAAA,GAAmB,OACvBjE,GAAAA,EACAkE,cACA,EAAA,EAAEC,iBAAiB,IAAI,EAAE,GAAG,EAAE,GAAA;IAE9B,MAAM,EAAE7E,aAAa,EAAE,EAAE,GAAGW,MAAAA,CAAOC,QAAQ,CAACF,GAAAA,CAAAA;IAE5C,MAAMI,cAAAA,GAAiBZ,MAAOC,CAAAA,IAAI,CAACH,UAAAA,CAAAA;IAEnC,KAAK,MAAMK,iBAAiBS,cAAgB,CAAA;QAC1C,MAAMC,SAAAA,GAAYf,UAAU,CAACK,aAAc,CAAA;AAE3C,QAAA,IAAIU,UAAUE,IAAI,KAAK,eAAeF,SAAUE,CAAAA,IAAI,KAAK,aAAe,EAAA;YACtE,IAAIW,KAAAA;AAEJ,YAAA,IAAIiD,cAAgB,EAAA;gBAClBjD,KAAQ,GAAA,MAAMjB,OAAO+B,EAAE,CAACC,KAAK,CAACjC,GAAAA,CAAAA,CAAKkC,IAAI,CAACgC,cAAgBvE,EAAAA,aAAAA,CAAAA;aACnD,MAAA;gBACLuB,KAAQgD,GAAAA,cAAc,CAACvE,aAA+B,CAAA;AACxD;AAEA,YAAA,IAAI,CAACuB,KAAO,EAAA;AACV,gBAAA;AACF;YAEA,IAAIb,SAAAA,CAAUE,IAAI,KAAK,WAAa,EAAA;AAClC,gBAAA,MAAM,EAAEC,SAAAA,EAAWC,YAAY,EAAE,GAAGJ,SAAAA;gBACpC,MAAMW,KAAAA,CAAMC,GAAG,CAACa,CAAEe,CAAAA,SAAS,CAAC3B,KAAQ,CAAA,EAAA,CAACkD,QACnCb,GAAAA,eAAAA,CAAgB9C,YAAc2D,EAAAA,QAAAA,CAAAA,CAAAA;aAE3B,MAAA;AACL,gBAAA,MAAMpD,KAAMC,CAAAA,GAAG,CAACa,CAAAA,CAAEe,SAAS,CAAC3B,KAAQ,CAAA,EAAA,CAACkD,QACnCb,GAAAA,eAAAA,CAAgBa,QAAS1C,CAAAA,WAAW,EAAE0C,QAAAA,CAAAA,CAAAA;AAE1C;AAEA,YAAA;AACF;AACF;AACF;AAEA;;AAE2B;AAG3B,MAAMjD,eAAAA,GAAkB,OAAmCnB,GAAWX,EAAAA,IAAAA,GAAAA;IACpE,MAAMD,MAAAA,GAASa,MAAOC,CAAAA,QAAQ,CAACF,GAAAA,CAAAA;IAE/B,MAAMqE,aAAAA,GAAgB,MAAMtE,gBAAAA,CAAiBC,GAAKX,EAAAA,IAAAA,CAAAA;IAElD,MAAMiF,SAAAA,GAAYC;IAEhBzE,IAAK,CAAA,IAAA,CAAA,EACL0E,oBAAoBpF,MAAQiF,EAAAA,aAAAA,CAAAA,CAAAA;AAG9B,IAAA,OAAOpE,OAAO+B,EAAE,CAACC,KAAK,CAACjC,GAAAA,CAAAA,CAAKyE,MAAM,CAAC;AAAEpF,QAAAA,IAAAA,EAAMiF,SAAUjF,CAAAA,IAAAA;AAAM,KAAA,CAAA;AAC7D,CAAA;AAEA;AACA,MAAMqF,eAAAA,GAAkB,OACtB1E,GAAAA,EACA2E,iBACAtF,EAAAA,IAAAA,GAAAA;IAEA,MAAMD,MAAAA,GAASa,MAAOC,CAAAA,QAAQ,CAACF,GAAAA,CAAAA;AAE/B,IAAA,MAAMqE,aAAgB,GAAA,MAAMlC,gBAAiBnC,CAAAA,GAAAA,EAAK2E,iBAAmBtF,EAAAA,IAAAA,CAAAA;AAErE,IAAA,OAAOY,OAAO+B,EAAE,CAACC,KAAK,CAACjC,GAAAA,CAAAA,CAAK4E,MAAM,CAAC;QACjCC,KAAO,EAAA;AACLzD,YAAAA,EAAAA,EAAIuD,kBAAkBvD;AACxB,SAAA;QACA/B,IAAMmF,EAAAA,mBAAAA,CAAoBpF,QAAQiF,aAAehF,EAAAA,IAAAA;AACnD,KAAA,CAAA;AACF,CAAA;AAEA,MAAMiD,uBAAAA,GAA0B,CAC9B7B,YACAS,EAAAA,KAAAA,GAAAA;AAEA,IAAA,IAAIA,UAAU,IAAM,EAAA;QAClB,OAAO,IAAA;AACT;;AAGA,IAAA,IAAI,QAAQA,KAAS,IAAA,OAAOA,KAAME,CAAAA,EAAE,KAAK,WAAa,EAAA;;AAEpD,QAAA,OAAOsD,gBAAgBjE,YAAc,EAAA;AAAEW,YAAAA,EAAAA,EAAIF,MAAME;SAAMF,EAAAA,KAAAA,CAAAA;AACzD;;AAGA,IAAA,OAAOC,gBAAgBV,YAAcS,EAAAA,KAAAA,CAAAA;AACvC,CAAA;AAEMqC,MAAAA,eAAAA,GAAkB,OACtBvD,GACA8E,EAAAA,iBAAAA,GAAAA;AAEA,IAAA,MAAMb,iBAAiBjE,GAAK8E,EAAAA,iBAAAA,CAAAA;AAC5B,IAAA,MAAM7E,OAAO+B,EAAE,CAACC,KAAK,CAACjC,GAAAA,CAAAA,CAAK+E,MAAM,CAAC;QAAEF,KAAO,EAAA;AAAEzD,YAAAA,EAAAA,EAAI0D,kBAAkB1D;AAAG;AAAE,KAAA,CAAA;AAC1E;AAEA,MAAMoD,mBAAsBrF,GAAAA,KAAAA,CAC1B,CAACC,MAAAA,EAAuBiF,aAA8BhF,EAAAA,IAAAA,GAAAA;AACpD,IAAA,OAAOkF,IAAKrF,CAAAA,iBAAAA,CAAkBE,MAASwE,CAAAA,EAAAA,MAAAA,CAAOS,aAAgBhF,CAAAA,CAAAA,CAAAA,IAAAA,CAAAA;AAChE,CAAA;;;;"}
|
|
1
|
+
{"version":3,"file":"components.mjs","sources":["../../../src/services/document-service/components.ts"],"sourcesContent":["import _ from 'lodash';\nimport { has, omit, pipe, assign, curry } from 'lodash/fp';\nimport type { Utils, UID, Schema, Data, Modules } from '@strapi/types';\nimport { contentTypes as contentTypesUtils, async, errors } from '@strapi/utils';\nimport {\n getComponentJoinTableName,\n getComponentJoinColumnEntityName,\n getComponentJoinColumnInverseName,\n getComponentTypeColumn,\n} from '../../utils/transform-content-types-to-models';\n\n// type aliases for readability\ntype Input<T extends UID.Schema> = Modules.Documents.Params.Data.Input<T>;\n\ntype LoadedComponents<TUID extends UID.Schema> = Data.Entity<\n TUID,\n Schema.AttributeNamesByType<TUID, 'component' | 'dynamiczone'>\n>;\n\ntype SingleComponentValue = Schema.Attribute.ComponentValue<UID.Component, false>;\ntype RepeatableComponentValue = Schema.Attribute.ComponentValue<UID.Component, true>;\n\ntype ComponentValue = SingleComponentValue | RepeatableComponentValue;\n\ntype DynamicZoneValue = Schema.Attribute.DynamicZoneValue<UID.Component[]>;\n\ntype ComponentBody = {\n [key: string]: ComponentValue | DynamicZoneValue;\n};\n\nconst omitComponentData = curry(\n (schema: Schema.Schema, data: Input<UID.Schema>): Partial<Input<UID.Schema>> => {\n const { attributes } = schema;\n const componentAttributes = Object.keys(attributes).filter((attributeName) =>\n contentTypesUtils.isComponentAttribute(attributes[attributeName])\n );\n\n return omit(componentAttributes, data);\n }\n);\n\n// NOTE: we could generalize the logic to allow CRUD of relation directly in the DB layer\nconst createComponents = async <TUID extends UID.Schema, TData extends Input<TUID>>(\n uid: TUID,\n data: TData\n) => {\n const { attributes = {} } = strapi.getModel(uid);\n\n const componentBody: ComponentBody = {};\n\n const attributeNames = Object.keys(attributes);\n\n for (const attributeName of attributeNames) {\n const attribute = attributes[attributeName];\n\n if (!has(attributeName, data) || !contentTypesUtils.isComponentAttribute(attribute)) {\n continue;\n }\n\n if (attribute.type === 'component') {\n const { component: componentUID, repeatable = false } = attribute;\n\n const componentValue = data[attributeName as keyof TData];\n\n if (componentValue === null) {\n continue;\n }\n\n if (repeatable === true) {\n if (!Array.isArray(componentValue)) {\n throw new Error('Expected an array to create repeatable component');\n }\n\n const components: RepeatableComponentValue = await async.map(componentValue, (value: any) =>\n createComponent(componentUID, value)\n );\n\n componentBody[attributeName] = components.map(({ id }) => {\n return {\n id,\n __pivot: {\n field: attributeName,\n component_type: componentUID,\n },\n };\n });\n } else {\n const component = await createComponent(\n componentUID,\n componentValue as Input<UID.Component>\n );\n\n componentBody[attributeName] = {\n id: component.id,\n __pivot: {\n field: attributeName,\n component_type: componentUID,\n },\n };\n }\n\n continue;\n }\n\n if (attribute.type === 'dynamiczone') {\n const dynamiczoneValues = data[\n attributeName as keyof TData\n ] as Modules.EntityService.Params.Attribute.GetValue<Schema.Attribute.DynamicZone>;\n\n if (!Array.isArray(dynamiczoneValues)) {\n throw new Error('Expected an array to create repeatable component');\n }\n\n const createDynamicZoneComponents = async (\n value: Utils.Array.Values<typeof dynamiczoneValues>\n ) => {\n const { id } = await createComponent(value.__component, value);\n return {\n id,\n __component: value.__component,\n __pivot: {\n field: attributeName,\n },\n };\n };\n\n // MySQL/MariaDB can cause deadlocks here if concurrency higher than 1\n componentBody[attributeName] = await async.map(\n dynamiczoneValues,\n createDynamicZoneComponents\n );\n\n continue;\n }\n }\n\n return componentBody;\n};\n\nconst getComponents = async <TUID extends UID.Schema>(\n uid: TUID,\n entity: { id: Modules.EntityService.Params.Attribute.ID }\n): Promise<LoadedComponents<TUID>> => {\n const componentAttributes = contentTypesUtils.getComponentAttributes(strapi.getModel(uid));\n\n if (_.isEmpty(componentAttributes)) {\n return {} as LoadedComponents<TUID>;\n }\n\n return strapi.db.query(uid).load(entity, componentAttributes) as Promise<LoadedComponents<TUID>>;\n};\n\n/*\n delete old components\n create or update\n*/\nconst updateComponents = async <TUID extends UID.Schema, TData extends Partial<Input<TUID>>>(\n uid: TUID,\n entityToUpdate: { id: Modules.EntityService.Params.Attribute.ID },\n data: TData\n) => {\n const { attributes = {} } = strapi.getModel(uid);\n\n const componentBody: ComponentBody = {};\n\n for (const attributeName of Object.keys(attributes)) {\n const attribute = attributes[attributeName];\n\n if (!has(attributeName, data)) {\n continue;\n }\n\n if (attribute.type === 'component') {\n const { component: componentUID, repeatable = false } = attribute;\n\n const componentValue = data[attributeName as keyof TData] as ComponentValue;\n await deleteOldComponents(uid, componentUID, entityToUpdate, attributeName, componentValue);\n\n if (repeatable === true) {\n if (!Array.isArray(componentValue)) {\n throw new Error('Expected an array to create repeatable component');\n }\n\n // MySQL/MariaDB can cause deadlocks here if concurrency higher than 1\n const components: RepeatableComponentValue = await async.map(componentValue, (value: any) =>\n updateOrCreateComponent(componentUID, value)\n );\n\n componentBody[attributeName] = components.filter(_.negate(_.isNil)).map(({ id }) => {\n return {\n id,\n __pivot: {\n field: attributeName,\n component_type: componentUID,\n },\n };\n });\n } else {\n const component = await updateOrCreateComponent(componentUID, componentValue);\n componentBody[attributeName] = component && {\n id: component.id,\n __pivot: {\n field: attributeName,\n component_type: componentUID,\n },\n };\n }\n } else if (attribute.type === 'dynamiczone') {\n const dynamiczoneValues = data[attributeName as keyof TData] as DynamicZoneValue;\n\n await deleteOldDZComponents(uid, entityToUpdate, attributeName, dynamiczoneValues);\n\n if (!Array.isArray(dynamiczoneValues)) {\n throw new Error('Expected an array to create repeatable component');\n }\n\n // MySQL/MariaDB can cause deadlocks here if concurrency higher than 1\n componentBody[attributeName] = await async.map(dynamiczoneValues, async (value: any) => {\n const { id } = await updateOrCreateComponent(value.__component, value);\n\n return {\n id,\n __component: value.__component,\n __pivot: {\n field: attributeName,\n },\n };\n });\n }\n }\n\n return componentBody;\n};\n\nconst pickStringifiedId = ({\n id,\n}: {\n id: Modules.EntityService.Params.Attribute.ID;\n}): Modules.EntityService.Params.Attribute.ID & string => {\n if (typeof id === 'string') {\n return id;\n }\n\n return `${id}`;\n};\n\nconst deleteOldComponents = async <TUID extends UID.Schema>(\n uid: TUID,\n componentUID: UID.Component,\n entityToUpdate: { id: Modules.EntityService.Params.Attribute.ID },\n attributeName: string,\n componentValue: ComponentValue\n) => {\n const previousValue = (await strapi.db\n .query(uid)\n .load(entityToUpdate, attributeName)) as ComponentValue;\n const idsToKeep = _.castArray(componentValue).filter(has('id')).map(pickStringifiedId);\n const allIds = _.castArray(previousValue).filter(has('id')).map(pickStringifiedId);\n\n idsToKeep.forEach((id) => {\n if (!allIds.includes(id)) {\n throw new errors.ApplicationError(\n `Some of the provided components in ${attributeName} are not related to the entity`\n );\n }\n });\n\n const idsToDelete = _.difference(allIds, idsToKeep);\n\n if (idsToDelete.length > 0) {\n for (const idToDelete of idsToDelete) {\n await deleteComponent(componentUID, { id: idToDelete });\n }\n }\n};\n\nconst deleteOldDZComponents = async <TUID extends UID.Schema>(\n uid: TUID,\n entityToUpdate: { id: Modules.EntityService.Params.Attribute.ID },\n attributeName: string,\n dynamiczoneValues: DynamicZoneValue\n) => {\n const previousValue = (await strapi.db\n .query(uid)\n .load(entityToUpdate, attributeName)) as DynamicZoneValue;\n\n const idsToKeep = _.castArray(dynamiczoneValues)\n .filter(has('id'))\n .map((v) => ({\n id: pickStringifiedId(v),\n __component: v.__component,\n }));\n\n const allIds = _.castArray(previousValue)\n .filter(has('id'))\n .map((v) => ({\n id: pickStringifiedId(v),\n __component: v.__component,\n }));\n\n idsToKeep.forEach(({ id, __component }) => {\n if (!allIds.find((el) => el.id === id && el.__component === __component)) {\n const err = new Error(\n `Some of the provided components in ${attributeName} are not related to the entity`\n );\n\n Object.assign(err, { status: 400 });\n throw err;\n }\n });\n\n type IdsToDelete = DynamicZoneValue;\n\n const idsToDelete = allIds.reduce((acc, { id, __component }) => {\n if (!idsToKeep.find((el) => el.id === id && el.__component === __component)) {\n acc.push({ id, __component });\n }\n\n return acc;\n }, [] as IdsToDelete);\n\n if (idsToDelete.length > 0) {\n for (const idToDelete of idsToDelete) {\n const { id, __component } = idToDelete;\n await deleteComponent(__component, { id });\n }\n }\n};\n\nconst deleteComponents = async <TUID extends UID.Schema, TEntity extends Data.Entity<TUID>>(\n uid: TUID,\n entityToDelete: TEntity,\n { loadComponents = true } = {}\n) => {\n const { attributes = {} } = strapi.getModel(uid);\n\n const attributeNames = Object.keys(attributes);\n\n for (const attributeName of attributeNames) {\n const attribute = attributes[attributeName];\n\n if (attribute.type === 'component' || attribute.type === 'dynamiczone') {\n let value;\n\n if (loadComponents) {\n value = await strapi.db.query(uid).load(entityToDelete, attributeName);\n } else {\n value = entityToDelete[attributeName as keyof TEntity];\n }\n\n if (!value) {\n continue;\n }\n\n if (attribute.type === 'component') {\n const { component: componentUID } = attribute;\n await async.map(_.castArray(value), (subValue: any) =>\n deleteComponent(componentUID, subValue)\n );\n } else {\n await async.map(_.castArray(value), (subValue: any) =>\n deleteComponent(subValue.__component, subValue)\n );\n }\n\n continue;\n }\n }\n};\n\n/** *************************\n Component queries\n************************** */\n\n// components can have nested compos so this must be recursive\nconst createComponent = async <TUID extends UID.Component>(uid: TUID, data: Input<TUID>) => {\n const schema = strapi.getModel(uid);\n\n const componentData = await createComponents(uid, data);\n\n const transform = pipe(\n // Make sure we don't save the component with a pre-defined ID\n omit('id'),\n assignComponentData(schema, componentData)\n );\n\n return strapi.db.query(uid).create({ data: transform(data) });\n};\n\n// components can have nested compos so this must be recursive\nconst updateComponent = async <TUID extends UID.Component>(\n uid: TUID,\n componentToUpdate: { id: Modules.EntityService.Params.Attribute.ID },\n data: Input<TUID>\n) => {\n const schema = strapi.getModel(uid);\n\n const componentData = await updateComponents(uid, componentToUpdate, data);\n\n return strapi.db.query(uid).update({\n where: {\n id: componentToUpdate.id,\n },\n data: assignComponentData(schema, componentData, data),\n });\n};\n\nconst updateOrCreateComponent = <TUID extends UID.Component>(\n componentUID: TUID,\n value: Input<TUID>\n) => {\n if (value === null) {\n return null;\n }\n\n // update\n if ('id' in value && typeof value.id !== 'undefined') {\n // TODO: verify the compo is associated with the entity\n return updateComponent(componentUID, { id: value.id }, value);\n }\n\n // create\n return createComponent(componentUID, value);\n};\n\nconst deleteComponent = async <TUID extends UID.Component>(\n uid: TUID,\n componentToDelete: Data.Component<TUID>\n) => {\n await deleteComponents(uid, componentToDelete);\n await strapi.db.query(uid).delete({ where: { id: componentToDelete.id } });\n};\n\nconst assignComponentData = curry(\n (schema: Schema.Schema, componentData: ComponentBody, data: Input<UID.Schema>) => {\n return pipe(omitComponentData(schema), assign(componentData))(data);\n }\n);\n\n/** *************************\n Component relation handling for document operations\n************************** */\n\n/**\n * Find the parent entry of a component instance.\n *\n * Given a component model, a specific component instance id, and the list of\n * possible parent content types (those that can embed this component),\n * this function checks each parent's *_cmps join table to see if the component\n * instance is linked to a parent entity.\n *\n * - Returns the parent uid, parent table name, and parent id if found.\n * - Returns null if no parent relationship exists.\n */\nconst findComponentParent = async (\n componentSchema: Schema.Component,\n componentId: number | string,\n parentSchemasForComponent: (Schema.ContentType | Schema.Component)[],\n opts?: { trx?: any }\n): Promise<{ uid: string; table: string; parentId: number | string } | null> => {\n if (!componentSchema?.uid) return null;\n\n const schemaBuilder = strapi.db.getSchemaConnection(opts?.trx);\n const withTrx = (qb: any) => (opts?.trx ? qb.transacting(opts.trx) : qb);\n\n for (const parent of parentSchemasForComponent) {\n if (!parent.collectionName) continue;\n\n // Use the exact same functions that create the tables\n const identifiers = strapi.db.metadata.identifiers;\n const joinTableName = getComponentJoinTableName(parent.collectionName, identifiers);\n\n try {\n const tableExists = await schemaBuilder.hasTable(joinTableName);\n if (!tableExists) continue;\n\n // Use the exact same functions that create the columns\n const entityIdColumn = getComponentJoinColumnEntityName(identifiers);\n const componentIdColumn = getComponentJoinColumnInverseName(identifiers);\n const componentTypeColumn = getComponentTypeColumn(identifiers);\n\n const parentRow = await withTrx(strapi.db.getConnection(joinTableName))\n .where({\n [componentIdColumn]: componentId,\n [componentTypeColumn]: componentSchema.uid,\n })\n .first(entityIdColumn);\n\n if (parentRow) {\n return {\n uid: parent.uid,\n table: parent.collectionName,\n parentId: parentRow[entityIdColumn],\n };\n }\n } catch {\n continue;\n }\n }\n\n return null;\n};\n\n/**\n * Finds content types that contain the given component and have draft & publish enabled.\n */\nconst getParentSchemasForComponent = (\n componentSchema: Schema.Component\n): Array<Schema.ContentType | Schema.Component> => {\n // Find direct parents in contentTypes and components\n return [...Object.values(strapi.contentTypes), ...Object.values(strapi.components)].filter(\n (schema: any) => {\n if (!schema?.attributes) return false;\n return Object.values(schema.attributes).some((attr: any) => {\n return (\n (attr.type === 'component' && attr.component === componentSchema.uid) ||\n (attr.type === 'dynamiczone' && attr.components?.includes(componentSchema.uid))\n );\n });\n }\n );\n};\n\n/**\n * Determines if a component relation should be propagated to a new document version\n * when a document with draft and publish is updated.\n */\nconst shouldPropagateComponentRelationToNewVersion = async (\n componentRelation: Record<string, any>,\n componentSchema: Schema.Component,\n parentSchemasForComponent: (Schema.ContentType | Schema.Component)[],\n trx: any\n): Promise<boolean> => {\n // Get the component ID column name using the actual component model name\n const componentIdColumn = strapi.db.metadata.identifiers.getJoinColumnAttributeIdName(\n _.snakeCase(componentSchema.modelName)\n );\n\n const componentId = componentRelation[componentIdColumn] ?? componentRelation.parentId;\n\n const parent = await findComponentParent(\n componentSchema,\n componentId,\n parentSchemasForComponent,\n { trx }\n );\n\n // Keep relation if component has no parent entry\n if (!parent?.uid) {\n return true;\n }\n\n if (strapi.components[parent.uid as UID.Component]) {\n // If the parent is a component, we need to check its parents recursively\n const parentComponentSchema = strapi.components[parent.uid as UID.Component];\n const grandParentSchemas = getParentSchemasForComponent(parentComponentSchema);\n return shouldPropagateComponentRelationToNewVersion(\n parent,\n parentComponentSchema,\n grandParentSchemas,\n trx\n );\n }\n\n const parentContentType = strapi.contentTypes[parent.uid as UID.ContentType];\n\n // Keep relation if parent doesn't have draft & publish enabled\n if (!parentContentType?.options?.draftAndPublish) {\n return true;\n }\n\n // Discard relation if parent has draft & publish enabled\n return false;\n};\n\n/**\n * Creates a filter function for component relations that can be passed to the generic\n * unidirectional relations utility\n */\nconst createComponentRelationFilter = () => {\n return async (\n relation: Record<string, any>,\n model: Schema.Component | Schema.ContentType,\n trx: any\n ): Promise<boolean> => {\n // Only apply component-specific filtering for components\n if (model.modelType !== 'component') {\n return true;\n }\n\n const componentSchema = model as Schema.Component;\n const parentSchemas = getParentSchemasForComponent(componentSchema);\n\n // Exit if no draft & publish parent types exist\n if (parentSchemas.length === 0) {\n return true;\n }\n\n return shouldPropagateComponentRelationToNewVersion(\n relation,\n componentSchema,\n parentSchemas,\n trx\n );\n };\n};\n\nexport {\n omitComponentData,\n assignComponentData,\n getComponents,\n createComponents,\n updateComponents,\n deleteComponents,\n deleteComponent,\n createComponentRelationFilter,\n findComponentParent,\n getParentSchemasForComponent,\n};\n"],"names":["omitComponentData","curry","schema","data","attributes","componentAttributes","Object","keys","filter","attributeName","contentTypesUtils","isComponentAttribute","omit","createComponents","uid","strapi","getModel","componentBody","attributeNames","attribute","has","type","component","componentUID","repeatable","componentValue","Array","isArray","Error","components","async","map","value","createComponent","id","__pivot","field","component_type","dynamiczoneValues","createDynamicZoneComponents","__component","getComponents","entity","getComponentAttributes","_","isEmpty","db","query","load","updateComponents","entityToUpdate","deleteOldComponents","updateOrCreateComponent","negate","isNil","deleteOldDZComponents","pickStringifiedId","previousValue","idsToKeep","castArray","allIds","forEach","includes","errors","ApplicationError","idsToDelete","difference","length","idToDelete","deleteComponent","v","find","el","err","assign","status","reduce","acc","push","deleteComponents","entityToDelete","loadComponents","subValue","componentData","transform","pipe","assignComponentData","create","updateComponent","componentToUpdate","update","where","componentToDelete","delete","findComponentParent","componentSchema","componentId","parentSchemasForComponent","opts","schemaBuilder","getSchemaConnection","trx","withTrx","qb","transacting","parent","collectionName","identifiers","metadata","joinTableName","getComponentJoinTableName","tableExists","hasTable","entityIdColumn","getComponentJoinColumnEntityName","componentIdColumn","getComponentJoinColumnInverseName","componentTypeColumn","getComponentTypeColumn","parentRow","getConnection","first","table","parentId","getParentSchemasForComponent","values","contentTypes","some","attr","shouldPropagateComponentRelationToNewVersion","componentRelation","getJoinColumnAttributeIdName","snakeCase","modelName","parentComponentSchema","grandParentSchemas","parentContentType","options","draftAndPublish","createComponentRelationFilter","relation","model","modelType","parentSchemas"],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { Modules, Schema } from '@strapi/types';
|
|
2
|
+
type EntriesUpdate = (entryToUpdate: any, param?: any) => Promise<any>;
|
|
3
|
+
type ParamsTransform = (params: Modules.Documents.Params.All) => Modules.Documents.Params.All;
|
|
4
|
+
declare const addFirstPublishedAtToDraft: (draft: any, update: EntriesUpdate, contentType: Schema.ContentType) => Promise<any>;
|
|
5
|
+
declare const filterDataFirstPublishedAt: ParamsTransform;
|
|
6
|
+
export { addFirstPublishedAtToDraft, filterDataFirstPublishedAt };
|
|
7
|
+
//# sourceMappingURL=first-published-at.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"first-published-at.d.ts","sourceRoot":"","sources":["../../../src/services/document-service/first-published-at.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAErD,KAAK,aAAa,GAAG,CAAC,aAAa,EAAE,GAAG,EAAE,KAAK,CAAC,EAAE,GAAG,KAAK,OAAO,CAAC,GAAG,CAAC,CAAC;AACvE,KAAK,eAAe,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,KAAK,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC;AAE9F,QAAA,MAAM,0BAA0B,UACvB,GAAG,UACF,aAAa,eACR,OAAO,WAAW,iBAehC,CAAC;AAEF,QAAA,MAAM,0BAA0B,EAAE,eAMjC,CAAC;AAEF,OAAO,EAAE,0BAA0B,EAAE,0BAA0B,EAAE,CAAC"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var strapiUtils = require('@strapi/utils');
|
|
4
|
+
var fp = require('lodash/fp');
|
|
5
|
+
|
|
6
|
+
const addFirstPublishedAtToDraft = async (draft, update, contentType)=>{
|
|
7
|
+
if (!strapiUtils.contentTypes.hasFirstPublishedAtField(contentType)) {
|
|
8
|
+
return draft;
|
|
9
|
+
}
|
|
10
|
+
if (draft.firstPublishedAt) {
|
|
11
|
+
return draft;
|
|
12
|
+
}
|
|
13
|
+
return update(draft, {
|
|
14
|
+
data: {
|
|
15
|
+
firstPublishedAt: Date.now()
|
|
16
|
+
}
|
|
17
|
+
});
|
|
18
|
+
};
|
|
19
|
+
const filterDataFirstPublishedAt = (params)=>{
|
|
20
|
+
if (params?.data?.firstPublishedAt) {
|
|
21
|
+
return fp.assoc([
|
|
22
|
+
'data',
|
|
23
|
+
'firstPublishedAt'
|
|
24
|
+
], null, params);
|
|
25
|
+
}
|
|
26
|
+
return params;
|
|
27
|
+
};
|
|
28
|
+
|
|
29
|
+
exports.addFirstPublishedAtToDraft = addFirstPublishedAtToDraft;
|
|
30
|
+
exports.filterDataFirstPublishedAt = filterDataFirstPublishedAt;
|
|
31
|
+
//# sourceMappingURL=first-published-at.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"first-published-at.js","sources":["../../../src/services/document-service/first-published-at.ts"],"sourcesContent":["import { contentTypes } from '@strapi/utils';\nimport { assoc } from 'lodash/fp';\nimport type { Modules, Schema } from '@strapi/types';\n\ntype EntriesUpdate = (entryToUpdate: any, param?: any) => Promise<any>;\ntype ParamsTransform = (params: Modules.Documents.Params.All) => Modules.Documents.Params.All;\n\nconst addFirstPublishedAtToDraft = async (\n draft: any,\n update: EntriesUpdate,\n contentType: Schema.ContentType\n) => {\n if (!contentTypes.hasFirstPublishedAtField(contentType)) {\n return draft;\n }\n\n if (draft.firstPublishedAt) {\n return draft;\n }\n\n return update(draft, {\n data: {\n firstPublishedAt: Date.now(),\n },\n });\n};\n\nconst filterDataFirstPublishedAt: ParamsTransform = (params) => {\n if (params?.data?.firstPublishedAt) {\n return assoc(['data', 'firstPublishedAt'], null, params);\n }\n\n return params;\n};\n\nexport { addFirstPublishedAtToDraft, filterDataFirstPublishedAt };\n"],"names":["addFirstPublishedAtToDraft","draft","update","contentType","contentTypes","hasFirstPublishedAtField","firstPublishedAt","data","Date","now","filterDataFirstPublishedAt","params","assoc"],"mappings":";;;;;AAOMA,MAAAA,0BAAAA,GAA6B,OACjCC,KAAAA,EACAC,MACAC,EAAAA,WAAAA,GAAAA;AAEA,IAAA,IAAI,CAACC,wBAAAA,CAAaC,wBAAwB,CAACF,WAAc,CAAA,EAAA;QACvD,OAAOF,KAAAA;AACT;IAEA,IAAIA,KAAAA,CAAMK,gBAAgB,EAAE;QAC1B,OAAOL,KAAAA;AACT;AAEA,IAAA,OAAOC,OAAOD,KAAO,EAAA;QACnBM,IAAM,EAAA;AACJD,YAAAA,gBAAAA,EAAkBE,KAAKC,GAAG;AAC5B;AACF,KAAA,CAAA;AACF;AAEA,MAAMC,6BAA8C,CAACC,MAAAA,GAAAA;IACnD,IAAIA,MAAAA,EAAQJ,MAAMD,gBAAkB,EAAA;AAClC,QAAA,OAAOM,QAAM,CAAA;AAAC,YAAA,MAAA;AAAQ,YAAA;AAAmB,SAAA,EAAE,IAAMD,EAAAA,MAAAA,CAAAA;AACnD;IAEA,OAAOA,MAAAA;AACT;;;;;"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { contentTypes } from '@strapi/utils';
|
|
2
|
+
import { assoc } from 'lodash/fp';
|
|
3
|
+
|
|
4
|
+
const addFirstPublishedAtToDraft = async (draft, update, contentType)=>{
|
|
5
|
+
if (!contentTypes.hasFirstPublishedAtField(contentType)) {
|
|
6
|
+
return draft;
|
|
7
|
+
}
|
|
8
|
+
if (draft.firstPublishedAt) {
|
|
9
|
+
return draft;
|
|
10
|
+
}
|
|
11
|
+
return update(draft, {
|
|
12
|
+
data: {
|
|
13
|
+
firstPublishedAt: Date.now()
|
|
14
|
+
}
|
|
15
|
+
});
|
|
16
|
+
};
|
|
17
|
+
const filterDataFirstPublishedAt = (params)=>{
|
|
18
|
+
if (params?.data?.firstPublishedAt) {
|
|
19
|
+
return assoc([
|
|
20
|
+
'data',
|
|
21
|
+
'firstPublishedAt'
|
|
22
|
+
], null, params);
|
|
23
|
+
}
|
|
24
|
+
return params;
|
|
25
|
+
};
|
|
26
|
+
|
|
27
|
+
export { addFirstPublishedAtToDraft, filterDataFirstPublishedAt };
|
|
28
|
+
//# sourceMappingURL=first-published-at.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"first-published-at.mjs","sources":["../../../src/services/document-service/first-published-at.ts"],"sourcesContent":["import { contentTypes } from '@strapi/utils';\nimport { assoc } from 'lodash/fp';\nimport type { Modules, Schema } from '@strapi/types';\n\ntype EntriesUpdate = (entryToUpdate: any, param?: any) => Promise<any>;\ntype ParamsTransform = (params: Modules.Documents.Params.All) => Modules.Documents.Params.All;\n\nconst addFirstPublishedAtToDraft = async (\n draft: any,\n update: EntriesUpdate,\n contentType: Schema.ContentType\n) => {\n if (!contentTypes.hasFirstPublishedAtField(contentType)) {\n return draft;\n }\n\n if (draft.firstPublishedAt) {\n return draft;\n }\n\n return update(draft, {\n data: {\n firstPublishedAt: Date.now(),\n },\n });\n};\n\nconst filterDataFirstPublishedAt: ParamsTransform = (params) => {\n if (params?.data?.firstPublishedAt) {\n return assoc(['data', 'firstPublishedAt'], null, params);\n }\n\n return params;\n};\n\nexport { addFirstPublishedAtToDraft, filterDataFirstPublishedAt };\n"],"names":["addFirstPublishedAtToDraft","draft","update","contentType","contentTypes","hasFirstPublishedAtField","firstPublishedAt","data","Date","now","filterDataFirstPublishedAt","params","assoc"],"mappings":";;;AAOMA,MAAAA,0BAAAA,GAA6B,OACjCC,KAAAA,EACAC,MACAC,EAAAA,WAAAA,GAAAA;AAEA,IAAA,IAAI,CAACC,YAAAA,CAAaC,wBAAwB,CAACF,WAAc,CAAA,EAAA;QACvD,OAAOF,KAAAA;AACT;IAEA,IAAIA,KAAAA,CAAMK,gBAAgB,EAAE;QAC1B,OAAOL,KAAAA;AACT;AAEA,IAAA,OAAOC,OAAOD,KAAO,EAAA;QACnBM,IAAM,EAAA;AACJD,YAAAA,gBAAAA,EAAkBE,KAAKC,GAAG;AAC5B;AACF,KAAA,CAAA;AACF;AAEA,MAAMC,6BAA8C,CAACC,MAAAA,GAAAA;IACnD,IAAIA,MAAAA,EAAQJ,MAAMD,gBAAkB,EAAA;AAClC,QAAA,OAAOM,KAAM,CAAA;AAAC,YAAA,MAAA;AAAQ,YAAA;AAAmB,SAAA,EAAE,IAAMD,EAAAA,MAAAA,CAAAA;AACnD;IAEA,OAAOA,MAAAA;AACT;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"repository.d.ts","sourceRoot":"","sources":["../../../src/services/document-service/repository.ts"],"names":[],"mappings":"AAKA,OAAO,EAAqB,KAAK,uBAAuB,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"repository.d.ts","sourceRoot":"","sources":["../../../src/services/document-service/repository.ts"],"names":[],"mappings":"AAKA,OAAO,EAAqB,KAAK,uBAAuB,EAAE,MAAM,UAAU,CAAC;AAuB3E,eAAO,MAAM,2BAA2B,EAAE,uBA4bzC,CAAC"}
|
|
@@ -16,6 +16,7 @@ var events = require('./events.js');
|
|
|
16
16
|
var unidirectionalRelations = require('./utils/unidirectional-relations.js');
|
|
17
17
|
var bidirectionalRelations = require('./utils/bidirectional-relations.js');
|
|
18
18
|
var index = require('../entity-validator/index.js');
|
|
19
|
+
var firstPublishedAt = require('./first-published-at.js');
|
|
19
20
|
|
|
20
21
|
const { validators } = strapiUtils.validate;
|
|
21
22
|
// we have to typecast to reconcile the differences between validator and database getModel
|
|
@@ -151,7 +152,7 @@ const createContentTypeRepository = (uid, validator = index)=>{
|
|
|
151
152
|
}
|
|
152
153
|
async function update(opts = {}) {
|
|
153
154
|
const { documentId, ...params$1 } = opts;
|
|
154
|
-
const queryParams = await strapiUtils.async.pipe(validateParams, draftAndPublish.filterDataPublishedAt, draftAndPublish.setStatusToDraft(contentType), draftAndPublish.statusToLookup(contentType), draftAndPublish.statusToData(contentType), // Default locale will be set if not provided
|
|
155
|
+
const queryParams = await strapiUtils.async.pipe(validateParams, draftAndPublish.filterDataPublishedAt, firstPublishedAt.filterDataFirstPublishedAt, draftAndPublish.setStatusToDraft(contentType), draftAndPublish.statusToLookup(contentType), draftAndPublish.statusToData(contentType), // Default locale will be set if not provided
|
|
155
156
|
internationalization.defaultLocale(contentType), internationalization.localeToLookup(contentType), internationalization.localeToData(contentType))(params$1);
|
|
156
157
|
const { data, ...restParams } = await idTransform.transformParamsDocumentId(uid, queryParams || {});
|
|
157
158
|
const query$1 = query.transformParamsToQuery(uid, params.pickSelectionParams(restParams || {}));
|
|
@@ -236,6 +237,8 @@ const createContentTypeRepository = (uid, validator = index)=>{
|
|
|
236
237
|
const relationsToSync = await unidirectionalRelations.load(uid, {
|
|
237
238
|
newVersions: draftsToPublish,
|
|
238
239
|
oldVersions: oldPublishedVersions
|
|
240
|
+
}, {
|
|
241
|
+
shouldPropagateRelation: components.createComponentRelationFilter()
|
|
239
242
|
});
|
|
240
243
|
const bidirectionalRelationsToSync = await bidirectionalRelations.load(uid, {
|
|
241
244
|
newVersions: draftsToPublish,
|
|
@@ -243,16 +246,18 @@ const createContentTypeRepository = (uid, validator = index)=>{
|
|
|
243
246
|
});
|
|
244
247
|
// Delete old published versions
|
|
245
248
|
await strapiUtils.async.map(oldPublishedVersions, (entry)=>entries$1.delete(entry.id));
|
|
249
|
+
// Add firstPublishedAt to draft if it doesn't exist
|
|
250
|
+
const updatedDraft = await strapiUtils.async.map(draftsToPublish, (draft)=>firstPublishedAt.addFirstPublishedAtToDraft(draft, entries$1.update, contentType));
|
|
246
251
|
// Transform draft entry data and create published versions
|
|
247
|
-
const publishedEntries = await strapiUtils.async.map(
|
|
252
|
+
const publishedEntries = await strapiUtils.async.map(updatedDraft, (draft)=>entries$1.publish(draft, queryParams));
|
|
248
253
|
// Sync unidirectional relations with the new published entries
|
|
249
254
|
await unidirectionalRelations.sync([
|
|
250
255
|
...oldPublishedVersions,
|
|
251
|
-
...
|
|
256
|
+
...updatedDraft
|
|
252
257
|
], publishedEntries, relationsToSync);
|
|
253
258
|
await bidirectionalRelations.sync([
|
|
254
259
|
...oldPublishedVersions,
|
|
255
|
-
...
|
|
260
|
+
...updatedDraft
|
|
256
261
|
], publishedEntries, bidirectionalRelationsToSync);
|
|
257
262
|
publishedEntries.forEach(emitEvent('entry.publish'));
|
|
258
263
|
return {
|
|
@@ -314,6 +319,8 @@ const createContentTypeRepository = (uid, validator = index)=>{
|
|
|
314
319
|
const relationsToSync = await unidirectionalRelations.load(uid, {
|
|
315
320
|
newVersions: versionsToDraft,
|
|
316
321
|
oldVersions: oldDrafts
|
|
322
|
+
}, {
|
|
323
|
+
shouldPropagateRelation: components.createComponentRelationFilter()
|
|
317
324
|
});
|
|
318
325
|
const bidirectionalRelationsToSync = await bidirectionalRelations.load(uid, {
|
|
319
326
|
newVersions: versionsToDraft,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"repository.js","sources":["../../../src/services/document-service/repository.ts"],"sourcesContent":["import { omit, assoc, merge, curry } from 'lodash/fp';\n\nimport { async, contentTypes as contentTypesUtils, validate, errors } from '@strapi/utils';\n\nimport type { UID } 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 { 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 entityValidator from '../entity-validator';\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\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 const validateParams = async (params: any) => {\n const ctx = { schema: contentType, getModel };\n await validators.validateFilters(ctx, params.filters, filtersValidations);\n await validators.validateSort(ctx, params.sort, sortValidations);\n await validators.validateFields(ctx, params.fields, fieldValidations);\n await validators.validatePopulate(ctx, params.populate, populateValidations);\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 // TODO: add validate status, locale, pagination\n\n return params;\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 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 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 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 query = 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 if (params.status === 'draft') {\n throw new Error('Cannot delete a draft document');\n }\n\n const entriesToDelete = await strapi.db.query(uid).findMany(query);\n\n // Delete all matched entries and its components\n const deletedEntries = await async.map(entriesToDelete, (entryToDelete: any) =>\n entries.delete(entryToDelete.id)\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 validateParams,\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 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 i18n.defaultLocale(contentType),\n i18n.localeToLookup(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(uid, {\n newVersions: draftsToPublish,\n oldVersions: oldPublishedVersions,\n });\n\n const bidirectionalRelationsToSync = await bidirectionalRelations.load(uid, {\n newVersions: draftsToPublish,\n oldVersions: oldPublishedVersions,\n });\n\n // Delete old published versions\n await async.map(oldPublishedVersions, (entry: any) => entries.delete(entry.id));\n\n // Transform draft entry data and create published versions\n const publishedEntries = await async.map(draftsToPublish, (draft: any) =>\n entries.publish(draft, queryParams)\n );\n\n // Sync unidirectional relations with the new published entries\n await unidirectionalRelations.sync(\n [...oldPublishedVersions, ...draftsToPublish],\n publishedEntries,\n relationsToSync\n );\n\n await bidirectionalRelations.sync(\n [...oldPublishedVersions, ...draftsToPublish],\n publishedEntries,\n bidirectionalRelationsToSync\n );\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(uid, {\n newVersions: versionsToDraft,\n oldVersions: oldDrafts,\n });\n\n const bidirectionalRelationsToSync = await bidirectionalRelations.load(uid, {\n newVersions: versionsToDraft,\n oldVersions: oldDrafts,\n });\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 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","createContentTypeRepository","uid","validator","entityValidator","contentType","hasDraftAndPublish","contentTypesUtils","sortValidations","fieldValidations","filtersValidations","populateValidations","sort","field","filters","populate","validateParams","params","ctx","validateFilters","validateSort","validateFields","fields","validatePopulate","lookup","errors","ValidationError","entries","createEntriesService","eventManager","createEventManager","emitEvent","curry","findMany","query","async","pipe","DP","i18n","transformParamsDocumentId","transformParamsToQuery","db","findFirst","findOne","opts","documentId","assoc","where","deleteDocument","omit","status","Error","entriesToDelete","deletedEntries","map","entryToDelete","delete","id","forEach","create","queryParams","doc","publish","then","clone","entriesToClone","publishedAt","$null","getDeepPopulate","relationalFields","clonedEntries","createDocumentId","data","merge","at","update","restParams","pickSelectionParams","entryToUpdate","updatedDraft","documentExists","mergedData","copyNonLocalizedFields","count","draftsToPublish","oldPublishedVersions","Promise","all","$ne","select","relationsToSync","unidirectionalRelations","newVersions","oldVersions","bidirectionalRelationsToSync","bidirectionalRelations","entry","publishedEntries","draft","unpublish","versionsToDelete","discardDraft","versionsToDraft","oldDrafts","draftEntries","updateComponents","components","omitComponentData","wrapInTransaction","undefined"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"repository.js","sources":["../../../src/services/document-service/repository.ts"],"sourcesContent":["import { omit, assoc, merge, curry } from 'lodash/fp';\n\nimport { async, contentTypes as contentTypesUtils, validate, errors } from '@strapi/utils';\n\nimport type { UID } 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 { 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 entityValidator from '../entity-validator';\nimport { addFirstPublishedAtToDraft, filterDataFirstPublishedAt } from './first-published-at';\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\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 const validateParams = async (params: any) => {\n const ctx = { schema: contentType, getModel };\n await validators.validateFilters(ctx, params.filters, filtersValidations);\n await validators.validateSort(ctx, params.sort, sortValidations);\n await validators.validateFields(ctx, params.fields, fieldValidations);\n await validators.validatePopulate(ctx, params.populate, populateValidations);\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 // TODO: add validate status, locale, pagination\n\n return params;\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 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 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 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 query = 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 if (params.status === 'draft') {\n throw new Error('Cannot delete a draft document');\n }\n\n const entriesToDelete = await strapi.db.query(uid).findMany(query);\n\n // Delete all matched entries and its components\n const deletedEntries = await async.map(entriesToDelete, (entryToDelete: any) =>\n entries.delete(entryToDelete.id)\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 validateParams,\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 i18n.defaultLocale(contentType),\n i18n.localeToLookup(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 // 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 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 // 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 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","createContentTypeRepository","uid","validator","entityValidator","contentType","hasDraftAndPublish","contentTypesUtils","sortValidations","fieldValidations","filtersValidations","populateValidations","sort","field","filters","populate","validateParams","params","ctx","validateFilters","validateSort","validateFields","fields","validatePopulate","lookup","errors","ValidationError","entries","createEntriesService","eventManager","createEventManager","emitEvent","curry","findMany","query","async","pipe","DP","i18n","transformParamsDocumentId","transformParamsToQuery","db","findFirst","findOne","opts","documentId","assoc","where","deleteDocument","omit","status","Error","entriesToDelete","deletedEntries","map","entryToDelete","delete","id","forEach","create","queryParams","doc","publish","then","clone","entriesToClone","publishedAt","$null","getDeepPopulate","relationalFields","clonedEntries","createDocumentId","data","merge","at","update","filterDataFirstPublishedAt","restParams","pickSelectionParams","entryToUpdate","updatedDraft","documentExists","mergedData","copyNonLocalizedFields","count","draftsToPublish","oldPublishedVersions","Promise","all","$ne","select","relationsToSync","unidirectionalRelations","newVersions","oldVersions","shouldPropagateRelation","components","bidirectionalRelationsToSync","bidirectionalRelations","entry","draft","addFirstPublishedAtToDraft","publishedEntries","unpublish","versionsToDelete","discardDraft","versionsToDraft","oldDrafts","draftEntries","updateComponents","omitComponentData","wrapInTransaction","undefined"],"mappings":"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"}
|