ghost 6.55.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 (483) 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-default-cards-10.3.3.tgz +0 -0
  6. package/components/tryghost-kg-default-nodes-2.1.4.tgz +0 -0
  7. package/components/tryghost-kg-default-transforms-1.3.3.tgz +0 -0
  8. package/components/tryghost-kg-html-to-lexical-1.3.3.tgz +0 -0
  9. package/components/tryghost-kg-lexical-html-renderer-1.4.3.tgz +0 -0
  10. package/components/tryghost-nql-string-0.0.0.tgz +0 -0
  11. package/components/tryghost-parse-email-address-0.0.0.tgz +0 -0
  12. package/core/app.js +1 -1
  13. package/core/boot.js +21 -25
  14. package/core/bridge.js +10 -12
  15. package/core/built/admin/assets/Combination-BDvCdg1t.js +41 -0
  16. package/core/built/admin/assets/{PolarAngleAxis-BGjf7sBu.js → PolarAngleAxis-C4qtHy1B.js} +1 -1
  17. package/core/built/admin/assets/{RadialBarChart-zeFf9mBz.js → RadialBarChart-Bh09Stsj.js} +1 -1
  18. package/core/built/admin/assets/about-C7O-AgRZ.js +1 -0
  19. package/core/built/admin/assets/{account-migration-sjHLx5dy.js → account-migration-Cv_ol1ko.js} +1 -1
  20. package/core/built/admin/assets/action-list-lGzZLHc8.js +1 -0
  21. package/core/built/admin/assets/activitypub/{account-migration-DoYXtnZ8.js → account-migration-DHFbePl6.js} +7 -7
  22. package/core/built/admin/assets/activitypub/activitypub.js +6 -6
  23. package/core/built/admin/assets/activitypub/{avatar-B3DEDB1l.js → avatar-CT4tS2_S.js} +2 -2
  24. package/core/built/admin/assets/activitypub/{avatar-flipboard-Cqrg0XMx.js → avatar-flipboard-ByYWKipo.js} +2 -2
  25. package/core/built/admin/assets/activitypub/{bluesky-sharing-Bxeh6MKW.js → bluesky-sharing-srVnSHDz.js} +16 -16
  26. package/core/built/admin/assets/activitypub/{content-formatters-BpQARh28.js → content-formatters-C2sos5Ht.js} +3 -3
  27. package/core/built/admin/assets/activitypub/{copy-D9UWIAan.js → copy-B1UBTOoZ.js} +2 -2
  28. package/core/built/admin/assets/activitypub/{dist-D8sFfdpC.js → dist-MPsb2WZ1.js} +12 -12
  29. package/core/built/admin/assets/activitypub/{domain-CWueFW6q.js → domain-DzcM9Dzo.js} +9 -9
  30. package/core/built/admin/assets/activitypub/{edit-profile-BGxPU7N5.js → edit-profile-CsQ_4xAk.js} +945 -945
  31. package/core/built/admin/assets/activitypub/{explore-DBK-u0Ch.js → explore-CJe0DZBK.js} +8 -8
  32. package/core/built/admin/assets/activitypub/{feed-Bcir5RQZ.js → feed-CKV3qWON.js} +33 -33
  33. package/core/built/admin/assets/activitypub/{field-BV-CIT3d.js → field-DckHfDJf.js} +3 -3
  34. package/core/built/admin/assets/activitypub/{hash-BC9Q0N4c.js → hash-Dlp8RM55.js} +2 -2
  35. package/core/built/admin/assets/activitypub/{inbox-DQ4ZnC1m.js → inbox-CsPy4R0M.js} +2 -2
  36. package/core/built/admin/assets/activitypub/{inbox-yC0nfvzl.js → inbox-DAsjzUUe.js} +85 -85
  37. package/core/built/admin/assets/activitypub/{label-DTRS9TDk.js → label-DWyo9E5T.js} +3 -3
  38. package/core/built/admin/assets/activitypub/layout-DM_3pqsU.js +1 -0
  39. package/core/built/admin/assets/activitypub/{moderation-Dwl9t0pb.js → moderation-B0Inc03M.js} +11 -11
  40. package/core/built/admin/assets/activitypub/{note-B-zKsZ7r.js → note-CSE54lER.js} +7 -7
  41. package/core/built/admin/assets/activitypub/{notifications-DjJZD54t.js → notifications-RSwbKqdh.js} +9 -9
  42. package/core/built/admin/assets/activitypub/{preferences-CoU8vs6d.js → preferences-CE231n2_.js} +20 -20
  43. package/core/built/admin/assets/activitypub/{profile-BAsaJekx.js → profile-aaQ1j1Eo.js} +237 -237
  44. package/core/built/admin/assets/activitypub/{reply-CpdMeAO5.js → reply-Cjb0Vs3m.js} +2 -2
  45. package/core/built/admin/assets/activitypub/{routes-CLH3OVTP.js → routes-Djb0mc9k.js} +1139 -1150
  46. package/core/built/admin/assets/activitypub/{separator-BI1FLsYM.js → separator-D8pROI5n.js} +3 -3
  47. package/core/built/admin/assets/activitypub/{settings-DA6pNJ-Q.js → settings-DMc32IQl.js} +13 -13
  48. package/core/built/admin/assets/activitypub/{site-CQD42Pw5.js → site-DVIcsohX.js} +81 -81
  49. package/core/built/admin/assets/activitypub/{step-1-DIDg4aHb.js → step-1-9Yey9usF.js} +5 -5
  50. package/core/built/admin/assets/activitypub/{step-2-BfGe8BYt.js → step-2-DdYmKRXV.js} +6 -6
  51. package/core/built/admin/assets/activitypub/{step-3-mE9spAqw.js → step-3-hdSkcjZU.js} +10 -10
  52. package/core/built/admin/assets/activitypub/{tabs-Cg0saow1.js → tabs-CUqseYzQ.js} +317 -315
  53. package/core/built/admin/assets/activitypub/{topic-filter-DLHBZT93.js → topic-filter-Coni6OXM.js} +3 -3
  54. package/core/built/admin/assets/activitypub/{use-activity-pub-queries-VzbN99u_.js → use-activity-pub-queries-MeHTPMQv.js} +2 -2
  55. package/core/built/admin/assets/activitypub/{use-navigate-with-base-path-CAwXTmqH.js → use-navigate-with-base-path-B046AM38.js} +115 -96
  56. package/core/built/admin/assets/activitypub/{use-reply-chain-data-Br4aOWOh.js → use-reply-chain-data-1AO-Xob6.js} +5 -5
  57. package/core/built/admin/assets/activitypub/{x-C8tAnXly.js → x-BRfRYd16.js} +2 -2
  58. package/core/built/admin/assets/add-integration-modal-m9Dv6f77.js +1 -0
  59. package/core/built/admin/assets/add-newsletter-modal-CPSVZL2H.js +1 -0
  60. package/core/built/admin/assets/add-recommendation-modal-Ci9Z5yat.js +1 -0
  61. package/core/built/admin/assets/analytics-DqSCVV8U.js +1 -0
  62. package/core/built/admin/assets/announcement-bar-modal-DU3avV7d.js +1 -0
  63. package/core/built/admin/assets/api-keys-BK0LylyK.js +1 -0
  64. package/core/built/admin/assets/api-keys-_iCT4dxr.js +1 -0
  65. package/core/built/admin/assets/{audience-DjEWNhp3.js → audience-DTJtXXWY.js} +1 -1
  66. package/core/built/admin/assets/automated-emails-PayPCT8L.js +1 -0
  67. package/core/built/admin/assets/{automations-DhKeS_U5.js → automations-162q5HjL.js} +1 -1
  68. package/core/built/admin/assets/{automations-Bx3VcFIL.js → automations-dtQ_MRZ7.js} +1 -1
  69. package/core/built/admin/assets/{bluesky-sharing-ClMd0-Ft.js → bluesky-sharing-B8Es3AuV.js} +1 -1
  70. package/core/built/admin/assets/{box-BWbhXh21.js → box-By_EgGtm.js} +1 -1
  71. package/core/built/admin/assets/brand-icon-09YqFZjV.js +1 -0
  72. package/core/built/admin/assets/{breadcrumb-BD0U2ygg.js → breadcrumb-tg5zL--z.js} +1 -1
  73. package/core/built/admin/assets/build-CsiH26uS.js +1 -0
  74. package/core/built/admin/assets/{card-DGoDJzrn.js → card-aUHX0hyR.js} +1 -1
  75. package/core/built/admin/assets/{chart-BuRT2Y6p.js → chart-BnXyfH11.js} +1 -1
  76. package/core/built/admin/assets/{chart-helpers-fjQKRVyY.js → chart-helpers-CZElTGYL.js} +1 -1
  77. package/core/built/admin/assets/checkbox-Cyo-x7mC.js +1 -0
  78. package/core/built/admin/assets/chunk.524.cd5498dd4e195f679266.js +25 -0
  79. package/core/built/admin/assets/chunk.582.6f92ec1f03734bf2ea3f.js +27 -0
  80. package/core/built/admin/assets/{chunk.481.6c7395a49484bb4583aa.js → chunk.873.b8fc05a8ab877fb819ed.js} +62 -60
  81. package/core/built/admin/assets/code-editor-view-Dq1rQ4tS.js +1 -0
  82. package/core/built/admin/assets/color-picker-field-BonBgxhU.js +1 -0
  83. package/core/built/admin/assets/color-utils-BsrwXuDz.js +1 -0
  84. package/core/built/admin/assets/combobox-uX5r_paI.js +1 -0
  85. package/core/built/admin/assets/command-DxwBO2pF.js +1 -0
  86. package/core/built/admin/assets/comments-Dn-RO-nU.js +1 -0
  87. package/core/built/admin/assets/components-CwL6a6As-B0E0-NBJ.js +1 -0
  88. package/core/built/admin/assets/confirmation-modal-B6D6mk6R.js +1 -0
  89. package/core/built/admin/assets/{container-BYz2Ed39.js → container-LiZf3XdY.js} +1 -1
  90. package/core/built/admin/assets/content-api-modal-BxQ-7T6u.js +1 -0
  91. package/core/built/admin/assets/copy-field-BAxL4Zqn.js +1 -0
  92. package/core/built/admin/assets/currency-Dy4Tc2R2.js +1 -0
  93. package/core/built/admin/assets/custom-integration-modal---d_l7lc.js +1 -0
  94. package/core/built/admin/assets/{data-list-16rkJYYi.js → data-list-CupF7bjM.js} +1 -1
  95. package/core/built/admin/assets/{date-range-select-BFp58EMk.js → date-range-select-PB2n1HZf.js} +1 -1
  96. package/core/built/admin/assets/debounce-Dg2fW5Rg.js +3 -0
  97. package/core/built/admin/assets/design-and-theme-modal-DYRT207a.js +23 -0
  98. package/core/built/admin/assets/dirty-confirm-dialog-BnDJ39ao.js +1 -0
  99. package/core/built/admin/assets/disabled-sources-indicator-iMHrkyV3.js +1 -0
  100. package/core/built/admin/assets/dist-B2PvRwLn.js +1 -0
  101. package/core/built/admin/assets/{dist-DGzPJ_bO.js → dist-Cb5RSHSg.js} +1 -1
  102. package/core/built/admin/assets/{dist-P_ohUlTi.js → dist-CqO2lWS02.js} +1 -1
  103. package/core/built/admin/assets/{dist-pHiOxyxa.js → dist-D5vhMdXf.js} +1 -1
  104. package/core/built/admin/assets/dist-DlCyLrOC.js +1 -0
  105. package/core/built/admin/assets/dist-WeOIvSYM.js +23 -0
  106. package/core/built/admin/assets/{dist-DyViJwIy.js → dist-cFzKLG7y.js} +3 -3
  107. package/core/built/admin/assets/dist-j1xxxnY8.js +1 -0
  108. package/core/built/admin/assets/dist-myQaY0ka.js +1 -0
  109. package/core/built/admin/assets/domain-BR8FIdjD.js +1 -0
  110. package/core/built/admin/assets/{dropzone-DlK-K2DQ.js → dropzone-hNxmUvwD.js} +1 -1
  111. package/core/built/admin/assets/{edit-profile-BKT-REJw.js → edit-profile-CENrkY0l.js} +1 -1
  112. package/core/built/admin/assets/editor-B18D0lm8.js +8 -0
  113. package/core/built/admin/assets/embed-signup-form-modal-BsCYUMvQ.js +9 -0
  114. package/core/built/admin/assets/{empty-indicator-oX1u1Pkn.js → empty-indicator-WB1WgT9h.js} +1 -1
  115. package/core/built/admin/assets/{explore-ClUpJZOp.js → explore-BmrnljWw.js} +1 -1
  116. package/core/built/admin/assets/{feed-DF92dUMP.js → feed-Dy4li6i8.js} +1 -1
  117. package/core/built/admin/assets/{field-Do7lieBA.js → field-Dh_lwk13.js} +1 -1
  118. package/core/built/admin/assets/filter-sources-D2zDuJH5.js +1 -0
  119. package/core/built/admin/assets/filters-3JBQcNtJ.js +1 -0
  120. package/core/built/admin/assets/filters-CFt_BDe4.js +1 -0
  121. package/core/built/admin/assets/first-promoter-modal-D6Rjxugw.js +1 -0
  122. package/core/built/admin/assets/format-url-C-t8G6Qd.js +1 -0
  123. package/core/built/admin/assets/{ghost-a9c788f6f0b1ea6cf0f14ca4b13f4496.css → ghost-d38c30b866e59f2e06a357b5eb844fe5.css} +1 -1
  124. package/core/built/admin/assets/{ghost-c4057474943effc568c5659ccc4909d7.js → ghost-d683fbeb945b13155ea669caa5d8db41.js} +420 -398
  125. package/core/built/admin/assets/{ghost-dark-db36d795d21c61426837df40af270966.css → ghost-dark-1bffd5099ba7a749303133efacf8480b.css} +1 -1
  126. package/core/built/admin/assets/{gift-link-modal-f9VIMNDv.js → gift-link-modal-zMtlJhLQ.js} +1 -1
  127. package/core/built/admin/assets/{gift-links-CsUhefWG.js → gift-links-CVuqLhsZ.js} +1 -1
  128. package/core/built/admin/assets/global-data-provider-B949LDXJ.js +1 -0
  129. package/core/built/admin/assets/grid-CUciBfjf.js +1 -0
  130. package/core/built/admin/assets/{growth-CVw1My4S.js → growth-C38Xtp8D.js} +2 -2
  131. package/core/built/admin/assets/{growth-B3I6gNLm.js → growth-CFws67_i.js} +1 -1
  132. package/core/built/admin/assets/history-modal-ILAOkbxH.js +1 -0
  133. package/core/built/admin/assets/{hooks-CixO01lL.js → hooks-D6EE7BIt.js} +2 -2
  134. package/core/built/admin/assets/html-field-9a9Id_2q.js +1 -0
  135. package/core/built/admin/assets/iframe-buffering-e8vH4-Qn.js +1 -0
  136. package/core/built/admin/assets/images-CrQKVc9Q.js +1 -0
  137. package/core/built/admin/assets/{inbox-CFBSu4Ed.js → inbox-BrSRzyvz.js} +6 -6
  138. package/core/built/admin/assets/index-BHy2DZX-.js +67 -0
  139. package/core/built/admin/assets/index-Ds2iUoF6.css +1 -0
  140. package/core/built/admin/assets/index.es-B9tvf-t4.js +1 -0
  141. package/core/built/admin/assets/{inline-EMAm3okk.js → inline-Cw-gigDW.js} +1 -1
  142. package/core/built/admin/assets/input-group-6vEPvX9S.js +1 -0
  143. package/core/built/admin/assets/{input-surface-BpAjZXY5.js → input-surface-BdOe4KzO.js} +1 -1
  144. package/core/built/admin/assets/integration-header-B4DyXV06.js +1 -0
  145. package/core/built/admin/assets/integrations-BT6_iJvu.js +1 -0
  146. package/core/built/admin/assets/invite-user-modal-5xDCEw90.js +1 -0
  147. package/core/built/admin/assets/isEmail-BOfC647y.js +1 -0
  148. package/core/built/admin/assets/koenig-editor-base-BWLEB9Vf.js +1 -0
  149. package/core/built/admin/assets/koenig-lexical/koenig-lexical.js +9535 -9527
  150. package/core/built/admin/assets/koenig-lexical/koenig-lexical.umd.js +124 -124
  151. package/core/built/admin/assets/{koenig-lexical-f8vHRYvz.js → koenig-lexical-Cj62r_y9.js} +86 -86
  152. package/core/built/admin/assets/{kpi-card-DSap9rAy.js → kpi-card-DOUnkZcN.js} +1 -1
  153. package/core/built/admin/assets/{kpi-card-DU0rn9Cj.js → kpi-card-IHDo8Q56.js} +1 -1
  154. package/core/built/admin/assets/{kpi-helpers-Dz33AV6h.js → kpi-helpers-CjUdECAK.js} +1 -1
  155. package/core/built/admin/assets/{kpi-tabs-BtTTrKvJ.js → kpi-tabs-X3DkOYbI.js} +1 -1
  156. package/core/built/admin/assets/{label-DS8Mi6G5.js → label-Dq6QaOuS.js} +1 -1
  157. package/core/built/admin/assets/label-picker-8YlhS2U3.js +1 -0
  158. package/core/built/admin/assets/labels-DAPjKPy2.js +1 -0
  159. package/core/built/admin/assets/layout-TMj4P-vv.js +1 -0
  160. package/core/built/admin/assets/limit-modal-BRPsit_B.js +1 -0
  161. package/core/built/admin/assets/link-helpers-Bzkk68GD.js +1 -0
  162. package/core/built/admin/assets/{list-page-B6ANtzkd.js → list-page-CdsnQR9N.js} +1 -1
  163. package/core/built/admin/assets/member-custom-fields-CmvsuuV_.js +1 -0
  164. package/core/built/admin/assets/member-detail-DCvRrkmJ.js +1 -0
  165. package/core/built/admin/assets/members-DxbSKngD.js +11 -0
  166. package/core/built/admin/assets/modal-page-BMTzFHVO.js +1 -0
  167. package/core/built/admin/assets/{moderation-DySbgyUS.js → moderation-Da5lhhWh.js} +1 -1
  168. package/core/built/admin/assets/multi-select-combobox-CYdkH7KQ.js +1 -0
  169. package/core/built/admin/assets/navigation-modal-BIoTwtMy.js +1 -0
  170. package/core/built/admin/assets/newsletter-BptlVoJm.js +1 -0
  171. package/core/built/admin/assets/newsletter-detail-modal-BIvxqE0N.js +1 -0
  172. package/core/built/admin/assets/newsletter-emails-Bf8IZLsP.js +1 -0
  173. package/core/built/admin/assets/newsletters-BgrIZk0V.js +1 -0
  174. package/core/built/admin/assets/{newsletters-BXJbJgA-.js → newsletters-Du0lzskS.js} +1 -1
  175. package/core/built/admin/assets/{note-C8kxrz6w.js → note-DYcLOmDb.js} +1 -1
  176. package/core/built/admin/assets/{notifications-CgtSfX7t.js → notifications-B2SPFIV9.js} +1 -1
  177. package/core/built/admin/assets/{offers-DEniVRD5.js → offers-Um6ab71O.js} +1 -1
  178. package/core/built/admin/assets/offers-container-modal-BZnZITMw.js +1 -0
  179. package/core/built/admin/assets/{onboarding-route-4qtziA9d.js → onboarding-route-DgdfxkQh.js} +1 -1
  180. package/core/built/admin/assets/overview-BYQJXSog.js +1 -0
  181. package/core/built/admin/assets/overview-Dt2_mR6U.js +1 -0
  182. package/core/built/admin/assets/{page-header-B3Wb9Jqv.js → page-header-CpmxJj5B.js} +1 -1
  183. package/core/built/admin/assets/{pages-B4goRPUn.js → pages-BVMnpI2O.js} +1 -1
  184. package/core/built/admin/assets/pintura-modal-B4MuBuuO.js +1 -0
  185. package/core/built/admin/assets/portal-frame-BF0NBIji.js +1 -0
  186. package/core/built/admin/assets/portal-modal-DMVbm0oy.js +1 -0
  187. package/core/built/admin/assets/{post-analytics-We-ko5Cb.js → post-analytics-CXWBOGyP.js} +1 -1
  188. package/core/built/admin/assets/post-analytics-header-ChzjXVPt.js +1 -0
  189. package/core/built/admin/assets/{post-analytics-provider-B6UynTGb.js → post-analytics-provider-Cgw4U_fw.js} +1 -1
  190. package/core/built/admin/assets/{post-share-modal-DFfO93_0.js → post-share-modal-B9Vmk_XM.js} +1 -1
  191. package/core/built/admin/assets/{posts-DhXE7b6r.js → posts-CxG7v0-M.js} +1 -1
  192. package/core/built/admin/assets/preferences-BfzJmnsd.js +5 -0
  193. package/core/built/admin/assets/preview-chrome-BOVO6_PE.js +1 -0
  194. package/core/built/admin/assets/preview-modal-Dw_HtD6S.js +1 -0
  195. package/core/built/admin/assets/profile-BT5vtv9b.js +1 -0
  196. package/core/built/admin/assets/radio-group-I7ou7PoJ.js +1 -0
  197. package/core/built/admin/assets/{referrers-pmJT4k3-.js → referrers-B9QDAfYm.js} +1 -1
  198. package/core/built/admin/assets/{router-provider-C1R4AZ2o.js → router-provider-DSQfprxH.js} +1 -1
  199. package/core/built/admin/assets/select-D9oU1IoM.js +1 -0
  200. package/core/built/admin/assets/settings-CfZFbyu_.js +4 -0
  201. package/core/built/admin/assets/{settings-WXNeWyU1.js → settings-CpvHWix7.js} +1 -1
  202. package/core/built/admin/assets/settings-breadcrumbs-K0USP2nw.js +1 -0
  203. package/core/built/admin/assets/{shade-app-B3heOAfz-CGXQwWeO.js → shade-app-B3heOAfz-BhQXxNkT.js} +1 -1
  204. package/core/built/admin/assets/{share-modal-DsgW3wbg.js → share-modal-ClIyPzc5.js} +1 -1
  205. package/core/built/admin/assets/slack-modal-1XXqOfiw.js +1 -0
  206. package/core/built/admin/assets/social-urls-CHQ9cTAK.js +1 -0
  207. package/core/built/admin/assets/{sort-button-Bb_FCl7e.js → sort-button-CdBsm40v.js} +1 -1
  208. package/core/built/admin/assets/{source-icon-BeaRxUn9.js → source-icon-CEYmVLXR.js} +1 -1
  209. package/core/built/admin/assets/{stack-xiN0eQ6Z.js → stack-CIfOAAVf.js} +1 -1
  210. package/core/built/admin/assets/{stats-Bjj_kmJ1.js → stats-D8nZCTy5.js} +1 -1
  211. package/core/built/admin/assets/{stats-view-BxPbW6K1.js → stats-view-CugFVf0g.js} +1 -1
  212. package/core/built/admin/assets/{step-1-B1e3-1F8.js → step-1-DOYjrORn.js} +1 -1
  213. package/core/built/admin/assets/{step-2-C5WaeBJo.js → step-2-vA6RsarH.js} +1 -1
  214. package/core/built/admin/assets/{step-3-B46iVPwu.js → step-3-BtIBxMId.js} +2 -2
  215. package/core/built/admin/assets/stripe-button-UFP4QRXd.js +1 -0
  216. package/core/built/admin/assets/stripe-connect-modal-C_L3uM6n.js +1 -0
  217. package/core/built/admin/assets/switch-CE2NuMn-.js +1 -0
  218. package/core/built/admin/assets/{table-CB-4_HBJ.js → table-TMCgCQK7.js} +1 -1
  219. package/core/built/admin/assets/tabs-Dd6oOKbv.js +1 -0
  220. package/core/built/admin/assets/tag-detail-D3l-UJPR.js +1 -0
  221. package/core/built/admin/assets/tags-BwCgmr5v.js +1 -0
  222. package/core/built/admin/assets/tags-WdKQGWR8.js +1 -0
  223. package/core/built/admin/assets/testimonials-modal-CqWp-xXJ.js +1 -0
  224. package/core/built/admin/assets/{text-DwtjwGkh.js → text-DU9Hv33_.js} +1 -1
  225. package/core/built/admin/assets/textarea-d9qEkMOP.js +1 -0
  226. package/core/built/admin/assets/tier-detail-modal-BkcR2u0A.js +1 -0
  227. package/core/built/admin/assets/{tiers-DYsa4DCo.js → tiers-Da6kxHQP.js} +1 -1
  228. package/core/built/admin/assets/toggle-group-Guorw93z.js +1 -0
  229. package/core/built/admin/assets/{topic-filter-DAFT87tQ.js → topic-filter-CbgoWIHn.js} +1 -1
  230. package/core/built/admin/assets/transistor-modal-DuNnnpal.js +1 -0
  231. package/core/built/admin/assets/unsplash-modal-y2bVwTHH.js +1 -0
  232. package/core/built/admin/assets/{use-analytics-data-S0FTd43s.js → use-analytics-data-B-b4wNSC.js} +1 -1
  233. package/core/built/admin/assets/use-check-theme-limit-error-m09J38Mq.js +2 -0
  234. package/core/built/admin/assets/use-feature-flag-ud0Qz8vt.js +1 -0
  235. package/core/built/admin/assets/{use-filter-params-Gpoq2E1L.js → use-filter-params-BnbBDc7T.js} +1 -1
  236. package/core/built/admin/assets/use-filterable-api-iMpDZBxD.js +1 -0
  237. package/core/built/admin/assets/use-form-vRjI0Kwk.js +1 -0
  238. package/core/built/admin/assets/{use-growth-stats-CIaiHOVb.js → use-growth-stats-DPU5rt3W.js} +1 -1
  239. package/core/built/admin/assets/use-hash-link-navigation-guard-B9j6HIrV.js +1 -0
  240. package/core/built/admin/assets/use-limiter-BkN3E4gw.js +2 -0
  241. package/core/built/admin/assets/use-pintura-config-C_z8HTG2.js +1 -0
  242. package/core/built/admin/assets/use-pintura-editor-DNgbkhGp.js +1 -0
  243. package/core/built/admin/assets/{use-post-referrers-Cq2vBPrA.js → use-post-referrers-C2mXyrp-.js} +1 -1
  244. package/core/built/admin/assets/use-query-params-DHhhu8wi.js +1 -0
  245. package/core/built/admin/assets/{use-reply-chain-data-DBDRtGu-.js → use-reply-chain-data-DaK8q2qQ.js} +1 -1
  246. package/core/built/admin/assets/use-setting-group-YlYcoNyP.js +1 -0
  247. package/core/built/admin/assets/use-settings-navigation-Bf1g1rEh.js +1 -0
  248. package/core/built/admin/assets/{use-simple-pagination-CjYNxdwe.js → use-simple-pagination-D9ckKo5-.js} +1 -1
  249. package/core/built/admin/assets/{use-tinybird-query-falHAtuK.js → use-tinybird-query-GSa32hVw.js} +1 -1
  250. package/core/built/admin/assets/{use-tinybird-token-D7-8ND1y.js → use-tinybird-token-CKLOZFsw.js} +1 -1
  251. package/core/built/admin/assets/use-url-input-z-p0Kewm.js +5 -0
  252. package/core/built/admin/assets/user-detail-modal-BMxOA4Sv.js +1 -0
  253. package/core/built/admin/assets/{users-Dkv8NQZe.js → users-B6hIds6n.js} +1 -1
  254. package/core/built/admin/assets/validator-Cr0sMKuW.js +7 -0
  255. package/core/built/admin/assets/{virtual-list-CvnC9zF2.js → virtual-list-RHeEL05L.js} +1 -1
  256. package/core/built/admin/assets/{web-jFYWCKDn.js → web-Bw2QMO5u.js} +2 -2
  257. package/core/built/admin/assets/web-xJtcwMy4.js +1 -0
  258. package/core/built/admin/assets/zapier-modal-BP2f4-vY.js +1 -0
  259. package/core/built/admin/index.html +20 -18
  260. package/core/frontend/helpers/authors.js +1 -1
  261. package/core/frontend/helpers/link.js +3 -8
  262. package/core/frontend/helpers/tags.js +1 -1
  263. package/core/frontend/meta/author-url.js +2 -2
  264. package/core/frontend/meta/url.js +4 -4
  265. package/core/frontend/services/data/fetch-data.js +10 -5
  266. package/core/frontend/services/proxy.js +1 -1
  267. package/core/frontend/services/routing/api-adapter.js +115 -0
  268. package/core/frontend/services/routing/api-adapter.ts +157 -0
  269. package/core/frontend/services/routing/collection-router.js +5 -3
  270. package/core/frontend/services/routing/controllers/index.js +1 -1
  271. package/core/frontend/services/routing/controllers/rss.js +26 -31
  272. package/core/frontend/services/routing/controllers/rss.ts +66 -0
  273. package/core/frontend/services/routing/controllers/static.js +8 -7
  274. package/core/frontend/services/routing/events.js +20 -6
  275. package/core/frontend/services/routing/parent-router.js +17 -4
  276. package/core/frontend/services/routing/permalink-adapter.js +13 -0
  277. package/core/frontend/services/routing/permalink-adapter.ts +10 -0
  278. package/core/frontend/services/routing/registry.js +59 -33
  279. package/core/frontend/services/routing/router-manager.js +24 -22
  280. package/core/frontend/services/routing/static-routes-router.js +4 -4
  281. package/core/frontend/services/routing/taxonomy-router.js +6 -2
  282. package/core/frontend/services/sitemap/base-site-map-generator.js +1 -28
  283. package/core/frontend/services/sitemap/site-map-manager.js +22 -57
  284. package/core/server/adapters/route-settings/utils.js +10 -2
  285. package/core/server/adapters/route-settings/utils.ts +12 -2
  286. package/core/server/api/endpoints/email-post.js +1 -1
  287. package/core/server/api/endpoints/previews.js +1 -1
  288. package/core/server/api/endpoints/search-index-public.js +3 -3
  289. package/core/server/api/endpoints/search-index.js +4 -4
  290. package/core/server/api/endpoints/utils/serializers/input/authors.js +2 -2
  291. package/core/server/api/endpoints/utils/serializers/input/comments.js +1 -1
  292. package/core/server/api/endpoints/utils/serializers/input/pages.js +3 -3
  293. package/core/server/api/endpoints/utils/serializers/input/posts.js +3 -3
  294. package/core/server/api/endpoints/utils/serializers/input/tags.js +1 -1
  295. package/core/server/api/endpoints/utils/serializers/input/users.js +2 -2
  296. package/core/server/api/endpoints/utils/serializers/input/utils/url.js +31 -13
  297. package/core/server/api/endpoints/utils/serializers/output/mappers/posts.js +2 -2
  298. package/core/server/api/endpoints/utils/serializers/output/mappers/tags.js +2 -2
  299. package/core/server/api/endpoints/utils/serializers/output/mappers/users.js +8 -0
  300. package/core/server/api/endpoints/utils/serializers/output/utils/url.js +18 -11
  301. package/core/server/data/migrations/versions/6.56/2026-08-03-19-27-51-add-automation-run-step-id-to-automated-email-recipients.js +8 -0
  302. package/core/server/data/migrations/versions/6.56/2026-08-04-14-42-39-restrict-notification-add-permission-to-administrators.js +12 -0
  303. package/core/server/data/migrations/versions/6.57/2026-08-04-18-00-00-store-custom-field-values-as-leaf-rows.js +74 -0
  304. package/core/server/data/migrations/versions/6.57/2026-08-04-18-54-14-reset-automation-email-analytics.js +25 -0
  305. package/core/server/data/schema/commands.js +21 -5
  306. package/core/server/data/schema/fixtures/fixtures.json +2 -2
  307. package/core/server/data/schema/schema.js +25 -5
  308. package/core/server/lib/common/to-plain.ts +1 -1
  309. package/core/server/models/post.js +12 -3
  310. package/core/server/services/adapter-manager/adapter-manager.js +1 -45
  311. package/core/server/services/adapter-manager/adapter-manager.ts +2 -48
  312. package/core/server/services/adapter-manager/adapter-paths.js +24 -0
  313. package/core/server/services/adapter-manager/adapter-paths.ts +21 -0
  314. package/core/server/services/adapter-manager/base-classes.js +22 -0
  315. package/core/server/services/adapter-manager/base-classes.ts +22 -0
  316. package/core/server/services/adapter-manager/index.js +4 -27
  317. package/core/server/services/adapter-manager/index.ts +4 -31
  318. package/core/server/services/adapter-manager/utils.js +50 -0
  319. package/core/server/services/adapter-manager/utils.ts +57 -0
  320. package/core/server/services/audience-feedback/audience-feedback-controller.js +1 -1
  321. package/core/server/services/audience-feedback/audience-feedback-service.js +2 -2
  322. package/core/server/services/automations/automations-repository.ts +3 -1
  323. package/core/server/services/automations/database-automations-repository.js +33 -14
  324. package/core/server/services/automations/database-automations-repository.ts +41 -15
  325. package/core/server/services/automations/get-scheduler-idempotency-key.js +13 -0
  326. package/core/server/services/automations/get-scheduler-idempotency-key.ts +8 -0
  327. package/core/server/services/automations/poll.js +3 -1
  328. package/core/server/services/automations/poll.ts +4 -1
  329. package/core/server/services/automations/service.js +7 -3
  330. package/core/server/services/automations/service.ts +7 -3
  331. package/core/server/services/comments/comments-service-emails.js +1 -1
  332. package/core/server/services/comments/comments-service.js +1 -1
  333. package/core/server/services/email-analytics/email-analytics-service-wrapper.js +11 -2
  334. package/core/server/services/email-analytics/email-analytics-service.js +1 -1
  335. package/core/server/services/email-service/email-service-wrapper.js +2 -1
  336. package/core/server/services/email-service/mailgun-email-provider.js +15 -0
  337. package/core/server/services/gift-links/CONTEXT.md +9 -0
  338. package/core/server/services/gifts/CONTEXT.md +55 -0
  339. package/core/server/services/gifts/README.md +28 -0
  340. package/core/server/services/gifts/gift-bookshelf-repository.js +65 -45
  341. package/core/server/services/gifts/gift-bookshelf-repository.ts +203 -74
  342. package/core/server/services/gifts/gift-checkout-adapter.js +59 -0
  343. package/core/server/services/gifts/gift-checkout-offer.js +74 -0
  344. package/core/server/services/gifts/gift-checkout-offer.ts +127 -0
  345. package/core/server/services/gifts/gift-codec.js +63 -0
  346. package/core/server/services/gifts/gift-codec.ts +62 -0
  347. package/core/server/services/gifts/gift-controller.js +6 -31
  348. package/core/server/services/gifts/gift-controller.ts +6 -69
  349. package/core/server/services/gifts/gift-email-service.ts +3 -2
  350. package/core/server/services/gifts/gift-schema.js +34 -0
  351. package/core/server/services/gifts/gift-schema.ts +39 -0
  352. package/core/server/services/gifts/gift-service-wrapper.js +13 -11
  353. package/core/server/services/gifts/gift-service.js +265 -52
  354. package/core/server/services/gifts/gift-service.ts +431 -97
  355. package/core/server/services/gifts/gift.ts +16 -39
  356. package/core/server/services/indexnow-ping/indexnow-ping-service.js +1 -1
  357. package/core/server/services/indexnow-ping/indexnow-ping-service.ts +2 -4
  358. package/core/server/services/lib/mailgun-client.js +3 -3
  359. package/core/server/services/link-tracking/link-click-repository.js +6 -1
  360. package/core/server/services/link-tracking/link-click-tracking-service.js +12 -3
  361. package/core/server/services/media-inliner/external-media-inliner.js +12 -8
  362. package/core/server/services/member-attribution/url-translator.js +5 -7
  363. package/core/server/services/member-welcome-emails/member-welcome-email-renderer.js +4 -3
  364. package/core/server/services/member-welcome-emails/service.js +79 -15
  365. package/core/server/services/members/api.js +2 -3
  366. package/core/server/services/members/import-export/import/completion-email.js +8 -4
  367. package/core/server/services/members/import-export/import/completion-email.ts +9 -4
  368. package/core/server/services/members/import-export/import/importer.js +25 -4
  369. package/core/server/services/members/import-export/import/importer.ts +27 -6
  370. package/core/server/services/members/import-export/import/row.ts +5 -1
  371. package/core/server/services/members/import-export/index.js +6 -2
  372. package/core/server/services/members/import-export/index.ts +10 -4
  373. package/core/server/services/members/members-api/controllers/router-controller.js +38 -36
  374. package/core/server/services/members/members-api/members-api.js +13 -7
  375. package/core/server/services/members/members-api/repositories/event-repository.js +4 -94
  376. package/core/server/services/members/members-api/services/member-bread-service.js +3 -3
  377. package/core/server/services/members/members-api/services/payments-service.js +6 -68
  378. package/core/server/services/members-custom-fields/queries.js +4 -13
  379. package/core/server/services/members-custom-fields/queries.ts +4 -13
  380. package/core/server/services/members-custom-fields/schema.js +19 -21
  381. package/core/server/services/members-custom-fields/schema.ts +18 -20
  382. package/core/server/services/members-custom-fields/storage.js +94 -27
  383. package/core/server/services/members-custom-fields/storage.ts +114 -39
  384. package/core/server/services/members-custom-fields/values-service.js +98 -103
  385. package/core/server/services/members-custom-fields/values-service.ts +116 -114
  386. package/core/server/services/mentions/resource-service.js +1 -1
  387. package/core/server/services/mentions/service.js +2 -2
  388. package/core/server/services/oembed/oembed-service.js +44 -3
  389. package/core/server/services/posts/posts-service.js +11 -0
  390. package/core/server/services/route-settings/dynamic-routing-service.js +10 -62
  391. package/core/server/services/route-settings/route-settings-parser.js +25 -25
  392. package/core/server/services/route-settings/route-settings-parser.ts +27 -27
  393. package/core/server/services/route-settings/validation-errors.js +68 -4
  394. package/core/server/services/route-settings/validation-errors.ts +79 -4
  395. package/core/server/services/slack-ping/slack-ping-service.js +2 -2
  396. package/core/server/services/slack-ping/slack-ping-service.ts +3 -5
  397. package/core/server/services/stats/content-stats-service.js +3 -3
  398. package/core/server/services/stats/posts-stats-service.js +29 -25
  399. package/core/server/services/stripe/services/webhook/charge-refunded-event-service.js +1 -1
  400. package/core/server/services/stripe/services/webhook/checkout-session-event-service.js +16 -4
  401. package/core/server/services/stripe/stripe-api.js +10 -0
  402. package/core/server/services/url/config.js +90 -135
  403. package/core/server/services/url/index.js +6 -49
  404. package/core/server/services/url/lazy-find-resource.js +14 -11
  405. package/core/server/services/url/lazy-find-resource.ts +14 -11
  406. package/core/server/services/url/lazy-url-service.js +174 -94
  407. package/core/server/services/url/lazy-url-service.ts +233 -97
  408. package/core/server/services/url/routable-resources.js +62 -71
  409. package/core/server/services/url/router-filter.js +12 -4
  410. package/core/server/services/url/router-filter.ts +12 -4
  411. package/core/server/services/webhooks/index.js +1 -1
  412. package/core/server/services/webhooks/serialize.js +2 -1
  413. package/core/server/web/gift-preview/controller.js +10 -25
  414. package/core/shared/config/env/config.testing-mysql.json +1 -2
  415. package/core/shared/config/env/config.testing.json +1 -2
  416. package/core/shared/events/index.js +1 -2
  417. package/core/shared/labs.js +4 -4
  418. package/package.json +10 -10
  419. package/pnpm-lock.yaml +27 -20
  420. package/pnpm-workspace.yaml +3 -2
  421. package/tsconfig.json +1 -0
  422. package/components/tryghost-kg-default-nodes-2.1.3.tgz +0 -0
  423. package/core/built/admin/assets/Combination-CJG7Flp-.js +0 -41
  424. package/core/built/admin/assets/activitypub/layout-qx-bUL1k.js +0 -1
  425. package/core/built/admin/assets/automated-emails-DRy7qY-J.js +0 -7
  426. package/core/built/admin/assets/checkbox-CWa28lgO.js +0 -1
  427. package/core/built/admin/assets/chunk.524.cffd399783a519e404a9.js +0 -25
  428. package/core/built/admin/assets/chunk.582.eebf0d0b2d202bb746a5.js +0 -27
  429. package/core/built/admin/assets/code-editor-view-CCr0rBWS.js +0 -1
  430. package/core/built/admin/assets/comments-DyUSMUdj.js +0 -1
  431. package/core/built/admin/assets/disabled-sources-indicator-CUxMfiPa.js +0 -1
  432. package/core/built/admin/assets/dist-2Tnz2Yfq.js +0 -1
  433. package/core/built/admin/assets/dist-CjY-f5Z1.js +0 -1
  434. package/core/built/admin/assets/dist-DDY6GRVz.js +0 -1
  435. package/core/built/admin/assets/dist-DG78yroX.js +0 -23
  436. package/core/built/admin/assets/domain-C0bV2UV8.js +0 -1
  437. package/core/built/admin/assets/editor-Dp865O-4.js +0 -8
  438. package/core/built/admin/assets/esm-CFX93H5M.js +0 -2
  439. package/core/built/admin/assets/filter-sources-BV2rnpfA.js +0 -1
  440. package/core/built/admin/assets/filters-CUXJ2Nm9.js +0 -1
  441. package/core/built/admin/assets/filters-DfbIWc_l.js +0 -1
  442. package/core/built/admin/assets/index-9Cw8z3rA.css +0 -1
  443. package/core/built/admin/assets/index-BGG7NckO.js +0 -67
  444. package/core/built/admin/assets/input-group-BSgG_lVw.js +0 -1
  445. package/core/built/admin/assets/label-picker-1DvSuLA1.js +0 -1
  446. package/core/built/admin/assets/labels-CDSUt4J_.js +0 -1
  447. package/core/built/admin/assets/layout-yQEi2qDM.js +0 -1
  448. package/core/built/admin/assets/link-helpers-7EYqvvHs.js +0 -1
  449. package/core/built/admin/assets/member-custom-fields-yOMHyAg9.js +0 -1
  450. package/core/built/admin/assets/member-detail-BAq7gDaa.js +0 -1
  451. package/core/built/admin/assets/members-CQpVFJu4.js +0 -10
  452. package/core/built/admin/assets/modals-ReORvWnu.js +0 -31
  453. package/core/built/admin/assets/newsletter-CJQvtHqN.js +0 -1
  454. package/core/built/admin/assets/newsletters-B3QQXfGT.js +0 -1
  455. package/core/built/admin/assets/nql-BsgFMd93.js +0 -1
  456. package/core/built/admin/assets/overview-Bf2sbznq.js +0 -1
  457. package/core/built/admin/assets/overview-CBfePxcr.js +0 -1
  458. package/core/built/admin/assets/post-analytics-header-Bmc9su6q.js +0 -1
  459. package/core/built/admin/assets/preferences-DJPfHEGu.js +0 -5
  460. package/core/built/admin/assets/profile-DqBQp-gT.js +0 -1
  461. package/core/built/admin/assets/select-C5_xEt5b.js +0 -1
  462. package/core/built/admin/assets/settings-BwiVIXau.js +0 -4
  463. package/core/built/admin/assets/social-urls-BQPFEk1_.js +0 -8
  464. package/core/built/admin/assets/switch-z5Y6Uzt6.js +0 -1
  465. package/core/built/admin/assets/tabs-CCEgKYzq.js +0 -1
  466. package/core/built/admin/assets/tags-Cg2VJGmG.js +0 -1
  467. package/core/built/admin/assets/textarea-Bjccvh_E.js +0 -1
  468. package/core/built/admin/assets/toggle-group-b3IlxvhV.js +0 -1
  469. package/core/built/admin/assets/web-B_5GZRvH.js +0 -1
  470. package/core/server/services/gifts/gift-repository.js +0 -2
  471. package/core/server/services/gifts/gift-repository.ts +0 -29
  472. package/core/server/services/route-settings/activation-bridge.js +0 -174
  473. package/core/server/services/route-settings/activation-bridge.ts +0 -250
  474. package/core/server/services/url/local-file-cache.js +0 -75
  475. package/core/server/services/url/queue.js +0 -260
  476. package/core/server/services/url/resource.js +0 -102
  477. package/core/server/services/url/resources.js +0 -480
  478. package/core/server/services/url/url-generator.js +0 -276
  479. package/core/server/services/url/url-service-facade.js +0 -366
  480. package/core/server/services/url/url-service-facade.ts +0 -519
  481. package/core/server/services/url/url-service.js +0 -387
  482. package/core/server/services/url/urls.js +0 -140
  483. package/core/shared/events/url-resource-updated-event.js +0 -33
@@ -1,22 +1,21 @@
1
1
  const errors = require('@tryghost/errors');
2
2
 
3
3
  /**
4
- * Enumerates the routable resources of a type: the rows the lazy URL service
5
- * would produce a URL for. This is the lazy counterpart of the eager
6
- * service's boot walk — same raw-knex fast path, same public-visibility
7
- * gates — computed on demand instead of held in memory.
4
+ * Enumerates the routable resources of a type: the rows the URL service would
5
+ * produce a URL for. Computed on demand rather than held in memory.
8
6
  *
9
- * Callers name the extra columns they want back; everything else stays out
10
- * of memory. The columns URL computation needs (permalink fields, filter
11
- * columns, relations) come from the lazy service itself, so rows are never
12
- * thin for the active routing config.
7
+ * Callers name the extra columns they want back; everything else stays out of
8
+ * memory. The columns URL computation itself needs (permalink fields, filter
9
+ * columns, relations) are passed in by the URL service, which is the source of
10
+ * truth for what the active routing config reads — so rows are never thin for
11
+ * it.
13
12
  */
14
13
 
15
14
  // Which rows of each type are routable. visibility:public alone is not
16
15
  // enough for tags and authors: without the has-posts join, empty tags and
17
16
  // staff user accounts would be routable/listable.
18
17
  const TYPE_CONFIG = {
19
- posts: {modelName: 'Post', table: 'posts', filter: 'status:published+type:post'},
18
+ posts: {modelName: 'Post', table: 'posts', filter: 'status:published+type:post', canCarryRelations: true},
20
19
  pages: {modelName: 'Post', table: 'posts', filter: 'status:published+type:page'},
21
20
  tags: {
22
21
  modelName: 'Tag',
@@ -37,80 +36,72 @@ const RELATION_FIELDS = {
37
36
  authors: ['users.id', 'users.slug']
38
37
  };
39
38
 
40
- // Keeps each SQLite query under the bound-variable limit (#5810) — the same
41
- // strategy as the eager boot walk (services/url/resources.js).
39
+ // Keeps each SQLite query under the bound-variable limit (#5810).
42
40
  const SQLITE_BATCH_SIZE = 999;
43
41
 
44
42
  /**
45
- * @param {Object} deps
46
- * @param {Object} deps.lazyUrlService - source of truth for the columns and
47
- * relations the active routing config reads
48
- * @returns {(type: string, options?: {columns?: string[]}) => Promise<Object[]>}
43
+ * @param {string} type
44
+ * @param {Object} [options]
45
+ * @param {string[]} [options.columns] - extra columns the caller wants back
46
+ * @param {string[]} [options.requiredFields] - columns URL computation reads
47
+ * @param {string[]} [options.requiredRelations] - relations URL computation
48
+ * reads; ignored for types that carry none
49
+ * @returns {Promise<Object[]>}
49
50
  */
50
- function createFetchRoutableResources({lazyUrlService}) {
51
- if (!lazyUrlService) {
51
+ async function fetchRoutableResources(type, {columns = [], requiredFields = [], requiredRelations = []} = {}) {
52
+ const typeConfig = TYPE_CONFIG[type];
53
+ if (!typeConfig) {
52
54
  throw new errors.IncorrectUsageError({
53
- message: 'fetchRoutableResources requires a lazy URL service backend'
55
+ message: `Unknown routable resource type: ${type}`
54
56
  });
55
57
  }
56
58
 
57
- return async function fetchRoutableResources(type, {columns = []} = {}) {
58
- const typeConfig = TYPE_CONFIG[type];
59
- if (!typeConfig) {
60
- throw new errors.IncorrectUsageError({
61
- message: `Unknown routable resource type: ${type}`
62
- });
63
- }
64
-
65
- // Lazy requires: the model layer must not load before boot wires it.
66
- const models = require('../../models');
67
- const schema = require('../../data/schema');
68
- const DatabaseInfo = require('@tryghost/database-info');
59
+ // Required here rather than at the top so this module can be loaded
60
+ // for its shape without pulling in the model layer.
61
+ const models = require('../../models');
62
+ const schema = require('../../data/schema');
63
+ const DatabaseInfo = require('@tryghost/database-info');
69
64
 
70
- // Callers speak include; raw_knex only speaks exclude, so translate
71
- // against the table schema here, once.
72
- const include = new Set(['id', ...columns, ...lazyUrlService.getRequiredFields(type)]);
73
- const options = {
74
- modelName: typeConfig.modelName,
75
- filter: typeConfig.filter,
76
- exclude: Object.keys(schema.tables[typeConfig.table]).filter(column => !include.has(column))
77
- };
78
- if (typeConfig.shouldHavePosts) {
79
- options.shouldHavePosts = typeConfig.shouldHavePosts;
80
- }
65
+ // Callers speak include; raw_knex only speaks exclude, so translate
66
+ // against the table schema here, once.
67
+ const include = new Set(['id', ...columns, ...requiredFields]);
68
+ const options = {
69
+ modelName: typeConfig.modelName,
70
+ filter: typeConfig.filter,
71
+ exclude: Object.keys(schema.tables[typeConfig.table]).filter(column => !include.has(column))
72
+ };
73
+ if (typeConfig.shouldHavePosts) {
74
+ options.shouldHavePosts = typeConfig.shouldHavePosts;
75
+ }
81
76
 
82
- // Relations only when the active routing config reads them (e.g.
83
- // /:primary_tag/:slug/ permalinks, tag-filtered collections). Pages
84
- // never carry relations, mirroring the eager resource config.
85
- if (type === 'posts') {
86
- const relations = lazyUrlService.getRequiredRelations();
87
- if (relations.length) {
88
- options.withRelated = relations;
89
- options.withRelatedFields = {};
90
- for (const relation of relations) {
91
- options.withRelatedFields[relation] = RELATION_FIELDS[relation];
92
- }
93
- }
77
+ // Relations only when the active routing config reads them (e.g.
78
+ // /:primary_tag/:slug/ permalinks, tag-filtered collections), and only for
79
+ // the types that have any see canCarryRelations above.
80
+ if (typeConfig.canCarryRelations && requiredRelations.length) {
81
+ options.withRelated = requiredRelations;
82
+ options.withRelatedFields = {};
83
+ for (const relation of requiredRelations) {
84
+ options.withRelatedFields[relation] = RELATION_FIELDS[relation];
94
85
  }
86
+ }
95
87
 
96
- let rows;
97
- if (!DatabaseInfo.isSQLite(models.Base.knex)) {
98
- rows = await models.Base.Model.raw_knex.fetchAll(options);
99
- } else {
100
- rows = [];
101
- let offset = 0;
102
- let batch;
103
- do {
104
- // orderBy makes the pagination deterministic; without it the
105
- // row order between batches is unspecified.
106
- batch = await models.Base.Model.raw_knex.fetchAll({...options, orderBy: 'id', offset, limit: SQLITE_BATCH_SIZE});
107
- rows.push(...batch);
108
- offset += SQLITE_BATCH_SIZE;
109
- } while (batch.length);
110
- }
88
+ let rows;
89
+ if (!DatabaseInfo.isSQLite(models.Base.knex)) {
90
+ rows = await models.Base.Model.raw_knex.fetchAll(options);
91
+ } else {
92
+ rows = [];
93
+ let offset = 0;
94
+ let batch;
95
+ do {
96
+ // orderBy makes the pagination deterministic; without it the
97
+ // row order between batches is unspecified.
98
+ batch = await models.Base.Model.raw_knex.fetchAll({...options, orderBy: 'id', offset, limit: SQLITE_BATCH_SIZE});
99
+ rows.push(...batch);
100
+ offset += SQLITE_BATCH_SIZE;
101
+ } while (batch.length);
102
+ }
111
103
 
112
- return rows;
113
- };
104
+ return rows;
114
105
  }
115
106
 
116
- module.exports = {createFetchRoutableResources};
107
+ module.exports = {fetchRoutableResources};
@@ -6,8 +6,9 @@ exports.buildFilter = buildFilter;
6
6
  exports.filterMatches = filterMatches;
7
7
  const nql = require('@tryghost/nql');
8
8
  const logging = require('@tryghost/logging');
9
- // A deliberate copy of the eager UrlGenerator's NQL semantics: while both
10
- // services run side by side, eager is the parity oracle and must stay separate.
9
+ // NQL evaluation for routes.yaml collection filters, kept in one place so the
10
+ // forward lookup, ownership check and reverse lookup all decide membership the
11
+ // same way.
11
12
  exports.EXPANSIONS = [
12
13
  { key: 'author', replacement: 'authors.slug' },
13
14
  { key: 'tags', replacement: 'tags.slug' },
@@ -46,8 +47,15 @@ function buildFilter(filter) {
46
47
  }
47
48
  return nql(filter, { expansions: exports.EXPANSIONS, transformer: PAGE_TRANSFORMER });
48
49
  }
49
- // A null filter always matches; a filter that throws is a non-match, not an
50
- // error, mirroring the eager generator's try/catch.
50
+ // A null filter always matches; anything that throws is a non-match, not an
51
+ // error.
52
+ //
53
+ // That covers malformed filters as well as odd records, because NQL parses
54
+ // lazily: `buildFilter` returns happily for a filter like `((`, and the parse
55
+ // error surfaces here on the first `queryJSON`. So this catch is the only
56
+ // thing standing between a bad routes.yaml filter and a site that cannot
57
+ // route — do not narrow it on the assumption that compilation already
58
+ // failed somewhere upstream. Pinned in router-filter.test.js.
51
59
  function filterMatches(compiledFilter, record) {
52
60
  if (!compiledFilter) {
53
61
  return true;
@@ -1,8 +1,9 @@
1
1
  const nql = require('@tryghost/nql');
2
2
  const logging = require('@tryghost/logging');
3
3
 
4
- // A deliberate copy of the eager UrlGenerator's NQL semantics: while both
5
- // services run side by side, eager is the parity oracle and must stay separate.
4
+ // NQL evaluation for routes.yaml collection filters, kept in one place so the
5
+ // forward lookup, ownership check and reverse lookup all decide membership the
6
+ // same way.
6
7
  export const EXPANSIONS = [
7
8
  {key: 'author', replacement: 'authors.slug'},
8
9
  {key: 'tags', replacement: 'tags.slug'},
@@ -50,8 +51,15 @@ export function buildFilter(filter: string | null | undefined): CompiledFilter |
50
51
  return nql(filter, {expansions: EXPANSIONS, transformer: PAGE_TRANSFORMER});
51
52
  }
52
53
 
53
- // A null filter always matches; a filter that throws is a non-match, not an
54
- // error, mirroring the eager generator's try/catch.
54
+ // A null filter always matches; anything that throws is a non-match, not an
55
+ // error.
56
+ //
57
+ // That covers malformed filters as well as odd records, because NQL parses
58
+ // lazily: `buildFilter` returns happily for a filter like `((`, and the parse
59
+ // error surfaces here on the first `queryJSON`. So this catch is the only
60
+ // thing standing between a bad routes.yaml filter and a site that cannot
61
+ // route — do not narrow it on the assumption that compilation already
62
+ // failed somewhere upstream. Pinned in router-filter.test.js.
55
63
  export function filterMatches(compiledFilter: CompiledFilter | null, record: Record<string, unknown>): boolean {
56
64
  if (!compiledFilter) {
57
65
  return true;
@@ -7,7 +7,7 @@ module.exports = {
7
7
  const models = require('../../models');
8
8
  const limitService = require('../../services/limits');
9
9
  const events = require('../../lib/common/events');
10
- const urlService = require('../url').facade;
10
+ const urlService = require('../url');
11
11
  const createSerialize = require('./serialize');
12
12
  const createPayload = require('./payload');
13
13
  const WebhookTrigger = require('./webhook-trigger');
@@ -3,7 +3,8 @@
3
3
  // routing an under-loaded post 404s. Ask the URL service which relations it
4
4
  // needs and load only the ones missing — reloading a relation the event
5
5
  // already carries (e.g. authors) would strip its nested roles from the
6
- // payload. Returns [] under eager routing, which resolves URLs by id.
6
+ // payload. `getRequiredRelations()` is [] when the routing config reads
7
+ // none, so this is a no-op on a default routes.yaml.
7
8
  const loadRequiredUrlRelations = async (model, urlService) => {
8
9
  const required = urlService.getRequiredRelations();
9
10
  const missing = required.filter(relation => !model.relations[relation]);
@@ -39,7 +39,6 @@ function escapeHtml(str) {
39
39
 
40
40
  async function giftPreview(req, res) {
41
41
  const giftService = require('../../services/gifts').service;
42
- const tiersService = require('../../services/tiers');
43
42
  const urlUtils = require('../../../shared/url-utils').default;
44
43
  const settingsCache = require('../../../shared/settings-cache');
45
44
 
@@ -48,21 +47,14 @@ async function giftPreview(req, res) {
48
47
  const {token} = req.params;
49
48
  const siteTitle = settingsCache.get('title') || 'Ghost';
50
49
 
51
- let gift;
52
- let tier;
50
+ let preview;
53
51
 
54
52
  try {
55
- gift = await giftService.getByToken(token);
53
+ preview = await giftService.getPreview(token);
56
54
 
57
- if (!gift) {
55
+ if (!preview) {
58
56
  throw new errors.NotFoundError({message: `Gift not found for token`});
59
57
  }
60
-
61
- tier = await tiersService.api.read(gift.tierId);
62
-
63
- if (!tier) {
64
- throw new errors.NotFoundError({message: `Tier not found for gift: ${gift.id}`});
65
- }
66
58
  } catch (err) {
67
59
  logging.warn(`Gift preview: failed to load required gift data, redirecting to homepage`, err);
68
60
 
@@ -70,9 +62,9 @@ async function giftPreview(req, res) {
70
62
  }
71
63
 
72
64
  const ogTitle = getOgTitle({
73
- cadence: gift.cadence,
74
- duration: gift.duration,
75
- tierName: tier.name,
65
+ cadence: preview.cadence,
66
+ duration: preview.duration,
67
+ tierName: preview.tier.name,
76
68
  siteTitle
77
69
  });
78
70
  const ogDescription = t('Open this link to redeem your gift.');
@@ -120,33 +112,26 @@ async function giftPreview(req, res) {
120
112
  async function giftPreviewImage(req, res) {
121
113
  const giftService = require('../../services/gifts').service;
122
114
  const settingsCache = require('../../../shared/settings-cache');
123
- const tiersService = require('../../services/tiers');
124
115
 
125
116
  const accentColor = settingsCache.get('accent_color') || '#15171A';
126
117
  const siteTitle = settingsCache.get('title') || 'Ghost';
127
118
  const {token} = req.params;
128
119
 
129
120
  try {
130
- const gift = await giftService.getByToken(token);
121
+ const preview = await giftService.getPreview(token);
131
122
 
132
- if (!gift) {
123
+ if (!preview) {
133
124
  throw new errors.NotFoundError({message: `Gift not found for token`});
134
125
  }
135
126
 
136
- const tier = await tiersService.api.read(gift.tierId);
137
-
138
- if (!tier) {
139
- throw new errors.NotFoundError({message: `Tier not found for gift: ${gift.id}`});
140
- }
141
-
142
127
  const png = await generateGiftPreviewImage({
143
128
  accentColor,
144
129
  siteTitle,
145
130
  tierLabel: t('{tierName} membership', {
146
- tierName: tier.name,
131
+ tierName: preview.tier.name,
147
132
  interpolation: {escapeValue: false}
148
133
  }),
149
- cadenceLabel: getCadenceLabel(gift.cadence, gift.duration)
134
+ cadenceLabel: getCadenceLabel(preview.cadence, preview.duration)
150
135
  });
151
136
 
152
137
  res.set('Content-Type', 'image/png');
@@ -115,7 +115,6 @@
115
115
  "useMinFiles": false,
116
116
  "paths": {
117
117
  "fixtures": "test/utils/fixtures/fixtures",
118
- "defaultSettings": "test/utils/fixtures/default-settings.json",
119
- "urlCache": "test/utils/fixtures/urls"
118
+ "defaultSettings": "test/utils/fixtures/default-settings.json"
120
119
  }
121
120
  }
@@ -111,7 +111,6 @@
111
111
  "useMinFiles": false,
112
112
  "paths": {
113
113
  "fixtures": "test/utils/fixtures/fixtures",
114
- "defaultSettings": "test/utils/fixtures/default-settings.json",
115
- "urlCache": "test/utils/fixtures/urls"
114
+ "defaultSettings": "test/utils/fixtures/default-settings.json"
116
115
  }
117
116
  }
@@ -12,6 +12,5 @@ module.exports = {
12
12
  OfferRedemptionEvent: require('./offer-redemption-event'),
13
13
  SubscriptionActivatedEvent: require('./subscription-activated-event'),
14
14
  SubscriptionCancelledEvent: require('./subscription-cancelled-event'),
15
- SubscriptionCreatedEvent: require('./subscription-created-event'),
16
- URLResourceUpdatedEvent: require('./url-resource-updated-event')
15
+ SubscriptionCreatedEvent: require('./subscription-created-event')
17
16
  };
@@ -27,6 +27,7 @@ const messages = {
27
27
 
28
28
  // flags in this list always return `true`, allows quick global enable prior to full flag removal
29
29
  const GA_FEATURES = [
30
+ 'automationAnalytics',
30
31
  'customFonts',
31
32
  'explore',
32
33
  'commentsThreads',
@@ -48,11 +49,9 @@ const PUBLIC_BETA_FEATURES = [
48
49
  // Which is only visible if the developer experiments flag is enabled
49
50
  const PRIVATE_FEATURES = [
50
51
  'automations',
51
- 'automationAnalytics',
52
52
  'stripeAutomaticTax',
53
53
  'importMemberTier',
54
54
  'csvContentImporter',
55
- 'urlCache',
56
55
  'lexicalIndicators',
57
56
  'adminUIRefresh',
58
57
  'emailCustomization',
@@ -64,8 +63,9 @@ const PRIVATE_FEATURES = [
64
63
  'getHelperDeduplication',
65
64
  'memberDetailsReact',
66
65
  'membersCustomFields',
67
- 'previewByTier',
68
- 'paywallImprovements'
66
+ 'paywallImprovements',
67
+ 'giftSubCustomization',
68
+ 'tagDetailsReact'
69
69
  ];
70
70
 
71
71
  module.exports.GA_KEYS = [...GA_FEATURES];
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ghost",
3
- "version": "6.55.0",
3
+ "version": "6.57.0",
4
4
  "description": "The professional publishing platform",
5
5
  "author": "Ghost Foundation",
6
6
  "homepage": "https://ghost.org",
@@ -111,7 +111,6 @@
111
111
  "countries-and-timezones": "3.9.0",
112
112
  "csso": "5.0.5",
113
113
  "csv-writer": "1.6.0",
114
- "date-fns": "2.30.0",
115
114
  "dequal": "2.0.3",
116
115
  "dompurify": "3.4.11",
117
116
  "downsize-cjs": "1.1.2",
@@ -193,21 +192,22 @@
193
192
  "xml": "1.0.1",
194
193
  "zod": "4.4.3",
195
194
  "@tryghost/adapter-base-cache": "file:components/tryghost-adapter-base-cache-0.2.0.tgz",
195
+ "@tryghost/adapter-base-redirects": "file:components/tryghost-adapter-base-redirects-0.0.0.tgz",
196
196
  "@tryghost/adapter-base-route-settings": "file:components/tryghost-adapter-base-route-settings-0.0.0.tgz",
197
- "@tryghost/admin-api-schema": "file:components/tryghost-admin-api-schema-0.0.0.tgz",
198
197
  "@tryghost/adapter-base-scheduling": "file:components/tryghost-adapter-base-scheduling-0.2.0.tgz",
199
198
  "@tryghost/adapter-base-sso": "file:components/tryghost-adapter-base-sso-0.1.1.tgz",
199
+ "@tryghost/admin-api-schema": "file:components/tryghost-admin-api-schema-0.0.0.tgz",
200
200
  "@tryghost/custom-field-types": "file:components/tryghost-custom-field-types-0.0.0.tgz",
201
- "@tryghost/kg-card-factory": "file:components/tryghost-kg-card-factory-5.2.3.tgz",
202
201
  "@tryghost/i18n": "file:components/tryghost-i18n-0.0.0.tgz",
203
- "@tryghost/kg-default-cards": "file:components/tryghost-kg-default-cards-10.3.3.tgz",
204
- "@tryghost/kg-default-nodes": "file:components/tryghost-kg-default-nodes-2.1.3.tgz",
205
- "@tryghost/kg-html-to-lexical": "file:components/tryghost-kg-html-to-lexical-1.3.3.tgz",
202
+ "@tryghost/kg-card-factory": "file:components/tryghost-kg-card-factory-5.2.3.tgz",
206
203
  "@tryghost/kg-converters": "file:components/tryghost-kg-converters-1.2.3.tgz",
207
- "@tryghost/parse-email-address": "file:components/tryghost-parse-email-address-0.0.0.tgz",
204
+ "@tryghost/kg-default-nodes": "file:components/tryghost-kg-default-nodes-2.1.4.tgz",
205
+ "@tryghost/kg-html-to-lexical": "file:components/tryghost-kg-html-to-lexical-1.3.3.tgz",
208
206
  "@tryghost/kg-lexical-html-renderer": "file:components/tryghost-kg-lexical-html-renderer-1.4.3.tgz",
209
- "ghost-storage-base": "file:components/ghost-storage-base-3.0.0.tgz",
210
- "@tryghost/adapter-base-redirects": "file:components/tryghost-adapter-base-redirects-0.0.0.tgz"
207
+ "@tryghost/kg-default-cards": "file:components/tryghost-kg-default-cards-10.3.3.tgz",
208
+ "@tryghost/nql-string": "file:components/tryghost-nql-string-0.0.0.tgz",
209
+ "@tryghost/parse-email-address": "file:components/tryghost-parse-email-address-0.0.0.tgz",
210
+ "ghost-storage-base": "file:components/ghost-storage-base-3.0.0.tgz"
211
211
  },
212
212
  "optionalDependencies": {
213
213
  "better-sqlite3": "12.11.1"
package/pnpm-lock.yaml CHANGED
@@ -69,13 +69,14 @@ overrides:
69
69
  '@tryghost/admin-api-schema': file:components/tryghost-admin-api-schema-0.0.0.tgz
70
70
  '@tryghost/kg-converters': file:components/tryghost-kg-converters-1.2.3.tgz
71
71
  '@tryghost/kg-utils': file:components/tryghost-kg-utils-1.1.3.tgz
72
- '@tryghost/parse-email-address': file:components/tryghost-parse-email-address-0.0.0.tgz
72
+ '@tryghost/nql-string': file:components/tryghost-nql-string-0.0.0.tgz
73
73
  '@tryghost/kg-clean-basic-html': file:components/tryghost-kg-clean-basic-html-4.3.3.tgz
74
+ '@tryghost/parse-email-address': file:components/tryghost-parse-email-address-0.0.0.tgz
74
75
  ghost-storage-base: file:components/ghost-storage-base-3.0.0.tgz
75
76
  '@tryghost/i18n': file:components/tryghost-i18n-0.0.0.tgz
76
77
  '@tryghost/kg-markdown-html-renderer': file:components/tryghost-kg-markdown-html-renderer-7.2.3.tgz
77
78
  '@tryghost/kg-default-cards': file:components/tryghost-kg-default-cards-10.3.3.tgz
78
- '@tryghost/kg-default-nodes': file:components/tryghost-kg-default-nodes-2.1.3.tgz
79
+ '@tryghost/kg-default-nodes': file:components/tryghost-kg-default-nodes-2.1.4.tgz
79
80
  '@tryghost/kg-default-transforms': file:components/tryghost-kg-default-transforms-1.3.3.tgz
80
81
  '@tryghost/kg-html-to-lexical': file:components/tryghost-kg-html-to-lexical-1.3.3.tgz
81
82
  '@tryghost/kg-lexical-html-renderer': file:components/tryghost-kg-lexical-html-renderer-1.4.3.tgz
@@ -183,8 +184,8 @@ importers:
183
184
  specifier: file:components/tryghost-kg-default-cards-10.3.3.tgz
184
185
  version: file:components/tryghost-kg-default-cards-10.3.3.tgz(encoding@0.1.13)
185
186
  '@tryghost/kg-default-nodes':
186
- specifier: file:components/tryghost-kg-default-nodes-2.1.3.tgz
187
- version: file:components/tryghost-kg-default-nodes-2.1.3.tgz(@noble/hashes@1.8.0)
187
+ specifier: file:components/tryghost-kg-default-nodes-2.1.4.tgz
188
+ version: file:components/tryghost-kg-default-nodes-2.1.4.tgz(@noble/hashes@1.8.0)
188
189
  '@tryghost/kg-html-to-lexical':
189
190
  specifier: file:components/tryghost-kg-html-to-lexical-1.3.3.tgz
190
191
  version: file:components/tryghost-kg-html-to-lexical-1.3.3.tgz(@lexical/selection@0.13.1(lexical@0.13.1))(@lexical/utils@0.13.1(lexical@0.13.1))(@noble/hashes@1.8.0)
@@ -221,6 +222,9 @@ importers:
221
222
  '@tryghost/nql-lang':
222
223
  specifier: 0.6.6
223
224
  version: 0.6.6
225
+ '@tryghost/nql-string':
226
+ specifier: file:components/tryghost-nql-string-0.0.0.tgz
227
+ version: file:components/tryghost-nql-string-0.0.0.tgz
224
228
  '@tryghost/parse-email-address':
225
229
  specifier: file:components/tryghost-parse-email-address-0.0.0.tgz
226
230
  version: file:components/tryghost-parse-email-address-0.0.0.tgz
@@ -323,9 +327,6 @@ importers:
323
327
  csv-writer:
324
328
  specifier: 1.6.0
325
329
  version: 1.6.0
326
- date-fns:
327
- specifier: 2.30.0
328
- version: 2.30.0
329
330
  dequal:
330
331
  specifier: 2.0.3
331
332
  version: 2.0.3
@@ -1368,7 +1369,7 @@ packages:
1368
1369
  resolution: {integrity: sha512-fTAJPbBEOQgb7K2XXt3M9YDpfLrLPpbg/FrNZBOWoz6g4T/jtqPE11EnPVvIan/8dhgjC3uORcCh9kF/JuOmnA==}
1369
1370
 
1370
1371
  '@tryghost/custom-field-types@file:components/tryghost-custom-field-types-0.0.0.tgz':
1371
- resolution: {integrity: sha512-Z1RfgHxTh0EQ3St3p6Z0ufaPROgcmNzEDAWTdOUIxbOF3gXtEQ2nqd3UgdEhKWYmeuzo3bI+Hf8wnlhobKM2Qw==, tarball: file:components/tryghost-custom-field-types-0.0.0.tgz}
1372
+ resolution: {integrity: sha512-mwqygO5ERA/MWya3qxsNiJiGJ2Sg/n63m/M1RbgCc7/qlLEgCJ6Z2sMCBSEPwZyY6koo7CMV5gmQm2/ZAXrGmg==, tarball: file:components/tryghost-custom-field-types-0.0.0.tgz}
1372
1373
  version: 0.0.0
1373
1374
 
1374
1375
  '@tryghost/custom-fonts@1.0.11':
@@ -1444,25 +1445,25 @@ packages:
1444
1445
  version: 1.2.3
1445
1446
 
1446
1447
  '@tryghost/kg-default-cards@file:components/tryghost-kg-default-cards-10.3.3.tgz':
1447
- resolution: {integrity: sha512-QPaG7PMlmpISGhCJgVMwaJz7vOgLW8iGdg2gzGwBLoWasmwo1zEkxKwGSLynqP1OMeHYnKVMF2+lzGzJbOLeGA==, tarball: file:components/tryghost-kg-default-cards-10.3.3.tgz}
1448
+ resolution: {integrity: sha512-K+k2It8l+o0bOSjAtReoEn2Ki1Ze6xADEt16uIwGEzOLCyfTla5jyaCXsIAh2fKpNiJUAUgTe13tNY/icbkmpg==, tarball: file:components/tryghost-kg-default-cards-10.3.3.tgz}
1448
1449
  version: 10.3.3
1449
1450
  engines: {node: ^22.13.1 || ^24.0.0}
1450
1451
 
1451
- '@tryghost/kg-default-nodes@file:components/tryghost-kg-default-nodes-2.1.3.tgz':
1452
- resolution: {integrity: sha512-4Hb1cQf1olvNiPIVRTrL5OvEiyg5d+S5Uio/joYL7tPH6iLuMn2bTjGpvbVapShuFu/fwAx1myJu/tC9vZt+Ig==, tarball: file:components/tryghost-kg-default-nodes-2.1.3.tgz}
1453
- version: 2.1.3
1452
+ '@tryghost/kg-default-nodes@file:components/tryghost-kg-default-nodes-2.1.4.tgz':
1453
+ resolution: {integrity: sha512-d6hwQiz3oumlEHLhVx/FQpUXXl8eNpSFEkLlb7YgODM6J5uUp0b3fLFVoU1xXBALjBplEFHb4Gn5YSKh6zEUAQ==, tarball: file:components/tryghost-kg-default-nodes-2.1.4.tgz}
1454
+ version: 2.1.4
1454
1455
  engines: {node: ^22.13.1 || ^24.0.0}
1455
1456
 
1456
1457
  '@tryghost/kg-default-transforms@file:components/tryghost-kg-default-transforms-1.3.3.tgz':
1457
- resolution: {integrity: sha512-LYu87pokySxbqoWRq2SY8SaGknTBsScLy1DDSp6+c6NXNOWUkRi4/XdV4hG49qvAKQQVohJIepbBwgFsvVusWA==, tarball: file:components/tryghost-kg-default-transforms-1.3.3.tgz}
1458
+ resolution: {integrity: sha512-1XkdffnYETy7ZXvHCdmyr/trM/wtUoju29FSF8PNKj65/YVdlb56BSdl38C6MD5TsYxAfjULe1BMn/OgEskhXQ==, tarball: file:components/tryghost-kg-default-transforms-1.3.3.tgz}
1458
1459
  version: 1.3.3
1459
1460
 
1460
1461
  '@tryghost/kg-html-to-lexical@file:components/tryghost-kg-html-to-lexical-1.3.3.tgz':
1461
- resolution: {integrity: sha512-r9wGwPDxJ2CUbZc+SsoBBUs7FnNiL6FHWU3UKlPxiuLHeBXXcpUEE5BdCMcvTGUwPo/T0zmhUtbp6rCBLw7D6Q==, tarball: file:components/tryghost-kg-html-to-lexical-1.3.3.tgz}
1462
+ resolution: {integrity: sha512-8EZDDKw1exkG//DFkViUx5Dxb63nodvJHfhjhbS6gYxNHy6ca6ZRtpvS6Tx9xlCQ/L5yN0EjWuBx7JegFcy1sw==, tarball: file:components/tryghost-kg-html-to-lexical-1.3.3.tgz}
1462
1463
  version: 1.3.3
1463
1464
 
1464
1465
  '@tryghost/kg-lexical-html-renderer@file:components/tryghost-kg-lexical-html-renderer-1.4.3.tgz':
1465
- resolution: {integrity: sha512-u0UR00P2v2D98i7+MelmkxRtxfi3P3IcGrxbAUm/ijqn8iWhwQ8ikPO4wnRBvShed33xgXoSzeAYL6K8hfO0UA==, tarball: file:components/tryghost-kg-lexical-html-renderer-1.4.3.tgz}
1466
+ resolution: {integrity: sha512-QMgE1jlVmCexwVVp2lQqwTWOfHxryfvKKVNdj0SRBQV3mAtOKx1NOix4Cy4MXuV1PzTZ2//PeYYvJkj+myaOMg==, tarball: file:components/tryghost-kg-lexical-html-renderer-1.4.3.tgz}
1466
1467
  version: 1.4.3
1467
1468
 
1468
1469
  '@tryghost/kg-markdown-html-renderer@file:components/tryghost-kg-markdown-html-renderer-7.2.3.tgz':
@@ -1501,11 +1502,15 @@ packages:
1501
1502
  '@tryghost/nql-lang@0.6.6':
1502
1503
  resolution: {integrity: sha512-ZWEUN92fVnxavf+matwASvi7pom0i1jhAtNCuoCN9f3ShtyrVm92m1SfvY+x/XuEvbefXAzCGzSEMcaQ4cqoXw==}
1503
1504
 
1505
+ '@tryghost/nql-string@file:components/tryghost-nql-string-0.0.0.tgz':
1506
+ resolution: {integrity: sha512-sbvE9JUjBRUHOOMMLQj9X+a2QjdCDbL6T9+/j07XA2mFSIi9kHNMcvTxP5KkxB07ANRYvSzLsxicFQFis2wu0w==, tarball: file:components/tryghost-nql-string-0.0.0.tgz}
1507
+ version: 0.0.0
1508
+
1504
1509
  '@tryghost/nql@0.13.1':
1505
1510
  resolution: {integrity: sha512-TQRDur1miWd2ORa3XOhtw8Na8AUj/8h+epNMDgiutOyAH/RTw+d+ksLndMnm/Z9MhnKg7kFy7398peKZ7nF8bQ==}
1506
1511
 
1507
1512
  '@tryghost/parse-email-address@file:components/tryghost-parse-email-address-0.0.0.tgz':
1508
- resolution: {integrity: sha512-h1A3EInCVS4Q8+8UlPPn+0SoQ3jO6nGHACyABniU45KCbp5e47R2c24RnZakOrH57IOGn+McSifAQBTuLNGewg==, tarball: file:components/tryghost-parse-email-address-0.0.0.tgz}
1513
+ resolution: {integrity: sha512-xJlGV8ZjkKuk3f5wfCEAgAojlC9s7HtsD7rNSUJkj/H4yj3PMgWQcVlI29WgqgN8ue6iXuTpSh7zWWSgZfA5gA==, tarball: file:components/tryghost-parse-email-address-0.0.0.tgz}
1509
1514
  version: 0.0.0
1510
1515
 
1511
1516
  '@tryghost/pretty-cli@3.3.1':
@@ -6490,7 +6495,7 @@ snapshots:
6490
6495
  transitivePeerDependencies:
6491
6496
  - encoding
6492
6497
 
6493
- '@tryghost/kg-default-nodes@file:components/tryghost-kg-default-nodes-2.1.3.tgz(@noble/hashes@1.8.0)':
6498
+ '@tryghost/kg-default-nodes@file:components/tryghost-kg-default-nodes-2.1.4.tgz(@noble/hashes@1.8.0)':
6494
6499
  dependencies:
6495
6500
  '@lexical/clipboard': 0.13.1(lexical@0.13.1)
6496
6501
  '@lexical/rich-text': 0.13.1(@lexical/clipboard@0.13.1(lexical@0.13.1))(@lexical/selection@0.13.1(lexical@0.13.1))(@lexical/utils@0.13.1(lexical@0.13.1))(lexical@0.13.1)
@@ -6515,7 +6520,7 @@ snapshots:
6515
6520
  '@lexical/list': 0.13.1(lexical@0.13.1)
6516
6521
  '@lexical/rich-text': 0.13.1(@lexical/clipboard@0.13.1(lexical@0.13.1))(@lexical/selection@0.13.1(lexical@0.13.1))(@lexical/utils@0.13.1(lexical@0.13.1))(lexical@0.13.1)
6517
6522
  '@lexical/utils': 0.13.1(lexical@0.13.1)
6518
- '@tryghost/kg-default-nodes': file:components/tryghost-kg-default-nodes-2.1.3.tgz(@noble/hashes@1.8.0)
6523
+ '@tryghost/kg-default-nodes': file:components/tryghost-kg-default-nodes-2.1.4.tgz(@noble/hashes@1.8.0)
6519
6524
  lexical: 0.13.1
6520
6525
  transitivePeerDependencies:
6521
6526
  - '@lexical/clipboard'
@@ -6531,7 +6536,7 @@ snapshots:
6531
6536
  '@lexical/link': 0.13.1(lexical@0.13.1)
6532
6537
  '@lexical/list': 0.13.1(lexical@0.13.1)
6533
6538
  '@lexical/rich-text': 0.13.1(@lexical/clipboard@0.13.1(lexical@0.13.1))(@lexical/selection@0.13.1(lexical@0.13.1))(@lexical/utils@0.13.1(lexical@0.13.1))(lexical@0.13.1)
6534
- '@tryghost/kg-default-nodes': file:components/tryghost-kg-default-nodes-2.1.3.tgz(@noble/hashes@1.8.0)
6539
+ '@tryghost/kg-default-nodes': file:components/tryghost-kg-default-nodes-2.1.4.tgz(@noble/hashes@1.8.0)
6535
6540
  '@tryghost/kg-default-transforms': file:components/tryghost-kg-default-transforms-1.3.3.tgz(@lexical/clipboard@0.13.1(lexical@0.13.1))(@lexical/selection@0.13.1(lexical@0.13.1))(@noble/hashes@1.8.0)
6536
6541
  jsdom: 29.1.1(@noble/hashes@1.8.0)
6537
6542
  lexical: 0.13.1
@@ -6548,7 +6553,7 @@ snapshots:
6548
6553
  '@lexical/link': 0.13.1(lexical@0.13.1)
6549
6554
  '@lexical/list': 0.13.1(lexical@0.13.1)
6550
6555
  '@lexical/rich-text': 0.13.1(@lexical/clipboard@0.13.1(lexical@0.13.1))(@lexical/selection@0.13.1(lexical@0.13.1))(@lexical/utils@0.13.1(lexical@0.13.1))(lexical@0.13.1)
6551
- '@tryghost/kg-default-nodes': file:components/tryghost-kg-default-nodes-2.1.3.tgz(@noble/hashes@1.8.0)
6556
+ '@tryghost/kg-default-nodes': file:components/tryghost-kg-default-nodes-2.1.4.tgz(@noble/hashes@1.8.0)
6552
6557
  '@tryghost/kg-default-transforms': file:components/tryghost-kg-default-transforms-1.3.3.tgz(@lexical/clipboard@0.13.1(lexical@0.13.1))(@lexical/selection@0.13.1(lexical@0.13.1))(@noble/hashes@1.8.0)
6553
6558
  '@tryghost/kg-utils': file:components/tryghost-kg-utils-1.1.3.tgz
6554
6559
  jsdom: 29.1.1(@noble/hashes@1.8.0)
@@ -6699,6 +6704,8 @@ snapshots:
6699
6704
  dependencies:
6700
6705
  date-fns: 2.30.0
6701
6706
 
6707
+ '@tryghost/nql-string@file:components/tryghost-nql-string-0.0.0.tgz': {}
6708
+
6702
6709
  '@tryghost/nql@0.13.1(supports-color@10.2.2)':
6703
6710
  dependencies:
6704
6711
  '@tryghost/mongo-knex': 0.10.1(supports-color@10.2.2)
@@ -230,13 +230,14 @@ overrides:
230
230
  '@tryghost/admin-api-schema': file:components/tryghost-admin-api-schema-0.0.0.tgz
231
231
  '@tryghost/kg-converters': file:components/tryghost-kg-converters-1.2.3.tgz
232
232
  '@tryghost/kg-utils': file:components/tryghost-kg-utils-1.1.3.tgz
233
- '@tryghost/parse-email-address': file:components/tryghost-parse-email-address-0.0.0.tgz
233
+ '@tryghost/nql-string': file:components/tryghost-nql-string-0.0.0.tgz
234
234
  '@tryghost/kg-clean-basic-html': file:components/tryghost-kg-clean-basic-html-4.3.3.tgz
235
+ '@tryghost/parse-email-address': file:components/tryghost-parse-email-address-0.0.0.tgz
235
236
  ghost-storage-base: file:components/ghost-storage-base-3.0.0.tgz
236
237
  '@tryghost/i18n': file:components/tryghost-i18n-0.0.0.tgz
237
238
  '@tryghost/kg-markdown-html-renderer': file:components/tryghost-kg-markdown-html-renderer-7.2.3.tgz
238
239
  '@tryghost/kg-default-cards': file:components/tryghost-kg-default-cards-10.3.3.tgz
239
- '@tryghost/kg-default-nodes': file:components/tryghost-kg-default-nodes-2.1.3.tgz
240
+ '@tryghost/kg-default-nodes': file:components/tryghost-kg-default-nodes-2.1.4.tgz
240
241
  '@tryghost/kg-default-transforms': file:components/tryghost-kg-default-transforms-1.3.3.tgz
241
242
  '@tryghost/kg-html-to-lexical': file:components/tryghost-kg-html-to-lexical-1.3.3.tgz
242
243
  '@tryghost/kg-lexical-html-renderer': file:components/tryghost-kg-lexical-html-renderer-1.4.3.tgz
package/tsconfig.json CHANGED
@@ -100,6 +100,7 @@
100
100
  "skipLibCheck": true /* Skip type checking all .d.ts files. */
101
101
  },
102
102
  "include": [
103
+ "bin/**/*.ts",
103
104
  "core/**/*.ts",
104
105
  "test/**/*.ts",
105
106
  "types/**/*.d.ts"