@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.

Files changed (59) hide show
  1. package/dist/core-api/controller/index.js +1 -1
  2. package/dist/core-api/controller/index.js.map +1 -1
  3. package/dist/core-api/controller/index.mjs +1 -1
  4. package/dist/core-api/controller/index.mjs.map +1 -1
  5. package/dist/core-api/controller/transform.js +1 -1
  6. package/dist/core-api/controller/transform.js.map +1 -1
  7. package/dist/core-api/controller/transform.mjs +1 -1
  8. package/dist/core-api/controller/transform.mjs.map +1 -1
  9. package/dist/core-api/routes/validation/mappers.d.ts.map +1 -1
  10. package/dist/core-api/routes/validation/mappers.js +35 -0
  11. package/dist/core-api/routes/validation/mappers.js.map +1 -1
  12. package/dist/core-api/routes/validation/mappers.mjs +35 -0
  13. package/dist/core-api/routes/validation/mappers.mjs.map +1 -1
  14. package/dist/loaders/plugins/index.js +1 -1
  15. package/dist/loaders/plugins/index.js.map +1 -1
  16. package/dist/loaders/plugins/index.mjs +1 -1
  17. package/dist/loaders/plugins/index.mjs.map +1 -1
  18. package/dist/package.json.js +11 -11
  19. package/dist/package.json.mjs +11 -11
  20. package/dist/services/content-api/index.d.ts +1 -1
  21. package/dist/services/content-api/index.d.ts.map +1 -1
  22. package/dist/services/content-api/index.js +1 -1
  23. package/dist/services/content-api/index.js.map +1 -1
  24. package/dist/services/content-api/index.mjs +2 -2
  25. package/dist/services/content-api/index.mjs.map +1 -1
  26. package/dist/services/content-source-maps.d.ts +8 -13
  27. package/dist/services/content-source-maps.d.ts.map +1 -1
  28. package/dist/services/content-source-maps.js +56 -106
  29. package/dist/services/content-source-maps.js.map +1 -1
  30. package/dist/services/content-source-maps.mjs +56 -106
  31. package/dist/services/content-source-maps.mjs.map +1 -1
  32. package/dist/services/document-service/components.d.ts +6 -1
  33. package/dist/services/document-service/components.d.ts.map +1 -1
  34. package/dist/services/document-service/components.js +97 -0
  35. package/dist/services/document-service/components.js.map +1 -1
  36. package/dist/services/document-service/components.mjs +97 -1
  37. package/dist/services/document-service/components.mjs.map +1 -1
  38. package/dist/services/document-service/repository.d.ts.map +1 -1
  39. package/dist/services/document-service/repository.js +4 -0
  40. package/dist/services/document-service/repository.js.map +1 -1
  41. package/dist/services/document-service/repository.mjs +5 -1
  42. package/dist/services/document-service/repository.mjs.map +1 -1
  43. package/dist/services/document-service/utils/unidirectional-relations.d.ts +19 -2
  44. package/dist/services/document-service/utils/unidirectional-relations.d.ts.map +1 -1
  45. package/dist/services/document-service/utils/unidirectional-relations.js +21 -6
  46. package/dist/services/document-service/utils/unidirectional-relations.js.map +1 -1
  47. package/dist/services/document-service/utils/unidirectional-relations.mjs +21 -6
  48. package/dist/services/document-service/utils/unidirectional-relations.mjs.map +1 -1
  49. package/dist/services/metrics/index.js +2 -1
  50. package/dist/services/metrics/index.js.map +1 -1
  51. package/dist/services/metrics/index.mjs +2 -1
  52. package/dist/services/metrics/index.mjs.map +1 -1
  53. package/dist/services/metrics/middleware.d.ts +2 -1
  54. package/dist/services/metrics/middleware.d.ts.map +1 -1
  55. package/dist/services/metrics/middleware.js +2 -2
  56. package/dist/services/metrics/middleware.js.map +1 -1
  57. package/dist/services/metrics/middleware.mjs +2 -2
  58. package/dist/services/metrics/middleware.mjs.map +1 -1
  59. package/package.json +11 -11
@@ -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.838b114ef86c9081f990c3b46f5843a41088ec64";
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.838b114ef86c9081f990c3b46f5843a41088ec64",
63
- "@strapi/database": "0.0.0-experimental.838b114ef86c9081f990c3b46f5843a41088ec64",
64
- "@strapi/generators": "0.0.0-experimental.838b114ef86c9081f990c3b46f5843a41088ec64",
65
- "@strapi/logger": "0.0.0-experimental.838b114ef86c9081f990c3b46f5843a41088ec64",
66
- "@strapi/permissions": "0.0.0-experimental.838b114ef86c9081f990c3b46f5843a41088ec64",
67
- "@strapi/types": "0.0.0-experimental.838b114ef86c9081f990c3b46f5843a41088ec64",
68
- "@strapi/typescript-utils": "0.0.0-experimental.838b114ef86c9081f990c3b46f5843a41088ec64",
69
- "@strapi/utils": "0.0.0-experimental.838b114ef86c9081f990c3b46f5843a41088ec64",
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.838b114ef86c9081f990c3b46f5843a41088ec64",
136
+ "eslint-config-custom": "0.0.0-experimental.83f23a40206562f4b4916d31f95bf453e8511603",
137
137
  supertest: "6.3.3",
138
- tsconfig: "0.0.0-experimental.838b114ef86c9081f990c3b46f5843a41088ec64"
138
+ tsconfig: "0.0.0-experimental.83f23a40206562f4b4916d31f95bf453e8511603"
139
139
  };
140
140
  var engines = {
141
141
  node: ">=18.0.0 <=22.x.x",
@@ -1,5 +1,5 @@
1
1
  var name = "@strapi/core";
2
- var version = "0.0.0-experimental.838b114ef86c9081f990c3b46f5843a41088ec64";
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.838b114ef86c9081f990c3b46f5843a41088ec64",
59
- "@strapi/database": "0.0.0-experimental.838b114ef86c9081f990c3b46f5843a41088ec64",
60
- "@strapi/generators": "0.0.0-experimental.838b114ef86c9081f990c3b46f5843a41088ec64",
61
- "@strapi/logger": "0.0.0-experimental.838b114ef86c9081f990c3b46f5843a41088ec64",
62
- "@strapi/permissions": "0.0.0-experimental.838b114ef86c9081f990c3b46f5843a41088ec64",
63
- "@strapi/types": "0.0.0-experimental.838b114ef86c9081f990c3b46f5843a41088ec64",
64
- "@strapi/typescript-utils": "0.0.0-experimental.838b114ef86c9081f990c3b46f5843a41088ec64",
65
- "@strapi/utils": "0.0.0-experimental.838b114ef86c9081f990c3b46f5843a41088ec64",
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.838b114ef86c9081f990c3b46f5843a41088ec64",
132
+ "eslint-config-custom": "0.0.0-experimental.83f23a40206562f4b4916d31f95bf453e8511603",
133
133
  supertest: "6.3.3",
134
- tsconfig: "0.0.0-experimental.838b114ef86c9081f990c3b46f5843a41088ec64"
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, Core.Route[]>>;
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,EAAE,MAAM,eAAe,CAAC;AAEnD,OAAO,KAAK,EAAE,IAAI,EAAO,MAAM,eAAe,CAAC;AAgB/C;;GAEG;AACH,QAAA,MAAM,gBAAgB,WAAY,KAAK,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAgF5C,CAAC;AAEF,eAAe,gBAAgB,CAAC"}
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, key: string): string;
4
- encodeEntry(options: {
5
- entryRootId: any;
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,EAAE,MAAM,eAAe,CAAC;AA2BlD,QAAA,MAAM,8BAA8B,WAAY,KAAK,MAAM;sBAErC,MAAM,OAAO,MAAM,GAAG,MAAM;yBAQnB;QACzB,WAAW,EAAE,GAAG,CAAC;QACjB,cAAc,EAAE,MAAM,CAAC;QACvB,SAAS,EAAE,GAAG,CAAC;QACf,KAAK,EAAE,GAAG,CAAC;KACZ,GAAG,QAAQ,GAAG,CAAC;8BA2HgB;QAC9B,IAAI,EAAE,GAAG,CAAC;QACV,WAAW,EAAE,OAAO,iBAAiB,CAAC;QACtC,MAAM,CAAC,EAAE,GAAG,CAAC;QACb,SAAS,CAAC,EAAE,MAAM,CAAC;KACpB,GAAG,QAAQ,GAAG,CAAC;CA6BnB,CAAC;AAEF,OAAO,EAAE,8BAA8B,EAAE,CAAC"}
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
- 'uid',
10
- 'enumeration',
11
- 'email',
10
+ 'biginteger',
12
11
  'date',
13
- 'datetime',
14
12
  'time',
15
- 'timestamp'
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, key) {
31
- const res = stega.vercelStegaCombine(text, {
32
- // TODO: smarter metadata than just the key
33
- key
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 (options) {
38
- const { entryRootId, entryRootModel, entryData, model } = options;
39
- if (typeof entryData !== 'object' || entryData === null || entryData === undefined) {
40
- return entryData;
61
+ async encodeEntry ({ data, schema }) {
62
+ if (!isObject(data) || data === undefined) {
63
+ return data;
41
64
  }
42
- const encodedData = {
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
- encodedData[key] = this.encodeField(value, // TODO: smarter metadata than just the key
56
- key);
57
- }
58
- if (attribute.type === 'component') {
59
- const componentModel = strapi.getModel(attribute.component);
60
- if (Array.isArray(value)) {
61
- encodedData[key] = await Promise.all(value.map((item)=>this.encodeEntry({
62
- entryRootId,
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
- return encodedData;
79
+ }, {
80
+ schema,
81
+ getModel: (uid)=>strapi.getModel(uid)
82
+ }, data);
128
83
  },
129
- async encodeSourceMaps (options) {
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
- contentType
89
+ schema
136
90
  })));
137
91
  }
138
- if (typeof data !== 'object' || data === null) {
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
- entryRootId: actualRootId,
145
- entryRootModel: actualRootModel,
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":";;;;AAGA,MAAMA,eAAkB,GAAA;AACtB,IAAA,QAAA;AACA,IAAA,MAAA;AACA,IAAA,UAAA;AACA,IAAA,KAAA;AACA,IAAA,aAAA;AACA,IAAA,OAAA;AACA,IAAA,MAAA;AACA,IAAA,UAAA;AACA,IAAA,MAAA;AACA,IAAA;AACD,CAAA;AAED,MAAMC,eAAkB,GAAA;AACtB,IAAA,IAAA;AACA,IAAA,YAAA;AACA,IAAA,QAAA;AACA,IAAA,eAAA;AACA,IAAA,YAAA;AACA,IAAA,YAAA;AACA,IAAA,YAAA;AACA,IAAA,YAAA;AACA,IAAA;AACD,CAAA;AAED,MAAMC,iCAAiC,CAACC,MAAAA,GAAAA;IACtC,OAAO;QACLC,WAAYC,CAAAA,CAAAA,IAAY,EAAEC,GAAW,EAAA;YACnC,MAAMC,GAAAA,GAAMC,yBAAmBH,IAAM,EAAA;;AAEnCC,gBAAAA;AACF,aAAA,CAAA;YACA,OAAOC,GAAAA;AACT,SAAA;AAEA,QAAA,MAAME,aAAYC,OAKjB,EAAA;YACC,MAAM,EAAEC,WAAW,EAAEC,cAAc,EAAEC,SAAS,EAAEC,KAAK,EAAE,GAAGJ,OAAAA;AAE1D,YAAA,IAAI,OAAOG,SAAc,KAAA,QAAA,IAAYA,SAAc,KAAA,IAAA,IAAQA,cAAcE,SAAW,EAAA;gBAClF,OAAOF,SAAAA;AACT;AAEA,YAAA,MAAMG,WAAc,GAAA;AAAE,gBAAA,GAAGH;AAAU,aAAA;YAEnC,MAAMI,OAAAA,CAAQC,GAAG,CACfC,MAAAA,CAAOC,IAAI,CAACP,SAAAA,CAAAA,CAAWQ,GAAG,CAAC,OAAOf,GAAAA,GAAAA;gBAChC,MAAMgB,KAAAA,GAAQT,SAAS,CAACP,GAAI,CAAA;gBAE5B,IAAIgB,KAAAA,KAAU,IAAQA,IAAAA,KAAAA,KAAUP,SAAW,EAAA;AACzC,oBAAA;AACF;AAEA,gBAAA,MAAMQ,SAAYT,GAAAA,KAAAA,CAAMU,UAAU,CAAClB,GAAI,CAAA;AAEvC,gBAAA,IAAI,CAACiB,SAAAA,IAAatB,eAAgBwB,CAAAA,QAAQ,CAACnB,GAAM,CAAA,EAAA;AAC/C,oBAAA;AACF;AAEA,gBAAA,IAAIN,eAAgByB,CAAAA,QAAQ,CAACF,SAAAA,CAAUG,IAAI,CAAG,EAAA;oBAC5CV,WAAW,CAACV,IAAI,GAAG,IAAI,CAACF,WAAW,CACjCkB;AAEAhB,oBAAAA,GAAAA,CAAAA;AAEJ;gBAEA,IAAIiB,SAAAA,CAAUG,IAAI,KAAK,WAAa,EAAA;AAClC,oBAAA,MAAMC,cAAiBxB,GAAAA,MAAAA,CAAOyB,QAAQ,CAACL,UAAUM,SAAS,CAAA;oBAE1D,IAAIC,KAAAA,CAAMC,OAAO,CAACT,KAAQ,CAAA,EAAA;AACxBN,wBAAAA,WAAW,CAACV,GAAAA,CAAI,GAAG,MAAMW,QAAQC,GAAG,CAClCI,KAAMD,CAAAA,GAAG,CAAC,CAACW,IAAAA,GACT,IAAI,CAACvB,WAAW,CAAC;AACfE,gCAAAA,WAAAA;AACAC,gCAAAA,cAAAA;gCACAC,SAAWmB,EAAAA,IAAAA;gCACXlB,KAAOa,EAAAA;AACT,6BAAA,CAAA,CAAA,CAAA;AAGN;AAEAX,oBAAAA,WAAW,CAACV,GAAI,CAAA,GAAG,MAAM,IAAI,CAACG,WAAW,CAAC;AACxCE,wBAAAA,WAAAA;AACAC,wBAAAA,cAAAA;wBACAC,SAAWS,EAAAA,KAAAA;wBACXR,KAAOa,EAAAA;AACT,qBAAA,CAAA;AACF;AAEA,gBAAA,IAAIJ,UAAUG,IAAI,KAAK,iBAAiBI,KAAMC,CAAAA,OAAO,CAACT,KAAQ,CAAA,EAAA;AAC5DN,oBAAAA,WAAW,CAACV,GAAAA,CAAI,GAAG,MAAMW,QAAQC,GAAG,CAClCI,KAAMD,CAAAA,GAAG,CAAC,CAACW,IAAAA,GACT,IAAI,CAACvB,WAAW,CAAC;AACfE,4BAAAA,WAAAA;AACAC,4BAAAA,cAAAA;4BACAC,SAAWmB,EAAAA,IAAAA;AACXlB,4BAAAA,KAAAA,EAAOX,MAAOyB,CAAAA,QAAQ,CAACI,IAAAA,CAAKC,WAAW;AACzC,yBAAA,CAAA,CAAA,CAAA;AAGN;AAEA,gBAAA,IAAIV,SAAUG,CAAAA,IAAI,KAAK,UAAA,IAAc,YAAYH,SAAW,EAAA;AAC1D,oBAAA,MAAMW,YAAe/B,GAAAA,MAAAA,CAAOyB,QAAQ,CAACL,UAAUY,MAAM,CAAA;oBAErD,IAAIL,KAAAA,CAAMC,OAAO,CAACT,KAAQ,CAAA,EAAA;AACxBN,wBAAAA,WAAW,CAACV,GAAAA,CAAI,GAAG,MAAMW,QAAQC,GAAG,CAClCI,KAAMD,CAAAA,GAAG,CAAC,CAACW,IAAAA,GACT,IAAI,CAACvB,WAAW,CAAC;AACfE,gCAAAA,WAAAA,EAAaqB,KAAKI,EAAE;AACpBxB,gCAAAA,cAAAA,EAAgBsB,aAAaG,GAAG;gCAChCxB,SAAWmB,EAAAA,IAAAA;AACXlB,gCAAAA,KAAAA,EAAOX,MAAOyB,CAAAA,QAAQ,CAACL,SAAAA,CAAUY,MAAM;AACzC,6BAAA,CAAA,CAAA,CAAA;AAGN;AAEAnB,oBAAAA,WAAW,CAACV,GAAI,CAAA,GAAG,MAAM,IAAI,CAACG,WAAW,CAAC;AACxCE,wBAAAA,WAAAA,EAAaW,MAAMc,EAAE;AACrBxB,wBAAAA,cAAAA,EAAgBsB,aAAaG,GAAG;wBAChCxB,SAAWS,EAAAA,KAAAA;AACXR,wBAAAA,KAAAA,EAAOX,MAAOyB,CAAAA,QAAQ,CAACL,SAAAA,CAAUY,MAAM;AACzC,qBAAA,CAAA;AACF;gBAEA,IAAIZ,SAAAA,CAAUG,IAAI,KAAK,OAAS,EAAA;oBAC9B,MAAMY,SAAAA,GAAYnC,MAAOyB,CAAAA,QAAQ,CAAC,qBAAA,CAAA;AAElC,oBAAA,IAAIE,KAAMC,CAAAA,OAAO,CAACT,KAAAA,CAAMiB,IAAI,CAAG,EAAA;AAC7B,wBAAA,MAAMC,gBAAmB,GAAA,MAAMvB,OAAQC,CAAAA,GAAG,CACxCI,KAAMiB,CAAAA,IAAI,CAAClB,GAAG,CAAC,CAACW,IAAAA,GACd,IAAI,CAACvB,WAAW,CAAC;AACfE,gCAAAA,WAAAA;AACAC,gCAAAA,cAAAA;gCACAC,SAAWmB,EAAAA,IAAAA;gCACXlB,KAAOwB,EAAAA;AACT,6BAAA,CAAA,CAAA,CAAA;wBAGJtB,WAAW,CAACV,IAAI,GAAG;AAAE,4BAAA,GAAGgB,KAAK;4BAAEiB,IAAMC,EAAAA;AAAiB,yBAAA;qBACjD,MAAA;AACL,wBAAA,MAAMC,gBAAmB,GAAA,MAAM,IAAI,CAAChC,WAAW,CAAC;AAC9CE,4BAAAA,WAAAA;AACAC,4BAAAA,cAAAA;AACAC,4BAAAA,SAAAA,EAAWS,MAAMiB,IAAI;4BACrBzB,KAAOwB,EAAAA;AACT,yBAAA,CAAA;wBACAtB,WAAW,CAACV,IAAI,GAAG;AAAE,4BAAA,GAAGgB,KAAK;4BAAEiB,IAAME,EAAAA;AAAiB,yBAAA;AACxD;AACF;AACF,aAAA,CAAA,CAAA;YAGF,OAAOzB,WAAAA;AACT,SAAA;AAEA,QAAA,MAAM0B,kBAAiBhC,OAKtB,EAAA;YACC,MAAM,EAAE6B,IAAI,EAAEI,WAAW,EAAEC,MAAM,EAAEC,SAAS,EAAE,GAAGnC,OAAAA;YAEjD,IAAI;gBACF,IAAIoB,KAAAA,CAAMC,OAAO,CAACQ,IAAO,CAAA,EAAA;AACvB,oBAAA,OAAO,MAAMtB,OAAAA,CAAQC,GAAG,CACtBqB,IAAKlB,CAAAA,GAAG,CAAC,CAACW,IAAS,GAAA,IAAI,CAACU,gBAAgB,CAAC;4BAAEH,IAAMP,EAAAA,IAAAA;AAAMW,4BAAAA;AAAY,yBAAA,CAAA,CAAA,CAAA;AAEvE;AAEA,gBAAA,IAAI,OAAOJ,IAAAA,KAAS,QAAYA,IAAAA,IAAAA,KAAS,IAAM,EAAA;oBAC7C,OAAOA,IAAAA;AACT;gBAEA,MAAMO,YAAAA,GAAeF,MAAUL,IAAAA,IAAAA,CAAKH,EAAE;gBACtC,MAAMW,eAAAA,GAAkBF,SAAaF,IAAAA,WAAAA,CAAYN,GAAG;AAEpD,gBAAA,OAAO,MAAM,IAAI,CAAC5B,WAAW,CAAC;oBAC5BE,WAAamC,EAAAA,YAAAA;oBACblC,cAAgBmC,EAAAA,eAAAA;oBAChBlC,SAAW0B,EAAAA,IAAAA;oBACXzB,KAAO6B,EAAAA;AACT,iBAAA,CAAA;AACF,aAAA,CAAE,OAAOK,KAAO,EAAA;AACd7C,gBAAAA,MAAAA,CAAO8C,GAAG,CAACD,KAAK,CAAC,6BAA+BA,EAAAA,KAAAA,CAAAA;gBAChD,OAAOT,IAAAA;AACT;AACF;AACF,KAAA;AACF;;;;"}
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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"}