@strapi/core 0.0.0-experimental.e5d4b412da0d932b61b2fa5012d16513fda6de04 → 0.0.0-experimental.e65c671348c825470427c509f1273497b0b4b828

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 (76) hide show
  1. package/dist/Strapi.d.ts.map +1 -1
  2. package/dist/Strapi.js +15 -1
  3. package/dist/Strapi.js.map +1 -1
  4. package/dist/Strapi.mjs +15 -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/validation/attributes.d.ts +1 -1
  18. package/dist/core-api/routes/validation/mappers.d.ts.map +1 -1
  19. package/dist/core-api/routes/validation/mappers.js +35 -0
  20. package/dist/core-api/routes/validation/mappers.js.map +1 -1
  21. package/dist/core-api/routes/validation/mappers.mjs +35 -0
  22. package/dist/core-api/routes/validation/mappers.mjs.map +1 -1
  23. package/dist/loaders/plugins/index.js +1 -1
  24. package/dist/loaders/plugins/index.js.map +1 -1
  25. package/dist/loaders/plugins/index.mjs +1 -1
  26. package/dist/loaders/plugins/index.mjs.map +1 -1
  27. package/dist/package.json.js +12 -11
  28. package/dist/package.json.js.map +1 -1
  29. package/dist/package.json.mjs +12 -11
  30. package/dist/package.json.mjs.map +1 -1
  31. package/dist/services/content-api/index.d.ts +1 -1
  32. package/dist/services/content-api/index.d.ts.map +1 -1
  33. package/dist/services/content-api/index.js +1 -1
  34. package/dist/services/content-api/index.js.map +1 -1
  35. package/dist/services/content-api/index.mjs +2 -2
  36. package/dist/services/content-api/index.mjs.map +1 -1
  37. package/dist/services/content-source-maps.d.ts +13 -0
  38. package/dist/services/content-source-maps.d.ts.map +1 -0
  39. package/dist/services/content-source-maps.js +108 -0
  40. package/dist/services/content-source-maps.js.map +1 -0
  41. package/dist/services/content-source-maps.mjs +106 -0
  42. package/dist/services/content-source-maps.mjs.map +1 -0
  43. package/dist/services/document-service/components.d.ts +31 -1
  44. package/dist/services/document-service/components.d.ts.map +1 -1
  45. package/dist/services/document-service/components.js +109 -0
  46. package/dist/services/document-service/components.js.map +1 -1
  47. package/dist/services/document-service/components.mjs +107 -1
  48. package/dist/services/document-service/components.mjs.map +1 -1
  49. package/dist/services/document-service/repository.d.ts.map +1 -1
  50. package/dist/services/document-service/repository.js +4 -0
  51. package/dist/services/document-service/repository.js.map +1 -1
  52. package/dist/services/document-service/repository.mjs +5 -1
  53. package/dist/services/document-service/repository.mjs.map +1 -1
  54. package/dist/services/document-service/utils/clean-component-join-table.d.ts +7 -0
  55. package/dist/services/document-service/utils/clean-component-join-table.d.ts.map +1 -0
  56. package/dist/services/document-service/utils/clean-component-join-table.js +138 -0
  57. package/dist/services/document-service/utils/clean-component-join-table.js.map +1 -0
  58. package/dist/services/document-service/utils/clean-component-join-table.mjs +136 -0
  59. package/dist/services/document-service/utils/clean-component-join-table.mjs.map +1 -0
  60. package/dist/services/document-service/utils/unidirectional-relations.d.ts +19 -2
  61. package/dist/services/document-service/utils/unidirectional-relations.d.ts.map +1 -1
  62. package/dist/services/document-service/utils/unidirectional-relations.js +21 -6
  63. package/dist/services/document-service/utils/unidirectional-relations.js.map +1 -1
  64. package/dist/services/document-service/utils/unidirectional-relations.mjs +21 -6
  65. package/dist/services/document-service/utils/unidirectional-relations.mjs.map +1 -1
  66. package/dist/services/metrics/index.js +2 -1
  67. package/dist/services/metrics/index.js.map +1 -1
  68. package/dist/services/metrics/index.mjs +2 -1
  69. package/dist/services/metrics/index.mjs.map +1 -1
  70. package/dist/services/metrics/middleware.d.ts +2 -1
  71. package/dist/services/metrics/middleware.d.ts.map +1 -1
  72. package/dist/services/metrics/middleware.js +2 -2
  73. package/dist/services/metrics/middleware.js.map +1 -1
  74. package/dist/services/metrics/middleware.mjs +2 -2
  75. package/dist/services/metrics/middleware.mjs.map +1 -1
  76. package/package.json +12 -11
@@ -1 +1 @@
1
- {"version":3,"file":"transform.js","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,gBAAAA,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,SAAMJ,QAAW,CAAA,EAAA;QACnB,OAAOA,QAAAA;AACT;AAEA,IAAA,IAAI,CAACL,gBAAcK,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,SAAMS,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,SAAMY,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,iBAAcqB,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,SAAMV,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.js","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,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":"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"}
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":";;;AAqBA,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;AAWA,MAAMK,oBAAoB,OACxBC,QAAAA,EACAC,OAAgB,EAAE,EAClBC,IAAyB,GAAA;IACvBC,gBAAkB,EAAA,KAAA;IAClBC,gBAAkB,EAAA;AACpB,CAAC,GAAA;AAED,IAAA,IAAIC,MAAML,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,IAAIM,KAAM,CAAA,gDAAA,CAAA;AAClB;;IAGA,MAAMC,kBAAAA,GAAqB,OAAOC,IAChCN,GAAAA,IAAAA,CAAKC,gBAAgB,GAAGM,cAAAA,CAAeD,IAAMN,EAAAA,IAAAA,EAAMQ,WAAeF,CAAAA,GAAAA,IAAAA;AAEpE,IAAA,MAAMG,sBAAyB,GAAA,OAAOH,IACpCN,GAAAA,IAAAA,CAAKE,gBAAgB,IAAIF,IAAAA,CAAKQ,WAAW,GACrCE,MAAOC,CAAAA,GAAG,CAAC,qBAAA,CAAA,CAAuBT,gBAAgB,CAAC;AAAEI,YAAAA,IAAAA;AAAMM,YAAAA,MAAAA,EAAQZ,KAAKQ;SACxEF,CAAAA,GAAAA,IAAAA;;AAGN,IAAA,MAAMA,OAAO,MAAMO,KAAAA,CAAMC,IAAI,CAACT,oBAAoBI,sBAAwBX,CAAAA,CAAAA,QAAAA,CAAAA;IAE1E,OAAO;AACLQ,QAAAA,IAAAA;AACAP,QAAAA;AACF,KAAA;AACF;AAMA,SAASgB,kBAAAA,CACPT,IAA4B,EAC5BU,SAAiC,EAAA;IAEjC,IAAItB,KAAAA,CAAMC,OAAO,CAACW,IAAO,CAAA,EAAA;AACvB,QAAA,OAAOA,KAAKW,GAAG,CAAC,CAACC,KAAAA,GAAUH,mBAAmBG,KAAOF,EAAAA,SAAAA,CAAAA,CAAAA;AACvD;IAEA,MAAMG,GAAAA,GAAMZ,eAAeD,IAAMU,EAAAA,SAAAA,CAAAA;AAEjC,IAAA,IAAIb,MAAMgB,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,SAASd,cAAAA,CACPe,KAA6B,EAC7BC,IAAoB,EAAA;AAEpB,IAAA,IAAIpB,MAAMmB,KAAQ,CAAA,EAAA;QAChB,OAAOA,KAAAA;AACT;IAEA,IAAI5B,KAAAA,CAAMC,OAAO,CAAC2B,KAAQ,CAAA,EAAA;AACxB,QAAA,OAAOA,MAAML,GAAG,CAAC,CAACO,WAAAA,GAAgBjB,eAAeiB,WAAaD,EAAAA,IAAAA,CAAAA,CAAAA;AAChE;IAEA,IAAI,CAAC9B,cAAc6B,KAAQ,CAAA,EAAA;AACzB,QAAA,MAAM,IAAIlB,KAAM,CAAA,yBAAA,CAAA;AAClB;AAEA,IAAA,MAAM,EAAEgB,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,MAAMlC,QAAAA,GAAWkC,UAAU,CAACE,GAAI,CAAA;AAChC,QAAA,MAAMG,SAAYR,GAAAA,IAAAA,IAAQA,IAAKF,CAAAA,UAAU,CAACO,GAAI,CAAA;QAE9C,IAAIG,SAAAA,IAAaA,UAAUR,IAAI,KAAK,cAAchC,OAAQC,CAAAA,QAAAA,CAAAA,IAAa,YAAYuC,SAAW,EAAA;AAC5F,YAAA,MAAMzB,OAAOC,cAAef,CAAAA,QAAAA,EAAUkB,OAAOF,WAAW,CAACuB,UAAUC,MAAM,CAAA,CAAA;YAEzEL,eAAe,CAACC,IAAI,GAAG;AAAEtB,gBAAAA;AAAK,aAAA;AAChC,SAAA,MAAO,IAAIyB,SAAaA,IAAAA,SAAAA,CAAUR,IAAI,KAAK,WAAA,IAAehC,QAAQC,QAAW,CAAA,EAAA;YAC3EmC,eAAe,CAACC,GAAI,CAAA,GAAGb,kBAAmBvB,CAAAA,QAAAA,EAAUkB,OAAOuB,UAAU,CAACF,SAAUf,CAAAA,SAAS,CAAC,CAAA;AAC5F,SAAA,MAAO,IAAIe,SAAaA,IAAAA,SAAAA,CAAUR,IAAI,KAAK,aAAA,IAAiB3B,YAAYJ,QAAW,CAAA,EAAA;AACjF,YAAA,IAAIW,MAAMX,QAAW,CAAA,EAAA;gBACnBmC,eAAe,CAACC,IAAI,GAAGpC,QAAAA;AACzB;AAEAmC,YAAAA,eAAe,CAACC,GAAI,CAAA,GAAGpC,QAASyB,CAAAA,GAAG,CAAC,CAACiB,WAAAA,GAAAA;AACnC,gBAAA,OAAOnB,mBAAmBmB,WAAaxB,EAAAA,MAAAA,CAAOuB,UAAU,CAACC,WAAAA,CAAYC,WAAW,CAAC,CAAA;AACnF,aAAA,CAAA;AACF,SAAA,MAAO,IAAIJ,SAAaA,IAAAA,SAAAA,CAAUR,IAAI,KAAK,OAAA,IAAWhC,QAAQC,QAAW,CAAA,EAAA;AACvE,YAAA,MAAMc,IAAOC,GAAAA,cAAAA,CAAef,QAAUkB,EAAAA,MAAAA,CAAOF,WAAW,CAAC,qBAAA,CAAA,CAAA;YAEzDmB,eAAe,CAACC,IAAI,GAAG;AAAEtB,gBAAAA;AAAK,aAAA;SACzB,MAAA;YACLqB,eAAe,CAACC,IAAI,GAAGpC,QAAAA;AACzB;AACF;IAEA,OAAO;AACL4B,QAAAA,EAAAA;AACAK,QAAAA,UAAAA;QACAJ,UAAYM,EAAAA;AACd,KAAA;AACF;;;;"}
@@ -136,10 +136,10 @@ export declare const blocksToInputSchema: () => z.ZodArray<z.ZodAny>;
136
136
  * @returns A Zod schema for input validation of the boolean field.
137
137
  */
138
138
  export declare const booleanToInputSchema: (attribute: Schema.Attribute.Boolean) => z.ZodEnum<{
139
+ true: "true";
139
140
  0: "0";
140
141
  t: "t";
141
142
  1: "1";
142
- true: "true";
143
143
  f: "f";
144
144
  false: "false";
145
145
  }>;
@@ -1 +1 @@
1
- {"version":3,"file":"mappers.d.ts","sourceRoot":"","sources":["../../../../src/core-api/routes/validation/mappers.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,KAAK,CAAC,MAAM,QAAQ,CAAC;AAK5B;;;;;;;;;;;;;;;;GAgBG;AACH,eAAO,MAAM,sBAAsB,eACrB,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,SAAS,CAAC,YAAY,CAAC,EAAE,mCASvE,CAAC;AAEF;;;;;;;;;;;;;;;;;GAiBG;AACH,eAAO,MAAM,2BAA2B,eAC1B,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,SAAS,CAAC,YAAY,CAAC,EAAE,mCASvE,CAAC;AAEF;;;;;;;;;;;;;;;;;;GAkBG;AACH,eAAO,MAAM,oBAAoB,cAAe,OAAO,SAAS,CAAC,YAAY,KAAG,EAAE,UAiDjF,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AACH,eAAO,MAAM,yBAAyB,cACzB,OAAO,SAAS,CAAC,YAAY,KACvC,EAAE,UAiDJ,CAAC"}
1
+ {"version":3,"file":"mappers.d.ts","sourceRoot":"","sources":["../../../../src/core-api/routes/validation/mappers.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,KAAK,CAAC,MAAM,QAAQ,CAAC;AAgB5B;;;;;;;;;;;;;;;;GAgBG;AACH,eAAO,MAAM,sBAAsB,eACrB,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,SAAS,CAAC,YAAY,CAAC,EAAE,mCASvE,CAAC;AAEF;;;;;;;;;;;;;;;;;GAiBG;AACH,eAAO,MAAM,2BAA2B,eAC1B,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,SAAS,CAAC,YAAY,CAAC,EAAE,mCASvE,CAAC;AAEF;;;;;;;;;;;;;;;;;;GAkBG;AACH,eAAO,MAAM,oBAAoB,cAAe,OAAO,SAAS,CAAC,YAAY,KAAG,EAAE,UAiEjF,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AACH,eAAO,MAAM,yBAAyB,cACzB,OAAO,SAAS,CAAC,YAAY,KACvC,EAAE,UAiEJ,CAAC"}
@@ -22,6 +22,9 @@ function _interopNamespaceDefault(e) {
22
22
 
23
23
  var z__namespace = /*#__PURE__*/_interopNamespaceDefault(z);
24
24
 
25
+ const isCustomFieldAttribute = (attribute)=>{
26
+ return !!attribute && typeof attribute === 'object' && attribute.type === 'customField' && typeof attribute.customField === 'string';
27
+ };
25
28
  /**
26
29
  * Creates a Zod schema for a collection of Strapi attributes.
27
30
  *
@@ -136,6 +139,22 @@ var z__namespace = /*#__PURE__*/_interopNamespaceDefault(z);
136
139
  return attributes.uidToSchema(attribute);
137
140
  default:
138
141
  {
142
+ if (isCustomFieldAttribute(attribute)) {
143
+ const attrCF = attribute;
144
+ const strapiInstance = global.strapi;
145
+ if (!strapiInstance) {
146
+ throw new Error('Strapi instance not available for custom field conversion');
147
+ }
148
+ const customField = strapiInstance.get('custom-fields').get(attrCF.customField);
149
+ if (!customField) {
150
+ throw new Error(`Custom field '${attrCF.customField}' not found`);
151
+ }
152
+ // Re-dispatch with the resolved underlying Strapi kind
153
+ return mapAttributeToSchema({
154
+ ...attrCF,
155
+ type: customField.type
156
+ });
157
+ }
139
158
  const { type } = attribute;
140
159
  throw new Error(`Unsupported attribute type: ${type}`);
141
160
  }
@@ -225,6 +244,22 @@ var z__namespace = /*#__PURE__*/_interopNamespaceDefault(z);
225
244
  return attributes.uidToInputSchema(attribute);
226
245
  default:
227
246
  {
247
+ if (isCustomFieldAttribute(attribute)) {
248
+ const attrCF = attribute;
249
+ const strapiInstance = global.strapi;
250
+ if (!strapiInstance) {
251
+ throw new Error('Strapi instance not available for custom field conversion');
252
+ }
253
+ const customField = strapiInstance.get('custom-fields').get(attrCF.customField);
254
+ if (!customField) {
255
+ throw new Error(`Custom field '${attrCF.customField}' not found`);
256
+ }
257
+ // Re-dispatch with the resolved underlying Strapi kind
258
+ return mapAttributeToInputSchema({
259
+ ...attrCF,
260
+ type: customField.type
261
+ });
262
+ }
228
263
  const { type } = attribute;
229
264
  throw new Error(`Unsupported attribute type: ${type}`);
230
265
  }
@@ -1 +1 @@
1
- {"version":3,"file":"mappers.js","sources":["../../../../src/core-api/routes/validation/mappers.ts"],"sourcesContent":["/**\n * @fileoverview\n * This file contains functions responsible for mapping Strapi attribute definitions to Zod schemas.\n */\n\nimport type { Schema } from '@strapi/types';\nimport * as z from 'zod/v4';\n\n// eslint-disable-next-line import/no-cycle\nimport * as attributes from './attributes';\n\n/**\n * Creates a Zod schema for a collection of Strapi attributes.\n *\n * @param attributes - An array of tuples, where each tuple contains the attribute name and its schema definition.\n * @returns A Zod object schema representing the combined attributes.\n *\n * @example\n * ```typescript\n * const myAttributes = [\n * ['title', { type: 'string', required: true }],\n * ['description', { type: 'text' }],\n * ];\n * const schema = createAttributesSchema(myAttributes);\n * // schema will be a Zod object with 'title' and 'description' fields,\n * // each mapped to their respective Zod schemas based on their Strapi attribute types.\n * ```\n */\nexport const createAttributesSchema = (\n attributes: [name: string, attribute: Schema.Attribute.AnyAttribute][]\n) => {\n return attributes.reduce((acc, [name, attribute]) => {\n return acc.extend({\n get [name]() {\n return mapAttributeToSchema(attribute);\n },\n });\n }, z.object({}));\n};\n\n/**\n * Creates a Zod input schema for a collection of Strapi attributes.\n * This is typically used for validating incoming data (e.g., from API requests).\n *\n * @param attributes - An array of tuples, where each tuple contains the attribute name and its schema definition.\n * @returns A Zod object schema representing the combined input attributes.\n *\n * @example\n * ```typescript\n * const myInputAttributes = [\n * ['email', { type: 'email', required: true }],\n * ['description', { type: 'text', minLength: 8 }],\n * ];\n * const inputSchema = createAttributesInputSchema(myInputAttributes);\n * // inputSchema will be a Zod object with 'email' and 'description' fields,\n * // mapped to Zod schemas suitable for input validation.\n * ```\n */\nexport const createAttributesInputSchema = (\n attributes: [name: string, attribute: Schema.Attribute.AnyAttribute][]\n) => {\n return attributes.reduce((acc, [name, attribute]) => {\n return acc.extend({\n get [name]() {\n return mapAttributeToInputSchema(attribute);\n },\n });\n }, z.object({}));\n};\n\n/**\n * Maps a Strapi attribute definition to a corresponding Zod validation schema.\n *\n * This function handles every Strapi attribute types and converts them into\n * appropriate Zod validation schemas.\n *\n * @param attribute - The Strapi attribute configuration object.\n * @returns A Zod schema that corresponds to the input attribute's type.\n * @throws {Error} Throws an error if an unsupported attribute type is provided.\n *\n * @example\n * ```typescript\n * const stringAttribute = { type: 'string', minLength: 3 };\n * const stringSchema = mapAttributeToSchema(stringAttribute); // Returns a Zod string schema with minLength.\n *\n * const booleanAttribute = { type: 'boolean', default: false };\n * const booleanSchema = mapAttributeToSchema(booleanAttribute); // Returns a Zod boolean schema with a default.\n * ```\n */\nexport const mapAttributeToSchema = (attribute: Schema.Attribute.AnyAttribute): z.ZodTypeAny => {\n switch (attribute.type) {\n case 'biginteger':\n return attributes.bigIntegerToSchema(attribute);\n case 'blocks':\n return attributes.blocksToSchema();\n case 'boolean':\n return attributes.booleanToSchema(attribute);\n case 'component':\n return attributes.componentToSchema(attribute);\n case 'date':\n return attributes.dateToSchema(attribute);\n case 'datetime':\n return attributes.datetimeToSchema(attribute);\n case 'decimal':\n return attributes.decimalToSchema(attribute);\n case 'dynamiczone':\n return attributes.dynamicZoneToSchema(attribute);\n case 'email':\n return attributes.emailToSchema(attribute);\n case 'enumeration':\n return attributes.enumToSchema(attribute);\n case 'float':\n return attributes.floatToSchema(attribute);\n case 'integer':\n return attributes.integerToSchema(attribute);\n case 'json':\n return attributes.jsonToSchema(attribute);\n case 'media':\n return attributes.mediaToSchema(attribute);\n case 'relation':\n return attributes.relationToSchema(attribute);\n case 'password':\n case 'text':\n case 'richtext':\n case 'string':\n return attributes.stringToSchema(attribute);\n case 'time':\n return attributes.timeToSchema(attribute);\n case 'timestamp':\n return attributes.timestampToSchema(attribute);\n case 'uid':\n return attributes.uidToSchema(attribute);\n default: {\n const { type } = attribute as Schema.Attribute.AnyAttribute;\n\n throw new Error(`Unsupported attribute type: ${type}`);\n }\n }\n};\n\n/**\n * Maps a Strapi attribute definition to a corresponding Zod input validation schema.\n *\n * This function handles every Strapi attribute types and converts them into\n * appropriate Zod validation schemas with their respective constraints.\n *\n * @param attribute - The Strapi attribute configuration object. Contains type information\n * and validation rules for the attribute.\n *\n * @returns A Zod schema that corresponds to the input attribute's type and validation rules\n *\n * @example\n * ```typescript\n * // String attribute with constraints\n * const stringAttribute = {\n * type: 'string',\n * minLength: 3,\n * maxLength: 50,\n * required: true\n * };\n * const stringSchema = mapAttributeToInputSchema(stringAttribute);\n *\n * // Enumeration attribute\n * const enumAttribute = {\n * type: 'enumeration',\n * enum: ['draft', 'published', 'archived']\n * };\n * const enumSchema = mapAttributeToInputSchema(enumAttribute);\n *\n * // Media attribute with multiple files\n * const mediaAttribute = {\n * type: 'media',\n * multiple: true\n * };\n * const mediaSchema = mapAttributeToInputSchema(mediaAttribute);\n * ```\n *\n * @throws {Error} Throws an error if an unsupported attribute type is provided\n *\n */\nexport const mapAttributeToInputSchema = (\n attribute: Schema.Attribute.AnyAttribute\n): z.ZodTypeAny => {\n switch (attribute.type) {\n case 'biginteger':\n return attributes.bigIntegerToInputSchema(attribute);\n case 'blocks':\n return attributes.blocksToInputSchema();\n case 'boolean':\n return attributes.booleanToInputSchema(attribute);\n case 'component':\n return attributes.componentToInputSchema(attribute);\n case 'date':\n return attributes.dateToInputSchema(attribute);\n case 'datetime':\n return attributes.datetimeToInputSchema(attribute);\n case 'decimal':\n return attributes.decimalToInputSchema(attribute);\n case 'dynamiczone':\n return attributes.dynamicZoneToInputSchema(attribute);\n case 'email':\n return attributes.emailToInputSchema(attribute);\n case 'enumeration':\n return attributes.enumerationToInputSchema(attribute);\n case 'float':\n return attributes.floatToInputSchema(attribute);\n case 'integer':\n return attributes.integerToInputSchema(attribute);\n case 'json':\n return attributes.jsonToInputSchema(attribute);\n case 'media':\n return attributes.mediaToInputSchema(attribute);\n case 'relation':\n return attributes.relationToInputSchema(attribute);\n case 'password':\n case 'text':\n case 'richtext':\n case 'string':\n return attributes.textToInputSchema(attribute);\n case 'time':\n return attributes.timeToInputSchema(attribute);\n case 'timestamp':\n return attributes.timestampToInputSchema(attribute);\n case 'uid':\n return attributes.uidToInputSchema(attribute);\n default: {\n const { type } = attribute as Schema.Attribute.AnyAttribute;\n\n throw new Error(`Unsupported attribute type: ${type}`);\n }\n }\n};\n"],"names":["createAttributesSchema","attributes","reduce","acc","name","attribute","extend","mapAttributeToSchema","z","object","createAttributesInputSchema","mapAttributeToInputSchema","type","Error"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AAWA;;;;;;;;;;;;;;;;IAiBaA,MAAAA,sBAAAA,GAAyB,CACpCC,UAAAA,GAAAA;AAEA,IAAA,OAAOA,WAAWC,MAAM,CAAC,CAACC,GAAK,EAAA,CAACC,MAAMC,SAAU,CAAA,GAAA;QAC9C,OAAOF,GAAAA,CAAIG,MAAM,CAAC;YAChB,KAAKF,MAAQ,GAAA;AACX,gBAAA,OAAOG,oBAAqBF,CAAAA,SAAAA,CAAAA;AAC9B;AACF,SAAA,CAAA;KACCG,EAAAA,YAAAA,CAAEC,MAAM,CAAC,EAAC,CAAA,CAAA;AACf;AAEA;;;;;;;;;;;;;;;;;IAkBaC,MAAAA,2BAAAA,GAA8B,CACzCT,UAAAA,GAAAA;AAEA,IAAA,OAAOA,WAAWC,MAAM,CAAC,CAACC,GAAK,EAAA,CAACC,MAAMC,SAAU,CAAA,GAAA;QAC9C,OAAOF,GAAAA,CAAIG,MAAM,CAAC;YAChB,KAAKF,MAAQ,GAAA;AACX,gBAAA,OAAOO,yBAA0BN,CAAAA,SAAAA,CAAAA;AACnC;AACF,SAAA,CAAA;KACCG,EAAAA,YAAAA,CAAEC,MAAM,CAAC,EAAC,CAAA,CAAA;AACf;AAEA;;;;;;;;;;;;;;;;;;IAmBaF,MAAAA,oBAAAA,GAAuB,CAACF,SAAAA,GAAAA;AACnC,IAAA,OAAQA,UAAUO,IAAI;QACpB,KAAK,YAAA;YACH,OAAOX,6BAA6B,CAACI,SAAAA,CAAAA;QACvC,KAAK,QAAA;AACH,YAAA,OAAOJ,yBAAyB,EAAA;QAClC,KAAK,SAAA;YACH,OAAOA,0BAA0B,CAACI,SAAAA,CAAAA;QACpC,KAAK,WAAA;YACH,OAAOJ,4BAA4B,CAACI,SAAAA,CAAAA;QACtC,KAAK,MAAA;YACH,OAAOJ,uBAAuB,CAACI,SAAAA,CAAAA;QACjC,KAAK,UAAA;YACH,OAAOJ,2BAA2B,CAACI,SAAAA,CAAAA;QACrC,KAAK,SAAA;YACH,OAAOJ,0BAA0B,CAACI,SAAAA,CAAAA;QACpC,KAAK,aAAA;YACH,OAAOJ,8BAA8B,CAACI,SAAAA,CAAAA;QACxC,KAAK,OAAA;YACH,OAAOJ,wBAAwB,CAACI,SAAAA,CAAAA;QAClC,KAAK,aAAA;YACH,OAAOJ,uBAAuB,CAACI,SAAAA,CAAAA;QACjC,KAAK,OAAA;YACH,OAAOJ,wBAAwB,CAACI,SAAAA,CAAAA;QAClC,KAAK,SAAA;YACH,OAAOJ,0BAA0B,CAACI,SAAAA,CAAAA;QACpC,KAAK,MAAA;YACH,OAAOJ,uBAAuB,CAACI,SAAAA,CAAAA;QACjC,KAAK,OAAA;YACH,OAAOJ,wBAAwB,CAACI,SAAAA,CAAAA;QAClC,KAAK,UAAA;YACH,OAAOJ,2BAA2B,CAACI,SAAAA,CAAAA;QACrC,KAAK,UAAA;QACL,KAAK,MAAA;QACL,KAAK,UAAA;QACL,KAAK,QAAA;YACH,OAAOJ,yBAAyB,CAACI,SAAAA,CAAAA;QACnC,KAAK,MAAA;YACH,OAAOJ,uBAAuB,CAACI,SAAAA,CAAAA;QACjC,KAAK,WAAA;YACH,OAAOJ,4BAA4B,CAACI,SAAAA,CAAAA;QACtC,KAAK,KAAA;YACH,OAAOJ,sBAAsB,CAACI,SAAAA,CAAAA;AAChC,QAAA;AAAS,YAAA;gBACP,MAAM,EAAEO,IAAI,EAAE,GAAGP,SAAAA;AAEjB,gBAAA,MAAM,IAAIQ,KAAM,CAAA,CAAC,4BAA4B,EAAED,KAAK,CAAC,CAAA;AACvD;AACF;AACF;AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAwCaD,MAAAA,yBAAAA,GAA4B,CACvCN,SAAAA,GAAAA;AAEA,IAAA,OAAQA,UAAUO,IAAI;QACpB,KAAK,YAAA;YACH,OAAOX,kCAAkC,CAACI,SAAAA,CAAAA;QAC5C,KAAK,QAAA;AACH,YAAA,OAAOJ,8BAA8B,EAAA;QACvC,KAAK,SAAA;YACH,OAAOA,+BAA+B,CAACI,SAAAA,CAAAA;QACzC,KAAK,WAAA;YACH,OAAOJ,iCAAiC,CAACI,SAAAA,CAAAA;QAC3C,KAAK,MAAA;YACH,OAAOJ,4BAA4B,CAACI,SAAAA,CAAAA;QACtC,KAAK,UAAA;YACH,OAAOJ,gCAAgC,CAACI,SAAAA,CAAAA;QAC1C,KAAK,SAAA;YACH,OAAOJ,+BAA+B,CAACI,SAAAA,CAAAA;QACzC,KAAK,aAAA;YACH,OAAOJ,mCAAmC,CAACI,SAAAA,CAAAA;QAC7C,KAAK,OAAA;YACH,OAAOJ,6BAA6B,CAACI,SAAAA,CAAAA;QACvC,KAAK,aAAA;YACH,OAAOJ,mCAAmC,CAACI,SAAAA,CAAAA;QAC7C,KAAK,OAAA;YACH,OAAOJ,6BAA6B,CAACI,SAAAA,CAAAA;QACvC,KAAK,SAAA;YACH,OAAOJ,+BAA+B,CAACI,SAAAA,CAAAA;QACzC,KAAK,MAAA;YACH,OAAOJ,4BAA4B,CAACI,SAAAA,CAAAA;QACtC,KAAK,OAAA;YACH,OAAOJ,6BAA6B,CAACI,SAAAA,CAAAA;QACvC,KAAK,UAAA;YACH,OAAOJ,gCAAgC,CAACI,SAAAA,CAAAA;QAC1C,KAAK,UAAA;QACL,KAAK,MAAA;QACL,KAAK,UAAA;QACL,KAAK,QAAA;YACH,OAAOJ,4BAA4B,CAACI,SAAAA,CAAAA;QACtC,KAAK,MAAA;YACH,OAAOJ,4BAA4B,CAACI,SAAAA,CAAAA;QACtC,KAAK,WAAA;YACH,OAAOJ,iCAAiC,CAACI,SAAAA,CAAAA;QAC3C,KAAK,KAAA;YACH,OAAOJ,2BAA2B,CAACI,SAAAA,CAAAA;AACrC,QAAA;AAAS,YAAA;gBACP,MAAM,EAAEO,IAAI,EAAE,GAAGP,SAAAA;AAEjB,gBAAA,MAAM,IAAIQ,KAAM,CAAA,CAAC,4BAA4B,EAAED,KAAK,CAAC,CAAA;AACvD;AACF;AACF;;;;;;;"}
1
+ {"version":3,"file":"mappers.js","sources":["../../../../src/core-api/routes/validation/mappers.ts"],"sourcesContent":["/**\n * @fileoverview\n * This file contains functions responsible for mapping Strapi attribute definitions to Zod schemas.\n */\n\nimport type { Schema } from '@strapi/types';\nimport * as z from 'zod/v4';\n\n// eslint-disable-next-line import/no-cycle\nimport * as attributes from './attributes';\n\nconst isCustomFieldAttribute = (\n attribute: unknown\n): attribute is { type: 'customField'; customField: string } => {\n return (\n !!attribute &&\n typeof attribute === 'object' &&\n (attribute as any).type === 'customField' &&\n typeof (attribute as any).customField === 'string'\n );\n};\n\n/**\n * Creates a Zod schema for a collection of Strapi attributes.\n *\n * @param attributes - An array of tuples, where each tuple contains the attribute name and its schema definition.\n * @returns A Zod object schema representing the combined attributes.\n *\n * @example\n * ```typescript\n * const myAttributes = [\n * ['title', { type: 'string', required: true }],\n * ['description', { type: 'text' }],\n * ];\n * const schema = createAttributesSchema(myAttributes);\n * // schema will be a Zod object with 'title' and 'description' fields,\n * // each mapped to their respective Zod schemas based on their Strapi attribute types.\n * ```\n */\nexport const createAttributesSchema = (\n attributes: [name: string, attribute: Schema.Attribute.AnyAttribute][]\n) => {\n return attributes.reduce((acc, [name, attribute]) => {\n return acc.extend({\n get [name]() {\n return mapAttributeToSchema(attribute);\n },\n });\n }, z.object({}));\n};\n\n/**\n * Creates a Zod input schema for a collection of Strapi attributes.\n * This is typically used for validating incoming data (e.g., from API requests).\n *\n * @param attributes - An array of tuples, where each tuple contains the attribute name and its schema definition.\n * @returns A Zod object schema representing the combined input attributes.\n *\n * @example\n * ```typescript\n * const myInputAttributes = [\n * ['email', { type: 'email', required: true }],\n * ['description', { type: 'text', minLength: 8 }],\n * ];\n * const inputSchema = createAttributesInputSchema(myInputAttributes);\n * // inputSchema will be a Zod object with 'email' and 'description' fields,\n * // mapped to Zod schemas suitable for input validation.\n * ```\n */\nexport const createAttributesInputSchema = (\n attributes: [name: string, attribute: Schema.Attribute.AnyAttribute][]\n) => {\n return attributes.reduce((acc, [name, attribute]) => {\n return acc.extend({\n get [name]() {\n return mapAttributeToInputSchema(attribute);\n },\n });\n }, z.object({}));\n};\n\n/**\n * Maps a Strapi attribute definition to a corresponding Zod validation schema.\n *\n * This function handles every Strapi attribute types and converts them into\n * appropriate Zod validation schemas.\n *\n * @param attribute - The Strapi attribute configuration object.\n * @returns A Zod schema that corresponds to the input attribute's type.\n * @throws {Error} Throws an error if an unsupported attribute type is provided.\n *\n * @example\n * ```typescript\n * const stringAttribute = { type: 'string', minLength: 3 };\n * const stringSchema = mapAttributeToSchema(stringAttribute); // Returns a Zod string schema with minLength.\n *\n * const booleanAttribute = { type: 'boolean', default: false };\n * const booleanSchema = mapAttributeToSchema(booleanAttribute); // Returns a Zod boolean schema with a default.\n * ```\n */\nexport const mapAttributeToSchema = (attribute: Schema.Attribute.AnyAttribute): z.ZodTypeAny => {\n switch (attribute.type) {\n case 'biginteger':\n return attributes.bigIntegerToSchema(attribute);\n case 'blocks':\n return attributes.blocksToSchema();\n case 'boolean':\n return attributes.booleanToSchema(attribute);\n case 'component':\n return attributes.componentToSchema(attribute);\n case 'date':\n return attributes.dateToSchema(attribute);\n case 'datetime':\n return attributes.datetimeToSchema(attribute);\n case 'decimal':\n return attributes.decimalToSchema(attribute);\n case 'dynamiczone':\n return attributes.dynamicZoneToSchema(attribute);\n case 'email':\n return attributes.emailToSchema(attribute);\n case 'enumeration':\n return attributes.enumToSchema(attribute);\n case 'float':\n return attributes.floatToSchema(attribute);\n case 'integer':\n return attributes.integerToSchema(attribute);\n case 'json':\n return attributes.jsonToSchema(attribute);\n case 'media':\n return attributes.mediaToSchema(attribute);\n case 'relation':\n return attributes.relationToSchema(attribute);\n case 'password':\n case 'text':\n case 'richtext':\n case 'string':\n return attributes.stringToSchema(attribute);\n case 'time':\n return attributes.timeToSchema(attribute);\n case 'timestamp':\n return attributes.timestampToSchema(attribute);\n case 'uid':\n return attributes.uidToSchema(attribute);\n default: {\n if (isCustomFieldAttribute(attribute)) {\n const attrCF = attribute as { type: 'customField'; customField: string };\n const strapiInstance = global.strapi;\n if (!strapiInstance) {\n throw new Error('Strapi instance not available for custom field conversion');\n }\n\n const customField = strapiInstance.get('custom-fields').get(attrCF.customField);\n if (!customField) {\n throw new Error(`Custom field '${attrCF.customField}' not found`);\n }\n\n // Re-dispatch with the resolved underlying Strapi kind\n return mapAttributeToSchema({ ...attrCF, type: customField.type });\n }\n\n const { type } = attribute as Schema.Attribute.AnyAttribute;\n\n throw new Error(`Unsupported attribute type: ${type}`);\n }\n }\n};\n\n/**\n * Maps a Strapi attribute definition to a corresponding Zod input validation schema.\n *\n * This function handles every Strapi attribute types and converts them into\n * appropriate Zod validation schemas with their respective constraints.\n *\n * @param attribute - The Strapi attribute configuration object. Contains type information\n * and validation rules for the attribute.\n *\n * @returns A Zod schema that corresponds to the input attribute's type and validation rules\n *\n * @example\n * ```typescript\n * // String attribute with constraints\n * const stringAttribute = {\n * type: 'string',\n * minLength: 3,\n * maxLength: 50,\n * required: true\n * };\n * const stringSchema = mapAttributeToInputSchema(stringAttribute);\n *\n * // Enumeration attribute\n * const enumAttribute = {\n * type: 'enumeration',\n * enum: ['draft', 'published', 'archived']\n * };\n * const enumSchema = mapAttributeToInputSchema(enumAttribute);\n *\n * // Media attribute with multiple files\n * const mediaAttribute = {\n * type: 'media',\n * multiple: true\n * };\n * const mediaSchema = mapAttributeToInputSchema(mediaAttribute);\n * ```\n *\n * @throws {Error} Throws an error if an unsupported attribute type is provided\n *\n */\nexport const mapAttributeToInputSchema = (\n attribute: Schema.Attribute.AnyAttribute\n): z.ZodTypeAny => {\n switch (attribute.type) {\n case 'biginteger':\n return attributes.bigIntegerToInputSchema(attribute);\n case 'blocks':\n return attributes.blocksToInputSchema();\n case 'boolean':\n return attributes.booleanToInputSchema(attribute);\n case 'component':\n return attributes.componentToInputSchema(attribute);\n case 'date':\n return attributes.dateToInputSchema(attribute);\n case 'datetime':\n return attributes.datetimeToInputSchema(attribute);\n case 'decimal':\n return attributes.decimalToInputSchema(attribute);\n case 'dynamiczone':\n return attributes.dynamicZoneToInputSchema(attribute);\n case 'email':\n return attributes.emailToInputSchema(attribute);\n case 'enumeration':\n return attributes.enumerationToInputSchema(attribute);\n case 'float':\n return attributes.floatToInputSchema(attribute);\n case 'integer':\n return attributes.integerToInputSchema(attribute);\n case 'json':\n return attributes.jsonToInputSchema(attribute);\n case 'media':\n return attributes.mediaToInputSchema(attribute);\n case 'relation':\n return attributes.relationToInputSchema(attribute);\n case 'password':\n case 'text':\n case 'richtext':\n case 'string':\n return attributes.textToInputSchema(attribute);\n case 'time':\n return attributes.timeToInputSchema(attribute);\n case 'timestamp':\n return attributes.timestampToInputSchema(attribute);\n case 'uid':\n return attributes.uidToInputSchema(attribute);\n default: {\n if (isCustomFieldAttribute(attribute)) {\n const attrCF = attribute as { type: 'customField'; customField: string };\n const strapiInstance = global.strapi;\n if (!strapiInstance) {\n throw new Error('Strapi instance not available for custom field conversion');\n }\n\n const customField = strapiInstance.get('custom-fields').get(attrCF.customField);\n if (!customField) {\n throw new Error(`Custom field '${attrCF.customField}' not found`);\n }\n\n // Re-dispatch with the resolved underlying Strapi kind\n return mapAttributeToInputSchema({ ...attrCF, type: customField.type });\n }\n\n const { type } = attribute as Schema.Attribute.AnyAttribute;\n\n throw new Error(`Unsupported attribute type: ${type}`);\n }\n }\n};\n"],"names":["isCustomFieldAttribute","attribute","type","customField","createAttributesSchema","attributes","reduce","acc","name","extend","mapAttributeToSchema","z","object","createAttributesInputSchema","mapAttributeToInputSchema","attrCF","strapiInstance","global","strapi","Error","get"],"mappings":"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"}
@@ -1,6 +1,9 @@
1
1
  import * as z from 'zod/v4';
2
2
  import { uidToSchema, timestampToSchema, timeToSchema, stringToSchema, relationToSchema, mediaToSchema, jsonToSchema, integerToSchema, floatToSchema, enumToSchema, emailToSchema, dynamicZoneToSchema, decimalToSchema, datetimeToSchema, dateToSchema, componentToSchema, booleanToSchema, blocksToSchema, bigIntegerToSchema, uidToInputSchema, timestampToInputSchema, timeToInputSchema, textToInputSchema, relationToInputSchema, mediaToInputSchema, jsonToInputSchema, integerToInputSchema, floatToInputSchema, enumerationToInputSchema, emailToInputSchema, dynamicZoneToInputSchema, decimalToInputSchema, datetimeToInputSchema, dateToInputSchema, componentToInputSchema, booleanToInputSchema, blocksToInputSchema, bigIntegerToInputSchema } from './attributes.mjs';
3
3
 
4
+ const isCustomFieldAttribute = (attribute)=>{
5
+ return !!attribute && typeof attribute === 'object' && attribute.type === 'customField' && typeof attribute.customField === 'string';
6
+ };
4
7
  /**
5
8
  * Creates a Zod schema for a collection of Strapi attributes.
6
9
  *
@@ -115,6 +118,22 @@ import { uidToSchema, timestampToSchema, timeToSchema, stringToSchema, relationT
115
118
  return uidToSchema(attribute);
116
119
  default:
117
120
  {
121
+ if (isCustomFieldAttribute(attribute)) {
122
+ const attrCF = attribute;
123
+ const strapiInstance = global.strapi;
124
+ if (!strapiInstance) {
125
+ throw new Error('Strapi instance not available for custom field conversion');
126
+ }
127
+ const customField = strapiInstance.get('custom-fields').get(attrCF.customField);
128
+ if (!customField) {
129
+ throw new Error(`Custom field '${attrCF.customField}' not found`);
130
+ }
131
+ // Re-dispatch with the resolved underlying Strapi kind
132
+ return mapAttributeToSchema({
133
+ ...attrCF,
134
+ type: customField.type
135
+ });
136
+ }
118
137
  const { type } = attribute;
119
138
  throw new Error(`Unsupported attribute type: ${type}`);
120
139
  }
@@ -204,6 +223,22 @@ import { uidToSchema, timestampToSchema, timeToSchema, stringToSchema, relationT
204
223
  return uidToInputSchema(attribute);
205
224
  default:
206
225
  {
226
+ if (isCustomFieldAttribute(attribute)) {
227
+ const attrCF = attribute;
228
+ const strapiInstance = global.strapi;
229
+ if (!strapiInstance) {
230
+ throw new Error('Strapi instance not available for custom field conversion');
231
+ }
232
+ const customField = strapiInstance.get('custom-fields').get(attrCF.customField);
233
+ if (!customField) {
234
+ throw new Error(`Custom field '${attrCF.customField}' not found`);
235
+ }
236
+ // Re-dispatch with the resolved underlying Strapi kind
237
+ return mapAttributeToInputSchema({
238
+ ...attrCF,
239
+ type: customField.type
240
+ });
241
+ }
207
242
  const { type } = attribute;
208
243
  throw new Error(`Unsupported attribute type: ${type}`);
209
244
  }
@@ -1 +1 @@
1
- {"version":3,"file":"mappers.mjs","sources":["../../../../src/core-api/routes/validation/mappers.ts"],"sourcesContent":["/**\n * @fileoverview\n * This file contains functions responsible for mapping Strapi attribute definitions to Zod schemas.\n */\n\nimport type { Schema } from '@strapi/types';\nimport * as z from 'zod/v4';\n\n// eslint-disable-next-line import/no-cycle\nimport * as attributes from './attributes';\n\n/**\n * Creates a Zod schema for a collection of Strapi attributes.\n *\n * @param attributes - An array of tuples, where each tuple contains the attribute name and its schema definition.\n * @returns A Zod object schema representing the combined attributes.\n *\n * @example\n * ```typescript\n * const myAttributes = [\n * ['title', { type: 'string', required: true }],\n * ['description', { type: 'text' }],\n * ];\n * const schema = createAttributesSchema(myAttributes);\n * // schema will be a Zod object with 'title' and 'description' fields,\n * // each mapped to their respective Zod schemas based on their Strapi attribute types.\n * ```\n */\nexport const createAttributesSchema = (\n attributes: [name: string, attribute: Schema.Attribute.AnyAttribute][]\n) => {\n return attributes.reduce((acc, [name, attribute]) => {\n return acc.extend({\n get [name]() {\n return mapAttributeToSchema(attribute);\n },\n });\n }, z.object({}));\n};\n\n/**\n * Creates a Zod input schema for a collection of Strapi attributes.\n * This is typically used for validating incoming data (e.g., from API requests).\n *\n * @param attributes - An array of tuples, where each tuple contains the attribute name and its schema definition.\n * @returns A Zod object schema representing the combined input attributes.\n *\n * @example\n * ```typescript\n * const myInputAttributes = [\n * ['email', { type: 'email', required: true }],\n * ['description', { type: 'text', minLength: 8 }],\n * ];\n * const inputSchema = createAttributesInputSchema(myInputAttributes);\n * // inputSchema will be a Zod object with 'email' and 'description' fields,\n * // mapped to Zod schemas suitable for input validation.\n * ```\n */\nexport const createAttributesInputSchema = (\n attributes: [name: string, attribute: Schema.Attribute.AnyAttribute][]\n) => {\n return attributes.reduce((acc, [name, attribute]) => {\n return acc.extend({\n get [name]() {\n return mapAttributeToInputSchema(attribute);\n },\n });\n }, z.object({}));\n};\n\n/**\n * Maps a Strapi attribute definition to a corresponding Zod validation schema.\n *\n * This function handles every Strapi attribute types and converts them into\n * appropriate Zod validation schemas.\n *\n * @param attribute - The Strapi attribute configuration object.\n * @returns A Zod schema that corresponds to the input attribute's type.\n * @throws {Error} Throws an error if an unsupported attribute type is provided.\n *\n * @example\n * ```typescript\n * const stringAttribute = { type: 'string', minLength: 3 };\n * const stringSchema = mapAttributeToSchema(stringAttribute); // Returns a Zod string schema with minLength.\n *\n * const booleanAttribute = { type: 'boolean', default: false };\n * const booleanSchema = mapAttributeToSchema(booleanAttribute); // Returns a Zod boolean schema with a default.\n * ```\n */\nexport const mapAttributeToSchema = (attribute: Schema.Attribute.AnyAttribute): z.ZodTypeAny => {\n switch (attribute.type) {\n case 'biginteger':\n return attributes.bigIntegerToSchema(attribute);\n case 'blocks':\n return attributes.blocksToSchema();\n case 'boolean':\n return attributes.booleanToSchema(attribute);\n case 'component':\n return attributes.componentToSchema(attribute);\n case 'date':\n return attributes.dateToSchema(attribute);\n case 'datetime':\n return attributes.datetimeToSchema(attribute);\n case 'decimal':\n return attributes.decimalToSchema(attribute);\n case 'dynamiczone':\n return attributes.dynamicZoneToSchema(attribute);\n case 'email':\n return attributes.emailToSchema(attribute);\n case 'enumeration':\n return attributes.enumToSchema(attribute);\n case 'float':\n return attributes.floatToSchema(attribute);\n case 'integer':\n return attributes.integerToSchema(attribute);\n case 'json':\n return attributes.jsonToSchema(attribute);\n case 'media':\n return attributes.mediaToSchema(attribute);\n case 'relation':\n return attributes.relationToSchema(attribute);\n case 'password':\n case 'text':\n case 'richtext':\n case 'string':\n return attributes.stringToSchema(attribute);\n case 'time':\n return attributes.timeToSchema(attribute);\n case 'timestamp':\n return attributes.timestampToSchema(attribute);\n case 'uid':\n return attributes.uidToSchema(attribute);\n default: {\n const { type } = attribute as Schema.Attribute.AnyAttribute;\n\n throw new Error(`Unsupported attribute type: ${type}`);\n }\n }\n};\n\n/**\n * Maps a Strapi attribute definition to a corresponding Zod input validation schema.\n *\n * This function handles every Strapi attribute types and converts them into\n * appropriate Zod validation schemas with their respective constraints.\n *\n * @param attribute - The Strapi attribute configuration object. Contains type information\n * and validation rules for the attribute.\n *\n * @returns A Zod schema that corresponds to the input attribute's type and validation rules\n *\n * @example\n * ```typescript\n * // String attribute with constraints\n * const stringAttribute = {\n * type: 'string',\n * minLength: 3,\n * maxLength: 50,\n * required: true\n * };\n * const stringSchema = mapAttributeToInputSchema(stringAttribute);\n *\n * // Enumeration attribute\n * const enumAttribute = {\n * type: 'enumeration',\n * enum: ['draft', 'published', 'archived']\n * };\n * const enumSchema = mapAttributeToInputSchema(enumAttribute);\n *\n * // Media attribute with multiple files\n * const mediaAttribute = {\n * type: 'media',\n * multiple: true\n * };\n * const mediaSchema = mapAttributeToInputSchema(mediaAttribute);\n * ```\n *\n * @throws {Error} Throws an error if an unsupported attribute type is provided\n *\n */\nexport const mapAttributeToInputSchema = (\n attribute: Schema.Attribute.AnyAttribute\n): z.ZodTypeAny => {\n switch (attribute.type) {\n case 'biginteger':\n return attributes.bigIntegerToInputSchema(attribute);\n case 'blocks':\n return attributes.blocksToInputSchema();\n case 'boolean':\n return attributes.booleanToInputSchema(attribute);\n case 'component':\n return attributes.componentToInputSchema(attribute);\n case 'date':\n return attributes.dateToInputSchema(attribute);\n case 'datetime':\n return attributes.datetimeToInputSchema(attribute);\n case 'decimal':\n return attributes.decimalToInputSchema(attribute);\n case 'dynamiczone':\n return attributes.dynamicZoneToInputSchema(attribute);\n case 'email':\n return attributes.emailToInputSchema(attribute);\n case 'enumeration':\n return attributes.enumerationToInputSchema(attribute);\n case 'float':\n return attributes.floatToInputSchema(attribute);\n case 'integer':\n return attributes.integerToInputSchema(attribute);\n case 'json':\n return attributes.jsonToInputSchema(attribute);\n case 'media':\n return attributes.mediaToInputSchema(attribute);\n case 'relation':\n return attributes.relationToInputSchema(attribute);\n case 'password':\n case 'text':\n case 'richtext':\n case 'string':\n return attributes.textToInputSchema(attribute);\n case 'time':\n return attributes.timeToInputSchema(attribute);\n case 'timestamp':\n return attributes.timestampToInputSchema(attribute);\n case 'uid':\n return attributes.uidToInputSchema(attribute);\n default: {\n const { type } = attribute as Schema.Attribute.AnyAttribute;\n\n throw new Error(`Unsupported attribute type: ${type}`);\n }\n }\n};\n"],"names":["createAttributesSchema","attributes","reduce","acc","name","attribute","extend","mapAttributeToSchema","z","object","createAttributesInputSchema","mapAttributeToInputSchema","type","Error"],"mappings":"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"}
1
+ {"version":3,"file":"mappers.mjs","sources":["../../../../src/core-api/routes/validation/mappers.ts"],"sourcesContent":["/**\n * @fileoverview\n * This file contains functions responsible for mapping Strapi attribute definitions to Zod schemas.\n */\n\nimport type { Schema } from '@strapi/types';\nimport * as z from 'zod/v4';\n\n// eslint-disable-next-line import/no-cycle\nimport * as attributes from './attributes';\n\nconst isCustomFieldAttribute = (\n attribute: unknown\n): attribute is { type: 'customField'; customField: string } => {\n return (\n !!attribute &&\n typeof attribute === 'object' &&\n (attribute as any).type === 'customField' &&\n typeof (attribute as any).customField === 'string'\n );\n};\n\n/**\n * Creates a Zod schema for a collection of Strapi attributes.\n *\n * @param attributes - An array of tuples, where each tuple contains the attribute name and its schema definition.\n * @returns A Zod object schema representing the combined attributes.\n *\n * @example\n * ```typescript\n * const myAttributes = [\n * ['title', { type: 'string', required: true }],\n * ['description', { type: 'text' }],\n * ];\n * const schema = createAttributesSchema(myAttributes);\n * // schema will be a Zod object with 'title' and 'description' fields,\n * // each mapped to their respective Zod schemas based on their Strapi attribute types.\n * ```\n */\nexport const createAttributesSchema = (\n attributes: [name: string, attribute: Schema.Attribute.AnyAttribute][]\n) => {\n return attributes.reduce((acc, [name, attribute]) => {\n return acc.extend({\n get [name]() {\n return mapAttributeToSchema(attribute);\n },\n });\n }, z.object({}));\n};\n\n/**\n * Creates a Zod input schema for a collection of Strapi attributes.\n * This is typically used for validating incoming data (e.g., from API requests).\n *\n * @param attributes - An array of tuples, where each tuple contains the attribute name and its schema definition.\n * @returns A Zod object schema representing the combined input attributes.\n *\n * @example\n * ```typescript\n * const myInputAttributes = [\n * ['email', { type: 'email', required: true }],\n * ['description', { type: 'text', minLength: 8 }],\n * ];\n * const inputSchema = createAttributesInputSchema(myInputAttributes);\n * // inputSchema will be a Zod object with 'email' and 'description' fields,\n * // mapped to Zod schemas suitable for input validation.\n * ```\n */\nexport const createAttributesInputSchema = (\n attributes: [name: string, attribute: Schema.Attribute.AnyAttribute][]\n) => {\n return attributes.reduce((acc, [name, attribute]) => {\n return acc.extend({\n get [name]() {\n return mapAttributeToInputSchema(attribute);\n },\n });\n }, z.object({}));\n};\n\n/**\n * Maps a Strapi attribute definition to a corresponding Zod validation schema.\n *\n * This function handles every Strapi attribute types and converts them into\n * appropriate Zod validation schemas.\n *\n * @param attribute - The Strapi attribute configuration object.\n * @returns A Zod schema that corresponds to the input attribute's type.\n * @throws {Error} Throws an error if an unsupported attribute type is provided.\n *\n * @example\n * ```typescript\n * const stringAttribute = { type: 'string', minLength: 3 };\n * const stringSchema = mapAttributeToSchema(stringAttribute); // Returns a Zod string schema with minLength.\n *\n * const booleanAttribute = { type: 'boolean', default: false };\n * const booleanSchema = mapAttributeToSchema(booleanAttribute); // Returns a Zod boolean schema with a default.\n * ```\n */\nexport const mapAttributeToSchema = (attribute: Schema.Attribute.AnyAttribute): z.ZodTypeAny => {\n switch (attribute.type) {\n case 'biginteger':\n return attributes.bigIntegerToSchema(attribute);\n case 'blocks':\n return attributes.blocksToSchema();\n case 'boolean':\n return attributes.booleanToSchema(attribute);\n case 'component':\n return attributes.componentToSchema(attribute);\n case 'date':\n return attributes.dateToSchema(attribute);\n case 'datetime':\n return attributes.datetimeToSchema(attribute);\n case 'decimal':\n return attributes.decimalToSchema(attribute);\n case 'dynamiczone':\n return attributes.dynamicZoneToSchema(attribute);\n case 'email':\n return attributes.emailToSchema(attribute);\n case 'enumeration':\n return attributes.enumToSchema(attribute);\n case 'float':\n return attributes.floatToSchema(attribute);\n case 'integer':\n return attributes.integerToSchema(attribute);\n case 'json':\n return attributes.jsonToSchema(attribute);\n case 'media':\n return attributes.mediaToSchema(attribute);\n case 'relation':\n return attributes.relationToSchema(attribute);\n case 'password':\n case 'text':\n case 'richtext':\n case 'string':\n return attributes.stringToSchema(attribute);\n case 'time':\n return attributes.timeToSchema(attribute);\n case 'timestamp':\n return attributes.timestampToSchema(attribute);\n case 'uid':\n return attributes.uidToSchema(attribute);\n default: {\n if (isCustomFieldAttribute(attribute)) {\n const attrCF = attribute as { type: 'customField'; customField: string };\n const strapiInstance = global.strapi;\n if (!strapiInstance) {\n throw new Error('Strapi instance not available for custom field conversion');\n }\n\n const customField = strapiInstance.get('custom-fields').get(attrCF.customField);\n if (!customField) {\n throw new Error(`Custom field '${attrCF.customField}' not found`);\n }\n\n // Re-dispatch with the resolved underlying Strapi kind\n return mapAttributeToSchema({ ...attrCF, type: customField.type });\n }\n\n const { type } = attribute as Schema.Attribute.AnyAttribute;\n\n throw new Error(`Unsupported attribute type: ${type}`);\n }\n }\n};\n\n/**\n * Maps a Strapi attribute definition to a corresponding Zod input validation schema.\n *\n * This function handles every Strapi attribute types and converts them into\n * appropriate Zod validation schemas with their respective constraints.\n *\n * @param attribute - The Strapi attribute configuration object. Contains type information\n * and validation rules for the attribute.\n *\n * @returns A Zod schema that corresponds to the input attribute's type and validation rules\n *\n * @example\n * ```typescript\n * // String attribute with constraints\n * const stringAttribute = {\n * type: 'string',\n * minLength: 3,\n * maxLength: 50,\n * required: true\n * };\n * const stringSchema = mapAttributeToInputSchema(stringAttribute);\n *\n * // Enumeration attribute\n * const enumAttribute = {\n * type: 'enumeration',\n * enum: ['draft', 'published', 'archived']\n * };\n * const enumSchema = mapAttributeToInputSchema(enumAttribute);\n *\n * // Media attribute with multiple files\n * const mediaAttribute = {\n * type: 'media',\n * multiple: true\n * };\n * const mediaSchema = mapAttributeToInputSchema(mediaAttribute);\n * ```\n *\n * @throws {Error} Throws an error if an unsupported attribute type is provided\n *\n */\nexport const mapAttributeToInputSchema = (\n attribute: Schema.Attribute.AnyAttribute\n): z.ZodTypeAny => {\n switch (attribute.type) {\n case 'biginteger':\n return attributes.bigIntegerToInputSchema(attribute);\n case 'blocks':\n return attributes.blocksToInputSchema();\n case 'boolean':\n return attributes.booleanToInputSchema(attribute);\n case 'component':\n return attributes.componentToInputSchema(attribute);\n case 'date':\n return attributes.dateToInputSchema(attribute);\n case 'datetime':\n return attributes.datetimeToInputSchema(attribute);\n case 'decimal':\n return attributes.decimalToInputSchema(attribute);\n case 'dynamiczone':\n return attributes.dynamicZoneToInputSchema(attribute);\n case 'email':\n return attributes.emailToInputSchema(attribute);\n case 'enumeration':\n return attributes.enumerationToInputSchema(attribute);\n case 'float':\n return attributes.floatToInputSchema(attribute);\n case 'integer':\n return attributes.integerToInputSchema(attribute);\n case 'json':\n return attributes.jsonToInputSchema(attribute);\n case 'media':\n return attributes.mediaToInputSchema(attribute);\n case 'relation':\n return attributes.relationToInputSchema(attribute);\n case 'password':\n case 'text':\n case 'richtext':\n case 'string':\n return attributes.textToInputSchema(attribute);\n case 'time':\n return attributes.timeToInputSchema(attribute);\n case 'timestamp':\n return attributes.timestampToInputSchema(attribute);\n case 'uid':\n return attributes.uidToInputSchema(attribute);\n default: {\n if (isCustomFieldAttribute(attribute)) {\n const attrCF = attribute as { type: 'customField'; customField: string };\n const strapiInstance = global.strapi;\n if (!strapiInstance) {\n throw new Error('Strapi instance not available for custom field conversion');\n }\n\n const customField = strapiInstance.get('custom-fields').get(attrCF.customField);\n if (!customField) {\n throw new Error(`Custom field '${attrCF.customField}' not found`);\n }\n\n // Re-dispatch with the resolved underlying Strapi kind\n return mapAttributeToInputSchema({ ...attrCF, type: customField.type });\n }\n\n const { type } = attribute as Schema.Attribute.AnyAttribute;\n\n throw new Error(`Unsupported attribute type: ${type}`);\n }\n }\n};\n"],"names":["isCustomFieldAttribute","attribute","type","customField","createAttributesSchema","attributes","reduce","acc","name","extend","mapAttributeToSchema","z","object","createAttributesInputSchema","mapAttributeToInputSchema","attrCF","strapiInstance","global","strapi","Error","get"],"mappings":"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"}
@@ -117,7 +117,7 @@ async function loadPlugins(strapi1) {
117
117
  try {
118
118
  serverEntrypointPath = path.join(enabledPlugin.pathToPlugin, resolvedExport);
119
119
  } catch (e) {
120
- throw new Error(`Error loading the plugin ${pluginName} because ${pluginName} is not installed. Please either install the plugin or remove it's configuration.`);
120
+ throw new Error(`Error loading the plugin ${pluginName} because ${pluginName} is not installed. Please either install the plugin or remove its configuration.`);
121
121
  }
122
122
  // only load plugins with a server entrypoint
123
123
  if (!await fse.pathExists(serverEntrypointPath)) {
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../src/loaders/plugins/index.ts"],"sourcesContent":["import { join } from 'path';\nimport fse from 'fs-extra';\nimport { defaultsDeep, defaults, getOr, get } from 'lodash/fp';\nimport * as resolve from 'resolve.exports';\n\nimport { env } from '@strapi/utils';\nimport type { Core, Plugin, Struct } from '@strapi/types';\nimport { loadConfigFile } from '../../utils/load-config-file';\nimport { loadFiles } from '../../utils/load-files';\nimport { getEnabledPlugins } from './get-enabled-plugins';\nimport { getUserPluginsConfig } from './get-user-plugins-config';\nimport { getGlobalId } from '../../domain/content-type';\n\ninterface Plugins {\n [key: string]: Plugin.LoadedPlugin;\n}\n\nconst defaultPlugin = {\n bootstrap() {},\n destroy() {},\n register() {},\n config: {\n default: {},\n validator() {},\n },\n routes: [],\n controllers: {},\n services: {},\n policies: {},\n middlewares: {},\n contentTypes: {},\n};\n\nconst applyUserExtension = async (plugins: Plugins) => {\n const extensionsDir = strapi.dirs.dist.extensions;\n if (!(await fse.pathExists(extensionsDir))) {\n return;\n }\n\n const extendedSchemas = await loadFiles(extensionsDir, '**/content-types/**/schema.json');\n const strapiServers = await loadFiles(extensionsDir, '**/strapi-server.js');\n\n for (const pluginName of Object.keys(plugins)) {\n const plugin = plugins[pluginName];\n // first: load json schema\n for (const ctName of Object.keys(plugin.contentTypes)) {\n const extendedSchema = get([pluginName, 'content-types', ctName, 'schema'], extendedSchemas);\n if (extendedSchema) {\n plugin.contentTypes[ctName].schema = {\n ...plugin.contentTypes[ctName].schema,\n ...extendedSchema,\n };\n }\n }\n // second: execute strapi-server extension\n const strapiServer = get([pluginName, 'strapi-server'], strapiServers);\n if (strapiServer) {\n plugins[pluginName] = await strapiServer(plugin);\n }\n }\n};\n\nconst applyUserConfig = async (plugins: Plugins) => {\n const userPluginsConfig = await getUserPluginsConfig();\n\n for (const pluginName of Object.keys(plugins)) {\n const plugin = plugins[pluginName];\n const userPluginConfig = getOr({}, `${pluginName}.config`, userPluginsConfig);\n const defaultConfig =\n typeof plugin.config.default === 'function'\n ? plugin.config.default({ env })\n : plugin.config.default;\n\n const config = defaultsDeep(defaultConfig, userPluginConfig);\n try {\n plugin.config.validator(config);\n } catch (e) {\n if (e instanceof Error) {\n throw new Error(`Error regarding ${pluginName} config: ${e.message}`);\n }\n\n throw e;\n }\n plugin.config = config;\n }\n};\n\nexport default async function loadPlugins(strapi: Core.Strapi) {\n const plugins: Plugins = {};\n\n const enabledPlugins = await getEnabledPlugins(strapi);\n\n strapi.config.set('enabledPlugins', enabledPlugins);\n\n for (const pluginName of Object.keys(enabledPlugins)) {\n const enabledPlugin = enabledPlugins[pluginName];\n\n let serverEntrypointPath;\n let resolvedExport = './strapi-server.js';\n\n try {\n resolvedExport = (\n resolve.exports(enabledPlugin.packageInfo, 'strapi-server', {\n require: true,\n }) ?? './strapi-server.js'\n ).toString();\n } catch (e) {\n // no export map or missing strapi-server export => fallback to default\n }\n\n try {\n serverEntrypointPath = join(enabledPlugin.pathToPlugin, resolvedExport);\n } catch (e) {\n throw new Error(\n `Error loading the plugin ${pluginName} because ${pluginName} is not installed. Please either install the plugin or remove it's configuration.`\n );\n }\n\n // only load plugins with a server entrypoint\n if (!(await fse.pathExists(serverEntrypointPath))) {\n continue;\n }\n\n const pluginServer = loadConfigFile(serverEntrypointPath);\n plugins[pluginName] = {\n ...defaultPlugin,\n ...pluginServer,\n contentTypes: formatContentTypes(pluginName, pluginServer.contentTypes ?? {}),\n config: defaults(defaultPlugin.config, pluginServer.config),\n routes: pluginServer.routes ?? defaultPlugin.routes,\n };\n }\n\n // TODO: validate plugin format\n await applyUserConfig(plugins);\n await applyUserExtension(plugins);\n\n for (const pluginName of Object.keys(plugins)) {\n strapi.get('plugins').add(pluginName, plugins[pluginName]);\n }\n}\n\nconst formatContentTypes = (\n pluginName: string,\n contentTypes: Record<string, { schema: Struct.ContentTypeSchema }>\n) => {\n Object.values(contentTypes).forEach((definition) => {\n const { schema } = definition;\n\n Object.assign(schema, {\n plugin: pluginName,\n collectionName:\n schema.collectionName || `${pluginName}_${schema.info.singularName}`.toLowerCase(),\n globalId: getGlobalId(schema, pluginName),\n });\n });\n\n return contentTypes;\n};\n"],"names":["defaultPlugin","bootstrap","destroy","register","config","default","validator","routes","controllers","services","policies","middlewares","contentTypes","applyUserExtension","plugins","extensionsDir","strapi","dirs","dist","extensions","fse","pathExists","extendedSchemas","loadFiles","strapiServers","pluginName","Object","keys","plugin","ctName","extendedSchema","get","schema","strapiServer","applyUserConfig","userPluginsConfig","getUserPluginsConfig","userPluginConfig","getOr","defaultConfig","env","defaultsDeep","e","Error","message","loadPlugins","enabledPlugins","getEnabledPlugins","set","enabledPlugin","serverEntrypointPath","resolvedExport","resolve","exports","packageInfo","require","toString","join","pathToPlugin","pluginServer","loadConfigFile","formatContentTypes","defaults","add","values","forEach","definition","assign","collectionName","info","singularName","toLowerCase","globalId","getGlobalId"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../../../src/loaders/plugins/index.ts"],"sourcesContent":["import { join } from 'path';\nimport fse from 'fs-extra';\nimport { defaultsDeep, defaults, getOr, get } from 'lodash/fp';\nimport * as resolve from 'resolve.exports';\n\nimport { env } from '@strapi/utils';\nimport type { Core, Plugin, Struct } from '@strapi/types';\nimport { loadConfigFile } from '../../utils/load-config-file';\nimport { loadFiles } from '../../utils/load-files';\nimport { getEnabledPlugins } from './get-enabled-plugins';\nimport { getUserPluginsConfig } from './get-user-plugins-config';\nimport { getGlobalId } from '../../domain/content-type';\n\ninterface Plugins {\n [key: string]: Plugin.LoadedPlugin;\n}\n\nconst defaultPlugin = {\n bootstrap() {},\n destroy() {},\n register() {},\n config: {\n default: {},\n validator() {},\n },\n routes: [],\n controllers: {},\n services: {},\n policies: {},\n middlewares: {},\n contentTypes: {},\n};\n\nconst applyUserExtension = async (plugins: Plugins) => {\n const extensionsDir = strapi.dirs.dist.extensions;\n if (!(await fse.pathExists(extensionsDir))) {\n return;\n }\n\n const extendedSchemas = await loadFiles(extensionsDir, '**/content-types/**/schema.json');\n const strapiServers = await loadFiles(extensionsDir, '**/strapi-server.js');\n\n for (const pluginName of Object.keys(plugins)) {\n const plugin = plugins[pluginName];\n // first: load json schema\n for (const ctName of Object.keys(plugin.contentTypes)) {\n const extendedSchema = get([pluginName, 'content-types', ctName, 'schema'], extendedSchemas);\n if (extendedSchema) {\n plugin.contentTypes[ctName].schema = {\n ...plugin.contentTypes[ctName].schema,\n ...extendedSchema,\n };\n }\n }\n // second: execute strapi-server extension\n const strapiServer = get([pluginName, 'strapi-server'], strapiServers);\n if (strapiServer) {\n plugins[pluginName] = await strapiServer(plugin);\n }\n }\n};\n\nconst applyUserConfig = async (plugins: Plugins) => {\n const userPluginsConfig = await getUserPluginsConfig();\n\n for (const pluginName of Object.keys(plugins)) {\n const plugin = plugins[pluginName];\n const userPluginConfig = getOr({}, `${pluginName}.config`, userPluginsConfig);\n const defaultConfig =\n typeof plugin.config.default === 'function'\n ? plugin.config.default({ env })\n : plugin.config.default;\n\n const config = defaultsDeep(defaultConfig, userPluginConfig);\n try {\n plugin.config.validator(config);\n } catch (e) {\n if (e instanceof Error) {\n throw new Error(`Error regarding ${pluginName} config: ${e.message}`);\n }\n\n throw e;\n }\n plugin.config = config;\n }\n};\n\nexport default async function loadPlugins(strapi: Core.Strapi) {\n const plugins: Plugins = {};\n\n const enabledPlugins = await getEnabledPlugins(strapi);\n\n strapi.config.set('enabledPlugins', enabledPlugins);\n\n for (const pluginName of Object.keys(enabledPlugins)) {\n const enabledPlugin = enabledPlugins[pluginName];\n\n let serverEntrypointPath;\n let resolvedExport = './strapi-server.js';\n\n try {\n resolvedExport = (\n resolve.exports(enabledPlugin.packageInfo, 'strapi-server', {\n require: true,\n }) ?? './strapi-server.js'\n ).toString();\n } catch (e) {\n // no export map or missing strapi-server export => fallback to default\n }\n\n try {\n serverEntrypointPath = join(enabledPlugin.pathToPlugin, resolvedExport);\n } catch (e) {\n throw new Error(\n `Error loading the plugin ${pluginName} because ${pluginName} is not installed. Please either install the plugin or remove its configuration.`\n );\n }\n\n // only load plugins with a server entrypoint\n if (!(await fse.pathExists(serverEntrypointPath))) {\n continue;\n }\n\n const pluginServer = loadConfigFile(serverEntrypointPath);\n plugins[pluginName] = {\n ...defaultPlugin,\n ...pluginServer,\n contentTypes: formatContentTypes(pluginName, pluginServer.contentTypes ?? {}),\n config: defaults(defaultPlugin.config, pluginServer.config),\n routes: pluginServer.routes ?? defaultPlugin.routes,\n };\n }\n\n // TODO: validate plugin format\n await applyUserConfig(plugins);\n await applyUserExtension(plugins);\n\n for (const pluginName of Object.keys(plugins)) {\n strapi.get('plugins').add(pluginName, plugins[pluginName]);\n }\n}\n\nconst formatContentTypes = (\n pluginName: string,\n contentTypes: Record<string, { schema: Struct.ContentTypeSchema }>\n) => {\n Object.values(contentTypes).forEach((definition) => {\n const { schema } = definition;\n\n Object.assign(schema, {\n plugin: pluginName,\n collectionName:\n schema.collectionName || `${pluginName}_${schema.info.singularName}`.toLowerCase(),\n globalId: getGlobalId(schema, pluginName),\n });\n });\n\n return contentTypes;\n};\n"],"names":["defaultPlugin","bootstrap","destroy","register","config","default","validator","routes","controllers","services","policies","middlewares","contentTypes","applyUserExtension","plugins","extensionsDir","strapi","dirs","dist","extensions","fse","pathExists","extendedSchemas","loadFiles","strapiServers","pluginName","Object","keys","plugin","ctName","extendedSchema","get","schema","strapiServer","applyUserConfig","userPluginsConfig","getUserPluginsConfig","userPluginConfig","getOr","defaultConfig","env","defaultsDeep","e","Error","message","loadPlugins","enabledPlugins","getEnabledPlugins","set","enabledPlugin","serverEntrypointPath","resolvedExport","resolve","exports","packageInfo","require","toString","join","pathToPlugin","pluginServer","loadConfigFile","formatContentTypes","defaults","add","values","forEach","definition","assign","collectionName","info","singularName","toLowerCase","globalId","getGlobalId"],"mappings":"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"}
@@ -96,7 +96,7 @@ async function loadPlugins(strapi1) {
96
96
  try {
97
97
  serverEntrypointPath = join(enabledPlugin.pathToPlugin, resolvedExport);
98
98
  } catch (e) {
99
- throw new Error(`Error loading the plugin ${pluginName} because ${pluginName} is not installed. Please either install the plugin or remove it's configuration.`);
99
+ throw new Error(`Error loading the plugin ${pluginName} because ${pluginName} is not installed. Please either install the plugin or remove its configuration.`);
100
100
  }
101
101
  // only load plugins with a server entrypoint
102
102
  if (!await fse.pathExists(serverEntrypointPath)) {
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","sources":["../../../src/loaders/plugins/index.ts"],"sourcesContent":["import { join } from 'path';\nimport fse from 'fs-extra';\nimport { defaultsDeep, defaults, getOr, get } from 'lodash/fp';\nimport * as resolve from 'resolve.exports';\n\nimport { env } from '@strapi/utils';\nimport type { Core, Plugin, Struct } from '@strapi/types';\nimport { loadConfigFile } from '../../utils/load-config-file';\nimport { loadFiles } from '../../utils/load-files';\nimport { getEnabledPlugins } from './get-enabled-plugins';\nimport { getUserPluginsConfig } from './get-user-plugins-config';\nimport { getGlobalId } from '../../domain/content-type';\n\ninterface Plugins {\n [key: string]: Plugin.LoadedPlugin;\n}\n\nconst defaultPlugin = {\n bootstrap() {},\n destroy() {},\n register() {},\n config: {\n default: {},\n validator() {},\n },\n routes: [],\n controllers: {},\n services: {},\n policies: {},\n middlewares: {},\n contentTypes: {},\n};\n\nconst applyUserExtension = async (plugins: Plugins) => {\n const extensionsDir = strapi.dirs.dist.extensions;\n if (!(await fse.pathExists(extensionsDir))) {\n return;\n }\n\n const extendedSchemas = await loadFiles(extensionsDir, '**/content-types/**/schema.json');\n const strapiServers = await loadFiles(extensionsDir, '**/strapi-server.js');\n\n for (const pluginName of Object.keys(plugins)) {\n const plugin = plugins[pluginName];\n // first: load json schema\n for (const ctName of Object.keys(plugin.contentTypes)) {\n const extendedSchema = get([pluginName, 'content-types', ctName, 'schema'], extendedSchemas);\n if (extendedSchema) {\n plugin.contentTypes[ctName].schema = {\n ...plugin.contentTypes[ctName].schema,\n ...extendedSchema,\n };\n }\n }\n // second: execute strapi-server extension\n const strapiServer = get([pluginName, 'strapi-server'], strapiServers);\n if (strapiServer) {\n plugins[pluginName] = await strapiServer(plugin);\n }\n }\n};\n\nconst applyUserConfig = async (plugins: Plugins) => {\n const userPluginsConfig = await getUserPluginsConfig();\n\n for (const pluginName of Object.keys(plugins)) {\n const plugin = plugins[pluginName];\n const userPluginConfig = getOr({}, `${pluginName}.config`, userPluginsConfig);\n const defaultConfig =\n typeof plugin.config.default === 'function'\n ? plugin.config.default({ env })\n : plugin.config.default;\n\n const config = defaultsDeep(defaultConfig, userPluginConfig);\n try {\n plugin.config.validator(config);\n } catch (e) {\n if (e instanceof Error) {\n throw new Error(`Error regarding ${pluginName} config: ${e.message}`);\n }\n\n throw e;\n }\n plugin.config = config;\n }\n};\n\nexport default async function loadPlugins(strapi: Core.Strapi) {\n const plugins: Plugins = {};\n\n const enabledPlugins = await getEnabledPlugins(strapi);\n\n strapi.config.set('enabledPlugins', enabledPlugins);\n\n for (const pluginName of Object.keys(enabledPlugins)) {\n const enabledPlugin = enabledPlugins[pluginName];\n\n let serverEntrypointPath;\n let resolvedExport = './strapi-server.js';\n\n try {\n resolvedExport = (\n resolve.exports(enabledPlugin.packageInfo, 'strapi-server', {\n require: true,\n }) ?? './strapi-server.js'\n ).toString();\n } catch (e) {\n // no export map or missing strapi-server export => fallback to default\n }\n\n try {\n serverEntrypointPath = join(enabledPlugin.pathToPlugin, resolvedExport);\n } catch (e) {\n throw new Error(\n `Error loading the plugin ${pluginName} because ${pluginName} is not installed. Please either install the plugin or remove it's configuration.`\n );\n }\n\n // only load plugins with a server entrypoint\n if (!(await fse.pathExists(serverEntrypointPath))) {\n continue;\n }\n\n const pluginServer = loadConfigFile(serverEntrypointPath);\n plugins[pluginName] = {\n ...defaultPlugin,\n ...pluginServer,\n contentTypes: formatContentTypes(pluginName, pluginServer.contentTypes ?? {}),\n config: defaults(defaultPlugin.config, pluginServer.config),\n routes: pluginServer.routes ?? defaultPlugin.routes,\n };\n }\n\n // TODO: validate plugin format\n await applyUserConfig(plugins);\n await applyUserExtension(plugins);\n\n for (const pluginName of Object.keys(plugins)) {\n strapi.get('plugins').add(pluginName, plugins[pluginName]);\n }\n}\n\nconst formatContentTypes = (\n pluginName: string,\n contentTypes: Record<string, { schema: Struct.ContentTypeSchema }>\n) => {\n Object.values(contentTypes).forEach((definition) => {\n const { schema } = definition;\n\n Object.assign(schema, {\n plugin: pluginName,\n collectionName:\n schema.collectionName || `${pluginName}_${schema.info.singularName}`.toLowerCase(),\n globalId: getGlobalId(schema, pluginName),\n });\n });\n\n return contentTypes;\n};\n"],"names":["defaultPlugin","bootstrap","destroy","register","config","default","validator","routes","controllers","services","policies","middlewares","contentTypes","applyUserExtension","plugins","extensionsDir","strapi","dirs","dist","extensions","fse","pathExists","extendedSchemas","loadFiles","strapiServers","pluginName","Object","keys","plugin","ctName","extendedSchema","get","schema","strapiServer","applyUserConfig","userPluginsConfig","getUserPluginsConfig","userPluginConfig","getOr","defaultConfig","env","defaultsDeep","e","Error","message","loadPlugins","enabledPlugins","getEnabledPlugins","set","enabledPlugin","serverEntrypointPath","resolvedExport","resolve","exports","packageInfo","require","toString","join","pathToPlugin","pluginServer","loadConfigFile","formatContentTypes","defaults","add","values","forEach","definition","assign","collectionName","info","singularName","toLowerCase","globalId","getGlobalId"],"mappings":"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"}
1
+ {"version":3,"file":"index.mjs","sources":["../../../src/loaders/plugins/index.ts"],"sourcesContent":["import { join } from 'path';\nimport fse from 'fs-extra';\nimport { defaultsDeep, defaults, getOr, get } from 'lodash/fp';\nimport * as resolve from 'resolve.exports';\n\nimport { env } from '@strapi/utils';\nimport type { Core, Plugin, Struct } from '@strapi/types';\nimport { loadConfigFile } from '../../utils/load-config-file';\nimport { loadFiles } from '../../utils/load-files';\nimport { getEnabledPlugins } from './get-enabled-plugins';\nimport { getUserPluginsConfig } from './get-user-plugins-config';\nimport { getGlobalId } from '../../domain/content-type';\n\ninterface Plugins {\n [key: string]: Plugin.LoadedPlugin;\n}\n\nconst defaultPlugin = {\n bootstrap() {},\n destroy() {},\n register() {},\n config: {\n default: {},\n validator() {},\n },\n routes: [],\n controllers: {},\n services: {},\n policies: {},\n middlewares: {},\n contentTypes: {},\n};\n\nconst applyUserExtension = async (plugins: Plugins) => {\n const extensionsDir = strapi.dirs.dist.extensions;\n if (!(await fse.pathExists(extensionsDir))) {\n return;\n }\n\n const extendedSchemas = await loadFiles(extensionsDir, '**/content-types/**/schema.json');\n const strapiServers = await loadFiles(extensionsDir, '**/strapi-server.js');\n\n for (const pluginName of Object.keys(plugins)) {\n const plugin = plugins[pluginName];\n // first: load json schema\n for (const ctName of Object.keys(plugin.contentTypes)) {\n const extendedSchema = get([pluginName, 'content-types', ctName, 'schema'], extendedSchemas);\n if (extendedSchema) {\n plugin.contentTypes[ctName].schema = {\n ...plugin.contentTypes[ctName].schema,\n ...extendedSchema,\n };\n }\n }\n // second: execute strapi-server extension\n const strapiServer = get([pluginName, 'strapi-server'], strapiServers);\n if (strapiServer) {\n plugins[pluginName] = await strapiServer(plugin);\n }\n }\n};\n\nconst applyUserConfig = async (plugins: Plugins) => {\n const userPluginsConfig = await getUserPluginsConfig();\n\n for (const pluginName of Object.keys(plugins)) {\n const plugin = plugins[pluginName];\n const userPluginConfig = getOr({}, `${pluginName}.config`, userPluginsConfig);\n const defaultConfig =\n typeof plugin.config.default === 'function'\n ? plugin.config.default({ env })\n : plugin.config.default;\n\n const config = defaultsDeep(defaultConfig, userPluginConfig);\n try {\n plugin.config.validator(config);\n } catch (e) {\n if (e instanceof Error) {\n throw new Error(`Error regarding ${pluginName} config: ${e.message}`);\n }\n\n throw e;\n }\n plugin.config = config;\n }\n};\n\nexport default async function loadPlugins(strapi: Core.Strapi) {\n const plugins: Plugins = {};\n\n const enabledPlugins = await getEnabledPlugins(strapi);\n\n strapi.config.set('enabledPlugins', enabledPlugins);\n\n for (const pluginName of Object.keys(enabledPlugins)) {\n const enabledPlugin = enabledPlugins[pluginName];\n\n let serverEntrypointPath;\n let resolvedExport = './strapi-server.js';\n\n try {\n resolvedExport = (\n resolve.exports(enabledPlugin.packageInfo, 'strapi-server', {\n require: true,\n }) ?? './strapi-server.js'\n ).toString();\n } catch (e) {\n // no export map or missing strapi-server export => fallback to default\n }\n\n try {\n serverEntrypointPath = join(enabledPlugin.pathToPlugin, resolvedExport);\n } catch (e) {\n throw new Error(\n `Error loading the plugin ${pluginName} because ${pluginName} is not installed. Please either install the plugin or remove its configuration.`\n );\n }\n\n // only load plugins with a server entrypoint\n if (!(await fse.pathExists(serverEntrypointPath))) {\n continue;\n }\n\n const pluginServer = loadConfigFile(serverEntrypointPath);\n plugins[pluginName] = {\n ...defaultPlugin,\n ...pluginServer,\n contentTypes: formatContentTypes(pluginName, pluginServer.contentTypes ?? {}),\n config: defaults(defaultPlugin.config, pluginServer.config),\n routes: pluginServer.routes ?? defaultPlugin.routes,\n };\n }\n\n // TODO: validate plugin format\n await applyUserConfig(plugins);\n await applyUserExtension(plugins);\n\n for (const pluginName of Object.keys(plugins)) {\n strapi.get('plugins').add(pluginName, plugins[pluginName]);\n }\n}\n\nconst formatContentTypes = (\n pluginName: string,\n contentTypes: Record<string, { schema: Struct.ContentTypeSchema }>\n) => {\n Object.values(contentTypes).forEach((definition) => {\n const { schema } = definition;\n\n Object.assign(schema, {\n plugin: pluginName,\n collectionName:\n schema.collectionName || `${pluginName}_${schema.info.singularName}`.toLowerCase(),\n globalId: getGlobalId(schema, pluginName),\n });\n });\n\n return contentTypes;\n};\n"],"names":["defaultPlugin","bootstrap","destroy","register","config","default","validator","routes","controllers","services","policies","middlewares","contentTypes","applyUserExtension","plugins","extensionsDir","strapi","dirs","dist","extensions","fse","pathExists","extendedSchemas","loadFiles","strapiServers","pluginName","Object","keys","plugin","ctName","extendedSchema","get","schema","strapiServer","applyUserConfig","userPluginsConfig","getUserPluginsConfig","userPluginConfig","getOr","defaultConfig","env","defaultsDeep","e","Error","message","loadPlugins","enabledPlugins","getEnabledPlugins","set","enabledPlugin","serverEntrypointPath","resolvedExport","resolve","exports","packageInfo","require","toString","join","pathToPlugin","pluginServer","loadConfigFile","formatContentTypes","defaults","add","values","forEach","definition","assign","collectionName","info","singularName","toLowerCase","globalId","getGlobalId"],"mappings":"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"}
@@ -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.e5d4b412da0d932b61b2fa5012d16513fda6de04";
6
+ var version = "0.0.0-experimental.e65c671348c825470427c509f1273497b0b4b828";
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.e5d4b412da0d932b61b2fa5012d16513fda6de04",
63
- "@strapi/database": "0.0.0-experimental.e5d4b412da0d932b61b2fa5012d16513fda6de04",
64
- "@strapi/generators": "0.0.0-experimental.e5d4b412da0d932b61b2fa5012d16513fda6de04",
65
- "@strapi/logger": "0.0.0-experimental.e5d4b412da0d932b61b2fa5012d16513fda6de04",
66
- "@strapi/permissions": "0.0.0-experimental.e5d4b412da0d932b61b2fa5012d16513fda6de04",
67
- "@strapi/types": "0.0.0-experimental.e5d4b412da0d932b61b2fa5012d16513fda6de04",
68
- "@strapi/typescript-utils": "0.0.0-experimental.e5d4b412da0d932b61b2fa5012d16513fda6de04",
69
- "@strapi/utils": "0.0.0-experimental.e5d4b412da0d932b61b2fa5012d16513fda6de04",
62
+ "@strapi/admin": "0.0.0-experimental.e65c671348c825470427c509f1273497b0b4b828",
63
+ "@strapi/database": "0.0.0-experimental.e65c671348c825470427c509f1273497b0b4b828",
64
+ "@strapi/generators": "0.0.0-experimental.e65c671348c825470427c509f1273497b0b4b828",
65
+ "@strapi/logger": "0.0.0-experimental.e65c671348c825470427c509f1273497b0b4b828",
66
+ "@strapi/permissions": "0.0.0-experimental.e65c671348c825470427c509f1273497b0b4b828",
67
+ "@strapi/types": "0.0.0-experimental.e65c671348c825470427c509f1273497b0b4b828",
68
+ "@strapi/typescript-utils": "0.0.0-experimental.e65c671348c825470427c509f1273497b0b4b828",
69
+ "@strapi/utils": "0.0.0-experimental.e65c671348c825470427c509f1273497b0b4b828",
70
+ "@vercel/stega": "0.1.2",
70
71
  bcryptjs: "2.4.3",
71
72
  boxen: "5.1.2",
72
73
  chalk: "4.1.2",
@@ -132,9 +133,9 @@ var devDependencies = {
132
133
  "@types/node": "18.19.24",
133
134
  "@types/node-schedule": "2.1.7",
134
135
  "@types/statuses": "2.0.1",
135
- "eslint-config-custom": "0.0.0-experimental.e5d4b412da0d932b61b2fa5012d16513fda6de04",
136
+ "eslint-config-custom": "0.0.0-experimental.e65c671348c825470427c509f1273497b0b4b828",
136
137
  supertest: "6.3.3",
137
- tsconfig: "0.0.0-experimental.e5d4b412da0d932b61b2fa5012d16513fda6de04"
138
+ tsconfig: "0.0.0-experimental.e65c671348c825470427c509f1273497b0b4b828"
138
139
  };
139
140
  var engines = {
140
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":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}