@strapi/core 5.57.0 → 5.59.0
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.
- package/dist/Strapi.d.ts +28 -0
- package/dist/Strapi.d.ts.map +1 -1
- package/dist/Strapi.js +5 -0
- package/dist/Strapi.js.map +1 -1
- package/dist/Strapi.mjs +5 -0
- package/dist/Strapi.mjs.map +1 -1
- package/dist/ee/entitlements.d.ts +44 -0
- package/dist/ee/entitlements.d.ts.map +1 -0
- package/dist/ee/entitlements.js +54 -0
- package/dist/ee/entitlements.js.map +1 -0
- package/dist/ee/entitlements.mjs +51 -0
- package/dist/ee/entitlements.mjs.map +1 -0
- package/dist/ee/index.d.ts +33 -0
- package/dist/ee/index.d.ts.map +1 -1
- package/dist/ee/index.js +70 -3
- package/dist/ee/index.js.map +1 -1
- package/dist/ee/index.mjs +71 -4
- package/dist/ee/index.mjs.map +1 -1
- package/dist/ee/license.d.ts +10 -0
- package/dist/ee/license.d.ts.map +1 -1
- package/dist/ee/license.js +25 -1
- package/dist/ee/license.js.map +1 -1
- package/dist/ee/license.mjs +25 -2
- package/dist/ee/license.mjs.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +1 -1
- package/dist/index.mjs.map +1 -1
- package/dist/loaders/apis.d.ts.map +1 -1
- package/dist/loaders/apis.js.map +1 -1
- package/dist/loaders/apis.mjs.map +1 -1
- package/dist/loaders/plugins/get-enabled-plugins.js +2 -2
- 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/middlewares/cors.d.ts.map +1 -1
- package/dist/middlewares/cors.js.map +1 -1
- package/dist/middlewares/cors.mjs.map +1 -1
- package/dist/migrations/database/5.0.0-discard-drafts.js +1 -1
- package/dist/migrations/database/5.0.0-discard-drafts.js.map +1 -1
- package/dist/migrations/database/5.0.0-discard-drafts.mjs +1 -1
- package/dist/migrations/database/5.0.0-discard-drafts.mjs.map +1 -1
- package/dist/migrations/first-published-at.js +1 -1
- package/dist/migrations/first-published-at.js.map +1 -1
- package/dist/migrations/first-published-at.mjs +1 -1
- package/dist/migrations/first-published-at.mjs.map +1 -1
- package/dist/package.json.js +18 -17
- package/dist/package.json.js.map +1 -1
- package/dist/package.json.mjs +18 -17
- package/dist/package.json.mjs.map +1 -1
- package/dist/registries/controllers.d.ts.map +1 -1
- package/dist/registries/controllers.js.map +1 -1
- package/dist/registries/controllers.mjs.map +1 -1
- package/dist/services/content-source-maps.js +6 -6
- package/dist/services/content-source-maps.js.map +1 -1
- package/dist/services/content-source-maps.mjs +6 -6
- package/dist/services/content-source-maps.mjs.map +1 -1
- package/dist/services/document-service/components.d.ts +13 -11
- package/dist/services/document-service/components.d.ts.map +1 -1
- package/dist/services/document-service/components.js +115 -66
- package/dist/services/document-service/components.js.map +1 -1
- package/dist/services/document-service/components.mjs +116 -67
- package/dist/services/document-service/components.mjs.map +1 -1
- package/dist/services/document-service/events.d.ts.map +1 -1
- package/dist/services/document-service/events.js +5 -1
- package/dist/services/document-service/events.js.map +1 -1
- package/dist/services/document-service/events.mjs +5 -1
- package/dist/services/document-service/events.mjs.map +1 -1
- package/dist/services/document-service/repository.d.ts.map +1 -1
- package/dist/services/document-service/repository.js +26 -7
- package/dist/services/document-service/repository.js.map +1 -1
- package/dist/services/document-service/repository.mjs +27 -8
- package/dist/services/document-service/repository.mjs.map +1 -1
- package/dist/services/document-service/transform/data.d.ts.map +1 -1
- package/dist/services/document-service/transform/data.js.map +1 -1
- package/dist/services/document-service/transform/data.mjs.map +1 -1
- package/dist/services/document-service/transform/fields.d.ts.map +1 -1
- package/dist/services/document-service/transform/fields.js +7 -1
- package/dist/services/document-service/transform/fields.js.map +1 -1
- package/dist/services/document-service/transform/fields.mjs +7 -1
- package/dist/services/document-service/transform/fields.mjs.map +1 -1
- package/dist/services/document-service/transform/populate.d.ts.map +1 -1
- package/dist/services/document-service/transform/populate.js +8 -1
- package/dist/services/document-service/transform/populate.js.map +1 -1
- package/dist/services/document-service/transform/populate.mjs +8 -1
- package/dist/services/document-service/transform/populate.mjs.map +1 -1
- package/dist/services/document-service/transform/relations/transform/default-locale.d.ts +4 -1
- package/dist/services/document-service/transform/relations/transform/default-locale.d.ts.map +1 -1
- package/dist/services/document-service/transform/relations/transform/default-locale.js +12 -9
- package/dist/services/document-service/transform/relations/transform/default-locale.js.map +1 -1
- package/dist/services/document-service/transform/relations/transform/default-locale.mjs +12 -10
- package/dist/services/document-service/transform/relations/transform/default-locale.mjs.map +1 -1
- package/dist/services/document-service/transform/relations/utils/map-relation.d.ts.map +1 -1
- package/dist/services/document-service/transform/relations/utils/map-relation.js +10 -4
- package/dist/services/document-service/transform/relations/utils/map-relation.js.map +1 -1
- package/dist/services/document-service/transform/relations/utils/map-relation.mjs +10 -4
- package/dist/services/document-service/transform/relations/utils/map-relation.mjs.map +1 -1
- package/dist/services/document-service/utils/clone-relations.d.ts +21 -4
- package/dist/services/document-service/utils/clone-relations.d.ts.map +1 -1
- package/dist/services/document-service/utils/clone-relations.js +619 -34
- package/dist/services/document-service/utils/clone-relations.js.map +1 -1
- package/dist/services/document-service/utils/clone-relations.mjs +619 -36
- package/dist/services/document-service/utils/clone-relations.mjs.map +1 -1
- package/dist/services/document-service/utils/unidirectional-relations.d.ts +4 -2
- package/dist/services/document-service/utils/unidirectional-relations.d.ts.map +1 -1
- package/dist/services/document-service/utils/unidirectional-relations.js +1 -10
- package/dist/services/document-service/utils/unidirectional-relations.js.map +1 -1
- package/dist/services/document-service/utils/unidirectional-relations.mjs +1 -10
- package/dist/services/document-service/utils/unidirectional-relations.mjs.map +1 -1
- package/dist/services/event-hub.d.ts.map +1 -1
- package/dist/services/event-hub.js +23 -5
- package/dist/services/event-hub.js.map +1 -1
- package/dist/services/event-hub.mjs +23 -5
- package/dist/services/event-hub.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/detect-customizations.d.ts +31 -0
- package/dist/utils/detect-customizations.d.ts.map +1 -0
- package/dist/utils/detect-customizations.js +173 -0
- package/dist/utils/detect-customizations.js.map +1 -0
- package/dist/utils/detect-customizations.mjs +165 -0
- package/dist/utils/detect-customizations.mjs.map +1 -0
- package/dist/utils/fetch.d.ts.map +1 -1
- package/dist/utils/fetch.js +44 -8
- package/dist/utils/fetch.js.map +1 -1
- package/dist/utils/fetch.mjs +37 -8
- package/dist/utils/fetch.mjs.map +1 -1
- package/dist/utils/transform-content-types-to-models.js +5 -5
- package/dist/utils/transform-content-types-to-models.js.map +1 -1
- package/dist/utils/transform-content-types-to-models.mjs +5 -5
- package/dist/utils/transform-content-types-to-models.mjs.map +1 -1
- package/package.json +18 -17
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"data.d.ts","sourceRoot":"","sources":["../../../../src/services/document-service/transform/data.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"data.d.ts","sourceRoot":"","sources":["../../../../src/services/document-service/transform/data.ts"],"names":[],"mappings":"AAaA,QAAA,MAAM,8BAA8B,YAEnC,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,aAAa,GAAU,MAAM,GAAG,EAAE,MAAM,GAAG,qDAuBvD,CAAC;AAEF,OAAO,EAAE,8BAA8B,EAAE,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"data.js","sources":["../../../../src/services/document-service/transform/data.ts"],"sourcesContent":["import { createIdMap } from './id-map';\nimport { extractDataIds as extractDataRelationIds } from './relations/extract/data-ids';\nimport { transformDataIdsVisitor as transformRelationDataIds } from './relations/transform/data-ids';\nimport { setDefaultLocaleToRelations } from './relations/transform/default-locale';\n\ntype TransformDataOptions = {\n useRequestCache?: boolean;\n};\n\nconst getRequestState = () =>\n strapi.requestContext?.get?.()?.state as\n
|
|
1
|
+
{"version":3,"file":"data.js","sources":["../../../../src/services/document-service/transform/data.ts"],"sourcesContent":["import { createIdMap } from './id-map';\nimport { extractDataIds as extractDataRelationIds } from './relations/extract/data-ids';\nimport { transformDataIdsVisitor as transformRelationDataIds } from './relations/transform/data-ids';\nimport { setDefaultLocaleToRelations } from './relations/transform/default-locale';\n\ntype TransformDataOptions = {\n useRequestCache?: boolean;\n};\n\nconst getRequestState = () =>\n strapi.requestContext?.get?.()?.state as\n { __documentServiceIdMap?: ReturnType<typeof createIdMap> } | undefined;\n\nconst clearTransformDataRequestCache = () => {\n getRequestState()?.__documentServiceIdMap?.clear();\n};\n\n/**\n * Transforms input data, containing relation document ids, to entity ids.\n */\nexport const transformData = async (data: any, opts: any) => {\n const shouldUseRequestCache = (opts as TransformDataOptions).useRequestCache !== false;\n\n // Store cache on request state so repeated calls in one request can reuse it\n const requestState = shouldUseRequestCache ? getRequestState() : undefined;\n\n if (requestState && !requestState.__documentServiceIdMap) {\n requestState.__documentServiceIdMap = createIdMap({ strapi });\n }\n\n const idMap = requestState?.__documentServiceIdMap ?? createIdMap({ strapi });\n\n // Assign default locales\n const transformedData = await setDefaultLocaleToRelations(data, opts.uid);\n\n // Extract any relation ids from the input\n await extractDataRelationIds(idMap, transformedData, opts);\n\n // Load any relation the extract methods found\n await idMap.load();\n\n // Transform any relation ids to entity ids\n return transformRelationDataIds(idMap, transformedData, opts);\n};\n\nexport { clearTransformDataRequestCache };\n"],"names":["getRequestState","strapi","requestContext","get","state","clearTransformDataRequestCache","__documentServiceIdMap","clear","transformData","data","opts","shouldUseRequestCache","useRequestCache","requestState","undefined","createIdMap","idMap","transformedData","setDefaultLocaleToRelations","uid","extractDataRelationIds","load","transformRelationDataIds"],"mappings":";;;;;;;AASA,MAAMA,eAAAA,GAAkB,IACtBC,MAAAA,CAAOC,cAAc,EAAEC,GAAAA,IAAAA,EAASC,KAAAA;AAGlC,MAAMC,8BAAAA,GAAiC,IAAA;AACrCL,IAAAA,eAAAA,EAAAA,EAAmBM,sBAAAA,EAAwBC,KAAAA,EAAAA;AAC7C;AAEA;;AAEC,IACM,MAAMC,aAAAA,GAAgB,OAAOC,IAAAA,EAAWC,IAAAA,GAAAA;AAC7C,IAAA,MAAMC,qBAAAA,GAAyBD,IAAAA,CAA8BE,eAAe,KAAK,KAAA;;IAGjF,MAAMC,YAAAA,GAAeF,wBAAwBX,eAAAA,EAAAA,GAAoBc,SAAAA;AAEjE,IAAA,IAAID,YAAAA,IAAgB,CAACA,YAAAA,CAAaP,sBAAsB,EAAE;QACxDO,YAAAA,CAAaP,sBAAsB,GAAGS,iBAAAA,CAAY;AAAEd,YAAAA;AAAO,SAAA,CAAA;AAC7D,IAAA;IAEA,MAAMe,OAAAA,GAAQH,YAAAA,EAAcP,sBAAAA,IAA0BS,iBAAAA,CAAY;AAAEd,QAAAA;AAAO,KAAA,CAAA;;AAG3E,IAAA,MAAMgB,eAAAA,GAAkB,MAAMC,yCAAAA,CAA4BT,IAAAA,EAAMC,KAAKS,GAAG,CAAA;;IAGxE,MAAMC,sBAAAA,CAAuBJ,SAAOC,eAAAA,EAAiBP,IAAAA,CAAAA;;AAGrD,IAAA,MAAMM,QAAMK,IAAI,EAAA;;IAGhB,OAAOC,iCAAAA,CAAyBN,SAAOC,eAAAA,EAAiBP,IAAAA,CAAAA;AAC1D;;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"data.mjs","sources":["../../../../src/services/document-service/transform/data.ts"],"sourcesContent":["import { createIdMap } from './id-map';\nimport { extractDataIds as extractDataRelationIds } from './relations/extract/data-ids';\nimport { transformDataIdsVisitor as transformRelationDataIds } from './relations/transform/data-ids';\nimport { setDefaultLocaleToRelations } from './relations/transform/default-locale';\n\ntype TransformDataOptions = {\n useRequestCache?: boolean;\n};\n\nconst getRequestState = () =>\n strapi.requestContext?.get?.()?.state as\n
|
|
1
|
+
{"version":3,"file":"data.mjs","sources":["../../../../src/services/document-service/transform/data.ts"],"sourcesContent":["import { createIdMap } from './id-map';\nimport { extractDataIds as extractDataRelationIds } from './relations/extract/data-ids';\nimport { transformDataIdsVisitor as transformRelationDataIds } from './relations/transform/data-ids';\nimport { setDefaultLocaleToRelations } from './relations/transform/default-locale';\n\ntype TransformDataOptions = {\n useRequestCache?: boolean;\n};\n\nconst getRequestState = () =>\n strapi.requestContext?.get?.()?.state as\n { __documentServiceIdMap?: ReturnType<typeof createIdMap> } | undefined;\n\nconst clearTransformDataRequestCache = () => {\n getRequestState()?.__documentServiceIdMap?.clear();\n};\n\n/**\n * Transforms input data, containing relation document ids, to entity ids.\n */\nexport const transformData = async (data: any, opts: any) => {\n const shouldUseRequestCache = (opts as TransformDataOptions).useRequestCache !== false;\n\n // Store cache on request state so repeated calls in one request can reuse it\n const requestState = shouldUseRequestCache ? getRequestState() : undefined;\n\n if (requestState && !requestState.__documentServiceIdMap) {\n requestState.__documentServiceIdMap = createIdMap({ strapi });\n }\n\n const idMap = requestState?.__documentServiceIdMap ?? createIdMap({ strapi });\n\n // Assign default locales\n const transformedData = await setDefaultLocaleToRelations(data, opts.uid);\n\n // Extract any relation ids from the input\n await extractDataRelationIds(idMap, transformedData, opts);\n\n // Load any relation the extract methods found\n await idMap.load();\n\n // Transform any relation ids to entity ids\n return transformRelationDataIds(idMap, transformedData, opts);\n};\n\nexport { clearTransformDataRequestCache };\n"],"names":["getRequestState","strapi","requestContext","get","state","clearTransformDataRequestCache","__documentServiceIdMap","clear","transformData","data","opts","shouldUseRequestCache","useRequestCache","requestState","undefined","createIdMap","idMap","transformedData","setDefaultLocaleToRelations","uid","extractDataRelationIds","load","transformRelationDataIds"],"mappings":";;;;;AASA,MAAMA,eAAAA,GAAkB,IACtBC,MAAAA,CAAOC,cAAc,EAAEC,GAAAA,IAAAA,EAASC,KAAAA;AAGlC,MAAMC,8BAAAA,GAAiC,IAAA;AACrCL,IAAAA,eAAAA,EAAAA,EAAmBM,sBAAAA,EAAwBC,KAAAA,EAAAA;AAC7C;AAEA;;AAEC,IACM,MAAMC,aAAAA,GAAgB,OAAOC,IAAAA,EAAWC,IAAAA,GAAAA;AAC7C,IAAA,MAAMC,qBAAAA,GAAyBD,IAAAA,CAA8BE,eAAe,KAAK,KAAA;;IAGjF,MAAMC,YAAAA,GAAeF,wBAAwBX,eAAAA,EAAAA,GAAoBc,SAAAA;AAEjE,IAAA,IAAID,YAAAA,IAAgB,CAACA,YAAAA,CAAaP,sBAAsB,EAAE;QACxDO,YAAAA,CAAaP,sBAAsB,GAAGS,WAAAA,CAAY;AAAEd,YAAAA;AAAO,SAAA,CAAA;AAC7D,IAAA;IAEA,MAAMe,KAAAA,GAAQH,YAAAA,EAAcP,sBAAAA,IAA0BS,WAAAA,CAAY;AAAEd,QAAAA;AAAO,KAAA,CAAA;;AAG3E,IAAA,MAAMgB,eAAAA,GAAkB,MAAMC,2BAAAA,CAA4BT,IAAAA,EAAMC,KAAKS,GAAG,CAAA;;IAGxE,MAAMC,cAAAA,CAAuBJ,OAAOC,eAAAA,EAAiBP,IAAAA,CAAAA;;AAGrD,IAAA,MAAMM,MAAMK,IAAI,EAAA;;IAGhB,OAAOC,uBAAAA,CAAyBN,OAAOC,eAAAA,EAAiBP,IAAAA,CAAAA;AAC1D;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fields.d.ts","sourceRoot":"","sources":["../../../../src/services/document-service/transform/fields.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,eAAe,CAAC;AAElD,KAAK,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC;AAE5E,eAAO,MAAM,eAAe,GAAI,QAAQ,MAAM,KAAG,
|
|
1
|
+
{"version":3,"file":"fields.d.ts","sourceRoot":"","sources":["../../../../src/services/document-service/transform/fields.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,eAAe,CAAC;AAElD,KAAK,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC;AAE5E,eAAO,MAAM,eAAe,GAAI,QAAQ,MAAM,KAAG,MAmChD,CAAC"}
|
|
@@ -23,8 +23,14 @@ const transformFields = (fields)=>{
|
|
|
23
23
|
}
|
|
24
24
|
// Ensure we are always selecting the documentId
|
|
25
25
|
// ['name', 'description'] => ['name', 'description', 'documentId']
|
|
26
|
+
//
|
|
27
|
+
// Returns a new array rather than pushing onto the given one: it belongs to the caller's
|
|
28
|
+
// query params, which they may reuse.
|
|
26
29
|
if (!fields.includes('documentId')) {
|
|
27
|
-
|
|
30
|
+
return [
|
|
31
|
+
...fields,
|
|
32
|
+
'documentId'
|
|
33
|
+
];
|
|
28
34
|
}
|
|
29
35
|
return fields;
|
|
30
36
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fields.js","sources":["../../../../src/services/document-service/transform/fields.ts"],"sourcesContent":["import type { Modules, UID } from '@strapi/types';\n\ntype Fields = Modules.Documents.Params.Pick<UID.Schema, 'fields'>['fields'];\n\nexport const transformFields = (fields: Fields): Fields => {\n // If it's a string, and it doesn't contain documentId, should be an array\n if (typeof fields === 'string') {\n // '*' => '*'\n if (fields === '*') {\n return fields;\n }\n\n // '' => 'documentId'\n if (fields === '') {\n return 'documentId';\n }\n\n // 'name,description' => 'name,description,documentId'\n if (!fields.split(',').includes('documentId')) {\n return `${fields},documentId`;\n }\n }\n\n // It's not an array, ignore it\n if (!fields || !Array.isArray(fields)) {\n // If fields is empty, return it as is\n return fields;\n }\n\n // Ensure we are always selecting the documentId\n // ['name', 'description'] => ['name', 'description', 'documentId']\n if (!fields.includes('documentId')) {\n fields
|
|
1
|
+
{"version":3,"file":"fields.js","sources":["../../../../src/services/document-service/transform/fields.ts"],"sourcesContent":["import type { Modules, UID } from '@strapi/types';\n\ntype Fields = Modules.Documents.Params.Pick<UID.Schema, 'fields'>['fields'];\n\nexport const transformFields = (fields: Fields): Fields => {\n // If it's a string, and it doesn't contain documentId, should be an array\n if (typeof fields === 'string') {\n // '*' => '*'\n if (fields === '*') {\n return fields;\n }\n\n // '' => 'documentId'\n if (fields === '') {\n return 'documentId';\n }\n\n // 'name,description' => 'name,description,documentId'\n if (!fields.split(',').includes('documentId')) {\n return `${fields},documentId`;\n }\n }\n\n // It's not an array, ignore it\n if (!fields || !Array.isArray(fields)) {\n // If fields is empty, return it as is\n return fields;\n }\n\n // Ensure we are always selecting the documentId\n // ['name', 'description'] => ['name', 'description', 'documentId']\n //\n // Returns a new array rather than pushing onto the given one: it belongs to the caller's\n // query params, which they may reuse.\n if (!fields.includes('documentId')) {\n return [...fields, 'documentId'];\n }\n\n return fields;\n};\n"],"names":["transformFields","fields","split","includes","Array","isArray"],"mappings":";;AAIO,MAAMA,kBAAkB,CAACC,MAAAA,GAAAA;;IAE9B,IAAI,OAAOA,WAAW,QAAA,EAAU;;AAE9B,QAAA,IAAIA,WAAW,GAAA,EAAK;YAClB,OAAOA,MAAAA;AACT,QAAA;;AAGA,QAAA,IAAIA,WAAW,EAAA,EAAI;YACjB,OAAO,YAAA;AACT,QAAA;;AAGA,QAAA,IAAI,CAACA,MAAAA,CAAOC,KAAK,CAAC,GAAA,CAAA,CAAKC,QAAQ,CAAC,YAAA,CAAA,EAAe;YAC7C,OAAO,CAAA,EAAGF,MAAAA,CAAO,WAAW,CAAC;AAC/B,QAAA;AACF,IAAA;;AAGA,IAAA,IAAI,CAACA,MAAAA,IAAU,CAACG,KAAAA,CAAMC,OAAO,CAACJ,MAAAA,CAAAA,EAAS;;QAErC,OAAOA,MAAAA;AACT,IAAA;;;;;;AAOA,IAAA,IAAI,CAACA,MAAAA,CAAOE,QAAQ,CAAC,YAAA,CAAA,EAAe;QAClC,OAAO;AAAIF,YAAAA,GAAAA,MAAAA;AAAQ,YAAA;AAAa,SAAA;AAClC,IAAA;IAEA,OAAOA,MAAAA;AACT;;;;"}
|
|
@@ -21,8 +21,14 @@ const transformFields = (fields)=>{
|
|
|
21
21
|
}
|
|
22
22
|
// Ensure we are always selecting the documentId
|
|
23
23
|
// ['name', 'description'] => ['name', 'description', 'documentId']
|
|
24
|
+
//
|
|
25
|
+
// Returns a new array rather than pushing onto the given one: it belongs to the caller's
|
|
26
|
+
// query params, which they may reuse.
|
|
24
27
|
if (!fields.includes('documentId')) {
|
|
25
|
-
|
|
28
|
+
return [
|
|
29
|
+
...fields,
|
|
30
|
+
'documentId'
|
|
31
|
+
];
|
|
26
32
|
}
|
|
27
33
|
return fields;
|
|
28
34
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fields.mjs","sources":["../../../../src/services/document-service/transform/fields.ts"],"sourcesContent":["import type { Modules, UID } from '@strapi/types';\n\ntype Fields = Modules.Documents.Params.Pick<UID.Schema, 'fields'>['fields'];\n\nexport const transformFields = (fields: Fields): Fields => {\n // If it's a string, and it doesn't contain documentId, should be an array\n if (typeof fields === 'string') {\n // '*' => '*'\n if (fields === '*') {\n return fields;\n }\n\n // '' => 'documentId'\n if (fields === '') {\n return 'documentId';\n }\n\n // 'name,description' => 'name,description,documentId'\n if (!fields.split(',').includes('documentId')) {\n return `${fields},documentId`;\n }\n }\n\n // It's not an array, ignore it\n if (!fields || !Array.isArray(fields)) {\n // If fields is empty, return it as is\n return fields;\n }\n\n // Ensure we are always selecting the documentId\n // ['name', 'description'] => ['name', 'description', 'documentId']\n if (!fields.includes('documentId')) {\n fields
|
|
1
|
+
{"version":3,"file":"fields.mjs","sources":["../../../../src/services/document-service/transform/fields.ts"],"sourcesContent":["import type { Modules, UID } from '@strapi/types';\n\ntype Fields = Modules.Documents.Params.Pick<UID.Schema, 'fields'>['fields'];\n\nexport const transformFields = (fields: Fields): Fields => {\n // If it's a string, and it doesn't contain documentId, should be an array\n if (typeof fields === 'string') {\n // '*' => '*'\n if (fields === '*') {\n return fields;\n }\n\n // '' => 'documentId'\n if (fields === '') {\n return 'documentId';\n }\n\n // 'name,description' => 'name,description,documentId'\n if (!fields.split(',').includes('documentId')) {\n return `${fields},documentId`;\n }\n }\n\n // It's not an array, ignore it\n if (!fields || !Array.isArray(fields)) {\n // If fields is empty, return it as is\n return fields;\n }\n\n // Ensure we are always selecting the documentId\n // ['name', 'description'] => ['name', 'description', 'documentId']\n //\n // Returns a new array rather than pushing onto the given one: it belongs to the caller's\n // query params, which they may reuse.\n if (!fields.includes('documentId')) {\n return [...fields, 'documentId'];\n }\n\n return fields;\n};\n"],"names":["transformFields","fields","split","includes","Array","isArray"],"mappings":"AAIO,MAAMA,kBAAkB,CAACC,MAAAA,GAAAA;;IAE9B,IAAI,OAAOA,WAAW,QAAA,EAAU;;AAE9B,QAAA,IAAIA,WAAW,GAAA,EAAK;YAClB,OAAOA,MAAAA;AACT,QAAA;;AAGA,QAAA,IAAIA,WAAW,EAAA,EAAI;YACjB,OAAO,YAAA;AACT,QAAA;;AAGA,QAAA,IAAI,CAACA,MAAAA,CAAOC,KAAK,CAAC,GAAA,CAAA,CAAKC,QAAQ,CAAC,YAAA,CAAA,EAAe;YAC7C,OAAO,CAAA,EAAGF,MAAAA,CAAO,WAAW,CAAC;AAC/B,QAAA;AACF,IAAA;;AAGA,IAAA,IAAI,CAACA,MAAAA,IAAU,CAACG,KAAAA,CAAMC,OAAO,CAACJ,MAAAA,CAAAA,EAAS;;QAErC,OAAOA,MAAAA;AACT,IAAA;;;;;;AAOA,IAAA,IAAI,CAACA,MAAAA,CAAOE,QAAQ,CAAC,YAAA,CAAA,EAAe;QAClC,OAAO;AAAIF,YAAAA,GAAAA,MAAAA;AAAQ,YAAA;AAAa,SAAA;AAClC,IAAA;IAEA,OAAOA,MAAAA;AACT;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"populate.d.ts","sourceRoot":"","sources":["../../../../src/services/document-service/transform/populate.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,eAAe,CAAC;AAEzC,OAAO,EAAE,KAAK,IAAI,EAAE,MAAM,SAAS,CAAC;AAGpC,eAAO,MAAM,iBAAiB,GAAU,MAAM,IAAI,EAAE,MAAM;IAAE,GAAG,EAAE,GAAG,CAAC,MAAM,CAAA;CAAE,
|
|
1
|
+
{"version":3,"file":"populate.d.ts","sourceRoot":"","sources":["../../../../src/services/document-service/transform/populate.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,eAAe,CAAC;AAEzC,OAAO,EAAE,KAAK,IAAI,EAAE,MAAM,SAAS,CAAC;AAGpC,eAAO,MAAM,iBAAiB,GAAU,MAAM,IAAI,EAAE,MAAM;IAAE,GAAG,EAAE,GAAG,CAAC,MAAM,CAAA;CAAE,qBAyB5E,CAAC"}
|
|
@@ -12,8 +12,15 @@ const transformPopulate = async (data, opts)=>{
|
|
|
12
12
|
If the attribute is a relation
|
|
13
13
|
Look for fields in the value
|
|
14
14
|
and apply the relevant transformation to these objects
|
|
15
|
+
|
|
16
|
+
The transformed value is set as a new object: a visitor must not write into the
|
|
17
|
+
`value` it is handed, which may be shared with the data the traversal was given.
|
|
15
18
|
*/ if ('fields' in value && Array.isArray(value.fields)) {
|
|
16
|
-
|
|
19
|
+
set(key, {
|
|
20
|
+
...value,
|
|
21
|
+
fields: fields.transformFields(value.fields)
|
|
22
|
+
});
|
|
23
|
+
return;
|
|
17
24
|
}
|
|
18
25
|
set(key, value);
|
|
19
26
|
}, {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"populate.js","sources":["../../../../src/services/document-service/transform/populate.ts"],"sourcesContent":["import { traverse } from '@strapi/utils';\nimport type { UID } from '@strapi/types';\n\nimport { type Data } from './types';\nimport { transformFields } from './fields';\n\nexport const transformPopulate = async (data: Data, opts: { uid: UID.Schema }) => {\n return traverse.traverseQueryPopulate(\n async ({ attribute, key, value }, { set }) => {\n if (!value || typeof value !== 'object' || attribute?.type !== 'relation') {\n return;\n }\n\n /*\n If the attribute is a relation\n Look for fields in the value\n and apply the relevant transformation to these objects\n */\n if ('fields' in value && Array.isArray(value.fields)) {\n value
|
|
1
|
+
{"version":3,"file":"populate.js","sources":["../../../../src/services/document-service/transform/populate.ts"],"sourcesContent":["import { traverse } from '@strapi/utils';\nimport type { UID } from '@strapi/types';\n\nimport { type Data } from './types';\nimport { transformFields } from './fields';\n\nexport const transformPopulate = async (data: Data, opts: { uid: UID.Schema }) => {\n return traverse.traverseQueryPopulate(\n async ({ attribute, key, value }, { set }) => {\n if (!value || typeof value !== 'object' || attribute?.type !== 'relation') {\n return;\n }\n\n /*\n If the attribute is a relation\n Look for fields in the value\n and apply the relevant transformation to these objects\n\n The transformed value is set as a new object: a visitor must not write into the\n `value` it is handed, which may be shared with the data the traversal was given.\n */\n if ('fields' in value && Array.isArray(value.fields)) {\n set(key, { ...value, fields: transformFields(value.fields) });\n return;\n }\n\n set(key, value);\n },\n { schema: strapi.getModel(opts.uid), getModel: strapi.getModel.bind(strapi) },\n data\n );\n};\n"],"names":["transformPopulate","data","opts","traverse","traverseQueryPopulate","attribute","key","value","set","type","Array","isArray","fields","transformFields","schema","strapi","getModel","uid","bind"],"mappings":";;;;;AAMO,MAAMA,iBAAAA,GAAoB,OAAOC,IAAAA,EAAYC,IAAAA,GAAAA;AAClD,IAAA,OAAOC,oBAAAA,CAASC,qBAAqB,CACnC,OAAO,EAAEC,SAAS,EAAEC,GAAG,EAAEC,KAAK,EAAE,EAAE,EAAEC,GAAG,EAAE,GAAA;AACvC,QAAA,IAAI,CAACD,KAAAA,IAAS,OAAOA,UAAU,QAAA,IAAYF,SAAAA,EAAWI,SAAS,UAAA,EAAY;AACzE,YAAA;AACF,QAAA;AAEA;;;;;;;SAQA,IAAI,YAAYF,KAAAA,IAASG,KAAAA,CAAMC,OAAO,CAACJ,KAAAA,CAAMK,MAAM,CAAA,EAAG;AACpDJ,YAAAA,GAAAA,CAAIF,GAAAA,EAAK;AAAE,gBAAA,GAAGC,KAAK;gBAAEK,MAAAA,EAAQC,sBAAAA,CAAgBN,MAAMK,MAAM;AAAE,aAAA,CAAA;AAC3D,YAAA;AACF,QAAA;AAEAJ,QAAAA,GAAAA,CAAIF,GAAAA,EAAKC,KAAAA,CAAAA;IACX,CAAA,EACA;AAAEO,QAAAA,MAAAA,EAAQC,MAAAA,CAAOC,QAAQ,CAACd,IAAAA,CAAKe,GAAG,CAAA;AAAGD,QAAAA,QAAAA,EAAUD,MAAAA,CAAOC,QAAQ,CAACE,IAAI,CAACH,MAAAA;KAAQ,EAC5Ed,IAAAA,CAAAA;AAEJ;;;;"}
|
|
@@ -10,8 +10,15 @@ const transformPopulate = async (data, opts)=>{
|
|
|
10
10
|
If the attribute is a relation
|
|
11
11
|
Look for fields in the value
|
|
12
12
|
and apply the relevant transformation to these objects
|
|
13
|
+
|
|
14
|
+
The transformed value is set as a new object: a visitor must not write into the
|
|
15
|
+
`value` it is handed, which may be shared with the data the traversal was given.
|
|
13
16
|
*/ if ('fields' in value && Array.isArray(value.fields)) {
|
|
14
|
-
|
|
17
|
+
set(key, {
|
|
18
|
+
...value,
|
|
19
|
+
fields: transformFields(value.fields)
|
|
20
|
+
});
|
|
21
|
+
return;
|
|
15
22
|
}
|
|
16
23
|
set(key, value);
|
|
17
24
|
}, {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"populate.mjs","sources":["../../../../src/services/document-service/transform/populate.ts"],"sourcesContent":["import { traverse } from '@strapi/utils';\nimport type { UID } from '@strapi/types';\n\nimport { type Data } from './types';\nimport { transformFields } from './fields';\n\nexport const transformPopulate = async (data: Data, opts: { uid: UID.Schema }) => {\n return traverse.traverseQueryPopulate(\n async ({ attribute, key, value }, { set }) => {\n if (!value || typeof value !== 'object' || attribute?.type !== 'relation') {\n return;\n }\n\n /*\n If the attribute is a relation\n Look for fields in the value\n and apply the relevant transformation to these objects\n */\n if ('fields' in value && Array.isArray(value.fields)) {\n value
|
|
1
|
+
{"version":3,"file":"populate.mjs","sources":["../../../../src/services/document-service/transform/populate.ts"],"sourcesContent":["import { traverse } from '@strapi/utils';\nimport type { UID } from '@strapi/types';\n\nimport { type Data } from './types';\nimport { transformFields } from './fields';\n\nexport const transformPopulate = async (data: Data, opts: { uid: UID.Schema }) => {\n return traverse.traverseQueryPopulate(\n async ({ attribute, key, value }, { set }) => {\n if (!value || typeof value !== 'object' || attribute?.type !== 'relation') {\n return;\n }\n\n /*\n If the attribute is a relation\n Look for fields in the value\n and apply the relevant transformation to these objects\n\n The transformed value is set as a new object: a visitor must not write into the\n `value` it is handed, which may be shared with the data the traversal was given.\n */\n if ('fields' in value && Array.isArray(value.fields)) {\n set(key, { ...value, fields: transformFields(value.fields) });\n return;\n }\n\n set(key, value);\n },\n { schema: strapi.getModel(opts.uid), getModel: strapi.getModel.bind(strapi) },\n data\n );\n};\n"],"names":["transformPopulate","data","opts","traverse","traverseQueryPopulate","attribute","key","value","set","type","Array","isArray","fields","transformFields","schema","strapi","getModel","uid","bind"],"mappings":";;;AAMO,MAAMA,iBAAAA,GAAoB,OAAOC,IAAAA,EAAYC,IAAAA,GAAAA;AAClD,IAAA,OAAOC,QAAAA,CAASC,qBAAqB,CACnC,OAAO,EAAEC,SAAS,EAAEC,GAAG,EAAEC,KAAK,EAAE,EAAE,EAAEC,GAAG,EAAE,GAAA;AACvC,QAAA,IAAI,CAACD,KAAAA,IAAS,OAAOA,UAAU,QAAA,IAAYF,SAAAA,EAAWI,SAAS,UAAA,EAAY;AACzE,YAAA;AACF,QAAA;AAEA;;;;;;;SAQA,IAAI,YAAYF,KAAAA,IAASG,KAAAA,CAAMC,OAAO,CAACJ,KAAAA,CAAMK,MAAM,CAAA,EAAG;AACpDJ,YAAAA,GAAAA,CAAIF,GAAAA,EAAK;AAAE,gBAAA,GAAGC,KAAK;gBAAEK,MAAAA,EAAQC,eAAAA,CAAgBN,MAAMK,MAAM;AAAE,aAAA,CAAA;AAC3D,YAAA;AACF,QAAA;AAEAJ,QAAAA,GAAAA,CAAIF,GAAAA,EAAKC,KAAAA,CAAAA;IACX,CAAA,EACA;AAAEO,QAAAA,MAAAA,EAAQC,MAAAA,CAAOC,QAAQ,CAACd,IAAAA,CAAKe,GAAG,CAAA;AAAGD,QAAAA,QAAAA,EAAUD,MAAAA,CAAOC,QAAQ,CAACE,IAAI,CAACH,MAAAA;KAAQ,EAC5Ed,IAAAA,CAAAA;AAEJ;;;;"}
|
|
@@ -1,9 +1,12 @@
|
|
|
1
1
|
import type { UID } from '@strapi/types';
|
|
2
|
+
declare const setDefaultLocaleToRelation: <T extends Record<string, any>>(relation: T, defaultLocale: string | null) => T & {
|
|
3
|
+
locale: string | null;
|
|
4
|
+
};
|
|
2
5
|
/**
|
|
3
6
|
* In scenarios like Non i18n CT -> i18n CT
|
|
4
7
|
* relations can be connected to multiple locales,
|
|
5
8
|
* in case user does not provide the locale, this sets it to the default one.
|
|
6
9
|
*/
|
|
7
10
|
declare const setDefaultLocaleToRelations: (data: Record<string, any>, uid: UID.Schema) => Record<string, any> | Promise<import("@strapi/utils/dist/types").Data>;
|
|
8
|
-
export { setDefaultLocaleToRelations };
|
|
11
|
+
export { setDefaultLocaleToRelation, setDefaultLocaleToRelations };
|
|
9
12
|
//# sourceMappingURL=default-locale.d.ts.map
|
package/dist/services/document-service/transform/relations/transform/default-locale.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"default-locale.d.ts","sourceRoot":"","sources":["../../../../../../src/services/document-service/transform/relations/transform/default-locale.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,eAAe,CAAC;AAKzC;;;;GAIG;AACH,QAAA,MAAM,2BAA2B,GAAI,MAAM,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,KAAK,GAAG,CAAC,MAAM,
|
|
1
|
+
{"version":3,"file":"default-locale.d.ts","sourceRoot":"","sources":["../../../../../../src/services/document-service/transform/relations/transform/default-locale.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,eAAe,CAAC;AAKzC,QAAA,MAAM,0BAA0B,GAAI,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAC/D,UAAU,CAAC,EACX,eAAe,MAAM,GAAG,IAAI,KAC3B,CAAC,GAAG;IAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;CAO7B,CAAC;AAEF;;;;GAIG;AACH,QAAA,MAAM,2BAA2B,GAAI,MAAM,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,KAAK,GAAG,CAAC,MAAM,2EAqC9E,CAAC;AAEF,OAAO,EAAE,0BAA0B,EAAE,2BAA2B,EAAE,CAAC"}
|
|
@@ -3,6 +3,16 @@
|
|
|
3
3
|
var i18n = require('../utils/i18n.js');
|
|
4
4
|
var mapRelation = require('../utils/map-relation.js');
|
|
5
5
|
|
|
6
|
+
const setDefaultLocaleToRelation = (relation, defaultLocale)=>{
|
|
7
|
+
const position = relation.position;
|
|
8
|
+
if (position && typeof position === 'object' && !position.locale) {
|
|
9
|
+
position.locale = defaultLocale;
|
|
10
|
+
}
|
|
11
|
+
return {
|
|
12
|
+
...relation,
|
|
13
|
+
locale: defaultLocale
|
|
14
|
+
};
|
|
15
|
+
};
|
|
6
16
|
/**
|
|
7
17
|
* In scenarios like Non i18n CT -> i18n CT
|
|
8
18
|
* relations can be connected to multiple locales,
|
|
@@ -28,15 +38,7 @@ var mapRelation = require('../utils/map-relation.js');
|
|
|
28
38
|
if (!defaultLocale) {
|
|
29
39
|
defaultLocale = await i18n.getDefaultLocale();
|
|
30
40
|
}
|
|
31
|
-
|
|
32
|
-
const position = relation.position;
|
|
33
|
-
if (position && typeof position === 'object' && !position.locale) {
|
|
34
|
-
relation.position.locale = defaultLocale;
|
|
35
|
-
}
|
|
36
|
-
return {
|
|
37
|
-
...relation,
|
|
38
|
-
locale: defaultLocale
|
|
39
|
-
};
|
|
41
|
+
return setDefaultLocaleToRelation(relation, defaultLocale);
|
|
40
42
|
}, value);
|
|
41
43
|
// @ts-expect-error - fix type
|
|
42
44
|
set(key, relation);
|
|
@@ -46,5 +48,6 @@ var mapRelation = require('../utils/map-relation.js');
|
|
|
46
48
|
}, data);
|
|
47
49
|
};
|
|
48
50
|
|
|
51
|
+
exports.setDefaultLocaleToRelation = setDefaultLocaleToRelation;
|
|
49
52
|
exports.setDefaultLocaleToRelations = setDefaultLocaleToRelations;
|
|
50
53
|
//# sourceMappingURL=default-locale.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"default-locale.js","sources":["../../../../../../src/services/document-service/transform/relations/transform/default-locale.ts"],"sourcesContent":["import type { UID } from '@strapi/types';\n\nimport { getDefaultLocale, isLocalizedContentType } from '../utils/i18n';\nimport { mapRelation, traverseEntityRelations } from '../utils/map-relation';\n\n/**\n * In scenarios like Non i18n CT -> i18n CT\n * relations can be connected to multiple locales,\n * in case user does not provide the locale, this sets it to the default one.\n */\nconst setDefaultLocaleToRelations = (data: Record<string, any>, uid: UID.Schema) => {\n // I18n CT -> anything will already have a locale set (source locale)\n if (isLocalizedContentType(uid)) {\n return data;\n }\n\n // Store the default locale to avoid multiple calls\n let defaultLocale: string | null = null;\n\n /**\n * Traverse the entity input data and set the default locale to relations\n */\n return traverseEntityRelations(\n async ({ key, value }, { set }) => {\n /**\n * Assign default locale on long hand expressed relations\n * e.g { documentId } -> { documentId, locale }\n */\n const relation = await mapRelation(async (relation) => {\n if (!relation || !relation?.documentId || relation?.locale) {\n return relation;\n }\n\n // Set default locale if not provided\n if (!defaultLocale) {\n defaultLocale = await getDefaultLocale();\n }\n\n
|
|
1
|
+
{"version":3,"file":"default-locale.js","sources":["../../../../../../src/services/document-service/transform/relations/transform/default-locale.ts"],"sourcesContent":["import type { UID } from '@strapi/types';\n\nimport { getDefaultLocale, isLocalizedContentType } from '../utils/i18n';\nimport { mapRelation, traverseEntityRelations } from '../utils/map-relation';\n\nconst setDefaultLocaleToRelation = <T extends Record<string, any>>(\n relation: T,\n defaultLocale: string | null\n): T & { locale: string | null } => {\n const position = relation.position;\n if (position && typeof position === 'object' && !position.locale) {\n position.locale = defaultLocale;\n }\n\n return { ...relation, locale: defaultLocale };\n};\n\n/**\n * In scenarios like Non i18n CT -> i18n CT\n * relations can be connected to multiple locales,\n * in case user does not provide the locale, this sets it to the default one.\n */\nconst setDefaultLocaleToRelations = (data: Record<string, any>, uid: UID.Schema) => {\n // I18n CT -> anything will already have a locale set (source locale)\n if (isLocalizedContentType(uid)) {\n return data;\n }\n\n // Store the default locale to avoid multiple calls\n let defaultLocale: string | null = null;\n\n /**\n * Traverse the entity input data and set the default locale to relations\n */\n return traverseEntityRelations(\n async ({ key, value }, { set }) => {\n /**\n * Assign default locale on long hand expressed relations\n * e.g { documentId } -> { documentId, locale }\n */\n const relation = await mapRelation(async (relation) => {\n if (!relation || !relation?.documentId || relation?.locale) {\n return relation;\n }\n\n // Set default locale if not provided\n if (!defaultLocale) {\n defaultLocale = await getDefaultLocale();\n }\n\n return setDefaultLocaleToRelation(relation, defaultLocale);\n }, value as any);\n\n // @ts-expect-error - fix type\n set(key, relation);\n },\n { schema: strapi.getModel(uid), getModel: strapi.getModel.bind(strapi) },\n data\n );\n};\n\nexport { setDefaultLocaleToRelation, setDefaultLocaleToRelations };\n"],"names":["setDefaultLocaleToRelation","relation","defaultLocale","position","locale","setDefaultLocaleToRelations","data","uid","isLocalizedContentType","traverseEntityRelations","key","value","set","mapRelation","documentId","getDefaultLocale","schema","strapi","getModel","bind"],"mappings":";;;;;AAKA,MAAMA,0BAAAA,GAA6B,CACjCC,QAAAA,EACAC,aAAAA,GAAAA;IAEA,MAAMC,QAAAA,GAAWF,SAASE,QAAQ;AAClC,IAAA,IAAIA,YAAY,OAAOA,QAAAA,KAAa,YAAY,CAACA,QAAAA,CAASC,MAAM,EAAE;AAChED,QAAAA,QAAAA,CAASC,MAAM,GAAGF,aAAAA;AACpB,IAAA;IAEA,OAAO;AAAE,QAAA,GAAGD,QAAQ;QAAEG,MAAAA,EAAQF;AAAc,KAAA;AAC9C;AAEA;;;;IAKA,MAAMG,2BAAAA,GAA8B,CAACC,IAAAA,EAA2BC,GAAAA,GAAAA;;AAE9D,IAAA,IAAIC,4BAAuBD,GAAAA,CAAAA,EAAM;QAC/B,OAAOD,IAAAA;AACT,IAAA;;AAGA,IAAA,IAAIJ,aAAAA,GAA+B,IAAA;AAEnC;;MAGA,OAAOO,mCAAAA,CACL,OAAO,EAAEC,GAAG,EAAEC,KAAK,EAAE,EAAE,EAAEC,GAAG,EAAE,GAAA;AAC5B;;;AAGC,UACD,MAAMX,QAAAA,GAAW,MAAMY,uBAAAA,CAAY,OAAOZ,QAAAA,GAAAA;AACxC,YAAA,IAAI,CAACA,QAAAA,IAAY,CAACA,QAAAA,EAAUa,UAAAA,IAAcb,UAAUG,MAAAA,EAAQ;gBAC1D,OAAOH,QAAAA;AACT,YAAA;;AAGA,YAAA,IAAI,CAACC,aAAAA,EAAe;AAClBA,gBAAAA,aAAAA,GAAgB,MAAMa,qBAAAA,EAAAA;AACxB,YAAA;AAEA,YAAA,OAAOf,2BAA2BC,QAAAA,EAAUC,aAAAA,CAAAA;QAC9C,CAAA,EAAGS,KAAAA,CAAAA;;AAGHC,QAAAA,GAAAA,CAAIF,GAAAA,EAAKT,QAAAA,CAAAA;IACX,CAAA,EACA;QAAEe,MAAAA,EAAQC,MAAAA,CAAOC,QAAQ,CAACX,GAAAA,CAAAA;AAAMW,QAAAA,QAAAA,EAAUD,MAAAA,CAAOC,QAAQ,CAACC,IAAI,CAACF,MAAAA;KAAQ,EACvEX,IAAAA,CAAAA;AAEJ;;;;;"}
|
|
@@ -1,6 +1,16 @@
|
|
|
1
1
|
import { isLocalizedContentType, getDefaultLocale } from '../utils/i18n.mjs';
|
|
2
2
|
import { traverseEntityRelations as traverseEntityRelationsCurried, mapRelation as mapRelationCurried } from '../utils/map-relation.mjs';
|
|
3
3
|
|
|
4
|
+
const setDefaultLocaleToRelation = (relation, defaultLocale)=>{
|
|
5
|
+
const position = relation.position;
|
|
6
|
+
if (position && typeof position === 'object' && !position.locale) {
|
|
7
|
+
position.locale = defaultLocale;
|
|
8
|
+
}
|
|
9
|
+
return {
|
|
10
|
+
...relation,
|
|
11
|
+
locale: defaultLocale
|
|
12
|
+
};
|
|
13
|
+
};
|
|
4
14
|
/**
|
|
5
15
|
* In scenarios like Non i18n CT -> i18n CT
|
|
6
16
|
* relations can be connected to multiple locales,
|
|
@@ -26,15 +36,7 @@ import { traverseEntityRelations as traverseEntityRelationsCurried, mapRelation
|
|
|
26
36
|
if (!defaultLocale) {
|
|
27
37
|
defaultLocale = await getDefaultLocale();
|
|
28
38
|
}
|
|
29
|
-
|
|
30
|
-
const position = relation.position;
|
|
31
|
-
if (position && typeof position === 'object' && !position.locale) {
|
|
32
|
-
relation.position.locale = defaultLocale;
|
|
33
|
-
}
|
|
34
|
-
return {
|
|
35
|
-
...relation,
|
|
36
|
-
locale: defaultLocale
|
|
37
|
-
};
|
|
39
|
+
return setDefaultLocaleToRelation(relation, defaultLocale);
|
|
38
40
|
}, value);
|
|
39
41
|
// @ts-expect-error - fix type
|
|
40
42
|
set(key, relation);
|
|
@@ -44,5 +46,5 @@ import { traverseEntityRelations as traverseEntityRelationsCurried, mapRelation
|
|
|
44
46
|
}, data);
|
|
45
47
|
};
|
|
46
48
|
|
|
47
|
-
export { setDefaultLocaleToRelations };
|
|
49
|
+
export { setDefaultLocaleToRelation, setDefaultLocaleToRelations };
|
|
48
50
|
//# sourceMappingURL=default-locale.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"default-locale.mjs","sources":["../../../../../../src/services/document-service/transform/relations/transform/default-locale.ts"],"sourcesContent":["import type { UID } from '@strapi/types';\n\nimport { getDefaultLocale, isLocalizedContentType } from '../utils/i18n';\nimport { mapRelation, traverseEntityRelations } from '../utils/map-relation';\n\n/**\n * In scenarios like Non i18n CT -> i18n CT\n * relations can be connected to multiple locales,\n * in case user does not provide the locale, this sets it to the default one.\n */\nconst setDefaultLocaleToRelations = (data: Record<string, any>, uid: UID.Schema) => {\n // I18n CT -> anything will already have a locale set (source locale)\n if (isLocalizedContentType(uid)) {\n return data;\n }\n\n // Store the default locale to avoid multiple calls\n let defaultLocale: string | null = null;\n\n /**\n * Traverse the entity input data and set the default locale to relations\n */\n return traverseEntityRelations(\n async ({ key, value }, { set }) => {\n /**\n * Assign default locale on long hand expressed relations\n * e.g { documentId } -> { documentId, locale }\n */\n const relation = await mapRelation(async (relation) => {\n if (!relation || !relation?.documentId || relation?.locale) {\n return relation;\n }\n\n // Set default locale if not provided\n if (!defaultLocale) {\n defaultLocale = await getDefaultLocale();\n }\n\n
|
|
1
|
+
{"version":3,"file":"default-locale.mjs","sources":["../../../../../../src/services/document-service/transform/relations/transform/default-locale.ts"],"sourcesContent":["import type { UID } from '@strapi/types';\n\nimport { getDefaultLocale, isLocalizedContentType } from '../utils/i18n';\nimport { mapRelation, traverseEntityRelations } from '../utils/map-relation';\n\nconst setDefaultLocaleToRelation = <T extends Record<string, any>>(\n relation: T,\n defaultLocale: string | null\n): T & { locale: string | null } => {\n const position = relation.position;\n if (position && typeof position === 'object' && !position.locale) {\n position.locale = defaultLocale;\n }\n\n return { ...relation, locale: defaultLocale };\n};\n\n/**\n * In scenarios like Non i18n CT -> i18n CT\n * relations can be connected to multiple locales,\n * in case user does not provide the locale, this sets it to the default one.\n */\nconst setDefaultLocaleToRelations = (data: Record<string, any>, uid: UID.Schema) => {\n // I18n CT -> anything will already have a locale set (source locale)\n if (isLocalizedContentType(uid)) {\n return data;\n }\n\n // Store the default locale to avoid multiple calls\n let defaultLocale: string | null = null;\n\n /**\n * Traverse the entity input data and set the default locale to relations\n */\n return traverseEntityRelations(\n async ({ key, value }, { set }) => {\n /**\n * Assign default locale on long hand expressed relations\n * e.g { documentId } -> { documentId, locale }\n */\n const relation = await mapRelation(async (relation) => {\n if (!relation || !relation?.documentId || relation?.locale) {\n return relation;\n }\n\n // Set default locale if not provided\n if (!defaultLocale) {\n defaultLocale = await getDefaultLocale();\n }\n\n return setDefaultLocaleToRelation(relation, defaultLocale);\n }, value as any);\n\n // @ts-expect-error - fix type\n set(key, relation);\n },\n { schema: strapi.getModel(uid), getModel: strapi.getModel.bind(strapi) },\n data\n );\n};\n\nexport { setDefaultLocaleToRelation, setDefaultLocaleToRelations };\n"],"names":["setDefaultLocaleToRelation","relation","defaultLocale","position","locale","setDefaultLocaleToRelations","data","uid","isLocalizedContentType","traverseEntityRelations","key","value","set","mapRelation","documentId","getDefaultLocale","schema","strapi","getModel","bind"],"mappings":";;;AAKA,MAAMA,0BAAAA,GAA6B,CACjCC,QAAAA,EACAC,aAAAA,GAAAA;IAEA,MAAMC,QAAAA,GAAWF,SAASE,QAAQ;AAClC,IAAA,IAAIA,YAAY,OAAOA,QAAAA,KAAa,YAAY,CAACA,QAAAA,CAASC,MAAM,EAAE;AAChED,QAAAA,QAAAA,CAASC,MAAM,GAAGF,aAAAA;AACpB,IAAA;IAEA,OAAO;AAAE,QAAA,GAAGD,QAAQ;QAAEG,MAAAA,EAAQF;AAAc,KAAA;AAC9C;AAEA;;;;IAKA,MAAMG,2BAAAA,GAA8B,CAACC,IAAAA,EAA2BC,GAAAA,GAAAA;;AAE9D,IAAA,IAAIC,uBAAuBD,GAAAA,CAAAA,EAAM;QAC/B,OAAOD,IAAAA;AACT,IAAA;;AAGA,IAAA,IAAIJ,aAAAA,GAA+B,IAAA;AAEnC;;MAGA,OAAOO,8BAAAA,CACL,OAAO,EAAEC,GAAG,EAAEC,KAAK,EAAE,EAAE,EAAEC,GAAG,EAAE,GAAA;AAC5B;;;AAGC,UACD,MAAMX,QAAAA,GAAW,MAAMY,kBAAAA,CAAY,OAAOZ,QAAAA,GAAAA;AACxC,YAAA,IAAI,CAACA,QAAAA,IAAY,CAACA,QAAAA,EAAUa,UAAAA,IAAcb,UAAUG,MAAAA,EAAQ;gBAC1D,OAAOH,QAAAA;AACT,YAAA;;AAGA,YAAA,IAAI,CAACC,aAAAA,EAAe;AAClBA,gBAAAA,aAAAA,GAAgB,MAAMa,gBAAAA,EAAAA;AACxB,YAAA;AAEA,YAAA,OAAOf,2BAA2BC,QAAAA,EAAUC,aAAAA,CAAAA;QAC9C,CAAA,EAAGS,KAAAA,CAAAA;;AAGHC,QAAAA,GAAAA,CAAIF,GAAAA,EAAKT,QAAAA,CAAAA;IACX,CAAA,EACA;QAAEe,MAAAA,EAAQC,MAAAA,CAAOC,QAAQ,CAACX,GAAAA,CAAAA;AAAMW,QAAAA,QAAAA,EAAUD,MAAAA,CAAOC,QAAQ,CAACC,IAAI,CAACF,MAAAA;KAAQ,EACvEX,IAAAA,CAAAA;AAEJ;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"map-relation.d.ts","sourceRoot":"","sources":["../../../../../../src/services/document-service/transform/relations/utils/map-relation.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,cAAc,EAAS,MAAM,eAAe,CAAC;AAEtD,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"map-relation.d.ts","sourceRoot":"","sources":["../../../../../../src/services/document-service/transform/relations/utils/map-relation.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,cAAc,EAAS,MAAM,eAAe,CAAC;AAEtD,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAqHnC,KAAK,cAAc,GAAG,UAAU,CAAC,OAAO,cAAc,CAAC,CAAC;AACxD,KAAK,8BAA8B,GAAG,cAAc,CAAC,CAAC,CAAC,GAAG;IAAE,YAAY,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC;AA2CrF,QAAA,MAAM,kBAAkB,+CAzHD,GAAG,KAAK,GAAG,8BAyHW,CAAC;AAC9C,QAAA,MAAM,8BAA8B,oNAAiC,CAAC;AAEtE,OAAO,EACL,kBAAkB,IAAI,WAAW,EACjC,8BAA8B,IAAI,uBAAuB,GAC1D,CAAC"}
|
|
@@ -3,10 +3,16 @@
|
|
|
3
3
|
var _ = require('lodash');
|
|
4
4
|
var strapiUtils = require('@strapi/utils');
|
|
5
5
|
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
6
|
+
/**
|
|
7
|
+
* Whether a shorthand relation value is a numeric entry id (as opposed to a documentId).
|
|
8
|
+
*
|
|
9
|
+
* A string only counts as numeric when it is made of digits *entirely*. `parseInt` must not be
|
|
10
|
+
* used here: it stops at the first non-digit character, so a documentId that happens to start
|
|
11
|
+
* with a digit (e.g. `'3d52c864df72fcc68ab62ebe'` -> `3`) would be misclassified as an id.
|
|
12
|
+
*/ const isNumeric = (value)=>{
|
|
13
|
+
if (typeof value === 'number') return Number.isFinite(value);
|
|
14
|
+
if (typeof value === 'string') return /^\d+$/.test(value);
|
|
15
|
+
return false; // Arrays (e.g. [1, 'docId']), objects, etc.
|
|
10
16
|
};
|
|
11
17
|
const toArray = (value)=>{
|
|
12
18
|
// Keep value as it is if it's a nullish value
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"map-relation.js","sources":["../../../../../../src/services/document-service/transform/relations/utils/map-relation.ts"],"sourcesContent":["/* eslint-disable node/no-callback-literal */\nimport { curry, isObject } from 'lodash';\n\nimport { traverseEntity, async } from '@strapi/utils';\n\nimport { Relation } from './types';\n\nconst isNumeric = (value: any): value is number => {\n if (
|
|
1
|
+
{"version":3,"file":"map-relation.js","sources":["../../../../../../src/services/document-service/transform/relations/utils/map-relation.ts"],"sourcesContent":["/* eslint-disable node/no-callback-literal */\nimport { curry, isObject } from 'lodash';\n\nimport { traverseEntity, async } from '@strapi/utils';\n\nimport { Relation } from './types';\n\n/**\n * Whether a shorthand relation value is a numeric entry id (as opposed to a documentId).\n *\n * A string only counts as numeric when it is made of digits *entirely*. `parseInt` must not be\n * used here: it stops at the first non-digit character, so a documentId that happens to start\n * with a digit (e.g. `'3d52c864df72fcc68ab62ebe'` -> `3`) would be misclassified as an id.\n */\nconst isNumeric = (value: any): value is number => {\n if (typeof value === 'number') return Number.isFinite(value);\n if (typeof value === 'string') return /^\\d+$/.test(value);\n return false; // Arrays (e.g. [1, 'docId']), objects, etc.\n};\n\nconst toArray = (value: any) => {\n // Keep value as it is if it's a nullish value\n if (value == null) return value;\n if (Array.isArray(value)) return value;\n\n return [value];\n};\n\n/**\n * There are multiple ways to create Strapi relations.\n * This is a utility to traverse and transform relation data\n *\n *\n * For consistency and ease of use, the response will always be an object with the following shape:\n * { set: [{...}], connect: [{...}], disconnect: [{...}] }\n *\n * @example\n * transformRelationData({\n * onLongHand: (relation) => {\n * // Change the id of the relation\n * return { id: 'other' };\n * },\n * }, relation)\n */\nconst mapRelation = async (\n callback: (relation: any) => any,\n rel: Relation,\n isRecursive = false\n): Promise<Relation> => {\n let relation: Relation = rel;\n\n const wrapInSet = (value: any) => {\n // Ignore wrapping if it's a recursive call\n if (isRecursive) {\n return value;\n }\n return { set: toArray(value) };\n };\n\n // undefined | null\n if (relation == null) {\n return callback(relation);\n }\n\n // LongHand[] | ShortHand[]\n if (Array.isArray(relation)) {\n return async\n .map(relation, (r: Relation) => mapRelation(callback, r, true))\n .then((result: any) => result.flat().filter(Boolean))\n .then(wrapInSet);\n }\n\n // LongHand\n if (isObject(relation)) {\n // { id: 1 } || { documentId: 1 }\n if ('id' in relation || 'documentId' in relation) {\n const result = await callback(relation);\n return wrapInSet(result);\n }\n\n // If not connecting anything, return default visitor\n if (!relation.set && !relation.disconnect && !relation.connect) {\n return callback(relation);\n }\n\n // { set }\n if (relation.set) {\n const set: any = await mapRelation(callback, relation.set, true);\n relation = { ...relation, set: toArray(set) };\n }\n\n // { disconnect}\n if (relation.disconnect) {\n const disconnect: any = await mapRelation(callback, relation.disconnect, true);\n relation = { ...relation, disconnect: toArray(disconnect) };\n }\n\n // { connect }\n if (relation.connect) {\n // Transform the relation to connect\n const connect: any = await mapRelation(callback, relation.connect, true);\n relation = { ...relation, connect: toArray(connect) };\n }\n\n return relation;\n }\n\n // ShortHand\n if (isNumeric(relation)) {\n const result = await callback({ id: relation });\n return wrapInSet(result);\n }\n\n if (typeof relation === 'string') {\n const result = await callback({ documentId: relation });\n return wrapInSet(result);\n }\n\n // Anything else\n return callback(relation);\n};\n\ntype TraverseEntity = Parameters<typeof traverseEntity>;\ntype TraverseEntityRelationsOptions = TraverseEntity[1] & { includeMedia?: boolean };\n\n/**\n * Utility function, same as `traverseEntity` but only for relations and, when requested, media.\n */\nconst traverseEntityRelations = async (\n visitor: TraverseEntity[0],\n options: TraverseEntityRelationsOptions,\n data: TraverseEntity[2]\n) => {\n const { includeMedia = false, ...traverseOptions } = options;\n\n return traverseEntity(\n async (options, utils) => {\n const { attribute } = options;\n\n if (!attribute) {\n return;\n }\n\n if (attribute.type !== 'relation' && !(includeMedia && attribute.type === 'media')) {\n return;\n }\n\n if (attribute.type === 'relation') {\n // TODO: Handle join columns\n if (attribute.useJoinTable === false) {\n return;\n }\n\n // morphToOne uses morphColumn (inline columns on the entity), handled directly in processData\n if (attribute.relation === 'morphToOne') {\n return;\n }\n }\n\n return visitor(options, utils);\n },\n traverseOptions,\n data\n );\n};\n\nconst mapRelationCurried = curry(mapRelation);\nconst traverseEntityRelationsCurried = curry(traverseEntityRelations);\n\nexport {\n mapRelationCurried as mapRelation,\n traverseEntityRelationsCurried as traverseEntityRelations,\n};\n"],"names":["isNumeric","value","Number","isFinite","test","toArray","Array","isArray","mapRelation","callback","rel","isRecursive","relation","wrapInSet","set","async","map","r","then","result","flat","filter","Boolean","isObject","disconnect","connect","id","documentId","traverseEntityRelations","visitor","options","data","includeMedia","traverseOptions","traverseEntity","utils","attribute","type","useJoinTable","mapRelationCurried","curry","traverseEntityRelationsCurried"],"mappings":"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"}
|
|
@@ -1,10 +1,16 @@
|
|
|
1
1
|
import { curry, isObject } from 'lodash';
|
|
2
2
|
import { async, traverseEntity } from '@strapi/utils';
|
|
3
3
|
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
4
|
+
/**
|
|
5
|
+
* Whether a shorthand relation value is a numeric entry id (as opposed to a documentId).
|
|
6
|
+
*
|
|
7
|
+
* A string only counts as numeric when it is made of digits *entirely*. `parseInt` must not be
|
|
8
|
+
* used here: it stops at the first non-digit character, so a documentId that happens to start
|
|
9
|
+
* with a digit (e.g. `'3d52c864df72fcc68ab62ebe'` -> `3`) would be misclassified as an id.
|
|
10
|
+
*/ const isNumeric = (value)=>{
|
|
11
|
+
if (typeof value === 'number') return Number.isFinite(value);
|
|
12
|
+
if (typeof value === 'string') return /^\d+$/.test(value);
|
|
13
|
+
return false; // Arrays (e.g. [1, 'docId']), objects, etc.
|
|
8
14
|
};
|
|
9
15
|
const toArray = (value)=>{
|
|
10
16
|
// Keep value as it is if it's a nullish value
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"map-relation.mjs","sources":["../../../../../../src/services/document-service/transform/relations/utils/map-relation.ts"],"sourcesContent":["/* eslint-disable node/no-callback-literal */\nimport { curry, isObject } from 'lodash';\n\nimport { traverseEntity, async } from '@strapi/utils';\n\nimport { Relation } from './types';\n\nconst isNumeric = (value: any): value is number => {\n if (
|
|
1
|
+
{"version":3,"file":"map-relation.mjs","sources":["../../../../../../src/services/document-service/transform/relations/utils/map-relation.ts"],"sourcesContent":["/* eslint-disable node/no-callback-literal */\nimport { curry, isObject } from 'lodash';\n\nimport { traverseEntity, async } from '@strapi/utils';\n\nimport { Relation } from './types';\n\n/**\n * Whether a shorthand relation value is a numeric entry id (as opposed to a documentId).\n *\n * A string only counts as numeric when it is made of digits *entirely*. `parseInt` must not be\n * used here: it stops at the first non-digit character, so a documentId that happens to start\n * with a digit (e.g. `'3d52c864df72fcc68ab62ebe'` -> `3`) would be misclassified as an id.\n */\nconst isNumeric = (value: any): value is number => {\n if (typeof value === 'number') return Number.isFinite(value);\n if (typeof value === 'string') return /^\\d+$/.test(value);\n return false; // Arrays (e.g. [1, 'docId']), objects, etc.\n};\n\nconst toArray = (value: any) => {\n // Keep value as it is if it's a nullish value\n if (value == null) return value;\n if (Array.isArray(value)) return value;\n\n return [value];\n};\n\n/**\n * There are multiple ways to create Strapi relations.\n * This is a utility to traverse and transform relation data\n *\n *\n * For consistency and ease of use, the response will always be an object with the following shape:\n * { set: [{...}], connect: [{...}], disconnect: [{...}] }\n *\n * @example\n * transformRelationData({\n * onLongHand: (relation) => {\n * // Change the id of the relation\n * return { id: 'other' };\n * },\n * }, relation)\n */\nconst mapRelation = async (\n callback: (relation: any) => any,\n rel: Relation,\n isRecursive = false\n): Promise<Relation> => {\n let relation: Relation = rel;\n\n const wrapInSet = (value: any) => {\n // Ignore wrapping if it's a recursive call\n if (isRecursive) {\n return value;\n }\n return { set: toArray(value) };\n };\n\n // undefined | null\n if (relation == null) {\n return callback(relation);\n }\n\n // LongHand[] | ShortHand[]\n if (Array.isArray(relation)) {\n return async\n .map(relation, (r: Relation) => mapRelation(callback, r, true))\n .then((result: any) => result.flat().filter(Boolean))\n .then(wrapInSet);\n }\n\n // LongHand\n if (isObject(relation)) {\n // { id: 1 } || { documentId: 1 }\n if ('id' in relation || 'documentId' in relation) {\n const result = await callback(relation);\n return wrapInSet(result);\n }\n\n // If not connecting anything, return default visitor\n if (!relation.set && !relation.disconnect && !relation.connect) {\n return callback(relation);\n }\n\n // { set }\n if (relation.set) {\n const set: any = await mapRelation(callback, relation.set, true);\n relation = { ...relation, set: toArray(set) };\n }\n\n // { disconnect}\n if (relation.disconnect) {\n const disconnect: any = await mapRelation(callback, relation.disconnect, true);\n relation = { ...relation, disconnect: toArray(disconnect) };\n }\n\n // { connect }\n if (relation.connect) {\n // Transform the relation to connect\n const connect: any = await mapRelation(callback, relation.connect, true);\n relation = { ...relation, connect: toArray(connect) };\n }\n\n return relation;\n }\n\n // ShortHand\n if (isNumeric(relation)) {\n const result = await callback({ id: relation });\n return wrapInSet(result);\n }\n\n if (typeof relation === 'string') {\n const result = await callback({ documentId: relation });\n return wrapInSet(result);\n }\n\n // Anything else\n return callback(relation);\n};\n\ntype TraverseEntity = Parameters<typeof traverseEntity>;\ntype TraverseEntityRelationsOptions = TraverseEntity[1] & { includeMedia?: boolean };\n\n/**\n * Utility function, same as `traverseEntity` but only for relations and, when requested, media.\n */\nconst traverseEntityRelations = async (\n visitor: TraverseEntity[0],\n options: TraverseEntityRelationsOptions,\n data: TraverseEntity[2]\n) => {\n const { includeMedia = false, ...traverseOptions } = options;\n\n return traverseEntity(\n async (options, utils) => {\n const { attribute } = options;\n\n if (!attribute) {\n return;\n }\n\n if (attribute.type !== 'relation' && !(includeMedia && attribute.type === 'media')) {\n return;\n }\n\n if (attribute.type === 'relation') {\n // TODO: Handle join columns\n if (attribute.useJoinTable === false) {\n return;\n }\n\n // morphToOne uses morphColumn (inline columns on the entity), handled directly in processData\n if (attribute.relation === 'morphToOne') {\n return;\n }\n }\n\n return visitor(options, utils);\n },\n traverseOptions,\n data\n );\n};\n\nconst mapRelationCurried = curry(mapRelation);\nconst traverseEntityRelationsCurried = curry(traverseEntityRelations);\n\nexport {\n mapRelationCurried as mapRelation,\n traverseEntityRelationsCurried as traverseEntityRelations,\n};\n"],"names":["isNumeric","value","Number","isFinite","test","toArray","Array","isArray","mapRelation","callback","rel","isRecursive","relation","wrapInSet","set","async","map","r","then","result","flat","filter","Boolean","isObject","disconnect","connect","id","documentId","traverseEntityRelations","visitor","options","data","includeMedia","traverseOptions","traverseEntity","utils","attribute","type","useJoinTable","mapRelationCurried","curry","traverseEntityRelationsCurried"],"mappings":"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"}
|
|
@@ -1,7 +1,24 @@
|
|
|
1
1
|
import type { Core, Schema, UID } from '@strapi/types';
|
|
2
|
-
export
|
|
2
|
+
export type DeferredRelationCopy = {
|
|
3
|
+
schemaUid: UID.Schema;
|
|
4
|
+
attributeName: string;
|
|
5
|
+
kind: 'joinTable' | 'fkColumn' | 'morphToOne';
|
|
6
|
+
/** Lodash path to the owning entity in entry data (e.g. `details` or `items.0`). `null` = root entry. */
|
|
7
|
+
ownerPath: string | null;
|
|
8
|
+
};
|
|
9
|
+
export type PostCloneRelationUpdate = {
|
|
10
|
+
dataPath: string;
|
|
11
|
+
value: Record<string, unknown>;
|
|
12
|
+
schemaUid: UID.Schema;
|
|
13
|
+
ownerPath: string | null;
|
|
14
|
+
};
|
|
15
|
+
export type PrepareCloneDataResult = {
|
|
3
16
|
data: Record<string, unknown>;
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
17
|
+
deferredCopies: DeferredRelationCopy[];
|
|
18
|
+
postCloneUpdates: PostCloneRelationUpdate[];
|
|
19
|
+
};
|
|
20
|
+
export declare const prepareCloneData: (originalData: Record<string, unknown>, submittedData: Record<string, unknown> | undefined, contentType: Schema.ContentType, getModel: (uid: string) => Schema.Schema) => Promise<PrepareCloneDataResult>;
|
|
21
|
+
export declare const copyCloneRelationRows: (strapi: Core.Strapi, uid: UID.Schema, attributeName: string, sourceEntryId: number, targetEntryId: number) => Promise<void>;
|
|
22
|
+
export declare const applyDeferredCloneRelationCopies: (strapi: Core.Strapi, rootUid: UID.ContentType, sourceRootId: number, targetRootId: number, originalData: Record<string, unknown>, clonedData: Record<string, unknown>, deferredCopies: DeferredRelationCopy[]) => Promise<void>;
|
|
23
|
+
export declare const applyPostCloneRelationUpdates: (strapi: Core.Strapi, rootUid: UID.ContentType, sourceRootId: number, clonedEntryId: number, clonedData: Record<string, unknown>, originalData: Record<string, unknown>, postCloneUpdates: PostCloneRelationUpdate[]) => Promise<void>;
|
|
7
24
|
//# sourceMappingURL=clone-relations.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"clone-relations.d.ts","sourceRoot":"","sources":["../../../../src/services/document-service/utils/clone-relations.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"clone-relations.d.ts","sourceRoot":"","sources":["../../../../src/services/document-service/utils/clone-relations.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,eAAe,CAAC;AAmBvD,MAAM,MAAM,oBAAoB,GAAG;IACjC,SAAS,EAAE,GAAG,CAAC,MAAM,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;IACtB,IAAI,EAAE,WAAW,GAAG,UAAU,GAAG,YAAY,CAAC;IAC9C,yGAAyG;IACzG,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B,CAAC;AAEF,MAAM,MAAM,uBAAuB,GAAG;IACpC,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/B,SAAS,EAAE,GAAG,CAAC,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B,CAAC;AAEF,MAAM,MAAM,sBAAsB,GAAG;IACnC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC9B,cAAc,EAAE,oBAAoB,EAAE,CAAC;IACvC,gBAAgB,EAAE,uBAAuB,EAAE,CAAC;CAC7C,CAAC;AAwRF,eAAO,MAAM,gBAAgB,GAC3B,cAAc,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACrC,eAAe,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,EAClD,aAAa,MAAM,CAAC,WAAW,EAC/B,UAAU,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,KACvC,OAAO,CAAC,sBAAsB,CA6GhC,CAAC;AA6CF,eAAO,MAAM,qBAAqB,GAChC,QAAQ,IAAI,CAAC,MAAM,EACnB,KAAK,GAAG,CAAC,MAAM,EACf,eAAe,MAAM,EACrB,eAAe,MAAM,EACrB,eAAe,MAAM,kBAqCtB,CAAC;AAqGF,eAAO,MAAM,gCAAgC,GAC3C,QAAQ,IAAI,CAAC,MAAM,EACnB,SAAS,GAAG,CAAC,WAAW,EACxB,cAAc,MAAM,EACpB,cAAc,MAAM,EACpB,cAAc,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACrC,YAAY,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACnC,gBAAgB,oBAAoB,EAAE,kBAqDvC,CAAC;AAyWF,eAAO,MAAM,6BAA6B,GACxC,QAAQ,IAAI,CAAC,MAAM,EACnB,SAAS,GAAG,CAAC,WAAW,EACxB,cAAc,MAAM,EACpB,eAAe,MAAM,EACrB,YAAY,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACnC,cAAc,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACrC,kBAAkB,uBAAuB,EAAE,kBAmE5C,CAAC"}
|