@strapi/core 0.0.0-next.84e5c7c3e470f80271a7a6a88a55244be1d168bd → 0.0.0-next.86f7c82a340bd1cb833f5f785b8001df5461c5a9
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 +20 -1
- package/dist/Strapi.js.map +1 -1
- package/dist/Strapi.mjs +20 -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 +17 -12
- package/dist/package.json.js.map +1 -1
- package/dist/package.json.mjs +17 -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/entries.d.ts.map +1 -1
- package/dist/services/document-service/entries.js.map +1 -1
- package/dist/services/document-service/entries.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/internationalization.d.ts +6 -1
- package/dist/services/document-service/internationalization.d.ts.map +1 -1
- package/dist/services/document-service/internationalization.js +32 -0
- package/dist/services/document-service/internationalization.js.map +1 -1
- package/dist/services/document-service/internationalization.mjs +32 -1
- package/dist/services/document-service/internationalization.mjs.map +1 -1
- package/dist/services/document-service/repository.d.ts.map +1 -1
- package/dist/services/document-service/repository.js +16 -8
- package/dist/services/document-service/repository.js.map +1 -1
- package/dist/services/document-service/repository.mjs +18 -10
- 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/entity-validator/index.d.ts.map +1 -1
- package/dist/services/entity-validator/index.js +9 -0
- package/dist/services/entity-validator/index.js.map +1 -1
- package/dist/services/entity-validator/index.mjs +9 -0
- package/dist/services/entity-validator/index.mjs.map +1 -1
- package/dist/services/entity-validator/validators.d.ts +1 -0
- package/dist/services/entity-validator/validators.d.ts.map +1 -1
- package/dist/services/entity-validator/validators.js +3 -0
- package/dist/services/entity-validator/validators.js.map +1 -1
- package/dist/services/entity-validator/validators.mjs +3 -0
- package/dist/services/entity-validator/validators.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/dist/services/utils/conditional-fields.d.ts +3 -0
- package/dist/services/utils/conditional-fields.d.ts.map +1 -0
- package/dist/services/utils/conditional-fields.js +22 -0
- package/dist/services/utils/conditional-fields.js.map +1 -0
- package/dist/services/utils/conditional-fields.mjs +20 -0
- package/dist/services/utils/conditional-fields.mjs.map +1 -0
- package/dist/utils/transform-content-types-to-models.d.ts +197 -0
- package/dist/utils/transform-content-types-to-models.d.ts.map +1 -1
- package/package.json +17 -12
|
@@ -65,10 +65,41 @@ const defaultLocale = async (contentType, params)=>{
|
|
|
65
65
|
}
|
|
66
66
|
return params;
|
|
67
67
|
};
|
|
68
|
+
/**
|
|
69
|
+
* Copy non-localized fields from an existing entry to a new entry being created
|
|
70
|
+
* for a different locale of the same document. Returns a new object with the merged data.
|
|
71
|
+
*/ const copyNonLocalizedFields = async (contentType, documentId, dataToCreate)=>{
|
|
72
|
+
// Check if this is a localized content type and if i18n plugin is available
|
|
73
|
+
const i18nService = strapi.plugin('i18n')?.service('content-types');
|
|
74
|
+
if (!i18nService?.isLocalizedContentType(contentType)) {
|
|
75
|
+
return dataToCreate;
|
|
76
|
+
}
|
|
77
|
+
// Find an existing entry for the same document to copy unlocalized fields from
|
|
78
|
+
const existingEntry = await strapi.db.query(contentType.uid).findOne({
|
|
79
|
+
where: {
|
|
80
|
+
documentId
|
|
81
|
+
},
|
|
82
|
+
// Prefer published entry, but fall back to any entry
|
|
83
|
+
orderBy: {
|
|
84
|
+
publishedAt: 'desc'
|
|
85
|
+
}
|
|
86
|
+
});
|
|
87
|
+
// If an entry exists in another locale, copy its non-localized fields
|
|
88
|
+
if (existingEntry) {
|
|
89
|
+
const mergedData = {
|
|
90
|
+
...dataToCreate
|
|
91
|
+
};
|
|
92
|
+
i18nService.fillNonLocalizedAttributes(mergedData, existingEntry, {
|
|
93
|
+
model: contentType.uid
|
|
94
|
+
});
|
|
95
|
+
return mergedData;
|
|
96
|
+
}
|
|
97
|
+
return dataToCreate;
|
|
98
|
+
};
|
|
68
99
|
const defaultLocaleCurry = curry(defaultLocale);
|
|
69
100
|
const localeToLookupCurry = curry(localeToLookup);
|
|
70
101
|
const multiLocaleToLookupCurry = curry(multiLocaleToLookup);
|
|
71
102
|
const localeToDataCurry = curry(localeToData);
|
|
72
103
|
|
|
73
|
-
export { defaultLocaleCurry as defaultLocale, localeToDataCurry as localeToData, localeToLookupCurry as localeToLookup, multiLocaleToLookupCurry as multiLocaleToLookup };
|
|
104
|
+
export { copyNonLocalizedFields, defaultLocaleCurry as defaultLocale, localeToDataCurry as localeToData, localeToLookupCurry as localeToLookup, multiLocaleToLookupCurry as multiLocaleToLookup };
|
|
74
105
|
//# sourceMappingURL=internationalization.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"internationalization.mjs","sources":["../../../src/services/document-service/internationalization.ts"],"sourcesContent":["import type { Struct, Modules } from '@strapi/types';\nimport { errors } from '@strapi/utils';\nimport { curry, assoc } from 'lodash/fp';\n\ntype Transform = (\n contentType: Struct.SingleTypeSchema | Struct.CollectionTypeSchema,\n params: Modules.Documents.Params.All\n) => Modules.Documents.Params.All;\n\ntype AsyncTransform = (\n contentType: Struct.SingleTypeSchema | Struct.CollectionTypeSchema,\n params: Modules.Documents.Params.All\n) => Promise<Modules.Documents.Params.All>;\n\nconst getDefaultLocale = async (): Promise<string> => {\n return strapi.plugin('i18n').service('locales').getDefaultLocale();\n};\n\nconst defaultLocale: AsyncTransform = async (contentType, params) => {\n if (!strapi.plugin('i18n').service('content-types').isLocalizedContentType(contentType)) {\n return params;\n }\n\n if (!params.locale) {\n return assoc('locale', await getDefaultLocale(), params);\n }\n\n return params;\n};\n\n/**\n * Add locale lookup query to the params\n */\nconst localeToLookup: Transform = (contentType, params) => {\n if (\n !params.locale ||\n !strapi.plugin('i18n').service('content-types').isLocalizedContentType(contentType)\n ) {\n return params;\n }\n\n if (typeof params.locale !== 'string') {\n // localeToLookup accepts locales of '*'. This is because the document\n // service functions that use this transform work with the '*' locale\n // to return all locales.\n throw new errors.ValidationError(\n `Invalid locale param ${String(params.locale)} provided. Document locales must be strings.`\n );\n }\n\n return assoc(['lookup', 'locale'], params.locale, params);\n};\n\n/**\n * Add locale lookup query to the params\n */\nconst multiLocaleToLookup: Transform = (contentType, params) => {\n if (!strapi.plugin('i18n').service('content-types').isLocalizedContentType(contentType)) {\n return params;\n }\n\n if (params.locale) {\n if (params.locale === '*') {\n return params;\n }\n\n return assoc(['lookup', 'locale'], params.locale, params);\n }\n\n return params;\n};\n\n/**\n * Translate locale status parameter into the data that will be saved\n */\nconst localeToData: Transform = (contentType, params) => {\n if (!strapi.plugin('i18n').service('content-types').isLocalizedContentType(contentType)) {\n return params;\n }\n\n if (params.locale) {\n const isValidLocale = typeof params.locale === 'string' && params.locale !== '*';\n if (isValidLocale) {\n return assoc(['data', 'locale'], params.locale, params);\n }\n\n throw new errors.ValidationError(\n `Invalid locale param ${params.locale} provided. Document locales must be strings.`\n );\n }\n\n return params;\n};\n\nconst defaultLocaleCurry = curry(defaultLocale);\nconst localeToLookupCurry = curry(localeToLookup);\nconst multiLocaleToLookupCurry = curry(multiLocaleToLookup);\nconst localeToDataCurry = curry(localeToData);\n\nexport {\n defaultLocaleCurry as defaultLocale,\n localeToLookupCurry as localeToLookup,\n localeToDataCurry as localeToData,\n multiLocaleToLookupCurry as multiLocaleToLookup,\n};\n"],"names":["getDefaultLocale","strapi","plugin","service","defaultLocale","contentType","params","isLocalizedContentType","locale","assoc","localeToLookup","errors","ValidationError","String","multiLocaleToLookup","localeToData","isValidLocale","defaultLocaleCurry","curry","localeToLookupCurry","multiLocaleToLookupCurry","localeToDataCurry"],"mappings":";;;AAcA,MAAMA,gBAAmB,GAAA,UAAA;AACvB,IAAA,OAAOC,OAAOC,MAAM,CAAC,QAAQC,OAAO,CAAC,WAAWH,gBAAgB,EAAA;AAClE,CAAA;AAEA,MAAMI,aAAAA,GAAgC,OAAOC,WAAaC,EAAAA,MAAAA,GAAAA;IACxD,IAAI,CAACL,MAAOC,CAAAA,MAAM,CAAC,MAAA,CAAA,CAAQC,OAAO,CAAC,eAAA,CAAA,CAAiBI,sBAAsB,CAACF,WAAc,CAAA,EAAA;QACvF,OAAOC,MAAAA;AACT;IAEA,IAAI,CAACA,MAAOE,CAAAA,MAAM,EAAE;QAClB,OAAOC,KAAAA,CAAM,QAAU,EAAA,MAAMT,gBAAoBM,EAAAA,EAAAA,MAAAA,CAAAA;AACnD;IAEA,OAAOA,MAAAA;AACT,CAAA;AAEA;;IAGA,MAAMI,cAA4B,GAAA,CAACL,WAAaC,EAAAA,MAAAA,GAAAA;AAC9C,IAAA,IACE,CAACA,MAAAA,CAAOE,MAAM,IACd,CAACP,MAAOC,CAAAA,MAAM,CAAC,MAAA,CAAA,CAAQC,OAAO,CAAC,eAAiBI,CAAAA,CAAAA,sBAAsB,CAACF,WACvE,CAAA,EAAA;QACA,OAAOC,MAAAA;AACT;AAEA,IAAA,IAAI,OAAOA,MAAAA,CAAOE,MAAM,KAAK,QAAU,EAAA;;;;AAIrC,QAAA,MAAM,IAAIG,MAAAA,CAAOC,eAAe,CAC9B,CAAC,qBAAqB,EAAEC,MAAAA,CAAOP,MAAOE,CAAAA,MAAM,CAAE,CAAA,4CAA4C,CAAC,CAAA;AAE/F;AAEA,IAAA,OAAOC,KAAM,CAAA;AAAC,QAAA,QAAA;AAAU,QAAA;KAAS,EAAEH,MAAAA,CAAOE,MAAM,EAAEF,MAAAA,CAAAA;AACpD,CAAA;AAEA;;IAGA,MAAMQ,mBAAiC,GAAA,CAACT,WAAaC,EAAAA,MAAAA,GAAAA;IACnD,IAAI,CAACL,MAAOC,CAAAA,MAAM,CAAC,MAAA,CAAA,CAAQC,OAAO,CAAC,eAAA,CAAA,CAAiBI,sBAAsB,CAACF,WAAc,CAAA,EAAA;QACvF,OAAOC,MAAAA;AACT;IAEA,IAAIA,MAAAA,CAAOE,MAAM,EAAE;QACjB,IAAIF,MAAAA,CAAOE,MAAM,KAAK,GAAK,EAAA;YACzB,OAAOF,MAAAA;AACT;AAEA,QAAA,OAAOG,KAAM,CAAA;AAAC,YAAA,QAAA;AAAU,YAAA;SAAS,EAAEH,MAAAA,CAAOE,MAAM,EAAEF,MAAAA,CAAAA;AACpD;IAEA,OAAOA,MAAAA;AACT,CAAA;AAEA;;IAGA,MAAMS,YAA0B,GAAA,CAACV,WAAaC,EAAAA,MAAAA,GAAAA;IAC5C,IAAI,CAACL,MAAOC,CAAAA,MAAM,CAAC,MAAA,CAAA,CAAQC,OAAO,CAAC,eAAA,CAAA,CAAiBI,sBAAsB,CAACF,WAAc,CAAA,EAAA;QACvF,OAAOC,MAAAA;AACT;IAEA,IAAIA,MAAAA,CAAOE,MAAM,EAAE;QACjB,MAAMQ,aAAAA,GAAgB,OAAOV,MAAOE,CAAAA,MAAM,KAAK,QAAYF,IAAAA,MAAAA,CAAOE,MAAM,KAAK,GAAA;AAC7E,QAAA,IAAIQ,aAAe,EAAA;AACjB,YAAA,OAAOP,KAAM,CAAA;AAAC,gBAAA,MAAA;AAAQ,gBAAA;aAAS,EAAEH,MAAAA,CAAOE,MAAM,EAAEF,MAAAA,CAAAA;AAClD;QAEA,MAAM,IAAIK,MAAOC,CAAAA,eAAe,CAC9B,CAAC,qBAAqB,EAAEN,MAAOE,CAAAA,MAAM,CAAC,4CAA4C,CAAC,CAAA;AAEvF;IAEA,OAAOF,MAAAA;AACT,CAAA;AAEA,
|
|
1
|
+
{"version":3,"file":"internationalization.mjs","sources":["../../../src/services/document-service/internationalization.ts"],"sourcesContent":["import type { Struct, Modules } from '@strapi/types';\nimport { errors } from '@strapi/utils';\nimport { curry, assoc } from 'lodash/fp';\n\ntype Transform = (\n contentType: Struct.SingleTypeSchema | Struct.CollectionTypeSchema,\n params: Modules.Documents.Params.All\n) => Modules.Documents.Params.All;\n\ntype AsyncTransform = (\n contentType: Struct.SingleTypeSchema | Struct.CollectionTypeSchema,\n params: Modules.Documents.Params.All\n) => Promise<Modules.Documents.Params.All>;\n\nconst getDefaultLocale = async (): Promise<string> => {\n return strapi.plugin('i18n').service('locales').getDefaultLocale();\n};\n\nconst defaultLocale: AsyncTransform = async (contentType, params) => {\n if (!strapi.plugin('i18n').service('content-types').isLocalizedContentType(contentType)) {\n return params;\n }\n\n if (!params.locale) {\n return assoc('locale', await getDefaultLocale(), params);\n }\n\n return params;\n};\n\n/**\n * Add locale lookup query to the params\n */\nconst localeToLookup: Transform = (contentType, params) => {\n if (\n !params.locale ||\n !strapi.plugin('i18n').service('content-types').isLocalizedContentType(contentType)\n ) {\n return params;\n }\n\n if (typeof params.locale !== 'string') {\n // localeToLookup accepts locales of '*'. This is because the document\n // service functions that use this transform work with the '*' locale\n // to return all locales.\n throw new errors.ValidationError(\n `Invalid locale param ${String(params.locale)} provided. Document locales must be strings.`\n );\n }\n\n return assoc(['lookup', 'locale'], params.locale, params);\n};\n\n/**\n * Add locale lookup query to the params\n */\nconst multiLocaleToLookup: Transform = (contentType, params) => {\n if (!strapi.plugin('i18n').service('content-types').isLocalizedContentType(contentType)) {\n return params;\n }\n\n if (params.locale) {\n if (params.locale === '*') {\n return params;\n }\n\n return assoc(['lookup', 'locale'], params.locale, params);\n }\n\n return params;\n};\n\n/**\n * Translate locale status parameter into the data that will be saved\n */\nconst localeToData: Transform = (contentType, params) => {\n if (!strapi.plugin('i18n').service('content-types').isLocalizedContentType(contentType)) {\n return params;\n }\n\n if (params.locale) {\n const isValidLocale = typeof params.locale === 'string' && params.locale !== '*';\n if (isValidLocale) {\n return assoc(['data', 'locale'], params.locale, params);\n }\n\n throw new errors.ValidationError(\n `Invalid locale param ${params.locale} provided. Document locales must be strings.`\n );\n }\n\n return params;\n};\n\n/**\n * Copy non-localized fields from an existing entry to a new entry being created\n * for a different locale of the same document. Returns a new object with the merged data.\n */\nconst copyNonLocalizedFields = async (\n contentType: Struct.SingleTypeSchema | Struct.CollectionTypeSchema,\n documentId: string,\n dataToCreate: Record<string, any>\n): Promise<Record<string, any>> => {\n // Check if this is a localized content type and if i18n plugin is available\n const i18nService = strapi.plugin('i18n')?.service('content-types');\n if (!i18nService?.isLocalizedContentType(contentType)) {\n return dataToCreate;\n }\n\n // Find an existing entry for the same document to copy unlocalized fields from\n const existingEntry = await strapi.db.query(contentType.uid).findOne({\n where: { documentId },\n // Prefer published entry, but fall back to any entry\n orderBy: { publishedAt: 'desc' },\n });\n\n // If an entry exists in another locale, copy its non-localized fields\n if (existingEntry) {\n const mergedData = { ...dataToCreate };\n i18nService.fillNonLocalizedAttributes(mergedData, existingEntry, {\n model: contentType.uid,\n });\n return mergedData;\n }\n\n return dataToCreate;\n};\n\nconst defaultLocaleCurry = curry(defaultLocale);\nconst localeToLookupCurry = curry(localeToLookup);\nconst multiLocaleToLookupCurry = curry(multiLocaleToLookup);\nconst localeToDataCurry = curry(localeToData);\n\nexport {\n defaultLocaleCurry as defaultLocale,\n localeToLookupCurry as localeToLookup,\n localeToDataCurry as localeToData,\n multiLocaleToLookupCurry as multiLocaleToLookup,\n copyNonLocalizedFields,\n};\n"],"names":["getDefaultLocale","strapi","plugin","service","defaultLocale","contentType","params","isLocalizedContentType","locale","assoc","localeToLookup","errors","ValidationError","String","multiLocaleToLookup","localeToData","isValidLocale","copyNonLocalizedFields","documentId","dataToCreate","i18nService","existingEntry","db","query","uid","findOne","where","orderBy","publishedAt","mergedData","fillNonLocalizedAttributes","model","defaultLocaleCurry","curry","localeToLookupCurry","multiLocaleToLookupCurry","localeToDataCurry"],"mappings":"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"}
|
|
@@ -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 || {}));
|
|
@@ -177,12 +178,13 @@ const createContentTypeRepository = (uid, validator = index)=>{
|
|
|
177
178
|
}
|
|
178
179
|
});
|
|
179
180
|
if (documentExists) {
|
|
181
|
+
const mergedData = await internationalization.copyNonLocalizedFields(contentType, documentId, {
|
|
182
|
+
...queryParams.data,
|
|
183
|
+
documentId
|
|
184
|
+
});
|
|
180
185
|
updatedDraft = await entries$1.create({
|
|
181
186
|
...queryParams,
|
|
182
|
-
data:
|
|
183
|
-
...queryParams.data,
|
|
184
|
-
documentId
|
|
185
|
-
}
|
|
187
|
+
data: mergedData
|
|
186
188
|
});
|
|
187
189
|
emitEvent('entry.create', updatedDraft);
|
|
188
190
|
}
|
|
@@ -235,6 +237,8 @@ const createContentTypeRepository = (uid, validator = index)=>{
|
|
|
235
237
|
const relationsToSync = await unidirectionalRelations.load(uid, {
|
|
236
238
|
newVersions: draftsToPublish,
|
|
237
239
|
oldVersions: oldPublishedVersions
|
|
240
|
+
}, {
|
|
241
|
+
shouldPropagateRelation: components.createComponentRelationFilter()
|
|
238
242
|
});
|
|
239
243
|
const bidirectionalRelationsToSync = await bidirectionalRelations.load(uid, {
|
|
240
244
|
newVersions: draftsToPublish,
|
|
@@ -242,16 +246,18 @@ const createContentTypeRepository = (uid, validator = index)=>{
|
|
|
242
246
|
});
|
|
243
247
|
// Delete old published versions
|
|
244
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));
|
|
245
251
|
// Transform draft entry data and create published versions
|
|
246
|
-
const publishedEntries = await strapiUtils.async.map(
|
|
252
|
+
const publishedEntries = await strapiUtils.async.map(updatedDraft, (draft)=>entries$1.publish(draft, queryParams));
|
|
247
253
|
// Sync unidirectional relations with the new published entries
|
|
248
254
|
await unidirectionalRelations.sync([
|
|
249
255
|
...oldPublishedVersions,
|
|
250
|
-
...
|
|
256
|
+
...updatedDraft
|
|
251
257
|
], publishedEntries, relationsToSync);
|
|
252
258
|
await bidirectionalRelations.sync([
|
|
253
259
|
...oldPublishedVersions,
|
|
254
|
-
...
|
|
260
|
+
...updatedDraft
|
|
255
261
|
], publishedEntries, bidirectionalRelationsToSync);
|
|
256
262
|
publishedEntries.forEach(emitEvent('entry.publish'));
|
|
257
263
|
return {
|
|
@@ -313,6 +319,8 @@ const createContentTypeRepository = (uid, validator = index)=>{
|
|
|
313
319
|
const relationsToSync = await unidirectionalRelations.load(uid, {
|
|
314
320
|
newVersions: versionsToDraft,
|
|
315
321
|
oldVersions: oldDrafts
|
|
322
|
+
}, {
|
|
323
|
+
shouldPropagateRelation: components.createComponentRelationFilter()
|
|
316
324
|
});
|
|
317
325
|
const bidirectionalRelationsToSync = await bidirectionalRelations.load(uid, {
|
|
318
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 * 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 updatedDraft = await entries.create({\n ...queryParams,\n data: { ...queryParams.data, documentId },\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","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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"}
|
|
@@ -2,8 +2,8 @@ import { curry, assoc, omit, merge } from 'lodash/fp';
|
|
|
2
2
|
import { contentTypes, async, errors, validate } from '@strapi/utils';
|
|
3
3
|
import { wrapInTransaction } from './common.mjs';
|
|
4
4
|
import { defaultToDraft as defaultToDraftCurry, statusToLookup as statusToLookupCurry, filterDataPublishedAt as filterDataPublishedAtCurry, setStatusToDraft as setStatusToDraftCurry, statusToData as statusToDataCurry, defaultStatus as defaultStatusCurry } from './draft-and-publish.mjs';
|
|
5
|
-
import { defaultLocale as defaultLocaleCurry, multiLocaleToLookup as multiLocaleToLookupCurry, localeToLookup as localeToLookupCurry, localeToData as localeToDataCurry } from './internationalization.mjs';
|
|
6
|
-
import { updateComponents, omitComponentData } from './components.mjs';
|
|
5
|
+
import { defaultLocale as defaultLocaleCurry, multiLocaleToLookup as multiLocaleToLookupCurry, localeToLookup as localeToLookupCurry, localeToData as localeToDataCurry, copyNonLocalizedFields } from './internationalization.mjs';
|
|
6
|
+
import { updateComponents, omitComponentData, createComponentRelationFilter } from './components.mjs';
|
|
7
7
|
import { createEntriesService } from './entries.mjs';
|
|
8
8
|
import { pickSelectionParams } from './params.mjs';
|
|
9
9
|
import { createDocumentId } from '../../utils/transform-content-types-to-models.mjs';
|
|
@@ -14,6 +14,7 @@ import { createEventManager } from './events.mjs';
|
|
|
14
14
|
import { load, sync } from './utils/unidirectional-relations.mjs';
|
|
15
15
|
import { load as load$1, sync as sync$1 } from './utils/bidirectional-relations.mjs';
|
|
16
16
|
import entityValidator from '../entity-validator/index.mjs';
|
|
17
|
+
import { filterDataFirstPublishedAt, addFirstPublishedAtToDraft } from './first-published-at.mjs';
|
|
17
18
|
|
|
18
19
|
const { validators } = validate;
|
|
19
20
|
// we have to typecast to reconcile the differences between validator and database getModel
|
|
@@ -149,7 +150,7 @@ const createContentTypeRepository = (uid, validator = entityValidator)=>{
|
|
|
149
150
|
}
|
|
150
151
|
async function update(opts = {}) {
|
|
151
152
|
const { documentId, ...params } = opts;
|
|
152
|
-
const queryParams = await async.pipe(validateParams, filterDataPublishedAtCurry, setStatusToDraftCurry(contentType), statusToLookupCurry(contentType), statusToDataCurry(contentType), // Default locale will be set if not provided
|
|
153
|
+
const queryParams = await async.pipe(validateParams, filterDataPublishedAtCurry, filterDataFirstPublishedAt, setStatusToDraftCurry(contentType), statusToLookupCurry(contentType), statusToDataCurry(contentType), // Default locale will be set if not provided
|
|
153
154
|
defaultLocaleCurry(contentType), localeToLookupCurry(contentType), localeToDataCurry(contentType))(params);
|
|
154
155
|
const { data, ...restParams } = await curriedTransformParamsDocumentId(uid, queryParams || {});
|
|
155
156
|
const query = transformParamsToQuery(uid, pickSelectionParams(restParams || {}));
|
|
@@ -175,12 +176,13 @@ const createContentTypeRepository = (uid, validator = entityValidator)=>{
|
|
|
175
176
|
}
|
|
176
177
|
});
|
|
177
178
|
if (documentExists) {
|
|
179
|
+
const mergedData = await copyNonLocalizedFields(contentType, documentId, {
|
|
180
|
+
...queryParams.data,
|
|
181
|
+
documentId
|
|
182
|
+
});
|
|
178
183
|
updatedDraft = await entries.create({
|
|
179
184
|
...queryParams,
|
|
180
|
-
data:
|
|
181
|
-
...queryParams.data,
|
|
182
|
-
documentId
|
|
183
|
-
}
|
|
185
|
+
data: mergedData
|
|
184
186
|
});
|
|
185
187
|
emitEvent('entry.create', updatedDraft);
|
|
186
188
|
}
|
|
@@ -233,6 +235,8 @@ const createContentTypeRepository = (uid, validator = entityValidator)=>{
|
|
|
233
235
|
const relationsToSync = await load(uid, {
|
|
234
236
|
newVersions: draftsToPublish,
|
|
235
237
|
oldVersions: oldPublishedVersions
|
|
238
|
+
}, {
|
|
239
|
+
shouldPropagateRelation: createComponentRelationFilter()
|
|
236
240
|
});
|
|
237
241
|
const bidirectionalRelationsToSync = await load$1(uid, {
|
|
238
242
|
newVersions: draftsToPublish,
|
|
@@ -240,16 +244,18 @@ const createContentTypeRepository = (uid, validator = entityValidator)=>{
|
|
|
240
244
|
});
|
|
241
245
|
// Delete old published versions
|
|
242
246
|
await async.map(oldPublishedVersions, (entry)=>entries.delete(entry.id));
|
|
247
|
+
// Add firstPublishedAt to draft if it doesn't exist
|
|
248
|
+
const updatedDraft = await async.map(draftsToPublish, (draft)=>addFirstPublishedAtToDraft(draft, entries.update, contentType));
|
|
243
249
|
// Transform draft entry data and create published versions
|
|
244
|
-
const publishedEntries = await async.map(
|
|
250
|
+
const publishedEntries = await async.map(updatedDraft, (draft)=>entries.publish(draft, queryParams));
|
|
245
251
|
// Sync unidirectional relations with the new published entries
|
|
246
252
|
await sync([
|
|
247
253
|
...oldPublishedVersions,
|
|
248
|
-
...
|
|
254
|
+
...updatedDraft
|
|
249
255
|
], publishedEntries, relationsToSync);
|
|
250
256
|
await sync$1([
|
|
251
257
|
...oldPublishedVersions,
|
|
252
|
-
...
|
|
258
|
+
...updatedDraft
|
|
253
259
|
], publishedEntries, bidirectionalRelationsToSync);
|
|
254
260
|
publishedEntries.forEach(emitEvent('entry.publish'));
|
|
255
261
|
return {
|
|
@@ -311,6 +317,8 @@ const createContentTypeRepository = (uid, validator = entityValidator)=>{
|
|
|
311
317
|
const relationsToSync = await load(uid, {
|
|
312
318
|
newVersions: versionsToDraft,
|
|
313
319
|
oldVersions: oldDrafts
|
|
320
|
+
}, {
|
|
321
|
+
shouldPropagateRelation: createComponentRelationFilter()
|
|
314
322
|
});
|
|
315
323
|
const bidirectionalRelationsToSync = await load$1(uid, {
|
|
316
324
|
newVersions: versionsToDraft,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"repository.mjs","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 * 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 updatedDraft = await entries.create({\n ...queryParams,\n data: { ...queryParams.data, documentId },\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","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.mjs","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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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { Database } from '@strapi/database';
|
|
2
|
+
/**
|
|
3
|
+
* Cleans ghost relations with publication state mismatches from a join table
|
|
4
|
+
* Uses schema-based draft/publish checking like prevention fix
|
|
5
|
+
*/
|
|
6
|
+
export declare const cleanComponentJoinTable: (db: Database, joinTableName: string, relation: any, sourceModel: any) => Promise<number>;
|
|
7
|
+
//# sourceMappingURL=clean-component-join-table.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"clean-component-join-table.d.ts","sourceRoot":"","sources":["../../../../src/services/document-service/utils/clean-component-join-table.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAIjD;;;GAGG;AACH,eAAO,MAAM,uBAAuB,OAC9B,QAAQ,iBACG,MAAM,YACX,GAAG,eACA,GAAG,KACf,QAAQ,MAAM,CA2ChB,CAAC"}
|