ghost 5.53.4 → 5.54.1

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 (291) hide show
  1. package/README.md +1 -1
  2. package/components/tryghost-adapter-cache-memory-ttl-5.54.1.tgz +0 -0
  3. package/components/tryghost-adapter-cache-redis-5.54.1.tgz +0 -0
  4. package/components/{tryghost-adapter-manager-5.53.4.tgz → tryghost-adapter-manager-5.54.1.tgz} +0 -0
  5. package/components/tryghost-announcement-bar-settings-5.54.1.tgz +0 -0
  6. package/components/{tryghost-api-framework-5.53.4.tgz → tryghost-api-framework-5.54.1.tgz} +0 -0
  7. package/components/{tryghost-api-version-compatibility-service-5.53.4.tgz → tryghost-api-version-compatibility-service-5.54.1.tgz} +0 -0
  8. package/components/tryghost-audience-feedback-5.54.1.tgz +0 -0
  9. package/components/tryghost-bootstrap-socket-5.54.1.tgz +0 -0
  10. package/components/tryghost-collections-5.54.1.tgz +0 -0
  11. package/components/tryghost-constants-5.54.1.tgz +0 -0
  12. package/components/tryghost-custom-theme-settings-service-5.54.1.tgz +0 -0
  13. package/components/{tryghost-data-generator-5.53.4.tgz → tryghost-data-generator-5.54.1.tgz} +0 -0
  14. package/components/tryghost-domain-events-5.54.1.tgz +0 -0
  15. package/components/tryghost-dynamic-routing-events-5.54.1.tgz +0 -0
  16. package/components/tryghost-email-analytics-provider-mailgun-5.54.1.tgz +0 -0
  17. package/components/tryghost-email-analytics-service-5.54.1.tgz +0 -0
  18. package/components/tryghost-email-content-generator-5.54.1.tgz +0 -0
  19. package/components/tryghost-email-events-5.54.1.tgz +0 -0
  20. package/components/tryghost-email-service-5.54.1.tgz +0 -0
  21. package/components/tryghost-email-suppression-list-5.54.1.tgz +0 -0
  22. package/components/tryghost-event-aware-cache-wrapper-5.54.1.tgz +0 -0
  23. package/components/tryghost-express-dynamic-redirects-5.54.1.tgz +0 -0
  24. package/components/tryghost-external-media-inliner-5.54.1.tgz +0 -0
  25. package/components/{tryghost-extract-api-key-5.53.4.tgz → tryghost-extract-api-key-5.54.1.tgz} +0 -0
  26. package/components/{tryghost-html-to-plaintext-5.53.4.tgz → tryghost-html-to-plaintext-5.54.1.tgz} +0 -0
  27. package/components/tryghost-i18n-5.54.1.tgz +0 -0
  28. package/components/{tryghost-importer-handler-content-files-5.53.4.tgz → tryghost-importer-handler-content-files-5.54.1.tgz} +0 -0
  29. package/components/tryghost-importer-revue-5.54.1.tgz +0 -0
  30. package/components/tryghost-in-memory-repository-5.54.1.tgz +0 -0
  31. package/components/{tryghost-job-manager-5.53.4.tgz → tryghost-job-manager-5.54.1.tgz} +0 -0
  32. package/components/tryghost-link-redirects-5.54.1.tgz +0 -0
  33. package/components/tryghost-link-replacer-5.54.1.tgz +0 -0
  34. package/components/{tryghost-link-tracking-5.53.4.tgz → tryghost-link-tracking-5.54.1.tgz} +0 -0
  35. package/components/{tryghost-magic-link-5.53.4.tgz → tryghost-magic-link-5.54.1.tgz} +0 -0
  36. package/components/tryghost-mail-events-5.54.1.tgz +0 -0
  37. package/components/tryghost-mailgun-client-5.54.1.tgz +0 -0
  38. package/components/tryghost-member-attribution-5.54.1.tgz +0 -0
  39. package/components/tryghost-member-events-5.54.1.tgz +0 -0
  40. package/components/tryghost-members-api-5.54.1.tgz +0 -0
  41. package/components/tryghost-members-csv-5.54.1.tgz +0 -0
  42. package/components/{tryghost-members-events-service-5.53.4.tgz → tryghost-members-events-service-5.54.1.tgz} +0 -0
  43. package/components/tryghost-members-importer-5.54.1.tgz +0 -0
  44. package/components/tryghost-members-offers-5.54.1.tgz +0 -0
  45. package/components/tryghost-members-payments-5.54.1.tgz +0 -0
  46. package/components/tryghost-members-ssr-5.54.1.tgz +0 -0
  47. package/components/tryghost-members-stripe-service-5.54.1.tgz +0 -0
  48. package/components/tryghost-mentions-email-report-5.54.1.tgz +0 -0
  49. package/components/tryghost-milestones-5.54.1.tgz +0 -0
  50. package/components/tryghost-minifier-5.54.1.tgz +0 -0
  51. package/components/tryghost-model-to-domain-event-interceptor-5.54.1.tgz +0 -0
  52. package/components/tryghost-mw-api-version-mismatch-5.54.1.tgz +0 -0
  53. package/components/tryghost-mw-cache-control-5.54.1.tgz +0 -0
  54. package/components/{tryghost-mw-error-handler-5.53.4.tgz → tryghost-mw-error-handler-5.54.1.tgz} +0 -0
  55. package/components/tryghost-mw-session-from-token-5.54.1.tgz +0 -0
  56. package/components/tryghost-mw-update-user-last-seen-5.54.1.tgz +0 -0
  57. package/components/tryghost-mw-version-match-5.54.1.tgz +0 -0
  58. package/components/tryghost-mw-vhost-5.54.1.tgz +0 -0
  59. package/components/tryghost-oembed-service-5.54.1.tgz +0 -0
  60. package/components/{tryghost-package-json-5.53.4.tgz → tryghost-package-json-5.54.1.tgz} +0 -0
  61. package/components/tryghost-post-revisions-5.54.1.tgz +0 -0
  62. package/components/tryghost-posts-service-5.54.1.tgz +0 -0
  63. package/components/tryghost-referrers-5.54.1.tgz +0 -0
  64. package/components/{tryghost-security-5.53.4.tgz → tryghost-security-5.54.1.tgz} +0 -0
  65. package/components/tryghost-session-service-5.54.1.tgz +0 -0
  66. package/components/tryghost-settings-path-manager-5.54.1.tgz +0 -0
  67. package/components/tryghost-slack-notifications-5.54.1.tgz +0 -0
  68. package/components/tryghost-staff-service-5.54.1.tgz +0 -0
  69. package/components/{tryghost-stats-service-5.53.4.tgz → tryghost-stats-service-5.54.1.tgz} +0 -0
  70. package/components/{tryghost-tiers-5.53.4.tgz → tryghost-tiers-5.54.1.tgz} +0 -0
  71. package/components/tryghost-update-check-service-5.54.1.tgz +0 -0
  72. package/components/{tryghost-verification-trigger-5.53.4.tgz → tryghost-verification-trigger-5.54.1.tgz} +0 -0
  73. package/components/tryghost-version-notifications-data-service-5.54.1.tgz +0 -0
  74. package/components/{tryghost-webmentions-5.53.4.tgz → tryghost-webmentions-5.54.1.tgz} +0 -0
  75. package/content/themes/casper/assets/built/global.css +1 -1
  76. package/content/themes/casper/assets/built/global.css.map +1 -1
  77. package/content/themes/casper/assets/built/screen.css +1 -1
  78. package/content/themes/casper/assets/built/screen.css.map +1 -1
  79. package/content/themes/casper/assets/css/global.css +1 -13
  80. package/content/themes/casper/assets/css/screen.css +18 -0
  81. package/content/themes/casper/default.hbs +4 -0
  82. package/content/themes/casper/package.json +1 -1
  83. package/content/themes/casper/page.hbs +26 -24
  84. package/core/boot.js +0 -8
  85. package/core/frontend/services/apps/loader.js +4 -4
  86. package/core/frontend/services/data/entry-lookup.js +0 -1
  87. package/core/frontend/services/data/fetch-data.js +15 -10
  88. package/core/frontend/services/proxy.js +3 -0
  89. package/core/frontend/services/rendering/format-response.js +27 -1
  90. package/core/frontend/services/rendering/render-entry.js +1 -1
  91. package/core/frontend/services/routing/controllers/static.js +10 -8
  92. package/core/frontend/services/rss/generate-feed.js +0 -1
  93. package/core/frontend/src/cards/css/signup.css +4 -4
  94. package/core/server/adapters/storage/LocalStorageBase.js +0 -1
  95. package/core/server/api/endpoints/authentication.js +0 -1
  96. package/core/server/api/endpoints/authors-public.js +0 -1
  97. package/core/server/api/endpoints/db.js +5 -5
  98. package/core/server/api/endpoints/invites.js +0 -1
  99. package/core/server/api/endpoints/labels.js +0 -1
  100. package/core/server/api/endpoints/mail.js +0 -1
  101. package/core/server/api/endpoints/session.js +0 -1
  102. package/core/server/api/endpoints/snippets.js +0 -1
  103. package/core/server/api/endpoints/tags-public.js +0 -1
  104. package/core/server/api/endpoints/tags.js +0 -1
  105. package/core/server/api/endpoints/users.js +0 -1
  106. package/core/server/api/endpoints/utils/permissions.js +0 -1
  107. package/core/server/api/endpoints/utils/serializers/output/mappers/posts.js +1 -1
  108. package/core/server/api/endpoints/utils/serializers/output/roles.js +17 -12
  109. package/core/server/api/endpoints/utils/serializers/output/utils/clean.js +4 -0
  110. package/core/server/api/endpoints/utils/validators/input/invitations.js +0 -1
  111. package/core/server/api/endpoints/utils/validators/input/invites.js +0 -1
  112. package/core/server/api/endpoints/utils/validators/input/oembed.js +0 -1
  113. package/core/server/api/endpoints/utils/validators/input/password_reset.js +0 -1
  114. package/core/server/api/endpoints/utils/validators/input/settings.js +0 -1
  115. package/core/server/api/endpoints/utils/validators/input/users.js +0 -1
  116. package/core/server/data/importer/importers/data/PostsImporter.js +2 -2
  117. package/core/server/data/migrations/hooks/init/before.js +0 -1
  118. package/core/server/data/migrations/hooks/migrate/afterEach.js +0 -1
  119. package/core/server/data/migrations/hooks/migrate/beforeEach.js +0 -1
  120. package/core/server/data/migrations/versions/5.54/2023-07-07-11-57-add-show-title-and-feature-image-column-to-posts.js +7 -0
  121. package/core/server/data/schema/commands.js +0 -1
  122. package/core/server/data/schema/schema.js +1 -0
  123. package/core/server/data/schema/validator.js +0 -2
  124. package/core/server/lib/image/BlogIcon.js +2 -3
  125. package/core/server/lib/image/Gravatar.js +0 -1
  126. package/core/server/lib/image/ImageSize.js +6 -7
  127. package/core/server/models/base/listeners.js +3 -3
  128. package/core/server/models/base/utils.js +0 -1
  129. package/core/server/models/invite.js +0 -1
  130. package/core/server/models/post.js +2 -2
  131. package/core/server/models/role.js +0 -1
  132. package/core/server/models/user.js +7 -8
  133. package/core/server/models/webhook.js +0 -1
  134. package/core/server/services/collections/intercept-events.js +10 -0
  135. package/core/server/services/collections/service.js +7 -7
  136. package/core/server/services/notifications/Notifications.js +0 -1
  137. package/core/server/services/permissions/can-this.js +0 -1
  138. package/core/server/services/permissions/providers.js +0 -1
  139. package/core/server/services/route-settings/DefaultSettingsManager.js +0 -1
  140. package/core/server/services/route-settings/RouteSettings.js +3 -2
  141. package/core/server/services/webhooks/payload.js +0 -1
  142. package/core/server/web/shared/middleware/api/spam-prevention.js +1 -1
  143. package/core/shared/labs.js +5 -2
  144. package/package.json +181 -161
  145. package/yarn.lock +1739 -3319
  146. package/components/tryghost-adapter-cache-memory-ttl-5.53.4.tgz +0 -0
  147. package/components/tryghost-adapter-cache-redis-5.53.4.tgz +0 -0
  148. package/components/tryghost-announcement-bar-settings-5.53.4.tgz +0 -0
  149. package/components/tryghost-audience-feedback-5.53.4.tgz +0 -0
  150. package/components/tryghost-bootstrap-socket-5.53.4.tgz +0 -0
  151. package/components/tryghost-collections-5.53.4.tgz +0 -0
  152. package/components/tryghost-constants-5.53.4.tgz +0 -0
  153. package/components/tryghost-custom-theme-settings-service-5.53.4.tgz +0 -0
  154. package/components/tryghost-domain-events-5.53.4.tgz +0 -0
  155. package/components/tryghost-dynamic-routing-events-5.53.4.tgz +0 -0
  156. package/components/tryghost-email-analytics-provider-mailgun-5.53.4.tgz +0 -0
  157. package/components/tryghost-email-analytics-service-5.53.4.tgz +0 -0
  158. package/components/tryghost-email-content-generator-5.53.4.tgz +0 -0
  159. package/components/tryghost-email-events-5.53.4.tgz +0 -0
  160. package/components/tryghost-email-service-5.53.4.tgz +0 -0
  161. package/components/tryghost-email-suppression-list-5.53.4.tgz +0 -0
  162. package/components/tryghost-event-aware-cache-wrapper-5.53.4.tgz +0 -0
  163. package/components/tryghost-express-dynamic-redirects-5.53.4.tgz +0 -0
  164. package/components/tryghost-external-media-inliner-5.53.4.tgz +0 -0
  165. package/components/tryghost-i18n-5.53.4.tgz +0 -0
  166. package/components/tryghost-importer-revue-5.53.4.tgz +0 -0
  167. package/components/tryghost-in-memory-repository-5.53.4.tgz +0 -0
  168. package/components/tryghost-link-redirects-5.53.4.tgz +0 -0
  169. package/components/tryghost-link-replacer-5.53.4.tgz +0 -0
  170. package/components/tryghost-mail-events-5.53.4.tgz +0 -0
  171. package/components/tryghost-mailgun-client-5.53.4.tgz +0 -0
  172. package/components/tryghost-member-attribution-5.53.4.tgz +0 -0
  173. package/components/tryghost-member-events-5.53.4.tgz +0 -0
  174. package/components/tryghost-members-api-5.53.4.tgz +0 -0
  175. package/components/tryghost-members-csv-5.53.4.tgz +0 -0
  176. package/components/tryghost-members-importer-5.53.4.tgz +0 -0
  177. package/components/tryghost-members-offers-5.53.4.tgz +0 -0
  178. package/components/tryghost-members-payments-5.53.4.tgz +0 -0
  179. package/components/tryghost-members-ssr-5.53.4.tgz +0 -0
  180. package/components/tryghost-members-stripe-service-5.53.4.tgz +0 -0
  181. package/components/tryghost-mentions-email-report-5.53.4.tgz +0 -0
  182. package/components/tryghost-milestones-5.53.4.tgz +0 -0
  183. package/components/tryghost-minifier-5.53.4.tgz +0 -0
  184. package/components/tryghost-mw-api-version-mismatch-5.53.4.tgz +0 -0
  185. package/components/tryghost-mw-cache-control-5.53.4.tgz +0 -0
  186. package/components/tryghost-mw-session-from-token-5.53.4.tgz +0 -0
  187. package/components/tryghost-mw-update-user-last-seen-5.53.4.tgz +0 -0
  188. package/components/tryghost-mw-version-match-5.53.4.tgz +0 -0
  189. package/components/tryghost-mw-vhost-5.53.4.tgz +0 -0
  190. package/components/tryghost-oembed-service-5.53.4.tgz +0 -0
  191. package/components/tryghost-post-revisions-5.53.4.tgz +0 -0
  192. package/components/tryghost-posts-service-5.53.4.tgz +0 -0
  193. package/components/tryghost-referrers-5.53.4.tgz +0 -0
  194. package/components/tryghost-session-service-5.53.4.tgz +0 -0
  195. package/components/tryghost-settings-path-manager-5.53.4.tgz +0 -0
  196. package/components/tryghost-slack-notifications-5.53.4.tgz +0 -0
  197. package/components/tryghost-staff-service-5.53.4.tgz +0 -0
  198. package/components/tryghost-update-check-service-5.53.4.tgz +0 -0
  199. package/components/tryghost-version-notifications-data-service-5.53.4.tgz +0 -0
  200. package/core/built/admin/assets/chunk.143.f2d9c8138f58822ff602.js +0 -35
  201. package/core/built/admin/assets/chunk.178.61bd07fdecafaa04e917.js +0 -11
  202. package/core/built/admin/assets/chunk.976.64982d690133b4ba977b.js +0 -12712
  203. package/core/built/admin/assets/chunk.976.64982d690133b4ba977b.js.LICENSE.txt +0 -250
  204. package/core/built/admin/assets/codemirror/codemirror-31d641cdd0cb3388688402609608cb10.js +0 -1440
  205. package/core/built/admin/assets/fonts/Inter-italic.var.woff2 +0 -0
  206. package/core/built/admin/assets/fonts/Inter-roman.var.woff2 +0 -0
  207. package/core/built/admin/assets/ghost-69a3b39781fc4aca282abd2ebf232e60.js +0 -6643
  208. package/core/built/admin/assets/ghost-7ed28c8f2ec8aaa157a0d8e693c4173d.css +0 -1
  209. package/core/built/admin/assets/ghost-dark-d8ff14f0db8a03f04d342792d7126348.css +0 -1
  210. package/core/built/admin/assets/img/404-ghost-e112dbfadde79cf30dbca8e8cfe7a21a.png +0 -0
  211. package/core/built/admin/assets/img/404-ghost@2x-34c1119ed15cc3ea71e4406f80c8e810.png +0 -0
  212. package/core/built/admin/assets/img/amp-d7b72aae3315fda95921fb575dfca100.svg +0 -4
  213. package/core/built/admin/assets/img/apple-touch-icon-74680e326a7e87b159d366c7d4fb3d4b.png +0 -0
  214. package/core/built/admin/assets/img/buffer-db31f6b5dc27a298050e16312619c586.png +0 -0
  215. package/core/built/admin/assets/img/community-background-3f501ff1d764d0cb81f7c2cbacfc6503.jpg +0 -0
  216. package/core/built/admin/assets/img/disqus-43503a3fa4f38dc8c61c7358b811f343.svg +0 -4
  217. package/core/built/admin/assets/img/favicon-a9c6dbdcdc3ae568f4e0dad92149a0e3.ico +0 -0
  218. package/core/built/admin/assets/img/firstpromoter-ce8b5219e5b5ebda463bd60396c6ab81.png +0 -0
  219. package/core/built/admin/assets/img/footer-marketplace-bg-572b6c6486a7e26316954d599eaa9f30.png +0 -0
  220. package/core/built/admin/assets/img/github-c3a739c59df26fed12c10ffb00b33bd4.svg +0 -4
  221. package/core/built/admin/assets/img/google-analytics-e05fc1327377939663407200d4978eba.png +0 -0
  222. package/core/built/admin/assets/img/google-docs-1e42cc272fc088da49e4b0ddfb01b006.svg +0 -6
  223. package/core/built/admin/assets/img/large-ac90af7c93a4b47e8d956fa9fef31d9d.png +0 -0
  224. package/core/built/admin/assets/img/latest-posts-1-ea1e669b275f2c7dfa23abd4be8d7ad5.png +0 -0
  225. package/core/built/admin/assets/img/latest-posts-2-e6b0809353ac31642839a6f3bab0d4e8.png +0 -0
  226. package/core/built/admin/assets/img/latest-posts-3-ac8c2e95dd9adecb9029a7b037ed7f15.png +0 -0
  227. package/core/built/admin/assets/img/loadingcat-5f501b7a8c7bd54b253463e261c99634.gif +0 -0
  228. package/core/built/admin/assets/img/logos/ghost-logo-black-1-fb561a374422b405ec90fa586b05ebdf.png +0 -0
  229. package/core/built/admin/assets/img/logos/orb-black-1-32b72766be2164fdea6ab2565fb1c137.png +0 -0
  230. package/core/built/admin/assets/img/logos/orb-black-2-4b0baef1ec34816af6f3fbede7ab191d.png +0 -0
  231. package/core/built/admin/assets/img/logos/orb-black-3-9780c5e9991b69ed2303b526aa3e3252.png +0 -0
  232. package/core/built/admin/assets/img/logos/orb-black-4-d9c3caacb8d2ba98a52517ff2971433c.png +0 -0
  233. package/core/built/admin/assets/img/logos/orb-black-5-063a200f749e09c587b9443ffd2c4cfa.png +0 -0
  234. package/core/built/admin/assets/img/logos/orb-pink-3-a66abc6df2b6ab64d1459a6535b725cd.png +0 -0
  235. package/core/built/admin/assets/img/mailchimp-f22b1e130aac764965b9306d7265a6b2.svg +0 -8
  236. package/core/built/admin/assets/img/marketing/analytics-1-aa2d72c4e7347a3cb5666d07916b92aa.jpg +0 -0
  237. package/core/built/admin/assets/img/marketing/analytics-2-389d53f80041ff98111cce79facf66b8.jpg +0 -0
  238. package/core/built/admin/assets/img/marketing/members-1-8b89a1f48fe7b336754e91a429531f65.jpg +0 -0
  239. package/core/built/admin/assets/img/marketing/members-2-791205c82d5cf221f8c99a74f9ee1739.jpg +0 -0
  240. package/core/built/admin/assets/img/marketing/offers-1-f2e1b653c4d5bb90eea9d7a2862530f9.jpg +0 -0
  241. package/core/built/admin/assets/img/marketing/offers-2-28a225d34cc39d133748431536961d00.jpg +0 -0
  242. package/core/built/admin/assets/img/marketing/offers-3-2094c91ab21a16c37fbe6ec16c140160.jpg +0 -0
  243. package/core/built/admin/assets/img/medium-fef07013cffd5c45a655a250912a0ad7.png +0 -0
  244. package/core/built/admin/assets/img/mentions-background-fa39b7597e875c165b12190eda606993.png +0 -0
  245. package/core/built/admin/assets/img/orb-squircle-645fd62e92a80557905c0cb60874b699.png +0 -0
  246. package/core/built/admin/assets/img/patreon-b19a5e6418a72977a16b30039d374d04.svg +0 -7
  247. package/core/built/admin/assets/img/paypal-38e9448ce7549ea4caf8e7753ae661d6.svg +0 -8
  248. package/core/built/admin/assets/img/pintura-75cf0fd7cbc6ca3c8fbdb3f1b31f730b.png +0 -0
  249. package/core/built/admin/assets/img/pintura-screenshot-7668975389aac80607ec489b48b75e0f.png +0 -0
  250. package/core/built/admin/assets/img/plausible-1b754a95e19a6d935e0bc8bf6790ba56.png +0 -0
  251. package/core/built/admin/assets/img/resource-1-722f202795856e4a5596c8a3b7bedc43.jpg +0 -0
  252. package/core/built/admin/assets/img/slackicon-406aadea8994ca2ddee9c1d7157208db.png +0 -0
  253. package/core/built/admin/assets/img/small-b90396925485f17b2ca82c31be42de5f.png +0 -0
  254. package/core/built/admin/assets/img/stripe-3af79c77413d7e58d0322c1de5bfdb8e.svg +0 -1
  255. package/core/built/admin/assets/img/themes/Alto-0dfe76694ed222d6d96fc9c8db979a38.png +0 -0
  256. package/core/built/admin/assets/img/themes/Bulletin-d66dec818ad0ba2965dd7eb3130c621c.png +0 -0
  257. package/core/built/admin/assets/img/themes/Casper-9a0ce71df3a1c589c1414ad2aa5b8aeb.png +0 -0
  258. package/core/built/admin/assets/img/themes/Dawn-302fbfdbc352098a256137159bd83dd8.png +0 -0
  259. package/core/built/admin/assets/img/themes/Digest-698e78d8e8481daff8ae4a8647528dc9.png +0 -0
  260. package/core/built/admin/assets/img/themes/Dope-d099dfca697adae16baa76f89520c5b3.png +0 -0
  261. package/core/built/admin/assets/img/themes/Ease-7075f809892f10c58892e15a57a4aae4.png +0 -0
  262. package/core/built/admin/assets/img/themes/Edge-1e5e0eec6941d7bdca02cebb66187357.png +0 -0
  263. package/core/built/admin/assets/img/themes/Edition-10111a2b8458168dcff81b7fb151be70.png +0 -0
  264. package/core/built/admin/assets/img/themes/Episode-e4c86d1f75ef1d8a77791d7fd519fdd4.png +0 -0
  265. package/core/built/admin/assets/img/themes/Headline-f70eaf49b9fcae1ddfe3d4496d8be54d.png +0 -0
  266. package/core/built/admin/assets/img/themes/Journal-07d35b2311501d2738bad1907ba2f7e1.png +0 -0
  267. package/core/built/admin/assets/img/themes/London-4e042390da16fecef947f3a7001d03db.png +0 -0
  268. package/core/built/admin/assets/img/themes/Ruby-b896885448e0f28ca62c6dcd56c732aa.png +0 -0
  269. package/core/built/admin/assets/img/themes/Solo-0292eb9ae0ca7b578cff50824d40cc86.png +0 -0
  270. package/core/built/admin/assets/img/themes/Taste-a24d2a786900d9caff7e773ca0040991.png +0 -0
  271. package/core/built/admin/assets/img/themes/Wave-b98fadfd3ed16e8b2e383dd8e8e5dca2.png +0 -0
  272. package/core/built/admin/assets/img/touch-icon-ipad-2e78629d62ad05746f980f14623dfadb.png +0 -0
  273. package/core/built/admin/assets/img/touch-icon-iphone-93ed4382d391be9180093fd77ce8f410.png +0 -0
  274. package/core/built/admin/assets/img/twitter-7a7a0ba12d9b5bfb8a2058764a827c31.svg +0 -4
  275. package/core/built/admin/assets/img/typeform-9f23f8712d776a7515594676285266f5.svg +0 -7
  276. package/core/built/admin/assets/img/ulysses-3c66b59fb45c285bf336b4b613dc86e4.png +0 -0
  277. package/core/built/admin/assets/img/unsplash-404-71ab3705c9920a9706bb822c3d7e34d1.png +0 -0
  278. package/core/built/admin/assets/img/unsplash-5b329eef0b11447b4117eaf817ebad6f.svg +0 -4
  279. package/core/built/admin/assets/img/user-cover-e8f42b12b5fcba292a8b5dfa81e13dd2.png +0 -0
  280. package/core/built/admin/assets/img/user-image-639a88b784fb5f10964be8b975ca9fdf.png +0 -0
  281. package/core/built/admin/assets/img/zapier-bf93bc440a3fd43b73489a63c215cdc7.svg +0 -4
  282. package/core/built/admin/assets/img/zapier-logo-a125f24313dfe01ef49af01fc90061fb.svg +0 -4
  283. package/core/built/admin/assets/img/zero-bounce-ee799eddb1f88e33ab8c462858cbfed9.png +0 -0
  284. package/core/built/admin/assets/simplemde/simplemde-d16ff9bcc5bf6ad4916fb0034a30adb1.js +0 -1874
  285. package/core/built/admin/assets/vendor-3e6947aa681f0fb82b193090e520dc73.css +0 -1512
  286. package/core/built/admin/assets/vendor-c85ef50819caa584c404a0e3dcaa4e69.js +0 -14096
  287. package/core/built/admin/assets/videos/logo-loader.mp4 +0 -0
  288. package/core/built/admin/index.html +0 -64
  289. package/core/frontend/public/ghost.min.css +0 -1
  290. package/core/server/services/collections/PostsDataRepositoryBookshelf.js +0 -23
  291. package/core/server/services/collections/model-to-domain-events-bridge.js +0 -74
@@ -3,7 +3,6 @@
3
3
  * Dynamically build and execute queries on the API
4
4
  */
5
5
  const _ = require('lodash');
6
- const Promise = require('bluebird');
7
6
 
8
7
  // The default settings for a default post query
9
8
  const queryDefaults = {
@@ -64,7 +63,7 @@ function processQuery(query, slugParam, locals) {
64
63
  * Fetch data from API helper for controllers.
65
64
  *
66
65
  * Calls out to get posts per page, builds the final posts query & builds any additional queries
67
- * Wraps the queries using Promise.props to ensure it gets named responses
66
+ * Uses Promise.all to handle the queries and ensure concurrent execution.
68
67
  * Does a first round of formatting on the response, and returns
69
68
  */
70
69
  function fetchData(pathOptions, routerOptions, locals) {
@@ -72,7 +71,7 @@ function fetchData(pathOptions, routerOptions, locals) {
72
71
  routerOptions = routerOptions || {};
73
72
 
74
73
  let postQuery = _.cloneDeep(defaultPostQuery);
75
- let props = {};
74
+ let promises = [];
76
75
 
77
76
  if (routerOptions.filter) {
78
77
  postQuery.options.filter = routerOptions.filter;
@@ -92,26 +91,32 @@ function fetchData(pathOptions, routerOptions, locals) {
92
91
 
93
92
  // CASE: always fetch post entries
94
93
  // The filter can in theory contain a "%s" e.g. filter="primary_tag:%s"
95
- props.posts = processQuery(postQuery, pathOptions.slug, locals);
94
+ promises.push(processQuery(postQuery, pathOptions.slug, locals));
96
95
 
97
96
  // CASE: fetch more data defined by the router e.g. tags, authors - see TaxonomyRouter
98
97
  _.each(routerOptions.data, function (query, name) {
99
98
  const dataQueryOptions = _.merge(query, defaultDataQueryOptions[name]);
100
- props[name] = processQuery(dataQueryOptions, pathOptions.slug, locals);
99
+ promises.push(processQuery(dataQueryOptions, pathOptions.slug, locals));
101
100
  });
102
101
 
103
- return Promise.props(props)
102
+ return Promise.all(promises)
104
103
  .then(function formatResponse(results) {
105
- const response = _.cloneDeep(results.posts);
104
+ const response = _.cloneDeep(results[0]);
106
105
 
107
106
  if (routerOptions.data) {
108
107
  response.data = {};
109
108
 
109
+ let resultIndex = 1;
110
+
110
111
  _.each(routerOptions.data, function (config, name) {
111
- response.data[name] = results[name][config.resource];
112
+ if (results[resultIndex]) {
113
+ response.data[name] = results[resultIndex][config.resource];
114
+
115
+ if (config.type === 'browse') {
116
+ response.data[name].meta = results[resultIndex].meta;
117
+ }
112
118
 
113
- if (config.type === 'browse') {
114
- response.data[name].meta = results[name].meta;
119
+ resultIndex = resultIndex + 1;
115
120
  }
116
121
  });
117
122
  }
@@ -27,6 +27,9 @@ module.exports = {
27
27
  resource.feature_image_caption = new SafeString(resource.feature_image_caption);
28
28
  }
29
29
  });
30
+
31
+ // some properties are extracted to local template data to force one way of using it
32
+ delete data.show_title_and_feature_image;
30
33
  },
31
34
 
32
35
  /**
@@ -1,4 +1,5 @@
1
1
  const _ = require('lodash');
2
+ const hbs = require('../theme-engine/engine');
2
3
  const {prepareContextResource} = require('../proxy');
3
4
 
4
5
  /**
@@ -50,7 +51,17 @@ function formatPageResponse(result, pageAsPost = false) {
50
51
  *
51
52
  * @return {Object} containing page variables
52
53
  */
53
- function formatResponse(post, context) {
54
+ function formatResponse(post, context, locals = {}) {
55
+ // build up @page data for use in templates
56
+ // - done here rather than `update-local-template-options` middleware because
57
+ // we need access to the rendered entry's data which isn't available in middleware
58
+ const pageData = {
59
+ show_title_and_feature_image: true // default behaviour
60
+ };
61
+
62
+ // grab data off of the post that will be deleted in prepareContextResource
63
+ const showTitleAndFeatureImage = post.show_title_and_feature_image;
64
+
54
65
  prepareContextResource(post);
55
66
 
56
67
  let entry = {
@@ -60,8 +71,23 @@ function formatResponse(post, context) {
60
71
  // NOTE: preview context is a special case where the internal preview api returns the post model's type field
61
72
  if (context?.includes('page') || (context?.includes('preview') && post.type === 'page')) {
62
73
  entry.page = post;
74
+
75
+ // move properties from the page context object onto @page
76
+ // - makes the value available outside of the page context
77
+ // - data is removed from the post object in prepareContextResource so use of @page is forced
78
+ if (showTitleAndFeatureImage !== undefined) {
79
+ pageData.show_title_and_feature_image = showTitleAndFeatureImage;
80
+ }
63
81
  }
64
82
 
83
+ // merge @page into local template options
84
+ const localTemplateOptions = hbs.getLocalTemplateOptions(locals);
85
+ hbs.updateLocalTemplateOptions(locals, _.merge({}, localTemplateOptions, {
86
+ data: {
87
+ page: pageData
88
+ }
89
+ }));
90
+
65
91
  return entry;
66
92
  }
67
93
 
@@ -13,6 +13,6 @@ module.exports = function renderEntry(req, res) {
13
13
  return function renderEntryClosure(entry) {
14
14
  // Format data 2 - 1 is in preview/entry
15
15
  // Render
16
- return renderer(req, res, formatResponse.entry(entry, res.routerOptions?.context));
16
+ return renderer(req, res, formatResponse.entry(entry, res.routerOptions?.context, res.locals));
17
17
  };
18
18
  };
@@ -1,5 +1,4 @@
1
1
  const _ = require('lodash');
2
- const Promise = require('bluebird');
3
2
  const debug = require('@tryghost/debug')('services:routing:controllers:static');
4
3
  const renderer = require('../../rendering');
5
4
 
@@ -36,27 +35,30 @@ function processQuery(query, locals) {
36
35
  module.exports = function staticController(req, res, next) {
37
36
  debug('staticController', res.routerOptions);
38
37
 
39
- let props = {};
38
+ let promises = [];
40
39
 
41
- _.each(res.routerOptions.data, function (query, name) {
42
- props[name] = processQuery(query, res.locals);
40
+ _.each(res.routerOptions.data, function (query) {
41
+ promises.push(processQuery(query, res.locals));
43
42
  });
44
43
 
45
- return Promise.props(props)
44
+ return Promise.all(promises)
46
45
  .then(function handleResult(result) {
47
46
  let response = {};
48
47
 
49
48
  if (res.routerOptions.data) {
50
49
  response.data = {};
51
50
 
51
+ let resultIndex = 0;
52
52
  _.each(res.routerOptions.data, function (config, name) {
53
- response.data[name] = result[name][config.resource];
53
+ response.data[name] = result[resultIndex][config.resource];
54
54
 
55
55
  if (config.type === 'browse') {
56
- response.data[name].meta = result[name].meta;
56
+ response.data[name].meta = result[resultIndex].meta;
57
57
  // @TODO: remove in Ghost 3.0 (see https://github.com/TryGhost/Ghost/issues/10434)
58
- response.data[name][config.resource] = result[name][config.resource];
58
+ response.data[name][config.resource] = result[resultIndex][config.resource];
59
59
  }
60
+
61
+ resultIndex = resultIndex + 1;
60
62
  });
61
63
  }
62
64
 
@@ -1,5 +1,4 @@
1
1
  const downsize = require('downsize');
2
- const Promise = require('bluebird');
3
2
  const RSS = require('rss');
4
3
  const urlUtils = require('../../../shared/url-utils');
5
4
  const {routerManager} = require('../routing');
@@ -39,19 +39,19 @@
39
39
  }
40
40
 
41
41
  .kg-width-full .kg-signup-card-text {
42
- padding: 9.6vmax 0;
42
+ padding: 12vmax 0;
43
43
  }
44
44
 
45
45
  .kg-layout-split .kg-signup-card-text {
46
- padding: 9.6vmax 4vmax;
46
+ padding: 12vmax 4vmax;
47
47
  }
48
48
 
49
49
  .kg-layout-split.kg-content-wide .kg-signup-card-text {
50
- padding: 9.6vmax 0 9.6vmax 4vmax;
50
+ padding: 10vmax 0 10vmax 4vmax;
51
51
  }
52
52
 
53
53
  .kg-layout-split.kg-content-wide.kg-swapped .kg-signup-card-text {
54
- padding: 9.6vmax 4vmax 9.6vmax 0;
54
+ padding: 10vmax 4vmax 10vmax 0;
55
55
  }
56
56
 
57
57
  .kg-swapped .kg-signup-card-text {
@@ -4,7 +4,6 @@ const serveStatic = require('../../../shared/express').static;
4
4
 
5
5
  const fs = require('fs-extra');
6
6
  const path = require('path');
7
- const Promise = require('bluebird');
8
7
  const moment = require('moment');
9
8
  const tpl = require('@tryghost/tpl');
10
9
  const logging = require('@tryghost/logging');
@@ -1,4 +1,3 @@
1
- const Promise = require('bluebird');
2
1
  const api = require('./index');
3
2
  const config = require('../../../shared/config');
4
3
  const tpl = require('@tryghost/tpl');
@@ -1,4 +1,3 @@
1
- const Promise = require('bluebird');
2
1
  const tpl = require('@tryghost/tpl');
3
2
  const errors = require('@tryghost/errors');
4
3
  const {mapQuery} = require('@tryghost/mongo-utils');
@@ -1,10 +1,10 @@
1
- const Promise = require('bluebird');
2
1
  const moment = require('moment-timezone');
3
2
  const dbBackup = require('../../data/db/backup');
4
3
  const exporter = require('../../data/exporter');
5
4
  const importer = require('../../data/importer');
6
5
  const mediaInliner = require('../../services/media-inliner');
7
6
  const errors = require('@tryghost/errors');
7
+ const {pool} = require('@tryghost/promise');
8
8
  const models = require('../../models');
9
9
  const settingsCache = require('../../../shared/settings-cache');
10
10
 
@@ -151,15 +151,15 @@ module.exports = {
151
151
 
152
152
  return models.Post.findAll(queryOpts)
153
153
  .then((response) => {
154
- return Promise.map(response.models, (post) => {
154
+ return pool(response.models.map(post => () => {
155
155
  return models.Post.destroy(Object.assign({id: post.id}, queryOpts));
156
- }, {concurrency: 100});
156
+ }), 100);
157
157
  })
158
158
  .then(() => models.Tag.findAll(queryOpts))
159
159
  .then((response) => {
160
- return Promise.map(response.models, (tag) => {
160
+ return pool(response.models.map(tag => () => {
161
161
  return models.Tag.destroy(Object.assign({id: tag.id}, queryOpts));
162
- }, {concurrency: 100});
162
+ }), 100);
163
163
  })
164
164
  .catch((err) => {
165
165
  throw new errors.InternalServerError({
@@ -1,4 +1,3 @@
1
- const Promise = require('bluebird');
2
1
  const tpl = require('@tryghost/tpl');
3
2
  const errors = require('@tryghost/errors');
4
3
  const invites = require('../../services/invites');
@@ -1,4 +1,3 @@
1
- const Promise = require('bluebird');
2
1
  const tpl = require('@tryghost/tpl');
3
2
  const errors = require('@tryghost/errors');
4
3
  const models = require('../../models');
@@ -1,4 +1,3 @@
1
- const Promise = require('bluebird');
2
1
  const tpl = require('@tryghost/tpl');
3
2
  const mailService = require('../../services/mail');
4
3
  const api = require('./');
@@ -1,4 +1,3 @@
1
- const Promise = require('bluebird');
2
1
  const tpl = require('@tryghost/tpl');
3
2
  const errors = require('@tryghost/errors');
4
3
  const models = require('../../models');
@@ -1,4 +1,3 @@
1
- const Promise = require('bluebird');
2
1
  const errors = require('@tryghost/errors');
3
2
  const tpl = require('@tryghost/tpl');
4
3
  const models = require('../../models');
@@ -1,4 +1,3 @@
1
- const Promise = require('bluebird');
2
1
  const tpl = require('@tryghost/tpl');
3
2
  const errors = require('@tryghost/errors');
4
3
  const models = require('../../models');
@@ -1,4 +1,3 @@
1
- const Promise = require('bluebird');
2
1
  const tpl = require('@tryghost/tpl');
3
2
  const errors = require('@tryghost/errors');
4
3
  const models = require('../../models');
@@ -1,4 +1,3 @@
1
- const Promise = require('bluebird');
2
1
  const tpl = require('@tryghost/tpl');
3
2
  const errors = require('@tryghost/errors');
4
3
  const models = require('../../models');
@@ -1,5 +1,4 @@
1
1
  const debug = require('@tryghost/debug')('api:endpoints:utils:permissions');
2
- const Promise = require('bluebird');
3
2
  const _ = require('lodash');
4
3
  const permissions = require('../../../services/permissions');
5
4
  const tpl = require('@tryghost/tpl');
@@ -29,7 +29,7 @@ module.exports = async (model, frame, options = {}) => {
29
29
  if (typeof model.toJSON === 'function') {
30
30
  jsonModel = model.toJSON(frame.options);
31
31
  } else {
32
- // This is to satisy the interface which extraAttrs needs
32
+ // This is to satisfy the interface which extraAttrs needs
33
33
  model = {
34
34
  id: jsonModel.id,
35
35
  get(attr) {
@@ -1,4 +1,3 @@
1
- const Promise = require('bluebird');
2
1
  const debug = require('@tryghost/debug')('api:endpoints:utils:serializers:output:roles');
3
2
  const canThis = require('../../../../../services/permissions').canThis;
4
3
 
@@ -13,17 +12,23 @@ module.exports = {
13
12
  roles: roles
14
13
  };
15
14
  } else {
16
- return Promise.filter(roles.map((role) => {
17
- return canThis(frame.options.context).assign.role(role)
18
- .return(role)
19
- .catch(() => {});
20
- }), (value) => {
21
- return value && (value.name !== 'Owner');
22
- }).then((filteredRoles) => {
23
- return frame.response = {
24
- roles: filteredRoles
25
- };
26
- });
15
+ return Promise.all(
16
+ roles.map(async (role) => {
17
+ let permissionResult;
18
+ try {
19
+ await canThis(frame.options.context).assign.role(role);
20
+ permissionResult = role;
21
+ } catch (err) {
22
+ permissionResult = {};
23
+ }
24
+ return permissionResult && permissionResult.name && (permissionResult.name !== 'Owner');
25
+ }))
26
+ .then(results => roles.filter((_v, index) => results[index]))
27
+ .then((filteredRoles) => {
28
+ return frame.response = {
29
+ roles: filteredRoles
30
+ };
31
+ });
27
32
  }
28
33
  }
29
34
  };
@@ -126,6 +126,10 @@ const post = (attrs, frame) => {
126
126
  delete attrs.primary_author;
127
127
  }
128
128
 
129
+ if (attrs.type !== 'page') {
130
+ delete attrs.show_title_and_feature_image;
131
+ }
132
+
129
133
  delete attrs.locale;
130
134
  delete attrs.author;
131
135
  delete attrs.type;
@@ -1,4 +1,3 @@
1
- const Promise = require('bluebird');
2
1
  const validator = require('@tryghost/validator');
3
2
  const debug = require('@tryghost/debug')('api:endpoints:utils:validators:input:invitation');
4
3
  const tpl = require('@tryghost/tpl');
@@ -1,4 +1,3 @@
1
- const Promise = require('bluebird');
2
1
  const tpl = require('@tryghost/tpl');
3
2
  const errors = require('@tryghost/errors');
4
3
  const models = require('../../../../../models');
@@ -1,4 +1,3 @@
1
- const Promise = require('bluebird');
2
1
  const tpl = require('@tryghost/tpl');
3
2
  const errors = require('@tryghost/errors');
4
3
 
@@ -1,5 +1,4 @@
1
1
  /* eslint-disable ghost/filenames/match-regex */
2
- const Promise = require('bluebird');
3
2
  const validator = require('@tryghost/validator');
4
3
  const debug = require('@tryghost/debug')('api:endpoints:utils:validators:input:passwordreset');
5
4
  const tpl = require('@tryghost/tpl');
@@ -1,4 +1,3 @@
1
- const Promise = require('bluebird');
2
1
  const _ = require('lodash');
3
2
  const {ValidationError} = require('@tryghost/errors');
4
3
  const validator = require('@tryghost/validator');
@@ -1,4 +1,3 @@
1
- const Promise = require('bluebird');
2
1
  const debug = require('@tryghost/debug')('api:endpoints:utils:validators:input:users');
3
2
  const tpl = require('@tryghost/tpl');
4
3
  const errors = require('@tryghost/errors');
@@ -237,7 +237,7 @@ class PostsImporter extends BaseImporter {
237
237
  // CASE 1: you are importing old editor posts
238
238
  // CASE 2: you are importing Koenig Beta posts
239
239
  // CASE 3: you are importing Koenig 2.0 posts
240
- if (model.mobiledoc) {
240
+ if (model.mobiledoc && !model.lexical) {
241
241
  let mobiledoc;
242
242
 
243
243
  try {
@@ -272,7 +272,7 @@ class PostsImporter extends BaseImporter {
272
272
 
273
273
  model.mobiledoc = JSON.stringify(mobiledoc);
274
274
  model.html = mobiledocLib.mobiledocHtmlRenderer.render(JSON.parse(model.mobiledoc));
275
- } else if (model.html) {
275
+ } else if (model.html && !model.lexical) {
276
276
  model.mobiledoc = JSON.stringify(mobiledocLib.htmlToMobiledocConverter(model.html));
277
277
  model.html = mobiledocLib.mobiledocHtmlRenderer.render(JSON.parse(model.mobiledoc));
278
278
  }
@@ -1,4 +1,3 @@
1
- const Promise = require('bluebird');
2
1
  const models = require('../../../../models');
3
2
 
4
3
  module.exports = function before() {
@@ -1,5 +1,4 @@
1
1
  /* eslint-disable ghost/filenames/match-regex */
2
- const Promise = require('bluebird');
3
2
 
4
3
  module.exports = function afterEach() {
5
4
  return Promise.resolve();
@@ -1,5 +1,4 @@
1
1
  /* eslint-disable ghost/filenames/match-regex */
2
- const Promise = require('bluebird');
3
2
 
4
3
  module.exports = function beforeEach() {
5
4
  return Promise.resolve();
@@ -0,0 +1,7 @@
1
+ const {createAddColumnMigration} = require('../../utils');
2
+
3
+ module.exports = createAddColumnMigration('posts', 'show_title_and_feature_image', {
4
+ type: 'boolean',
5
+ nullable: false,
6
+ defaultTo: true
7
+ });
@@ -1,5 +1,4 @@
1
1
  const _ = require('lodash');
2
- const Promise = require('bluebird');
3
2
  const logging = require('@tryghost/logging');
4
3
  const errors = require('@tryghost/errors');
5
4
  const tpl = require('@tryghost/tpl');
@@ -91,6 +91,7 @@ module.exports = {
91
91
  custom_template: {type: 'string', maxlength: 100, nullable: true},
92
92
  canonical_url: {type: 'text', maxlength: 2000, nullable: true},
93
93
  newsletter_id: {type: 'string', maxlength: 24, nullable: true, references: 'newsletters.id'},
94
+ show_title_and_feature_image: {type: 'boolean', nullable: false, defaultTo: true},
94
95
  '@@UNIQUE_CONSTRAINTS@@': [
95
96
  ['slug', 'type']
96
97
  ]
@@ -1,6 +1,4 @@
1
1
  const _ = require('lodash');
2
- const Promise = require('bluebird');
3
-
4
2
  const tpl = require('@tryghost/tpl');
5
3
  const errors = require('@tryghost/errors');
6
4
  const validator = require('@tryghost/validator');
@@ -1,5 +1,4 @@
1
1
  const sizeOf = require('image-size');
2
- const Promise = require('bluebird');
3
2
  const _ = require('lodash');
4
3
  const path = require('path');
5
4
  const errors = require('@tryghost/errors');
@@ -40,12 +39,12 @@ class BlogIcon {
40
39
  }).height;
41
40
  }
42
41
 
43
- return resolve({
42
+ resolve({
44
43
  width: dimensions.width,
45
44
  height: dimensions.height
46
45
  });
47
46
  } catch (err) {
48
- return reject(new errors.ValidationError({
47
+ reject(new errors.ValidationError({
49
48
  message: tpl(messages.error, {
50
49
  file: storagePath,
51
50
  error: err.message
@@ -1,4 +1,3 @@
1
- const Promise = require('bluebird');
2
1
  const crypto = require('crypto');
3
2
  const tpl = require('@tryghost/tpl');
4
3
 
@@ -3,7 +3,6 @@ const sizeOf = require('image-size');
3
3
  const probeSizeOf = require('probe-image-size');
4
4
  const url = require('url');
5
5
  const path = require('path');
6
- const Promise = require('bluebird');
7
6
  const _ = require('lodash');
8
7
  const errors = require('@tryghost/errors');
9
8
  const tpl = require('@tryghost/tpl');
@@ -59,9 +58,9 @@ class ImageSize {
59
58
  dimensions.height = _.maxBy(dimensions.images, img => img.height).height;
60
59
  }
61
60
 
62
- return resolve(dimensions);
61
+ resolve(dimensions);
63
62
  } catch (err) {
64
- return reject(err);
63
+ reject(err);
65
64
  }
66
65
  });
67
66
  }
@@ -113,9 +112,9 @@ class ImageSize {
113
112
  const extension = (extensionMatch[1] || '').toLowerCase();
114
113
 
115
114
  if (FETCH_ONLY_FORMATS.includes(extension)) {
116
- return resolve(this._fetchImageSizeFromUrl(imageUrl));
115
+ resolve(this._fetchImageSizeFromUrl(imageUrl));
117
116
  } else {
118
- return resolve(this._probeImageSizeFromUrl(imageUrl));
117
+ resolve(this._probeImageSizeFromUrl(imageUrl));
119
118
  }
120
119
  });
121
120
  }
@@ -344,12 +343,12 @@ class ImageSize {
344
343
  }).height;
345
344
  }
346
345
 
347
- return resolve({
346
+ resolve({
348
347
  width: dimensions.width,
349
348
  height: dimensions.height
350
349
  });
351
350
  } catch (err) {
352
- return reject(new errors.ValidationError({
351
+ reject(new errors.ValidationError({
353
352
  message: tpl(messages.invalidDimensions, {
354
353
  file: imagePath,
355
354
  error: err.message
@@ -3,7 +3,7 @@ const _ = require('lodash');
3
3
  const models = require('../../models');
4
4
  const logging = require('@tryghost/logging');
5
5
  const errors = require('@tryghost/errors');
6
- const Promise = require('bluebird');
6
+ const {sequence} = require('@tryghost/promise');
7
7
 
8
8
  // Listen to settings.timezone.edited and settings.notifications.edited to bind extra logic to settings, similar to the bridge and member service
9
9
  const events = require('../../lib/common/events');
@@ -46,7 +46,7 @@ events.on('settings.timezone.edited', function (settingModel, options) {
46
46
  return;
47
47
  }
48
48
 
49
- await Promise.mapSeries(results, async (post) => {
49
+ await sequence(results.map(post => async () => {
50
50
  const newPublishedAtMoment = moment(post.get('published_at')).add(timezoneOffsetDiff, 'minutes');
51
51
 
52
52
  /**
@@ -73,7 +73,7 @@ events.on('settings.timezone.edited', function (settingModel, options) {
73
73
  err
74
74
  }));
75
75
  }
76
- });
76
+ }));
77
77
  } catch (err) {
78
78
  logging.error(new errors.InternalServerError({
79
79
  err: err,
@@ -4,7 +4,6 @@
4
4
  */
5
5
  const _ = require('lodash');
6
6
 
7
- const Promise = require('bluebird');
8
7
  const ObjectId = require('bson-objectid').default;
9
8
  const errors = require('@tryghost/errors');
10
9
 
@@ -1,4 +1,3 @@
1
- const Promise = require('bluebird');
2
1
  const _ = require('lodash');
3
2
  const tpl = require('@tryghost/tpl');
4
3
  const errors = require('@tryghost/errors');
@@ -2,7 +2,6 @@
2
2
  const _ = require('lodash');
3
3
  const uuid = require('uuid');
4
4
  const moment = require('moment');
5
- const Promise = require('bluebird');
6
5
  const {sequence} = require('@tryghost/promise');
7
6
  const tpl = require('@tryghost/tpl');
8
7
  const errors = require('@tryghost/errors');
@@ -94,7 +93,8 @@ Post = ghostBookshelf.Model.extend({
94
93
  type: 'post',
95
94
  tiers,
96
95
  visibility: visibility,
97
- email_recipient_filter: 'all'
96
+ email_recipient_filter: 'all',
97
+ show_title_and_feature_image: true
98
98
  };
99
99
  },
100
100
 
@@ -1,6 +1,5 @@
1
1
  const _ = require('lodash');
2
2
  const ghostBookshelf = require('./base');
3
- const Promise = require('bluebird');
4
3
  const tpl = require('@tryghost/tpl');
5
4
  const errors = require('@tryghost/errors');
6
5