@webiny/api-headless-cms 0.0.0-unstable.d7f521b032 → 0.0.0-unstable.de38392959

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 (568) hide show
  1. package/constants.d.ts +32 -0
  2. package/constants.js +57 -0
  3. package/constants.js.map +1 -0
  4. package/context.js +88 -47
  5. package/context.js.map +1 -1
  6. package/crud/contentEntry/afterDelete.js +3 -1
  7. package/crud/contentEntry/afterDelete.js.map +1 -1
  8. package/crud/contentEntry/beforeCreate.js +3 -1
  9. package/crud/contentEntry/beforeCreate.js.map +1 -1
  10. package/crud/contentEntry/beforeUpdate.js +3 -1
  11. package/crud/contentEntry/beforeUpdate.js.map +1 -1
  12. package/crud/contentEntry/entryDataFactories/createEntryData.d.ts +20 -0
  13. package/crud/contentEntry/entryDataFactories/createEntryData.js +228 -0
  14. package/crud/contentEntry/entryDataFactories/createEntryData.js.map +1 -0
  15. package/crud/contentEntry/entryDataFactories/createEntryRevisionFromData.d.ts +21 -0
  16. package/crud/contentEntry/entryDataFactories/createEntryRevisionFromData.js +114 -0
  17. package/crud/contentEntry/entryDataFactories/createEntryRevisionFromData.js.map +1 -0
  18. package/crud/contentEntry/entryDataFactories/createPublishEntryData.d.ts +13 -0
  19. package/crud/contentEntry/entryDataFactories/createPublishEntryData.js +61 -0
  20. package/crud/contentEntry/entryDataFactories/createPublishEntryData.js.map +1 -0
  21. package/crud/contentEntry/entryDataFactories/createRepublishEntryData.d.ts +12 -0
  22. package/crud/contentEntry/entryDataFactories/createRepublishEntryData.js +57 -0
  23. package/crud/contentEntry/entryDataFactories/createRepublishEntryData.js.map +1 -0
  24. package/crud/contentEntry/entryDataFactories/createUnpublishEntryData.d.ts +12 -0
  25. package/crud/contentEntry/entryDataFactories/createUnpublishEntryData.js +38 -0
  26. package/crud/contentEntry/entryDataFactories/createUnpublishEntryData.js.map +1 -0
  27. package/crud/contentEntry/entryDataFactories/createUpdateEntryData.d.ts +20 -0
  28. package/crud/contentEntry/entryDataFactories/createUpdateEntryData.js +122 -0
  29. package/crud/contentEntry/entryDataFactories/createUpdateEntryData.js.map +1 -0
  30. package/crud/contentEntry/entryDataFactories/index.d.ts +8 -0
  31. package/crud/contentEntry/entryDataFactories/index.js +95 -0
  32. package/crud/contentEntry/entryDataFactories/index.js.map +1 -0
  33. package/crud/contentEntry/entryDataFactories/mapAndCleanUpdatedInputData.d.ts +5 -0
  34. package/crud/contentEntry/entryDataFactories/mapAndCleanUpdatedInputData.js +36 -0
  35. package/crud/contentEntry/entryDataFactories/mapAndCleanUpdatedInputData.js.map +1 -0
  36. package/crud/contentEntry/entryDataFactories/statuses.d.ts +4 -0
  37. package/crud/contentEntry/entryDataFactories/statuses.js +15 -0
  38. package/crud/contentEntry/entryDataFactories/statuses.js.map +1 -0
  39. package/crud/contentEntry/entryDataValidation.d.ts +4 -2
  40. package/crud/contentEntry/entryDataValidation.js +223 -45
  41. package/crud/contentEntry/entryDataValidation.js.map +1 -1
  42. package/crud/contentEntry/markLockedFields.d.ts +1 -1
  43. package/crud/contentEntry/markLockedFields.js +20 -10
  44. package/crud/contentEntry/markLockedFields.js.map +1 -1
  45. package/crud/contentEntry/referenceFieldsMapping.d.ts +6 -0
  46. package/crud/contentEntry/referenceFieldsMapping.js +142 -90
  47. package/crud/contentEntry/referenceFieldsMapping.js.map +1 -1
  48. package/crud/contentEntry/searchableFields.js +5 -4
  49. package/crud/contentEntry/searchableFields.js.map +1 -1
  50. package/crud/contentEntry.crud.d.ts +9 -5
  51. package/crud/contentEntry.crud.js +1093 -981
  52. package/crud/contentEntry.crud.js.map +1 -1
  53. package/crud/contentModel/beforeCreate.d.ts +1 -1
  54. package/crud/contentModel/beforeCreate.js +50 -85
  55. package/crud/contentModel/beforeCreate.js.map +1 -1
  56. package/crud/contentModel/beforeDelete.d.ts +1 -1
  57. package/crud/contentModel/beforeDelete.js +4 -6
  58. package/crud/contentModel/beforeDelete.js.map +1 -1
  59. package/crud/contentModel/beforeUpdate.d.ts +1 -1
  60. package/crud/contentModel/beforeUpdate.js +31 -6
  61. package/crud/contentModel/beforeUpdate.js.map +1 -1
  62. package/crud/contentModel/compatibility/modelApiName.d.ts +3 -0
  63. package/crud/contentModel/compatibility/modelApiName.js +26 -0
  64. package/crud/contentModel/compatibility/modelApiName.js.map +1 -0
  65. package/crud/contentModel/contentModelManagerFactory.js +3 -1
  66. package/crud/contentModel/contentModelManagerFactory.js.map +1 -1
  67. package/crud/contentModel/createFieldStorageId.js +3 -1
  68. package/crud/contentModel/createFieldStorageId.js.map +1 -1
  69. package/crud/contentModel/defaultFields.d.ts +5 -0
  70. package/crud/contentModel/defaultFields.js +60 -0
  71. package/crud/contentModel/defaultFields.js.map +1 -0
  72. package/crud/contentModel/ensureTypeTag.d.ts +5 -0
  73. package/crud/contentModel/ensureTypeTag.js +21 -0
  74. package/crud/contentModel/ensureTypeTag.js.map +1 -0
  75. package/crud/contentModel/fields/descriptionField.d.ts +2 -0
  76. package/crud/contentModel/fields/descriptionField.js +44 -0
  77. package/crud/contentModel/fields/descriptionField.js.map +1 -0
  78. package/crud/contentModel/fields/imageField.d.ts +2 -0
  79. package/crud/contentModel/fields/imageField.js +44 -0
  80. package/crud/contentModel/fields/imageField.js.map +1 -0
  81. package/crud/contentModel/fields/titleField.d.ts +2 -0
  82. package/crud/contentModel/fields/titleField.js +60 -0
  83. package/crud/contentModel/fields/titleField.js.map +1 -0
  84. package/crud/contentModel/listModelsFromDatabase.d.ts +10 -0
  85. package/crud/contentModel/listModelsFromDatabase.js +38 -0
  86. package/crud/contentModel/listModelsFromDatabase.js.map +1 -0
  87. package/crud/contentModel/validate/endingAllowed.d.ts +6 -0
  88. package/crud/contentModel/validate/endingAllowed.js +28 -0
  89. package/crud/contentModel/validate/endingAllowed.js.map +1 -0
  90. package/crud/contentModel/validate/isModelEndingAllowed.d.ts +6 -0
  91. package/crud/contentModel/validate/isModelEndingAllowed.js +26 -0
  92. package/crud/contentModel/validate/isModelEndingAllowed.js.map +1 -0
  93. package/crud/contentModel/validate/modelId.d.ts +11 -0
  94. package/crud/contentModel/validate/modelId.js +38 -0
  95. package/crud/contentModel/validate/modelId.js.map +1 -0
  96. package/crud/contentModel/validate/pluralApiName.d.ts +7 -0
  97. package/crud/contentModel/validate/pluralApiName.js +26 -0
  98. package/crud/contentModel/validate/pluralApiName.js.map +1 -0
  99. package/crud/contentModel/validate/singularApiName.d.ts +7 -0
  100. package/crud/contentModel/validate/singularApiName.js +26 -0
  101. package/crud/contentModel/validate/singularApiName.js.map +1 -0
  102. package/crud/contentModel/validateModel.d.ts +1 -0
  103. package/crud/contentModel/validateModel.js +3 -1
  104. package/crud/contentModel/validateModel.js.map +1 -1
  105. package/crud/contentModel/validateModelFields.d.ts +2 -1
  106. package/crud/contentModel/validateModelFields.js +27 -64
  107. package/crud/contentModel/validateModelFields.js.map +1 -1
  108. package/crud/contentModel/validation.d.ts +595 -200
  109. package/crud/contentModel/validation.js +125 -17
  110. package/crud/contentModel/validation.js.map +1 -1
  111. package/crud/contentModel.crud.d.ts +2 -0
  112. package/crud/contentModel.crud.js +437 -411
  113. package/crud/contentModel.crud.js.map +1 -1
  114. package/crud/contentModelGroup/beforeCreate.d.ts +1 -1
  115. package/crud/contentModelGroup/beforeCreate.js +15 -1
  116. package/crud/contentModelGroup/beforeCreate.js.map +1 -1
  117. package/crud/contentModelGroup/beforeDelete.js +3 -1
  118. package/crud/contentModelGroup/beforeDelete.js.map +1 -1
  119. package/crud/contentModelGroup/beforeUpdate.js +3 -1
  120. package/crud/contentModelGroup/beforeUpdate.js.map +1 -1
  121. package/crud/contentModelGroup/listGroupsFromDatabase.d.ts +8 -0
  122. package/crud/contentModelGroup/listGroupsFromDatabase.js +22 -0
  123. package/crud/contentModelGroup/listGroupsFromDatabase.js.map +1 -0
  124. package/crud/contentModelGroup/validation.d.ts +10 -7
  125. package/crud/contentModelGroup/validation.js +5 -2
  126. package/crud/contentModelGroup/validation.js.map +1 -1
  127. package/crud/contentModelGroup.crud.d.ts +3 -1
  128. package/crud/contentModelGroup.crud.js +272 -228
  129. package/crud/contentModelGroup.crud.js.map +1 -1
  130. package/crud/system.crud.js +8 -71
  131. package/crud/system.crud.js.map +1 -1
  132. package/export/crud/exporting.d.ts +3 -0
  133. package/export/crud/exporting.js +49 -0
  134. package/export/crud/exporting.js.map +1 -0
  135. package/export/crud/importing.d.ts +3 -0
  136. package/export/crud/importing.js +79 -0
  137. package/export/crud/importing.js.map +1 -0
  138. package/export/crud/imports/importData.d.ts +14 -0
  139. package/export/crud/imports/importData.js +52 -0
  140. package/export/crud/imports/importData.js.map +1 -0
  141. package/export/crud/imports/importGroups.d.ts +8 -0
  142. package/export/crud/imports/importGroups.js +104 -0
  143. package/export/crud/imports/importGroups.js.map +1 -0
  144. package/export/crud/imports/importModels.d.ts +8 -0
  145. package/export/crud/imports/importModels.js +136 -0
  146. package/export/crud/imports/importModels.js.map +1 -0
  147. package/export/crud/imports/validateGroups.d.ts +8 -0
  148. package/export/crud/imports/validateGroups.js +112 -0
  149. package/export/crud/imports/validateGroups.js.map +1 -0
  150. package/export/crud/imports/validateInput.d.ts +19 -0
  151. package/export/crud/imports/validateInput.js +55 -0
  152. package/export/crud/imports/validateInput.js.map +1 -0
  153. package/export/crud/imports/validateModels.d.ts +12 -0
  154. package/export/crud/imports/validateModels.js +203 -0
  155. package/export/crud/imports/validateModels.js.map +1 -0
  156. package/export/crud/index.d.ts +4 -0
  157. package/export/crud/index.js +15 -0
  158. package/export/crud/index.js.map +1 -0
  159. package/export/crud/sanitize.d.ts +4 -0
  160. package/export/crud/sanitize.js +35 -0
  161. package/export/crud/sanitize.js.map +1 -0
  162. package/export/graphql/index.d.ts +3 -0
  163. package/export/graphql/index.js +188 -0
  164. package/export/graphql/index.js.map +1 -0
  165. package/export/index.d.ts +2 -0
  166. package/export/index.js +29 -0
  167. package/export/index.js.map +1 -0
  168. package/export/types.d.ts +113 -0
  169. package/export/types.js +22 -0
  170. package/export/types.js.map +1 -0
  171. package/fieldConverters/CmsModelDefaultFieldConverterPlugin.js +4 -7
  172. package/fieldConverters/CmsModelDefaultFieldConverterPlugin.js.map +1 -1
  173. package/fieldConverters/CmsModelDynamicZoneFieldConverterPlugin.js +5 -8
  174. package/fieldConverters/CmsModelDynamicZoneFieldConverterPlugin.js.map +1 -1
  175. package/fieldConverters/CmsModelObjectFieldConverterPlugin.js +47 -38
  176. package/fieldConverters/CmsModelObjectFieldConverterPlugin.js.map +1 -1
  177. package/fieldConverters/index.js +3 -1
  178. package/fieldConverters/index.js.map +1 -1
  179. package/graphql/buildSchemaPlugins.js +7 -1
  180. package/graphql/buildSchemaPlugins.js.map +1 -1
  181. package/graphql/checkEndpointAccess.d.ts +2 -0
  182. package/graphql/checkEndpointAccess.js +20 -0
  183. package/graphql/checkEndpointAccess.js.map +1 -0
  184. package/graphql/createExecutableSchema.d.ts +2 -3
  185. package/graphql/createExecutableSchema.js +3 -1
  186. package/graphql/createExecutableSchema.js.map +1 -1
  187. package/graphql/createRequestBody.d.ts +2 -0
  188. package/graphql/createRequestBody.js +16 -0
  189. package/graphql/createRequestBody.js.map +1 -0
  190. package/graphql/formatErrorPayload.d.ts +1 -0
  191. package/graphql/formatErrorPayload.js +27 -0
  192. package/graphql/formatErrorPayload.js.map +1 -0
  193. package/graphql/generateSchema.js +3 -1
  194. package/graphql/generateSchema.js.map +1 -1
  195. package/graphql/getSchema.d.ts +16 -0
  196. package/graphql/getSchema.js +118 -0
  197. package/graphql/getSchema.js.map +1 -0
  198. package/graphql/graphQLHandlerFactory.js +9 -146
  199. package/graphql/graphQLHandlerFactory.js.map +1 -1
  200. package/graphql/handleRequest.d.ts +11 -0
  201. package/graphql/handleRequest.js +79 -0
  202. package/graphql/handleRequest.js.map +1 -0
  203. package/graphql/index.d.ts +1 -1
  204. package/graphql/index.js +4 -2
  205. package/graphql/index.js.map +1 -1
  206. package/graphql/schema/baseContentSchema.js +10 -15
  207. package/graphql/schema/baseContentSchema.js.map +1 -1
  208. package/graphql/schema/baseSchema.d.ts +2 -3
  209. package/graphql/schema/baseSchema.js +95 -2
  210. package/graphql/schema/baseSchema.js.map +1 -1
  211. package/graphql/schema/contentEntries.js +134 -59
  212. package/graphql/schema/contentEntries.js.map +1 -1
  213. package/graphql/schema/contentModelGroups.js +12 -9
  214. package/graphql/schema/contentModelGroups.js.map +1 -1
  215. package/graphql/schema/contentModels.js +33 -14
  216. package/graphql/schema/contentModels.js.map +1 -1
  217. package/graphql/schema/createFieldResolvers.d.ts +1 -1
  218. package/graphql/schema/createFieldResolvers.js +18 -22
  219. package/graphql/schema/createFieldResolvers.js.map +1 -1
  220. package/graphql/schema/createFieldTypePluginRecords.d.ts +3 -0
  221. package/graphql/schema/createFieldTypePluginRecords.js +15 -0
  222. package/graphql/schema/createFieldTypePluginRecords.js.map +1 -0
  223. package/graphql/schema/createManageResolvers.d.ts +1 -1
  224. package/graphql/schema/createManageResolvers.js +60 -27
  225. package/graphql/schema/createManageResolvers.js.map +1 -1
  226. package/graphql/schema/createManageSDL.d.ts +1 -0
  227. package/graphql/schema/createManageSDL.js +116 -69
  228. package/graphql/schema/createManageSDL.js.map +1 -1
  229. package/graphql/schema/createPreviewResolvers.js +10 -13
  230. package/graphql/schema/createPreviewResolvers.js.map +1 -1
  231. package/graphql/schema/createReadResolvers.js +11 -14
  232. package/graphql/schema/createReadResolvers.js.map +1 -1
  233. package/graphql/schema/createReadSDL.d.ts +1 -0
  234. package/graphql/schema/createReadSDL.js +51 -38
  235. package/graphql/schema/createReadSDL.js.map +1 -1
  236. package/graphql/schema/resolvers/manage/resolveCreate.d.ts +2 -1
  237. package/graphql/schema/resolvers/manage/resolveCreate.js +4 -2
  238. package/graphql/schema/resolvers/manage/resolveCreate.js.map +1 -1
  239. package/graphql/schema/resolvers/manage/resolveCreateFrom.d.ts +2 -1
  240. package/graphql/schema/resolvers/manage/resolveCreateFrom.js +4 -2
  241. package/graphql/schema/resolvers/manage/resolveCreateFrom.js.map +1 -1
  242. package/graphql/schema/resolvers/manage/resolveDelete.d.ts +2 -1
  243. package/graphql/schema/resolvers/manage/resolveDelete.js +16 -4
  244. package/graphql/schema/resolvers/manage/resolveDelete.js.map +1 -1
  245. package/graphql/schema/resolvers/manage/resolveDeleteMultiple.d.ts +7 -0
  246. package/graphql/schema/resolvers/manage/resolveDeleteMultiple.js +22 -0
  247. package/graphql/schema/resolvers/manage/resolveDeleteMultiple.js.map +1 -0
  248. package/graphql/schema/resolvers/manage/resolveGet.js +12 -5
  249. package/graphql/schema/resolvers/manage/resolveGet.js.map +1 -1
  250. package/graphql/schema/resolvers/manage/resolveGetByIds.js +3 -1
  251. package/graphql/schema/resolvers/manage/resolveGetByIds.js.map +1 -1
  252. package/graphql/schema/resolvers/manage/resolveGetRevisions.js +3 -1
  253. package/graphql/schema/resolvers/manage/resolveGetRevisions.js.map +1 -1
  254. package/graphql/schema/resolvers/manage/resolveGetUniqueFieldValues.d.ts +4 -0
  255. package/graphql/schema/resolvers/manage/resolveGetUniqueFieldValues.js +20 -0
  256. package/graphql/schema/resolvers/manage/resolveGetUniqueFieldValues.js.map +1 -0
  257. package/graphql/schema/resolvers/manage/resolveList.js +3 -1
  258. package/graphql/schema/resolvers/manage/resolveList.js.map +1 -1
  259. package/graphql/schema/resolvers/manage/resolveMove.d.ts +8 -0
  260. package/graphql/schema/resolvers/manage/resolveMove.js +27 -0
  261. package/graphql/schema/resolvers/manage/resolveMove.js.map +1 -0
  262. package/graphql/schema/resolvers/manage/resolvePublish.js +3 -1
  263. package/graphql/schema/resolvers/manage/resolvePublish.js.map +1 -1
  264. package/graphql/schema/resolvers/manage/resolveRepublish.js +3 -1
  265. package/graphql/schema/resolvers/manage/resolveRepublish.js.map +1 -1
  266. package/graphql/schema/resolvers/manage/resolveUnpublish.js +3 -1
  267. package/graphql/schema/resolvers/manage/resolveUnpublish.js.map +1 -1
  268. package/graphql/schema/resolvers/manage/resolveUpdate.d.ts +2 -1
  269. package/graphql/schema/resolvers/manage/resolveUpdate.js +4 -2
  270. package/graphql/schema/resolvers/manage/resolveUpdate.js.map +1 -1
  271. package/graphql/schema/resolvers/manage/resolveValidate.d.ts +8 -0
  272. package/graphql/schema/resolvers/manage/resolveValidate.js +20 -0
  273. package/graphql/schema/resolvers/manage/resolveValidate.js.map +1 -0
  274. package/graphql/schema/resolvers/preview/resolveGet.js +6 -5
  275. package/graphql/schema/resolvers/preview/resolveGet.js.map +1 -1
  276. package/graphql/schema/resolvers/preview/resolveList.js +3 -1
  277. package/graphql/schema/resolvers/preview/resolveList.js.map +1 -1
  278. package/graphql/schema/resolvers/read/resolveGet.js +6 -5
  279. package/graphql/schema/resolvers/read/resolveGet.js.map +1 -1
  280. package/graphql/schema/resolvers/read/resolveList.js +3 -1
  281. package/graphql/schema/resolvers/read/resolveList.js.map +1 -1
  282. package/graphql/schema/schemaPlugins.js +10 -17
  283. package/graphql/schema/schemaPlugins.js.map +1 -1
  284. package/graphql/system.d.ts +2 -5
  285. package/graphql/system.js +4 -28
  286. package/graphql/system.js.map +1 -1
  287. package/graphqlFields/boolean.js +3 -1
  288. package/graphqlFields/boolean.js.map +1 -1
  289. package/graphqlFields/datetime.js +5 -5
  290. package/graphqlFields/datetime.js.map +1 -1
  291. package/graphqlFields/dynamicZone/dynamicZoneField.d.ts +1 -1
  292. package/graphqlFields/dynamicZone/dynamicZoneField.js +86 -28
  293. package/graphqlFields/dynamicZone/dynamicZoneField.js.map +1 -1
  294. package/graphqlFields/dynamicZone/dynamicZoneStorage.js +60 -12
  295. package/graphqlFields/dynamicZone/dynamicZoneStorage.js.map +1 -1
  296. package/graphqlFields/dynamicZone/index.js +3 -1
  297. package/graphqlFields/dynamicZone/index.js.map +1 -1
  298. package/graphqlFields/file.js +3 -1
  299. package/graphqlFields/file.js.map +1 -1
  300. package/graphqlFields/helpers.d.ts +0 -1
  301. package/graphqlFields/helpers.js +6 -18
  302. package/graphqlFields/helpers.js.map +1 -1
  303. package/graphqlFields/index.js +5 -2
  304. package/graphqlFields/index.js.map +1 -1
  305. package/graphqlFields/json.d.ts +2 -0
  306. package/graphqlFields/json.js +49 -0
  307. package/graphqlFields/json.js.map +1 -0
  308. package/graphqlFields/longText.js +14 -3
  309. package/graphqlFields/longText.js.map +1 -1
  310. package/graphqlFields/number.js +4 -1
  311. package/graphqlFields/number.js.map +1 -1
  312. package/graphqlFields/object.js +33 -34
  313. package/graphqlFields/object.js.map +1 -1
  314. package/graphqlFields/ref.js +68 -28
  315. package/graphqlFields/ref.js.map +1 -1
  316. package/graphqlFields/richText/RichTextPluginsProcessor.d.ts +6 -0
  317. package/graphqlFields/richText/RichTextPluginsProcessor.js +34 -0
  318. package/graphqlFields/richText/RichTextPluginsProcessor.js.map +1 -0
  319. package/graphqlFields/richText/richTextResolver.d.ts +7 -0
  320. package/graphqlFields/richText/richTextResolver.js +39 -0
  321. package/graphqlFields/richText/richTextResolver.js.map +1 -0
  322. package/graphqlFields/richText.js +11 -3
  323. package/graphqlFields/richText.js.map +1 -1
  324. package/graphqlFields/text.js +5 -1
  325. package/graphqlFields/text.js.map +1 -1
  326. package/htmlRenderer/LexicalRenderer.d.ts +5 -0
  327. package/htmlRenderer/LexicalRenderer.js +28 -0
  328. package/htmlRenderer/LexicalRenderer.js.map +1 -0
  329. package/htmlRenderer/createLexicalHTMLRenderer.d.ts +2 -0
  330. package/htmlRenderer/createLexicalHTMLRenderer.js +31 -0
  331. package/htmlRenderer/createLexicalHTMLRenderer.js.map +1 -0
  332. package/index.d.ts +5 -2
  333. package/index.js +44 -6
  334. package/index.js.map +1 -1
  335. package/modelManager/DefaultCmsModelManager.js +3 -5
  336. package/modelManager/DefaultCmsModelManager.js.map +1 -1
  337. package/modelManager/index.js +3 -1
  338. package/modelManager/index.js.map +1 -1
  339. package/package.json +36 -40
  340. package/parameters/context.js +4 -2
  341. package/parameters/context.js.map +1 -1
  342. package/parameters/header.js +7 -6
  343. package/parameters/header.js.map +1 -1
  344. package/parameters/index.js +3 -1
  345. package/parameters/index.js.map +1 -1
  346. package/parameters/manual.js +9 -4
  347. package/parameters/manual.js.map +1 -1
  348. package/parameters/path.js +4 -3
  349. package/parameters/path.js.map +1 -1
  350. package/plugins/CmsGraphQLSchemaPlugin.js +5 -4
  351. package/plugins/CmsGraphQLSchemaPlugin.js.map +1 -1
  352. package/plugins/CmsGraphQLSchemaSorterPlugin.js +4 -5
  353. package/plugins/CmsGraphQLSchemaSorterPlugin.js.map +1 -1
  354. package/plugins/CmsGroupPlugin.d.ts +6 -3
  355. package/plugins/CmsGroupPlugin.js +8 -6
  356. package/plugins/CmsGroupPlugin.js.map +1 -1
  357. package/plugins/CmsModelFieldConverterPlugin.js +5 -4
  358. package/plugins/CmsModelFieldConverterPlugin.js.map +1 -1
  359. package/plugins/CmsModelPlugin.d.ts +25 -5
  360. package/plugins/CmsModelPlugin.js +75 -20
  361. package/plugins/CmsModelPlugin.js.map +1 -1
  362. package/plugins/CmsParametersPlugin.js +7 -4
  363. package/plugins/CmsParametersPlugin.js.map +1 -1
  364. package/plugins/CmsRichTextRendererPlugin.d.ts +24 -0
  365. package/plugins/CmsRichTextRendererPlugin.js +28 -0
  366. package/plugins/CmsRichTextRendererPlugin.js.map +1 -0
  367. package/plugins/StorageOperationsCmsModelPlugin.d.ts +23 -0
  368. package/plugins/StorageOperationsCmsModelPlugin.js +41 -0
  369. package/plugins/StorageOperationsCmsModelPlugin.js.map +1 -0
  370. package/plugins/StorageTransformPlugin.d.ts +2 -2
  371. package/plugins/StorageTransformPlugin.js +3 -4
  372. package/plugins/StorageTransformPlugin.js.map +1 -1
  373. package/plugins/index.d.ts +2 -0
  374. package/plugins/index.js +25 -1
  375. package/plugins/index.js.map +1 -1
  376. package/storage/default.js +3 -1
  377. package/storage/default.js.map +1 -1
  378. package/storage/index.d.ts +1 -0
  379. package/storage/index.js +15 -0
  380. package/storage/index.js.map +1 -0
  381. package/storage/json.d.ts +2 -0
  382. package/storage/json.js +27 -0
  383. package/storage/json.js.map +1 -0
  384. package/storage/object.js +8 -8
  385. package/storage/object.js.map +1 -1
  386. package/types.d.ts +510 -334
  387. package/types.js +21 -21
  388. package/types.js.map +1 -1
  389. package/utils/access.d.ts +9 -8
  390. package/utils/access.js +12 -62
  391. package/utils/access.js.map +1 -1
  392. package/utils/caching/Cache.d.ts +2 -0
  393. package/utils/caching/Cache.js +51 -0
  394. package/utils/caching/Cache.js.map +1 -0
  395. package/utils/caching/CacheKey.d.ts +2 -0
  396. package/utils/caching/CacheKey.js +40 -0
  397. package/utils/caching/CacheKey.js.map +1 -0
  398. package/utils/caching/index.d.ts +2 -0
  399. package/utils/caching/index.js +29 -0
  400. package/utils/caching/index.js.map +1 -0
  401. package/utils/caching/types.d.ts +11 -0
  402. package/utils/caching/types.js +7 -0
  403. package/utils/caching/types.js.map +1 -0
  404. package/utils/converters/Converter.js +4 -5
  405. package/utils/converters/Converter.js.map +1 -1
  406. package/utils/converters/ConverterCollection.js +13 -7
  407. package/utils/converters/ConverterCollection.js.map +1 -1
  408. package/utils/converters/valueKeyStorageConverter.d.ts +1 -5
  409. package/utils/converters/valueKeyStorageConverter.js +34 -21
  410. package/utils/converters/valueKeyStorageConverter.js.map +1 -1
  411. package/utils/createTypeFromFields.d.ts +1 -0
  412. package/utils/createTypeFromFields.js +14 -7
  413. package/utils/createTypeFromFields.js.map +1 -1
  414. package/utils/createTypeName.d.ts +0 -2
  415. package/utils/createTypeName.js +3 -9
  416. package/utils/createTypeName.js.map +1 -1
  417. package/utils/date.d.ts +10 -0
  418. package/utils/date.js +36 -0
  419. package/utils/date.js.map +1 -0
  420. package/utils/entryStorage.d.ts +4 -4
  421. package/utils/entryStorage.js +6 -4
  422. package/utils/entryStorage.js.map +1 -1
  423. package/utils/filterAsync.js +9 -8
  424. package/utils/filterAsync.js.map +1 -1
  425. package/utils/getBaseFieldType.d.ts +1 -3
  426. package/utils/getBaseFieldType.js +3 -1
  427. package/utils/getBaseFieldType.js.map +1 -1
  428. package/utils/getEntryDescription.d.ts +2 -0
  429. package/utils/getEntryDescription.js +19 -0
  430. package/utils/getEntryDescription.js.map +1 -0
  431. package/utils/getEntryImage.d.ts +2 -0
  432. package/utils/getEntryImage.js +19 -0
  433. package/utils/getEntryImage.js.map +1 -0
  434. package/utils/getEntryTitle.d.ts +1 -1
  435. package/utils/getEntryTitle.js +3 -1
  436. package/utils/getEntryTitle.js.map +1 -1
  437. package/utils/getSchemaFromFieldPlugins.d.ts +13 -2
  438. package/utils/getSchemaFromFieldPlugins.js +22 -4
  439. package/utils/getSchemaFromFieldPlugins.js.map +1 -1
  440. package/utils/identity.d.ts +2 -0
  441. package/utils/identity.js +20 -0
  442. package/utils/identity.js.map +1 -0
  443. package/utils/incrementEntryIdVersion.d.ts +5 -0
  444. package/utils/incrementEntryIdVersion.js +31 -0
  445. package/utils/incrementEntryIdVersion.js.map +1 -0
  446. package/utils/index.d.ts +1 -0
  447. package/utils/index.js +18 -0
  448. package/utils/index.js.map +1 -0
  449. package/utils/permissions/EntriesPermissions.d.ts +4 -0
  450. package/utils/permissions/EntriesPermissions.js +11 -0
  451. package/utils/permissions/EntriesPermissions.js.map +1 -0
  452. package/utils/permissions/ModelGroupsPermissions.d.ts +9 -0
  453. package/utils/permissions/ModelGroupsPermissions.js +50 -0
  454. package/utils/permissions/ModelGroupsPermissions.js.map +1 -0
  455. package/utils/permissions/ModelsPermissions.d.ts +22 -0
  456. package/utils/permissions/ModelsPermissions.js +90 -0
  457. package/utils/permissions/ModelsPermissions.js.map +1 -0
  458. package/utils/renderFields.d.ts +4 -2
  459. package/utils/renderFields.js +13 -3
  460. package/utils/renderFields.js.map +1 -1
  461. package/utils/renderGetFilterFields.d.ts +2 -2
  462. package/utils/renderGetFilterFields.js +9 -21
  463. package/utils/renderGetFilterFields.js.map +1 -1
  464. package/utils/renderInputFields.d.ts +4 -2
  465. package/utils/renderInputFields.js +20 -6
  466. package/utils/renderInputFields.js.map +1 -1
  467. package/utils/renderListFilterFields.d.ts +3 -1
  468. package/utils/renderListFilterFields.js +25 -22
  469. package/utils/renderListFilterFields.js.map +1 -1
  470. package/utils/renderSortEnum.d.ts +3 -2
  471. package/utils/renderSortEnum.js +10 -3
  472. package/utils/renderSortEnum.js.map +1 -1
  473. package/utils/toSlug.js +3 -1
  474. package/utils/toSlug.js.map +1 -1
  475. package/validators/dateGte.js +3 -1
  476. package/validators/dateGte.js.map +1 -1
  477. package/validators/dateLte.js +3 -1
  478. package/validators/dateLte.js.map +1 -1
  479. package/validators/gte.js +4 -3
  480. package/validators/gte.js.map +1 -1
  481. package/validators/in.js +4 -3
  482. package/validators/in.js.map +1 -1
  483. package/validators/index.js +4 -3
  484. package/validators/index.js.map +1 -1
  485. package/validators/lte.js +4 -3
  486. package/validators/lte.js.map +1 -1
  487. package/validators/maxLength.js +4 -3
  488. package/validators/maxLength.js.map +1 -1
  489. package/validators/minLength.js +4 -3
  490. package/validators/minLength.js.map +1 -1
  491. package/validators/pattern.js +5 -3
  492. package/validators/pattern.js.map +1 -1
  493. package/validators/patternPlugins/email.js +3 -1
  494. package/validators/patternPlugins/email.js.map +1 -1
  495. package/validators/patternPlugins/index.js +3 -1
  496. package/validators/patternPlugins/index.js.map +1 -1
  497. package/validators/patternPlugins/lowerCase.js +3 -1
  498. package/validators/patternPlugins/lowerCase.js.map +1 -1
  499. package/validators/patternPlugins/lowerCaseSpace.js +3 -1
  500. package/validators/patternPlugins/lowerCaseSpace.js.map +1 -1
  501. package/validators/patternPlugins/upperCase.js +3 -1
  502. package/validators/patternPlugins/upperCase.js.map +1 -1
  503. package/validators/patternPlugins/upperCaseSpace.js +3 -1
  504. package/validators/patternPlugins/upperCaseSpace.js.map +1 -1
  505. package/validators/patternPlugins/url.js +3 -1
  506. package/validators/patternPlugins/url.js.map +1 -1
  507. package/validators/required.js +3 -1
  508. package/validators/required.js.map +1 -1
  509. package/validators/timeGte.js +4 -3
  510. package/validators/timeGte.js.map +1 -1
  511. package/validators/timeLte.js +4 -3
  512. package/validators/timeLte.js.map +1 -1
  513. package/validators/unique.js +4 -2
  514. package/validators/unique.js.map +1 -1
  515. package/crud/contentModel/afterCreate.d.ts +0 -8
  516. package/crud/contentModel/afterCreate.js +0 -16
  517. package/crud/contentModel/afterCreate.js.map +0 -1
  518. package/crud/contentModel/afterCreateFrom.d.ts +0 -8
  519. package/crud/contentModel/afterCreateFrom.js +0 -16
  520. package/crud/contentModel/afterCreateFrom.js.map +0 -1
  521. package/crud/contentModel/afterDelete.d.ts +0 -8
  522. package/crud/contentModel/afterDelete.js +0 -16
  523. package/crud/contentModel/afterDelete.js.map +0 -1
  524. package/crud/contentModel/afterUpdate.d.ts +0 -8
  525. package/crud/contentModel/afterUpdate.js +0 -16
  526. package/crud/contentModel/afterUpdate.js.map +0 -1
  527. package/crud/contentModel/createFieldModels.d.ts +0 -2
  528. package/crud/contentModel/createFieldModels.js +0 -26
  529. package/crud/contentModel/createFieldModels.js.map +0 -1
  530. package/crud/contentModel/fieldIdValidation.d.ts +0 -1
  531. package/crud/contentModel/fieldIdValidation.js +0 -25
  532. package/crud/contentModel/fieldIdValidation.js.map +0 -1
  533. package/crud/contentModel/idValidation.d.ts +0 -1
  534. package/crud/contentModel/idValidation.js +0 -22
  535. package/crud/contentModel/idValidation.js.map +0 -1
  536. package/crud/contentModel/models.d.ts +0 -4
  537. package/crud/contentModel/models.js +0 -192
  538. package/crud/contentModel/models.js.map +0 -1
  539. package/crud/contentModel/systemFields.d.ts +0 -1
  540. package/crud/contentModel/systemFields.js +0 -8
  541. package/crud/contentModel/systemFields.js.map +0 -1
  542. package/crud/contentModel/validateLayout.d.ts +0 -2
  543. package/crud/contentModel/validateLayout.js +0 -28
  544. package/crud/contentModel/validateLayout.js.map +0 -1
  545. package/crud/settings.crud.d.ts +0 -10
  546. package/crud/settings.crud.js +0 -71
  547. package/crud/settings.crud.js.map +0 -1
  548. package/graphql/schema/resolvers/commonFieldResolvers.d.ts +0 -6
  549. package/graphql/schema/resolvers/commonFieldResolvers.js +0 -12
  550. package/graphql/schema/resolvers/commonFieldResolvers.js.map +0 -1
  551. package/upgrades/5.33.0/index.d.ts +0 -3
  552. package/upgrades/5.33.0/index.js +0 -159
  553. package/upgrades/5.33.0/index.js.map +0 -1
  554. package/upgrades/index.d.ts +0 -1
  555. package/upgrades/index.js +0 -9
  556. package/upgrades/index.js.map +0 -1
  557. package/utils/ownership.d.ts +0 -8
  558. package/utils/ownership.js +0 -33
  559. package/utils/ownership.js.map +0 -1
  560. package/utils/permissions.d.ts +0 -7
  561. package/utils/permissions.js +0 -91
  562. package/utils/permissions.js.map +0 -1
  563. package/utils/pluralizedTypeName.d.ts +0 -1
  564. package/utils/pluralizedTypeName.js +0 -20
  565. package/utils/pluralizedTypeName.js.map +0 -1
  566. package/validators/dynamicZone.d.ts +0 -2
  567. package/validators/dynamicZone.js +0 -20
  568. package/validators/dynamicZone.js.map +0 -1
@@ -5,7 +5,6 @@ Object.defineProperty(exports, "__esModule", {
5
5
  value: true
6
6
  });
7
7
  exports.markUnlockedFields = exports.markLockedFields = void 0;
8
- var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
9
8
  var _error = _interopRequireDefault(require("@webiny/error"));
10
9
  var _CmsModelPlugin = require("../../plugins/CmsModelPlugin");
11
10
  var _getBaseFieldType = require("../../utils/getBaseFieldType");
@@ -39,13 +38,17 @@ const markLockedFields = async params => {
39
38
  const data = plugin.getLockedFieldData({
40
39
  field
41
40
  });
42
- lockedFieldData = (0, _objectSpread2.default)((0, _objectSpread2.default)({}, lockedFieldData), data);
41
+ lockedFieldData = {
42
+ ...lockedFieldData,
43
+ ...data
44
+ };
43
45
  }
44
- lockedFields.push((0, _objectSpread2.default)({
46
+ lockedFields.push({
45
47
  fieldId: field.storageId,
46
48
  multipleValues: !!field.multipleValues,
47
- type: baseType
48
- }, lockedFieldData));
49
+ type: baseType,
50
+ ...lockedFieldData
51
+ });
49
52
  }
50
53
  // no need to update anything if no locked fields were added
51
54
  if (lockedFields.length === 0) {
@@ -54,10 +57,14 @@ const markLockedFields = async params => {
54
57
  const newLockedFields = existingLockedFields.concat(lockedFields);
55
58
  try {
56
59
  await context.cms.updateModelDirect({
60
+ /**
61
+ * At this point we know this is a CmsModel, so it is safe to cast.
62
+ */
57
63
  original: model,
58
- model: (0, _objectSpread2.default)((0, _objectSpread2.default)({}, model), {}, {
64
+ model: {
65
+ ...model,
59
66
  lockedFields: newLockedFields
60
- })
67
+ }
61
68
  });
62
69
  model.lockedFields = newLockedFields;
63
70
  } catch (ex) {
@@ -84,9 +91,10 @@ const markUnlockedFields = async params => {
84
91
  try {
85
92
  await context.cms.updateModelDirect({
86
93
  original: model,
87
- model: (0, _objectSpread2.default)((0, _objectSpread2.default)({}, model), {}, {
94
+ model: {
95
+ ...model,
88
96
  lockedFields: []
89
- })
97
+ }
90
98
  });
91
99
  model.lockedFields = [];
92
100
  } catch (ex) {
@@ -97,4 +105,6 @@ const markUnlockedFields = async params => {
97
105
  });
98
106
  }
99
107
  };
100
- exports.markUnlockedFields = markUnlockedFields;
108
+ exports.markUnlockedFields = markUnlockedFields;
109
+
110
+ //# sourceMappingURL=markLockedFields.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["markLockedFields","params","model","context","plugins","byType","CmsModelPlugin","type","find","plugin","contentModel","modelId","cmsLockedFieldPlugins","existingLockedFields","lockedFields","field","fields","baseType","getBaseFieldType","alreadyLocked","some","lockedField","fieldId","storageId","lockedFieldData","lockedFieldPlugins","filter","pl","fieldType","getLockedFieldData","data","push","multipleValues","length","newLockedFields","concat","cms","updateModelDirect","original","ex","WebinyError","message","code","markUnlockedFields"],"sources":["markLockedFields.ts"],"sourcesContent":["import WebinyError from \"@webiny/error\";\nimport { CmsEntry, CmsModel, CmsContext, CmsModelLockedFieldPlugin, LockedField } from \"~/types\";\nimport { CmsModelPlugin } from \"~/plugins/CmsModelPlugin\";\nimport { getBaseFieldType } from \"~/utils/getBaseFieldType\";\n\ninterface MarkLockedFieldsParams {\n model: CmsModel;\n entry: CmsEntry;\n context: CmsContext;\n}\nexport const markLockedFields = async (params: MarkLockedFieldsParams): Promise<void> => {\n const { model, context } = params;\n /**\n * If the model is registered via a plugin, we don't need do process anything.\n */\n const plugins = context.plugins.byType<CmsModelPlugin>(CmsModelPlugin.type);\n if (plugins.find(plugin => plugin.contentModel.modelId === model.modelId)) {\n return;\n }\n\n const cmsLockedFieldPlugins =\n context.plugins.byType<CmsModelLockedFieldPlugin>(\"cms-model-locked-field\");\n\n const existingLockedFields = model.lockedFields || [];\n const lockedFields: LockedField[] = [];\n for (const field of model.fields) {\n const baseType = getBaseFieldType(field);\n const alreadyLocked = existingLockedFields.some(\n lockedField => lockedField.fieldId === field.storageId\n );\n if (alreadyLocked) {\n continue;\n }\n\n let lockedFieldData = {};\n\n const lockedFieldPlugins = cmsLockedFieldPlugins.filter(pl => pl.fieldType === baseType);\n for (const plugin of lockedFieldPlugins) {\n if (typeof plugin.getLockedFieldData !== \"function\") {\n continue;\n }\n const data = plugin.getLockedFieldData({\n field\n });\n lockedFieldData = { ...lockedFieldData, ...data };\n }\n\n lockedFields.push({\n fieldId: field.storageId,\n multipleValues: !!field.multipleValues,\n type: baseType,\n ...lockedFieldData\n });\n }\n // no need to update anything if no locked fields were added\n if (lockedFields.length === 0) {\n return;\n }\n\n const newLockedFields = existingLockedFields.concat(lockedFields);\n\n try {\n await context.cms.updateModelDirect({\n original: model,\n model: {\n ...model,\n lockedFields: newLockedFields\n }\n });\n model.lockedFields = newLockedFields;\n } catch (ex) {\n throw new WebinyError(\n `Could not update model \"${model.modelId}\" with new locked fields.`,\n \"MODEL_LOCKED_FIELDS_UPDATE_FAILED\",\n {\n message: ex.message,\n code: ex.code,\n data: ex.data\n }\n );\n }\n};\n\nexport interface MarkFieldsUnlockedParams {\n context: CmsContext;\n model: CmsModel;\n}\nexport const markUnlockedFields = async (params: MarkFieldsUnlockedParams) => {\n const { context, model } = params;\n /**\n * If the model is registered via a plugin, we don't need do process anything.\n */\n const plugins = context.plugins.byType<CmsModelPlugin>(CmsModelPlugin.type);\n if (plugins.find(plugin => plugin.contentModel.modelId === model.modelId)) {\n return;\n }\n\n try {\n await context.cms.updateModelDirect({\n original: model,\n model: {\n ...model,\n lockedFields: []\n }\n });\n model.lockedFields = [];\n } catch (ex) {\n throw new WebinyError(\n `Could not update model \"${model.modelId}\" with unlocked fields.`,\n \"MODEL_UNLOCKED_FIELDS_UPDATE_FAILED\",\n {\n message: ex.message,\n code: ex.code,\n data: ex.data\n }\n );\n }\n};\n"],"mappings":";;;;;;;;AAAA;AAEA;AACA;AAOO,MAAMA,gBAAgB,GAAG,MAAOC,MAA8B,IAAoB;EACrF,MAAM;IAAEC,KAAK;IAAEC;EAAQ,CAAC,GAAGF,MAAM;EACjC;AACJ;AACA;EACI,MAAMG,OAAO,GAAGD,OAAO,CAACC,OAAO,CAACC,MAAM,CAAiBC,8BAAc,CAACC,IAAI,CAAC;EAC3E,IAAIH,OAAO,CAACI,IAAI,CAACC,MAAM,IAAIA,MAAM,CAACC,YAAY,CAACC,OAAO,KAAKT,KAAK,CAACS,OAAO,CAAC,EAAE;IACvE;EACJ;EAEA,MAAMC,qBAAqB,GACvBT,OAAO,CAACC,OAAO,CAACC,MAAM,CAA4B,wBAAwB,CAAC;EAE/E,MAAMQ,oBAAoB,GAAGX,KAAK,CAACY,YAAY,IAAI,EAAE;EACrD,MAAMA,YAA2B,GAAG,EAAE;EACtC,KAAK,MAAMC,KAAK,IAAIb,KAAK,CAACc,MAAM,EAAE;IAC9B,MAAMC,QAAQ,GAAG,IAAAC,kCAAgB,EAACH,KAAK,CAAC;IACxC,MAAMI,aAAa,GAAGN,oBAAoB,CAACO,IAAI,CAC3CC,WAAW,IAAIA,WAAW,CAACC,OAAO,KAAKP,KAAK,CAACQ,SAAS,CACzD;IACD,IAAIJ,aAAa,EAAE;MACf;IACJ;IAEA,IAAIK,eAAe,GAAG,CAAC,CAAC;IAExB,MAAMC,kBAAkB,GAAGb,qBAAqB,CAACc,MAAM,CAACC,EAAE,IAAIA,EAAE,CAACC,SAAS,KAAKX,QAAQ,CAAC;IACxF,KAAK,MAAMR,MAAM,IAAIgB,kBAAkB,EAAE;MACrC,IAAI,OAAOhB,MAAM,CAACoB,kBAAkB,KAAK,UAAU,EAAE;QACjD;MACJ;MACA,MAAMC,IAAI,GAAGrB,MAAM,CAACoB,kBAAkB,CAAC;QACnCd;MACJ,CAAC,CAAC;MACFS,eAAe,+DAAQA,eAAe,GAAKM,IAAI,CAAE;IACrD;IAEAhB,YAAY,CAACiB,IAAI;MACbT,OAAO,EAAEP,KAAK,CAACQ,SAAS;MACxBS,cAAc,EAAE,CAAC,CAACjB,KAAK,CAACiB,cAAc;MACtCzB,IAAI,EAAEU;IAAQ,GACXO,eAAe,EACpB;EACN;EACA;EACA,IAAIV,YAAY,CAACmB,MAAM,KAAK,CAAC,EAAE;IAC3B;EACJ;EAEA,MAAMC,eAAe,GAAGrB,oBAAoB,CAACsB,MAAM,CAACrB,YAAY,CAAC;EAEjE,IAAI;IACA,MAAMX,OAAO,CAACiC,GAAG,CAACC,iBAAiB,CAAC;MAChCC,QAAQ,EAAEpC,KAAK;MACfA,KAAK,8DACEA,KAAK;QACRY,YAAY,EAAEoB;MAAe;IAErC,CAAC,CAAC;IACFhC,KAAK,CAACY,YAAY,GAAGoB,eAAe;EACxC,CAAC,CAAC,OAAOK,EAAE,EAAE;IACT,MAAM,IAAIC,cAAW,CAChB,2BAA0BtC,KAAK,CAACS,OAAQ,2BAA0B,EACnE,mCAAmC,EACnC;MACI8B,OAAO,EAAEF,EAAE,CAACE,OAAO;MACnBC,IAAI,EAAEH,EAAE,CAACG,IAAI;MACbZ,IAAI,EAAES,EAAE,CAACT;IACb,CAAC,CACJ;EACL;AACJ,CAAC;AAAC;AAMK,MAAMa,kBAAkB,GAAG,MAAO1C,MAAgC,IAAK;EAC1E,MAAM;IAAEE,OAAO;IAAED;EAAM,CAAC,GAAGD,MAAM;EACjC;AACJ;AACA;EACI,MAAMG,OAAO,GAAGD,OAAO,CAACC,OAAO,CAACC,MAAM,CAAiBC,8BAAc,CAACC,IAAI,CAAC;EAC3E,IAAIH,OAAO,CAACI,IAAI,CAACC,MAAM,IAAIA,MAAM,CAACC,YAAY,CAACC,OAAO,KAAKT,KAAK,CAACS,OAAO,CAAC,EAAE;IACvE;EACJ;EAEA,IAAI;IACA,MAAMR,OAAO,CAACiC,GAAG,CAACC,iBAAiB,CAAC;MAChCC,QAAQ,EAAEpC,KAAK;MACfA,KAAK,8DACEA,KAAK;QACRY,YAAY,EAAE;MAAE;IAExB,CAAC,CAAC;IACFZ,KAAK,CAACY,YAAY,GAAG,EAAE;EAC3B,CAAC,CAAC,OAAOyB,EAAE,EAAE;IACT,MAAM,IAAIC,cAAW,CAChB,2BAA0BtC,KAAK,CAACS,OAAQ,yBAAwB,EACjE,qCAAqC,EACrC;MACI8B,OAAO,EAAEF,EAAE,CAACE,OAAO;MACnBC,IAAI,EAAEH,EAAE,CAACG,IAAI;MACbZ,IAAI,EAAES,EAAE,CAACT;IACb,CAAC,CACJ;EACL;AACJ,CAAC;AAAC"}
1
+ {"version":3,"names":["_error","_interopRequireDefault","require","_CmsModelPlugin","_getBaseFieldType","markLockedFields","params","model","context","plugins","byType","CmsModelPlugin","type","find","plugin","contentModel","modelId","cmsLockedFieldPlugins","existingLockedFields","lockedFields","field","fields","baseType","getBaseFieldType","alreadyLocked","some","lockedField","fieldId","storageId","lockedFieldData","lockedFieldPlugins","filter","pl","fieldType","getLockedFieldData","data","push","multipleValues","length","newLockedFields","concat","cms","updateModelDirect","original","ex","WebinyError","message","code","exports","markUnlockedFields"],"sources":["markLockedFields.ts"],"sourcesContent":["import WebinyError from \"@webiny/error\";\nimport { CmsEntry, CmsContext, CmsModelLockedFieldPlugin, LockedField, CmsModel } from \"~/types\";\nimport { CmsModelPlugin } from \"~/plugins/CmsModelPlugin\";\nimport { getBaseFieldType } from \"~/utils/getBaseFieldType\";\n\ninterface MarkLockedFieldsParams {\n model: CmsModel;\n entry: CmsEntry;\n context: CmsContext;\n}\n\nexport const markLockedFields = async (params: MarkLockedFieldsParams): Promise<void> => {\n const { model, context } = params;\n /**\n * If the model is registered via a plugin, we don't need do process anything.\n */\n const plugins = context.plugins.byType<CmsModelPlugin>(CmsModelPlugin.type);\n if (plugins.find(plugin => plugin.contentModel.modelId === model.modelId)) {\n return;\n }\n\n const cmsLockedFieldPlugins =\n context.plugins.byType<CmsModelLockedFieldPlugin>(\"cms-model-locked-field\");\n\n const existingLockedFields = model.lockedFields || [];\n const lockedFields: LockedField[] = [];\n for (const field of model.fields) {\n const baseType = getBaseFieldType(field);\n const alreadyLocked = existingLockedFields.some(\n lockedField => lockedField.fieldId === field.storageId\n );\n if (alreadyLocked) {\n continue;\n }\n\n let lockedFieldData = {};\n\n const lockedFieldPlugins = cmsLockedFieldPlugins.filter(pl => pl.fieldType === baseType);\n for (const plugin of lockedFieldPlugins) {\n if (typeof plugin.getLockedFieldData !== \"function\") {\n continue;\n }\n const data = plugin.getLockedFieldData({\n field\n });\n lockedFieldData = { ...lockedFieldData, ...data };\n }\n\n lockedFields.push({\n fieldId: field.storageId,\n multipleValues: !!field.multipleValues,\n type: baseType,\n ...lockedFieldData\n });\n }\n // no need to update anything if no locked fields were added\n if (lockedFields.length === 0) {\n return;\n }\n\n const newLockedFields = existingLockedFields.concat(lockedFields);\n\n try {\n await context.cms.updateModelDirect({\n /**\n * At this point we know this is a CmsModel, so it is safe to cast.\n */\n original: model as CmsModel,\n model: {\n ...model,\n lockedFields: newLockedFields\n } as CmsModel\n });\n model.lockedFields = newLockedFields;\n } catch (ex) {\n throw new WebinyError(\n `Could not update model \"${model.modelId}\" with new locked fields.`,\n \"MODEL_LOCKED_FIELDS_UPDATE_FAILED\",\n {\n message: ex.message,\n code: ex.code,\n data: ex.data\n }\n );\n }\n};\n\nexport interface MarkFieldsUnlockedParams {\n context: CmsContext;\n model: CmsModel;\n}\n\nexport const markUnlockedFields = async (params: MarkFieldsUnlockedParams) => {\n const { context, model } = params;\n /**\n * If the model is registered via a plugin, we don't need do process anything.\n */\n const plugins = context.plugins.byType<CmsModelPlugin>(CmsModelPlugin.type);\n if (plugins.find(plugin => plugin.contentModel.modelId === model.modelId)) {\n return;\n }\n\n try {\n await context.cms.updateModelDirect({\n original: model as CmsModel,\n model: {\n ...model,\n lockedFields: []\n } as CmsModel\n });\n model.lockedFields = [];\n } catch (ex) {\n throw new WebinyError(\n `Could not update model \"${model.modelId}\" with unlocked fields.`,\n \"MODEL_UNLOCKED_FIELDS_UPDATE_FAILED\",\n {\n message: ex.message,\n code: ex.code,\n data: ex.data\n }\n );\n }\n};\n"],"mappings":"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"}
@@ -9,5 +9,11 @@ interface Params {
9
9
  input: Record<string, ReferenceObject | ReferenceObject[]>;
10
10
  validateEntries?: boolean;
11
11
  }
12
+ /**
13
+ * This function traverses the content entry input value, extracts all occurrences of the `ref` field,
14
+ * optionally verifies that those referenced entries exist (by loading them), and normalizes the `ref` value to
15
+ * always contain `{ id, modelId, entryId }`. `entryId` is important when data is being loaded via
16
+ * the `read` and `preview` endpoint.
17
+ */
12
18
  export declare const referenceFieldsMapping: (params: Params) => Promise<Record<string, any>>;
13
19
  export {};
@@ -5,7 +5,6 @@ Object.defineProperty(exports, "__esModule", {
5
5
  value: true
6
6
  });
7
7
  exports.referenceFieldsMapping = void 0;
8
- var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
9
8
  var _error = _interopRequireDefault(require("@webiny/error"));
10
9
  var _dotProp = _interopRequireDefault(require("dot-prop"));
11
10
  var _utils = require("@webiny/utils");
@@ -18,8 +17,7 @@ const buildReferenceFieldPaths = params => {
18
17
  } = params;
19
18
  const parentPaths = [...initialParentPaths];
20
19
  const isMultipleValues = Array.isArray(input);
21
- return fields.filter(field => ["object", "ref"].includes((0, _getBaseFieldType.getBaseFieldType)(field))).reduce((collection, field) => {
22
- var _field$settings2;
20
+ return fields.filter(field => ["object", "ref", "dynamicZone"].includes((0, _getBaseFieldType.getBaseFieldType)(field))).reduce((collection, field) => {
23
21
  /**
24
22
  * First we check the ref field
25
23
  */
@@ -28,7 +26,7 @@ const buildReferenceFieldPaths = params => {
28
26
  const parentPathsValue = parentPaths.length > 0 ? `${parentPaths.join(".")}.` : "";
29
27
  if (field.multipleValues) {
30
28
  const inputValue = _dotProp.default.get(input, `${field.fieldId}`, []);
31
- if (Array.isArray(inputValue) === false) {
29
+ if (!Array.isArray(inputValue)) {
32
30
  return collection;
33
31
  }
34
32
  for (const key in inputValue) {
@@ -47,6 +45,46 @@ const buildReferenceFieldPaths = params => {
47
45
  collection.push(`${parentPathsValue}${field.fieldId}`);
48
46
  return collection;
49
47
  }
48
+ if (baseType === "dynamicZone") {
49
+ const templates = field.settings?.templates || [];
50
+ if (field.multipleValues) {
51
+ const values = _dotProp.default.get(input, field.fieldId, []);
52
+ if (!Array.isArray(values)) {
53
+ return collection;
54
+ }
55
+ values.forEach((value, index) => {
56
+ const valueTemplate = Object.keys(value)[0];
57
+ const template = templates.find(tpl => tpl.gqlTypeName === valueTemplate);
58
+ if (!template) {
59
+ return;
60
+ }
61
+ const result = buildReferenceFieldPaths({
62
+ fields: template.fields,
63
+ input: value[valueTemplate],
64
+ parentPaths: parentPaths.concat([field.fieldId, String(index), template.gqlTypeName])
65
+ });
66
+ collection.push(...result);
67
+ });
68
+ return collection;
69
+ }
70
+ const value = _dotProp.default.get(input, field.fieldId, {});
71
+ if (!value) {
72
+ return collection;
73
+ }
74
+ const valueTemplate = Object.keys(value)[0];
75
+ const template = templates.find(tpl => tpl.gqlTypeName === valueTemplate);
76
+ if (!template) {
77
+ return collection;
78
+ }
79
+ const result = buildReferenceFieldPaths({
80
+ fields: template.fields,
81
+ input: _dotProp.default.get(value, valueTemplate, {}),
82
+ parentPaths: parentPaths.concat([field.fieldId, template.gqlTypeName])
83
+ });
84
+ collection.push(...result);
85
+ return collection;
86
+ }
87
+
50
88
  /**
51
89
  * Then we move onto the object field
52
90
  */
@@ -72,9 +110,8 @@ const buildReferenceFieldPaths = params => {
72
110
  return collection;
73
111
  }
74
112
  for (const key in objFieldInputValue) {
75
- var _field$settings;
76
113
  const result = buildReferenceFieldPaths({
77
- fields: ((_field$settings = field.settings) === null || _field$settings === void 0 ? void 0 : _field$settings.fields) || [],
114
+ fields: field.settings?.fields || [],
78
115
  input: objFieldInputValue[key],
79
116
  parentPaths: parentPaths.concat([field.fieldId, key])
80
117
  });
@@ -87,7 +124,7 @@ const buildReferenceFieldPaths = params => {
87
124
  * Single value reference field.
88
125
  */
89
126
  const results = buildReferenceFieldPaths({
90
- fields: ((_field$settings2 = field.settings) === null || _field$settings2 === void 0 ? void 0 : _field$settings2.fields) || [],
127
+ fields: field.settings?.fields || [],
91
128
  input: objFieldInputValue,
92
129
  parentPaths: parentPaths.concat([field.fieldId])
93
130
  });
@@ -106,6 +143,13 @@ const getReferenceFieldValue = ref => {
106
143
  modelId: (ref.modelId || "").trim() || null
107
144
  };
108
145
  };
146
+
147
+ /**
148
+ * This function traverses the content entry input value, extracts all occurrences of the `ref` field,
149
+ * optionally verifies that those referenced entries exist (by loading them), and normalizes the `ref` value to
150
+ * always contain `{ id, modelId, entryId }`. `entryId` is important when data is being loaded via
151
+ * the `read` and `preview` endpoint.
152
+ */
109
153
  const referenceFieldsMapping = async params => {
110
154
  const {
111
155
  context,
@@ -113,17 +157,68 @@ const referenceFieldsMapping = async params => {
113
157
  input,
114
158
  validateEntries = false
115
159
  } = params;
116
- let output = (0, _objectSpread2.default)({}, input);
160
+ let output = {
161
+ ...input
162
+ };
117
163
  const referenceFieldPaths = buildReferenceFieldPaths({
118
164
  fields: model.fields,
119
165
  input,
120
166
  parentPaths: []
121
167
  });
122
- if (referenceFieldPaths.length === 0) {
168
+ if (!referenceFieldPaths.length) {
123
169
  return output;
124
170
  }
125
- const referencesByModel = {};
126
- const pathsByReferenceId = {};
171
+ if (validateEntries) {
172
+ await validateReferencedEntries({
173
+ output,
174
+ context,
175
+ referenceFieldPaths
176
+ });
177
+ }
178
+
179
+ /**
180
+ * Assign the entryId, id and model values to the output.
181
+ */
182
+ for (const path of referenceFieldPaths) {
183
+ // It is safe to cast here, because `referenceFieldPaths` array is generated from the `input`.
184
+ const refValue = _dotProp.default.get(input, path);
185
+ if (!refValue) {
186
+ continue;
187
+ }
188
+
189
+ /**
190
+ * Over time, the structure of `RefInput` was changing, and we need to handle different cases for backwards
191
+ * compatibility. The latest valid structure of a `ref` field value is { id, modelId }, but we also need
192
+ * to make sure that the legacy structure { entryId, modelId } is supported.
193
+ */
194
+ const {
195
+ id,
196
+ modelId,
197
+ entryId: maybeEntryId
198
+ } = refValue;
199
+ const {
200
+ id: entryId
201
+ } = (0, _utils.parseIdentifier)(maybeEntryId || id);
202
+ output = _dotProp.default.set(output, path, {
203
+ // If `id` is not set, we're dealing with the legacy structure.
204
+ id: id ?? maybeEntryId,
205
+ entryId,
206
+ modelId
207
+ });
208
+ }
209
+ return output;
210
+ };
211
+ exports.referenceFieldsMapping = referenceFieldsMapping;
212
+ async function validateReferencedEntries({
213
+ output,
214
+ context,
215
+ referenceFieldPaths
216
+ }) {
217
+ const referencesByModel = new Map();
218
+
219
+ /**
220
+ * Group references by modelId.
221
+ */
127
222
  for (const path of referenceFieldPaths) {
128
223
  const ref = _dotProp.default.get(output, path);
129
224
  const {
@@ -133,104 +228,61 @@ const referenceFieldsMapping = async params => {
133
228
  if (!id || !modelId) {
134
229
  continue;
135
230
  }
136
- if (!referencesByModel[modelId]) {
137
- referencesByModel[modelId] = [];
231
+ if (!referencesByModel.has(modelId)) {
232
+ referencesByModel.set(modelId, []);
138
233
  }
139
- referencesByModel[modelId].push(id);
140
- if (!pathsByReferenceId[id]) {
141
- pathsByReferenceId[id] = [];
142
- }
143
- pathsByReferenceId[id].push(path);
234
+ referencesByModel.get(modelId)?.push(id);
144
235
  }
145
-
146
- /**
147
- * Again, no point in going further.
148
- */
149
- if (Object.keys(referencesByModel).length === 0) {
150
- return output;
236
+ if (!referencesByModel.size) {
237
+ return;
151
238
  }
239
+
152
240
  /**
153
241
  * Load all models and use only those that are used in reference.
154
242
  */
155
- const models = (await context.cms.listModels()).filter(model => {
156
- const entries = referencesByModel[model.modelId];
157
- if (!Array.isArray(entries) || entries.length === 0) {
158
- return false;
159
- }
160
- return true;
243
+ const models = await context.security.withoutAuthorization(async () => {
244
+ return (await context.cms.listModels()).filter(model => {
245
+ const entries = referencesByModel.get(model.modelId);
246
+ if (!Array.isArray(entries) || entries.length === 0) {
247
+ return false;
248
+ }
249
+ return true;
250
+ });
161
251
  });
162
- /**
163
- * Check for any model existence, just in case.
164
- */
165
- if (models.length === 0) {
166
- return output;
252
+ if (!models.length) {
253
+ return;
167
254
  }
168
255
 
169
256
  /**
170
- * Load all the entries by their ID
257
+ * Load all the entries by their IDs.
171
258
  */
172
- const promises = models.map(model => {
173
- return context.cms.getEntriesByIds(model, referencesByModel[model.modelId]);
259
+ const promises = await context.security.withoutAuthorization(async () => {
260
+ return models.map(model => {
261
+ return context.cms.getEntriesByIds(model, referencesByModel.get(model.modelId) || []);
262
+ });
174
263
  });
175
- const results = await Promise.all(promises);
176
- const records = results.reduce((collection, entries) => {
177
- for (const entry of entries) {
178
- collection[entry.id] = {
179
- id: entry.id,
180
- entryId: entry.entryId,
181
- modelId: entry.modelId
182
- };
183
- }
184
- return collection;
264
+ const allEntries = await Promise.all(promises).then(res => res.flat());
265
+ const entriesByModel = allEntries.reduce((acc, entry) => {
266
+ return {
267
+ ...acc,
268
+ [entry.modelId]: [...(acc[entry.modelId] || []), entry.id]
269
+ };
185
270
  }, {});
271
+
186
272
  /**
187
- * Verify that all referenced entries actually exist.
273
+ * Verify that all entries exist.
188
274
  */
189
- for (const modelId in referencesByModel) {
190
- const entries = referencesByModel[modelId];
191
- for (const id of entries) {
192
- if (records[id]) {
193
- continue;
194
- } else if (validateEntries) {
275
+ referencesByModel.forEach((ids, modelId) => {
276
+ const modelEntriesInDb = entriesByModel[modelId];
277
+ for (const id of ids) {
278
+ if (!modelEntriesInDb.includes(id)) {
195
279
  throw new _error.default(`Missing referenced entry with id "${id}" in model "${modelId}".`, "ENTRY_NOT_FOUND", {
196
280
  id,
197
281
  model: modelId
198
282
  });
199
283
  }
200
- const {
201
- id: entryId
202
- } = (0, _utils.parseIdentifier)(id);
203
- records[id] = {
204
- id,
205
- entryId,
206
- modelId
207
- };
208
284
  }
209
- }
285
+ });
286
+ }
210
287
 
211
- /**
212
- * In the end, assign the entryId, id and model values to the output.
213
- */
214
- for (const id in pathsByReferenceId) {
215
- const entry = records[id];
216
- const paths = pathsByReferenceId[id];
217
- if (!entry) {
218
- if (validateEntries) {
219
- throw new _error.default("Missing entry in records.", "ENTRY_ERROR", {
220
- id,
221
- paths
222
- });
223
- }
224
- continue;
225
- }
226
- for (const path of paths) {
227
- output = _dotProp.default.set(output, path, {
228
- id: entry.id,
229
- entryId: entry.entryId,
230
- modelId: entry.modelId
231
- });
232
- }
233
- }
234
- return output;
235
- };
236
- exports.referenceFieldsMapping = referenceFieldsMapping;
288
+ //# sourceMappingURL=referenceFieldsMapping.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["buildReferenceFieldPaths","params","fields","parentPaths","initialParentPaths","input","isMultipleValues","Array","isArray","filter","field","includes","getBaseFieldType","reduce","collection","baseType","parentPathsValue","length","join","multipleValues","inputValue","dotProp","get","fieldId","key","path","push","objFieldPath","objFieldInputValue","result","settings","concat","results","getReferenceFieldValue","ref","id","modelId","entryId","trim","referenceFieldsMapping","context","model","validateEntries","output","referenceFieldPaths","referencesByModel","pathsByReferenceId","Object","keys","models","cms","listModels","entries","promises","map","getEntriesByIds","Promise","all","records","entry","WebinyError","parseIdentifier","paths","set"],"sources":["referenceFieldsMapping.ts"],"sourcesContent":["import { CmsContext, CmsModel, CmsModelField } from \"~/types\";\nimport WebinyError from \"@webiny/error\";\nimport dotProp from \"dot-prop\";\nimport { parseIdentifier } from \"@webiny/utils\";\nimport { getBaseFieldType } from \"~/utils/getBaseFieldType\";\n\ninterface CmsRefEntry {\n id: string;\n entryId: string;\n modelId: string;\n}\n\ninterface ReferenceObject {\n id: string;\n modelId: string;\n}\n\ninterface Params {\n context: CmsContext;\n model: CmsModel;\n input: Record<string, ReferenceObject | ReferenceObject[]>;\n validateEntries?: boolean;\n}\n\ninterface BuildReferenceFieldPaths {\n fields: CmsModelField[];\n parentPaths: string[];\n input: Record<string, any>;\n}\n\nconst buildReferenceFieldPaths = (params: BuildReferenceFieldPaths): string[] => {\n const { fields, parentPaths: initialParentPaths, input } = params;\n\n const parentPaths = [...initialParentPaths];\n\n const isMultipleValues = Array.isArray(input);\n\n return fields\n .filter(field => [\"object\", \"ref\"].includes(getBaseFieldType(field)))\n .reduce((collection, field) => {\n /**\n * First we check the ref field\n */\n const baseType = getBaseFieldType(field);\n if (baseType === \"ref\") {\n const parentPathsValue = parentPaths.length > 0 ? `${parentPaths.join(\".\")}.` : \"\";\n if (field.multipleValues) {\n const inputValue = dotProp.get(input, `${field.fieldId}`, []);\n if (Array.isArray(inputValue) === false) {\n return collection;\n }\n for (const key in inputValue) {\n const path = `${parentPathsValue}${field.fieldId}.${key}`;\n collection.push(path);\n }\n return collection;\n }\n\n if (isMultipleValues) {\n for (const key in input) {\n const path = `${parentPathsValue}${key}.${field.fieldId}`;\n collection.push(path);\n }\n return collection;\n }\n\n collection.push(`${parentPathsValue}${field.fieldId}`);\n\n return collection;\n }\n /**\n * Then we move onto the object field\n */\n const parentPathsValue = parentPaths.length > 0 ? `${parentPaths.join(\".\")}.` : \"\";\n /**\n * This is if received input is array. We need to map key with fieldId at this point.\n */\n if (isMultipleValues) {\n for (const key in input) {\n const path = `${parentPathsValue}${key}.${field.fieldId}`;\n collection.push(path);\n }\n return collection;\n }\n\n const objFieldPath = `${field.fieldId}`;\n const objFieldInputValue = dotProp.get(input, objFieldPath, []);\n\n /**\n * If field is multiple values one, we need to go through the input and use the existing keys.\n */\n if (field.multipleValues) {\n if (Array.isArray(objFieldInputValue) === false) {\n return collection;\n }\n for (const key in objFieldInputValue) {\n const result = buildReferenceFieldPaths({\n fields: field.settings?.fields || [],\n input: objFieldInputValue[key],\n parentPaths: parentPaths.concat([field.fieldId, key])\n });\n collection.push(...result);\n }\n\n return collection;\n }\n\n /**\n * Single value reference field.\n */\n const results = buildReferenceFieldPaths({\n fields: field.settings?.fields || [],\n input: objFieldInputValue,\n parentPaths: parentPaths.concat([field.fieldId])\n });\n\n return collection.concat(results);\n }, [] as string[]);\n};\n\nconst getReferenceFieldValue = (ref: any): { id: string | null; modelId: string | null } => {\n if (!ref) {\n return {\n id: null,\n modelId: null\n };\n }\n return {\n id: (ref.id || ref.entryId || \"\").trim() || null,\n modelId: (ref.modelId || \"\").trim() || null\n };\n};\n\nexport const referenceFieldsMapping = async (params: Params): Promise<Record<string, any>> => {\n const { context, model, input, validateEntries = false } = params;\n\n let output: Record<string, any> = {\n ...input\n };\n\n const referenceFieldPaths = buildReferenceFieldPaths({\n fields: model.fields,\n input,\n parentPaths: []\n });\n if (referenceFieldPaths.length === 0) {\n return output;\n }\n\n const referencesByModel: Record<string, string[]> = {};\n const pathsByReferenceId: Record<string, string[]> = {};\n\n for (const path of referenceFieldPaths) {\n const ref = dotProp.get(output, path) as ReferenceObject | any;\n\n const { id, modelId } = getReferenceFieldValue(ref);\n\n if (!id || !modelId) {\n continue;\n }\n if (!referencesByModel[modelId]) {\n referencesByModel[modelId] = [];\n }\n referencesByModel[modelId].push(id);\n if (!pathsByReferenceId[id]) {\n pathsByReferenceId[id] = [];\n }\n pathsByReferenceId[id].push(path);\n }\n\n /**\n * Again, no point in going further.\n */\n if (Object.keys(referencesByModel).length === 0) {\n return output;\n }\n /**\n * Load all models and use only those that are used in reference.\n */\n const models = (await context.cms.listModels()).filter(model => {\n const entries = referencesByModel[model.modelId];\n if (!Array.isArray(entries) || entries.length === 0) {\n return false;\n }\n return true;\n });\n /**\n * Check for any model existence, just in case.\n */\n if (models.length === 0) {\n return output;\n }\n\n /**\n * Load all the entries by their ID\n */\n const promises = models.map(model => {\n return context.cms.getEntriesByIds(model, referencesByModel[model.modelId]);\n });\n\n const results = await Promise.all(promises);\n\n const records: Record<string, CmsRefEntry> = results.reduce((collection, entries) => {\n for (const entry of entries) {\n collection[entry.id] = {\n id: entry.id,\n entryId: entry.entryId,\n modelId: entry.modelId\n };\n }\n return collection;\n }, {} as Record<string, CmsRefEntry>);\n /**\n * Verify that all referenced entries actually exist.\n */\n for (const modelId in referencesByModel) {\n const entries = referencesByModel[modelId];\n for (const id of entries) {\n if (records[id]) {\n continue;\n } else if (validateEntries) {\n throw new WebinyError(\n `Missing referenced entry with id \"${id}\" in model \"${modelId}\".`,\n \"ENTRY_NOT_FOUND\",\n {\n id,\n model: modelId\n }\n );\n }\n const { id: entryId } = parseIdentifier(id);\n records[id] = {\n id,\n entryId,\n modelId\n };\n }\n }\n\n /**\n * In the end, assign the entryId, id and model values to the output.\n */\n for (const id in pathsByReferenceId) {\n const entry = records[id];\n const paths = pathsByReferenceId[id];\n if (!entry) {\n if (validateEntries) {\n throw new WebinyError(\"Missing entry in records.\", \"ENTRY_ERROR\", {\n id,\n paths\n });\n }\n continue;\n }\n for (const path of paths) {\n output = dotProp.set(output, path, {\n id: entry.id,\n entryId: entry.entryId,\n modelId: entry.modelId\n });\n }\n }\n\n return output;\n};\n"],"mappings":"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"}
1
+ {"version":3,"names":["_error","_interopRequireDefault","require","_dotProp","_utils","_getBaseFieldType","buildReferenceFieldPaths","params","fields","parentPaths","initialParentPaths","input","isMultipleValues","Array","isArray","filter","field","includes","getBaseFieldType","reduce","collection","baseType","parentPathsValue","length","join","multipleValues","inputValue","dotProp","get","fieldId","key","path","push","templates","settings","values","forEach","value","index","valueTemplate","Object","keys","template","find","tpl","gqlTypeName","result","concat","String","objFieldPath","objFieldInputValue","results","getReferenceFieldValue","ref","id","modelId","entryId","trim","referenceFieldsMapping","context","model","validateEntries","output","referenceFieldPaths","validateReferencedEntries","refValue","maybeEntryId","parseIdentifier","set","exports","referencesByModel","Map","has","size","models","security","withoutAuthorization","cms","listModels","entries","promises","map","getEntriesByIds","allEntries","Promise","all","then","res","flat","entriesByModel","acc","entry","ids","modelEntriesInDb","WebinyError"],"sources":["referenceFieldsMapping.ts"],"sourcesContent":["import { CmsContext, CmsDynamicZoneTemplate, CmsModel, CmsModelField } from \"~/types\";\nimport WebinyError from \"@webiny/error\";\nimport dotProp from \"dot-prop\";\nimport { parseIdentifier } from \"@webiny/utils\";\nimport { getBaseFieldType } from \"~/utils/getBaseFieldType\";\n\ninterface CmsRefEntry {\n id: string;\n entryId: string;\n modelId: string;\n}\n\ntype RefValue = Pick<CmsRefEntry, \"id\" | \"modelId\"> & {\n entryId?: string;\n};\n\ninterface ReferenceObject {\n id: string;\n modelId: string;\n}\n\ninterface Params {\n context: CmsContext;\n model: CmsModel;\n input: Record<string, ReferenceObject | ReferenceObject[]>;\n validateEntries?: boolean;\n}\n\ninterface BuildReferenceFieldPaths {\n fields: CmsModelField[];\n parentPaths: string[];\n input: Record<string, any>;\n}\n\nconst buildReferenceFieldPaths = (params: BuildReferenceFieldPaths): string[] => {\n const { fields, parentPaths: initialParentPaths, input } = params;\n\n const parentPaths = [...initialParentPaths];\n\n const isMultipleValues = Array.isArray(input);\n\n return fields\n .filter(field => [\"object\", \"ref\", \"dynamicZone\"].includes(getBaseFieldType(field)))\n .reduce((collection, field) => {\n /**\n * First we check the ref field\n */\n const baseType = getBaseFieldType(field);\n if (baseType === \"ref\") {\n const parentPathsValue = parentPaths.length > 0 ? `${parentPaths.join(\".\")}.` : \"\";\n if (field.multipleValues) {\n const inputValue = dotProp.get(input, `${field.fieldId}`, []);\n if (!Array.isArray(inputValue)) {\n return collection;\n }\n\n for (const key in inputValue) {\n const path = `${parentPathsValue}${field.fieldId}.${key}`;\n collection.push(path);\n }\n return collection;\n }\n\n if (isMultipleValues) {\n for (const key in input) {\n const path = `${parentPathsValue}${key}.${field.fieldId}`;\n collection.push(path);\n }\n return collection;\n }\n\n collection.push(`${parentPathsValue}${field.fieldId}`);\n\n return collection;\n }\n\n if (baseType === \"dynamicZone\") {\n const templates: CmsDynamicZoneTemplate[] = field.settings?.templates || [];\n\n if (field.multipleValues) {\n const values = dotProp.get(input, field.fieldId, []);\n if (!Array.isArray(values)) {\n return collection;\n }\n\n values.forEach((value, index) => {\n const valueTemplate = Object.keys(value)[0];\n const template = templates.find(tpl => tpl.gqlTypeName === valueTemplate);\n if (!template) {\n return;\n }\n\n const result = buildReferenceFieldPaths({\n fields: template.fields,\n input: value[valueTemplate],\n parentPaths: parentPaths.concat([\n field.fieldId,\n String(index),\n template.gqlTypeName\n ])\n });\n\n collection.push(...result);\n });\n\n return collection;\n }\n\n const value = dotProp.get(input, field.fieldId, {});\n if (!value) {\n return collection;\n }\n\n const valueTemplate = Object.keys(value)[0];\n const template = templates.find(tpl => tpl.gqlTypeName === valueTemplate);\n\n if (!template) {\n return collection;\n }\n\n const result = buildReferenceFieldPaths({\n fields: template.fields,\n input: dotProp.get(value, valueTemplate, {}),\n parentPaths: parentPaths.concat([field.fieldId, template.gqlTypeName])\n });\n collection.push(...result);\n\n return collection;\n }\n\n /**\n * Then we move onto the object field\n */\n const parentPathsValue = parentPaths.length > 0 ? `${parentPaths.join(\".\")}.` : \"\";\n /**\n * This is if received input is array. We need to map key with fieldId at this point.\n */\n if (isMultipleValues) {\n for (const key in input) {\n const path = `${parentPathsValue}${key}.${field.fieldId}`;\n collection.push(path);\n }\n return collection;\n }\n\n const objFieldPath = `${field.fieldId}`;\n const objFieldInputValue = dotProp.get(input, objFieldPath, []);\n\n /**\n * If field is multiple values one, we need to go through the input and use the existing keys.\n */\n if (field.multipleValues) {\n if (Array.isArray(objFieldInputValue) === false) {\n return collection;\n }\n for (const key in objFieldInputValue) {\n const result = buildReferenceFieldPaths({\n fields: field.settings?.fields || [],\n input: objFieldInputValue[key],\n parentPaths: parentPaths.concat([field.fieldId, key])\n });\n collection.push(...result);\n }\n\n return collection;\n }\n\n /**\n * Single value reference field.\n */\n const results = buildReferenceFieldPaths({\n fields: field.settings?.fields || [],\n input: objFieldInputValue,\n parentPaths: parentPaths.concat([field.fieldId])\n });\n\n return collection.concat(results);\n }, [] as string[]);\n};\n\nconst getReferenceFieldValue = (ref: any): { id: string | null; modelId: string | null } => {\n if (!ref) {\n return {\n id: null,\n modelId: null\n };\n }\n return {\n id: (ref.id || ref.entryId || \"\").trim() || null,\n modelId: (ref.modelId || \"\").trim() || null\n };\n};\n\n/**\n * This function traverses the content entry input value, extracts all occurrences of the `ref` field,\n * optionally verifies that those referenced entries exist (by loading them), and normalizes the `ref` value to\n * always contain `{ id, modelId, entryId }`. `entryId` is important when data is being loaded via\n * the `read` and `preview` endpoint.\n */\nexport const referenceFieldsMapping = async (params: Params): Promise<Record<string, any>> => {\n const { context, model, input, validateEntries = false } = params;\n\n let output: Record<string, any> = {\n ...input\n };\n\n const referenceFieldPaths = buildReferenceFieldPaths({\n fields: model.fields,\n input,\n parentPaths: []\n });\n\n if (!referenceFieldPaths.length) {\n return output;\n }\n\n if (validateEntries) {\n await validateReferencedEntries({ output, context, referenceFieldPaths });\n }\n\n /**\n * Assign the entryId, id and model values to the output.\n */\n for (const path of referenceFieldPaths) {\n // It is safe to cast here, because `referenceFieldPaths` array is generated from the `input`.\n const refValue: RefValue | undefined = dotProp.get(input, path);\n if (!refValue) {\n continue;\n }\n\n /**\n * Over time, the structure of `RefInput` was changing, and we need to handle different cases for backwards\n * compatibility. The latest valid structure of a `ref` field value is { id, modelId }, but we also need\n * to make sure that the legacy structure { entryId, modelId } is supported.\n */\n const { id, modelId, entryId: maybeEntryId } = refValue;\n\n const { id: entryId } = parseIdentifier(maybeEntryId || id);\n\n output = dotProp.set(output, path, {\n // If `id` is not set, we're dealing with the legacy structure.\n id: id ?? maybeEntryId,\n entryId,\n modelId\n });\n }\n\n return output;\n};\n\ninterface ValidateReferencedEntriesParams {\n output: Record<string, any>;\n context: CmsContext;\n referenceFieldPaths: string[];\n}\n\nasync function validateReferencedEntries({\n output,\n context,\n referenceFieldPaths\n}: ValidateReferencedEntriesParams) {\n const referencesByModel = new Map<string, string[]>();\n\n /**\n * Group references by modelId.\n */\n for (const path of referenceFieldPaths) {\n const ref = dotProp.get(output, path) as ReferenceObject | any;\n\n const { id, modelId } = getReferenceFieldValue(ref);\n\n if (!id || !modelId) {\n continue;\n }\n\n if (!referencesByModel.has(modelId)) {\n referencesByModel.set(modelId, []);\n }\n\n referencesByModel.get(modelId)?.push(id);\n }\n\n if (!referencesByModel.size) {\n return;\n }\n\n /**\n * Load all models and use only those that are used in reference.\n */\n const models = await context.security.withoutAuthorization(async () => {\n return (await context.cms.listModels()).filter(model => {\n const entries = referencesByModel.get(model.modelId);\n if (!Array.isArray(entries) || entries.length === 0) {\n return false;\n }\n return true;\n });\n });\n\n if (!models.length) {\n return;\n }\n\n /**\n * Load all the entries by their IDs.\n */\n const promises = await context.security.withoutAuthorization(async () => {\n return models.map(model => {\n return context.cms.getEntriesByIds(model, referencesByModel.get(model.modelId) || []);\n });\n });\n\n const allEntries = await Promise.all(promises).then(res => res.flat());\n const entriesByModel = allEntries.reduce<Record<string, string[]>>((acc, entry) => {\n return { ...acc, [entry.modelId]: [...(acc[entry.modelId] || []), entry.id] };\n }, {});\n\n /**\n * Verify that all entries exist.\n */\n referencesByModel.forEach((ids, modelId) => {\n const modelEntriesInDb = entriesByModel[modelId];\n for (const id of ids) {\n if (!modelEntriesInDb.includes(id)) {\n throw new WebinyError(\n `Missing referenced entry with id \"${id}\" in model \"${modelId}\".`,\n \"ENTRY_NOT_FOUND\",\n {\n id,\n model: modelId\n }\n );\n }\n }\n });\n}\n"],"mappings":"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"}
@@ -12,7 +12,6 @@ const buildSearchableFieldList = params => {
12
12
  parents
13
13
  } = params;
14
14
  return fields.reduce((result, field) => {
15
- var _field$settings;
16
15
  /**
17
16
  * We need to check if the field is full text searchable, and for that we need a plugin for the field type.
18
17
  */
@@ -23,7 +22,7 @@ const buildSearchableFieldList = params => {
23
22
  /**
24
23
  * There is a possibility that searchable fields exist in nested object field, so check that as well.
25
24
  */
26
- const childFields = ((_field$settings = field.settings) === null || _field$settings === void 0 ? void 0 : _field$settings.fields) || [];
25
+ const childFields = field.settings?.fields || [];
27
26
  if (childFields.length > 0) {
28
27
  /**
29
28
  * So we build a list of searchable child fields and push it into the main result set.
@@ -40,7 +39,7 @@ const buildSearchableFieldList = params => {
40
39
  /**
41
40
  * If not searchable, continue further.
42
41
  */
43
- if (!plugin.fullTextSearch) {
42
+ if (!plugin.fullTextSearch || field.settings?.disableFullTextSearch === true) {
44
43
  return result;
45
44
  }
46
45
 
@@ -69,4 +68,6 @@ const getSearchableFields = params => {
69
68
  parents: []
70
69
  });
71
70
  };
72
- exports.getSearchableFields = getSearchableFields;
71
+ exports.getSearchableFields = getSearchableFields;
72
+
73
+ //# sourceMappingURL=searchableFields.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["buildSearchableFieldList","params","input","plugins","fields","parents","reduce","result","field","plugin","type","childFields","settings","length","childResults","fieldId","push","fullTextSearch","path","join","getSearchableFields","fieldPluginMap","byType","collection","fieldType"],"sources":["searchableFields.ts"],"sourcesContent":["import { CmsModelField, CmsModelFieldToGraphQLPlugin } from \"~/types\";\nimport { PluginsContainer } from \"@webiny/plugins\";\n\ninterface BuildParams {\n input: string[];\n fields: CmsModelField[];\n plugins: Record<string, CmsModelFieldToGraphQLPlugin>;\n parents: string[];\n}\nconst buildSearchableFieldList = (params: BuildParams): string[] => {\n const { input, plugins, fields, parents } = params;\n return fields.reduce<string[]>((result, field) => {\n /**\n * We need to check if the field is full text searchable, and for that we need a plugin for the field type.\n */\n const plugin = plugins[field.type];\n if (!plugin) {\n return result;\n }\n /**\n * There is a possibility that searchable fields exist in nested object field, so check that as well.\n */\n const childFields = field.settings?.fields || [];\n if (childFields.length > 0) {\n /**\n * So we build a list of searchable child fields and push it into the main result set.\n */\n const childResults = buildSearchableFieldList({\n fields: childFields,\n parents: [...parents, field.fieldId],\n plugins,\n input\n });\n\n result.push(...childResults);\n return result;\n }\n /**\n * If not searchable, continue further.\n */\n if (!plugin.fullTextSearch) {\n return result;\n }\n\n /**\n * Combine all parent paths with the current one and push it.\n */\n const path = [...parents, field.fieldId].join(\".\");\n result.push(path);\n\n return result;\n }, []);\n};\n\ninterface Params {\n input: string[];\n fields: CmsModelField[];\n plugins: PluginsContainer;\n}\nexport const getSearchableFields = (params: Params): string[] => {\n const { plugins, input, fields } = params;\n const fieldPluginMap = plugins\n .byType<CmsModelFieldToGraphQLPlugin>(\"cms-model-field-to-graphql\")\n .reduce((collection, field) => {\n collection[field.fieldType] = field;\n return collection;\n }, {} as Record<string, CmsModelFieldToGraphQLPlugin>);\n\n return buildSearchableFieldList({\n fields,\n input,\n plugins: fieldPluginMap,\n parents: []\n });\n};\n"],"mappings":";;;;;;AASA,MAAMA,wBAAwB,GAAIC,MAAmB,IAAe;EAChE,MAAM;IAAEC,KAAK;IAAEC,OAAO;IAAEC,MAAM;IAAEC;EAAQ,CAAC,GAAGJ,MAAM;EAClD,OAAOG,MAAM,CAACE,MAAM,CAAW,CAACC,MAAM,EAAEC,KAAK,KAAK;IAAA;IAC9C;AACR;AACA;IACQ,MAAMC,MAAM,GAAGN,OAAO,CAACK,KAAK,CAACE,IAAI,CAAC;IAClC,IAAI,CAACD,MAAM,EAAE;MACT,OAAOF,MAAM;IACjB;IACA;AACR;AACA;IACQ,MAAMI,WAAW,GAAG,oBAAAH,KAAK,CAACI,QAAQ,oDAAd,gBAAgBR,MAAM,KAAI,EAAE;IAChD,IAAIO,WAAW,CAACE,MAAM,GAAG,CAAC,EAAE;MACxB;AACZ;AACA;MACY,MAAMC,YAAY,GAAGd,wBAAwB,CAAC;QAC1CI,MAAM,EAAEO,WAAW;QACnBN,OAAO,EAAE,CAAC,GAAGA,OAAO,EAAEG,KAAK,CAACO,OAAO,CAAC;QACpCZ,OAAO;QACPD;MACJ,CAAC,CAAC;MAEFK,MAAM,CAACS,IAAI,CAAC,GAAGF,YAAY,CAAC;MAC5B,OAAOP,MAAM;IACjB;IACA;AACR;AACA;IACQ,IAAI,CAACE,MAAM,CAACQ,cAAc,EAAE;MACxB,OAAOV,MAAM;IACjB;;IAEA;AACR;AACA;IACQ,MAAMW,IAAI,GAAG,CAAC,GAAGb,OAAO,EAAEG,KAAK,CAACO,OAAO,CAAC,CAACI,IAAI,CAAC,GAAG,CAAC;IAClDZ,MAAM,CAACS,IAAI,CAACE,IAAI,CAAC;IAEjB,OAAOX,MAAM;EACjB,CAAC,EAAE,EAAE,CAAC;AACV,CAAC;AAOM,MAAMa,mBAAmB,GAAInB,MAAc,IAAe;EAC7D,MAAM;IAAEE,OAAO;IAAED,KAAK;IAAEE;EAAO,CAAC,GAAGH,MAAM;EACzC,MAAMoB,cAAc,GAAGlB,OAAO,CACzBmB,MAAM,CAA+B,4BAA4B,CAAC,CAClEhB,MAAM,CAAC,CAACiB,UAAU,EAAEf,KAAK,KAAK;IAC3Be,UAAU,CAACf,KAAK,CAACgB,SAAS,CAAC,GAAGhB,KAAK;IACnC,OAAOe,UAAU;EACrB,CAAC,EAAE,CAAC,CAAC,CAAiD;EAE1D,OAAOvB,wBAAwB,CAAC;IAC5BI,MAAM;IACNF,KAAK;IACLC,OAAO,EAAEkB,cAAc;IACvBhB,OAAO,EAAE;EACb,CAAC,CAAC;AACN,CAAC;AAAC"}
1
+ {"version":3,"names":["buildSearchableFieldList","params","input","plugins","fields","parents","reduce","result","field","plugin","type","childFields","settings","length","childResults","fieldId","push","fullTextSearch","disableFullTextSearch","path","join","getSearchableFields","fieldPluginMap","byType","collection","fieldType","exports"],"sources":["searchableFields.ts"],"sourcesContent":["import { CmsModelField, CmsModelFieldToGraphQLPlugin } from \"~/types\";\nimport { PluginsContainer } from \"@webiny/plugins\";\n\ninterface BuildParams {\n input: string[];\n fields: CmsModelField[];\n plugins: Record<string, CmsModelFieldToGraphQLPlugin>;\n parents: string[];\n}\nconst buildSearchableFieldList = (params: BuildParams): string[] => {\n const { input, plugins, fields, parents } = params;\n return fields.reduce<string[]>((result, field) => {\n /**\n * We need to check if the field is full text searchable, and for that we need a plugin for the field type.\n */\n const plugin = plugins[field.type];\n if (!plugin) {\n return result;\n }\n /**\n * There is a possibility that searchable fields exist in nested object field, so check that as well.\n */\n const childFields = field.settings?.fields || [];\n if (childFields.length > 0) {\n /**\n * So we build a list of searchable child fields and push it into the main result set.\n */\n const childResults = buildSearchableFieldList({\n fields: childFields,\n parents: [...parents, field.fieldId],\n plugins,\n input\n });\n\n result.push(...childResults);\n return result;\n }\n /**\n * If not searchable, continue further.\n */\n if (!plugin.fullTextSearch || field.settings?.disableFullTextSearch === true) {\n return result;\n }\n\n /**\n * Combine all parent paths with the current one and push it.\n */\n const path = [...parents, field.fieldId].join(\".\");\n result.push(path);\n\n return result;\n }, []);\n};\n\ninterface Params {\n input: string[];\n fields: CmsModelField[];\n plugins: PluginsContainer;\n}\nexport const getSearchableFields = (params: Params): string[] => {\n const { plugins, input, fields } = params;\n const fieldPluginMap = plugins\n .byType<CmsModelFieldToGraphQLPlugin>(\"cms-model-field-to-graphql\")\n .reduce((collection, field) => {\n collection[field.fieldType] = field;\n return collection;\n }, {} as Record<string, CmsModelFieldToGraphQLPlugin>);\n\n return buildSearchableFieldList({\n fields,\n input,\n plugins: fieldPluginMap,\n parents: []\n });\n};\n"],"mappings":";;;;;;AASA,MAAMA,wBAAwB,GAAIC,MAAmB,IAAe;EAChE,MAAM;IAAEC,KAAK;IAAEC,OAAO;IAAEC,MAAM;IAAEC;EAAQ,CAAC,GAAGJ,MAAM;EAClD,OAAOG,MAAM,CAACE,MAAM,CAAW,CAACC,MAAM,EAAEC,KAAK,KAAK;IAC9C;AACR;AACA;IACQ,MAAMC,MAAM,GAAGN,OAAO,CAACK,KAAK,CAACE,IAAI,CAAC;IAClC,IAAI,CAACD,MAAM,EAAE;MACT,OAAOF,MAAM;IACjB;IACA;AACR;AACA;IACQ,MAAMI,WAAW,GAAGH,KAAK,CAACI,QAAQ,EAAER,MAAM,IAAI,EAAE;IAChD,IAAIO,WAAW,CAACE,MAAM,GAAG,CAAC,EAAE;MACxB;AACZ;AACA;MACY,MAAMC,YAAY,GAAGd,wBAAwB,CAAC;QAC1CI,MAAM,EAAEO,WAAW;QACnBN,OAAO,EAAE,CAAC,GAAGA,OAAO,EAAEG,KAAK,CAACO,OAAO,CAAC;QACpCZ,OAAO;QACPD;MACJ,CAAC,CAAC;MAEFK,MAAM,CAACS,IAAI,CAAC,GAAGF,YAAY,CAAC;MAC5B,OAAOP,MAAM;IACjB;IACA;AACR;AACA;IACQ,IAAI,CAACE,MAAM,CAACQ,cAAc,IAAIT,KAAK,CAACI,QAAQ,EAAEM,qBAAqB,KAAK,IAAI,EAAE;MAC1E,OAAOX,MAAM;IACjB;;IAEA;AACR;AACA;IACQ,MAAMY,IAAI,GAAG,CAAC,GAAGd,OAAO,EAAEG,KAAK,CAACO,OAAO,CAAC,CAACK,IAAI,CAAC,GAAG,CAAC;IAClDb,MAAM,CAACS,IAAI,CAACG,IAAI,CAAC;IAEjB,OAAOZ,MAAM;EACjB,CAAC,EAAE,EAAE,CAAC;AACV,CAAC;AAOM,MAAMc,mBAAmB,GAAIpB,MAAc,IAAe;EAC7D,MAAM;IAAEE,OAAO;IAAED,KAAK;IAAEE;EAAO,CAAC,GAAGH,MAAM;EACzC,MAAMqB,cAAc,GAAGnB,OAAO,CACzBoB,MAAM,CAA+B,4BAA4B,CAAC,CAClEjB,MAAM,CAAC,CAACkB,UAAU,EAAEhB,KAAK,KAAK;IAC3BgB,UAAU,CAAChB,KAAK,CAACiB,SAAS,CAAC,GAAGjB,KAAK;IACnC,OAAOgB,UAAU;EACrB,CAAC,EAAE,CAAC,CAAiD,CAAC;EAE1D,OAAOxB,wBAAwB,CAAC;IAC5BI,MAAM;IACNF,KAAK;IACLC,OAAO,EAAEmB,cAAc;IACvBjB,OAAO,EAAE;EACb,CAAC,CAAC;AACN,CAAC;AAACqB,OAAA,CAAAL,mBAAA,GAAAA,mBAAA"}
@@ -1,13 +1,17 @@
1
- import { CmsEntryContext, CmsContext, HeadlessCmsStorageOperations } from "../types";
1
+ import { CmsContext, CmsEntryContext, HeadlessCmsStorageOperations } from "../types";
2
2
  import { SecurityIdentity } from "@webiny/api-security/types";
3
3
  import { Tenant } from "@webiny/api-tenancy/types";
4
- export declare const STATUS_DRAFT = "draft";
5
- export declare const STATUS_PUBLISHED = "published";
6
- export declare const STATUS_UNPUBLISHED = "unpublished";
7
- export interface CreateContentEntryCrudParams {
4
+ import { I18NLocale } from "@webiny/api-i18n/types";
5
+ import { EntriesPermissions } from "../utils/permissions/EntriesPermissions";
6
+ import { ModelsPermissions } from "../utils/permissions/ModelsPermissions";
7
+ interface CreateContentEntryCrudParams {
8
8
  storageOperations: HeadlessCmsStorageOperations;
9
+ entriesPermissions: EntriesPermissions;
10
+ modelsPermissions: ModelsPermissions;
9
11
  context: CmsContext;
10
12
  getIdentity: () => SecurityIdentity;
11
13
  getTenant: () => Tenant;
14
+ getLocale: () => I18NLocale;
12
15
  }
13
16
  export declare const createContentEntryCrud: (params: CreateContentEntryCrudParams) => CmsEntryContext;
17
+ export {};