@websolutespa/payload-plugin-bowl 2.0.1 → 3.0.1

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 (455) hide show
  1. package/CHANGELOG.md +23 -4
  2. package/README.md +1 -1
  3. package/dist/blocks/MenuItem.js +219 -0
  4. package/dist/blocks/MenuItem.js.map +1 -0
  5. package/dist/blocks/index.js +4 -0
  6. package/dist/blocks/index.js.map +1 -0
  7. package/dist/blocks/withComponentBlock.js +31 -0
  8. package/dist/blocks/withComponentBlock.js.map +1 -0
  9. package/dist/bowl.js +331 -0
  10. package/dist/bowl.js.map +1 -0
  11. package/dist/collections/Address.js +7 -0
  12. package/dist/collections/Address.js.map +1 -0
  13. package/dist/collections/Category.js +94 -0
  14. package/dist/collections/Category.js.map +1 -0
  15. package/dist/collections/ConsentPreference.js +34 -0
  16. package/dist/collections/ConsentPreference.js.map +1 -0
  17. package/dist/collections/Continent.js +24 -0
  18. package/dist/collections/Continent.js.map +1 -0
  19. package/dist/collections/Country.js +66 -0
  20. package/dist/collections/Country.js.map +1 -0
  21. package/dist/collections/CountryZone.js +24 -0
  22. package/dist/collections/CountryZone.js.map +1 -0
  23. package/dist/collections/EmailConfig.js +84 -0
  24. package/dist/collections/EmailConfig.js.map +1 -0
  25. package/dist/collections/EndUsers.js +24 -0
  26. package/dist/collections/EndUsers.js.map +1 -0
  27. package/dist/collections/Label.js +26 -0
  28. package/dist/collections/Label.js.map +1 -0
  29. package/dist/collections/Language.js +35 -0
  30. package/dist/collections/Language.js.map +1 -0
  31. package/dist/collections/LegalNotice.js +29 -0
  32. package/dist/collections/LegalNotice.js.map +1 -0
  33. package/dist/collections/Market.js +106 -0
  34. package/dist/collections/Market.js.map +1 -0
  35. package/dist/collections/Media.js +40 -0
  36. package/dist/collections/Media.js.map +1 -0
  37. package/dist/collections/Menu.js +49 -0
  38. package/dist/collections/Menu.js.map +1 -0
  39. package/dist/collections/Municipality.js +68 -0
  40. package/dist/collections/Municipality.js.map +1 -0
  41. package/dist/collections/Province.js +59 -0
  42. package/dist/collections/Province.js.map +1 -0
  43. package/dist/collections/Redirect.js +90 -0
  44. package/dist/collections/Redirect.js.map +1 -0
  45. package/dist/collections/Region.js +45 -0
  46. package/dist/collections/Region.js.map +1 -0
  47. package/dist/collections/SubContinent.js +36 -0
  48. package/dist/collections/SubContinent.js.map +1 -0
  49. package/dist/collections/Template.js +79 -0
  50. package/dist/collections/Template.js.map +1 -0
  51. package/dist/collections/Users.js +11 -0
  52. package/dist/collections/Users.js.map +1 -0
  53. package/dist/components/Category/CategoryMenu.js +47 -0
  54. package/dist/components/Category/CategoryMenu.js.map +1 -0
  55. package/dist/components/Category/CategoryTree.js +430 -0
  56. package/dist/components/Category/CategoryTree.js.map +1 -0
  57. package/dist/components/Category/CategoryTree.scss +330 -0
  58. package/dist/components/Category/CategoryTreeRoute.js +51 -0
  59. package/dist/components/Category/CategoryTreeRoute.js.map +1 -0
  60. package/dist/components/Category/category.service.js +32 -0
  61. package/dist/components/Category/category.service.js.map +1 -0
  62. package/dist/components/DataTree/DataTree.js +281 -0
  63. package/dist/components/DataTree/DataTree.js.map +1 -0
  64. package/dist/components/DataTree/DataTree.scss +363 -0
  65. package/dist/components/DataTree/DataTreeProvider.js +67 -0
  66. package/dist/components/DataTree/DataTreeProvider.js.map +1 -0
  67. package/dist/components/DataTree/EventEmitter.js +38 -0
  68. package/dist/components/DataTree/EventEmitter.js.map +1 -0
  69. package/dist/components/DataTree/useDataTree.js +52 -0
  70. package/dist/components/DataTree/useDataTree.js.map +1 -0
  71. package/dist/components/DecoratedList/DecoratedList.js +17 -0
  72. package/dist/components/DecoratedList/DecoratedList.js.map +1 -0
  73. package/dist/components/IconServer/IconServer.js +15 -0
  74. package/dist/components/IconServer/IconServer.js.map +1 -0
  75. package/dist/components/IconServer/IconServer.scss +14 -0
  76. package/dist/components/ImportExport/ImportExportList.js +91 -0
  77. package/dist/components/ImportExport/ImportExportList.js.map +1 -0
  78. package/dist/components/ImportExport/ImportExportList.scss +70 -0
  79. package/dist/components/ImportExport/ImportExportRedirect.js +142 -0
  80. package/dist/components/ImportExport/ImportExportRedirect.js.map +1 -0
  81. package/dist/components/ImportExport/ImportModal.js +458 -0
  82. package/dist/components/ImportExport/ImportModal.js.map +1 -0
  83. package/dist/components/ImportExport/ImportModal.scss +99 -0
  84. package/dist/components/ImportExport/types.js +3 -0
  85. package/dist/components/ImportExport/types.js.map +1 -0
  86. package/dist/components/LeaveWithoutSaving/LeaveWithoutSaving.js +83 -0
  87. package/dist/components/LeaveWithoutSaving/LeaveWithoutSaving.js.map +1 -0
  88. package/dist/components/LeaveWithoutSaving/LeaveWithoutSaving.scss +46 -0
  89. package/dist/components/LeaveWithoutSaving/usePreventLeave.js +119 -0
  90. package/dist/components/LeaveWithoutSaving/usePreventLeave.js.map +1 -0
  91. package/dist/components/LocalizedDescription/LocalizedDescriptionClient.js +15 -0
  92. package/dist/components/LocalizedDescription/LocalizedDescriptionClient.js.map +1 -0
  93. package/dist/components/LocalizedDescription/LocalizedDescriptionServer.js +13 -0
  94. package/dist/components/LocalizedDescription/LocalizedDescriptionServer.js.map +1 -0
  95. package/dist/components/LogoServer/LogoServer.js +20 -0
  96. package/dist/components/LogoServer/LogoServer.js.map +1 -0
  97. package/dist/components/LogoServer/LogoServer.scss +21 -0
  98. package/dist/core/access/access.js +181 -0
  99. package/dist/core/access/access.js.map +1 -0
  100. package/dist/core/access/access.test.js +454 -0
  101. package/dist/core/access/access.test.js.map +1 -0
  102. package/dist/core/access/index.js +3 -0
  103. package/dist/core/access/index.js.map +1 -0
  104. package/dist/core/api/action.service.js +441 -0
  105. package/dist/core/api/action.service.js.map +1 -0
  106. package/dist/core/api/action.service.test.js +218 -0
  107. package/dist/core/api/action.service.test.js.map +1 -0
  108. package/dist/core/api/cache.service.js +33 -0
  109. package/dist/core/api/cache.service.js.map +1 -0
  110. package/dist/core/api/cache.service.test.js +33 -0
  111. package/dist/core/api/cache.service.test.js.map +1 -0
  112. package/dist/core/api/category.service.js +53 -0
  113. package/dist/core/api/category.service.js.map +1 -0
  114. package/dist/core/api/collection.service.js +457 -0
  115. package/dist/core/api/collection.service.js.map +1 -0
  116. package/dist/core/api/collection.service.test.js +318 -0
  117. package/dist/core/api/collection.service.test.js.map +1 -0
  118. package/dist/core/api/email.service.js +84 -0
  119. package/dist/core/api/email.service.js.map +1 -0
  120. package/dist/core/api/global.service.js +18 -0
  121. package/dist/core/api/global.service.js.map +1 -0
  122. package/dist/core/api/health.service.js +12 -0
  123. package/dist/core/api/health.service.js.map +1 -0
  124. package/dist/core/api/index.js +16 -0
  125. package/dist/core/api/index.js.map +1 -0
  126. package/dist/core/api/locale.service.js +58 -0
  127. package/dist/core/api/locale.service.js.map +1 -0
  128. package/dist/core/api/locale.service.test.js +46 -0
  129. package/dist/core/api/locale.service.test.js.map +1 -0
  130. package/dist/core/api/menu.service.js +81 -0
  131. package/dist/core/api/menu.service.js.map +1 -0
  132. package/dist/core/api/menu.service.test.js +300 -0
  133. package/dist/core/api/menu.service.test.js.map +1 -0
  134. package/dist/core/api/page.service.js +171 -0
  135. package/dist/core/api/page.service.js.map +1 -0
  136. package/dist/core/api/page.service.test.js +68 -0
  137. package/dist/core/api/page.service.test.js.map +1 -0
  138. package/dist/core/api/pagination.service.js +29 -0
  139. package/dist/core/api/pagination.service.js.map +1 -0
  140. package/dist/core/api/pagination.service.test.js +175 -0
  141. package/dist/core/api/pagination.service.test.js.map +1 -0
  142. package/dist/core/api/redirect.service.js +106 -0
  143. package/dist/core/api/redirect.service.js.map +1 -0
  144. package/dist/core/api/redirect.service.test.js +106 -0
  145. package/dist/core/api/redirect.service.test.js.map +1 -0
  146. package/dist/core/api/route.service.js +451 -0
  147. package/dist/core/api/route.service.js.map +1 -0
  148. package/dist/core/api/route.service.test.js +214 -0
  149. package/dist/core/api/route.service.test.js.map +1 -0
  150. package/dist/core/api/static.service.js +249 -0
  151. package/dist/core/api/static.service.js.map +1 -0
  152. package/dist/core/api/static.service.test.js +240 -0
  153. package/dist/core/api/static.service.test.js.map +1 -0
  154. package/dist/core/api/store.service.js +336 -0
  155. package/dist/core/api/store.service.js.map +1 -0
  156. package/dist/core/api/store.service.test.js +105 -0
  157. package/dist/core/api/store.service.test.js.map +1 -0
  158. package/dist/core/api/types.js +21 -0
  159. package/dist/core/api/types.js.map +1 -0
  160. package/dist/core/api/utils.js +83 -0
  161. package/dist/core/api/utils.js.map +1 -0
  162. package/dist/core/api/where.service.js +231 -0
  163. package/dist/core/api/where.service.js.map +1 -0
  164. package/dist/core/collections/index.js +12 -0
  165. package/dist/core/collections/index.js.map +1 -0
  166. package/dist/core/collections/withAction.js +91 -0
  167. package/dist/core/collections/withAction.js.map +1 -0
  168. package/dist/core/collections/withAction.test.js +68 -0
  169. package/dist/core/collections/withAction.test.js.map +1 -0
  170. package/dist/core/collections/withAddress.js +122 -0
  171. package/dist/core/collections/withAddress.js.map +1 -0
  172. package/dist/core/collections/withBlock.js +17 -0
  173. package/dist/core/collections/withBlock.js.map +1 -0
  174. package/dist/core/collections/withBlock.test.js +68 -0
  175. package/dist/core/collections/withBlock.test.js.map +1 -0
  176. package/dist/core/collections/withCollection.js +61 -0
  177. package/dist/core/collections/withCollection.js.map +1 -0
  178. package/dist/core/collections/withCollection.test.js +64 -0
  179. package/dist/core/collections/withCollection.test.js.map +1 -0
  180. package/dist/core/collections/withEndUser.js +301 -0
  181. package/dist/core/collections/withEndUser.js.map +1 -0
  182. package/dist/core/collections/withGlobal.js +27 -0
  183. package/dist/core/collections/withGlobal.js.map +1 -0
  184. package/dist/core/collections/withGlobal.test.js +57 -0
  185. package/dist/core/collections/withGlobal.test.js.map +1 -0
  186. package/dist/core/collections/withMenu.js +19 -0
  187. package/dist/core/collections/withMenu.js.map +1 -0
  188. package/dist/core/collections/withMenu.test.js +63 -0
  189. package/dist/core/collections/withMenu.test.js.map +1 -0
  190. package/dist/core/collections/withPage.js +126 -0
  191. package/dist/core/collections/withPage.js.map +1 -0
  192. package/dist/core/collections/withPage.test.js +103 -0
  193. package/dist/core/collections/withPage.test.js.map +1 -0
  194. package/dist/core/collections/withStaticCollection.js +60 -0
  195. package/dist/core/collections/withStaticCollection.js.map +1 -0
  196. package/dist/core/collections/withStaticCollection.test.js +84 -0
  197. package/dist/core/collections/withStaticCollection.test.js.map +1 -0
  198. package/dist/core/collections/withUser.js +56 -0
  199. package/dist/core/collections/withUser.js.map +1 -0
  200. package/dist/core/decorators/category.js +28 -0
  201. package/dist/core/decorators/category.js.map +1 -0
  202. package/dist/core/decorators/components.js +9 -0
  203. package/dist/core/decorators/components.js.map +1 -0
  204. package/dist/core/decorators/href.js +25 -0
  205. package/dist/core/decorators/href.js.map +1 -0
  206. package/dist/core/decorators/index.js +11 -0
  207. package/dist/core/decorators/index.js.map +1 -0
  208. package/dist/core/decorators/localize.js +27 -0
  209. package/dist/core/decorators/localize.js.map +1 -0
  210. package/dist/core/decorators/menu.js +246 -0
  211. package/dist/core/decorators/menu.js.map +1 -0
  212. package/dist/core/decorators/nav.js +42 -0
  213. package/dist/core/decorators/nav.js.map +1 -0
  214. package/dist/core/decorators/rich-text.js +39 -0
  215. package/dist/core/decorators/rich-text.js.map +1 -0
  216. package/dist/core/decorators/schema.js +16 -0
  217. package/dist/core/decorators/schema.js.map +1 -0
  218. package/dist/core/decorators/upload.js +44 -0
  219. package/dist/core/decorators/upload.js.map +1 -0
  220. package/dist/core/encryption/encryption.js +66 -0
  221. package/dist/core/encryption/encryption.js.map +1 -0
  222. package/dist/core/encryption/index.js +3 -0
  223. package/dist/core/encryption/index.js.map +1 -0
  224. package/dist/core/fields/index.js +28 -0
  225. package/dist/core/fields/index.js.map +1 -0
  226. package/dist/core/fields/withAbstract.js +15 -0
  227. package/dist/core/fields/withAbstract.js.map +1 -0
  228. package/dist/core/fields/withAbstract.test.js +72 -0
  229. package/dist/core/fields/withAbstract.test.js.map +1 -0
  230. package/dist/core/fields/withAnchor.js +56 -0
  231. package/dist/core/fields/withAnchor.js.map +1 -0
  232. package/dist/core/fields/withCategory.js +21 -0
  233. package/dist/core/fields/withCategory.js.map +1 -0
  234. package/dist/core/fields/withCategory.test.js +63 -0
  235. package/dist/core/fields/withCategory.test.js.map +1 -0
  236. package/dist/core/fields/withCheckbox.js +19 -0
  237. package/dist/core/fields/withCheckbox.js.map +1 -0
  238. package/dist/core/fields/withCheckbox.test.js +59 -0
  239. package/dist/core/fields/withCheckbox.test.js.map +1 -0
  240. package/dist/core/fields/withComponents.js +17 -0
  241. package/dist/core/fields/withComponents.js.map +1 -0
  242. package/dist/core/fields/withComponents.test.js +62 -0
  243. package/dist/core/fields/withComponents.test.js.map +1 -0
  244. package/dist/core/fields/withDate.js +18 -0
  245. package/dist/core/fields/withDate.js.map +1 -0
  246. package/dist/core/fields/withDate.test.js +56 -0
  247. package/dist/core/fields/withDate.test.js.map +1 -0
  248. package/dist/core/fields/withDescription.js +15 -0
  249. package/dist/core/fields/withDescription.js.map +1 -0
  250. package/dist/core/fields/withDescription.test.js +72 -0
  251. package/dist/core/fields/withDescription.test.js.map +1 -0
  252. package/dist/core/fields/withId.js +19 -0
  253. package/dist/core/fields/withId.js.map +1 -0
  254. package/dist/core/fields/withId.test.js +61 -0
  255. package/dist/core/fields/withId.test.js.map +1 -0
  256. package/dist/core/fields/withIsActive.js +15 -0
  257. package/dist/core/fields/withIsActive.js.map +1 -0
  258. package/dist/core/fields/withIsActive.test.js +59 -0
  259. package/dist/core/fields/withIsActive.test.js.map +1 -0
  260. package/dist/core/fields/withIsDefault.js +15 -0
  261. package/dist/core/fields/withIsDefault.js.map +1 -0
  262. package/dist/core/fields/withIsDefault.test.js +59 -0
  263. package/dist/core/fields/withIsDefault.test.js.map +1 -0
  264. package/dist/core/fields/withLink.js +116 -0
  265. package/dist/core/fields/withLink.js.map +1 -0
  266. package/dist/core/fields/withLink.test.js +144 -0
  267. package/dist/core/fields/withLink.test.js.map +1 -0
  268. package/dist/core/fields/withMarkets.js +21 -0
  269. package/dist/core/fields/withMarkets.js.map +1 -0
  270. package/dist/core/fields/withMarkets.test.js +65 -0
  271. package/dist/core/fields/withMarkets.test.js.map +1 -0
  272. package/dist/core/fields/withMedia.js +20 -0
  273. package/dist/core/fields/withMedia.js.map +1 -0
  274. package/dist/core/fields/withMedia.test.js +41 -0
  275. package/dist/core/fields/withMedia.test.js.map +1 -0
  276. package/dist/core/fields/withMedias.js +25 -0
  277. package/dist/core/fields/withMedias.js.map +1 -0
  278. package/dist/core/fields/withMedias.test.js +46 -0
  279. package/dist/core/fields/withMedias.test.js.map +1 -0
  280. package/dist/core/fields/withName.js +17 -0
  281. package/dist/core/fields/withName.js.map +1 -0
  282. package/dist/core/fields/withName.test.js +59 -0
  283. package/dist/core/fields/withName.test.js.map +1 -0
  284. package/dist/core/fields/withNav.js +28 -0
  285. package/dist/core/fields/withNav.js.map +1 -0
  286. package/dist/core/fields/withNavs.js +53 -0
  287. package/dist/core/fields/withNavs.js.map +1 -0
  288. package/dist/core/fields/withOrder.js +80 -0
  289. package/dist/core/fields/withOrder.js.map +1 -0
  290. package/dist/core/fields/withOrder.test.js +56 -0
  291. package/dist/core/fields/withOrder.test.js.map +1 -0
  292. package/dist/core/fields/withRelated.js +18 -0
  293. package/dist/core/fields/withRelated.js.map +1 -0
  294. package/dist/core/fields/withRelated.test.js +62 -0
  295. package/dist/core/fields/withRelated.test.js.map +1 -0
  296. package/dist/core/fields/withRichText.js +68 -0
  297. package/dist/core/fields/withRichText.js.map +1 -0
  298. package/dist/core/fields/withRichText.test.js +72 -0
  299. package/dist/core/fields/withRichText.test.js.map +1 -0
  300. package/dist/core/fields/withRoles.js +27 -0
  301. package/dist/core/fields/withRoles.js.map +1 -0
  302. package/dist/core/fields/withRoles.test.js +49 -0
  303. package/dist/core/fields/withRoles.test.js.map +1 -0
  304. package/dist/core/fields/withSelect.js +23 -0
  305. package/dist/core/fields/withSelect.js.map +1 -0
  306. package/dist/core/fields/withSelect.test.js +59 -0
  307. package/dist/core/fields/withSelect.test.js.map +1 -0
  308. package/dist/core/fields/withSeoWeight.js +19 -0
  309. package/dist/core/fields/withSeoWeight.js.map +1 -0
  310. package/dist/core/fields/withSlug.js +33 -0
  311. package/dist/core/fields/withSlug.js.map +1 -0
  312. package/dist/core/fields/withSlug.test.js +71 -0
  313. package/dist/core/fields/withSlug.test.js.map +1 -0
  314. package/dist/core/fields/withTemplate.js +49 -0
  315. package/dist/core/fields/withTemplate.js.map +1 -0
  316. package/dist/core/fields/withTemplate.test.js +93 -0
  317. package/dist/core/fields/withTemplate.test.js.map +1 -0
  318. package/dist/core/fields/withTenants.js +21 -0
  319. package/dist/core/fields/withTenants.js.map +1 -0
  320. package/dist/core/fields/withTenants.test.js +42 -0
  321. package/dist/core/fields/withTenants.test.js.map +1 -0
  322. package/dist/core/fields/withText.js +18 -0
  323. package/dist/core/fields/withText.js.map +1 -0
  324. package/dist/core/fields/withText.test.js +56 -0
  325. package/dist/core/fields/withText.test.js.map +1 -0
  326. package/dist/core/fields/withTitle.js +17 -0
  327. package/dist/core/fields/withTitle.js.map +1 -0
  328. package/dist/core/fields/withTitle.test.js +58 -0
  329. package/dist/core/fields/withTitle.test.js.map +1 -0
  330. package/dist/core/index.js +11 -0
  331. package/dist/core/index.js.map +1 -0
  332. package/dist/core/logger/index.js +3 -0
  333. package/dist/core/logger/index.js.map +1 -0
  334. package/dist/core/logger/logger.js +9 -0
  335. package/dist/core/logger/logger.js.map +1 -0
  336. package/dist/core/translations/index.js +3 -0
  337. package/dist/core/translations/index.js.map +1 -0
  338. package/dist/core/translations/translations.js +137 -0
  339. package/dist/core/translations/translations.js.map +1 -0
  340. package/dist/core/translations/translations.test.js +72 -0
  341. package/dist/core/translations/translations.test.js.map +1 -0
  342. package/dist/core/utils/findByIDHandler.js +28 -0
  343. package/dist/core/utils/findByIDHandler.js.map +1 -0
  344. package/dist/core/utils/findHandler.js +31 -0
  345. package/dist/core/utils/findHandler.js.map +1 -0
  346. package/dist/core/utils/getPreviewURL.js +45 -0
  347. package/dist/core/utils/getPreviewURL.js.map +1 -0
  348. package/dist/core/utils/getRequestCollection.js +49 -0
  349. package/dist/core/utils/getRequestCollection.js.map +1 -0
  350. package/dist/core/utils/index.js +7 -0
  351. package/dist/core/utils/index.js.map +1 -0
  352. package/dist/core/utils/mergeCollections.js +18 -0
  353. package/dist/core/utils/mergeCollections.js.map +1 -0
  354. package/dist/core/utils/mergeFields.js +20 -0
  355. package/dist/core/utils/mergeFields.js.map +1 -0
  356. package/dist/core/utils/mergeGlobals.js +17 -0
  357. package/dist/core/utils/mergeGlobals.js.map +1 -0
  358. package/dist/core/utils/richText.js +29 -0
  359. package/dist/core/utils/richText.js.map +1 -0
  360. package/dist/core/utils/sortByGroup.js +36 -0
  361. package/dist/core/utils/sortByGroup.js.map +1 -0
  362. package/dist/debug.js +25 -0
  363. package/dist/debug.js.map +1 -0
  364. package/dist/declaration.d.js +3 -0
  365. package/dist/declaration.d.js.map +1 -0
  366. package/dist/exports/client.d.ts +36 -0
  367. package/dist/exports/client.d.ts.map +1 -0
  368. package/dist/exports/client.js +8 -0
  369. package/dist/exports/client.js.map +1 -0
  370. package/dist/exports/rsc.d.ts +18 -0
  371. package/dist/exports/rsc.d.ts.map +1 -0
  372. package/dist/exports/rsc.js +5 -0
  373. package/dist/exports/rsc.js.map +1 -0
  374. package/dist/fields/color-picker/ColorCell.js +19 -0
  375. package/dist/fields/color-picker/ColorCell.js.map +1 -0
  376. package/dist/fields/color-picker/ColorField.js +131 -0
  377. package/dist/fields/color-picker/ColorField.js.map +1 -0
  378. package/dist/fields/color-picker/index.js +26 -0
  379. package/dist/fields/color-picker/index.js.map +1 -0
  380. package/dist/fields/color-picker/styles.scss +113 -0
  381. package/dist/fields/color-picker/utils.js +6 -0
  382. package/dist/fields/color-picker/utils.js.map +1 -0
  383. package/dist/fields/index.js +3 -0
  384. package/dist/fields/index.js.map +1 -0
  385. package/dist/globals/App.js +97 -0
  386. package/dist/globals/App.js.map +1 -0
  387. package/dist/globals/Locale.js +82 -0
  388. package/dist/globals/Locale.js.map +1 -0
  389. package/dist/globals/LocaleRowLabel.js +16 -0
  390. package/dist/globals/LocaleRowLabel.js.map +1 -0
  391. package/dist/index.d.ts +891 -844
  392. package/dist/index.d.ts.map +1 -0
  393. package/dist/index.js +11 -9263
  394. package/dist/index.js.map +1 -0
  395. package/dist/mapper.js +199 -0
  396. package/dist/mapper.js.map +1 -0
  397. package/dist/options.js +76 -0
  398. package/dist/options.js.map +1 -0
  399. package/dist/test/blocks/blocks.js +13 -0
  400. package/dist/test/blocks/blocks.js.map +1 -0
  401. package/dist/test/collections/ActionCollection.js +12 -0
  402. package/dist/test/collections/ActionCollection.js.map +1 -0
  403. package/dist/test/collections/AdminCollection.js +18 -0
  404. package/dist/test/collections/AdminCollection.js.map +1 -0
  405. package/dist/test/collections/BlockCollection.js +16 -0
  406. package/dist/test/collections/BlockCollection.js.map +1 -0
  407. package/dist/test/collections/Collection.js +12 -0
  408. package/dist/test/collections/Collection.js.map +1 -0
  409. package/dist/test/collections/FieldCollection.js +84 -0
  410. package/dist/test/collections/FieldCollection.js.map +1 -0
  411. package/dist/test/collections/GlobalCollection.js +12 -0
  412. package/dist/test/collections/GlobalCollection.js.map +1 -0
  413. package/dist/test/collections/LinkCollection.js +12 -0
  414. package/dist/test/collections/LinkCollection.js.map +1 -0
  415. package/dist/test/collections/MenuCollection.js +12 -0
  416. package/dist/test/collections/MenuCollection.js.map +1 -0
  417. package/dist/test/collections/PageCollection.js +12 -0
  418. package/dist/test/collections/PageCollection.js.map +1 -0
  419. package/dist/test/collections/RoleCollection.js +19 -0
  420. package/dist/test/collections/RoleCollection.js.map +1 -0
  421. package/dist/test/collections/RoleFieldCollection.js +40 -0
  422. package/dist/test/collections/RoleFieldCollection.js.map +1 -0
  423. package/dist/test/collections/StaticCollection.js +56 -0
  424. package/dist/test/collections/StaticCollection.js.map +1 -0
  425. package/dist/test/collections/StorePageCollection.js +12 -0
  426. package/dist/test/collections/StorePageCollection.js.map +1 -0
  427. package/dist/test/collections/TenantCollection.js +22 -0
  428. package/dist/test/collections/TenantCollection.js.map +1 -0
  429. package/dist/test/collections/TranslationCollection.js +16 -0
  430. package/dist/test/collections/TranslationCollection.js.map +1 -0
  431. package/dist/test/collections/TypeACollection.js +18 -0
  432. package/dist/test/collections/TypeACollection.js.map +1 -0
  433. package/dist/test/collections/TypeBCollection.js +18 -0
  434. package/dist/test/collections/TypeBCollection.js.map +1 -0
  435. package/dist/test/collections/actions/NewsletterAction.js +29 -0
  436. package/dist/test/collections/actions/NewsletterAction.js.map +1 -0
  437. package/dist/test/collections/actions/RegisterAction.js +44 -0
  438. package/dist/test/collections/actions/RegisterAction.js.map +1 -0
  439. package/dist/test/collections/users/EndUsers.js +40 -0
  440. package/dist/test/collections/users/EndUsers.js.map +1 -0
  441. package/dist/test/collections/users/Users.js +20 -0
  442. package/dist/test/collections/users/Users.js.map +1 -0
  443. package/dist/test/index.js +32 -0
  444. package/dist/test/index.js.map +1 -0
  445. package/dist/test/payload.config.js +106 -0
  446. package/dist/test/payload.config.js.map +1 -0
  447. package/dist/test/utils.js +52 -0
  448. package/dist/test/utils.js.map +1 -0
  449. package/dist/translations.js +467 -0
  450. package/dist/translations.js.map +1 -0
  451. package/dist/types.js +31 -0
  452. package/dist/types.js.map +1 -0
  453. package/package.json +119 -37
  454. package/scss/styles.scss +0 -1
  455. package/dist/index.css +0 -796
@@ -0,0 +1,56 @@
1
+ import { config, FieldCollection, getTestConfig } from '@/test';
2
+ import { clearContext, endUsers, getContext, users } from '@websolutespa/test/payload';
3
+ import { v4 as uuid } from 'uuid';
4
+ import { afterAll, beforeAll, describe, expect, it } from 'vitest';
5
+ describe('withOrder field', ()=>{
6
+ let payload;
7
+ let client;
8
+ let userToken;
9
+ let endUserToken;
10
+ let apiKey;
11
+ let testConfig;
12
+ beforeAll(async ()=>{
13
+ const context = await getContext(config);
14
+ payload = context.payload;
15
+ client = context.client;
16
+ userToken = await client.getToken('users', users.admin);
17
+ endUserToken = await client.getToken('end_users', endUsers.user);
18
+ apiKey = users.api.apiKey;
19
+ testConfig = await getTestConfig(client, userToken);
20
+ });
21
+ afterAll(async ()=>{
22
+ await clearContext();
23
+ });
24
+ describe('Field config', ()=>{
25
+ let collection;
26
+ let field;
27
+ beforeAll(async ()=>{
28
+ collection = payload.config.collections.find((x)=>x.slug === FieldCollection.slug);
29
+ });
30
+ it('should have a field named "order" of type "number"', ()=>{
31
+ field = collection.fields.find((field)=>field.type === 'number' && field.name === 'order');
32
+ expect(field).toBeDefined();
33
+ });
34
+ });
35
+ describe('Document creation', ()=>{
36
+ let fieldsDoc;
37
+ let postData;
38
+ beforeAll(async ()=>{
39
+ postData = {
40
+ _id: uuid(),
41
+ title: uuid(),
42
+ order: 999
43
+ };
44
+ ({ doc: fieldsDoc } = await client.post(`/${FieldCollection.slug}?locale=${testConfig.defaultLocale}`, postData, {
45
+ headers: {
46
+ Authorization: `users API-Key ${users.api.apiKey}`
47
+ }
48
+ }));
49
+ });
50
+ it('should have a valid "order" field', async ()=>{
51
+ expect(fieldsDoc.order).toEqual(postData.order);
52
+ });
53
+ });
54
+ });
55
+
56
+ //# sourceMappingURL=withOrder.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/core/fields/withOrder.test.ts"],"sourcesContent":["import { config, FieldCollection, getTestConfig, TestConfig } from '@/test';\r\nimport { clearContext, endUsers, getContext, RestClient, users } from '@websolutespa/test/payload';\r\nimport { NumberField, Payload, SanitizedCollectionConfig } from 'payload';\r\nimport { v4 as uuid } from 'uuid';\r\nimport { afterAll, beforeAll, describe, expect, it } from 'vitest';\r\n\r\ndescribe('withOrder field', () => {\r\n\r\n let payload: Payload;\r\n let client: RestClient;\r\n let userToken: string;\r\n let endUserToken: string;\r\n let apiKey: string;\r\n let testConfig: TestConfig;\r\n\r\n beforeAll(async () => {\r\n const context = await getContext(config);\r\n payload = context.payload;\r\n client = context.client;\r\n userToken = await client.getToken('users', users.admin);\r\n endUserToken = await client.getToken('end_users', endUsers.user);\r\n apiKey = users.api.apiKey;\r\n testConfig = await getTestConfig(client, userToken);\r\n });\r\n\r\n afterAll(async () => {\r\n await clearContext();\r\n });\r\n\r\n describe('Field config', () => {\r\n let collection: SanitizedCollectionConfig;\r\n let field: NumberField;\r\n\r\n beforeAll(async () => {\r\n collection = payload.config.collections.find(x => x.slug === FieldCollection.slug)!;\r\n });\r\n\r\n it('should have a field named \"order\" of type \"number\"', () => {\r\n field = collection.fields.find(field => field.type === 'number' && field.name === 'order') as NumberField;\r\n expect(field).toBeDefined();\r\n });\r\n });\r\n\r\n describe('Document creation', () => {\r\n let fieldsDoc: any;\r\n let postData: any;\r\n\r\n beforeAll(async () => {\r\n postData = {\r\n _id: uuid(),\r\n title: uuid(),\r\n order: 999,\r\n };\r\n\r\n ({ doc: fieldsDoc } = await client.post(`/${FieldCollection.slug}?locale=${testConfig.defaultLocale}`, postData, {\r\n headers: {\r\n Authorization: `users API-Key ${users.api.apiKey}`,\r\n },\r\n }));\r\n });\r\n\r\n it('should have a valid \"order\" field', async () => {\r\n expect(fieldsDoc.order).toEqual(postData.order);\r\n });\r\n });\r\n});\r\n"],"names":["config","FieldCollection","getTestConfig","clearContext","endUsers","getContext","users","v4","uuid","afterAll","beforeAll","describe","expect","it","payload","client","userToken","endUserToken","apiKey","testConfig","context","getToken","admin","user","api","collection","field","collections","find","x","slug","fields","type","name","toBeDefined","fieldsDoc","postData","_id","title","order","doc","post","defaultLocale","headers","Authorization","toEqual"],"mappings":"AAAA,SAASA,MAAM,EAAEC,eAAe,EAAEC,aAAa,QAAoB,SAAS;AAC5E,SAASC,YAAY,EAAEC,QAAQ,EAAEC,UAAU,EAAcC,KAAK,QAAQ,6BAA6B;AAEnG,SAASC,MAAMC,IAAI,QAAQ,OAAO;AAClC,SAASC,QAAQ,EAAEC,SAAS,EAAEC,QAAQ,EAAEC,MAAM,EAAEC,EAAE,QAAQ,SAAS;AAEnEF,SAAS,mBAAmB;IAE1B,IAAIG;IACJ,IAAIC;IACJ,IAAIC;IACJ,IAAIC;IACJ,IAAIC;IACJ,IAAIC;IAEJT,UAAU;QACR,MAAMU,UAAU,MAAMf,WAAWL;QACjCc,UAAUM,QAAQN,OAAO;QACzBC,SAASK,QAAQL,MAAM;QACvBC,YAAY,MAAMD,OAAOM,QAAQ,CAAC,SAASf,MAAMgB,KAAK;QACtDL,eAAe,MAAMF,OAAOM,QAAQ,CAAC,aAAajB,SAASmB,IAAI;QAC/DL,SAASZ,MAAMkB,GAAG,CAACN,MAAM;QACzBC,aAAa,MAAMjB,cAAca,QAAQC;IAC3C;IAEAP,SAAS;QACP,MAAMN;IACR;IAEAQ,SAAS,gBAAgB;QACvB,IAAIc;QACJ,IAAIC;QAEJhB,UAAU;YACRe,aAAaX,QAAQd,MAAM,CAAC2B,WAAW,CAACC,IAAI,CAACC,CAAAA,IAAKA,EAAEC,IAAI,KAAK7B,gBAAgB6B,IAAI;QACnF;QAEAjB,GAAG,sDAAsD;YACvDa,QAAQD,WAAWM,MAAM,CAACH,IAAI,CAACF,CAAAA,QAASA,MAAMM,IAAI,KAAK,YAAYN,MAAMO,IAAI,KAAK;YAClFrB,OAAOc,OAAOQ,WAAW;QAC3B;IACF;IAEAvB,SAAS,qBAAqB;QAC5B,IAAIwB;QACJ,IAAIC;QAEJ1B,UAAU;YACR0B,WAAW;gBACTC,KAAK7B;gBACL8B,OAAO9B;gBACP+B,OAAO;YACT;YAEC,CAAA,EAAEC,KAAKL,SAAS,EAAE,GAAG,MAAMpB,OAAO0B,IAAI,CAAC,CAAC,CAAC,EAAExC,gBAAgB6B,IAAI,CAAC,QAAQ,EAAEX,WAAWuB,aAAa,CAAC,CAAC,EAAEN,UAAU;gBAC/GO,SAAS;oBACPC,eAAe,CAAC,cAAc,EAAEtC,MAAMkB,GAAG,CAACN,MAAM,CAAC,CAAC;gBACpD;YACF,EAAC;QACH;QAEAL,GAAG,qCAAqC;YACtCD,OAAOuB,UAAUI,KAAK,EAAEM,OAAO,CAACT,SAASG,KAAK;QAChD;IACF;AACF"}
@@ -0,0 +1,18 @@
1
+ import { deepMerge } from '@websolutespa/payload-utils';
2
+ export const RelatedDefaults = {
3
+ name: 'related',
4
+ type: 'blocks',
5
+ blocks: [],
6
+ maxRows: 1,
7
+ admin: {
8
+ initCollapsed: true
9
+ }
10
+ };
11
+ export const withRelated = (options)=>{
12
+ const field = deepMerge({
13
+ ...RelatedDefaults
14
+ }, options);
15
+ return field;
16
+ };
17
+
18
+ //# sourceMappingURL=withRelated.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/core/fields/withRelated.ts"],"sourcesContent":["import { deepMerge } from '@websolutespa/payload-utils';\r\nimport { BlocksField } from 'payload';\r\nimport { BowlBlock } from '../../types';\r\n\r\nexport type WithRelatedProps = Omit<Partial<BlocksField>, 'type' | 'name' | 'blocks'> & { name?: string, blocks: BowlBlock[] };\r\nexport type WithRelated = WithRelatedProps & { type: 'withRelated' };\r\n\r\nexport const RelatedDefaults: BlocksField = {\r\n name: 'related',\r\n type: 'blocks',\r\n blocks: [],\r\n maxRows: 1,\r\n admin: {\r\n initCollapsed: true,\r\n },\r\n};\r\n\r\nexport const withRelated = (options: WithRelatedProps): BlocksField => {\r\n const field = deepMerge<WithRelatedProps>({\r\n ...RelatedDefaults,\r\n }, options);\r\n return field as BlocksField;\r\n};\r\n"],"names":["deepMerge","RelatedDefaults","name","type","blocks","maxRows","admin","initCollapsed","withRelated","options","field"],"mappings":"AAAA,SAASA,SAAS,QAAQ,8BAA8B;AAOxD,OAAO,MAAMC,kBAA+B;IAC1CC,MAAM;IACNC,MAAM;IACNC,QAAQ,EAAE;IACVC,SAAS;IACTC,OAAO;QACLC,eAAe;IACjB;AACF,EAAE;AAEF,OAAO,MAAMC,cAAc,CAACC;IAC1B,MAAMC,QAAQV,UAA4B;QACxC,GAAGC,eAAe;IACpB,GAAGQ;IACH,OAAOC;AACT,EAAE"}
@@ -0,0 +1,62 @@
1
+ import { config, FieldCollection, getTestConfig, withBlockOption } from '@/test';
2
+ import { clearContext, endUsers, getContext, users } from '@websolutespa/test/payload';
3
+ import { v4 as uuid } from 'uuid';
4
+ import { afterAll, beforeAll, describe, expect, it } from 'vitest';
5
+ describe('withRelated field', ()=>{
6
+ let payload;
7
+ let client;
8
+ let userToken;
9
+ let endUserToken;
10
+ let apiKey;
11
+ let testConfig;
12
+ beforeAll(async ()=>{
13
+ const context = await getContext(config);
14
+ payload = context.payload;
15
+ client = context.client;
16
+ userToken = await client.getToken('users', users.admin);
17
+ endUserToken = await client.getToken('end_users', endUsers.user);
18
+ apiKey = users.api.apiKey;
19
+ testConfig = await getTestConfig(client, userToken);
20
+ });
21
+ afterAll(async ()=>{
22
+ await clearContext();
23
+ });
24
+ describe('Field config', ()=>{
25
+ let collection;
26
+ let field;
27
+ beforeAll(async ()=>{
28
+ collection = payload.config.collections.find((x)=>x.slug === FieldCollection.slug);
29
+ });
30
+ it('should have a field named "related"', ()=>{
31
+ field = collection.fields.find((field)=>field.type === 'blocks' && field.name === 'related');
32
+ expect(field).toBeDefined();
33
+ });
34
+ });
35
+ describe('Document creation', ()=>{
36
+ let fieldsDoc;
37
+ let postData;
38
+ beforeAll(async ()=>{
39
+ postData = {
40
+ _id: uuid(),
41
+ title: uuid(),
42
+ related: [
43
+ {
44
+ blockType: withBlockOption.slug,
45
+ customField: uuid()
46
+ }
47
+ ]
48
+ };
49
+ ({ doc: fieldsDoc } = await client.post(`/${FieldCollection.slug}?locale=${testConfig.defaultLocale}`, postData, {
50
+ headers: {
51
+ Authorization: `JWT ${userToken}`
52
+ }
53
+ }));
54
+ });
55
+ it('should have a valid "related" field', async ()=>{
56
+ const [block] = fieldsDoc.related;
57
+ expect(block).toBeDefined();
58
+ });
59
+ });
60
+ });
61
+
62
+ //# sourceMappingURL=withRelated.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/core/fields/withRelated.test.ts"],"sourcesContent":["import { config, FieldCollection, getTestConfig, TestConfig, withBlockOption } from '@/test';\r\nimport { clearContext, endUsers, getContext, RestClient, users } from '@websolutespa/test/payload';\r\nimport { BlocksField, Payload, SanitizedCollectionConfig } from 'payload';\r\nimport { v4 as uuid } from 'uuid';\r\nimport { afterAll, beforeAll, describe, expect, it } from 'vitest';\r\nimport { BowlBlock } from '../../types';\r\n\r\ndescribe('withRelated field', () => {\r\n\r\n let payload: Payload;\r\n let client: RestClient;\r\n let userToken: string;\r\n let endUserToken: string;\r\n let apiKey: string;\r\n let testConfig: TestConfig;\r\n\r\n beforeAll(async () => {\r\n const context = await getContext(config);\r\n payload = context.payload;\r\n client = context.client;\r\n userToken = await client.getToken('users', users.admin);\r\n endUserToken = await client.getToken('end_users', endUsers.user);\r\n apiKey = users.api.apiKey;\r\n testConfig = await getTestConfig(client, userToken);\r\n });\r\n\r\n afterAll(async () => {\r\n await clearContext();\r\n });\r\n\r\n describe('Field config', () => {\r\n let collection: SanitizedCollectionConfig;\r\n let field: BlocksField;\r\n\r\n beforeAll(async () => {\r\n collection = payload.config.collections.find(x => x.slug === FieldCollection.slug)!;\r\n });\r\n\r\n it('should have a field named \"related\"', () => {\r\n field = collection.fields.find((field) => field.type === 'blocks' && field.name === 'related') as BlocksField;\r\n expect(field).toBeDefined();\r\n });\r\n });\r\n\r\n describe('Document creation', () => {\r\n let fieldsDoc: any;\r\n let postData: any;\r\n\r\n beforeAll(async () => {\r\n postData = {\r\n _id: uuid(),\r\n title: uuid(),\r\n related: [\r\n {\r\n blockType: withBlockOption.slug,\r\n customField: uuid(),\r\n },\r\n ],\r\n };\r\n\r\n ({ doc: fieldsDoc } = await client.post(`/${FieldCollection.slug}?locale=${testConfig.defaultLocale}`, postData, {\r\n headers: {\r\n Authorization: `JWT ${userToken}`,\r\n },\r\n }));\r\n });\r\n\r\n it('should have a valid \"related\" field', async () => {\r\n const [block] = fieldsDoc.related as BowlBlock[];\r\n expect(block).toBeDefined();\r\n });\r\n });\r\n});\r\n"],"names":["config","FieldCollection","getTestConfig","withBlockOption","clearContext","endUsers","getContext","users","v4","uuid","afterAll","beforeAll","describe","expect","it","payload","client","userToken","endUserToken","apiKey","testConfig","context","getToken","admin","user","api","collection","field","collections","find","x","slug","fields","type","name","toBeDefined","fieldsDoc","postData","_id","title","related","blockType","customField","doc","post","defaultLocale","headers","Authorization","block"],"mappings":"AAAA,SAASA,MAAM,EAAEC,eAAe,EAAEC,aAAa,EAAcC,eAAe,QAAQ,SAAS;AAC7F,SAASC,YAAY,EAAEC,QAAQ,EAAEC,UAAU,EAAcC,KAAK,QAAQ,6BAA6B;AAEnG,SAASC,MAAMC,IAAI,QAAQ,OAAO;AAClC,SAASC,QAAQ,EAAEC,SAAS,EAAEC,QAAQ,EAAEC,MAAM,EAAEC,EAAE,QAAQ,SAAS;AAGnEF,SAAS,qBAAqB;IAE5B,IAAIG;IACJ,IAAIC;IACJ,IAAIC;IACJ,IAAIC;IACJ,IAAIC;IACJ,IAAIC;IAEJT,UAAU;QACR,MAAMU,UAAU,MAAMf,WAAWN;QACjCe,UAAUM,QAAQN,OAAO;QACzBC,SAASK,QAAQL,MAAM;QACvBC,YAAY,MAAMD,OAAOM,QAAQ,CAAC,SAASf,MAAMgB,KAAK;QACtDL,eAAe,MAAMF,OAAOM,QAAQ,CAAC,aAAajB,SAASmB,IAAI;QAC/DL,SAASZ,MAAMkB,GAAG,CAACN,MAAM;QACzBC,aAAa,MAAMlB,cAAcc,QAAQC;IAC3C;IAEAP,SAAS;QACP,MAAMN;IACR;IAEAQ,SAAS,gBAAgB;QACvB,IAAIc;QACJ,IAAIC;QAEJhB,UAAU;YACRe,aAAaX,QAAQf,MAAM,CAAC4B,WAAW,CAACC,IAAI,CAACC,CAAAA,IAAKA,EAAEC,IAAI,KAAK9B,gBAAgB8B,IAAI;QACnF;QAEAjB,GAAG,uCAAuC;YACxCa,QAAQD,WAAWM,MAAM,CAACH,IAAI,CAAC,CAACF,QAAUA,MAAMM,IAAI,KAAK,YAAYN,MAAMO,IAAI,KAAK;YACpFrB,OAAOc,OAAOQ,WAAW;QAC3B;IACF;IAEAvB,SAAS,qBAAqB;QAC5B,IAAIwB;QACJ,IAAIC;QAEJ1B,UAAU;YACR0B,WAAW;gBACTC,KAAK7B;gBACL8B,OAAO9B;gBACP+B,SAAS;oBACP;wBACEC,WAAWtC,gBAAgB4B,IAAI;wBAC/BW,aAAajC;oBACf;iBACD;YACH;YAEC,CAAA,EAAEkC,KAAKP,SAAS,EAAE,GAAG,MAAMpB,OAAO4B,IAAI,CAAC,CAAC,CAAC,EAAE3C,gBAAgB8B,IAAI,CAAC,QAAQ,EAAEX,WAAWyB,aAAa,CAAC,CAAC,EAAER,UAAU;gBAC/GS,SAAS;oBACPC,eAAe,CAAC,IAAI,EAAE9B,UAAU,CAAC;gBACnC;YACF,EAAC;QACH;QAEAH,GAAG,uCAAuC;YACxC,MAAM,CAACkC,MAAM,GAAGZ,UAAUI,OAAO;YACjC3B,OAAOmC,OAAOb,WAAW;QAC3B;IACF;AACF"}
@@ -0,0 +1,68 @@
1
+ import { isEntity, isMedia } from '@websolutespa/bom-core';
2
+ import { deepMerge, hasUnresolvedRelations } from '@websolutespa/payload-utils';
3
+ import { richTextToHTMLAsync } from '../utils/richText';
4
+ const RICH_TEXT_AFTER_READ_ENABLED = true;
5
+ export function getMedia(payload) {
6
+ return async (node)=>{
7
+ if (isMedia(node.value)) {
8
+ return node.value;
9
+ } else if (isEntity(node.value)) {
10
+ const fallbackLng = payload.config?.i18n.fallbackLanguage;
11
+ const media = await payload.findByID({
12
+ collection: node.relationTo,
13
+ id: node.value.id,
14
+ fallbackLocale: typeof fallbackLng === 'string' ? fallbackLng : undefined,
15
+ overrideAccess: true
16
+ });
17
+ return media;
18
+ }
19
+ return null;
20
+ };
21
+ }
22
+ export const richTextAfterReadHook = async (args)=>{
23
+ const { data, findMany, context, operation, originalDoc, req, siblingData, value } = args;
24
+ if (value && (req.query?.richText === 'false' || typeof req.context.market === 'string' && typeof req.context.locale === 'string' && req.context.richText !== true)) {
25
+ // console.log('richTextAfterReadHook', operation, value);
26
+ if (hasUnresolvedRelations(value)) {
27
+ return value;
28
+ }
29
+ return await richTextToHTMLAsync(value, req.payload.config, context || req.context);
30
+ }
31
+ return value;
32
+ };
33
+ export const RichTextDefaults = {
34
+ name: 'richText',
35
+ type: 'richText',
36
+ localized: true
37
+ };
38
+ export const withRichText = (options = {})=>{
39
+ const field = deepMerge(RichTextDefaults, options);
40
+ if (RICH_TEXT_AFTER_READ_ENABLED) {
41
+ field.hooks = {
42
+ ...field.hooks,
43
+ afterRead: [
44
+ ...field.hooks?.afterRead || [],
45
+ richTextAfterReadHook
46
+ ]
47
+ };
48
+ }
49
+ return field;
50
+ };
51
+ export const withRichTextRequired = (options = {})=>{
52
+ const field = deepMerge({
53
+ ...RichTextDefaults,
54
+ required: true
55
+ }, options);
56
+ if (RICH_TEXT_AFTER_READ_ENABLED) {
57
+ field.hooks = {
58
+ ...field.hooks,
59
+ afterRead: [
60
+ ...field.hooks?.afterRead || [],
61
+ richTextAfterReadHook
62
+ ]
63
+ };
64
+ }
65
+ return field;
66
+ };
67
+
68
+ //# sourceMappingURL=withRichText.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/core/fields/withRichText.ts"],"sourcesContent":["import { IMedia, isEntity, isMedia } from '@websolutespa/bom-core';\r\nimport { deepMerge, hasUnresolvedRelations, UploadNode } from '@websolutespa/payload-utils';\r\nimport { FieldHook, Payload, RichTextField } from 'payload';\r\nimport { richTextToHTMLAsync } from '../utils/richText';\r\n\r\nconst RICH_TEXT_AFTER_READ_ENABLED = true;\r\n\r\nexport function getMedia(payload: Payload) {\r\n return async (node: UploadNode): Promise<IMedia | null> => {\r\n if (isMedia(node.value)) {\r\n return node.value;\r\n } else if (isEntity(node.value)) {\r\n const fallbackLng = payload.config?.i18n.fallbackLanguage;\r\n const media = await payload.findByID({\r\n collection: node.relationTo,\r\n id: node.value.id,\r\n fallbackLocale: typeof fallbackLng === 'string' ? fallbackLng : undefined,\r\n overrideAccess: true,\r\n }) as IMedia;\r\n return media;\r\n }\r\n return null;\r\n };\r\n}\r\n\r\nexport type WithRichTextProps = (Omit<RichTextField, 'type' | 'name'> & { name?: string });\r\nexport type WithRichText = WithRichTextProps & { type: 'withRichText' };\r\n\r\nexport const richTextAfterReadHook: FieldHook = async (args) => {\r\n const {\r\n data, // Typed as a Partial of your ExampleDocumentType\r\n findMany,\r\n context,\r\n operation,\r\n originalDoc, // Typed as ExampleDocumentType\r\n req,\r\n siblingData, // Typed as a Partial of SiblingDataType\r\n value, // Typed as `string` as shown above\r\n } = args;\r\n if (\r\n value && (\r\n req.query?.richText === 'false' ||\r\n (\r\n typeof req.context.market === 'string' &&\r\n typeof req.context.locale === 'string' &&\r\n req.context.richText !== true\r\n )\r\n )\r\n ) {\r\n // console.log('richTextAfterReadHook', operation, value);\r\n if (hasUnresolvedRelations(value)) {\r\n return value;\r\n }\r\n return await richTextToHTMLAsync(value, req.payload.config, context || req.context);\r\n }\r\n return value;\r\n};\r\n\r\nexport const RichTextDefaults: RichTextField = {\r\n name: 'richText',\r\n type: 'richText',\r\n localized: true,\r\n};\r\n\r\nexport const withRichText = (options: Partial<RichTextField> = {}): RichTextField => {\r\n const field = deepMerge<RichTextField>(RichTextDefaults, options);\r\n if (RICH_TEXT_AFTER_READ_ENABLED) {\r\n field.hooks = {\r\n ...field.hooks,\r\n afterRead: [\r\n ...(field.hooks?.afterRead || []),\r\n richTextAfterReadHook,\r\n ],\r\n };\r\n }\r\n return field;\r\n};\r\n\r\nexport const withRichTextRequired = (options: Partial<RichTextField> = {}): RichTextField => {\r\n const field = deepMerge<RichTextField>({\r\n ...RichTextDefaults,\r\n required: true,\r\n }, options);\r\n if (RICH_TEXT_AFTER_READ_ENABLED) {\r\n field.hooks = {\r\n ...field.hooks,\r\n afterRead: [\r\n ...(field.hooks?.afterRead || []),\r\n richTextAfterReadHook,\r\n ],\r\n };\r\n }\r\n return field;\r\n};\r\n"],"names":["isEntity","isMedia","deepMerge","hasUnresolvedRelations","richTextToHTMLAsync","RICH_TEXT_AFTER_READ_ENABLED","getMedia","payload","node","value","fallbackLng","config","i18n","fallbackLanguage","media","findByID","collection","relationTo","id","fallbackLocale","undefined","overrideAccess","richTextAfterReadHook","args","data","findMany","context","operation","originalDoc","req","siblingData","query","richText","market","locale","RichTextDefaults","name","type","localized","withRichText","options","field","hooks","afterRead","withRichTextRequired","required"],"mappings":"AAAA,SAAiBA,QAAQ,EAAEC,OAAO,QAAQ,yBAAyB;AACnE,SAASC,SAAS,EAAEC,sBAAsB,QAAoB,8BAA8B;AAE5F,SAASC,mBAAmB,QAAQ,oBAAoB;AAExD,MAAMC,+BAA+B;AAErC,OAAO,SAASC,SAASC,OAAgB;IACvC,OAAO,OAAOC;QACZ,IAAIP,QAAQO,KAAKC,KAAK,GAAG;YACvB,OAAOD,KAAKC,KAAK;QACnB,OAAO,IAAIT,SAASQ,KAAKC,KAAK,GAAG;YAC/B,MAAMC,cAAcH,QAAQI,MAAM,EAAEC,KAAKC;YACzC,MAAMC,QAAQ,MAAMP,QAAQQ,QAAQ,CAAC;gBACnCC,YAAYR,KAAKS,UAAU;gBAC3BC,IAAIV,KAAKC,KAAK,CAACS,EAAE;gBACjBC,gBAAgB,OAAOT,gBAAgB,WAAWA,cAAcU;gBAChEC,gBAAgB;YAClB;YACA,OAAOP;QACT;QACA,OAAO;IACT;AACF;AAKA,OAAO,MAAMQ,wBAAmC,OAAOC;IACrD,MAAM,EACJC,IAAI,EACJC,QAAQ,EACRC,OAAO,EACPC,SAAS,EACTC,WAAW,EACXC,GAAG,EACHC,WAAW,EACXrB,KAAK,EACN,GAAGc;IACJ,IACEd,SACEoB,CAAAA,IAAIE,KAAK,EAAEC,aAAa,WAEtB,OAAOH,IAAIH,OAAO,CAACO,MAAM,KAAK,YAC9B,OAAOJ,IAAIH,OAAO,CAACQ,MAAM,KAAK,YAC9BL,IAAIH,OAAO,CAACM,QAAQ,KAAK,IAC3B,GAEF;QACA,0DAA0D;QAC1D,IAAI7B,uBAAuBM,QAAQ;YACjC,OAAOA;QACT;QACA,OAAO,MAAML,oBAAoBK,OAAOoB,IAAItB,OAAO,CAACI,MAAM,EAAEe,WAAWG,IAAIH,OAAO;IACpF;IACA,OAAOjB;AACT,EAAE;AAEF,OAAO,MAAM0B,mBAAkC;IAC7CC,MAAM;IACNC,MAAM;IACNC,WAAW;AACb,EAAE;AAEF,OAAO,MAAMC,eAAe,CAACC,UAAkC,CAAC,CAAC;IAC/D,MAAMC,QAAQvC,UAAyBiC,kBAAkBK;IACzD,IAAInC,8BAA8B;QAChCoC,MAAMC,KAAK,GAAG;YACZ,GAAGD,MAAMC,KAAK;YACdC,WAAW;mBACLF,MAAMC,KAAK,EAAEC,aAAa,EAAE;gBAChCrB;aACD;QACH;IACF;IACA,OAAOmB;AACT,EAAE;AAEF,OAAO,MAAMG,uBAAuB,CAACJ,UAAkC,CAAC,CAAC;IACvE,MAAMC,QAAQvC,UAAyB;QACrC,GAAGiC,gBAAgB;QACnBU,UAAU;IACZ,GAAGL;IACH,IAAInC,8BAA8B;QAChCoC,MAAMC,KAAK,GAAG;YACZ,GAAGD,MAAMC,KAAK;YACdC,WAAW;mBACLF,MAAMC,KAAK,EAAEC,aAAa,EAAE;gBAChCrB;aACD;QACH;IACF;IACA,OAAOmB;AACT,EAAE"}
@@ -0,0 +1,72 @@
1
+ import { config, FieldCollection, getTestConfig } from '@/test';
2
+ import { clearContext, endUsers, getContext, users } from '@websolutespa/test/payload';
3
+ import { v4 as uuid } from 'uuid';
4
+ import { afterAll, beforeAll, describe, expect, it } from 'vitest';
5
+ describe('withRichText field', ()=>{
6
+ let payload;
7
+ let client;
8
+ let userToken;
9
+ let endUserToken;
10
+ let apiKey;
11
+ let testConfig;
12
+ beforeAll(async ()=>{
13
+ const context = await getContext(config);
14
+ payload = context.payload;
15
+ client = context.client;
16
+ userToken = await client.getToken('users', users.admin);
17
+ endUserToken = await client.getToken('end_users', endUsers.user);
18
+ apiKey = users.api.apiKey;
19
+ testConfig = await getTestConfig(client, userToken);
20
+ });
21
+ afterAll(async ()=>{
22
+ await clearContext();
23
+ });
24
+ describe('Field config', ()=>{
25
+ let collection;
26
+ let field;
27
+ beforeAll(async ()=>{
28
+ collection = payload.config.collections.find((x)=>x.slug === FieldCollection.slug);
29
+ });
30
+ it('should have a field named "richText" of type "richText"', ()=>{
31
+ field = collection.fields.find((field)=>field.type === 'richText' && field.name === 'richText');
32
+ expect(field).toBeDefined();
33
+ });
34
+ it('should be localized', ()=>{
35
+ expect(field.localized).toEqual(true);
36
+ });
37
+ it('should have a "afterRead" hook defined', ()=>{
38
+ expect(field.hooks.afterRead).toBeDefined();
39
+ });
40
+ });
41
+ describe('Document creation', ()=>{
42
+ let fieldsDoc;
43
+ let postData;
44
+ beforeAll(async ()=>{
45
+ postData = {
46
+ _id: uuid(),
47
+ title: uuid(),
48
+ richText: [
49
+ {
50
+ type: 'text',
51
+ text: uuid()
52
+ }
53
+ ]
54
+ };
55
+ const { doc } = await client.post(`/${FieldCollection.slug}?market=${testConfig.documents.market.id}&locale=${testConfig.defaultLocale}`, postData, {
56
+ headers: {
57
+ Authorization: `JWT ${userToken}`
58
+ }
59
+ });
60
+ fieldsDoc = await client.get(`/${FieldCollection.slug}/${doc.id}?market=${testConfig.documents.market.id}&locale=${testConfig.defaultLocale}`, {
61
+ headers: {
62
+ Authorization: `users API-Key ${users.api.apiKey}`
63
+ }
64
+ });
65
+ });
66
+ it('should have a valid "richText" field', async ()=>{
67
+ expect(fieldsDoc.richText).toEqual(`<span>${postData.richText[0].text}</span>`);
68
+ });
69
+ });
70
+ });
71
+
72
+ //# sourceMappingURL=withRichText.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/core/fields/withRichText.test.ts"],"sourcesContent":["import { config, FieldCollection, getTestConfig, TestConfig } from '@/test';\r\nimport { clearContext, endUsers, getContext, RestClient, users } from '@websolutespa/test/payload';\r\nimport { Payload, RichTextField, SanitizedCollectionConfig } from 'payload';\r\nimport { v4 as uuid } from 'uuid';\r\nimport { afterAll, beforeAll, describe, expect, it } from 'vitest';\r\n\r\ndescribe('withRichText field', () => {\r\n\r\n let payload: Payload;\r\n let client: RestClient;\r\n let userToken: string;\r\n let endUserToken: string;\r\n let apiKey: string;\r\n let testConfig: TestConfig;\r\n\r\n beforeAll(async () => {\r\n const context = await getContext(config);\r\n payload = context.payload;\r\n client = context.client;\r\n userToken = await client.getToken('users', users.admin);\r\n endUserToken = await client.getToken('end_users', endUsers.user);\r\n apiKey = users.api.apiKey;\r\n testConfig = await getTestConfig(client, userToken);\r\n });\r\n\r\n afterAll(async () => {\r\n await clearContext();\r\n });\r\n\r\n describe('Field config', () => {\r\n let collection: SanitizedCollectionConfig;\r\n let field: RichTextField;\r\n\r\n beforeAll(async () => {\r\n collection = payload.config.collections.find(x => x.slug === FieldCollection.slug)!;\r\n });\r\n\r\n it('should have a field named \"richText\" of type \"richText\"', () => {\r\n field = collection.fields.find(field => field.type === 'richText' && field.name === 'richText') as RichTextField;\r\n expect(field).toBeDefined();\r\n });\r\n\r\n it('should be localized', () => {\r\n expect(field.localized).toEqual(true);\r\n });\r\n\r\n it('should have a \"afterRead\" hook defined', () => {\r\n expect(field.hooks!.afterRead).toBeDefined();\r\n });\r\n });\r\n\r\n describe('Document creation', () => {\r\n let fieldsDoc: any;\r\n let postData: any;\r\n\r\n beforeAll(async () => {\r\n postData = {\r\n _id: uuid(),\r\n title: uuid(),\r\n richText: [{\r\n type: 'text',\r\n text: uuid(),\r\n }],\r\n };\r\n const { doc } = await client.post(`/${FieldCollection.slug}?market=${testConfig.documents.market.id}&locale=${testConfig.defaultLocale}`, postData, {\r\n headers: {\r\n Authorization: `JWT ${userToken}`,\r\n },\r\n });\r\n fieldsDoc = await client.get(`/${FieldCollection.slug}/${doc.id}?market=${testConfig.documents.market.id}&locale=${testConfig.defaultLocale}`, {\r\n headers: {\r\n Authorization: `users API-Key ${users.api.apiKey}`,\r\n },\r\n });\r\n });\r\n\r\n it('should have a valid \"richText\" field', async () => {\r\n expect(fieldsDoc.richText).toEqual(`<span>${postData.richText[0].text}</span>`);\r\n });\r\n });\r\n});\r\n"],"names":["config","FieldCollection","getTestConfig","clearContext","endUsers","getContext","users","v4","uuid","afterAll","beforeAll","describe","expect","it","payload","client","userToken","endUserToken","apiKey","testConfig","context","getToken","admin","user","api","collection","field","collections","find","x","slug","fields","type","name","toBeDefined","localized","toEqual","hooks","afterRead","fieldsDoc","postData","_id","title","richText","text","doc","post","documents","market","id","defaultLocale","headers","Authorization","get"],"mappings":"AAAA,SAASA,MAAM,EAAEC,eAAe,EAAEC,aAAa,QAAoB,SAAS;AAC5E,SAASC,YAAY,EAAEC,QAAQ,EAAEC,UAAU,EAAcC,KAAK,QAAQ,6BAA6B;AAEnG,SAASC,MAAMC,IAAI,QAAQ,OAAO;AAClC,SAASC,QAAQ,EAAEC,SAAS,EAAEC,QAAQ,EAAEC,MAAM,EAAEC,EAAE,QAAQ,SAAS;AAEnEF,SAAS,sBAAsB;IAE7B,IAAIG;IACJ,IAAIC;IACJ,IAAIC;IACJ,IAAIC;IACJ,IAAIC;IACJ,IAAIC;IAEJT,UAAU;QACR,MAAMU,UAAU,MAAMf,WAAWL;QACjCc,UAAUM,QAAQN,OAAO;QACzBC,SAASK,QAAQL,MAAM;QACvBC,YAAY,MAAMD,OAAOM,QAAQ,CAAC,SAASf,MAAMgB,KAAK;QACtDL,eAAe,MAAMF,OAAOM,QAAQ,CAAC,aAAajB,SAASmB,IAAI;QAC/DL,SAASZ,MAAMkB,GAAG,CAACN,MAAM;QACzBC,aAAa,MAAMjB,cAAca,QAAQC;IAC3C;IAEAP,SAAS;QACP,MAAMN;IACR;IAEAQ,SAAS,gBAAgB;QACvB,IAAIc;QACJ,IAAIC;QAEJhB,UAAU;YACRe,aAAaX,QAAQd,MAAM,CAAC2B,WAAW,CAACC,IAAI,CAACC,CAAAA,IAAKA,EAAEC,IAAI,KAAK7B,gBAAgB6B,IAAI;QACnF;QAEAjB,GAAG,2DAA2D;YAC5Da,QAAQD,WAAWM,MAAM,CAACH,IAAI,CAACF,CAAAA,QAASA,MAAMM,IAAI,KAAK,cAAcN,MAAMO,IAAI,KAAK;YACpFrB,OAAOc,OAAOQ,WAAW;QAC3B;QAEArB,GAAG,uBAAuB;YACxBD,OAAOc,MAAMS,SAAS,EAAEC,OAAO,CAAC;QAClC;QAEAvB,GAAG,0CAA0C;YAC3CD,OAAOc,MAAMW,KAAK,CAAEC,SAAS,EAAEJ,WAAW;QAC5C;IACF;IAEAvB,SAAS,qBAAqB;QAC5B,IAAI4B;QACJ,IAAIC;QAEJ9B,UAAU;YACR8B,WAAW;gBACTC,KAAKjC;gBACLkC,OAAOlC;gBACPmC,UAAU;oBAAC;wBACTX,MAAM;wBACNY,MAAMpC;oBACR;iBAAE;YACJ;YACA,MAAM,EAAEqC,GAAG,EAAE,GAAG,MAAM9B,OAAO+B,IAAI,CAAC,CAAC,CAAC,EAAE7C,gBAAgB6B,IAAI,CAAC,QAAQ,EAAEX,WAAW4B,SAAS,CAACC,MAAM,CAACC,EAAE,CAAC,QAAQ,EAAE9B,WAAW+B,aAAa,CAAC,CAAC,EAAEV,UAAU;gBAClJW,SAAS;oBACPC,eAAe,CAAC,IAAI,EAAEpC,UAAU,CAAC;gBACnC;YACF;YACAuB,YAAY,MAAMxB,OAAOsC,GAAG,CAAC,CAAC,CAAC,EAAEpD,gBAAgB6B,IAAI,CAAC,CAAC,EAAEe,IAAII,EAAE,CAAC,QAAQ,EAAE9B,WAAW4B,SAAS,CAACC,MAAM,CAACC,EAAE,CAAC,QAAQ,EAAE9B,WAAW+B,aAAa,CAAC,CAAC,EAAE;gBAC7IC,SAAS;oBACPC,eAAe,CAAC,cAAc,EAAE9C,MAAMkB,GAAG,CAACN,MAAM,CAAC,CAAC;gBACpD;YACF;QACF;QAEAL,GAAG,wCAAwC;YACzCD,OAAO2B,UAAUI,QAAQ,EAAEP,OAAO,CAAC,CAAC,MAAM,EAAEI,SAASG,QAAQ,CAAC,EAAE,CAACC,IAAI,CAAC,OAAO,CAAC;QAChF;IACF;AACF"}
@@ -0,0 +1,27 @@
1
+ import { deepMerge } from '@websolutespa/payload-utils';
2
+ import { options } from '../../options';
3
+ import { isAdmin } from '../access';
4
+ export const UserRolesDefaults = {
5
+ name: 'roles',
6
+ type: 'select',
7
+ hasMany: true,
8
+ options: [],
9
+ required: true,
10
+ access: {
11
+ create: isAdmin,
12
+ update: isAdmin
13
+ }
14
+ };
15
+ export const withRoles = ({ roles, ...fieldOptions } = {})=>{
16
+ const field = UserRolesDefaults;
17
+ roles = roles || options.rolesList;
18
+ field.options = Object.entries(options.roles).filter(([k, v])=>{
19
+ return roles.includes(v);
20
+ }).map(([k, v])=>({
21
+ value: v,
22
+ label: k
23
+ }));
24
+ return deepMerge(field, fieldOptions);
25
+ };
26
+
27
+ //# sourceMappingURL=withRoles.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/core/fields/withRoles.ts"],"sourcesContent":["import { deepMerge } from '@websolutespa/payload-utils';\r\nimport { SelectField } from 'payload';\r\nimport { options } from '../../options';\r\nimport { BowlRole } from '../../types';\r\nimport { isAdmin } from '../access';\r\n\r\nexport type WithRolesProps = (Omit<SelectField, 'type' | 'name' | 'options'> & {\r\n name?: string;\r\n roles?: BowlRole[];\r\n});\r\nexport type WithRoles = WithRolesProps & { type: 'withRoles' };\r\n\r\nexport const UserRolesDefaults: SelectField = {\r\n name: 'roles',\r\n type: 'select',\r\n hasMany: true,\r\n options: [],\r\n required: true,\r\n access: {\r\n create: isAdmin,\r\n update: isAdmin,\r\n },\r\n};\r\n\r\nexport const withRoles = ({ roles, ...fieldOptions }: WithRolesProps = {}): SelectField => {\r\n const field = UserRolesDefaults;\r\n roles = roles || options.rolesList;\r\n field.options = Object.entries(options.roles).filter(([k, v]) => {\r\n return roles.includes(v);\r\n }).map(([k, v]) => ({\r\n value: v,\r\n label: k,\r\n }));\r\n return deepMerge<SelectField>(field, fieldOptions as Partial<SelectField>);\r\n};\r\n"],"names":["deepMerge","options","isAdmin","UserRolesDefaults","name","type","hasMany","required","access","create","update","withRoles","roles","fieldOptions","field","rolesList","Object","entries","filter","k","v","includes","map","value","label"],"mappings":"AAAA,SAASA,SAAS,QAAQ,8BAA8B;AAExD,SAASC,OAAO,QAAQ,gBAAgB;AAExC,SAASC,OAAO,QAAQ,YAAY;AAQpC,OAAO,MAAMC,oBAAiC;IAC5CC,MAAM;IACNC,MAAM;IACNC,SAAS;IACTL,SAAS,EAAE;IACXM,UAAU;IACVC,QAAQ;QACNC,QAAQP;QACRQ,QAAQR;IACV;AACF,EAAE;AAEF,OAAO,MAAMS,YAAY,CAAC,EAAEC,KAAK,EAAE,GAAGC,cAA8B,GAAG,CAAC,CAAC;IACvE,MAAMC,QAAQX;IACdS,QAAQA,SAASX,QAAQc,SAAS;IAClCD,MAAMb,OAAO,GAAGe,OAAOC,OAAO,CAAChB,QAAQW,KAAK,EAAEM,MAAM,CAAC,CAAC,CAACC,GAAGC,EAAE;QAC1D,OAAOR,MAAMS,QAAQ,CAACD;IACxB,GAAGE,GAAG,CAAC,CAAC,CAACH,GAAGC,EAAE,GAAM,CAAA;YAClBG,OAAOH;YACPI,OAAOL;QACT,CAAA;IACA,OAAOnB,UAAuBc,OAAOD;AACvC,EAAE"}
@@ -0,0 +1,49 @@
1
+ import { config } from '@/test';
2
+ import { clearContext, endUsers, getContext, users } from '@websolutespa/test/payload';
3
+ import { optionIsObject } from 'payload/shared';
4
+ import { afterAll, beforeAll, describe, expect, it } from 'vitest';
5
+ import { options } from '../../options';
6
+ // todo: update this test to match the new implementation
7
+ describe('withRoles field', ()=>{
8
+ let payload;
9
+ let client;
10
+ let userToken;
11
+ let endUserToken;
12
+ let apiKey;
13
+ beforeAll(async ()=>{
14
+ const context = await getContext(config);
15
+ payload = context.payload;
16
+ client = context.client;
17
+ userToken = await client.getToken('users', users.admin);
18
+ endUserToken = await client.getToken('end_users', endUsers.user);
19
+ apiKey = users.api.apiKey;
20
+ });
21
+ afterAll(async ()=>{
22
+ await clearContext();
23
+ });
24
+ describe('Field config', ()=>{
25
+ let collection;
26
+ let field;
27
+ beforeAll(async ()=>{
28
+ collection = payload.config.collections.find((collection)=>collection.slug === options.slug.users);
29
+ });
30
+ it('should have a field named "roles" of type "select"', ()=>{
31
+ field = collection.fields.find((field)=>field.type === 'select' && field.name === 'roles');
32
+ expect(field).toBeDefined();
33
+ });
34
+ it('should be required', ()=>{
35
+ expect(field.required).toEqual(true);
36
+ });
37
+ it('options should match the roles defined in options.rolesUser', ()=>{
38
+ Object.entries(options.roles).forEach(([k, v])=>{
39
+ if (options.rolesUser.includes(v)) {
40
+ const option = field.options.find((x)=>optionIsObject(x) && x.value === v);
41
+ expect(option).toBeDefined();
42
+ expect(option.label).toEqual(k);
43
+ }
44
+ });
45
+ });
46
+ });
47
+ });
48
+
49
+ //# sourceMappingURL=withRoles.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/core/fields/withRoles.test.ts"],"sourcesContent":["import { config } from '@/test';\r\nimport { clearContext, endUsers, getContext, RestClient, users } from '@websolutespa/test/payload';\r\nimport { OptionObject, Payload, SanitizedCollectionConfig, SelectField } from 'payload';\r\nimport { optionIsObject } from 'payload/shared';\r\nimport { afterAll, beforeAll, describe, expect, it } from 'vitest';\r\nimport { options } from '../../options';\r\n\r\n// todo: update this test to match the new implementation\r\n\r\ndescribe('withRoles field', () => {\r\n\r\n let payload: Payload;\r\n let client: RestClient;\r\n let userToken: string;\r\n let endUserToken: string;\r\n let apiKey: string;\r\n\r\n beforeAll(async () => {\r\n const context = await getContext(config);\r\n payload = context.payload;\r\n client = context.client;\r\n userToken = await client.getToken('users', users.admin);\r\n endUserToken = await client.getToken('end_users', endUsers.user);\r\n apiKey = users.api.apiKey;\r\n });\r\n\r\n afterAll(async () => {\r\n await clearContext();\r\n });\r\n\r\n describe('Field config', () => {\r\n let collection: SanitizedCollectionConfig;\r\n let field: SelectField;\r\n\r\n beforeAll(async () => {\r\n collection = payload.config.collections.find(collection => collection.slug === options.slug.users)!;\r\n });\r\n\r\n it('should have a field named \"roles\" of type \"select\"', () => {\r\n field = collection.fields.find(field => field.type === 'select' && field.name === 'roles') as SelectField;\r\n expect(field).toBeDefined();\r\n });\r\n\r\n it('should be required', () => {\r\n expect(field.required).toEqual(true);\r\n });\r\n\r\n it('options should match the roles defined in options.rolesUser', () => {\r\n Object.entries(options.roles).forEach(([k, v]) => {\r\n if (options.rolesUser.includes(v)) {\r\n const option = field.options.find(x => optionIsObject(x) && x.value === v) as OptionObject;\r\n expect(option).toBeDefined();\r\n expect(option.label).toEqual(k);\r\n }\r\n });\r\n });\r\n });\r\n});\r\n"],"names":["config","clearContext","endUsers","getContext","users","optionIsObject","afterAll","beforeAll","describe","expect","it","options","payload","client","userToken","endUserToken","apiKey","context","getToken","admin","user","api","collection","field","collections","find","slug","fields","type","name","toBeDefined","required","toEqual","Object","entries","roles","forEach","k","v","rolesUser","includes","option","x","value","label"],"mappings":"AAAA,SAASA,MAAM,QAAQ,SAAS;AAChC,SAASC,YAAY,EAAEC,QAAQ,EAAEC,UAAU,EAAcC,KAAK,QAAQ,6BAA6B;AAEnG,SAASC,cAAc,QAAQ,iBAAiB;AAChD,SAASC,QAAQ,EAAEC,SAAS,EAAEC,QAAQ,EAAEC,MAAM,EAAEC,EAAE,QAAQ,SAAS;AACnE,SAASC,OAAO,QAAQ,gBAAgB;AAExC,yDAAyD;AAEzDH,SAAS,mBAAmB;IAE1B,IAAII;IACJ,IAAIC;IACJ,IAAIC;IACJ,IAAIC;IACJ,IAAIC;IAEJT,UAAU;QACR,MAAMU,UAAU,MAAMd,WAAWH;QACjCY,UAAUK,QAAQL,OAAO;QACzBC,SAASI,QAAQJ,MAAM;QACvBC,YAAY,MAAMD,OAAOK,QAAQ,CAAC,SAASd,MAAMe,KAAK;QACtDJ,eAAe,MAAMF,OAAOK,QAAQ,CAAC,aAAahB,SAASkB,IAAI;QAC/DJ,SAASZ,MAAMiB,GAAG,CAACL,MAAM;IAC3B;IAEAV,SAAS;QACP,MAAML;IACR;IAEAO,SAAS,gBAAgB;QACvB,IAAIc;QACJ,IAAIC;QAEJhB,UAAU;YACRe,aAAaV,QAAQZ,MAAM,CAACwB,WAAW,CAACC,IAAI,CAACH,CAAAA,aAAcA,WAAWI,IAAI,KAAKf,QAAQe,IAAI,CAACtB,KAAK;QACnG;QAEAM,GAAG,sDAAsD;YACvDa,QAAQD,WAAWK,MAAM,CAACF,IAAI,CAACF,CAAAA,QAASA,MAAMK,IAAI,KAAK,YAAYL,MAAMM,IAAI,KAAK;YAClFpB,OAAOc,OAAOO,WAAW;QAC3B;QAEApB,GAAG,sBAAsB;YACvBD,OAAOc,MAAMQ,QAAQ,EAAEC,OAAO,CAAC;QACjC;QAEAtB,GAAG,+DAA+D;YAChEuB,OAAOC,OAAO,CAACvB,QAAQwB,KAAK,EAAEC,OAAO,CAAC,CAAC,CAACC,GAAGC,EAAE;gBAC3C,IAAI3B,QAAQ4B,SAAS,CAACC,QAAQ,CAACF,IAAI;oBACjC,MAAMG,SAASlB,MAAMZ,OAAO,CAACc,IAAI,CAACiB,CAAAA,IAAKrC,eAAeqC,MAAMA,EAAEC,KAAK,KAAKL;oBACxE7B,OAAOgC,QAAQX,WAAW;oBAC1BrB,OAAOgC,OAAOG,KAAK,EAAEZ,OAAO,CAACK;gBAC/B;YACF;QACF;IACF;AACF"}
@@ -0,0 +1,23 @@
1
+ import { deepMerge } from '@websolutespa/payload-utils';
2
+ export const SelectDefaults = {
3
+ name: 'select',
4
+ type: 'select',
5
+ hasMany: false,
6
+ admin: {
7
+ isClearable: true
8
+ },
9
+ options: []
10
+ };
11
+ export const withSelect = (options = {})=>{
12
+ const field = deepMerge(SelectDefaults, options);
13
+ return field;
14
+ };
15
+ export const withSelectRequired = (options = {})=>{
16
+ const field = deepMerge({
17
+ ...SelectDefaults,
18
+ required: true
19
+ }, options);
20
+ return field;
21
+ };
22
+
23
+ //# sourceMappingURL=withSelect.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/core/fields/withSelect.ts"],"sourcesContent":["import { deepMerge } from '@websolutespa/payload-utils';\r\nimport { SelectField } from 'payload';\r\n\r\nexport type WithSelectProps = (Omit<SelectField, 'type' | 'name'> & { name?: string });\r\nexport type WithSelect = WithSelectProps & { type: 'withSelect' };\r\n\r\nexport const SelectDefaults: SelectField = {\r\n name: 'select',\r\n type: 'select',\r\n hasMany: false,\r\n admin: {\r\n isClearable: true,\r\n },\r\n options: [],\r\n};\r\n\r\nexport const withSelect = (options: Partial<WithSelectProps> = {}): SelectField => {\r\n const field = deepMerge<SelectField>(SelectDefaults, options as Partial<SelectField>);\r\n return field;\r\n};\r\n\r\nexport const withSelectRequired = (options: Partial<WithSelectProps> = {}): SelectField => {\r\n const field = deepMerge<SelectField>({\r\n ...SelectDefaults,\r\n required: true,\r\n }, options as Partial<SelectField>);\r\n return field;\r\n};\r\n"],"names":["deepMerge","SelectDefaults","name","type","hasMany","admin","isClearable","options","withSelect","field","withSelectRequired","required"],"mappings":"AAAA,SAASA,SAAS,QAAQ,8BAA8B;AAMxD,OAAO,MAAMC,iBAA8B;IACzCC,MAAM;IACNC,MAAM;IACNC,SAAS;IACTC,OAAO;QACLC,aAAa;IACf;IACAC,SAAS,EAAE;AACb,EAAE;AAEF,OAAO,MAAMC,aAAa,CAACD,UAAoC,CAAC,CAAC;IAC/D,MAAME,QAAQT,UAAuBC,gBAAgBM;IACrD,OAAOE;AACT,EAAE;AAEF,OAAO,MAAMC,qBAAqB,CAACH,UAAoC,CAAC,CAAC;IACvE,MAAME,QAAQT,UAAuB;QACnC,GAAGC,cAAc;QACjBU,UAAU;IACZ,GAAGJ;IACH,OAAOE;AACT,EAAE"}
@@ -0,0 +1,59 @@
1
+ import { config, FieldCollection, getTestConfig } from '@/test';
2
+ import { clearContext, endUsers, getContext, users } from '@websolutespa/test/payload';
3
+ import { v4 as uuid } from 'uuid';
4
+ import { afterAll, beforeAll, describe, expect, it } from 'vitest';
5
+ describe('withSelect field', ()=>{
6
+ let payload;
7
+ let client;
8
+ let userToken;
9
+ let endUserToken;
10
+ let apiKey;
11
+ let testConfig;
12
+ beforeAll(async ()=>{
13
+ const context = await getContext(config);
14
+ payload = context.payload;
15
+ client = context.client;
16
+ userToken = await client.getToken('users', users.admin);
17
+ endUserToken = await client.getToken('end_users', endUsers.user);
18
+ apiKey = users.api.apiKey;
19
+ testConfig = await getTestConfig(client, userToken);
20
+ });
21
+ afterAll(async ()=>{
22
+ await clearContext();
23
+ });
24
+ describe('Field config', ()=>{
25
+ let collection;
26
+ let field;
27
+ beforeAll(async ()=>{
28
+ collection = payload.config.collections.find((x)=>x.slug === FieldCollection.slug);
29
+ });
30
+ it('should have a field named "select" of type "select"', ()=>{
31
+ field = collection.fields.find((field)=>field.type === 'select' && field.name === 'select');
32
+ expect(field).toBeDefined();
33
+ });
34
+ it('should allow only one relation', ()=>{
35
+ expect(field.hasMany).toEqual(false);
36
+ });
37
+ });
38
+ describe('Document creation', ()=>{
39
+ let fieldsDoc;
40
+ let postData;
41
+ beforeAll(async ()=>{
42
+ postData = {
43
+ _id: uuid(),
44
+ title: uuid(),
45
+ select: 'with_select_option'
46
+ };
47
+ ({ doc: fieldsDoc } = await client.post(`/${FieldCollection.slug}?locale=${testConfig.defaultLocale}`, postData, {
48
+ headers: {
49
+ Authorization: `JWT ${userToken}`
50
+ }
51
+ }));
52
+ });
53
+ it('should have a valid "select" field', async ()=>{
54
+ expect(fieldsDoc.select).toEqual(postData.select);
55
+ });
56
+ });
57
+ });
58
+
59
+ //# sourceMappingURL=withSelect.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/core/fields/withSelect.test.ts"],"sourcesContent":["import { config, FieldCollection, getTestConfig, TestConfig } from '@/test';\r\nimport { clearContext, endUsers, getContext, RestClient, users } from '@websolutespa/test/payload';\r\nimport { Payload, SanitizedCollectionConfig, SelectField } from 'payload';\r\nimport { v4 as uuid } from 'uuid';\r\nimport { afterAll, beforeAll, describe, expect, it } from 'vitest';\r\n\r\ndescribe('withSelect field', () => {\r\n\r\n let payload: Payload;\r\n let client: RestClient;\r\n let userToken: string;\r\n let endUserToken: string;\r\n let apiKey: string;\r\n let testConfig: TestConfig;\r\n\r\n beforeAll(async () => {\r\n const context = await getContext(config);\r\n payload = context.payload;\r\n client = context.client;\r\n userToken = await client.getToken('users', users.admin);\r\n endUserToken = await client.getToken('end_users', endUsers.user);\r\n apiKey = users.api.apiKey;\r\n testConfig = await getTestConfig(client, userToken);\r\n });\r\n\r\n afterAll(async () => {\r\n await clearContext();\r\n });\r\n\r\n describe('Field config', () => {\r\n let collection: SanitizedCollectionConfig;\r\n let field: SelectField;\r\n\r\n beforeAll(async () => {\r\n collection = payload.config.collections.find(x => x.slug === FieldCollection.slug)!;\r\n });\r\n\r\n it('should have a field named \"select\" of type \"select\"', () => {\r\n field = collection.fields.find(field => field.type === 'select' && field.name === 'select') as SelectField;\r\n expect(field).toBeDefined();\r\n });\r\n\r\n it('should allow only one relation', () => {\r\n expect(field.hasMany).toEqual(false);\r\n });\r\n });\r\n\r\n describe('Document creation', () => {\r\n let fieldsDoc: any;\r\n let postData: any;\r\n\r\n beforeAll(async () => {\r\n postData = {\r\n _id: uuid(),\r\n title: uuid(),\r\n select: 'with_select_option',\r\n };\r\n\r\n ({ doc: fieldsDoc } = await client.post(`/${FieldCollection.slug}?locale=${testConfig.defaultLocale}`, postData, {\r\n headers: {\r\n Authorization: `JWT ${userToken}`,\r\n },\r\n }));\r\n });\r\n\r\n it('should have a valid \"select\" field', async () => {\r\n expect(fieldsDoc.select).toEqual(postData.select);\r\n });\r\n });\r\n});\r\n"],"names":["config","FieldCollection","getTestConfig","clearContext","endUsers","getContext","users","v4","uuid","afterAll","beforeAll","describe","expect","it","payload","client","userToken","endUserToken","apiKey","testConfig","context","getToken","admin","user","api","collection","field","collections","find","x","slug","fields","type","name","toBeDefined","hasMany","toEqual","fieldsDoc","postData","_id","title","select","doc","post","defaultLocale","headers","Authorization"],"mappings":"AAAA,SAASA,MAAM,EAAEC,eAAe,EAAEC,aAAa,QAAoB,SAAS;AAC5E,SAASC,YAAY,EAAEC,QAAQ,EAAEC,UAAU,EAAcC,KAAK,QAAQ,6BAA6B;AAEnG,SAASC,MAAMC,IAAI,QAAQ,OAAO;AAClC,SAASC,QAAQ,EAAEC,SAAS,EAAEC,QAAQ,EAAEC,MAAM,EAAEC,EAAE,QAAQ,SAAS;AAEnEF,SAAS,oBAAoB;IAE3B,IAAIG;IACJ,IAAIC;IACJ,IAAIC;IACJ,IAAIC;IACJ,IAAIC;IACJ,IAAIC;IAEJT,UAAU;QACR,MAAMU,UAAU,MAAMf,WAAWL;QACjCc,UAAUM,QAAQN,OAAO;QACzBC,SAASK,QAAQL,MAAM;QACvBC,YAAY,MAAMD,OAAOM,QAAQ,CAAC,SAASf,MAAMgB,KAAK;QACtDL,eAAe,MAAMF,OAAOM,QAAQ,CAAC,aAAajB,SAASmB,IAAI;QAC/DL,SAASZ,MAAMkB,GAAG,CAACN,MAAM;QACzBC,aAAa,MAAMjB,cAAca,QAAQC;IAC3C;IAEAP,SAAS;QACP,MAAMN;IACR;IAEAQ,SAAS,gBAAgB;QACvB,IAAIc;QACJ,IAAIC;QAEJhB,UAAU;YACRe,aAAaX,QAAQd,MAAM,CAAC2B,WAAW,CAACC,IAAI,CAACC,CAAAA,IAAKA,EAAEC,IAAI,KAAK7B,gBAAgB6B,IAAI;QACnF;QAEAjB,GAAG,uDAAuD;YACxDa,QAAQD,WAAWM,MAAM,CAACH,IAAI,CAACF,CAAAA,QAASA,MAAMM,IAAI,KAAK,YAAYN,MAAMO,IAAI,KAAK;YAClFrB,OAAOc,OAAOQ,WAAW;QAC3B;QAEArB,GAAG,kCAAkC;YACnCD,OAAOc,MAAMS,OAAO,EAAEC,OAAO,CAAC;QAChC;IACF;IAEAzB,SAAS,qBAAqB;QAC5B,IAAI0B;QACJ,IAAIC;QAEJ5B,UAAU;YACR4B,WAAW;gBACTC,KAAK/B;gBACLgC,OAAOhC;gBACPiC,QAAQ;YACV;YAEC,CAAA,EAAEC,KAAKL,SAAS,EAAE,GAAG,MAAMtB,OAAO4B,IAAI,CAAC,CAAC,CAAC,EAAE1C,gBAAgB6B,IAAI,CAAC,QAAQ,EAAEX,WAAWyB,aAAa,CAAC,CAAC,EAAEN,UAAU;gBAC/GO,SAAS;oBACPC,eAAe,CAAC,IAAI,EAAE9B,UAAU,CAAC;gBACnC;YACF,EAAC;QACH;QAEAH,GAAG,sCAAsC;YACvCD,OAAOyB,UAAUI,MAAM,EAAEL,OAAO,CAACE,SAASG,MAAM;QAClD;IACF;AACF"}
@@ -0,0 +1,19 @@
1
+ import { deepMerge } from '@websolutespa/payload-utils';
2
+ import { withSelect } from './withSelect';
3
+ export const SeoWeightDefaults = {
4
+ name: 'seoWeight',
5
+ options: [
6
+ 'h1',
7
+ 'h2',
8
+ 'h3',
9
+ 'h4',
10
+ 'h5',
11
+ 'h6'
12
+ ]
13
+ };
14
+ export const withSeoWeight = (options = {})=>{
15
+ const field = withSelect(deepMerge(SeoWeightDefaults, options));
16
+ return field;
17
+ };
18
+
19
+ //# sourceMappingURL=withSeoWeight.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/core/fields/withSeoWeight.ts"],"sourcesContent":["import { deepMerge } from '@websolutespa/payload-utils';\r\nimport { Option, SelectField } from 'payload';\r\nimport { withSelect } from './withSelect';\r\n\r\nexport type WithSeoWeightProps = (Omit<SelectField, 'type' | 'name' | 'options'> & {\r\n name?: string,\r\n options?: Option[]\r\n});\r\nexport type WithSeoWeight = WithSeoWeightProps & { type: 'withSeoWeight' };\r\n\r\nexport const SeoWeightDefaults = {\r\n name: 'seoWeight',\r\n options: ['h1', 'h2', 'h3', 'h4', 'h5', 'h6'],\r\n};\r\n\r\nexport const withSeoWeight = (options: WithSeoWeightProps = {}): SelectField => {\r\n const field = withSelect(\r\n deepMerge<SelectField>(SeoWeightDefaults, options as Partial<SelectField>)\r\n );\r\n return field;\r\n};\r\n"],"names":["deepMerge","withSelect","SeoWeightDefaults","name","options","withSeoWeight","field"],"mappings":"AAAA,SAASA,SAAS,QAAQ,8BAA8B;AAExD,SAASC,UAAU,QAAQ,eAAe;AAQ1C,OAAO,MAAMC,oBAAoB;IAC/BC,MAAM;IACNC,SAAS;QAAC;QAAM;QAAM;QAAM;QAAM;QAAM;KAAK;AAC/C,EAAE;AAEF,OAAO,MAAMC,gBAAgB,CAACD,UAA8B,CAAC,CAAC;IAC5D,MAAME,QAAQL,WACZD,UAAuBE,mBAAmBE;IAE5C,OAAOE;AACT,EAAE"}
@@ -0,0 +1,33 @@
1
+ import { deepMerge, formatSlug } from '@websolutespa/payload-utils';
2
+ import { withText } from './withText';
3
+ export const withSlug = ({ fieldToUse, ...options } = {
4
+ fieldToUse: 'title'
5
+ })=>{
6
+ return withText(deepMerge({
7
+ name: 'slug',
8
+ localized: true,
9
+ unique: true,
10
+ hooks: {
11
+ beforeValidate: [
12
+ formatSlug(fieldToUse)
13
+ ]
14
+ }
15
+ }, options));
16
+ };
17
+ export const withSlugRequired = ({ fieldToUse, ...options } = {
18
+ fieldToUse: 'title'
19
+ })=>{
20
+ return withText(deepMerge({
21
+ name: 'slug',
22
+ localized: true,
23
+ unique: true,
24
+ required: true,
25
+ hooks: {
26
+ beforeValidate: [
27
+ formatSlug(fieldToUse)
28
+ ]
29
+ }
30
+ }, options));
31
+ };
32
+
33
+ //# sourceMappingURL=withSlug.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/core/fields/withSlug.ts"],"sourcesContent":["import { deepMerge, formatSlug } from '@websolutespa/payload-utils';\r\nimport { TextField } from 'payload';\r\nimport { withText } from './withText';\r\n\r\nexport type WithSlugProps = (Omit<TextField, 'type' | 'name' | 'hasMany'> & { fieldToUse: string });\r\nexport type WithSlug = WithSlugProps & { type: 'withSlug' };\r\n\r\nexport const withSlug = ({ fieldToUse, ...options }: WithSlugProps = { fieldToUse: 'title' }): TextField => {\r\n return withText(deepMerge<TextField>({\r\n name: 'slug',\r\n localized: true,\r\n unique: true,\r\n hooks: {\r\n beforeValidate: [formatSlug(fieldToUse)],\r\n },\r\n }, options as Partial<TextField>));\r\n};\r\n\r\nexport const withSlugRequired = ({ fieldToUse, ...options }: WithSlugProps = { fieldToUse: 'title' }): TextField => {\r\n return withText(deepMerge<TextField>({\r\n name: 'slug',\r\n localized: true,\r\n unique: true,\r\n required: true,\r\n hooks: {\r\n beforeValidate: [formatSlug(fieldToUse)],\r\n },\r\n }, options as Partial<TextField>));\r\n};\r\n"],"names":["deepMerge","formatSlug","withText","withSlug","fieldToUse","options","name","localized","unique","hooks","beforeValidate","withSlugRequired","required"],"mappings":"AAAA,SAASA,SAAS,EAAEC,UAAU,QAAQ,8BAA8B;AAEpE,SAASC,QAAQ,QAAQ,aAAa;AAKtC,OAAO,MAAMC,WAAW,CAAC,EAAEC,UAAU,EAAE,GAAGC,SAAwB,GAAG;IAAED,YAAY;AAAQ,CAAC;IAC1F,OAAOF,SAASF,UAAqB;QACnCM,MAAM;QACNC,WAAW;QACXC,QAAQ;QACRC,OAAO;YACLC,gBAAgB;gBAACT,WAAWG;aAAY;QAC1C;IACF,GAAGC;AACL,EAAE;AAEF,OAAO,MAAMM,mBAAmB,CAAC,EAAEP,UAAU,EAAE,GAAGC,SAAwB,GAAG;IAAED,YAAY;AAAQ,CAAC;IAClG,OAAOF,SAASF,UAAqB;QACnCM,MAAM;QACNC,WAAW;QACXC,QAAQ;QACRI,UAAU;QACVH,OAAO;YACLC,gBAAgB;gBAACT,WAAWG;aAAY;QAC1C;IACF,GAAGC;AACL,EAAE"}