@shapio/cms 0.2.1 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (302) hide show
  1. package/dist/admin/assets/{AssistError-hVUWpP3F.js → AssistError-BITJ_tpg.js} +2 -2
  2. package/dist/admin/assets/{AssistError-hVUWpP3F.js.map → AssistError-BITJ_tpg.js.map} +1 -1
  3. package/dist/admin/assets/{BlockMenuItems-B0g93m6M.js → BlockMenuItems-CcluK965.js} +2 -2
  4. package/dist/admin/assets/{BlockMenuItems-B0g93m6M.js.map → BlockMenuItems-CcluK965.js.map} +1 -1
  5. package/dist/admin/assets/Body-BXa9DhtH.js +2 -0
  6. package/dist/admin/assets/{Body-CFQKONK4.js.map → Body-BXa9DhtH.js.map} +1 -1
  7. package/dist/admin/assets/Builder-DcpRfXuc.js +2 -0
  8. package/dist/admin/assets/Builder-DcpRfXuc.js.map +1 -0
  9. package/dist/admin/assets/{ConfirmDialog-D6rs75TP.js → ConfirmDialog-B9nWhIIz.js} +2 -2
  10. package/dist/admin/assets/{ConfirmDialog-D6rs75TP.js.map → ConfirmDialog-B9nWhIIz.js.map} +1 -1
  11. package/dist/admin/assets/{CopyButton-Bc7crFDE.js → CopyButton-BoWb-xi1.js} +2 -2
  12. package/dist/admin/assets/{CopyButton-Bc7crFDE.js.map → CopyButton-BoWb-xi1.js.map} +1 -1
  13. package/dist/admin/assets/{CursorPager-BFPD_adV.js → CursorPager-BnxmTk47.js} +2 -2
  14. package/dist/admin/assets/{CursorPager-BFPD_adV.js.map → CursorPager-BnxmTk47.js.map} +1 -1
  15. package/dist/admin/assets/{ExternalLink-Cdfcyyed.js → ExternalLink-Eeb9mONJ.js} +2 -2
  16. package/dist/admin/assets/{ExternalLink-Cdfcyyed.js.map → ExternalLink-Eeb9mONJ.js.map} +1 -1
  17. package/dist/admin/assets/Form-DZRLD3vH.js +2 -0
  18. package/dist/admin/assets/Form-DZRLD3vH.js.map +1 -0
  19. package/dist/admin/assets/{FormCheckboxGroup-Bicl1CBP.js → FormCheckboxGroup-uIC2XQIL.js} +2 -2
  20. package/dist/admin/assets/{FormCheckboxGroup-Bicl1CBP.js.map → FormCheckboxGroup-uIC2XQIL.js.map} +1 -1
  21. package/dist/admin/assets/{FormRadioGroup-34iVSV4L.js → FormRadioGroup-hd95vPOu.js} +2 -2
  22. package/dist/admin/assets/{FormRadioGroup-34iVSV4L.js.map → FormRadioGroup-hd95vPOu.js.map} +1 -1
  23. package/dist/admin/assets/{FormSelectField-Ba4fIu-8.js → FormSelectField-D7VHmnx5.js} +2 -2
  24. package/dist/admin/assets/{FormSelectField-Ba4fIu-8.js.map → FormSelectField-D7VHmnx5.js.map} +1 -1
  25. package/dist/admin/assets/{FormSwitchField-DN6bfPC0.js → FormSwitchField-ft8Jbe6E.js} +2 -2
  26. package/dist/admin/assets/{FormSwitchField-DN6bfPC0.js.map → FormSwitchField-ft8Jbe6E.js.map} +1 -1
  27. package/dist/admin/assets/{FormTextareaField-WsNjLm32.js → FormTextareaField-DzyOzfZb.js} +2 -2
  28. package/dist/admin/assets/{FormTextareaField-WsNjLm32.js.map → FormTextareaField-DzyOzfZb.js.map} +1 -1
  29. package/dist/admin/assets/{HintedLabel-jKLM0ETt.js → HintedLabel-CvC46uy_.js} +2 -2
  30. package/dist/admin/assets/{HintedLabel-jKLM0ETt.js.map → HintedLabel-CvC46uy_.js.map} +1 -1
  31. package/dist/admin/assets/{InfoHint-DBqcrmZ3.js → InfoHint-GJLRVumb.js} +2 -2
  32. package/dist/admin/assets/{InfoHint-DBqcrmZ3.js.map → InfoHint-GJLRVumb.js.map} +1 -1
  33. package/dist/admin/assets/{InsertMenuItem-CRKXblK5.js → InsertMenuItem-D976G0Rj.js} +2 -2
  34. package/dist/admin/assets/{InsertMenuItem-CRKXblK5.js.map → InsertMenuItem-D976G0Rj.js.map} +1 -1
  35. package/dist/admin/assets/LinkTabs-BZSlA57U.js +2 -0
  36. package/dist/admin/assets/{LinkTabs-Bn2JVqOL.js.map → LinkTabs-BZSlA57U.js.map} +1 -1
  37. package/dist/admin/assets/Match-DdxTHHM4.js +2 -0
  38. package/dist/admin/assets/{Match-DaYgKrk7.js.map → Match-DdxTHHM4.js.map} +1 -1
  39. package/dist/admin/assets/{Panel-6wFe96Gr.js → Panel-iIKjEURi.js} +2 -2
  40. package/dist/admin/assets/{Panel-6wFe96Gr.js.map → Panel-iIKjEURi.js.map} +1 -1
  41. package/dist/admin/assets/{QueryView-DFZtm0fn.js → QueryView-D6aZQJRN.js} +2 -2
  42. package/dist/admin/assets/{QueryView-DFZtm0fn.js.map → QueryView-D6aZQJRN.js.map} +1 -1
  43. package/dist/admin/assets/{RadioTile-DsTyz7ml.js → RadioTile-BpB79rIK.js} +2 -2
  44. package/dist/admin/assets/{RadioTile-DsTyz7ml.js.map → RadioTile-BpB79rIK.js.map} +1 -1
  45. package/dist/admin/assets/{RichTextField-BGkH403g.js → RichTextField-BuHCONPu.js} +2 -2
  46. package/dist/admin/assets/{RichTextField-BGkH403g.js.map → RichTextField-BuHCONPu.js.map} +1 -1
  47. package/dist/admin/assets/{RowTitle-sFt6NjO4.js → RowTitle--uFCpx8n.js} +2 -2
  48. package/dist/admin/assets/{RowTitle-sFt6NjO4.js.map → RowTitle--uFCpx8n.js.map} +1 -1
  49. package/dist/admin/assets/{SecretReveal-Z6MOFdcL.js → SecretReveal-DFpzeNE0.js} +2 -2
  50. package/dist/admin/assets/{SecretReveal-Z6MOFdcL.js.map → SecretReveal-DFpzeNE0.js.map} +1 -1
  51. package/dist/admin/assets/SharedGlyph-Cqkx30tn.js +2 -0
  52. package/dist/admin/assets/SharedGlyph-Cqkx30tn.js.map +1 -0
  53. package/dist/admin/assets/{StepList-BTP_EMzx.js → StepList-BY5MuJPJ.js} +2 -2
  54. package/dist/admin/assets/{StepList-BTP_EMzx.js.map → StepList-BY5MuJPJ.js.map} +1 -1
  55. package/dist/admin/assets/Structure-CqRa2t7z.js +2 -0
  56. package/dist/admin/assets/{Structure-D5-hCUuF.js.map → Structure-CqRa2t7z.js.map} +1 -1
  57. package/dist/admin/assets/SubNavLink-B2o4kSZ9.js +2 -0
  58. package/dist/admin/assets/{SubNavLink-C5oN5mzB.js.map → SubNavLink-B2o4kSZ9.js.map} +1 -1
  59. package/dist/admin/assets/{SuggestAltButton-BuN35BBL.js → SuggestAltButton-4rf2xhEJ.js} +2 -2
  60. package/dist/admin/assets/{SuggestAltButton-BuN35BBL.js.map → SuggestAltButton-4rf2xhEJ.js.map} +1 -1
  61. package/dist/admin/assets/TextLink-D15oyXlc.js +2 -0
  62. package/dist/admin/assets/{TextLink-B4a6j3r6.js.map → TextLink-D15oyXlc.js.map} +1 -1
  63. package/dist/admin/assets/{Thumbnail-u8NE5NhQ.js → Thumbnail-CP5mfgNY.js} +2 -2
  64. package/dist/admin/assets/{Thumbnail-u8NE5NhQ.js.map → Thumbnail-CP5mfgNY.js.map} +1 -1
  65. package/dist/admin/assets/UnsavedChangesGuard-DgOASh0p.js +2 -0
  66. package/dist/admin/assets/{UnsavedChangesGuard-BYwMTDsE.js.map → UnsavedChangesGuard-DgOASh0p.js.map} +1 -1
  67. package/dist/admin/assets/{UserAvatar-D-yX0ozh.js → UserAvatar-BocvNVL-.js} +2 -2
  68. package/dist/admin/assets/{UserAvatar-D-yX0ozh.js.map → UserAvatar-BocvNVL-.js.map} +1 -1
  69. package/dist/admin/assets/{arrow-up-Ws7W9KsZ.js → arrow-up-gf_j6SVQ.js} +2 -2
  70. package/dist/admin/assets/{arrow-up-Ws7W9KsZ.js.map → arrow-up-gf_j6SVQ.js.map} +1 -1
  71. package/dist/admin/assets/auth-pcS9CCXu.js +2 -0
  72. package/dist/admin/assets/auth-pcS9CCXu.js.map +1 -0
  73. package/dist/admin/assets/badge-DD0mE96i.js +2 -0
  74. package/dist/admin/assets/{badge-CMox6-v3.js.map → badge-DD0mE96i.js.map} +1 -1
  75. package/dist/admin/assets/boxes-DcK-kaSa.js +2 -0
  76. package/dist/admin/assets/boxes-DcK-kaSa.js.map +1 -0
  77. package/dist/admin/assets/{calendar-clock-9W0Lkt89.js → calendar-clock-DEwACe0M.js} +2 -2
  78. package/dist/admin/assets/{calendar-clock-9W0Lkt89.js.map → calendar-clock-DEwACe0M.js.map} +1 -1
  79. package/dist/admin/assets/{changeSets-CO7JdILW.js → changeSets-BjUEfYbj.js} +2 -2
  80. package/dist/admin/assets/{changeSets-CO7JdILW.js.map → changeSets-BjUEfYbj.js.map} +1 -1
  81. package/dist/admin/assets/chevron-left-BsQYDUEC.js +2 -0
  82. package/dist/admin/assets/{chevron-left-DyqYjcMB.js.map → chevron-left-BsQYDUEC.js.map} +1 -1
  83. package/dist/admin/assets/{circle-check-aJ2DW5t4.js → circle-check-Dq1owihe.js} +2 -2
  84. package/dist/admin/assets/{circle-check-aJ2DW5t4.js.map → circle-check-Dq1owihe.js.map} +1 -1
  85. package/dist/admin/assets/{circle-x-BnRBht9z.js → circle-x-Dx6zIZko.js} +2 -2
  86. package/dist/admin/assets/{circle-x-BnRBht9z.js.map → circle-x-Dx6zIZko.js.map} +1 -1
  87. package/dist/admin/assets/{clock-DRtFQbTs.js → clock-DQvkffqQ.js} +2 -2
  88. package/dist/admin/assets/{clock-DRtFQbTs.js.map → clock-DQvkffqQ.js.map} +1 -1
  89. package/dist/admin/assets/cn-BQ3voEft.js +2 -0
  90. package/dist/admin/assets/cn-BQ3voEft.js.map +1 -0
  91. package/dist/admin/assets/coerce-OsqQRj19.js +2 -0
  92. package/dist/admin/assets/{coerce-COM3rk1i.js.map → coerce-OsqQRj19.js.map} +1 -1
  93. package/dist/admin/assets/constants-SrImR6C3.js +2 -0
  94. package/dist/admin/assets/constants-SrImR6C3.js.map +1 -0
  95. package/dist/admin/assets/content-_SLbbnfX.js +3 -0
  96. package/dist/admin/assets/content-_SLbbnfX.js.map +1 -0
  97. package/dist/admin/assets/{contentCounts-Ct0tYgHD.js → contentCounts-Ch3uMXVU.js} +2 -2
  98. package/dist/admin/assets/{contentCounts-Ct0tYgHD.js.map → contentCounts-Ch3uMXVU.js.map} +1 -1
  99. package/dist/admin/assets/contentTypes-BCOdUK_Z.js +2 -0
  100. package/dist/admin/assets/contentTypes-BCOdUK_Z.js.map +1 -0
  101. package/dist/admin/assets/{copy-B5B8RjV0.js → copy-BDc3r0fO.js} +2 -2
  102. package/dist/admin/assets/{copy-B5B8RjV0.js.map → copy-BDc3r0fO.js.map} +1 -1
  103. package/dist/admin/assets/{dateTimeLocal-BuBv3it2.js → dateTimeLocal-C92tyKwz.js} +2 -2
  104. package/dist/admin/assets/{dateTimeLocal-BuBv3it2.js.map → dateTimeLocal-C92tyKwz.js.map} +1 -1
  105. package/dist/admin/assets/develop-DS9TlDmv.js +11 -0
  106. package/dist/admin/assets/develop-DS9TlDmv.js.map +1 -0
  107. package/dist/admin/assets/{dropdown-menu-CW3fabv5.js → dropdown-menu-gmP2Rp3n.js} +2 -2
  108. package/dist/admin/assets/{dropdown-menu-CW3fabv5.js.map → dropdown-menu-gmP2Rp3n.js.map} +1 -1
  109. package/dist/admin/assets/{ellipsis-DNdmromA.js → ellipsis-NK0pWgqU.js} +2 -2
  110. package/dist/admin/assets/{ellipsis-DNdmromA.js.map → ellipsis-NK0pWgqU.js.map} +1 -1
  111. package/dist/admin/assets/{external-link-YnuWXDBk.js → external-link-D3Aoi2yX.js} +2 -2
  112. package/dist/admin/assets/{external-link-YnuWXDBk.js.map → external-link-D3Aoi2yX.js.map} +1 -1
  113. package/dist/admin/assets/{file-text-CB7Bc0GA.js → file-text-DxXAmmxL.js} +2 -2
  114. package/dist/admin/assets/{file-text-CB7Bc0GA.js.map → file-text-DxXAmmxL.js.map} +1 -1
  115. package/dist/admin/assets/fileRoute-C2tOrKhO.js +2 -0
  116. package/dist/admin/assets/{fileRoute-BYwireXG.js.map → fileRoute-C2tOrKhO.js.map} +1 -1
  117. package/dist/admin/assets/followPlural-CN6cQfNk.js +2 -0
  118. package/dist/admin/assets/followPlural-CN6cQfNk.js.map +1 -0
  119. package/dist/admin/assets/{globe-Bvs3UC3V.js → globe-CuElSilX.js} +2 -2
  120. package/dist/admin/assets/{globe-Bvs3UC3V.js.map → globe-CuElSilX.js.map} +1 -1
  121. package/dist/admin/assets/{image-CeoxwJeM.js → image-CsH8dZve.js} +2 -2
  122. package/dist/admin/assets/{image-CeoxwJeM.js.map → image-CsH8dZve.js.map} +1 -1
  123. package/dist/admin/assets/{image-off-iVqYw2Zc.js → image-off-B_uBCsYu.js} +2 -2
  124. package/dist/admin/assets/{image-off-iVqYw2Zc.js.map → image-off-B_uBCsYu.js.map} +1 -1
  125. package/dist/admin/assets/{inbox-DYbEOpaQ.js → inbox-3iAHL3pC.js} +2 -2
  126. package/dist/admin/assets/{inbox-DYbEOpaQ.js.map → inbox-3iAHL3pC.js.map} +1 -1
  127. package/dist/admin/assets/inbox-DsuXNaKE.js +2 -0
  128. package/dist/admin/assets/{inbox-wDoqym--.js.map → inbox-DsuXNaKE.js.map} +1 -1
  129. package/dist/admin/assets/index-BSzXA60W.js +4 -0
  130. package/dist/admin/assets/index-BSzXA60W.js.map +1 -0
  131. package/dist/admin/assets/{key-round-Bcw6qqcb.js → key-round-B17HiT3K.js} +2 -2
  132. package/dist/admin/assets/{key-round-Bcw6qqcb.js.map → key-round-B17HiT3K.js.map} +1 -1
  133. package/dist/admin/assets/link-2-off-hWGS8LW6.js +2 -0
  134. package/dist/admin/assets/link-2-off-hWGS8LW6.js.map +1 -0
  135. package/dist/admin/assets/{link-CKr_uUfb.js → link-bhHmG4Tc.js} +2 -2
  136. package/dist/admin/assets/{link-CKr_uUfb.js.map → link-bhHmG4Tc.js.map} +1 -1
  137. package/dist/admin/assets/{list-BElvKZw_.js → list-DRtRdjBC.js} +2 -2
  138. package/dist/admin/assets/{list-BElvKZw_.js.map → list-DRtRdjBC.js.map} +1 -1
  139. package/dist/admin/assets/{locales-Bnv3qcdZ.js → locales-BzPbz8FF.js} +2 -2
  140. package/dist/admin/assets/{locales-Bnv3qcdZ.js.map → locales-BzPbz8FF.js.map} +1 -1
  141. package/dist/admin/assets/media-WLnWaL7U.js +2 -0
  142. package/dist/admin/assets/{media-DjK3xGFN.js.map → media-WLnWaL7U.js.map} +1 -1
  143. package/dist/admin/assets/{media-BfDqe_2P.js → media-Xzot1ueY.js} +2 -2
  144. package/dist/admin/assets/{media-BfDqe_2P.js.map → media-Xzot1ueY.js.map} +1 -1
  145. package/dist/admin/assets/network-DHGqLwji.js +2 -0
  146. package/dist/admin/assets/network-DHGqLwji.js.map +1 -0
  147. package/dist/admin/assets/{pencil-Zd05MDs2.js → pencil-Bdp2z9D_.js} +2 -2
  148. package/dist/admin/assets/{pencil-Zd05MDs2.js.map → pencil-Bdp2z9D_.js.map} +1 -1
  149. package/dist/admin/assets/{plus-B0gd63Da.js → plus-BN_iSsnp.js} +2 -2
  150. package/dist/admin/assets/{plus-B0gd63Da.js.map → plus-BN_iSsnp.js.map} +1 -1
  151. package/dist/admin/assets/{preload-helper-CJKHb_rG.js → preload-helper-DAbCfXID.js} +2 -2
  152. package/dist/admin/assets/{preload-helper-CJKHb_rG.js.map → preload-helper-DAbCfXID.js.map} +1 -1
  153. package/dist/admin/assets/publishing-d9yhMwgA.js +2 -0
  154. package/dist/admin/assets/{publishing-vCVjaSGF.js.map → publishing-d9yhMwgA.js.map} +1 -1
  155. package/dist/admin/assets/{radio-group-DVR0mTpo.js → radio-group-DHIxK-IU.js} +2 -2
  156. package/dist/admin/assets/{radio-group-DVR0mTpo.js.map → radio-group-DHIxK-IU.js.map} +1 -1
  157. package/dist/admin/assets/{rotate-ccw-BOTDOdHf.js → rotate-ccw-CBoZle-b.js} +2 -2
  158. package/dist/admin/assets/{rotate-ccw-BOTDOdHf.js.map → rotate-ccw-CBoZle-b.js.map} +1 -1
  159. package/dist/admin/assets/{schedules-CG-ZphRK.js → schedules-Dy89Nm6P.js} +2 -2
  160. package/dist/admin/assets/{schedules-CG-ZphRK.js.map → schedules-Dy89Nm6P.js.map} +1 -1
  161. package/dist/admin/assets/schema-B4smPFcR.js +2 -0
  162. package/dist/admin/assets/schema-B4smPFcR.js.map +1 -0
  163. package/dist/admin/assets/{scroll-text-D-gHqYwR.js → scroll-text-UbyzpWh-.js} +2 -2
  164. package/dist/admin/assets/{scroll-text-D-gHqYwR.js.map → scroll-text-UbyzpWh-.js.map} +1 -1
  165. package/dist/admin/assets/{search-BcPL1qyc.js → search-_YlNpPvU.js} +2 -2
  166. package/dist/admin/assets/{search-BcPL1qyc.js.map → search-_YlNpPvU.js.map} +1 -1
  167. package/dist/admin/assets/searchSchema-CvOhn4FV.js +2 -0
  168. package/dist/admin/assets/{searchSchema-BGrRDBL_.js.map → searchSchema-CvOhn4FV.js.map} +1 -1
  169. package/dist/admin/assets/searchSchemas-BxRnxenn.js +2 -0
  170. package/dist/admin/assets/searchSchemas-BxRnxenn.js.map +1 -0
  171. package/dist/admin/assets/{sections-i9TeeK-h.js → sections-Bb3Q4bcY.js} +2 -2
  172. package/dist/admin/assets/{sections-i9TeeK-h.js.map → sections-Bb3Q4bcY.js.map} +1 -1
  173. package/dist/admin/assets/{sections-BrGcWOnw.js → sections-DiySZZHb.js} +2 -2
  174. package/dist/admin/assets/{sections-BrGcWOnw.js.map → sections-DiySZZHb.js.map} +1 -1
  175. package/dist/admin/assets/{select--nGB4WjU.js → select-tHVWX85X.js} +2 -2
  176. package/dist/admin/assets/{select--nGB4WjU.js.map → select-tHVWX85X.js.map} +1 -1
  177. package/dist/admin/assets/{send-Bu3RRfdI.js → send-BqECHYi6.js} +2 -2
  178. package/dist/admin/assets/{send-Bu3RRfdI.js.map → send-BqECHYi6.js.map} +1 -1
  179. package/dist/admin/assets/settings-D-v8gL8F.js +2 -0
  180. package/dist/admin/assets/settings-D-v8gL8F.js.map +1 -0
  181. package/dist/admin/assets/skeleton-C3QLIh7W.js +42 -0
  182. package/dist/admin/assets/skeleton-C3QLIh7W.js.map +1 -0
  183. package/dist/admin/assets/snapshots-BQrhsCmC.js +2 -0
  184. package/dist/admin/assets/{snapshots-CKjK-vkL.js.map → snapshots-BQrhsCmC.js.map} +1 -1
  185. package/dist/admin/assets/{sparkles-B_NX7PAY.js → sparkles-BW4CbD6W.js} +2 -2
  186. package/dist/admin/assets/{sparkles-B_NX7PAY.js.map → sparkles-BW4CbD6W.js.map} +1 -1
  187. package/dist/admin/assets/src-XaU0N8C-.js +4 -0
  188. package/dist/admin/assets/src-XaU0N8C-.js.map +1 -0
  189. package/dist/admin/assets/{stableId-Dmr2Afn_.js → stableId-C9Yq5iUw.js} +2 -2
  190. package/dist/admin/assets/{stableId-Dmr2Afn_.js.map → stableId-C9Yq5iUw.js.map} +1 -1
  191. package/dist/admin/assets/{store-B5xrQ1Ex.js → store-BphwUzV5.js} +2 -2
  192. package/dist/admin/assets/{store-B5xrQ1Ex.js.map → store-BphwUzV5.js.map} +1 -1
  193. package/dist/admin/assets/{switch-B-FbT-l8.js → switch-BVy02Vc8.js} +2 -2
  194. package/dist/admin/assets/{switch-B-FbT-l8.js.map → switch-BVy02Vc8.js.map} +1 -1
  195. package/dist/admin/assets/{table-DQzCPm7J.js → table-CZYtdoHn.js} +2 -2
  196. package/dist/admin/assets/{table-DQzCPm7J.js.map → table-CZYtdoHn.js.map} +1 -1
  197. package/dist/admin/assets/tabs-quHbeVxA.js +5 -0
  198. package/dist/admin/assets/{tabs-YThoOiE3.js.map → tabs-quHbeVxA.js.map} +1 -1
  199. package/dist/admin/assets/{textarea-_wcx8Mn1.js → textarea-B8Vl5gJ1.js} +2 -2
  200. package/dist/admin/assets/{textarea-_wcx8Mn1.js.map → textarea-B8Vl5gJ1.js.map} +1 -1
  201. package/dist/admin/assets/titles-B2z5ckxG.js +2 -0
  202. package/dist/admin/assets/{titles-DyCBLXue.js.map → titles-B2z5ckxG.js.map} +1 -1
  203. package/dist/admin/assets/{tokens-CqsxrApC.js → tokens-Fh_OeIlf.js} +2 -2
  204. package/dist/admin/assets/{tokens-CqsxrApC.js.map → tokens-Fh_OeIlf.js.map} +1 -1
  205. package/dist/admin/assets/{tooltip-BMe4HylJ.js → tooltip-DwqM3opE.js} +2 -2
  206. package/dist/admin/assets/{tooltip-BMe4HylJ.js.map → tooltip-DwqM3opE.js.map} +1 -1
  207. package/dist/admin/assets/{undo-2-DMOHOH6w.js → undo-2-D4Fz4JMZ.js} +2 -2
  208. package/dist/admin/assets/{undo-2-DMOHOH6w.js.map → undo-2-D4Fz4JMZ.js.map} +1 -1
  209. package/dist/admin/assets/{useAuditLabels-CSw_kwLs.js → useAuditLabels-DKrsrciQ.js} +2 -2
  210. package/dist/admin/assets/{useAuditLabels-CSw_kwLs.js.map → useAuditLabels-DKrsrciQ.js.map} +1 -1
  211. package/dist/admin/assets/useConfirmTarget-Dp8mCulm.js +2 -0
  212. package/dist/admin/assets/useConfirmTarget-Dp8mCulm.js.map +1 -0
  213. package/dist/admin/assets/{useContentSchema-CS5QQcRk.js → useContentSchema-Bv4_6VJR.js} +2 -2
  214. package/dist/admin/assets/{useContentSchema-CS5QQcRk.js.map → useContentSchema-Bv4_6VJR.js.map} +1 -1
  215. package/dist/admin/assets/{useCursorPager-Dt_axwd1.js → useCursorPager-B1upg5EU.js} +2 -2
  216. package/dist/admin/assets/{useCursorPager-Dt_axwd1.js.map → useCursorPager-B1upg5EU.js.map} +1 -1
  217. package/dist/admin/assets/{useDiscardGuard-7rRGpd4q.js → useDiscardGuard-34ynGJIk.js} +2 -2
  218. package/dist/admin/assets/{useDiscardGuard-7rRGpd4q.js.map → useDiscardGuard-34ynGJIk.js.map} +1 -1
  219. package/dist/admin/assets/{useMediaUploader-CBUcNW6d.js → useMediaUploader-QXSjZStv.js} +2 -2
  220. package/dist/admin/assets/{useMediaUploader-CBUcNW6d.js.map → useMediaUploader-QXSjZStv.js.map} +1 -1
  221. package/dist/admin/assets/{usePaletteItems-bbTIqpPu.js → usePaletteItems-62-TZhy7.js} +2 -2
  222. package/dist/admin/assets/{usePaletteItems-bbTIqpPu.js.map → usePaletteItems-62-TZhy7.js.map} +1 -1
  223. package/dist/admin/assets/usePlaces-CY6f2DmI.js +2 -0
  224. package/dist/admin/assets/usePlaces-CY6f2DmI.js.map +1 -0
  225. package/dist/admin/assets/{useQueries-DKGIdq6A.js → useQueries-BuKJBA0M.js} +2 -2
  226. package/dist/admin/assets/{useQueries-DKGIdq6A.js.map → useQueries-BuKJBA0M.js.map} +1 -1
  227. package/dist/admin/assets/useSchemaScopeAccess-DUBeS9kU.js +2 -0
  228. package/dist/admin/assets/useSchemaScopeAccess-DUBeS9kU.js.map +1 -0
  229. package/dist/admin/assets/{users-C1ZSee3N.js → users-BOn2ohJQ.js} +2 -2
  230. package/dist/admin/assets/{users-C1ZSee3N.js.map → users-BOn2ohJQ.js.map} +1 -1
  231. package/dist/admin/assets/{users-DMfQL0s4.js → users-BkKc4MNB.js} +2 -2
  232. package/dist/admin/assets/{users-DMfQL0s4.js.map → users-BkKc4MNB.js.map} +1 -1
  233. package/dist/admin/assets/{zod-Pf5A-ax4.js → zod-BHAd1wTC.js} +2 -2
  234. package/dist/admin/assets/{zod-Pf5A-ax4.js.map → zod-BHAd1wTC.js.map} +1 -1
  235. package/dist/admin/index.html +56 -55
  236. package/dist/cli.js +383 -163
  237. package/dist/cli.js.map +1 -1
  238. package/dist/config.d.ts +1 -1
  239. package/dist/config.js.map +1 -1
  240. package/dist/index.d.ts +6 -1
  241. package/dist/index.js +1 -1
  242. package/dist/{public-CKU0Gkfq.d.ts → public-CGO8RBn3.d.ts} +10 -2
  243. package/dist/{worker-C-MSYr4l.js → worker-BLXy8aRW.js} +2307 -1220
  244. package/dist/worker-BLXy8aRW.js.map +1 -0
  245. package/package.json +5 -6
  246. package/dist/admin/assets/Body-CFQKONK4.js +0 -2
  247. package/dist/admin/assets/Builder-Do5KVHV9.js +0 -2
  248. package/dist/admin/assets/Builder-Do5KVHV9.js.map +0 -1
  249. package/dist/admin/assets/LinkTabs-Bn2JVqOL.js +0 -2
  250. package/dist/admin/assets/Match-DaYgKrk7.js +0 -2
  251. package/dist/admin/assets/Structure-D5-hCUuF.js +0 -2
  252. package/dist/admin/assets/SubNavLink-C5oN5mzB.js +0 -2
  253. package/dist/admin/assets/TextLink-B4a6j3r6.js +0 -2
  254. package/dist/admin/assets/UnsavedChangesGuard-BYwMTDsE.js +0 -2
  255. package/dist/admin/assets/auth-b3_9QbtL.js +0 -2
  256. package/dist/admin/assets/auth-b3_9QbtL.js.map +0 -1
  257. package/dist/admin/assets/badge-CMox6-v3.js +0 -2
  258. package/dist/admin/assets/chevron-left-DyqYjcMB.js +0 -2
  259. package/dist/admin/assets/cn-DnXL75B0.js +0 -2
  260. package/dist/admin/assets/cn-DnXL75B0.js.map +0 -1
  261. package/dist/admin/assets/coerce-COM3rk1i.js +0 -2
  262. package/dist/admin/assets/constants-CS1ziZO0.js +0 -2
  263. package/dist/admin/assets/constants-CS1ziZO0.js.map +0 -1
  264. package/dist/admin/assets/content-Dic2fof_.js +0 -3
  265. package/dist/admin/assets/content-Dic2fof_.js.map +0 -1
  266. package/dist/admin/assets/contentTypes-D4_Ax9rb.js +0 -2
  267. package/dist/admin/assets/contentTypes-D4_Ax9rb.js.map +0 -1
  268. package/dist/admin/assets/develop-Brnb5YPC.js +0 -11
  269. package/dist/admin/assets/develop-Brnb5YPC.js.map +0 -1
  270. package/dist/admin/assets/errors-DfoXUVDI.js +0 -2
  271. package/dist/admin/assets/errors-DfoXUVDI.js.map +0 -1
  272. package/dist/admin/assets/fileRoute-BYwireXG.js +0 -2
  273. package/dist/admin/assets/inbox-wDoqym--.js +0 -2
  274. package/dist/admin/assets/index-57Mn6XLO.js +0 -4
  275. package/dist/admin/assets/index-57Mn6XLO.js.map +0 -1
  276. package/dist/admin/assets/link-2-DhM2vi4v.js +0 -2
  277. package/dist/admin/assets/link-2-DhM2vi4v.js.map +0 -1
  278. package/dist/admin/assets/link-2-off-DpDOMsa-.js +0 -2
  279. package/dist/admin/assets/link-2-off-DpDOMsa-.js.map +0 -1
  280. package/dist/admin/assets/media-DjK3xGFN.js +0 -2
  281. package/dist/admin/assets/network-CAJ76ILr.js +0 -2
  282. package/dist/admin/assets/network-CAJ76ILr.js.map +0 -1
  283. package/dist/admin/assets/publishing-vCVjaSGF.js +0 -2
  284. package/dist/admin/assets/schema-KXXSPVJn.js +0 -2
  285. package/dist/admin/assets/schema-KXXSPVJn.js.map +0 -1
  286. package/dist/admin/assets/searchSchema-BGrRDBL_.js +0 -2
  287. package/dist/admin/assets/searchSchemas-ChN9hhuQ.js +0 -2
  288. package/dist/admin/assets/searchSchemas-ChN9hhuQ.js.map +0 -1
  289. package/dist/admin/assets/settings-68BAxrPM.js +0 -2
  290. package/dist/admin/assets/settings-68BAxrPM.js.map +0 -1
  291. package/dist/admin/assets/skeleton-DUvclBAr.js +0 -42
  292. package/dist/admin/assets/skeleton-DUvclBAr.js.map +0 -1
  293. package/dist/admin/assets/snapshots-CKjK-vkL.js +0 -2
  294. package/dist/admin/assets/src-D6DABe5J.js +0 -4
  295. package/dist/admin/assets/src-D6DABe5J.js.map +0 -1
  296. package/dist/admin/assets/tabs-YThoOiE3.js +0 -5
  297. package/dist/admin/assets/titles-DyCBLXue.js +0 -2
  298. package/dist/admin/assets/useConfirmTarget-9JmfiY2X.js +0 -2
  299. package/dist/admin/assets/useConfirmTarget-9JmfiY2X.js.map +0 -1
  300. package/dist/admin/assets/usePlaces-D1raoQ2s.js +0 -2
  301. package/dist/admin/assets/usePlaces-D1raoQ2s.js.map +0 -1
  302. package/dist/worker-C-MSYr4l.js.map +0 -1
package/dist/config.d.ts CHANGED
@@ -1,2 +1,2 @@
1
- import { A as ServiceFactoryContext, C as HookEvent, D as MediaUsage, E as MediaReferenceService, M as ShapioServices, N as defineConfig, O as ModelHooks, P as isHookError, S as HookError, T as JobHandlerContext, _ as ExtensionRoute, a as BeforeHookContext, b as ExtensionSite, c as ContentReadOptions, d as EXTENSION_CONTRACT_VERSION, f as EnqueueOptions, g as ExtensionJobService, h as ExtensionJobHandler, i as BeforeHook, j as ShapioConfig, k as ServiceFactory, l as ContentReadService, m as ExtensionHostConfig, n as AfterHookContext, o as BeforeHookEvent, p as EntryData, r as AfterHookEvent, s as ContentReadEntry, t as AfterHook, u as CustomServices, v as ExtensionRouteOptions, w as HookModel, x as HookEntry, y as ExtensionServices } from "./public-CKU0Gkfq.js";
1
+ import { A as ServiceFactoryContext, C as HookEvent, D as MediaUsage, E as MediaReferenceService, M as ShapioServices, N as defineConfig, O as ModelHooks, P as isHookError, S as HookError, T as JobHandlerContext, _ as ExtensionRoute, a as BeforeHookContext, b as ExtensionSite, c as ContentReadOptions, d as EXTENSION_CONTRACT_VERSION, f as EnqueueOptions, g as ExtensionJobService, h as ExtensionJobHandler, i as BeforeHook, j as ShapioConfig, k as ServiceFactory, l as ContentReadService, m as ExtensionHostConfig, n as AfterHookContext, o as BeforeHookEvent, p as EntryData, r as AfterHookEvent, s as ContentReadEntry, t as AfterHook, u as CustomServices, v as ExtensionRouteOptions, w as HookModel, x as HookEntry, y as ExtensionServices } from "./public-CGO8RBn3.js";
2
2
  export { AfterHook, AfterHookContext, AfterHookEvent, BeforeHook, BeforeHookContext, BeforeHookEvent, ContentReadEntry, ContentReadOptions, ContentReadService, CustomServices, EXTENSION_CONTRACT_VERSION, EnqueueOptions, EntryData, ExtensionHostConfig, ExtensionJobHandler, ExtensionJobService, ExtensionRoute, ExtensionRouteOptions, ExtensionServices, ExtensionSite, HookEntry, HookError, HookEvent, HookModel, JobHandlerContext, MediaReferenceService, MediaUsage, ModelHooks, ServiceFactory, ServiceFactoryContext, ShapioConfig, ShapioServices, defineConfig, isHookError };
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","names":[],"sources":["../src/extensions/public.ts"],"sourcesContent":["import type { FastifyBaseLogger, FastifyPluginAsync, preHandlerAsyncHookHandler } from 'fastify';\nimport type { Kysely, Transaction } from 'kysely';\nimport type { DB } from '../db/types.js';\nimport type { PermissionEvaluator, Principal } from '../permissions/types.js';\nimport type { RouteAuditConfig } from '../plugins/auditDeclaration.js';\n\n// What Shapio adds to Fastify, repeated here so custom route code is typed without the server's internals.\ndeclare module 'fastify' {\n interface FastifyRequest {\n /** Who is calling. Anonymous unless a session cookie or API token resolved. Never null after onRequest. */\n principal: Principal;\n /**\n * The request's site on a site route (custom routes are site routes): the credential's site, else the\n * `Shapio-Site` header or `?site=`, else the primary site. Undefined on a route declaring\n * `config.site = 'network'`.\n */\n site: { id: string; key: string } | undefined;\n }\n interface FastifyContextConfig {\n /** Required on every mutating route: the audit action recorded on success, or `{ exempt: '<why>' }`. */\n audit?: RouteAuditConfig;\n /** `'network'` for a custom route that is about the whole instance rather than one site. */\n site?: 'site' | 'network';\n }\n}\n\n/**\n * The project extension contract (ADR 0009), imported by project authors from `@shapio/cms/config`:\n *\n * ```ts\n * import { defineConfig } from '@shapio/cms/config';\n * export const config = defineConfig({ hooks: { article: { beforePublish: (ctx) => { ... } } } });\n * ```\n *\n * Extensions are code: changing them needs a restart of Shapio (never a rebuild). Content models are never\n * configured here; they change live in the admin. This file has no runtime imports from the server, so a\n * config that imports it stays cheap to load.\n *\n * Stability: everything exported here follows semver with `EXTENSION_CONTRACT_VERSION`; Shapio's database\n * tables (reachable through `trx`) are internal and may change in any release.\n */\nexport const EXTENSION_CONTRACT_VERSION = 1;\n\nexport type BeforeHookEvent = 'beforeCreate' | 'beforeUpdate' | 'beforePublish' | 'beforeDelete';\nexport type AfterHookEvent = 'afterCreate' | 'afterUpdate' | 'afterPublish' | 'afterDelete';\nexport type HookEvent = BeforeHookEvent | AfterHookEvent;\n\n/** A site of a multi-site instance: its stable ID and its key (sites share the schema, not content). */\nexport type ExtensionSite = { id: string; key: string };\n\n/** Entry data keyed by field API key (the admin API's shape; media and relations are IDs). */\nexport type EntryData = Readonly<Record<string, unknown>>;\n\nexport type HookModel = {\n /** Stable model ID (never changes). */\n id: string;\n apiKey: string;\n label: string;\n kind: 'collection' | 'singleton';\n localized: boolean;\n draftAndPublish: boolean;\n};\n\nexport type HookEntry = {\n id: string;\n locale: string | null;\n /** Which head the change is about: the draft (create/update), the live version (publish), or a delete. */\n state: 'draft' | 'published' | 'deleted';\n};\n\nexport type ContentReadOptions = {\n locale?: string;\n /** Read as this principal (its permissions apply). Default: Shapio itself (everything). */\n principal?: Principal;\n};\n\nexport type ContentReadEntry = {\n id: string;\n locale: string;\n status: string;\n data: Record<string, unknown>;\n};\n\n/** Read-only access to content (drafts, as the admin API shows them). Reads committed data. */\nexport type ContentReadService = {\n get: (modelKey: string, id: string, options?: ContentReadOptions) => Promise<ContentReadEntry>;\n /** `query` is a delivery-style querystring, e.g. `filters[title][$contains]=a&pageSize=10`. */\n list: (\n modelKey: string,\n query?: string,\n options?: Omit<ContentReadOptions, 'locale'>,\n ) => Promise<{ items: ContentReadEntry[]; total: number }>;\n /** Number of (non-deleted) entries of a model. */\n count: (modelKey: string) => Promise<number>;\n /** The active content models (collections and singletons). */\n models: () => Promise<HookModel[]>;\n};\n\nexport type MediaUsage = {\n entryId: string;\n modelId: string;\n fieldId: string;\n locale: string;\n state: string;\n};\n\nexport type MediaReferenceService = {\n /** Where an asset is used (up to 100 references, plus the total). */\n usages: (assetId: string) => Promise<{ items: MediaUsage[]; total: number }>;\n};\n\nexport type EnqueueOptions = {\n runAt?: Date;\n /** Enqueueing the same key twice creates one job. */\n idempotencyKey?: string;\n maxAttempts?: number;\n};\n\nexport type ExtensionJobService = {\n /** Enqueues one of the project's own jobs (`jobs` in the config), by its name without the `ext.` prefix. */\n enqueue: (\n name: string,\n payload?: Record<string, unknown>,\n options?: EnqueueOptions,\n ) => Promise<{ id: string; created: boolean }>;\n};\n\n/**\n * What Shapio offers extensions. Deliberately small; everything else goes through `trx` or HTTP.\n *\n * Content and media are per site. The services handed to a hook read the hook's site; the services given to\n * routes, jobs and service factories read the primary site. Use `forSite` for another one (in a custom\n * route: `services.forSite(request.site)`).\n */\nexport type ShapioServices = {\n /** The site `content` and `media` read. */\n site: ExtensionSite;\n /** The same services reading another site. */\n forSite: (site: ExtensionSite) => ShapioServices;\n content: ContentReadService;\n media: MediaReferenceService;\n jobs: ExtensionJobService;\n logger: FastifyBaseLogger;\n};\n\n/**\n * Your own services, by name. Augment it for typed access everywhere services appear:\n *\n * ```ts\n * declare module '@shapio/cms/config' {\n * interface CustomServices { stats: StatsService }\n * }\n * ```\n */\n// eslint-disable-next-line @typescript-eslint/no-empty-object-type -- augmented by projects\nexport interface CustomServices {}\n\nexport type ExtensionServices = ShapioServices & CustomServices;\n\ntype HookContextBase = {\n /** The site the entry belongs to; `services` read this site. */\n site: ExtensionSite;\n model: HookModel;\n entry: HookEntry;\n locale: string | null;\n /** The document after the change (absent for deletes). */\n data: EntryData | undefined;\n /** The document before the change: the previous draft (update) or the live version (publish). */\n before: EntryData | undefined;\n /** Who made the change (an admin, an API token, an app user, or Shapio itself for scheduled work). */\n principal: Principal;\n services: ExtensionServices;\n logger: FastifyBaseLogger;\n /** Aborted when Shapio shuts down. */\n signal: AbortSignal;\n};\n\n/**\n * `before*` hooks run INSIDE the write's transaction, before it commits. Throw `HookError` (or call\n * `reject`) to abort the write with 422 `HOOK_REJECTED`; nothing of the write is kept. Other errors abort it\n * too, as a 500. Database work through `trx` commits or rolls back with the write.\n */\nexport type BeforeHookContext = HookContextBase & {\n event: BeforeHookEvent;\n trx: Transaction<DB>;\n reject: (message: string, details?: Record<string, unknown>) => never;\n};\n\n/**\n * `after*` hooks run AFTER the write committed, as a job (retried with backoff on error, never rolling the\n * write back). Database work through `trx` is exactly once: it commits together with the record that the\n * hook ran. Other side effects (HTTP calls) are at least once: make them idempotent with `idempotencyKey`.\n */\nexport type AfterHookContext = HookContextBase & {\n event: AfterHookEvent;\n trx: Transaction<DB>;\n /** The outbox event the hook runs for. */\n eventId: string;\n /** `<eventId>:<hook name>`: stable across retries. */\n idempotencyKey: string;\n attempt: number;\n};\n\nexport type BeforeHook = (context: BeforeHookContext) => Promise<void> | void;\nexport type AfterHook = (context: AfterHookContext) => Promise<void> | void;\n\nexport type ModelHooks = { [E in BeforeHookEvent]?: BeforeHook } & { [E in AfterHookEvent]?: AfterHook };\n\nexport type ServiceFactoryContext = {\n /** Kysely on Shapio's database. Shapio's own tables are internal and may change between releases. */\n db: Kysely<DB>;\n config: ExtensionHostConfig;\n logger: FastifyBaseLogger;\n /** Shapio's services plus the custom services declared before this one. */\n services: ExtensionServices;\n};\n\nexport type ExtensionHostConfig = {\n nodeEnv: 'development' | 'production' | 'test';\n /** PUBLIC_URL origin, without a trailing slash. */\n publicUrl: string;\n basePath: string;\n /** The directory holding shapio.config and extensions/. */\n projectDir: string;\n};\n\nexport type ServiceFactory = (context: ServiceFactoryContext) => unknown;\n\n/** Options every custom route plugin receives (also available as `app.ext`). */\nexport type ExtensionRouteOptions = {\n services: ExtensionServices;\n /** Shapio's permission evaluator: `permissions.evaluate(request.principal, { action, modelId })`. */\n permissions: PermissionEvaluator;\n logger: FastifyBaseLogger;\n /** preHandler: 401/403 unless the caller is an admin user or an admin API token. */\n requireAdmin: preHandlerAsyncHookHandler;\n};\n\nexport type ExtensionRoute = {\n /** Mounted at `/api/ext/<prefix>` (under BASE_PATH). Lower-case letters, digits and dashes. */\n prefix: string;\n plugin: FastifyPluginAsync<ExtensionRouteOptions>;\n};\n\nexport type JobHandlerContext = {\n jobId: string;\n payload: Record<string, unknown>;\n attempt: number;\n maxAttempts: number;\n idempotencyKey: string | null;\n services: ExtensionServices;\n logger: FastifyBaseLogger;\n signal: AbortSignal;\n};\n\n/** Throw to retry with backoff; the return value (JSON) is stored as the job result. */\nexport type ExtensionJobHandler = (context: JobHandlerContext) => Promise<unknown>;\n\nexport type ShapioConfig = {\n /** Lifecycle hooks by model API ID (or stable model UUID); `*` runs for every model. */\n hooks?: Record<string, ModelHooks>;\n routes?: ExtensionRoute[];\n /** Constructed once at startup, in order, and shared by hooks, routes and jobs. */\n services?: Record<string, ServiceFactory>;\n /** Custom field editor modules: file names inside `extensions/editors/` (built ES modules). */\n editors?: string[];\n /** Job handlers by name; registered as `ext.<name>`. */\n jobs?: Record<string, ExtensionJobHandler>;\n};\n\n/** Identity helper for completion and type checking in `shapio.config.ts`. */\nexport const defineConfig = (config: ShapioConfig): ShapioConfig => config;\n\nconst HOOK_ERROR_BRAND = Symbol.for('shapio.HookError');\n\n/**\n * Thrown by a `before*` hook to reject a write: the API answers 422 with code `HOOK_REJECTED`, this message\n * and the details. Recognised by a brand, not `instanceof`, so a copy of this class loaded from another\n * path (a project's own `node_modules`) works the same.\n */\nexport class HookError extends Error {\n readonly details: Record<string, unknown> | undefined;\n readonly [HOOK_ERROR_BRAND] = true;\n\n constructor(message: string, details?: Record<string, unknown>) {\n super(message);\n this.name = 'HookError';\n this.details = details;\n }\n}\n\nexport const isHookError = (error: unknown): error is HookError =>\n typeof error === 'object' &&\n error !== null &&\n (error as Record<symbol, unknown>)[HOOK_ERROR_BRAND] === true;\n"],"mappings":";;;;;;;;;;;;;;;;AAyCA,MAAa,6BAA6B;;AAsO1C,MAAa,gBAAgB,WAAuC;AAEpE,MAAM,mBAAmB,OAAO,IAAI,kBAAkB;;;;;;AAOtD,IAAa,YAAb,cAA+B,MAAM;CACnC;CACA,CAAU,oBAAoB;CAE9B,YAAY,SAAiB,SAAmC;EAC9D,MAAM,OAAO;EACb,KAAK,OAAO;EACZ,KAAK,UAAU;CACjB;AACF;AAEA,MAAa,eAAe,UAC1B,OAAO,UAAU,YACjB,UAAU,QACT,MAAkC,sBAAsB"}
1
+ {"version":3,"file":"config.js","names":[],"sources":["../src/extensions/public.ts"],"sourcesContent":["import type { FastifyBaseLogger, FastifyPluginAsync, preHandlerAsyncHookHandler } from 'fastify';\nimport type { Kysely, Transaction } from 'kysely';\nimport type { DB } from '../db/types.js';\nimport type { PermissionEvaluator, Principal } from '../permissions/types.js';\nimport type { RouteAuditConfig } from '../plugins/auditDeclaration.js';\n\n// What Shapio adds to Fastify, repeated here so custom route code is typed without the server's internals.\ndeclare module 'fastify' {\n interface FastifyRequest {\n /** Who is calling. Anonymous unless a session cookie or API token resolved. Never null after onRequest. */\n principal: Principal;\n /**\n * The request's site on a site route (custom routes are site routes): the credential's site, else the\n * `Shapio-Site` header or `?site=`, else the primary site. Undefined on a route declaring\n * `config.site = 'network'`.\n */\n site: { id: string; key: string } | undefined;\n }\n interface FastifyContextConfig {\n /** Required on every mutating route: the audit action recorded on success, or `{ exempt: '<why>' }`. */\n audit?: RouteAuditConfig;\n /** `'network'` for a custom route that is about the whole instance rather than one site. */\n site?: 'site' | 'network';\n }\n}\n\n/**\n * The project extension contract (ADR 0009), imported by project authors from `@shapio/cms/config`:\n *\n * ```ts\n * import { defineConfig } from '@shapio/cms/config';\n * export const config = defineConfig({ hooks: { article: { beforePublish: (ctx) => { ... } } } });\n * ```\n *\n * Extensions are code: changing them needs a restart of Shapio (never a rebuild). Content models are never\n * configured here; they change live in the admin. This file has no runtime imports from the server, so a\n * config that imports it stays cheap to load.\n *\n * Stability: everything exported here follows semver with `EXTENSION_CONTRACT_VERSION`; Shapio's database\n * tables (reachable through `trx`) are internal and may change in any release.\n */\nexport const EXTENSION_CONTRACT_VERSION = 1;\n\nexport type BeforeHookEvent = 'beforeCreate' | 'beforeUpdate' | 'beforePublish' | 'beforeDelete';\nexport type AfterHookEvent = 'afterCreate' | 'afterUpdate' | 'afterPublish' | 'afterDelete';\nexport type HookEvent = BeforeHookEvent | AfterHookEvent;\n\n/** A site of a multi-site instance: its stable ID and its key (sites share the schema, not content). */\nexport type ExtensionSite = { id: string; key: string };\n\n/** Entry data keyed by field API key (the admin API's shape; media and relations are IDs). */\nexport type EntryData = Readonly<Record<string, unknown>>;\n\nexport type HookModel = {\n /** Stable model ID (never changes). */\n id: string;\n apiKey: string;\n label: string;\n kind: 'collection' | 'singleton';\n localized: boolean;\n draftAndPublish: boolean;\n};\n\nexport type HookEntry = {\n id: string;\n locale: string | null;\n /** Which head the change is about: the draft (create/update), the live version (publish), or a delete. */\n state: 'draft' | 'published' | 'deleted';\n};\n\nexport type ContentReadOptions = {\n locale?: string;\n /** Read as this principal (its permissions apply). Default: Shapio itself (everything). */\n principal?: Principal;\n};\n\nexport type ContentReadEntry = {\n id: string;\n locale: string;\n status: string;\n data: Record<string, unknown>;\n};\n\n/** Read-only access to content (drafts, as the admin API shows them). Reads committed data. */\nexport type ContentReadService = {\n get: (modelKey: string, id: string, options?: ContentReadOptions) => Promise<ContentReadEntry>;\n /** `query` is a delivery-style querystring, e.g. `filters[title][$contains]=a&pageSize=10`. */\n list: (\n modelKey: string,\n query?: string,\n options?: Omit<ContentReadOptions, 'locale'>,\n ) => Promise<{ items: ContentReadEntry[]; total: number }>;\n /** Number of (non-deleted) entries of a model. */\n count: (modelKey: string) => Promise<number>;\n /** The active content models (collections and singletons) of this site: shared ones and its own. */\n models: () => Promise<HookModel[]>;\n};\n\nexport type MediaUsage = {\n entryId: string;\n modelId: string;\n fieldId: string;\n locale: string;\n state: string;\n};\n\nexport type MediaReferenceService = {\n /** Where an asset is used (up to 100 references, plus the total). */\n usages: (assetId: string) => Promise<{ items: MediaUsage[]; total: number }>;\n};\n\nexport type EnqueueOptions = {\n runAt?: Date;\n /** Enqueueing the same key twice creates one job. */\n idempotencyKey?: string;\n maxAttempts?: number;\n};\n\nexport type ExtensionJobService = {\n /** Enqueues one of the project's own jobs (`jobs` in the config), by its name without the `ext.` prefix. */\n enqueue: (\n name: string,\n payload?: Record<string, unknown>,\n options?: EnqueueOptions,\n ) => Promise<{ id: string; created: boolean }>;\n};\n\n/**\n * What Shapio offers extensions. Deliberately small; everything else goes through `trx` or HTTP.\n *\n * Content and media are per site. The services handed to a hook read the hook's site; the services given to\n * routes, jobs and service factories read the primary site. Use `forSite` for another one (in a custom\n * route: `services.forSite(request.site)`).\n */\nexport type ShapioServices = {\n /** The site `content` and `media` read. */\n site: ExtensionSite;\n /** The same services reading another site. */\n forSite: (site: ExtensionSite) => ShapioServices;\n content: ContentReadService;\n media: MediaReferenceService;\n jobs: ExtensionJobService;\n logger: FastifyBaseLogger;\n};\n\n/**\n * Your own services, by name. Augment it for typed access everywhere services appear:\n *\n * ```ts\n * declare module '@shapio/cms/config' {\n * interface CustomServices { stats: StatsService }\n * }\n * ```\n */\n// eslint-disable-next-line @typescript-eslint/no-empty-object-type -- augmented by projects\nexport interface CustomServices {}\n\nexport type ExtensionServices = ShapioServices & CustomServices;\n\ntype HookContextBase = {\n /** The site the entry belongs to; `services` read this site. */\n site: ExtensionSite;\n model: HookModel;\n entry: HookEntry;\n locale: string | null;\n /** The document after the change (absent for deletes). */\n data: EntryData | undefined;\n /** The document before the change: the previous draft (update) or the live version (publish). */\n before: EntryData | undefined;\n /** Who made the change (an admin, an API token, an app user, or Shapio itself for scheduled work). */\n principal: Principal;\n services: ExtensionServices;\n logger: FastifyBaseLogger;\n /** Aborted when Shapio shuts down. */\n signal: AbortSignal;\n};\n\n/**\n * `before*` hooks run INSIDE the write's transaction, before it commits. Throw `HookError` (or call\n * `reject`) to abort the write with 422 `HOOK_REJECTED`; nothing of the write is kept. Other errors abort it\n * too, as a 500. Database work through `trx` commits or rolls back with the write.\n */\nexport type BeforeHookContext = HookContextBase & {\n event: BeforeHookEvent;\n trx: Transaction<DB>;\n reject: (message: string, details?: Record<string, unknown>) => never;\n};\n\n/**\n * `after*` hooks run AFTER the write committed, as a job (retried with backoff on error, never rolling the\n * write back). Database work through `trx` is exactly once: it commits together with the record that the\n * hook ran. Other side effects (HTTP calls) are at least once: make them idempotent with `idempotencyKey`.\n */\nexport type AfterHookContext = HookContextBase & {\n event: AfterHookEvent;\n trx: Transaction<DB>;\n /** The outbox event the hook runs for. */\n eventId: string;\n /** `<eventId>:<hook name>`: stable across retries. */\n idempotencyKey: string;\n attempt: number;\n};\n\nexport type BeforeHook = (context: BeforeHookContext) => Promise<void> | void;\nexport type AfterHook = (context: AfterHookContext) => Promise<void> | void;\n\nexport type ModelHooks = { [E in BeforeHookEvent]?: BeforeHook } & { [E in AfterHookEvent]?: AfterHook };\n\nexport type ServiceFactoryContext = {\n /** Kysely on Shapio's database. Shapio's own tables are internal and may change between releases. */\n db: Kysely<DB>;\n config: ExtensionHostConfig;\n logger: FastifyBaseLogger;\n /** Shapio's services plus the custom services declared before this one. */\n services: ExtensionServices;\n};\n\nexport type ExtensionHostConfig = {\n nodeEnv: 'development' | 'production' | 'test';\n /** PUBLIC_URL origin, without a trailing slash. */\n publicUrl: string;\n basePath: string;\n /** The directory holding shapio.config and extensions/. */\n projectDir: string;\n};\n\nexport type ServiceFactory = (context: ServiceFactoryContext) => unknown;\n\n/** Options every custom route plugin receives (also available as `app.ext`). */\nexport type ExtensionRouteOptions = {\n services: ExtensionServices;\n /** Shapio's permission evaluator: `permissions.evaluate(request.principal, { action, modelId })`. */\n permissions: PermissionEvaluator;\n logger: FastifyBaseLogger;\n /** preHandler: 401/403 unless the caller is an admin user or an admin API token. */\n requireAdmin: preHandlerAsyncHookHandler;\n};\n\nexport type ExtensionRoute = {\n /** Mounted at `/api/ext/<prefix>` (under BASE_PATH). Lower-case letters, digits and dashes. */\n prefix: string;\n plugin: FastifyPluginAsync<ExtensionRouteOptions>;\n};\n\nexport type JobHandlerContext = {\n jobId: string;\n payload: Record<string, unknown>;\n attempt: number;\n maxAttempts: number;\n idempotencyKey: string | null;\n services: ExtensionServices;\n logger: FastifyBaseLogger;\n signal: AbortSignal;\n};\n\n/** Throw to retry with backoff; the return value (JSON) is stored as the job result. */\nexport type ExtensionJobHandler = (context: JobHandlerContext) => Promise<unknown>;\n\nexport type ShapioConfig = {\n /** Lifecycle hooks by model API ID (or stable model UUID); `*` runs for every model. */\n hooks?: Record<string, ModelHooks>;\n routes?: ExtensionRoute[];\n /** Constructed once at startup, in order, and shared by hooks, routes and jobs. */\n services?: Record<string, ServiceFactory>;\n /** Custom field editor modules: file names inside `extensions/editors/` (built ES modules). */\n editors?: string[];\n /** Job handlers by name; registered as `ext.<name>`. */\n jobs?: Record<string, ExtensionJobHandler>;\n};\n\n/** Identity helper for completion and type checking in `shapio.config.ts`. */\nexport const defineConfig = (config: ShapioConfig): ShapioConfig => config;\n\nconst HOOK_ERROR_BRAND = Symbol.for('shapio.HookError');\n\n/**\n * Thrown by a `before*` hook to reject a write: the API answers 422 with code `HOOK_REJECTED`, this message\n * and the details. Recognised by a brand, not `instanceof`, so a copy of this class loaded from another\n * path (a project's own `node_modules`) works the same.\n */\nexport class HookError extends Error {\n readonly details: Record<string, unknown> | undefined;\n readonly [HOOK_ERROR_BRAND] = true;\n\n constructor(message: string, details?: Record<string, unknown>) {\n super(message);\n this.name = 'HookError';\n this.details = details;\n }\n}\n\nexport const isHookError = (error: unknown): error is HookError =>\n typeof error === 'object' &&\n error !== null &&\n (error as Record<symbol, unknown>)[HOOK_ERROR_BRAND] === true;\n"],"mappings":";;;;;;;;;;;;;;;;AAyCA,MAAa,6BAA6B;;AAsO1C,MAAa,gBAAgB,WAAuC;AAEpE,MAAM,mBAAmB,OAAO,IAAI,kBAAkB;;;;;;AAOtD,IAAa,YAAb,cAA+B,MAAM;CACnC;CACA,CAAU,oBAAoB;CAE9B,YAAY,SAAiB,SAAmC;EAC9D,MAAM,OAAO;EACb,KAAK,OAAO;EACZ,KAAK,UAAU;CACjB;AACF;AAEA,MAAa,eAAe,UAC1B,OAAO,UAAU,YACjB,UAAU,QACT,MAAkC,sBAAsB"}
package/dist/index.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { A as ServiceFactoryContext, C as HookEvent, D as MediaUsage, E as MediaReferenceService, F as PermissionEvaluator, I as Principal, L as DB, M as ShapioServices, N as defineConfig, O as ModelHooks, P as isHookError, R as OutboxEvents, S as HookError, T as JobHandlerContext, _ as ExtensionRoute, a as BeforeHookContext, b as ExtensionSite, c as ContentReadOptions, d as EXTENSION_CONTRACT_VERSION, f as EnqueueOptions, g as ExtensionJobService, h as ExtensionJobHandler, i as BeforeHook, j as ShapioConfig, k as ServiceFactory, l as ContentReadService, m as ExtensionHostConfig, n as AfterHookContext, o as BeforeHookEvent, p as EntryData, r as AfterHookEvent, s as ContentReadEntry, t as AfterHook, u as CustomServices, v as ExtensionRouteOptions, w as HookModel, x as HookEntry, y as ExtensionServices, z as ContentData } from "./public-CKU0Gkfq.js";
1
+ import { A as ServiceFactoryContext, C as HookEvent, D as MediaUsage, E as MediaReferenceService, F as PermissionEvaluator, I as Principal, L as DB, M as ShapioServices, N as defineConfig, O as ModelHooks, P as isHookError, R as OutboxEvents, S as HookError, T as JobHandlerContext, _ as ExtensionRoute, a as BeforeHookContext, b as ExtensionSite, c as ContentReadOptions, d as EXTENSION_CONTRACT_VERSION, f as EnqueueOptions, g as ExtensionJobService, h as ExtensionJobHandler, i as BeforeHook, j as ShapioConfig, k as ServiceFactory, l as ContentReadService, m as ExtensionHostConfig, n as AfterHookContext, o as BeforeHookEvent, p as EntryData, r as AfterHookEvent, s as ContentReadEntry, t as AfterHook, u as CustomServices, v as ExtensionRouteOptions, w as HookModel, x as HookEntry, y as ExtensionServices, z as ContentData } from "./public-CGO8RBn3.js";
2
2
  import { FastifyBaseLogger, FastifyInstance } from "fastify";
3
3
  import { Kysely, Selectable, Transaction } from "kysely";
4
4
  import { Static, Type } from "typebox";
@@ -780,6 +780,11 @@ type ModelField = {
780
780
  type FieldVisibilityLookup = {
781
781
  getModelFields: (modelId: string) => Promise<readonly ModelField[] | undefined>;
782
782
  hasModel: (modelId: string) => Promise<boolean>;
783
+ /**
784
+ * The site a definition belongs to: null when it is shared (or unknown). Schema management of a site's
785
+ * definition is granted by roles held on that site (plan site-schema, rule 4).
786
+ */
787
+ getModelSite: (modelId: string) => Promise<string | null>;
783
788
  };
784
789
  //#endregion
785
790
  //#region src/publishing/outbound/ssrf.d.ts
package/dist/index.js CHANGED
@@ -1,3 +1,3 @@
1
- import { a as loadConfig, n as startServer, s as buildApp, t as startDedicatedWorker, u as SHAPIO_VERSION } from "./worker-C-MSYr4l.js";
1
+ import { a as loadConfig, n as startServer, s as buildApp, t as startDedicatedWorker, u as SHAPIO_VERSION } from "./worker-BLXy8aRW.js";
2
2
  import { EXTENSION_CONTRACT_VERSION, HookError, defineConfig, isHookError } from "./config.js";
3
3
  export { EXTENSION_CONTRACT_VERSION, HookError, SHAPIO_VERSION, buildApp, defineConfig, isHookError, loadConfig, startDedicatedWorker, startServer };
@@ -510,6 +510,7 @@ interface Models {
510
510
  deleted_at: Timestamp | null;
511
511
  id: string;
512
512
  kind: string;
513
+ site_id: string | null;
513
514
  updated_at: Generated<Timestamp>;
514
515
  }
515
516
  interface OutboxEvents {
@@ -628,6 +629,7 @@ interface SchemaDrafts {
628
629
  definition_id: string;
629
630
  id: Generated<string>;
630
631
  kind: string;
632
+ shared: Generated<boolean>;
631
633
  updated_at: Generated<Timestamp>;
632
634
  updated_by_id: string | null;
633
635
  updated_by_type: string;
@@ -899,6 +901,12 @@ type PolicyRequest = {
899
901
  type PermissionEvaluator = {
900
902
  evaluate: (principal: Principal, request: PolicyRequest) => Promise<Policy>;
901
903
  canPerform: (principal: Principal, action: GlobalAction) => Promise<boolean>;
904
+ /**
905
+ * `canPerform` for the request's site: an action in `SITE_GRANTABLE_ACTIONS` also counts the roles that
906
+ * apply on `siteId` when the principal acts on that site (an admin narrowed to it, a site token of it, a
907
+ * network token). Any other action is `canPerform`.
908
+ */
909
+ canPerformOnSite: (principal: Principal, action: GlobalAction, siteId: string) => Promise<boolean>;
902
910
  };
903
911
  //#endregion
904
912
  //#region src/plugins/auditDeclaration.d.ts
@@ -1002,7 +1010,7 @@ type ContentReadService = {
1002
1010
  }>;
1003
1011
  /** Number of (non-deleted) entries of a model. */
1004
1012
  count: (modelKey: string) => Promise<number>;
1005
- /** The active content models (collections and singletons). */
1013
+ /** The active content models (collections and singletons) of this site: shared ones and its own. */
1006
1014
  models: () => Promise<HookModel[]>;
1007
1015
  };
1008
1016
  type MediaUsage = {
@@ -1174,4 +1182,4 @@ declare class HookError extends Error {
1174
1182
  declare const isHookError: (error: unknown) => error is HookError;
1175
1183
  //#endregion
1176
1184
  export { ServiceFactoryContext as A, HookEvent as C, MediaUsage as D, MediaReferenceService as E, PermissionEvaluator as F, Principal as I, DB as L, ShapioServices as M, defineConfig as N, ModelHooks as O, isHookError as P, OutboxEvents as R, HookError as S, JobHandlerContext as T, ExtensionRoute as _, BeforeHookContext as a, ExtensionSite as b, ContentReadOptions as c, EXTENSION_CONTRACT_VERSION as d, EnqueueOptions as f, ExtensionJobService as g, ExtensionJobHandler as h, BeforeHook as i, ShapioConfig as j, ServiceFactory as k, ContentReadService as l, ExtensionHostConfig as m, AfterHookContext as n, BeforeHookEvent as o, EntryData as p, AfterHookEvent as r, ContentReadEntry as s, AfterHook as t, CustomServices as u, ExtensionRouteOptions as v, HookModel as w, HookEntry as x, ExtensionServices as y, ContentData as z };
1177
- //# sourceMappingURL=public-CKU0Gkfq.d.ts.map
1185
+ //# sourceMappingURL=public-CGO8RBn3.d.ts.map