@webiny/api-headless-cms 6.4.12-beta.4 → 6.5.0-beta.0

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.
Files changed (241) hide show
  1. package/crud/contentEntry/entryDataValidation.d.ts +1 -1
  2. package/crud/contentEntry/entryDataValidation.js +33 -18
  3. package/crud/contentEntry/entryDataValidation.js.map +1 -1
  4. package/crud/contentEntry.crud.js +12 -39
  5. package/crud/contentEntry.crud.js.map +1 -1
  6. package/crud/contentModel/defaultFields.js +3 -2
  7. package/crud/contentModel/defaultFields.js.map +1 -1
  8. package/crud/contentModel/validate/endingAllowed.js +1 -1
  9. package/crud/contentModel/validate/endingAllowed.js.map +1 -1
  10. package/crud/contentModel/validate/pluralApiName.js +1 -1
  11. package/crud/contentModel/validate/pluralApiName.js.map +1 -1
  12. package/crud/contentModel/validate/singularApiName.js +1 -1
  13. package/crud/contentModel/validate/singularApiName.js.map +1 -1
  14. package/crud/contentModel/validation.js +2 -2
  15. package/crud/contentModel/validation.js.map +1 -1
  16. package/domain/contentModel/schemas.d.ts +4 -0
  17. package/domain/contentModel/schemas.js +5 -2
  18. package/domain/contentModel/schemas.js.map +1 -1
  19. package/domain/contentModel/validation/endingAllowed.js +1 -1
  20. package/domain/contentModel/validation/endingAllowed.js.map +1 -1
  21. package/domain/contentModel/validation/pluralApiName.js +1 -1
  22. package/domain/contentModel/validation/pluralApiName.js.map +1 -1
  23. package/domain/contentModel/validation/singularApiName.js +1 -1
  24. package/domain/contentModel/validation/singularApiName.js.map +1 -1
  25. package/export/crud/exporting.js +2 -2
  26. package/export/crud/exporting.js.map +1 -1
  27. package/export/crud/imports/importGroups.js +2 -1
  28. package/export/crud/imports/importGroups.js.map +1 -1
  29. package/export/crud/imports/validateModels.js +1 -1
  30. package/export/crud/imports/validateModels.js.map +1 -1
  31. package/exports/api/cms/model.d.ts +4 -1
  32. package/exports/api/cms/model.js +2 -0
  33. package/extension.d.ts +3 -0
  34. package/extension.js +19 -0
  35. package/extension.js.map +1 -0
  36. package/features/contentEntry/ContentEntriesFeature.js +2 -0
  37. package/features/contentEntry/ContentEntriesFeature.js.map +1 -1
  38. package/features/contentEntry/CreateEntry/CreateEntryUseCase.js +1 -2
  39. package/features/contentEntry/CreateEntry/CreateEntryUseCase.js.map +1 -1
  40. package/features/contentEntry/CreateEntryRevisionFrom/CreateEntryRevisionFromUseCase.js.map +1 -1
  41. package/features/contentEntry/DeleteEntryRevision/DeleteEntryRevisionRepository.js +1 -0
  42. package/features/contentEntry/DeleteEntryRevision/DeleteEntryRevisionRepository.js.map +1 -1
  43. package/features/contentEntry/GetSingletonEntry/GetSingletonEntryUseCase.js +1 -3
  44. package/features/contentEntry/GetSingletonEntry/GetSingletonEntryUseCase.js.map +1 -1
  45. package/features/contentEntry/PublishEntry/PublishEntryUseCase.js.map +1 -1
  46. package/features/contentEntry/UpdateRevision/UpdateRevisionRepository.d.ts +14 -0
  47. package/features/contentEntry/UpdateRevision/UpdateRevisionRepository.js +34 -0
  48. package/features/contentEntry/UpdateRevision/UpdateRevisionRepository.js.map +1 -0
  49. package/features/contentEntry/UpdateRevision/abstractions.d.ts +10 -0
  50. package/features/contentEntry/UpdateRevision/abstractions.js +5 -0
  51. package/features/contentEntry/UpdateRevision/abstractions.js.map +1 -0
  52. package/features/contentEntry/UpdateRevision/feature.d.ts +4 -0
  53. package/features/contentEntry/UpdateRevision/feature.js +11 -0
  54. package/features/contentEntry/UpdateRevision/feature.js.map +1 -0
  55. package/features/contentEntry/UpdateRevision/index.d.ts +1 -0
  56. package/features/contentEntry/UpdateRevision/index.js +1 -0
  57. package/features/contentEntry/UpdateRevisionDescription/UpdateRevisionDescriptionUseCase.d.ts +2 -2
  58. package/features/contentEntry/UpdateRevisionDescription/UpdateRevisionDescriptionUseCase.js +2 -2
  59. package/features/contentEntry/UpdateRevisionDescription/UpdateRevisionDescriptionUseCase.js.map +1 -1
  60. package/features/contentEntry/ensureItemIds.d.ts +13 -0
  61. package/features/contentEntry/ensureItemIds.js +22 -0
  62. package/features/contentEntry/ensureItemIds.js.map +1 -0
  63. package/features/contentEntry/entryDataFactories/CreateEntryDataFactory/CreateEntryDataFactory.d.ts +3 -1
  64. package/features/contentEntry/entryDataFactories/CreateEntryDataFactory/CreateEntryDataFactory.js +9 -3
  65. package/features/contentEntry/entryDataFactories/CreateEntryDataFactory/CreateEntryDataFactory.js.map +1 -1
  66. package/features/contentEntry/entryDataFactories/CreateEntryRevisionFromDataFactory/CreateEntryRevisionFromDataFactory.d.ts +3 -3
  67. package/features/contentEntry/entryDataFactories/CreateEntryRevisionFromDataFactory/CreateEntryRevisionFromDataFactory.js +10 -6
  68. package/features/contentEntry/entryDataFactories/CreateEntryRevisionFromDataFactory/CreateEntryRevisionFromDataFactory.js.map +1 -1
  69. package/features/contentEntry/entryDataFactories/UpdateEntryDataFactory/UpdateEntryDataFactory.d.ts +3 -1
  70. package/features/contentEntry/entryDataFactories/UpdateEntryDataFactory/UpdateEntryDataFactory.js +9 -3
  71. package/features/contentEntry/entryDataFactories/UpdateEntryDataFactory/UpdateEntryDataFactory.js.map +1 -1
  72. package/features/contentEntry/entryDataFactories/expiresAt.js +2 -2
  73. package/features/contentEntry/entryDataFactories/expiresAt.js.map +1 -1
  74. package/features/contentModel/ComponentMapGenerator/ComponentMapGenerator.d.ts +14 -0
  75. package/features/contentModel/ComponentMapGenerator/ComponentMapGenerator.js +32 -0
  76. package/features/contentModel/ComponentMapGenerator/ComponentMapGenerator.js.map +1 -0
  77. package/features/contentModel/ComponentMapGenerator/abstractions.d.ts +8 -0
  78. package/features/contentModel/ComponentMapGenerator/abstractions.js +5 -0
  79. package/features/contentModel/ComponentMapGenerator/abstractions.js.map +1 -0
  80. package/features/contentModel/ComponentMapGenerator/feature.d.ts +4 -0
  81. package/features/contentModel/ComponentMapGenerator/feature.js +11 -0
  82. package/features/contentModel/ComponentMapGenerator/feature.js.map +1 -0
  83. package/features/contentModel/ComponentMapGenerator/index.d.ts +2 -0
  84. package/features/contentModel/ComponentMapGenerator/index.js +2 -0
  85. package/features/contentModel/ContentModelFeature.js +6 -0
  86. package/features/contentModel/ContentModelFeature.js.map +1 -1
  87. package/features/contentModel/CreateModel/CreateModelRepository.js +2 -1
  88. package/features/contentModel/CreateModel/CreateModelRepository.js.map +1 -1
  89. package/features/contentModel/CreateModelFrom/CreateModelFromRepository.js +2 -1
  90. package/features/contentModel/CreateModelFrom/CreateModelFromRepository.js.map +1 -1
  91. package/features/contentModel/RefModelsGenerator/RefModelsGenerator.d.ts +19 -0
  92. package/features/contentModel/RefModelsGenerator/RefModelsGenerator.js +56 -0
  93. package/features/contentModel/RefModelsGenerator/RefModelsGenerator.js.map +1 -0
  94. package/features/contentModel/RefModelsGenerator/abstractions.d.ts +11 -0
  95. package/features/contentModel/RefModelsGenerator/abstractions.js +5 -0
  96. package/features/contentModel/RefModelsGenerator/abstractions.js.map +1 -0
  97. package/features/contentModel/RefModelsGenerator/feature.d.ts +4 -0
  98. package/features/contentModel/RefModelsGenerator/feature.js +11 -0
  99. package/features/contentModel/RefModelsGenerator/feature.js.map +1 -0
  100. package/features/contentModel/RefModelsGenerator/index.d.ts +2 -0
  101. package/features/contentModel/RefModelsGenerator/index.js +2 -0
  102. package/features/contentModel/ValuesSelectionGenerator/ValuesSelectionGenerator.d.ts +16 -0
  103. package/features/contentModel/ValuesSelectionGenerator/ValuesSelectionGenerator.js +54 -0
  104. package/features/contentModel/ValuesSelectionGenerator/ValuesSelectionGenerator.js.map +1 -0
  105. package/features/contentModel/ValuesSelectionGenerator/abstractions.d.ts +8 -0
  106. package/features/contentModel/ValuesSelectionGenerator/abstractions.js +5 -0
  107. package/features/contentModel/ValuesSelectionGenerator/abstractions.js.map +1 -0
  108. package/features/contentModel/ValuesSelectionGenerator/feature.d.ts +4 -0
  109. package/features/contentModel/ValuesSelectionGenerator/feature.js +11 -0
  110. package/features/contentModel/ValuesSelectionGenerator/feature.js.map +1 -0
  111. package/features/contentModel/ValuesSelectionGenerator/index.d.ts +1 -0
  112. package/features/contentModel/ValuesSelectionGenerator/index.js +1 -0
  113. package/features/graphql/feature.js +2 -0
  114. package/features/graphql/feature.js.map +1 -1
  115. package/features/graphql/fields/base/AssetToGraphQL.d.ts +26 -0
  116. package/features/graphql/fields/base/AssetToGraphQL.js +148 -0
  117. package/features/graphql/fields/base/AssetToGraphQL.js.map +1 -0
  118. package/features/graphql/fields/base/DynamicZoneToGraphQL.js +12 -2
  119. package/features/graphql/fields/base/DynamicZoneToGraphQL.js.map +1 -1
  120. package/features/graphql/fields/base/ObjectToGraphQL.js +8 -5
  121. package/features/graphql/fields/base/ObjectToGraphQL.js.map +1 -1
  122. package/features/modelBuilder/abstractions.d.ts +9 -0
  123. package/features/modelBuilder/abstractions.js.map +1 -1
  124. package/features/modelBuilder/feature.js +2 -0
  125. package/features/modelBuilder/feature.js.map +1 -1
  126. package/features/modelBuilder/fields/AssetFieldType.d.ts +20 -0
  127. package/features/modelBuilder/fields/AssetFieldType.js +46 -0
  128. package/features/modelBuilder/fields/AssetFieldType.js.map +1 -0
  129. package/features/modelBuilder/fields/DataFieldBuilder.d.ts +62 -18
  130. package/features/modelBuilder/fields/DataFieldBuilder.js +8 -0
  131. package/features/modelBuilder/fields/DataFieldBuilder.js.map +1 -1
  132. package/features/modelBuilder/fields/DynamicZoneFieldType.d.ts +1 -0
  133. package/features/modelBuilder/fields/DynamicZoneFieldType.js +2 -6
  134. package/features/modelBuilder/fields/DynamicZoneFieldType.js.map +1 -1
  135. package/features/modelBuilder/fields/resolveAssetUrl.d.ts +35 -0
  136. package/features/modelBuilder/fields/resolveAssetUrl.js +26 -0
  137. package/features/modelBuilder/fields/resolveAssetUrl.js.map +1 -0
  138. package/features/modelBuilder/index.d.ts +1 -1
  139. package/features/modelBuilder/models/BaseModelBuilder.d.ts +3 -1
  140. package/features/modelBuilder/models/BaseModelBuilder.js +7 -0
  141. package/features/modelBuilder/models/BaseModelBuilder.js.map +1 -1
  142. package/features/modelBuilder/models/PrivateModelBuilder.js +2 -1
  143. package/features/modelBuilder/models/PrivateModelBuilder.js.map +1 -1
  144. package/features/modelBuilder/models/PublicModelBuilder.js +2 -1
  145. package/features/modelBuilder/models/PublicModelBuilder.js.map +1 -1
  146. package/features/sortMapper/SortMapper.js +2 -5
  147. package/features/sortMapper/SortMapper.js.map +1 -1
  148. package/features/storage/fields/CompressedTextStorageTransform.js +1 -1
  149. package/features/storage/fields/CompressedTextStorageTransform.js.map +1 -1
  150. package/features/storage/fields/DateStorageTransform.js +4 -3
  151. package/features/storage/fields/DateStorageTransform.js.map +1 -1
  152. package/features/storage/fields/DynamicZoneStorageTransform.js +2 -2
  153. package/features/storage/fields/DynamicZoneStorageTransform.js.map +1 -1
  154. package/features/storage/fields/JsonStorageTransform.js +1 -1
  155. package/features/storage/fields/JsonStorageTransform.js.map +1 -1
  156. package/features/storage/fields/LongTextStorageTransform.js +1 -1
  157. package/features/storage/fields/LongTextStorageTransform.js.map +1 -1
  158. package/features/storage/fields/ObjectStorageTransform.js +27 -7
  159. package/features/storage/fields/ObjectStorageTransform.js.map +1 -1
  160. package/features/storage/fields/RichTextStorageTransform.js +1 -1
  161. package/features/storage/fields/RichTextStorageTransform.js.map +1 -1
  162. package/features/validation/validators/DateGteValidator.js +1 -1
  163. package/features/validation/validators/DateGteValidator.js.map +1 -1
  164. package/features/validation/validators/DateLteValidator.js +1 -1
  165. package/features/validation/validators/DateLteValidator.js.map +1 -1
  166. package/features/validation/validators/PatternValidator.js +1 -1
  167. package/features/validation/validators/PatternValidator.js.map +1 -1
  168. package/features/whereMapper/WhereMapper.js +10 -7
  169. package/features/whereMapper/WhereMapper.js.map +1 -1
  170. package/fieldConverters/CmsModelDynamicZoneFieldConverterPlugin.js +8 -2
  171. package/fieldConverters/CmsModelDynamicZoneFieldConverterPlugin.js.map +1 -1
  172. package/fieldConverters/CmsModelObjectFieldConverterPlugin.js +8 -2
  173. package/fieldConverters/CmsModelObjectFieldConverterPlugin.js.map +1 -1
  174. package/fieldConverters/index.d.ts +1 -1
  175. package/graphql/getSchema/generateCacheKey.js +1 -1
  176. package/graphql/getSchema/generateCacheKey.js.map +1 -1
  177. package/graphql/scalars/RevisionId.js +1 -1
  178. package/graphql/scalars/RevisionId.js.map +1 -1
  179. package/graphql/schema/baseSchema.js +5 -25
  180. package/graphql/schema/baseSchema.js.map +1 -1
  181. package/graphql/schema/cms/getEntryResolver.js +3 -2
  182. package/graphql/schema/cms/getEntryResolver.js.map +1 -1
  183. package/graphql/schema/cms/getModelResolver.d.ts +35 -0
  184. package/graphql/schema/cms/getModelResolver.js +49 -0
  185. package/graphql/schema/cms/getModelResolver.js.map +1 -0
  186. package/graphql/schema/cms/helpers/buildFieldsSelection.js +9 -2
  187. package/graphql/schema/cms/helpers/buildFieldsSelection.js.map +1 -1
  188. package/graphql/schema/cms/helpers/expandFieldWildcards.d.ts +2 -0
  189. package/graphql/schema/cms/helpers/expandFieldWildcards.js +13 -0
  190. package/graphql/schema/cms/helpers/expandFieldWildcards.js.map +1 -0
  191. package/graphql/schema/cms/helpers/index.d.ts +1 -0
  192. package/graphql/schema/cms/helpers/index.js +1 -0
  193. package/graphql/schema/cms/helpers.d.ts +1 -0
  194. package/graphql/schema/cms/helpers.js +1 -0
  195. package/graphql/schema/cms/index.js +2 -1
  196. package/graphql/schema/cms/index.js.map +1 -1
  197. package/graphql/schema/cms/listEntriesResolver.js +3 -2
  198. package/graphql/schema/cms/listEntriesResolver.js.map +1 -1
  199. package/graphql/schema/cms/resolvers/getModel.d.ts +8 -0
  200. package/graphql/schema/cms/resolvers/getModel.js +18 -0
  201. package/graphql/schema/cms/resolvers/getModel.js.map +1 -0
  202. package/graphql/schema/cms/resolvers/index.d.ts +1 -0
  203. package/graphql/schema/cms/resolvers/index.js +1 -0
  204. package/graphql/schema/cms/typeDefs/query.js +1 -0
  205. package/graphql/schema/cms/typeDefs/query.js.map +1 -1
  206. package/graphql/schema/cms/typeDefs/responses.js +5 -0
  207. package/graphql/schema/cms/typeDefs/responses.js.map +1 -1
  208. package/graphql/schema/contentModels.js +40 -1
  209. package/graphql/schema/contentModels.js.map +1 -1
  210. package/graphql/schema/createFieldResolvers.js +1 -1
  211. package/graphql/schema/createFieldResolvers.js.map +1 -1
  212. package/index.d.ts +2 -5
  213. package/index.js +1 -21
  214. package/package.json +26 -29
  215. package/plugins/CmsModelPlugin.js +12 -10
  216. package/plugins/CmsModelPlugin.js.map +1 -1
  217. package/types/fields/dynamicZoneField.d.ts +1 -0
  218. package/types/model.d.ts +6 -0
  219. package/types/modelField.d.ts +13 -0
  220. package/types/types.d.ts +8 -4
  221. package/types/types.js.map +1 -1
  222. package/utils/caching/Cache.js +1 -1
  223. package/utils/caching/Cache.js.map +1 -1
  224. package/utils/contentModelToJsonSchema/CmsModelToJsonSchemaConverter.d.ts +28 -0
  225. package/utils/contentModelToJsonSchema/CmsModelToJsonSchemaConverter.js +324 -0
  226. package/utils/contentModelToJsonSchema/CmsModelToJsonSchemaConverter.js.map +1 -0
  227. package/utils/contentModelToJsonSchema/index.d.ts +2 -0
  228. package/utils/contentModelToJsonSchema/index.js +1 -0
  229. package/utils/contentModelToJsonSchema/types.d.ts +24 -0
  230. package/utils/contentModelToJsonSchema/types.js +0 -0
  231. package/utils/createModelField.js +2 -1
  232. package/utils/createModelField.js.map +1 -1
  233. package/utils/date.js +1 -1
  234. package/utils/date.js.map +1 -1
  235. package/utils/entryStorage.js +1 -1
  236. package/utils/entryStorage.js.map +1 -1
  237. package/utils/index.d.ts +1 -0
  238. package/utils/index.js +1 -0
  239. package/utils/renderFields.js +1 -1
  240. package/utils/renderFields.js.map +1 -1
  241. package/index.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"features/storage/fields/ObjectStorageTransform.js","sources":["../../../../src/features/storage/fields/ObjectStorageTransform.ts"],"sourcesContent":["import pReduce from \"p-reduce\";\nimport pMap from \"p-map\";\nimport type { CmsModel, CmsModelField } from \"~/types/index.js\";\nimport { StorageTransform } from \"../abstractions/StorageTransform.js\";\nimport { getBaseFieldType } from \"~/utils/getBaseFieldType.js\";\nimport type { GenericRecord } from \"@webiny/api/types.js\";\n\ninterface ProcessValueParams {\n fields: CmsModelField[];\n sourceValue: GenericRecord;\n getStorageTransform: (fieldType: string) => StorageTransform.Interface;\n model: CmsModel;\n operation: \"toStorage\" | \"fromStorage\";\n}\ninterface ProcessValue {\n (params: ProcessValueParams): Promise<GenericRecord>;\n}\n\nconst processValue: ProcessValue = async params => {\n const { fields, sourceValue, getStorageTransform, model, operation } = params;\n return await pReduce(\n fields,\n async (values, field) => {\n const baseType = getBaseFieldType(field);\n const storageTransform = getStorageTransform(baseType);\n if (!storageTransform) {\n throw new Error(`Missing storage transform for field type \"${baseType}\".`);\n }\n const input = sourceValue[field.fieldId];\n const value = await storageTransform[operation]({\n model,\n field,\n value: input,\n getStorageTransform\n });\n return { ...values, [field.fieldId]: value };\n },\n {}\n );\n};\n\nclass StorageTransformImpl implements StorageTransform.Interface {\n public readonly fieldType = \"object\";\n\n public async toStorage(\n params: StorageTransform.ToStorageParams\n ): StorageTransform.ToStorageResponse {\n const { value, field, getStorageTransform, model } = params;\n if (!value) {\n return null;\n }\n\n const fields = (field.settings?.fields || []) as CmsModelField[];\n\n if (field.list) {\n return await pMap(value as GenericRecord[], value =>\n processValue({\n sourceValue: value,\n getStorageTransform,\n model,\n operation: \"toStorage\",\n fields\n })\n );\n }\n\n return await processValue({\n sourceValue: value,\n getStorageTransform,\n model,\n operation: \"toStorage\",\n fields\n });\n }\n\n public async fromStorage(\n params: StorageTransform.FromStorageParams\n ): StorageTransform.FromStorageResponse {\n const { field, value: input, getStorageTransform, model } = params;\n if (!input) {\n return null;\n }\n\n const fields = (field.settings?.fields || []) as CmsModelField[];\n\n if (field.list) {\n const values = input as GenericRecord[];\n\n return await Promise.all(\n values.map(async value => {\n return await processValue({\n sourceValue: value,\n getStorageTransform,\n model,\n operation: \"fromStorage\",\n fields\n });\n })\n );\n }\n\n return await processValue({\n sourceValue: input,\n getStorageTransform,\n model,\n operation: \"fromStorage\",\n fields\n });\n }\n}\n\nexport const ObjectStorageTransform = StorageTransform.createImplementation({\n implementation: StorageTransformImpl,\n dependencies: []\n});\n"],"names":["processValue","params","fields","sourceValue","getStorageTransform","model","operation","pReduce","values","field","baseType","getBaseFieldType","storageTransform","Error","input","value","StorageTransformImpl","pMap","Promise","ObjectStorageTransform","StorageTransform"],"mappings":";;;;AAkBA,MAAMA,eAA6B,OAAMC;IACrC,MAAM,EAAEC,MAAM,EAAEC,WAAW,EAAEC,mBAAmB,EAAEC,KAAK,EAAEC,SAAS,EAAE,GAAGL;IACvE,OAAO,MAAMM,SACTL,QACA,OAAOM,QAAQC;QACX,MAAMC,WAAWC,iBAAiBF;QAClC,MAAMG,mBAAmBR,oBAAoBM;QAC7C,IAAI,CAACE,kBACD,MAAM,IAAIC,MAAM,CAAC,0CAA0C,EAAEH,SAAS,EAAE,CAAC;QAE7E,MAAMI,QAAQX,WAAW,CAACM,MAAM,OAAO,CAAC;QACxC,MAAMM,QAAQ,MAAMH,gBAAgB,CAACN,UAAU,CAAC;YAC5CD;YACAI;YACA,OAAOK;YACPV;QACJ;QACA,OAAO;YAAE,GAAGI,MAAM;YAAE,CAACC,MAAM,OAAO,CAAC,EAAEM;QAAM;IAC/C,GACA,CAAC;AAET;AAEA,MAAMC;IAGF,MAAa,UACTf,MAAwC,EACN;QAClC,MAAM,EAAEc,KAAK,EAAEN,KAAK,EAAEL,mBAAmB,EAAEC,KAAK,EAAE,GAAGJ;QACrD,IAAI,CAACc,OACD,OAAO;QAGX,MAAMb,SAAUO,MAAM,QAAQ,EAAE,UAAU,EAAE;QAE5C,IAAIA,MAAM,IAAI,EACV,OAAO,MAAMQ,MAAKF,OAA0BA,CAAAA,QACxCf,aAAa;gBACT,aAAae;gBACbX;gBACAC;gBACA,WAAW;gBACXH;YACJ;QAIR,OAAO,MAAMF,aAAa;YACtB,aAAae;YACbX;YACAC;YACA,WAAW;YACXH;QACJ;IACJ;IAEA,MAAa,YACTD,MAA0C,EACN;QACpC,MAAM,EAAEQ,KAAK,EAAE,OAAOK,KAAK,EAAEV,mBAAmB,EAAEC,KAAK,EAAE,GAAGJ;QAC5D,IAAI,CAACa,OACD,OAAO;QAGX,MAAMZ,SAAUO,MAAM,QAAQ,EAAE,UAAU,EAAE;QAE5C,IAAIA,MAAM,IAAI,EAAE;YACZ,MAAMD,SAASM;YAEf,OAAO,MAAMI,QAAQ,GAAG,CACpBV,OAAO,GAAG,CAAC,OAAMO,QACN,MAAMf,aAAa;oBACtB,aAAae;oBACbX;oBACAC;oBACA,WAAW;oBACXH;gBACJ;QAGZ;QAEA,OAAO,MAAMF,aAAa;YACtB,aAAac;YACbV;YACAC;YACA,WAAW;YACXH;QACJ;IACJ;;aAlEgB,SAAS,GAAG;;AAmEhC;AAEO,MAAMiB,yBAAyBC,iBAAiB,oBAAoB,CAAC;IACxE,gBAAgBJ;IAChB,cAAc,EAAE;AACpB"}
1
+ {"version":3,"file":"features/storage/fields/ObjectStorageTransform.js","sources":["../../../../src/features/storage/fields/ObjectStorageTransform.ts"],"sourcesContent":["import pReduce from \"p-reduce\";\nimport pMap from \"p-map\";\nimport type { CmsModel, CmsModelField } from \"~/types/index.js\";\nimport { StorageTransform } from \"../abstractions/StorageTransform.js\";\nimport { getBaseFieldType } from \"~/utils/getBaseFieldType.js\";\nimport type { GenericRecord } from \"@webiny/api/types.js\";\n\ninterface ProcessValueParams {\n fields: CmsModelField[];\n sourceValue: GenericRecord;\n getStorageTransform: (fieldType: string) => StorageTransform.Interface;\n model: CmsModel;\n operation: \"toStorage\" | \"fromStorage\";\n}\ninterface ProcessValue {\n (params: ProcessValueParams): Promise<GenericRecord>;\n}\n\nconst processValue: ProcessValue = async params => {\n const { fields, sourceValue, getStorageTransform, model, operation } = params;\n return await pReduce(\n fields,\n async (values, field) => {\n const baseType = getBaseFieldType(field);\n const storageTransform = getStorageTransform(baseType);\n if (!storageTransform) {\n throw new Error(`Missing storage transform for field type \"${baseType}\".`);\n }\n const input = sourceValue[field.fieldId];\n const value = await storageTransform[operation]({\n model,\n field,\n value: input,\n getStorageTransform\n });\n return { ...values, [field.fieldId]: value };\n },\n {}\n );\n};\n\nclass StorageTransformImpl implements StorageTransform.Interface {\n public readonly fieldType = \"object\";\n\n public async toStorage(\n params: StorageTransform.ToStorageParams\n ): StorageTransform.ToStorageResponse {\n const { value, field, getStorageTransform, model } = params;\n if (!value) {\n return null;\n }\n\n const fields = (field.settings?.fields || []) as CmsModelField[];\n\n if (field.list) {\n return await pMap(value as GenericRecord[], async itemValue => {\n const processed = await processValue({\n sourceValue: itemValue,\n getStorageTransform,\n model,\n operation: \"toStorage\",\n fields\n });\n return itemValue._id ? { _id: itemValue._id, ...processed } : processed;\n });\n }\n\n const processed = await processValue({\n sourceValue: value,\n getStorageTransform,\n model,\n operation: \"toStorage\",\n fields\n });\n return value._id ? { _id: value._id, ...processed } : processed;\n }\n\n public async fromStorage(\n params: StorageTransform.FromStorageParams\n ): StorageTransform.FromStorageResponse {\n const { field, value: input, getStorageTransform, model } = params;\n if (!input) {\n return null;\n }\n\n const fields = (field.settings?.fields || []) as CmsModelField[];\n\n if (field.list) {\n const values = input as GenericRecord[];\n\n return await Promise.all(\n values.map(async value => {\n const processed = await processValue({\n sourceValue: value,\n getStorageTransform,\n model,\n operation: \"fromStorage\",\n fields\n });\n return value._id ? { _id: value._id, ...processed } : processed;\n })\n );\n }\n\n const processed = await processValue({\n sourceValue: input,\n getStorageTransform,\n model,\n operation: \"fromStorage\",\n fields\n });\n return input._id ? { _id: input._id, ...processed } : processed;\n }\n}\n\nexport const ObjectStorageTransform = StorageTransform.createImplementation({\n implementation: StorageTransformImpl,\n dependencies: []\n});\n"],"names":["processValue","params","fields","sourceValue","getStorageTransform","model","operation","pReduce","values","field","baseType","getBaseFieldType","storageTransform","Error","input","value","StorageTransformImpl","pMap","itemValue","processed","Promise","ObjectStorageTransform","StorageTransform"],"mappings":";;;;AAkBA,MAAMA,eAA6B,OAAMC;IACrC,MAAM,EAAEC,MAAM,EAAEC,WAAW,EAAEC,mBAAmB,EAAEC,KAAK,EAAEC,SAAS,EAAE,GAAGL;IACvE,OAAO,MAAMM,SACTL,QACA,OAAOM,QAAQC;QACX,MAAMC,WAAWC,iBAAiBF;QAClC,MAAMG,mBAAmBR,oBAAoBM;QAC7C,IAAI,CAACE,kBACD,MAAM,IAAIC,MAAM,CAAC,0CAA0C,EAAEH,SAAS,EAAE,CAAC;QAE7E,MAAMI,QAAQX,WAAW,CAACM,MAAM,OAAO,CAAC;QACxC,MAAMM,QAAQ,MAAMH,gBAAgB,CAACN,UAAU,CAAC;YAC5CD;YACAI;YACA,OAAOK;YACPV;QACJ;QACA,OAAO;YAAE,GAAGI,MAAM;YAAE,CAACC,MAAM,OAAO,CAAC,EAAEM;QAAM;IAC/C,GACA,CAAC;AAET;AAEA,MAAMC;IAGF,MAAa,UACTf,MAAwC,EACN;QAClC,MAAM,EAAEc,KAAK,EAAEN,KAAK,EAAEL,mBAAmB,EAAEC,KAAK,EAAE,GAAGJ;QACrD,IAAI,CAACc,OACD,OAAO;QAGX,MAAMb,SAAUO,MAAM,QAAQ,EAAE,UAAU,EAAE;QAE5C,IAAIA,MAAM,IAAI,EACV,OAAO,MAAMQ,MAAKF,OAA0B,OAAMG;YAC9C,MAAMC,YAAY,MAAMnB,aAAa;gBACjC,aAAakB;gBACbd;gBACAC;gBACA,WAAW;gBACXH;YACJ;YACA,OAAOgB,UAAU,GAAG,GAAG;gBAAE,KAAKA,UAAU,GAAG;gBAAE,GAAGC,SAAS;YAAC,IAAIA;QAClE;QAGJ,MAAMA,YAAY,MAAMnB,aAAa;YACjC,aAAae;YACbX;YACAC;YACA,WAAW;YACXH;QACJ;QACA,OAAOa,MAAM,GAAG,GAAG;YAAE,KAAKA,MAAM,GAAG;YAAE,GAAGI,SAAS;QAAC,IAAIA;IAC1D;IAEA,MAAa,YACTlB,MAA0C,EACN;QACpC,MAAM,EAAEQ,KAAK,EAAE,OAAOK,KAAK,EAAEV,mBAAmB,EAAEC,KAAK,EAAE,GAAGJ;QAC5D,IAAI,CAACa,OACD,OAAO;QAGX,MAAMZ,SAAUO,MAAM,QAAQ,EAAE,UAAU,EAAE;QAE5C,IAAIA,MAAM,IAAI,EAAE;YACZ,MAAMD,SAASM;YAEf,OAAO,MAAMM,QAAQ,GAAG,CACpBZ,OAAO,GAAG,CAAC,OAAMO;gBACb,MAAMI,YAAY,MAAMnB,aAAa;oBACjC,aAAae;oBACbX;oBACAC;oBACA,WAAW;oBACXH;gBACJ;gBACA,OAAOa,MAAM,GAAG,GAAG;oBAAE,KAAKA,MAAM,GAAG;oBAAE,GAAGI,SAAS;gBAAC,IAAIA;YAC1D;QAER;QAEA,MAAMA,YAAY,MAAMnB,aAAa;YACjC,aAAac;YACbV;YACAC;YACA,WAAW;YACXH;QACJ;QACA,OAAOY,MAAM,GAAG,GAAG;YAAE,KAAKA,MAAM,GAAG;YAAE,GAAGK,SAAS;QAAC,IAAIA;IAC1D;;aAtEgB,SAAS,GAAG;;AAuEhC;AAEO,MAAME,yBAAyBC,iBAAiB,oBAAoB,CAAC;IACxE,gBAAgBN;IAChB,cAAc,EAAE;AACpB"}
@@ -8,7 +8,7 @@ class RichTextStorageTransformImpl {
8
8
  }
9
9
  async fromStorage({ field, value: storageValue }) {
10
10
  if (!storageValue) return storageValue;
11
- else if ("object" != typeof storageValue) throw new WebinyError(`RichText value received in "fromStorage" function is not an object in field "${field.storageId}" - ${field.fieldId}.`);
11
+ if ("object" != typeof storageValue) throw new WebinyError(`RichText value received in "fromStorage" function is not an object in field "${field.storageId}" - ${field.fieldId}.`);
12
12
  try {
13
13
  return await this.compressionHandler.decompress(storageValue);
14
14
  } catch {
@@ -1 +1 @@
1
- {"version":3,"file":"features/storage/fields/RichTextStorageTransform.js","sources":["../../../../src/features/storage/fields/RichTextStorageTransform.ts"],"sourcesContent":["import { StorageTransform } from \"../abstractions/StorageTransform.js\";\nimport { WebinyError } from \"@webiny/error\";\nimport { CompressionHandler } from \"@webiny/utils/exports/api.js\";\n\nclass RichTextStorageTransformImpl implements StorageTransform.Interface {\n public readonly fieldType = \"rich-text\";\n\n public constructor(private readonly compressionHandler: CompressionHandler.Interface) {}\n\n public async fromStorage({\n field,\n value: storageValue\n }: StorageTransform.FromStorageParams): StorageTransform.FromStorageResponse {\n if (!storageValue) {\n return storageValue;\n } else if (typeof storageValue !== \"object\") {\n throw new WebinyError(\n `RichText value received in \"fromStorage\" function is not an object in field \"${field.storageId}\" - ${field.fieldId}.`\n );\n }\n\n try {\n return await this.compressionHandler.decompress(storageValue);\n } catch {\n return storageValue;\n }\n }\n\n public async toStorage({\n value\n }: StorageTransform.ToStorageParams): StorageTransform.ToStorageResponse {\n try {\n return await this.compressionHandler.compress(value);\n } catch {\n return value;\n }\n }\n}\n\nexport const RichTextStorageTransform = StorageTransform.createImplementation({\n implementation: RichTextStorageTransformImpl,\n dependencies: [CompressionHandler]\n});\n"],"names":["RichTextStorageTransformImpl","compressionHandler","field","storageValue","WebinyError","value","RichTextStorageTransform","StorageTransform","CompressionHandler"],"mappings":";;;AAIA,MAAMA;IAGF,YAAoCC,kBAAgD,CAAE;aAAlDA,kBAAkB,GAAlBA;aAFpB,SAAS,GAAG;IAE2D;IAEvF,MAAa,YAAY,EACrBC,KAAK,EACL,OAAOC,YAAY,EACc,EAAwC;QACzE,IAAI,CAACA,cACD,OAAOA;aACJ,IAAI,AAAwB,YAAxB,OAAOA,cACd,MAAM,IAAIC,YACN,CAAC,6EAA6E,EAAEF,MAAM,SAAS,CAAC,IAAI,EAAEA,MAAM,OAAO,CAAC,CAAC,CAAC;QAI9H,IAAI;YACA,OAAO,MAAM,IAAI,CAAC,kBAAkB,CAAC,UAAU,CAACC;QACpD,EAAE,OAAM;YACJ,OAAOA;QACX;IACJ;IAEA,MAAa,UAAU,EACnBE,KAAK,EAC0B,EAAsC;QACrE,IAAI;YACA,OAAO,MAAM,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAACA;QAClD,EAAE,OAAM;YACJ,OAAOA;QACX;IACJ;AACJ;AAEO,MAAMC,2BAA2BC,iBAAiB,oBAAoB,CAAC;IAC1E,gBAAgBP;IAChB,cAAc;QAACQ;KAAmB;AACtC"}
1
+ {"version":3,"file":"features/storage/fields/RichTextStorageTransform.js","sources":["../../../../src/features/storage/fields/RichTextStorageTransform.ts"],"sourcesContent":["import { StorageTransform } from \"../abstractions/StorageTransform.js\";\nimport { WebinyError } from \"@webiny/error\";\nimport { CompressionHandler } from \"@webiny/utils/exports/api.js\";\n\nclass RichTextStorageTransformImpl implements StorageTransform.Interface {\n public readonly fieldType = \"rich-text\";\n\n public constructor(private readonly compressionHandler: CompressionHandler.Interface) {}\n\n public async fromStorage({\n field,\n value: storageValue\n }: StorageTransform.FromStorageParams): StorageTransform.FromStorageResponse {\n if (!storageValue) {\n return storageValue;\n } else if (typeof storageValue !== \"object\") {\n throw new WebinyError(\n `RichText value received in \"fromStorage\" function is not an object in field \"${field.storageId}\" - ${field.fieldId}.`\n );\n }\n\n try {\n return await this.compressionHandler.decompress(storageValue);\n } catch {\n return storageValue;\n }\n }\n\n public async toStorage({\n value\n }: StorageTransform.ToStorageParams): StorageTransform.ToStorageResponse {\n try {\n return await this.compressionHandler.compress(value);\n } catch {\n return value;\n }\n }\n}\n\nexport const RichTextStorageTransform = StorageTransform.createImplementation({\n implementation: RichTextStorageTransformImpl,\n dependencies: [CompressionHandler]\n});\n"],"names":["RichTextStorageTransformImpl","compressionHandler","field","storageValue","WebinyError","value","RichTextStorageTransform","StorageTransform","CompressionHandler"],"mappings":";;;AAIA,MAAMA;IAGF,YAAoCC,kBAAgD,CAAE;aAAlDA,kBAAkB,GAAlBA;aAFpB,SAAS,GAAG;IAE2D;IAEvF,MAAa,YAAY,EACrBC,KAAK,EACL,OAAOC,YAAY,EACc,EAAwC;QACzE,IAAI,CAACA,cACD,OAAOA;QACJ,IAAI,AAAwB,YAAxB,OAAOA,cACd,MAAM,IAAIC,YACN,CAAC,6EAA6E,EAAEF,MAAM,SAAS,CAAC,IAAI,EAAEA,MAAM,OAAO,CAAC,CAAC,CAAC;QAI9H,IAAI;YACA,OAAO,MAAM,IAAI,CAAC,kBAAkB,CAAC,UAAU,CAACC;QACpD,EAAE,OAAM;YACJ,OAAOA;QACX;IACJ;IAEA,MAAa,UAAU,EACnBE,KAAK,EAC0B,EAAsC;QACrE,IAAI;YACA,OAAO,MAAM,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAACA;QAClD,EAAE,OAAM;YACJ,OAAOA;QACX;IACJ;AACJ;AAEO,MAAMC,2BAA2BC,iBAAiB,oBAAoB,CAAC;IAC1E,gBAAgBP;IAChB,cAAc;QAACQ;KAAmB;AACtC"}
@@ -4,7 +4,7 @@ class DateGteValidatorImpl {
4
4
  async validate({ value, validator }) {
5
5
  const { value: gteValue, type } = validator.settings || {};
6
6
  if (void 0 === gteValue) return true;
7
- else if ("time" === type) return validation.validate(value, `timeGte:${gteValue}`).then((v)=>true === v).catch(()=>false);
7
+ if ("time" === type) return validation.validate(value, `timeGte:${gteValue}`).then((v)=>true === v).catch(()=>false);
8
8
  return validation.validate(value, `dateGte:${gteValue}`).then((v)=>true === v).catch(()=>false);
9
9
  }
10
10
  constructor(){
@@ -1 +1 @@
1
- {"version":3,"file":"features/validation/validators/DateGteValidator.js","sources":["../../../../src/features/validation/validators/DateGteValidator.ts"],"sourcesContent":["import { validation } from \"@webiny/validation\";\nimport { CmsModelFieldValidator } from \"../abstractions/CmsModelFieldValidator.js\";\nimport type { CmsModelFieldValidatorValidateParams } from \"~/types/types.js\";\n\nclass DateGteValidatorImpl implements CmsModelFieldValidator.Interface {\n public readonly name = \"dateGte\";\n\n public async validate({\n value,\n validator\n }: CmsModelFieldValidatorValidateParams): Promise<boolean> {\n const { value: gteValue, type } = validator.settings || {};\n if (typeof gteValue === \"undefined\") {\n return true;\n } else if (type === \"time\") {\n return validation\n .validate(value, `timeGte:${gteValue}`)\n .then(v => v === true)\n .catch(() => false);\n }\n return validation\n .validate(value, `dateGte:${gteValue}`)\n .then(v => v === true)\n .catch(() => false);\n }\n}\n\nexport const DateGteValidator = CmsModelFieldValidator.createImplementation({\n implementation: DateGteValidatorImpl,\n dependencies: []\n});\n"],"names":["DateGteValidatorImpl","value","validator","gteValue","type","validation","v","DateGteValidator","CmsModelFieldValidator"],"mappings":";;AAIA,MAAMA;IAGF,MAAa,SAAS,EAClBC,KAAK,EACLC,SAAS,EAC0B,EAAoB;QACvD,MAAM,EAAE,OAAOC,QAAQ,EAAEC,IAAI,EAAE,GAAGF,UAAU,QAAQ,IAAI,CAAC;QACzD,IAAI,AAAoB,WAAbC,UACP,OAAO;aACJ,IAAIC,AAAS,WAATA,MACP,OAAOC,WAAAA,QACM,CAACJ,OAAO,CAAC,QAAQ,EAAEE,UAAU,EACrC,IAAI,CAACG,CAAAA,IAAKA,AAAM,SAANA,GACV,KAAK,CAAC,IAAM;QAErB,OAAOD,WAAAA,QACM,CAACJ,OAAO,CAAC,QAAQ,EAAEE,UAAU,EACrC,IAAI,CAACG,CAAAA,IAAKA,AAAM,SAANA,GACV,KAAK,CAAC,IAAM;IACrB;;aAnBgB,IAAI,GAAG;;AAoB3B;AAEO,MAAMC,mBAAmBC,uBAAuB,oBAAoB,CAAC;IACxE,gBAAgBR;IAChB,cAAc,EAAE;AACpB"}
1
+ {"version":3,"file":"features/validation/validators/DateGteValidator.js","sources":["../../../../src/features/validation/validators/DateGteValidator.ts"],"sourcesContent":["import { validation } from \"@webiny/validation\";\nimport { CmsModelFieldValidator } from \"../abstractions/CmsModelFieldValidator.js\";\nimport type { CmsModelFieldValidatorValidateParams } from \"~/types/types.js\";\n\nclass DateGteValidatorImpl implements CmsModelFieldValidator.Interface {\n public readonly name = \"dateGte\";\n\n public async validate({\n value,\n validator\n }: CmsModelFieldValidatorValidateParams): Promise<boolean> {\n const { value: gteValue, type } = validator.settings || {};\n if (typeof gteValue === \"undefined\") {\n return true;\n } else if (type === \"time\") {\n return validation\n .validate(value, `timeGte:${gteValue}`)\n .then(v => v === true)\n .catch(() => false);\n }\n return validation\n .validate(value, `dateGte:${gteValue}`)\n .then(v => v === true)\n .catch(() => false);\n }\n}\n\nexport const DateGteValidator = CmsModelFieldValidator.createImplementation({\n implementation: DateGteValidatorImpl,\n dependencies: []\n});\n"],"names":["DateGteValidatorImpl","value","validator","gteValue","type","validation","v","DateGteValidator","CmsModelFieldValidator"],"mappings":";;AAIA,MAAMA;IAGF,MAAa,SAAS,EAClBC,KAAK,EACLC,SAAS,EAC0B,EAAoB;QACvD,MAAM,EAAE,OAAOC,QAAQ,EAAEC,IAAI,EAAE,GAAGF,UAAU,QAAQ,IAAI,CAAC;QACzD,IAAI,AAAoB,WAAbC,UACP,OAAO;QACJ,IAAIC,AAAS,WAATA,MACP,OAAOC,WAAAA,QACM,CAACJ,OAAO,CAAC,QAAQ,EAAEE,UAAU,EACrC,IAAI,CAACG,CAAAA,IAAKA,AAAM,SAANA,GACV,KAAK,CAAC,IAAM;QAErB,OAAOD,WAAAA,QACM,CAACJ,OAAO,CAAC,QAAQ,EAAEE,UAAU,EACrC,IAAI,CAACG,CAAAA,IAAKA,AAAM,SAANA,GACV,KAAK,CAAC,IAAM;IACrB;;aAnBgB,IAAI,GAAG;;AAoB3B;AAEO,MAAMC,mBAAmBC,uBAAuB,oBAAoB,CAAC;IACxE,gBAAgBR;IAChB,cAAc,EAAE;AACpB"}
@@ -4,7 +4,7 @@ class DateLteValidatorImpl {
4
4
  async validate({ value, validator }) {
5
5
  const { value: lteValue, type } = validator.settings || {};
6
6
  if (void 0 === lteValue) return true;
7
- else if ("time" === type) return validation.validate(value, `timeLte:${lteValue}`).then((v)=>true === v).catch(()=>false);
7
+ if ("time" === type) return validation.validate(value, `timeLte:${lteValue}`).then((v)=>true === v).catch(()=>false);
8
8
  return validation.validate(value, `dateLte:${lteValue}`).then((v)=>true === v).catch(()=>false);
9
9
  }
10
10
  constructor(){
@@ -1 +1 @@
1
- {"version":3,"file":"features/validation/validators/DateLteValidator.js","sources":["../../../../src/features/validation/validators/DateLteValidator.ts"],"sourcesContent":["import { validation } from \"@webiny/validation\";\nimport { CmsModelFieldValidator } from \"../abstractions/CmsModelFieldValidator.js\";\nimport type { CmsModelFieldValidatorValidateParams } from \"~/types/types.js\";\n\nclass DateLteValidatorImpl implements CmsModelFieldValidator.Interface {\n public readonly name = \"dateLte\";\n\n public async validate({\n value,\n validator\n }: CmsModelFieldValidatorValidateParams): Promise<boolean> {\n const { value: lteValue, type } = validator.settings || {};\n if (typeof lteValue === \"undefined\") {\n return true;\n } else if (type === \"time\") {\n return validation\n .validate(value, `timeLte:${lteValue}`)\n .then(v => v === true)\n .catch(() => false);\n }\n return validation\n .validate(value, `dateLte:${lteValue}`)\n .then(v => v === true)\n .catch(() => false);\n }\n}\n\nexport const DateLteValidator = CmsModelFieldValidator.createImplementation({\n implementation: DateLteValidatorImpl,\n dependencies: []\n});\n"],"names":["DateLteValidatorImpl","value","validator","lteValue","type","validation","v","DateLteValidator","CmsModelFieldValidator"],"mappings":";;AAIA,MAAMA;IAGF,MAAa,SAAS,EAClBC,KAAK,EACLC,SAAS,EAC0B,EAAoB;QACvD,MAAM,EAAE,OAAOC,QAAQ,EAAEC,IAAI,EAAE,GAAGF,UAAU,QAAQ,IAAI,CAAC;QACzD,IAAI,AAAoB,WAAbC,UACP,OAAO;aACJ,IAAIC,AAAS,WAATA,MACP,OAAOC,WAAAA,QACM,CAACJ,OAAO,CAAC,QAAQ,EAAEE,UAAU,EACrC,IAAI,CAACG,CAAAA,IAAKA,AAAM,SAANA,GACV,KAAK,CAAC,IAAM;QAErB,OAAOD,WAAAA,QACM,CAACJ,OAAO,CAAC,QAAQ,EAAEE,UAAU,EACrC,IAAI,CAACG,CAAAA,IAAKA,AAAM,SAANA,GACV,KAAK,CAAC,IAAM;IACrB;;aAnBgB,IAAI,GAAG;;AAoB3B;AAEO,MAAMC,mBAAmBC,uBAAuB,oBAAoB,CAAC;IACxE,gBAAgBR;IAChB,cAAc,EAAE;AACpB"}
1
+ {"version":3,"file":"features/validation/validators/DateLteValidator.js","sources":["../../../../src/features/validation/validators/DateLteValidator.ts"],"sourcesContent":["import { validation } from \"@webiny/validation\";\nimport { CmsModelFieldValidator } from \"../abstractions/CmsModelFieldValidator.js\";\nimport type { CmsModelFieldValidatorValidateParams } from \"~/types/types.js\";\n\nclass DateLteValidatorImpl implements CmsModelFieldValidator.Interface {\n public readonly name = \"dateLte\";\n\n public async validate({\n value,\n validator\n }: CmsModelFieldValidatorValidateParams): Promise<boolean> {\n const { value: lteValue, type } = validator.settings || {};\n if (typeof lteValue === \"undefined\") {\n return true;\n } else if (type === \"time\") {\n return validation\n .validate(value, `timeLte:${lteValue}`)\n .then(v => v === true)\n .catch(() => false);\n }\n return validation\n .validate(value, `dateLte:${lteValue}`)\n .then(v => v === true)\n .catch(() => false);\n }\n}\n\nexport const DateLteValidator = CmsModelFieldValidator.createImplementation({\n implementation: DateLteValidatorImpl,\n dependencies: []\n});\n"],"names":["DateLteValidatorImpl","value","validator","lteValue","type","validation","v","DateLteValidator","CmsModelFieldValidator"],"mappings":";;AAIA,MAAMA;IAGF,MAAa,SAAS,EAClBC,KAAK,EACLC,SAAS,EAC0B,EAAoB;QACvD,MAAM,EAAE,OAAOC,QAAQ,EAAEC,IAAI,EAAE,GAAGF,UAAU,QAAQ,IAAI,CAAC;QACzD,IAAI,AAAoB,WAAbC,UACP,OAAO;QACJ,IAAIC,AAAS,WAATA,MACP,OAAOC,WAAAA,QACM,CAACJ,OAAO,CAAC,QAAQ,EAAEE,UAAU,EACrC,IAAI,CAACG,CAAAA,IAAKA,AAAM,SAANA,GACV,KAAK,CAAC,IAAM;QAErB,OAAOD,WAAAA,QACM,CAACJ,OAAO,CAAC,QAAQ,EAAEE,UAAU,EACrC,IAAI,CAACG,CAAAA,IAAKA,AAAM,SAANA,GACV,KAAK,CAAC,IAAM;IACrB;;aAnBgB,IAAI,GAAG;;AAoB3B;AAEO,MAAMC,mBAAmBC,uBAAuB,oBAAoB,CAAC;IACxE,gBAAgBR;IAChB,cAAc,EAAE;AACpB"}
@@ -15,7 +15,7 @@ class PatternValidatorImpl {
15
15
  if (patternValidator) pattern = patternValidator.pattern;
16
16
  }
17
17
  if (!pattern) return true;
18
- return new RegExp(pattern.regex, pattern.flags).test(value);
18
+ return new RegExp(pattern.regex, pattern.flags || void 0).test(value);
19
19
  }
20
20
  }
21
21
  const PatternValidator = CmsModelFieldValidator.createImplementation({
@@ -1 +1 @@
1
- {"version":3,"file":"features/validation/validators/PatternValidator.js","sources":["../../../../src/features/validation/validators/PatternValidator.ts"],"sourcesContent":["import { CmsModelFieldValidator } from \"../abstractions/CmsModelFieldValidator.js\";\nimport { CmsModelFieldPatternValidatorRegistry } from \"../abstractions/CmsModelFieldPatternValidatorRegistry.js\";\nimport type { CmsModelFieldValidatorValidateParams } from \"~/types/types.js\";\n\nclass PatternValidatorImpl implements CmsModelFieldValidator.Interface {\n public readonly name = \"pattern\";\n\n public constructor(\n private readonly patternRegistry: CmsModelFieldPatternValidatorRegistry.Interface\n ) {}\n\n public async validate({\n value,\n validator\n }: CmsModelFieldValidatorValidateParams): Promise<boolean> {\n if (typeof value !== \"string\" || !value) {\n return true;\n }\n\n const { settings } = validator;\n\n let pattern;\n if (settings?.preset === \"custom\") {\n pattern = settings;\n } else if (settings?.preset) {\n const patternValidator = this.patternRegistry.get(settings.preset);\n if (patternValidator) {\n pattern = patternValidator.pattern;\n }\n }\n\n if (!pattern) {\n return true;\n }\n\n return new RegExp(pattern.regex, pattern.flags).test(value);\n }\n}\n\nexport const PatternValidator = CmsModelFieldValidator.createImplementation({\n implementation: PatternValidatorImpl,\n dependencies: [CmsModelFieldPatternValidatorRegistry]\n});\n"],"names":["PatternValidatorImpl","patternRegistry","value","validator","settings","pattern","patternValidator","RegExp","PatternValidator","CmsModelFieldValidator","CmsModelFieldPatternValidatorRegistry"],"mappings":";;AAIA,MAAMA;IAGF,YACqBC,eAAgE,CACnF;aADmBA,eAAe,GAAfA;aAHL,IAAI,GAAG;IAIpB;IAEH,MAAa,SAAS,EAClBC,KAAK,EACLC,SAAS,EAC0B,EAAoB;QACvD,IAAI,AAAiB,YAAjB,OAAOD,SAAsB,CAACA,OAC9B,OAAO;QAGX,MAAM,EAAEE,QAAQ,EAAE,GAAGD;QAErB,IAAIE;QACJ,IAAID,UAAU,WAAW,UACrBC,UAAUD;aACP,IAAIA,UAAU,QAAQ;YACzB,MAAME,mBAAmB,IAAI,CAAC,eAAe,CAAC,GAAG,CAACF,SAAS,MAAM;YACjE,IAAIE,kBACAD,UAAUC,iBAAiB,OAAO;QAE1C;QAEA,IAAI,CAACD,SACD,OAAO;QAGX,OAAO,IAAIE,OAAOF,QAAQ,KAAK,EAAEA,QAAQ,KAAK,EAAE,IAAI,CAACH;IACzD;AACJ;AAEO,MAAMM,mBAAmBC,uBAAuB,oBAAoB,CAAC;IACxE,gBAAgBT;IAChB,cAAc;QAACU;KAAsC;AACzD"}
1
+ {"version":3,"file":"features/validation/validators/PatternValidator.js","sources":["../../../../src/features/validation/validators/PatternValidator.ts"],"sourcesContent":["import { CmsModelFieldValidator } from \"../abstractions/CmsModelFieldValidator.js\";\nimport { CmsModelFieldPatternValidatorRegistry } from \"../abstractions/CmsModelFieldPatternValidatorRegistry.js\";\nimport type { CmsModelFieldValidatorValidateParams } from \"~/types/types.js\";\n\nclass PatternValidatorImpl implements CmsModelFieldValidator.Interface {\n public readonly name = \"pattern\";\n\n public constructor(\n private readonly patternRegistry: CmsModelFieldPatternValidatorRegistry.Interface\n ) {}\n\n public async validate({\n value,\n validator\n }: CmsModelFieldValidatorValidateParams): Promise<boolean> {\n if (typeof value !== \"string\" || !value) {\n return true;\n }\n\n const { settings } = validator;\n\n let pattern;\n if (settings?.preset === \"custom\") {\n pattern = settings;\n } else if (settings?.preset) {\n const patternValidator = this.patternRegistry.get(settings.preset);\n if (patternValidator) {\n pattern = patternValidator.pattern;\n }\n }\n\n if (!pattern) {\n return true;\n }\n\n return new RegExp(pattern.regex, pattern.flags || undefined).test(value);\n }\n}\n\nexport const PatternValidator = CmsModelFieldValidator.createImplementation({\n implementation: PatternValidatorImpl,\n dependencies: [CmsModelFieldPatternValidatorRegistry]\n});\n"],"names":["PatternValidatorImpl","patternRegistry","value","validator","settings","pattern","patternValidator","RegExp","undefined","PatternValidator","CmsModelFieldValidator","CmsModelFieldPatternValidatorRegistry"],"mappings":";;AAIA,MAAMA;IAGF,YACqBC,eAAgE,CACnF;aADmBA,eAAe,GAAfA;aAHL,IAAI,GAAG;IAIpB;IAEH,MAAa,SAAS,EAClBC,KAAK,EACLC,SAAS,EAC0B,EAAoB;QACvD,IAAI,AAAiB,YAAjB,OAAOD,SAAsB,CAACA,OAC9B,OAAO;QAGX,MAAM,EAAEE,QAAQ,EAAE,GAAGD;QAErB,IAAIE;QACJ,IAAID,UAAU,WAAW,UACrBC,UAAUD;aACP,IAAIA,UAAU,QAAQ;YACzB,MAAME,mBAAmB,IAAI,CAAC,eAAe,CAAC,GAAG,CAACF,SAAS,MAAM;YACjE,IAAIE,kBACAD,UAAUC,iBAAiB,OAAO;QAE1C;QAEA,IAAI,CAACD,SACD,OAAO;QAGX,OAAO,IAAIE,OAAOF,QAAQ,KAAK,EAAEA,QAAQ,KAAK,IAAIG,QAAW,IAAI,CAACN;IACtE;AACJ;AAEO,MAAMO,mBAAmBC,uBAAuB,oBAAoB,CAAC;IACxE,gBAAgBV;IAChB,cAAc;QAACW;KAAsC;AACzD"}
@@ -1,7 +1,7 @@
1
1
  import { CmsWhereMapper } from "./abstractions.js";
2
2
  const isPlainObject = (value)=>{
3
3
  if (!value || "object" != typeof value) return false;
4
- else if (Array.isArray(value)) return false;
4
+ if (Array.isArray(value)) return false;
5
5
  return true;
6
6
  };
7
7
  const isLogicalKey = (key)=>"AND" === key || "OR" === key;
@@ -9,11 +9,8 @@ class WhereMapperImpl {
9
9
  map(params) {
10
10
  const { fields: modelFields, input } = params;
11
11
  if (!input) return;
12
- const fields = modelFields.map((field)=>field.fieldId);
13
- const isField = (key)=>{
14
- const field = key.split("_")[0];
15
- return fields.includes(field);
16
- };
12
+ const fields = modelFields.map((field)=>field.fieldId).sort((a, b)=>b.length - a.length);
13
+ const isField = (key)=>fields.some((fieldId)=>key === fieldId || key.startsWith(`${fieldId}_`));
17
14
  return this.mapWhere({
18
15
  input,
19
16
  isField
@@ -32,7 +29,13 @@ class WhereMapperImpl {
32
29
  isField
33
30
  }));
34
31
  continue;
35
- } else if (isField(key)) {
32
+ }
33
+ if ("values" === key && isPlainObject(value)) {
34
+ if (!out.values) out.values = {};
35
+ Object.assign(out.values, value);
36
+ continue;
37
+ }
38
+ if (isField(key)) {
36
39
  if (!out.values) out.values = {};
37
40
  out.values[key] = value;
38
41
  continue;
@@ -1 +1 @@
1
- {"version":3,"file":"features/whereMapper/WhereMapper.js","sources":["../../../src/features/whereMapper/WhereMapper.ts"],"sourcesContent":["/**\n * Used to map a model with custom schema with fields in a root to values object.\n * eg. File Manager File model has \"title\" and \"tags\" fields in the root, but they should be\n * mapped to \"values.title\" and \"values.tags\" when creating the entry.\n */\nimport { GenericRecord } from \"@webiny/api/types.js\";\nimport { CmsEntryListWhere } from \"~/types/types.js\";\nimport { CmsWhereMapper, ICmsWhereMapperParams } from \"./abstractions.js\";\n\nconst isPlainObject = (value: unknown): value is Record<string, unknown> => {\n if (!value || typeof value !== \"object\") {\n return false;\n } else if (Array.isArray(value)) {\n return false;\n }\n return true;\n};\n\nconst isLogicalKey = (key: string): key is \"AND\" | \"OR\" => {\n return key === \"AND\" || key === \"OR\";\n};\n\ninterface IMapNodeWhereParams {\n input: GenericRecord;\n isField: (key: string) => boolean;\n}\n\nclass WhereMapperImpl implements CmsWhereMapper.Interface {\n map<T extends GenericRecord>(params: ICmsWhereMapperParams<T>): CmsEntryListWhere | undefined {\n const { fields: modelFields, input } = params;\n if (!input) {\n return undefined;\n }\n\n const fields = modelFields.map(field => {\n return field.fieldId;\n });\n\n const isField = (key: string): boolean => {\n const field = key.split(\"_\")[0];\n return fields.includes(field);\n };\n\n return this.mapWhere({\n input,\n isField\n });\n }\n\n private mapWhere(params: IMapNodeWhereParams) {\n const { input, isField } = params;\n const out: CmsEntryListWhere = {};\n\n const keys = Object.keys(input) as (keyof typeof out)[];\n if (keys.length === 0) {\n return out;\n }\n\n for (const key of keys) {\n const value = input[key];\n\n if (isLogicalKey(key)) {\n if (Array.isArray(value)) {\n out[key] = value.filter(isPlainObject).map(child => {\n return this.mapWhere({\n input: child,\n isField\n });\n });\n }\n continue;\n } else if (isField(key)) {\n if (!out.values) {\n out.values = {};\n }\n out.values[key] = value;\n continue;\n }\n\n out[key] = value;\n }\n\n return out;\n }\n}\n\nexport const WhereMapper = CmsWhereMapper.createImplementation({\n implementation: WhereMapperImpl,\n dependencies: []\n});\n"],"names":["isPlainObject","value","Array","isLogicalKey","key","WhereMapperImpl","params","modelFields","input","fields","field","isField","out","keys","Object","child","WhereMapper","CmsWhereMapper"],"mappings":";AASA,MAAMA,gBAAgB,CAACC;IACnB,IAAI,CAACA,SAAS,AAAiB,YAAjB,OAAOA,OACjB,OAAO;SACJ,IAAIC,MAAM,OAAO,CAACD,QACrB,OAAO;IAEX,OAAO;AACX;AAEA,MAAME,eAAe,CAACC,MACXA,AAAQ,UAARA,OAAiBA,AAAQ,SAARA;AAQ5B,MAAMC;IACF,IAA6BC,MAAgC,EAAiC;QAC1F,MAAM,EAAE,QAAQC,WAAW,EAAEC,KAAK,EAAE,GAAGF;QACvC,IAAI,CAACE,OACD;QAGJ,MAAMC,SAASF,YAAY,GAAG,CAACG,CAAAA,QACpBA,MAAM,OAAO;QAGxB,MAAMC,UAAU,CAACP;YACb,MAAMM,QAAQN,IAAI,KAAK,CAAC,IAAI,CAAC,EAAE;YAC/B,OAAOK,OAAO,QAAQ,CAACC;QAC3B;QAEA,OAAO,IAAI,CAAC,QAAQ,CAAC;YACjBF;YACAG;QACJ;IACJ;IAEQ,SAASL,MAA2B,EAAE;QAC1C,MAAM,EAAEE,KAAK,EAAEG,OAAO,EAAE,GAAGL;QAC3B,MAAMM,MAAyB,CAAC;QAEhC,MAAMC,OAAOC,OAAO,IAAI,CAACN;QACzB,IAAIK,AAAgB,MAAhBA,KAAK,MAAM,EACX,OAAOD;QAGX,KAAK,MAAMR,OAAOS,KAAM;YACpB,MAAMZ,QAAQO,KAAK,CAACJ,IAAI;YAExB,IAAID,aAAaC,MAAM;gBACnB,IAAIF,MAAM,OAAO,CAACD,QACdW,GAAG,CAACR,IAAI,GAAGH,MAAM,MAAM,CAACD,eAAe,GAAG,CAACe,CAAAA,QAChC,IAAI,CAAC,QAAQ,CAAC;wBACjB,OAAOA;wBACPJ;oBACJ;gBAGR;YACJ,OAAO,IAAIA,QAAQP,MAAM;gBACrB,IAAI,CAACQ,IAAI,MAAM,EACXA,IAAI,MAAM,GAAG,CAAC;gBAElBA,IAAI,MAAM,CAACR,IAAI,GAAGH;gBAClB;YACJ;YAEAW,GAAG,CAACR,IAAI,GAAGH;QACf;QAEA,OAAOW;IACX;AACJ;AAEO,MAAMI,cAAcC,eAAe,oBAAoB,CAAC;IAC3D,gBAAgBZ;IAChB,cAAc,EAAE;AACpB"}
1
+ {"version":3,"file":"features/whereMapper/WhereMapper.js","sources":["../../../src/features/whereMapper/WhereMapper.ts"],"sourcesContent":["/**\n * Used to map a model with custom schema with fields in a root to values object.\n * eg. File Manager File model has \"title\" and \"tags\" fields in the root, but they should be\n * mapped to \"values.title\" and \"values.tags\" when creating the entry.\n */\nimport { GenericRecord } from \"@webiny/api/types.js\";\nimport { CmsEntryListWhere } from \"~/types/types.js\";\nimport { CmsWhereMapper, ICmsWhereMapperParams } from \"./abstractions.js\";\n\nconst isPlainObject = (value: unknown): value is Record<string, unknown> => {\n if (!value || typeof value !== \"object\") {\n return false;\n } else if (Array.isArray(value)) {\n return false;\n }\n return true;\n};\n\nconst isLogicalKey = (key: string): key is \"AND\" | \"OR\" => {\n return key === \"AND\" || key === \"OR\";\n};\n\ninterface IMapNodeWhereParams {\n input: GenericRecord;\n isField: (key: string) => boolean;\n}\n\nclass WhereMapperImpl implements CmsWhereMapper.Interface {\n map<T extends GenericRecord>(params: ICmsWhereMapperParams<T>): CmsEntryListWhere | undefined {\n const { fields: modelFields, input } = params;\n if (!input) {\n return undefined;\n }\n\n /*\n * Longest fieldId first, so a key is attributed to the longest field it could belong to.\n * Taking the segment before the first `_` misreads any fieldId that contains one:\n * `on_sale_contains` resolves to a field named `on`, which does not exist, so the filter\n * silently stays at the top level and the CMS rejects it. Longest-first also keeps a model\n * with both `price` and `price_range` from being mis-routed.\n */\n const fields = modelFields.map(field => field.fieldId).sort((a, b) => b.length - a.length);\n\n const isField = (key: string): boolean => {\n return fields.some(fieldId => key === fieldId || key.startsWith(`${fieldId}_`));\n };\n\n return this.mapWhere({\n input,\n isField\n });\n }\n\n private mapWhere(params: IMapNodeWhereParams) {\n const { input, isField } = params;\n const out: CmsEntryListWhere = {};\n\n const keys = Object.keys(input) as (keyof typeof out)[];\n if (keys.length === 0) {\n return out;\n }\n\n for (const key of keys) {\n const value = input[key];\n\n if (isLogicalKey(key)) {\n if (Array.isArray(value)) {\n out[key] = value.filter(isPlainObject).map(child => {\n return this.mapWhere({\n input: child,\n isField\n });\n });\n }\n continue;\n } else if (key === \"values\" && isPlainObject(value)) {\n /*\n * A caller that already nested its model fields is taken at its word. Merged rather\n * than assigned, so an explicit `values` object and flat field keys can coexist:\n * assigning would drop whichever of the two arrived first.\n */\n if (!out.values) {\n out.values = {};\n }\n Object.assign(out.values, value);\n continue;\n } else if (isField(key)) {\n if (!out.values) {\n out.values = {};\n }\n out.values[key] = value;\n continue;\n }\n\n out[key] = value;\n }\n\n return out;\n }\n}\n\nexport const WhereMapper = CmsWhereMapper.createImplementation({\n implementation: WhereMapperImpl,\n dependencies: []\n});\n"],"names":["isPlainObject","value","Array","isLogicalKey","key","WhereMapperImpl","params","modelFields","input","fields","field","a","b","isField","fieldId","out","keys","Object","child","WhereMapper","CmsWhereMapper"],"mappings":";AASA,MAAMA,gBAAgB,CAACC;IACnB,IAAI,CAACA,SAAS,AAAiB,YAAjB,OAAOA,OACjB,OAAO;IACJ,IAAIC,MAAM,OAAO,CAACD,QACrB,OAAO;IAEX,OAAO;AACX;AAEA,MAAME,eAAe,CAACC,MACXA,AAAQ,UAARA,OAAiBA,AAAQ,SAARA;AAQ5B,MAAMC;IACF,IAA6BC,MAAgC,EAAiC;QAC1F,MAAM,EAAE,QAAQC,WAAW,EAAEC,KAAK,EAAE,GAAGF;QACvC,IAAI,CAACE,OACD;QAUJ,MAAMC,SAASF,YAAY,GAAG,CAACG,CAAAA,QAASA,MAAM,OAAO,EAAE,IAAI,CAAC,CAACC,GAAGC,IAAMA,EAAE,MAAM,GAAGD,EAAE,MAAM;QAEzF,MAAME,UAAU,CAACT,MACNK,OAAO,IAAI,CAACK,CAAAA,UAAWV,QAAQU,WAAWV,IAAI,UAAU,CAAC,GAAGU,QAAQ,CAAC,CAAC;QAGjF,OAAO,IAAI,CAAC,QAAQ,CAAC;YACjBN;YACAK;QACJ;IACJ;IAEQ,SAASP,MAA2B,EAAE;QAC1C,MAAM,EAAEE,KAAK,EAAEK,OAAO,EAAE,GAAGP;QAC3B,MAAMS,MAAyB,CAAC;QAEhC,MAAMC,OAAOC,OAAO,IAAI,CAACT;QACzB,IAAIQ,AAAgB,MAAhBA,KAAK,MAAM,EACX,OAAOD;QAGX,KAAK,MAAMX,OAAOY,KAAM;YACpB,MAAMf,QAAQO,KAAK,CAACJ,IAAI;YAExB,IAAID,aAAaC,MAAM;gBACnB,IAAIF,MAAM,OAAO,CAACD,QACdc,GAAG,CAACX,IAAI,GAAGH,MAAM,MAAM,CAACD,eAAe,GAAG,CAACkB,CAAAA,QAChC,IAAI,CAAC,QAAQ,CAAC;wBACjB,OAAOA;wBACPL;oBACJ;gBAGR;YACJ;YAAO,IAAIT,AAAQ,aAARA,OAAoBJ,cAAcC,QAAQ;gBAMjD,IAAI,CAACc,IAAI,MAAM,EACXA,IAAI,MAAM,GAAG,CAAC;gBAElBE,OAAO,MAAM,CAACF,IAAI,MAAM,EAAEd;gBAC1B;YACJ;YAAO,IAAIY,QAAQT,MAAM;gBACrB,IAAI,CAACW,IAAI,MAAM,EACXA,IAAI,MAAM,GAAG,CAAC;gBAElBA,IAAI,MAAM,CAACX,IAAI,GAAGH;gBAClB;YACJ;YAEAc,GAAG,CAACX,IAAI,GAAGH;QACf;QAEA,OAAOc;IACX;AACJ;AAEO,MAAMI,cAAcC,eAAe,oBAAoB,CAAC;IAC3D,gBAAgBf;IAChB,cAAc,EAAE;AACpB"}
@@ -47,7 +47,10 @@ class CmsModelDynamicZoneFieldConverterPlugin extends CmsModelFieldConverterPlug
47
47
  Object.assign(values, converted);
48
48
  return values;
49
49
  }, {
50
- _templateId: template.id
50
+ _templateId: template.id,
51
+ ...value._id ? {
52
+ _id: value._id
53
+ } : {}
51
54
  });
52
55
  }
53
56
  convertFromStorage(params) {
@@ -98,7 +101,10 @@ class CmsModelDynamicZoneFieldConverterPlugin extends CmsModelFieldConverterPlug
98
101
  Object.assign(values, converted);
99
102
  return values;
100
103
  }, {
101
- _templateId: template.id
104
+ _templateId: template.id,
105
+ ...value._id ? {
106
+ _id: value._id
107
+ } : {}
102
108
  });
103
109
  }
104
110
  constructor(...args){
@@ -1 +1 @@
1
- {"version":3,"file":"fieldConverters/CmsModelDynamicZoneFieldConverterPlugin.js","sources":["../../src/fieldConverters/CmsModelDynamicZoneFieldConverterPlugin.ts"],"sourcesContent":["import WebinyError from \"@webiny/error\";\nimport type { ConvertParams } from \"~/plugins/CmsModelFieldConverterPlugin.js\";\nimport { CmsModelFieldConverterPlugin } from \"~/plugins/CmsModelFieldConverterPlugin.js\";\nimport type {\n CmsDynamicZoneTemplate,\n CmsEntryValues,\n CmsModelDynamicZoneField\n} from \"~/types/index.js\";\nimport type { ConverterCollection } from \"~/utils/converters/ConverterCollection.js\";\nimport type { GenericRecord } from \"@webiny/api/types.js\";\n\ntype DynamicZoneValue = GenericRecord<string>;\n\ninterface ProcessValue {\n templates: CmsDynamicZoneTemplate[];\n value: DynamicZoneValue | null;\n converterCollection: ConverterCollection;\n}\n\nexport class CmsModelDynamicZoneFieldConverterPlugin extends CmsModelFieldConverterPlugin {\n public override name = \"cms.field.converter.dynamicZone\";\n\n public override getFieldType(): string {\n return \"dynamicZone\";\n }\n\n private getTemplates(field: CmsModelDynamicZoneField): CmsDynamicZoneTemplate[] {\n return field.settings?.templates || [];\n }\n\n public override convertToStorage(\n params: ConvertParams<CmsModelDynamicZoneField>\n ): CmsEntryValues {\n const { field, value, converterCollection } = params;\n\n const templates = this.getTemplates(field);\n\n if (templates.length === 0) {\n return {};\n }\n\n if (field.list) {\n if (Array.isArray(value)) {\n return {\n [field.storageId]: value.map(item => {\n return this.processToStorage({\n templates,\n converterCollection,\n value: item\n });\n })\n };\n }\n\n // If a multi-value dynamic zone receives anything other than an array, ignore the value.\n return {};\n }\n\n // If a single-value dynamic zone receives an array, ignore the value.\n if (Array.isArray(value)) {\n return {};\n }\n\n const processedValue = this.processToStorage({\n templates,\n converterCollection,\n value\n });\n\n return {\n [field.storageId]: processedValue\n };\n }\n\n private processToStorage(params: ProcessValue) {\n const { templates, converterCollection } = params;\n const { value } = params;\n if (value === null || value === undefined) {\n return undefined;\n }\n\n const templateId = value._templateId;\n const template = templates.find(t => {\n return templateId === t.id;\n });\n\n if (!template) {\n return undefined;\n }\n\n return template.fields.reduce<GenericRecord<string>>(\n (values, field) => {\n const converter = converterCollection.getConverter(field.type);\n const converted = converter.convertToStorage({\n field,\n value: value ? value[field.fieldId] : undefined\n });\n Object.assign(values, converted);\n return values;\n },\n {\n _templateId: template.id\n }\n );\n }\n\n public override convertFromStorage(\n params: ConvertParams<CmsModelDynamicZoneField>\n ): CmsEntryValues {\n const { field, value, converterCollection } = params;\n\n const templates = this.getTemplates(field);\n\n if (templates.length === 0) {\n return {};\n }\n\n if (field.list) {\n const arrayValue = Array.isArray(value) ? value : [];\n\n return {\n [field.fieldId]: arrayValue\n .map(item => {\n return this.processFromStorage({\n templates,\n converterCollection,\n value: item\n });\n })\n .filter(Boolean)\n };\n }\n\n if (Array.isArray(value)) {\n throw new WebinyError(\n `Dynamic zone field \"${field.fieldId}\" is expecting a non-array value.`,\n \"DYNAMIC_ZONE_EXPECTING_NON_ARRAY_VALUE\",\n {\n field,\n value\n }\n );\n }\n\n const processedValue = this.processFromStorage({\n templates,\n converterCollection,\n value\n });\n\n return {\n [field.fieldId]: processedValue\n };\n }\n\n private processFromStorage(params: ProcessValue) {\n const { templates, value, converterCollection } = params;\n if (value === null || value === undefined) {\n return undefined;\n }\n\n const { _templateId } = value;\n\n const template = templates.find(t => t.id === _templateId);\n if (!template) {\n // TODO Should we just return undefined?\n console.warn({\n message: \"Unknown template - converting from storage.\",\n code: \"UNKNOWN_TEMPLATE\",\n data: {\n templateId: _templateId\n }\n });\n return undefined;\n }\n\n return template.fields.reduce<GenericRecord<string>>(\n (values, field) => {\n const converter = converterCollection.getConverter(field.type);\n const converted = converter.convertFromStorage({\n field,\n value: value[field.storageId]\n });\n Object.assign(values, converted);\n return values;\n },\n {\n _templateId: template.id\n }\n );\n }\n}\n"],"names":["CmsModelDynamicZoneFieldConverterPlugin","CmsModelFieldConverterPlugin","field","params","value","converterCollection","templates","Array","item","processedValue","templateId","template","t","values","converter","converted","undefined","Object","arrayValue","Boolean","WebinyError","_templateId","console"],"mappings":";;AAmBO,MAAMA,gDAAgDC;IAGzC,eAAuB;QACnC,OAAO;IACX;IAEQ,aAAaC,KAA+B,EAA4B;QAC5E,OAAOA,MAAM,QAAQ,EAAE,aAAa,EAAE;IAC1C;IAEgB,iBACZC,MAA+C,EACjC;QACd,MAAM,EAAED,KAAK,EAAEE,KAAK,EAAEC,mBAAmB,EAAE,GAAGF;QAE9C,MAAMG,YAAY,IAAI,CAAC,YAAY,CAACJ;QAEpC,IAAII,AAAqB,MAArBA,UAAU,MAAM,EAChB,OAAO,CAAC;QAGZ,IAAIJ,MAAM,IAAI,EAAE;YACZ,IAAIK,MAAM,OAAO,CAACH,QACd,OAAO;gBACH,CAACF,MAAM,SAAS,CAAC,EAAEE,MAAM,GAAG,CAACI,CAAAA,OAClB,IAAI,CAAC,gBAAgB,CAAC;wBACzBF;wBACAD;wBACA,OAAOG;oBACX;YAER;YAIJ,OAAO,CAAC;QACZ;QAGA,IAAID,MAAM,OAAO,CAACH,QACd,OAAO,CAAC;QAGZ,MAAMK,iBAAiB,IAAI,CAAC,gBAAgB,CAAC;YACzCH;YACAD;YACAD;QACJ;QAEA,OAAO;YACH,CAACF,MAAM,SAAS,CAAC,EAAEO;QACvB;IACJ;IAEQ,iBAAiBN,MAAoB,EAAE;QAC3C,MAAM,EAAEG,SAAS,EAAED,mBAAmB,EAAE,GAAGF;QAC3C,MAAM,EAAEC,KAAK,EAAE,GAAGD;QAClB,IAAIC,QAAAA,OACA;QAGJ,MAAMM,aAAaN,MAAM,WAAW;QACpC,MAAMO,WAAWL,UAAU,IAAI,CAACM,CAAAA,IACrBF,eAAeE,EAAE,EAAE;QAG9B,IAAI,CAACD,UACD;QAGJ,OAAOA,SAAS,MAAM,CAAC,MAAM,CACzB,CAACE,QAAQX;YACL,MAAMY,YAAYT,oBAAoB,YAAY,CAACH,MAAM,IAAI;YAC7D,MAAMa,YAAYD,UAAU,gBAAgB,CAAC;gBACzCZ;gBACA,OAAOE,QAAQA,KAAK,CAACF,MAAM,OAAO,CAAC,GAAGc;YAC1C;YACAC,OAAO,MAAM,CAACJ,QAAQE;YACtB,OAAOF;QACX,GACA;YACI,aAAaF,SAAS,EAAE;QAC5B;IAER;IAEgB,mBACZR,MAA+C,EACjC;QACd,MAAM,EAAED,KAAK,EAAEE,KAAK,EAAEC,mBAAmB,EAAE,GAAGF;QAE9C,MAAMG,YAAY,IAAI,CAAC,YAAY,CAACJ;QAEpC,IAAII,AAAqB,MAArBA,UAAU,MAAM,EAChB,OAAO,CAAC;QAGZ,IAAIJ,MAAM,IAAI,EAAE;YACZ,MAAMgB,aAAaX,MAAM,OAAO,CAACH,SAASA,QAAQ,EAAE;YAEpD,OAAO;gBACH,CAACF,MAAM,OAAO,CAAC,EAAEgB,WACZ,GAAG,CAACV,CAAAA,OACM,IAAI,CAAC,kBAAkB,CAAC;wBAC3BF;wBACAD;wBACA,OAAOG;oBACX,IAEH,MAAM,CAACW;YAChB;QACJ;QAEA,IAAIZ,MAAM,OAAO,CAACH,QACd,MAAM,IAAIgB,MACN,CAAC,oBAAoB,EAAElB,MAAM,OAAO,CAAC,iCAAiC,CAAC,EACvE,0CACA;YACIA;YACAE;QACJ;QAIR,MAAMK,iBAAiB,IAAI,CAAC,kBAAkB,CAAC;YAC3CH;YACAD;YACAD;QACJ;QAEA,OAAO;YACH,CAACF,MAAM,OAAO,CAAC,EAAEO;QACrB;IACJ;IAEQ,mBAAmBN,MAAoB,EAAE;QAC7C,MAAM,EAAEG,SAAS,EAAEF,KAAK,EAAEC,mBAAmB,EAAE,GAAGF;QAClD,IAAIC,QAAAA,OACA;QAGJ,MAAM,EAAEiB,WAAW,EAAE,GAAGjB;QAExB,MAAMO,WAAWL,UAAU,IAAI,CAACM,CAAAA,IAAKA,EAAE,EAAE,KAAKS;QAC9C,IAAI,CAACV,UAAU,YAEXW,QAAQ,IAAI,CAAC;YACT,SAAS;YACT,MAAM;YACN,MAAM;gBACF,YAAYD;YAChB;QACJ;QAIJ,OAAOV,SAAS,MAAM,CAAC,MAAM,CACzB,CAACE,QAAQX;YACL,MAAMY,YAAYT,oBAAoB,YAAY,CAACH,MAAM,IAAI;YAC7D,MAAMa,YAAYD,UAAU,kBAAkB,CAAC;gBAC3CZ;gBACA,OAAOE,KAAK,CAACF,MAAM,SAAS,CAAC;YACjC;YACAe,OAAO,MAAM,CAACJ,QAAQE;YACtB,OAAOF;QACX,GACA;YACI,aAAaF,SAAS,EAAE;QAC5B;IAER;;QA3KG,qBACa,IAAI,GAAG;;AA2K3B"}
1
+ {"version":3,"file":"fieldConverters/CmsModelDynamicZoneFieldConverterPlugin.js","sources":["../../src/fieldConverters/CmsModelDynamicZoneFieldConverterPlugin.ts"],"sourcesContent":["import WebinyError from \"@webiny/error\";\nimport type { ConvertParams } from \"~/plugins/CmsModelFieldConverterPlugin.js\";\nimport { CmsModelFieldConverterPlugin } from \"~/plugins/CmsModelFieldConverterPlugin.js\";\nimport type {\n CmsDynamicZoneTemplate,\n CmsEntryValues,\n CmsModelDynamicZoneField\n} from \"~/types/index.js\";\nimport type { ConverterCollection } from \"~/utils/converters/ConverterCollection.js\";\nimport type { GenericRecord } from \"@webiny/api/types.js\";\n\ntype DynamicZoneValue = GenericRecord<string>;\n\ninterface ProcessValue {\n templates: CmsDynamicZoneTemplate[];\n value: DynamicZoneValue | null;\n converterCollection: ConverterCollection;\n}\n\nexport class CmsModelDynamicZoneFieldConverterPlugin extends CmsModelFieldConverterPlugin {\n public override name = \"cms.field.converter.dynamicZone\";\n\n public override getFieldType(): string {\n return \"dynamicZone\";\n }\n\n private getTemplates(field: CmsModelDynamicZoneField): CmsDynamicZoneTemplate[] {\n return field.settings?.templates || [];\n }\n\n public override convertToStorage(\n params: ConvertParams<CmsModelDynamicZoneField>\n ): CmsEntryValues {\n const { field, value, converterCollection } = params;\n\n const templates = this.getTemplates(field);\n\n if (templates.length === 0) {\n return {};\n }\n\n if (field.list) {\n if (Array.isArray(value)) {\n return {\n [field.storageId]: value.map(item => {\n return this.processToStorage({\n templates,\n converterCollection,\n value: item\n });\n })\n };\n }\n\n // If a multi-value dynamic zone receives anything other than an array, ignore the value.\n return {};\n }\n\n // If a single-value dynamic zone receives an array, ignore the value.\n if (Array.isArray(value)) {\n return {};\n }\n\n const processedValue = this.processToStorage({\n templates,\n converterCollection,\n value\n });\n\n return {\n [field.storageId]: processedValue\n };\n }\n\n private processToStorage(params: ProcessValue) {\n const { templates, converterCollection } = params;\n const { value } = params;\n if (value === null || value === undefined) {\n return undefined;\n }\n\n const templateId = value._templateId;\n const template = templates.find(t => {\n return templateId === t.id;\n });\n\n if (!template) {\n return undefined;\n }\n\n return template.fields.reduce<GenericRecord<string>>(\n (values, field) => {\n const converter = converterCollection.getConverter(field.type);\n const converted = converter.convertToStorage({\n field,\n value: value ? value[field.fieldId] : undefined\n });\n Object.assign(values, converted);\n return values;\n },\n {\n _templateId: template.id,\n ...(value._id ? { _id: value._id } : {})\n }\n );\n }\n\n public override convertFromStorage(\n params: ConvertParams<CmsModelDynamicZoneField>\n ): CmsEntryValues {\n const { field, value, converterCollection } = params;\n\n const templates = this.getTemplates(field);\n\n if (templates.length === 0) {\n return {};\n }\n\n if (field.list) {\n const arrayValue = Array.isArray(value) ? value : [];\n\n return {\n [field.fieldId]: arrayValue\n .map(item => {\n return this.processFromStorage({\n templates,\n converterCollection,\n value: item\n });\n })\n .filter(Boolean)\n };\n }\n\n if (Array.isArray(value)) {\n throw new WebinyError(\n `Dynamic zone field \"${field.fieldId}\" is expecting a non-array value.`,\n \"DYNAMIC_ZONE_EXPECTING_NON_ARRAY_VALUE\",\n {\n field,\n value\n }\n );\n }\n\n const processedValue = this.processFromStorage({\n templates,\n converterCollection,\n value\n });\n\n return {\n [field.fieldId]: processedValue\n };\n }\n\n private processFromStorage(params: ProcessValue) {\n const { templates, value, converterCollection } = params;\n if (value === null || value === undefined) {\n return undefined;\n }\n\n const { _templateId } = value;\n\n const template = templates.find(t => t.id === _templateId);\n if (!template) {\n // TODO Should we just return undefined?\n console.warn({\n message: \"Unknown template - converting from storage.\",\n code: \"UNKNOWN_TEMPLATE\",\n data: {\n templateId: _templateId\n }\n });\n return undefined;\n }\n\n return template.fields.reduce<GenericRecord<string>>(\n (values, field) => {\n const converter = converterCollection.getConverter(field.type);\n const converted = converter.convertFromStorage({\n field,\n value: value[field.storageId]\n });\n Object.assign(values, converted);\n return values;\n },\n {\n _templateId: template.id,\n ...(value._id ? { _id: value._id } : {})\n }\n );\n }\n}\n"],"names":["CmsModelDynamicZoneFieldConverterPlugin","CmsModelFieldConverterPlugin","field","params","value","converterCollection","templates","Array","item","processedValue","templateId","template","t","values","converter","converted","undefined","Object","arrayValue","Boolean","WebinyError","_templateId","console"],"mappings":"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"}
@@ -43,6 +43,9 @@ class CmsModelObjectFieldConverterPlugin extends CmsModelFieldConverterPlugin {
43
43
  processChildFieldsToStorage(params) {
44
44
  const { fields, value, converterCollection } = params;
45
45
  if (null == value) return;
46
+ const initial = value._id ? {
47
+ _id: value._id
48
+ } : {};
46
49
  return fields.reduce((output, field)=>{
47
50
  if (void 0 === value[field.fieldId]) return output;
48
51
  const converter = converterCollection.getConverter(field.type);
@@ -55,7 +58,7 @@ class CmsModelObjectFieldConverterPlugin extends CmsModelFieldConverterPlugin {
55
58
  ...output,
56
59
  ...newValue
57
60
  };
58
- }, {});
61
+ }, initial);
59
62
  }
60
63
  convertFromStorage(params) {
61
64
  const { field, value, converterCollection } = params;
@@ -94,6 +97,9 @@ class CmsModelObjectFieldConverterPlugin extends CmsModelFieldConverterPlugin {
94
97
  processChildFieldsFromStorage(params) {
95
98
  const { fields, value, converterCollection } = params;
96
99
  if (null == value) return;
100
+ const initial = value._id ? {
101
+ _id: value._id
102
+ } : {};
97
103
  return fields.reduce((output, field)=>{
98
104
  if (void 0 === value[field.storageId]) return output;
99
105
  const converter = converterCollection.getConverter(field.type);
@@ -107,7 +113,7 @@ class CmsModelObjectFieldConverterPlugin extends CmsModelFieldConverterPlugin {
107
113
  ...output,
108
114
  ...newValue
109
115
  };
110
- }, {});
116
+ }, initial);
111
117
  }
112
118
  constructor(...args){
113
119
  super(...args), this.name = "cms.field.converter.object";
@@ -1 +1 @@
1
- {"version":3,"file":"fieldConverters/CmsModelObjectFieldConverterPlugin.js","sources":["../../src/fieldConverters/CmsModelObjectFieldConverterPlugin.ts"],"sourcesContent":["import type { ConvertParams } from \"~/plugins/CmsModelFieldConverterPlugin.js\";\nimport { CmsModelFieldConverterPlugin } from \"~/plugins/CmsModelFieldConverterPlugin.js\";\nimport type { CmsEntryValues, CmsModelFieldWithParent } from \"~/types/index.js\";\nimport type { ConverterCollection } from \"~/utils/converters/ConverterCollection.js\";\nimport type { GenericRecord } from \"@webiny/api/types.js\";\n\ninterface ProcessChildFieldsParams {\n fields: CmsModelFieldWithParent[];\n value?: GenericRecord<string> | null;\n converterCollection: ConverterCollection;\n}\n\ninterface GetChildFieldsParams {\n field?: CmsModelFieldWithParent | null;\n}\n\nexport class CmsModelObjectFieldConverterPlugin extends CmsModelFieldConverterPlugin {\n public override name = \"cms.field.converter.object\";\n\n public override getFieldType(): string {\n return \"object\";\n }\n\n private getChildFields({ field }: GetChildFieldsParams): CmsModelFieldWithParent[] {\n return field?.settings?.fields || [];\n }\n\n public override convertToStorage(params: ConvertParams): CmsEntryValues {\n const { field, value, converterCollection } = params;\n\n const childFields = this.getChildFields({\n field\n });\n if (childFields.length === 0) {\n return {};\n }\n\n if (field.list) {\n if (Array.isArray(value) === false) {\n return {\n [field.storageId]: null\n };\n }\n return {\n [field.storageId]: value.map((itemValue: GenericRecord) => {\n return this.processChildFieldsToStorage({\n fields: childFields.map(child => {\n return {\n ...child,\n parent: field\n };\n }),\n value: itemValue,\n converterCollection\n });\n })\n };\n }\n\n const values = this.processChildFieldsToStorage({\n fields: childFields.map(child => {\n return {\n ...child,\n parent: field\n };\n }),\n value,\n converterCollection\n });\n if (values === undefined) {\n return {};\n }\n\n return {\n [field.storageId]: values\n };\n }\n\n private processChildFieldsToStorage(\n params: ProcessChildFieldsParams\n ): CmsEntryValues | undefined {\n const { fields, value, converterCollection } = params;\n\n if (value === undefined || value === null) {\n return undefined;\n }\n\n return fields.reduce<CmsEntryValues>((output, field) => {\n if (value[field.fieldId] === undefined) {\n return output;\n }\n const converter = converterCollection.getConverter(field.type);\n\n const newValue = converter.convertToStorage({\n field,\n value: value[field.fieldId],\n parent: field.parent\n });\n\n return {\n ...output,\n ...newValue\n };\n }, {});\n }\n\n public override convertFromStorage(params: ConvertParams): CmsEntryValues {\n const { field, value, converterCollection } = params;\n\n const childFields = this.getChildFields({\n field\n });\n if (childFields.length === 0) {\n return {};\n }\n\n if (field.list) {\n if (Array.isArray(value) === false) {\n return {\n [field.fieldId]: null\n };\n }\n return {\n [field.fieldId]: value.map((itemValue: GenericRecord) => {\n return this.processChildFieldsFromStorage({\n fields: childFields.map(child => {\n return {\n ...child,\n parent: field\n };\n }),\n value: itemValue,\n converterCollection\n });\n })\n };\n }\n\n const values = this.processChildFieldsFromStorage({\n fields: childFields.map(child => {\n return {\n ...child,\n parent: field\n };\n }),\n value,\n converterCollection\n });\n\n if (values === undefined) {\n return {};\n }\n\n return {\n [field.fieldId]: values\n };\n }\n\n private processChildFieldsFromStorage(\n params: ProcessChildFieldsParams\n ): CmsEntryValues | undefined {\n const { fields, value, converterCollection } = params;\n\n if (value === undefined || value === null) {\n return undefined;\n }\n\n return fields.reduce<CmsEntryValues>((output, field) => {\n if (value[field.storageId] === undefined) {\n return output;\n }\n\n const converter = converterCollection.getConverter(field.type);\n\n const newValue = converter.convertFromStorage({\n field,\n value: value[field.storageId],\n parent: field.parent\n });\n if (!newValue) {\n return output;\n }\n\n return {\n ...output,\n ...newValue\n };\n }, {});\n }\n}\n"],"names":["CmsModelObjectFieldConverterPlugin","CmsModelFieldConverterPlugin","field","params","value","converterCollection","childFields","Array","itemValue","child","values","undefined","fields","output","converter","newValue"],"mappings":"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"}
1
+ {"version":3,"file":"fieldConverters/CmsModelObjectFieldConverterPlugin.js","sources":["../../src/fieldConverters/CmsModelObjectFieldConverterPlugin.ts"],"sourcesContent":["import type { ConvertParams } from \"~/plugins/CmsModelFieldConverterPlugin.js\";\nimport { CmsModelFieldConverterPlugin } from \"~/plugins/CmsModelFieldConverterPlugin.js\";\nimport type { CmsEntryValues, CmsModelFieldWithParent } from \"~/types/index.js\";\nimport type { ConverterCollection } from \"~/utils/converters/ConverterCollection.js\";\nimport type { GenericRecord } from \"@webiny/api/types.js\";\n\ninterface ProcessChildFieldsParams {\n fields: CmsModelFieldWithParent[];\n value?: GenericRecord<string> | null;\n converterCollection: ConverterCollection;\n}\n\ninterface GetChildFieldsParams {\n field?: CmsModelFieldWithParent | null;\n}\n\nexport class CmsModelObjectFieldConverterPlugin extends CmsModelFieldConverterPlugin {\n public override name = \"cms.field.converter.object\";\n\n public override getFieldType(): string {\n return \"object\";\n }\n\n private getChildFields({ field }: GetChildFieldsParams): CmsModelFieldWithParent[] {\n return field?.settings?.fields || [];\n }\n\n public override convertToStorage(params: ConvertParams): CmsEntryValues {\n const { field, value, converterCollection } = params;\n\n const childFields = this.getChildFields({\n field\n });\n if (childFields.length === 0) {\n return {};\n }\n\n if (field.list) {\n if (Array.isArray(value) === false) {\n return {\n [field.storageId]: null\n };\n }\n return {\n [field.storageId]: value.map((itemValue: GenericRecord) => {\n return this.processChildFieldsToStorage({\n fields: childFields.map(child => {\n return {\n ...child,\n parent: field\n };\n }),\n value: itemValue,\n converterCollection\n });\n })\n };\n }\n\n const values = this.processChildFieldsToStorage({\n fields: childFields.map(child => {\n return {\n ...child,\n parent: field\n };\n }),\n value,\n converterCollection\n });\n if (values === undefined) {\n return {};\n }\n\n return {\n [field.storageId]: values\n };\n }\n\n private processChildFieldsToStorage(\n params: ProcessChildFieldsParams\n ): CmsEntryValues | undefined {\n const { fields, value, converterCollection } = params;\n\n if (value === undefined || value === null) {\n return undefined;\n }\n\n const initial: CmsEntryValues = value._id ? { _id: value._id } : {};\n\n return fields.reduce<CmsEntryValues>((output, field) => {\n if (value[field.fieldId] === undefined) {\n return output;\n }\n const converter = converterCollection.getConverter(field.type);\n\n const newValue = converter.convertToStorage({\n field,\n value: value[field.fieldId],\n parent: field.parent\n });\n\n return {\n ...output,\n ...newValue\n };\n }, initial);\n }\n\n public override convertFromStorage(params: ConvertParams): CmsEntryValues {\n const { field, value, converterCollection } = params;\n\n const childFields = this.getChildFields({\n field\n });\n if (childFields.length === 0) {\n return {};\n }\n\n if (field.list) {\n if (Array.isArray(value) === false) {\n return {\n [field.fieldId]: null\n };\n }\n return {\n [field.fieldId]: value.map((itemValue: GenericRecord) => {\n return this.processChildFieldsFromStorage({\n fields: childFields.map(child => {\n return {\n ...child,\n parent: field\n };\n }),\n value: itemValue,\n converterCollection\n });\n })\n };\n }\n\n const values = this.processChildFieldsFromStorage({\n fields: childFields.map(child => {\n return {\n ...child,\n parent: field\n };\n }),\n value,\n converterCollection\n });\n\n if (values === undefined) {\n return {};\n }\n\n return {\n [field.fieldId]: values\n };\n }\n\n private processChildFieldsFromStorage(\n params: ProcessChildFieldsParams\n ): CmsEntryValues | undefined {\n const { fields, value, converterCollection } = params;\n\n if (value === undefined || value === null) {\n return undefined;\n }\n\n const initial: CmsEntryValues = value._id ? { _id: value._id } : {};\n\n return fields.reduce<CmsEntryValues>((output, field) => {\n if (value[field.storageId] === undefined) {\n return output;\n }\n\n const converter = converterCollection.getConverter(field.type);\n\n const newValue = converter.convertFromStorage({\n field,\n value: value[field.storageId],\n parent: field.parent\n });\n if (!newValue) {\n return output;\n }\n\n return {\n ...output,\n ...newValue\n };\n }, initial);\n }\n}\n"],"names":["CmsModelObjectFieldConverterPlugin","CmsModelFieldConverterPlugin","field","params","value","converterCollection","childFields","Array","itemValue","child","values","undefined","fields","initial","output","converter","newValue"],"mappings":"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"}
@@ -4,4 +4,4 @@
4
4
  import { CmsModelObjectFieldConverterPlugin } from "../fieldConverters/CmsModelObjectFieldConverterPlugin.js";
5
5
  import { CmsModelDefaultFieldConverterPlugin } from "../fieldConverters/CmsModelDefaultFieldConverterPlugin.js";
6
6
  import { CmsModelDynamicZoneFieldConverterPlugin } from "../fieldConverters/CmsModelDynamicZoneFieldConverterPlugin.js";
7
- export declare const createFieldConverters: () => (CmsModelObjectFieldConverterPlugin | CmsModelDefaultFieldConverterPlugin | CmsModelDynamicZoneFieldConverterPlugin)[];
7
+ export declare const createFieldConverters: () => (CmsModelDefaultFieldConverterPlugin | CmsModelDynamicZoneFieldConverterPlugin | CmsModelObjectFieldConverterPlugin)[];
@@ -1,7 +1,7 @@
1
1
  import crypto_0 from "crypto";
2
2
  const getSavedOn = (input)=>{
3
3
  if (!input) return "unknown";
4
- else if (input instanceof Date) return input.toISOString();
4
+ if (input instanceof Date) return input.toISOString();
5
5
  try {
6
6
  const savedOn = new Date(input);
7
7
  return savedOn.toISOString();
@@ -1 +1 @@
1
- {"version":3,"file":"graphql/getSchema/generateCacheKey.js","sources":["../../../src/graphql/getSchema/generateCacheKey.ts"],"sourcesContent":["import type { CmsModel } from \"~/types/index.js\";\nimport crypto from \"crypto\";\n\ninterface GenerateCacheKeyParams {\n models: Pick<CmsModel, \"modelId\" | \"singularApiName\" | \"pluralApiName\" | \"savedOn\">[];\n}\n\nconst getSavedOn = (input: Date | string | undefined | null): string => {\n if (!input) {\n return \"unknown\";\n } else if (input instanceof Date) {\n return input.toISOString();\n }\n try {\n const savedOn = new Date(input);\n return savedOn.toISOString();\n } catch {\n return \"unknown\";\n }\n};\n/**\n * Method generates cache key based on last model change time.\n * Or sets \"unknown\" - possible when no models in database.\n */\nexport const generateCacheKey = async (params: GenerateCacheKeyParams): Promise<string> => {\n const { models } = params;\n\n const keys: string[] = [];\n for (const model of models) {\n const value = getSavedOn(model.savedOn);\n\n keys.push(model.modelId, model.singularApiName, model.pluralApiName, value);\n }\n const key = keys.join(\"#\");\n\n const hash = crypto.createHash(\"sha512\");\n hash.update(key);\n return hash.digest(\"hex\");\n};\n"],"names":["getSavedOn","input","Date","savedOn","generateCacheKey","params","models","keys","model","value","key","hash","crypto"],"mappings":";AAOA,MAAMA,aAAa,CAACC;IAChB,IAAI,CAACA,OACD,OAAO;SACJ,IAAIA,iBAAiBC,MACxB,OAAOD,MAAM,WAAW;IAE5B,IAAI;QACA,MAAME,UAAU,IAAID,KAAKD;QACzB,OAAOE,QAAQ,WAAW;IAC9B,EAAE,OAAM;QACJ,OAAO;IACX;AACJ;AAKO,MAAMC,mBAAmB,OAAOC;IACnC,MAAM,EAAEC,MAAM,EAAE,GAAGD;IAEnB,MAAME,OAAiB,EAAE;IACzB,KAAK,MAAMC,SAASF,OAAQ;QACxB,MAAMG,QAAQT,WAAWQ,MAAM,OAAO;QAEtCD,KAAK,IAAI,CAACC,MAAM,OAAO,EAAEA,MAAM,eAAe,EAAEA,MAAM,aAAa,EAAEC;IACzE;IACA,MAAMC,MAAMH,KAAK,IAAI,CAAC;IAEtB,MAAMI,OAAOC,SAAAA,UAAiB,CAAC;IAC/BD,KAAK,MAAM,CAACD;IACZ,OAAOC,KAAK,MAAM,CAAC;AACvB"}
1
+ {"version":3,"file":"graphql/getSchema/generateCacheKey.js","sources":["../../../src/graphql/getSchema/generateCacheKey.ts"],"sourcesContent":["import type { CmsModel } from \"~/types/index.js\";\nimport crypto from \"crypto\";\n\ninterface GenerateCacheKeyParams {\n models: Pick<CmsModel, \"modelId\" | \"singularApiName\" | \"pluralApiName\" | \"savedOn\">[];\n}\n\nconst getSavedOn = (input: Date | string | undefined | null): string => {\n if (!input) {\n return \"unknown\";\n } else if (input instanceof Date) {\n return input.toISOString();\n }\n try {\n const savedOn = new Date(input);\n return savedOn.toISOString();\n } catch {\n return \"unknown\";\n }\n};\n/**\n * Method generates cache key based on last model change time.\n * Or sets \"unknown\" - possible when no models in database.\n */\nexport const generateCacheKey = async (params: GenerateCacheKeyParams): Promise<string> => {\n const { models } = params;\n\n const keys: string[] = [];\n for (const model of models) {\n const value = getSavedOn(model.savedOn);\n\n keys.push(model.modelId, model.singularApiName, model.pluralApiName, value);\n }\n const key = keys.join(\"#\");\n\n const hash = crypto.createHash(\"sha512\");\n hash.update(key);\n return hash.digest(\"hex\");\n};\n"],"names":["getSavedOn","input","Date","savedOn","generateCacheKey","params","models","keys","model","value","key","hash","crypto"],"mappings":";AAOA,MAAMA,aAAa,CAACC;IAChB,IAAI,CAACA,OACD,OAAO;IACJ,IAAIA,iBAAiBC,MACxB,OAAOD,MAAM,WAAW;IAE5B,IAAI;QACA,MAAME,UAAU,IAAID,KAAKD;QACzB,OAAOE,QAAQ,WAAW;IAC9B,EAAE,OAAM;QACJ,OAAO;IACX;AACJ;AAKO,MAAMC,mBAAmB,OAAOC;IACnC,MAAM,EAAEC,MAAM,EAAE,GAAGD;IAEnB,MAAME,OAAiB,EAAE;IACzB,KAAK,MAAMC,SAASF,OAAQ;QACxB,MAAMG,QAAQT,WAAWQ,MAAM,OAAO;QAEtCD,KAAK,IAAI,CAACC,MAAM,OAAO,EAAEA,MAAM,eAAe,EAAEA,MAAM,aAAa,EAAEC;IACzE;IACA,MAAMC,MAAMH,KAAK,IAAI,CAAC;IAEtB,MAAMI,OAAOC,SAAAA,UAAiB,CAAC;IAC/BD,KAAK,MAAM,CAACD;IACZ,OAAOC,KAAK,MAAM,CAAC;AACvB"}
@@ -5,7 +5,7 @@ const RevisionIdScalar = new GraphQLScalarType({
5
5
  description: "A Headless CMS Reference field input type.",
6
6
  parseValue: (value)=>{
7
7
  if (!value) return null;
8
- else if ("string" != typeof value) throw new Error("RevisionId value must be a string!");
8
+ if ("string" != typeof value) throw new Error("RevisionId value must be a string!");
9
9
  const result = parseIdentifier(value);
10
10
  if (!result.version) throw new Error('RevisionId value must be a valid Revision ID property! Example: "abcdef#0001"');
11
11
  return value;
@@ -1 +1 @@
1
- {"version":3,"file":"graphql/scalars/RevisionId.js","sources":["../../../src/graphql/scalars/RevisionId.ts"],"sourcesContent":["import { GraphQLScalarType } from \"graphql\";\nimport { parseIdentifier } from \"@webiny/utils\";\n\nexport const RevisionIdScalar = new GraphQLScalarType({\n name: \"RevisionId\",\n description: \"A Headless CMS Reference field input type.\",\n parseValue: value => {\n if (!value) {\n return null;\n } else if (typeof value !== \"string\") {\n throw new Error(\"RevisionId value must be a string!\");\n }\n\n const result = parseIdentifier(value);\n if (!result.version) {\n throw new Error(\n `RevisionId value must be a valid Revision ID property! Example: \"abcdef#0001\"`\n );\n }\n return value;\n }\n});\n"],"names":["RevisionIdScalar","GraphQLScalarType","value","Error","result","parseIdentifier"],"mappings":";;AAGO,MAAMA,mBAAmB,IAAIC,kBAAkB;IAClD,MAAM;IACN,aAAa;IACb,YAAYC,CAAAA;QACR,IAAI,CAACA,OACD,OAAO;aACJ,IAAI,AAAiB,YAAjB,OAAOA,OACd,MAAM,IAAIC,MAAM;QAGpB,MAAMC,SAASC,gBAAgBH;QAC/B,IAAI,CAACE,OAAO,OAAO,EACf,MAAM,IAAID,MACN;QAGR,OAAOD;IACX;AACJ"}
1
+ {"version":3,"file":"graphql/scalars/RevisionId.js","sources":["../../../src/graphql/scalars/RevisionId.ts"],"sourcesContent":["import { GraphQLScalarType } from \"graphql\";\nimport { parseIdentifier } from \"@webiny/utils\";\n\nexport const RevisionIdScalar = new GraphQLScalarType({\n name: \"RevisionId\",\n description: \"A Headless CMS Reference field input type.\",\n parseValue: value => {\n if (!value) {\n return null;\n } else if (typeof value !== \"string\") {\n throw new Error(\"RevisionId value must be a string!\");\n }\n\n const result = parseIdentifier(value);\n if (!result.version) {\n throw new Error(\n `RevisionId value must be a valid Revision ID property! Example: \"abcdef#0001\"`\n );\n }\n return value;\n }\n});\n"],"names":["RevisionIdScalar","GraphQLScalarType","value","Error","result","parseIdentifier"],"mappings":";;AAGO,MAAMA,mBAAmB,IAAIC,kBAAkB;IAClD,MAAM;IACN,aAAa;IACb,YAAYC,CAAAA;QACR,IAAI,CAACA,OACD,OAAO;QACJ,IAAI,AAAiB,YAAjB,OAAOA,OACd,MAAM,IAAIC,MAAM;QAGpB,MAAMC,SAASC,gBAAgBH;QAC/B,IAAI,CAACE,OAAO,OAAO,EACf,MAAM,IAAID,MACN;QAGR,OAAOD;IACX;AACJ"}
@@ -1,25 +1,7 @@
1
1
  import { createCmsGraphQLSchemaPlugin } from "../../plugins/index.js";
2
2
  import { GraphQLSchemaPlugin } from "@webiny/handler-graphql";
3
3
  import { ContextPlugin } from "@webiny/api";
4
- import camelCase from "lodash/camelCase.js";
5
- import { CmsModelFieldValidatorRegistry } from "../../features/validation/index.js";
6
- const createSkipValidatorEnum = (container)=>{
7
- const registry = container.resolve(CmsModelFieldValidatorRegistry);
8
- const names = registry.getAll().reduce((collection, validator)=>{
9
- const name = camelCase(validator.name);
10
- if (collection.includes(name)) return collection;
11
- collection.push(name);
12
- return collection;
13
- }, []);
14
- if (0 === names.length) names.push("_empty");
15
- return `
16
- enum SkipValidatorEnum {
17
- ${names.join("\n")}
18
- }
19
- `;
20
- };
21
- const createSchema = (context)=>{
22
- const skipValidatorEnum = createSkipValidatorEnum(context.container);
4
+ const createSchema = ()=>{
23
5
  const cmsPlugin = createCmsGraphQLSchemaPlugin({
24
6
  typeDefs: `
25
7
  type CmsIdentity {
@@ -89,18 +71,16 @@ const createSchema = (context)=>{
89
71
  folderId_not_in: [ID!]
90
72
  }
91
73
 
92
- ${skipValidatorEnum}
93
-
94
74
  input CreateCmsEntryOptionsInput {
95
- skipValidators: [SkipValidatorEnum!]
75
+ skipValidation: Boolean
96
76
  }
97
77
 
98
78
  input CreateRevisionCmsEntryOptionsInput {
99
- skipValidators: [SkipValidatorEnum!]
79
+ skipValidation: Boolean
100
80
  }
101
81
 
102
82
  input UpdateCmsEntryOptionsInput {
103
- skipValidators: [SkipValidatorEnum!]
83
+ skipValidation: Boolean
104
84
  }
105
85
 
106
86
  input CmsIdentityInput {
@@ -159,7 +139,7 @@ const createSchema = (context)=>{
159
139
  };
160
140
  const createBaseSchema = ()=>{
161
141
  const plugin = new ContextPlugin(async (context)=>{
162
- context.plugins.register(...createSchema(context));
142
+ context.plugins.register(...createSchema());
163
143
  });
164
144
  plugin.name = "headless-cms.graphql.createBaseSchema";
165
145
  return plugin;
@@ -1 +1 @@
1
- {"version":3,"file":"graphql/schema/baseSchema.js","sources":["../../../src/graphql/schema/baseSchema.ts"],"sourcesContent":["import type { CmsContext } from \"~/types/index.js\";\nimport { createCmsGraphQLSchemaPlugin } from \"~/plugins/index.js\";\nimport type { IGraphQLSchemaPlugin } from \"@webiny/handler-graphql\";\nimport { GraphQLSchemaPlugin } from \"@webiny/handler-graphql\";\nimport { ContextPlugin } from \"@webiny/api\";\nimport camelCase from \"lodash/camelCase.js\";\nimport { CmsModelFieldValidatorRegistry } from \"~/features/validation/index.js\";\nimport type { Container } from \"@webiny/di\";\n\nconst createSkipValidatorEnum = (container: Container) => {\n const registry = container.resolve(CmsModelFieldValidatorRegistry);\n const names = registry.getAll().reduce<string[]>((collection, validator) => {\n const name = camelCase(validator.name);\n if (collection.includes(name)) {\n return collection;\n }\n collection.push(name);\n return collection;\n }, []);\n\n if (names.length === 0) {\n names.push(\"_empty\");\n }\n return /* GraphQL */ `\n enum SkipValidatorEnum {\n ${names.join(\"\\n\")}\n }\n `;\n};\n\nconst createSchema = (context: CmsContext): IGraphQLSchemaPlugin<CmsContext>[] => {\n const skipValidatorEnum = createSkipValidatorEnum(context.container);\n\n const cmsPlugin = createCmsGraphQLSchemaPlugin({\n typeDefs: /* GraphQL */ `\n type CmsIdentity {\n id: String\n displayName: String\n type: String\n }\n\n type CmsError {\n code: String\n message: String\n data: JSON\n stack: String\n }\n\n type CmsCursors {\n next: String\n previous: String\n }\n\n type CmsListMeta {\n cursor: String\n hasMoreItems: Boolean\n totalCount: Int\n }\n\n input CmsDeleteEntryOptions {\n # force delete an entry that might have some records left behind in the database\n # see CmsDeleteEntryOptions in types.ts\n force: Boolean\n # permanently delete an entry without moving it to the bin\n permanently: Boolean\n }\n\n type CmsDeleteResponse {\n data: Boolean\n error: CmsError\n }\n\n type CmsDeleteMultipleDataResponse {\n id: ID!\n }\n\n type CmsDeleteMultipleResponse {\n data: [CmsDeleteMultipleDataResponse!]\n error: CmsError\n }\n\n type CmsBooleanResponse {\n data: Boolean\n error: CmsError\n }\n\n # Advanced Content Organization\n type WbyAcoLocation {\n folderId: ID\n }\n\n input WbyAcoLocationInput {\n folderId: ID!\n }\n\n input WbyAcoLocationWhereInput {\n folderId: ID\n folderId_in: [ID!]\n folderId_not: ID\n folderId_not_in: [ID!]\n }\n\n ${skipValidatorEnum}\n\n input CreateCmsEntryOptionsInput {\n skipValidators: [SkipValidatorEnum!]\n }\n\n input CreateRevisionCmsEntryOptionsInput {\n skipValidators: [SkipValidatorEnum!]\n }\n\n input UpdateCmsEntryOptionsInput {\n skipValidators: [SkipValidatorEnum!]\n }\n\n input CmsIdentityInput {\n id: String!\n displayName: String!\n type: String!\n }\n\n type CmsEntryValidationResponseData {\n error: String!\n id: String!\n fieldId: String!\n parents: [String!]!\n }\n\n type CmsEntryValidationResponse {\n data: [CmsEntryValidationResponseData!]\n error: CmsError\n }\n\n type CmsEntrySystem {\n _empty: String\n }\n\n type CmsEntryLive {\n version: Int!\n }\n\n input CmsEntryLiveWhereInput {\n version: Int\n version_gt: Int\n version_gte: Int\n version_lt: Int\n version_lte: Int\n version_not: Int\n version_in: [Int!]\n version_not_in: [Int!]\n }\n\n input ListWhereInputCmsEntrySystem {\n _empty: String\n }\n `,\n resolvers: {}\n });\n cmsPlugin.name = \"headless-cms.graphql.schema.base\";\n const corePlugin = new GraphQLSchemaPlugin<CmsContext>({\n typeDefs: cmsPlugin.schema.typeDefs,\n resolvers: cmsPlugin.schema.resolvers\n });\n corePlugin.name = \"headless-cms.graphql.core.schema.base\";\n /**\n * Due to splitting of CMS and Core schema plugins, we must have both defined for CMS to work.\n */\n return [cmsPlugin, corePlugin];\n};\n\nexport const createBaseSchema = () => {\n const plugin = new ContextPlugin<CmsContext>(async context => {\n context.plugins.register(...createSchema(context));\n });\n\n plugin.name = \"headless-cms.graphql.createBaseSchema\";\n\n return plugin;\n};\n"],"names":["createSkipValidatorEnum","container","registry","CmsModelFieldValidatorRegistry","names","collection","validator","name","camelCase","createSchema","context","skipValidatorEnum","cmsPlugin","createCmsGraphQLSchemaPlugin","corePlugin","GraphQLSchemaPlugin","createBaseSchema","plugin","ContextPlugin"],"mappings":";;;;;AASA,MAAMA,0BAA0B,CAACC;IAC7B,MAAMC,WAAWD,UAAU,OAAO,CAACE;IACnC,MAAMC,QAAQF,SAAS,MAAM,GAAG,MAAM,CAAW,CAACG,YAAYC;QAC1D,MAAMC,OAAOC,UAAUF,UAAU,IAAI;QACrC,IAAID,WAAW,QAAQ,CAACE,OACpB,OAAOF;QAEXA,WAAW,IAAI,CAACE;QAChB,OAAOF;IACX,GAAG,EAAE;IAEL,IAAID,AAAiB,MAAjBA,MAAM,MAAM,EACZA,MAAM,IAAI,CAAC;IAEf,OAAqB,CAAC;;WAEf,EAAEA,MAAM,IAAI,CAAC,MAAM;;IAE1B,CAAC;AACL;AAEA,MAAMK,eAAe,CAACC;IAClB,MAAMC,oBAAoBX,wBAAwBU,QAAQ,SAAS;IAEnE,MAAME,YAAYC,6BAA6B;QAC3C,UAAwB,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;YAoErB,EAAEF,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QAsDxB,CAAC;QACD,WAAW,CAAC;IAChB;IACAC,UAAU,IAAI,GAAG;IACjB,MAAME,aAAa,IAAIC,oBAAgC;QACnD,UAAUH,UAAU,MAAM,CAAC,QAAQ;QACnC,WAAWA,UAAU,MAAM,CAAC,SAAS;IACzC;IACAE,WAAW,IAAI,GAAG;IAIlB,OAAO;QAACF;QAAWE;KAAW;AAClC;AAEO,MAAME,mBAAmB;IAC5B,MAAMC,SAAS,IAAIC,cAA0B,OAAMR;QAC/CA,QAAQ,OAAO,CAAC,QAAQ,IAAID,aAAaC;IAC7C;IAEAO,OAAO,IAAI,GAAG;IAEd,OAAOA;AACX"}
1
+ {"version":3,"file":"graphql/schema/baseSchema.js","sources":["../../../src/graphql/schema/baseSchema.ts"],"sourcesContent":["import type { CmsContext } from \"~/types/index.js\";\nimport { createCmsGraphQLSchemaPlugin } from \"~/plugins/index.js\";\nimport type { IGraphQLSchemaPlugin } from \"@webiny/handler-graphql\";\nimport { GraphQLSchemaPlugin } from \"@webiny/handler-graphql\";\nimport { ContextPlugin } from \"@webiny/api\";\n\nconst createSchema = (): IGraphQLSchemaPlugin<CmsContext>[] => {\n const cmsPlugin = createCmsGraphQLSchemaPlugin({\n typeDefs: /* GraphQL */ `\n type CmsIdentity {\n id: String\n displayName: String\n type: String\n }\n\n type CmsError {\n code: String\n message: String\n data: JSON\n stack: String\n }\n\n type CmsCursors {\n next: String\n previous: String\n }\n\n type CmsListMeta {\n cursor: String\n hasMoreItems: Boolean\n totalCount: Int\n }\n\n input CmsDeleteEntryOptions {\n # force delete an entry that might have some records left behind in the database\n # see CmsDeleteEntryOptions in types.ts\n force: Boolean\n # permanently delete an entry without moving it to the bin\n permanently: Boolean\n }\n\n type CmsDeleteResponse {\n data: Boolean\n error: CmsError\n }\n\n type CmsDeleteMultipleDataResponse {\n id: ID!\n }\n\n type CmsDeleteMultipleResponse {\n data: [CmsDeleteMultipleDataResponse!]\n error: CmsError\n }\n\n type CmsBooleanResponse {\n data: Boolean\n error: CmsError\n }\n\n # Advanced Content Organization\n type WbyAcoLocation {\n folderId: ID\n }\n\n input WbyAcoLocationInput {\n folderId: ID!\n }\n\n input WbyAcoLocationWhereInput {\n folderId: ID\n folderId_in: [ID!]\n folderId_not: ID\n folderId_not_in: [ID!]\n }\n\n input CreateCmsEntryOptionsInput {\n skipValidation: Boolean\n }\n\n input CreateRevisionCmsEntryOptionsInput {\n skipValidation: Boolean\n }\n\n input UpdateCmsEntryOptionsInput {\n skipValidation: Boolean\n }\n\n input CmsIdentityInput {\n id: String!\n displayName: String!\n type: String!\n }\n\n type CmsEntryValidationResponseData {\n error: String!\n id: String!\n fieldId: String!\n parents: [String!]!\n }\n\n type CmsEntryValidationResponse {\n data: [CmsEntryValidationResponseData!]\n error: CmsError\n }\n\n type CmsEntrySystem {\n _empty: String\n }\n\n type CmsEntryLive {\n version: Int!\n }\n\n input CmsEntryLiveWhereInput {\n version: Int\n version_gt: Int\n version_gte: Int\n version_lt: Int\n version_lte: Int\n version_not: Int\n version_in: [Int!]\n version_not_in: [Int!]\n }\n\n input ListWhereInputCmsEntrySystem {\n _empty: String\n }\n `,\n resolvers: {}\n });\n cmsPlugin.name = \"headless-cms.graphql.schema.base\";\n const corePlugin = new GraphQLSchemaPlugin<CmsContext>({\n typeDefs: cmsPlugin.schema.typeDefs,\n resolvers: cmsPlugin.schema.resolvers\n });\n corePlugin.name = \"headless-cms.graphql.core.schema.base\";\n /**\n * Due to splitting of CMS and Core schema plugins, we must have both defined for CMS to work.\n */\n return [cmsPlugin, corePlugin];\n};\n\nexport const createBaseSchema = () => {\n const plugin = new ContextPlugin<CmsContext>(async context => {\n context.plugins.register(...createSchema());\n });\n\n plugin.name = \"headless-cms.graphql.createBaseSchema\";\n\n return plugin;\n};\n"],"names":["createSchema","cmsPlugin","createCmsGraphQLSchemaPlugin","corePlugin","GraphQLSchemaPlugin","createBaseSchema","plugin","ContextPlugin","context"],"mappings":";;;AAMA,MAAMA,eAAe;IACjB,MAAMC,YAAYC,6BAA6B;QAC3C,UAAwB,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QAwHzB,CAAC;QACD,WAAW,CAAC;IAChB;IACAD,UAAU,IAAI,GAAG;IACjB,MAAME,aAAa,IAAIC,oBAAgC;QACnD,UAAUH,UAAU,MAAM,CAAC,QAAQ;QACnC,WAAWA,UAAU,MAAM,CAAC,SAAS;IACzC;IACAE,WAAW,IAAI,GAAG;IAIlB,OAAO;QAACF;QAAWE;KAAW;AAClC;AAEO,MAAME,mBAAmB;IAC5B,MAAMC,SAAS,IAAIC,cAA0B,OAAMC;QAC/CA,QAAQ,OAAO,CAAC,QAAQ,IAAIR;IAChC;IAEAM,OAAO,IAAI,GAAG;IAEd,OAAOA;AACX"}
@@ -1,11 +1,12 @@
1
- import { buildFieldsSelection, getErrorMessage, getModel } from "./helpers.js";
1
+ import { buildFieldsSelection, expandFieldWildcards, getErrorMessage, getModel } from "./helpers.js";
2
2
  const createGetEntryResolver = ()=>async ({ args, context })=>{
3
3
  const { modelId, where, fields, preview = false } = args;
4
4
  try {
5
5
  const model = await getModel(context, modelId);
6
6
  const apiType = preview ? "preview" : "read";
7
7
  const executeSchema = await context.cms.getExecutableSchema(apiType);
8
- const fieldsSelection = buildFieldsSelection(fields);
8
+ const expandedFields = expandFieldWildcards(fields, model, context);
9
+ const fieldsSelection = buildFieldsSelection(expandedFields);
9
10
  const query = `
10
11
  query Get${model.singularApiName}($where: ${model.singularApiName}GetWhereInput!) {
11
12
  get${model.singularApiName}(where: $where) {
@@ -1 +1 @@
1
- {"version":3,"file":"graphql/schema/cms/getEntryResolver.js","sources":["../../../../src/graphql/schema/cms/getEntryResolver.ts"],"sourcesContent":["import type { CmsContext } from \"~/types/index.js\";\nimport type { ApiEndpoint } from \"~/types/index.js\";\nimport type { ExecutionResult } from \"graphql\";\nimport { getModel, getErrorMessage, buildFieldsSelection } from \"./helpers.js\";\n\nexport interface GetEntryArgs {\n modelId: string;\n where: Record<string, unknown>;\n fields: string[];\n preview?: boolean;\n}\n\nexport const createGetEntryResolver = () => {\n return async ({ args, context }: { args: GetEntryArgs; context: CmsContext }) => {\n const { modelId, where, fields, preview = false } = args;\n\n try {\n const model = await getModel(context, modelId);\n\n // Determine which API to use based on the preview flag.\n // preview=true -> preview API, preview=false -> read API\n const apiType: ApiEndpoint = preview ? \"preview\" : \"read\";\n const executeSchema = await context.cms.getExecutableSchema(apiType);\n\n const fieldsSelection = buildFieldsSelection(fields);\n\n const query = /* GraphQL */ `\n query Get${model.singularApiName}($where: ${model.singularApiName}GetWhereInput!) {\n get${model.singularApiName}(where: $where) {\n data {\n ${fieldsSelection}\n }\n error {\n message\n code\n data\n }\n }\n }\n `;\n\n const result = (await executeSchema({\n query,\n variables: { where }\n })) as ExecutionResult;\n\n if (result.errors && result.errors.length > 0) {\n return {\n data: null,\n error: {\n message: result.errors.map(e => e.message).join(\"; \"),\n code: \"GET_ENTRY_ERROR\"\n }\n };\n }\n\n const operationName = `get${model.singularApiName}`;\n return result.data?.[operationName] || { data: null, error: null };\n } catch (error) {\n return {\n data: null,\n error: {\n message: getErrorMessage(error, \"Failed to get entry\"),\n code: \"GET_ENTRY_ERROR\"\n }\n };\n }\n };\n};\n"],"names":["createGetEntryResolver","args","context","modelId","where","fields","preview","model","getModel","apiType","executeSchema","fieldsSelection","buildFieldsSelection","query","result","e","operationName","error","getErrorMessage"],"mappings":";AAYO,MAAMA,yBAAyB,IAC3B,OAAO,EAAEC,IAAI,EAAEC,OAAO,EAA+C;QACxE,MAAM,EAAEC,OAAO,EAAEC,KAAK,EAAEC,MAAM,EAAEC,UAAU,KAAK,EAAE,GAAGL;QAEpD,IAAI;YACA,MAAMM,QAAQ,MAAMC,SAASN,SAASC;YAItC,MAAMM,UAAuBH,UAAU,YAAY;YACnD,MAAMI,gBAAgB,MAAMR,QAAQ,GAAG,CAAC,mBAAmB,CAACO;YAE5D,MAAME,kBAAkBC,qBAAqBP;YAE7C,MAAMQ,QAAsB,CAAC;yBAChB,EAAEN,MAAM,eAAe,CAAC,SAAS,EAAEA,MAAM,eAAe,CAAC;uBAC3D,EAAEA,MAAM,eAAe,CAAC;;4BAEnB,EAAEI,gBAAgB;;;;;;;;;YASlC,CAAC;YAED,MAAMG,SAAU,MAAMJ,cAAc;gBAChCG;gBACA,WAAW;oBAAET;gBAAM;YACvB;YAEA,IAAIU,OAAO,MAAM,IAAIA,OAAO,MAAM,CAAC,MAAM,GAAG,GACxC,OAAO;gBACH,MAAM;gBACN,OAAO;oBACH,SAASA,OAAO,MAAM,CAAC,GAAG,CAACC,CAAAA,IAAKA,EAAE,OAAO,EAAE,IAAI,CAAC;oBAChD,MAAM;gBACV;YACJ;YAGJ,MAAMC,gBAAgB,CAAC,GAAG,EAAET,MAAM,eAAe,EAAE;YACnD,OAAOO,OAAO,IAAI,EAAE,CAACE,cAAc,IAAI;gBAAE,MAAM;gBAAM,OAAO;YAAK;QACrE,EAAE,OAAOC,OAAO;YACZ,OAAO;gBACH,MAAM;gBACN,OAAO;oBACH,SAASC,gBAAgBD,OAAO;oBAChC,MAAM;gBACV;YACJ;QACJ;IACJ"}
1
+ {"version":3,"file":"graphql/schema/cms/getEntryResolver.js","sources":["../../../../src/graphql/schema/cms/getEntryResolver.ts"],"sourcesContent":["import type { CmsContext } from \"~/types/index.js\";\nimport type { ApiEndpoint } from \"~/types/index.js\";\nimport type { ExecutionResult } from \"graphql\";\nimport {\n getModel,\n getErrorMessage,\n buildFieldsSelection,\n expandFieldWildcards\n} from \"./helpers.js\";\n\nexport interface GetEntryArgs {\n modelId: string;\n where: Record<string, unknown>;\n fields: string[];\n preview?: boolean;\n}\n\nexport const createGetEntryResolver = () => {\n return async ({ args, context }: { args: GetEntryArgs; context: CmsContext }) => {\n const { modelId, where, fields, preview = false } = args;\n\n try {\n const model = await getModel(context, modelId);\n\n // Determine which API to use based on the preview flag.\n // preview=true -> preview API, preview=false -> read API\n const apiType: ApiEndpoint = preview ? \"preview\" : \"read\";\n const executeSchema = await context.cms.getExecutableSchema(apiType);\n\n const expandedFields = expandFieldWildcards(fields, model, context);\n const fieldsSelection = buildFieldsSelection(expandedFields);\n\n const query = /* GraphQL */ `\n query Get${model.singularApiName}($where: ${model.singularApiName}GetWhereInput!) {\n get${model.singularApiName}(where: $where) {\n data {\n ${fieldsSelection}\n }\n error {\n message\n code\n data\n }\n }\n }\n `;\n\n const result = (await executeSchema({\n query,\n variables: { where }\n })) as ExecutionResult;\n\n if (result.errors && result.errors.length > 0) {\n return {\n data: null,\n error: {\n message: result.errors.map(e => e.message).join(\"; \"),\n code: \"GET_ENTRY_ERROR\"\n }\n };\n }\n\n const operationName = `get${model.singularApiName}`;\n return result.data?.[operationName] || { data: null, error: null };\n } catch (error) {\n return {\n data: null,\n error: {\n message: getErrorMessage(error, \"Failed to get entry\"),\n code: \"GET_ENTRY_ERROR\"\n }\n };\n }\n };\n};\n"],"names":["createGetEntryResolver","args","context","modelId","where","fields","preview","model","getModel","apiType","executeSchema","expandedFields","expandFieldWildcards","fieldsSelection","buildFieldsSelection","query","result","e","operationName","error","getErrorMessage"],"mappings":";AAiBO,MAAMA,yBAAyB,IAC3B,OAAO,EAAEC,IAAI,EAAEC,OAAO,EAA+C;QACxE,MAAM,EAAEC,OAAO,EAAEC,KAAK,EAAEC,MAAM,EAAEC,UAAU,KAAK,EAAE,GAAGL;QAEpD,IAAI;YACA,MAAMM,QAAQ,MAAMC,SAASN,SAASC;YAItC,MAAMM,UAAuBH,UAAU,YAAY;YACnD,MAAMI,gBAAgB,MAAMR,QAAQ,GAAG,CAAC,mBAAmB,CAACO;YAE5D,MAAME,iBAAiBC,qBAAqBP,QAAQE,OAAOL;YAC3D,MAAMW,kBAAkBC,qBAAqBH;YAE7C,MAAMI,QAAsB,CAAC;yBAChB,EAAER,MAAM,eAAe,CAAC,SAAS,EAAEA,MAAM,eAAe,CAAC;uBAC3D,EAAEA,MAAM,eAAe,CAAC;;4BAEnB,EAAEM,gBAAgB;;;;;;;;;YASlC,CAAC;YAED,MAAMG,SAAU,MAAMN,cAAc;gBAChCK;gBACA,WAAW;oBAAEX;gBAAM;YACvB;YAEA,IAAIY,OAAO,MAAM,IAAIA,OAAO,MAAM,CAAC,MAAM,GAAG,GACxC,OAAO;gBACH,MAAM;gBACN,OAAO;oBACH,SAASA,OAAO,MAAM,CAAC,GAAG,CAACC,CAAAA,IAAKA,EAAE,OAAO,EAAE,IAAI,CAAC;oBAChD,MAAM;gBACV;YACJ;YAGJ,MAAMC,gBAAgB,CAAC,GAAG,EAAEX,MAAM,eAAe,EAAE;YACnD,OAAOS,OAAO,IAAI,EAAE,CAACE,cAAc,IAAI;gBAAE,MAAM;gBAAM,OAAO;YAAK;QACrE,EAAE,OAAOC,OAAO;YACZ,OAAO;gBACH,MAAM;gBACN,OAAO;oBACH,SAASC,gBAAgBD,OAAO;oBAChC,MAAM;gBACV;YACJ;QACJ;IACJ"}
@@ -0,0 +1,35 @@
1
+ import type { CmsContext } from "../../../types/index.js";
2
+ export interface GetModelArgs {
3
+ modelId: string;
4
+ }
5
+ export declare const createGetModelResolver: () => ({ args, context }: {
6
+ args: GetModelArgs;
7
+ context: CmsContext;
8
+ }) => Promise<{
9
+ data: {
10
+ name: string;
11
+ modelId: string;
12
+ singularApiName: string;
13
+ pluralApiName: string;
14
+ description: string | null;
15
+ titleFieldId: string;
16
+ descriptionFieldId: string | null | undefined;
17
+ imageFieldId: string | null | undefined;
18
+ fields: import("~/types/index.js").CmsModelField[];
19
+ layout: import("~/types/index.js").CmsModelLayout;
20
+ tags: string[] | undefined;
21
+ settings: import("../../../features/modelBuilder/abstractions.js").IModelSettings | null | undefined;
22
+ metadata: {
23
+ valuesSelection: string;
24
+ componentMap: Record<string, string>;
25
+ refModels: Record<string, import("~/features/contentModel/RefModelsGenerator/abstractions.js").RefModelMetadata>;
26
+ };
27
+ };
28
+ error: null;
29
+ } | {
30
+ data: null;
31
+ error: {
32
+ message: string;
33
+ code: string;
34
+ };
35
+ }>;