@strapi/core 0.0.0-experimental.3f7b2587c5e3d548262671895cf11d8bf8c9166e → 0.0.0-experimental.45c1b845d32b56e7c14f4155ec0d4a2d2774c77e
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 +8 -4
- package/dist/Strapi.js.map +1 -1
- package/dist/Strapi.mjs +7 -3
- package/dist/Strapi.mjs.map +1 -1
- package/dist/configuration/index.d.ts.map +1 -1
- package/dist/configuration/index.js +4 -4
- package/dist/configuration/index.js.map +1 -1
- package/dist/configuration/index.mjs +1 -1
- package/dist/configuration/index.mjs.map +1 -1
- package/dist/configuration/urls.d.ts +8 -0
- package/dist/configuration/urls.d.ts.map +1 -0
- package/dist/configuration/urls.js +68 -0
- package/dist/configuration/urls.js.map +1 -0
- package/dist/configuration/urls.mjs +66 -0
- package/dist/configuration/urls.mjs.map +1 -0
- 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 +8 -3
- package/dist/core-api/controller/index.js.map +1 -1
- package/dist/core-api/controller/index.mjs +8 -3
- 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 +9 -17
- package/dist/core-api/controller/transform.d.ts.map +1 -1
- package/dist/core-api/controller/transform.js +9 -14
- package/dist/core-api/controller/transform.js.map +1 -1
- package/dist/core-api/controller/transform.mjs +9 -14
- 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 +14 -8
- package/dist/core-api/service/single-type.d.ts.map +1 -1
- package/dist/core-api/service/single-type.js +35 -50
- package/dist/core-api/service/single-type.js.map +1 -1
- package/dist/core-api/service/single-type.mjs +34 -50
- package/dist/core-api/service/single-type.mjs.map +1 -1
- package/dist/domain/content-type/index.d.ts.map +1 -1
- package/dist/domain/content-type/index.js +3 -0
- package/dist/domain/content-type/index.js.map +1 -1
- package/dist/domain/content-type/index.mjs +3 -0
- package/dist/domain/content-type/index.mjs.map +1 -1
- package/dist/domain/content-type/validator.d.ts.map +1 -1
- package/dist/domain/content-type/validator.js +1 -1
- package/dist/domain/content-type/validator.js.map +1 -1
- package/dist/domain/content-type/validator.mjs +2 -2
- package/dist/domain/content-type/validator.mjs.map +1 -1
- package/dist/domain/module/index.d.ts.map +1 -1
- package/dist/domain/module/index.js +2 -3
- package/dist/domain/module/index.js.map +1 -1
- package/dist/domain/module/index.mjs +2 -3
- package/dist/domain/module/index.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/loaders/apis.js +1 -1
- package/dist/loaders/apis.js.map +1 -1
- package/dist/loaders/apis.mjs +2 -2
- package/dist/loaders/apis.mjs.map +1 -1
- package/dist/loaders/plugins/get-enabled-plugins.js +1 -1
- package/dist/loaders/plugins/get-enabled-plugins.js.map +1 -1
- package/dist/loaders/plugins/get-enabled-plugins.mjs +2 -2
- package/dist/loaders/plugins/get-enabled-plugins.mjs.map +1 -1
- package/dist/registries/config.d.ts +2 -2
- package/dist/registries/config.d.ts.map +1 -1
- package/dist/registries/config.js +14 -6
- package/dist/registries/config.js.map +1 -1
- package/dist/registries/config.mjs +15 -5
- package/dist/registries/config.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/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/draft-and-publish.d.ts +10 -0
- package/dist/services/document-service/draft-and-publish.d.ts.map +1 -0
- package/dist/services/document-service/draft-and-publish.js +69 -0
- package/dist/services/document-service/draft-and-publish.js.map +1 -0
- package/dist/services/document-service/draft-and-publish.mjs +69 -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 +8 -0
- package/dist/services/document-service/internationalization.d.ts.map +1 -0
- package/dist/services/document-service/internationalization.js +54 -0
- package/dist/services/document-service/internationalization.js.map +1 -0
- package/dist/services/document-service/internationalization.mjs +54 -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.d.ts +3 -0
- package/dist/services/document-service/repository.d.ts.map +1 -0
- package/dist/services/document-service/repository.js +304 -0
- package/dist/services/document-service/repository.js.map +1 -0
- package/dist/services/document-service/repository.mjs +304 -0
- package/dist/services/document-service/repository.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 +24 -0
- package/dist/services/document-service/transform/fields.js.map +1 -0
- package/dist/services/document-service/transform/fields.mjs +24 -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/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 +78 -0
- package/dist/services/document-service/transform/id-map.js.map +1 -0
- package/dist/services/document-service/transform/id-map.mjs +78 -0
- package/dist/services/document-service/transform/id-map.mjs.map +1 -0
- package/dist/services/document-service/transform/id-transform.d.ts +5 -0
- package/dist/services/document-service/transform/id-transform.d.ts.map +1 -0
- package/dist/services/document-service/transform/id-transform.js +33 -0
- package/dist/services/document-service/transform/id-transform.js.map +1 -0
- package/dist/services/document-service/transform/id-transform.mjs +33 -0
- package/dist/services/document-service/transform/id-transform.mjs.map +1 -0
- package/dist/services/document-service/transform/populate.d.ts +6 -0
- package/dist/services/document-service/transform/populate.d.ts.map +1 -0
- package/dist/services/document-service/transform/populate.js +21 -0
- package/dist/services/document-service/transform/populate.js.map +1 -0
- package/dist/services/document-service/transform/populate.mjs +21 -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 +90 -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 +90 -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 +141 -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 +141 -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/utils/data.d.ts +4 -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/dp.d.ts +10 -0
- package/dist/services/document-service/transform/relations/utils/dp.d.ts.map +1 -0
- package/dist/services/document-service/transform/relations/utils/dp.js +25 -0
- package/dist/services/document-service/transform/relations/utils/dp.js.map +1 -0
- package/dist/services/document-service/transform/relations/utils/dp.mjs +25 -0
- package/dist/services/document-service/transform/relations/utils/dp.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 +15 -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/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/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-service/components.js +8 -8
- package/dist/services/entity-service/components.js.map +1 -1
- package/dist/services/entity-service/components.mjs +9 -9
- package/dist/services/entity-service/components.mjs.map +1 -1
- package/dist/services/entity-service/index.d.ts.map +1 -1
- package/dist/services/entity-service/index.js +3 -3
- package/dist/services/entity-service/index.js.map +1 -1
- package/dist/services/entity-service/index.mjs +3 -3
- package/dist/services/entity-service/index.mjs.map +1 -1
- package/dist/services/entity-service/params.d.ts +4 -4
- package/dist/services/entity-service/params.d.ts.map +1 -1
- package/dist/services/entity-service/params.js +1 -1
- package/dist/services/entity-service/params.js.map +1 -1
- package/dist/services/entity-service/params.mjs +1 -1
- package/dist/services/entity-service/params.mjs.map +1 -1
- 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/dist/utils/load-config-file.js +1 -1
- package/dist/utils/load-config-file.js.map +1 -1
- package/dist/utils/load-config-file.mjs +2 -2
- package/dist/utils/load-config-file.mjs.map +1 -1
- package/dist/utils/transform-content-types-to-models.d.ts +174 -3
- package/dist/utils/transform-content-types-to-models.d.ts.map +1 -1
- package/dist/utils/transform-content-types-to-models.js +80 -41
- package/dist/utils/transform-content-types-to-models.js.map +1 -1
- package/dist/utils/transform-content-types-to-models.mjs +79 -41
- package/dist/utils/transform-content-types-to-models.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-engine.d.ts +0 -8
- package/dist/services/document-service/document-engine.d.ts.map +0 -1
- package/dist/services/document-service/document-engine.js +0 -200
- package/dist/services/document-service/document-engine.js.map +0 -1
- package/dist/services/document-service/document-engine.mjs +0 -201
- package/dist/services/document-service/document-engine.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,5 +1,16 @@
|
|
|
1
|
+
import { utils } from "@strapi/database";
|
|
1
2
|
import { createId } from "@paralleldrive/cuid2";
|
|
2
3
|
import assert from "node:assert";
|
|
4
|
+
import _ from "lodash/fp";
|
|
5
|
+
const { identifiers } = utils;
|
|
6
|
+
const COMPONENT_JOIN_TABLE_SUFFIX = "components";
|
|
7
|
+
const DZ_JOIN_TABLE_SUFFIX = "components";
|
|
8
|
+
const COMPONENT_INVERSE_COLUMN_NAME = "component";
|
|
9
|
+
const COMPONENT_TYPE_COLUMN = "component_type";
|
|
10
|
+
const ENTITY = "entity";
|
|
11
|
+
const getComponentJoinTableName = (collectionName) => identifiers.getTableName(collectionName, { suffix: COMPONENT_JOIN_TABLE_SUFFIX });
|
|
12
|
+
const getDzJoinTableName = (collectionName) => identifiers.getTableName(collectionName, { suffix: DZ_JOIN_TABLE_SUFFIX });
|
|
13
|
+
const { ID_COLUMN: id, FIELD_COLUMN: field, ORDER_COLUMN: order } = identifiers;
|
|
3
14
|
const transformAttribute = (name, attribute, contentType) => {
|
|
4
15
|
switch (attribute.type) {
|
|
5
16
|
case "media": {
|
|
@@ -11,6 +22,11 @@ const transformAttribute = (name, attribute, contentType) => {
|
|
|
11
22
|
};
|
|
12
23
|
}
|
|
13
24
|
case "component": {
|
|
25
|
+
const joinTableName = getComponentJoinTableName(contentType.collectionName);
|
|
26
|
+
const joinColumnEntityName = identifiers.getJoinColumnAttributeIdName(ENTITY);
|
|
27
|
+
const joinColumnInverseName = identifiers.getJoinColumnAttributeIdName(
|
|
28
|
+
COMPONENT_INVERSE_COLUMN_NAME
|
|
29
|
+
);
|
|
14
30
|
return {
|
|
15
31
|
type: "relation",
|
|
16
32
|
relation: attribute.repeatable === true ? "oneToMany" : "oneToOne",
|
|
@@ -18,45 +34,50 @@ const transformAttribute = (name, attribute, contentType) => {
|
|
|
18
34
|
// We need the join table name to be deterministic,
|
|
19
35
|
// We need to allow passing the join table name as an option
|
|
20
36
|
joinTable: {
|
|
21
|
-
name:
|
|
37
|
+
name: joinTableName,
|
|
22
38
|
joinColumn: {
|
|
23
|
-
name:
|
|
24
|
-
referencedColumn:
|
|
39
|
+
name: joinColumnEntityName,
|
|
40
|
+
referencedColumn: id
|
|
25
41
|
},
|
|
26
42
|
inverseJoinColumn: {
|
|
27
|
-
name:
|
|
28
|
-
referencedColumn:
|
|
43
|
+
name: joinColumnInverseName,
|
|
44
|
+
referencedColumn: id
|
|
29
45
|
},
|
|
30
46
|
on: {
|
|
31
47
|
field: name
|
|
32
48
|
},
|
|
33
|
-
orderColumnName:
|
|
49
|
+
orderColumnName: order,
|
|
34
50
|
orderBy: {
|
|
35
51
|
order: "asc"
|
|
36
52
|
},
|
|
37
|
-
pivotColumns: [
|
|
53
|
+
pivotColumns: [joinColumnEntityName, joinColumnInverseName, field, COMPONENT_TYPE_COLUMN]
|
|
38
54
|
}
|
|
39
55
|
};
|
|
40
56
|
}
|
|
41
57
|
case "dynamiczone": {
|
|
58
|
+
const joinTableName = getDzJoinTableName(contentType.collectionName);
|
|
59
|
+
const joinColumnEntityName = identifiers.getJoinColumnAttributeIdName(ENTITY);
|
|
60
|
+
const joinColumnInverseName = identifiers.getJoinColumnAttributeIdName(
|
|
61
|
+
COMPONENT_INVERSE_COLUMN_NAME
|
|
62
|
+
);
|
|
42
63
|
return {
|
|
43
64
|
type: "relation",
|
|
44
65
|
relation: "morphToMany",
|
|
45
66
|
// TODO: handle restrictions at some point
|
|
46
67
|
// target: attribute.components,
|
|
47
68
|
joinTable: {
|
|
48
|
-
name:
|
|
69
|
+
name: joinTableName,
|
|
49
70
|
joinColumn: {
|
|
50
|
-
name:
|
|
51
|
-
referencedColumn:
|
|
71
|
+
name: joinColumnEntityName,
|
|
72
|
+
referencedColumn: id
|
|
52
73
|
},
|
|
53
74
|
morphColumn: {
|
|
54
75
|
idColumn: {
|
|
55
|
-
name:
|
|
56
|
-
referencedColumn:
|
|
76
|
+
name: joinColumnInverseName,
|
|
77
|
+
referencedColumn: id
|
|
57
78
|
},
|
|
58
79
|
typeColumn: {
|
|
59
|
-
name:
|
|
80
|
+
name: COMPONENT_TYPE_COLUMN
|
|
60
81
|
},
|
|
61
82
|
typeField: "__component"
|
|
62
83
|
},
|
|
@@ -66,7 +87,7 @@ const transformAttribute = (name, attribute, contentType) => {
|
|
|
66
87
|
orderBy: {
|
|
67
88
|
order: "asc"
|
|
68
89
|
},
|
|
69
|
-
pivotColumns: [
|
|
90
|
+
pivotColumns: [joinColumnEntityName, joinColumnInverseName, field, COMPONENT_TYPE_COLUMN]
|
|
70
91
|
}
|
|
71
92
|
};
|
|
72
93
|
}
|
|
@@ -84,41 +105,44 @@ const transformAttributes = (contentType) => {
|
|
|
84
105
|
}, {});
|
|
85
106
|
};
|
|
86
107
|
const hasComponentsOrDz = (contentType) => {
|
|
87
|
-
return Object.values(contentType.attributes).some(
|
|
108
|
+
return Object.values(contentType.attributes || {}).some(
|
|
88
109
|
({ type }) => type === "dynamiczone" || type === "component"
|
|
89
110
|
);
|
|
90
111
|
};
|
|
91
112
|
const createDocumentId = createId;
|
|
92
113
|
const createCompoLinkModel = (contentType) => {
|
|
93
|
-
const name =
|
|
114
|
+
const name = getComponentJoinTableName(contentType.collectionName);
|
|
115
|
+
const entityId = identifiers.getJoinColumnAttributeIdName(ENTITY);
|
|
116
|
+
const componentId = identifiers.getJoinColumnAttributeIdName(COMPONENT_INVERSE_COLUMN_NAME);
|
|
117
|
+
const fkIndex = identifiers.getFkIndexName([contentType.collectionName, ENTITY]);
|
|
94
118
|
return {
|
|
95
119
|
// TODO: make sure there can't be any conflicts with a prefix
|
|
96
120
|
singularName: name,
|
|
97
121
|
uid: name,
|
|
98
122
|
tableName: name,
|
|
99
123
|
attributes: {
|
|
100
|
-
id: {
|
|
124
|
+
[id]: {
|
|
101
125
|
type: "increments"
|
|
102
126
|
},
|
|
103
|
-
|
|
127
|
+
[entityId]: {
|
|
104
128
|
type: "integer",
|
|
105
129
|
column: {
|
|
106
130
|
unsigned: true
|
|
107
131
|
}
|
|
108
132
|
},
|
|
109
|
-
|
|
133
|
+
[componentId]: {
|
|
110
134
|
type: "integer",
|
|
111
135
|
column: {
|
|
112
136
|
unsigned: true
|
|
113
137
|
}
|
|
114
138
|
},
|
|
115
|
-
|
|
139
|
+
[COMPONENT_TYPE_COLUMN]: {
|
|
116
140
|
type: "string"
|
|
117
141
|
},
|
|
118
|
-
field: {
|
|
142
|
+
[field]: {
|
|
119
143
|
type: "string"
|
|
120
144
|
},
|
|
121
|
-
order: {
|
|
145
|
+
[order]: {
|
|
122
146
|
type: "float",
|
|
123
147
|
column: {
|
|
124
148
|
unsigned: true,
|
|
@@ -128,29 +152,30 @@ const createCompoLinkModel = (contentType) => {
|
|
|
128
152
|
},
|
|
129
153
|
indexes: [
|
|
130
154
|
{
|
|
131
|
-
name:
|
|
132
|
-
columns: [
|
|
155
|
+
name: identifiers.getIndexName([contentType.collectionName, field]),
|
|
156
|
+
columns: [field]
|
|
133
157
|
},
|
|
134
158
|
{
|
|
135
|
-
name:
|
|
136
|
-
columns: [
|
|
159
|
+
name: identifiers.getIndexName([contentType.collectionName, COMPONENT_TYPE_COLUMN]),
|
|
160
|
+
columns: [COMPONENT_TYPE_COLUMN]
|
|
137
161
|
},
|
|
138
162
|
{
|
|
139
|
-
name:
|
|
140
|
-
columns: [
|
|
163
|
+
name: fkIndex,
|
|
164
|
+
columns: [entityId]
|
|
141
165
|
},
|
|
142
166
|
{
|
|
143
|
-
|
|
144
|
-
|
|
167
|
+
// NOTE: since we don't include attribute names, we need to be careful not to create another unique index
|
|
168
|
+
name: identifiers.getUniqueIndexName([contentType.collectionName]),
|
|
169
|
+
columns: [entityId, componentId, field, COMPONENT_TYPE_COLUMN],
|
|
145
170
|
type: "unique"
|
|
146
171
|
}
|
|
147
172
|
],
|
|
148
173
|
foreignKeys: [
|
|
149
174
|
{
|
|
150
|
-
name:
|
|
151
|
-
columns: [
|
|
152
|
-
referencedColumns: [
|
|
153
|
-
referencedTable: contentType.collectionName,
|
|
175
|
+
name: fkIndex,
|
|
176
|
+
columns: [entityId],
|
|
177
|
+
referencedColumns: [id],
|
|
178
|
+
referencedTable: identifiers.getTableName(contentType.collectionName),
|
|
154
179
|
onDelete: "CASCADE"
|
|
155
180
|
}
|
|
156
181
|
]
|
|
@@ -159,12 +184,16 @@ const createCompoLinkModel = (contentType) => {
|
|
|
159
184
|
const transformContentTypesToModels = (contentTypes) => {
|
|
160
185
|
const models = [];
|
|
161
186
|
contentTypes.forEach((contentType) => {
|
|
187
|
+
assert(contentType.collectionName, 'Content type "collectionName" is required');
|
|
188
|
+
assert(contentType.modelName, 'Content type "modelName" is required');
|
|
189
|
+
assert(contentType.uid, 'Content type "uid" is required');
|
|
162
190
|
const documentIdAttribute = contentType.modelType === "contentType" ? { documentId: { type: "string", default: createDocumentId } } : {};
|
|
163
|
-
const reservedAttributeNames = ["
|
|
164
|
-
|
|
165
|
-
|
|
191
|
+
const reservedAttributeNames = ["document_id", id];
|
|
192
|
+
Object.keys(contentType.attributes || {}).forEach((attributeName) => {
|
|
193
|
+
const snakeCasedAttributeName = _.snakeCase(attributeName);
|
|
194
|
+
if (reservedAttributeNames.includes(snakeCasedAttributeName)) {
|
|
166
195
|
throw new Error(
|
|
167
|
-
`The attribute "${
|
|
196
|
+
`The attribute "${attributeName}" is reserved and cannot be used in a model. Please rename "${contentType.modelName}" attribute "${attributeName}" to something else.`
|
|
168
197
|
);
|
|
169
198
|
}
|
|
170
199
|
});
|
|
@@ -172,13 +201,12 @@ const transformContentTypesToModels = (contentTypes) => {
|
|
|
172
201
|
const compoLinkModel = createCompoLinkModel(contentType);
|
|
173
202
|
models.push(compoLinkModel);
|
|
174
203
|
}
|
|
175
|
-
assert(contentType.collectionName, "Collection name is required");
|
|
176
204
|
const model = {
|
|
177
205
|
uid: contentType.uid,
|
|
178
206
|
singularName: contentType.modelName,
|
|
179
|
-
tableName: contentType.collectionName,
|
|
207
|
+
tableName: identifiers.getTableName(contentType.collectionName),
|
|
180
208
|
attributes: {
|
|
181
|
-
id: {
|
|
209
|
+
[id]: {
|
|
182
210
|
type: "increments"
|
|
183
211
|
},
|
|
184
212
|
...documentIdAttribute,
|
|
@@ -190,7 +218,17 @@ const transformContentTypesToModels = (contentTypes) => {
|
|
|
190
218
|
return models;
|
|
191
219
|
};
|
|
192
220
|
export {
|
|
221
|
+
COMPONENT_INVERSE_COLUMN_NAME,
|
|
222
|
+
COMPONENT_JOIN_TABLE_SUFFIX,
|
|
223
|
+
COMPONENT_TYPE_COLUMN,
|
|
224
|
+
DZ_JOIN_TABLE_SUFFIX,
|
|
225
|
+
ENTITY,
|
|
193
226
|
createDocumentId,
|
|
227
|
+
getComponentJoinTableName,
|
|
228
|
+
getDzJoinTableName,
|
|
229
|
+
hasComponentsOrDz,
|
|
230
|
+
transformAttribute,
|
|
231
|
+
transformAttributes,
|
|
194
232
|
transformContentTypesToModels
|
|
195
233
|
};
|
|
196
234
|
//# sourceMappingURL=transform-content-types-to-models.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transform-content-types-to-models.mjs","sources":["../../src/utils/transform-content-types-to-models.ts"],"sourcesContent":["import { Model } from '@strapi/database';\nimport { Schema, Attribute } from '@strapi/types';\nimport { createId } from '@paralleldrive/cuid2';\nimport assert from 'node:assert';\n\nconst transformAttribute = (\n name: string,\n attribute: Attribute.Any,\n contentType: Schema.ContentType\n) => {\n switch (attribute.type) {\n case 'media': {\n return {\n type: 'relation',\n relation: attribute.multiple === true ? 'morphMany' : 'morphOne',\n target: 'plugin::upload.file',\n morphBy: 'related',\n };\n }\n case 'component': {\n return {\n type: 'relation',\n relation: attribute.repeatable === true ? 'oneToMany' : 'oneToOne',\n target: attribute.component,\n\n // We need the join table name to be deterministic,\n // We need to allow passing the join table name as an option\n joinTable: {\n name: `${contentType.collectionName}_components`,\n joinColumn: {\n name: 'entity_id',\n referencedColumn: 'id',\n },\n inverseJoinColumn: {\n name: 'component_id',\n referencedColumn: 'id',\n },\n on: {\n field: name,\n },\n orderColumnName: 'order',\n orderBy: {\n order: 'asc',\n },\n pivotColumns: ['entity_id', 'component_id', 'field', 'component_type'],\n },\n };\n }\n case 'dynamiczone': {\n return {\n type: 'relation',\n relation: 'morphToMany',\n // TODO: handle restrictions at some point\n // target: attribute.components,\n joinTable: {\n name: `${contentType.collectionName}_components`,\n joinColumn: {\n name: 'entity_id',\n referencedColumn: 'id',\n },\n morphColumn: {\n idColumn: {\n name: 'component_id',\n referencedColumn: 'id',\n },\n typeColumn: {\n name: 'component_type',\n },\n typeField: '__component',\n },\n on: {\n field: name,\n },\n orderBy: {\n order: 'asc',\n },\n pivotColumns: ['entity_id', 'component_id', 'field', 'component_type'],\n },\n };\n }\n default: {\n return attribute;\n }\n }\n};\n\nconst transformAttributes = (contentType: Schema.ContentType) => {\n return Object.keys(contentType.attributes! || {}).reduce((attrs, attrName) => {\n return {\n ...attrs,\n [attrName]: transformAttribute(attrName, contentType.attributes[attrName]!, contentType),\n };\n }, {});\n};\n\nconst hasComponentsOrDz = (contentType: Schema.ContentType) => {\n return Object.values(contentType.attributes).some(\n ({ type }) => type === 'dynamiczone' || type === 'component'\n );\n};\n\nexport const createDocumentId = createId;\n\nconst createCompoLinkModel = (contentType: Schema.ContentType): Model => {\n const name = `${contentType.collectionName}_components`;\n\n return {\n // TODO: make sure there can't be any conflicts with a prefix\n singularName: name,\n uid: name,\n tableName: name,\n attributes: {\n id: {\n type: 'increments',\n },\n entity_id: {\n type: 'integer',\n column: {\n unsigned: true,\n },\n },\n component_id: {\n type: 'integer',\n column: {\n unsigned: true,\n },\n },\n component_type: {\n type: 'string',\n },\n field: {\n type: 'string',\n },\n order: {\n type: 'float',\n column: {\n unsigned: true,\n defaultTo: null,\n },\n },\n },\n indexes: [\n {\n name: `${contentType.collectionName}_field_index`,\n columns: ['field'],\n },\n {\n name: `${contentType.collectionName}_component_type_index`,\n columns: ['component_type'],\n },\n {\n name: `${contentType.collectionName}_entity_fk`,\n columns: ['entity_id'],\n },\n {\n name: `${contentType.collectionName}_unique`,\n columns: ['entity_id', 'component_id', 'field', 'component_type'],\n type: 'unique',\n },\n ],\n foreignKeys: [\n {\n name: `${contentType.collectionName}_entity_fk`,\n columns: ['entity_id'],\n referencedColumns: ['id'],\n referencedTable: contentType.collectionName!,\n onDelete: 'CASCADE',\n },\n ],\n };\n};\n\nexport const transformContentTypesToModels = (contentTypes: Schema.ContentType[]): Model[] => {\n const models: Model[] = [];\n\n contentTypes.forEach((contentType) => {\n // Add document id to content types\n // as it is not documented\n const documentIdAttribute: Record<string, Attribute.Any> =\n contentType.modelType === 'contentType'\n ? { documentId: { type: 'string', default: createDocumentId } }\n : {};\n\n // Prevent user from creating a documentId attribute\n const reservedAttributeNames = ['documentId', 'document_id', 'id'];\n reservedAttributeNames.forEach((reservedAttributeName) => {\n if (reservedAttributeName in contentType.attributes) {\n throw new Error(\n `The attribute \"${reservedAttributeName}\" is reserved and cannot be used in a model` +\n `Please rename \"${contentType.modelName}\" attribute \"${reservedAttributeName}\" to something else.`\n );\n }\n });\n\n if (hasComponentsOrDz(contentType)) {\n const compoLinkModel = createCompoLinkModel(contentType);\n models.push(compoLinkModel);\n }\n\n assert(contentType.collectionName, 'Collection name is required');\n\n const model: Model = {\n uid: contentType.uid,\n singularName: contentType.modelName,\n tableName: contentType.collectionName,\n attributes: {\n id: {\n type: 'increments',\n },\n ...documentIdAttribute,\n ...transformAttributes(contentType),\n },\n };\n\n models.push(model);\n });\n\n return models;\n};\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"transform-content-types-to-models.mjs","sources":["../../src/utils/transform-content-types-to-models.ts"],"sourcesContent":["import { type Model, utils } from '@strapi/database';\nimport { Schema, Attribute } from '@strapi/types';\nimport { createId } from '@paralleldrive/cuid2';\nimport assert from 'node:assert';\nimport _ from 'lodash/fp';\n\nconst { identifiers } = utils;\n\n/**\n * Because strapi/database models don't know about things like components or dynamic zones, we use this file to convert them\n * to a relations format that it recognizes\n *\n * Therefore we have to keep an additional set of helpers/extensions to the database naming methods\n */\n\nexport const COMPONENT_JOIN_TABLE_SUFFIX = 'components';\nexport const DZ_JOIN_TABLE_SUFFIX = 'components';\nexport const COMPONENT_INVERSE_COLUMN_NAME = 'component';\nexport const COMPONENT_TYPE_COLUMN = 'component_type';\nexport const ENTITY = 'entity';\n\nexport const getComponentJoinTableName = (collectionName: string) =>\n identifiers.getTableName(collectionName, { suffix: COMPONENT_JOIN_TABLE_SUFFIX });\n\nexport const getDzJoinTableName = (collectionName: string) =>\n identifiers.getTableName(collectionName, { suffix: DZ_JOIN_TABLE_SUFFIX });\n\nconst { ID_COLUMN: id, FIELD_COLUMN: field, ORDER_COLUMN: order } = identifiers;\n\nexport type LoadedContentTypeModel = Schema.ContentType &\n Required<Pick<Schema.ContentType, 'collectionName' | 'uid' | 'modelName'>>;\n\n// Transforms an attribute (particularly for relation types) into the format that strapi/database accepts\nexport const transformAttribute = (\n name: string,\n attribute: Attribute.Any,\n contentType: LoadedContentTypeModel\n) => {\n switch (attribute.type) {\n case 'media': {\n return {\n type: 'relation',\n relation: attribute.multiple === true ? 'morphMany' : 'morphOne',\n target: 'plugin::upload.file',\n morphBy: 'related',\n };\n }\n case 'component': {\n const joinTableName = getComponentJoinTableName(contentType.collectionName);\n const joinColumnEntityName = identifiers.getJoinColumnAttributeIdName(ENTITY);\n const joinColumnInverseName = identifiers.getJoinColumnAttributeIdName(\n COMPONENT_INVERSE_COLUMN_NAME\n );\n\n return {\n type: 'relation',\n relation: attribute.repeatable === true ? 'oneToMany' : 'oneToOne',\n target: attribute.component,\n\n // We need the join table name to be deterministic,\n // We need to allow passing the join table name as an option\n joinTable: {\n name: joinTableName,\n joinColumn: {\n name: joinColumnEntityName,\n referencedColumn: id,\n },\n inverseJoinColumn: {\n name: joinColumnInverseName,\n referencedColumn: id,\n },\n on: {\n field: name,\n },\n orderColumnName: order,\n orderBy: {\n order: 'asc',\n },\n pivotColumns: [joinColumnEntityName, joinColumnInverseName, field, COMPONENT_TYPE_COLUMN],\n },\n };\n }\n case 'dynamiczone': {\n const joinTableName = getDzJoinTableName(contentType.collectionName);\n const joinColumnEntityName = identifiers.getJoinColumnAttributeIdName(ENTITY);\n const joinColumnInverseName = identifiers.getJoinColumnAttributeIdName(\n COMPONENT_INVERSE_COLUMN_NAME\n );\n\n return {\n type: 'relation',\n relation: 'morphToMany',\n // TODO: handle restrictions at some point\n // target: attribute.components,\n joinTable: {\n name: joinTableName,\n joinColumn: {\n name: joinColumnEntityName,\n referencedColumn: id,\n },\n morphColumn: {\n idColumn: {\n name: joinColumnInverseName,\n referencedColumn: id,\n },\n typeColumn: {\n name: COMPONENT_TYPE_COLUMN,\n },\n typeField: '__component',\n },\n on: {\n field: name,\n },\n orderBy: {\n order: 'asc',\n },\n pivotColumns: [joinColumnEntityName, joinColumnInverseName, field, COMPONENT_TYPE_COLUMN],\n },\n };\n }\n default: {\n return attribute;\n }\n }\n};\n\nexport const transformAttributes = (contentType: LoadedContentTypeModel) => {\n return Object.keys(contentType.attributes! || {}).reduce((attrs, attrName) => {\n return {\n ...attrs,\n [attrName]: transformAttribute(attrName, contentType.attributes[attrName]!, contentType),\n };\n }, {});\n};\n\nexport const hasComponentsOrDz = (\n contentType: LoadedContentTypeModel\n): contentType is LoadedContentTypeModel & { type: 'dynamiczone' | 'component' } => {\n return Object.values(contentType.attributes || {}).some(\n ({ type }) => type === 'dynamiczone' || type === 'component'\n );\n};\n\nexport const createDocumentId = createId;\n\n// Creates the\nconst createCompoLinkModel = (contentType: LoadedContentTypeModel): Model => {\n const name = getComponentJoinTableName(contentType.collectionName);\n\n const entityId = identifiers.getJoinColumnAttributeIdName(ENTITY);\n const componentId = identifiers.getJoinColumnAttributeIdName(COMPONENT_INVERSE_COLUMN_NAME);\n const fkIndex = identifiers.getFkIndexName([contentType.collectionName, ENTITY]);\n\n return {\n // TODO: make sure there can't be any conflicts with a prefix\n singularName: name,\n uid: name,\n tableName: name,\n attributes: {\n [id]: {\n type: 'increments',\n },\n [entityId]: {\n type: 'integer',\n column: {\n unsigned: true,\n },\n },\n [componentId]: {\n type: 'integer',\n column: {\n unsigned: true,\n },\n },\n [COMPONENT_TYPE_COLUMN]: {\n type: 'string',\n },\n [field]: {\n type: 'string',\n },\n [order]: {\n type: 'float',\n column: {\n unsigned: true,\n defaultTo: null,\n },\n },\n },\n indexes: [\n {\n name: identifiers.getIndexName([contentType.collectionName, field]),\n columns: [field],\n },\n {\n name: identifiers.getIndexName([contentType.collectionName, COMPONENT_TYPE_COLUMN]),\n columns: [COMPONENT_TYPE_COLUMN],\n },\n {\n name: fkIndex,\n columns: [entityId],\n },\n {\n // NOTE: since we don't include attribute names, we need to be careful not to create another unique index\n name: identifiers.getUniqueIndexName([contentType.collectionName]),\n columns: [entityId, componentId, field, COMPONENT_TYPE_COLUMN],\n type: 'unique',\n },\n ],\n foreignKeys: [\n {\n name: fkIndex,\n columns: [entityId],\n referencedColumns: [id],\n referencedTable: identifiers.getTableName(contentType.collectionName),\n onDelete: 'CASCADE',\n },\n ],\n };\n};\n\nexport const transformContentTypesToModels = (contentTypes: LoadedContentTypeModel[]): Model[] => {\n const models: Model[] = [];\n\n contentTypes.forEach((contentType) => {\n assert(contentType.collectionName, 'Content type \"collectionName\" is required');\n assert(contentType.modelName, 'Content type \"modelName\" is required');\n assert(contentType.uid, 'Content type \"uid\" is required');\n\n // Add document id to content types\n // as it is not documented\n const documentIdAttribute: Record<string, Attribute.Any> =\n contentType.modelType === 'contentType'\n ? { documentId: { type: 'string', default: createDocumentId } }\n : {};\n\n // TODO: this needs to be combined with getReservedNames, we should not be maintaining two lists\n // Prevent user from creating a documentId attribute\n const reservedAttributeNames = ['document_id', id];\n Object.keys(contentType.attributes || {}).forEach((attributeName) => {\n const snakeCasedAttributeName = _.snakeCase(attributeName);\n if (reservedAttributeNames.includes(snakeCasedAttributeName)) {\n throw new Error(\n `The attribute \"${attributeName}\" is reserved and cannot be used in a model. Please rename \"${contentType.modelName}\" attribute \"${attributeName}\" to something else.`\n );\n }\n });\n\n if (hasComponentsOrDz(contentType)) {\n const compoLinkModel = createCompoLinkModel(contentType);\n models.push(compoLinkModel);\n }\n\n const model: Model = {\n uid: contentType.uid,\n singularName: contentType.modelName,\n tableName: identifiers.getTableName(contentType.collectionName),\n attributes: {\n [id]: {\n type: 'increments',\n },\n ...documentIdAttribute,\n ...transformAttributes(contentType),\n },\n };\n\n models.push(model);\n });\n\n return models;\n};\n"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@strapi/core",
|
|
3
|
-
"version": "0.0.0-experimental.
|
|
3
|
+
"version": "0.0.0-experimental.45c1b845d32b56e7c14f4155ec0d4a2d2774c77e",
|
|
4
4
|
"description": "Core of Strapi",
|
|
5
5
|
"homepage": "https://strapi.io",
|
|
6
6
|
"bugs": {
|
|
@@ -55,16 +55,16 @@
|
|
|
55
55
|
"@koa/cors": "3.4.3",
|
|
56
56
|
"@koa/router": "10.1.1",
|
|
57
57
|
"@paralleldrive/cuid2": "2.2.2",
|
|
58
|
-
"@strapi/admin": "0.0.0-experimental.
|
|
59
|
-
"@strapi/database": "0.0.0-experimental.
|
|
60
|
-
"@strapi/generate-new": "0.0.0-experimental.
|
|
61
|
-
"@strapi/generators": "0.0.0-experimental.
|
|
62
|
-
"@strapi/logger": "0.0.0-experimental.
|
|
63
|
-
"@strapi/pack-up": "0.0.0-experimental.
|
|
64
|
-
"@strapi/permissions": "0.0.0-experimental.
|
|
65
|
-
"@strapi/types": "0.0.0-experimental.
|
|
66
|
-
"@strapi/typescript-utils": "0.0.0-experimental.
|
|
67
|
-
"@strapi/utils": "0.0.0-experimental.
|
|
58
|
+
"@strapi/admin": "0.0.0-experimental.45c1b845d32b56e7c14f4155ec0d4a2d2774c77e",
|
|
59
|
+
"@strapi/database": "0.0.0-experimental.45c1b845d32b56e7c14f4155ec0d4a2d2774c77e",
|
|
60
|
+
"@strapi/generate-new": "0.0.0-experimental.45c1b845d32b56e7c14f4155ec0d4a2d2774c77e",
|
|
61
|
+
"@strapi/generators": "0.0.0-experimental.45c1b845d32b56e7c14f4155ec0d4a2d2774c77e",
|
|
62
|
+
"@strapi/logger": "0.0.0-experimental.45c1b845d32b56e7c14f4155ec0d4a2d2774c77e",
|
|
63
|
+
"@strapi/pack-up": "0.0.0-experimental.45c1b845d32b56e7c14f4155ec0d4a2d2774c77e",
|
|
64
|
+
"@strapi/permissions": "0.0.0-experimental.45c1b845d32b56e7c14f4155ec0d4a2d2774c77e",
|
|
65
|
+
"@strapi/types": "0.0.0-experimental.45c1b845d32b56e7c14f4155ec0d4a2d2774c77e",
|
|
66
|
+
"@strapi/typescript-utils": "0.0.0-experimental.45c1b845d32b56e7c14f4155ec0d4a2d2774c77e",
|
|
67
|
+
"@strapi/utils": "0.0.0-experimental.45c1b845d32b56e7c14f4155ec0d4a2d2774c77e",
|
|
68
68
|
"bcryptjs": "2.4.3",
|
|
69
69
|
"boxen": "5.1.2",
|
|
70
70
|
"chalk": "4.1.2",
|
|
@@ -122,13 +122,13 @@
|
|
|
122
122
|
"@types/node": "18.18.4",
|
|
123
123
|
"@types/node-schedule": "2.1.0",
|
|
124
124
|
"@types/statuses": "2.0.1",
|
|
125
|
-
"eslint-config-custom": "0.0.0-experimental.
|
|
125
|
+
"eslint-config-custom": "0.0.0-experimental.45c1b845d32b56e7c14f4155ec0d4a2d2774c77e",
|
|
126
126
|
"supertest": "6.3.3",
|
|
127
|
-
"tsconfig": "0.0.0-experimental.
|
|
127
|
+
"tsconfig": "0.0.0-experimental.45c1b845d32b56e7c14f4155ec0d4a2d2774c77e"
|
|
128
128
|
},
|
|
129
129
|
"engines": {
|
|
130
130
|
"node": ">=18.0.0 <=20.x.x",
|
|
131
131
|
"npm": ">=6.0.0"
|
|
132
132
|
},
|
|
133
|
-
"gitHead": "
|
|
133
|
+
"gitHead": "45c1b845d32b56e7c14f4155ec0d4a2d2774c77e"
|
|
134
134
|
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"get-fetch-params.d.ts","sourceRoot":"","sources":["../../../src/core-api/service/get-fetch-params.ts"],"names":[],"mappings":"AAMA;;GAEG;AACH,eAAO,MAAM,cAAc;;CAK1B,CAAC"}
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
-
const strapiUtils = require("@strapi/utils");
|
|
4
|
-
const {
|
|
5
|
-
constants: { DP_PUB_STATE_LIVE }
|
|
6
|
-
} = strapiUtils.contentTypes;
|
|
7
|
-
const getFetchParams = (params = {}) => {
|
|
8
|
-
return {
|
|
9
|
-
publicationState: DP_PUB_STATE_LIVE,
|
|
10
|
-
...params
|
|
11
|
-
};
|
|
12
|
-
};
|
|
13
|
-
exports.getFetchParams = getFetchParams;
|
|
14
|
-
//# sourceMappingURL=get-fetch-params.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"get-fetch-params.js","sources":["../../../src/core-api/service/get-fetch-params.ts"],"sourcesContent":["import { contentTypes as contentTypeUtils } from '@strapi/utils';\n\nconst {\n constants: { DP_PUB_STATE_LIVE },\n} = contentTypeUtils;\n\n/**\n * Create default fetch params\n */\nexport const getFetchParams = (params = {}) => {\n return {\n publicationState: DP_PUB_STATE_LIVE,\n ...params,\n };\n};\n"],"names":["contentTypeUtils"],"mappings":";;;AAEA,MAAM;AAAA,EACJ,WAAW,EAAE,kBAAkB;AACjC,IAAIA;AAKG,MAAM,iBAAiB,CAAC,SAAS,OAAO;AACtC,SAAA;AAAA,IACL,kBAAkB;AAAA,IAClB,GAAG;AAAA,EAAA;AAEP;;"}
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
import { contentTypes } from "@strapi/utils";
|
|
2
|
-
const {
|
|
3
|
-
constants: { DP_PUB_STATE_LIVE }
|
|
4
|
-
} = contentTypes;
|
|
5
|
-
const getFetchParams = (params = {}) => {
|
|
6
|
-
return {
|
|
7
|
-
publicationState: DP_PUB_STATE_LIVE,
|
|
8
|
-
...params
|
|
9
|
-
};
|
|
10
|
-
};
|
|
11
|
-
export {
|
|
12
|
-
getFetchParams
|
|
13
|
-
};
|
|
14
|
-
//# sourceMappingURL=get-fetch-params.mjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"get-fetch-params.mjs","sources":["../../../src/core-api/service/get-fetch-params.ts"],"sourcesContent":["import { contentTypes as contentTypeUtils } from '@strapi/utils';\n\nconst {\n constants: { DP_PUB_STATE_LIVE },\n} = contentTypeUtils;\n\n/**\n * Create default fetch params\n */\nexport const getFetchParams = (params = {}) => {\n return {\n publicationState: DP_PUB_STATE_LIVE,\n ...params,\n };\n};\n"],"names":["contentTypeUtils"],"mappings":";AAEA,MAAM;AAAA,EACJ,WAAW,EAAE,kBAAkB;AACjC,IAAIA;AAKG,MAAM,iBAAiB,CAAC,SAAS,OAAO;AACtC,SAAA;AAAA,IACL,kBAAkB;AAAA,IAClB,GAAG;AAAA,EAAA;AAEP;"}
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
import type { Database } from '@strapi/database';
|
|
2
|
-
import type { Documents, Strapi } from '@strapi/types';
|
|
3
|
-
declare const _default: (ctx: {
|
|
4
|
-
strapi: Strapi;
|
|
5
|
-
db: Database;
|
|
6
|
-
}) => Documents.Engine;
|
|
7
|
-
export default _default;
|
|
8
|
-
//# sourceMappingURL=document-engine.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"document-engine.d.ts","sourceRoot":"","sources":["../../../src/services/document-service/document-engine.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,KAAK,EAAU,SAAS,EAAkB,MAAM,EAAE,MAAM,eAAe,CAAC;8BA2S1D;IAAE,QAAQ,MAAM,CAAC;IAAC,EAAE,EAAE,QAAQ,CAAA;CAAE,KAAG,UAAU,MAAM;AAAxE,wBAKE"}
|
|
@@ -1,200 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
const strapiUtils = require("@strapi/utils");
|
|
3
|
-
const _ = require("lodash/fp");
|
|
4
|
-
const uploadFiles = require("../utils/upload-files.js");
|
|
5
|
-
const components = require("../entity-service/components.js");
|
|
6
|
-
const transformContentTypesToModels = require("../../utils/transform-content-types-to-models.js");
|
|
7
|
-
const index$1 = require("../entity-service/attributes/index.js");
|
|
8
|
-
const index = require("../entity-validator/index.js");
|
|
9
|
-
const params = require("../entity-service/params.js");
|
|
10
|
-
const { transformParamsToQuery } = strapiUtils.convertQueryParams;
|
|
11
|
-
const createPipeline = (data, context) => {
|
|
12
|
-
return index$1.applyTransforms(data, context);
|
|
13
|
-
};
|
|
14
|
-
const updatePipeline = (data, context) => {
|
|
15
|
-
return index$1.applyTransforms(data, context);
|
|
16
|
-
};
|
|
17
|
-
const createDocumentEngine = ({
|
|
18
|
-
strapi,
|
|
19
|
-
db
|
|
20
|
-
}) => ({
|
|
21
|
-
uploadFiles,
|
|
22
|
-
async findMany(uid, params2) {
|
|
23
|
-
const { kind } = strapi.getModel(uid);
|
|
24
|
-
const query = transformParamsToQuery(uid, params2 || {});
|
|
25
|
-
query.where = { ...params2?.lookup, ...query.where };
|
|
26
|
-
if (kind === "singleType") {
|
|
27
|
-
return db.query(uid).findOne(query);
|
|
28
|
-
}
|
|
29
|
-
return db.query(uid).findMany(query);
|
|
30
|
-
},
|
|
31
|
-
async findFirst(uid, params2) {
|
|
32
|
-
const query = transformParamsToQuery(uid, params2 || {});
|
|
33
|
-
return db.query(uid).findOne({ ...query, where: { ...params2?.lookup, ...query.where } });
|
|
34
|
-
},
|
|
35
|
-
async findOne(uid, documentId, params2) {
|
|
36
|
-
const query = transformParamsToQuery(uid, params2 || {});
|
|
37
|
-
return db.query(uid).findOne({ ...query, where: { ...params2?.lookup, ...query.where, documentId } });
|
|
38
|
-
},
|
|
39
|
-
async delete(uid, documentId, params2 = {}) {
|
|
40
|
-
const query = transformParamsToQuery(uid, params2);
|
|
41
|
-
if (params2.status === "draft") {
|
|
42
|
-
throw new Error("Cannot delete a draft document");
|
|
43
|
-
}
|
|
44
|
-
const entriesToDelete = await db.query(uid).findMany({
|
|
45
|
-
...query,
|
|
46
|
-
where: {
|
|
47
|
-
...params2.lookup,
|
|
48
|
-
...query?.where,
|
|
49
|
-
documentId
|
|
50
|
-
}
|
|
51
|
-
});
|
|
52
|
-
await strapiUtils.mapAsync(entriesToDelete, async (entryToDelete) => {
|
|
53
|
-
const componentsToDelete = await components.getComponents(uid, entryToDelete);
|
|
54
|
-
await db.query(uid).delete({ where: { id: entryToDelete.id } });
|
|
55
|
-
await components.deleteComponents(uid, componentsToDelete, { loadComponents: false });
|
|
56
|
-
});
|
|
57
|
-
return { versions: entriesToDelete };
|
|
58
|
-
},
|
|
59
|
-
// TODO: should we provide two separate methods?
|
|
60
|
-
async deleteMany(uid, paramsOrIds) {
|
|
61
|
-
let queryParams;
|
|
62
|
-
if (_.isArray(paramsOrIds)) {
|
|
63
|
-
queryParams = { filter: { documentID: { $in: paramsOrIds } } };
|
|
64
|
-
} else {
|
|
65
|
-
queryParams = paramsOrIds;
|
|
66
|
-
}
|
|
67
|
-
const query = transformParamsToQuery(uid, queryParams || {});
|
|
68
|
-
return db.query(uid).deleteMany(query);
|
|
69
|
-
},
|
|
70
|
-
async create(uid, params$1) {
|
|
71
|
-
const { data } = params$1;
|
|
72
|
-
if (!data) {
|
|
73
|
-
throw new Error("Create requires data attribute");
|
|
74
|
-
}
|
|
75
|
-
const model = strapi.getModel(uid);
|
|
76
|
-
const validData = await index.validateEntityCreation(model, data, {
|
|
77
|
-
isDraft: true,
|
|
78
|
-
locale: params$1?.locale
|
|
79
|
-
});
|
|
80
|
-
const componentData = await components.createComponents(uid, validData);
|
|
81
|
-
const entryData = createPipeline(
|
|
82
|
-
Object.assign(components.omitComponentData(model, validData), componentData),
|
|
83
|
-
{
|
|
84
|
-
contentType: model
|
|
85
|
-
}
|
|
86
|
-
);
|
|
87
|
-
const query = transformParamsToQuery(uid, params.pickSelectionParams(params$1));
|
|
88
|
-
return db.query(uid).create({ ...query, data: entryData });
|
|
89
|
-
},
|
|
90
|
-
// NOTE: What happens if user doesn't provide specific publications state and locale to update?
|
|
91
|
-
async update(uid, documentId, params$1) {
|
|
92
|
-
const { data } = params$1 || {};
|
|
93
|
-
const model = strapi.getModel(uid);
|
|
94
|
-
const query = transformParamsToQuery(uid, params.pickSelectionParams(params$1 || {}));
|
|
95
|
-
const entryToUpdate = await db.query(uid).findOne({ ...query, where: { ...params$1?.lookup, ...query?.where, documentId } });
|
|
96
|
-
if (!entryToUpdate) {
|
|
97
|
-
return null;
|
|
98
|
-
}
|
|
99
|
-
const validData = await index.validateEntityUpdate(
|
|
100
|
-
model,
|
|
101
|
-
data,
|
|
102
|
-
{
|
|
103
|
-
isDraft: true,
|
|
104
|
-
// Always update the draft version
|
|
105
|
-
locale: params$1?.locale
|
|
106
|
-
},
|
|
107
|
-
entryToUpdate
|
|
108
|
-
);
|
|
109
|
-
const componentData = await components.updateComponents(uid, entryToUpdate, validData);
|
|
110
|
-
const entryData = updatePipeline(
|
|
111
|
-
Object.assign(components.omitComponentData(model, validData), componentData),
|
|
112
|
-
{ contentType: model }
|
|
113
|
-
);
|
|
114
|
-
return db.query(uid).update({ ...query, where: { id: entryToUpdate.id }, data: entryData });
|
|
115
|
-
},
|
|
116
|
-
async count(uid, params2 = void 0) {
|
|
117
|
-
const query = transformParamsToQuery(uid, params2 || {});
|
|
118
|
-
query.where = { ...params2?.lookup, ...query.where };
|
|
119
|
-
return db.query(uid).count(query);
|
|
120
|
-
},
|
|
121
|
-
async clone(uid, documentId, params$1) {
|
|
122
|
-
const { data = {} } = params$1;
|
|
123
|
-
const model = strapi.getModel(uid);
|
|
124
|
-
const query = transformParamsToQuery(uid, params.pickSelectionParams(params$1));
|
|
125
|
-
const entries = await db.query(uid).findMany({
|
|
126
|
-
...query,
|
|
127
|
-
where: { ...params$1?.lookup, ...query.where, documentId }
|
|
128
|
-
});
|
|
129
|
-
if (!entries.length) {
|
|
130
|
-
return null;
|
|
131
|
-
}
|
|
132
|
-
const newDocumentId = transformContentTypesToModels.createDocumentId();
|
|
133
|
-
const versions = await strapiUtils.mapAsync(entries, async (entryToClone) => {
|
|
134
|
-
const isDraft = strapiUtils.contentTypes.isDraft(data);
|
|
135
|
-
const validData = await index.validateEntityUpdate(
|
|
136
|
-
model,
|
|
137
|
-
// Omit id fields, the cloned entity id will be generated by the database
|
|
138
|
-
_.omit(["id"], data),
|
|
139
|
-
{ isDraft, ...params$1?.lookup },
|
|
140
|
-
entryToClone
|
|
141
|
-
);
|
|
142
|
-
const componentData = await components.cloneComponents(uid, entryToClone, validData);
|
|
143
|
-
const entityData = createPipeline(
|
|
144
|
-
Object.assign(components.omitComponentData(model, validData), componentData),
|
|
145
|
-
{ contentType: model }
|
|
146
|
-
);
|
|
147
|
-
return db.query(uid).clone(entryToClone.id, {
|
|
148
|
-
...query,
|
|
149
|
-
// Allows entityData to override the documentId (e.g. when publishing)
|
|
150
|
-
data: { documentId: newDocumentId, ...entityData, locale: entryToClone.locale }
|
|
151
|
-
});
|
|
152
|
-
});
|
|
153
|
-
return { id: newDocumentId, versions };
|
|
154
|
-
},
|
|
155
|
-
// TODO: Handle relations so they target the published version
|
|
156
|
-
async publish(uid, documentId, params2) {
|
|
157
|
-
await this.delete(uid, documentId, {
|
|
158
|
-
...params2,
|
|
159
|
-
lookup: { ...params2?.lookup, publishedAt: { $ne: null } }
|
|
160
|
-
});
|
|
161
|
-
const clonedDocuments = await this.clone(uid, documentId, {
|
|
162
|
-
...params2 || {},
|
|
163
|
-
// @ts-expect-error - Generic type does not have publishedAt attribute by default
|
|
164
|
-
data: { documentId, publishedAt: /* @__PURE__ */ new Date() }
|
|
165
|
-
});
|
|
166
|
-
return { versions: clonedDocuments?.versions || [] };
|
|
167
|
-
},
|
|
168
|
-
async unpublish(uid, documentId, params2) {
|
|
169
|
-
return this.delete(uid, documentId, {
|
|
170
|
-
...params2,
|
|
171
|
-
lookup: { ...params2?.lookup, publishedAt: { $ne: null } }
|
|
172
|
-
});
|
|
173
|
-
},
|
|
174
|
-
/**
|
|
175
|
-
* Steps:
|
|
176
|
-
* - Delete the matching draft versions (publishedAt = null)
|
|
177
|
-
* - Clone the matching published versions into draft versions
|
|
178
|
-
*/
|
|
179
|
-
async discardDraft(uid, documentId, params2) {
|
|
180
|
-
await this.delete(uid, documentId, {
|
|
181
|
-
...params2,
|
|
182
|
-
// Delete all drafts that match query
|
|
183
|
-
lookup: { ...params2?.lookup, publishedAt: null }
|
|
184
|
-
});
|
|
185
|
-
const clonedDocuments = await this.clone(uid, documentId, {
|
|
186
|
-
...params2 || {},
|
|
187
|
-
// Clone only published versions
|
|
188
|
-
lookup: { ...params2?.lookup, publishedAt: { $ne: null } },
|
|
189
|
-
// @ts-expect-error - Generic type does not have publishedAt attribute by default
|
|
190
|
-
data: { documentId, publishedAt: null }
|
|
191
|
-
});
|
|
192
|
-
return { versions: clonedDocuments?.versions || [] };
|
|
193
|
-
}
|
|
194
|
-
});
|
|
195
|
-
const createDocumentRepository = (ctx) => {
|
|
196
|
-
const implementation = createDocumentEngine(ctx);
|
|
197
|
-
return implementation;
|
|
198
|
-
};
|
|
199
|
-
module.exports = createDocumentRepository;
|
|
200
|
-
//# sourceMappingURL=document-engine.js.map
|