@shapio/cms 0.5.7 → 0.5.9
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.
- package/dist/admin/assets/{AssetTile-H0hABhB2.js → AssetTile-Da76KsyX.js} +2 -2
- package/dist/admin/assets/{AssetTile-H0hABhB2.js.map → AssetTile-Da76KsyX.js.map} +1 -1
- package/dist/admin/assets/AssistError-Wr62cDj3.js +2 -0
- package/dist/admin/assets/{AssistError-1s3PuY0X.js.map → AssistError-Wr62cDj3.js.map} +1 -1
- package/dist/admin/assets/{BlockMenuItems-a8zXdfcF.js → BlockMenuItems-BMiEVCIT.js} +2 -2
- package/dist/admin/assets/{BlockMenuItems-a8zXdfcF.js.map → BlockMenuItems-BMiEVCIT.js.map} +1 -1
- package/dist/admin/assets/Body-BEW1sAAB.js +2 -0
- package/dist/admin/assets/Body-BEW1sAAB.js.map +1 -0
- package/dist/admin/assets/Builder-Tk_5Orrl.js +2 -0
- package/dist/admin/assets/Builder-Tk_5Orrl.js.map +1 -0
- package/dist/admin/assets/{CodeEditor-BLbJZE9v.js → CodeEditor-Ck7ggv6w.js} +2 -2
- package/dist/admin/assets/{CodeEditor-BLbJZE9v.js.map → CodeEditor-Ck7ggv6w.js.map} +1 -1
- package/dist/admin/assets/{CopyButton-BOtR_h1H.js → CopyButton-WMWuSVsk.js} +2 -2
- package/dist/admin/assets/{CopyButton-BOtR_h1H.js.map → CopyButton-WMWuSVsk.js.map} +1 -1
- package/dist/admin/assets/{CursorPager-DwLW13ov.js → CursorPager-CsnzX1P8.js} +2 -2
- package/dist/admin/assets/{CursorPager-DwLW13ov.js.map → CursorPager-CsnzX1P8.js.map} +1 -1
- package/dist/admin/assets/{ExternalLink-BITMgS1K.js → ExternalLink-D80sb5Jj.js} +2 -2
- package/dist/admin/assets/{ExternalLink-BITMgS1K.js.map → ExternalLink-D80sb5Jj.js.map} +1 -1
- package/dist/admin/assets/{FocalPoint-n-a_AXKN.js → FocalPoint-CstZuVmt.js} +2 -2
- package/dist/admin/assets/{FocalPoint-n-a_AXKN.js.map → FocalPoint-CstZuVmt.js.map} +1 -1
- package/dist/admin/assets/Form-CEOW2OFF.js +2 -0
- package/dist/admin/assets/Form-CEOW2OFF.js.map +1 -0
- package/dist/admin/assets/{FormCheckboxGroup-1fYisXrr.js → FormCheckboxGroup-VjWVMiF3.js} +2 -2
- package/dist/admin/assets/{FormCheckboxGroup-1fYisXrr.js.map → FormCheckboxGroup-VjWVMiF3.js.map} +1 -1
- package/dist/admin/assets/{FormRadioGroup-B0VZyb1t.js → FormRadioGroup-BQurJa8M.js} +2 -2
- package/dist/admin/assets/{FormRadioGroup-B0VZyb1t.js.map → FormRadioGroup-BQurJa8M.js.map} +1 -1
- package/dist/admin/assets/FormSelectField-B4sjP-pj.js +2 -0
- package/dist/admin/assets/FormSelectField-B4sjP-pj.js.map +1 -0
- package/dist/admin/assets/FormSheet-V99zdfQe.js +2 -0
- package/dist/admin/assets/FormSheet-V99zdfQe.js.map +1 -0
- package/dist/admin/assets/{FormSwitchField-d8G-YCSX.js → FormSwitchField-RZgoP--n.js} +2 -2
- package/dist/admin/assets/{FormSwitchField-d8G-YCSX.js.map → FormSwitchField-RZgoP--n.js.map} +1 -1
- package/dist/admin/assets/{FormTextareaField-BSKNeTPW.js → FormTextareaField-CzXgoQzf.js} +2 -2
- package/dist/admin/assets/{FormTextareaField-BSKNeTPW.js.map → FormTextareaField-CzXgoQzf.js.map} +1 -1
- package/dist/admin/assets/{HintedLabel-CiTDE112.js → HintedLabel-Cd9nuSqV.js} +2 -2
- package/dist/admin/assets/{HintedLabel-CiTDE112.js.map → HintedLabel-Cd9nuSqV.js.map} +1 -1
- package/dist/admin/assets/{InfoHint-B3XcXtiN.js → InfoHint-ymRmHKMr.js} +2 -2
- package/dist/admin/assets/{InfoHint-B3XcXtiN.js.map → InfoHint-ymRmHKMr.js.map} +1 -1
- package/dist/admin/assets/{InlineConfirm-BfsNH5S_.js → InlineConfirm-A4IqkrGp.js} +2 -2
- package/dist/admin/assets/{InlineConfirm-BfsNH5S_.js.map → InlineConfirm-A4IqkrGp.js.map} +1 -1
- package/dist/admin/assets/{InsertMenuItem-BGwDW_Lu.js → InsertMenuItem-Bf7S7qbm.js} +2 -2
- package/dist/admin/assets/{InsertMenuItem-BGwDW_Lu.js.map → InsertMenuItem-Bf7S7qbm.js.map} +1 -1
- package/dist/admin/assets/{LinkTabs-8SmS1vCd.js → LinkTabs-oQXsy1I3.js} +2 -2
- package/dist/admin/assets/{LinkTabs-8SmS1vCd.js.map → LinkTabs-oQXsy1I3.js.map} +1 -1
- package/dist/admin/assets/{Match-Dc8bXsKo.js → Match-DJq8wn3e.js} +2 -2
- package/dist/admin/assets/{Match-Dc8bXsKo.js.map → Match-DJq8wn3e.js.map} +1 -1
- package/dist/admin/assets/{NoAccess-CKEKPmqD.js → NoAccess-CZufdbPI.js} +2 -2
- package/dist/admin/assets/{NoAccess-CKEKPmqD.js.map → NoAccess-CZufdbPI.js.map} +1 -1
- package/dist/admin/assets/{QueryView-KFtwko9F.js → QueryView-DO9TFWYE.js} +2 -2
- package/dist/admin/assets/{QueryView-KFtwko9F.js.map → QueryView-DO9TFWYE.js.map} +1 -1
- package/dist/admin/assets/{RadioTile-CzfxWgHx.js → RadioTile-DmKBFkpy.js} +2 -2
- package/dist/admin/assets/{RadioTile-CzfxWgHx.js.map → RadioTile-DmKBFkpy.js.map} +1 -1
- package/dist/admin/assets/{RichTextField-BsBoOAP-.js → RichTextField-BpxyusP4.js} +4 -4
- package/dist/admin/assets/{RichTextField-BsBoOAP-.js.map → RichTextField-BpxyusP4.js.map} +1 -1
- package/dist/admin/assets/{RowTitle-Cn5mAU58.js → RowTitle-DVOfgxOd.js} +2 -2
- package/dist/admin/assets/{RowTitle-Cn5mAU58.js.map → RowTitle-DVOfgxOd.js.map} +1 -1
- package/dist/admin/assets/{SecretReveal-BCOJAisI.js → SecretReveal-DRCqVEFF.js} +2 -2
- package/dist/admin/assets/{SecretReveal-BCOJAisI.js.map → SecretReveal-DRCqVEFF.js.map} +1 -1
- package/dist/admin/assets/{SharedGlyph-CA8tb7UH.js → SharedGlyph-nsXJPCew.js} +2 -2
- package/dist/admin/assets/{SharedGlyph-CA8tb7UH.js.map → SharedGlyph-nsXJPCew.js.map} +1 -1
- package/dist/admin/assets/StepList-CDZPRd3-.js +2 -0
- package/dist/admin/assets/StepList-CDZPRd3-.js.map +1 -0
- package/dist/admin/assets/Structure-CL51Bvbm.js +2 -0
- package/dist/admin/assets/{Structure-B2HZ9UZu.js.map → Structure-CL51Bvbm.js.map} +1 -1
- package/dist/admin/assets/{SubNavLink-CiCaVV8U.js → SubNavLink-7Cs1LqMv.js} +2 -2
- package/dist/admin/assets/{SubNavLink-CiCaVV8U.js.map → SubNavLink-7Cs1LqMv.js.map} +1 -1
- package/dist/admin/assets/{SuggestAltButton-CqDLAuoa.js → SuggestAltButton-4SaZQOJu.js} +2 -2
- package/dist/admin/assets/{SuggestAltButton-CqDLAuoa.js.map → SuggestAltButton-4SaZQOJu.js.map} +1 -1
- package/dist/admin/assets/{TextLink-HRn66VL1.js → TextLink-Dfs5wsc5.js} +2 -2
- package/dist/admin/assets/{TextLink-HRn66VL1.js.map → TextLink-Dfs5wsc5.js.map} +1 -1
- package/dist/admin/assets/{Thumbnail-mFfESZiW.js → Thumbnail-DauHAkh8.js} +2 -2
- package/dist/admin/assets/{Thumbnail-mFfESZiW.js.map → Thumbnail-DauHAkh8.js.map} +1 -1
- package/dist/admin/assets/Trans-B3UWiZaU.js +2 -0
- package/dist/admin/assets/Trans-B3UWiZaU.js.map +1 -0
- package/dist/admin/assets/{UnsavedChangesGuard-C8cDQGEA.js → UnsavedChangesGuard-DPgih7BX.js} +2 -2
- package/dist/admin/assets/{UnsavedChangesGuard-C8cDQGEA.js.map → UnsavedChangesGuard-DPgih7BX.js.map} +1 -1
- package/dist/admin/assets/{UserAvatar-BItYDTyH.js → UserAvatar-If-zlQNY.js} +2 -2
- package/dist/admin/assets/{UserAvatar-BItYDTyH.js.map → UserAvatar-If-zlQNY.js.map} +1 -1
- package/dist/admin/assets/auth-BFSvtV59.js +2 -0
- package/dist/admin/assets/{auth-CQO4MBUj.js.map → auth-BFSvtV59.js.map} +1 -1
- package/dist/admin/assets/{badge-DNQwGXBl.js → badge-DEe9tqLS.js} +2 -2
- package/dist/admin/assets/{badge-DNQwGXBl.js.map → badge-DEe9tqLS.js.map} +1 -1
- package/dist/admin/assets/{boxes-CAygw8zF.js → boxes-_5klpWNM.js} +2 -2
- package/dist/admin/assets/{boxes-CAygw8zF.js.map → boxes-_5klpWNM.js.map} +1 -1
- package/dist/admin/assets/{calendar-clock-BZGtAvWR.js → calendar-clock-VXok22Xj.js} +2 -2
- package/dist/admin/assets/{calendar-clock-BZGtAvWR.js.map → calendar-clock-VXok22Xj.js.map} +1 -1
- package/dist/admin/assets/changeSets-D5i2SgFV.js +2 -0
- package/dist/admin/assets/{changeSets-EMTUJT0M.js.map → changeSets-D5i2SgFV.js.map} +1 -1
- package/dist/admin/assets/chevron-left-CkRxDtvO.js +2 -0
- package/dist/admin/assets/{chevron-left-DGU3HGYG.js.map → chevron-left-CkRxDtvO.js.map} +1 -1
- package/dist/admin/assets/{circle-check-C37MSJqX.js → circle-check-DtDq7QMo.js} +2 -2
- package/dist/admin/assets/{circle-check-C37MSJqX.js.map → circle-check-DtDq7QMo.js.map} +1 -1
- package/dist/admin/assets/{clock-2arjsgZ4.js → clock-BtvZR9KD.js} +2 -2
- package/dist/admin/assets/{clock-2arjsgZ4.js.map → clock-BtvZR9KD.js.map} +1 -1
- package/dist/admin/assets/{constants-miV4q1ur.js → constants-FKg_ke3y.js} +2 -2
- package/dist/admin/assets/{constants-miV4q1ur.js.map → constants-FKg_ke3y.js.map} +1 -1
- package/dist/admin/assets/content-DKT2ziPH.js +3 -0
- package/dist/admin/assets/content-DKT2ziPH.js.map +1 -0
- package/dist/admin/assets/{contentCounts-DP7YYeZZ.js → contentCounts-BzC7IQqP.js} +2 -2
- package/dist/admin/assets/{contentCounts-DP7YYeZZ.js.map → contentCounts-BzC7IQqP.js.map} +1 -1
- package/dist/admin/assets/{contentTypes-CQsHL657.js → contentTypes-B5taZv3y.js} +2 -2
- package/dist/admin/assets/{contentTypes-CQsHL657.js.map → contentTypes-B5taZv3y.js.map} +1 -1
- package/dist/admin/assets/{context-IKYdzQJ-.js → context-CEVKblBl.js} +2 -2
- package/dist/admin/assets/{context-IKYdzQJ-.js.map → context-CEVKblBl.js.map} +1 -1
- package/dist/admin/assets/{copy-CsSRHgKZ.js → copy-B7vIq8DS.js} +2 -2
- package/dist/admin/assets/{copy-CsSRHgKZ.js.map → copy-B7vIq8DS.js.map} +1 -1
- package/dist/admin/assets/createLucideIcon-BOsNKleB.js +2 -0
- package/dist/admin/assets/createLucideIcon-BOsNKleB.js.map +1 -0
- package/dist/admin/assets/develop-CFlv7IdP.js +11 -0
- package/dist/admin/assets/develop-CFlv7IdP.js.map +1 -0
- package/dist/admin/assets/{dropdown-menu-0dyAtBEd.js → dropdown-menu-B7dJyA8h.js} +2 -2
- package/dist/admin/assets/{dropdown-menu-0dyAtBEd.js.map → dropdown-menu-B7dJyA8h.js.map} +1 -1
- package/dist/admin/assets/{ellipsis-F91991on.js → ellipsis-Ci0rsbCJ.js} +2 -2
- package/dist/admin/assets/{ellipsis-F91991on.js.map → ellipsis-Ci0rsbCJ.js.map} +1 -1
- package/dist/admin/assets/{entryLink-CVB-TdIn.js → entryLink-B0hSb_dN.js} +2 -2
- package/dist/admin/assets/{entryLink-CVB-TdIn.js.map → entryLink-B0hSb_dN.js.map} +1 -1
- package/dist/admin/assets/es2015-1nJWBurR.js +42 -0
- package/dist/admin/assets/es2015-1nJWBurR.js.map +1 -0
- package/dist/admin/assets/{external-link-CdG6kHfA.js → external-link-Bs9YRzvY.js} +2 -2
- package/dist/admin/assets/{external-link-CdG6kHfA.js.map → external-link-Bs9YRzvY.js.map} +1 -1
- package/dist/admin/assets/{field-C6NmRYUN.js → field-BDCHXkZE.js} +2 -2
- package/dist/admin/assets/{field-C6NmRYUN.js.map → field-BDCHXkZE.js.map} +1 -1
- package/dist/admin/assets/{file-stack-28ZtO1xW.js → file-stack-X4OGmkLA.js} +2 -2
- package/dist/admin/assets/{file-stack-28ZtO1xW.js.map → file-stack-X4OGmkLA.js.map} +1 -1
- package/dist/admin/assets/{fileRoute-Bm90K4UY.js → fileRoute-c9UMUr9b.js} +2 -2
- package/dist/admin/assets/{fileRoute-Bm90K4UY.js.map → fileRoute-c9UMUr9b.js.map} +1 -1
- package/dist/admin/assets/{folder-plus-DIk0pWkP.js → folder-plus-De2GNvry.js} +2 -2
- package/dist/admin/assets/{folder-plus-DIk0pWkP.js.map → folder-plus-De2GNvry.js.map} +1 -1
- package/dist/admin/assets/followPlural-CHpz-yo4.js +2 -0
- package/dist/admin/assets/followPlural-CHpz-yo4.js.map +1 -0
- package/dist/admin/assets/{globe-DFr3Gd2w.js → globe-DBw84s8Z.js} +2 -2
- package/dist/admin/assets/{globe-DFr3Gd2w.js.map → globe-DBw84s8Z.js.map} +1 -1
- package/dist/admin/assets/{image-DT79QFa_.js → image-CX4mT-_R.js} +2 -2
- package/dist/admin/assets/{image-DT79QFa_.js.map → image-CX4mT-_R.js.map} +1 -1
- package/dist/admin/assets/{image-off-DFs5upyX.js → image-off-CVaH_qKf.js} +2 -2
- package/dist/admin/assets/{image-off-DFs5upyX.js.map → image-off-CVaH_qKf.js.map} +1 -1
- package/dist/admin/assets/{inbox-CySnQydm.js → inbox-D9SmWt5L.js} +2 -2
- package/dist/admin/assets/{inbox-CySnQydm.js.map → inbox-D9SmWt5L.js.map} +1 -1
- package/dist/admin/assets/inbox-Daw10v5C.js +2 -0
- package/dist/admin/assets/inbox-Daw10v5C.js.map +1 -0
- package/dist/admin/assets/index-BRx5mel0.js +4 -0
- package/dist/admin/assets/index-BRx5mel0.js.map +1 -0
- package/dist/admin/assets/index-DZsQq6fY.css +2 -0
- package/dist/admin/assets/{key-round-D36CePnN.js → key-round-C8sd9CLN.js} +2 -2
- package/dist/admin/assets/{key-round-D36CePnN.js.map → key-round-C8sd9CLN.js.map} +1 -1
- package/dist/admin/assets/{labels-B2HIVxXg.js → labels-B83cEX9w.js} +2 -2
- package/dist/admin/assets/{labels-B2HIVxXg.js.map → labels-B83cEX9w.js.map} +1 -1
- package/dist/admin/assets/{languages-CzbTaQv9.js → languages-DLjdz6gb.js} +2 -2
- package/dist/admin/assets/{languages-CzbTaQv9.js.map → languages-DLjdz6gb.js.map} +1 -1
- package/dist/admin/assets/{layers-BmcodiaH.js → layers-swLuw-3a.js} +2 -2
- package/dist/admin/assets/{layers-BmcodiaH.js.map → layers-swLuw-3a.js.map} +1 -1
- package/dist/admin/assets/{link-2-off-CoJNwrxm.js → link-2-off-CEsI5T8h.js} +2 -2
- package/dist/admin/assets/{link-2-off-CoJNwrxm.js.map → link-2-off-CEsI5T8h.js.map} +1 -1
- package/dist/admin/assets/{link-Pyr2Y35S.js → link-C98FG_p5.js} +2 -2
- package/dist/admin/assets/{link-Pyr2Y35S.js.map → link-C98FG_p5.js.map} +1 -1
- package/dist/admin/assets/locales-CkuC7TJ1.js +2 -0
- package/dist/admin/assets/{locales-Bg3htKo8.js.map → locales-CkuC7TJ1.js.map} +1 -1
- package/dist/admin/assets/media-CbGSd_Mw.js +2 -0
- package/dist/admin/assets/{media-BCnVhaDH.js.map → media-CbGSd_Mw.js.map} +1 -1
- package/dist/admin/assets/{media-CtbfNgc-.js → media-CgxriwNL.js} +2 -2
- package/dist/admin/assets/{media-CtbfNgc-.js.map → media-CgxriwNL.js.map} +1 -1
- package/dist/admin/assets/network-Cc1TAyal.js +2 -0
- package/dist/admin/assets/network-Cc1TAyal.js.map +1 -0
- package/dist/admin/assets/{plus-BoDtdLCo.js → plus-cr9ZfO6j.js} +2 -2
- package/dist/admin/assets/{plus-BoDtdLCo.js.map → plus-cr9ZfO6j.js.map} +1 -1
- package/dist/admin/assets/publishing-RQUj-CyN.js +2 -0
- package/dist/admin/assets/{publishing-DdmWXRaM.js.map → publishing-RQUj-CyN.js.map} +1 -1
- package/dist/admin/assets/{radio-group-BoN9R_3K.js → radio-group-Btmx7dlD.js} +2 -2
- package/dist/admin/assets/{radio-group-BoN9R_3K.js.map → radio-group-Btmx7dlD.js.map} +1 -1
- package/dist/admin/assets/{rotate-ccw-DL6TzcZh.js → rotate-ccw-BP8Ba-mY.js} +2 -2
- package/dist/admin/assets/{rotate-ccw-DL6TzcZh.js.map → rotate-ccw-BP8Ba-mY.js.map} +1 -1
- package/dist/admin/assets/schedules-BIyBlsYZ.js +2 -0
- package/dist/admin/assets/{schedules-BmB9Y73z.js.map → schedules-BIyBlsYZ.js.map} +1 -1
- package/dist/admin/assets/schema-BMQEabwO.js +2 -0
- package/dist/admin/assets/{schema-D-qo7XSF.js.map → schema-BMQEabwO.js.map} +1 -1
- package/dist/admin/assets/{scroll-text-PqeZm472.js → scroll-text-B5vfi9fD.js} +2 -2
- package/dist/admin/assets/{scroll-text-PqeZm472.js.map → scroll-text-B5vfi9fD.js.map} +1 -1
- package/dist/admin/assets/{search-BdwIwOzC.js → search-wj7zbkx1.js} +2 -2
- package/dist/admin/assets/{search-BdwIwOzC.js.map → search-wj7zbkx1.js.map} +1 -1
- package/dist/admin/assets/{searchSchemas-DNjfDxmj.js → searchSchemas-fO_49fDI.js} +2 -2
- package/dist/admin/assets/{searchSchemas-DNjfDxmj.js.map → searchSchemas-fO_49fDI.js.map} +1 -1
- package/dist/admin/assets/{sections-BTS683ur.js → sections-DBQpB0uv.js} +2 -2
- package/dist/admin/assets/{sections-BTS683ur.js.map → sections-DBQpB0uv.js.map} +1 -1
- package/dist/admin/assets/{sections-BfxPwK0u.js → sections-SX-oiQoE.js} +2 -2
- package/dist/admin/assets/{sections-BfxPwK0u.js.map → sections-SX-oiQoE.js.map} +1 -1
- package/dist/admin/assets/{select-Bp8kO5Ko.js → select-JB2Vv7ep.js} +2 -2
- package/dist/admin/assets/{select-Bp8kO5Ko.js.map → select-JB2Vv7ep.js.map} +1 -1
- package/dist/admin/assets/{send-XPWo3m4u.js → send-CzFdgUc_.js} +2 -2
- package/dist/admin/assets/{send-XPWo3m4u.js.map → send-CzFdgUc_.js.map} +1 -1
- package/dist/admin/assets/seo-Bd0sWQMo.js +2 -0
- package/dist/admin/assets/{seo-CceGYTIX.js.map → seo-Bd0sWQMo.js.map} +1 -1
- package/dist/admin/assets/settings-CrRFxhSo.js +2 -0
- package/dist/admin/assets/{settings-TEbLvC-v.js.map → settings-CrRFxhSo.js.map} +1 -1
- package/dist/admin/assets/shapes-EMjfYsXV.js +6 -0
- package/dist/admin/assets/shapes-EMjfYsXV.js.map +1 -0
- package/dist/admin/assets/{skeleton-vXOCdnJv.js → skeleton-Dk-qdg0z.js} +2 -2
- package/dist/admin/assets/{skeleton-vXOCdnJv.js.map → skeleton-Dk-qdg0z.js.map} +1 -1
- package/dist/admin/assets/{snapshots-DUI2t-qF.js → snapshots-DbFQNJgN.js} +2 -2
- package/dist/admin/assets/{snapshots-DUI2t-qF.js.map → snapshots-DbFQNJgN.js.map} +1 -1
- package/dist/admin/assets/{sparkles-CvT-jxrW.js → sparkles-D_kmZJVd.js} +2 -2
- package/dist/admin/assets/{sparkles-CvT-jxrW.js.map → sparkles-D_kmZJVd.js.map} +1 -1
- package/dist/admin/assets/src-CMor9izq.js +7 -0
- package/dist/admin/assets/src-CMor9izq.js.map +1 -0
- package/dist/admin/assets/{stableId-BrtQedPy.js → stableId-g1uxJGSz.js} +2 -2
- package/dist/admin/assets/{stableId-BrtQedPy.js.map → stableId-g1uxJGSz.js.map} +1 -1
- package/dist/admin/assets/{store-CdIFG90N.js → store-CznhNKEi.js} +2 -2
- package/dist/admin/assets/{store-CdIFG90N.js.map → store-CznhNKEi.js.map} +1 -1
- package/dist/admin/assets/{switch-B1xClhNG.js → switch-DyCRGDs7.js} +2 -2
- package/dist/admin/assets/{switch-B1xClhNG.js.map → switch-DyCRGDs7.js.map} +1 -1
- package/dist/admin/assets/{theme-65PB8uAu.js → theme-Cv-MfOv8.js} +2 -2
- package/dist/admin/assets/{theme-65PB8uAu.js.map → theme-Cv-MfOv8.js.map} +1 -1
- package/dist/admin/assets/titles-DrQhW8z3.js +2 -0
- package/dist/admin/assets/titles-DrQhW8z3.js.map +1 -0
- package/dist/admin/assets/tokens-B1S81Epe.js +2 -0
- package/dist/admin/assets/{tokens-ixHjAkDK.js.map → tokens-B1S81Epe.js.map} +1 -1
- package/dist/admin/assets/{tooltip-CS_8cJu2.js → tooltip-CCOeMqiL.js} +2 -2
- package/dist/admin/assets/{tooltip-CS_8cJu2.js.map → tooltip-CCOeMqiL.js.map} +1 -1
- package/dist/admin/assets/{undo-2-BiTANHFz.js → undo-2-DpwwRQTf.js} +2 -2
- package/dist/admin/assets/{undo-2-BiTANHFz.js.map → undo-2-DpwwRQTf.js.map} +1 -1
- package/dist/admin/assets/useContentSchema-uXOfT985.js +2 -0
- package/dist/admin/assets/useContentSchema-uXOfT985.js.map +1 -0
- package/dist/admin/assets/useCursorPager-BHYqHb3M.js +2 -0
- package/dist/admin/assets/{useCursorPager-0zHjlm-7.js.map → useCursorPager-BHYqHb3M.js.map} +1 -1
- package/dist/admin/assets/{useDiscardGuard-CMMJgkI2.js → useDiscardGuard-DvBI3VIz.js} +2 -2
- package/dist/admin/assets/{useDiscardGuard-CMMJgkI2.js.map → useDiscardGuard-DvBI3VIz.js.map} +1 -1
- package/dist/admin/assets/{useMediaPickerDialog-xvQ8cofO.js → useMediaPickerDialog-CehOsykG.js} +2 -2
- package/dist/admin/assets/{useMediaPickerDialog-xvQ8cofO.js.map → useMediaPickerDialog-CehOsykG.js.map} +1 -1
- package/dist/admin/assets/{useMediaUploader-BVNTeSAU.js → useMediaUploader-DvtxYXxD.js} +2 -2
- package/dist/admin/assets/{useMediaUploader-BVNTeSAU.js.map → useMediaUploader-DvtxYXxD.js.map} +1 -1
- package/dist/admin/assets/useModelIndex-D8Q0oM4M.js +2 -0
- package/dist/admin/assets/useModelIndex-D8Q0oM4M.js.map +1 -0
- package/dist/admin/assets/useNetworkPermission-DehDln-U.js +2 -0
- package/dist/admin/assets/{useNetworkPermission-Cts98h9d.js.map → useNetworkPermission-DehDln-U.js.map} +1 -1
- package/dist/admin/assets/{usePaletteItems-DtReWmkd.js → usePaletteItems-CFpNlSOs.js} +2 -2
- package/dist/admin/assets/{usePaletteItems-DtReWmkd.js.map → usePaletteItems-CFpNlSOs.js.map} +1 -1
- package/dist/admin/assets/usePlaces-CySN2Vwz.js +2 -0
- package/dist/admin/assets/usePlaces-CySN2Vwz.js.map +1 -0
- package/dist/admin/assets/useResolvedDefinitions-C279ueCH.js +2 -0
- package/dist/admin/assets/useResolvedDefinitions-C279ueCH.js.map +1 -0
- package/dist/admin/assets/{useResolvedScheme-CScQpr-P.js → useResolvedScheme-DEq7P4R5.js} +2 -2
- package/dist/admin/assets/{useResolvedScheme-CScQpr-P.js.map → useResolvedScheme-DEq7P4R5.js.map} +1 -1
- package/dist/admin/assets/useSaveShortcut-DQuNL1uJ.js +2 -0
- package/dist/admin/assets/useSaveShortcut-DQuNL1uJ.js.map +1 -0
- package/dist/admin/assets/{useSchemaScopeAccess-ByrxIdKM.js → useSchemaScopeAccess-JXOMx51q.js} +2 -2
- package/dist/admin/assets/{useSchemaScopeAccess-ByrxIdKM.js.map → useSchemaScopeAccess-JXOMx51q.js.map} +1 -1
- package/dist/admin/assets/users-38jLQ7zr.js +2 -0
- package/dist/admin/assets/users-38jLQ7zr.js.map +1 -0
- package/dist/admin/assets/{users-DM7CXUBJ.js → users-DYwcVDqp.js} +2 -2
- package/dist/admin/assets/{users-DM7CXUBJ.js.map → users-DYwcVDqp.js.map} +1 -1
- package/dist/admin/assets/{zod-hUh5nXnX.js → zod-vPzaNsuW.js} +2 -2
- package/dist/admin/assets/{zod-hUh5nXnX.js.map → zod-vPzaNsuW.js.map} +1 -1
- package/dist/admin/index.html +60 -58
- package/dist/cli.js +1 -1
- package/dist/{cliMain-D08HeAd_.js → cliMain-DzBXO7Oa.js} +98 -21
- package/dist/cliMain-DzBXO7Oa.js.map +1 -0
- package/dist/config.d.ts +2 -2
- package/dist/index.d.ts +42 -5
- package/dist/index.js +1 -1
- package/dist/public-B57h4F7Y.js.map +1 -1
- package/dist/{public-COKbHR-N.d.ts → public-jttKsns_.d.ts} +47 -5
- package/dist/{worker-jspgh10V.js → worker-6ru1tYBs.js} +2790 -1063
- package/dist/worker-6ru1tYBs.js.map +1 -0
- package/package.json +5 -5
- package/dist/admin/assets/AssistError-1s3PuY0X.js +0 -2
- package/dist/admin/assets/Body-BzZD-TZT.js +0 -2
- package/dist/admin/assets/Body-BzZD-TZT.js.map +0 -1
- package/dist/admin/assets/Builder-60jO_nbS.js +0 -2
- package/dist/admin/assets/Builder-60jO_nbS.js.map +0 -1
- package/dist/admin/assets/Form-D_4fhOy0.js +0 -2
- package/dist/admin/assets/Form-D_4fhOy0.js.map +0 -1
- package/dist/admin/assets/FormSelectField-Br8bkwRF.js +0 -2
- package/dist/admin/assets/FormSelectField-Br8bkwRF.js.map +0 -1
- package/dist/admin/assets/StepList-sriwGP1e.js +0 -2
- package/dist/admin/assets/StepList-sriwGP1e.js.map +0 -1
- package/dist/admin/assets/Structure-B2HZ9UZu.js +0 -2
- package/dist/admin/assets/auth-CQO4MBUj.js +0 -2
- package/dist/admin/assets/changeSets-EMTUJT0M.js +0 -2
- package/dist/admin/assets/chevron-left-DGU3HGYG.js +0 -2
- package/dist/admin/assets/content-CgZS_S7P.js +0 -3
- package/dist/admin/assets/content-CgZS_S7P.js.map +0 -1
- package/dist/admin/assets/createLucideIcon-CLmh7Go-.js +0 -2
- package/dist/admin/assets/createLucideIcon-CLmh7Go-.js.map +0 -1
- package/dist/admin/assets/develop-9ZeAjSIw.js +0 -11
- package/dist/admin/assets/develop-9ZeAjSIw.js.map +0 -1
- package/dist/admin/assets/es2015-BJge4oQL.js +0 -42
- package/dist/admin/assets/es2015-BJge4oQL.js.map +0 -1
- package/dist/admin/assets/followPlural-DEr2kxEc.js +0 -2
- package/dist/admin/assets/followPlural-DEr2kxEc.js.map +0 -1
- package/dist/admin/assets/inbox-B8XZ8L6s.js +0 -2
- package/dist/admin/assets/inbox-B8XZ8L6s.js.map +0 -1
- package/dist/admin/assets/index-DoJsnLI1.js +0 -4
- package/dist/admin/assets/index-DoJsnLI1.js.map +0 -1
- package/dist/admin/assets/index-lxe7WimO.css +0 -2
- package/dist/admin/assets/locales-Bg3htKo8.js +0 -2
- package/dist/admin/assets/media-BCnVhaDH.js +0 -2
- package/dist/admin/assets/network--5X46kWN.js +0 -2
- package/dist/admin/assets/network--5X46kWN.js.map +0 -1
- package/dist/admin/assets/publishing-DdmWXRaM.js +0 -2
- package/dist/admin/assets/schedules-BmB9Y73z.js +0 -2
- package/dist/admin/assets/schema-D-qo7XSF.js +0 -2
- package/dist/admin/assets/seo-CceGYTIX.js +0 -2
- package/dist/admin/assets/settings-TEbLvC-v.js +0 -2
- package/dist/admin/assets/shapes-WrYO9Spf.js +0 -6
- package/dist/admin/assets/shapes-WrYO9Spf.js.map +0 -1
- package/dist/admin/assets/src-ndgTSYLX.js +0 -7
- package/dist/admin/assets/src-ndgTSYLX.js.map +0 -1
- package/dist/admin/assets/titles-CQiqqDw-.js +0 -2
- package/dist/admin/assets/titles-CQiqqDw-.js.map +0 -1
- package/dist/admin/assets/tokens-ixHjAkDK.js +0 -2
- package/dist/admin/assets/useContentSchema-DtYfhsd2.js +0 -2
- package/dist/admin/assets/useContentSchema-DtYfhsd2.js.map +0 -1
- package/dist/admin/assets/useCursorPager-0zHjlm-7.js +0 -2
- package/dist/admin/assets/useNetworkPermission-Cts98h9d.js +0 -2
- package/dist/admin/assets/usePlaces-DC47wVeU.js +0 -2
- package/dist/admin/assets/usePlaces-DC47wVeU.js.map +0 -1
- package/dist/admin/assets/useQueries-CirW3Mvp.js +0 -2
- package/dist/admin/assets/useQueries-CirW3Mvp.js.map +0 -1
- package/dist/admin/assets/useSaveShortcut-rKtp1qK7.js +0 -2
- package/dist/admin/assets/useSaveShortcut-rKtp1qK7.js.map +0 -1
- package/dist/admin/assets/users-2iJYwlJb.js +0 -2
- package/dist/admin/assets/users-2iJYwlJb.js.map +0 -1
- package/dist/cliMain-D08HeAd_.js.map +0 -1
- package/dist/worker-jspgh10V.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, F as
|
|
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, ThemeDefinition, ThemeTokens, defineConfig, isHookError };
|
|
1
|
+
import { A as ServiceFactoryContext, C as HookEvent, D as MediaUsage, E as MediaReferenceService, F as ThemeDefinition, I as ThemeTokens, L as defineConfig, M as ServiceModel, N as ShapioConfig, O as ModelHooks, P as ShapioServices, R 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 ServiceField, 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-jttKsns_.js";
|
|
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, ServiceField, ServiceModel, ShapioConfig, ShapioServices, ThemeDefinition, ThemeTokens, defineConfig, isHookError };
|
package/dist/index.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { A as ServiceFactoryContext, B as
|
|
1
|
+
import { A as ServiceFactoryContext, B as PermissionEvaluator, C as HookEvent, D as MediaUsage, E as MediaReferenceService, F as ThemeDefinition, G as OutboxEvents, H as Principal, I as ThemeTokens, J as DataType, K as ContentData, L as defineConfig, M as ServiceModel, N as ShapioConfig, O as ModelHooks, P as ShapioServices, R as isHookError, S as HookError, T as JobHandlerContext, U as Database, V as PermissionExecutor, W as DB, X as PlannedChange, Y as JsonValue, Z as ResolvedModelDefinition, _ 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 ServiceField, k as ServiceFactory, l as ContentReadService, m as ExtensionHostConfig, n as AfterHookContext, o as BeforeHookEvent, p as EntryData, q as ComponentDefinition, 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 KnownVersions } from "./public-jttKsns_.js";
|
|
2
2
|
import { FastifyBaseLogger, FastifyInstance } from "fastify";
|
|
3
3
|
import { Kysely, Selectable, Transaction } from "kysely";
|
|
4
4
|
import { Static, Type } from "typebox";
|
|
@@ -432,15 +432,33 @@ type SiteRef = {
|
|
|
432
432
|
//#region src/content/model.d.ts
|
|
433
433
|
/** A collection or singleton resolved from a pinned snapshot, with what writes need to know about it. */
|
|
434
434
|
type ContentModel = {
|
|
435
|
-
definition:
|
|
435
|
+
/** The effective definition: inherited fields first (`inheritedFrom` set), then the model's own. */
|
|
436
|
+
definition: ResolvedModelDefinition;
|
|
436
437
|
/** Per-model version at the pinned snapshot (re-checked at commit). */
|
|
437
438
|
version: number;
|
|
438
439
|
revisionId: string;
|
|
439
|
-
/**
|
|
440
|
+
/**
|
|
441
|
+
* The models this one extends, by ID, at the pinned snapshot: a parent change changes this model's shape
|
|
442
|
+
* without changing its own version, so writes re-check these too and validators are cached by them.
|
|
443
|
+
*/
|
|
444
|
+
ancestors: ReadonlyMap<string, {
|
|
445
|
+
version: number;
|
|
446
|
+
revisionId: string;
|
|
447
|
+
}>;
|
|
448
|
+
/** Components reachable from the model's effective fields (directly or through other components). */
|
|
440
449
|
components: ReadonlyMap<string, {
|
|
441
450
|
definition: ComponentDefinition;
|
|
442
451
|
version: number;
|
|
443
452
|
}>;
|
|
453
|
+
/**
|
|
454
|
+
* Where the model is served (plan polymorphic-types): its route key (`products/digital`) and its ancestors'
|
|
455
|
+
* API IDs, root first. Set by the resolvers here; absent on models built by hand.
|
|
456
|
+
*/
|
|
457
|
+
route?: ModelRoute;
|
|
458
|
+
};
|
|
459
|
+
type ModelRoute = {
|
|
460
|
+
key: string;
|
|
461
|
+
ancestors: readonly string[];
|
|
444
462
|
};
|
|
445
463
|
//#endregion
|
|
446
464
|
//#region src/content/hooks.d.ts
|
|
@@ -575,6 +593,11 @@ type FieldVisibilityLookup = {
|
|
|
575
593
|
* definition is granted by roles held on that site (plan site-schema, rule 4).
|
|
576
594
|
*/
|
|
577
595
|
getModelSite: (modelId: string, executor?: PermissionExecutor, versions?: KnownVersions) => Promise<string | null>;
|
|
596
|
+
/**
|
|
597
|
+
* The models a model extends, root first ([] for a root or an unknown model), at the request's schema
|
|
598
|
+
* version: a grant on an ancestor applies to its descendants (plan polymorphic-types D8).
|
|
599
|
+
*/
|
|
600
|
+
getAncestors: (modelId: string, executor?: PermissionExecutor, versions?: KnownVersions) => Promise<readonly string[]>;
|
|
578
601
|
};
|
|
579
602
|
//#endregion
|
|
580
603
|
//#region src/publishing/outbound/ssrf.d.ts
|
|
@@ -611,7 +634,8 @@ type SeqAllocator = {
|
|
|
611
634
|
/**
|
|
612
635
|
* Where a definition's values live inside entries: for a model, its own heads at the root; for a
|
|
613
636
|
* component, every model that embeds it, with the field-ID path from the entry root down to the component
|
|
614
|
-
* or dynamic-zone field that holds it.
|
|
637
|
+
* or dynamic-zone field that holds it. A change to a model that others extend has one location per family
|
|
638
|
+
* member holding the field (plan polymorphic-types), all at the root.
|
|
615
639
|
*/
|
|
616
640
|
type ValueLocation = {
|
|
617
641
|
modelId: string;
|
|
@@ -623,6 +647,8 @@ type ContentStep = {
|
|
|
623
647
|
ownerId: string;
|
|
624
648
|
fieldId: string;
|
|
625
649
|
locations: ValueLocation[];
|
|
650
|
+
/** The field's API ID, to name it when the check fails. Absent in older plans. */
|
|
651
|
+
fieldApiKey?: string;
|
|
626
652
|
} | {
|
|
627
653
|
kind: 'backfill';
|
|
628
654
|
ownerId: string;
|
|
@@ -637,8 +663,14 @@ type ContentStep = {
|
|
|
637
663
|
locations: ValueLocation[];
|
|
638
664
|
} | {
|
|
639
665
|
kind: 'checkUnique';
|
|
666
|
+
/** The model whose entries are checked: one step per family member holding the field. */
|
|
640
667
|
modelId: string;
|
|
641
668
|
fieldId: string;
|
|
669
|
+
/**
|
|
670
|
+
* The definition the change is for (the model a family's steps come from), when it is not `modelId`;
|
|
671
|
+
* the content ports load the proposed schema through it. Absent in plans made before inheritance.
|
|
672
|
+
*/
|
|
673
|
+
ownerId?: string;
|
|
642
674
|
/**
|
|
643
675
|
* The field is already unique under the active schema (its type changes): its live registry rows stay in
|
|
644
676
|
* force until activation, so the dry run stages its claims under a separate registry key and the
|
|
@@ -667,6 +699,11 @@ type FollowUpStep = IndexStep | {
|
|
|
667
699
|
} | {
|
|
668
700
|
kind: 'releaseUnique';
|
|
669
701
|
fieldId: string;
|
|
702
|
+
/**
|
|
703
|
+
* The models whose registry rows go: the family members that lose the field (a parent keeps its own
|
|
704
|
+
* when a child moves away). Absent in plans made before inheritance: every model's.
|
|
705
|
+
*/
|
|
706
|
+
modelIds?: string[];
|
|
670
707
|
} |
|
|
671
708
|
/**
|
|
672
709
|
* Deletes a removed locale's heads, revisions and unique-registry rows, and moves non-localized entries stored
|
|
@@ -861,5 +898,5 @@ export declare const startDedicatedWorker: (config: AppConfig) => Promise<Worker
|
|
|
861
898
|
//#region src/constants/version.d.ts
|
|
862
899
|
export declare const SHAPIO_VERSION: string;
|
|
863
900
|
//#endregion
|
|
864
|
-
export { AfterHook, AfterHookContext, AfterHookEvent, type AppConfig, type AppDependencies, 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, type RunningServer, ServiceFactory, ServiceFactoryContext, ShapioConfig, ShapioServices, ThemeDefinition, ThemeTokens, defineConfig, isHookError };
|
|
901
|
+
export { AfterHook, AfterHookContext, AfterHookEvent, type AppConfig, type AppDependencies, 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, type RunningServer, ServiceFactory, ServiceFactoryContext, ServiceField, ServiceModel, ShapioConfig, ShapioServices, ThemeDefinition, ThemeTokens, defineConfig, isHookError };
|
|
865
902
|
//# sourceMappingURL=index.d.ts.map
|
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-
|
|
1
|
+
import { a as loadConfig, n as startServer, s as buildApp, t as startDedicatedWorker, u as SHAPIO_VERSION } from "./worker-6ru1tYBs.js";
|
|
2
2
|
import { i as isHookError, n as HookError, r as defineConfig, t as EXTENSION_CONTRACT_VERSION } from "./public-B57h4F7Y.js";
|
|
3
3
|
export { EXTENSION_CONTRACT_VERSION, HookError, SHAPIO_VERSION, buildApp, defineConfig, isHookError, loadConfig, startDedicatedWorker, startServer };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"public-B57h4F7Y.js","names":[],"sources":["../src/extensions/public.ts"],"sourcesContent":["import type { ThemeToken } from '@shapio/schema';\nimport 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\n/**\n * A colour theme for the admin: token values for a light variant, a dark variant, or both. Every UI token is\n * required in a variant; the `brand-*` tokens may be left out (Shapio's are used). Values are `#rrggbb`\n * (contrast is checked by `shapio extensions check`), `#rgb`, `#rrggbbaa`, or `rgb()`, `hsl()`, `oklch()`,\n * `oklab()` with plain arguments.\n */\nexport type ThemeTokens = Partial<Record<ThemeToken, string>>;\n\nexport type ThemeDefinition = {\n /** Lower-case letters, digits and dashes; not a built-in theme's key. Saved in each browser's setting. */\n key: string;\n /** Shown in the theme menu (not translated). */\n name: string;\n description?: string;\n light?: ThemeTokens;\n dark?: ThemeTokens;\n};\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 /** Admin colour themes, listed after the built-in ones in the theme menu. */\n themes?: ThemeDefinition[];\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":";;;;;;;;;;;;;;;;AA0CA,MAAa,6BAA6B;;AA0P1C,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":"public-B57h4F7Y.js","names":[],"sources":["../src/extensions/public.ts"],"sourcesContent":["import type { ThemeToken } from '@shapio/schema';\nimport 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 /** The API ID of the model this one extends; absent for a model that extends nothing. */\n extends?: string;\n};\n\n/** A field of a model as `content.models()` describes it (its effective fields, inherited ones first). */\nexport type ServiceField = {\n /** Stable field ID (never changes; an inherited field keeps the declaring model's ID). */\n id: string;\n apiKey: string;\n label: string;\n type: string;\n required: boolean;\n localized: boolean;\n /** The API ID of the model that declares the field, when it is inherited; absent for the model's own. */\n inheritedFrom?: string;\n};\n\n/** A content model with its effective fields and where the delivery API serves it. */\nexport type ServiceModel = HookModel & {\n /** The delivery route key: the plural API ID, nested under the models it extends (`posts/guides`). */\n routeKey: string;\n fields: ServiceField[];\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 /**\n * The active content models (collections and singletons) of this site: shared ones and its own, each with\n * its effective fields (a model that extends another lists the inherited fields first) and route key.\n */\n models: () => Promise<ServiceModel[]>;\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\n/**\n * A colour theme for the admin: token values for a light variant, a dark variant, or both. Every UI token is\n * required in a variant; the `brand-*` tokens may be left out (Shapio's are used). Values are `#rrggbb`\n * (contrast is checked by `shapio extensions check`), `#rgb`, `#rrggbbaa`, or `rgb()`, `hsl()`, `oklch()`,\n * `oklab()` with plain arguments.\n */\nexport type ThemeTokens = Partial<Record<ThemeToken, string>>;\n\nexport type ThemeDefinition = {\n /** Lower-case letters, digits and dashes; not a built-in theme's key. Saved in each browser's setting. */\n key: string;\n /** Shown in the theme menu (not translated). */\n name: string;\n description?: string;\n light?: ThemeTokens;\n dark?: ThemeTokens;\n};\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 /** Admin colour themes, listed after the built-in ones in the theme menu. */\n themes?: ThemeDefinition[];\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":";;;;;;;;;;;;;;;;AA0CA,MAAa,6BAA6B;;AAmR1C,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"}
|
|
@@ -215,9 +215,28 @@ type ModelDefinition = {
|
|
|
215
215
|
description?: string;
|
|
216
216
|
localized: boolean;
|
|
217
217
|
draftAndPublish: boolean;
|
|
218
|
+
/**
|
|
219
|
+
* The stable ID of the collection this one extends. The stored definition holds its own fields only;
|
|
220
|
+
* `resolveModelDefinition` adds the inherited ones (ancestors' first).
|
|
221
|
+
*/
|
|
222
|
+
extends?: string;
|
|
218
223
|
fields: FieldDefinition[];
|
|
219
224
|
display: ModelDisplay;
|
|
220
225
|
};
|
|
226
|
+
/** A field as a model sees it after inheritance: `inheritedFrom` names the declaring ancestor's ID. */
|
|
227
|
+
type ResolvedField = FieldDefinition & {
|
|
228
|
+
inheritedFrom?: string;
|
|
229
|
+
};
|
|
230
|
+
/**
|
|
231
|
+
* A model with its effective fields: every ancestor's fields (root first), then its own, and its display
|
|
232
|
+
* merged with its ancestors' (`resolveModelDefinition`). `ancestorIds` is required so code that needs
|
|
233
|
+
* effective fields can demand this type; a stored definition does not satisfy it.
|
|
234
|
+
*/
|
|
235
|
+
type ResolvedModelDefinition = Omit<ModelDefinition, 'fields'> & {
|
|
236
|
+
fields: ResolvedField[];
|
|
237
|
+
/** Ancestors' stable IDs, root first; empty for a model that extends nothing. */
|
|
238
|
+
ancestorIds: readonly string[];
|
|
239
|
+
};
|
|
221
240
|
type ComponentDefinition = {
|
|
222
241
|
id: string;
|
|
223
242
|
kind: 'component';
|
|
@@ -231,7 +250,7 @@ type ComponentDefinition = {
|
|
|
231
250
|
};
|
|
232
251
|
//#endregion
|
|
233
252
|
//#region src/diff/types.d.ts
|
|
234
|
-
declare const CHANGE_KINDS: readonly ["definition.added", "definition.removed", "definition.apiKey", "definition.pluralApiKey", "definition.metadata", "model.kind", "model.localized", "model.draftAndPublish", "field.added", "field.removed", "field.order", "field.apiKey", "field.metadata", "field.editor", "field.type", "field.required", "field.localized", "field.public", "field.deprecated", "field.unique", "field.filterable", "field.sortable", "field.settings"];
|
|
253
|
+
declare const CHANGE_KINDS: readonly ["definition.added", "definition.removed", "definition.apiKey", "definition.pluralApiKey", "definition.metadata", "model.kind", "model.localized", "model.draftAndPublish", "model.extends", "field.added", "field.removed", "field.order", "field.apiKey", "field.metadata", "field.editor", "field.type", "field.required", "field.localized", "field.public", "field.deprecated", "field.unique", "field.filterable", "field.sortable", "field.settings"];
|
|
235
254
|
type ChangeKind = (typeof CHANGE_KINDS)[number];
|
|
236
255
|
/**
|
|
237
256
|
* One difference between two versions of a definition. `property` names the changed property for
|
|
@@ -1312,6 +1331,26 @@ type HookModel = {
|
|
|
1312
1331
|
kind: 'collection' | 'singleton';
|
|
1313
1332
|
localized: boolean;
|
|
1314
1333
|
draftAndPublish: boolean;
|
|
1334
|
+
/** The API ID of the model this one extends; absent for a model that extends nothing. */
|
|
1335
|
+
extends?: string;
|
|
1336
|
+
};
|
|
1337
|
+
/** A field of a model as `content.models()` describes it (its effective fields, inherited ones first). */
|
|
1338
|
+
type ServiceField = {
|
|
1339
|
+
/** Stable field ID (never changes; an inherited field keeps the declaring model's ID). */
|
|
1340
|
+
id: string;
|
|
1341
|
+
apiKey: string;
|
|
1342
|
+
label: string;
|
|
1343
|
+
type: string;
|
|
1344
|
+
required: boolean;
|
|
1345
|
+
localized: boolean;
|
|
1346
|
+
/** The API ID of the model that declares the field, when it is inherited; absent for the model's own. */
|
|
1347
|
+
inheritedFrom?: string;
|
|
1348
|
+
};
|
|
1349
|
+
/** A content model with its effective fields and where the delivery API serves it. */
|
|
1350
|
+
type ServiceModel = HookModel & {
|
|
1351
|
+
/** The delivery route key: the plural API ID, nested under the models it extends (`posts/guides`). */
|
|
1352
|
+
routeKey: string;
|
|
1353
|
+
fields: ServiceField[];
|
|
1315
1354
|
};
|
|
1316
1355
|
type HookEntry = {
|
|
1317
1356
|
id: string;
|
|
@@ -1340,8 +1379,11 @@ type ContentReadService = {
|
|
|
1340
1379
|
}>;
|
|
1341
1380
|
/** Number of (non-deleted) entries of a model. */
|
|
1342
1381
|
count: (modelKey: string) => Promise<number>;
|
|
1343
|
-
/**
|
|
1344
|
-
|
|
1382
|
+
/**
|
|
1383
|
+
* The active content models (collections and singletons) of this site: shared ones and its own, each with
|
|
1384
|
+
* its effective fields (a model that extends another lists the inherited fields first) and route key.
|
|
1385
|
+
*/
|
|
1386
|
+
models: () => Promise<ServiceModel[]>;
|
|
1345
1387
|
};
|
|
1346
1388
|
type MediaUsage = {
|
|
1347
1389
|
entryId: string;
|
|
@@ -1529,5 +1571,5 @@ declare class HookError extends Error {
|
|
|
1529
1571
|
}
|
|
1530
1572
|
declare const isHookError: (error: unknown) => error is HookError;
|
|
1531
1573
|
//#endregion
|
|
1532
|
-
export { ServiceFactoryContext as A,
|
|
1533
|
-
//# sourceMappingURL=public-
|
|
1574
|
+
export { ServiceFactoryContext as A, PermissionEvaluator as B, HookEvent as C, MediaUsage as D, MediaReferenceService as E, ThemeDefinition as F, OutboxEvents as G, Principal as H, ThemeTokens as I, DataType as J, ContentData as K, defineConfig as L, ServiceModel as M, ShapioConfig as N, ModelHooks as O, ShapioServices as P, isHookError as R, HookError as S, JobHandlerContext as T, Database as U, PermissionExecutor as V, DB as W, PlannedChange as X, JsonValue$1 as Y, ResolvedModelDefinition as Z, 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, ServiceField as j, ServiceFactory as k, ContentReadService as l, ExtensionHostConfig as m, AfterHookContext as n, BeforeHookEvent as o, EntryData as p, ComponentDefinition as q, AfterHookEvent as r, ContentReadEntry as s, AfterHook as t, CustomServices as u, ExtensionRouteOptions as v, HookModel as w, HookEntry as x, ExtensionServices as y, KnownVersions as z };
|
|
1575
|
+
//# sourceMappingURL=public-jttKsns_.d.ts.map
|