ghost 6.56.0 → 6.57.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 (385) hide show
  1. package/bin/validate-adapters.js +74 -0
  2. package/bin/validate-adapters.ts +87 -0
  3. package/bin/warm-compile-cache.sh +60 -0
  4. package/components/tryghost-custom-field-types-0.0.0.tgz +0 -0
  5. package/components/tryghost-kg-html-to-lexical-1.3.3.tgz +0 -0
  6. package/components/tryghost-kg-lexical-html-renderer-1.4.3.tgz +0 -0
  7. package/components/tryghost-parse-email-address-0.0.0.tgz +0 -0
  8. package/core/app.js +1 -1
  9. package/core/boot.js +21 -25
  10. package/core/bridge.js +10 -12
  11. package/core/built/admin/assets/Combination-BDvCdg1t.js +41 -0
  12. package/core/built/admin/assets/about-C7O-AgRZ.js +1 -0
  13. package/core/built/admin/assets/{account-migration-D3O_yVck.js → account-migration-Cv_ol1ko.js} +1 -1
  14. package/core/built/admin/assets/action-list-lGzZLHc8.js +1 -0
  15. package/core/built/admin/assets/activitypub/{account-migration-D8FbP-Z-.js → account-migration-DHFbePl6.js} +7 -7
  16. package/core/built/admin/assets/activitypub/activitypub.js +3 -3
  17. package/core/built/admin/assets/activitypub/{avatar-11EA1VSs.js → avatar-CT4tS2_S.js} +2 -2
  18. package/core/built/admin/assets/activitypub/{avatar-flipboard-jfbLG-xe.js → avatar-flipboard-ByYWKipo.js} +2 -2
  19. package/core/built/admin/assets/activitypub/{bluesky-sharing-f1jTQe2P.js → bluesky-sharing-srVnSHDz.js} +8 -8
  20. package/core/built/admin/assets/activitypub/{content-formatters-nmTOPY9M.js → content-formatters-C2sos5Ht.js} +3 -3
  21. package/core/built/admin/assets/activitypub/{copy-BCwo9ep3.js → copy-B1UBTOoZ.js} +2 -2
  22. package/core/built/admin/assets/activitypub/{dist-BEfX-0aW.js → dist-MPsb2WZ1.js} +4 -4
  23. package/core/built/admin/assets/activitypub/{domain-AaDlZlrA.js → domain-DzcM9Dzo.js} +9 -9
  24. package/core/built/admin/assets/activitypub/{edit-profile-DPi8Tl5M.js → edit-profile-CsQ_4xAk.js} +5 -5
  25. package/core/built/admin/assets/activitypub/{explore-CxTzjILQ.js → explore-CJe0DZBK.js} +8 -8
  26. package/core/built/admin/assets/activitypub/{feed-DPv5x2MX.js → feed-CKV3qWON.js} +9 -9
  27. package/core/built/admin/assets/activitypub/{field-DbgA8lat.js → field-DckHfDJf.js} +3 -3
  28. package/core/built/admin/assets/activitypub/{hash-BWuZoYkA.js → hash-Dlp8RM55.js} +2 -2
  29. package/core/built/admin/assets/activitypub/{inbox-35VDQ2K2.js → inbox-CsPy4R0M.js} +2 -2
  30. package/core/built/admin/assets/activitypub/{inbox-DSrF_i1O.js → inbox-DAsjzUUe.js} +10 -10
  31. package/core/built/admin/assets/activitypub/{label-CPjFBbo7.js → label-DWyo9E5T.js} +3 -3
  32. package/core/built/admin/assets/activitypub/layout-DM_3pqsU.js +1 -0
  33. package/core/built/admin/assets/activitypub/{moderation-BkDC1XVZ.js → moderation-B0Inc03M.js} +7 -7
  34. package/core/built/admin/assets/activitypub/{note-xEyH4xT-.js → note-CSE54lER.js} +7 -7
  35. package/core/built/admin/assets/activitypub/{notifications-DClaL3ui.js → notifications-RSwbKqdh.js} +9 -9
  36. package/core/built/admin/assets/activitypub/{preferences-DpnOa-4Z.js → preferences-CE231n2_.js} +11 -11
  37. package/core/built/admin/assets/activitypub/{profile-Dvi9mz-6.js → profile-aaQ1j1Eo.js} +13 -13
  38. package/core/built/admin/assets/activitypub/{reply-Cs9ySd6Z.js → reply-Cjb0Vs3m.js} +2 -2
  39. package/core/built/admin/assets/activitypub/{routes-DFBeTnfn.js → routes-Djb0mc9k.js} +26 -26
  40. package/core/built/admin/assets/activitypub/{separator-C5u_VjzY.js → separator-D8pROI5n.js} +3 -3
  41. package/core/built/admin/assets/activitypub/{settings-CV2fFu6D.js → settings-DMc32IQl.js} +5 -5
  42. package/core/built/admin/assets/activitypub/{site-_TgDd_EM.js → site-DVIcsohX.js} +4 -4
  43. package/core/built/admin/assets/activitypub/{step-1-BfnNL2oF.js → step-1-9Yey9usF.js} +5 -5
  44. package/core/built/admin/assets/activitypub/{step-2-DLndZkO-.js → step-2-DdYmKRXV.js} +6 -6
  45. package/core/built/admin/assets/activitypub/{step-3-A-PZTtRE.js → step-3-hdSkcjZU.js} +10 -10
  46. package/core/built/admin/assets/activitypub/{tabs-BUbz7tea.js → tabs-CUqseYzQ.js} +6 -6
  47. package/core/built/admin/assets/activitypub/{topic-filter-BdX_xYYT.js → topic-filter-Coni6OXM.js} +3 -3
  48. package/core/built/admin/assets/activitypub/{use-activity-pub-queries-EwuRemHh.js → use-activity-pub-queries-MeHTPMQv.js} +2 -2
  49. package/core/built/admin/assets/activitypub/{use-navigate-with-base-path-cy4ACBc4.js → use-navigate-with-base-path-B046AM38.js} +24 -7
  50. package/core/built/admin/assets/activitypub/{use-reply-chain-data-CyFcGfan.js → use-reply-chain-data-1AO-Xob6.js} +5 -5
  51. package/core/built/admin/assets/activitypub/{x-7zk8mV2p.js → x-BRfRYd16.js} +2 -2
  52. package/core/built/admin/assets/add-integration-modal-m9Dv6f77.js +1 -0
  53. package/core/built/admin/assets/add-newsletter-modal-CPSVZL2H.js +1 -0
  54. package/core/built/admin/assets/add-recommendation-modal-Ci9Z5yat.js +1 -0
  55. package/core/built/admin/assets/analytics-DqSCVV8U.js +1 -0
  56. package/core/built/admin/assets/announcement-bar-modal-DU3avV7d.js +1 -0
  57. package/core/built/admin/assets/api-keys-BK0LylyK.js +1 -0
  58. package/core/built/admin/assets/api-keys-_iCT4dxr.js +1 -0
  59. package/core/built/admin/assets/{audience-CkBb2LlO.js → audience-DTJtXXWY.js} +1 -1
  60. package/core/built/admin/assets/automated-emails-PayPCT8L.js +1 -0
  61. package/core/built/admin/assets/{automations-DhKeS_U5.js → automations-162q5HjL.js} +1 -1
  62. package/core/built/admin/assets/{automations-cMllU545.js → automations-dtQ_MRZ7.js} +1 -1
  63. package/core/built/admin/assets/{bluesky-sharing-DPGpyD-G.js → bluesky-sharing-B8Es3AuV.js} +1 -1
  64. package/core/built/admin/assets/brand-icon-09YqFZjV.js +1 -0
  65. package/core/built/admin/assets/{breadcrumb-DIfcF5ow.js → breadcrumb-tg5zL--z.js} +1 -1
  66. package/core/built/admin/assets/{chart-helpers-DV0FkdcD.js → chart-helpers-CZElTGYL.js} +1 -1
  67. package/core/built/admin/assets/checkbox-Cyo-x7mC.js +1 -0
  68. package/core/built/admin/assets/{chunk.524.87b52f4fada529df2c4c.js → chunk.524.cd5498dd4e195f679266.js} +4 -4
  69. package/core/built/admin/assets/{chunk.582.340bcca873e806cbd4bb.js → chunk.582.6f92ec1f03734bf2ea3f.js} +6 -6
  70. package/core/built/admin/assets/{chunk.332.05991a101d67f732dec3.js → chunk.873.b8fc05a8ab877fb819ed.js} +28 -27
  71. package/core/built/admin/assets/code-editor-view-Dq1rQ4tS.js +1 -0
  72. package/core/built/admin/assets/color-picker-field-BonBgxhU.js +1 -0
  73. package/core/built/admin/assets/color-utils-BsrwXuDz.js +1 -0
  74. package/core/built/admin/assets/combobox-uX5r_paI.js +1 -0
  75. package/core/built/admin/assets/command-DxwBO2pF.js +1 -0
  76. package/core/built/admin/assets/comments-Dn-RO-nU.js +1 -0
  77. package/core/built/admin/assets/components-CwL6a6As-B0E0-NBJ.js +1 -0
  78. package/core/built/admin/assets/confirmation-modal-B6D6mk6R.js +1 -0
  79. package/core/built/admin/assets/content-api-modal-BxQ-7T6u.js +1 -0
  80. package/core/built/admin/assets/copy-field-BAxL4Zqn.js +1 -0
  81. package/core/built/admin/assets/currency-Dy4Tc2R2.js +1 -0
  82. package/core/built/admin/assets/custom-integration-modal---d_l7lc.js +1 -0
  83. package/core/built/admin/assets/{date-range-select-dXc-GsVe.js → date-range-select-PB2n1HZf.js} +1 -1
  84. package/core/built/admin/assets/debounce-Dg2fW5Rg.js +3 -0
  85. package/core/built/admin/assets/design-and-theme-modal-DYRT207a.js +23 -0
  86. package/core/built/admin/assets/dirty-confirm-dialog-BnDJ39ao.js +1 -0
  87. package/core/built/admin/assets/disabled-sources-indicator-iMHrkyV3.js +1 -0
  88. package/core/built/admin/assets/dist-B2PvRwLn.js +1 -0
  89. package/core/built/admin/assets/{dist-pHiOxyxa.js → dist-D5vhMdXf.js} +1 -1
  90. package/core/built/admin/assets/dist-DlCyLrOC.js +1 -0
  91. package/core/built/admin/assets/dist-WeOIvSYM.js +23 -0
  92. package/core/built/admin/assets/{dist-DyViJwIy.js → dist-cFzKLG7y.js} +3 -3
  93. package/core/built/admin/assets/dist-j1xxxnY8.js +1 -0
  94. package/core/built/admin/assets/dist-myQaY0ka.js +1 -0
  95. package/core/built/admin/assets/{domain-B5ogXUBa.js → domain-BR8FIdjD.js} +1 -1
  96. package/core/built/admin/assets/{dropzone-BnFG7dDP.js → dropzone-hNxmUvwD.js} +1 -1
  97. package/core/built/admin/assets/{edit-profile-B07jCZy9.js → edit-profile-CENrkY0l.js} +1 -1
  98. package/core/built/admin/assets/editor-B18D0lm8.js +8 -0
  99. package/core/built/admin/assets/embed-signup-form-modal-BsCYUMvQ.js +9 -0
  100. package/core/built/admin/assets/{explore-Ca1y8HW_.js → explore-BmrnljWw.js} +1 -1
  101. package/core/built/admin/assets/{feed-x4iFMBP4.js → feed-Dy4li6i8.js} +1 -1
  102. package/core/built/admin/assets/{field-ChCAabZg.js → field-Dh_lwk13.js} +1 -1
  103. package/core/built/admin/assets/{filter-sources-LdtH1e-T.js → filter-sources-D2zDuJH5.js} +1 -1
  104. package/core/built/admin/assets/filters-3JBQcNtJ.js +1 -0
  105. package/core/built/admin/assets/{filters-CjVKRP8U.js → filters-CFt_BDe4.js} +1 -1
  106. package/core/built/admin/assets/first-promoter-modal-D6Rjxugw.js +1 -0
  107. package/core/built/admin/assets/format-url-C-t8G6Qd.js +1 -0
  108. package/core/built/admin/assets/{ghost-7f01131115186d1af84ead76e79646dd.js → ghost-d683fbeb945b13155ea669caa5d8db41.js} +300 -298
  109. package/core/built/admin/assets/{gift-link-modal-Buqh2vXh.js → gift-link-modal-zMtlJhLQ.js} +1 -1
  110. package/core/built/admin/assets/{gift-links-CsUhefWG.js → gift-links-CVuqLhsZ.js} +1 -1
  111. package/core/built/admin/assets/global-data-provider-B949LDXJ.js +1 -0
  112. package/core/built/admin/assets/grid-CUciBfjf.js +1 -0
  113. package/core/built/admin/assets/{growth-Dy2UOSay.js → growth-C38Xtp8D.js} +2 -2
  114. package/core/built/admin/assets/{growth-DajOBdN0.js → growth-CFws67_i.js} +1 -1
  115. package/core/built/admin/assets/history-modal-ILAOkbxH.js +1 -0
  116. package/core/built/admin/assets/{hooks-CixO01lL.js → hooks-D6EE7BIt.js} +2 -2
  117. package/core/built/admin/assets/html-field-9a9Id_2q.js +1 -0
  118. package/core/built/admin/assets/iframe-buffering-e8vH4-Qn.js +1 -0
  119. package/core/built/admin/assets/images-CrQKVc9Q.js +1 -0
  120. package/core/built/admin/assets/{inbox-BUOLDoji.js → inbox-BrSRzyvz.js} +13 -13
  121. package/core/built/admin/assets/index-BHy2DZX-.js +67 -0
  122. package/core/built/admin/assets/index-Ds2iUoF6.css +1 -0
  123. package/core/built/admin/assets/index.es-B9tvf-t4.js +1 -0
  124. package/core/built/admin/assets/{input-group-uSK3XT7b.js → input-group-6vEPvX9S.js} +1 -1
  125. package/core/built/admin/assets/integration-header-B4DyXV06.js +1 -0
  126. package/core/built/admin/assets/integrations-BT6_iJvu.js +1 -0
  127. package/core/built/admin/assets/invite-user-modal-5xDCEw90.js +1 -0
  128. package/core/built/admin/assets/isEmail-BOfC647y.js +1 -0
  129. package/core/built/admin/assets/koenig-editor-base-BWLEB9Vf.js +1 -0
  130. package/core/built/admin/assets/{koenig-lexical-BFc4yFed.js → koenig-lexical-Cj62r_y9.js} +1 -1
  131. package/core/built/admin/assets/{kpi-card-BN-E6WYX.js → kpi-card-DOUnkZcN.js} +1 -1
  132. package/core/built/admin/assets/{kpi-card-CCt-qeWD.js → kpi-card-IHDo8Q56.js} +1 -1
  133. package/core/built/admin/assets/{kpi-helpers-DlxTbTs4.js → kpi-helpers-CjUdECAK.js} +1 -1
  134. package/core/built/admin/assets/{kpi-tabs-BlcUttpn.js → kpi-tabs-X3DkOYbI.js} +1 -1
  135. package/core/built/admin/assets/{label-AVrxwmsz.js → label-Dq6QaOuS.js} +1 -1
  136. package/core/built/admin/assets/label-picker-8YlhS2U3.js +1 -0
  137. package/core/built/admin/assets/{labels-DAIqKed7.js → labels-DAPjKPy2.js} +1 -1
  138. package/core/built/admin/assets/layout-TMj4P-vv.js +1 -0
  139. package/core/built/admin/assets/limit-modal-BRPsit_B.js +1 -0
  140. package/core/built/admin/assets/{link-helpers-D9LsDOkG.js → link-helpers-Bzkk68GD.js} +1 -1
  141. package/core/built/admin/assets/member-custom-fields-CmvsuuV_.js +1 -0
  142. package/core/built/admin/assets/member-detail-DCvRrkmJ.js +1 -0
  143. package/core/built/admin/assets/members-DxbSKngD.js +11 -0
  144. package/core/built/admin/assets/modal-page-BMTzFHVO.js +1 -0
  145. package/core/built/admin/assets/{moderation-CQ3urTFE.js → moderation-Da5lhhWh.js} +1 -1
  146. package/core/built/admin/assets/multi-select-combobox-CYdkH7KQ.js +1 -0
  147. package/core/built/admin/assets/navigation-modal-BIoTwtMy.js +1 -0
  148. package/core/built/admin/assets/newsletter-BptlVoJm.js +1 -0
  149. package/core/built/admin/assets/newsletter-detail-modal-BIvxqE0N.js +1 -0
  150. package/core/built/admin/assets/newsletter-emails-Bf8IZLsP.js +1 -0
  151. package/core/built/admin/assets/{newsletters-vt3Ni1Ov.js → newsletters-BgrIZk0V.js} +1 -1
  152. package/core/built/admin/assets/{newsletters-BXJbJgA-.js → newsletters-Du0lzskS.js} +1 -1
  153. package/core/built/admin/assets/{note-Dk877BTv.js → note-DYcLOmDb.js} +1 -1
  154. package/core/built/admin/assets/{notifications-CPlLjPxO.js → notifications-B2SPFIV9.js} +1 -1
  155. package/core/built/admin/assets/{offers-DEniVRD5.js → offers-Um6ab71O.js} +1 -1
  156. package/core/built/admin/assets/offers-container-modal-BZnZITMw.js +1 -0
  157. package/core/built/admin/assets/{onboarding-route-DdStOtjy.js → onboarding-route-DgdfxkQh.js} +1 -1
  158. package/core/built/admin/assets/overview-BYQJXSog.js +1 -0
  159. package/core/built/admin/assets/overview-Dt2_mR6U.js +1 -0
  160. package/core/built/admin/assets/{page-header-pp4dWmOS.js → page-header-CpmxJj5B.js} +1 -1
  161. package/core/built/admin/assets/{pages-B4goRPUn.js → pages-BVMnpI2O.js} +1 -1
  162. package/core/built/admin/assets/pintura-modal-B4MuBuuO.js +1 -0
  163. package/core/built/admin/assets/portal-frame-BF0NBIji.js +1 -0
  164. package/core/built/admin/assets/portal-modal-DMVbm0oy.js +1 -0
  165. package/core/built/admin/assets/{post-analytics-BMJrI81R.js → post-analytics-CXWBOGyP.js} +1 -1
  166. package/core/built/admin/assets/post-analytics-header-ChzjXVPt.js +1 -0
  167. package/core/built/admin/assets/{post-analytics-provider-Btml5vJI.js → post-analytics-provider-Cgw4U_fw.js} +1 -1
  168. package/core/built/admin/assets/{post-share-modal-AcUZkbfL.js → post-share-modal-B9Vmk_XM.js} +1 -1
  169. package/core/built/admin/assets/{posts-DhXE7b6r.js → posts-CxG7v0-M.js} +1 -1
  170. package/core/built/admin/assets/preferences-BfzJmnsd.js +5 -0
  171. package/core/built/admin/assets/preview-chrome-BOVO6_PE.js +1 -0
  172. package/core/built/admin/assets/preview-modal-Dw_HtD6S.js +1 -0
  173. package/core/built/admin/assets/profile-BT5vtv9b.js +1 -0
  174. package/core/built/admin/assets/radio-group-I7ou7PoJ.js +1 -0
  175. package/core/built/admin/assets/{referrers-pmJT4k3-.js → referrers-B9QDAfYm.js} +1 -1
  176. package/core/built/admin/assets/{router-provider-BmEZf6c6.js → router-provider-DSQfprxH.js} +1 -1
  177. package/core/built/admin/assets/select-D9oU1IoM.js +1 -0
  178. package/core/built/admin/assets/settings-CfZFbyu_.js +4 -0
  179. package/core/built/admin/assets/{settings-BGgk7oCI.js → settings-CpvHWix7.js} +1 -1
  180. package/core/built/admin/assets/settings-breadcrumbs-K0USP2nw.js +1 -0
  181. package/core/built/admin/assets/{share-modal-BeuydaBf.js → share-modal-ClIyPzc5.js} +1 -1
  182. package/core/built/admin/assets/slack-modal-1XXqOfiw.js +1 -0
  183. package/core/built/admin/assets/social-urls-CHQ9cTAK.js +1 -0
  184. package/core/built/admin/assets/{sort-button-Df4t2AL8.js → sort-button-CdBsm40v.js} +1 -1
  185. package/core/built/admin/assets/{source-icon-ajoaKb41.js → source-icon-CEYmVLXR.js} +1 -1
  186. package/core/built/admin/assets/{stats-C_lfxZAw.js → stats-D8nZCTy5.js} +1 -1
  187. package/core/built/admin/assets/{stats-view-Cxot1iD8.js → stats-view-CugFVf0g.js} +1 -1
  188. package/core/built/admin/assets/{step-1-ogAA4lDr.js → step-1-DOYjrORn.js} +1 -1
  189. package/core/built/admin/assets/{step-2-C5Xini-7.js → step-2-vA6RsarH.js} +1 -1
  190. package/core/built/admin/assets/{step-3-CZv1FV81.js → step-3-BtIBxMId.js} +2 -2
  191. package/core/built/admin/assets/stripe-button-UFP4QRXd.js +1 -0
  192. package/core/built/admin/assets/stripe-connect-modal-C_L3uM6n.js +1 -0
  193. package/core/built/admin/assets/switch-CE2NuMn-.js +1 -0
  194. package/core/built/admin/assets/{table-DFj1wiYv.js → table-TMCgCQK7.js} +1 -1
  195. package/core/built/admin/assets/tabs-Dd6oOKbv.js +1 -0
  196. package/core/built/admin/assets/tag-detail-D3l-UJPR.js +1 -0
  197. package/core/built/admin/assets/tags-BwCgmr5v.js +1 -0
  198. package/core/built/admin/assets/tags-WdKQGWR8.js +1 -0
  199. package/core/built/admin/assets/testimonials-modal-CqWp-xXJ.js +1 -0
  200. package/core/built/admin/assets/tier-detail-modal-BkcR2u0A.js +1 -0
  201. package/core/built/admin/assets/{tiers-DYsa4DCo.js → tiers-Da6kxHQP.js} +1 -1
  202. package/core/built/admin/assets/toggle-group-Guorw93z.js +1 -0
  203. package/core/built/admin/assets/{topic-filter-DGDxDalo.js → topic-filter-CbgoWIHn.js} +1 -1
  204. package/core/built/admin/assets/transistor-modal-DuNnnpal.js +1 -0
  205. package/core/built/admin/assets/unsplash-modal-y2bVwTHH.js +1 -0
  206. package/core/built/admin/assets/{use-analytics-data-C76v4LIp.js → use-analytics-data-B-b4wNSC.js} +1 -1
  207. package/core/built/admin/assets/use-check-theme-limit-error-m09J38Mq.js +2 -0
  208. package/core/built/admin/assets/use-feature-flag-ud0Qz8vt.js +1 -0
  209. package/core/built/admin/assets/use-filter-params-BnbBDc7T.js +1 -0
  210. package/core/built/admin/assets/use-filterable-api-iMpDZBxD.js +1 -0
  211. package/core/built/admin/assets/use-form-vRjI0Kwk.js +1 -0
  212. package/core/built/admin/assets/{use-growth-stats-aNXJOmQr.js → use-growth-stats-DPU5rt3W.js} +1 -1
  213. package/core/built/admin/assets/use-hash-link-navigation-guard-B9j6HIrV.js +1 -0
  214. package/core/built/admin/assets/use-limiter-BkN3E4gw.js +2 -0
  215. package/core/built/admin/assets/use-pintura-config-C_z8HTG2.js +1 -0
  216. package/core/built/admin/assets/use-pintura-editor-DNgbkhGp.js +1 -0
  217. package/core/built/admin/assets/{use-post-referrers-CG0SZioj.js → use-post-referrers-C2mXyrp-.js} +1 -1
  218. package/core/built/admin/assets/use-query-params-DHhhu8wi.js +1 -0
  219. package/core/built/admin/assets/{use-reply-chain-data-RLdPKRmS.js → use-reply-chain-data-DaK8q2qQ.js} +1 -1
  220. package/core/built/admin/assets/use-setting-group-YlYcoNyP.js +1 -0
  221. package/core/built/admin/assets/use-settings-navigation-Bf1g1rEh.js +1 -0
  222. package/core/built/admin/assets/{use-simple-pagination-DgcF69KI.js → use-simple-pagination-D9ckKo5-.js} +1 -1
  223. package/core/built/admin/assets/{use-tinybird-query-C1R_Kbmy.js → use-tinybird-query-GSa32hVw.js} +1 -1
  224. package/core/built/admin/assets/{use-tinybird-token-C9fPjVM_.js → use-tinybird-token-CKLOZFsw.js} +1 -1
  225. package/core/built/admin/assets/use-url-input-z-p0Kewm.js +5 -0
  226. package/core/built/admin/assets/user-detail-modal-BMxOA4Sv.js +1 -0
  227. package/core/built/admin/assets/{users-Dkv8NQZe.js → users-B6hIds6n.js} +1 -1
  228. package/core/built/admin/assets/validator-Cr0sMKuW.js +7 -0
  229. package/core/built/admin/assets/{virtual-list-BmTUzeoF.js → virtual-list-RHeEL05L.js} +1 -1
  230. package/core/built/admin/assets/web-Bw2QMO5u.js +2 -0
  231. package/core/built/admin/assets/web-xJtcwMy4.js +1 -0
  232. package/core/built/admin/assets/zapier-modal-BP2f4-vY.js +1 -0
  233. package/core/built/admin/index.html +15 -13
  234. package/core/frontend/helpers/authors.js +1 -1
  235. package/core/frontend/helpers/link.js +3 -8
  236. package/core/frontend/helpers/tags.js +1 -1
  237. package/core/frontend/meta/author-url.js +2 -2
  238. package/core/frontend/meta/url.js +4 -4
  239. package/core/frontend/services/proxy.js +1 -1
  240. package/core/frontend/services/routing/events.js +20 -6
  241. package/core/frontend/services/routing/permalink-adapter.js +0 -13
  242. package/core/frontend/services/routing/permalink-adapter.ts +0 -13
  243. package/core/frontend/services/routing/router-manager.js +15 -9
  244. package/core/frontend/services/sitemap/base-site-map-generator.js +1 -28
  245. package/core/frontend/services/sitemap/site-map-manager.js +22 -57
  246. package/core/server/adapters/route-settings/utils.js +10 -2
  247. package/core/server/adapters/route-settings/utils.ts +12 -2
  248. package/core/server/api/endpoints/email-post.js +1 -1
  249. package/core/server/api/endpoints/previews.js +1 -1
  250. package/core/server/api/endpoints/search-index-public.js +3 -3
  251. package/core/server/api/endpoints/search-index.js +4 -4
  252. package/core/server/api/endpoints/utils/serializers/input/authors.js +2 -2
  253. package/core/server/api/endpoints/utils/serializers/input/comments.js +1 -1
  254. package/core/server/api/endpoints/utils/serializers/input/pages.js +3 -3
  255. package/core/server/api/endpoints/utils/serializers/input/posts.js +3 -3
  256. package/core/server/api/endpoints/utils/serializers/input/tags.js +1 -1
  257. package/core/server/api/endpoints/utils/serializers/input/users.js +2 -2
  258. package/core/server/api/endpoints/utils/serializers/input/utils/url.js +31 -13
  259. package/core/server/api/endpoints/utils/serializers/output/mappers/posts.js +2 -2
  260. package/core/server/api/endpoints/utils/serializers/output/mappers/tags.js +2 -2
  261. package/core/server/api/endpoints/utils/serializers/output/mappers/users.js +8 -0
  262. package/core/server/api/endpoints/utils/serializers/output/utils/url.js +18 -11
  263. package/core/server/data/migrations/versions/6.57/2026-08-04-18-00-00-store-custom-field-values-as-leaf-rows.js +74 -0
  264. package/core/server/data/migrations/versions/6.57/2026-08-04-18-54-14-reset-automation-email-analytics.js +25 -0
  265. package/core/server/data/schema/commands.js +21 -5
  266. package/core/server/data/schema/schema.js +24 -5
  267. package/core/server/lib/common/to-plain.ts +1 -1
  268. package/core/server/models/post.js +2 -2
  269. package/core/server/services/adapter-manager/adapter-manager.js +1 -45
  270. package/core/server/services/adapter-manager/adapter-manager.ts +2 -48
  271. package/core/server/services/adapter-manager/adapter-paths.js +24 -0
  272. package/core/server/services/adapter-manager/adapter-paths.ts +21 -0
  273. package/core/server/services/adapter-manager/base-classes.js +22 -0
  274. package/core/server/services/adapter-manager/base-classes.ts +22 -0
  275. package/core/server/services/adapter-manager/index.js +4 -27
  276. package/core/server/services/adapter-manager/index.ts +4 -31
  277. package/core/server/services/adapter-manager/utils.js +50 -0
  278. package/core/server/services/adapter-manager/utils.ts +57 -0
  279. package/core/server/services/audience-feedback/audience-feedback-controller.js +1 -1
  280. package/core/server/services/audience-feedback/audience-feedback-service.js +2 -2
  281. package/core/server/services/automations/service.js +2 -2
  282. package/core/server/services/automations/service.ts +2 -2
  283. package/core/server/services/comments/comments-service-emails.js +1 -1
  284. package/core/server/services/comments/comments-service.js +1 -1
  285. package/core/server/services/email-analytics/email-analytics-service-wrapper.js +11 -2
  286. package/core/server/services/email-analytics/email-analytics-service.js +1 -1
  287. package/core/server/services/email-service/email-service-wrapper.js +2 -1
  288. package/core/server/services/email-service/mailgun-email-provider.js +15 -0
  289. package/core/server/services/indexnow-ping/indexnow-ping-service.js +1 -1
  290. package/core/server/services/indexnow-ping/indexnow-ping-service.ts +2 -4
  291. package/core/server/services/lib/mailgun-client.js +3 -3
  292. package/core/server/services/media-inliner/external-media-inliner.js +12 -8
  293. package/core/server/services/member-attribution/url-translator.js +5 -7
  294. package/core/server/services/member-welcome-emails/service.js +72 -12
  295. package/core/server/services/members/api.js +1 -1
  296. package/core/server/services/members/import-export/import/completion-email.js +8 -4
  297. package/core/server/services/members/import-export/import/completion-email.ts +9 -4
  298. package/core/server/services/members/import-export/import/importer.js +25 -4
  299. package/core/server/services/members/import-export/import/importer.ts +26 -6
  300. package/core/server/services/members/import-export/import/row.ts +5 -1
  301. package/core/server/services/members/import-export/index.js +1 -5
  302. package/core/server/services/members/import-export/index.ts +2 -6
  303. package/core/server/services/members-custom-fields/queries.js +4 -13
  304. package/core/server/services/members-custom-fields/queries.ts +4 -13
  305. package/core/server/services/members-custom-fields/schema.js +18 -27
  306. package/core/server/services/members-custom-fields/schema.ts +17 -27
  307. package/core/server/services/members-custom-fields/storage.js +94 -27
  308. package/core/server/services/members-custom-fields/storage.ts +114 -39
  309. package/core/server/services/members-custom-fields/values-service.js +98 -219
  310. package/core/server/services/members-custom-fields/values-service.ts +110 -238
  311. package/core/server/services/mentions/resource-service.js +1 -1
  312. package/core/server/services/mentions/service.js +2 -2
  313. package/core/server/services/route-settings/dynamic-routing-service.js +9 -59
  314. package/core/server/services/slack-ping/slack-ping-service.js +2 -2
  315. package/core/server/services/slack-ping/slack-ping-service.ts +3 -5
  316. package/core/server/services/stats/content-stats-service.js +3 -3
  317. package/core/server/services/stats/posts-stats-service.js +2 -2
  318. package/core/server/services/url/config.js +90 -135
  319. package/core/server/services/url/index.js +6 -49
  320. package/core/server/services/url/lazy-find-resource.js +14 -11
  321. package/core/server/services/url/lazy-find-resource.ts +14 -11
  322. package/core/server/services/url/lazy-url-service.js +174 -94
  323. package/core/server/services/url/lazy-url-service.ts +233 -97
  324. package/core/server/services/url/routable-resources.js +62 -71
  325. package/core/server/services/url/router-filter.js +12 -4
  326. package/core/server/services/url/router-filter.ts +12 -4
  327. package/core/server/services/webhooks/index.js +1 -1
  328. package/core/server/services/webhooks/serialize.js +2 -1
  329. package/core/shared/config/env/config.testing-mysql.json +1 -2
  330. package/core/shared/config/env/config.testing.json +1 -2
  331. package/core/shared/events/index.js +1 -2
  332. package/core/shared/labs.js +3 -3
  333. package/package.json +5 -6
  334. package/pnpm-lock.yaml +6 -9
  335. package/pnpm-workspace.yaml +2 -2
  336. package/tsconfig.json +1 -0
  337. package/core/built/admin/assets/Combination-BCm9FL4o.js +0 -41
  338. package/core/built/admin/assets/activitypub/layout-CTgrezN7.js +0 -1
  339. package/core/built/admin/assets/automated-emails-6t2bIRWf.js +0 -7
  340. package/core/built/admin/assets/checkbox-BIl077a0.js +0 -1
  341. package/core/built/admin/assets/code-editor-view-C0aWNwdl.js +0 -1
  342. package/core/built/admin/assets/comments-qwhIjH3c.js +0 -1
  343. package/core/built/admin/assets/disabled-sources-indicator-DYAXW-6V.js +0 -1
  344. package/core/built/admin/assets/dist-BUKmD51u.js +0 -1
  345. package/core/built/admin/assets/dist-CNlMj7ML.js +0 -1
  346. package/core/built/admin/assets/dist-DDY6GRVz.js +0 -1
  347. package/core/built/admin/assets/dist-DG78yroX.js +0 -23
  348. package/core/built/admin/assets/editor-DDYSOXGN.js +0 -8
  349. package/core/built/admin/assets/esm-CFX93H5M.js +0 -2
  350. package/core/built/admin/assets/filters-CLehPo_D.js +0 -1
  351. package/core/built/admin/assets/index-08n05-rc.js +0 -67
  352. package/core/built/admin/assets/index-DgUzgFvS.css +0 -1
  353. package/core/built/admin/assets/label-picker-DVnpu_IF.js +0 -1
  354. package/core/built/admin/assets/layout-B0YLh7R9.js +0 -1
  355. package/core/built/admin/assets/member-custom-fields-C8NpZYza.js +0 -1
  356. package/core/built/admin/assets/member-detail-CIVAdKXf.js +0 -1
  357. package/core/built/admin/assets/members-oLPiSkXD.js +0 -10
  358. package/core/built/admin/assets/modals-CB7v-k3T.js +0 -31
  359. package/core/built/admin/assets/newsletter-rbeDX9Wk.js +0 -1
  360. package/core/built/admin/assets/overview--4V-kx9c.js +0 -1
  361. package/core/built/admin/assets/overview-DSLv30oz.js +0 -1
  362. package/core/built/admin/assets/post-analytics-header-pU2m9ZuV.js +0 -1
  363. package/core/built/admin/assets/preferences-Ru4CRPHC.js +0 -5
  364. package/core/built/admin/assets/profile-BNb1oj7D.js +0 -1
  365. package/core/built/admin/assets/select-B0HteHrp.js +0 -1
  366. package/core/built/admin/assets/settings-B1C9Q3wo.js +0 -4
  367. package/core/built/admin/assets/social-urls-DA2lXrhW.js +0 -8
  368. package/core/built/admin/assets/switch-CyQcwMAv.js +0 -1
  369. package/core/built/admin/assets/tabs-D4y1gqUd.js +0 -1
  370. package/core/built/admin/assets/tags-Dmft-Y4O.js +0 -1
  371. package/core/built/admin/assets/toggle-group-R2QMFvXW.js +0 -1
  372. package/core/built/admin/assets/use-filter-params-WrdhAISv.js +0 -1
  373. package/core/built/admin/assets/web-BqW0b0_C.js +0 -1
  374. package/core/built/admin/assets/web-Cy5GKMWM.js +0 -2
  375. package/core/server/services/url/local-file-cache.js +0 -75
  376. package/core/server/services/url/queue.js +0 -260
  377. package/core/server/services/url/resource.js +0 -102
  378. package/core/server/services/url/resources.js +0 -480
  379. package/core/server/services/url/url-generator.js +0 -276
  380. package/core/server/services/url/url-service-facade.js +0 -366
  381. package/core/server/services/url/url-service-facade.ts +0 -519
  382. package/core/server/services/url/url-service.js +0 -387
  383. package/core/server/services/url/urls.js +0 -140
  384. package/core/shared/events/url-resource-updated-event.js +0 -33
  385. /package/core/built/admin/assets/{dist-CqO2lWS0.js → dist-CqO2lWS02.js} +0 -0
@@ -0,0 +1 @@
1
+ import{o as e}from"./rolldown-runtime-DAXXjFlN.js";import{t}from"./react-Bb3IsNbi.js";import{t as n}from"./jsx-runtime-DX3WBWVO.js";import{t as r}from"./use-tinybird-query-GSa32hVw.js";import{g as i}from"./stats-D8nZCTy5.js";import{g as a,m as o}from"./chunk-KS7C4IRE-DG9HTHQ3.js";import{a as s,t as c}from"./router-provider-DSQfprxH.js";import{f as l,h as ee,p as u}from"./dist-Cb5RSHSg.js";import{a as d}from"./shade-app-B3heOAfz-BhQXxNkT.js";import{a as f,i as p,n as te,t as m}from"./chart-helpers-CZElTGYL.js";import{r as h,t as g}from"./tabs-Dd6oOKbv.js";import{r as ne}from"./filters-3JBQcNtJ.js";import{a as _,i as v,n as y,o as b,r as x,t as S}from"./card-aUHX0hyR.js";import{a as C,c as w,i as T,l as E,n as D,o as O,r as k,s as A,t as j,u as M}from"./data-list-CupF7bjM.js";import{t as re}from"./empty-indicator-WB1WgT9h.js";import{a as N,i as ie,n as ae,o as P,r as oe,s as F}from"./use-filter-params-BnbBDc7T.js";import{$r as I,Bn as L,Hn as R,Kr as z,Ln as B,Pr as V,Ps as H,Rn as U,So as se,Vn as W,Vs as ce,Wr as G,Xn as K,Yr as le,Zr as ue,aa as de,ai as fe,f as pe,ir as me,l as he,qr as ge,u as _e,zn as ve}from"./index-BHy2DZX-.js";import{t as q}from"./date-range-select-PB2n1HZf.js";import{n as J,r as Y,t as ye}from"./kpi-tabs-X3DkOYbI.js";import{t as be}from"./use-analytics-data-B-b4wNSC.js";import{n as xe,t as Se}from"./audience-DTJtXXWY.js";import{r as Ce,t as we}from"./post-analytics-header-ChzjXVPt.js";import{n as Te}from"./post-analytics-context-D0Mw-Pmv.js";import{n as X,r as Ee,t as De}from"./kpi-helpers-CjUdECAK.js";var Z=e(t(),1),Q=n(),Oe=({data:e,range:t})=>{let[n]=a(),[r,i]=(0,Z.useState)(n.get(`tab`)||`visits`),o=X[r],s=p(e||[],t,o.dataKey,`sum`)?.map(e=>{let t=Number(e[o.dataKey]);return{date:String(e.date),value:t,formattedValue:o.formatter(t),label:o.label}}),c=De(e),l=m(t,e||[],{fieldName:o.dataKey});return(0,Q.jsx)(S,{children:(0,Q.jsx)(y,{children:(0,Q.jsxs)(g,{defaultValue:r,variant:`kpis`,children:[(0,Q.jsxs)(h,{className:`-mx-6 hidden grid-cols-2 md:visible! md:grid!`,children:[(0,Q.jsx)(J,{value:`visits`,onClick:()=>{i(`visits`)},children:(0,Q.jsx)(Y,{color:X.visits.color,label:`Unique visitors`,value:c.visits})}),(0,Q.jsx)(J,{value:`views`,onClick:()=>{i(`views`)},children:(0,Q.jsx)(Y,{color:X.views.color,label:`Total views`,value:c.views})})]}),(0,Q.jsxs)(le,{children:[(0,Q.jsx)(fe,{className:`md:hidden`,asChild:!0,children:(0,Q.jsxs)(ye,{children:[r===`visits`&&(0,Q.jsx)(Y,{color:`var(--chart-blue)`,label:`Unique visitors`,value:c.visits}),r===`views`&&(0,Q.jsx)(Y,{color:`var(--chart-teal)`,label:`Total views`,value:c.views})]})}),(0,Q.jsxs)(ue,{align:`end`,className:`w-56`,children:[(0,Q.jsx)(I,{onClick:()=>i(`visits`),children:`Unique visitors`}),(0,Q.jsx)(I,{onClick:()=>i(`views`),children:`Total views`})]})]}),(0,Q.jsx)(`div`,{className:`my-4 [&_.recharts-cartesian-axis-tick-value]:fill-gray-500`,children:(0,Q.jsx)(f,{className:`-mb-3 aspect-auto h-[16vw] max-h-[320px] min-h-[180px] w-full`,color:o.color,data:s,id:o.dataKey,range:l,showHours:!0,syncId:`overview-charts`})})]})})})},ke=e(P(),1);ke.registerLocale(N);var Ae=e=>he[e]||ke.getName(e,`en`,{select:`alias`})||`Unknown`,je=e=>({"UNITED STATES":`US`,"UNITED STATES OF AMERICA":`US`,USA:`US`,"UNITED KINGDOM":`GB`,UK:`GB`,"GREAT BRITAIN":`GB`,NETHERLANDS:`NL`})[e.toUpperCase()]||(e.length>2?e.substring(0,2):e),$=({tableHeader:e,data:t,onLocationClick:n})=>(0,Q.jsxs)(j,{children:[e&&(0,Q.jsxs)(C,{children:[(0,Q.jsx)(T,{children:`Country`}),(0,Q.jsx)(T,{children:`Visitors`})]}),(0,Q.jsx)(k,{children:t.map(e=>{let t=Ae(`${e.location}`)||`Unknown`,r=n&&e.location!==`Unknown`,i=e.location?e.location.toLowerCase():`unknown`;return(0,Q.jsxs)(M,{className:r?`cursor-pointer`:``,"data-testid":`location-row-${i}`,onClick:r?()=>n(e.location):void 0,children:[(0,Q.jsx)(D,{style:{width:`${e.percentage?Math.round(e.percentage*100):0}%`}}),(0,Q.jsx)(O,{className:`group-hover/data:max-w-[calc(100%-140px)]`,children:(0,Q.jsxs)(`div`,{className:`flex items-center space-x-3 overflow-hidden`,title:t||`Unknown`,children:[(0,Q.jsx)(F,{countryCode:`${je(e.location)}`,fallback:(0,Q.jsx)(`span`,{className:`flex h-[14px] w-[22px] items-center justify-center rounded-[2px] bg-black text-white`,children:(0,Q.jsx)(d.SkullAndBones,{className:`size-3`})})}),(0,Q.jsx)(`div`,{className:`truncate font-medium`,children:t})]})}),(0,Q.jsxs)(A,{children:[(0,Q.jsx)(w,{children:l(Number(e.visits))}),(0,Q.jsx)(E,{children:u(e.percentage)})]})]},e.location||`unknown`)})})]}),Me=({data:e,isLoading:t,onLocationClick:n})=>{let r=e.slice(0,10);return(0,Q.jsx)(Q.Fragment,{children:t?``:(0,Q.jsx)(Q.Fragment,{children:e&&e.length>0&&(0,Q.jsxs)(S,{className:`group/datalist`,"data-testid":`locations-card`,children:[(0,Q.jsxs)(`div`,{className:`flex items-center justify-between p-6`,children:[(0,Q.jsxs)(_,{className:`p-0`,children:[(0,Q.jsx)(b,{children:`Locations`}),(0,Q.jsx)(x,{children:`Where are the readers of this post`})]}),(0,Q.jsx)(H,{className:`mr-2`,children:`Visitors`})]}),(0,Q.jsxs)(y,{className:`overflow-hidden`,children:[(0,Q.jsx)(K,{}),(0,Q.jsx)($,{data:r,tableHeader:!1,onLocationClick:n})]}),e.length>10&&(0,Q.jsx)(v,{children:(0,Q.jsxs)(B,{children:[(0,Q.jsx)(R,{asChild:!0,children:(0,Q.jsxs)(V,{variant:`outline`,children:[`View all `,(0,Q.jsx)(de,{})]})}),(0,Q.jsxs)(U,{className:`overflow-y-auto pt-0 sm:max-w-[420px]`,children:[(0,Q.jsxs)(L,{className:`sticky top-0 z-40 -mx-6 bg-surface-elevated/60 p-6 backdrop-blur`,children:[(0,Q.jsx)(W,{children:`Top locations`}),(0,Q.jsx)(ve,{children:`Where are the readers of this post`})]}),(0,Q.jsx)(`div`,{className:`group/datalist`,children:(0,Q.jsx)($,{data:e,tableHeader:!0,onLocationClick:n})})]})]})})]})})})},Ne=()=>{let e=s(),{postId:t}=o(),{statsConfig:n,isLoading:a,site:l}=be(),{range:u,setRange:d,post:f,isPostLoading:p}=Te(),{appSettings:m}=ce(),h=(0,Z.useRef)(null),{filters:g,setFilters:_}=oe({supportedFields:ae,trackingSource:`post-analytics`}),v=(0,Z.useMemo)(()=>Se(g.find(e=>e.field===`audience`)?.values),[g]);(0,Z.useEffect)(()=>{!p&&f?.email_only&&e(`/posts/analytics/${t}`)},[p,f?.email_only,e,t]);let b=(0,Z.useMemo)(()=>{if(!f?.published_at)return _e.allTime.value;let e=ge(f.published_at),{startDate:t,endDate:n}=z(u);return n.diff(t,`days`)+1>e?e:u},[f?.published_at,u]),{startDate:x,endDate:C,timezone:w}=z(b),T=(0,Z.useCallback)(()=>{let e=ee(h.current);e&&e.scrollTo({top:0,behavior:`smooth`})},[]),E=(0,Z.useMemo)(()=>{let e={};return g.forEach(t=>{let n=t.field,r=t.values;if(n===`audience`)return;let i=r&&r.length>0&&r[0]!==null&&r[0]!==void 0,a=n===`source`&&r?.[0]===``;if(i&&(r[0]!==``||a)){let t=String(r[0]);e[n]=t}}),e},[g]),D=(0,Z.useCallback)((e,t)=>{_(n=>n.find(t=>t.field===e)?n.map(n=>n.field===e?{...n,values:[t]}:n):[...n,ne(e,`is`,[t])]),T()},[_,T]),O=(0,Z.useCallback)(e=>D(`location`,e),[D]),k=(0,Z.useCallback)(e=>D(`source`,e),[D]),A=(0,Z.useMemo)(()=>{let e={site_uuid:n?.id||``,date_from:G(x),date_to:G(C),timezone:w,member_status:xe(v),post_uuid:``,...E};return!p&&f?.uuid?{...e,post_uuid:f.uuid}:e},[p,f,n?.id,x,C,w,v,E]),{data:j,loading:M}=r({endpoint:`api_kpis`,statsConfig:n,params:A}),{data:N,loading:P}=r({endpoint:`api_top_locations`,statsConfig:n,params:A}),{data:F,loading:I}=r({endpoint:`api_top_sources`,statsConfig:n,params:A}),L=(0,Z.useMemo)(()=>N?.reduce((e,t)=>e+Number(t.visits),0)||0,[N]),R=(0,Z.useMemo)(()=>F?F.reduce((e,t)=>e+Number(t.visits||0),0):0,[F]),B=l.url,V=l.icon,H=(0,Z.useMemo)(()=>{let e=N?.map(e=>({location:String(e.location),visits:Number(e.visits),percentage:L>0?Number(e.visits)/L:0,isUnknown:pe.includes(String(e.location))}))||[],t=e.filter(e=>!e.isUnknown),n=e.filter(e=>e.isUnknown),r=n.length>0?[{location:`Unknown`,visits:n.reduce((e,t)=>e+t.visits,0),percentage:n.reduce((e,t)=>e+t.percentage,0)}]:[];return[...t,...r]},[N,L]),U=a||p||M||P||I,W=De(j),K=g.length>0;return m&&!m.analytics?.webAnalytics?(0,Q.jsx)(c,{to:`/posts/analytics/${t}`,replace:!0}):(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsxs)(we,{currentTab:`Web`,children:[K&&(0,Q.jsx)(i,{children:(0,Q.jsx)(q,{range:u,onRangeChange:d})}),(0,Q.jsxs)(i,{className:`${K?`mt-0! [grid-area:subactions] lg:mt-[25px]!`:`[grid-area:actions]`}`,children:[(0,Q.jsx)(ie,{filters:g,postUuid:f?.uuid,range:u,onChange:_}),!K&&(0,Q.jsx)(q,{range:u,onRangeChange:d})]})]}),(0,Q.jsx)(Ce,{ref:h,children:U?(0,Q.jsx)(S,{className:`size-full`,variant:`plain`,children:(0,Q.jsx)(y,{className:`size-full items-center justify-center`,children:(0,Q.jsx)(me,{})})}):j&&j.length!==0&&W.visits!==`0`?(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsx)(Oe,{data:j,range:b}),(0,Q.jsxs)(`div`,{className:`flex flex-col gap-6 lg:grid lg:grid-cols-2`,children:[(0,Q.jsx)(Me,{data:H,isLoading:P,onLocationClick:O}),(0,Q.jsx)(Ee,{data:F,range:b,siteIcon:V,siteUrl:B,totalVisitors:R,onSourceClick:k})]})]}):(0,Q.jsx)(`div`,{className:`grow`,children:(0,Q.jsx)(re,{className:`h-full`,description:`Try adjusting filters to see more data.`,title:`No visitors ${te(u)}`,children:(0,Q.jsx)(se,{strokeWidth:1.5})})})})]})};export{Ne as default};
@@ -0,0 +1 @@
1
+ import{o as e,r as t}from"./rolldown-runtime-DAXXjFlN.js";import{t as n}from"./react-Bb3IsNbi.js";import{t as r}from"./jsx-runtime-DX3WBWVO.js";import{m as i,p as a}from"./hooks-D6EE7BIt.js";import{n as o,o as s,s as c,t as l}from"./use-settings-navigation-Bf1g1rEh.js";import{i as u,n as d,r as f,t as ee}from"./action-list-lGzZLHc8.js";import{Pr as p,ws as m}from"./index-BHy2DZX-.js";import{n as te}from"./confirmation-modal-B6D6mk6R.js";import{n as ne,t as h}from"./global-data-provider-B949LDXJ.js";import{n as re}from"./integrations-BT6_iJvu.js";import{t as ie}from"./api-keys-BK0LylyK.js";import{t as g}from"./integration-header-B4DyXV06.js";import{t as _}from"./api-keys-_iCT4dxr.js";import{t as v}from"./brand-icon-09YqFZjV.js";var y=``+new URL(`zapier-logo-D8a11oW_.svg`,import.meta.url).href,b=e(n(),1),x=r(),S=(e,t)=>`${e}-${t}`,C=()=>{let[e,t]=(0,b.useState)(``),[n,r]=(0,b.useState)(!1),i=(0,b.useRef)(new Map),[a,o]=(0,b.useState)(new Set),s=t=>t.length?t.some(t=>t.toLowerCase().includes(e.toLowerCase())):!0,c=(0,b.useCallback)((t,n)=>{i.current.set(t,n),(!e||n.some(t=>t.toLowerCase().includes(e.toLowerCase())))&&o(e=>new Set(e).add(t))},[e]),l=(0,b.useCallback)(e=>{i.current.delete(e),o(t=>{let n=new Set(t);return n.delete(e),n})},[]);(0,b.useEffect)(()=>{let t=new Set;i.current.forEach((n,r)=>{(!e||n.some(t=>t.toLowerCase().includes(e.toLowerCase())))&&t.add(r)}),o(t)},[e]);let u=(0,b.useCallback)(e=>a.size===1&&a.has(e),[a]),d=(0,b.useCallback)(()=>a,[a]),f=t=>{if(!e)return t;if(typeof t==`string`){let n=e.split(/\s+/).map(e=>e.toLowerCase()),r=n.map(e=>e.replace(/[.*+?^${}()|[\]\\]/g,`\\$&`)).join(`|`),i=t.split(RegExp(`(${r})`,`gi`)),a=new Map;return i.map(e=>{if(!n.includes(e.toLowerCase()))return e;let t=(a.get(e)??0)+1;return a.set(e,t),(0,x.jsx)(`span`,{className:`bg-yellow-500/40`,children:e},`${e}-${t}`)})}else if(Array.isArray(t))return t.map(e=>f(e));else if(t&&typeof t==`object`&&t)return b.Children.map(t,e=>e&&typeof e==`object`&&`props`in e?f(e.props.children):e);else return t};return{filter:e,setFilter:t,checkVisible:s,highlightKeywords:f,noResult:n,setNoResult:r,registerComponent:c,unregisterComponent:l,getVisibleComponents:d,isOnlyVisibleComponent:u}},w=``+new URL(`Alto-DoS3yH_j.png`,import.meta.url).href,T=``+new URL(`Bulletin-BUpcurG5.png`,import.meta.url).href,E=``+new URL(`Casper-ASA9Ix4v.png`,import.meta.url).href,D=``+new URL(`Dawn-aeEVEPie.png`,import.meta.url).href,O=``+new URL(`Digest-DJl0U_FG.png`,import.meta.url).href,k=``+new URL(`Dope-D_CgP0p0.png`,import.meta.url).href,A=``+new URL(`Ease-B4NuA7sj.png`,import.meta.url).href,j=``+new URL(`Edge-BPZxvKka.png`,import.meta.url).href,M=``+new URL(`Edition-cIDLjlhj.png`,import.meta.url).href,N=``+new URL(`Episode-D7bgV2bY.png`,import.meta.url).href,P=``+new URL(`Headline-BFXOunIb.png`,import.meta.url).href,F=``+new URL(`Journal-D3UW9T2b.png`,import.meta.url).href,I=``+new URL(`London-CSCVHwS0.png`,import.meta.url).href,L=``+new URL(`Ruby-DVEXVMTx.png`,import.meta.url).href,R=``+new URL(`Solo-c-yPo0gw.png`,import.meta.url).href,z=``+new URL(`Source-V-WXZXnS.png`,import.meta.url).href,B=``+new URL(`Source-Magazine-Czq1p0a_.png`,import.meta.url).href,V=``+new URL(`Source-Newsletter-CwTcfhJ-.png`,import.meta.url).href,H=``+new URL(`Taste-U2cRR2yO.png`,import.meta.url).href,U=``+new URL(`Wave-DE2aI-FM.png`,import.meta.url).href,W=[{name:`Source`,category:`News`,previewUrl:`https://source.ghost.io/`,ref:`default`,image:z,variants:[{category:`Magazine`,previewUrl:`https://source-magazine.ghost.io/`,image:B},{category:`Newsletter`,previewUrl:`https://source-newsletter.ghost.io/`,image:V}]},{name:`Casper`,category:`Blog`,previewUrl:`https://demo.ghost.io/`,ref:`TryGhost/Casper`,image:E},{name:`Edition`,category:`Newsletter`,url:`https://github.com/TryGhost/Edition`,previewUrl:`https://edition.ghost.io/`,ref:`TryGhost/Edition`,image:M},{name:`Solo`,category:`Blog`,url:`https://github.com/TryGhost/Solo`,previewUrl:`https://solo.ghost.io`,ref:`TryGhost/Solo`,image:R},{name:`Taste`,category:`Blog`,url:`https://github.com/TryGhost/Taste`,previewUrl:`https://taste.ghost.io`,ref:`TryGhost/Taste`,image:H},{name:`Episode`,category:`Podcast`,url:`https://github.com/TryGhost/Episode`,previewUrl:`https://episode.ghost.io`,ref:`TryGhost/Episode`,image:N},{name:`Digest`,category:`Newsletter`,url:`https://github.com/TryGhost/Digest`,previewUrl:`https://digest.ghost.io/`,ref:`TryGhost/Digest`,image:O},{name:`Bulletin`,category:`Newsletter`,url:`https://github.com/TryGhost/Bulletin`,previewUrl:`https://bulletin.ghost.io/`,ref:`TryGhost/Bulletin`,image:T},{name:`Alto`,category:`Blog`,url:`https://github.com/TryGhost/Alto`,previewUrl:`https://alto.ghost.io`,ref:`TryGhost/Alto`,image:w},{name:`Dope`,category:`Magazine`,url:`https://github.com/TryGhost/Dope`,previewUrl:`https://dope.ghost.io`,ref:`TryGhost/Dope`,image:k},{name:`Wave`,category:`Podcast`,url:`https://github.com/TryGhost/Wave`,previewUrl:`https://wave.ghost.io`,ref:`TryGhost/Wave`,image:U},{name:`Edge`,category:`Photography`,url:`https://github.com/TryGhost/Edge`,previewUrl:`https://edge.ghost.io`,ref:`TryGhost/Edge`,image:j},{name:`Dawn`,category:`Newsletter`,url:`https://github.com/TryGhost/Dawn`,previewUrl:`https://dawn.ghost.io/`,ref:`TryGhost/Dawn`,image:D},{name:`Ease`,category:`Documentation`,url:`https://github.com/TryGhost/Ease`,previewUrl:`https://ease.ghost.io`,ref:`TryGhost/Ease`,image:A},{name:`Headline`,category:`News`,url:`https://github.com/TryGhost/Headline`,previewUrl:`https://headline.ghost.io`,ref:`TryGhost/Headline`,image:P},{name:`Ruby`,category:`Magazine`,url:`https://github.com/TryGhost/Ruby`,previewUrl:`https://ruby.ghost.io`,ref:`TryGhost/Ruby`,image:L},{name:`London`,category:`Photography`,url:`https://github.com/TryGhost/London`,previewUrl:`https://london.ghost.io`,ref:`TryGhost/London`,image:I},{name:`Journal`,category:`Newsletter`,url:`https://github.com/TryGhost/Journal`,previewUrl:`https://journal.ghost.io/`,ref:`TryGhost/Journal`,image:F}],G=``+new URL(`orb-black-1-bYPPSSAp.png`,import.meta.url).href,ae=``+new URL(`orb-black-2-C-rcujeh.png`,import.meta.url).href,K=``+new URL(`orb-black-3-DTkwRv_1.png`,import.meta.url).href,q=``+new URL(`orb-black-4-BXF3fMuE.png`,import.meta.url).href,J=``+new URL(`orb-black-5-94Eda1ek.png`,import.meta.url).href,oe=`data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%201818.2%202500'%20style='enable-background:new%200%200%201818.2%202500'%20xml:space='preserve'%3e%3ctitle%3egoogle-docs%3c/title%3e%3cpath%20d='M1136.4%200h-966C79.6%200%200%2079.5%200%20170.5v2159.1c0%2090.9%2079.5%20170.5%20170.5%20170.5h1477.3c90.9%200%20170.5-79.5%20170.5-170.5V681.8l-397.7-284.1L1136.4%200z'%20style='fill:%234285f4'/%3e%3cpath%20d='M454.5%201818.2h909.1v-113.6h-909l-.1%20113.6zm0%20227.3h681.8v-113.6H454.5v113.6zm0-795.5v113.6h909.1V1250H454.5zm0%20340.9h909.1v-113.6h-909l-.1%20113.6z'%20style='fill:%23f1f1f1'/%3e%3cpath%20d='M1136.4%200v511.4c0%2090.9%2079.5%20170.4%20170.4%20170.4h511.4L1136.4%200z'%20style='fill:%23a1c2fa'/%3e%3c/svg%3e`,se=``+new URL(`mailchimp-DwTEN-tS.svg`,import.meta.url).href,ce=`data:image/svg+xml,%3csvg%20height='546'%20viewBox='0%200%20569%20546'%20width='569'%20xmlns='http://www.w3.org/2000/svg'%3e%3ctitle%3epatreon%3c/title%3e%3cg%20fill='%23FF424D'%3e%3ccircle%20cx='362.59'%20cy='204.59'%20data-fill='1'%20r='204.59'/%3e%3cpath%20data-fill='1'%20d='M0%200h100v545.8H0z'/%3e%3c/g%3e%3c/svg%3e`,Y=`data:image/svg+xml,%3csvg%20width='152'%20height='179'%20viewBox='0%200%20152%20179'%20xmlns='http://www.w3.org/2000/svg'%3e%3ctitle%3epaypal%3c/title%3e%3cg%20fill='none'%20fill-rule='evenodd'%3e%3cpath%20d='M136.492%2045.453c2.179-13.894-.015-23.348-7.53-31.911C120.688%204.114%20105.741.075%2086.617.075H31.105a7.943%207.943%200%200%200-7.846%206.705L.144%20153.36a4.765%204.765%200%200%200%204.707%205.507h34.27l-2.365%2015a4.168%204.168%200%200%200%204.118%204.818H69.76a6.948%206.948%200%200%200%206.863-5.865l.283-1.468%205.442-34.507.351-1.907a6.947%206.947%200%200%201%206.862-5.865h4.322c27.984%200%2049.896-11.37%2056.299-44.25%202.675-13.74%201.292-25.208-5.783-33.27-2.14-2.439-4.802-4.455-7.907-6.1'%20fill='%23238EC2'/%3e%3cpath%20d='M136.492%2045.453c2.179-13.894-.015-23.348-7.53-31.911C120.688%204.114%20105.741.075%2086.617.075H31.105a7.943%207.943%200%200%200-7.846%206.705L.144%20153.36a4.765%204.765%200%200%200%204.707%205.507h34.27l8.609-54.588-.267%201.711c.609-3.86%203.909-6.704%207.817-6.704h16.288c31.989%200%2057.037-12.996%2064.356-50.582.217-1.113.402-2.191.568-3.251'%20fill='%2320274F'/%3e%3cpath%20d='M56.978%2045.638a6.945%206.945%200%200%201%206.863-5.866h43.514c5.155%200%209.961.337%2014.356%201.045%201.256.202%202.478.435%203.665.698a53.92%2053.92%200%200%201%203.455.885c.558.162%201.106.333%201.646.512%202.157.717%204.166%201.562%206.015%202.541%202.179-13.894-.015-23.348-7.53-31.911C120.688%204.114%20105.741.075%2086.617.075H31.105a7.943%207.943%200%200%200-7.846%206.705L.144%20153.36a4.765%204.765%200%200%200%204.707%205.507h34.27L56.978%2045.638'%20fill='%23253667'/%3e%3c/g%3e%3c/svg%3e`,le=``+new URL(`slackicon-37ETtpm7.png`,import.meta.url).href,ue=`data:image/svg+xml,%3csvg%20width='86'%20height='89'%20xmlns='http://www.w3.org/2000/svg'%3e%3ctitle%3etypeform%3c/title%3e%3cg%20fill='none'%20fill-rule='evenodd'%3e%3cpath%20d='M40.28%2087.561c12.464.154%2021.16-3.994%2030.135-12.175%208.975-8.18%2014.306-16.867%2014.741-28.73.436-11.862-3.412-21.43-12.564-30.581C63.441%206.923%2051.64.9%2039.4.899%2027.158.898%2018.967%206.252%2011.385%2016.07c-7.581%209.818-9.237%2022.212-9.894%2033.921-.657%2011.71-1.15%2017.111%206.608%2024.625%207.758%207.514%2019.718%2012.791%2032.182%2012.945z'%20stroke='%23262627'/%3e%3cpath%20d='M29.136%2037.976v-4.885h25.918v4.885H44.679v27.998H39.51V37.976z'%20fill='%23262627'%20fill-rule='nonzero'/%3e%3c/g%3e%3c/svg%3e`,de=``+new URL(`zero-bounce-lzY95s9E.png`,import.meta.url).href,X=[{ghostImage:ae,appImage:le,title:`Share scheduled posts with your team in Slack`,url:`https://zapier.com/webintent/create-zap?template=359499`},{ghostImage:K,appImage:ce,title:`Connect Patreon to your Ghost membership site`,url:`https://zapier.com/webintent/create-zap?template=75801`},{ghostImage:q,appImage:de,title:`Protect email delivery with email verification`,url:`https://zapier.com/webintent/create-zap?template=359415`},{ghostImage:J,appImage:Y,title:`Add members for successful sales in PayPal`,url:`https://zapier.com/webintent/create-zap?template=184423`},{ghostImage:K,appImage:Y,title:`Unsubscribe members who cancel a subscription in PayPal`,url:`https://zapier.com/webintent/create-zap?template=359348`},{ghostImage:G,appImage:oe,title:`Send new post drafts from Google Docs to Ghost`,url:`https://zapier.com/webintent/create-zap?template=50924`},{ghostImage:q,appImage:ue,title:`Survey new members using Typeform`,url:`https://zapier.com/webintent/create-zap?template=359407`},{ghostImage:G,appImage:se,title:`Sync email subscribers in Ghost + Mailchimp`,url:`https://zapier.com/webintent/create-zap?template=359342`}],Z=(0,b.createContext)({officialThemes:W,zapierTemplates:X,search:{filter:``,setFilter:()=>{},checkVisible:()=>!0,highlightKeywords:()=>``,noResult:!1,setNoResult:()=>{},registerComponent:()=>{},unregisterComponent:()=>{},getVisibleComponents:()=>new Set,isOnlyVisibleComponent:()=>!1},sortingState:[],offersShowArchived:!1,setOffersShowArchived:()=>{}}),fe=({children:e,...t})=>{let n=C(),[r,i]=(0,b.useState)([{type:`offers`,option:`date-added`,direction:`desc`}]),[a,s]=(0,b.useState)(!1);return(0,x.jsx)(Z.Provider,{value:{officialThemes:W,zapierTemplates:X,...t,search:n,sortingState:r,setSortingState:i,offersShowArchived:a,setOffersShowArchived:s},children:(0,x.jsx)(h,{children:(0,x.jsx)(o,{children:e})})})},Q=()=>(0,b.useContext)(Z),pe=()=>Q().officialThemes,me=()=>Q().search,he=()=>Q().upgradeStatus,ge=()=>{let{sortingState:e,setSortingState:t}=Q();return{sortingState:e,setSortingState:t}},$=()=>{let{offersShowArchived:e,setOffersShowArchived:t}=Q();return{offersShowArchived:e,setOffersShowArchived:t}},_e=t({default:()=>ve});function ve(){let{updateRoute:e}=l(),{zapierTemplates:t}=Q(),{data:{integrations:n}={integrations:[]}}=re(),{config:r}=ne(),{mutateAsync:o}=_(),h=i(),[S,C]=(0,b.useState)(!1),w=r.hostSettings?.limits?.customIntegrations?.disabled,T=n.find(({slug:e})=>e===`zapier`),E=T?.api_keys?.find(e=>e.type===`admin`);return(0,b.useEffect)(()=>{w&&e(`integrations`)},[w,e]),(0,x.jsxs)(s,{cancelLabel:``,footer:(0,x.jsxs)(`div`,{className:`mx-8 flex w-full items-center justify-between`,children:[(0,x.jsxs)(`a`,{className:`mt-1 self-baseline font-bold`,href:`https://zapier.com/apps/ghost/integrations?utm_medium=partner_api&utm_source=widget&utm_campaign=Widget`,rel:`noopener noreferrer`,target:`_blank`,children:[`View more Ghost integrations powered by `,(0,x.jsx)(`span`,{children:(0,x.jsx)(`img`,{alt:`Zapier`,className:`relative top-[-2px] inline-block`,src:y})})]}),(0,x.jsx)(p,{type:`button`,onClick:()=>{e(`integrations`)},children:`Close`})]}),okLabel:`Close`,okVariant:`default`,testId:`zapier-modal`,title:``,stickyFooter:!0,onClose:()=>{e(`integrations`)},onOk:()=>{e(`integrations`)},children:[(0,x.jsx)(g,{detail:`Automation for your favorite apps`,extra:(0,x.jsx)(`div`,{className:`mt-1 -mb-4`,children:(0,x.jsx)(ie,{keys:[{id:`admin-api-key`,label:`Admin API key`,text:E?.secret,hint:S?(0,x.jsx)(`div`,{className:`text-green`,children:`Admin API Key was successfully regenerated`}):void 0,onRegenerate:()=>{!T||!E||(C(!1),c.show(te,{title:`Regenerate Admin API Key`,prompt:`You will need to locate the Ghost App within your Zapier account and click on "Reconnect" to enter the new Admin API Key.`,okLabel:`Regenerate Admin API Key`,onOk:async e=>{try{await o({integrationId:T.id,apiKeyId:E.id}),C(!0),e?.remove()}catch(e){h(e)}}}))}},{id:`api-url`,label:`API URL`,text:window.location.origin+a().subdir}]})}),icon:(0,x.jsx)(v,{name:`zapier`,size:56}),title:`Zapier`}),(0,x.jsx)(ee,{children:t.map(e=>(0,x.jsxs)(d,{hover:!1,children:[(0,x.jsx)(u,{className:`flex items-center gap-3 py-2 pl-3`,children:(0,x.jsxs)(`div`,{className:`flex flex-col gap-4 md:flex-row md:items-center`,children:[(0,x.jsxs)(`div`,{className:`flex shrink-0 flex-nowrap items-center gap-2`,children:[(0,x.jsx)(`img`,{className:`size-8 object-contain dark:invert`,role:`presentation`,src:e.ghostImage}),(0,x.jsx)(m,{className:`size-3`}),(0,x.jsx)(`img`,{className:`size-8 object-contain`,role:`presentation`,src:e.appImage})]}),(0,x.jsx)(`span`,{children:e.title})]})}),(0,x.jsx)(f,{visibility:`hover`,children:(0,x.jsx)(p,{className:`h-auto p-0 font-semibold whitespace-nowrap text-[#FF4A00] hover:text-[#FF4A00]`,variant:`link`,asChild:!0,children:(0,x.jsx)(`a`,{href:e.url,rel:`noopener noreferrer`,target:`_blank`,children:`Use this Zap`})})})]},e.url))})]})}export{me as a,S as c,pe as i,fe as n,ge as o,$ as r,he as s,_e as t};
@@ -3,7 +3,7 @@
3
3
  <head>
4
4
  <link rel="stylesheet" href="./assets/vendor-3bf602dfa6463c3400ffd81697767274.css">
5
5
  <link rel="stylesheet" href="./assets/ghost-d38c30b866e59f2e06a357b5eb844fe5.css">
6
- <meta name="ghost-admin/config/environment" content="%7B%22modulePrefix%22%3A%22ghost-admin%22%2C%22environment%22%3A%22production%22%2C%22editorUrl%22%3A%22%22%2C%22rootURL%22%3A%22%22%2C%22locationType%22%3A%22trailing-hash%22%2C%22EmberENV%22%3A%7B%22FEATURES%22%3A%7B%7D%2C%22EXTEND_PROTOTYPES%22%3A%7B%22Date%22%3Afalse%2C%22Array%22%3Atrue%2C%22String%22%3Atrue%2C%22Function%22%3Afalse%7D%2C%22_APPLICATION_TEMPLATE_WRAPPER%22%3Afalse%2C%22_JQUERY_INTEGRATION%22%3Atrue%2C%22_TEMPLATE_ONLY_GLIMMER_COMPONENTS%22%3Atrue%7D%2C%22APP%22%3A%7B%22version%22%3A%226.56%22%2C%22name%22%3A%22ghost-admin%22%7D%2C%22ember-simple-auth%22%3A%7B%7D%2C%22%40sentry%2Fember%22%3A%7B%22disablePerformance%22%3Atrue%2C%22sentry%22%3A%7B%7D%7D%2C%22ember-cli-mirage%22%3A%7B%22usingProxy%22%3Afalse%2C%22useDefaultPassthroughs%22%3Atrue%7D%2C%22exportApplicationGlobal%22%3Afalse%2C%22ember-load%22%3A%7B%22loadingIndicatorClass%22%3A%22ember-load-indicator%22%7D%2C%22editorFilename%22%3A%22koenig-lexical.umd.js%22%2C%22editorHash%22%3A%22571a1e1dc6%22%2C%22activitypubFilename%22%3A%22activitypub.js%22%2C%22activitypubHash%22%3A%2228a9fedb77%22%2C%22activitypubRemoteConfigUrl%22%3A%22%2F.ghost%2Factivitypub%2Fstable%2Fclient-config%22%7D">
6
+ <meta name="ghost-admin/config/environment" content="%7B%22modulePrefix%22%3A%22ghost-admin%22%2C%22environment%22%3A%22production%22%2C%22editorUrl%22%3A%22%22%2C%22rootURL%22%3A%22%22%2C%22locationType%22%3A%22trailing-hash%22%2C%22EmberENV%22%3A%7B%22FEATURES%22%3A%7B%7D%2C%22EXTEND_PROTOTYPES%22%3A%7B%22Date%22%3Afalse%2C%22Array%22%3Atrue%2C%22String%22%3Atrue%2C%22Function%22%3Afalse%7D%2C%22_APPLICATION_TEMPLATE_WRAPPER%22%3Afalse%2C%22_JQUERY_INTEGRATION%22%3Atrue%2C%22_TEMPLATE_ONLY_GLIMMER_COMPONENTS%22%3Atrue%7D%2C%22APP%22%3A%7B%22version%22%3A%226.57%22%2C%22name%22%3A%22ghost-admin%22%7D%2C%22ember-simple-auth%22%3A%7B%7D%2C%22%40sentry%2Fember%22%3A%7B%22disablePerformance%22%3Atrue%2C%22sentry%22%3A%7B%7D%7D%2C%22ember-cli-mirage%22%3A%7B%22usingProxy%22%3Afalse%2C%22useDefaultPassthroughs%22%3Atrue%7D%2C%22exportApplicationGlobal%22%3Afalse%2C%22ember-load%22%3A%7B%22loadingIndicatorClass%22%3A%22ember-load-indicator%22%7D%2C%22editorFilename%22%3A%22koenig-lexical.umd.js%22%2C%22editorHash%22%3A%22571a1e1dc6%22%2C%22activitypubFilename%22%3A%22activitypub.js%22%2C%22activitypubHash%22%3A%223ebde9a6a0%22%2C%22activitypubRemoteConfigUrl%22%3A%22%2F.ghost%2Factivitypub%2Fstable%2Fclient-config%22%7D">
7
7
 
8
8
  <meta charset="UTF-8" />
9
9
 
@@ -20,28 +20,30 @@
20
20
 
21
21
  <link rel="shortcut icon" href="./assets/favicon-C_q1KHzv.ico" />
22
22
  <link rel="apple-touch-icon" href="./assets/apple-touch-icon-DhO18_4B.png" />
23
- <script type="module" crossorigin src="./assets/index-08n05-rc.js"></script>
23
+ <script type="module" crossorigin src="./assets/index-BHy2DZX-.js"></script>
24
24
  <link rel="modulepreload" crossorigin href="./assets/rolldown-runtime-DAXXjFlN.js">
25
25
  <link rel="modulepreload" crossorigin href="./assets/react-Bb3IsNbi.js">
26
26
  <link rel="modulepreload" crossorigin href="./assets/jsx-runtime-DX3WBWVO.js">
27
27
  <link rel="modulepreload" crossorigin href="./assets/framework-provider-CmtnPXIT.js">
28
28
  <link rel="modulepreload" crossorigin href="./assets/dist-Ndy-PuGN.js">
29
- <link rel="modulepreload" crossorigin href="./assets/hooks-CixO01lL.js">
29
+ <link rel="modulepreload" crossorigin href="./assets/hooks-D6EE7BIt.js">
30
30
  <link rel="modulepreload" crossorigin href="./assets/dist-Cb5RSHSg.js">
31
31
  <link rel="modulepreload" crossorigin href="./assets/dist-CQJY6SVY.js">
32
- <link rel="modulepreload" crossorigin href="./assets/dist-CqO2lWS0.js">
33
- <link rel="modulepreload" crossorigin href="./assets/Combination-BCm9FL4o.js">
32
+ <link rel="modulepreload" crossorigin href="./assets/dist-CqO2lWS02.js">
33
+ <link rel="modulepreload" crossorigin href="./assets/Combination-BDvCdg1t.js">
34
34
  <link rel="modulepreload" crossorigin href="./assets/preload-helper-DYl5dUZ5.js">
35
35
  <link rel="modulepreload" crossorigin href="./assets/chunk-KS7C4IRE-DG9HTHQ3.js">
36
- <link rel="modulepreload" crossorigin href="./assets/router-provider-BmEZf6c6.js">
36
+ <link rel="modulepreload" crossorigin href="./assets/router-provider-DSQfprxH.js">
37
37
  <link rel="modulepreload" crossorigin href="./assets/text-DU9Hv33_.js">
38
38
  <link rel="modulepreload" crossorigin href="./assets/shade-app-B3heOAfz-BhQXxNkT.js">
39
- <link rel="modulepreload" crossorigin href="./assets/dist-BUKmD51u.js">
40
- <link rel="modulepreload" crossorigin href="./assets/dist-CNlMj7ML.js">
39
+ <link rel="modulepreload" crossorigin href="./assets/dist-myQaY0ka.js">
40
+ <link rel="modulepreload" crossorigin href="./assets/dist-j1xxxnY8.js">
41
+ <link rel="modulepreload" crossorigin href="./assets/dist-B2PvRwLn.js">
42
+ <link rel="modulepreload" crossorigin href="./assets/dist-DlCyLrOC.js">
41
43
  <link rel="modulepreload" crossorigin href="./assets/input-surface-BdOe4KzO.js">
42
44
  <link rel="modulepreload" crossorigin href="./assets/update-queries-C4CnvJaW.js">
43
- <link rel="modulepreload" crossorigin href="./assets/users-Dkv8NQZe.js">
44
- <link rel="stylesheet" crossorigin href="./assets/index-DgUzgFvS.css">
45
+ <link rel="modulepreload" crossorigin href="./assets/users-B6hIds6n.js">
46
+ <link rel="stylesheet" crossorigin href="./assets/index-Ds2iUoF6.css">
45
47
  </head>
46
48
  <body class="react-admin">
47
49
  <div id="ember-alerts-wormhole"></div>
@@ -62,8 +64,8 @@
62
64
  <div id="ember-notifications-wormhole"></div>
63
65
  <script src="./assets/vendor-25f0bb2b2de85265afdf33da79f14a44.js"></script>
64
66
  <script src="./assets/chunk.211.6f7328d63c41536451b3.js"></script>
65
- <script src="./assets/chunk.332.05991a101d67f732dec3.js"></script>
66
- <script src="./assets/chunk.524.87b52f4fada529df2c4c.js"></script>
67
- <script src="./assets/ghost-7f01131115186d1af84ead76e79646dd.js"></script>
67
+ <script src="./assets/chunk.873.b8fc05a8ab877fb819ed.js"></script>
68
+ <script src="./assets/chunk.524.cd5498dd4e195f679266.js"></script>
69
+ <script src="./assets/ghost-d683fbeb945b13155ea669caa5d8db41.js"></script>
68
70
  </body>
69
71
  </html>
@@ -34,7 +34,7 @@ module.exports = function authors(options = {}) {
34
34
  function createAuthorsList(authorsList) {
35
35
  function processAuthor(author) {
36
36
  return autolink ? templates.link({
37
- url: urlService.facade.getUrlForResource({...author, type: 'authors'}, {withSubdirectory: true}),
37
+ url: urlService.getUrlForResource({...author, type: 'authors'}, {withSubdirectory: true}),
38
38
  text: escapeExpression(author.name)
39
39
  }) : escapeExpression(author.name);
40
40
  }
@@ -15,15 +15,10 @@ const messages = {
15
15
  const managedAttributes = ['href', 'class', 'activeClass', 'parentActiveClass'];
16
16
 
17
17
  function _formatAttrs(attributes) {
18
- let attributeString = '';
19
- Object.keys(attributes).forEach((key) => {
20
- let value = attributes[key];
21
-
18
+ return Object.keys(attributes)
22
19
  // @TODO handle non-string attributes?
23
- attributeString += `${key}="${value}"`;
24
- });
25
-
26
- return attributeString;
20
+ .map(key => `${key}="${attributes[key]}"`)
21
+ .join(' ');
27
22
  }
28
23
 
29
24
  module.exports = function link(options) {
@@ -27,7 +27,7 @@ module.exports = function tags(options) {
27
27
  function createTagList(tagsList) {
28
28
  function processTag(tag) {
29
29
  return autolink ? templates.link({
30
- url: urlService.facade.getUrlForResource({...tag, type: 'tags'}, {withSubdirectory: true}),
30
+ url: urlService.getUrlForResource({...tag, type: 'tags'}, {withSubdirectory: true}),
31
31
  text: escapeExpression(tag.name)
32
32
  }) : escapeExpression(tag.name);
33
33
  }
@@ -7,11 +7,11 @@ function getAuthorUrl(data, absolute) {
7
7
  const contextObject = getContextObject(data, context);
8
8
 
9
9
  if (data.author) {
10
- return urlService.facade.getUrlForResource({...data.author, type: 'authors'}, {absolute: absolute, withSubdirectory: true});
10
+ return urlService.getUrlForResource({...data.author, type: 'authors'}, {absolute: absolute, withSubdirectory: true});
11
11
  }
12
12
 
13
13
  if (contextObject && contextObject.primary_author) {
14
- return urlService.facade.getUrlForResource({...contextObject.primary_author, type: 'authors'}, {absolute: absolute, withSubdirectory: true});
14
+ return urlService.getUrlForResource({...contextObject.primary_author, type: 'authors'}, {absolute: absolute, withSubdirectory: true});
15
15
  }
16
16
 
17
17
  return null;
@@ -57,19 +57,19 @@ function getUrl(data, absolute) {
57
57
  // preview probe stays keyed on the raw `data.status` so an unrouted
58
58
  // status-stripped post falls back to /p/:uuid.
59
59
  const postResource = {status: 'published', ...data, type: checks.isPage(data) ? 'pages' : 'posts'};
60
- if (data.status !== 'published' && urlService.facade.getUrlForResource(postResource) === '/404/') {
60
+ if (data.status !== 'published' && urlService.getUrlForResource(postResource) === '/404/') {
61
61
  return urlUtils.urlFor({relativeUrl: urlUtils.urlJoin('/p', data.uuid, '/')}, null, absolute);
62
62
  }
63
63
 
64
- return urlService.facade.getUrlForResource(postResource, {absolute: absolute, withSubdirectory: true});
64
+ return urlService.getUrlForResource(postResource, {absolute: absolute, withSubdirectory: true});
65
65
  }
66
66
 
67
67
  if (checks.isTag(data)) {
68
- return urlService.facade.getUrlForResource({...data, type: 'tags'}, {absolute: absolute, withSubdirectory: true});
68
+ return urlService.getUrlForResource({...data, type: 'tags'}, {absolute: absolute, withSubdirectory: true});
69
69
  }
70
70
 
71
71
  if (checks.isUser(data)) {
72
- return urlService.facade.getUrlForResource({...data, type: 'authors'}, {absolute: absolute, withSubdirectory: true});
72
+ return urlService.getUrlForResource({...data, type: 'authors'}, {absolute: absolute, withSubdirectory: true});
73
73
  }
74
74
 
75
75
  if (checks.isNav(data)) {
@@ -11,7 +11,7 @@ const logging = require('@tryghost/logging');
11
11
  // The only server events the frontend may subscribe to. A narrow surface on
12
12
  // purpose: the shared bus's own header discourages widening cross-layer
13
13
  // coupling, so new event names here need the same scrutiny as new exports.
14
- const FRONTEND_SUBSCRIBABLE_EVENTS = ['site.changed', 'url.added', 'url.removed'];
14
+ const FRONTEND_SUBSCRIBABLE_EVENTS = ['site.changed'];
15
15
 
16
16
  // Require from the handlebars framework
17
17
  const {SafeString} = require('./handlebars');
@@ -1,12 +1,26 @@
1
1
  const EventEmitter = require('events').EventEmitter;
2
2
 
3
3
  /**
4
- * Frontend-internal routing events.
4
+ * Raised for each router mounted during activation.
5
5
  *
6
- * Carries `router.created` and `routers.reset`, which are emitted by the
7
- * router manager and consumed only inside the frontend (the sitemap keeps
8
- * its route entries in sync from them). They used to ride the server's
9
- * shared event bus purely for historical reasons nothing server-side
10
- * listens to them.
6
+ * @typedef {Object} RouteRegistered
7
+ * @property {string|null} path - route in domain notation, e.g. `/about/`.
8
+ * Null for routers with no route of their own: the static pages router,
9
+ * and taxonomies, which have no index route (`/tag/` does not exist).
10
+ * @property {string} type - the kind of router, e.g. `CollectionRouter`
11
+ * @property {string} id - the router's identifier
12
+ */
13
+
14
+ /**
15
+ * Frontend-internal routing domain events.
16
+ *
17
+ * Carries `RouteRegistered` and `RoutesReset` — the latter has no payload and
18
+ * is raised before a reload clears the routers. Both are emitted by the router
19
+ * manager and consumed only inside the frontend (the sitemap keeps its route
20
+ * entries in sync from them). They used to ride the server's shared event bus
21
+ * purely for historical reasons — nothing server-side listens to them.
22
+ *
23
+ * The payloads are plain data, so a consumer never depends on the internals
24
+ * of the Express-backed router that happened to raise the event.
11
25
  */
12
26
  module.exports = new EventEmitter();
@@ -1,7 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.toExpressNotation = toExpressNotation;
4
- exports.toDomainNotation = toDomainNotation;
5
4
  /**
6
5
  * Convert a domain-model permalink into Express / URL-service notation.
7
6
  *
@@ -12,15 +11,3 @@ exports.toDomainNotation = toDomainNotation;
12
11
  function toExpressNotation(permalink) {
13
12
  return permalink.replace(/{(\w+)}/g, ':$1');
14
13
  }
15
- /**
16
- * Convert an Express / URL-service permalink back into domain-model notation.
17
- * Will be used on the download path when serialising the canonical shape back
18
- * to YAML — no production caller yet.
19
- *
20
- * @example toDomainNotation('/:slug/') // => '/{slug}/'
21
- * @example toDomainNotation('/:primary_tag/:slug/') // => '/{primary_tag}/{slug}/'
22
- * @example toDomainNotation('/{slug}/') // => '/{slug}/' (idempotent)
23
- */
24
- function toDomainNotation(permalink) {
25
- return permalink.replace(/:(\w+)/g, '{$1}');
26
- }
@@ -8,16 +8,3 @@
8
8
  export function toExpressNotation(permalink: string): string {
9
9
  return permalink.replace(/{(\w+)}/g, ':$1');
10
10
  }
11
-
12
- /**
13
- * Convert an Express / URL-service permalink back into domain-model notation.
14
- * Will be used on the download path when serialising the canonical shape back
15
- * to YAML — no production caller yet.
16
- *
17
- * @example toDomainNotation('/:slug/') // => '/{slug}/'
18
- * @example toDomainNotation('/:primary_tag/:slug/') // => '/{primary_tag}/{slug}/'
19
- * @example toDomainNotation('/{slug}/') // => '/{slug}/' (idempotent)
20
- */
21
- export function toDomainNotation(permalink: string): string {
22
- return permalink.replace(/:(\w+)/g, '{$1}');
23
- }
@@ -8,7 +8,7 @@ const ParentRouter = require('./parent-router');
8
8
  const EmailRouter = require('./email-router');
9
9
  const UnsubscribeRouter = require('./unsubscribe-router');
10
10
 
11
- // Frontend-internal routing events (router.created / routers.reset)
11
+ // Frontend-internal routing domain events (RouteRegistered / RoutesReset)
12
12
  const routingEvents = require('./events');
13
13
 
14
14
  class RouterManager {
@@ -16,7 +16,7 @@ class RouterManager {
16
16
  this.registry = registry;
17
17
  this.siteRouter = null;
18
18
  /**
19
- * @type {URLServiceFacade}
19
+ * @type {UrlService}
20
20
  */
21
21
  this.urlService = null;
22
22
  }
@@ -30,11 +30,17 @@ class RouterManager {
30
30
  }
31
31
 
32
32
  routerCreated(router) {
33
- routingEvents.emit('router.created', router);
33
+ routingEvents.emit('RouteRegistered', {
34
+ // Not every router owns a route: the static pages router has none,
35
+ // and taxonomies have no index route (`/tag/` does not exist).
36
+ path: router.route ? router.route.value : null,
37
+ type: router.name,
38
+ id: router.identifier
39
+ });
34
40
 
35
41
  // CASE: there are router types which do not generate resource urls
36
- // e.g. static route router, in this case we don't want ot notify the URL service
37
- if (!router || !router.getPermalinks()) {
42
+ // e.g. static route router, in this case we don't want to notify the URL service
43
+ if (!router.getPermalinks()) {
38
44
  return;
39
45
  }
40
46
 
@@ -65,7 +71,7 @@ class RouterManager {
65
71
  this.registry.resetAllRouters();
66
72
  this.registry.resetAllRoutes();
67
73
 
68
- routingEvents.emit('routers.reset');
74
+ routingEvents.emit('RoutesReset');
69
75
 
70
76
  this.siteRouter = new ParentRouter('SiteRouter');
71
77
  this.registry.setRouter('siteRouter', this.siteRouter);
@@ -171,7 +177,7 @@ class RouterManager {
171
177
  if (collectionRouter && collectionRouter.getPermalinks().getValue().match(/:year|:month|:day/)) {
172
178
  debug('handleTimezoneEdit: trigger regeneration');
173
179
 
174
- this.urlService.onRouterUpdated(collectionRouter.identifier);
180
+ this.urlService.onRouterUpdated();
175
181
  }
176
182
  }
177
183
  }
@@ -181,7 +187,7 @@ module.exports = RouterManager;
181
187
  /**
182
188
  * @typedef {Object} RouterConfig
183
189
  * @property {RouteSettings} [routeSettings] - parsed route settings domain model
184
- * @property {URLServiceFacade} urlService - resource-based URL service facade
190
+ * @property {UrlService} urlService - resource-based URL service
185
191
  */
186
192
 
187
193
  /**
@@ -189,7 +195,7 @@ module.exports = RouterManager;
189
195
  */
190
196
 
191
197
  /**
192
- * @typedef {Object} URLServiceFacade
198
+ * @typedef {Object} UrlService
193
199
  * @property {Function} getUrlForResource
194
200
  * @property {Function} ownsResource
195
201
  * @property {Function} resolveUrl
@@ -86,15 +86,6 @@ class BaseSiteMapGenerator {
86
86
  return sitemapXml;
87
87
  }
88
88
 
89
- updateURL(datum) {
90
- const url = this.nodeLookup[datum.id]?.url[0].loc;
91
-
92
- if (url) {
93
- this.removeUrl(url, datum);
94
- this.addUrl(url, datum);
95
- }
96
- }
97
-
98
89
  addUrl(url, datum) {
99
90
  // Computed once and threaded through: the three consumers below each
100
91
  // used to construct their own moment() from the same datum, which
@@ -110,14 +101,6 @@ class BaseSiteMapGenerator {
110
101
  }
111
102
  }
112
103
 
113
- removeUrl(url, datum) {
114
- this.removeFromLookups(datum);
115
-
116
- // force regeneration of xml
117
- this.siteMapContent.clear();
118
- this.lastModified = Date.now();
119
- }
120
-
121
104
  /**
122
105
  * @returns {moment.Moment}
123
106
  */
@@ -208,26 +191,16 @@ class BaseSiteMapGenerator {
208
191
  return content;
209
192
  }
210
193
 
211
- /**
212
- * @NOTE
213
- * The url service currently has no url update event.
214
- * It removes and adds the url. If the url service extends it's
215
- * feature set, we can detect if a node has changed.
216
- */
217
194
  updateLookups(datum, node, lastModified = this.getLastModifiedForDatum(datum)) {
218
195
  this.nodeLookup[datum.id] = node;
219
196
  this.nodeTimeLookup[datum.id] = lastModified;
220
197
  }
221
198
 
222
- removeFromLookups(datum) {
223
- delete this.nodeLookup[datum.id];
224
- delete this.nodeTimeLookup[datum.id];
225
- }
226
-
227
199
  reset() {
228
200
  this.nodeLookup = {};
229
201
  this.nodeTimeLookup = {};
230
202
  this.siteMapContent.clear();
203
+ this.lastModified = 0;
231
204
  }
232
205
  }
233
206
 
@@ -1,14 +1,12 @@
1
- const DomainEvents = require('@tryghost/domain-events');
2
1
  const errors = require('@tryghost/errors');
3
2
  const urlUtils = require('../../../shared/url-utils').default;
4
- const {URLResourceUpdatedEvent} = require('../../../shared/events');
5
3
  const IndexMapGenerator = require('./site-map-index-generator');
6
4
  const PagesMapGenerator = require('./page-map-generator');
7
5
  const PostsMapGenerator = require('./post-map-generator');
8
6
  const UsersMapGenerator = require('./user-map-generator');
9
7
  const TagsMapGenerator = require('./tags-map-generator');
10
8
 
11
- // Frontend-internal routing events (router.created / routers.reset)
9
+ // Frontend-internal routing domain events (RouteRegistered / RoutesReset)
12
10
  const routingEvents = require('../routing/events');
13
11
 
14
12
  // What the sitemap XML reads off each resource, beyond the columns URL
@@ -43,9 +41,9 @@ class SiteMapManager {
43
41
  this._urlService = options.urlService || null;
44
42
 
45
43
  // Server events arrive through the proxy's narrow subscription
46
- // surface (site.changed, url.added, url.removed). Injectable for
47
- // tests; resolved at construction (not module load) for the same
48
- // boot-order reason as the url service above.
44
+ // surface (site.changed). Injectable for tests; resolved at
45
+ // construction (not module load) for the same boot-order reason as
46
+ // the url service above.
49
47
  this._serverEvents = options.serverEvents || require('../proxy').serverEvents;
50
48
 
51
49
  // Index state for the build path. _indexEpoch increments on every
@@ -54,55 +52,34 @@ class SiteMapManager {
54
52
  this._indexBuilt = false;
55
53
  this._buildInFlight = null;
56
54
  this._indexEpoch = 0;
57
- // Static/collection route entries only arrive via router.created,
55
+ // Static/collection route entries only arrive via RouteRegistered,
58
56
  // which fires at boot and routes reload. They are recorded here so
59
57
  // every rebuild can replay them after resetting the generators.
60
58
  this._routerEntries = [];
61
59
 
62
- routingEvents.on('router.created', (router) => {
63
- if (router.name !== 'StaticRoutesRouter' && router.name !== 'CollectionRouter') {
60
+ routingEvents.on('RouteRegistered', ({path, type, id}) => {
61
+ if (type !== 'StaticRoutesRouter' && type !== 'CollectionRouter') {
64
62
  return;
65
63
  }
66
64
  const entry = {
67
- url: router.getRoute({absolute: true}),
68
- datum: {id: router.identifier, staticRoute: router.name === 'StaticRoutesRouter'}
65
+ url: urlUtils.createUrl(path, true),
66
+ datum: {id, staticRoute: type === 'StaticRoutesRouter'}
69
67
  };
70
68
  this._routerEntries.push(entry);
71
69
  this.pages.addUrl(entry.url, entry.datum);
72
70
  // A router registering after a build (routes reload re-registers
73
- // them one macrotask after routers.reset) must not leave a
71
+ // them one macrotask after RoutesReset) must not leave a
74
72
  // zero-router index marked built — the CDN would pin it.
75
- if (this._getUrlService().isLazy()) {
76
- this._invalidateIndex();
77
- }
73
+ this._invalidateIndex();
78
74
  });
79
75
 
80
- // Invalidation is lazy-mode only. Everywhere the eager service runs
81
- // (flag off AND compare mode) its per-URL feed below keeps the index
82
- // current after the initial build, exactly as before this change —
83
- // deploying is a no-op until the lazy flip. Pure lazy fires no
84
- // events, so there the index empties and the next read rebuilds.
76
+ // Nothing feeds the index per URL, so any change to the site's content
77
+ // empties it and the next read rebuilds.
85
78
  this._serverEvents.on('site.changed', () => {
86
- if (this._getUrlService().isLazy()) {
87
- this._invalidateIndex();
88
- }
79
+ this._invalidateIndex();
89
80
  });
90
81
 
91
- // The eager URL service's per-URL feed, active in both eager-only
92
- // and compare mode; under pure lazy these events never fire.
93
- DomainEvents.subscribe(URLResourceUpdatedEvent, (event) => {
94
- this[event.data.resourceType].updateURL(event.data);
95
- });
96
-
97
- this._serverEvents.on('url.added', (obj) => {
98
- this[obj.resource.config.type].addUrl(obj.url.absolute, obj.resource.data);
99
- });
100
-
101
- this._serverEvents.on('url.removed', (obj) => {
102
- this[obj.resource.config.type].removeUrl(obj.url.absolute, obj.resource.data);
103
- });
104
-
105
- routingEvents.on('routers.reset', () => {
82
+ routingEvents.on('RoutesReset', () => {
106
83
  this.pages && this.pages.reset();
107
84
  this.posts && this.posts.reset();
108
85
  this.users && this.users.reset();
@@ -110,9 +87,7 @@ class SiteMapManager {
110
87
  // The routers re-register right after a reset and refill the
111
88
  // list; keeping stale entries would resurrect deleted routes.
112
89
  this._routerEntries = [];
113
- if (this._getUrlService().isLazy()) {
114
- this._invalidateIndex();
115
- }
90
+ this._invalidateIndex();
116
91
  });
117
92
  }
118
93
 
@@ -156,20 +131,15 @@ class SiteMapManager {
156
131
 
157
132
  /**
158
133
  * Make sure the index is ready to serve; every XML read awaits this, so
159
- * no caller can render from an unbuilt index. The index is built once on
160
- * first read in every mode. Wherever the eager service runs (eager-only
161
- * and compare mode) the per-URL events keep it current from then on
162
- * (and heal any gap in the initial snapshot, since addUrl is id-keyed);
163
- * under pure lazy the invalidation signals empty it and the next read
164
- * rebuilds.
134
+ * no caller can render from an unbuilt index. The index is built on first
135
+ * read; the invalidation signals empty it and the next read rebuilds.
165
136
  *
166
137
  * Concurrent readers share one build. A build whose result was
167
138
  * invalidated while it ran is discarded and the read fails — the index
168
139
  * must never serve pre-invalidation data (the CDN would pin it for the
169
140
  * full cache maxAge), and a 503 is retried by crawlers and stored by
170
- * nobody. Unreachable with eager (nothing invalidates), and
171
- * deliberately no retry; if SITEMAP_BUILD_SUPERSEDED shows up in the
172
- * logs at any rate worth caring about, add one then.
141
+ * nobody. Deliberately no retry; if SITEMAP_BUILD_SUPERSEDED shows up in
142
+ * the logs at any rate worth caring about, add one then.
173
143
  */
174
144
  async _ensureIndexReady() {
175
145
  if (this._indexBuilt) {
@@ -231,12 +201,7 @@ class SiteMapManager {
231
201
  * Add a single resource to the index.
232
202
  */
233
203
  _applyResource(type, datum) {
234
- // skipComparison: teeing every bulk row through the compare machinery
235
- // would capture a stack and queue a background lazy computation per
236
- // resource, per build. Enumeration parity comes from the
237
- // getRoutableResources id-set comparison; per-URL parity from
238
- // organic request traffic.
239
- const url = this._getUrlService().getUrlForResource({...datum, type}, {absolute: true, skipComparison: true});
204
+ const url = this._getUrlService().getUrlForResource({...datum, type}, {absolute: true});
240
205
  // Exact match on the not-found sentinel: a real resource can carry
241
206
  // a slug like "404" (/tag/404/) and must stay in the sitemap.
242
207
  if (url && url !== this._notFoundUrl()) {
@@ -254,7 +219,7 @@ class SiteMapManager {
254
219
 
255
220
  _getUrlService() {
256
221
  if (!this._urlService) {
257
- this._urlService = require('../proxy').urlService.facade;
222
+ this._urlService = require('../proxy').urlService;
258
223
  }
259
224
  return this._urlService;
260
225
  }
@@ -5,9 +5,17 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.getBackupRouteSettingsFilePath = void 0;
7
7
  const path_1 = __importDefault(require("path"));
8
- const date_fns_1 = require("date-fns");
8
+ const pad = (value, length = 2) => String(value).padStart(length, '0');
9
+ const timestamp = (date) => [
10
+ pad(date.getFullYear(), 4),
11
+ pad(date.getMonth() + 1),
12
+ pad(date.getDate()),
13
+ pad(date.getHours()),
14
+ pad(date.getMinutes()),
15
+ pad(date.getSeconds())
16
+ ].join('-');
9
17
  const getBackupRouteSettingsFilePath = (filePath) => {
10
18
  const { dir, name, ext } = path_1.default.parse(filePath);
11
- return path_1.default.join(dir, `${name}-${(0, date_fns_1.format)(new Date(), 'yyyy-MM-dd-HH-mm-ss')}${ext}`);
19
+ return path_1.default.join(dir, `${name}-${timestamp(new Date())}${ext}`);
12
20
  };
13
21
  exports.getBackupRouteSettingsFilePath = getBackupRouteSettingsFilePath;
@@ -1,7 +1,17 @@
1
1
  import path from 'path';
2
- import {format} from 'date-fns';
2
+
3
+ const pad = (value: number, length = 2): string => String(value).padStart(length, '0');
4
+
5
+ const timestamp = (date: Date): string => [
6
+ pad(date.getFullYear(), 4),
7
+ pad(date.getMonth() + 1),
8
+ pad(date.getDate()),
9
+ pad(date.getHours()),
10
+ pad(date.getMinutes()),
11
+ pad(date.getSeconds())
12
+ ].join('-');
3
13
 
4
14
  export const getBackupRouteSettingsFilePath = (filePath: string): string => {
5
15
  const {dir, name, ext} = path.parse(filePath);
6
- return path.join(dir, `${name}-${format(new Date(), 'yyyy-MM-dd-HH-mm-ss')}${ext}`);
16
+ return path.join(dir, `${name}-${timestamp(new Date())}${ext}`);
7
17
  };