@strapi/core 0.0.0-experimental.3f7b2587c5e3d548262671895cf11d8bf8c9166e → 0.0.0-experimental.90ca9123352ed07e0a9cedaf4bcad1475e74137f
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.map +1 -1
- package/dist/Strapi.js +7 -3
- package/dist/Strapi.js.map +1 -1
- package/dist/Strapi.mjs +6 -2
- package/dist/Strapi.mjs.map +1 -1
- package/dist/core-api/controller/collection-type.d.ts +1 -1
- package/dist/core-api/controller/collection-type.d.ts.map +1 -1
- package/dist/core-api/controller/collection-type.js +9 -20
- package/dist/core-api/controller/collection-type.js.map +1 -1
- package/dist/core-api/controller/collection-type.mjs +8 -20
- package/dist/core-api/controller/collection-type.mjs.map +1 -1
- package/dist/core-api/controller/index.d.ts.map +1 -1
- package/dist/core-api/controller/index.js +2 -2
- package/dist/core-api/controller/index.js.map +1 -1
- package/dist/core-api/controller/index.mjs +2 -2
- package/dist/core-api/controller/index.mjs.map +1 -1
- package/dist/core-api/controller/single-type.d.ts +1 -1
- package/dist/core-api/controller/single-type.d.ts.map +1 -1
- package/dist/core-api/controller/single-type.js +6 -11
- package/dist/core-api/controller/single-type.js.map +1 -1
- package/dist/core-api/controller/single-type.mjs +5 -11
- package/dist/core-api/controller/single-type.mjs.map +1 -1
- package/dist/core-api/controller/transform.d.ts +2 -11
- package/dist/core-api/controller/transform.d.ts.map +1 -1
- package/dist/core-api/controller/transform.js +2 -16
- package/dist/core-api/controller/transform.js.map +1 -1
- package/dist/core-api/controller/transform.mjs +2 -16
- package/dist/core-api/controller/transform.mjs.map +1 -1
- package/dist/core-api/service/collection-type.d.ts +28 -5
- package/dist/core-api/service/collection-type.d.ts.map +1 -1
- package/dist/core-api/service/collection-type.js +47 -49
- package/dist/core-api/service/collection-type.js.map +1 -1
- package/dist/core-api/service/collection-type.mjs +47 -50
- package/dist/core-api/service/collection-type.mjs.map +1 -1
- package/dist/core-api/service/core-service.d.ts +4 -0
- package/dist/core-api/service/core-service.d.ts.map +1 -0
- package/dist/core-api/service/core-service.js +12 -0
- package/dist/core-api/service/core-service.js.map +1 -0
- package/dist/core-api/service/core-service.mjs +12 -0
- package/dist/core-api/service/core-service.mjs.map +1 -0
- package/dist/core-api/service/index.js +2 -2
- package/dist/core-api/service/index.js.map +1 -1
- package/dist/core-api/service/index.mjs +4 -4
- package/dist/core-api/service/index.mjs.map +1 -1
- package/dist/core-api/service/pagination.d.ts +1 -5
- package/dist/core-api/service/pagination.d.ts.map +1 -1
- package/dist/core-api/service/pagination.js +0 -11
- package/dist/core-api/service/pagination.js.map +1 -1
- package/dist/core-api/service/pagination.mjs +0 -11
- package/dist/core-api/service/pagination.mjs.map +1 -1
- package/dist/core-api/service/single-type.d.ts +13 -8
- package/dist/core-api/service/single-type.d.ts.map +1 -1
- package/dist/core-api/service/single-type.js +25 -51
- package/dist/core-api/service/single-type.js.map +1 -1
- package/dist/core-api/service/single-type.mjs +24 -51
- package/dist/core-api/service/single-type.mjs.map +1 -1
- package/dist/factories.d.ts.map +1 -1
- package/dist/factories.js +2 -12
- package/dist/factories.js.map +1 -1
- package/dist/factories.mjs +2 -12
- package/dist/factories.mjs.map +1 -1
- package/dist/registries/content-types.d.ts.map +1 -1
- package/dist/registries/content-types.js +1 -2
- package/dist/registries/content-types.js.map +1 -1
- package/dist/registries/content-types.mjs +1 -2
- package/dist/registries/content-types.mjs.map +1 -1
- package/dist/services/document-service/collection-type.d.ts +4 -0
- package/dist/services/document-service/collection-type.d.ts.map +1 -0
- package/dist/services/document-service/collection-type.js +145 -0
- package/dist/services/document-service/collection-type.js.map +1 -0
- package/dist/services/document-service/collection-type.mjs +145 -0
- package/dist/services/document-service/collection-type.mjs.map +1 -0
- package/dist/services/document-service/common.d.ts +4 -0
- package/dist/services/document-service/common.d.ts.map +1 -0
- package/dist/services/document-service/common.js +7 -0
- package/dist/services/document-service/common.js.map +1 -0
- package/dist/services/document-service/common.mjs +7 -0
- package/dist/services/document-service/common.mjs.map +1 -0
- package/dist/services/document-service/document-engine.d.ts.map +1 -1
- package/dist/services/document-service/document-engine.js +130 -81
- package/dist/services/document-service/document-engine.js.map +1 -1
- package/dist/services/document-service/document-engine.mjs +125 -76
- package/dist/services/document-service/document-engine.mjs.map +1 -1
- package/dist/services/document-service/draft-and-publish.d.ts +24 -0
- package/dist/services/document-service/draft-and-publish.d.ts.map +1 -0
- package/dist/services/document-service/draft-and-publish.js +41 -0
- package/dist/services/document-service/draft-and-publish.js.map +1 -0
- package/dist/services/document-service/draft-and-publish.mjs +41 -0
- package/dist/services/document-service/draft-and-publish.mjs.map +1 -0
- package/dist/services/document-service/{document-service.d.ts → index.d.ts} +2 -4
- package/dist/services/document-service/index.d.ts.map +1 -0
- package/dist/services/document-service/index.js +22 -0
- package/dist/services/document-service/index.js.map +1 -0
- package/dist/services/document-service/index.mjs +22 -0
- package/dist/services/document-service/index.mjs.map +1 -0
- package/dist/services/document-service/internationalization.d.ts +7 -0
- package/dist/services/document-service/internationalization.d.ts.map +1 -0
- package/dist/services/document-service/internationalization.js +40 -0
- package/dist/services/document-service/internationalization.js.map +1 -0
- package/dist/services/document-service/internationalization.mjs +40 -0
- package/dist/services/document-service/internationalization.mjs.map +1 -0
- package/dist/services/document-service/middlewares.d.ts +8 -0
- package/dist/services/document-service/middlewares.d.ts.map +1 -0
- package/dist/services/document-service/middlewares.js +46 -0
- package/dist/services/document-service/middlewares.js.map +1 -0
- package/dist/services/document-service/middlewares.mjs +46 -0
- package/dist/services/document-service/middlewares.mjs.map +1 -0
- package/dist/services/document-service/repository-factory.d.ts +3 -0
- package/dist/services/document-service/repository-factory.d.ts.map +1 -0
- package/dist/services/document-service/repository-factory.js +12 -0
- package/dist/services/document-service/repository-factory.js.map +1 -0
- package/dist/services/document-service/repository-factory.mjs +12 -0
- package/dist/services/document-service/repository-factory.mjs.map +1 -0
- package/dist/services/document-service/single-type.d.ts +4 -0
- package/dist/services/document-service/single-type.d.ts.map +1 -0
- package/dist/services/document-service/single-type.js +92 -0
- package/dist/services/document-service/single-type.js.map +1 -0
- package/dist/services/document-service/single-type.mjs +92 -0
- package/dist/services/document-service/single-type.mjs.map +1 -0
- package/dist/services/document-service/transform/data.d.ts +5 -0
- package/dist/services/document-service/transform/data.d.ts.map +1 -0
- package/dist/services/document-service/transform/data.js +13 -0
- package/dist/services/document-service/transform/data.js.map +1 -0
- package/dist/services/document-service/transform/data.mjs +13 -0
- package/dist/services/document-service/transform/data.mjs.map +1 -0
- package/dist/services/document-service/transform/fields.d.ts +5 -0
- package/dist/services/document-service/transform/fields.d.ts.map +1 -0
- package/dist/services/document-service/transform/fields.js +23 -0
- package/dist/services/document-service/transform/fields.js.map +1 -0
- package/dist/services/document-service/transform/fields.mjs +23 -0
- package/dist/services/document-service/transform/fields.mjs.map +1 -0
- package/dist/services/document-service/transform/filters.d.ts +3 -0
- package/dist/services/document-service/transform/filters.d.ts.map +1 -0
- package/dist/services/document-service/transform/filters.js +49 -0
- package/dist/services/document-service/transform/filters.js.map +1 -0
- package/dist/services/document-service/transform/filters.mjs +49 -0
- package/dist/services/document-service/transform/filters.mjs.map +1 -0
- package/dist/services/document-service/transform/id-map.d.ts +23 -0
- package/dist/services/document-service/transform/id-map.d.ts.map +1 -0
- package/dist/services/document-service/transform/id-map.js +72 -0
- package/dist/services/document-service/transform/id-map.js.map +1 -0
- package/dist/services/document-service/transform/id-map.mjs +72 -0
- package/dist/services/document-service/transform/id-map.mjs.map +1 -0
- package/dist/services/document-service/transform/id-transform.d.ts +26 -0
- package/dist/services/document-service/transform/id-transform.d.ts.map +1 -0
- package/dist/services/document-service/transform/id-transform.js +57 -0
- package/dist/services/document-service/transform/id-transform.js.map +1 -0
- package/dist/services/document-service/transform/id-transform.mjs +57 -0
- package/dist/services/document-service/transform/id-transform.mjs.map +1 -0
- package/dist/services/document-service/transform/populate.d.ts +3 -0
- package/dist/services/document-service/transform/populate.d.ts.map +1 -0
- package/dist/services/document-service/transform/populate.js +31 -0
- package/dist/services/document-service/transform/populate.js.map +1 -0
- package/dist/services/document-service/transform/populate.mjs +31 -0
- package/dist/services/document-service/transform/populate.mjs.map +1 -0
- package/dist/services/document-service/transform/relations/extract/data-ids.d.ts +13 -0
- package/dist/services/document-service/transform/relations/extract/data-ids.d.ts.map +1 -0
- package/dist/services/document-service/transform/relations/extract/data-ids.js +76 -0
- package/dist/services/document-service/transform/relations/extract/data-ids.js.map +1 -0
- package/dist/services/document-service/transform/relations/extract/data-ids.mjs +76 -0
- package/dist/services/document-service/transform/relations/extract/data-ids.mjs.map +1 -0
- package/dist/services/document-service/transform/relations/transform/data-ids.d.ts +10 -0
- package/dist/services/document-service/transform/relations/transform/data-ids.d.ts.map +1 -0
- package/dist/services/document-service/transform/relations/transform/data-ids.js +115 -0
- package/dist/services/document-service/transform/relations/transform/data-ids.js.map +1 -0
- package/dist/services/document-service/transform/relations/transform/data-ids.mjs +115 -0
- package/dist/services/document-service/transform/relations/transform/data-ids.mjs.map +1 -0
- package/dist/services/document-service/transform/relations/transform/output-ids.d.ts +4 -0
- package/dist/services/document-service/transform/relations/transform/output-ids.d.ts.map +1 -0
- package/dist/services/document-service/transform/relations/transform/output-ids.js +26 -0
- package/dist/services/document-service/transform/relations/transform/output-ids.js.map +1 -0
- package/dist/services/document-service/transform/relations/transform/output-ids.mjs +26 -0
- package/dist/services/document-service/transform/relations/transform/output-ids.mjs.map +1 -0
- package/dist/services/document-service/transform/relations/utils/data.d.ts +6 -0
- package/dist/services/document-service/transform/relations/utils/data.d.ts.map +1 -0
- package/dist/services/document-service/transform/relations/utils/data.js +12 -0
- package/dist/services/document-service/transform/relations/utils/data.js.map +1 -0
- package/dist/services/document-service/transform/relations/utils/data.mjs +12 -0
- package/dist/services/document-service/transform/relations/utils/data.mjs.map +1 -0
- package/dist/services/document-service/transform/relations/utils/i18n.d.ts +10 -0
- package/dist/services/document-service/transform/relations/utils/i18n.d.ts.map +1 -0
- package/dist/services/document-service/transform/relations/utils/i18n.js +31 -0
- package/dist/services/document-service/transform/relations/utils/i18n.js.map +1 -0
- package/dist/services/document-service/transform/relations/utils/i18n.mjs +31 -0
- package/dist/services/document-service/transform/relations/utils/i18n.mjs.map +1 -0
- package/dist/services/document-service/transform/relations/utils/types.d.ts +8 -0
- package/dist/services/document-service/transform/relations/utils/types.d.ts.map +1 -0
- package/dist/services/document-service/transform/sort.d.ts +5 -0
- package/dist/services/document-service/transform/sort.d.ts.map +1 -0
- package/dist/services/document-service/transform/sort.js +44 -0
- package/dist/services/document-service/transform/sort.js.map +1 -0
- package/dist/services/document-service/transform/sort.mjs +44 -0
- package/dist/services/document-service/transform/sort.mjs.map +1 -0
- package/dist/services/document-service/transform/types.d.ts +13 -0
- package/dist/services/document-service/transform/types.d.ts.map +1 -0
- package/dist/services/document-service/transform/utils.d.ts +9 -0
- package/dist/services/document-service/transform/utils.d.ts.map +1 -0
- package/dist/services/document-service/transform/utils.js +23 -0
- package/dist/services/document-service/transform/utils.js.map +1 -0
- package/dist/services/document-service/transform/utils.mjs +23 -0
- package/dist/services/document-service/transform/utils.mjs.map +1 -0
- package/dist/services/document-service/utils/populate.d.ts +3 -0
- package/dist/services/document-service/utils/populate.d.ts.map +1 -0
- package/dist/services/document-service/utils/populate.js +41 -0
- package/dist/services/document-service/utils/populate.js.map +1 -0
- package/dist/services/document-service/utils/populate.mjs +41 -0
- package/dist/services/document-service/utils/populate.mjs.map +1 -0
- package/dist/services/entity-validator/blocks-validator.d.ts.map +1 -1
- package/dist/services/entity-validator/blocks-validator.js +22 -2
- package/dist/services/entity-validator/blocks-validator.js.map +1 -1
- package/dist/services/entity-validator/blocks-validator.mjs +22 -2
- package/dist/services/entity-validator/blocks-validator.mjs.map +1 -1
- package/dist/services/entity-validator/validators.d.ts.map +1 -1
- package/dist/services/entity-validator/validators.js +7 -8
- package/dist/services/entity-validator/validators.js.map +1 -1
- package/dist/services/entity-validator/validators.mjs +7 -8
- package/dist/services/entity-validator/validators.mjs.map +1 -1
- package/dist/services/server/compose-endpoint.d.ts.map +1 -1
- package/dist/services/server/compose-endpoint.js +3 -0
- package/dist/services/server/compose-endpoint.js.map +1 -1
- package/dist/services/server/compose-endpoint.mjs +3 -0
- package/dist/services/server/compose-endpoint.mjs.map +1 -1
- package/dist/services/webhook-store.js +2 -2
- package/dist/services/webhook-store.js.map +1 -1
- package/dist/services/webhook-store.mjs +2 -2
- package/dist/services/webhook-store.mjs.map +1 -1
- package/package.json +14 -14
- package/dist/core-api/service/get-fetch-params.d.ts +0 -7
- package/dist/core-api/service/get-fetch-params.d.ts.map +0 -1
- package/dist/core-api/service/get-fetch-params.js +0 -14
- package/dist/core-api/service/get-fetch-params.js.map +0 -1
- package/dist/core-api/service/get-fetch-params.mjs +0 -14
- package/dist/core-api/service/get-fetch-params.mjs.map +0 -1
- package/dist/services/document-service/document-service.d.ts.map +0 -1
- package/dist/services/document-service/document-service.js +0 -132
- package/dist/services/document-service/document-service.js.map +0 -1
- package/dist/services/document-service/document-service.mjs +0 -132
- package/dist/services/document-service/document-service.mjs.map +0 -1
- package/dist/services/document-service/middlewares/defaults/draft-and-publish.d.ts +0 -26
- package/dist/services/document-service/middlewares/defaults/draft-and-publish.d.ts.map +0 -1
- package/dist/services/document-service/middlewares/defaults/draft-and-publish.js +0 -58
- package/dist/services/document-service/middlewares/defaults/draft-and-publish.js.map +0 -1
- package/dist/services/document-service/middlewares/defaults/draft-and-publish.mjs +0 -58
- package/dist/services/document-service/middlewares/defaults/draft-and-publish.mjs.map +0 -1
- package/dist/services/document-service/middlewares/defaults/index.d.ts +0 -3
- package/dist/services/document-service/middlewares/defaults/index.d.ts.map +0 -1
- package/dist/services/document-service/middlewares/defaults/index.js +0 -82
- package/dist/services/document-service/middlewares/defaults/index.js.map +0 -1
- package/dist/services/document-service/middlewares/defaults/index.mjs +0 -82
- package/dist/services/document-service/middlewares/defaults/index.mjs.map +0 -1
- package/dist/services/document-service/middlewares/defaults/locales.d.ts +0 -18
- package/dist/services/document-service/middlewares/defaults/locales.d.ts.map +0 -1
- package/dist/services/document-service/middlewares/defaults/locales.js +0 -50
- package/dist/services/document-service/middlewares/defaults/locales.js.map +0 -1
- package/dist/services/document-service/middlewares/defaults/locales.mjs +0 -50
- package/dist/services/document-service/middlewares/defaults/locales.mjs.map +0 -1
- package/dist/services/document-service/middlewares/index.d.ts +0 -11
- package/dist/services/document-service/middlewares/index.d.ts.map +0 -1
- package/dist/services/document-service/middlewares/index.js +0 -59
- package/dist/services/document-service/middlewares/index.js.map +0 -1
- package/dist/services/document-service/middlewares/index.mjs +0 -59
- package/dist/services/document-service/middlewares/index.mjs.map +0 -1
|
@@ -1,11 +1,14 @@
|
|
|
1
|
-
import { mapAsync, contentTypes, convertQueryParams } from "@strapi/utils";
|
|
2
|
-
import {
|
|
3
|
-
import uploadFile from "../utils/upload-files.mjs";
|
|
1
|
+
import { pipeAsync, mapAsync, contentTypes, convertQueryParams } from "@strapi/utils";
|
|
2
|
+
import { set, omit } from "lodash/fp";
|
|
4
3
|
import { getComponents, deleteComponents, createComponents, omitComponentData, updateComponents, cloneComponents } from "../entity-service/components.mjs";
|
|
5
4
|
import { createDocumentId } from "../../utils/transform-content-types-to-models.mjs";
|
|
6
5
|
import { applyTransforms } from "../entity-service/attributes/index.mjs";
|
|
7
6
|
import entityValidator from "../entity-validator/index.mjs";
|
|
8
7
|
import { pickSelectionParams } from "../entity-service/params.mjs";
|
|
8
|
+
import { transformParamsDocumentId, transformOutputDocumentId } from "./transform/id-transform.mjs";
|
|
9
|
+
import { getDeepPopulate } from "./utils/populate.mjs";
|
|
10
|
+
import { transformOutputIds } from "./transform/relations/transform/output-ids.mjs";
|
|
11
|
+
import { transformData } from "./transform/data.mjs";
|
|
9
12
|
const { transformParamsToQuery } = convertQueryParams;
|
|
10
13
|
const createPipeline = (data, context) => {
|
|
11
14
|
return applyTransforms(data, context);
|
|
@@ -17,84 +20,83 @@ const createDocumentEngine = ({
|
|
|
17
20
|
strapi,
|
|
18
21
|
db
|
|
19
22
|
}) => ({
|
|
20
|
-
uploadFiles: uploadFile,
|
|
21
23
|
async findMany(uid, params) {
|
|
22
|
-
const
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
return db.query(uid).findMany(query);
|
|
24
|
+
const query = await pipeAsync(
|
|
25
|
+
(params2) => transformParamsDocumentId(uid, params2, { isDraft: true, locale: params2.locale }),
|
|
26
|
+
(params2) => transformParamsToQuery(uid, params2),
|
|
27
|
+
(query2) => set("where", { ...params?.lookup, ...query2.where }, query2)
|
|
28
|
+
)(params || {});
|
|
29
|
+
return db.query(uid).findMany(query).then((doc) => transformOutputDocumentId(uid, doc));
|
|
29
30
|
},
|
|
30
31
|
async findFirst(uid, params) {
|
|
31
|
-
const query =
|
|
32
|
-
|
|
32
|
+
const query = await pipeAsync(
|
|
33
|
+
(params2) => transformParamsDocumentId(uid, params2, { isDraft: true, locale: params2.locale }),
|
|
34
|
+
(params2) => transformParamsToQuery(uid, params2)
|
|
35
|
+
)(params || {});
|
|
36
|
+
return db.query(uid).findOne({ ...query, where: { ...params?.lookup, ...query.where } }).then((doc) => transformOutputDocumentId(uid, doc));
|
|
33
37
|
},
|
|
34
38
|
async findOne(uid, documentId, params) {
|
|
35
|
-
const query =
|
|
36
|
-
|
|
39
|
+
const query = await pipeAsync(
|
|
40
|
+
(params2) => transformParamsDocumentId(uid, params2, { isDraft: true, locale: params2.locale }),
|
|
41
|
+
(params2) => transformParamsToQuery(uid, params2)
|
|
42
|
+
)(params || {});
|
|
43
|
+
return db.query(uid).findOne({ ...query, where: { ...params?.lookup, ...query.where, documentId } }).then((doc) => transformOutputDocumentId(uid, doc));
|
|
37
44
|
},
|
|
38
45
|
async delete(uid, documentId, params = {}) {
|
|
39
|
-
const query =
|
|
46
|
+
const query = await pipeAsync(
|
|
47
|
+
// TODO: What if we are deleting more than one locale / publication state?
|
|
48
|
+
(params2) => transformParamsDocumentId(uid, params2, { isDraft: true, locale: params2.locale }),
|
|
49
|
+
(params2) => transformParamsToQuery(uid, params2),
|
|
50
|
+
(query2) => set("where", { ...params?.lookup, ...query2.where, documentId }, query2)
|
|
51
|
+
)(params);
|
|
40
52
|
if (params.status === "draft") {
|
|
41
53
|
throw new Error("Cannot delete a draft document");
|
|
42
54
|
}
|
|
43
|
-
const entriesToDelete = await db.query(uid).findMany(
|
|
44
|
-
...query,
|
|
45
|
-
where: {
|
|
46
|
-
...params.lookup,
|
|
47
|
-
...query?.where,
|
|
48
|
-
documentId
|
|
49
|
-
}
|
|
50
|
-
});
|
|
55
|
+
const entriesToDelete = await db.query(uid).findMany(query);
|
|
51
56
|
await mapAsync(entriesToDelete, async (entryToDelete) => {
|
|
52
|
-
|
|
53
|
-
await db.query(uid).delete({ where: { id: entryToDelete.id } });
|
|
54
|
-
await deleteComponents(uid, componentsToDelete, { loadComponents: false });
|
|
57
|
+
await this.deleteEntry(uid, entryToDelete.id);
|
|
55
58
|
});
|
|
56
|
-
return {
|
|
59
|
+
return { deletedEntries: entriesToDelete.length };
|
|
57
60
|
},
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
queryParams = { filter: { documentID: { $in: paramsOrIds } } };
|
|
63
|
-
} else {
|
|
64
|
-
queryParams = paramsOrIds;
|
|
65
|
-
}
|
|
66
|
-
const query = transformParamsToQuery(uid, queryParams || {});
|
|
67
|
-
return db.query(uid).deleteMany(query);
|
|
61
|
+
async deleteEntry(uid, entryId) {
|
|
62
|
+
const componentsToDelete = await getComponents(uid, { id: entryId });
|
|
63
|
+
await db.query(uid).delete({ where: { id: entryId } });
|
|
64
|
+
await deleteComponents(uid, componentsToDelete, { loadComponents: false });
|
|
68
65
|
},
|
|
69
66
|
async create(uid, params) {
|
|
70
|
-
const { data } = params
|
|
71
|
-
|
|
67
|
+
const { data, ...restParams } = await transformParamsDocumentId(uid, params, {
|
|
68
|
+
locale: params.locale,
|
|
69
|
+
// @ts-expect-error - published at is not always present
|
|
70
|
+
// User can not set publishedAt on create, but other methods in the engine can (publish)
|
|
71
|
+
isDraft: !params.data?.publishedAt
|
|
72
|
+
});
|
|
73
|
+
const query = transformParamsToQuery(uid, pickSelectionParams(restParams));
|
|
74
|
+
if (!params.data) {
|
|
72
75
|
throw new Error("Create requires data attribute");
|
|
73
76
|
}
|
|
74
|
-
const
|
|
75
|
-
const validData = await entityValidator.validateEntityCreation(
|
|
76
|
-
isDraft:
|
|
77
|
+
const contentType = strapi.contentType(uid);
|
|
78
|
+
const validData = await entityValidator.validateEntityCreation(contentType, data, {
|
|
79
|
+
isDraft: !data.publishedAt,
|
|
77
80
|
locale: params?.locale
|
|
78
81
|
});
|
|
79
82
|
const componentData = await createComponents(uid, validData);
|
|
80
83
|
const entryData = createPipeline(
|
|
81
|
-
Object.assign(omitComponentData(
|
|
82
|
-
{
|
|
83
|
-
contentType: model
|
|
84
|
-
}
|
|
84
|
+
Object.assign(omitComponentData(contentType, validData), componentData),
|
|
85
|
+
{ contentType }
|
|
85
86
|
);
|
|
86
|
-
|
|
87
|
-
return db.query(uid).create({ ...query, data: entryData });
|
|
87
|
+
return db.query(uid).create({ ...query, data: entryData }).then((doc) => transformOutputDocumentId(uid, doc));
|
|
88
88
|
},
|
|
89
89
|
// NOTE: What happens if user doesn't provide specific publications state and locale to update?
|
|
90
90
|
async update(uid, documentId, params) {
|
|
91
|
-
const { data } = params || {}
|
|
92
|
-
|
|
93
|
-
|
|
91
|
+
const { data, ...restParams } = await transformParamsDocumentId(uid, params || {}, {
|
|
92
|
+
isDraft: true,
|
|
93
|
+
locale: params?.locale
|
|
94
|
+
});
|
|
95
|
+
const query = transformParamsToQuery(uid, pickSelectionParams(restParams || {}));
|
|
96
|
+
const model = strapi.contentType(uid);
|
|
94
97
|
const entryToUpdate = await db.query(uid).findOne({ ...query, where: { ...params?.lookup, ...query?.where, documentId } });
|
|
95
|
-
if (!entryToUpdate)
|
|
98
|
+
if (!entryToUpdate)
|
|
96
99
|
return null;
|
|
97
|
-
}
|
|
98
100
|
const validData = await entityValidator.validateEntityUpdate(
|
|
99
101
|
model,
|
|
100
102
|
data,
|
|
@@ -110,17 +112,23 @@ const createDocumentEngine = ({
|
|
|
110
112
|
Object.assign(omitComponentData(model, validData), componentData),
|
|
111
113
|
{ contentType: model }
|
|
112
114
|
);
|
|
113
|
-
return db.query(uid).update({ ...query, where: { id: entryToUpdate.id }, data: entryData });
|
|
115
|
+
return db.query(uid).update({ ...query, where: { id: entryToUpdate.id }, data: entryData }).then((doc) => transformOutputDocumentId(uid, doc));
|
|
114
116
|
},
|
|
115
117
|
async count(uid, params = void 0) {
|
|
116
|
-
const query =
|
|
117
|
-
|
|
118
|
+
const query = await pipeAsync(
|
|
119
|
+
(params2) => transformParamsDocumentId(uid, params2, { isDraft: true, locale: params2.locale }),
|
|
120
|
+
(params2) => transformParamsToQuery(uid, params2),
|
|
121
|
+
(query2) => set("where", { ...params?.lookup, ...query2.where }, query2)
|
|
122
|
+
)(params || {});
|
|
118
123
|
return db.query(uid).count(query);
|
|
119
124
|
},
|
|
120
125
|
async clone(uid, documentId, params) {
|
|
121
|
-
const { data
|
|
122
|
-
|
|
123
|
-
|
|
126
|
+
const { data, ...restParams } = await transformParamsDocumentId(uid, params || {}, {
|
|
127
|
+
isDraft: true,
|
|
128
|
+
locale: params?.locale
|
|
129
|
+
});
|
|
130
|
+
const query = transformParamsToQuery(uid, pickSelectionParams(restParams));
|
|
131
|
+
const model = strapi.contentType(uid);
|
|
124
132
|
const entries = await db.query(uid).findMany({
|
|
125
133
|
...query,
|
|
126
134
|
where: { ...params?.lookup, ...query.where, documentId }
|
|
@@ -147,7 +155,7 @@ const createDocumentEngine = ({
|
|
|
147
155
|
...query,
|
|
148
156
|
// Allows entityData to override the documentId (e.g. when publishing)
|
|
149
157
|
data: { documentId: newDocumentId, ...entityData, locale: entryToClone.locale }
|
|
150
|
-
});
|
|
158
|
+
}).then((doc) => transformOutputDocumentId(uid, doc));
|
|
151
159
|
});
|
|
152
160
|
return { id: newDocumentId, versions };
|
|
153
161
|
},
|
|
@@ -157,23 +165,46 @@ const createDocumentEngine = ({
|
|
|
157
165
|
...params,
|
|
158
166
|
lookup: { ...params?.lookup, publishedAt: { $ne: null } }
|
|
159
167
|
});
|
|
160
|
-
const
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
168
|
+
const entriesToPublish = await strapi.db?.query(uid).findMany({
|
|
169
|
+
where: {
|
|
170
|
+
...params?.lookup,
|
|
171
|
+
documentId,
|
|
172
|
+
publishedAt: null
|
|
173
|
+
},
|
|
174
|
+
populate: getDeepPopulate(uid)
|
|
164
175
|
});
|
|
165
|
-
|
|
176
|
+
const publishedEntries = await mapAsync(
|
|
177
|
+
entriesToPublish,
|
|
178
|
+
pipeAsync(
|
|
179
|
+
set("publishedAt", /* @__PURE__ */ new Date()),
|
|
180
|
+
set("documentId", documentId),
|
|
181
|
+
omit("id"),
|
|
182
|
+
// draft entryId -> documentId
|
|
183
|
+
(entry) => transformOutputIds(uid, entry),
|
|
184
|
+
// documentId -> published entryId
|
|
185
|
+
(entry) => {
|
|
186
|
+
const opts = { uid, locale: entry.locale, isDraft: false, allowMissingId: true };
|
|
187
|
+
return transformData(entry, opts);
|
|
188
|
+
},
|
|
189
|
+
// Create the published entry
|
|
190
|
+
(data) => this.create(uid, { ...params, data, locale: data.locale })
|
|
191
|
+
)
|
|
192
|
+
);
|
|
193
|
+
return { versions: publishedEntries };
|
|
166
194
|
},
|
|
167
195
|
async unpublish(uid, documentId, params) {
|
|
168
196
|
return this.delete(uid, documentId, {
|
|
169
197
|
...params,
|
|
170
198
|
lookup: { ...params?.lookup, publishedAt: { $ne: null } }
|
|
171
|
-
});
|
|
199
|
+
}).then(({ deletedEntries }) => ({ versions: deletedEntries }));
|
|
172
200
|
},
|
|
173
201
|
/**
|
|
174
202
|
* Steps:
|
|
175
203
|
* - Delete the matching draft versions (publishedAt = null)
|
|
176
204
|
* - Clone the matching published versions into draft versions
|
|
205
|
+
*
|
|
206
|
+
* If the document has a published version, the draft version will be created from the published version.
|
|
207
|
+
* If the document has no published version, the version will be removed.
|
|
177
208
|
*/
|
|
178
209
|
async discardDraft(uid, documentId, params) {
|
|
179
210
|
await this.delete(uid, documentId, {
|
|
@@ -181,21 +212,39 @@ const createDocumentEngine = ({
|
|
|
181
212
|
// Delete all drafts that match query
|
|
182
213
|
lookup: { ...params?.lookup, publishedAt: null }
|
|
183
214
|
});
|
|
184
|
-
const
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
215
|
+
const entriesToDraft = await strapi.db?.query(uid).findMany({
|
|
216
|
+
where: {
|
|
217
|
+
...params?.lookup,
|
|
218
|
+
documentId,
|
|
219
|
+
publishedAt: { $ne: null }
|
|
220
|
+
},
|
|
221
|
+
populate: getDeepPopulate(uid)
|
|
190
222
|
});
|
|
191
|
-
|
|
223
|
+
const draftEntries = await mapAsync(
|
|
224
|
+
entriesToDraft,
|
|
225
|
+
pipeAsync(
|
|
226
|
+
set("publishedAt", null),
|
|
227
|
+
set("documentId", documentId),
|
|
228
|
+
omit("id"),
|
|
229
|
+
// published entryId -> document
|
|
230
|
+
(entry) => transformOutputIds(uid, entry),
|
|
231
|
+
// documentId -> draft entryId
|
|
232
|
+
(entry) => {
|
|
233
|
+
const opts = { uid, locale: entry.locale, isDraft: true, allowMissingId: true };
|
|
234
|
+
return transformData(entry, opts);
|
|
235
|
+
},
|
|
236
|
+
// Create the draft entry
|
|
237
|
+
(data) => this.create(uid, { ...params, locale: data.locale, data })
|
|
238
|
+
)
|
|
239
|
+
);
|
|
240
|
+
return { versions: draftEntries };
|
|
192
241
|
}
|
|
193
242
|
});
|
|
194
|
-
const
|
|
243
|
+
const createDocumentEngine$1 = (ctx) => {
|
|
195
244
|
const implementation = createDocumentEngine(ctx);
|
|
196
245
|
return implementation;
|
|
197
246
|
};
|
|
198
247
|
export {
|
|
199
|
-
|
|
248
|
+
createDocumentEngine$1 as default
|
|
200
249
|
};
|
|
201
250
|
//# sourceMappingURL=document-engine.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"document-engine.mjs","sources":["../../../src/services/document-service/document-engine.ts"],"sourcesContent":["import type { Database } from '@strapi/database';\nimport type { Common, Documents, Schema, Shared, Strapi } from '@strapi/types';\nimport { contentTypes as contentTypesUtils, convertQueryParams, mapAsync } from '@strapi/utils';\n\nimport { isArray, omit } from 'lodash/fp';\nimport uploadFiles from '../utils/upload-files';\n\nimport {\n cloneComponents,\n createComponents,\n deleteComponents,\n getComponents,\n omitComponentData,\n updateComponents,\n} from '../entity-service/components';\n\nimport { createDocumentId } from '../../utils/transform-content-types-to-models';\nimport { applyTransforms } from '../entity-service/attributes';\nimport entityValidator from '../entity-validator';\nimport { pickSelectionParams } from './params';\n\nconst { transformParamsToQuery } = convertQueryParams;\n\n/**\n * TODO: Sanitization / validation built-in\n * TODO: i18n - Move logic to i18n package\n * TODO: Webhooks\n * TODO: Audit logs\n * TODO: Entity Validation - Uniqueness across same locale and publication status\n * TODO: File upload\n * TODO: replace 'any'\n * TODO: availableLocales\n *\n */\ntype Context = {\n contentType: Schema.ContentType;\n};\n\nconst createPipeline = (data: Record<string, unknown>, context: Context) => {\n return applyTransforms(data, context);\n};\n\nconst updatePipeline = (data: Record<string, unknown>, context: Context) => {\n return applyTransforms(data, context);\n};\n\nconst createDocumentEngine = ({\n strapi,\n db,\n}: {\n strapi: Strapi;\n db: Database;\n}): Documents.Engine => ({\n uploadFiles,\n\n async findMany(uid, params) {\n const { kind } = strapi.getModel(uid);\n\n const query = transformParamsToQuery(uid, params || ({} as any));\n query.where = { ...params?.lookup, ...query.where };\n\n if (kind === 'singleType') {\n return db.query(uid).findOne(query);\n }\n\n return db.query(uid).findMany(query);\n },\n\n async findFirst(uid, params) {\n const query = transformParamsToQuery(uid, params || ({} as any));\n\n return db.query(uid).findOne({ ...query, where: { ...params?.lookup, ...query.where } });\n },\n\n async findOne(uid, documentId, params) {\n const query = transformParamsToQuery(uid, params || ({} as any));\n return db\n .query(uid)\n .findOne({ ...query, where: { ...params?.lookup, ...query.where, documentId } });\n },\n\n async delete(uid, documentId, params = {} as any) {\n const query = transformParamsToQuery(uid, params as any);\n\n if (params.status === 'draft') {\n throw new Error('Cannot delete a draft document');\n }\n\n const entriesToDelete = await db.query(uid).findMany({\n ...query,\n where: {\n ...params.lookup,\n ...query?.where,\n documentId,\n },\n });\n\n // Delete all matched entries and its components\n await mapAsync(entriesToDelete, async (entryToDelete: any) => {\n const componentsToDelete = await getComponents(uid, entryToDelete);\n await db.query(uid).delete({ where: { id: entryToDelete.id } });\n await deleteComponents(uid, componentsToDelete as any, { loadComponents: false });\n });\n\n // TODO: Change return value to actual count\n return { versions: entriesToDelete };\n },\n\n // TODO: should we provide two separate methods?\n async deleteMany(uid, paramsOrIds) {\n let queryParams;\n if (isArray(paramsOrIds)) {\n queryParams = { filter: { documentID: { $in: paramsOrIds } } };\n } else {\n queryParams = paramsOrIds;\n }\n\n const query = transformParamsToQuery(uid, queryParams || ({} as any));\n\n return db.query(uid).deleteMany(query);\n },\n\n async create(uid, params) {\n // TODO: Entity validator.\n // TODO: File upload - Probably in the lifecycles?\n const { data } = params;\n\n if (!data) {\n throw new Error('Create requires data attribute');\n }\n\n const model = strapi.getModel(uid) as Shared.ContentTypes[Common.UID.ContentType];\n\n const validData = await entityValidator.validateEntityCreation(model, data, {\n isDraft: true,\n locale: params?.locale,\n });\n\n const componentData = await createComponents(uid, validData);\n const entryData = createPipeline(\n Object.assign(omitComponentData(model, validData), componentData),\n {\n contentType: model,\n }\n );\n\n // select / populate\n const query = transformParamsToQuery(uid, pickSelectionParams(params) as any);\n\n return db.query(uid).create({ ...query, data: entryData });\n },\n\n // NOTE: What happens if user doesn't provide specific publications state and locale to update?\n async update(uid, documentId, params) {\n // TODO: Prevent updating a published document\n // TODO: Entity validator.\n // TODO: File upload\n const { data } = params || {};\n const model = strapi.getModel(uid) as Shared.ContentTypes[Common.UID.ContentType];\n\n const query = transformParamsToQuery(uid, pickSelectionParams(params || {}) as any);\n\n // Find all locales of the document\n const entryToUpdate = await db\n .query(uid)\n .findOne({ ...query, where: { ...params?.lookup, ...query?.where, documentId } });\n\n // Document does not exist\n if (!entryToUpdate) {\n return null;\n }\n\n const validData = await entityValidator.validateEntityUpdate(\n model,\n data,\n {\n isDraft: true, // Always update the draft version\n locale: params?.locale,\n },\n entryToUpdate\n );\n\n const componentData = await updateComponents(uid, entryToUpdate, validData);\n const entryData = updatePipeline(\n Object.assign(omitComponentData(model, validData), componentData),\n { contentType: model }\n );\n\n return db.query(uid).update({ ...query, where: { id: entryToUpdate.id }, data: entryData });\n },\n\n async count(uid, params = undefined) {\n const query = transformParamsToQuery(uid, params || ({} as any));\n query.where = { ...params?.lookup, ...query.where };\n\n return db.query(uid).count(query);\n },\n\n async clone(uid, documentId, params) {\n // TODO: File upload\n // TODO: Entity validator.\n const { data = {} as any } = params!;\n\n const model = strapi.getModel(uid);\n const query = transformParamsToQuery(uid, pickSelectionParams(params) as any);\n\n // Find all locales of the document\n const entries = await db.query(uid).findMany({\n ...query,\n where: { ...params?.lookup, ...query.where, documentId },\n });\n\n // Document does not exist\n if (!entries.length) {\n return null;\n }\n\n const newDocumentId = createDocumentId();\n\n const versions = await mapAsync(entries, async (entryToClone: any) => {\n const isDraft = contentTypesUtils.isDraft(data);\n // Todo: Merge data with entry to clone\n const validData = await entityValidator.validateEntityUpdate(\n model,\n // Omit id fields, the cloned entity id will be generated by the database\n omit(['id'], data),\n { isDraft, ...params?.lookup },\n entryToClone\n );\n\n const componentData = await cloneComponents(uid, entryToClone, validData);\n const entityData = createPipeline(\n Object.assign(omitComponentData(model, validData), componentData),\n { contentType: model }\n );\n\n // TODO: Transform params to query\n return db.query(uid).clone(entryToClone.id, {\n ...query,\n // Allows entityData to override the documentId (e.g. when publishing)\n data: { documentId: newDocumentId, ...entityData, locale: entryToClone.locale },\n });\n });\n\n return { id: newDocumentId, versions };\n },\n\n // TODO: Handle relations so they target the published version\n async publish(uid, documentId, params) {\n // Delete already published versions that match the locales to be published\n await this.delete(uid, documentId, {\n ...params,\n lookup: { ...params?.lookup, publishedAt: { $ne: null } },\n });\n\n // Clone every draft version to be published\n const clonedDocuments = (await this.clone(uid, documentId, {\n ...(params || {}),\n // @ts-expect-error - Generic type does not have publishedAt attribute by default\n data: { documentId, publishedAt: new Date() },\n })) as any;\n\n // TODO: Return actual count\n return { versions: clonedDocuments?.versions || [] };\n },\n\n async unpublish(uid, documentId, params) {\n // Delete all published versions\n return this.delete(uid, documentId, {\n ...params,\n lookup: { ...params?.lookup, publishedAt: { $ne: null } },\n }) as any;\n },\n\n /**\n * Steps:\n * - Delete the matching draft versions (publishedAt = null)\n * - Clone the matching published versions into draft versions\n */\n async discardDraft(uid, documentId, params) {\n // Delete draft versions, clone published versions into draft versions\n await this.delete(uid, documentId, {\n ...params,\n // Delete all drafts that match query\n lookup: { ...params?.lookup, publishedAt: null },\n });\n\n // Clone published versions into draft versions\n const clonedDocuments = (await this.clone(uid, documentId, {\n ...(params || {}),\n // Clone only published versions\n lookup: { ...params?.lookup, publishedAt: { $ne: null } },\n // @ts-expect-error - Generic type does not have publishedAt attribute by default\n data: { documentId, publishedAt: null },\n })) as any;\n\n return { versions: clonedDocuments?.versions || [] };\n },\n});\n\nexport default (ctx: { strapi: Strapi; db: Database }): Documents.Engine => {\n const implementation = createDocumentEngine(ctx);\n\n // TODO: Wrap with database error handling\n return implementation;\n};\n"],"names":["uploadFiles","contentTypesUtils"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"document-engine.mjs","sources":["../../../src/services/document-service/document-engine.ts"],"sourcesContent":["import type { Database } from '@strapi/database';\nimport type { Documents, Schema, Strapi } from '@strapi/types';\nimport {\n contentTypes as contentTypesUtils,\n convertQueryParams,\n mapAsync,\n pipeAsync,\n} from '@strapi/utils';\n\nimport { omit, set } from 'lodash/fp';\n\nimport {\n cloneComponents,\n createComponents,\n deleteComponents,\n getComponents,\n omitComponentData,\n updateComponents,\n} from '../entity-service/components';\n\nimport { createDocumentId } from '../../utils/transform-content-types-to-models';\nimport { applyTransforms } from '../entity-service/attributes';\nimport entityValidator from '../entity-validator';\nimport { pickSelectionParams } from './params';\nimport { transformParamsDocumentId, transformOutputDocumentId } from './transform/id-transform';\nimport { getDeepPopulate } from './utils/populate';\nimport { transformOutputIds } from './transform/relations/transform/output-ids';\nimport { transformData } from './transform/data';\n\nconst { transformParamsToQuery } = convertQueryParams;\n\n/**\n * TODO: Sanitization / validation built-in\n * TODO: i18n - Move logic to i18n package\n * TODO: Webhooks\n * TODO: Audit logs\n * TODO: replace 'any'\n * TODO: availableLocales\n *\n */\ntype Context = {\n contentType: Schema.ContentType;\n};\n\nconst createPipeline = (data: Record<string, unknown>, context: Context) => {\n return applyTransforms(data, context);\n};\n\nconst updatePipeline = (data: Record<string, unknown>, context: Context) => {\n return applyTransforms(data, context);\n};\n\nconst createDocumentEngine = ({\n strapi,\n db,\n}: {\n strapi: Strapi;\n db: Database;\n}): Documents.Engine => ({\n async findMany(uid, params) {\n const query = await pipeAsync(\n (params) => transformParamsDocumentId(uid, params, { isDraft: true, locale: params.locale }),\n (params) => transformParamsToQuery(uid, params),\n (query) => set('where', { ...params?.lookup, ...query.where }, query)\n )(params || {});\n\n return db\n .query(uid)\n .findMany(query)\n .then((doc) => transformOutputDocumentId(uid, doc));\n },\n\n async findFirst(uid, params) {\n const query = await pipeAsync(\n (params) => transformParamsDocumentId(uid, params, { isDraft: true, locale: params.locale }),\n (params) => transformParamsToQuery(uid, params)\n )(params || {});\n\n return db\n .query(uid)\n .findOne({ ...query, where: { ...params?.lookup, ...query.where } })\n .then((doc) => transformOutputDocumentId(uid, doc));\n },\n\n async findOne(uid, documentId, params) {\n const query = await pipeAsync(\n (params) => transformParamsDocumentId(uid, params, { isDraft: true, locale: params.locale }),\n (params) => transformParamsToQuery(uid, params)\n )(params || {});\n\n return db\n .query(uid)\n .findOne({ ...query, where: { ...params?.lookup, ...query.where, documentId } })\n .then((doc) => transformOutputDocumentId(uid, doc));\n },\n\n async delete(uid, documentId, params = {} as any) {\n const query = await pipeAsync(\n // TODO: What if we are deleting more than one locale / publication state?\n (params) => transformParamsDocumentId(uid, params, { isDraft: true, locale: params.locale }),\n (params) => transformParamsToQuery(uid, params),\n (query) => set('where', { ...params?.lookup, ...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 db.query(uid).findMany(query);\n\n // Delete all matched entries and its components\n await mapAsync(entriesToDelete, async (entryToDelete: any) => {\n await this.deleteEntry(uid, entryToDelete.id);\n });\n\n return { deletedEntries: entriesToDelete.length };\n },\n\n async deleteEntry(uid, entryId) {\n const componentsToDelete = await getComponents(uid, { id: entryId });\n\n await db.query(uid).delete({ where: { id: entryId } });\n\n await deleteComponents(uid, componentsToDelete as any, { loadComponents: false });\n },\n\n async create(uid, params) {\n // Param parsing\n const { data, ...restParams } = await transformParamsDocumentId(uid, params, {\n locale: params.locale,\n // @ts-expect-error - published at is not always present\n // User can not set publishedAt on create, but other methods in the engine can (publish)\n isDraft: !params.data?.publishedAt,\n });\n\n const query = transformParamsToQuery(uid, pickSelectionParams(restParams) as any); // select / populate\n\n // Validation\n if (!params.data) {\n throw new Error('Create requires data attribute');\n }\n\n const contentType = strapi.contentType(uid);\n\n const validData = await entityValidator.validateEntityCreation(contentType, data, {\n isDraft: !data.publishedAt,\n locale: params?.locale,\n });\n\n // Component handling\n const componentData = await createComponents(uid, validData as any);\n const entryData = createPipeline(\n Object.assign(omitComponentData(contentType, validData), componentData),\n { contentType }\n );\n\n return db\n .query(uid)\n .create({ ...query, data: entryData })\n .then((doc) => transformOutputDocumentId(uid, doc));\n },\n\n // NOTE: What happens if user doesn't provide specific publications state and locale to update?\n async update(uid, documentId, params) {\n // TODO: Prevent updating a published document\n // TODO: File upload\n\n // Param parsing\n const { data, ...restParams } = await transformParamsDocumentId(uid, params || {}, {\n isDraft: true,\n locale: params?.locale,\n });\n const query = transformParamsToQuery(uid, pickSelectionParams(restParams || {}) as any);\n\n // Validation\n const model = strapi.contentType(uid);\n // Find if document exists\n const entryToUpdate = await db\n .query(uid)\n .findOne({ ...query, where: { ...params?.lookup, ...query?.where, documentId } });\n if (!entryToUpdate) return null;\n\n const validData = await entityValidator.validateEntityUpdate(\n model,\n data,\n {\n isDraft: true, // Always update the draft version\n locale: params?.locale,\n },\n entryToUpdate\n );\n\n // Component handling\n const componentData = await updateComponents(uid, entryToUpdate, validData as any);\n const entryData = updatePipeline(\n Object.assign(omitComponentData(model, validData), componentData),\n { contentType: model }\n );\n\n return db\n .query(uid)\n .update({ ...query, where: { id: entryToUpdate.id }, data: entryData })\n .then((doc) => transformOutputDocumentId(uid, doc));\n },\n\n async count(uid, params = undefined) {\n const query = await pipeAsync(\n (params) => transformParamsDocumentId(uid, params, { isDraft: true, locale: params.locale }),\n (params) => transformParamsToQuery(uid, params),\n (query) => set('where', { ...params?.lookup, ...query.where }, query)\n )(params || {});\n\n return db.query(uid).count(query);\n },\n\n async clone(uid, documentId, params) {\n // TODO: File upload\n // Param parsing\n const { data, ...restParams } = await transformParamsDocumentId(uid, params || {}, {\n isDraft: true,\n locale: params?.locale,\n });\n const query = transformParamsToQuery(uid, pickSelectionParams(restParams) as any);\n\n // Validation\n const model = strapi.contentType(uid);\n // Find all locales of the document\n const entries = await db.query(uid).findMany({\n ...query,\n where: { ...params?.lookup, ...query.where, documentId },\n });\n\n // Document does not exist\n if (!entries.length) {\n return null;\n }\n\n const newDocumentId = createDocumentId();\n\n const versions = await mapAsync(entries, async (entryToClone: any) => {\n const isDraft = contentTypesUtils.isDraft(data);\n // Todo: Merge data with entry to clone\n const validData = await entityValidator.validateEntityUpdate(\n model,\n // Omit id fields, the cloned entity id will be generated by the database\n omit(['id'], data),\n { isDraft, ...params?.lookup },\n entryToClone\n );\n\n const componentData = await cloneComponents(uid, entryToClone, validData);\n const entityData = createPipeline(\n Object.assign(omitComponentData(model, validData), componentData),\n { contentType: model }\n );\n\n // TODO: Transform params to query\n return db\n .query(uid)\n .clone(entryToClone.id, {\n ...query,\n // Allows entityData to override the documentId (e.g. when publishing)\n data: { documentId: newDocumentId, ...entityData, locale: entryToClone.locale },\n })\n .then((doc) => transformOutputDocumentId(uid, doc));\n });\n\n return { id: newDocumentId, versions };\n },\n\n // TODO: Handle relations so they target the published version\n async publish(uid, documentId, params) {\n // Delete already published versions that match the locales to be published\n await this.delete(uid, documentId, {\n ...params,\n lookup: { ...params?.lookup, publishedAt: { $ne: null } },\n });\n\n // Get deep populate\n const entriesToPublish = await strapi.db?.query(uid).findMany({\n where: {\n ...params?.lookup,\n documentId,\n publishedAt: null,\n },\n populate: getDeepPopulate(uid),\n });\n\n // Transform draft entry data and create published versions\n const publishedEntries = await mapAsync(\n entriesToPublish,\n pipeAsync(\n set('publishedAt', new Date()),\n set('documentId', documentId),\n omit('id'),\n // draft entryId -> documentId\n (entry) => transformOutputIds(uid, entry),\n // documentId -> published entryId\n (entry) => {\n const opts = { uid, locale: entry.locale, isDraft: false, allowMissingId: true };\n return transformData(entry, opts);\n },\n // Create the published entry\n (data) => this.create(uid, { ...params, data, locale: data.locale })\n )\n );\n\n return { versions: publishedEntries };\n },\n\n async unpublish(uid, documentId, params) {\n // Delete all published versions\n return this.delete(uid, documentId, {\n ...params,\n lookup: { ...params?.lookup, publishedAt: { $ne: null } },\n }).then(({ deletedEntries }) => ({ versions: deletedEntries })) as any;\n },\n\n /**\n * Steps:\n * - Delete the matching draft versions (publishedAt = null)\n * - Clone the matching published versions into draft versions\n *\n * If the document has a published version, the draft version will be created from the published version.\n * If the document has no published version, the version will be removed.\n */\n async discardDraft(uid, documentId, params) {\n // Delete draft versions, clone published versions into draft versions\n await this.delete(uid, documentId, {\n ...params,\n // Delete all drafts that match query\n lookup: { ...params?.lookup, publishedAt: null },\n });\n\n // Get deep populate of published versions\n const entriesToDraft = await strapi.db?.query(uid).findMany({\n where: {\n ...params?.lookup,\n documentId,\n publishedAt: { $ne: null },\n },\n populate: getDeepPopulate(uid),\n });\n\n // Transform published entry data and create draft versions\n const draftEntries = await mapAsync(\n entriesToDraft,\n pipeAsync(\n set('publishedAt', null),\n set('documentId', documentId),\n omit('id'),\n // published entryId -> document\n (entry) => transformOutputIds(uid, entry),\n // documentId -> draft entryId\n (entry) => {\n const opts = { uid, locale: entry.locale, isDraft: true, allowMissingId: true };\n return transformData(entry, opts);\n },\n // Create the draft entry\n (data) => this.create(uid, { ...params, locale: data.locale, data })\n )\n );\n\n return { versions: draftEntries };\n },\n});\n\nexport default (ctx: { strapi: Strapi; db: Database }): Documents.Engine => {\n const implementation = createDocumentEngine(ctx);\n\n // TODO: Wrap with database error handling\n return implementation;\n};\n"],"names":["params","query","contentTypesUtils"],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { Documents } from '@strapi/types';
|
|
2
|
+
type ParamsTransform = (params: Documents.Params.All) => Documents.Params.All;
|
|
3
|
+
/**
|
|
4
|
+
* Sets status to draft only
|
|
5
|
+
*/
|
|
6
|
+
export declare const setStatusToDraft: ParamsTransform;
|
|
7
|
+
/**
|
|
8
|
+
* Adds a default status of `draft` to the params
|
|
9
|
+
*/
|
|
10
|
+
export declare const defaultToDraft: ParamsTransform;
|
|
11
|
+
/**
|
|
12
|
+
* In mutating actions we don't want user to set the publishedAt attribute.
|
|
13
|
+
*/
|
|
14
|
+
export declare const filterDataPublishedAt: ParamsTransform;
|
|
15
|
+
/**
|
|
16
|
+
* Add status lookup query to the params
|
|
17
|
+
*/
|
|
18
|
+
export declare const statusToLookup: ParamsTransform;
|
|
19
|
+
/**
|
|
20
|
+
* Translate publication status parameter into the data that will be saved
|
|
21
|
+
*/
|
|
22
|
+
export declare const statusToData: ParamsTransform;
|
|
23
|
+
export {};
|
|
24
|
+
//# sourceMappingURL=draft-and-publish.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"draft-and-publish.d.ts","sourceRoot":"","sources":["../../../src/services/document-service/draft-and-publish.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAG1C,KAAK,eAAe,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC,MAAM,CAAC,GAAG,KAAK,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC;AAE9E;;GAEG;AACH,eAAO,MAAM,gBAAgB,EAAE,eAA0C,CAAC;AAE1E;;GAEG;AACH,eAAO,MAAM,cAAc,EAAE,eAO5B,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,qBAAqB,EAAE,eAMnC,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,cAAc,EAAE,eAa5B,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,YAAY,EAAE,eAW1B,CAAC"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
+
const _ = require("lodash/fp");
|
|
4
|
+
const setStatusToDraft = _.assoc("status", "draft");
|
|
5
|
+
const defaultToDraft = (params) => {
|
|
6
|
+
if (!params.status || params.status !== "published") {
|
|
7
|
+
return setStatusToDraft(params);
|
|
8
|
+
}
|
|
9
|
+
return params;
|
|
10
|
+
};
|
|
11
|
+
const filterDataPublishedAt = (params) => {
|
|
12
|
+
if (params?.data?.publishedAt) {
|
|
13
|
+
return _.assoc(["data", "publishedAt"], null, params);
|
|
14
|
+
}
|
|
15
|
+
return params;
|
|
16
|
+
};
|
|
17
|
+
const statusToLookup = (params) => {
|
|
18
|
+
const lookup = params.lookup || {};
|
|
19
|
+
switch (params?.status) {
|
|
20
|
+
case "published":
|
|
21
|
+
return _.assoc(["lookup", "publishedAt"], { $notNull: true }, params);
|
|
22
|
+
case "draft":
|
|
23
|
+
return _.assoc(["lookup", "publishedAt"], { $null: true }, params);
|
|
24
|
+
}
|
|
25
|
+
return _.assoc("lookup", lookup, params);
|
|
26
|
+
};
|
|
27
|
+
const statusToData = (params) => {
|
|
28
|
+
switch (params?.status) {
|
|
29
|
+
case "published":
|
|
30
|
+
return _.assoc(["data", "publishedAt"], /* @__PURE__ */ new Date(), params);
|
|
31
|
+
case "draft":
|
|
32
|
+
return _.assoc(["data", "publishedAt"], null, params);
|
|
33
|
+
}
|
|
34
|
+
return params;
|
|
35
|
+
};
|
|
36
|
+
exports.defaultToDraft = defaultToDraft;
|
|
37
|
+
exports.filterDataPublishedAt = filterDataPublishedAt;
|
|
38
|
+
exports.setStatusToDraft = setStatusToDraft;
|
|
39
|
+
exports.statusToData = statusToData;
|
|
40
|
+
exports.statusToLookup = statusToLookup;
|
|
41
|
+
//# sourceMappingURL=draft-and-publish.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"draft-and-publish.js","sources":["../../../src/services/document-service/draft-and-publish.ts"],"sourcesContent":["import { Documents } from '@strapi/types';\nimport { assoc } from 'lodash/fp';\n\ntype ParamsTransform = (params: Documents.Params.All) => Documents.Params.All;\n\n/**\n * Sets status to draft only\n */\nexport const setStatusToDraft: ParamsTransform = assoc('status', 'draft');\n\n/**\n * Adds a default status of `draft` to the params\n */\nexport const defaultToDraft: ParamsTransform = (params) => {\n // Default to draft if no status is provided or it's invalid\n if (!params.status || params.status !== 'published') {\n return setStatusToDraft(params);\n }\n\n return params;\n};\n\n/**\n * In mutating actions we don't want user to set the publishedAt attribute.\n */\nexport const filterDataPublishedAt: ParamsTransform = (params) => {\n if (params?.data?.publishedAt) {\n return assoc(['data', 'publishedAt'], null, params);\n }\n\n return params;\n};\n\n/**\n * Add status lookup query to the params\n */\nexport const statusToLookup: ParamsTransform = (params) => {\n const lookup = params.lookup || {};\n\n switch (params?.status) {\n case 'published':\n return assoc(['lookup', 'publishedAt'], { $notNull: true }, params);\n case 'draft':\n return assoc(['lookup', 'publishedAt'], { $null: true }, params);\n default:\n break;\n }\n\n return assoc('lookup', lookup, params);\n};\n\n/**\n * Translate publication status parameter into the data that will be saved\n */\nexport const statusToData: ParamsTransform = (params) => {\n switch (params?.status) {\n case 'published':\n return assoc(['data', 'publishedAt'], new Date(), params);\n case 'draft':\n return assoc(['data', 'publishedAt'], null, params);\n default:\n break;\n }\n\n return params;\n};\n"],"names":["assoc"],"mappings":";;;AAQa,MAAA,mBAAoCA,EAAAA,MAAM,UAAU,OAAO;AAK3D,MAAA,iBAAkC,CAAC,WAAW;AAEzD,MAAI,CAAC,OAAO,UAAU,OAAO,WAAW,aAAa;AACnD,WAAO,iBAAiB,MAAM;AAAA,EAChC;AAEO,SAAA;AACT;AAKa,MAAA,wBAAyC,CAAC,WAAW;AAC5D,MAAA,QAAQ,MAAM,aAAa;AAC7B,WAAOA,EAAAA,MAAM,CAAC,QAAQ,aAAa,GAAG,MAAM,MAAM;AAAA,EACpD;AAEO,SAAA;AACT;AAKa,MAAA,iBAAkC,CAAC,WAAW;AACnD,QAAA,SAAS,OAAO,UAAU;AAEhC,UAAQ,QAAQ,QAAQ;AAAA,IACtB,KAAK;AACI,aAAAA,EAAA,MAAM,CAAC,UAAU,aAAa,GAAG,EAAE,UAAU,QAAQ,MAAM;AAAA,IACpE,KAAK;AACI,aAAAA,EAAA,MAAM,CAAC,UAAU,aAAa,GAAG,EAAE,OAAO,QAAQ,MAAM;AAAA,EAGnE;AAEO,SAAAA,QAAM,UAAU,QAAQ,MAAM;AACvC;AAKa,MAAA,eAAgC,CAAC,WAAW;AACvD,UAAQ,QAAQ,QAAQ;AAAA,IACtB,KAAK;AACI,aAAAA,EAAAA,MAAM,CAAC,QAAQ,aAAa,GAAO,oBAAA,KAAA,GAAQ,MAAM;AAAA,IAC1D,KAAK;AACH,aAAOA,EAAAA,MAAM,CAAC,QAAQ,aAAa,GAAG,MAAM,MAAM;AAAA,EAGtD;AAEO,SAAA;AACT;;;;;;"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { assoc } from "lodash/fp";
|
|
2
|
+
const setStatusToDraft = assoc("status", "draft");
|
|
3
|
+
const defaultToDraft = (params) => {
|
|
4
|
+
if (!params.status || params.status !== "published") {
|
|
5
|
+
return setStatusToDraft(params);
|
|
6
|
+
}
|
|
7
|
+
return params;
|
|
8
|
+
};
|
|
9
|
+
const filterDataPublishedAt = (params) => {
|
|
10
|
+
if (params?.data?.publishedAt) {
|
|
11
|
+
return assoc(["data", "publishedAt"], null, params);
|
|
12
|
+
}
|
|
13
|
+
return params;
|
|
14
|
+
};
|
|
15
|
+
const statusToLookup = (params) => {
|
|
16
|
+
const lookup = params.lookup || {};
|
|
17
|
+
switch (params?.status) {
|
|
18
|
+
case "published":
|
|
19
|
+
return assoc(["lookup", "publishedAt"], { $notNull: true }, params);
|
|
20
|
+
case "draft":
|
|
21
|
+
return assoc(["lookup", "publishedAt"], { $null: true }, params);
|
|
22
|
+
}
|
|
23
|
+
return assoc("lookup", lookup, params);
|
|
24
|
+
};
|
|
25
|
+
const statusToData = (params) => {
|
|
26
|
+
switch (params?.status) {
|
|
27
|
+
case "published":
|
|
28
|
+
return assoc(["data", "publishedAt"], /* @__PURE__ */ new Date(), params);
|
|
29
|
+
case "draft":
|
|
30
|
+
return assoc(["data", "publishedAt"], null, params);
|
|
31
|
+
}
|
|
32
|
+
return params;
|
|
33
|
+
};
|
|
34
|
+
export {
|
|
35
|
+
defaultToDraft,
|
|
36
|
+
filterDataPublishedAt,
|
|
37
|
+
setStatusToDraft,
|
|
38
|
+
statusToData,
|
|
39
|
+
statusToLookup
|
|
40
|
+
};
|
|
41
|
+
//# sourceMappingURL=draft-and-publish.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"draft-and-publish.mjs","sources":["../../../src/services/document-service/draft-and-publish.ts"],"sourcesContent":["import { Documents } from '@strapi/types';\nimport { assoc } from 'lodash/fp';\n\ntype ParamsTransform = (params: Documents.Params.All) => Documents.Params.All;\n\n/**\n * Sets status to draft only\n */\nexport const setStatusToDraft: ParamsTransform = assoc('status', 'draft');\n\n/**\n * Adds a default status of `draft` to the params\n */\nexport const defaultToDraft: ParamsTransform = (params) => {\n // Default to draft if no status is provided or it's invalid\n if (!params.status || params.status !== 'published') {\n return setStatusToDraft(params);\n }\n\n return params;\n};\n\n/**\n * In mutating actions we don't want user to set the publishedAt attribute.\n */\nexport const filterDataPublishedAt: ParamsTransform = (params) => {\n if (params?.data?.publishedAt) {\n return assoc(['data', 'publishedAt'], null, params);\n }\n\n return params;\n};\n\n/**\n * Add status lookup query to the params\n */\nexport const statusToLookup: ParamsTransform = (params) => {\n const lookup = params.lookup || {};\n\n switch (params?.status) {\n case 'published':\n return assoc(['lookup', 'publishedAt'], { $notNull: true }, params);\n case 'draft':\n return assoc(['lookup', 'publishedAt'], { $null: true }, params);\n default:\n break;\n }\n\n return assoc('lookup', lookup, params);\n};\n\n/**\n * Translate publication status parameter into the data that will be saved\n */\nexport const statusToData: ParamsTransform = (params) => {\n switch (params?.status) {\n case 'published':\n return assoc(['data', 'publishedAt'], new Date(), params);\n case 'draft':\n return assoc(['data', 'publishedAt'], null, params);\n default:\n break;\n }\n\n return params;\n};\n"],"names":[],"mappings":";AAQa,MAAA,mBAAoC,MAAM,UAAU,OAAO;AAK3D,MAAA,iBAAkC,CAAC,WAAW;AAEzD,MAAI,CAAC,OAAO,UAAU,OAAO,WAAW,aAAa;AACnD,WAAO,iBAAiB,MAAM;AAAA,EAChC;AAEO,SAAA;AACT;AAKa,MAAA,wBAAyC,CAAC,WAAW;AAC5D,MAAA,QAAQ,MAAM,aAAa;AAC7B,WAAO,MAAM,CAAC,QAAQ,aAAa,GAAG,MAAM,MAAM;AAAA,EACpD;AAEO,SAAA;AACT;AAKa,MAAA,iBAAkC,CAAC,WAAW;AACnD,QAAA,SAAS,OAAO,UAAU;AAEhC,UAAQ,QAAQ,QAAQ;AAAA,IACtB,KAAK;AACI,aAAA,MAAM,CAAC,UAAU,aAAa,GAAG,EAAE,UAAU,QAAQ,MAAM;AAAA,IACpE,KAAK;AACI,aAAA,MAAM,CAAC,UAAU,aAAa,GAAG,EAAE,OAAO,QAAQ,MAAM;AAAA,EAGnE;AAEO,SAAA,MAAM,UAAU,QAAQ,MAAM;AACvC;AAKa,MAAA,eAAgC,CAAC,WAAW;AACvD,UAAQ,QAAQ,QAAQ;AAAA,IACtB,KAAK;AACI,aAAA,MAAM,CAAC,QAAQ,aAAa,GAAO,oBAAA,KAAA,GAAQ,MAAM;AAAA,IAC1D,KAAK;AACH,aAAO,MAAM,CAAC,QAAQ,aAAa,GAAG,MAAM,MAAM;AAAA,EAGtD;AAEO,SAAA;AACT;"}
|
|
@@ -15,7 +15,5 @@ import { Strapi, Documents } from '@strapi/types';
|
|
|
15
15
|
* const allArticles = strapi.documents('api::article.article').findMany(params)
|
|
16
16
|
*
|
|
17
17
|
*/
|
|
18
|
-
export declare const createDocumentService: (strapi: Strapi
|
|
19
|
-
|
|
20
|
-
}) => Documents.Service;
|
|
21
|
-
//# sourceMappingURL=document-service.d.ts.map
|
|
18
|
+
export declare const createDocumentService: (strapi: Strapi) => Documents.Service;
|
|
19
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/services/document-service/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,SAAS,EAAU,MAAM,eAAe,CAAC;AAK1D;;;;;;;;;;;;;;;GAeG;AAEH,eAAO,MAAM,qBAAqB,WAAY,MAAM,KAAG,UAAU,OAuBhE,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
+
const repositoryFactory = require("./repository-factory.js");
|
|
4
|
+
const middlewares = require("./middlewares.js");
|
|
5
|
+
const createDocumentService = (strapi) => {
|
|
6
|
+
const repositories = /* @__PURE__ */ new Map();
|
|
7
|
+
const middlewares$1 = middlewares.createMiddlewareManager();
|
|
8
|
+
const factory = function factory2(uid) {
|
|
9
|
+
if (repositories.has(uid)) {
|
|
10
|
+
return repositories.get(uid);
|
|
11
|
+
}
|
|
12
|
+
const contentType = strapi.contentType(uid);
|
|
13
|
+
const repository = repositoryFactory.createContentTypeRepository(contentType);
|
|
14
|
+
repositories.set(uid, middlewares$1.wrapObject(repository, { contentType }));
|
|
15
|
+
return repository;
|
|
16
|
+
};
|
|
17
|
+
return Object.assign(factory, {
|
|
18
|
+
use: middlewares$1.use.bind(middlewares$1)
|
|
19
|
+
});
|
|
20
|
+
};
|
|
21
|
+
exports.createDocumentService = createDocumentService;
|
|
22
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../src/services/document-service/index.ts"],"sourcesContent":["import { Strapi, Documents, Schema } from '@strapi/types';\n\nimport { createContentTypeRepository } from './repository-factory';\nimport { createMiddlewareManager } from './middlewares';\n\n/**\n * Repository to :\n * - Access documents via actions (findMany, findOne, create, update, delete, ...)\n * - Execute middlewares on document actions\n * - Apply default parameters to document actions\n *\n * @param strapi\n * @param options.defaults - Default parameters to apply to all actions\n * @param options.parent - Parent repository, used when creating a new repository with .with()\n * @returns DocumentService\n *\n * @example Access documents\n * const article = strapi.documents('api::article.article').create(params)\n * const allArticles = strapi.documents('api::article.article').findMany(params)\n *\n */\n// TODO: support global document service middleware & per repo middlewares\nexport const createDocumentService = (strapi: Strapi): Documents.Service => {\n const repositories = new Map<\n string,\n Documents.ServiceInstance<Schema.SingleType | Schema.CollectionType>\n >();\n const middlewares = createMiddlewareManager();\n\n const factory = function factory(uid) {\n if (repositories.has(uid)) {\n return repositories.get(uid)!;\n }\n\n const contentType = strapi.contentType(uid);\n const repository = createContentTypeRepository(contentType);\n\n repositories.set(uid, middlewares.wrapObject(repository, { contentType }));\n\n return repository;\n } as Documents.Service;\n\n return Object.assign(factory, {\n use: middlewares.use.bind(middlewares),\n });\n};\n"],"names":["middlewares","createMiddlewareManager","factory","createContentTypeRepository"],"mappings":";;;;AAsBa,MAAA,wBAAwB,CAAC,WAAsC;AACpE,QAAA,mCAAmB;AAIzB,QAAMA,gBAAcC,YAAAA;AAEd,QAAA,UAAU,SAASC,SAAQ,KAAK;AAChC,QAAA,aAAa,IAAI,GAAG,GAAG;AAClB,aAAA,aAAa,IAAI,GAAG;AAAA,IAC7B;AAEM,UAAA,cAAc,OAAO,YAAY,GAAG;AACpC,UAAA,aAAaC,8CAA4B,WAAW;AAE7C,iBAAA,IAAI,KAAKH,cAAY,WAAW,YAAY,EAAE,YAAa,CAAA,CAAC;AAElE,WAAA;AAAA,EAAA;AAGF,SAAA,OAAO,OAAO,SAAS;AAAA,IAC5B,KAAKA,cAAY,IAAI,KAAKA,aAAW;AAAA,EAAA,CACtC;AACH;;"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { createContentTypeRepository } from "./repository-factory.mjs";
|
|
2
|
+
import { createMiddlewareManager } from "./middlewares.mjs";
|
|
3
|
+
const createDocumentService = (strapi) => {
|
|
4
|
+
const repositories = /* @__PURE__ */ new Map();
|
|
5
|
+
const middlewares = createMiddlewareManager();
|
|
6
|
+
const factory = function factory2(uid) {
|
|
7
|
+
if (repositories.has(uid)) {
|
|
8
|
+
return repositories.get(uid);
|
|
9
|
+
}
|
|
10
|
+
const contentType = strapi.contentType(uid);
|
|
11
|
+
const repository = createContentTypeRepository(contentType);
|
|
12
|
+
repositories.set(uid, middlewares.wrapObject(repository, { contentType }));
|
|
13
|
+
return repository;
|
|
14
|
+
};
|
|
15
|
+
return Object.assign(factory, {
|
|
16
|
+
use: middlewares.use.bind(middlewares)
|
|
17
|
+
});
|
|
18
|
+
};
|
|
19
|
+
export {
|
|
20
|
+
createDocumentService
|
|
21
|
+
};
|
|
22
|
+
//# sourceMappingURL=index.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.mjs","sources":["../../../src/services/document-service/index.ts"],"sourcesContent":["import { Strapi, Documents, Schema } from '@strapi/types';\n\nimport { createContentTypeRepository } from './repository-factory';\nimport { createMiddlewareManager } from './middlewares';\n\n/**\n * Repository to :\n * - Access documents via actions (findMany, findOne, create, update, delete, ...)\n * - Execute middlewares on document actions\n * - Apply default parameters to document actions\n *\n * @param strapi\n * @param options.defaults - Default parameters to apply to all actions\n * @param options.parent - Parent repository, used when creating a new repository with .with()\n * @returns DocumentService\n *\n * @example Access documents\n * const article = strapi.documents('api::article.article').create(params)\n * const allArticles = strapi.documents('api::article.article').findMany(params)\n *\n */\n// TODO: support global document service middleware & per repo middlewares\nexport const createDocumentService = (strapi: Strapi): Documents.Service => {\n const repositories = new Map<\n string,\n Documents.ServiceInstance<Schema.SingleType | Schema.CollectionType>\n >();\n const middlewares = createMiddlewareManager();\n\n const factory = function factory(uid) {\n if (repositories.has(uid)) {\n return repositories.get(uid)!;\n }\n\n const contentType = strapi.contentType(uid);\n const repository = createContentTypeRepository(contentType);\n\n repositories.set(uid, middlewares.wrapObject(repository, { contentType }));\n\n return repository;\n } as Documents.Service;\n\n return Object.assign(factory, {\n use: middlewares.use.bind(middlewares),\n });\n};\n"],"names":["factory"],"mappings":";;AAsBa,MAAA,wBAAwB,CAAC,WAAsC;AACpE,QAAA,mCAAmB;AAIzB,QAAM,cAAc;AAEd,QAAA,UAAU,SAASA,SAAQ,KAAK;AAChC,QAAA,aAAa,IAAI,GAAG,GAAG;AAClB,aAAA,aAAa,IAAI,GAAG;AAAA,IAC7B;AAEM,UAAA,cAAc,OAAO,YAAY,GAAG;AACpC,UAAA,aAAa,4BAA4B,WAAW;AAE7C,iBAAA,IAAI,KAAK,YAAY,WAAW,YAAY,EAAE,YAAa,CAAA,CAAC;AAElE,WAAA;AAAA,EAAA;AAGF,SAAA,OAAO,OAAO,SAAS;AAAA,IAC5B,KAAK,YAAY,IAAI,KAAK,WAAW;AAAA,EAAA,CACtC;AACH;"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/// <reference types="lodash" />
|
|
2
|
+
import type { Schema, Documents } from '@strapi/types';
|
|
3
|
+
declare const defaultLocaleCurry: import("lodash").CurriedFunction2<Schema.SingleType | Schema.CollectionType, Documents.Params.All, Promise<Documents.Params.All>>;
|
|
4
|
+
declare const localeToLookupCurry: import("lodash").CurriedFunction2<Schema.SingleType | Schema.CollectionType, Documents.Params.All, Documents.Params.All>;
|
|
5
|
+
declare const localeToDataCurry: import("lodash").CurriedFunction2<Schema.SingleType | Schema.CollectionType, Documents.Params.All, Documents.Params.All>;
|
|
6
|
+
export { defaultLocaleCurry as defaultLocale, localeToLookupCurry as localeToLookup, localeToDataCurry as localeToData, };
|
|
7
|
+
//# sourceMappingURL=internationalization.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"internationalization.d.ts","sourceRoot":"","sources":["../../../src/services/document-service/internationalization.ts"],"names":[],"mappings":";AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AA4DvD,QAAA,MAAM,kBAAkB,mIAAuB,CAAC;AAChD,QAAA,MAAM,mBAAmB,0HAAwB,CAAC;AAClD,QAAA,MAAM,iBAAiB,0HAAsB,CAAC;AAE9C,OAAO,EACL,kBAAkB,IAAI,aAAa,EACnC,mBAAmB,IAAI,cAAc,EACrC,iBAAiB,IAAI,YAAY,GAClC,CAAC"}
|