@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
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
+
const _ = require("lodash/fp");
|
|
4
|
+
const strapiUtils = require("@strapi/utils");
|
|
5
|
+
const data = require("../utils/data.js");
|
|
6
|
+
const i18n = require("../utils/i18n.js");
|
|
7
|
+
const handlePrimitive = (relation) => {
|
|
8
|
+
if (!relation) {
|
|
9
|
+
return [];
|
|
10
|
+
}
|
|
11
|
+
if (data.isShortHand(relation)) {
|
|
12
|
+
return [{ id: relation }];
|
|
13
|
+
}
|
|
14
|
+
if (data.isLongHand(relation)) {
|
|
15
|
+
return [{ id: relation.id, locale: relation.locale }];
|
|
16
|
+
}
|
|
17
|
+
if (Array.isArray(relation)) {
|
|
18
|
+
return relation.map((item) => data.isShortHand(item) ? { id: item } : item);
|
|
19
|
+
}
|
|
20
|
+
return [];
|
|
21
|
+
};
|
|
22
|
+
const extractRelationIds = (relation) => {
|
|
23
|
+
const ids = handlePrimitive(relation);
|
|
24
|
+
if (!_.isObject(relation))
|
|
25
|
+
return ids;
|
|
26
|
+
if ("set" in relation)
|
|
27
|
+
ids.push(...handlePrimitive(relation.set));
|
|
28
|
+
if ("disconnect" in relation)
|
|
29
|
+
ids.push(...handlePrimitive(relation.disconnect));
|
|
30
|
+
if ("connect" in relation) {
|
|
31
|
+
if (!relation.connect)
|
|
32
|
+
return [];
|
|
33
|
+
ids.push(...handlePrimitive(relation.connect));
|
|
34
|
+
const connect = Array.isArray(relation.connect) ? relation.connect : [relation.connect];
|
|
35
|
+
connect.forEach((relation2) => {
|
|
36
|
+
if (data.isShortHand(relation2) || !("position" in relation2))
|
|
37
|
+
return;
|
|
38
|
+
const { position } = relation2;
|
|
39
|
+
if (position?.before) {
|
|
40
|
+
ids.push(...handlePrimitive({ ...position, id: position.before }));
|
|
41
|
+
}
|
|
42
|
+
if (position?.after) {
|
|
43
|
+
ids.push(...handlePrimitive({ ...position, id: position.after }));
|
|
44
|
+
}
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
return ids;
|
|
48
|
+
};
|
|
49
|
+
const extractDataIds = (idMap, data2, opts) => {
|
|
50
|
+
return strapiUtils.traverseEntity(
|
|
51
|
+
({ value, attribute }) => {
|
|
52
|
+
if (attribute.type === "relation") {
|
|
53
|
+
const extractedIds = extractRelationIds(value);
|
|
54
|
+
const target = attribute.target;
|
|
55
|
+
if (!target)
|
|
56
|
+
return;
|
|
57
|
+
extractedIds.forEach((relation) => {
|
|
58
|
+
idMap.add({
|
|
59
|
+
uid: target,
|
|
60
|
+
documentId: relation.id,
|
|
61
|
+
locale: i18n.getRelationTargetLocale(relation, {
|
|
62
|
+
targetUid: target,
|
|
63
|
+
sourceUid: opts.uid,
|
|
64
|
+
sourceLocale: opts.locale
|
|
65
|
+
}),
|
|
66
|
+
isDraft: opts.isDraft
|
|
67
|
+
});
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
},
|
|
71
|
+
{ schema: strapi.getModel(opts.uid) },
|
|
72
|
+
data2
|
|
73
|
+
);
|
|
74
|
+
};
|
|
75
|
+
exports.extractDataIds = extractDataIds;
|
|
76
|
+
//# sourceMappingURL=data-ids.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"data-ids.js","sources":["../../../../../../src/services/document-service/transform/relations/extract/data-ids.ts"],"sourcesContent":["import { isObject } from 'lodash/fp';\nimport { EntityService, Attribute, Common } from '@strapi/types';\nimport { traverseEntity } from '@strapi/utils';\nimport { IdMap } from '../../id-map';\nimport { ShortHand, LongHand, ID } from '../utils/types';\nimport { isShortHand, isLongHand } from '../utils/data';\nimport { getRelationTargetLocale } from '../utils/i18n';\n\ntype ExtractedId = { id: ID; locale?: string };\n\n/**\n * Get relation ids from primitive representation (id, id[], {id}, {id}[])\n */\nconst handlePrimitive = (\n relation: ShortHand | LongHand | ShortHand[] | LongHand[] | null | undefined | any\n): LongHand[] => {\n if (!relation) {\n return []; // null\n }\n if (isShortHand(relation)) {\n return [{ id: relation }]; // id\n }\n if (isLongHand(relation)) {\n // @ts-expect-error - TODO: Add relation type\n return [{ id: relation.id, locale: relation.locale }]; // { id, locale? }\n }\n if (Array.isArray(relation)) {\n return relation.map((item) => (isShortHand(item) ? { id: item } : item)); // id[]\n }\n\n return [];\n};\n\n/**\n * Get all relations document ids from a relation input value\n */\nconst extractRelationIds = <T extends Attribute.RelationKind.Any>(\n relation: EntityService.Params.Attribute.RelationInputValue<T>\n): ExtractedId[] => {\n const ids = handlePrimitive(relation);\n if (!isObject(relation)) return ids;\n\n if ('set' in relation) ids.push(...handlePrimitive(relation.set)); // set: id[]\n if ('disconnect' in relation) ids.push(...handlePrimitive(relation.disconnect)); // disconnect: id[]\n if ('connect' in relation) {\n // connect: id[] | { id } | ...\n if (!relation.connect) return [];\n ids.push(...handlePrimitive(relation.connect));\n\n // handle positional arguments\n const connect = Array.isArray(relation.connect) ? relation.connect : [relation.connect];\n connect.forEach((relation) => {\n if (isShortHand(relation) || !('position' in relation)) return;\n\n const { position } = relation;\n\n // { connect: { id: id, position: { before: id } } }\n if (position?.before) {\n ids.push(...handlePrimitive({ ...position, id: position.before }));\n }\n\n // { connect: { id: id, position: { after: id } } }\n if (position?.after) {\n ids.push(...handlePrimitive({ ...position, id: position.after }));\n }\n });\n }\n\n return ids;\n};\n\n/**\n * Iterate over all attributes of a Data object and extract all relational document ids.\n * Those will later be transformed to entity ids.\n */\nconst extractDataIds = (\n idMap: IdMap,\n data: Record<string, any>,\n opts: { uid: Common.UID.Schema; locale?: string | null; isDraft?: boolean }\n) => {\n return traverseEntity(\n ({ value, attribute }) => {\n // Find relational attributes, and return the document ids\n if (attribute.type === 'relation') {\n const extractedIds = extractRelationIds(value as any);\n\n // TODO: Handle morph relations (they have multiple targets)\n const target = attribute.target;\n if (!target) return;\n\n extractedIds.forEach((relation) => {\n idMap.add({\n uid: target,\n documentId: relation.id as string,\n locale: getRelationTargetLocale(relation, {\n targetUid: target as Common.UID.Schema,\n sourceUid: opts.uid,\n sourceLocale: opts.locale,\n }),\n isDraft: opts.isDraft,\n });\n });\n }\n },\n { schema: strapi.getModel(opts.uid) },\n data\n );\n};\n\nexport { extractDataIds };\n"],"names":["isShortHand","isLongHand","isObject","relation","data","traverseEntity","getRelationTargetLocale"],"mappings":";;;;;;AAaA,MAAM,kBAAkB,CACtB,aACe;AACf,MAAI,CAAC,UAAU;AACb,WAAO;EACT;AACI,MAAAA,KAAAA,YAAY,QAAQ,GAAG;AACzB,WAAO,CAAC,EAAE,IAAI,SAAA,CAAU;AAAA,EAC1B;AACI,MAAAC,KAAAA,WAAW,QAAQ,GAAG;AAEjB,WAAA,CAAC,EAAE,IAAI,SAAS,IAAI,QAAQ,SAAS,QAAQ;AAAA,EACtD;AACI,MAAA,MAAM,QAAQ,QAAQ,GAAG;AACpB,WAAA,SAAS,IAAI,CAAC,SAAUD,KAAA,YAAY,IAAI,IAAI,EAAE,IAAI,KAAK,IAAI,IAAK;AAAA,EACzE;AAEA,SAAO;AACT;AAKA,MAAM,qBAAqB,CACzB,aACkB;AACZ,QAAA,MAAM,gBAAgB,QAAQ;AAChC,MAAA,CAACE,WAAS,QAAQ;AAAU,WAAA;AAEhC,MAAI,SAAS;AAAU,QAAI,KAAK,GAAG,gBAAgB,SAAS,GAAG,CAAC;AAChE,MAAI,gBAAgB;AAAU,QAAI,KAAK,GAAG,gBAAgB,SAAS,UAAU,CAAC;AAC9E,MAAI,aAAa,UAAU;AAEzB,QAAI,CAAC,SAAS;AAAS,aAAO;AAC9B,QAAI,KAAK,GAAG,gBAAgB,SAAS,OAAO,CAAC;AAGvC,UAAA,UAAU,MAAM,QAAQ,SAAS,OAAO,IAAI,SAAS,UAAU,CAAC,SAAS,OAAO;AAC9E,YAAA,QAAQ,CAACC,cAAa;AAC5B,UAAIH,KAAYG,YAAAA,SAAQ,KAAK,EAAE,cAAcA;AAAW;AAElD,YAAA,EAAE,SAAaA,IAAAA;AAGrB,UAAI,UAAU,QAAQ;AAChB,YAAA,KAAK,GAAG,gBAAgB,EAAE,GAAG,UAAU,IAAI,SAAS,OAAQ,CAAA,CAAC;AAAA,MACnE;AAGA,UAAI,UAAU,OAAO;AACf,YAAA,KAAK,GAAG,gBAAgB,EAAE,GAAG,UAAU,IAAI,SAAS,MAAO,CAAA,CAAC;AAAA,MAClE;AAAA,IAAA,CACD;AAAA,EACH;AAEO,SAAA;AACT;AAMA,MAAM,iBAAiB,CACrB,OACAC,OACA,SACG;AACI,SAAAC,YAAA;AAAA,IACL,CAAC,EAAE,OAAO,gBAAgB;AAEpB,UAAA,UAAU,SAAS,YAAY;AAC3B,cAAA,eAAe,mBAAmB,KAAY;AAGpD,cAAM,SAAS,UAAU;AACzB,YAAI,CAAC;AAAQ;AAEA,qBAAA,QAAQ,CAAC,aAAa;AACjC,gBAAM,IAAI;AAAA,YACR,KAAK;AAAA,YACL,YAAY,SAAS;AAAA,YACrB,QAAQC,6BAAwB,UAAU;AAAA,cACxC,WAAW;AAAA,cACX,WAAW,KAAK;AAAA,cAChB,cAAc,KAAK;AAAA,YAAA,CACpB;AAAA,YACD,SAAS,KAAK;AAAA,UAAA,CACf;AAAA,QAAA,CACF;AAAA,MACH;AAAA,IACF;AAAA,IACA,EAAE,QAAQ,OAAO,SAAS,KAAK,GAAG,EAAE;AAAA,IACpCF;AAAA,EAAA;AAEJ;;"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import { isObject } from "lodash/fp";
|
|
2
|
+
import { traverseEntity } from "@strapi/utils";
|
|
3
|
+
import { isShortHand, isLongHand } from "../utils/data.mjs";
|
|
4
|
+
import { getRelationTargetLocale } from "../utils/i18n.mjs";
|
|
5
|
+
const handlePrimitive = (relation) => {
|
|
6
|
+
if (!relation) {
|
|
7
|
+
return [];
|
|
8
|
+
}
|
|
9
|
+
if (isShortHand(relation)) {
|
|
10
|
+
return [{ id: relation }];
|
|
11
|
+
}
|
|
12
|
+
if (isLongHand(relation)) {
|
|
13
|
+
return [{ id: relation.id, locale: relation.locale }];
|
|
14
|
+
}
|
|
15
|
+
if (Array.isArray(relation)) {
|
|
16
|
+
return relation.map((item) => isShortHand(item) ? { id: item } : item);
|
|
17
|
+
}
|
|
18
|
+
return [];
|
|
19
|
+
};
|
|
20
|
+
const extractRelationIds = (relation) => {
|
|
21
|
+
const ids = handlePrimitive(relation);
|
|
22
|
+
if (!isObject(relation))
|
|
23
|
+
return ids;
|
|
24
|
+
if ("set" in relation)
|
|
25
|
+
ids.push(...handlePrimitive(relation.set));
|
|
26
|
+
if ("disconnect" in relation)
|
|
27
|
+
ids.push(...handlePrimitive(relation.disconnect));
|
|
28
|
+
if ("connect" in relation) {
|
|
29
|
+
if (!relation.connect)
|
|
30
|
+
return [];
|
|
31
|
+
ids.push(...handlePrimitive(relation.connect));
|
|
32
|
+
const connect = Array.isArray(relation.connect) ? relation.connect : [relation.connect];
|
|
33
|
+
connect.forEach((relation2) => {
|
|
34
|
+
if (isShortHand(relation2) || !("position" in relation2))
|
|
35
|
+
return;
|
|
36
|
+
const { position } = relation2;
|
|
37
|
+
if (position?.before) {
|
|
38
|
+
ids.push(...handlePrimitive({ ...position, id: position.before }));
|
|
39
|
+
}
|
|
40
|
+
if (position?.after) {
|
|
41
|
+
ids.push(...handlePrimitive({ ...position, id: position.after }));
|
|
42
|
+
}
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
return ids;
|
|
46
|
+
};
|
|
47
|
+
const extractDataIds = (idMap, data, opts) => {
|
|
48
|
+
return traverseEntity(
|
|
49
|
+
({ value, attribute }) => {
|
|
50
|
+
if (attribute.type === "relation") {
|
|
51
|
+
const extractedIds = extractRelationIds(value);
|
|
52
|
+
const target = attribute.target;
|
|
53
|
+
if (!target)
|
|
54
|
+
return;
|
|
55
|
+
extractedIds.forEach((relation) => {
|
|
56
|
+
idMap.add({
|
|
57
|
+
uid: target,
|
|
58
|
+
documentId: relation.id,
|
|
59
|
+
locale: getRelationTargetLocale(relation, {
|
|
60
|
+
targetUid: target,
|
|
61
|
+
sourceUid: opts.uid,
|
|
62
|
+
sourceLocale: opts.locale
|
|
63
|
+
}),
|
|
64
|
+
isDraft: opts.isDraft
|
|
65
|
+
});
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
},
|
|
69
|
+
{ schema: strapi.getModel(opts.uid) },
|
|
70
|
+
data
|
|
71
|
+
);
|
|
72
|
+
};
|
|
73
|
+
export {
|
|
74
|
+
extractDataIds
|
|
75
|
+
};
|
|
76
|
+
//# sourceMappingURL=data-ids.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"data-ids.mjs","sources":["../../../../../../src/services/document-service/transform/relations/extract/data-ids.ts"],"sourcesContent":["import { isObject } from 'lodash/fp';\nimport { EntityService, Attribute, Common } from '@strapi/types';\nimport { traverseEntity } from '@strapi/utils';\nimport { IdMap } from '../../id-map';\nimport { ShortHand, LongHand, ID } from '../utils/types';\nimport { isShortHand, isLongHand } from '../utils/data';\nimport { getRelationTargetLocale } from '../utils/i18n';\n\ntype ExtractedId = { id: ID; locale?: string };\n\n/**\n * Get relation ids from primitive representation (id, id[], {id}, {id}[])\n */\nconst handlePrimitive = (\n relation: ShortHand | LongHand | ShortHand[] | LongHand[] | null | undefined | any\n): LongHand[] => {\n if (!relation) {\n return []; // null\n }\n if (isShortHand(relation)) {\n return [{ id: relation }]; // id\n }\n if (isLongHand(relation)) {\n // @ts-expect-error - TODO: Add relation type\n return [{ id: relation.id, locale: relation.locale }]; // { id, locale? }\n }\n if (Array.isArray(relation)) {\n return relation.map((item) => (isShortHand(item) ? { id: item } : item)); // id[]\n }\n\n return [];\n};\n\n/**\n * Get all relations document ids from a relation input value\n */\nconst extractRelationIds = <T extends Attribute.RelationKind.Any>(\n relation: EntityService.Params.Attribute.RelationInputValue<T>\n): ExtractedId[] => {\n const ids = handlePrimitive(relation);\n if (!isObject(relation)) return ids;\n\n if ('set' in relation) ids.push(...handlePrimitive(relation.set)); // set: id[]\n if ('disconnect' in relation) ids.push(...handlePrimitive(relation.disconnect)); // disconnect: id[]\n if ('connect' in relation) {\n // connect: id[] | { id } | ...\n if (!relation.connect) return [];\n ids.push(...handlePrimitive(relation.connect));\n\n // handle positional arguments\n const connect = Array.isArray(relation.connect) ? relation.connect : [relation.connect];\n connect.forEach((relation) => {\n if (isShortHand(relation) || !('position' in relation)) return;\n\n const { position } = relation;\n\n // { connect: { id: id, position: { before: id } } }\n if (position?.before) {\n ids.push(...handlePrimitive({ ...position, id: position.before }));\n }\n\n // { connect: { id: id, position: { after: id } } }\n if (position?.after) {\n ids.push(...handlePrimitive({ ...position, id: position.after }));\n }\n });\n }\n\n return ids;\n};\n\n/**\n * Iterate over all attributes of a Data object and extract all relational document ids.\n * Those will later be transformed to entity ids.\n */\nconst extractDataIds = (\n idMap: IdMap,\n data: Record<string, any>,\n opts: { uid: Common.UID.Schema; locale?: string | null; isDraft?: boolean }\n) => {\n return traverseEntity(\n ({ value, attribute }) => {\n // Find relational attributes, and return the document ids\n if (attribute.type === 'relation') {\n const extractedIds = extractRelationIds(value as any);\n\n // TODO: Handle morph relations (they have multiple targets)\n const target = attribute.target;\n if (!target) return;\n\n extractedIds.forEach((relation) => {\n idMap.add({\n uid: target,\n documentId: relation.id as string,\n locale: getRelationTargetLocale(relation, {\n targetUid: target as Common.UID.Schema,\n sourceUid: opts.uid,\n sourceLocale: opts.locale,\n }),\n isDraft: opts.isDraft,\n });\n });\n }\n },\n { schema: strapi.getModel(opts.uid) },\n data\n );\n};\n\nexport { extractDataIds };\n"],"names":["relation"],"mappings":";;;;AAaA,MAAM,kBAAkB,CACtB,aACe;AACf,MAAI,CAAC,UAAU;AACb,WAAO;EACT;AACI,MAAA,YAAY,QAAQ,GAAG;AACzB,WAAO,CAAC,EAAE,IAAI,SAAA,CAAU;AAAA,EAC1B;AACI,MAAA,WAAW,QAAQ,GAAG;AAEjB,WAAA,CAAC,EAAE,IAAI,SAAS,IAAI,QAAQ,SAAS,QAAQ;AAAA,EACtD;AACI,MAAA,MAAM,QAAQ,QAAQ,GAAG;AACpB,WAAA,SAAS,IAAI,CAAC,SAAU,YAAY,IAAI,IAAI,EAAE,IAAI,KAAK,IAAI,IAAK;AAAA,EACzE;AAEA,SAAO;AACT;AAKA,MAAM,qBAAqB,CACzB,aACkB;AACZ,QAAA,MAAM,gBAAgB,QAAQ;AAChC,MAAA,CAAC,SAAS,QAAQ;AAAU,WAAA;AAEhC,MAAI,SAAS;AAAU,QAAI,KAAK,GAAG,gBAAgB,SAAS,GAAG,CAAC;AAChE,MAAI,gBAAgB;AAAU,QAAI,KAAK,GAAG,gBAAgB,SAAS,UAAU,CAAC;AAC9E,MAAI,aAAa,UAAU;AAEzB,QAAI,CAAC,SAAS;AAAS,aAAO;AAC9B,QAAI,KAAK,GAAG,gBAAgB,SAAS,OAAO,CAAC;AAGvC,UAAA,UAAU,MAAM,QAAQ,SAAS,OAAO,IAAI,SAAS,UAAU,CAAC,SAAS,OAAO;AAC9E,YAAA,QAAQ,CAACA,cAAa;AAC5B,UAAI,YAAYA,SAAQ,KAAK,EAAE,cAAcA;AAAW;AAElD,YAAA,EAAE,SAAaA,IAAAA;AAGrB,UAAI,UAAU,QAAQ;AAChB,YAAA,KAAK,GAAG,gBAAgB,EAAE,GAAG,UAAU,IAAI,SAAS,OAAQ,CAAA,CAAC;AAAA,MACnE;AAGA,UAAI,UAAU,OAAO;AACf,YAAA,KAAK,GAAG,gBAAgB,EAAE,GAAG,UAAU,IAAI,SAAS,MAAO,CAAA,CAAC;AAAA,MAClE;AAAA,IAAA,CACD;AAAA,EACH;AAEO,SAAA;AACT;AAMA,MAAM,iBAAiB,CACrB,OACA,MACA,SACG;AACI,SAAA;AAAA,IACL,CAAC,EAAE,OAAO,gBAAgB;AAEpB,UAAA,UAAU,SAAS,YAAY;AAC3B,cAAA,eAAe,mBAAmB,KAAY;AAGpD,cAAM,SAAS,UAAU;AACzB,YAAI,CAAC;AAAQ;AAEA,qBAAA,QAAQ,CAAC,aAAa;AACjC,gBAAM,IAAI;AAAA,YACR,KAAK;AAAA,YACL,YAAY,SAAS;AAAA,YACrB,QAAQ,wBAAwB,UAAU;AAAA,cACxC,WAAW;AAAA,cACX,WAAW,KAAK;AAAA,cAChB,cAAc,KAAK;AAAA,YAAA,CACpB;AAAA,YACD,SAAS,KAAK;AAAA,UAAA,CACf;AAAA,QAAA,CACF;AAAA,MACH;AAAA,IACF;AAAA,IACA,EAAE,QAAQ,OAAO,SAAS,KAAK,GAAG,EAAE;AAAA,IACpC;AAAA,EAAA;AAEJ;"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { Common } from '@strapi/types';
|
|
2
|
+
import { IdMap } from '../../id-map';
|
|
3
|
+
declare const transformDataIdsVisitor: (idMap: IdMap, data: Record<string, any>, opts: {
|
|
4
|
+
uid: Common.UID.Schema;
|
|
5
|
+
locale?: string | null;
|
|
6
|
+
isDraft?: boolean;
|
|
7
|
+
allowMissingId?: boolean;
|
|
8
|
+
}) => Promise<import("@strapi/utils/dist/types").Data>;
|
|
9
|
+
export { transformDataIdsVisitor };
|
|
10
|
+
//# sourceMappingURL=data-ids.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"data-ids.d.ts","sourceRoot":"","sources":["../../../../../../src/services/document-service/transform/relations/transform/data-ids.ts"],"names":[],"mappings":"AAAA,OAAO,EAA4B,MAAM,EAAE,MAAM,eAAe,CAAC;AAKjE,OAAO,EAAE,KAAK,EAAE,MAAM,cAAc,CAAC;AA4GrC,QAAA,MAAM,uBAAuB,UACpB,KAAK,QACN,OAAO,MAAM,EAAE,GAAG,CAAC,QACnB;IACJ,GAAG,EAAE,OAAO,GAAG,CAAC,MAAM,CAAC;IACvB,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B,qDAwCF,CAAC;AAEF,OAAO,EAAE,uBAAuB,EAAE,CAAC"}
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
+
const strapiUtils = require("@strapi/utils");
|
|
4
|
+
const _ = require("lodash/fp");
|
|
5
|
+
const data = require("../utils/data.js");
|
|
6
|
+
const i18n = require("../utils/i18n.js");
|
|
7
|
+
const isNumeric = (value) => {
|
|
8
|
+
const parsed = parseInt(value, 10);
|
|
9
|
+
return !Number.isNaN(parsed);
|
|
10
|
+
};
|
|
11
|
+
const transformPrimitive = (relation, getId) => {
|
|
12
|
+
if (isNumeric(relation)) {
|
|
13
|
+
return relation;
|
|
14
|
+
}
|
|
15
|
+
if (_.isNil(relation)) {
|
|
16
|
+
return relation;
|
|
17
|
+
}
|
|
18
|
+
if (data.isShortHand(relation)) {
|
|
19
|
+
return getId(relation);
|
|
20
|
+
}
|
|
21
|
+
if (data.isLongHand(relation)) {
|
|
22
|
+
if (isNumeric(relation.id))
|
|
23
|
+
return relation;
|
|
24
|
+
const id = getId(relation.id, relation.locale);
|
|
25
|
+
if (!id)
|
|
26
|
+
return void 0;
|
|
27
|
+
return { ...relation, id };
|
|
28
|
+
}
|
|
29
|
+
if (Array.isArray(relation)) {
|
|
30
|
+
return relation.map((item) => transformPrimitive(item, getId)).filter(Boolean);
|
|
31
|
+
}
|
|
32
|
+
return void 0;
|
|
33
|
+
};
|
|
34
|
+
const transformRelationIdsVisitor = (relation, getId) => {
|
|
35
|
+
const map = transformPrimitive(relation, getId);
|
|
36
|
+
if (map)
|
|
37
|
+
return map;
|
|
38
|
+
if (!_.isObject(relation))
|
|
39
|
+
return relation;
|
|
40
|
+
if ("set" in relation) {
|
|
41
|
+
relation.set = transformPrimitive(relation.set, getId);
|
|
42
|
+
}
|
|
43
|
+
if ("disconnect" in relation) {
|
|
44
|
+
relation.disconnect = transformPrimitive(relation.disconnect, getId);
|
|
45
|
+
}
|
|
46
|
+
if ("connect" in relation) {
|
|
47
|
+
relation.connect = transformPrimitive(relation.connect, getId);
|
|
48
|
+
const mapPosition = (relation2) => {
|
|
49
|
+
if (data.isShortHand(relation2) || !("position" in relation2))
|
|
50
|
+
return relation2;
|
|
51
|
+
const { position } = relation2;
|
|
52
|
+
if (position?.before) {
|
|
53
|
+
const { id } = transformPrimitive({ ...position, id: position.before }, getId);
|
|
54
|
+
position.before = id;
|
|
55
|
+
}
|
|
56
|
+
if (position?.after) {
|
|
57
|
+
const { id } = transformPrimitive({ ...position, id: position.after }, getId);
|
|
58
|
+
position.after = id;
|
|
59
|
+
}
|
|
60
|
+
return relation2;
|
|
61
|
+
};
|
|
62
|
+
if (Array.isArray(relation.connect)) {
|
|
63
|
+
relation.connect = relation.connect.map(mapPosition);
|
|
64
|
+
} else {
|
|
65
|
+
relation.connect = mapPosition(relation.connect);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
return relation;
|
|
69
|
+
};
|
|
70
|
+
const EXCLUDED_FIELDS = [
|
|
71
|
+
"createdBy",
|
|
72
|
+
"updatedBy",
|
|
73
|
+
"localizations",
|
|
74
|
+
"strapi_stage",
|
|
75
|
+
"strapi_assignee"
|
|
76
|
+
];
|
|
77
|
+
const transformDataIdsVisitor = (idMap, data2, opts) => {
|
|
78
|
+
return strapiUtils.traverseEntity(
|
|
79
|
+
({ key, value, attribute }, { set }) => {
|
|
80
|
+
if (attribute.type === "relation") {
|
|
81
|
+
const target = attribute.target;
|
|
82
|
+
if (!target)
|
|
83
|
+
return;
|
|
84
|
+
if (EXCLUDED_FIELDS.includes(key))
|
|
85
|
+
return;
|
|
86
|
+
const getId = (documentId, locale) => {
|
|
87
|
+
const entryId = idMap.get({
|
|
88
|
+
uid: target,
|
|
89
|
+
documentId,
|
|
90
|
+
locale: i18n.getRelationTargetLocale(
|
|
91
|
+
{ id: documentId, locale },
|
|
92
|
+
{
|
|
93
|
+
targetUid: target,
|
|
94
|
+
sourceUid: opts.uid,
|
|
95
|
+
sourceLocale: opts.locale
|
|
96
|
+
}
|
|
97
|
+
),
|
|
98
|
+
isDraft: opts.isDraft
|
|
99
|
+
});
|
|
100
|
+
if (entryId)
|
|
101
|
+
return entryId;
|
|
102
|
+
if (opts.allowMissingId)
|
|
103
|
+
return null;
|
|
104
|
+
throw new Error(`Document with id "${documentId}" not found`);
|
|
105
|
+
};
|
|
106
|
+
const newRelation = transformRelationIdsVisitor(value, getId);
|
|
107
|
+
set(key, newRelation);
|
|
108
|
+
}
|
|
109
|
+
},
|
|
110
|
+
{ schema: strapi.getModel(opts.uid) },
|
|
111
|
+
data2
|
|
112
|
+
);
|
|
113
|
+
};
|
|
114
|
+
exports.transformDataIdsVisitor = transformDataIdsVisitor;
|
|
115
|
+
//# sourceMappingURL=data-ids.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"data-ids.js","sources":["../../../../../../src/services/document-service/transform/relations/transform/data-ids.ts"],"sourcesContent":["import { EntityService, Attribute, Common } from '@strapi/types';\nimport { traverseEntity } from '@strapi/utils';\nimport { isObject, isNil } from 'lodash/fp';\nimport { ShortHand, LongHand, ID, GetId } from '../utils/types';\nimport { isShortHand, isLongHand } from '../utils/data';\nimport { IdMap } from '../../id-map';\nimport { getRelationTargetLocale } from '../utils/i18n';\n\nconst isNumeric = (value: any): value is number => {\n const parsed = parseInt(value, 10);\n return !Number.isNaN(parsed);\n};\n\nconst transformPrimitive = <T extends ShortHand | LongHand>(\n relation: T | T[] | null | undefined,\n getId: GetId\n): T | T[] | undefined => {\n // If id value is a number, return it as is, it's already an entry id\n if (isNumeric(relation)) {\n return relation;\n }\n\n // null\n if (isNil(relation)) {\n return relation as T | undefined;\n }\n\n // id\n if (isShortHand(relation)) {\n return getId(relation) as T;\n }\n\n // { id }\n if (isLongHand(relation)) {\n // It's already an entry id\n if (isNumeric(relation.id)) return relation;\n\n // @ts-expect-error - TODO: Add relation type\n const id = getId(relation.id, relation.locale) as T;\n\n // If the id is not found, return undefined\n if (!id) return undefined;\n\n return { ...(relation as object), id } as T;\n }\n\n // id[]\n if (Array.isArray(relation)) {\n return relation.map((item) => transformPrimitive(item, getId)).filter(Boolean) as T[];\n }\n return undefined;\n};\n\nconst transformRelationIdsVisitor = <T extends Attribute.RelationKind.Any>(\n relation: EntityService.Params.Attribute.RelationInputValue<T>,\n getId: GetId\n): EntityService.Params.Attribute.RelationInputValue<T> => {\n const map = transformPrimitive(relation as any, getId);\n if (map) return map;\n\n if (!isObject(relation)) return relation;\n\n // set: id[]\n // what if result of mapPrimitive is undefined?\n if ('set' in relation) {\n relation.set = transformPrimitive(relation.set as any, getId);\n }\n if ('disconnect' in relation) {\n relation.disconnect = transformPrimitive(relation.disconnect as any, getId);\n }\n\n if ('connect' in relation) {\n // connect: id[] | { id } | ...\n relation.connect = transformPrimitive(relation.connect as any, getId);\n\n const mapPosition = (relation: any) => {\n if (isShortHand(relation) || !('position' in relation)) return relation;\n\n const { position } = relation;\n\n // { connect: { id: id, position: { before: id } } }\n if (position?.before) {\n const { id } = transformPrimitive({ ...position, id: position.before }, getId);\n position.before = id;\n }\n\n // { connect: { id: id, position: { after: id } } }\n if (position?.after) {\n const { id } = transformPrimitive({ ...position, id: position.after }, getId);\n position.after = id;\n }\n\n return relation;\n };\n\n if (Array.isArray(relation.connect)) {\n relation.connect = relation.connect.map(mapPosition);\n } else {\n relation.connect = mapPosition(relation.connect);\n }\n }\n\n return relation;\n};\n\nconst EXCLUDED_FIELDS = [\n 'createdBy',\n 'updatedBy',\n 'localizations',\n 'strapi_stage',\n 'strapi_assignee',\n];\n\nconst transformDataIdsVisitor = (\n idMap: IdMap,\n data: Record<string, any>,\n opts: {\n uid: Common.UID.Schema;\n locale?: string | null;\n isDraft?: boolean;\n allowMissingId?: boolean; // Whether to ignore missing ids and not throw any error\n }\n) => {\n return traverseEntity(\n ({ key, value, attribute }, { set }) => {\n // Find relational attributes, and return the document ids\n if (attribute.type === 'relation') {\n const target = attribute.target;\n // TODO: Handle polymorphic relations\n if (!target) return;\n // TODO: Handle this differently\n if (EXCLUDED_FIELDS.includes(key)) return;\n\n const getId = (documentId: ID, locale?: string): ID | null => {\n const entryId = idMap.get({\n uid: target,\n documentId: documentId as string,\n locale: getRelationTargetLocale(\n { id: documentId, locale },\n {\n targetUid: target as Common.UID.Schema,\n sourceUid: opts.uid,\n sourceLocale: opts.locale,\n }\n ),\n isDraft: opts.isDraft,\n });\n\n if (entryId) return entryId;\n if (opts.allowMissingId) return null;\n\n throw new Error(`Document with id \"${documentId}\" not found`);\n };\n\n const newRelation = transformRelationIdsVisitor(value as any, getId);\n set(key, newRelation as any);\n }\n },\n { schema: strapi.getModel(opts.uid) },\n data\n );\n};\n\nexport { transformDataIdsVisitor };\n"],"names":["isNil","isShortHand","isLongHand","isObject","relation","data","traverseEntity","getRelationTargetLocale"],"mappings":"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"}
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
import { traverseEntity } from "@strapi/utils";
|
|
2
|
+
import { isObject, isNil } from "lodash/fp";
|
|
3
|
+
import { isShortHand, isLongHand } from "../utils/data.mjs";
|
|
4
|
+
import { getRelationTargetLocale } from "../utils/i18n.mjs";
|
|
5
|
+
const isNumeric = (value) => {
|
|
6
|
+
const parsed = parseInt(value, 10);
|
|
7
|
+
return !Number.isNaN(parsed);
|
|
8
|
+
};
|
|
9
|
+
const transformPrimitive = (relation, getId) => {
|
|
10
|
+
if (isNumeric(relation)) {
|
|
11
|
+
return relation;
|
|
12
|
+
}
|
|
13
|
+
if (isNil(relation)) {
|
|
14
|
+
return relation;
|
|
15
|
+
}
|
|
16
|
+
if (isShortHand(relation)) {
|
|
17
|
+
return getId(relation);
|
|
18
|
+
}
|
|
19
|
+
if (isLongHand(relation)) {
|
|
20
|
+
if (isNumeric(relation.id))
|
|
21
|
+
return relation;
|
|
22
|
+
const id = getId(relation.id, relation.locale);
|
|
23
|
+
if (!id)
|
|
24
|
+
return void 0;
|
|
25
|
+
return { ...relation, id };
|
|
26
|
+
}
|
|
27
|
+
if (Array.isArray(relation)) {
|
|
28
|
+
return relation.map((item) => transformPrimitive(item, getId)).filter(Boolean);
|
|
29
|
+
}
|
|
30
|
+
return void 0;
|
|
31
|
+
};
|
|
32
|
+
const transformRelationIdsVisitor = (relation, getId) => {
|
|
33
|
+
const map = transformPrimitive(relation, getId);
|
|
34
|
+
if (map)
|
|
35
|
+
return map;
|
|
36
|
+
if (!isObject(relation))
|
|
37
|
+
return relation;
|
|
38
|
+
if ("set" in relation) {
|
|
39
|
+
relation.set = transformPrimitive(relation.set, getId);
|
|
40
|
+
}
|
|
41
|
+
if ("disconnect" in relation) {
|
|
42
|
+
relation.disconnect = transformPrimitive(relation.disconnect, getId);
|
|
43
|
+
}
|
|
44
|
+
if ("connect" in relation) {
|
|
45
|
+
relation.connect = transformPrimitive(relation.connect, getId);
|
|
46
|
+
const mapPosition = (relation2) => {
|
|
47
|
+
if (isShortHand(relation2) || !("position" in relation2))
|
|
48
|
+
return relation2;
|
|
49
|
+
const { position } = relation2;
|
|
50
|
+
if (position?.before) {
|
|
51
|
+
const { id } = transformPrimitive({ ...position, id: position.before }, getId);
|
|
52
|
+
position.before = id;
|
|
53
|
+
}
|
|
54
|
+
if (position?.after) {
|
|
55
|
+
const { id } = transformPrimitive({ ...position, id: position.after }, getId);
|
|
56
|
+
position.after = id;
|
|
57
|
+
}
|
|
58
|
+
return relation2;
|
|
59
|
+
};
|
|
60
|
+
if (Array.isArray(relation.connect)) {
|
|
61
|
+
relation.connect = relation.connect.map(mapPosition);
|
|
62
|
+
} else {
|
|
63
|
+
relation.connect = mapPosition(relation.connect);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
return relation;
|
|
67
|
+
};
|
|
68
|
+
const EXCLUDED_FIELDS = [
|
|
69
|
+
"createdBy",
|
|
70
|
+
"updatedBy",
|
|
71
|
+
"localizations",
|
|
72
|
+
"strapi_stage",
|
|
73
|
+
"strapi_assignee"
|
|
74
|
+
];
|
|
75
|
+
const transformDataIdsVisitor = (idMap, data, opts) => {
|
|
76
|
+
return traverseEntity(
|
|
77
|
+
({ key, value, attribute }, { set }) => {
|
|
78
|
+
if (attribute.type === "relation") {
|
|
79
|
+
const target = attribute.target;
|
|
80
|
+
if (!target)
|
|
81
|
+
return;
|
|
82
|
+
if (EXCLUDED_FIELDS.includes(key))
|
|
83
|
+
return;
|
|
84
|
+
const getId = (documentId, locale) => {
|
|
85
|
+
const entryId = idMap.get({
|
|
86
|
+
uid: target,
|
|
87
|
+
documentId,
|
|
88
|
+
locale: getRelationTargetLocale(
|
|
89
|
+
{ id: documentId, locale },
|
|
90
|
+
{
|
|
91
|
+
targetUid: target,
|
|
92
|
+
sourceUid: opts.uid,
|
|
93
|
+
sourceLocale: opts.locale
|
|
94
|
+
}
|
|
95
|
+
),
|
|
96
|
+
isDraft: opts.isDraft
|
|
97
|
+
});
|
|
98
|
+
if (entryId)
|
|
99
|
+
return entryId;
|
|
100
|
+
if (opts.allowMissingId)
|
|
101
|
+
return null;
|
|
102
|
+
throw new Error(`Document with id "${documentId}" not found`);
|
|
103
|
+
};
|
|
104
|
+
const newRelation = transformRelationIdsVisitor(value, getId);
|
|
105
|
+
set(key, newRelation);
|
|
106
|
+
}
|
|
107
|
+
},
|
|
108
|
+
{ schema: strapi.getModel(opts.uid) },
|
|
109
|
+
data
|
|
110
|
+
);
|
|
111
|
+
};
|
|
112
|
+
export {
|
|
113
|
+
transformDataIdsVisitor
|
|
114
|
+
};
|
|
115
|
+
//# sourceMappingURL=data-ids.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"data-ids.mjs","sources":["../../../../../../src/services/document-service/transform/relations/transform/data-ids.ts"],"sourcesContent":["import { EntityService, Attribute, Common } from '@strapi/types';\nimport { traverseEntity } from '@strapi/utils';\nimport { isObject, isNil } from 'lodash/fp';\nimport { ShortHand, LongHand, ID, GetId } from '../utils/types';\nimport { isShortHand, isLongHand } from '../utils/data';\nimport { IdMap } from '../../id-map';\nimport { getRelationTargetLocale } from '../utils/i18n';\n\nconst isNumeric = (value: any): value is number => {\n const parsed = parseInt(value, 10);\n return !Number.isNaN(parsed);\n};\n\nconst transformPrimitive = <T extends ShortHand | LongHand>(\n relation: T | T[] | null | undefined,\n getId: GetId\n): T | T[] | undefined => {\n // If id value is a number, return it as is, it's already an entry id\n if (isNumeric(relation)) {\n return relation;\n }\n\n // null\n if (isNil(relation)) {\n return relation as T | undefined;\n }\n\n // id\n if (isShortHand(relation)) {\n return getId(relation) as T;\n }\n\n // { id }\n if (isLongHand(relation)) {\n // It's already an entry id\n if (isNumeric(relation.id)) return relation;\n\n // @ts-expect-error - TODO: Add relation type\n const id = getId(relation.id, relation.locale) as T;\n\n // If the id is not found, return undefined\n if (!id) return undefined;\n\n return { ...(relation as object), id } as T;\n }\n\n // id[]\n if (Array.isArray(relation)) {\n return relation.map((item) => transformPrimitive(item, getId)).filter(Boolean) as T[];\n }\n return undefined;\n};\n\nconst transformRelationIdsVisitor = <T extends Attribute.RelationKind.Any>(\n relation: EntityService.Params.Attribute.RelationInputValue<T>,\n getId: GetId\n): EntityService.Params.Attribute.RelationInputValue<T> => {\n const map = transformPrimitive(relation as any, getId);\n if (map) return map;\n\n if (!isObject(relation)) return relation;\n\n // set: id[]\n // what if result of mapPrimitive is undefined?\n if ('set' in relation) {\n relation.set = transformPrimitive(relation.set as any, getId);\n }\n if ('disconnect' in relation) {\n relation.disconnect = transformPrimitive(relation.disconnect as any, getId);\n }\n\n if ('connect' in relation) {\n // connect: id[] | { id } | ...\n relation.connect = transformPrimitive(relation.connect as any, getId);\n\n const mapPosition = (relation: any) => {\n if (isShortHand(relation) || !('position' in relation)) return relation;\n\n const { position } = relation;\n\n // { connect: { id: id, position: { before: id } } }\n if (position?.before) {\n const { id } = transformPrimitive({ ...position, id: position.before }, getId);\n position.before = id;\n }\n\n // { connect: { id: id, position: { after: id } } }\n if (position?.after) {\n const { id } = transformPrimitive({ ...position, id: position.after }, getId);\n position.after = id;\n }\n\n return relation;\n };\n\n if (Array.isArray(relation.connect)) {\n relation.connect = relation.connect.map(mapPosition);\n } else {\n relation.connect = mapPosition(relation.connect);\n }\n }\n\n return relation;\n};\n\nconst EXCLUDED_FIELDS = [\n 'createdBy',\n 'updatedBy',\n 'localizations',\n 'strapi_stage',\n 'strapi_assignee',\n];\n\nconst transformDataIdsVisitor = (\n idMap: IdMap,\n data: Record<string, any>,\n opts: {\n uid: Common.UID.Schema;\n locale?: string | null;\n isDraft?: boolean;\n allowMissingId?: boolean; // Whether to ignore missing ids and not throw any error\n }\n) => {\n return traverseEntity(\n ({ key, value, attribute }, { set }) => {\n // Find relational attributes, and return the document ids\n if (attribute.type === 'relation') {\n const target = attribute.target;\n // TODO: Handle polymorphic relations\n if (!target) return;\n // TODO: Handle this differently\n if (EXCLUDED_FIELDS.includes(key)) return;\n\n const getId = (documentId: ID, locale?: string): ID | null => {\n const entryId = idMap.get({\n uid: target,\n documentId: documentId as string,\n locale: getRelationTargetLocale(\n { id: documentId, locale },\n {\n targetUid: target as Common.UID.Schema,\n sourceUid: opts.uid,\n sourceLocale: opts.locale,\n }\n ),\n isDraft: opts.isDraft,\n });\n\n if (entryId) return entryId;\n if (opts.allowMissingId) return null;\n\n throw new Error(`Document with id \"${documentId}\" not found`);\n };\n\n const newRelation = transformRelationIdsVisitor(value as any, getId);\n set(key, newRelation as any);\n }\n },\n { schema: strapi.getModel(opts.uid) },\n data\n );\n};\n\nexport { transformDataIdsVisitor };\n"],"names":["relation"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"output-ids.d.ts","sourceRoot":"","sources":["../../../../../../src/services/document-service/transform/relations/transform/output-ids.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAKvC,QAAA,MAAM,kBAAkB,QAAe,OAAO,GAAG,CAAC,MAAM,UAAU,OAAO,MAAM,EAAE,GAAG,CAAC,qDAuBpF,CAAC;AAEF,OAAO,EAAE,kBAAkB,EAAE,CAAC"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
+
const strapiUtils = require("@strapi/utils");
|
|
4
|
+
const _ = require("lodash/fp");
|
|
5
|
+
const utils = require("../../utils.js");
|
|
6
|
+
const transformOutputIds = async (uid, output) => {
|
|
7
|
+
return strapiUtils.traverseEntity(
|
|
8
|
+
({ key, value, attribute }, { set }) => {
|
|
9
|
+
if (attribute.type === "relation") {
|
|
10
|
+
if (Array.isArray(value)) {
|
|
11
|
+
set(key, value.map(utils.switchIdForDocumentId));
|
|
12
|
+
return;
|
|
13
|
+
}
|
|
14
|
+
if (!_.isObject(value))
|
|
15
|
+
return;
|
|
16
|
+
if ("id" in value && "documentId" in value) {
|
|
17
|
+
set(key, utils.switchIdForDocumentId(value));
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
},
|
|
21
|
+
{ schema: strapi.getModel(uid) },
|
|
22
|
+
output
|
|
23
|
+
);
|
|
24
|
+
};
|
|
25
|
+
exports.transformOutputIds = transformOutputIds;
|
|
26
|
+
//# sourceMappingURL=output-ids.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"output-ids.js","sources":["../../../../../../src/services/document-service/transform/relations/transform/output-ids.ts"],"sourcesContent":["import { Common } from '@strapi/types';\nimport { traverseEntity } from '@strapi/utils';\nimport { isObject } from 'lodash/fp';\nimport { switchIdForDocumentId } from '../../utils';\n\nconst transformOutputIds = async (uid: Common.UID.Schema, output: Record<string, any>) => {\n return traverseEntity(\n ({ key, value, attribute }, { set }) => {\n // Find relational attributes, and return the document ids\n if (attribute.type === 'relation') {\n // XToMany relations\n if (Array.isArray(value)) {\n // @ts-expect-error - TODO: Fix type\n set(key, value.map(switchIdForDocumentId));\n return;\n }\n\n if (!isObject(value)) return;\n // XToOne relations\n // If document id is in the response, switch it to be the id\n if ('id' in value && 'documentId' in value) {\n set(key, switchIdForDocumentId(value));\n }\n }\n },\n { schema: strapi.getModel(uid) },\n output\n );\n};\n\nexport { transformOutputIds };\n"],"names":["traverseEntity","switchIdForDocumentId","isObject"],"mappings":";;;;;AAKM,MAAA,qBAAqB,OAAO,KAAwB,WAAgC;AACjF,SAAAA,YAAA;AAAA,IACL,CAAC,EAAE,KAAK,OAAO,aAAa,EAAE,UAAU;AAElC,UAAA,UAAU,SAAS,YAAY;AAE7B,YAAA,MAAM,QAAQ,KAAK,GAAG;AAExB,cAAI,KAAK,MAAM,IAAIC,MAAAA,qBAAqB,CAAC;AACzC;AAAA,QACF;AAEI,YAAA,CAACC,WAAS,KAAK;AAAG;AAGlB,YAAA,QAAQ,SAAS,gBAAgB,OAAO;AACtC,cAAA,KAAKD,4BAAsB,KAAK,CAAC;AAAA,QACvC;AAAA,MACF;AAAA,IACF;AAAA,IACA,EAAE,QAAQ,OAAO,SAAS,GAAG,EAAE;AAAA,IAC/B;AAAA,EAAA;AAEJ;;"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { traverseEntity } from "@strapi/utils";
|
|
2
|
+
import { isObject } from "lodash/fp";
|
|
3
|
+
import { switchIdForDocumentId } from "../../utils.mjs";
|
|
4
|
+
const transformOutputIds = async (uid, output) => {
|
|
5
|
+
return traverseEntity(
|
|
6
|
+
({ key, value, attribute }, { set }) => {
|
|
7
|
+
if (attribute.type === "relation") {
|
|
8
|
+
if (Array.isArray(value)) {
|
|
9
|
+
set(key, value.map(switchIdForDocumentId));
|
|
10
|
+
return;
|
|
11
|
+
}
|
|
12
|
+
if (!isObject(value))
|
|
13
|
+
return;
|
|
14
|
+
if ("id" in value && "documentId" in value) {
|
|
15
|
+
set(key, switchIdForDocumentId(value));
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
},
|
|
19
|
+
{ schema: strapi.getModel(uid) },
|
|
20
|
+
output
|
|
21
|
+
);
|
|
22
|
+
};
|
|
23
|
+
export {
|
|
24
|
+
transformOutputIds
|
|
25
|
+
};
|
|
26
|
+
//# sourceMappingURL=output-ids.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"output-ids.mjs","sources":["../../../../../../src/services/document-service/transform/relations/transform/output-ids.ts"],"sourcesContent":["import { Common } from '@strapi/types';\nimport { traverseEntity } from '@strapi/utils';\nimport { isObject } from 'lodash/fp';\nimport { switchIdForDocumentId } from '../../utils';\n\nconst transformOutputIds = async (uid: Common.UID.Schema, output: Record<string, any>) => {\n return traverseEntity(\n ({ key, value, attribute }, { set }) => {\n // Find relational attributes, and return the document ids\n if (attribute.type === 'relation') {\n // XToMany relations\n if (Array.isArray(value)) {\n // @ts-expect-error - TODO: Fix type\n set(key, value.map(switchIdForDocumentId));\n return;\n }\n\n if (!isObject(value)) return;\n // XToOne relations\n // If document id is in the response, switch it to be the id\n if ('id' in value && 'documentId' in value) {\n set(key, switchIdForDocumentId(value));\n }\n }\n },\n { schema: strapi.getModel(uid) },\n output\n );\n};\n\nexport { transformOutputIds };\n"],"names":[],"mappings":";;;AAKM,MAAA,qBAAqB,OAAO,KAAwB,WAAgC;AACjF,SAAA;AAAA,IACL,CAAC,EAAE,KAAK,OAAO,aAAa,EAAE,UAAU;AAElC,UAAA,UAAU,SAAS,YAAY;AAE7B,YAAA,MAAM,QAAQ,KAAK,GAAG;AAExB,cAAI,KAAK,MAAM,IAAI,qBAAqB,CAAC;AACzC;AAAA,QACF;AAEI,YAAA,CAAC,SAAS,KAAK;AAAG;AAGlB,YAAA,QAAQ,SAAS,gBAAgB,OAAO;AACtC,cAAA,KAAK,sBAAsB,KAAK,CAAC;AAAA,QACvC;AAAA,MACF;AAAA,IACF;AAAA,IACA,EAAE,QAAQ,OAAO,SAAS,GAAG,EAAE;AAAA,IAC/B;AAAA,EAAA;AAEJ;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"data.d.ts","sourceRoot":"","sources":["../../../../../../src/services/document-service/transform/relations/utils/data.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,EAAE,EAAE,MAAM,SAAS,CAAC;AAE7B,eAAO,MAAM,WAAW,aAAc,GAAG,mBAExC,CAAC;AAEF,eAAO,MAAM,UAAU,aAAc,GAAG;QAAqB,EAAE;CAE9D,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
+
const _ = require("lodash/fp");
|
|
4
|
+
const isShortHand = (relation) => {
|
|
5
|
+
return typeof relation === "string" || typeof relation === "number";
|
|
6
|
+
};
|
|
7
|
+
const isLongHand = (relation) => {
|
|
8
|
+
return _.isObject(relation) && "id" in relation;
|
|
9
|
+
};
|
|
10
|
+
exports.isLongHand = isLongHand;
|
|
11
|
+
exports.isShortHand = isShortHand;
|
|
12
|
+
//# sourceMappingURL=data.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"data.js","sources":["../../../../../../src/services/document-service/transform/relations/utils/data.ts"],"sourcesContent":["import { isObject } from 'lodash/fp';\nimport { ID } from './types';\n\nexport const isShortHand = (relation: any): relation is ID => {\n return typeof relation === 'string' || typeof relation === 'number';\n};\n\nexport const isLongHand = (relation: any): relation is { id: ID } => {\n return isObject(relation) && 'id' in relation;\n};\n"],"names":["isObject"],"mappings":";;;AAGa,MAAA,cAAc,CAAC,aAAkC;AAC5D,SAAO,OAAO,aAAa,YAAY,OAAO,aAAa;AAC7D;AAEa,MAAA,aAAa,CAAC,aAA0C;AAC5D,SAAAA,WAAS,QAAQ,KAAK,QAAQ;AACvC;;;"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { isObject } from "lodash/fp";
|
|
2
|
+
const isShortHand = (relation) => {
|
|
3
|
+
return typeof relation === "string" || typeof relation === "number";
|
|
4
|
+
};
|
|
5
|
+
const isLongHand = (relation) => {
|
|
6
|
+
return isObject(relation) && "id" in relation;
|
|
7
|
+
};
|
|
8
|
+
export {
|
|
9
|
+
isLongHand,
|
|
10
|
+
isShortHand
|
|
11
|
+
};
|
|
12
|
+
//# sourceMappingURL=data.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"data.mjs","sources":["../../../../../../src/services/document-service/transform/relations/utils/data.ts"],"sourcesContent":["import { isObject } from 'lodash/fp';\nimport { ID } from './types';\n\nexport const isShortHand = (relation: any): relation is ID => {\n return typeof relation === 'string' || typeof relation === 'number';\n};\n\nexport const isLongHand = (relation: any): relation is { id: ID } => {\n return isObject(relation) && 'id' in relation;\n};\n"],"names":[],"mappings":";AAGa,MAAA,cAAc,CAAC,aAAkC;AAC5D,SAAO,OAAO,aAAa,YAAY,OAAO,aAAa;AAC7D;AAEa,MAAA,aAAa,CAAC,aAA0C;AAC5D,SAAA,SAAS,QAAQ,KAAK,QAAQ;AACvC;"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { Common } from '@strapi/types';
|
|
2
|
+
import { LongHand } from './types';
|
|
3
|
+
export declare const isLocalizedContentType: (uid: Common.UID.Schema) => any;
|
|
4
|
+
export declare const getDefaultLocale: () => string;
|
|
5
|
+
export declare const getRelationTargetLocale: (relation: LongHand, opts: {
|
|
6
|
+
targetUid: Common.UID.Schema;
|
|
7
|
+
sourceUid: Common.UID.Schema;
|
|
8
|
+
sourceLocale?: string | null;
|
|
9
|
+
}) => string | null;
|
|
10
|
+
//# sourceMappingURL=i18n.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"i18n.d.ts","sourceRoot":"","sources":["../../../../../../src/services/document-service/transform/relations/utils/i18n.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAEvC,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAEnC,eAAO,MAAM,sBAAsB,QAAS,OAAO,GAAG,CAAC,MAAM,QAG5D,CAAC;AAEF,eAAO,MAAM,gBAAgB,cAI5B,CAAC;AAEF,eAAO,MAAM,uBAAuB,aACxB,QAAQ,QACZ;IACJ,SAAS,EAAE,OAAO,GAAG,CAAC,MAAM,CAAC;IAC7B,SAAS,EAAE,OAAO,GAAG,CAAC,MAAM,CAAC;IAC7B,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC9B,kBAuBF,CAAC"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
+
const strapiUtils = require("@strapi/utils");
|
|
4
|
+
const isLocalizedContentType = (uid) => {
|
|
5
|
+
const model = strapi.getModel(uid);
|
|
6
|
+
return strapi.plugin("i18n").service("content-types").isLocalizedContentType(model);
|
|
7
|
+
};
|
|
8
|
+
const getDefaultLocale = () => {
|
|
9
|
+
return "en";
|
|
10
|
+
};
|
|
11
|
+
const getRelationTargetLocale = (relation, opts) => {
|
|
12
|
+
const defaultLocale = getDefaultLocale();
|
|
13
|
+
const targetLocale = relation.locale || opts.sourceLocale || defaultLocale;
|
|
14
|
+
const isTargetLocalized = isLocalizedContentType(opts.targetUid);
|
|
15
|
+
const isSourceLocalized = isLocalizedContentType(opts.sourceUid);
|
|
16
|
+
if (isSourceLocalized && isTargetLocalized) {
|
|
17
|
+
if (targetLocale !== opts.sourceLocale) {
|
|
18
|
+
throw new strapiUtils.errors.ValidationError(
|
|
19
|
+
`Relation locale does not match the source locale ${JSON.stringify(relation)}`
|
|
20
|
+
);
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
if (isTargetLocalized) {
|
|
24
|
+
return targetLocale;
|
|
25
|
+
}
|
|
26
|
+
return null;
|
|
27
|
+
};
|
|
28
|
+
exports.getDefaultLocale = getDefaultLocale;
|
|
29
|
+
exports.getRelationTargetLocale = getRelationTargetLocale;
|
|
30
|
+
exports.isLocalizedContentType = isLocalizedContentType;
|
|
31
|
+
//# sourceMappingURL=i18n.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"i18n.js","sources":["../../../../../../src/services/document-service/transform/relations/utils/i18n.ts"],"sourcesContent":["import { Common } from '@strapi/types';\nimport { errors } from '@strapi/utils';\nimport { LongHand } from './types';\n\nexport const isLocalizedContentType = (uid: Common.UID.Schema) => {\n const model = strapi.getModel(uid);\n return strapi.plugin('i18n').service('content-types').isLocalizedContentType(model);\n};\n\nexport const getDefaultLocale = () => {\n // TODO: Fix this\n // return strapi.plugin('i18n').service('locales').getDefaultLocale();\n return 'en';\n};\n\nexport const getRelationTargetLocale = (\n relation: LongHand,\n opts: {\n targetUid: Common.UID.Schema;\n sourceUid: Common.UID.Schema;\n sourceLocale?: string | null;\n }\n) => {\n const defaultLocale = getDefaultLocale();\n const targetLocale = relation.locale || opts.sourceLocale || defaultLocale;\n\n const isTargetLocalized = isLocalizedContentType(opts.targetUid);\n const isSourceLocalized = isLocalizedContentType(opts.sourceUid);\n\n // Locale validations\n if (isSourceLocalized && isTargetLocalized) {\n // Check the targetLocale matches\n if (targetLocale !== opts.sourceLocale) {\n throw new errors.ValidationError(\n `Relation locale does not match the source locale ${JSON.stringify(relation)}`\n );\n }\n }\n\n if (isTargetLocalized) {\n return targetLocale;\n }\n\n return null;\n};\n"],"names":["errors"],"mappings":";;;AAIa,MAAA,yBAAyB,CAAC,QAA2B;AAC1D,QAAA,QAAQ,OAAO,SAAS,GAAG;AAC1B,SAAA,OAAO,OAAO,MAAM,EAAE,QAAQ,eAAe,EAAE,uBAAuB,KAAK;AACpF;AAEO,MAAM,mBAAmB,MAAM;AAG7B,SAAA;AACT;AAEa,MAAA,0BAA0B,CACrC,UACA,SAKG;AACH,QAAM,gBAAgB;AACtB,QAAM,eAAe,SAAS,UAAU,KAAK,gBAAgB;AAEvD,QAAA,oBAAoB,uBAAuB,KAAK,SAAS;AACzD,QAAA,oBAAoB,uBAAuB,KAAK,SAAS;AAG/D,MAAI,qBAAqB,mBAAmB;AAEtC,QAAA,iBAAiB,KAAK,cAAc;AACtC,YAAM,IAAIA,YAAO,OAAA;AAAA,QACf,oDAAoD,KAAK,UAAU,QAAQ,CAAC;AAAA,MAAA;AAAA,IAEhF;AAAA,EACF;AAEA,MAAI,mBAAmB;AACd,WAAA;AAAA,EACT;AAEO,SAAA;AACT;;;;"}
|