ghost 6.64.0 → 6.65.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 (672) hide show
  1. package/bin/create-migration.js +15 -0
  2. package/components/tryghost-adapter-base-scheduling-0.2.4.tgz +0 -0
  3. package/components/tryghost-api-framework-0.0.0.tgz +0 -0
  4. package/components/tryghost-i18n-0.0.0.tgz +0 -0
  5. package/components/tryghost-kg-default-cards-10.3.6.tgz +0 -0
  6. package/components/tryghost-kg-lexical-html-renderer-1.5.1.tgz +0 -0
  7. package/components/tryghost-metafield-types-0.0.0.tgz +0 -0
  8. package/content/themes/casper/assets/built/casper.js +1 -1
  9. package/content/themes/casper/assets/built/screen.css +1 -1
  10. package/content/themes/casper/assets/css/screen.css +15 -2
  11. package/content/themes/casper/assets/js/init.js +37 -9
  12. package/content/themes/casper/package.json +8 -8
  13. package/content/themes/source/assets/built/screen.css +1 -1
  14. package/content/themes/source/assets/built/source.js +1 -1
  15. package/content/themes/source/assets/css/screen.css +14 -1
  16. package/content/themes/source/assets/js/main.js +24 -4
  17. package/content/themes/source/package.json +7 -7
  18. package/core/boot.js +22 -16
  19. package/core/bridge.js +1 -1
  20. package/core/built/admin/assets/Combination-DQ6f9A5P.js +41 -0
  21. package/core/built/admin/assets/{PolarAngleAxis-a81ieQUO.js → PolarAngleAxis-BBaU7PRV.js} +1 -1
  22. package/core/built/admin/assets/RadialBarChart-Bp20JPnA.js +1 -0
  23. package/core/built/admin/assets/{about-39CAfroa.js → about-Dp43j18M.js} +1 -1
  24. package/core/built/admin/assets/accordion-h62UzFhj.js +1 -0
  25. package/core/built/admin/assets/account-migration-CBTbtX6Q.js +1 -0
  26. package/core/built/admin/assets/action-list-DC9QpX-l.js +1 -0
  27. package/core/built/admin/assets/activitypub/{account-migration-KA6Jjf9L.js → account-migration-B1DUZS4Q.js} +8 -8
  28. package/core/built/admin/assets/activitypub/activitypub.js +24 -11
  29. package/core/built/admin/assets/activitypub/avatar-CRGud8yf.js +153 -0
  30. package/core/built/admin/assets/activitypub/{avatar-flipboard-csQaNeYK.js → avatar-flipboard-BZNFAXfm.js} +3 -3
  31. package/core/built/admin/assets/activitypub/{bluesky-sharing-C7nTDMvw.js → bluesky-sharing-Cg_v-LwS.js} +30 -31
  32. package/core/built/admin/assets/activitypub/{chunk-KS7C4IRE-Ck3O4oo2.js → chunk-KS7C4IRE-CTUL98Lc.js} +2498 -1885
  33. package/core/built/admin/assets/activitypub/{content-formatters-CLcjaBwV.js → content-formatters-D7GWP7nH.js} +23 -24
  34. package/core/built/admin/assets/activitypub/{copy-DcOh8kXw.js → copy-CgzTvoeR.js} +2 -2
  35. package/core/built/admin/assets/activitypub/{domain-fZ-X8i4-.js → domain-C3G_nkHU.js} +46 -46
  36. package/core/built/admin/assets/activitypub/{edit-profile-BqMLQV88.js → edit-profile-C8cCY-AK.js} +927 -928
  37. package/core/built/admin/assets/activitypub/{explore-B4yPoP8E.js → explore-NlDT4inq.js} +11 -11
  38. package/core/built/admin/assets/activitypub/{feed-BRC_mvAe.js → feed-DF22jCTV.js} +10 -10
  39. package/core/built/admin/assets/activitypub/{field-COacNgOt.js → field-95-iuTte.js} +4 -4
  40. package/core/built/admin/assets/activitypub/{hash-C7u-irQQ.js → hash-R7LMLnhY.js} +2 -2
  41. package/core/built/admin/assets/activitypub/{inbox-CbTTdDQ3.js → inbox-DUJUiV6x.js} +2 -2
  42. package/core/built/admin/assets/activitypub/{inbox-BW-yvUoN.js → inbox-DerExBzA.js} +416 -414
  43. package/core/built/admin/assets/activitypub/{label-kPMmYI7l.js → label-EwCn1QYc.js} +4 -4
  44. package/core/built/admin/assets/activitypub/layout-Dy6NnW1G.js +1 -0
  45. package/core/built/admin/assets/activitypub/{moderation-CuidJzc0.js → moderation-BSkfiVYo.js} +73 -75
  46. package/core/built/admin/assets/activitypub/{note-CAMRRSqD.js → note-DOnAJTXK.js} +9 -9
  47. package/core/built/admin/assets/activitypub/{notifications-BmNlXGgp.js → notifications-DZc6XTjG.js} +27 -27
  48. package/core/built/admin/assets/activitypub/{onboarding-Dmun9jr_.js → onboarding-8vEIwYTH.js} +3 -3
  49. package/core/built/admin/assets/activitypub/{onboarding-Bqg7fh_L.js → onboarding-DYVqbNmp.js} +2 -2
  50. package/core/built/admin/assets/activitypub/{preferences--oH19wf9.js → preferences-DDok6F2N.js} +1418 -1390
  51. package/core/built/admin/assets/activitypub/{profile-DH_tQx2D.js → profile-DjVa2hUk.js} +254 -255
  52. package/core/built/admin/assets/activitypub/{reply-Cap9PxSH.js → reply-DtXBpHxu.js} +2 -2
  53. package/core/built/admin/assets/activitypub/routes-Cw302e1c.js +4946 -0
  54. package/core/built/admin/assets/activitypub/{separator-CAxxu8VV.js → separator-FpRpVDd3.js} +8 -9
  55. package/core/built/admin/assets/activitypub/settings-yK-puALn.js +314 -0
  56. package/core/built/admin/assets/activitypub/{site-BYps63oh.js → site-CHw0R2PA.js} +2 -2
  57. package/core/built/admin/assets/activitypub/{step-1-CKjR2KAm.js → step-1-737bnvxk.js} +7 -7
  58. package/core/built/admin/assets/activitypub/{step-2-B6PKfOUQ.js → step-2-DBaIsAsM.js} +7 -7
  59. package/core/built/admin/assets/activitypub/{step-3-C-qBbcUo.js → step-3-BBmy9m9V.js} +23 -23
  60. package/core/built/admin/assets/activitypub/tabs-LQ2xirdm.js +1101 -0
  61. package/core/built/admin/assets/activitypub/{topic-filter-DsUOuu0k.js → topic-filter-75Nu0CKj.js} +4 -4
  62. package/core/built/admin/assets/activitypub/{use-activity-pub-queries-CX9snsLs.js → use-activity-pub-queries-CYI2QJMs.js} +58 -58
  63. package/core/built/admin/assets/activitypub/{use-navigate-with-base-path-DsJTGDSS.js → use-navigate-with-base-path-B4jZ8hyg.js} +3924 -1403
  64. package/core/built/admin/assets/activitypub/{use-reply-chain-data-AJi9zkzm.js → use-reply-chain-data-BHmFxc3U.js} +6 -6
  65. package/core/built/admin/assets/activitypub/users-CSjOwpT9.js +886 -0
  66. package/core/built/admin/assets/activitypub/{x-DR8AT3-4.js → x-B9ptWCds.js} +2 -2
  67. package/core/built/admin/assets/{add-integration-modal-B12oRifD.js → add-integration-modal-BwePhq95.js} +1 -1
  68. package/core/built/admin/assets/add-newsletter-modal-Zv0I7Msm.js +1 -0
  69. package/core/built/admin/assets/{add-recommendation-modal-CJf92edY.js → add-recommendation-modal-cdLv0wHy.js} +1 -1
  70. package/core/built/admin/assets/analytics-DY8_SaP7.js +1 -0
  71. package/core/built/admin/assets/announcement-bar-modal-C-2yWwag.js +1 -0
  72. package/core/built/admin/assets/api-keys-BHKATUqQ.js +1 -0
  73. package/core/built/admin/assets/{audience-6GXevic-.js → audience-wRcSN0jV.js} +1 -1
  74. package/core/built/admin/assets/{automated-emails-DJQ4uNZo.js → automated-emails-CzUa3v4d.js} +1 -1
  75. package/core/built/admin/assets/automations-DupSsSOr.js +1 -0
  76. package/core/built/admin/assets/badge-CI1Z0xyG.js +1 -0
  77. package/core/built/admin/assets/bluesky-sharing-B8PC1SBj.js +1 -0
  78. package/core/built/admin/assets/box-LUuYRT-1.js +1 -0
  79. package/core/built/admin/assets/brand-icon-CrmbX86T.js +1 -0
  80. package/core/built/admin/assets/breadcrumb-DDDpzLyo.js +1 -0
  81. package/core/built/admin/assets/button-D414TI3B.js +1 -0
  82. package/core/built/admin/assets/calendar-Cp_opo3i.js +1 -0
  83. package/core/built/admin/assets/card-C2dfd5u0.js +1 -0
  84. package/core/built/admin/assets/chart-B_UNLXse.js +63 -0
  85. package/core/built/admin/assets/chart-helpers-Czu_9QpJ.js +1 -0
  86. package/core/built/admin/assets/checkbox-CFFqf0Nh.js +1 -0
  87. package/core/built/admin/assets/{chunk.368.22ce1b732c0b40abd3f1.js → chunk.201.6961b57ed7a281ac193e.js} +23 -19
  88. package/core/built/admin/assets/chunk.524.0b850e72ec49a0fa3882.js +25 -0
  89. package/core/built/admin/assets/chunk.582.db2ae9e968256e8d58ac.js +27 -0
  90. package/core/built/admin/assets/code-editor-view-Bd_nnHKk.js +1 -0
  91. package/core/built/admin/assets/code-editor-view-BeU3Yf9M.js +1 -0
  92. package/core/built/admin/assets/color-picker-Bzm1V7qg.js +3 -0
  93. package/core/built/admin/assets/color-picker-field-DP0moHz9.js +1 -0
  94. package/core/built/admin/assets/combobox-6_ruuTuj.js +1 -0
  95. package/core/built/admin/assets/command-B5wfm6pd.js +1 -0
  96. package/core/built/admin/assets/comments-BB26dUSl.js +1 -0
  97. package/core/built/admin/assets/confirmation-context-znVJD4pX.js +1 -0
  98. package/core/built/admin/assets/container-CHHif8km.js +1 -0
  99. package/core/built/admin/assets/{content-api-modal-0ZjuLcQ8.js → content-api-modal-DOHwl0yZ.js} +1 -1
  100. package/core/built/admin/assets/context-menu-BpY46Dlb.js +1 -0
  101. package/core/built/admin/assets/copy-field-DRBx6Ady.js +1 -0
  102. package/core/built/admin/assets/create-ghost-browse-value-source-eIXo5Qws.js +1 -0
  103. package/core/built/admin/assets/custom-field-type-option-DrSlETOI.js +1 -0
  104. package/core/built/admin/assets/custom-integration-modal-Dgo425Ec.js +1 -0
  105. package/core/built/admin/assets/data-list-DM8yqpXi.js +1 -0
  106. package/core/built/admin/assets/date-range-select-DdC23c13.js +1 -0
  107. package/core/built/admin/assets/design-and-theme-modal-CbSu9IT4.js +2 -0
  108. package/core/built/admin/assets/detail-page-CN4NdhpV.js +1 -0
  109. package/core/built/admin/assets/dirty-confirm-dialog-BT_Vq9TD.js +1 -0
  110. package/core/built/admin/assets/{disabled-sources-indicator-CLZhMv8J.js → disabled-sources-indicator-C5xtW0Q2.js} +1 -1
  111. package/core/built/admin/assets/dist-B40T-RCQ.js +1 -0
  112. package/core/built/admin/assets/dist-CrlaEoaK.js +1 -0
  113. package/core/built/admin/assets/domain-BPReCZa8.js +1 -0
  114. package/core/built/admin/assets/dropzone-B2auMkf2.js +5 -0
  115. package/core/built/admin/assets/edit-profile-B7XTBzKe.js +1 -0
  116. package/core/built/admin/assets/editor-BcaC9dqm.js +8 -0
  117. package/core/built/admin/assets/editor-screen-FuMpItC8.js +27 -0
  118. package/core/built/admin/assets/email-sending-status-provider-9d81o1C2.js +1 -0
  119. package/core/built/admin/assets/embed-signup-form-modal-CbVbMsxl.js +8 -0
  120. package/core/built/admin/assets/empty-indicator-CSQts7GV.js +1 -0
  121. package/core/built/admin/assets/explore-DbSXFTJN.js +1 -0
  122. package/core/built/admin/assets/feature-image-placeholder-DFXA4vfJ.js +1 -0
  123. package/core/built/admin/assets/feed-W7RlF-Gp.js +1 -0
  124. package/core/built/admin/assets/field-BXEh3ptU.js +1 -0
  125. package/core/built/admin/assets/filter-sources-DHK2IoCk.js +1 -0
  126. package/core/built/admin/assets/filters-0SYNTqyQ.js +1 -0
  127. package/core/built/admin/assets/filters-DTtZKQyq.js +1 -0
  128. package/core/built/admin/assets/{first-promoter-modal-wr73Dldc.js → first-promoter-modal-DcoN_OXu.js} +1 -1
  129. package/core/built/admin/assets/{ghost-a1e6e172c6917e8ef8fa6b0007756d9b.js → ghost-25495154132af7305cb7b646fd83f48f.js} +562 -514
  130. package/core/built/admin/assets/gift-link-modal-BX-Q1TOk.js +1 -0
  131. package/core/built/admin/assets/grid-BEUIDQX7.js +1 -0
  132. package/core/built/admin/assets/growth-G6PLO4aF.js +1 -0
  133. package/core/built/admin/assets/growth-tkD-fBOY.js +3 -0
  134. package/core/built/admin/assets/heading-ih-fOVqF.js +1 -0
  135. package/core/built/admin/assets/history-modal-Ca-gStoq.js +1 -0
  136. package/core/built/admin/assets/html-field-B3CrKV9Y.js +1 -0
  137. package/core/built/admin/assets/images-H-BIm8OQ.js +1 -0
  138. package/core/built/admin/assets/{inbox-DgSZ6w2p.js → inbox-DBbDVMPz.js} +14 -14
  139. package/core/built/admin/assets/index-DOF2jDq0.js +4 -0
  140. package/core/built/admin/assets/index-JrrNchW1.css +2 -0
  141. package/core/built/admin/assets/input-group-CvH-3d3F.js +1 -0
  142. package/core/built/admin/assets/input-surface-CL23Mlh8.js +1 -0
  143. package/core/built/admin/assets/integration-header-C7GXGis_.js +1 -0
  144. package/core/built/admin/assets/invite-user-modal-EJ2_6RpV.js +1 -0
  145. package/core/built/admin/assets/isPlainObject-BzzgUf1E.js +1 -0
  146. package/core/built/admin/assets/{koenig-lexical-CXVgQFUk.js → koenig-lexical-Dkwee5FG.js} +1 -1
  147. package/core/built/admin/assets/koenig-loader-BzXCXHoA.js +2 -0
  148. package/core/built/admin/assets/kpi-card-iCDUTgOR.js +1 -0
  149. package/core/built/admin/assets/kpi-card-jTnpLKGr.js +1 -0
  150. package/core/built/admin/assets/kpi-helpers-Criu0YAf.js +1 -0
  151. package/core/built/admin/assets/kpi-tabs-DbOmmyOo.js +1 -0
  152. package/core/built/admin/assets/label-Du0yqMqL.js +1 -0
  153. package/core/built/admin/assets/label-picker-Bq1XXr1D.js +1 -0
  154. package/core/built/admin/assets/{labels-KMkFoRG6.js → labels-0x2NfLtC.js} +1 -1
  155. package/core/built/admin/assets/layout-Ckwzsnsu.js +1 -0
  156. package/core/built/admin/assets/lib-CCz2mjm8.js +2 -0
  157. package/core/built/admin/assets/link-helpers-o9GgBTni.js +1 -0
  158. package/core/built/admin/assets/{links-FwNCVyVe.js → links-Ctujreuh.js} +1 -1
  159. package/core/built/admin/assets/list-page-CH_wnDC3.js +1 -0
  160. package/core/built/admin/assets/member-activity-CsAh6MxK.js +1 -0
  161. package/core/built/admin/assets/member-activity-feed-0ytsQbtY.js +1 -0
  162. package/core/built/admin/assets/member-custom-fields-CTFGnnYv.js +1 -0
  163. package/core/built/admin/assets/member-detail-QU3vB1ML.js +1 -0
  164. package/core/built/admin/assets/members-CtMVO_AB.js +4 -0
  165. package/core/built/admin/assets/modal-page-8Ipfl51B.js +1 -0
  166. package/core/built/admin/assets/moderation-B8VtA-W0.js +1 -0
  167. package/core/built/admin/assets/multi-select-combobox-_9wEYmGv.js +1 -0
  168. package/core/built/admin/assets/navigation-modal-CGcjJvkc.js +1 -0
  169. package/core/built/admin/assets/newsletter-BpHjjqmq.js +1 -0
  170. package/core/built/admin/assets/newsletter-detail-modal-DzTbGOyo.js +1 -0
  171. package/core/built/admin/assets/newsletter-emails-BMKH4Osp.js +1 -0
  172. package/core/built/admin/assets/newsletters-BxC84_cL.js +1 -0
  173. package/core/built/admin/assets/note-BPtEzzZS.js +1 -0
  174. package/core/built/admin/assets/notifications-ng3ulEdp.js +1 -0
  175. package/core/built/admin/assets/offers-container-modal-CwqnRa3T.js +1 -0
  176. package/core/built/admin/assets/onboarding-route-CplZzd7F.js +1 -0
  177. package/core/built/admin/assets/overview-B0yD9OoX.js +1 -0
  178. package/core/built/admin/assets/overview-C4eJzQqi.js +1 -0
  179. package/core/built/admin/assets/page-header-CdCpekG9.js +1 -0
  180. package/core/built/admin/assets/pagemenu-CKQD9hoP.js +1 -0
  181. package/core/built/admin/assets/pages-route-CKsnxIvw.js +1 -0
  182. package/core/built/admin/assets/{pintura-modal-BljM7hf8.js → pintura-modal-C5jzeyGk.js} +1 -1
  183. package/core/built/admin/assets/portal-frame-DYo0bh0E.js +1 -0
  184. package/core/built/admin/assets/portal-modal-C0d8xjKa.js +1 -0
  185. package/core/built/admin/assets/post-analytics-C5C7IyAm.js +1 -0
  186. package/core/built/admin/assets/post-analytics-header-DKWHwoK2.js +1 -0
  187. package/core/built/admin/assets/{post-analytics-provider-CgreZDjS.js → post-analytics-provider-BqCPPxmW.js} +1 -1
  188. package/core/built/admin/assets/post-share-modal-wxmqbAv_.js +1 -0
  189. package/core/built/admin/assets/posts-list-screen-B978ZO0R.js +2 -0
  190. package/core/built/admin/assets/posts-route-CDqxKazl.js +1 -0
  191. package/core/built/admin/assets/preferences-CnejTRc4.js +5 -0
  192. package/core/built/admin/assets/preview-chrome-C7yZWVLZ.js +1 -0
  193. package/core/built/admin/assets/preview-modal-CFUxUGHp.js +1 -0
  194. package/core/built/admin/assets/profile-ClRGiOqA.js +1 -0
  195. package/core/built/admin/assets/radio-group-CTmLo0h9.js +1 -0
  196. package/core/built/admin/assets/router-provider-DDZvgS3V.js +1 -0
  197. package/core/built/admin/assets/select-D_4xWFYv.js +1 -0
  198. package/core/built/admin/assets/settings-BRl7-7a9.js +1 -0
  199. package/core/built/admin/assets/settings-BoQcPa-y.js +4 -0
  200. package/core/built/admin/assets/settings-breadcrumbs-C9Yxl81q.js +1 -0
  201. package/core/built/admin/assets/{dist-BXHrDV19.js → shade-scope-Cccj-c7I-D0XwkdKQ.js} +5 -3
  202. package/core/built/admin/assets/share-modal-DBqZobuR.js +1 -0
  203. package/core/built/admin/assets/simple-pagination-D5t_ox6x.js +1 -0
  204. package/core/built/admin/assets/skeleton-CPcTiTSX.js +1 -0
  205. package/core/built/admin/assets/{slack-modal-D7W_fNON.js → slack-modal-BF9ex8cd.js} +1 -1
  206. package/core/built/admin/assets/sort-button-C0EXGjnS.js +1 -0
  207. package/core/built/admin/assets/{source-icon-CQboPZQ3.js → source-icon-BzzftCQ2.js} +1 -1
  208. package/core/built/admin/assets/stats-view-CzpGoHzF.js +1 -0
  209. package/core/built/admin/assets/{step-1-BKhjy0PV.js → step-1-CBUYUPPF.js} +1 -1
  210. package/core/built/admin/assets/{step-2-PxA1OM7R.js → step-2-CEIXUwQa.js} +1 -1
  211. package/core/built/admin/assets/{step-3-BJbAiq16.js → step-3-C1HA5i1N.js} +2 -2
  212. package/core/built/admin/assets/stripe-button-DMFsLs80.js +1 -0
  213. package/core/built/admin/assets/stripe-connect-modal-CEvxCUTv.js +1 -0
  214. package/core/built/admin/assets/switch-DoOJF2yg.js +1 -0
  215. package/core/built/admin/assets/table-BDYbUHJz.js +1 -0
  216. package/core/built/admin/assets/tabs-BZyz4ZCH.js +1 -0
  217. package/core/built/admin/assets/tag-detail-CFzaz_9E.js +2 -0
  218. package/core/built/admin/assets/tag-picker-BKUCZuRc.js +1 -0
  219. package/core/built/admin/assets/tags-Bs1FiD7m.js +1 -0
  220. package/core/built/admin/assets/{testimonials-modal-Dkt6ODLW.js → testimonials-modal-CVm0_7E-.js} +1 -1
  221. package/core/built/admin/assets/text-BLI0C8Mc.js +1 -0
  222. package/core/built/admin/assets/textarea-C5qolByg.js +1 -0
  223. package/core/built/admin/assets/tier-detail-modal-Cmwzi-e7.js +1 -0
  224. package/core/built/admin/assets/toggle-group-BTL1QsWY.js +1 -0
  225. package/core/built/admin/assets/{topic-filter-DVOe3D-b.js → topic-filter-BMjhquv7.js} +1 -1
  226. package/core/built/admin/assets/transistor-modal-hMv53jF8.js +1 -0
  227. package/core/built/admin/assets/trend-badge-1w_HEzkG.js +1 -0
  228. package/core/built/admin/assets/{unsplash-modal-DXt7Brum.js → unsplash-modal-jzC8lEB2.js} +1 -1
  229. package/core/built/admin/assets/use-analytics-data-B3lGOxsC.js +1 -0
  230. package/core/built/admin/assets/use-availability-DnKqOyqd.js +1 -0
  231. package/core/built/admin/assets/{use-check-theme-limit-error-JD-J5aaZ.js → use-check-theme-limit-error-C1tc2P4N.js} +2 -2
  232. package/core/built/admin/assets/use-filter-params-DU-aiaTb.js +1 -0
  233. package/core/built/admin/assets/{use-filterable-api-CEMSAYPg.js → use-filterable-api-CxCrnPxG.js} +1 -1
  234. package/core/built/admin/assets/use-growth-stats-E13rMQUE.js +1 -0
  235. package/core/built/admin/assets/use-limiter-DlL7au90.js +19 -0
  236. package/core/built/admin/assets/{use-navigate-with-base-path-88EQpw2k.js → use-navigate-with-base-path-BzgNwMAx.js} +1 -1
  237. package/core/built/admin/assets/{use-pintura-config-BmU45Ruy.js → use-pintura-config-CtEV1JQY.js} +1 -1
  238. package/core/built/admin/assets/{use-pintura-editor-Bz2bZ4iT.js → use-pintura-editor-CaxE64kD.js} +1 -1
  239. package/core/built/admin/assets/use-reply-chain-data-BST2OgCM.js +1 -0
  240. package/core/built/admin/assets/use-sending-eta-DR9ueMH8.js +1 -0
  241. package/core/built/admin/assets/use-setting-group-ldtX1Vsk.js +1 -0
  242. package/core/built/admin/assets/use-settings-navigation-CzGU4sus.js +1 -0
  243. package/core/built/admin/assets/use-staff-users-DoeXaPsb.js +1 -0
  244. package/core/built/admin/assets/use-tinybird-query-BaBNCaj0.js +1 -0
  245. package/core/built/admin/assets/{use-tinybird-token-Lk1RSn0t.js → use-tinybird-token-CnZ19NDf.js} +1 -1
  246. package/core/built/admin/assets/{use-url-input-DpmbDppC.js → use-url-input-C5KHJw79.js} +1 -1
  247. package/core/built/admin/assets/user-detail-modal-Dm0KfPeR.js +1 -0
  248. package/core/built/admin/assets/{vendor-2dd263291938d407802568d3357ec69e.js → vendor-97e91ff8dd1457c668f9ef103ee1a77b.js} +2748 -2977
  249. package/core/built/admin/assets/virtual-list-tAuPUICw.js +1 -0
  250. package/core/built/admin/assets/web-BQlKcW2x.js +2 -0
  251. package/core/built/admin/assets/web-NTT5DkEz.js +1 -0
  252. package/core/built/admin/assets/{zapier-modal-BafLUO4R.js → zapier-modal-DsHG9Oev.js} +1 -1
  253. package/core/built/admin/index.html +22 -24
  254. package/core/frontend/apps/private-blogging/index.js +2 -2
  255. package/core/frontend/apps/private-blogging/lib/middleware.js +1 -1
  256. package/core/frontend/apps/private-blogging/lib/router.js +1 -1
  257. package/core/frontend/helpers/cancel_link.js +3 -3
  258. package/core/frontend/helpers/content.js +2 -2
  259. package/core/frontend/helpers/content_api_url.js +1 -1
  260. package/core/frontend/helpers/date.js +1 -1
  261. package/core/frontend/helpers/foreach.js +5 -5
  262. package/core/frontend/helpers/get.js +7 -4
  263. package/core/frontend/helpers/ghost_head.js +2 -2
  264. package/core/frontend/helpers/has.js +1 -3
  265. package/core/frontend/helpers/link.js +7 -7
  266. package/core/frontend/helpers/link_class.js +2 -2
  267. package/core/frontend/helpers/navigation.js +1 -2
  268. package/core/frontend/helpers/recommendations.js +5 -6
  269. package/core/frontend/helpers/tiers.js +1 -1
  270. package/core/frontend/helpers/total_members.js +1 -1
  271. package/core/frontend/helpers/total_paid_members.js +1 -1
  272. package/core/frontend/meta/author-url.js +1 -1
  273. package/core/frontend/meta/modified-date.js +1 -1
  274. package/core/frontend/meta/published-date.js +1 -1
  275. package/core/frontend/meta/schema.js +3 -8
  276. package/core/frontend/meta/structured-data.js +1 -2
  277. package/core/frontend/services/assets-minification/minifier.js +1 -1
  278. package/core/frontend/services/data/entry-lookup.js +1 -1
  279. package/core/frontend/services/data/fetch-data.js +2 -2
  280. package/core/frontend/services/rendering/format-response.js +1 -1
  281. package/core/frontend/services/rendering/renderer.js +3 -0
  282. package/core/frontend/services/rendering/templates.js +1 -1
  283. package/core/frontend/services/routing/controllers/static.js +1 -1
  284. package/core/frontend/services/routing/parent-router.js +1 -1
  285. package/core/frontend/services/routing/registry.js +1 -1
  286. package/core/frontend/services/sitemap/base-site-map-generator.js +68 -97
  287. package/core/frontend/services/sitemap/site-map-index-generator.js +16 -21
  288. package/core/frontend/services/sitemap/site-map-manager.js +82 -43
  289. package/core/frontend/services/sitemap/sitemap-xml.js +72 -0
  290. package/core/frontend/services/theme-engine/handlebars/utils.js +8 -8
  291. package/core/frontend/services/theme-engine/i18n/i18n.js +4 -5
  292. package/core/frontend/services/theme-engine/middleware/update-global-template-options.js +1 -1
  293. package/core/frontend/services/theme-engine/preview.js +1 -1
  294. package/core/frontend/utils/member-count.js +2 -2
  295. package/core/frontend/web/routers/serve-public-file.js +1 -1
  296. package/core/server/adapters/scheduling/README.md +4 -0
  297. package/core/server/adapters/scheduling/get-scheduler-idempotency-key.js +21 -0
  298. package/core/server/adapters/storage/LocalStorageBase.js +2 -1
  299. package/core/server/api/endpoints/automated-emails.js +8 -2
  300. package/core/server/api/endpoints/db.js +1 -1
  301. package/core/server/api/endpoints/emails.js +3 -3
  302. package/core/server/api/endpoints/mail.js +1 -1
  303. package/core/server/api/endpoints/member-signin-urls.js +1 -1
  304. package/core/server/api/endpoints/members.js +3 -3
  305. package/core/server/api/endpoints/oembed.js +1 -1
  306. package/core/server/api/endpoints/posts.js +1 -1
  307. package/core/server/api/endpoints/settings.js +2 -2
  308. package/core/server/api/endpoints/themes.js +5 -5
  309. package/core/server/api/endpoints/utils/serializers/input/pages.js +2 -2
  310. package/core/server/api/endpoints/utils/serializers/input/posts.js +2 -2
  311. package/core/server/api/endpoints/utils/serializers/input/tags.js +1 -1
  312. package/core/server/api/endpoints/utils/serializers/input/utils/slug-filter-order.js +4 -4
  313. package/core/server/api/endpoints/utils/serializers/output/mappers/comments.js +8 -5
  314. package/core/server/api/endpoints/utils/serializers/output/mappers/posts.js +1 -1
  315. package/core/server/api/endpoints/utils/serializers/output/pages.js +4 -4
  316. package/core/server/api/endpoints/utils/serializers/output/posts.js +4 -4
  317. package/core/server/api/endpoints/utils/serializers/output/search-index.js +11 -11
  318. package/core/server/api/endpoints/utils/serializers/output/settings.js +1 -1
  319. package/core/server/api/endpoints/utils/serializers/output/utils/extra-attrs.js +3 -3
  320. package/core/server/api/endpoints/utils/validators/input/automated_emails.js +23 -33
  321. package/core/server/api/endpoints/utils/validators/input/settings.js +3 -3
  322. package/core/server/data/exporter/exporter.js +1 -2
  323. package/core/server/data/exporter/table-lists.js +1 -0
  324. package/core/server/data/importer/handlers/image.js +1 -2
  325. package/core/server/data/importer/handlers/json.js +1 -3
  326. package/core/server/data/importer/handlers/markdown.js +4 -8
  327. package/core/server/data/importer/import-manager.js +1 -1
  328. package/core/server/data/importer/importers/content-file-importer.js +4 -8
  329. package/core/server/data/importer/importers/data/base.js +10 -10
  330. package/core/server/data/importer/importers/data/custom-theme-settings-importer.js +1 -1
  331. package/core/server/data/importer/importers/data/data-importer.js +3 -4
  332. package/core/server/data/importer/importers/data/posts-importer.js +10 -10
  333. package/core/server/data/importer/importers/data/products-importer.js +3 -3
  334. package/core/server/data/importer/importers/data/settings-importer.js +2 -2
  335. package/core/server/data/importer/importers/data/stripe-prices-importer.js +1 -1
  336. package/core/server/data/importer/importers/data/stripe-products-importer.js +1 -1
  337. package/core/server/data/importer/importers/data/tags-importer.js +1 -1
  338. package/core/server/data/importer/importers/data/users-importer.js +2 -2
  339. package/core/server/data/importer/importers/json-to-html.js +12 -9
  340. package/core/server/data/migrations/versions/5.0/2022-05-11-13-12-rename-settings.js +1 -1
  341. package/core/server/data/migrations/versions/6.65/2026-09-16-15-35-26-add-members-metafield-change-events.js +17 -0
  342. package/core/server/data/schema/fixtures/fixture-manager.js +3 -3
  343. package/core/server/data/schema/index.js +1 -1
  344. package/core/server/data/schema/schema.js +26 -0
  345. package/core/server/data/schema/validator.js +96 -123
  346. package/core/server/data/seeders/importers/email-recipients-importer.js +2 -2
  347. package/core/server/data/seeders/importers/members-login-events-importer.js +1 -1
  348. package/core/server/data/seeders/importers/members-newsletters-importer.js +1 -1
  349. package/core/server/data/seeders/importers/members-paid-subscription-events-importer.js +1 -1
  350. package/core/server/data/seeders/importers/members-status-events-importer.js +1 -1
  351. package/core/server/data/seeders/importers/members-stripe-customers-importer.js +1 -1
  352. package/core/server/data/seeders/importers/members-stripe-customers-subscriptions-importer.js +1 -1
  353. package/core/server/data/seeders/importers/members-subscribe-events-importer.js +2 -2
  354. package/core/server/data/seeders/importers/members-subscription-created-events-importer.js +1 -1
  355. package/core/server/data/tinybird/pipes/mv_hits.pipe +25 -20
  356. package/core/server/data/tinybird/scripts/docker-analytics-manager.js +2 -2
  357. package/core/server/ghost-server.js +1 -19
  358. package/core/server/lib/image/image-size.js +1 -3
  359. package/core/server/lib/request-external.js +53 -117
  360. package/core/server/models/base/plugins/actions.js +2 -3
  361. package/core/server/models/base/plugins/crud.js +1 -2
  362. package/core/server/models/base/plugins/events.js +4 -4
  363. package/core/server/models/base/plugins/raw-knex.js +3 -3
  364. package/core/server/models/base/plugins/sanitize.js +1 -1
  365. package/core/server/models/benefit.js +1 -1
  366. package/core/server/models/collection.js +1 -1
  367. package/core/server/models/comment.js +3 -3
  368. package/core/server/models/invite.js +2 -5
  369. package/core/server/models/label.js +3 -6
  370. package/core/server/models/member.js +7 -10
  371. package/core/server/models/newsletter.js +1 -1
  372. package/core/server/models/permission.js +3 -6
  373. package/core/server/models/post.js +20 -23
  374. package/core/server/models/product.js +4 -1
  375. package/core/server/models/relations/authors.js +9 -12
  376. package/core/server/models/role.js +2 -5
  377. package/core/server/models/settings.js +3 -3
  378. package/core/server/models/tag.js +2 -5
  379. package/core/server/models/user.js +8 -10
  380. package/core/server/models/webhook.js +2 -4
  381. package/core/server/notify.js +2 -2
  382. package/core/server/services/adapter-manager/utils.js +6 -1
  383. package/core/server/services/api-version-compatibility/legacy-api-path-match.js +2 -2
  384. package/core/server/services/auth/api-key/admin.js +2 -2
  385. package/core/server/services/auth/api-key/content.js +1 -1
  386. package/core/server/services/auth/passwordreset.js +1 -1
  387. package/core/server/services/auth/setup.js +1 -3
  388. package/core/server/services/automations/README.md +19 -0
  389. package/core/server/services/automations/poll.js +3 -1
  390. package/core/server/services/automations/service.js +2 -2
  391. package/core/server/services/automations/welcome-email-automation-poll.js +199 -293
  392. package/core/server/services/comments/comments-controller.js +9 -30
  393. package/core/server/services/comments/comments-service-email-renderer.js +1 -1
  394. package/core/server/services/comments/comments-service-emails.js +1 -1
  395. package/core/server/services/comments/comments-service.js +27 -58
  396. package/core/server/services/comments/comments-stats-service.js +1 -1
  397. package/core/server/services/content-import/import/staged-file.js +9 -9
  398. package/core/server/services/content-import/index.js +1 -1
  399. package/core/server/services/custom-redirects/validation.js +1 -1
  400. package/core/server/services/email-analytics/email-analytics-service-wrapper.js +23 -55
  401. package/core/server/services/email-analytics/index.js +35 -19
  402. package/core/server/services/email-analytics/jobs/email-analytics-job-scheduler.js +31 -60
  403. package/core/server/services/email-service/README.md +35 -0
  404. package/core/server/services/email-service/batch-sending-service.js +13 -14
  405. package/core/server/services/email-service/email-renderer.js +50 -14
  406. package/core/server/services/email-service/email-service-wrapper.js +3 -2
  407. package/core/server/services/email-service/email-service.js +33 -8
  408. package/core/server/services/email-service/email-templates/partials/feedback-button.hbs +2 -1
  409. package/core/server/services/email-service/email-templates/partials/styles.hbs +0 -6
  410. package/core/server/services/email-service/email-templates/template.hbs +1 -1
  411. package/core/server/services/email-service/jobs/send-email-job.js +12 -0
  412. package/core/server/services/email-service/mailgun-email-provider.js +7 -2
  413. package/core/server/services/email-service/sending-service.js +1 -1
  414. package/core/server/services/gifts/gift-service.js +12 -3
  415. package/core/server/services/gifts/index.js +0 -2
  416. package/core/server/services/gifts/jobs/index.js +12 -24
  417. package/core/server/services/gifts/jobs/send-gift-reminders-job.js +6 -46
  418. package/core/server/services/invitations/accept.js +2 -2
  419. package/core/server/services/jobs/job-service.js +0 -28
  420. package/core/server/services/jobs-service/jobs-service.js +5 -0
  421. package/core/server/services/jobs-service/register-job-handlers.js +17 -1
  422. package/core/server/services/lib/mailgun-client.js +16 -1
  423. package/core/server/services/lib/mailgun-recipient-message-id.js +49 -0
  424. package/core/server/services/limits.js +1 -1
  425. package/core/server/services/mail/ghost-mailer.js +1 -1
  426. package/core/server/services/member-attribution/member-attribution-service.js +1 -1
  427. package/core/server/services/member-attribution/referrer-translator.js +1 -1
  428. package/core/server/services/members/account-service.js +3 -3
  429. package/core/server/services/members/api.js +1 -1
  430. package/core/server/services/members/import-export/import/importer.js +25 -16
  431. package/core/server/services/members/import-export/import/spool.js +11 -15
  432. package/core/server/services/members/import-export/index.js +6 -4
  433. package/core/server/services/members/jobs/index.js +1 -1
  434. package/core/server/services/members/jobs/members-import-job.js +18 -0
  435. package/core/server/services/members/member-avatar.js +18 -0
  436. package/core/server/services/members/members-api/controllers/member-controller.js +2 -2
  437. package/core/server/services/members/members-api/members-api.js +4 -4
  438. package/core/server/services/members/members-api/repositories/event-repository.js +36 -1
  439. package/core/server/services/members/members-api/repositories/member-repository.js +55 -17
  440. package/core/server/services/members/members-api/repositories/product-repository.js +1 -1
  441. package/core/server/services/members/members-api/services/member-bread-service.js +4 -7
  442. package/core/server/services/members/service.js +7 -2
  443. package/core/server/services/members/stats/members-stats.js +2 -2
  444. package/core/server/services/members-events/event-storage.js +2 -2
  445. package/core/server/services/members-metafields/actions.js +23 -2
  446. package/core/server/services/members-metafields/bindings-service.js +5 -5
  447. package/core/server/services/members-metafields/definitions-service.js +2 -7
  448. package/core/server/services/members-metafields/index.js +2 -1
  449. package/core/server/services/members-metafields/queries.js +7 -1
  450. package/core/server/services/members-metafields/schema.js +49 -1
  451. package/core/server/services/members-metafields/values-service.js +112 -10
  452. package/core/server/services/mentions/mention-sending-service.js +2 -2
  453. package/core/server/services/mentions/mention.js +3 -4
  454. package/core/server/services/mentions/mentions-api.js +4 -1
  455. package/core/server/services/mentions-jobs/job-service.js +0 -28
  456. package/core/server/services/milestones/milestones-service.js +1 -1
  457. package/core/server/services/newsletters/newsletters-service.js +1 -1
  458. package/core/server/services/notifications/notifications.js +3 -3
  459. package/core/server/services/oembed/oembed-service.js +79 -3
  460. package/core/server/services/permissions/can-this.js +1 -2
  461. package/core/server/services/post-scheduling/post-scheduling.js +8 -1
  462. package/core/server/services/posts/post-scheduling.js +7 -0
  463. package/core/server/services/settings/settings-bread-service.js +3 -3
  464. package/core/server/services/settings/settings-utils.js +1 -1
  465. package/core/server/services/settings-helpers/settings-helpers.js +1 -1
  466. package/core/server/services/staff/staff-service-emails.js +9 -9
  467. package/core/server/services/stats/posts-stats-service.js +10 -10
  468. package/core/server/services/stats/referrers-stats-service.js +1 -1
  469. package/core/server/services/stats/subscription-stats-service.js +3 -3
  470. package/core/server/services/stats/utils/tinybird.js +8 -1
  471. package/core/server/services/stripe/stripe-api.js +3 -3
  472. package/core/server/services/stripe/stripe-migrations.js +6 -6
  473. package/core/server/services/themes/storage.js +21 -26
  474. package/core/server/services/themes/theme-storage.js +2 -2
  475. package/core/server/services/tiers/tier.js +15 -15
  476. package/core/server/services/tinybird-sync/index.js +3 -0
  477. package/core/server/services/tinybird-sync/tinybird-sync-service.js +7 -2
  478. package/core/server/services/update-check/update-check-service.js +3 -3
  479. package/core/server/services/webhooks/serialize.js +1 -1
  480. package/core/server/web/api/app.js +0 -5
  481. package/core/server/web/api/middleware/upload.js +29 -2
  482. package/core/server/web/parent/middleware/index.js +1 -1
  483. package/core/server/web/parent/middleware/log-request.js +5 -0
  484. package/core/server/web/parent/middleware/queue-request.js +104 -59
  485. package/core/server/web/shared/middleware/api/spam-prevention.js +2 -2
  486. package/core/shared/config/defaults.json +6 -1
  487. package/core/shared/custom-theme-settings-cache/custom-theme-settings-service.js +1 -1
  488. package/core/shared/labs.js +3 -2
  489. package/core/shared/settings-cache/cache-manager.js +1 -1
  490. package/nodemon.json +1 -1
  491. package/package.json +6 -7
  492. package/pnpm-lock.yaml +126 -728
  493. package/pnpm-workspace.yaml +4 -7
  494. package/tsconfig.json +1 -1
  495. package/components/tryghost-adapter-base-scheduling-0.2.3.tgz +0 -0
  496. package/core/built/admin/assets/Combination-DWfJPcz9.js +0 -41
  497. package/core/built/admin/assets/RadialBarChart-CHRBhiBN.js +0 -1
  498. package/core/built/admin/assets/_baseAssignValue-DcPokYW8.js +0 -1
  499. package/core/built/admin/assets/accordion-CJmRaqK7.js +0 -1
  500. package/core/built/admin/assets/account-migration-DYf7skbb.js +0 -1
  501. package/core/built/admin/assets/action-list-Crnh-_UI.js +0 -1
  502. package/core/built/admin/assets/activitypub/avatar-DVJF5bxP.js +0 -261
  503. package/core/built/admin/assets/activitypub/layout-BL4_jtuV.js +0 -1
  504. package/core/built/admin/assets/activitypub/routes-DdyY9uFF.js +0 -7181
  505. package/core/built/admin/assets/activitypub/settings-B6EEcVkW.js +0 -315
  506. package/core/built/admin/assets/activitypub/tabs-DLhZtVde.js +0 -1083
  507. package/core/built/admin/assets/activitypub/users-inweyKL5.js +0 -1499
  508. package/core/built/admin/assets/add-newsletter-modal-CTvXiIqY.js +0 -1
  509. package/core/built/admin/assets/analytics-PHR1Fggi.js +0 -1
  510. package/core/built/admin/assets/announcement-bar-modal-Bql0CXdp.js +0 -1
  511. package/core/built/admin/assets/api-keys-CubH-7_H.js +0 -1
  512. package/core/built/admin/assets/automations-DcZSLFDU.js +0 -1
  513. package/core/built/admin/assets/badge-qP06OT7C.js +0 -1
  514. package/core/built/admin/assets/bluesky-sharing-CJw4d4Mf.js +0 -1
  515. package/core/built/admin/assets/box-CZ_LSVSy.js +0 -1
  516. package/core/built/admin/assets/brand-icon-D3ffDYaC.js +0 -1
  517. package/core/built/admin/assets/breadcrumb-Chn1Ip_q.js +0 -1
  518. package/core/built/admin/assets/button-DvIh2Bq-.js +0 -1
  519. package/core/built/admin/assets/calendar-1QGoStFM.js +0 -1
  520. package/core/built/admin/assets/card-FHQ4D10L.js +0 -1
  521. package/core/built/admin/assets/chart-helpers-CNpA7re_.js +0 -1
  522. package/core/built/admin/assets/chart-jVz9Nf9t.js +0 -63
  523. package/core/built/admin/assets/checkbox-DKht9xMl.js +0 -1
  524. package/core/built/admin/assets/chunk.524.cc9be98e44890cedc8c8.js +0 -25
  525. package/core/built/admin/assets/chunk.582.e6fe742b3217207b11a6.js +0 -27
  526. package/core/built/admin/assets/code-editor-view-BLQIV85-.js +0 -1
  527. package/core/built/admin/assets/code-editor-view-Cg5eJxcr.js +0 -1
  528. package/core/built/admin/assets/color-picker-DQoghc0t.js +0 -3
  529. package/core/built/admin/assets/color-picker-field-BbeK5RRs.js +0 -1
  530. package/core/built/admin/assets/combobox-weO4FBbv.js +0 -1
  531. package/core/built/admin/assets/command-DlLrCm9V.js +0 -1
  532. package/core/built/admin/assets/comments-BjTitLmP.js +0 -1
  533. package/core/built/admin/assets/confirmation-context-IyqoXVk-.js +0 -1
  534. package/core/built/admin/assets/container-DAimjOF_.js +0 -1
  535. package/core/built/admin/assets/context-menu-BtioYFrg.js +0 -1
  536. package/core/built/admin/assets/copy-field-C6ujqJlP.js +0 -1
  537. package/core/built/admin/assets/create-ghost-browse-value-source-DAZMWZNq.js +0 -1
  538. package/core/built/admin/assets/custom-integration-modal-Dm8QI_J4.js +0 -1
  539. package/core/built/admin/assets/data-list-C0CKkeWW.js +0 -1
  540. package/core/built/admin/assets/date-range-select-DrjHQdgz.js +0 -1
  541. package/core/built/admin/assets/design-and-theme-modal-CXVOzBWu.js +0 -2
  542. package/core/built/admin/assets/detail-page-QpLIL-EO.js +0 -1
  543. package/core/built/admin/assets/dirty-confirm-dialog-DWwxREGh.js +0 -1
  544. package/core/built/admin/assets/dist-Bf-HQtVL.js +0 -1
  545. package/core/built/admin/assets/dist-CUwte9v_.js +0 -1
  546. package/core/built/admin/assets/dist-FEQQAwTe.js +0 -1
  547. package/core/built/admin/assets/domain-DBrBic6q.js +0 -1
  548. package/core/built/admin/assets/dropzone-D61QVcEY.js +0 -5
  549. package/core/built/admin/assets/edit-profile-jCqJBxqw.js +0 -1
  550. package/core/built/admin/assets/editor-8Fm4UBEd.js +0 -8
  551. package/core/built/admin/assets/editor-screen-BSX_uC2B.js +0 -27
  552. package/core/built/admin/assets/email-sending-status-provider-DnNhlIvt.js +0 -1
  553. package/core/built/admin/assets/embed-signup-form-modal-DqtBs1WE.js +0 -8
  554. package/core/built/admin/assets/empty-indicator-L4Ql5Db7.js +0 -1
  555. package/core/built/admin/assets/en-Cx75dJv5.js +0 -1
  556. package/core/built/admin/assets/explore-DXhDCtKw.js +0 -1
  557. package/core/built/admin/assets/feature-image-placeholder-e2q6TcH6.js +0 -1
  558. package/core/built/admin/assets/feed-mmt4noNL.js +0 -1
  559. package/core/built/admin/assets/field-p7KnP98B.js +0 -1
  560. package/core/built/admin/assets/filter-bar-CiIKBg3D.js +0 -1
  561. package/core/built/admin/assets/filter-sources-I-dRaQxl.js +0 -1
  562. package/core/built/admin/assets/filters-1injvyxJ.js +0 -1
  563. package/core/built/admin/assets/filters-DnpO6GWX.js +0 -1
  564. package/core/built/admin/assets/gift-link-modal-C3H7YFXO.js +0 -1
  565. package/core/built/admin/assets/grid-5vplBYri.js +0 -1
  566. package/core/built/admin/assets/growth-B1og1kQp.js +0 -1
  567. package/core/built/admin/assets/growth-Bf6OHZlK.js +0 -3
  568. package/core/built/admin/assets/heading-BB21QAbb.js +0 -1
  569. package/core/built/admin/assets/history-modal-t_qEnxPx.js +0 -1
  570. package/core/built/admin/assets/html-field-COLQbV4r.js +0 -1
  571. package/core/built/admin/assets/images-4mvoc3lB.js +0 -1
  572. package/core/built/admin/assets/index-B3HZU2i8.css +0 -2
  573. package/core/built/admin/assets/index-DDd-zhNL.js +0 -4
  574. package/core/built/admin/assets/inline-B8H6NzIw.js +0 -1
  575. package/core/built/admin/assets/input-group-CLIN2ykI.js +0 -1
  576. package/core/built/admin/assets/input-surface-wSO5CRy5.js +0 -1
  577. package/core/built/admin/assets/integration-header-CKGrXNVP.js +0 -1
  578. package/core/built/admin/assets/invite-user-modal-BaN2mdhI.js +0 -1
  579. package/core/built/admin/assets/koenig-loader-B1XPPY5C.js +0 -2
  580. package/core/built/admin/assets/kpi-card-CRLPVlFW.js +0 -1
  581. package/core/built/admin/assets/kpi-card-CRPbW8NZ.js +0 -1
  582. package/core/built/admin/assets/kpi-helpers-D7zT96bp.js +0 -1
  583. package/core/built/admin/assets/kpi-tabs-DE_yh9Go.js +0 -1
  584. package/core/built/admin/assets/label-CgeBxy4o.js +0 -1
  585. package/core/built/admin/assets/label-picker-DGDp4Vwr.js +0 -1
  586. package/core/built/admin/assets/layout-DWnOMly4.js +0 -1
  587. package/core/built/admin/assets/lib-_QYaUU89.js +0 -2
  588. package/core/built/admin/assets/link-helpers-8J7ixADV.js +0 -1
  589. package/core/built/admin/assets/list-page-DLMP0PxC.js +0 -1
  590. package/core/built/admin/assets/member-activity-ClMWFyvN.js +0 -1
  591. package/core/built/admin/assets/member-activity-feed-BQY5Rwaj.js +0 -1
  592. package/core/built/admin/assets/member-custom-fields-Dd_ie1zG.js +0 -1
  593. package/core/built/admin/assets/member-detail-DjwkGVne.js +0 -1
  594. package/core/built/admin/assets/members--N9lhk1N.js +0 -4
  595. package/core/built/admin/assets/modal-page-Dz-9TP4E.js +0 -1
  596. package/core/built/admin/assets/moderation-DfYBKq9s.js +0 -1
  597. package/core/built/admin/assets/multi-select-combobox-BcBEzUW_.js +0 -1
  598. package/core/built/admin/assets/navigation-modal-Cd-scywg.js +0 -1
  599. package/core/built/admin/assets/newsletter-detail-modal-CFRY6vg_.js +0 -1
  600. package/core/built/admin/assets/newsletter-emails-4ntck1AC.js +0 -1
  601. package/core/built/admin/assets/newsletter-o6eCJtab.js +0 -1
  602. package/core/built/admin/assets/newsletters-Bmlv0edG.js +0 -1
  603. package/core/built/admin/assets/note-CWs3LF-0.js +0 -1
  604. package/core/built/admin/assets/notifications-BjSvTJqh.js +0 -1
  605. package/core/built/admin/assets/offers-container-modal-Bc9A196w.js +0 -1
  606. package/core/built/admin/assets/onboarding-route-Di1LJYEE.js +0 -1
  607. package/core/built/admin/assets/overview-DE7NHZQN.js +0 -1
  608. package/core/built/admin/assets/overview-DEF-ZY6x.js +0 -1
  609. package/core/built/admin/assets/page-header-B-G_g42C.js +0 -1
  610. package/core/built/admin/assets/pagemenu-CnkTDO71.js +0 -1
  611. package/core/built/admin/assets/pages-route-VT7r7YhG.js +0 -1
  612. package/core/built/admin/assets/portal-frame-D9V8iq5x.js +0 -1
  613. package/core/built/admin/assets/portal-modal-B5OOR9ZD.js +0 -1
  614. package/core/built/admin/assets/post-analytics-header-J0WciLx6.js +0 -1
  615. package/core/built/admin/assets/post-analytics-rGb-PgD-.js +0 -1
  616. package/core/built/admin/assets/post-share-modal-D0BbTo4W.js +0 -1
  617. package/core/built/admin/assets/posts-list-screen-CO5jAWoU.js +0 -2
  618. package/core/built/admin/assets/posts-route-DV-CXWK9.js +0 -1
  619. package/core/built/admin/assets/preferences-Tac29oG6.js +0 -5
  620. package/core/built/admin/assets/preview-chrome-C2lQgZBZ.js +0 -1
  621. package/core/built/admin/assets/preview-modal-CjRbBr8U.js +0 -1
  622. package/core/built/admin/assets/profile-yiM1f_Og.js +0 -1
  623. package/core/built/admin/assets/radio-group-CKROWsw4.js +0 -1
  624. package/core/built/admin/assets/router-provider-CU87qxXw.js +0 -1
  625. package/core/built/admin/assets/select-CKaC4ggu.js +0 -1
  626. package/core/built/admin/assets/settings-81kxUa28.js +0 -1
  627. package/core/built/admin/assets/settings-BVXFqBVK.js +0 -4
  628. package/core/built/admin/assets/settings-breadcrumbs-czGRx-iu.js +0 -1
  629. package/core/built/admin/assets/shade-app-CcS3f8MZ-D5BnfHck.js +0 -3
  630. package/core/built/admin/assets/share-modal-BL-16PiB.js +0 -1
  631. package/core/built/admin/assets/skeleton-DwCva0-b.js +0 -1
  632. package/core/built/admin/assets/sort-button-Dquc83jY.js +0 -1
  633. package/core/built/admin/assets/stack-BURz77VS.js +0 -1
  634. package/core/built/admin/assets/stats-view-NDja_g96.js +0 -1
  635. package/core/built/admin/assets/stripe-button-C3cfCAou.js +0 -1
  636. package/core/built/admin/assets/stripe-connect-modal-FyE3Ey2c.js +0 -1
  637. package/core/built/admin/assets/switch-zfUUy9Jh.js +0 -1
  638. package/core/built/admin/assets/table-dE4GTIRT.js +0 -1
  639. package/core/built/admin/assets/tabs-B3XK93sR.js +0 -1
  640. package/core/built/admin/assets/tag-detail-D4P-tZdM.js +0 -2
  641. package/core/built/admin/assets/tag-picker-BNSZ6Qxw.js +0 -1
  642. package/core/built/admin/assets/tags-BsZcaJ6h.js +0 -1
  643. package/core/built/admin/assets/text-DC-ot6u2.js +0 -1
  644. package/core/built/admin/assets/textarea-B4FffFmE.js +0 -1
  645. package/core/built/admin/assets/tier-detail-modal-a77Z2VMH.js +0 -1
  646. package/core/built/admin/assets/toggle-group-D2p4okmJ.js +0 -1
  647. package/core/built/admin/assets/transistor-modal-C8RMkhOD.js +0 -1
  648. package/core/built/admin/assets/trend-badge-B9v7kMF8.js +0 -1
  649. package/core/built/admin/assets/types-uYQ1HgqL.js +0 -1
  650. package/core/built/admin/assets/use-analytics-data-ChHqiZXv.js +0 -1
  651. package/core/built/admin/assets/use-availability-hPdeG76y.js +0 -1
  652. package/core/built/admin/assets/use-filter-params-BSFigDIn.js +0 -1
  653. package/core/built/admin/assets/use-growth-stats-CqqdnESN.js +0 -1
  654. package/core/built/admin/assets/use-limiter-DBGjYqu7.js +0 -19
  655. package/core/built/admin/assets/use-reply-chain-data-DmD2yX5D.js +0 -1
  656. package/core/built/admin/assets/use-sending-eta-CQeG6OP_.js +0 -1
  657. package/core/built/admin/assets/use-setting-group-Dza6bQ7W.js +0 -1
  658. package/core/built/admin/assets/use-settings-navigation-BIjI5mL3.js +0 -1
  659. package/core/built/admin/assets/use-simple-pagination-DwVxe-Lo.js +0 -1
  660. package/core/built/admin/assets/use-staff-users-i_Mq9OGR.js +0 -1
  661. package/core/built/admin/assets/use-tinybird-query-DXoF74NM.js +0 -1
  662. package/core/built/admin/assets/user-detail-modal-BU4QCHE7.js +0 -1
  663. package/core/built/admin/assets/virtual-list-DScLNuU8.js +0 -1
  664. package/core/built/admin/assets/web-BZS-t4H0.js +0 -1
  665. package/core/built/admin/assets/web-DxAUxnK3.js +0 -2
  666. package/core/frontend/services/sitemap/utils.js +0 -17
  667. package/core/server/services/automations/get-scheduler-idempotency-key.js +0 -13
  668. package/core/server/web/api/testmode/index.js +0 -1
  669. package/core/server/web/api/testmode/jobs/cpu-hog.js +0 -15
  670. package/core/server/web/api/testmode/jobs/graceful-job.js +0 -50
  671. package/core/server/web/api/testmode/jobs/say-hello.js +0 -17
  672. package/core/server/web/api/testmode/routes.js +0 -120
@@ -20,54 +20,44 @@ const messages = {
20
20
  tokenRequired: 'Token is required',
21
21
  };
22
22
 
23
- const validateAutomatedEmail = async function (frame) {
23
+ const validateAutomatedEmail = function (frame, isSlugRequired) {
24
24
  if (!frame.data.automated_emails || !frame.data.automated_emails[0]) {
25
- return Promise.resolve();
25
+ return;
26
26
  }
27
27
 
28
28
  const data = frame.data.automated_emails[0];
29
29
 
30
30
  if (!data.name || !ALLOWED_NAMES.includes(data.name)) {
31
- return Promise.reject(
32
- new ValidationError({
33
- message: tpl(messages.invalidName),
34
- property: 'name',
35
- }),
36
- );
31
+ throw new ValidationError({
32
+ message: tpl(messages.invalidName),
33
+ property: 'name',
34
+ });
37
35
  }
38
36
 
39
37
  if (data.status && !ALLOWED_STATUSES.includes(data.status)) {
40
- return Promise.reject(
41
- new ValidationError({
42
- message: tpl(messages.invalidStatus),
43
- property: 'status',
44
- }),
45
- );
38
+ throw new ValidationError({
39
+ message: tpl(messages.invalidStatus),
40
+ property: 'status',
41
+ });
46
42
  }
47
43
 
48
- if (data.slug && !ALLOWED_SLUGS.includes(data.slug)) {
49
- return Promise.reject(
50
- new ValidationError({
51
- message: tpl(messages.invalidSlug),
52
- property: 'slug',
53
- }),
54
- );
44
+ if ((isSlugRequired && !data.slug) || (data.slug && !ALLOWED_SLUGS.includes(data.slug))) {
45
+ throw new ValidationError({
46
+ message: tpl(messages.invalidSlug),
47
+ property: 'slug',
48
+ });
55
49
  }
56
50
 
57
51
  if (data.lexical) {
58
52
  try {
59
53
  JSON.parse(data.lexical);
60
54
  } catch (e) {
61
- return Promise.reject(
62
- new ValidationError({
63
- message: tpl(messages.invalidLexical),
64
- property: 'lexical',
65
- }),
66
- );
55
+ throw new ValidationError({
56
+ message: tpl(messages.invalidLexical),
57
+ property: 'lexical',
58
+ });
67
59
  }
68
60
  }
69
-
70
- return Promise.resolve();
71
61
  };
72
62
 
73
63
  const validateOptionalStringField = (value, errorMessage) => {
@@ -107,11 +97,11 @@ const validatePreviewData = (frame) => {
107
97
  };
108
98
 
109
99
  module.exports = {
110
- async add(apiConfig, frame) {
111
- await validateAutomatedEmail(frame);
100
+ add(apiConfig, frame) {
101
+ validateAutomatedEmail(frame, true);
112
102
  },
113
- async edit(apiConfig, frame) {
114
- await validateAutomatedEmail(frame);
103
+ edit(apiConfig, frame) {
104
+ validateAutomatedEmail(frame, false);
115
105
  },
116
106
  editSenders(apiConfig, frame) {
117
107
  const senderName = frame.data.sender_name;
@@ -28,7 +28,7 @@ const iconUrlRegex = new RegExp(/^(\/|__GHOST_URL__\/)/);
28
28
  const iconUrlOptions = { require_protocol: true, protocols: ['http', 'https'] };
29
29
 
30
30
  function parseArraySettingValue(value) {
31
- if (_.isArray(value)) {
31
+ if (Array.isArray(value)) {
32
32
  return value;
33
33
  }
34
34
 
@@ -163,10 +163,10 @@ module.exports = {
163
163
  // settings API use raw unstringified objects (e.g. when adding notifications)
164
164
  // The conditional can be removed once internals are changed to do the calls properly
165
165
  // and the JSON.parse should be left as the only valid way to check the value.
166
- if (!_.isArray(setting.value)) {
166
+ if (!Array.isArray(setting.value)) {
167
167
  try {
168
168
  const value = JSON.parse(setting.value);
169
- if (!_.isArray(value)) {
169
+ if (!Array.isArray(value)) {
170
170
  errors.push(typeError);
171
171
  }
172
172
  } catch (err) {
@@ -1,4 +1,3 @@
1
- const _ = require('lodash');
2
1
  const db = require('../../data/db');
3
2
  const commands = require('../schema').commands;
4
3
  const ghostVersion = require('@tryghost/version');
@@ -14,7 +13,7 @@ const { TABLES_ALLOWLIST, SETTING_KEYS_BLOCKLIST } = require('./table-lists');
14
13
  const exportTable = function exportTable(tableName, options) {
15
14
  if (
16
15
  TABLES_ALLOWLIST.includes(tableName) ||
17
- (options.include && _.isArray(options.include) && options.include.indexOf(tableName) !== -1)
16
+ (options.include && Array.isArray(options.include) && options.include.indexOf(tableName) !== -1)
18
17
  ) {
19
18
  const query = (options.transacting || db.knex)(tableName);
20
19
 
@@ -34,6 +34,7 @@ const BACKUP_TABLES = [
34
34
  'members_payment_events',
35
35
  'members_login_events',
36
36
  'members_email_change_events',
37
+ 'members_metafield_change_events',
37
38
  'members_status_events',
38
39
  'members_paid_subscription_events',
39
40
  'members_subscribe_events',
@@ -3,9 +3,8 @@ const path = require('path');
3
3
  const config = require('../../../../shared/config');
4
4
  const urlUtils = require('../../../../shared/url-utils').default;
5
5
  const adapterManager = require('../../../services/adapter-manager').default;
6
- let ImageHandler;
7
6
 
8
- ImageHandler = {
7
+ const ImageHandler = {
9
8
  type: 'images',
10
9
  extensions: config.get('uploads').images.extensions,
11
10
  contentTypes: config.get('uploads').images.contentTypes,
@@ -9,9 +9,7 @@ const messages = {
9
9
  checkImportJsonIsValid: 'check that the import file is valid JSON.',
10
10
  };
11
11
 
12
- let JSONHandler;
13
-
14
- JSONHandler = {
12
+ const JSONHandler = {
15
13
  type: 'data',
16
14
  extensions: ['.json'],
17
15
  contentTypes: ['application/octet-stream', 'application/json'],
@@ -5,13 +5,9 @@ const featuredImageRegex = /^(!\[]\(([^)]*?)\)\s+)(?=#)/;
5
5
  const titleRegex = /^#\s?([\w\W]*?)(?=\n)/;
6
6
  const statusRegex = /(published||draft)-/;
7
7
  const dateRegex = /(\d{4}-\d{2}-\d{2})-/;
8
- let processDateTime;
9
- let processFileName;
10
- let processMarkdownFile;
11
- let MarkdownHandler;
12
8
 
13
9
  // Takes a date from the filename in y-m-d-h-m form, and converts it into a Date ready to import
14
- processDateTime = function (post, datetime) {
10
+ const processDateTime = function (post, datetime) {
15
11
  const format = 'YYYY-MM-DD-HH-mm';
16
12
  datetime = moment.utc(datetime, format).valueOf();
17
13
 
@@ -24,7 +20,7 @@ processDateTime = function (post, datetime) {
24
20
  return post;
25
21
  };
26
22
 
27
- processFileName = function (filename) {
23
+ const processFileName = function (filename) {
28
24
  let post = {};
29
25
  let name = filename.split('.')[0];
30
26
  let match;
@@ -50,7 +46,7 @@ processFileName = function (filename) {
50
46
  return post;
51
47
  };
52
48
 
53
- processMarkdownFile = function (filename, content) {
49
+ const processMarkdownFile = function (filename, content) {
54
50
  const post = processFileName(filename);
55
51
  let match;
56
52
 
@@ -77,7 +73,7 @@ processMarkdownFile = function (filename, content) {
77
73
  return post;
78
74
  };
79
75
 
80
- MarkdownHandler = {
76
+ const MarkdownHandler = {
81
77
  type: 'data',
82
78
  extensions: ['.md', '.markdown'],
83
79
  contentTypes: ['application/octet-stream', 'text/plain'],
@@ -29,7 +29,7 @@ const messages = {
29
29
  zipContainsMultipleDataFormats:
30
30
  'Zip file contains multiple data formats. Please split up and import separately.',
31
31
  };
32
- let defaults = {
32
+ const defaults = {
33
33
  extensions: ['.zip'],
34
34
  contentTypes: ['application/zip', 'application/x-zip-compressed'],
35
35
  directories: [],
@@ -1,11 +1,7 @@
1
1
  const _ = require('lodash');
2
2
  const path = require('node:path');
3
- let replaceImage;
4
- let preProcessPosts;
5
- let preProcessTags;
6
- let preProcessUsers;
7
3
 
8
- replaceImage = function (markdown, image) {
4
+ const replaceImage = function (markdown, image) {
9
5
  if (!markdown) {
10
6
  return;
11
7
  }
@@ -34,7 +30,7 @@ replaceImage = function (markdown, image) {
34
30
  * @param {string} contentFile.originalPath
35
31
  * @param {string} contentFile.newPath
36
32
  */
37
- preProcessPosts = function (data, contentFile) {
33
+ const preProcessPosts = function (data, contentFile) {
38
34
  _.each(data.posts, function (post) {
39
35
  post.markdown = replaceImage(post.markdown, contentFile);
40
36
  if (post.html) {
@@ -52,7 +48,7 @@ preProcessPosts = function (data, contentFile) {
52
48
  });
53
49
  };
54
50
 
55
- preProcessTags = function (data, image) {
51
+ const preProcessTags = function (data, image) {
56
52
  _.each(data.tags, function (tag) {
57
53
  if (tag.feature_image) {
58
54
  tag.feature_image = replaceImage(tag.feature_image, image);
@@ -60,7 +56,7 @@ preProcessTags = function (data, image) {
60
56
  });
61
57
  };
62
58
 
63
- preProcessUsers = function (data, image) {
59
+ const preProcessUsers = function (data, image) {
64
60
  _.each(data.users, function (user) {
65
61
  if (user.cover_image) {
66
62
  user.cover_image = replaceImage(user.cover_image, image);
@@ -70,7 +70,7 @@ class Base {
70
70
  sanitizeValues() {
71
71
  _.each(this.dataToImport, (obj) => {
72
72
  _.each(_.pick(obj, ['updated_at', 'created_at', 'published_at']), (value, key) => {
73
- let temporaryDate = new Date(value);
73
+ const temporaryDate = new Date(value);
74
74
 
75
75
  if (isNaN(temporaryDate)) {
76
76
  this.problems.push({
@@ -109,11 +109,11 @@ class Base {
109
109
  }
110
110
 
111
111
  handleError(errs, obj) {
112
- let errorsToReject = [];
113
- let problems = [];
112
+ const errorsToReject = [];
113
+ const problems = [];
114
114
 
115
115
  // CASE: validation errors, see models/base/events.js onValidate
116
- if (!_.isArray(errs)) {
116
+ if (!Array.isArray(errs)) {
117
117
  errs = [errs];
118
118
  }
119
119
 
@@ -190,7 +190,7 @@ class Base {
190
190
  }
191
191
  }).id;
192
192
 
193
- let userReferenceProblems = {};
193
+ const userReferenceProblems = {};
194
194
 
195
195
  const handleObject = (obj, key) => {
196
196
  if (!Object.prototype.hasOwnProperty.call(obj, key)) {
@@ -214,11 +214,11 @@ class Base {
214
214
  }
215
215
 
216
216
  // CASE: first match the user reference with in the imported file
217
- let userFromFile = _.find(this.requiredFromFile.users, { id: obj[key] });
217
+ const userFromFile = _.find(this.requiredFromFile.users, { id: obj[key] });
218
218
 
219
219
  if (!userFromFile) {
220
220
  // CASE: if user does not exist in file, try to lookup the existing db users
221
- let existingUser = _.find(this.requiredExistingData.users, { id: obj[key].toString() });
221
+ const existingUser = _.find(this.requiredExistingData.users, { id: obj[key].toString() });
222
222
 
223
223
  // CASE: fallback to owner
224
224
  if (!existingUser) {
@@ -240,7 +240,7 @@ class Base {
240
240
  // Result: `this.requiredImportedData.users` will be empty.
241
241
  // We already generate identifiers for each object in the importer layer. Accessible via `dataToImport`.
242
242
  if (this.modelName === 'User' && !this.requiredImportedData.users.length) {
243
- let userToImport = _.find(this.dataToImport, { slug: userFromFile.slug });
243
+ const userToImport = _.find(this.dataToImport, { slug: userFromFile.slug });
244
244
 
245
245
  if (userToImport) {
246
246
  obj[key] = userToImport.id;
@@ -253,7 +253,7 @@ class Base {
253
253
 
254
254
  // CASE: user exists in the file, let's find his db id
255
255
  // NOTE: lookup by email, because slug can change on insert
256
- let importedUser = _.find(this.requiredImportedData.users, { email: userFromFile.email });
256
+ const importedUser = _.find(this.requiredImportedData.users, { email: userFromFile.email });
257
257
 
258
258
  // CASE: found. let's assign the new ID
259
259
  if (importedUser) {
@@ -320,7 +320,7 @@ class Base {
320
320
  async doImport(options, importOptions) {
321
321
  debug('doImport', this.modelName, this.dataToImport.length);
322
322
 
323
- let ops = [];
323
+ const ops = [];
324
324
 
325
325
  _.each(this.dataToImport, (obj, index) => {
326
326
  ops.push(async () => {
@@ -20,7 +20,7 @@ class CustomThemeSettingsImporter extends BaseImporter {
20
20
  async doImport(options, importOptions) {
21
21
  debug('doImport', this.modelName, this.dataToImport.length);
22
22
 
23
- let ops = [];
23
+ const ops = [];
24
24
 
25
25
  _.each(this.dataToImport, (item) => {
26
26
  ops.push(async () => {
@@ -17,10 +17,9 @@ const RevueSubscriberImporter = require('./revue-subscriber-importer');
17
17
  const RolesImporter = require('./roles-importer');
18
18
  const { slugify } = require('@tryghost/string/lib');
19
19
 
20
- let importers = {};
21
- let DataImporter;
20
+ const importers = {};
22
21
 
23
- DataImporter = {
22
+ const DataImporter = {
24
23
  type: 'data',
25
24
 
26
25
  preProcess: function preProcess(importData) {
@@ -78,7 +77,7 @@ DataImporter = {
78
77
  const ops = [];
79
78
  let problems = [];
80
79
  let errors = [];
81
- let importedData = {};
80
+ const importedData = {};
82
81
 
83
82
  const modelOptions = {
84
83
  importing: true,
@@ -57,9 +57,9 @@ class PostsImporter extends BaseImporter {
57
57
  * Sanitizes post metadata, picking data from sepearate table(for >= v3) or post itself(for < v3)
58
58
  */
59
59
  sanitizePostsMeta(model) {
60
- let postsMetaFromFile =
60
+ const postsMetaFromFile =
61
61
  _.find(this.requiredFromFile.posts_meta, { post_id: model.id }) || _.pick(model, metaAttrs);
62
- let postsMetaData = Object.assign(
62
+ const postsMetaData = Object.assign(
63
63
  {},
64
64
  _.mapValues(postsMetaSchema, (value) => {
65
65
  return Reflect.has(value, 'defaultTo') ? value.defaultTo : null;
@@ -103,14 +103,14 @@ class PostsImporter extends BaseImporter {
103
103
  return;
104
104
  }
105
105
 
106
- let postToImport = _.find(this.dataToImport, { id: relation.post_id });
106
+ const postToImport = _.find(this.dataToImport, { id: relation.post_id });
107
107
 
108
108
  // CASE: we won't import a relation when the target post does not exist
109
109
  if (!postToImport) {
110
110
  return;
111
111
  }
112
112
 
113
- if (!postToImport[target] || !_.isArray(postToImport[target])) {
113
+ if (!postToImport[target] || !Array.isArray(postToImport[target])) {
114
114
  postToImport[target] = [];
115
115
  }
116
116
 
@@ -143,13 +143,13 @@ class PostsImporter extends BaseImporter {
143
143
  return;
144
144
  }
145
145
 
146
- let indexesToRemove = [];
146
+ const indexesToRemove = [];
147
147
  _.each(postToImport[targetProperty], (object, index) => {
148
148
  // this is the original relational object (old id)
149
- let objectInFile = _.find(this.requiredFromFile[tableName], { id: object.id });
149
+ const objectInFile = _.find(this.requiredFromFile[tableName], { id: object.id });
150
150
 
151
151
  if (!objectInFile) {
152
- let existingObject = _.find(this.requiredExistingData[tableName], { id: object.id });
152
+ const existingObject = _.find(this.requiredExistingData[tableName], { id: object.id });
153
153
 
154
154
  // CASE: is not in file, is not in db
155
155
  if (!existingObject) {
@@ -177,7 +177,7 @@ class PostsImporter extends BaseImporter {
177
177
  }
178
178
 
179
179
  // CASE: search through existing data by unique attribute
180
- let existingObject = _.find(this.requiredExistingData[tableName], {
180
+ const existingObject = _.find(this.requiredExistingData[tableName], {
181
181
  slug: objectInFile.slug,
182
182
  });
183
183
 
@@ -274,7 +274,7 @@ class PostsImporter extends BaseImporter {
274
274
  try {
275
275
  mobiledoc = JSON.parse(model.mobiledoc);
276
276
 
277
- if (!mobiledoc.cards || !_.isArray(mobiledoc.cards)) {
277
+ if (!mobiledoc.cards || !Array.isArray(mobiledoc.cards)) {
278
278
  mobiledoc = mobiledocLib.blankDocument;
279
279
  }
280
280
  } catch (err) {
@@ -317,7 +317,7 @@ class PostsImporter extends BaseImporter {
317
317
 
318
318
  // NOTE: We only support removing duplicate posts within the file to import.
319
319
  // For any further future duplication detection, see https://github.com/TryGhost/Ghost/issues/8717.
320
- let slugs = [];
320
+ const slugs = [];
321
321
  this.dataToImport = _.filter(this.dataToImport, (post) => {
322
322
  if (!!post.slug && slugs.indexOf(post.slug) !== -1) {
323
323
  this.problems.push({
@@ -63,7 +63,7 @@ class ProductsImporter extends BaseImporter {
63
63
  validateStripePrice() {
64
64
  // the stripe price either needs to exist in the current db,
65
65
  // or be imported as part of the same import
66
- let invalidProducts = [];
66
+ const invalidProducts = [];
67
67
  _.each(['monthly_price_id', 'yearly_price_id'], (field) => {
68
68
  _.each(this.dataToImport, (objectInFile) => {
69
69
  const importedObject = _.find(this.requiredFromFile.stripe_prices, {
@@ -90,7 +90,7 @@ class ProductsImporter extends BaseImporter {
90
90
 
91
91
  preventDuplicates() {
92
92
  debug('preventDuplicates');
93
- let duplicateProducts = [];
93
+ const duplicateProducts = [];
94
94
  _.each(this.dataToImport, (objectInFile) => {
95
95
  const existingObject = _.find(this.requiredExistingData.products, {
96
96
  name: objectInFile.name,
@@ -114,7 +114,7 @@ class ProductsImporter extends BaseImporter {
114
114
  }
115
115
 
116
116
  preventInvalidFree() {
117
- let invalidFreeProducts = [];
117
+ const invalidFreeProducts = [];
118
118
  _.each(this.dataToImport, (product) => {
119
119
  // A free product must not have any pricing data (otherwise it wouldn't be free, duh!)
120
120
  if (
@@ -145,7 +145,7 @@ class SettingsImporter extends BaseImporter {
145
145
 
146
146
  if (deprecatedSettingValue) {
147
147
  deprecatedSupportedSettingsOneToManyMap[key].forEach(({ from, to }) => {
148
- let value = _.isObject(deprecatedSettingValue)
148
+ const value = _.isObject(deprecatedSettingValue)
149
149
  ? _.get(deprecatedSettingValue, from)
150
150
  : deprecatedSetting.value;
151
151
 
@@ -274,7 +274,7 @@ class SettingsImporter extends BaseImporter {
274
274
  async doImport(options) {
275
275
  debug('doImport', this.dataToImport.length);
276
276
 
277
- let ops = [];
277
+ const ops = [];
278
278
 
279
279
  _.each(this.dataToImport, (model) => {
280
280
  ops.push(async () => {
@@ -23,7 +23,7 @@ class StripePricesImporter extends BaseImporter {
23
23
 
24
24
  validateStripeProduct() {
25
25
  // ensure we have a valid stripe_product_id in the stripe_products table
26
- let invalidPrices = [];
26
+ const invalidPrices = [];
27
27
  _.each(this.dataToImport, (objectInFile) => {
28
28
  const importedObject = _.find(this.requiredImportedData.stripe_products, {
29
29
  stripe_product_id: objectInFile.stripe_product_id,
@@ -34,7 +34,7 @@ class StripeProductsImporter extends BaseImporter {
34
34
  debug('replaceIdentifiers');
35
35
 
36
36
  // map product_id -> product.id
37
- let invalidProducts = [];
37
+ const invalidProducts = [];
38
38
  _.each(this.dataToImport, (objectInFile) => {
39
39
  const importedObject = _.find(this.requiredImportedData.products, {
40
40
  originalId: objectInFile.product_id,
@@ -36,7 +36,7 @@ class TagsImporter extends BaseImporter {
36
36
  async doImport(options, importOptions) {
37
37
  debug('doImport', this.modelName, this.dataToImport.length);
38
38
 
39
- let ops = [];
39
+ const ops = [];
40
40
 
41
41
  _.each(this.dataToImport, (obj) => {
42
42
  ops.push(async () => {
@@ -33,7 +33,7 @@ class UsersImporter extends BaseImporter {
33
33
  debug('beforeImport');
34
34
 
35
35
  let role;
36
- let lookup = {};
36
+ const lookup = {};
37
37
 
38
38
  // NOTE: sort out duplicated roles based on incremental id
39
39
  _.each(this.requiredFromFile.roles_users, (attachedRole) => {
@@ -70,7 +70,7 @@ class UsersImporter extends BaseImporter {
70
70
 
71
71
  _.each(this.dataToImport, (obj) => {
72
72
  if (attachedRole.user_id === obj.id) {
73
- if (!_.isArray(obj.roles)) {
73
+ if (!Array.isArray(obj.roles)) {
74
74
  obj.roles = [];
75
75
  }
76
76
 
@@ -25,9 +25,9 @@ const getValidURL = (url) => {
25
25
 
26
26
  // Take the array of items for a specific post and return the converted HTML
27
27
  const itemsToHtml = (items) => {
28
- let itemHTMLChunks = [];
28
+ const itemHTMLChunks = [];
29
29
  items.forEach((item) => {
30
- let type = item.item_type;
30
+ const type = item.item_type;
31
31
 
32
32
  if (type === 'header') {
33
33
  itemHTMLChunks.push(`<h3>${item.title}</h3>`);
@@ -37,7 +37,7 @@ const itemsToHtml = (items) => {
37
37
  // We have 2 values to work with here. `image` is smaller and most suitable, and `original_image_url` is the full-res that would need to be resized
38
38
  // - item.image (https://s3.amazonaws.com/revue/items/images/019/005/542/web/anita-austvika-C-JUrfmYqcw-unsplash.jpg?1667924147)
39
39
  // - item.original_image_url (https://s3.amazonaws.com/revue/items/images/019/005/542/original/anita-austvika-C-JUrfmYqcw-unsplash.jpg?1667924147)
40
- let cardOpts = {
40
+ const cardOpts = {
41
41
  env: { dom: new SimpleDom.Document() },
42
42
  payload: {
43
43
  src: item.image,
@@ -50,7 +50,7 @@ const itemsToHtml = (items) => {
50
50
  // This could be a bookmark, or it could be a paragraph of text with a linked header, there's no way to tell
51
51
  // The safest option here is to output an image with text under it
52
52
  const itemURL = getValidURL(item.url);
53
- let cardOpts = {
53
+ const cardOpts = {
54
54
  env: { dom: new SimpleDom.Document() },
55
55
  payload: {
56
56
  src: item.image,
@@ -62,7 +62,7 @@ const itemsToHtml = (items) => {
62
62
  const linkTitleHTML = itemURL
63
63
  ? `<a href="${serializer.escapeAttrValue(itemURL)}">${item.title}</a>`
64
64
  : item.title;
65
- let linkHTML = `<h4>${linkTitleHTML}</h4>${item.description}`;
65
+ const linkHTML = `<h4>${linkTitleHTML}</h4>${item.description}`;
66
66
  itemHTMLChunks.push(linkHTML);
67
67
  } else if (type === 'tweet') {
68
68
  // Should this be an oEmbed call? Probably.
@@ -76,19 +76,22 @@ const itemsToHtml = (items) => {
76
76
  const isVimeo = /vimeo.com/.test(item.url);
77
77
  let videoHTML = '';
78
78
  if (isLongYouTube) {
79
- let videoID = item.url.replace(
79
+ const videoID = item.url.replace(
80
80
  /https?:\/\/(?:www\.)?youtube\.com\/watch\?v=([a-zA-Z0-9_-]*)/gi,
81
81
  '$1',
82
82
  );
83
83
  videoHTML = `<iframe width="200" height="113" src="https://www.youtube.com/embed/${videoID}?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>`;
84
84
  } else if (isShortYouTube) {
85
- let videoID = item.url.replace(/https?:\/\/(?:www\.)?youtu\.be\/([a-zA-Z0-9_-]*)/gi, '$1');
85
+ const videoID = item.url.replace(
86
+ /https?:\/\/(?:www\.)?youtu\.be\/([a-zA-Z0-9_-]*)/gi,
87
+ '$1',
88
+ );
86
89
  videoHTML = `<iframe width="200" height="113" src="https://www.youtube.com/embed/${videoID}?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>`;
87
90
  } else if (isVimeo) {
88
- let videoID = item.url.replace(/https?:\/\/(?:www\.)?vimeo\.com\/([0-9]+)/gi, '$1');
91
+ const videoID = item.url.replace(/https?:\/\/(?:www\.)?vimeo\.com\/([0-9]+)/gi, '$1');
89
92
  videoHTML = `<iframe src="https://player.vimeo.com/video/${videoID}" width="200" height="113" frameborder="0" allow="autoplay; fullscreen; picture-in-picture" allowfullscreen></iframe>`;
90
93
  }
91
- let cardOpts = {
94
+ const cardOpts = {
92
95
  env: { dom: new SimpleDom.Document() },
93
96
  payload: {
94
97
  html: videoHTML,
@@ -27,7 +27,7 @@ module.exports = createTransactionalMigration(
27
27
  _.find(settings, { key: renameMapping.to }) &&
28
28
  _.find(settings, { key: renameMapping.from })
29
29
  ) {
30
- let updatedValue = _.find(settings, { key: renameMapping.from }).value;
30
+ const updatedValue = _.find(settings, { key: renameMapping.from }).value;
31
31
  // CASE: default settings were added already, update them with old values & remove old settings
32
32
  logging.info(`Updating ${renameMapping.to} with value from ${renameMapping.from}`);
33
33
  await knex('settings').where('key', renameMapping.to).update('value', updatedValue);
@@ -0,0 +1,17 @@
1
+ const { addTable } = require('../../utils');
2
+
3
+ module.exports = addTable('members_metafield_change_events', {
4
+ id: { type: 'string', maxlength: 24, nullable: false, primary: true },
5
+ member_id: {
6
+ type: 'string',
7
+ maxlength: 24,
8
+ nullable: false,
9
+ references: 'members.id',
10
+ cascadeDelete: true,
11
+ },
12
+ written_by_type: { type: 'string', maxlength: 50, nullable: false },
13
+ written_by_id: { type: 'string', maxlength: 24, nullable: true },
14
+ source: { type: 'string', maxlength: 50, nullable: false },
15
+ metafields: { type: 'text', maxlength: 16777215, fieldtype: 'medium', nullable: false },
16
+ created_at: { type: 'dateTime', nullable: false },
17
+ });
@@ -55,11 +55,11 @@ class FixtureManager {
55
55
  * @returns {Function} matching function
56
56
  */
57
57
  static matchFunc(match, key, value) {
58
- if (_.isArray(match)) {
58
+ if (Array.isArray(match)) {
59
59
  return function (item) {
60
60
  let valueTest = true;
61
61
 
62
- if (_.isArray(value)) {
62
+ if (Array.isArray(value)) {
63
63
  valueTest = value.indexOf(item.get(match[1])) > -1;
64
64
  } else if (value !== 'all') {
65
65
  valueTest = item.get(match[1]) === value;
@@ -78,7 +78,7 @@ class FixtureManager {
78
78
  static matchObj(match, item) {
79
79
  const matchedObj = {};
80
80
 
81
- if (_.isArray(match)) {
81
+ if (Array.isArray(match)) {
82
82
  _.each(match, (matchProp) => {
83
83
  matchedObj[matchProp] = item.get(matchProp);
84
84
  });
@@ -2,4 +2,4 @@ module.exports.tables = require('./schema');
2
2
  module.exports.views = require('./views');
3
3
  module.exports.commands = require('./commands');
4
4
  module.exports.defaultSettings = require('./default-settings');
5
- module.exports.validate = require('./validator');
5
+ module.exports.validate = require('./validator').validateSchema;