@strapi/core 0.0.0-experimental.c72b48da735f44a3ccafb7a6dc9ba5213f3844db → 0.0.0-experimental.ca5f02ef2ec166e219546983049c0543bed92f8d

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 (189) hide show
  1. package/dist/Strapi.d.ts.map +1 -1
  2. package/dist/Strapi.js +4 -1
  3. package/dist/Strapi.js.map +1 -1
  4. package/dist/Strapi.mjs +4 -1
  5. package/dist/Strapi.mjs.map +1 -1
  6. package/dist/configuration/index.d.ts +3 -0
  7. package/dist/configuration/index.d.ts.map +1 -1
  8. package/dist/configuration/index.js +3 -0
  9. package/dist/configuration/index.js.map +1 -1
  10. package/dist/configuration/index.mjs +3 -0
  11. package/dist/configuration/index.mjs.map +1 -1
  12. package/dist/core-api/controller/collection-type.d.ts.map +1 -1
  13. package/dist/core-api/controller/collection-type.js +1 -1
  14. package/dist/core-api/controller/collection-type.js.map +1 -1
  15. package/dist/core-api/controller/collection-type.mjs +1 -1
  16. package/dist/core-api/controller/collection-type.mjs.map +1 -1
  17. package/dist/core-api/controller/index.d.ts.map +1 -1
  18. package/dist/core-api/controller/index.js +2 -1
  19. package/dist/core-api/controller/index.js.map +1 -1
  20. package/dist/core-api/controller/index.mjs +2 -1
  21. package/dist/core-api/controller/index.mjs.map +1 -1
  22. package/dist/core-api/controller/single-type.js +1 -1
  23. package/dist/core-api/controller/single-type.js.map +1 -1
  24. package/dist/core-api/controller/single-type.mjs +1 -1
  25. package/dist/core-api/controller/single-type.mjs.map +1 -1
  26. package/dist/core-api/controller/transform.d.ts +3 -2
  27. package/dist/core-api/controller/transform.d.ts.map +1 -1
  28. package/dist/core-api/controller/transform.js +9 -3
  29. package/dist/core-api/controller/transform.js.map +1 -1
  30. package/dist/core-api/controller/transform.mjs +9 -3
  31. package/dist/core-api/controller/transform.mjs.map +1 -1
  32. package/dist/core-api/routes/index.d.ts +4 -22
  33. package/dist/core-api/routes/index.d.ts.map +1 -1
  34. package/dist/core-api/routes/index.js +150 -8
  35. package/dist/core-api/routes/index.js.map +1 -1
  36. package/dist/core-api/routes/index.mjs +131 -8
  37. package/dist/core-api/routes/index.mjs.map +1 -1
  38. package/dist/core-api/routes/validation/attributes.d.ts +244 -0
  39. package/dist/core-api/routes/validation/attributes.d.ts.map +1 -0
  40. package/dist/core-api/routes/validation/attributes.js +560 -0
  41. package/dist/core-api/routes/validation/attributes.js.map +1 -0
  42. package/dist/core-api/routes/validation/attributes.mjs +521 -0
  43. package/dist/core-api/routes/validation/attributes.mjs.map +1 -0
  44. package/dist/core-api/routes/validation/common.d.ts +105 -0
  45. package/dist/core-api/routes/validation/common.d.ts.map +1 -0
  46. package/dist/core-api/routes/validation/common.js +116 -0
  47. package/dist/core-api/routes/validation/common.js.map +1 -0
  48. package/dist/core-api/routes/validation/common.mjs +95 -0
  49. package/dist/core-api/routes/validation/common.mjs.map +1 -0
  50. package/dist/core-api/routes/validation/component.d.ts +34 -0
  51. package/dist/core-api/routes/validation/component.d.ts.map +1 -0
  52. package/dist/core-api/routes/validation/component.js +45 -0
  53. package/dist/core-api/routes/validation/component.js.map +1 -0
  54. package/dist/core-api/routes/validation/component.mjs +43 -0
  55. package/dist/core-api/routes/validation/component.mjs.map +1 -0
  56. package/dist/core-api/routes/validation/constants.d.ts +8 -0
  57. package/dist/core-api/routes/validation/constants.d.ts.map +1 -0
  58. package/dist/core-api/routes/validation/constants.js +18 -0
  59. package/dist/core-api/routes/validation/constants.js.map +1 -0
  60. package/dist/core-api/routes/validation/constants.mjs +16 -0
  61. package/dist/core-api/routes/validation/constants.mjs.map +1 -0
  62. package/dist/core-api/routes/validation/content-type.d.ts +128 -0
  63. package/dist/core-api/routes/validation/content-type.d.ts.map +1 -0
  64. package/dist/core-api/routes/validation/content-type.js +201 -0
  65. package/dist/core-api/routes/validation/content-type.js.map +1 -0
  66. package/dist/core-api/routes/validation/content-type.mjs +180 -0
  67. package/dist/core-api/routes/validation/content-type.mjs.map +1 -0
  68. package/dist/core-api/routes/validation/index.d.ts +5 -0
  69. package/dist/core-api/routes/validation/index.d.ts.map +1 -0
  70. package/dist/core-api/routes/validation/mappers.d.ts +105 -0
  71. package/dist/core-api/routes/validation/mappers.d.ts.map +1 -0
  72. package/dist/core-api/routes/validation/mappers.js +238 -0
  73. package/dist/core-api/routes/validation/mappers.js.map +1 -0
  74. package/dist/core-api/routes/validation/mappers.mjs +214 -0
  75. package/dist/core-api/routes/validation/mappers.mjs.map +1 -0
  76. package/dist/core-api/routes/validation/utils.d.ts +47 -0
  77. package/dist/core-api/routes/validation/utils.d.ts.map +1 -0
  78. package/dist/core-api/routes/validation/utils.js +112 -0
  79. package/dist/core-api/routes/validation/utils.js.map +1 -0
  80. package/dist/core-api/routes/validation/utils.mjs +90 -0
  81. package/dist/core-api/routes/validation/utils.mjs.map +1 -0
  82. package/dist/domain/module/index.d.ts.map +1 -1
  83. package/dist/domain/module/index.js +3 -0
  84. package/dist/domain/module/index.js.map +1 -1
  85. package/dist/domain/module/index.mjs +3 -0
  86. package/dist/domain/module/index.mjs.map +1 -1
  87. package/dist/ee/index.d.ts +6 -0
  88. package/dist/ee/index.d.ts.map +1 -1
  89. package/dist/ee/index.js +29 -3
  90. package/dist/ee/index.js.map +1 -1
  91. package/dist/ee/index.mjs +30 -4
  92. package/dist/ee/index.mjs.map +1 -1
  93. package/dist/ee/license.d.ts +3 -1
  94. package/dist/ee/license.d.ts.map +1 -1
  95. package/dist/ee/license.js +6 -1
  96. package/dist/ee/license.js.map +1 -1
  97. package/dist/ee/license.mjs +6 -2
  98. package/dist/ee/license.mjs.map +1 -1
  99. package/dist/factories.d.ts +3 -1
  100. package/dist/factories.d.ts.map +1 -1
  101. package/dist/factories.js +10 -2
  102. package/dist/factories.js.map +1 -1
  103. package/dist/factories.mjs +10 -3
  104. package/dist/factories.mjs.map +1 -1
  105. package/dist/index.js +1 -1
  106. package/dist/index.mjs +1 -1
  107. package/dist/middlewares/cors.d.ts +9 -1
  108. package/dist/middlewares/cors.d.ts.map +1 -1
  109. package/dist/middlewares/cors.js +39 -17
  110. package/dist/middlewares/cors.js.map +1 -1
  111. package/dist/middlewares/cors.mjs +39 -18
  112. package/dist/middlewares/cors.mjs.map +1 -1
  113. package/dist/package.json.js +17 -13
  114. package/dist/package.json.js.map +1 -1
  115. package/dist/package.json.mjs +17 -13
  116. package/dist/package.json.mjs.map +1 -1
  117. package/dist/services/content-source-maps.d.ts +8 -0
  118. package/dist/services/content-source-maps.d.ts.map +1 -0
  119. package/dist/services/content-source-maps.js +119 -0
  120. package/dist/services/content-source-maps.js.map +1 -0
  121. package/dist/services/content-source-maps.mjs +117 -0
  122. package/dist/services/content-source-maps.mjs.map +1 -0
  123. package/dist/services/core-store.d.ts +2 -2
  124. package/dist/services/core-store.d.ts.map +1 -1
  125. package/dist/services/core-store.js.map +1 -1
  126. package/dist/services/core-store.mjs.map +1 -1
  127. package/dist/services/document-service/entries.d.ts.map +1 -1
  128. package/dist/services/document-service/entries.js +42 -0
  129. package/dist/services/document-service/entries.js.map +1 -1
  130. package/dist/services/document-service/entries.mjs +43 -1
  131. package/dist/services/document-service/entries.mjs.map +1 -1
  132. package/dist/services/document-service/internationalization.d.ts +6 -1
  133. package/dist/services/document-service/internationalization.d.ts.map +1 -1
  134. package/dist/services/document-service/internationalization.js +32 -0
  135. package/dist/services/document-service/internationalization.js.map +1 -1
  136. package/dist/services/document-service/internationalization.mjs +32 -1
  137. package/dist/services/document-service/internationalization.mjs.map +1 -1
  138. package/dist/services/document-service/repository.d.ts.map +1 -1
  139. package/dist/services/document-service/repository.js +5 -4
  140. package/dist/services/document-service/repository.js.map +1 -1
  141. package/dist/services/document-service/repository.mjs +6 -5
  142. package/dist/services/document-service/repository.mjs.map +1 -1
  143. package/dist/services/entity-validator/index.d.ts.map +1 -1
  144. package/dist/services/entity-validator/index.js +9 -0
  145. package/dist/services/entity-validator/index.js.map +1 -1
  146. package/dist/services/entity-validator/index.mjs +9 -0
  147. package/dist/services/entity-validator/index.mjs.map +1 -1
  148. package/dist/services/entity-validator/validators.d.ts +1 -0
  149. package/dist/services/entity-validator/validators.d.ts.map +1 -1
  150. package/dist/services/entity-validator/validators.js +3 -0
  151. package/dist/services/entity-validator/validators.js.map +1 -1
  152. package/dist/services/entity-validator/validators.mjs +3 -0
  153. package/dist/services/entity-validator/validators.mjs.map +1 -1
  154. package/dist/services/metrics/index.d.ts +1 -1
  155. package/dist/services/metrics/index.d.ts.map +1 -1
  156. package/dist/services/metrics/index.js +9 -8
  157. package/dist/services/metrics/index.js.map +1 -1
  158. package/dist/services/metrics/index.mjs +9 -8
  159. package/dist/services/metrics/index.mjs.map +1 -1
  160. package/dist/services/metrics/sender.d.ts.map +1 -1
  161. package/dist/services/metrics/sender.js +2 -2
  162. package/dist/services/metrics/sender.js.map +1 -1
  163. package/dist/services/metrics/sender.mjs +2 -2
  164. package/dist/services/metrics/sender.mjs.map +1 -1
  165. package/dist/services/server/register-routes.js +22 -2
  166. package/dist/services/server/register-routes.js.map +1 -1
  167. package/dist/services/server/register-routes.mjs +22 -2
  168. package/dist/services/server/register-routes.mjs.map +1 -1
  169. package/dist/services/server/routing.d.ts +10 -0
  170. package/dist/services/server/routing.d.ts.map +1 -1
  171. package/dist/services/server/routing.js +7 -1
  172. package/dist/services/server/routing.js.map +1 -1
  173. package/dist/services/server/routing.mjs +7 -1
  174. package/dist/services/server/routing.mjs.map +1 -1
  175. package/dist/services/utils/conditional-fields.d.ts +3 -0
  176. package/dist/services/utils/conditional-fields.d.ts.map +1 -0
  177. package/dist/services/utils/conditional-fields.js +22 -0
  178. package/dist/services/utils/conditional-fields.js.map +1 -0
  179. package/dist/services/utils/conditional-fields.mjs +20 -0
  180. package/dist/services/utils/conditional-fields.mjs.map +1 -0
  181. package/dist/utils/fetch.d.ts +5 -1
  182. package/dist/utils/fetch.d.ts.map +1 -1
  183. package/dist/utils/fetch.js +8 -4
  184. package/dist/utils/fetch.js.map +1 -1
  185. package/dist/utils/fetch.mjs +8 -4
  186. package/dist/utils/fetch.mjs.map +1 -1
  187. package/dist/utils/transform-content-types-to-models.d.ts +197 -0
  188. package/dist/utils/transform-content-types-to-models.d.ts.map +1 -1
  189. package/package.json +17 -13
@@ -1 +1 @@
1
- {"version":3,"file":"cors.js","sources":["../../src/middlewares/cors.ts"],"sourcesContent":["import koaCors from '@koa/cors';\n\nimport type { Core } from '@strapi/types';\n\nexport type Config = {\n enabled?: boolean;\n origin: string | string[] | ((ctx: any) => string | string[]);\n expose?: string | string[];\n maxAge?: number;\n credentials?: boolean;\n methods?: string | string[];\n headers?: string | string[];\n keepHeadersOnError?: boolean;\n};\n\nconst defaults: Config = {\n origin: '*',\n maxAge: 31536000,\n credentials: true,\n methods: ['GET', 'POST', 'PUT', 'PATCH', 'DELETE', 'HEAD', 'OPTIONS'],\n headers: ['Content-Type', 'Authorization', 'Origin', 'Accept'],\n keepHeadersOnError: false,\n};\n\nexport const cors: Core.MiddlewareFactory<Config> = (config) => {\n const { origin, expose, maxAge, credentials, methods, headers, keepHeadersOnError } = {\n ...defaults,\n ...config,\n };\n\n if (config.enabled !== undefined) {\n strapi.log.warn(\n 'The strapi::cors middleware no longer supports the `enabled` option. Using it' +\n ' to conditionally enable CORS might cause an insecure default. To disable strapi::cors, remove it from' +\n ' the exported array in config/middleware.js'\n );\n }\n\n return koaCors({\n async origin(ctx) {\n if (!ctx.get('Origin')) {\n return '*';\n }\n\n let originList: string | string[];\n\n if (typeof origin === 'function') {\n originList = await origin(ctx);\n } else {\n originList = origin;\n }\n\n if (Array.isArray(originList)) {\n return originList.includes(ctx.get('Origin')) ? ctx.get('Origin') : '';\n }\n\n const parsedOrigin = originList.split(',').map((origin) => origin.trim());\n if (parsedOrigin.length > 1) {\n return parsedOrigin.includes(ctx.get('Origin')) ? ctx.get('Origin') : '';\n }\n\n return originList;\n },\n exposeHeaders: expose,\n maxAge,\n credentials,\n allowMethods: methods,\n allowHeaders: headers,\n keepHeadersOnError,\n });\n};\n"],"names":["defaults","origin","maxAge","credentials","methods","headers","keepHeadersOnError","cors","config","expose","enabled","undefined","strapi","log","warn","koaCors","ctx","get","originList","Array","isArray","includes","parsedOrigin","split","map","trim","length","exposeHeaders","allowMethods","allowHeaders"],"mappings":";;;;AAeA,MAAMA,QAAmB,GAAA;IACvBC,MAAQ,EAAA,GAAA;IACRC,MAAQ,EAAA,QAAA;IACRC,WAAa,EAAA,IAAA;IACbC,OAAS,EAAA;AAAC,QAAA,KAAA;AAAO,QAAA,MAAA;AAAQ,QAAA,KAAA;AAAO,QAAA,OAAA;AAAS,QAAA,QAAA;AAAU,QAAA,MAAA;AAAQ,QAAA;AAAU,KAAA;IACrEC,OAAS,EAAA;AAAC,QAAA,cAAA;AAAgB,QAAA,eAAA;AAAiB,QAAA,QAAA;AAAU,QAAA;AAAS,KAAA;IAC9DC,kBAAoB,EAAA;AACtB,CAAA;AAEO,MAAMC,OAAuC,CAACC,MAAAA,GAAAA;AACnD,IAAA,MAAM,EAAEP,MAAM,EAAEQ,MAAM,EAAEP,MAAM,EAAEC,WAAW,EAAEC,OAAO,EAAEC,OAAO,EAAEC,kBAAkB,EAAE,GAAG;AACpF,QAAA,GAAGN,QAAQ;AACX,QAAA,GAAGQ;AACL,KAAA;IAEA,IAAIA,MAAAA,CAAOE,OAAO,KAAKC,SAAW,EAAA;AAChCC,QAAAA,MAAAA,CAAOC,GAAG,CAACC,IAAI,CACb,kFACE,wGACA,GAAA,6CAAA,CAAA;AAEN;AAEA,IAAA,OAAOC,OAAQ,CAAA;AACb,QAAA,MAAMd,QAAOe,GAAG,EAAA;AACd,YAAA,IAAI,CAACA,GAAAA,CAAIC,GAAG,CAAC,QAAW,CAAA,EAAA;gBACtB,OAAO,GAAA;AACT;YAEA,IAAIC,UAAAA;YAEJ,IAAI,OAAOjB,WAAW,UAAY,EAAA;AAChCiB,gBAAAA,UAAAA,GAAa,MAAMjB,MAAOe,CAAAA,GAAAA,CAAAA;aACrB,MAAA;gBACLE,UAAajB,GAAAA,MAAAA;AACf;YAEA,IAAIkB,KAAAA,CAAMC,OAAO,CAACF,UAAa,CAAA,EAAA;gBAC7B,OAAOA,UAAAA,CAAWG,QAAQ,CAACL,GAAIC,CAAAA,GAAG,CAAC,QAAaD,CAAAA,CAAAA,GAAAA,GAAAA,CAAIC,GAAG,CAAC,QAAY,CAAA,GAAA,EAAA;AACtE;YAEA,MAAMK,YAAAA,GAAeJ,UAAWK,CAAAA,KAAK,CAAC,GAAA,CAAA,CAAKC,GAAG,CAAC,CAACvB,MAAWA,GAAAA,MAAAA,CAAOwB,IAAI,EAAA,CAAA;YACtE,IAAIH,YAAAA,CAAaI,MAAM,GAAG,CAAG,EAAA;gBAC3B,OAAOJ,YAAAA,CAAaD,QAAQ,CAACL,GAAIC,CAAAA,GAAG,CAAC,QAAaD,CAAAA,CAAAA,GAAAA,GAAAA,CAAIC,GAAG,CAAC,QAAY,CAAA,GAAA,EAAA;AACxE;YAEA,OAAOC,UAAAA;AACT,SAAA;QACAS,aAAelB,EAAAA,MAAAA;AACfP,QAAAA,MAAAA;AACAC,QAAAA,WAAAA;QACAyB,YAAcxB,EAAAA,OAAAA;QACdyB,YAAcxB,EAAAA,OAAAA;AACdC,QAAAA;AACF,KAAA,CAAA;AACF;;;;"}
1
+ {"version":3,"file":"cors.js","sources":["../../src/middlewares/cors.ts"],"sourcesContent":["import koaCors from '@koa/cors';\n\nimport type { Core } from '@strapi/types';\n\nexport type Config = {\n enabled?: boolean;\n origin: string | string[] | ((ctx: any) => string | string[] | Promise<string | string[]>);\n expose?: string | string[];\n maxAge?: number;\n credentials?: boolean;\n methods?: string | string[];\n headers?: string | string[];\n keepHeadersOnError?: boolean;\n};\n\nconst defaults: Config = {\n origin: '*',\n maxAge: 31536000,\n credentials: true,\n methods: ['GET', 'POST', 'PUT', 'PATCH', 'DELETE', 'HEAD', 'OPTIONS'],\n headers: ['Content-Type', 'Authorization', 'Origin', 'Accept'],\n keepHeadersOnError: false,\n};\n\n/**\n * Determines if a request origin is allowed based on the configured origin list\n * @param requestOrigin - The origin from the request header\n * @param configuredOrigin - The origin configuration (string, array, or function)\n * @param ctx - The Koa context (for function-based origin)\n * @returns The allowed origin string or empty string if blocked\n */\nexport const matchOrigin = async (\n requestOrigin: string | undefined,\n configuredOrigin:\n | string\n | string[]\n | ((ctx: any) => string | string[] | Promise<string | string[]>),\n ctx?: any\n): Promise<string> => {\n if (!requestOrigin) {\n return '*';\n }\n\n let originList: string | string[];\n\n if (typeof configuredOrigin === 'function') {\n originList = await configuredOrigin(ctx);\n } else {\n originList = configuredOrigin;\n }\n\n // Normalize originList into an array\n let normalizedOrigins: string[];\n if (Array.isArray(originList)) {\n normalizedOrigins = originList;\n } else if (originList === undefined || originList === null) {\n // Handle undefined/null - treat as wildcard\n normalizedOrigins = ['*'];\n } else {\n // Handle comma-separated string of origins\n normalizedOrigins = originList.split(',').map((origin) => origin.trim());\n }\n\n // Check if wildcard is in the normalized origins\n if (normalizedOrigins.includes('*')) {\n return requestOrigin;\n }\n\n // Check if request origin is in the normalized origins\n return normalizedOrigins.includes(requestOrigin) ? requestOrigin : '';\n};\n\nexport const cors: Core.MiddlewareFactory<Config> = (config) => {\n const { origin, expose, maxAge, credentials, methods, headers, keepHeadersOnError } = {\n ...defaults,\n ...config,\n };\n\n if (config.enabled !== undefined) {\n strapi.log.warn(\n 'The strapi::cors middleware no longer supports the `enabled` option. Using it' +\n ' to conditionally enable CORS might cause an insecure default. To disable strapi::cors, remove it from' +\n ' the exported array in config/middleware.js'\n );\n }\n\n return koaCors({\n async origin(ctx) {\n const requestOrigin = ctx.get('Origin');\n return matchOrigin(requestOrigin, origin, ctx);\n },\n exposeHeaders: expose,\n maxAge,\n credentials,\n allowMethods: methods,\n allowHeaders: headers,\n keepHeadersOnError,\n });\n};\n"],"names":["defaults","origin","maxAge","credentials","methods","headers","keepHeadersOnError","matchOrigin","requestOrigin","configuredOrigin","ctx","originList","normalizedOrigins","Array","isArray","undefined","split","map","trim","includes","cors","config","expose","enabled","strapi","log","warn","koaCors","get","exposeHeaders","allowMethods","allowHeaders"],"mappings":";;;;AAeA,MAAMA,QAAmB,GAAA;IACvBC,MAAQ,EAAA,GAAA;IACRC,MAAQ,EAAA,QAAA;IACRC,WAAa,EAAA,IAAA;IACbC,OAAS,EAAA;AAAC,QAAA,KAAA;AAAO,QAAA,MAAA;AAAQ,QAAA,KAAA;AAAO,QAAA,OAAA;AAAS,QAAA,QAAA;AAAU,QAAA,MAAA;AAAQ,QAAA;AAAU,KAAA;IACrEC,OAAS,EAAA;AAAC,QAAA,cAAA;AAAgB,QAAA,eAAA;AAAiB,QAAA,QAAA;AAAU,QAAA;AAAS,KAAA;IAC9DC,kBAAoB,EAAA;AACtB,CAAA;AAEA;;;;;;AAMC,IACM,MAAMC,WAAc,GAAA,OACzBC,eACAC,gBAIAC,EAAAA,GAAAA,GAAAA;AAEA,IAAA,IAAI,CAACF,aAAe,EAAA;QAClB,OAAO,GAAA;AACT;IAEA,IAAIG,UAAAA;IAEJ,IAAI,OAAOF,qBAAqB,UAAY,EAAA;AAC1CE,QAAAA,UAAAA,GAAa,MAAMF,gBAAiBC,CAAAA,GAAAA,CAAAA;KAC/B,MAAA;QACLC,UAAaF,GAAAA,gBAAAA;AACf;;IAGA,IAAIG,iBAAAA;IACJ,IAAIC,KAAAA,CAAMC,OAAO,CAACH,UAAa,CAAA,EAAA;QAC7BC,iBAAoBD,GAAAA,UAAAA;AACtB,KAAA,MAAO,IAAIA,UAAAA,KAAeI,SAAaJ,IAAAA,UAAAA,KAAe,IAAM,EAAA;;QAE1DC,iBAAoB,GAAA;AAAC,YAAA;AAAI,SAAA;KACpB,MAAA;;QAELA,iBAAoBD,GAAAA,UAAAA,CAAWK,KAAK,CAAC,GAAA,CAAA,CAAKC,GAAG,CAAC,CAAChB,MAAWA,GAAAA,MAAAA,CAAOiB,IAAI,EAAA,CAAA;AACvE;;IAGA,IAAIN,iBAAAA,CAAkBO,QAAQ,CAAC,GAAM,CAAA,EAAA;QACnC,OAAOX,aAAAA;AACT;;AAGA,IAAA,OAAOI,iBAAkBO,CAAAA,QAAQ,CAACX,aAAAA,CAAAA,GAAiBA,aAAgB,GAAA,EAAA;AACrE;AAEO,MAAMY,OAAuC,CAACC,MAAAA,GAAAA;AACnD,IAAA,MAAM,EAAEpB,MAAM,EAAEqB,MAAM,EAAEpB,MAAM,EAAEC,WAAW,EAAEC,OAAO,EAAEC,OAAO,EAAEC,kBAAkB,EAAE,GAAG;AACpF,QAAA,GAAGN,QAAQ;AACX,QAAA,GAAGqB;AACL,KAAA;IAEA,IAAIA,MAAAA,CAAOE,OAAO,KAAKR,SAAW,EAAA;AAChCS,QAAAA,MAAAA,CAAOC,GAAG,CAACC,IAAI,CACb,kFACE,wGACA,GAAA,6CAAA,CAAA;AAEN;AAEA,IAAA,OAAOC,OAAQ,CAAA;AACb,QAAA,MAAM1B,QAAOS,GAAG,EAAA;YACd,MAAMF,aAAAA,GAAgBE,GAAIkB,CAAAA,GAAG,CAAC,QAAA,CAAA;YAC9B,OAAOrB,WAAAA,CAAYC,eAAeP,MAAQS,EAAAA,GAAAA,CAAAA;AAC5C,SAAA;QACAmB,aAAeP,EAAAA,MAAAA;AACfpB,QAAAA,MAAAA;AACAC,QAAAA,WAAAA;QACA2B,YAAc1B,EAAAA,OAAAA;QACd2B,YAAc1B,EAAAA,OAAAA;AACdC,QAAAA;AACF,KAAA,CAAA;AACF;;;;;"}
@@ -21,6 +21,42 @@ const defaults = {
21
21
  ],
22
22
  keepHeadersOnError: false
23
23
  };
24
+ /**
25
+ * Determines if a request origin is allowed based on the configured origin list
26
+ * @param requestOrigin - The origin from the request header
27
+ * @param configuredOrigin - The origin configuration (string, array, or function)
28
+ * @param ctx - The Koa context (for function-based origin)
29
+ * @returns The allowed origin string or empty string if blocked
30
+ */ const matchOrigin = async (requestOrigin, configuredOrigin, ctx)=>{
31
+ if (!requestOrigin) {
32
+ return '*';
33
+ }
34
+ let originList;
35
+ if (typeof configuredOrigin === 'function') {
36
+ originList = await configuredOrigin(ctx);
37
+ } else {
38
+ originList = configuredOrigin;
39
+ }
40
+ // Normalize originList into an array
41
+ let normalizedOrigins;
42
+ if (Array.isArray(originList)) {
43
+ normalizedOrigins = originList;
44
+ } else if (originList === undefined || originList === null) {
45
+ // Handle undefined/null - treat as wildcard
46
+ normalizedOrigins = [
47
+ '*'
48
+ ];
49
+ } else {
50
+ // Handle comma-separated string of origins
51
+ normalizedOrigins = originList.split(',').map((origin)=>origin.trim());
52
+ }
53
+ // Check if wildcard is in the normalized origins
54
+ if (normalizedOrigins.includes('*')) {
55
+ return requestOrigin;
56
+ }
57
+ // Check if request origin is in the normalized origins
58
+ return normalizedOrigins.includes(requestOrigin) ? requestOrigin : '';
59
+ };
24
60
  const cors = (config)=>{
25
61
  const { origin, expose, maxAge, credentials, methods, headers, keepHeadersOnError } = {
26
62
  ...defaults,
@@ -31,23 +67,8 @@ const cors = (config)=>{
31
67
  }
32
68
  return koaCors({
33
69
  async origin (ctx) {
34
- if (!ctx.get('Origin')) {
35
- return '*';
36
- }
37
- let originList;
38
- if (typeof origin === 'function') {
39
- originList = await origin(ctx);
40
- } else {
41
- originList = origin;
42
- }
43
- if (Array.isArray(originList)) {
44
- return originList.includes(ctx.get('Origin')) ? ctx.get('Origin') : '';
45
- }
46
- const parsedOrigin = originList.split(',').map((origin)=>origin.trim());
47
- if (parsedOrigin.length > 1) {
48
- return parsedOrigin.includes(ctx.get('Origin')) ? ctx.get('Origin') : '';
49
- }
50
- return originList;
70
+ const requestOrigin = ctx.get('Origin');
71
+ return matchOrigin(requestOrigin, origin, ctx);
51
72
  },
52
73
  exposeHeaders: expose,
53
74
  maxAge,
@@ -58,5 +79,5 @@ const cors = (config)=>{
58
79
  });
59
80
  };
60
81
 
61
- export { cors };
82
+ export { cors, matchOrigin };
62
83
  //# sourceMappingURL=cors.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"cors.mjs","sources":["../../src/middlewares/cors.ts"],"sourcesContent":["import koaCors from '@koa/cors';\n\nimport type { Core } from '@strapi/types';\n\nexport type Config = {\n enabled?: boolean;\n origin: string | string[] | ((ctx: any) => string | string[]);\n expose?: string | string[];\n maxAge?: number;\n credentials?: boolean;\n methods?: string | string[];\n headers?: string | string[];\n keepHeadersOnError?: boolean;\n};\n\nconst defaults: Config = {\n origin: '*',\n maxAge: 31536000,\n credentials: true,\n methods: ['GET', 'POST', 'PUT', 'PATCH', 'DELETE', 'HEAD', 'OPTIONS'],\n headers: ['Content-Type', 'Authorization', 'Origin', 'Accept'],\n keepHeadersOnError: false,\n};\n\nexport const cors: Core.MiddlewareFactory<Config> = (config) => {\n const { origin, expose, maxAge, credentials, methods, headers, keepHeadersOnError } = {\n ...defaults,\n ...config,\n };\n\n if (config.enabled !== undefined) {\n strapi.log.warn(\n 'The strapi::cors middleware no longer supports the `enabled` option. Using it' +\n ' to conditionally enable CORS might cause an insecure default. To disable strapi::cors, remove it from' +\n ' the exported array in config/middleware.js'\n );\n }\n\n return koaCors({\n async origin(ctx) {\n if (!ctx.get('Origin')) {\n return '*';\n }\n\n let originList: string | string[];\n\n if (typeof origin === 'function') {\n originList = await origin(ctx);\n } else {\n originList = origin;\n }\n\n if (Array.isArray(originList)) {\n return originList.includes(ctx.get('Origin')) ? ctx.get('Origin') : '';\n }\n\n const parsedOrigin = originList.split(',').map((origin) => origin.trim());\n if (parsedOrigin.length > 1) {\n return parsedOrigin.includes(ctx.get('Origin')) ? ctx.get('Origin') : '';\n }\n\n return originList;\n },\n exposeHeaders: expose,\n maxAge,\n credentials,\n allowMethods: methods,\n allowHeaders: headers,\n keepHeadersOnError,\n });\n};\n"],"names":["defaults","origin","maxAge","credentials","methods","headers","keepHeadersOnError","cors","config","expose","enabled","undefined","strapi","log","warn","koaCors","ctx","get","originList","Array","isArray","includes","parsedOrigin","split","map","trim","length","exposeHeaders","allowMethods","allowHeaders"],"mappings":";;AAeA,MAAMA,QAAmB,GAAA;IACvBC,MAAQ,EAAA,GAAA;IACRC,MAAQ,EAAA,QAAA;IACRC,WAAa,EAAA,IAAA;IACbC,OAAS,EAAA;AAAC,QAAA,KAAA;AAAO,QAAA,MAAA;AAAQ,QAAA,KAAA;AAAO,QAAA,OAAA;AAAS,QAAA,QAAA;AAAU,QAAA,MAAA;AAAQ,QAAA;AAAU,KAAA;IACrEC,OAAS,EAAA;AAAC,QAAA,cAAA;AAAgB,QAAA,eAAA;AAAiB,QAAA,QAAA;AAAU,QAAA;AAAS,KAAA;IAC9DC,kBAAoB,EAAA;AACtB,CAAA;AAEO,MAAMC,OAAuC,CAACC,MAAAA,GAAAA;AACnD,IAAA,MAAM,EAAEP,MAAM,EAAEQ,MAAM,EAAEP,MAAM,EAAEC,WAAW,EAAEC,OAAO,EAAEC,OAAO,EAAEC,kBAAkB,EAAE,GAAG;AACpF,QAAA,GAAGN,QAAQ;AACX,QAAA,GAAGQ;AACL,KAAA;IAEA,IAAIA,MAAAA,CAAOE,OAAO,KAAKC,SAAW,EAAA;AAChCC,QAAAA,MAAAA,CAAOC,GAAG,CAACC,IAAI,CACb,kFACE,wGACA,GAAA,6CAAA,CAAA;AAEN;AAEA,IAAA,OAAOC,OAAQ,CAAA;AACb,QAAA,MAAMd,QAAOe,GAAG,EAAA;AACd,YAAA,IAAI,CAACA,GAAAA,CAAIC,GAAG,CAAC,QAAW,CAAA,EAAA;gBACtB,OAAO,GAAA;AACT;YAEA,IAAIC,UAAAA;YAEJ,IAAI,OAAOjB,WAAW,UAAY,EAAA;AAChCiB,gBAAAA,UAAAA,GAAa,MAAMjB,MAAOe,CAAAA,GAAAA,CAAAA;aACrB,MAAA;gBACLE,UAAajB,GAAAA,MAAAA;AACf;YAEA,IAAIkB,KAAAA,CAAMC,OAAO,CAACF,UAAa,CAAA,EAAA;gBAC7B,OAAOA,UAAAA,CAAWG,QAAQ,CAACL,GAAIC,CAAAA,GAAG,CAAC,QAAaD,CAAAA,CAAAA,GAAAA,GAAAA,CAAIC,GAAG,CAAC,QAAY,CAAA,GAAA,EAAA;AACtE;YAEA,MAAMK,YAAAA,GAAeJ,UAAWK,CAAAA,KAAK,CAAC,GAAA,CAAA,CAAKC,GAAG,CAAC,CAACvB,MAAWA,GAAAA,MAAAA,CAAOwB,IAAI,EAAA,CAAA;YACtE,IAAIH,YAAAA,CAAaI,MAAM,GAAG,CAAG,EAAA;gBAC3B,OAAOJ,YAAAA,CAAaD,QAAQ,CAACL,GAAIC,CAAAA,GAAG,CAAC,QAAaD,CAAAA,CAAAA,GAAAA,GAAAA,CAAIC,GAAG,CAAC,QAAY,CAAA,GAAA,EAAA;AACxE;YAEA,OAAOC,UAAAA;AACT,SAAA;QACAS,aAAelB,EAAAA,MAAAA;AACfP,QAAAA,MAAAA;AACAC,QAAAA,WAAAA;QACAyB,YAAcxB,EAAAA,OAAAA;QACdyB,YAAcxB,EAAAA,OAAAA;AACdC,QAAAA;AACF,KAAA,CAAA;AACF;;;;"}
1
+ {"version":3,"file":"cors.mjs","sources":["../../src/middlewares/cors.ts"],"sourcesContent":["import koaCors from '@koa/cors';\n\nimport type { Core } from '@strapi/types';\n\nexport type Config = {\n enabled?: boolean;\n origin: string | string[] | ((ctx: any) => string | string[] | Promise<string | string[]>);\n expose?: string | string[];\n maxAge?: number;\n credentials?: boolean;\n methods?: string | string[];\n headers?: string | string[];\n keepHeadersOnError?: boolean;\n};\n\nconst defaults: Config = {\n origin: '*',\n maxAge: 31536000,\n credentials: true,\n methods: ['GET', 'POST', 'PUT', 'PATCH', 'DELETE', 'HEAD', 'OPTIONS'],\n headers: ['Content-Type', 'Authorization', 'Origin', 'Accept'],\n keepHeadersOnError: false,\n};\n\n/**\n * Determines if a request origin is allowed based on the configured origin list\n * @param requestOrigin - The origin from the request header\n * @param configuredOrigin - The origin configuration (string, array, or function)\n * @param ctx - The Koa context (for function-based origin)\n * @returns The allowed origin string or empty string if blocked\n */\nexport const matchOrigin = async (\n requestOrigin: string | undefined,\n configuredOrigin:\n | string\n | string[]\n | ((ctx: any) => string | string[] | Promise<string | string[]>),\n ctx?: any\n): Promise<string> => {\n if (!requestOrigin) {\n return '*';\n }\n\n let originList: string | string[];\n\n if (typeof configuredOrigin === 'function') {\n originList = await configuredOrigin(ctx);\n } else {\n originList = configuredOrigin;\n }\n\n // Normalize originList into an array\n let normalizedOrigins: string[];\n if (Array.isArray(originList)) {\n normalizedOrigins = originList;\n } else if (originList === undefined || originList === null) {\n // Handle undefined/null - treat as wildcard\n normalizedOrigins = ['*'];\n } else {\n // Handle comma-separated string of origins\n normalizedOrigins = originList.split(',').map((origin) => origin.trim());\n }\n\n // Check if wildcard is in the normalized origins\n if (normalizedOrigins.includes('*')) {\n return requestOrigin;\n }\n\n // Check if request origin is in the normalized origins\n return normalizedOrigins.includes(requestOrigin) ? requestOrigin : '';\n};\n\nexport const cors: Core.MiddlewareFactory<Config> = (config) => {\n const { origin, expose, maxAge, credentials, methods, headers, keepHeadersOnError } = {\n ...defaults,\n ...config,\n };\n\n if (config.enabled !== undefined) {\n strapi.log.warn(\n 'The strapi::cors middleware no longer supports the `enabled` option. Using it' +\n ' to conditionally enable CORS might cause an insecure default. To disable strapi::cors, remove it from' +\n ' the exported array in config/middleware.js'\n );\n }\n\n return koaCors({\n async origin(ctx) {\n const requestOrigin = ctx.get('Origin');\n return matchOrigin(requestOrigin, origin, ctx);\n },\n exposeHeaders: expose,\n maxAge,\n credentials,\n allowMethods: methods,\n allowHeaders: headers,\n keepHeadersOnError,\n });\n};\n"],"names":["defaults","origin","maxAge","credentials","methods","headers","keepHeadersOnError","matchOrigin","requestOrigin","configuredOrigin","ctx","originList","normalizedOrigins","Array","isArray","undefined","split","map","trim","includes","cors","config","expose","enabled","strapi","log","warn","koaCors","get","exposeHeaders","allowMethods","allowHeaders"],"mappings":";;AAeA,MAAMA,QAAmB,GAAA;IACvBC,MAAQ,EAAA,GAAA;IACRC,MAAQ,EAAA,QAAA;IACRC,WAAa,EAAA,IAAA;IACbC,OAAS,EAAA;AAAC,QAAA,KAAA;AAAO,QAAA,MAAA;AAAQ,QAAA,KAAA;AAAO,QAAA,OAAA;AAAS,QAAA,QAAA;AAAU,QAAA,MAAA;AAAQ,QAAA;AAAU,KAAA;IACrEC,OAAS,EAAA;AAAC,QAAA,cAAA;AAAgB,QAAA,eAAA;AAAiB,QAAA,QAAA;AAAU,QAAA;AAAS,KAAA;IAC9DC,kBAAoB,EAAA;AACtB,CAAA;AAEA;;;;;;AAMC,IACM,MAAMC,WAAc,GAAA,OACzBC,eACAC,gBAIAC,EAAAA,GAAAA,GAAAA;AAEA,IAAA,IAAI,CAACF,aAAe,EAAA;QAClB,OAAO,GAAA;AACT;IAEA,IAAIG,UAAAA;IAEJ,IAAI,OAAOF,qBAAqB,UAAY,EAAA;AAC1CE,QAAAA,UAAAA,GAAa,MAAMF,gBAAiBC,CAAAA,GAAAA,CAAAA;KAC/B,MAAA;QACLC,UAAaF,GAAAA,gBAAAA;AACf;;IAGA,IAAIG,iBAAAA;IACJ,IAAIC,KAAAA,CAAMC,OAAO,CAACH,UAAa,CAAA,EAAA;QAC7BC,iBAAoBD,GAAAA,UAAAA;AACtB,KAAA,MAAO,IAAIA,UAAAA,KAAeI,SAAaJ,IAAAA,UAAAA,KAAe,IAAM,EAAA;;QAE1DC,iBAAoB,GAAA;AAAC,YAAA;AAAI,SAAA;KACpB,MAAA;;QAELA,iBAAoBD,GAAAA,UAAAA,CAAWK,KAAK,CAAC,GAAA,CAAA,CAAKC,GAAG,CAAC,CAAChB,MAAWA,GAAAA,MAAAA,CAAOiB,IAAI,EAAA,CAAA;AACvE;;IAGA,IAAIN,iBAAAA,CAAkBO,QAAQ,CAAC,GAAM,CAAA,EAAA;QACnC,OAAOX,aAAAA;AACT;;AAGA,IAAA,OAAOI,iBAAkBO,CAAAA,QAAQ,CAACX,aAAAA,CAAAA,GAAiBA,aAAgB,GAAA,EAAA;AACrE;AAEO,MAAMY,OAAuC,CAACC,MAAAA,GAAAA;AACnD,IAAA,MAAM,EAAEpB,MAAM,EAAEqB,MAAM,EAAEpB,MAAM,EAAEC,WAAW,EAAEC,OAAO,EAAEC,OAAO,EAAEC,kBAAkB,EAAE,GAAG;AACpF,QAAA,GAAGN,QAAQ;AACX,QAAA,GAAGqB;AACL,KAAA;IAEA,IAAIA,MAAAA,CAAOE,OAAO,KAAKR,SAAW,EAAA;AAChCS,QAAAA,MAAAA,CAAOC,GAAG,CAACC,IAAI,CACb,kFACE,wGACA,GAAA,6CAAA,CAAA;AAEN;AAEA,IAAA,OAAOC,OAAQ,CAAA;AACb,QAAA,MAAM1B,QAAOS,GAAG,EAAA;YACd,MAAMF,aAAAA,GAAgBE,GAAIkB,CAAAA,GAAG,CAAC,QAAA,CAAA;YAC9B,OAAOrB,WAAAA,CAAYC,eAAeP,MAAQS,EAAAA,GAAAA,CAAAA;AAC5C,SAAA;QACAmB,aAAeP,EAAAA,MAAAA;AACfpB,QAAAA,MAAAA;AACAC,QAAAA,WAAAA;QACA2B,YAAc1B,EAAAA,OAAAA;QACd2B,YAAc1B,EAAAA,OAAAA;AACdC,QAAAA;AACF,KAAA,CAAA;AACF;;;;"}
@@ -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.c72b48da735f44a3ccafb7a6dc9ba5213f3844db";
6
+ var version = "0.0.0-experimental.ca5f02ef2ec166e219546983049c0543bed92f8d";
7
7
  var description = "Core of Strapi";
8
8
  var homepage = "https://strapi.io";
9
9
  var bugs = {
@@ -59,14 +59,15 @@ 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.c72b48da735f44a3ccafb7a6dc9ba5213f3844db",
63
- "@strapi/database": "0.0.0-experimental.c72b48da735f44a3ccafb7a6dc9ba5213f3844db",
64
- "@strapi/generators": "0.0.0-experimental.c72b48da735f44a3ccafb7a6dc9ba5213f3844db",
65
- "@strapi/logger": "0.0.0-experimental.c72b48da735f44a3ccafb7a6dc9ba5213f3844db",
66
- "@strapi/permissions": "0.0.0-experimental.c72b48da735f44a3ccafb7a6dc9ba5213f3844db",
67
- "@strapi/types": "0.0.0-experimental.c72b48da735f44a3ccafb7a6dc9ba5213f3844db",
68
- "@strapi/typescript-utils": "0.0.0-experimental.c72b48da735f44a3ccafb7a6dc9ba5213f3844db",
69
- "@strapi/utils": "0.0.0-experimental.c72b48da735f44a3ccafb7a6dc9ba5213f3844db",
62
+ "@strapi/admin": "0.0.0-experimental.ca5f02ef2ec166e219546983049c0543bed92f8d",
63
+ "@strapi/database": "0.0.0-experimental.ca5f02ef2ec166e219546983049c0543bed92f8d",
64
+ "@strapi/generators": "0.0.0-experimental.ca5f02ef2ec166e219546983049c0543bed92f8d",
65
+ "@strapi/logger": "0.0.0-experimental.ca5f02ef2ec166e219546983049c0543bed92f8d",
66
+ "@strapi/permissions": "0.0.0-experimental.ca5f02ef2ec166e219546983049c0543bed92f8d",
67
+ "@strapi/types": "0.0.0-experimental.ca5f02ef2ec166e219546983049c0543bed92f8d",
68
+ "@strapi/typescript-utils": "0.0.0-experimental.ca5f02ef2ec166e219546983049c0543bed92f8d",
69
+ "@strapi/utils": "0.0.0-experimental.ca5f02ef2ec166e219546983049c0543bed92f8d",
70
+ "@vercel/stega": "0.1.2",
70
71
  bcryptjs: "2.4.3",
71
72
  boxen: "5.1.2",
72
73
  chalk: "4.1.2",
@@ -85,7 +86,8 @@ var dependencies = {
85
86
  "http-errors": "2.0.0",
86
87
  inquirer: "8.2.5",
87
88
  "is-docker": "2.2.1",
88
- koa: "2.15.4",
89
+ "json-logic-js": "2.0.5",
90
+ koa: "2.16.1",
89
91
  "koa-body": "6.0.1",
90
92
  "koa-compose": "4.1.0",
91
93
  "koa-compress": "5.1.1",
@@ -107,7 +109,8 @@ var dependencies = {
107
109
  statuses: "2.0.1",
108
110
  typescript: "5.4.4",
109
111
  undici: "6.21.2",
110
- yup: "0.32.9"
112
+ yup: "0.32.9",
113
+ zod: "3.25.67"
111
114
  };
112
115
  var devDependencies = {
113
116
  "@strapi/ts-zen": "^0.2.0",
@@ -119,6 +122,7 @@ var devDependencies = {
119
122
  "@types/global-agent": "2.1.3",
120
123
  "@types/http-errors": "2.0.4",
121
124
  "@types/jest": "29.5.2",
125
+ "@types/json-logic-js": "2.0.8",
122
126
  "@types/koa": "2.13.4",
123
127
  "@types/koa-compress": "4.0.3",
124
128
  "@types/koa-session": "6.4.1",
@@ -129,9 +133,9 @@ var devDependencies = {
129
133
  "@types/node": "18.19.24",
130
134
  "@types/node-schedule": "2.1.7",
131
135
  "@types/statuses": "2.0.1",
132
- "eslint-config-custom": "0.0.0-experimental.c72b48da735f44a3ccafb7a6dc9ba5213f3844db",
136
+ "eslint-config-custom": "0.0.0-experimental.ca5f02ef2ec166e219546983049c0543bed92f8d",
133
137
  supertest: "6.3.3",
134
- tsconfig: "0.0.0-experimental.c72b48da735f44a3ccafb7a6dc9ba5213f3844db"
138
+ tsconfig: "0.0.0-experimental.ca5f02ef2ec166e219546983049c0543bed92f8d"
135
139
  };
136
140
  var engines = {
137
141
  node: ">=18.0.0 <=22.x.x",
@@ -1 +1 @@
1
- {"version":3,"file":"package.json.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"package.json.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -1,5 +1,5 @@
1
1
  var name = "@strapi/core";
2
- var version = "0.0.0-experimental.c72b48da735f44a3ccafb7a6dc9ba5213f3844db";
2
+ var version = "0.0.0-experimental.ca5f02ef2ec166e219546983049c0543bed92f8d";
3
3
  var description = "Core of Strapi";
4
4
  var homepage = "https://strapi.io";
5
5
  var bugs = {
@@ -55,14 +55,15 @@ 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.c72b48da735f44a3ccafb7a6dc9ba5213f3844db",
59
- "@strapi/database": "0.0.0-experimental.c72b48da735f44a3ccafb7a6dc9ba5213f3844db",
60
- "@strapi/generators": "0.0.0-experimental.c72b48da735f44a3ccafb7a6dc9ba5213f3844db",
61
- "@strapi/logger": "0.0.0-experimental.c72b48da735f44a3ccafb7a6dc9ba5213f3844db",
62
- "@strapi/permissions": "0.0.0-experimental.c72b48da735f44a3ccafb7a6dc9ba5213f3844db",
63
- "@strapi/types": "0.0.0-experimental.c72b48da735f44a3ccafb7a6dc9ba5213f3844db",
64
- "@strapi/typescript-utils": "0.0.0-experimental.c72b48da735f44a3ccafb7a6dc9ba5213f3844db",
65
- "@strapi/utils": "0.0.0-experimental.c72b48da735f44a3ccafb7a6dc9ba5213f3844db",
58
+ "@strapi/admin": "0.0.0-experimental.ca5f02ef2ec166e219546983049c0543bed92f8d",
59
+ "@strapi/database": "0.0.0-experimental.ca5f02ef2ec166e219546983049c0543bed92f8d",
60
+ "@strapi/generators": "0.0.0-experimental.ca5f02ef2ec166e219546983049c0543bed92f8d",
61
+ "@strapi/logger": "0.0.0-experimental.ca5f02ef2ec166e219546983049c0543bed92f8d",
62
+ "@strapi/permissions": "0.0.0-experimental.ca5f02ef2ec166e219546983049c0543bed92f8d",
63
+ "@strapi/types": "0.0.0-experimental.ca5f02ef2ec166e219546983049c0543bed92f8d",
64
+ "@strapi/typescript-utils": "0.0.0-experimental.ca5f02ef2ec166e219546983049c0543bed92f8d",
65
+ "@strapi/utils": "0.0.0-experimental.ca5f02ef2ec166e219546983049c0543bed92f8d",
66
+ "@vercel/stega": "0.1.2",
66
67
  bcryptjs: "2.4.3",
67
68
  boxen: "5.1.2",
68
69
  chalk: "4.1.2",
@@ -81,7 +82,8 @@ var dependencies = {
81
82
  "http-errors": "2.0.0",
82
83
  inquirer: "8.2.5",
83
84
  "is-docker": "2.2.1",
84
- koa: "2.15.4",
85
+ "json-logic-js": "2.0.5",
86
+ koa: "2.16.1",
85
87
  "koa-body": "6.0.1",
86
88
  "koa-compose": "4.1.0",
87
89
  "koa-compress": "5.1.1",
@@ -103,7 +105,8 @@ var dependencies = {
103
105
  statuses: "2.0.1",
104
106
  typescript: "5.4.4",
105
107
  undici: "6.21.2",
106
- yup: "0.32.9"
108
+ yup: "0.32.9",
109
+ zod: "3.25.67"
107
110
  };
108
111
  var devDependencies = {
109
112
  "@strapi/ts-zen": "^0.2.0",
@@ -115,6 +118,7 @@ var devDependencies = {
115
118
  "@types/global-agent": "2.1.3",
116
119
  "@types/http-errors": "2.0.4",
117
120
  "@types/jest": "29.5.2",
121
+ "@types/json-logic-js": "2.0.8",
118
122
  "@types/koa": "2.13.4",
119
123
  "@types/koa-compress": "4.0.3",
120
124
  "@types/koa-session": "6.4.1",
@@ -125,9 +129,9 @@ var devDependencies = {
125
129
  "@types/node": "18.19.24",
126
130
  "@types/node-schedule": "2.1.7",
127
131
  "@types/statuses": "2.0.1",
128
- "eslint-config-custom": "0.0.0-experimental.c72b48da735f44a3ccafb7a6dc9ba5213f3844db",
132
+ "eslint-config-custom": "0.0.0-experimental.ca5f02ef2ec166e219546983049c0543bed92f8d",
129
133
  supertest: "6.3.3",
130
- tsconfig: "0.0.0-experimental.c72b48da735f44a3ccafb7a6dc9ba5213f3844db"
134
+ tsconfig: "0.0.0-experimental.ca5f02ef2ec166e219546983049c0543bed92f8d"
131
135
  };
132
136
  var engines = {
133
137
  node: ">=18.0.0 <=22.x.x",
@@ -1 +1 @@
1
- {"version":3,"file":"package.json.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"package.json.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -0,0 +1,8 @@
1
+ import type { Core, Struct } from '@strapi/types';
2
+ declare const createContentSourceMapsService: (strapi: Core.Strapi) => {
3
+ readonly config: import("@strapi/types/dist/core/config/api").ContentSourceMapsProp;
4
+ isEnabled(): boolean;
5
+ encodeSourceMaps(data: any, contentType: Struct.ContentTypeSchema, rootId?: any, rootModel?: string): Promise<void>;
6
+ };
7
+ export { createContentSourceMapsService };
8
+ //# sourceMappingURL=content-source-maps.d.ts.map
@@ -0,0 +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;;iBAgB1C,OAAO;2BAKZ,GAAG,eACI,OAAO,iBAAiB,WAC5B,GAAG,cACA,MAAM,GACjB,QAAQ,IAAI,CAAC;CAqHnB,CAAC;AAEF,OAAO,EAAE,8BAA8B,EAAE,CAAC"}
@@ -0,0 +1,119 @@
1
+ 'use strict';
2
+
3
+ var stega = require('@vercel/stega');
4
+
5
+ const ENCODABLE_TYPES = [
6
+ 'string',
7
+ 'text',
8
+ 'richtext',
9
+ 'uid',
10
+ 'enumeration',
11
+ 'email',
12
+ 'date',
13
+ 'datetime',
14
+ 'time',
15
+ 'timestamp'
16
+ ];
17
+ const EXCLUDED_FIELDS = [
18
+ 'id',
19
+ 'documentId',
20
+ 'locale',
21
+ 'localizations',
22
+ 'created_by',
23
+ 'updated_by',
24
+ 'created_at',
25
+ 'updated_at',
26
+ 'publishedAt'
27
+ ];
28
+ const createContentSourceMapsService = (strapi)=>{
29
+ return {
30
+ get config () {
31
+ const apiConfig = strapi.config.get('api');
32
+ const config = apiConfig?.contentSourceMaps;
33
+ if (!config) {
34
+ return {
35
+ // TODO: decide what defaults would make sense
36
+ enabled: true
37
+ };
38
+ }
39
+ return config;
40
+ },
41
+ isEnabled () {
42
+ return this.config.enabled ?? true;
43
+ },
44
+ async encodeSourceMaps (data, contentType, rootId, rootModel) {
45
+ if (!this.isEnabled()) {
46
+ return;
47
+ }
48
+ const fileModel = strapi.getModel('plugin::upload.file');
49
+ function encodeEditInfo(text, key) {
50
+ const res = stega.vercelStegaCombine(text, {
51
+ key
52
+ });
53
+ return res;
54
+ }
55
+ async function encodeEntry(entryRootId, entryRootModel, entryData, model) {
56
+ if (typeof entryData !== 'object' || entryData === null || entryData === undefined) {
57
+ return;
58
+ }
59
+ Object.keys(entryData).forEach((key)=>{
60
+ const value = entryData[key];
61
+ // Skip encoding if the value is null or undefined
62
+ if (value === null || value === undefined) return;
63
+ const attribute = model.attributes[key];
64
+ if (attribute && !EXCLUDED_FIELDS.includes(key)) {
65
+ if (ENCODABLE_TYPES.includes(attribute.type)) {
66
+ entryData[key] = encodeEditInfo(value, key);
67
+ return;
68
+ }
69
+ if (attribute.type === 'component') {
70
+ const componentModel = strapi.getModel(attribute.component);
71
+ if (Array.isArray(value)) {
72
+ return value.forEach((item)=>{
73
+ return encodeEntry(entryRootId, entryRootModel, item, componentModel);
74
+ });
75
+ }
76
+ return encodeEntry(entryRootId, entryRootModel, value, componentModel);
77
+ }
78
+ if (attribute.type === 'dynamiczone' && Array.isArray(value)) {
79
+ return value.forEach((item)=>{
80
+ return encodeEntry(entryRootId, entryRootModel, item, strapi.getModel(item.__component));
81
+ });
82
+ }
83
+ if (attribute.type === 'relation') {
84
+ const relatedModel = strapi.getModel(attribute.target);
85
+ if (Array.isArray(value)) {
86
+ return value.forEach((item)=>{
87
+ return encodeEntry(item.id, relatedModel.uid, item, strapi.getModel(attribute.target));
88
+ });
89
+ }
90
+ console.log('Encoding relation. value:', value);
91
+ return encodeEntry(value.id, relatedModel.uid, value, strapi.getModel(attribute.target));
92
+ }
93
+ if (attribute.type === 'media') {
94
+ if (Array.isArray(value.data)) {
95
+ return value.data.forEach((item)=>{
96
+ return encodeEntry(entryRootId, entryRootModel, item, fileModel);
97
+ });
98
+ }
99
+ return encodeEntry(entryRootId, entryRootModel, value.data, fileModel);
100
+ }
101
+ }
102
+ });
103
+ }
104
+ if (Array.isArray(data)) {
105
+ data.forEach((item)=>this.encodeSourceMaps(item, contentType));
106
+ return;
107
+ }
108
+ if (typeof data !== 'object' || data === null) {
109
+ return;
110
+ }
111
+ const actualRootId = rootId || data.id;
112
+ const actualRootModel = rootModel || contentType.uid;
113
+ await encodeEntry(actualRootId, actualRootModel, data, contentType);
114
+ }
115
+ };
116
+ };
117
+
118
+ exports.createContentSourceMapsService = createContentSourceMapsService;
119
+ //# sourceMappingURL=content-source-maps.js.map
@@ -0,0 +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 get config() {\n const apiConfig = strapi.config.get<Core.Config.Api>('api');\n const config = apiConfig?.contentSourceMaps;\n\n if (!config) {\n return {\n // TODO: decide what defaults would make sense\n enabled: true,\n };\n }\n\n return config;\n },\n\n isEnabled(): boolean {\n return this.config.enabled ?? true;\n },\n\n async encodeSourceMaps(\n data: any,\n contentType: Struct.ContentTypeSchema,\n rootId?: any,\n rootModel?: string\n ): Promise<void> {\n if (!this.isEnabled()) {\n return;\n }\n\n const fileModel = strapi.getModel('plugin::upload.file');\n\n function encodeEditInfo(text: string, key: string): string {\n const res = vercelStegaCombine(text, {\n key,\n });\n return res;\n }\n\n async function encodeEntry(\n entryRootId: any,\n entryRootModel: string,\n entryData: any,\n model: any\n ) {\n if (typeof entryData !== 'object' || entryData === null || entryData === undefined) {\n return;\n }\n\n Object.keys(entryData).forEach((key) => {\n const value = entryData[key];\n\n // Skip encoding if the value is null or undefined\n if (value === null || value === undefined) return;\n\n const attribute = model.attributes[key];\n\n if (attribute && !EXCLUDED_FIELDS.includes(key)) {\n if (ENCODABLE_TYPES.includes(attribute.type)) {\n entryData[key] = encodeEditInfo(\n value,\n key\n // `${BASE_EDIT_URL}/${entryRootModel}/${entryRootId}`\n );\n return;\n }\n\n if (attribute.type === 'component') {\n const componentModel = strapi.getModel(attribute.component);\n\n if (Array.isArray(value)) {\n return value.forEach((item) => {\n return encodeEntry(entryRootId, entryRootModel, item, componentModel);\n });\n }\n\n return encodeEntry(entryRootId, entryRootModel, value, componentModel);\n }\n\n if (attribute.type === 'dynamiczone' && Array.isArray(value)) {\n return value.forEach((item) => {\n return encodeEntry(\n entryRootId,\n entryRootModel,\n item,\n strapi.getModel(item.__component)\n );\n });\n }\n\n if (attribute.type === 'relation') {\n const relatedModel = strapi.getModel(attribute.target);\n\n if (Array.isArray(value)) {\n return value.forEach((item: any) => {\n return encodeEntry(\n item.id,\n relatedModel.uid,\n item,\n strapi.getModel(attribute.target)\n );\n });\n }\n\n console.log('Encoding relation. value:', value);\n\n return encodeEntry(\n value.id,\n relatedModel.uid,\n value,\n strapi.getModel(attribute.target)\n );\n }\n\n if (attribute.type === 'media') {\n if (Array.isArray(value.data)) {\n return value.data.forEach((item: any) => {\n return encodeEntry(entryRootId, entryRootModel, item, fileModel);\n });\n }\n\n return encodeEntry(entryRootId, entryRootModel, value.data, fileModel);\n }\n }\n });\n }\n\n if (Array.isArray(data)) {\n data.forEach((item) => this.encodeSourceMaps(item, contentType));\n return;\n }\n\n if (typeof data !== 'object' || data === null) {\n return;\n }\n\n const actualRootId = rootId || data.id;\n const actualRootModel = rootModel || contentType.uid;\n\n await encodeEntry(actualRootId, actualRootModel, data, contentType);\n },\n };\n};\n\nexport { createContentSourceMapsService };\n"],"names":["ENCODABLE_TYPES","EXCLUDED_FIELDS","createContentSourceMapsService","strapi","config","apiConfig","get","contentSourceMaps","enabled","isEnabled","encodeSourceMaps","data","contentType","rootId","rootModel","fileModel","getModel","encodeEditInfo","text","key","res","vercelStegaCombine","encodeEntry","entryRootId","entryRootModel","entryData","model","undefined","Object","keys","forEach","value","attribute","attributes","includes","type","componentModel","component","Array","isArray","item","__component","relatedModel","target","id","uid","console","log","actualRootId","actualRootModel"],"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;AACL,QAAA,IAAIC,MAAS,CAAA,GAAA;AACX,YAAA,MAAMC,SAAYF,GAAAA,MAAAA,CAAOC,MAAM,CAACE,GAAG,CAAkB,KAAA,CAAA;AACrD,YAAA,MAAMF,SAASC,SAAWE,EAAAA,iBAAAA;AAE1B,YAAA,IAAI,CAACH,MAAQ,EAAA;gBACX,OAAO;;oBAELI,OAAS,EAAA;AACX,iBAAA;AACF;YAEA,OAAOJ,MAAAA;AACT,SAAA;AAEAK,QAAAA,SAAAA,CAAAA,GAAAA;AACE,YAAA,OAAO,IAAI,CAACL,MAAM,CAACI,OAAO,IAAI,IAAA;AAChC,SAAA;AAEA,QAAA,MAAME,kBACJC,IAAS,EACTC,WAAqC,EACrCC,MAAY,EACZC,SAAkB,EAAA;AAElB,YAAA,IAAI,CAAC,IAAI,CAACL,SAAS,EAAI,EAAA;AACrB,gBAAA;AACF;YAEA,MAAMM,SAAAA,GAAYZ,MAAOa,CAAAA,QAAQ,CAAC,qBAAA,CAAA;YAElC,SAASC,cAAAA,CAAeC,IAAY,EAAEC,GAAW,EAAA;gBAC/C,MAAMC,GAAAA,GAAMC,yBAAmBH,IAAM,EAAA;AACnCC,oBAAAA;AACF,iBAAA,CAAA;gBACA,OAAOC,GAAAA;AACT;AAEA,YAAA,eAAeE,YACbC,WAAgB,EAChBC,cAAsB,EACtBC,SAAc,EACdC,KAAU,EAAA;AAEV,gBAAA,IAAI,OAAOD,SAAc,KAAA,QAAA,IAAYA,SAAc,KAAA,IAAA,IAAQA,cAAcE,SAAW,EAAA;AAClF,oBAAA;AACF;AAEAC,gBAAAA,MAAAA,CAAOC,IAAI,CAACJ,SAAWK,CAAAA,CAAAA,OAAO,CAAC,CAACX,GAAAA,GAAAA;oBAC9B,MAAMY,KAAAA,GAAQN,SAAS,CAACN,GAAI,CAAA;;oBAG5B,IAAIY,KAAAA,KAAU,IAAQA,IAAAA,KAAAA,KAAUJ,SAAW,EAAA;AAE3C,oBAAA,MAAMK,SAAYN,GAAAA,KAAAA,CAAMO,UAAU,CAACd,GAAI,CAAA;AAEvC,oBAAA,IAAIa,SAAa,IAAA,CAAC/B,eAAgBiC,CAAAA,QAAQ,CAACf,GAAM,CAAA,EAAA;AAC/C,wBAAA,IAAInB,eAAgBkC,CAAAA,QAAQ,CAACF,SAAAA,CAAUG,IAAI,CAAG,EAAA;AAC5CV,4BAAAA,SAAS,CAACN,GAAAA,CAAI,GAAGF,cAAAA,CACfc,KACAZ,EAAAA,GAAAA,CAAAA;AAGF,4BAAA;AACF;wBAEA,IAAIa,SAAAA,CAAUG,IAAI,KAAK,WAAa,EAAA;AAClC,4BAAA,MAAMC,cAAiBjC,GAAAA,MAAAA,CAAOa,QAAQ,CAACgB,UAAUK,SAAS,CAAA;4BAE1D,IAAIC,KAAAA,CAAMC,OAAO,CAACR,KAAQ,CAAA,EAAA;gCACxB,OAAOA,KAAAA,CAAMD,OAAO,CAAC,CAACU,IAAAA,GAAAA;oCACpB,OAAOlB,WAAAA,CAAYC,WAAaC,EAAAA,cAAAA,EAAgBgB,IAAMJ,EAAAA,cAAAA,CAAAA;AACxD,iCAAA,CAAA;AACF;4BAEA,OAAOd,WAAAA,CAAYC,WAAaC,EAAAA,cAAAA,EAAgBO,KAAOK,EAAAA,cAAAA,CAAAA;AACzD;AAEA,wBAAA,IAAIJ,UAAUG,IAAI,KAAK,iBAAiBG,KAAMC,CAAAA,OAAO,CAACR,KAAQ,CAAA,EAAA;4BAC5D,OAAOA,KAAAA,CAAMD,OAAO,CAAC,CAACU,IAAAA,GAAAA;gCACpB,OAAOlB,WAAAA,CACLC,aACAC,cACAgB,EAAAA,IAAAA,EACArC,OAAOa,QAAQ,CAACwB,KAAKC,WAAW,CAAA,CAAA;AAEpC,6BAAA,CAAA;AACF;wBAEA,IAAIT,SAAAA,CAAUG,IAAI,KAAK,UAAY,EAAA;AACjC,4BAAA,MAAMO,YAAevC,GAAAA,MAAAA,CAAOa,QAAQ,CAACgB,UAAUW,MAAM,CAAA;4BAErD,IAAIL,KAAAA,CAAMC,OAAO,CAACR,KAAQ,CAAA,EAAA;gCACxB,OAAOA,KAAAA,CAAMD,OAAO,CAAC,CAACU,IAAAA,GAAAA;AACpB,oCAAA,OAAOlB,WACLkB,CAAAA,IAAAA,CAAKI,EAAE,EACPF,YAAaG,CAAAA,GAAG,EAChBL,IAAAA,EACArC,MAAOa,CAAAA,QAAQ,CAACgB,SAAAA,CAAUW,MAAM,CAAA,CAAA;AAEpC,iCAAA,CAAA;AACF;4BAEAG,OAAQC,CAAAA,GAAG,CAAC,2BAA6BhB,EAAAA,KAAAA,CAAAA;AAEzC,4BAAA,OAAOT,WACLS,CAAAA,KAAAA,CAAMa,EAAE,EACRF,YAAaG,CAAAA,GAAG,EAChBd,KAAAA,EACA5B,MAAOa,CAAAA,QAAQ,CAACgB,SAAAA,CAAUW,MAAM,CAAA,CAAA;AAEpC;wBAEA,IAAIX,SAAAA,CAAUG,IAAI,KAAK,OAAS,EAAA;AAC9B,4BAAA,IAAIG,KAAMC,CAAAA,OAAO,CAACR,KAAAA,CAAMpB,IAAI,CAAG,EAAA;AAC7B,gCAAA,OAAOoB,KAAMpB,CAAAA,IAAI,CAACmB,OAAO,CAAC,CAACU,IAAAA,GAAAA;oCACzB,OAAOlB,WAAAA,CAAYC,WAAaC,EAAAA,cAAAA,EAAgBgB,IAAMzB,EAAAA,SAAAA,CAAAA;AACxD,iCAAA,CAAA;AACF;AAEA,4BAAA,OAAOO,WAAYC,CAAAA,WAAAA,EAAaC,cAAgBO,EAAAA,KAAAA,CAAMpB,IAAI,EAAEI,SAAAA,CAAAA;AAC9D;AACF;AACF,iBAAA,CAAA;AACF;YAEA,IAAIuB,KAAAA,CAAMC,OAAO,CAAC5B,IAAO,CAAA,EAAA;gBACvBA,IAAKmB,CAAAA,OAAO,CAAC,CAACU,IAAAA,GAAS,IAAI,CAAC9B,gBAAgB,CAAC8B,IAAM5B,EAAAA,WAAAA,CAAAA,CAAAA;AACnD,gBAAA;AACF;AAEA,YAAA,IAAI,OAAOD,IAAAA,KAAS,QAAYA,IAAAA,IAAAA,KAAS,IAAM,EAAA;AAC7C,gBAAA;AACF;YAEA,MAAMqC,YAAAA,GAAenC,MAAUF,IAAAA,IAAAA,CAAKiC,EAAE;YACtC,MAAMK,eAAAA,GAAkBnC,SAAaF,IAAAA,WAAAA,CAAYiC,GAAG;YAEpD,MAAMvB,WAAAA,CAAY0B,YAAcC,EAAAA,eAAAA,EAAiBtC,IAAMC,EAAAA,WAAAA,CAAAA;AACzD;AACF,KAAA;AACF;;;;"}
@@ -0,0 +1,117 @@
1
+ import { vercelStegaCombine } from '@vercel/stega';
2
+
3
+ const ENCODABLE_TYPES = [
4
+ 'string',
5
+ 'text',
6
+ 'richtext',
7
+ 'uid',
8
+ 'enumeration',
9
+ 'email',
10
+ 'date',
11
+ 'datetime',
12
+ 'time',
13
+ 'timestamp'
14
+ ];
15
+ const EXCLUDED_FIELDS = [
16
+ 'id',
17
+ 'documentId',
18
+ 'locale',
19
+ 'localizations',
20
+ 'created_by',
21
+ 'updated_by',
22
+ 'created_at',
23
+ 'updated_at',
24
+ 'publishedAt'
25
+ ];
26
+ const createContentSourceMapsService = (strapi)=>{
27
+ return {
28
+ get config () {
29
+ const apiConfig = strapi.config.get('api');
30
+ const config = apiConfig?.contentSourceMaps;
31
+ if (!config) {
32
+ return {
33
+ // TODO: decide what defaults would make sense
34
+ enabled: true
35
+ };
36
+ }
37
+ return config;
38
+ },
39
+ isEnabled () {
40
+ return this.config.enabled ?? true;
41
+ },
42
+ async encodeSourceMaps (data, contentType, rootId, rootModel) {
43
+ if (!this.isEnabled()) {
44
+ return;
45
+ }
46
+ const fileModel = strapi.getModel('plugin::upload.file');
47
+ function encodeEditInfo(text, key) {
48
+ const res = vercelStegaCombine(text, {
49
+ key
50
+ });
51
+ return res;
52
+ }
53
+ async function encodeEntry(entryRootId, entryRootModel, entryData, model) {
54
+ if (typeof entryData !== 'object' || entryData === null || entryData === undefined) {
55
+ return;
56
+ }
57
+ Object.keys(entryData).forEach((key)=>{
58
+ const value = entryData[key];
59
+ // Skip encoding if the value is null or undefined
60
+ if (value === null || value === undefined) return;
61
+ const attribute = model.attributes[key];
62
+ if (attribute && !EXCLUDED_FIELDS.includes(key)) {
63
+ if (ENCODABLE_TYPES.includes(attribute.type)) {
64
+ entryData[key] = encodeEditInfo(value, key);
65
+ return;
66
+ }
67
+ if (attribute.type === 'component') {
68
+ const componentModel = strapi.getModel(attribute.component);
69
+ if (Array.isArray(value)) {
70
+ return value.forEach((item)=>{
71
+ return encodeEntry(entryRootId, entryRootModel, item, componentModel);
72
+ });
73
+ }
74
+ return encodeEntry(entryRootId, entryRootModel, value, componentModel);
75
+ }
76
+ if (attribute.type === 'dynamiczone' && Array.isArray(value)) {
77
+ return value.forEach((item)=>{
78
+ return encodeEntry(entryRootId, entryRootModel, item, strapi.getModel(item.__component));
79
+ });
80
+ }
81
+ if (attribute.type === 'relation') {
82
+ const relatedModel = strapi.getModel(attribute.target);
83
+ if (Array.isArray(value)) {
84
+ return value.forEach((item)=>{
85
+ return encodeEntry(item.id, relatedModel.uid, item, strapi.getModel(attribute.target));
86
+ });
87
+ }
88
+ console.log('Encoding relation. value:', value);
89
+ return encodeEntry(value.id, relatedModel.uid, value, strapi.getModel(attribute.target));
90
+ }
91
+ if (attribute.type === 'media') {
92
+ if (Array.isArray(value.data)) {
93
+ return value.data.forEach((item)=>{
94
+ return encodeEntry(entryRootId, entryRootModel, item, fileModel);
95
+ });
96
+ }
97
+ return encodeEntry(entryRootId, entryRootModel, value.data, fileModel);
98
+ }
99
+ }
100
+ });
101
+ }
102
+ if (Array.isArray(data)) {
103
+ data.forEach((item)=>this.encodeSourceMaps(item, contentType));
104
+ return;
105
+ }
106
+ if (typeof data !== 'object' || data === null) {
107
+ return;
108
+ }
109
+ const actualRootId = rootId || data.id;
110
+ const actualRootModel = rootModel || contentType.uid;
111
+ await encodeEntry(actualRootId, actualRootModel, data, contentType);
112
+ }
113
+ };
114
+ };
115
+
116
+ export { createContentSourceMapsService };
117
+ //# sourceMappingURL=content-source-maps.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"content-source-maps.mjs","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 get config() {\n const apiConfig = strapi.config.get<Core.Config.Api>('api');\n const config = apiConfig?.contentSourceMaps;\n\n if (!config) {\n return {\n // TODO: decide what defaults would make sense\n enabled: true,\n };\n }\n\n return config;\n },\n\n isEnabled(): boolean {\n return this.config.enabled ?? true;\n },\n\n async encodeSourceMaps(\n data: any,\n contentType: Struct.ContentTypeSchema,\n rootId?: any,\n rootModel?: string\n ): Promise<void> {\n if (!this.isEnabled()) {\n return;\n }\n\n const fileModel = strapi.getModel('plugin::upload.file');\n\n function encodeEditInfo(text: string, key: string): string {\n const res = vercelStegaCombine(text, {\n key,\n });\n return res;\n }\n\n async function encodeEntry(\n entryRootId: any,\n entryRootModel: string,\n entryData: any,\n model: any\n ) {\n if (typeof entryData !== 'object' || entryData === null || entryData === undefined) {\n return;\n }\n\n Object.keys(entryData).forEach((key) => {\n const value = entryData[key];\n\n // Skip encoding if the value is null or undefined\n if (value === null || value === undefined) return;\n\n const attribute = model.attributes[key];\n\n if (attribute && !EXCLUDED_FIELDS.includes(key)) {\n if (ENCODABLE_TYPES.includes(attribute.type)) {\n entryData[key] = encodeEditInfo(\n value,\n key\n // `${BASE_EDIT_URL}/${entryRootModel}/${entryRootId}`\n );\n return;\n }\n\n if (attribute.type === 'component') {\n const componentModel = strapi.getModel(attribute.component);\n\n if (Array.isArray(value)) {\n return value.forEach((item) => {\n return encodeEntry(entryRootId, entryRootModel, item, componentModel);\n });\n }\n\n return encodeEntry(entryRootId, entryRootModel, value, componentModel);\n }\n\n if (attribute.type === 'dynamiczone' && Array.isArray(value)) {\n return value.forEach((item) => {\n return encodeEntry(\n entryRootId,\n entryRootModel,\n item,\n strapi.getModel(item.__component)\n );\n });\n }\n\n if (attribute.type === 'relation') {\n const relatedModel = strapi.getModel(attribute.target);\n\n if (Array.isArray(value)) {\n return value.forEach((item: any) => {\n return encodeEntry(\n item.id,\n relatedModel.uid,\n item,\n strapi.getModel(attribute.target)\n );\n });\n }\n\n console.log('Encoding relation. value:', value);\n\n return encodeEntry(\n value.id,\n relatedModel.uid,\n value,\n strapi.getModel(attribute.target)\n );\n }\n\n if (attribute.type === 'media') {\n if (Array.isArray(value.data)) {\n return value.data.forEach((item: any) => {\n return encodeEntry(entryRootId, entryRootModel, item, fileModel);\n });\n }\n\n return encodeEntry(entryRootId, entryRootModel, value.data, fileModel);\n }\n }\n });\n }\n\n if (Array.isArray(data)) {\n data.forEach((item) => this.encodeSourceMaps(item, contentType));\n return;\n }\n\n if (typeof data !== 'object' || data === null) {\n return;\n }\n\n const actualRootId = rootId || data.id;\n const actualRootModel = rootModel || contentType.uid;\n\n await encodeEntry(actualRootId, actualRootModel, data, contentType);\n },\n };\n};\n\nexport { createContentSourceMapsService };\n"],"names":["ENCODABLE_TYPES","EXCLUDED_FIELDS","createContentSourceMapsService","strapi","config","apiConfig","get","contentSourceMaps","enabled","isEnabled","encodeSourceMaps","data","contentType","rootId","rootModel","fileModel","getModel","encodeEditInfo","text","key","res","vercelStegaCombine","encodeEntry","entryRootId","entryRootModel","entryData","model","undefined","Object","keys","forEach","value","attribute","attributes","includes","type","componentModel","component","Array","isArray","item","__component","relatedModel","target","id","uid","console","log","actualRootId","actualRootModel"],"mappings":"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"}
@@ -18,11 +18,11 @@ type GetParams = {
18
18
  type Params = SetParams & GetParams;
19
19
  interface CoreStore {
20
20
  (defaultParams: Partial<Params>): {
21
- get(params: Partial<GetParams>): Promise<unknown>;
21
+ get<T = unknown>(params: Partial<GetParams>): Promise<T>;
22
22
  set(params: Partial<SetParams>): Promise<void>;
23
23
  delete(params: Partial<GetParams>): Promise<void>;
24
24
  };
25
- get(params: GetParams): Promise<unknown>;
25
+ get<T = unknown>(params: GetParams): Promise<T>;
26
26
  set(params: SetParams): Promise<void>;
27
27
  delete(params: GetParams): Promise<void>;
28
28
  }
@@ -1 +1 @@
1
- {"version":3,"file":"core-store.d.ts","sourceRoot":"","sources":["../../src/services/core-store.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAExD,QAAA,MAAM,cAAc,EAAE,KAwBrB,CAAC;AAEF,KAAK,SAAS,GAAG;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,OAAO,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC;CACd,CAAC;AAEF,KAAK,SAAS,GAAG;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC;CACd,CAAC;AAEF,KAAK,MAAM,GAAG,SAAS,GAAG,SAAS,CAAC;AAEpC,UAAU,SAAS;IACjB,CAAC,aAAa,EAAE,OAAO,CAAC,MAAM,CAAC,GAAG;QAChC,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,SAAS,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;QAClD,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,SAAS,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;QAC/C,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,SAAS,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;KACnD,CAAC;IACF,GAAG,CAAC,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACzC,GAAG,CAAC,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACtC,MAAM,CAAC,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC1C;AAED,QAAA,MAAM,eAAe,WAAY;IAAE,EAAE,EAAE,QAAQ,CAAA;CAAE,cA+GhD,CAAC;AAEF,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,CAAC"}
1
+ {"version":3,"file":"core-store.d.ts","sourceRoot":"","sources":["../../src/services/core-store.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAExD,QAAA,MAAM,cAAc,EAAE,KAwBrB,CAAC;AAEF,KAAK,SAAS,GAAG;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,OAAO,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC;CACd,CAAC;AAEF,KAAK,SAAS,GAAG;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC;CACd,CAAC;AAEF,KAAK,MAAM,GAAG,SAAS,GAAG,SAAS,CAAC;AAEpC,UAAU,SAAS;IACjB,CAAC,aAAa,EAAE,OAAO,CAAC,MAAM,CAAC,GAAG;QAChC,GAAG,CAAC,CAAC,GAAG,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,SAAS,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;QACzD,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,SAAS,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;QAC/C,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,SAAS,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;KACnD,CAAC;IACF,GAAG,CAAC,CAAC,GAAG,OAAO,EAAE,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IAChD,GAAG,CAAC,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACtC,MAAM,CAAC,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC1C;AAED,QAAA,MAAM,eAAe,WAAY;IAAE,EAAE,EAAE,QAAQ,CAAA;CAAE,cA+GhD,CAAC;AAEF,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,CAAC"}