@strapi/core 0.0.0-experimental.838b114ef86c9081f990c3b46f5843a41088ec64 → 0.0.0-experimental.83f23a40206562f4b4916d31f95bf453e8511603
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/core-api/controller/index.js +1 -1
- package/dist/core-api/controller/index.js.map +1 -1
- package/dist/core-api/controller/index.mjs +1 -1
- package/dist/core-api/controller/index.mjs.map +1 -1
- package/dist/core-api/controller/transform.js +1 -1
- package/dist/core-api/controller/transform.js.map +1 -1
- package/dist/core-api/controller/transform.mjs +1 -1
- package/dist/core-api/controller/transform.mjs.map +1 -1
- package/dist/core-api/routes/validation/mappers.d.ts.map +1 -1
- package/dist/core-api/routes/validation/mappers.js +35 -0
- package/dist/core-api/routes/validation/mappers.js.map +1 -1
- package/dist/core-api/routes/validation/mappers.mjs +35 -0
- package/dist/core-api/routes/validation/mappers.mjs.map +1 -1
- package/dist/loaders/plugins/index.js +1 -1
- package/dist/loaders/plugins/index.js.map +1 -1
- package/dist/loaders/plugins/index.mjs +1 -1
- package/dist/loaders/plugins/index.mjs.map +1 -1
- package/dist/package.json.js +11 -11
- package/dist/package.json.mjs +11 -11
- package/dist/services/content-api/index.d.ts +1 -1
- package/dist/services/content-api/index.d.ts.map +1 -1
- package/dist/services/content-api/index.js +1 -1
- package/dist/services/content-api/index.js.map +1 -1
- package/dist/services/content-api/index.mjs +2 -2
- package/dist/services/content-api/index.mjs.map +1 -1
- package/dist/services/content-source-maps.d.ts +8 -13
- package/dist/services/content-source-maps.d.ts.map +1 -1
- package/dist/services/content-source-maps.js +56 -106
- package/dist/services/content-source-maps.js.map +1 -1
- package/dist/services/content-source-maps.mjs +56 -106
- package/dist/services/content-source-maps.mjs.map +1 -1
- package/dist/services/document-service/components.d.ts +6 -1
- package/dist/services/document-service/components.d.ts.map +1 -1
- package/dist/services/document-service/components.js +97 -0
- package/dist/services/document-service/components.js.map +1 -1
- package/dist/services/document-service/components.mjs +97 -1
- package/dist/services/document-service/components.mjs.map +1 -1
- package/dist/services/document-service/repository.d.ts.map +1 -1
- package/dist/services/document-service/repository.js +4 -0
- package/dist/services/document-service/repository.js.map +1 -1
- package/dist/services/document-service/repository.mjs +5 -1
- package/dist/services/document-service/repository.mjs.map +1 -1
- package/dist/services/document-service/utils/unidirectional-relations.d.ts +19 -2
- package/dist/services/document-service/utils/unidirectional-relations.d.ts.map +1 -1
- package/dist/services/document-service/utils/unidirectional-relations.js +21 -6
- package/dist/services/document-service/utils/unidirectional-relations.js.map +1 -1
- package/dist/services/document-service/utils/unidirectional-relations.mjs +21 -6
- package/dist/services/document-service/utils/unidirectional-relations.mjs.map +1 -1
- package/dist/services/metrics/index.js +2 -1
- package/dist/services/metrics/index.js.map +1 -1
- package/dist/services/metrics/index.mjs +2 -1
- package/dist/services/metrics/index.mjs.map +1 -1
- package/dist/services/metrics/middleware.d.ts +2 -1
- package/dist/services/metrics/middleware.d.ts.map +1 -1
- package/dist/services/metrics/middleware.js +2 -2
- package/dist/services/metrics/middleware.js.map +1 -1
- package/dist/services/metrics/middleware.mjs +2 -2
- package/dist/services/metrics/middleware.mjs.map +1 -1
- package/package.json +11 -11
package/dist/package.json.js
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
4
|
|
|
5
5
|
var name = "@strapi/core";
|
|
6
|
-
var version = "0.0.0-experimental.
|
|
6
|
+
var version = "0.0.0-experimental.83f23a40206562f4b4916d31f95bf453e8511603";
|
|
7
7
|
var description = "Core of Strapi";
|
|
8
8
|
var homepage = "https://strapi.io";
|
|
9
9
|
var bugs = {
|
|
@@ -59,14 +59,14 @@ var dependencies = {
|
|
|
59
59
|
"@koa/cors": "5.0.0",
|
|
60
60
|
"@koa/router": "12.0.2",
|
|
61
61
|
"@paralleldrive/cuid2": "2.2.2",
|
|
62
|
-
"@strapi/admin": "0.0.0-experimental.
|
|
63
|
-
"@strapi/database": "0.0.0-experimental.
|
|
64
|
-
"@strapi/generators": "0.0.0-experimental.
|
|
65
|
-
"@strapi/logger": "0.0.0-experimental.
|
|
66
|
-
"@strapi/permissions": "0.0.0-experimental.
|
|
67
|
-
"@strapi/types": "0.0.0-experimental.
|
|
68
|
-
"@strapi/typescript-utils": "0.0.0-experimental.
|
|
69
|
-
"@strapi/utils": "0.0.0-experimental.
|
|
62
|
+
"@strapi/admin": "0.0.0-experimental.83f23a40206562f4b4916d31f95bf453e8511603",
|
|
63
|
+
"@strapi/database": "0.0.0-experimental.83f23a40206562f4b4916d31f95bf453e8511603",
|
|
64
|
+
"@strapi/generators": "0.0.0-experimental.83f23a40206562f4b4916d31f95bf453e8511603",
|
|
65
|
+
"@strapi/logger": "0.0.0-experimental.83f23a40206562f4b4916d31f95bf453e8511603",
|
|
66
|
+
"@strapi/permissions": "0.0.0-experimental.83f23a40206562f4b4916d31f95bf453e8511603",
|
|
67
|
+
"@strapi/types": "0.0.0-experimental.83f23a40206562f4b4916d31f95bf453e8511603",
|
|
68
|
+
"@strapi/typescript-utils": "0.0.0-experimental.83f23a40206562f4b4916d31f95bf453e8511603",
|
|
69
|
+
"@strapi/utils": "0.0.0-experimental.83f23a40206562f4b4916d31f95bf453e8511603",
|
|
70
70
|
"@vercel/stega": "0.1.2",
|
|
71
71
|
bcryptjs: "2.4.3",
|
|
72
72
|
boxen: "5.1.2",
|
|
@@ -133,9 +133,9 @@ var devDependencies = {
|
|
|
133
133
|
"@types/node": "18.19.24",
|
|
134
134
|
"@types/node-schedule": "2.1.7",
|
|
135
135
|
"@types/statuses": "2.0.1",
|
|
136
|
-
"eslint-config-custom": "0.0.0-experimental.
|
|
136
|
+
"eslint-config-custom": "0.0.0-experimental.83f23a40206562f4b4916d31f95bf453e8511603",
|
|
137
137
|
supertest: "6.3.3",
|
|
138
|
-
tsconfig: "0.0.0-experimental.
|
|
138
|
+
tsconfig: "0.0.0-experimental.83f23a40206562f4b4916d31f95bf453e8511603"
|
|
139
139
|
};
|
|
140
140
|
var engines = {
|
|
141
141
|
node: ">=18.0.0 <=22.x.x",
|
package/dist/package.json.mjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
var name = "@strapi/core";
|
|
2
|
-
var version = "0.0.0-experimental.
|
|
2
|
+
var version = "0.0.0-experimental.83f23a40206562f4b4916d31f95bf453e8511603";
|
|
3
3
|
var description = "Core of Strapi";
|
|
4
4
|
var homepage = "https://strapi.io";
|
|
5
5
|
var bugs = {
|
|
@@ -55,14 +55,14 @@ var dependencies = {
|
|
|
55
55
|
"@koa/cors": "5.0.0",
|
|
56
56
|
"@koa/router": "12.0.2",
|
|
57
57
|
"@paralleldrive/cuid2": "2.2.2",
|
|
58
|
-
"@strapi/admin": "0.0.0-experimental.
|
|
59
|
-
"@strapi/database": "0.0.0-experimental.
|
|
60
|
-
"@strapi/generators": "0.0.0-experimental.
|
|
61
|
-
"@strapi/logger": "0.0.0-experimental.
|
|
62
|
-
"@strapi/permissions": "0.0.0-experimental.
|
|
63
|
-
"@strapi/types": "0.0.0-experimental.
|
|
64
|
-
"@strapi/typescript-utils": "0.0.0-experimental.
|
|
65
|
-
"@strapi/utils": "0.0.0-experimental.
|
|
58
|
+
"@strapi/admin": "0.0.0-experimental.83f23a40206562f4b4916d31f95bf453e8511603",
|
|
59
|
+
"@strapi/database": "0.0.0-experimental.83f23a40206562f4b4916d31f95bf453e8511603",
|
|
60
|
+
"@strapi/generators": "0.0.0-experimental.83f23a40206562f4b4916d31f95bf453e8511603",
|
|
61
|
+
"@strapi/logger": "0.0.0-experimental.83f23a40206562f4b4916d31f95bf453e8511603",
|
|
62
|
+
"@strapi/permissions": "0.0.0-experimental.83f23a40206562f4b4916d31f95bf453e8511603",
|
|
63
|
+
"@strapi/types": "0.0.0-experimental.83f23a40206562f4b4916d31f95bf453e8511603",
|
|
64
|
+
"@strapi/typescript-utils": "0.0.0-experimental.83f23a40206562f4b4916d31f95bf453e8511603",
|
|
65
|
+
"@strapi/utils": "0.0.0-experimental.83f23a40206562f4b4916d31f95bf453e8511603",
|
|
66
66
|
"@vercel/stega": "0.1.2",
|
|
67
67
|
bcryptjs: "2.4.3",
|
|
68
68
|
boxen: "5.1.2",
|
|
@@ -129,9 +129,9 @@ var devDependencies = {
|
|
|
129
129
|
"@types/node": "18.19.24",
|
|
130
130
|
"@types/node-schedule": "2.1.7",
|
|
131
131
|
"@types/statuses": "2.0.1",
|
|
132
|
-
"eslint-config-custom": "0.0.0-experimental.
|
|
132
|
+
"eslint-config-custom": "0.0.0-experimental.83f23a40206562f4b4916d31f95bf453e8511603",
|
|
133
133
|
supertest: "6.3.3",
|
|
134
|
-
tsconfig: "0.0.0-experimental.
|
|
134
|
+
tsconfig: "0.0.0-experimental.83f23a40206562f4b4916d31f95bf453e8511603"
|
|
135
135
|
};
|
|
136
136
|
var engines = {
|
|
137
137
|
node: ">=18.0.0 <=22.x.x",
|
|
@@ -47,7 +47,7 @@ declare const createContentAPI: (strapi: Core.Strapi) => {
|
|
|
47
47
|
controllers: Record<string, string[]>;
|
|
48
48
|
}>;
|
|
49
49
|
};
|
|
50
|
-
getRoutesMap: () => Promise<Record<string,
|
|
50
|
+
getRoutesMap: () => Promise<Record<string, unknown>>;
|
|
51
51
|
sanitize: {
|
|
52
52
|
input: sanitize.SanitizeFunc;
|
|
53
53
|
output: sanitize.SanitizeFunc;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/services/content-api/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,QAAQ,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/services/content-api/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAqC,MAAM,eAAe,CAAC;AAEtF,OAAO,KAAK,EAAE,IAAI,EAAO,MAAM,eAAe,CAAC;AAgB/C;;GAEG;AACH,QAAA,MAAM,gBAAgB,WAAY,KAAK,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAgF5C,CAAC;AAEF,eAAe,gBAAgB,CAAC"}
|
|
@@ -49,7 +49,7 @@ const filterContentAPI = (route)=>route.info.type === 'content-api';
|
|
|
49
49
|
path: `${apiPrefix}${route.path}`
|
|
50
50
|
}));
|
|
51
51
|
});
|
|
52
|
-
return routesMap;
|
|
52
|
+
return strapiUtils.sanitizeRoutesMapForSerialization(routesMap);
|
|
53
53
|
};
|
|
54
54
|
const sanitizer = strapiUtils.sanitize.createAPISanitizers({
|
|
55
55
|
getModel (uid) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../src/services/content-api/index.ts"],"sourcesContent":["import _ from 'lodash';\nimport { sanitize, validate } from '@strapi/utils';\n\nimport type { Core, UID } from '@strapi/types';\n\nimport instantiatePermissionsUtilities from './permissions';\n\nconst transformRoutePrefixFor = (pluginName: string) => (route: Core.Route) => {\n const prefix = route.config && route.config.prefix;\n const path = prefix !== undefined ? `${prefix}${route.path}` : `/${pluginName}${route.path}`;\n\n return {\n ...route,\n path,\n };\n};\n\nconst filterContentAPI = (route: Core.Route) => route.info.type === 'content-api';\n\n/**\n * Create a content API container that holds logic, tools and utils. (eg: permissions, ...)\n */\nconst createContentAPI = (strapi: Core.Strapi) => {\n const getRoutesMap = async () => {\n const routesMap: Record<string, Core.Route[]> = {};\n\n _.forEach(strapi.apis, (api, apiName) => {\n const routes = _.flatMap(api.routes, (route) => {\n if ('routes' in route) {\n return route.routes;\n }\n\n return route;\n }).filter(filterContentAPI);\n\n if (routes.length === 0) {\n return;\n }\n\n const apiPrefix = strapi.config.get('api.rest.prefix');\n routesMap[`api::${apiName}`] = routes.map((route) => ({\n ...route,\n path: `${apiPrefix}${route.path}`,\n }));\n });\n\n _.forEach(strapi.plugins, (plugin, pluginName) => {\n const transformPrefix = transformRoutePrefixFor(pluginName);\n\n if (Array.isArray(plugin.routes)) {\n return plugin.routes.map(transformPrefix).filter(filterContentAPI);\n }\n\n const routes = _.flatMap(plugin.routes, (route) => route.routes.map(transformPrefix)).filter(\n filterContentAPI\n );\n\n if (routes.length === 0) {\n return;\n }\n\n const apiPrefix = strapi.config.get('api.rest.prefix');\n routesMap[`plugin::${pluginName}`] = routes.map((route) => ({\n ...route,\n path: `${apiPrefix}${route.path}`,\n }));\n });\n\n return routesMap;\n };\n\n const sanitizer = sanitize.createAPISanitizers({\n getModel(uid: string) {\n return strapi.getModel(uid as UID.Schema);\n },\n // NOTE: use lazy access to allow registration of sanitizers after the creation of the container\n get sanitizers() {\n return {\n input: strapi.sanitizers.get('content-api.input'),\n output: strapi.sanitizers.get('content-api.output'),\n };\n },\n });\n\n const validator = validate.createAPIValidators({\n getModel(uid: string) {\n return strapi.getModel(uid as UID.Schema);\n },\n // NOTE: use lazy access to allow registration of validators after the creation of the container\n get validators() {\n return {\n input: strapi.validators.get('content-api.input'),\n };\n },\n });\n\n return {\n permissions: instantiatePermissionsUtilities(strapi),\n getRoutesMap,\n sanitize: sanitizer,\n validate: validator,\n };\n};\n\nexport default createContentAPI;\n"],"names":["transformRoutePrefixFor","pluginName","route","prefix","config","path","undefined","filterContentAPI","info","type","createContentAPI","strapi","getRoutesMap","routesMap","_","forEach","apis","api","apiName","routes","flatMap","filter","length","apiPrefix","get","map","plugins","plugin","transformPrefix","Array","isArray","sanitizer","sanitize","createAPISanitizers","getModel","uid","sanitizers","input","output","validator","validate","createAPIValidators","validators","permissions","instantiatePermissionsUtilities"],"mappings":"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
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../src/services/content-api/index.ts"],"sourcesContent":["import _ from 'lodash';\nimport { sanitize, validate, sanitizeRoutesMapForSerialization } from '@strapi/utils';\n\nimport type { Core, UID } from '@strapi/types';\n\nimport instantiatePermissionsUtilities from './permissions';\n\nconst transformRoutePrefixFor = (pluginName: string) => (route: Core.Route) => {\n const prefix = route.config && route.config.prefix;\n const path = prefix !== undefined ? `${prefix}${route.path}` : `/${pluginName}${route.path}`;\n\n return {\n ...route,\n path,\n };\n};\n\nconst filterContentAPI = (route: Core.Route) => route.info.type === 'content-api';\n\n/**\n * Create a content API container that holds logic, tools and utils. (eg: permissions, ...)\n */\nconst createContentAPI = (strapi: Core.Strapi) => {\n const getRoutesMap = async () => {\n const routesMap: Record<string, Core.Route[]> = {};\n\n _.forEach(strapi.apis, (api, apiName) => {\n const routes = _.flatMap(api.routes, (route) => {\n if ('routes' in route) {\n return route.routes;\n }\n\n return route;\n }).filter(filterContentAPI);\n\n if (routes.length === 0) {\n return;\n }\n\n const apiPrefix = strapi.config.get('api.rest.prefix');\n routesMap[`api::${apiName}`] = routes.map((route) => ({\n ...route,\n path: `${apiPrefix}${route.path}`,\n }));\n });\n\n _.forEach(strapi.plugins, (plugin, pluginName) => {\n const transformPrefix = transformRoutePrefixFor(pluginName);\n\n if (Array.isArray(plugin.routes)) {\n return plugin.routes.map(transformPrefix).filter(filterContentAPI);\n }\n\n const routes = _.flatMap(plugin.routes, (route) => route.routes.map(transformPrefix)).filter(\n filterContentAPI\n );\n\n if (routes.length === 0) {\n return;\n }\n\n const apiPrefix = strapi.config.get('api.rest.prefix');\n routesMap[`plugin::${pluginName}`] = routes.map((route) => ({\n ...route,\n path: `${apiPrefix}${route.path}`,\n }));\n });\n\n return sanitizeRoutesMapForSerialization(routesMap);\n };\n\n const sanitizer = sanitize.createAPISanitizers({\n getModel(uid: string) {\n return strapi.getModel(uid as UID.Schema);\n },\n // NOTE: use lazy access to allow registration of sanitizers after the creation of the container\n get sanitizers() {\n return {\n input: strapi.sanitizers.get('content-api.input'),\n output: strapi.sanitizers.get('content-api.output'),\n };\n },\n });\n\n const validator = validate.createAPIValidators({\n getModel(uid: string) {\n return strapi.getModel(uid as UID.Schema);\n },\n // NOTE: use lazy access to allow registration of validators after the creation of the container\n get validators() {\n return {\n input: strapi.validators.get('content-api.input'),\n };\n },\n });\n\n return {\n permissions: instantiatePermissionsUtilities(strapi),\n getRoutesMap,\n sanitize: sanitizer,\n validate: validator,\n };\n};\n\nexport default createContentAPI;\n"],"names":["transformRoutePrefixFor","pluginName","route","prefix","config","path","undefined","filterContentAPI","info","type","createContentAPI","strapi","getRoutesMap","routesMap","_","forEach","apis","api","apiName","routes","flatMap","filter","length","apiPrefix","get","map","plugins","plugin","transformPrefix","Array","isArray","sanitizeRoutesMapForSerialization","sanitizer","sanitize","createAPISanitizers","getModel","uid","sanitizers","input","output","validator","validate","createAPIValidators","validators","permissions","instantiatePermissionsUtilities"],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import _ from 'lodash';
|
|
2
|
-
import { sanitize, validate } from '@strapi/utils';
|
|
2
|
+
import { sanitize, validate, sanitizeRoutesMapForSerialization } from '@strapi/utils';
|
|
3
3
|
import instantiatePermissionsUtilities from './permissions/index.mjs';
|
|
4
4
|
|
|
5
5
|
const transformRoutePrefixFor = (pluginName)=>(route)=>{
|
|
@@ -47,7 +47,7 @@ const filterContentAPI = (route)=>route.info.type === 'content-api';
|
|
|
47
47
|
path: `${apiPrefix}${route.path}`
|
|
48
48
|
}));
|
|
49
49
|
});
|
|
50
|
-
return routesMap;
|
|
50
|
+
return sanitizeRoutesMapForSerialization(routesMap);
|
|
51
51
|
};
|
|
52
52
|
const sanitizer = sanitize.createAPISanitizers({
|
|
53
53
|
getModel (uid) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","sources":["../../../src/services/content-api/index.ts"],"sourcesContent":["import _ from 'lodash';\nimport { sanitize, validate } from '@strapi/utils';\n\nimport type { Core, UID } from '@strapi/types';\n\nimport instantiatePermissionsUtilities from './permissions';\n\nconst transformRoutePrefixFor = (pluginName: string) => (route: Core.Route) => {\n const prefix = route.config && route.config.prefix;\n const path = prefix !== undefined ? `${prefix}${route.path}` : `/${pluginName}${route.path}`;\n\n return {\n ...route,\n path,\n };\n};\n\nconst filterContentAPI = (route: Core.Route) => route.info.type === 'content-api';\n\n/**\n * Create a content API container that holds logic, tools and utils. (eg: permissions, ...)\n */\nconst createContentAPI = (strapi: Core.Strapi) => {\n const getRoutesMap = async () => {\n const routesMap: Record<string, Core.Route[]> = {};\n\n _.forEach(strapi.apis, (api, apiName) => {\n const routes = _.flatMap(api.routes, (route) => {\n if ('routes' in route) {\n return route.routes;\n }\n\n return route;\n }).filter(filterContentAPI);\n\n if (routes.length === 0) {\n return;\n }\n\n const apiPrefix = strapi.config.get('api.rest.prefix');\n routesMap[`api::${apiName}`] = routes.map((route) => ({\n ...route,\n path: `${apiPrefix}${route.path}`,\n }));\n });\n\n _.forEach(strapi.plugins, (plugin, pluginName) => {\n const transformPrefix = transformRoutePrefixFor(pluginName);\n\n if (Array.isArray(plugin.routes)) {\n return plugin.routes.map(transformPrefix).filter(filterContentAPI);\n }\n\n const routes = _.flatMap(plugin.routes, (route) => route.routes.map(transformPrefix)).filter(\n filterContentAPI\n );\n\n if (routes.length === 0) {\n return;\n }\n\n const apiPrefix = strapi.config.get('api.rest.prefix');\n routesMap[`plugin::${pluginName}`] = routes.map((route) => ({\n ...route,\n path: `${apiPrefix}${route.path}`,\n }));\n });\n\n return routesMap;\n };\n\n const sanitizer = sanitize.createAPISanitizers({\n getModel(uid: string) {\n return strapi.getModel(uid as UID.Schema);\n },\n // NOTE: use lazy access to allow registration of sanitizers after the creation of the container\n get sanitizers() {\n return {\n input: strapi.sanitizers.get('content-api.input'),\n output: strapi.sanitizers.get('content-api.output'),\n };\n },\n });\n\n const validator = validate.createAPIValidators({\n getModel(uid: string) {\n return strapi.getModel(uid as UID.Schema);\n },\n // NOTE: use lazy access to allow registration of validators after the creation of the container\n get validators() {\n return {\n input: strapi.validators.get('content-api.input'),\n };\n },\n });\n\n return {\n permissions: instantiatePermissionsUtilities(strapi),\n getRoutesMap,\n sanitize: sanitizer,\n validate: validator,\n };\n};\n\nexport default createContentAPI;\n"],"names":["transformRoutePrefixFor","pluginName","route","prefix","config","path","undefined","filterContentAPI","info","type","createContentAPI","strapi","getRoutesMap","routesMap","_","forEach","apis","api","apiName","routes","flatMap","filter","length","apiPrefix","get","map","plugins","plugin","transformPrefix","Array","isArray","sanitizer","sanitize","createAPISanitizers","getModel","uid","sanitizers","input","output","validator","validate","createAPIValidators","validators","permissions","instantiatePermissionsUtilities"],"mappings":"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
|
|
1
|
+
{"version":3,"file":"index.mjs","sources":["../../../src/services/content-api/index.ts"],"sourcesContent":["import _ from 'lodash';\nimport { sanitize, validate, sanitizeRoutesMapForSerialization } from '@strapi/utils';\n\nimport type { Core, UID } from '@strapi/types';\n\nimport instantiatePermissionsUtilities from './permissions';\n\nconst transformRoutePrefixFor = (pluginName: string) => (route: Core.Route) => {\n const prefix = route.config && route.config.prefix;\n const path = prefix !== undefined ? `${prefix}${route.path}` : `/${pluginName}${route.path}`;\n\n return {\n ...route,\n path,\n };\n};\n\nconst filterContentAPI = (route: Core.Route) => route.info.type === 'content-api';\n\n/**\n * Create a content API container that holds logic, tools and utils. (eg: permissions, ...)\n */\nconst createContentAPI = (strapi: Core.Strapi) => {\n const getRoutesMap = async () => {\n const routesMap: Record<string, Core.Route[]> = {};\n\n _.forEach(strapi.apis, (api, apiName) => {\n const routes = _.flatMap(api.routes, (route) => {\n if ('routes' in route) {\n return route.routes;\n }\n\n return route;\n }).filter(filterContentAPI);\n\n if (routes.length === 0) {\n return;\n }\n\n const apiPrefix = strapi.config.get('api.rest.prefix');\n routesMap[`api::${apiName}`] = routes.map((route) => ({\n ...route,\n path: `${apiPrefix}${route.path}`,\n }));\n });\n\n _.forEach(strapi.plugins, (plugin, pluginName) => {\n const transformPrefix = transformRoutePrefixFor(pluginName);\n\n if (Array.isArray(plugin.routes)) {\n return plugin.routes.map(transformPrefix).filter(filterContentAPI);\n }\n\n const routes = _.flatMap(plugin.routes, (route) => route.routes.map(transformPrefix)).filter(\n filterContentAPI\n );\n\n if (routes.length === 0) {\n return;\n }\n\n const apiPrefix = strapi.config.get('api.rest.prefix');\n routesMap[`plugin::${pluginName}`] = routes.map((route) => ({\n ...route,\n path: `${apiPrefix}${route.path}`,\n }));\n });\n\n return sanitizeRoutesMapForSerialization(routesMap);\n };\n\n const sanitizer = sanitize.createAPISanitizers({\n getModel(uid: string) {\n return strapi.getModel(uid as UID.Schema);\n },\n // NOTE: use lazy access to allow registration of sanitizers after the creation of the container\n get sanitizers() {\n return {\n input: strapi.sanitizers.get('content-api.input'),\n output: strapi.sanitizers.get('content-api.output'),\n };\n },\n });\n\n const validator = validate.createAPIValidators({\n getModel(uid: string) {\n return strapi.getModel(uid as UID.Schema);\n },\n // NOTE: use lazy access to allow registration of validators after the creation of the container\n get validators() {\n return {\n input: strapi.validators.get('content-api.input'),\n };\n },\n });\n\n return {\n permissions: instantiatePermissionsUtilities(strapi),\n getRoutesMap,\n sanitize: sanitizer,\n validate: validator,\n };\n};\n\nexport default createContentAPI;\n"],"names":["transformRoutePrefixFor","pluginName","route","prefix","config","path","undefined","filterContentAPI","info","type","createContentAPI","strapi","getRoutesMap","routesMap","_","forEach","apis","api","apiName","routes","flatMap","filter","length","apiPrefix","get","map","plugins","plugin","transformPrefix","Array","isArray","sanitizeRoutesMapForSerialization","sanitizer","sanitize","createAPISanitizers","getModel","uid","sanitizers","input","output","validator","validate","createAPIValidators","validators","permissions","instantiatePermissionsUtilities"],"mappings":"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"}
|
|
@@ -1,18 +1,13 @@
|
|
|
1
1
|
import type { Core, Struct } from '@strapi/types';
|
|
2
|
+
import type { FieldContentSourceMap } from '@strapi/admin/strapi-admin';
|
|
3
|
+
interface EncodingInfo {
|
|
4
|
+
data: any;
|
|
5
|
+
schema: Struct.Schema;
|
|
6
|
+
}
|
|
2
7
|
declare const createContentSourceMapsService: (strapi: Core.Strapi) => {
|
|
3
|
-
encodeField(text: string,
|
|
4
|
-
encodeEntry(
|
|
5
|
-
|
|
6
|
-
entryRootModel: string;
|
|
7
|
-
entryData: any;
|
|
8
|
-
model: any;
|
|
9
|
-
}): Promise<any>;
|
|
10
|
-
encodeSourceMaps(options: {
|
|
11
|
-
data: any;
|
|
12
|
-
contentType: Struct.ContentTypeSchema;
|
|
13
|
-
rootId?: any;
|
|
14
|
-
rootModel?: string;
|
|
15
|
-
}): Promise<any>;
|
|
8
|
+
encodeField(text: string, { kind, model, documentId, type, path, locale }: FieldContentSourceMap): string;
|
|
9
|
+
encodeEntry({ data, schema }: EncodingInfo): Promise<any>;
|
|
10
|
+
encodeSourceMaps({ data, schema }: EncodingInfo): Promise<any>;
|
|
16
11
|
};
|
|
17
12
|
export { createContentSourceMapsService };
|
|
18
13
|
//# sourceMappingURL=content-source-maps.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"content-source-maps.d.ts","sourceRoot":"","sources":["../../src/services/content-source-maps.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"content-source-maps.d.ts","sourceRoot":"","sources":["../../src/services/content-source-maps.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,EAAO,MAAM,eAAe,CAAC;AAEvD,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AAwCxE,UAAU,YAAY;IACpB,IAAI,EAAE,GAAG,CAAC;IACV,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC;CACvB;AAMD,QAAA,MAAM,8BAA8B,WAAY,KAAK,MAAM;sBAG/C,MAAM,mDACqC,qBAAqB;kCAyBpC,YAAY,GAAG,QAAQ,GAAG,CAAC;uCAiCtB,YAAY,GAAG,QAAQ,GAAG,CAAC;CAmBvE,CAAC;AAEF,OAAO,EAAE,8BAA8B,EAAE,CAAC"}
|
|
@@ -1,19 +1,25 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
3
|
var stega = require('@vercel/stega');
|
|
4
|
+
var strapiUtils = require('@strapi/utils');
|
|
4
5
|
|
|
5
6
|
const ENCODABLE_TYPES = [
|
|
6
7
|
'string',
|
|
7
8
|
'text',
|
|
8
9
|
'richtext',
|
|
9
|
-
'
|
|
10
|
-
'enumeration',
|
|
11
|
-
'email',
|
|
10
|
+
'biginteger',
|
|
12
11
|
'date',
|
|
13
|
-
'datetime',
|
|
14
12
|
'time',
|
|
15
|
-
'
|
|
13
|
+
'datetime',
|
|
14
|
+
'timestamp',
|
|
15
|
+
'boolean',
|
|
16
|
+
'enumeration',
|
|
17
|
+
'json',
|
|
18
|
+
'media',
|
|
19
|
+
'email',
|
|
20
|
+
'password'
|
|
16
21
|
];
|
|
22
|
+
// TODO: use a centralized store for these fields that would be shared with the CM and CTB
|
|
17
23
|
const EXCLUDED_FIELDS = [
|
|
18
24
|
'id',
|
|
19
25
|
'documentId',
|
|
@@ -25,126 +31,70 @@ const EXCLUDED_FIELDS = [
|
|
|
25
31
|
'updated_at',
|
|
26
32
|
'publishedAt'
|
|
27
33
|
];
|
|
34
|
+
const isObject = (value)=>{
|
|
35
|
+
return typeof value === 'object' && value !== null;
|
|
36
|
+
};
|
|
28
37
|
const createContentSourceMapsService = (strapi)=>{
|
|
29
38
|
return {
|
|
30
|
-
encodeField (text,
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
39
|
+
encodeField (text, { kind, model, documentId, type, path, locale }) {
|
|
40
|
+
/**
|
|
41
|
+
* Combine all metadata into into a one string so we only have to deal with one data-atribute
|
|
42
|
+
* on the frontend. Make it human readable because that data-attribute may be set manually by
|
|
43
|
+
* users for fields that don't support sourcemap encoding.
|
|
44
|
+
*/ const strapiSource = new URLSearchParams();
|
|
45
|
+
strapiSource.set('documentId', documentId);
|
|
46
|
+
strapiSource.set('type', type);
|
|
47
|
+
strapiSource.set('path', path);
|
|
48
|
+
if (model) {
|
|
49
|
+
strapiSource.set('model', model);
|
|
50
|
+
}
|
|
51
|
+
if (kind) {
|
|
52
|
+
strapiSource.set('kind', kind);
|
|
53
|
+
}
|
|
54
|
+
if (locale) {
|
|
55
|
+
strapiSource.set('locale', locale);
|
|
56
|
+
}
|
|
57
|
+
return stega.vercelStegaCombine(text, {
|
|
58
|
+
strapiSource: strapiSource.toString()
|
|
34
59
|
});
|
|
35
|
-
return res;
|
|
36
60
|
},
|
|
37
|
-
async encodeEntry (
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
return entryData;
|
|
61
|
+
async encodeEntry ({ data, schema }) {
|
|
62
|
+
if (!isObject(data) || data === undefined) {
|
|
63
|
+
return data;
|
|
41
64
|
}
|
|
42
|
-
|
|
43
|
-
...entryData
|
|
44
|
-
};
|
|
45
|
-
await Promise.all(Object.keys(entryData).map(async (key)=>{
|
|
46
|
-
const value = entryData[key];
|
|
47
|
-
if (value === null || value === undefined) {
|
|
48
|
-
return;
|
|
49
|
-
}
|
|
50
|
-
const attribute = model.attributes[key];
|
|
65
|
+
return strapiUtils.traverseEntity(({ key, value, attribute, schema, path }, { set })=>{
|
|
51
66
|
if (!attribute || EXCLUDED_FIELDS.includes(key)) {
|
|
52
67
|
return;
|
|
53
68
|
}
|
|
54
|
-
if (ENCODABLE_TYPES.includes(attribute.type)) {
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
entryRootModel,
|
|
64
|
-
entryData: item,
|
|
65
|
-
model: componentModel
|
|
66
|
-
})));
|
|
67
|
-
}
|
|
68
|
-
encodedData[key] = await this.encodeEntry({
|
|
69
|
-
entryRootId,
|
|
70
|
-
entryRootModel,
|
|
71
|
-
entryData: value,
|
|
72
|
-
model: componentModel
|
|
73
|
-
});
|
|
74
|
-
}
|
|
75
|
-
if (attribute.type === 'dynamiczone' && Array.isArray(value)) {
|
|
76
|
-
encodedData[key] = await Promise.all(value.map((item)=>this.encodeEntry({
|
|
77
|
-
entryRootId,
|
|
78
|
-
entryRootModel,
|
|
79
|
-
entryData: item,
|
|
80
|
-
model: strapi.getModel(item.__component)
|
|
81
|
-
})));
|
|
82
|
-
}
|
|
83
|
-
if (attribute.type === 'relation' && 'target' in attribute) {
|
|
84
|
-
const relatedModel = strapi.getModel(attribute.target);
|
|
85
|
-
if (Array.isArray(value)) {
|
|
86
|
-
encodedData[key] = await Promise.all(value.map((item)=>this.encodeEntry({
|
|
87
|
-
entryRootId: item.id,
|
|
88
|
-
entryRootModel: relatedModel.uid,
|
|
89
|
-
entryData: item,
|
|
90
|
-
model: strapi.getModel(attribute.target)
|
|
91
|
-
})));
|
|
92
|
-
}
|
|
93
|
-
encodedData[key] = await this.encodeEntry({
|
|
94
|
-
entryRootId: value.id,
|
|
95
|
-
entryRootModel: relatedModel.uid,
|
|
96
|
-
entryData: value,
|
|
97
|
-
model: strapi.getModel(attribute.target)
|
|
98
|
-
});
|
|
99
|
-
}
|
|
100
|
-
if (attribute.type === 'media') {
|
|
101
|
-
const fileModel = strapi.getModel('plugin::upload.file');
|
|
102
|
-
if (Array.isArray(value.data)) {
|
|
103
|
-
const encodedMediaData = await Promise.all(value.data.map((item)=>this.encodeEntry({
|
|
104
|
-
entryRootId,
|
|
105
|
-
entryRootModel,
|
|
106
|
-
entryData: item,
|
|
107
|
-
model: fileModel
|
|
108
|
-
})));
|
|
109
|
-
encodedData[key] = {
|
|
110
|
-
...value,
|
|
111
|
-
data: encodedMediaData
|
|
112
|
-
};
|
|
113
|
-
} else {
|
|
114
|
-
const encodedMediaItem = await this.encodeEntry({
|
|
115
|
-
entryRootId,
|
|
116
|
-
entryRootModel,
|
|
117
|
-
entryData: value.data,
|
|
118
|
-
model: fileModel
|
|
119
|
-
});
|
|
120
|
-
encodedData[key] = {
|
|
121
|
-
...value,
|
|
122
|
-
data: encodedMediaItem
|
|
123
|
-
};
|
|
124
|
-
}
|
|
69
|
+
if (ENCODABLE_TYPES.includes(attribute.type) && typeof value === 'string') {
|
|
70
|
+
set(key, this.encodeField(value, {
|
|
71
|
+
path: path.rawWithIndices,
|
|
72
|
+
type: attribute.type,
|
|
73
|
+
kind: schema.kind,
|
|
74
|
+
model: schema.uid,
|
|
75
|
+
locale: data.locale,
|
|
76
|
+
documentId: data.documentId
|
|
77
|
+
}));
|
|
125
78
|
}
|
|
126
|
-
}
|
|
127
|
-
|
|
79
|
+
}, {
|
|
80
|
+
schema,
|
|
81
|
+
getModel: (uid)=>strapi.getModel(uid)
|
|
82
|
+
}, data);
|
|
128
83
|
},
|
|
129
|
-
async encodeSourceMaps (
|
|
130
|
-
const { data, contentType, rootId, rootModel } = options;
|
|
84
|
+
async encodeSourceMaps ({ data, schema }) {
|
|
131
85
|
try {
|
|
132
86
|
if (Array.isArray(data)) {
|
|
133
87
|
return await Promise.all(data.map((item)=>this.encodeSourceMaps({
|
|
134
88
|
data: item,
|
|
135
|
-
|
|
89
|
+
schema
|
|
136
90
|
})));
|
|
137
91
|
}
|
|
138
|
-
if (
|
|
92
|
+
if (!isObject(data)) {
|
|
139
93
|
return data;
|
|
140
94
|
}
|
|
141
|
-
const actualRootId = rootId || data.id;
|
|
142
|
-
const actualRootModel = rootModel || contentType.uid;
|
|
143
95
|
return await this.encodeEntry({
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
entryData: data,
|
|
147
|
-
model: contentType
|
|
96
|
+
data,
|
|
97
|
+
schema
|
|
148
98
|
});
|
|
149
99
|
} catch (error) {
|
|
150
100
|
strapi.log.error('Error encoding source maps:', error);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"content-source-maps.js","sources":["../../src/services/content-source-maps.ts"],"sourcesContent":["import { vercelStegaCombine } from '@vercel/stega';\nimport type { Core, Struct } from '@strapi/types';\n\nconst ENCODABLE_TYPES = [\n 'string',\n 'text',\n 'richtext',\n 'uid',\n 'enumeration',\n 'email',\n 'date',\n 'datetime',\n 'time',\n 'timestamp',\n];\n\nconst EXCLUDED_FIELDS = [\n 'id',\n 'documentId',\n 'locale',\n 'localizations',\n 'created_by',\n 'updated_by',\n 'created_at',\n 'updated_at',\n 'publishedAt',\n];\n\nconst createContentSourceMapsService = (strapi: Core.Strapi) => {\n return {\n encodeField(text: string, key: string): string {\n const res = vercelStegaCombine(text, {\n // TODO: smarter metadata than just the key\n key,\n });\n return res;\n },\n\n async encodeEntry(options: {\n entryRootId: any;\n entryRootModel: string;\n entryData: any;\n model: any;\n }): Promise<any> {\n const { entryRootId, entryRootModel, entryData, model } = options;\n\n if (typeof entryData !== 'object' || entryData === null || entryData === undefined) {\n return entryData;\n }\n\n const encodedData = { ...entryData };\n\n await Promise.all(\n Object.keys(entryData).map(async (key) => {\n const value = entryData[key];\n\n if (value === null || value === undefined) {\n return;\n }\n\n const attribute = model.attributes[key];\n\n if (!attribute || EXCLUDED_FIELDS.includes(key)) {\n return;\n }\n\n if (ENCODABLE_TYPES.includes(attribute.type)) {\n encodedData[key] = this.encodeField(\n value,\n // TODO: smarter metadata than just the key\n key\n );\n }\n\n if (attribute.type === 'component') {\n const componentModel = strapi.getModel(attribute.component);\n\n if (Array.isArray(value)) {\n encodedData[key] = await Promise.all(\n value.map((item) =>\n this.encodeEntry({\n entryRootId,\n entryRootModel,\n entryData: item,\n model: componentModel,\n })\n )\n );\n }\n\n encodedData[key] = await this.encodeEntry({\n entryRootId,\n entryRootModel,\n entryData: value,\n model: componentModel,\n });\n }\n\n if (attribute.type === 'dynamiczone' && Array.isArray(value)) {\n encodedData[key] = await Promise.all(\n value.map((item) =>\n this.encodeEntry({\n entryRootId,\n entryRootModel,\n entryData: item,\n model: strapi.getModel(item.__component),\n })\n )\n );\n }\n\n if (attribute.type === 'relation' && 'target' in attribute) {\n const relatedModel = strapi.getModel(attribute.target);\n\n if (Array.isArray(value)) {\n encodedData[key] = await Promise.all(\n value.map((item: any) =>\n this.encodeEntry({\n entryRootId: item.id,\n entryRootModel: relatedModel.uid,\n entryData: item,\n model: strapi.getModel(attribute.target),\n })\n )\n );\n }\n\n encodedData[key] = await this.encodeEntry({\n entryRootId: value.id,\n entryRootModel: relatedModel.uid,\n entryData: value,\n model: strapi.getModel(attribute.target),\n });\n }\n\n if (attribute.type === 'media') {\n const fileModel = strapi.getModel('plugin::upload.file');\n\n if (Array.isArray(value.data)) {\n const encodedMediaData = await Promise.all(\n value.data.map((item: any) =>\n this.encodeEntry({\n entryRootId,\n entryRootModel,\n entryData: item,\n model: fileModel,\n })\n )\n );\n encodedData[key] = { ...value, data: encodedMediaData };\n } else {\n const encodedMediaItem = await this.encodeEntry({\n entryRootId,\n entryRootModel,\n entryData: value.data,\n model: fileModel,\n });\n encodedData[key] = { ...value, data: encodedMediaItem };\n }\n }\n })\n );\n\n return encodedData;\n },\n\n async encodeSourceMaps(options: {\n data: any;\n contentType: Struct.ContentTypeSchema;\n rootId?: any;\n rootModel?: string;\n }): Promise<any> {\n const { data, contentType, rootId, rootModel } = options;\n\n try {\n if (Array.isArray(data)) {\n return await Promise.all(\n data.map((item) => this.encodeSourceMaps({ data: item, contentType }))\n );\n }\n\n if (typeof data !== 'object' || data === null) {\n return data;\n }\n\n const actualRootId = rootId || data.id;\n const actualRootModel = rootModel || contentType.uid;\n\n return await this.encodeEntry({\n entryRootId: actualRootId,\n entryRootModel: actualRootModel,\n entryData: data,\n model: contentType,\n });\n } catch (error) {\n strapi.log.error('Error encoding source maps:', error);\n return data;\n }\n },\n };\n};\n\nexport { createContentSourceMapsService };\n"],"names":["ENCODABLE_TYPES","EXCLUDED_FIELDS","createContentSourceMapsService","strapi","encodeField","text","key","res","vercelStegaCombine","encodeEntry","options","entryRootId","entryRootModel","entryData","model","undefined","encodedData","Promise","all","Object","keys","map","value","attribute","attributes","includes","type","componentModel","getModel","component","Array","isArray","item","__component","relatedModel","target","id","uid","fileModel","data","encodedMediaData","encodedMediaItem","encodeSourceMaps","contentType","rootId","rootModel","actualRootId","actualRootModel","error","log"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"content-source-maps.js","sources":["../../src/services/content-source-maps.ts"],"sourcesContent":["import { vercelStegaCombine } from '@vercel/stega';\nimport type { Core, Struct, UID } from '@strapi/types';\nimport { traverseEntity } from '@strapi/utils';\nimport type { FieldContentSourceMap } from '@strapi/admin/strapi-admin';\n\nconst ENCODABLE_TYPES = [\n 'string',\n 'text',\n 'richtext',\n 'biginteger',\n 'date',\n 'time',\n 'datetime',\n 'timestamp',\n 'boolean',\n 'enumeration',\n 'json',\n 'media',\n 'email',\n 'password',\n /**\n * We cannot modify the response shape, so types that aren't based on string cannot be encoded:\n * - json: object\n * - blocks: object, will require a custom implementation in a dedicated PR\n * - integer, float and decimal: number\n * - boolean: boolean (believe it or not)\n * - uid: can be stringified but would mess up URLs\n */\n];\n\n// TODO: use a centralized store for these fields that would be shared with the CM and CTB\nconst EXCLUDED_FIELDS = [\n 'id',\n 'documentId',\n 'locale',\n 'localizations',\n 'created_by',\n 'updated_by',\n 'created_at',\n 'updated_at',\n 'publishedAt',\n];\n\ninterface EncodingInfo {\n data: any;\n schema: Struct.Schema;\n}\n\nconst isObject = (value: unknown): value is Record<string, any> => {\n return typeof value === 'object' && value !== null;\n};\n\nconst createContentSourceMapsService = (strapi: Core.Strapi) => {\n return {\n encodeField(\n text: string,\n { kind, model, documentId, type, path, locale }: FieldContentSourceMap\n ) {\n /**\n * Combine all metadata into into a one string so we only have to deal with one data-atribute\n * on the frontend. Make it human readable because that data-attribute may be set manually by\n * users for fields that don't support sourcemap encoding.\n */\n const strapiSource = new URLSearchParams();\n strapiSource.set('documentId', documentId);\n strapiSource.set('type', type);\n strapiSource.set('path', path);\n\n if (model) {\n strapiSource.set('model', model);\n }\n if (kind) {\n strapiSource.set('kind', kind);\n }\n if (locale) {\n strapiSource.set('locale', locale);\n }\n\n return vercelStegaCombine(text, { strapiSource: strapiSource.toString() });\n },\n\n async encodeEntry({ data, schema }: EncodingInfo): Promise<any> {\n if (!isObject(data) || data === undefined) {\n return data;\n }\n\n return traverseEntity(\n ({ key, value, attribute, schema, path }, { set }) => {\n if (!attribute || EXCLUDED_FIELDS.includes(key)) {\n return;\n }\n\n if (ENCODABLE_TYPES.includes(attribute.type) && typeof value === 'string') {\n set(\n key,\n this.encodeField(value, {\n path: path.rawWithIndices!,\n type: attribute.type,\n kind: schema.kind,\n model: schema.uid as UID.Schema,\n locale: data.locale,\n documentId: data.documentId,\n }) as any\n );\n }\n },\n {\n schema,\n getModel: (uid) => strapi.getModel(uid as UID.Schema),\n },\n data\n );\n },\n\n async encodeSourceMaps({ data, schema }: EncodingInfo): Promise<any> {\n try {\n if (Array.isArray(data)) {\n return await Promise.all(\n data.map((item) => this.encodeSourceMaps({ data: item, schema }))\n );\n }\n\n if (!isObject(data)) {\n return data;\n }\n\n return await this.encodeEntry({ data, schema });\n } catch (error) {\n strapi.log.error('Error encoding source maps:', error);\n return data;\n }\n },\n };\n};\n\nexport { createContentSourceMapsService };\n"],"names":["ENCODABLE_TYPES","EXCLUDED_FIELDS","isObject","value","createContentSourceMapsService","strapi","encodeField","text","kind","model","documentId","type","path","locale","strapiSource","URLSearchParams","set","vercelStegaCombine","toString","encodeEntry","data","schema","undefined","traverseEntity","key","attribute","includes","rawWithIndices","uid","getModel","encodeSourceMaps","Array","isArray","Promise","all","map","item","error","log"],"mappings":"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"}
|