@strapi/core 0.0.0-experimental.964ad1796fcbb5982733a4685d58a5163943d87b → 0.0.0-experimental.97d8e30d2c8447966e01ec3e7ad8596fc4b9bc81

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 (164) hide show
  1. package/dist/Strapi.d.ts.map +1 -1
  2. package/dist/Strapi.js +2 -1
  3. package/dist/Strapi.js.map +1 -1
  4. package/dist/Strapi.mjs +2 -1
  5. package/dist/Strapi.mjs.map +1 -1
  6. package/dist/core-api/controller/index.d.ts.map +1 -1
  7. package/dist/core-api/controller/index.js +2 -1
  8. package/dist/core-api/controller/index.js.map +1 -1
  9. package/dist/core-api/controller/index.mjs +2 -1
  10. package/dist/core-api/controller/index.mjs.map +1 -1
  11. package/dist/core-api/controller/transform.d.ts +3 -2
  12. package/dist/core-api/controller/transform.d.ts.map +1 -1
  13. package/dist/core-api/controller/transform.js +13 -3
  14. package/dist/core-api/controller/transform.js.map +1 -1
  15. package/dist/core-api/controller/transform.mjs +13 -3
  16. package/dist/core-api/controller/transform.mjs.map +1 -1
  17. package/dist/core-api/routes/index.d.ts +4 -22
  18. package/dist/core-api/routes/index.d.ts.map +1 -1
  19. package/dist/core-api/routes/index.js +150 -8
  20. package/dist/core-api/routes/index.js.map +1 -1
  21. package/dist/core-api/routes/index.mjs +131 -8
  22. package/dist/core-api/routes/index.mjs.map +1 -1
  23. package/dist/core-api/routes/validation/attributes.d.ts +244 -0
  24. package/dist/core-api/routes/validation/attributes.d.ts.map +1 -0
  25. package/dist/core-api/routes/validation/attributes.js +560 -0
  26. package/dist/core-api/routes/validation/attributes.js.map +1 -0
  27. package/dist/core-api/routes/validation/attributes.mjs +521 -0
  28. package/dist/core-api/routes/validation/attributes.mjs.map +1 -0
  29. package/dist/core-api/routes/validation/common.d.ts +105 -0
  30. package/dist/core-api/routes/validation/common.d.ts.map +1 -0
  31. package/dist/core-api/routes/validation/common.js +116 -0
  32. package/dist/core-api/routes/validation/common.js.map +1 -0
  33. package/dist/core-api/routes/validation/common.mjs +95 -0
  34. package/dist/core-api/routes/validation/common.mjs.map +1 -0
  35. package/dist/core-api/routes/validation/component.d.ts +34 -0
  36. package/dist/core-api/routes/validation/component.d.ts.map +1 -0
  37. package/dist/core-api/routes/validation/component.js +45 -0
  38. package/dist/core-api/routes/validation/component.js.map +1 -0
  39. package/dist/core-api/routes/validation/component.mjs +43 -0
  40. package/dist/core-api/routes/validation/component.mjs.map +1 -0
  41. package/dist/core-api/routes/validation/constants.d.ts +8 -0
  42. package/dist/core-api/routes/validation/constants.d.ts.map +1 -0
  43. package/dist/core-api/routes/validation/constants.js +18 -0
  44. package/dist/core-api/routes/validation/constants.js.map +1 -0
  45. package/dist/core-api/routes/validation/constants.mjs +16 -0
  46. package/dist/core-api/routes/validation/constants.mjs.map +1 -0
  47. package/dist/core-api/routes/validation/content-type.d.ts +128 -0
  48. package/dist/core-api/routes/validation/content-type.d.ts.map +1 -0
  49. package/dist/core-api/routes/validation/content-type.js +201 -0
  50. package/dist/core-api/routes/validation/content-type.js.map +1 -0
  51. package/dist/core-api/routes/validation/content-type.mjs +180 -0
  52. package/dist/core-api/routes/validation/content-type.mjs.map +1 -0
  53. package/dist/core-api/routes/validation/index.d.ts +5 -0
  54. package/dist/core-api/routes/validation/index.d.ts.map +1 -0
  55. package/dist/core-api/routes/validation/mappers.d.ts +105 -0
  56. package/dist/core-api/routes/validation/mappers.d.ts.map +1 -0
  57. package/dist/core-api/routes/validation/mappers.js +273 -0
  58. package/dist/core-api/routes/validation/mappers.js.map +1 -0
  59. package/dist/core-api/routes/validation/mappers.mjs +249 -0
  60. package/dist/core-api/routes/validation/mappers.mjs.map +1 -0
  61. package/dist/core-api/routes/validation/utils.d.ts +47 -0
  62. package/dist/core-api/routes/validation/utils.d.ts.map +1 -0
  63. package/dist/core-api/routes/validation/utils.js +128 -0
  64. package/dist/core-api/routes/validation/utils.js.map +1 -0
  65. package/dist/core-api/routes/validation/utils.mjs +106 -0
  66. package/dist/core-api/routes/validation/utils.mjs.map +1 -0
  67. package/dist/domain/content-type/index.d.ts.map +1 -1
  68. package/dist/domain/content-type/index.js +17 -1
  69. package/dist/domain/content-type/index.js.map +1 -1
  70. package/dist/domain/content-type/index.mjs +17 -1
  71. package/dist/domain/content-type/index.mjs.map +1 -1
  72. package/dist/domain/module/index.d.ts.map +1 -1
  73. package/dist/domain/module/index.js +3 -0
  74. package/dist/domain/module/index.js.map +1 -1
  75. package/dist/domain/module/index.mjs +3 -0
  76. package/dist/domain/module/index.mjs.map +1 -1
  77. package/dist/factories.d.ts +3 -1
  78. package/dist/factories.d.ts.map +1 -1
  79. package/dist/factories.js +10 -2
  80. package/dist/factories.js.map +1 -1
  81. package/dist/factories.mjs +10 -3
  82. package/dist/factories.mjs.map +1 -1
  83. package/dist/loaders/plugins/index.js +1 -1
  84. package/dist/loaders/plugins/index.js.map +1 -1
  85. package/dist/loaders/plugins/index.mjs +1 -1
  86. package/dist/loaders/plugins/index.mjs.map +1 -1
  87. package/dist/middlewares/cors.d.ts +9 -1
  88. package/dist/middlewares/cors.d.ts.map +1 -1
  89. package/dist/middlewares/cors.js +39 -17
  90. package/dist/middlewares/cors.js.map +1 -1
  91. package/dist/middlewares/cors.mjs +39 -18
  92. package/dist/middlewares/cors.mjs.map +1 -1
  93. package/dist/migrations/first-published-at.d.ts +4 -0
  94. package/dist/migrations/first-published-at.d.ts.map +1 -0
  95. package/dist/migrations/first-published-at.js +51 -0
  96. package/dist/migrations/first-published-at.js.map +1 -0
  97. package/dist/migrations/first-published-at.mjs +49 -0
  98. package/dist/migrations/first-published-at.mjs.map +1 -0
  99. package/dist/migrations/index.d.ts.map +1 -1
  100. package/dist/migrations/index.js +5 -0
  101. package/dist/migrations/index.js.map +1 -1
  102. package/dist/migrations/index.mjs +5 -0
  103. package/dist/migrations/index.mjs.map +1 -1
  104. package/dist/package.json.js +14 -12
  105. package/dist/package.json.js.map +1 -1
  106. package/dist/package.json.mjs +14 -12
  107. package/dist/package.json.mjs.map +1 -1
  108. package/dist/services/content-api/index.d.ts +1 -1
  109. package/dist/services/content-api/index.d.ts.map +1 -1
  110. package/dist/services/content-api/index.js +1 -1
  111. package/dist/services/content-api/index.js.map +1 -1
  112. package/dist/services/content-api/index.mjs +2 -2
  113. package/dist/services/content-api/index.mjs.map +1 -1
  114. package/dist/services/content-source-maps.d.ts +13 -0
  115. package/dist/services/content-source-maps.d.ts.map +1 -0
  116. package/dist/services/content-source-maps.js +108 -0
  117. package/dist/services/content-source-maps.js.map +1 -0
  118. package/dist/services/content-source-maps.mjs +106 -0
  119. package/dist/services/content-source-maps.mjs.map +1 -0
  120. package/dist/services/document-service/components.d.ts +6 -1
  121. package/dist/services/document-service/components.d.ts.map +1 -1
  122. package/dist/services/document-service/components.js +97 -0
  123. package/dist/services/document-service/components.js.map +1 -1
  124. package/dist/services/document-service/components.mjs +97 -1
  125. package/dist/services/document-service/components.mjs.map +1 -1
  126. package/dist/services/document-service/first-published-at.d.ts +7 -0
  127. package/dist/services/document-service/first-published-at.d.ts.map +1 -0
  128. package/dist/services/document-service/first-published-at.js +31 -0
  129. package/dist/services/document-service/first-published-at.js.map +1 -0
  130. package/dist/services/document-service/first-published-at.mjs +28 -0
  131. package/dist/services/document-service/first-published-at.mjs.map +1 -0
  132. package/dist/services/document-service/repository.d.ts.map +1 -1
  133. package/dist/services/document-service/repository.js +11 -4
  134. package/dist/services/document-service/repository.js.map +1 -1
  135. package/dist/services/document-service/repository.mjs +12 -5
  136. package/dist/services/document-service/repository.mjs.map +1 -1
  137. package/dist/services/document-service/utils/unidirectional-relations.d.ts +19 -2
  138. package/dist/services/document-service/utils/unidirectional-relations.d.ts.map +1 -1
  139. package/dist/services/document-service/utils/unidirectional-relations.js +21 -6
  140. package/dist/services/document-service/utils/unidirectional-relations.js.map +1 -1
  141. package/dist/services/document-service/utils/unidirectional-relations.mjs +21 -6
  142. package/dist/services/document-service/utils/unidirectional-relations.mjs.map +1 -1
  143. package/dist/services/metrics/index.d.ts +1 -1
  144. package/dist/services/metrics/index.d.ts.map +1 -1
  145. package/dist/services/metrics/index.js +9 -8
  146. package/dist/services/metrics/index.js.map +1 -1
  147. package/dist/services/metrics/index.mjs +9 -8
  148. package/dist/services/metrics/index.mjs.map +1 -1
  149. package/dist/services/metrics/sender.d.ts.map +1 -1
  150. package/dist/services/metrics/sender.js +4 -3
  151. package/dist/services/metrics/sender.js.map +1 -1
  152. package/dist/services/metrics/sender.mjs +4 -3
  153. package/dist/services/metrics/sender.mjs.map +1 -1
  154. package/dist/services/server/register-routes.js +22 -2
  155. package/dist/services/server/register-routes.js.map +1 -1
  156. package/dist/services/server/register-routes.mjs +22 -2
  157. package/dist/services/server/register-routes.mjs.map +1 -1
  158. package/dist/services/server/routing.d.ts +10 -0
  159. package/dist/services/server/routing.d.ts.map +1 -1
  160. package/dist/services/server/routing.js +7 -1
  161. package/dist/services/server/routing.js.map +1 -1
  162. package/dist/services/server/routing.mjs +7 -1
  163. package/dist/services/server/routing.mjs.map +1 -1
  164. package/package.json +14 -12
@@ -1,4 +1,5 @@
1
1
  import { isNil, isPlainObject } from 'lodash/fp';
2
+ import { async } from '@strapi/utils';
2
3
 
3
4
  function isEntry(property) {
4
5
  return property === null || isPlainObject(property) || Array.isArray(property);
@@ -6,8 +7,9 @@ function isEntry(property) {
6
7
  function isDZEntries(property) {
7
8
  return Array.isArray(property);
8
9
  }
9
- const transformResponse = (resource, meta = {}, opts = {
10
- useJsonAPIFormat: false
10
+ const transformResponse = async (resource, meta = {}, opts = {
11
+ useJsonAPIFormat: false,
12
+ encodeSourceMaps: false
11
13
  })=>{
12
14
  if (isNil(resource)) {
13
15
  return resource;
@@ -15,8 +17,16 @@ const transformResponse = (resource, meta = {}, opts = {
15
17
  if (!isPlainObject(resource) && !Array.isArray(resource)) {
16
18
  throw new Error('Entry must be an object or an array of objects');
17
19
  }
20
+ // Transform pipeline functions
21
+ const applyJsonApiFormat = async (data)=>opts.useJsonAPIFormat ? transformEntry(data, opts?.contentType) : data;
22
+ const applySourceMapEncoding = async (data)=>opts.encodeSourceMaps && opts.contentType ? strapi.get('content-source-maps').encodeSourceMaps({
23
+ data,
24
+ schema: opts.contentType
25
+ }) : data;
26
+ // Process data through transformation pipeline
27
+ const data = await async.pipe(applyJsonApiFormat, applySourceMapEncoding)(resource);
18
28
  return {
19
- data: opts.useJsonAPIFormat ? transformEntry(resource, opts?.contentType) : resource,
29
+ data,
20
30
  meta
21
31
  };
22
32
  };
@@ -1 +1 @@
1
- {"version":3,"file":"transform.mjs","sources":["../../../src/core-api/controller/transform.ts"],"sourcesContent":["import { isNil, isPlainObject } from 'lodash/fp';\nimport type { UID, Struct, Data } from '@strapi/types';\n\ntype TransformedEntry = {\n id: string;\n documentId?: Data.DocumentID | null;\n attributes: Record<string, unknown>;\n};\n\ntype TransformedComponent = {\n id: string;\n [key: string]: unknown;\n};\n\ntype Entry = {\n id: string;\n documentId: Data.DocumentID | null;\n [key: string]: Entry | Entry[] | string | number | null | boolean | Date;\n};\n\nfunction isEntry(property: unknown): property is Entry | Entry[] {\n return property === null || isPlainObject(property) || Array.isArray(property);\n}\n\nfunction isDZEntries(property: unknown): property is (Entry & { __component: UID.Component })[] {\n return Array.isArray(property);\n}\n\ninterface TransformOptions {\n contentType?: Struct.ContentTypeSchema | Struct.ComponentSchema;\n /**\n * @deprecated this option is deprecated and will be removed in the next major version\n */\n useJsonAPIFormat?: boolean;\n}\n\nconst transformResponse = (\n resource: any,\n meta: unknown = {},\n opts: TransformOptions = {\n useJsonAPIFormat: false,\n }\n) => {\n if (isNil(resource)) {\n return resource;\n }\n\n if (!isPlainObject(resource) && !Array.isArray(resource)) {\n throw new Error('Entry must be an object or an array of objects');\n }\n\n return {\n data: opts.useJsonAPIFormat ? transformEntry(resource, opts?.contentType) : resource,\n meta,\n };\n};\n\nfunction transformComponent<T extends Entry | Entry[] | null>(\n data: T,\n component: Struct.ComponentSchema\n): T extends Entry[] ? TransformedComponent[] : T extends Entry ? TransformedComponent : null;\nfunction transformComponent(\n data: Entry | Entry[] | null,\n component: Struct.ComponentSchema\n): TransformedComponent | TransformedComponent[] | null {\n if (Array.isArray(data)) {\n return data.map((datum) => transformComponent(datum, component));\n }\n\n const res = transformEntry(data, component);\n\n if (isNil(res)) {\n return res;\n }\n\n const { id, attributes } = res;\n return { id, ...attributes };\n}\n\nfunction transformEntry<T extends Entry | Entry[] | null>(\n entry: T,\n type?: Struct.Schema\n): T extends Entry[] ? TransformedEntry[] : T extends Entry ? TransformedEntry : null;\nfunction transformEntry(\n entry: Entry | Entry[] | null,\n type?: Struct.Schema\n): TransformedEntry | TransformedEntry[] | null {\n if (isNil(entry)) {\n return entry;\n }\n\n if (Array.isArray(entry)) {\n return entry.map((singleEntry) => transformEntry(singleEntry, type));\n }\n\n if (!isPlainObject(entry)) {\n throw new Error('Entry must be an object');\n }\n\n const { id, documentId, ...properties } = entry;\n\n const attributeValues: Record<string, unknown> = {};\n\n for (const key of Object.keys(properties)) {\n const property = properties[key];\n const attribute = type && type.attributes[key];\n\n if (attribute && attribute.type === 'relation' && isEntry(property) && 'target' in attribute) {\n const data = transformEntry(property, strapi.contentType(attribute.target));\n\n attributeValues[key] = { data };\n } else if (attribute && attribute.type === 'component' && isEntry(property)) {\n attributeValues[key] = transformComponent(property, strapi.components[attribute.component]);\n } else if (attribute && attribute.type === 'dynamiczone' && isDZEntries(property)) {\n if (isNil(property)) {\n attributeValues[key] = property;\n }\n\n attributeValues[key] = property.map((subProperty) => {\n return transformComponent(subProperty, strapi.components[subProperty.__component]);\n });\n } else if (attribute && attribute.type === 'media' && isEntry(property)) {\n const data = transformEntry(property, strapi.contentType('plugin::upload.file'));\n\n attributeValues[key] = { data };\n } else {\n attributeValues[key] = property;\n }\n }\n\n return {\n id,\n documentId,\n attributes: attributeValues,\n };\n}\n\nexport { transformResponse };\n"],"names":["isEntry","property","isPlainObject","Array","isArray","isDZEntries","transformResponse","resource","meta","opts","useJsonAPIFormat","isNil","Error","data","transformEntry","contentType","transformComponent","component","map","datum","res","id","attributes","entry","type","singleEntry","documentId","properties","attributeValues","key","Object","keys","attribute","strapi","target","components","subProperty","__component"],"mappings":";;AAoBA,SAASA,QAAQC,QAAiB,EAAA;AAChC,IAAA,OAAOA,aAAa,IAAQC,IAAAA,aAAAA,CAAcD,QAAaE,CAAAA,IAAAA,KAAAA,CAAMC,OAAO,CAACH,QAAAA,CAAAA;AACvE;AAEA,SAASI,YAAYJ,QAAiB,EAAA;IACpC,OAAOE,KAAAA,CAAMC,OAAO,CAACH,QAAAA,CAAAA;AACvB;AAUA,MAAMK,oBAAoB,CACxBC,QAAAA,EACAC,OAAgB,EAAE,EAClBC,IAAyB,GAAA;IACvBC,gBAAkB,EAAA;AACpB,CAAC,GAAA;AAED,IAAA,IAAIC,MAAMJ,QAAW,CAAA,EAAA;QACnB,OAAOA,QAAAA;AACT;AAEA,IAAA,IAAI,CAACL,aAAcK,CAAAA,QAAAA,CAAAA,IAAa,CAACJ,KAAMC,CAAAA,OAAO,CAACG,QAAW,CAAA,EAAA;AACxD,QAAA,MAAM,IAAIK,KAAM,CAAA,gDAAA,CAAA;AAClB;IAEA,OAAO;AACLC,QAAAA,IAAAA,EAAMJ,KAAKC,gBAAgB,GAAGI,cAAeP,CAAAA,QAAAA,EAAUE,MAAMM,WAAeR,CAAAA,GAAAA,QAAAA;AAC5EC,QAAAA;AACF,KAAA;AACF;AAMA,SAASQ,kBAAAA,CACPH,IAA4B,EAC5BI,SAAiC,EAAA;IAEjC,IAAId,KAAAA,CAAMC,OAAO,CAACS,IAAO,CAAA,EAAA;AACvB,QAAA,OAAOA,KAAKK,GAAG,CAAC,CAACC,KAAAA,GAAUH,mBAAmBG,KAAOF,EAAAA,SAAAA,CAAAA,CAAAA;AACvD;IAEA,MAAMG,GAAAA,GAAMN,eAAeD,IAAMI,EAAAA,SAAAA,CAAAA;AAEjC,IAAA,IAAIN,MAAMS,GAAM,CAAA,EAAA;QACd,OAAOA,GAAAA;AACT;AAEA,IAAA,MAAM,EAAEC,EAAE,EAAEC,UAAU,EAAE,GAAGF,GAAAA;IAC3B,OAAO;AAAEC,QAAAA,EAAAA;AAAI,QAAA,GAAGC;AAAW,KAAA;AAC7B;AAMA,SAASR,cAAAA,CACPS,KAA6B,EAC7BC,IAAoB,EAAA;AAEpB,IAAA,IAAIb,MAAMY,KAAQ,CAAA,EAAA;QAChB,OAAOA,KAAAA;AACT;IAEA,IAAIpB,KAAAA,CAAMC,OAAO,CAACmB,KAAQ,CAAA,EAAA;AACxB,QAAA,OAAOA,MAAML,GAAG,CAAC,CAACO,WAAAA,GAAgBX,eAAeW,WAAaD,EAAAA,IAAAA,CAAAA,CAAAA;AAChE;IAEA,IAAI,CAACtB,cAAcqB,KAAQ,CAAA,EAAA;AACzB,QAAA,MAAM,IAAIX,KAAM,CAAA,yBAAA,CAAA;AAClB;AAEA,IAAA,MAAM,EAAES,EAAE,EAAEK,UAAU,EAAE,GAAGC,YAAY,GAAGJ,KAAAA;AAE1C,IAAA,MAAMK,kBAA2C,EAAC;AAElD,IAAA,KAAK,MAAMC,GAAAA,IAAOC,MAAOC,CAAAA,IAAI,CAACJ,UAAa,CAAA,CAAA;QACzC,MAAM1B,QAAAA,GAAW0B,UAAU,CAACE,GAAI,CAAA;AAChC,QAAA,MAAMG,SAAYR,GAAAA,IAAAA,IAAQA,IAAKF,CAAAA,UAAU,CAACO,GAAI,CAAA;QAE9C,IAAIG,SAAAA,IAAaA,UAAUR,IAAI,KAAK,cAAcxB,OAAQC,CAAAA,QAAAA,CAAAA,IAAa,YAAY+B,SAAW,EAAA;AAC5F,YAAA,MAAMnB,OAAOC,cAAeb,CAAAA,QAAAA,EAAUgC,OAAOlB,WAAW,CAACiB,UAAUE,MAAM,CAAA,CAAA;YAEzEN,eAAe,CAACC,IAAI,GAAG;AAAEhB,gBAAAA;AAAK,aAAA;AAChC,SAAA,MAAO,IAAImB,SAAaA,IAAAA,SAAAA,CAAUR,IAAI,KAAK,WAAA,IAAexB,QAAQC,QAAW,CAAA,EAAA;YAC3E2B,eAAe,CAACC,GAAI,CAAA,GAAGb,kBAAmBf,CAAAA,QAAAA,EAAUgC,OAAOE,UAAU,CAACH,SAAUf,CAAAA,SAAS,CAAC,CAAA;AAC5F,SAAA,MAAO,IAAIe,SAAaA,IAAAA,SAAAA,CAAUR,IAAI,KAAK,aAAA,IAAiBnB,YAAYJ,QAAW,CAAA,EAAA;AACjF,YAAA,IAAIU,MAAMV,QAAW,CAAA,EAAA;gBACnB2B,eAAe,CAACC,IAAI,GAAG5B,QAAAA;AACzB;AAEA2B,YAAAA,eAAe,CAACC,GAAI,CAAA,GAAG5B,QAASiB,CAAAA,GAAG,CAAC,CAACkB,WAAAA,GAAAA;AACnC,gBAAA,OAAOpB,mBAAmBoB,WAAaH,EAAAA,MAAAA,CAAOE,UAAU,CAACC,WAAAA,CAAYC,WAAW,CAAC,CAAA;AACnF,aAAA,CAAA;AACF,SAAA,MAAO,IAAIL,SAAaA,IAAAA,SAAAA,CAAUR,IAAI,KAAK,OAAA,IAAWxB,QAAQC,QAAW,CAAA,EAAA;AACvE,YAAA,MAAMY,IAAOC,GAAAA,cAAAA,CAAeb,QAAUgC,EAAAA,MAAAA,CAAOlB,WAAW,CAAC,qBAAA,CAAA,CAAA;YAEzDa,eAAe,CAACC,IAAI,GAAG;AAAEhB,gBAAAA;AAAK,aAAA;SACzB,MAAA;YACLe,eAAe,CAACC,IAAI,GAAG5B,QAAAA;AACzB;AACF;IAEA,OAAO;AACLoB,QAAAA,EAAAA;AACAK,QAAAA,UAAAA;QACAJ,UAAYM,EAAAA;AACd,KAAA;AACF;;;;"}
1
+ {"version":3,"file":"transform.mjs","sources":["../../../src/core-api/controller/transform.ts"],"sourcesContent":["import { isNil, isPlainObject } from 'lodash/fp';\nimport type { UID, Struct, Data } from '@strapi/types';\nimport { async } from '@strapi/utils';\n\ntype TransformedEntry = {\n id: string;\n documentId?: Data.DocumentID | null;\n attributes: Record<string, unknown>;\n};\n\ntype TransformedComponent = {\n id: string;\n [key: string]: unknown;\n};\n\ntype Entry = {\n id: string;\n documentId: Data.DocumentID | null;\n [key: string]: Entry | Entry[] | string | number | null | boolean | Date;\n};\n\nfunction isEntry(property: unknown): property is Entry | Entry[] {\n return property === null || isPlainObject(property) || Array.isArray(property);\n}\n\nfunction isDZEntries(property: unknown): property is (Entry & { __component: UID.Component })[] {\n return Array.isArray(property);\n}\n\ninterface TransformOptions {\n contentType?: Struct.ContentTypeSchema | Struct.ComponentSchema;\n /**\n * @deprecated this option is deprecated and will be removed in the next major version\n */\n useJsonAPIFormat?: boolean;\n encodeSourceMaps?: boolean;\n}\n\nconst transformResponse = async (\n resource: any,\n meta: unknown = {},\n opts: TransformOptions = {\n useJsonAPIFormat: false,\n encodeSourceMaps: false,\n }\n) => {\n if (isNil(resource)) {\n return resource;\n }\n\n if (!isPlainObject(resource) && !Array.isArray(resource)) {\n throw new Error('Entry must be an object or an array of objects');\n }\n\n // Transform pipeline functions\n const applyJsonApiFormat = async (data: any) =>\n opts.useJsonAPIFormat ? transformEntry(data, opts?.contentType) : data;\n\n const applySourceMapEncoding = async (data: any) =>\n opts.encodeSourceMaps && opts.contentType\n ? strapi.get('content-source-maps').encodeSourceMaps({ data, schema: opts.contentType })\n : data;\n\n // Process data through transformation pipeline\n const data = await async.pipe(applyJsonApiFormat, applySourceMapEncoding)(resource);\n\n return {\n data,\n meta,\n };\n};\n\nfunction transformComponent<T extends Entry | Entry[] | null>(\n data: T,\n component: Struct.ComponentSchema\n): T extends Entry[] ? TransformedComponent[] : T extends Entry ? TransformedComponent : null;\nfunction transformComponent(\n data: Entry | Entry[] | null,\n component: Struct.ComponentSchema\n): TransformedComponent | TransformedComponent[] | null {\n if (Array.isArray(data)) {\n return data.map((datum) => transformComponent(datum, component));\n }\n\n const res = transformEntry(data, component);\n\n if (isNil(res)) {\n return res;\n }\n\n const { id, attributes } = res;\n return { id, ...attributes };\n}\n\nfunction transformEntry<T extends Entry | Entry[] | null>(\n entry: T,\n type?: Struct.Schema\n): T extends Entry[] ? TransformedEntry[] : T extends Entry ? TransformedEntry : null;\nfunction transformEntry(\n entry: Entry | Entry[] | null,\n type?: Struct.Schema\n): TransformedEntry | TransformedEntry[] | null {\n if (isNil(entry)) {\n return entry;\n }\n\n if (Array.isArray(entry)) {\n return entry.map((singleEntry) => transformEntry(singleEntry, type));\n }\n\n if (!isPlainObject(entry)) {\n throw new Error('Entry must be an object');\n }\n\n const { id, documentId, ...properties } = entry;\n\n const attributeValues: Record<string, unknown> = {};\n\n for (const key of Object.keys(properties)) {\n const property = properties[key];\n const attribute = type && type.attributes[key];\n\n if (attribute && attribute.type === 'relation' && isEntry(property) && 'target' in attribute) {\n const data = transformEntry(property, strapi.contentType(attribute.target));\n\n attributeValues[key] = { data };\n } else if (attribute && attribute.type === 'component' && isEntry(property)) {\n attributeValues[key] = transformComponent(property, strapi.components[attribute.component]);\n } else if (attribute && attribute.type === 'dynamiczone' && isDZEntries(property)) {\n if (isNil(property)) {\n attributeValues[key] = property;\n }\n\n attributeValues[key] = property.map((subProperty) => {\n return transformComponent(subProperty, strapi.components[subProperty.__component]);\n });\n } else if (attribute && attribute.type === 'media' && isEntry(property)) {\n const data = transformEntry(property, strapi.contentType('plugin::upload.file'));\n\n attributeValues[key] = { data };\n } else {\n attributeValues[key] = property;\n }\n }\n\n return {\n id,\n documentId,\n attributes: attributeValues,\n };\n}\n\nexport { transformResponse };\n"],"names":["isEntry","property","isPlainObject","Array","isArray","isDZEntries","transformResponse","resource","meta","opts","useJsonAPIFormat","encodeSourceMaps","isNil","Error","applyJsonApiFormat","data","transformEntry","contentType","applySourceMapEncoding","strapi","get","schema","async","pipe","transformComponent","component","map","datum","res","id","attributes","entry","type","singleEntry","documentId","properties","attributeValues","key","Object","keys","attribute","target","components","subProperty","__component"],"mappings":"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"}
@@ -1,24 +1,6 @@
1
- import type { Schema } from '@strapi/types';
2
- export declare const createRoutes: ({ contentType }: {
1
+ import type { Core, Schema } from '@strapi/types';
2
+ export declare const createRoutes: ({ strapi, contentType, }: {
3
+ strapi: Core.Strapi;
3
4
  contentType: Schema.ContentType;
4
- }) => {
5
- find: {
6
- method: string;
7
- path: string;
8
- handler: string;
9
- config: {};
10
- };
11
- update: {
12
- method: string;
13
- path: string;
14
- handler: string;
15
- config: {};
16
- };
17
- delete: {
18
- method: string;
19
- path: string;
20
- handler: string;
21
- config: {};
22
- };
23
- };
5
+ }) => Record<string, Partial<Core.Route>>;
24
6
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core-api/routes/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAE5C,eAAO,MAAM,YAAY,oBAAqB;IAAE,WAAW,EAAE,OAAO,WAAW,CAAA;CAAE;;;;;;;;;;;;;;;;;;;CAMhF,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core-api/routes/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAQlD,eAAO,MAAM,YAAY,6BAGtB;IACD,MAAM,EAAE,KAAK,MAAM,CAAC;IACpB,WAAW,EAAE,OAAO,WAAW,CAAC;CACjC,wCAMA,CAAC"}
@@ -1,69 +1,211 @@
1
1
  'use strict';
2
2
 
3
3
  var strapiUtils = require('@strapi/utils');
4
+ var z = require('zod/v4');
5
+ var contentType = require('./validation/content-type.js');
4
6
 
5
- const createRoutes = ({ contentType })=>{
7
+ function _interopNamespaceDefault(e) {
8
+ var n = Object.create(null);
9
+ if (e) {
10
+ Object.keys(e).forEach(function (k) {
11
+ if (k !== 'default') {
12
+ var d = Object.getOwnPropertyDescriptor(e, k);
13
+ Object.defineProperty(n, k, d.get ? d : {
14
+ enumerable: true,
15
+ get: function () { return e[k]; }
16
+ });
17
+ }
18
+ });
19
+ }
20
+ n.default = e;
21
+ return Object.freeze(n);
22
+ }
23
+
24
+ var z__namespace = /*#__PURE__*/_interopNamespaceDefault(z);
25
+
26
+ const createRoutes = ({ strapi: strapi1, contentType })=>{
6
27
  if (strapiUtils.contentTypes.isSingleType(contentType)) {
7
- return getSingleTypeRoutes(contentType);
28
+ return getSingleTypeRoutes(contentType, strapi1);
8
29
  }
9
- return getCollectionTypeRoutes(contentType);
30
+ return getCollectionTypeRoutes(contentType, strapi1);
10
31
  };
11
- const getSingleTypeRoutes = ({ uid, info })=>{
32
+ const getSingleTypeRoutes = (schema, strapi1)=>{
33
+ const { uid, info } = schema;
34
+ const validator = new contentType.CoreContentTypeRouteValidator(strapi1, uid);
35
+ const conditionalQueryParams = getConditionalQueryParams(schema);
12
36
  return {
13
37
  find: {
14
38
  method: 'GET',
15
39
  path: `/${info.singularName}`,
16
40
  handler: `${uid}.find`,
41
+ request: {
42
+ query: validator.queryParams([
43
+ 'fields',
44
+ 'populate',
45
+ 'filters',
46
+ ...conditionalQueryParams
47
+ ])
48
+ },
49
+ response: z__namespace.object({
50
+ data: validator.document
51
+ }),
17
52
  config: {}
18
53
  },
19
54
  update: {
20
55
  method: 'PUT',
21
56
  path: `/${info.singularName}`,
22
57
  handler: `${uid}.update`,
58
+ request: {
59
+ query: validator.queryParams([
60
+ 'fields',
61
+ 'populate',
62
+ ...conditionalQueryParams
63
+ ]),
64
+ body: {
65
+ 'application/json': validator.partialBody
66
+ }
67
+ },
68
+ response: z__namespace.object({
69
+ data: validator.document
70
+ }),
23
71
  config: {}
24
72
  },
25
73
  delete: {
26
74
  method: 'DELETE',
27
75
  path: `/${info.singularName}`,
28
76
  handler: `${uid}.delete`,
77
+ request: {
78
+ query: validator.queryParams([
79
+ 'fields',
80
+ 'populate',
81
+ ...conditionalQueryParams
82
+ ])
83
+ },
84
+ response: z__namespace.object({
85
+ data: validator.document
86
+ }),
29
87
  config: {}
30
88
  }
31
89
  };
32
90
  };
33
- const getCollectionTypeRoutes = ({ uid, info })=>{
91
+ const getCollectionTypeRoutes = (schema, strapi1)=>{
92
+ const { uid, info } = schema;
93
+ const validator = new contentType.CoreContentTypeRouteValidator(strapi1, uid);
94
+ const conditionalQueryParams = getConditionalQueryParams(schema);
34
95
  return {
35
96
  find: {
36
97
  method: 'GET',
37
98
  path: `/${info.pluralName}`,
38
99
  handler: `${uid}.find`,
100
+ request: {
101
+ query: validator.queryParams([
102
+ 'fields',
103
+ 'filters',
104
+ '_q',
105
+ 'pagination',
106
+ 'sort',
107
+ 'populate',
108
+ ...conditionalQueryParams
109
+ ])
110
+ },
111
+ response: z__namespace.object({
112
+ data: validator.documents
113
+ }),
39
114
  config: {}
40
115
  },
41
116
  findOne: {
42
117
  method: 'GET',
43
118
  path: `/${info.pluralName}/:id`,
44
119
  handler: `${uid}.findOne`,
45
- config: {}
120
+ request: {
121
+ params: {
122
+ id: validator.documentID
123
+ },
124
+ query: validator.queryParams([
125
+ 'fields',
126
+ 'populate',
127
+ 'filters',
128
+ 'sort',
129
+ ...conditionalQueryParams
130
+ ])
131
+ },
132
+ response: z__namespace.object({
133
+ data: validator.document
134
+ })
46
135
  },
47
136
  create: {
48
137
  method: 'POST',
49
138
  path: `/${info.pluralName}`,
50
139
  handler: `${uid}.create`,
140
+ request: {
141
+ query: validator.queryParams([
142
+ 'fields',
143
+ 'populate',
144
+ ...conditionalQueryParams
145
+ ]),
146
+ body: {
147
+ 'application/json': validator.body
148
+ }
149
+ },
150
+ response: z__namespace.object({
151
+ data: validator.document
152
+ }),
51
153
  config: {}
52
154
  },
53
155
  update: {
54
156
  method: 'PUT',
55
157
  path: `/${info.pluralName}/:id`,
56
158
  handler: `${uid}.update`,
57
- config: {}
159
+ request: {
160
+ query: validator.queryParams([
161
+ 'fields',
162
+ 'populate',
163
+ ...conditionalQueryParams
164
+ ]),
165
+ params: {
166
+ id: validator.documentID
167
+ },
168
+ body: {
169
+ 'application/json': validator.partialBody
170
+ }
171
+ },
172
+ response: z__namespace.object({
173
+ data: validator.document
174
+ })
58
175
  },
59
176
  delete: {
60
177
  method: 'DELETE',
61
178
  path: `/${info.pluralName}/:id`,
62
179
  handler: `${uid}.delete`,
63
- config: {}
180
+ request: {
181
+ query: validator.queryParams([
182
+ 'fields',
183
+ 'populate',
184
+ 'filters',
185
+ ...conditionalQueryParams
186
+ ]),
187
+ params: {
188
+ id: validator.documentID
189
+ }
190
+ },
191
+ response: z__namespace.object({
192
+ data: validator.document
193
+ })
64
194
  }
65
195
  };
66
196
  };
197
+ const getConditionalQueryParams = (schema)=>{
198
+ const isLocalized = strapi.plugin('i18n').service('content-types').isLocalizedContentType(schema);
199
+ const hasDraftAndPublish = strapiUtils.contentTypes.hasDraftAndPublish(schema);
200
+ return [
201
+ ...isLocalized ? [
202
+ 'locale'
203
+ ] : [],
204
+ ...hasDraftAndPublish ? [
205
+ 'status'
206
+ ] : []
207
+ ];
208
+ };
67
209
 
68
210
  exports.createRoutes = createRoutes;
69
211
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../src/core-api/routes/index.ts"],"sourcesContent":["import { contentTypes as contentTypeUtils } from '@strapi/utils';\nimport type { Schema } from '@strapi/types';\n\nexport const createRoutes = ({ contentType }: { contentType: Schema.ContentType }) => {\n if (contentTypeUtils.isSingleType(contentType)) {\n return getSingleTypeRoutes(contentType);\n }\n\n return getCollectionTypeRoutes(contentType);\n};\n\nconst getSingleTypeRoutes = ({ uid, info }: Schema.ContentType) => {\n return {\n find: {\n method: 'GET',\n path: `/${info.singularName}`,\n handler: `${uid}.find`,\n config: {},\n },\n update: {\n method: 'PUT',\n path: `/${info.singularName}`,\n handler: `${uid}.update`,\n config: {},\n },\n delete: {\n method: 'DELETE',\n path: `/${info.singularName}`,\n handler: `${uid}.delete`,\n config: {},\n },\n };\n};\n\nconst getCollectionTypeRoutes = ({ uid, info }: Schema.ContentType) => {\n return {\n find: {\n method: 'GET',\n path: `/${info.pluralName}`,\n handler: `${uid}.find`,\n config: {},\n },\n findOne: {\n method: 'GET',\n path: `/${info.pluralName}/:id`,\n handler: `${uid}.findOne`,\n config: {},\n },\n create: {\n method: 'POST',\n path: `/${info.pluralName}`,\n handler: `${uid}.create`,\n config: {},\n },\n update: {\n method: 'PUT',\n path: `/${info.pluralName}/:id`,\n handler: `${uid}.update`,\n config: {},\n },\n delete: {\n method: 'DELETE',\n path: `/${info.pluralName}/:id`,\n handler: `${uid}.delete`,\n config: {},\n },\n };\n};\n"],"names":["createRoutes","contentType","contentTypeUtils","isSingleType","getSingleTypeRoutes","getCollectionTypeRoutes","uid","info","find","method","path","singularName","handler","config","update","delete","pluralName","findOne","create"],"mappings":";;;;AAGaA,MAAAA,YAAAA,GAAe,CAAC,EAAEC,WAAW,EAAuC,GAAA;IAC/E,IAAIC,wBAAAA,CAAiBC,YAAY,CAACF,WAAc,CAAA,EAAA;AAC9C,QAAA,OAAOG,mBAAoBH,CAAAA,WAAAA,CAAAA;AAC7B;AAEA,IAAA,OAAOI,uBAAwBJ,CAAAA,WAAAA,CAAAA;AACjC;AAEA,MAAMG,sBAAsB,CAAC,EAAEE,GAAG,EAAEC,IAAI,EAAsB,GAAA;IAC5D,OAAO;QACLC,IAAM,EAAA;YACJC,MAAQ,EAAA,KAAA;AACRC,YAAAA,IAAAA,EAAM,CAAC,CAAC,EAAEH,IAAKI,CAAAA,YAAY,CAAC,CAAC;AAC7BC,YAAAA,OAAAA,EAAS,CAAC,EAAEN,GAAI,CAAA,KAAK,CAAC;AACtBO,YAAAA,MAAAA,EAAQ;AACV,SAAA;QACAC,MAAQ,EAAA;YACNL,MAAQ,EAAA,KAAA;AACRC,YAAAA,IAAAA,EAAM,CAAC,CAAC,EAAEH,IAAKI,CAAAA,YAAY,CAAC,CAAC;AAC7BC,YAAAA,OAAAA,EAAS,CAAC,EAAEN,GAAI,CAAA,OAAO,CAAC;AACxBO,YAAAA,MAAAA,EAAQ;AACV,SAAA;QACAE,MAAQ,EAAA;YACNN,MAAQ,EAAA,QAAA;AACRC,YAAAA,IAAAA,EAAM,CAAC,CAAC,EAAEH,IAAKI,CAAAA,YAAY,CAAC,CAAC;AAC7BC,YAAAA,OAAAA,EAAS,CAAC,EAAEN,GAAI,CAAA,OAAO,CAAC;AACxBO,YAAAA,MAAAA,EAAQ;AACV;AACF,KAAA;AACF,CAAA;AAEA,MAAMR,0BAA0B,CAAC,EAAEC,GAAG,EAAEC,IAAI,EAAsB,GAAA;IAChE,OAAO;QACLC,IAAM,EAAA;YACJC,MAAQ,EAAA,KAAA;AACRC,YAAAA,IAAAA,EAAM,CAAC,CAAC,EAAEH,IAAKS,CAAAA,UAAU,CAAC,CAAC;AAC3BJ,YAAAA,OAAAA,EAAS,CAAC,EAAEN,GAAI,CAAA,KAAK,CAAC;AACtBO,YAAAA,MAAAA,EAAQ;AACV,SAAA;QACAI,OAAS,EAAA;YACPR,MAAQ,EAAA,KAAA;AACRC,YAAAA,IAAAA,EAAM,CAAC,CAAC,EAAEH,KAAKS,UAAU,CAAC,IAAI,CAAC;AAC/BJ,YAAAA,OAAAA,EAAS,CAAC,EAAEN,GAAI,CAAA,QAAQ,CAAC;AACzBO,YAAAA,MAAAA,EAAQ;AACV,SAAA;QACAK,MAAQ,EAAA;YACNT,MAAQ,EAAA,MAAA;AACRC,YAAAA,IAAAA,EAAM,CAAC,CAAC,EAAEH,IAAKS,CAAAA,UAAU,CAAC,CAAC;AAC3BJ,YAAAA,OAAAA,EAAS,CAAC,EAAEN,GAAI,CAAA,OAAO,CAAC;AACxBO,YAAAA,MAAAA,EAAQ;AACV,SAAA;QACAC,MAAQ,EAAA;YACNL,MAAQ,EAAA,KAAA;AACRC,YAAAA,IAAAA,EAAM,CAAC,CAAC,EAAEH,KAAKS,UAAU,CAAC,IAAI,CAAC;AAC/BJ,YAAAA,OAAAA,EAAS,CAAC,EAAEN,GAAI,CAAA,OAAO,CAAC;AACxBO,YAAAA,MAAAA,EAAQ;AACV,SAAA;QACAE,MAAQ,EAAA;YACNN,MAAQ,EAAA,QAAA;AACRC,YAAAA,IAAAA,EAAM,CAAC,CAAC,EAAEH,KAAKS,UAAU,CAAC,IAAI,CAAC;AAC/BJ,YAAAA,OAAAA,EAAS,CAAC,EAAEN,GAAI,CAAA,OAAO,CAAC;AACxBO,YAAAA,MAAAA,EAAQ;AACV;AACF,KAAA;AACF,CAAA;;;;"}
1
+ {"version":3,"file":"index.js","sources":["../../../src/core-api/routes/index.ts"],"sourcesContent":["import type { Core, Schema } from '@strapi/types';\n\nimport { contentTypes, contentTypes as contentTypeUtils } from '@strapi/utils';\nimport * as z from 'zod/v4';\nimport type { QueryParam } from './validation/content-type';\n\nimport { CoreContentTypeRouteValidator } from './validation';\n\nexport const createRoutes = ({\n strapi,\n contentType,\n}: {\n strapi: Core.Strapi;\n contentType: Schema.ContentType;\n}) => {\n if (contentTypeUtils.isSingleType(contentType)) {\n return getSingleTypeRoutes(contentType, strapi);\n }\n\n return getCollectionTypeRoutes(contentType, strapi);\n};\n\nconst getSingleTypeRoutes = (\n schema: Schema.ContentType,\n strapi: Core.Strapi\n): Record<string, Partial<Core.Route>> => {\n const { uid, info } = schema;\n\n const validator = new CoreContentTypeRouteValidator(strapi, uid);\n const conditionalQueryParams = getConditionalQueryParams(schema);\n\n return {\n find: {\n method: 'GET',\n path: `/${info.singularName}`,\n handler: `${uid}.find`,\n request: {\n query: validator.queryParams(['fields', 'populate', 'filters', ...conditionalQueryParams]),\n },\n response: z.object({ data: validator.document }),\n config: {},\n },\n update: {\n method: 'PUT',\n path: `/${info.singularName}`,\n handler: `${uid}.update`,\n request: {\n query: validator.queryParams(['fields', 'populate', ...conditionalQueryParams]),\n body: { 'application/json': validator.partialBody },\n },\n response: z.object({ data: validator.document }),\n config: {},\n },\n delete: {\n method: 'DELETE',\n path: `/${info.singularName}`,\n handler: `${uid}.delete`,\n request: {\n query: validator.queryParams(['fields', 'populate', ...conditionalQueryParams]),\n },\n response: z.object({ data: validator.document }),\n config: {},\n },\n };\n};\n\nconst getCollectionTypeRoutes = (\n schema: Schema.ContentType,\n strapi: Core.Strapi\n): Record<string, Partial<Core.Route>> => {\n const { uid, info } = schema;\n\n const validator = new CoreContentTypeRouteValidator(strapi, uid);\n const conditionalQueryParams = getConditionalQueryParams(schema);\n\n return {\n find: {\n method: 'GET',\n path: `/${info.pluralName}`,\n handler: `${uid}.find`,\n request: {\n query: validator.queryParams([\n 'fields',\n 'filters',\n '_q',\n 'pagination',\n 'sort',\n 'populate',\n ...conditionalQueryParams,\n ]),\n },\n response: z.object({ data: validator.documents }),\n config: {},\n },\n findOne: {\n method: 'GET',\n path: `/${info.pluralName}/:id`,\n handler: `${uid}.findOne`,\n request: {\n params: { id: validator.documentID },\n query: validator.queryParams([\n 'fields',\n 'populate',\n 'filters',\n 'sort',\n ...conditionalQueryParams,\n ]),\n },\n response: z.object({ data: validator.document }),\n },\n create: {\n method: 'POST',\n path: `/${info.pluralName}`,\n handler: `${uid}.create`,\n request: {\n query: validator.queryParams(['fields', 'populate', ...conditionalQueryParams]),\n body: { 'application/json': validator.body },\n },\n response: z.object({ data: validator.document }),\n config: {},\n },\n update: {\n method: 'PUT',\n path: `/${info.pluralName}/:id`,\n handler: `${uid}.update`,\n request: {\n query: validator.queryParams(['fields', 'populate', ...conditionalQueryParams]),\n params: { id: validator.documentID },\n body: { 'application/json': validator.partialBody },\n },\n response: z.object({ data: validator.document }),\n },\n delete: {\n method: 'DELETE',\n path: `/${info.pluralName}/:id`,\n handler: `${uid}.delete`,\n request: {\n query: validator.queryParams(['fields', 'populate', 'filters', ...conditionalQueryParams]),\n params: { id: validator.documentID },\n },\n response: z.object({ data: validator.document }),\n },\n };\n};\n\nconst getConditionalQueryParams = (schema: Schema.ContentType) => {\n const isLocalized = strapi.plugin('i18n').service('content-types').isLocalizedContentType(schema);\n const hasDraftAndPublish = contentTypes.hasDraftAndPublish(schema);\n\n return [\n ...(isLocalized ? ['locale'] : []),\n ...(hasDraftAndPublish ? ['status'] : []),\n ] as QueryParam[];\n};\n"],"names":["createRoutes","strapi","contentType","contentTypeUtils","isSingleType","getSingleTypeRoutes","getCollectionTypeRoutes","schema","uid","info","validator","CoreContentTypeRouteValidator","conditionalQueryParams","getConditionalQueryParams","find","method","path","singularName","handler","request","query","queryParams","response","z","object","data","document","config","update","body","partialBody","delete","pluralName","documents","findOne","params","id","documentID","create","isLocalized","plugin","service","isLocalizedContentType","hasDraftAndPublish","contentTypes"],"mappings":"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"}
@@ -1,67 +1,190 @@
1
1
  import { contentTypes } from '@strapi/utils';
2
+ import * as z from 'zod/v4';
3
+ import { CoreContentTypeRouteValidator } from './validation/content-type.mjs';
2
4
 
3
- const createRoutes = ({ contentType })=>{
5
+ const createRoutes = ({ strapi: strapi1, contentType })=>{
4
6
  if (contentTypes.isSingleType(contentType)) {
5
- return getSingleTypeRoutes(contentType);
7
+ return getSingleTypeRoutes(contentType, strapi1);
6
8
  }
7
- return getCollectionTypeRoutes(contentType);
9
+ return getCollectionTypeRoutes(contentType, strapi1);
8
10
  };
9
- const getSingleTypeRoutes = ({ uid, info })=>{
11
+ const getSingleTypeRoutes = (schema, strapi1)=>{
12
+ const { uid, info } = schema;
13
+ const validator = new CoreContentTypeRouteValidator(strapi1, uid);
14
+ const conditionalQueryParams = getConditionalQueryParams(schema);
10
15
  return {
11
16
  find: {
12
17
  method: 'GET',
13
18
  path: `/${info.singularName}`,
14
19
  handler: `${uid}.find`,
20
+ request: {
21
+ query: validator.queryParams([
22
+ 'fields',
23
+ 'populate',
24
+ 'filters',
25
+ ...conditionalQueryParams
26
+ ])
27
+ },
28
+ response: z.object({
29
+ data: validator.document
30
+ }),
15
31
  config: {}
16
32
  },
17
33
  update: {
18
34
  method: 'PUT',
19
35
  path: `/${info.singularName}`,
20
36
  handler: `${uid}.update`,
37
+ request: {
38
+ query: validator.queryParams([
39
+ 'fields',
40
+ 'populate',
41
+ ...conditionalQueryParams
42
+ ]),
43
+ body: {
44
+ 'application/json': validator.partialBody
45
+ }
46
+ },
47
+ response: z.object({
48
+ data: validator.document
49
+ }),
21
50
  config: {}
22
51
  },
23
52
  delete: {
24
53
  method: 'DELETE',
25
54
  path: `/${info.singularName}`,
26
55
  handler: `${uid}.delete`,
56
+ request: {
57
+ query: validator.queryParams([
58
+ 'fields',
59
+ 'populate',
60
+ ...conditionalQueryParams
61
+ ])
62
+ },
63
+ response: z.object({
64
+ data: validator.document
65
+ }),
27
66
  config: {}
28
67
  }
29
68
  };
30
69
  };
31
- const getCollectionTypeRoutes = ({ uid, info })=>{
70
+ const getCollectionTypeRoutes = (schema, strapi1)=>{
71
+ const { uid, info } = schema;
72
+ const validator = new CoreContentTypeRouteValidator(strapi1, uid);
73
+ const conditionalQueryParams = getConditionalQueryParams(schema);
32
74
  return {
33
75
  find: {
34
76
  method: 'GET',
35
77
  path: `/${info.pluralName}`,
36
78
  handler: `${uid}.find`,
79
+ request: {
80
+ query: validator.queryParams([
81
+ 'fields',
82
+ 'filters',
83
+ '_q',
84
+ 'pagination',
85
+ 'sort',
86
+ 'populate',
87
+ ...conditionalQueryParams
88
+ ])
89
+ },
90
+ response: z.object({
91
+ data: validator.documents
92
+ }),
37
93
  config: {}
38
94
  },
39
95
  findOne: {
40
96
  method: 'GET',
41
97
  path: `/${info.pluralName}/:id`,
42
98
  handler: `${uid}.findOne`,
43
- config: {}
99
+ request: {
100
+ params: {
101
+ id: validator.documentID
102
+ },
103
+ query: validator.queryParams([
104
+ 'fields',
105
+ 'populate',
106
+ 'filters',
107
+ 'sort',
108
+ ...conditionalQueryParams
109
+ ])
110
+ },
111
+ response: z.object({
112
+ data: validator.document
113
+ })
44
114
  },
45
115
  create: {
46
116
  method: 'POST',
47
117
  path: `/${info.pluralName}`,
48
118
  handler: `${uid}.create`,
119
+ request: {
120
+ query: validator.queryParams([
121
+ 'fields',
122
+ 'populate',
123
+ ...conditionalQueryParams
124
+ ]),
125
+ body: {
126
+ 'application/json': validator.body
127
+ }
128
+ },
129
+ response: z.object({
130
+ data: validator.document
131
+ }),
49
132
  config: {}
50
133
  },
51
134
  update: {
52
135
  method: 'PUT',
53
136
  path: `/${info.pluralName}/:id`,
54
137
  handler: `${uid}.update`,
55
- config: {}
138
+ request: {
139
+ query: validator.queryParams([
140
+ 'fields',
141
+ 'populate',
142
+ ...conditionalQueryParams
143
+ ]),
144
+ params: {
145
+ id: validator.documentID
146
+ },
147
+ body: {
148
+ 'application/json': validator.partialBody
149
+ }
150
+ },
151
+ response: z.object({
152
+ data: validator.document
153
+ })
56
154
  },
57
155
  delete: {
58
156
  method: 'DELETE',
59
157
  path: `/${info.pluralName}/:id`,
60
158
  handler: `${uid}.delete`,
61
- config: {}
159
+ request: {
160
+ query: validator.queryParams([
161
+ 'fields',
162
+ 'populate',
163
+ 'filters',
164
+ ...conditionalQueryParams
165
+ ]),
166
+ params: {
167
+ id: validator.documentID
168
+ }
169
+ },
170
+ response: z.object({
171
+ data: validator.document
172
+ })
62
173
  }
63
174
  };
64
175
  };
176
+ const getConditionalQueryParams = (schema)=>{
177
+ const isLocalized = strapi.plugin('i18n').service('content-types').isLocalizedContentType(schema);
178
+ const hasDraftAndPublish = contentTypes.hasDraftAndPublish(schema);
179
+ return [
180
+ ...isLocalized ? [
181
+ 'locale'
182
+ ] : [],
183
+ ...hasDraftAndPublish ? [
184
+ 'status'
185
+ ] : []
186
+ ];
187
+ };
65
188
 
66
189
  export { createRoutes };
67
190
  //# sourceMappingURL=index.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","sources":["../../../src/core-api/routes/index.ts"],"sourcesContent":["import { contentTypes as contentTypeUtils } from '@strapi/utils';\nimport type { Schema } from '@strapi/types';\n\nexport const createRoutes = ({ contentType }: { contentType: Schema.ContentType }) => {\n if (contentTypeUtils.isSingleType(contentType)) {\n return getSingleTypeRoutes(contentType);\n }\n\n return getCollectionTypeRoutes(contentType);\n};\n\nconst getSingleTypeRoutes = ({ uid, info }: Schema.ContentType) => {\n return {\n find: {\n method: 'GET',\n path: `/${info.singularName}`,\n handler: `${uid}.find`,\n config: {},\n },\n update: {\n method: 'PUT',\n path: `/${info.singularName}`,\n handler: `${uid}.update`,\n config: {},\n },\n delete: {\n method: 'DELETE',\n path: `/${info.singularName}`,\n handler: `${uid}.delete`,\n config: {},\n },\n };\n};\n\nconst getCollectionTypeRoutes = ({ uid, info }: Schema.ContentType) => {\n return {\n find: {\n method: 'GET',\n path: `/${info.pluralName}`,\n handler: `${uid}.find`,\n config: {},\n },\n findOne: {\n method: 'GET',\n path: `/${info.pluralName}/:id`,\n handler: `${uid}.findOne`,\n config: {},\n },\n create: {\n method: 'POST',\n path: `/${info.pluralName}`,\n handler: `${uid}.create`,\n config: {},\n },\n update: {\n method: 'PUT',\n path: `/${info.pluralName}/:id`,\n handler: `${uid}.update`,\n config: {},\n },\n delete: {\n method: 'DELETE',\n path: `/${info.pluralName}/:id`,\n handler: `${uid}.delete`,\n config: {},\n },\n };\n};\n"],"names":["createRoutes","contentType","contentTypeUtils","isSingleType","getSingleTypeRoutes","getCollectionTypeRoutes","uid","info","find","method","path","singularName","handler","config","update","delete","pluralName","findOne","create"],"mappings":";;AAGaA,MAAAA,YAAAA,GAAe,CAAC,EAAEC,WAAW,EAAuC,GAAA;IAC/E,IAAIC,YAAAA,CAAiBC,YAAY,CAACF,WAAc,CAAA,EAAA;AAC9C,QAAA,OAAOG,mBAAoBH,CAAAA,WAAAA,CAAAA;AAC7B;AAEA,IAAA,OAAOI,uBAAwBJ,CAAAA,WAAAA,CAAAA;AACjC;AAEA,MAAMG,sBAAsB,CAAC,EAAEE,GAAG,EAAEC,IAAI,EAAsB,GAAA;IAC5D,OAAO;QACLC,IAAM,EAAA;YACJC,MAAQ,EAAA,KAAA;AACRC,YAAAA,IAAAA,EAAM,CAAC,CAAC,EAAEH,IAAKI,CAAAA,YAAY,CAAC,CAAC;AAC7BC,YAAAA,OAAAA,EAAS,CAAC,EAAEN,GAAI,CAAA,KAAK,CAAC;AACtBO,YAAAA,MAAAA,EAAQ;AACV,SAAA;QACAC,MAAQ,EAAA;YACNL,MAAQ,EAAA,KAAA;AACRC,YAAAA,IAAAA,EAAM,CAAC,CAAC,EAAEH,IAAKI,CAAAA,YAAY,CAAC,CAAC;AAC7BC,YAAAA,OAAAA,EAAS,CAAC,EAAEN,GAAI,CAAA,OAAO,CAAC;AACxBO,YAAAA,MAAAA,EAAQ;AACV,SAAA;QACAE,MAAQ,EAAA;YACNN,MAAQ,EAAA,QAAA;AACRC,YAAAA,IAAAA,EAAM,CAAC,CAAC,EAAEH,IAAKI,CAAAA,YAAY,CAAC,CAAC;AAC7BC,YAAAA,OAAAA,EAAS,CAAC,EAAEN,GAAI,CAAA,OAAO,CAAC;AACxBO,YAAAA,MAAAA,EAAQ;AACV;AACF,KAAA;AACF,CAAA;AAEA,MAAMR,0BAA0B,CAAC,EAAEC,GAAG,EAAEC,IAAI,EAAsB,GAAA;IAChE,OAAO;QACLC,IAAM,EAAA;YACJC,MAAQ,EAAA,KAAA;AACRC,YAAAA,IAAAA,EAAM,CAAC,CAAC,EAAEH,IAAKS,CAAAA,UAAU,CAAC,CAAC;AAC3BJ,YAAAA,OAAAA,EAAS,CAAC,EAAEN,GAAI,CAAA,KAAK,CAAC;AACtBO,YAAAA,MAAAA,EAAQ;AACV,SAAA;QACAI,OAAS,EAAA;YACPR,MAAQ,EAAA,KAAA;AACRC,YAAAA,IAAAA,EAAM,CAAC,CAAC,EAAEH,KAAKS,UAAU,CAAC,IAAI,CAAC;AAC/BJ,YAAAA,OAAAA,EAAS,CAAC,EAAEN,GAAI,CAAA,QAAQ,CAAC;AACzBO,YAAAA,MAAAA,EAAQ;AACV,SAAA;QACAK,MAAQ,EAAA;YACNT,MAAQ,EAAA,MAAA;AACRC,YAAAA,IAAAA,EAAM,CAAC,CAAC,EAAEH,IAAKS,CAAAA,UAAU,CAAC,CAAC;AAC3BJ,YAAAA,OAAAA,EAAS,CAAC,EAAEN,GAAI,CAAA,OAAO,CAAC;AACxBO,YAAAA,MAAAA,EAAQ;AACV,SAAA;QACAC,MAAQ,EAAA;YACNL,MAAQ,EAAA,KAAA;AACRC,YAAAA,IAAAA,EAAM,CAAC,CAAC,EAAEH,KAAKS,UAAU,CAAC,IAAI,CAAC;AAC/BJ,YAAAA,OAAAA,EAAS,CAAC,EAAEN,GAAI,CAAA,OAAO,CAAC;AACxBO,YAAAA,MAAAA,EAAQ;AACV,SAAA;QACAE,MAAQ,EAAA;YACNN,MAAQ,EAAA,QAAA;AACRC,YAAAA,IAAAA,EAAM,CAAC,CAAC,EAAEH,KAAKS,UAAU,CAAC,IAAI,CAAC;AAC/BJ,YAAAA,OAAAA,EAAS,CAAC,EAAEN,GAAI,CAAA,OAAO,CAAC;AACxBO,YAAAA,MAAAA,EAAQ;AACV;AACF,KAAA;AACF,CAAA;;;;"}
1
+ {"version":3,"file":"index.mjs","sources":["../../../src/core-api/routes/index.ts"],"sourcesContent":["import type { Core, Schema } from '@strapi/types';\n\nimport { contentTypes, contentTypes as contentTypeUtils } from '@strapi/utils';\nimport * as z from 'zod/v4';\nimport type { QueryParam } from './validation/content-type';\n\nimport { CoreContentTypeRouteValidator } from './validation';\n\nexport const createRoutes = ({\n strapi,\n contentType,\n}: {\n strapi: Core.Strapi;\n contentType: Schema.ContentType;\n}) => {\n if (contentTypeUtils.isSingleType(contentType)) {\n return getSingleTypeRoutes(contentType, strapi);\n }\n\n return getCollectionTypeRoutes(contentType, strapi);\n};\n\nconst getSingleTypeRoutes = (\n schema: Schema.ContentType,\n strapi: Core.Strapi\n): Record<string, Partial<Core.Route>> => {\n const { uid, info } = schema;\n\n const validator = new CoreContentTypeRouteValidator(strapi, uid);\n const conditionalQueryParams = getConditionalQueryParams(schema);\n\n return {\n find: {\n method: 'GET',\n path: `/${info.singularName}`,\n handler: `${uid}.find`,\n request: {\n query: validator.queryParams(['fields', 'populate', 'filters', ...conditionalQueryParams]),\n },\n response: z.object({ data: validator.document }),\n config: {},\n },\n update: {\n method: 'PUT',\n path: `/${info.singularName}`,\n handler: `${uid}.update`,\n request: {\n query: validator.queryParams(['fields', 'populate', ...conditionalQueryParams]),\n body: { 'application/json': validator.partialBody },\n },\n response: z.object({ data: validator.document }),\n config: {},\n },\n delete: {\n method: 'DELETE',\n path: `/${info.singularName}`,\n handler: `${uid}.delete`,\n request: {\n query: validator.queryParams(['fields', 'populate', ...conditionalQueryParams]),\n },\n response: z.object({ data: validator.document }),\n config: {},\n },\n };\n};\n\nconst getCollectionTypeRoutes = (\n schema: Schema.ContentType,\n strapi: Core.Strapi\n): Record<string, Partial<Core.Route>> => {\n const { uid, info } = schema;\n\n const validator = new CoreContentTypeRouteValidator(strapi, uid);\n const conditionalQueryParams = getConditionalQueryParams(schema);\n\n return {\n find: {\n method: 'GET',\n path: `/${info.pluralName}`,\n handler: `${uid}.find`,\n request: {\n query: validator.queryParams([\n 'fields',\n 'filters',\n '_q',\n 'pagination',\n 'sort',\n 'populate',\n ...conditionalQueryParams,\n ]),\n },\n response: z.object({ data: validator.documents }),\n config: {},\n },\n findOne: {\n method: 'GET',\n path: `/${info.pluralName}/:id`,\n handler: `${uid}.findOne`,\n request: {\n params: { id: validator.documentID },\n query: validator.queryParams([\n 'fields',\n 'populate',\n 'filters',\n 'sort',\n ...conditionalQueryParams,\n ]),\n },\n response: z.object({ data: validator.document }),\n },\n create: {\n method: 'POST',\n path: `/${info.pluralName}`,\n handler: `${uid}.create`,\n request: {\n query: validator.queryParams(['fields', 'populate', ...conditionalQueryParams]),\n body: { 'application/json': validator.body },\n },\n response: z.object({ data: validator.document }),\n config: {},\n },\n update: {\n method: 'PUT',\n path: `/${info.pluralName}/:id`,\n handler: `${uid}.update`,\n request: {\n query: validator.queryParams(['fields', 'populate', ...conditionalQueryParams]),\n params: { id: validator.documentID },\n body: { 'application/json': validator.partialBody },\n },\n response: z.object({ data: validator.document }),\n },\n delete: {\n method: 'DELETE',\n path: `/${info.pluralName}/:id`,\n handler: `${uid}.delete`,\n request: {\n query: validator.queryParams(['fields', 'populate', 'filters', ...conditionalQueryParams]),\n params: { id: validator.documentID },\n },\n response: z.object({ data: validator.document }),\n },\n };\n};\n\nconst getConditionalQueryParams = (schema: Schema.ContentType) => {\n const isLocalized = strapi.plugin('i18n').service('content-types').isLocalizedContentType(schema);\n const hasDraftAndPublish = contentTypes.hasDraftAndPublish(schema);\n\n return [\n ...(isLocalized ? ['locale'] : []),\n ...(hasDraftAndPublish ? ['status'] : []),\n ] as QueryParam[];\n};\n"],"names":["createRoutes","strapi","contentType","contentTypeUtils","isSingleType","getSingleTypeRoutes","getCollectionTypeRoutes","schema","uid","info","validator","CoreContentTypeRouteValidator","conditionalQueryParams","getConditionalQueryParams","find","method","path","singularName","handler","request","query","queryParams","response","z","object","data","document","config","update","body","partialBody","delete","pluralName","documents","findOne","params","id","documentID","create","isLocalized","plugin","service","isLocalizedContentType","hasDraftAndPublish","contentTypes"],"mappings":"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"}