From 4d96dbf3da45c2b5ee0b3f4ed54b9782951ffcd8 Mon Sep 17 00:00:00 2001 From: Sodbileg Gansukh Date: Thu, 9 Apr 2026 18:19:48 +0800 Subject: [PATCH 01/18] Refined visual design and copy of gift purchase confirmation email (#27288) no issues - Moved the redemption link inside the gray data container so the gift details and the link to share read as one block. - Added a "Send to recipient" button below the link that opens the buyer's default mail client with a friendly subject and body prefilled. The visible link above remains as a fallback. - Appended eligibility info to the expiration footnote so buyers know upfront that gifts can only be redeemed by free or new members. - Updated the intro paragraph color from #738A94 (chrome) to #3A464C (body) to match the convention used in other transactional emails like new-comment.hbs. - Switched the tier/cadence separator from parens to a bullet, matching the rest of the email family. --- .../gift-purchase-confirmation.hbs | 33 ++++++++++++++----- .../gift-purchase-confirmation.ts | 4 +-- .../services/gifts/gift-email-service.ts | 11 ++++++- .../services/gifts/gift-email-service.test.js | 18 ++++++++++ 4 files changed, 55 insertions(+), 11 deletions(-) diff --git a/ghost/core/core/server/services/gifts/email-templates/gift-purchase-confirmation.hbs b/ghost/core/core/server/services/gifts/email-templates/gift-purchase-confirmation.hbs index 2efc6e7ae74..ee92318fa55 100644 --- a/ghost/core/core/server/services/gifts/email-templates/gift-purchase-confirmation.hbs +++ b/ghost/core/core/server/services/gifts/email-templates/gift-purchase-confirmation.hbs @@ -40,7 +40,7 @@

Your gift is ready to share!

-

Share the link below with the recipient to let them redeem their gift membership.

+

Share the link below with the recipient to let them redeem their gift membership.

@@ -49,24 +49,41 @@

Gift subscription

-

{{gift.tierName}} ({{gift.cadenceLabel}})

+

{{gift.tierName}} • {{gift.cadenceLabel}}

Amount paid

-

{{gift.amount}}

+

{{gift.amount}}

+

Redemption link

+

{{gift.link}}

+ + + + + + +
+ + + + + + +
+ Send to recipient +
+
- - + +
-

Redemption link

-

{{gift.link}}

-

This link can be redeemed once and expires on {{gift.expiresAt}}.

+

This link can be redeemed once and expires on {{gift.expiresAt}}. It's only available to free or new members.

diff --git a/ghost/core/core/server/services/gifts/email-templates/gift-purchase-confirmation.ts b/ghost/core/core/server/services/gifts/email-templates/gift-purchase-confirmation.ts index 79d891a61e1..905e155921d 100644 --- a/ghost/core/core/server/services/gifts/email-templates/gift-purchase-confirmation.ts +++ b/ghost/core/core/server/services/gifts/email-templates/gift-purchase-confirmation.ts @@ -16,12 +16,12 @@ export function renderText(data: GiftPurchaseConfirmationData): string { Share the link below with the recipient to let them redeem their gift membership. -Gift subscription: ${data.gift.tierName} (${data.gift.cadenceLabel}) +Gift subscription: ${data.gift.tierName} • ${data.gift.cadenceLabel} Amount paid: ${data.gift.amount} Redemption link: ${data.gift.link} -This link can be redeemed once and expires on ${data.gift.expiresAt}. +This link can be redeemed once and expires on ${data.gift.expiresAt}. It's only available to free or new members. --- diff --git a/ghost/core/core/server/services/gifts/gift-email-service.ts b/ghost/core/core/server/services/gifts/gift-email-service.ts index 1c1017f7d22..64e0da34212 100644 --- a/ghost/core/core/server/services/gifts/gift-email-service.ts +++ b/ghost/core/core/server/services/gifts/gift-email-service.ts @@ -65,14 +65,22 @@ export class GiftEmailService { const formattedAmount = this.formatAmount({currency, amount: amount / 100}); const siteDomain = this.siteDomain; const siteUrl = this.urlUtils.getSiteUrl(); + const siteTitle = this.settingsCache.get('title') ?? siteDomain; const giftLink = `${siteUrl.replace(/\/$/, '')}/gift/${token}`; const unit = cadence === 'month' ? 'month' : 'year'; const cadenceLabel = duration === 1 ? `1 ${unit}` : `${duration} ${unit}s`; + // Pre-build a mailto: URL the buyer can click to open their default mail + // client with a friendly draft already filled in. Recipient is left blank + // — that's the one thing only the buyer knows. + const mailtoSubject = `I got you a gift subscription to ${siteTitle}`; + const mailtoBody = `Hi,\n\nI bought you a subscription to ${siteTitle}. You can redeem it here:\n\n${giftLink}`; + const mailtoUrl = `mailto:?subject=${encodeURIComponent(mailtoSubject)}&body=${encodeURIComponent(mailtoBody)}`; + const templateData = { - siteTitle: this.settingsCache.get('title') ?? siteDomain, + siteTitle, siteUrl, siteIconUrl: this.blogIcon.getIconUrl({absolute: true, fallbackToDefault: false}), siteDomain, @@ -83,6 +91,7 @@ export class GiftEmailService { tierName, cadenceLabel, link: giftLink, + mailtoUrl, expiresAt: moment(expiresAt).format('D MMM YYYY') } }; diff --git a/ghost/core/test/unit/server/services/gifts/gift-email-service.test.js b/ghost/core/test/unit/server/services/gifts/gift-email-service.test.js index ba2f3fbdf10..09cb8f3c19d 100644 --- a/ghost/core/test/unit/server/services/gifts/gift-email-service.test.js +++ b/ghost/core/test/unit/server/services/gifts/gift-email-service.test.js @@ -93,6 +93,24 @@ describe('GiftEmailService', function () { sinon.assert.calledWith(mailer.send, sinon.match.has('html', sinon.match('1 month'))); }); + it('includes a mailto link with prefilled subject and body in the HTML', async function () { + await service.sendPurchaseConfirmation(defaultData); + + const msg = mailer.send.getCall(0).args[0]; + + // Handlebars HTML-escapes some characters (including `=` → `=`) when + // interpolating into an attribute. The browser decodes these back when the + // user clicks the link, so we don't care about the encoding here — we just + // verify the link is a mailto and that the encoded subject and body are + // present in the rendered output. + const expectedSubject = encodeURIComponent('I got you a gift subscription to Test Site'); + const expectedBody = encodeURIComponent('Hi,\n\nI bought you a subscription to Test Site. You can redeem it here:\n\nhttps://example.com/gift/abc-123'); + + sinon.assert.match(msg.html, sinon.match('mailto:')); + sinon.assert.match(msg.html, sinon.match(expectedSubject)); + sinon.assert.match(msg.html, sinon.match(expectedBody)); + }); + it('falls back to site domain when site title is undefined', async function () { const noTitleSettingsCache = { get: (key) => { From c92425fd43f1ccec131cef038cd06a9f088cd7cf Mon Sep 17 00:00:00 2001 From: Princi Vershwal Date: Thu, 9 Apr 2026 16:13:06 +0530 Subject: [PATCH 02/18] Updated SDK Packages (#27290) no issue Updated `@tryghost/*` SDK packages (from [TryGhost/SDK](https://github.com/TryGhost/SDK)) to their latest published versions across the monorepo. Also bumped `@tryghost/announcement-bar` to 1.1.15. ### Updated packages | Package | Previous | Updated | Changed in | |---|---|---|---| | `@tryghost/color-utils` | 0.2.10 | 0.2.16 | `ghost/core`, `ghost/admin`, `admin-x-settings` | | `@tryghost/config-url-helpers` | 1.0.17 | 1.0.23 | `ghost/core` | | `@tryghost/content-api` | 1.12.0 | 1.12.6 | `announcement-bar` | | `@tryghost/custom-fonts` | 1.0.2 | 1.0.8 | `ghost/core`, `admin-x-settings` | | `@tryghost/helpers` | 1.1.97 | 1.1.103 | `ghost/core`, `ghost/admin` | | `@tryghost/html-to-plaintext` | 1.0.4 | 1.0.8 | `ghost/core` | | `@tryghost/limit-service` | 1.4.1 | 1.5.2 | `ghost/core`, `ghost/admin`, `admin-x-settings` | | `@tryghost/members-csv` | 2.0.3 | 2.0.5 | `ghost/core`, `ghost/admin` | | `@tryghost/string` | 0.2.17 | 0.3.2 | `ghost/core`, `ghost/admin` | | `@tryghost/timezone-data` | 0.4.12 | 0.4.18 | `ghost/admin`, `admin-x-settings` | --- apps/admin-x-settings/package.json | 8 +- apps/announcement-bar/package.json | 4 +- ghost/admin/package.json | 12 +- ghost/core/package.json | 16 +- yarn.lock | 283 ++++++++++++++++++++--------- 5 files changed, 217 insertions(+), 106 deletions(-) diff --git a/apps/admin-x-settings/package.json b/apps/admin-x-settings/package.json index 1601cd829b6..69095d906d7 100644 --- a/apps/admin-x-settings/package.json +++ b/apps/admin-x-settings/package.json @@ -40,12 +40,12 @@ }, "dependencies": { "@codemirror/lang-html": "6.4.11", - "@tryghost/color-utils": "0.2.10", + "@tryghost/color-utils": "0.2.16", "@tryghost/i18n": "0.0.0", "@tryghost/kg-unsplash-selector": "0.3.24", - "@tryghost/limit-service": "1.4.1", + "@tryghost/limit-service": "1.5.2", "@tryghost/nql": "0.12.10", - "@tryghost/timezone-data": "0.4.12", + "@tryghost/timezone-data": "0.4.18", "react": "18.3.1", "react-dom": "18.3.1", "validator": "13.12.0" @@ -55,7 +55,7 @@ "@testing-library/react": "14.3.1", "@tryghost/admin-x-design-system": "0.0.0", "@tryghost/admin-x-framework": "0.0.0", - "@tryghost/custom-fonts": "1.0.2", + "@tryghost/custom-fonts": "1.0.8", "@tryghost/shade": "0.0.0", "@types/react": "18.3.28", "@types/react-dom": "18.3.7", diff --git a/apps/announcement-bar/package.json b/apps/announcement-bar/package.json index c4a13f29b38..bdea2b79dc9 100644 --- a/apps/announcement-bar/package.json +++ b/apps/announcement-bar/package.json @@ -1,6 +1,6 @@ { "name": "@tryghost/announcement-bar", - "version": "1.1.14", + "version": "1.1.15", "license": "MIT", "repository": "https://github.com/TryGhost/Ghost", "author": "Ghost Foundation", @@ -14,7 +14,7 @@ "registry": "https://registry.npmjs.org/" }, "dependencies": { - "@tryghost/content-api": "1.12.0", + "@tryghost/content-api": "1.12.6", "react": "17.0.2", "react-dom": "17.0.2" }, diff --git a/ghost/admin/package.json b/ghost/admin/package.json index 79b6d004bf9..4cd153ab37f 100644 --- a/ghost/admin/package.json +++ b/ghost/admin/package.json @@ -45,18 +45,18 @@ "@sentry/integrations": "7.114.0", "@sentry/replay": "7.116.0", "@tryghost/admin-x-framework": "0.0.0", - "@tryghost/color-utils": "0.2.10", + "@tryghost/color-utils": "0.2.16", "@tryghost/ember-promise-modals": "2.0.1", - "@tryghost/helpers": "1.1.97", + "@tryghost/helpers": "1.1.103", "@tryghost/kg-clean-basic-html": "4.2.21", "@tryghost/kg-converters": "1.1.20", "@tryghost/koenig-lexical": "1.7.28", - "@tryghost/limit-service": "1.4.1", - "@tryghost/members-csv": "2.0.3", + "@tryghost/limit-service": "1.5.2", + "@tryghost/members-csv": "2.0.5", "@tryghost/nql": "0.12.10", "@tryghost/nql-lang": "0.6.4", - "@tryghost/string": "0.2.17", - "@tryghost/timezone-data": "0.4.12", + "@tryghost/string": "0.3.2", + "@tryghost/timezone-data": "0.4.18", "animejs": "3.2.2", "autoprefixer": "9.8.6", "babel-plugin-transform-class-properties": "6.24.1", diff --git a/ghost/core/package.json b/ghost/core/package.json index f66302544a0..5eb72005aaf 100644 --- a/ghost/core/package.json +++ b/ghost/core/package.json @@ -77,16 +77,16 @@ "@tryghost/admin-api-schema": "4.7.2", "@tryghost/api-framework": "1.0.7", "@tryghost/bookshelf-plugins": "2.0.3", - "@tryghost/color-utils": "0.2.10", - "@tryghost/config-url-helpers": "1.0.17", - "@tryghost/custom-fonts": "1.0.2", + "@tryghost/color-utils": "0.2.16", + "@tryghost/config-url-helpers": "1.0.23", + "@tryghost/custom-fonts": "1.0.8", "@tryghost/database-info": "0.3.35", "@tryghost/debug": "0.1.40", "@tryghost/domain-events": "1.0.8", "@tryghost/email-mock-receiver": "0.3.11", "@tryghost/errors": "1.3.13", - "@tryghost/helpers": "1.1.97", - "@tryghost/html-to-plaintext": "1.0.4", + "@tryghost/helpers": "1.1.103", + "@tryghost/html-to-plaintext": "1.0.8", "@tryghost/http-cache-utils": "0.1.25", "@tryghost/i18n": "0.0.0", "@tryghost/image-transform": "1.4.13", @@ -102,9 +102,9 @@ "@tryghost/kg-lexical-html-renderer": "1.3.40", "@tryghost/kg-markdown-html-renderer": "7.1.16", "@tryghost/kg-mobiledoc-html-renderer": "7.1.16", - "@tryghost/limit-service": "1.4.1", + "@tryghost/limit-service": "1.5.2", "@tryghost/logging": "2.5.5", - "@tryghost/members-csv": "2.0.3", + "@tryghost/members-csv": "2.0.5", "@tryghost/metrics": "1.0.43", "@tryghost/mw-error-handler": "1.0.13", "@tryghost/mw-vhost": "1.0.6", @@ -119,7 +119,7 @@ "@tryghost/root-utils": "0.3.38", "@tryghost/security": "1.0.6", "@tryghost/social-urls": "0.1.60", - "@tryghost/string": "0.2.17", + "@tryghost/string": "0.3.2", "@tryghost/tpl": "0.1.40", "@tryghost/url-utils": "5.1.2", "@tryghost/validator": "0.2.22", diff --git a/yarn.lock b/yarn.lock index 481adbe637d..8412f3a5d4c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -9643,18 +9643,18 @@ dependencies: long-timeout "^0.1.1" -"@tryghost/color-utils@0.2.10": - version "0.2.10" - resolved "https://registry.yarnpkg.com/@tryghost/color-utils/-/color-utils-0.2.10.tgz#91e5185a04275b2462720080868bf69b7aa651c5" - integrity sha512-7m1ylcy+k5CMHG7oAAKVwxkhetzYPW0jFGmx3ryZZk1mJgaKVAg552EJ/kWQ5pBOX2Nkbdq1CVAgXmlFLLQ+oA== +"@tryghost/color-utils@0.2.16": + version "0.2.16" + resolved "https://registry.yarnpkg.com/@tryghost/color-utils/-/color-utils-0.2.16.tgz#4749a70abfd9f52f8dd96e4831752b4f0b08be2e" + integrity sha512-MFHLGIdT+mDimcvziHrvCivyZn5gbfNloLji9YwFAGOB3EGuh2WhGSdH47k9JEmZjQW5ihNr1WU1Fwi/m8zgXw== dependencies: - "@types/color" "3.0.6" - color "^3.2.1" + "@types/color" "4.2.0" + color "3.2.1" -"@tryghost/config-url-helpers@1.0.17": - version "1.0.17" - resolved "https://registry.yarnpkg.com/@tryghost/config-url-helpers/-/config-url-helpers-1.0.17.tgz#558594d87e7dcbdcdf17513074957ad6fe58b92b" - integrity sha512-Cx76ZHIHHdS+xaayET/Yf6bO4XNjPhSrsOR1H1TBRu8fB7Qg/9AmVsyYM8xzFGyJ4TfROBshMiLNtEK1zPIGlA== +"@tryghost/config-url-helpers@1.0.23": + version "1.0.23" + resolved "https://registry.yarnpkg.com/@tryghost/config-url-helpers/-/config-url-helpers-1.0.23.tgz#a1c5b010562d7252566f9d89c789fb8381b76c47" + integrity sha512-cknxQMmqhehtU9dMtlbyenXldWbhuxwUFl7Vzczq02yD6SO41UFvACq4ZhPGS5vb3mSPFCm8/OojHp5zxquAhg== "@tryghost/config@2.0.3": version "2.0.3" @@ -9664,17 +9664,17 @@ "@tryghost/root-utils" "^2.0.3" nconf "0.13.0" -"@tryghost/content-api@1.12.0": - version "1.12.0" - resolved "https://registry.yarnpkg.com/@tryghost/content-api/-/content-api-1.12.0.tgz#8242b32411eba4907c953c0c07f4761a3140a271" - integrity sha512-rU9yrBHlVIohOLSpC9PeH9evMeNCk4OKGvI0VEwNwuwWlsQIpBn3o79DzleEN0tbMynlObYAG0IJ/EGkIumtJA== +"@tryghost/content-api@1.12.6": + version "1.12.6" + resolved "https://registry.yarnpkg.com/@tryghost/content-api/-/content-api-1.12.6.tgz#0a25d8b3cc16e18100e8471262285c44bee6b3e0" + integrity sha512-QCsSG10onLqpXKN7F8yHefOgRBtWdmi30s2dV7BYY5+/Iwgsaf/o/U5oTQhlsGkO3P73Zfw++tnqOL2wO9IYUA== dependencies: - axios "^1.0.0" + axios "1.13.6" -"@tryghost/custom-fonts@1.0.2": - version "1.0.2" - resolved "https://registry.yarnpkg.com/@tryghost/custom-fonts/-/custom-fonts-1.0.2.tgz#fc9471abf914f83b74df4fd1c220759aabf7bb1d" - integrity sha512-bLRJCxguFV6c7BpeR3KIGyZ5f4ic2TgEE7E4WWf7b6nHnW+RWylvRdWA+KW7iZ7iWdUrjqQTKLwC6GdmeWbgnQ== +"@tryghost/custom-fonts@1.0.8": + version "1.0.8" + resolved "https://registry.yarnpkg.com/@tryghost/custom-fonts/-/custom-fonts-1.0.8.tgz#db497e0bd6e675d35ba1f69ec2e6e0fb5ef300e3" + integrity sha512-56epGhRXXk1QfKYxzyvnm7OCszdlWmMbw9XYq1w5L/67mPoQPX+4NkkNmZqlq/0CjNahzExOB0nOm7aHVDwvWQ== "@tryghost/database-info@0.3.22": version "0.3.22" @@ -9686,7 +9686,7 @@ resolved "https://registry.yarnpkg.com/@tryghost/database-info/-/database-info-0.3.35.tgz#6ce85919ddfd6293514d1649b2170ae8c3d2c65b" integrity sha512-S9OapApwzdh3GS0d3m+KgwH7IhZII6b9Aw5I89HA5VJRPeo6HdaDXiZzSDNcFaUzpx1FFBR0kDu7G+IRPD0eFA== -"@tryghost/debug@0.1.40", "@tryghost/debug@^0.1.13", "@tryghost/debug@^0.1.36": +"@tryghost/debug@0.1.40": version "0.1.40" resolved "https://registry.yarnpkg.com/@tryghost/debug/-/debug-0.1.40.tgz#c2251d1775ec240e1c11f9fcce90900d93aec5ba" integrity sha512-r8ecoTeoickPsn/59tkrouCNHhUEy79MNhJdPNkhx/Q3Oevw+SQBjnVYa5mHaxTaXryM4nNguKM5fbxPGPBo3Q== @@ -9702,6 +9702,14 @@ "@tryghost/root-utils" "^2.0.3" debug "4.4.3" +"@tryghost/debug@^0.1.13", "@tryghost/debug@^0.1.36": + version "0.1.36" + resolved "https://registry.yarnpkg.com/@tryghost/debug/-/debug-0.1.36.tgz#54561ffad4d24632406824aa8b78148a59a826e2" + integrity sha512-6B3zrO7Y3SWlxTB9M+dwhj63whE2R4ktmDYI7r1L1Ao9S//Y0XYOPVVlqUDxHfig7T29JliZfbhZw9VdSEUYjg== + dependencies: + "@tryghost/root-utils" "^0.3.34" + debug "^4.3.1" + "@tryghost/domain-events@1.0.8": version "1.0.8" resolved "https://registry.yarnpkg.com/@tryghost/domain-events/-/domain-events-1.0.8.tgz#106b281714e6531552121bccf102ee7e5c9f3d53" @@ -9737,7 +9745,7 @@ focus-trap "^6.7.2" postcss-preset-env "^7.3.1" -"@tryghost/errors@1.3.13", "@tryghost/errors@1.3.6", "@tryghost/errors@2.2.1", "@tryghost/errors@3.0.3", "@tryghost/errors@^1.2.26", "@tryghost/errors@^1.2.3", "@tryghost/errors@^1.3.7", "@tryghost/errors@^1.3.8", "@tryghost/errors@^1.3.9", "@tryghost/errors@^3.0.3": +"@tryghost/errors@1.3.13", "@tryghost/errors@1.3.6", "@tryghost/errors@2.2.1", "@tryghost/errors@3.0.3", "@tryghost/errors@^1.2.3", "@tryghost/errors@^1.3.7", "@tryghost/errors@^1.3.8", "@tryghost/errors@^1.3.9", "@tryghost/errors@^3.0.3": version "1.3.13" resolved "https://registry.yarnpkg.com/@tryghost/errors/-/errors-1.3.13.tgz#e604160bd5a4b26b6c30cdc82dad22d9ce892dce" integrity sha512-sXFcuU8Nn3mDcVrLBLFThQZImn+T2w7v/jJGJzdFnSKJstqxd1LyTRlMjpCpgCnqAgHFCaP+uFg7x4CX64VBJQ== @@ -9756,12 +9764,12 @@ mime-types "^3.0.1" reqresnext "^1.7.0" -"@tryghost/helpers@1.1.97": - version "1.1.97" - resolved "https://registry.yarnpkg.com/@tryghost/helpers/-/helpers-1.1.97.tgz#f8c004850de10cee25fb396680debfb70e28b5e8" - integrity sha512-kuFO46X1cy4ezrI19qK0ZjUvbtPAMZjc4pFcLhe6IPVtziajBd9+4/7qrGaBIzbK5FV+v+WN1POU4vMx7hIPbw== +"@tryghost/helpers@1.1.103": + version "1.1.103" + resolved "https://registry.yarnpkg.com/@tryghost/helpers/-/helpers-1.1.103.tgz#a6883b7741f16e1fe27549d2e9a0562db1fa7842" + integrity sha512-ako7nvUKySOaTMSZXUXnrg6pVTkxW1ZVKbJj0t0HGG+ndt0pjLBdnzdZW3BMGEj4Qvf0MWxGdUcLrW/OFyHzsg== dependencies: - lodash-es "^4.17.11" + lodash-es "4.17.23" "@tryghost/html-to-mobiledoc@3.2.23": version "3.2.23" @@ -9772,13 +9780,13 @@ "@tryghost/mobiledoc-kit" "^0.12.4-ghost.1" jsdom "^29.0.0" -"@tryghost/html-to-plaintext@1.0.4": - version "1.0.4" - resolved "https://registry.yarnpkg.com/@tryghost/html-to-plaintext/-/html-to-plaintext-1.0.4.tgz#e817906b34a23fefd391aee670eabafe41cee8ec" - integrity sha512-NcB5xaqEYrNAZVBFje+tI7zwWOR+CErqPEz61PebfdLe2oiVnWl85g35mgcyrGUNsZp4+Y64o6YhEZ7H4dNFlg== +"@tryghost/html-to-plaintext@1.0.8": + version "1.0.8" + resolved "https://registry.yarnpkg.com/@tryghost/html-to-plaintext/-/html-to-plaintext-1.0.8.tgz#d00424d6a6dc5e329c83c8661dd75fa3c684f916" + integrity sha512-CIXoOlmpp9SVrb0BPQ/+cBaSHFpGv53Gew3VFLw0w1v1q04+0e0FRKjl8Cv6oUl+c1I9LwxbwdcV6rxRCgVbIw== dependencies: html-to-text "8.2.1" - lodash "4.17.21" + lodash "4.17.23" "@tryghost/http-cache-utils@0.1.25", "@tryghost/http-cache-utils@^0.1.21": version "0.1.25" @@ -10022,14 +10030,14 @@ resolved "https://registry.yarnpkg.com/@tryghost/koenig-lexical/-/koenig-lexical-1.7.28.tgz#8170b20079c724169f4d7056886ccaeee812aabc" integrity sha512-81irvOeur1YsQxg6dpU/Ch0s8j8io3b0Dg0wo8F27aJJp/acfaJnVPN4jCndkylNjfYNQ3T1hqY9IFufi0McNA== -"@tryghost/limit-service@1.4.1": - version "1.4.1" - resolved "https://registry.yarnpkg.com/@tryghost/limit-service/-/limit-service-1.4.1.tgz#9a010dbe19215017ade6e144769775537bfa7274" - integrity sha512-Oxs4+u/5TQW56uf9DOWnhN22lmY5xibtZm2F36IwKWxbkeQtdqplAZj0nyiEeDrqO4Tyz+8cIGof2ceOG2kqZQ== +"@tryghost/limit-service@1.5.2": + version "1.5.2" + resolved "https://registry.yarnpkg.com/@tryghost/limit-service/-/limit-service-1.5.2.tgz#d14ddb87b8eb042df0c4afd772e6a08a9a7e67fa" + integrity sha512-BTSnMpVMRauSkxi0yL/V2qVy9nRlAL9maALFAe5MDNTSCvg4zjV2b2S4o6+tgCyGDRkMPeePfrgSuH2YTTbD5Q== dependencies: - "@tryghost/errors" "^1.2.26" - lodash "^4.17.21" - luxon "^1.26.0" + "@tryghost/errors" "2.2.1" + lodash "4.17.23" + luxon "3.7.2" "@tryghost/logging@2.4.19", "@tryghost/logging@2.5.5", "@tryghost/logging@4.0.3", "@tryghost/logging@^2.5.1", "@tryghost/logging@^4.0.3": version "2.5.5" @@ -10048,10 +10056,10 @@ json-stringify-safe "^5.0.1" lodash "^4.17.21" -"@tryghost/members-csv@2.0.3": - version "2.0.3" - resolved "https://registry.yarnpkg.com/@tryghost/members-csv/-/members-csv-2.0.3.tgz#6affa02dd158ff5c01fd420774ddd59b69c51824" - integrity sha512-zBE0FHcolH0MjkCh+z5sv9Gf7MJ5ZxfG0hwlGks1ICVSn1p0dwK260PayzBIGWaHC7FzWIHY5ZgGltUE/lPXkQ== +"@tryghost/members-csv@2.0.5": + version "2.0.5" + resolved "https://registry.yarnpkg.com/@tryghost/members-csv/-/members-csv-2.0.5.tgz#cb01f6ad7f3c7a85ebc26d77a0b176e9c6e682a6" + integrity sha512-5BMzhWSoJg+pOQuXdO8ygHDxLFcwZLob903NX7lprWQtooLPD8FAWwdFql/ZA7gPG5Bq9lV7TyUFK3hWVtvIlw== dependencies: fs-extra "11.3.0" lodash "4.17.21" @@ -10172,7 +10180,7 @@ prom-client "15.1.3" stoppable "1.1.0" -"@tryghost/promise@0.3.20", "@tryghost/promise@^0.3.16": +"@tryghost/promise@0.3.20": version "0.3.20" resolved "https://registry.yarnpkg.com/@tryghost/promise/-/promise-0.3.20.tgz#f2a336e5f23d8f29f3e2f1a4192bf2d2eed81a58" integrity sha512-afHCBoS72XabqRi7GmHdVAWC/UMsVPGlxnL/epNVp0c/C7tEn6+MgHABXNAW4wViZFhuOda3k7fk3i2K0FAZQg== @@ -10182,6 +10190,11 @@ resolved "https://registry.yarnpkg.com/@tryghost/promise/-/promise-0.3.8.tgz#3134a044e187f6d61393267c680c6cc75235aa96" integrity sha512-ppcnLBWczpbo4sQcGWtjEA82kdZMv4NFF2MvZRi1MBP4lSOSgh9A636eUxlB1/FpIG+D5ixq84xlY4QJMqW2kA== +"@tryghost/promise@^0.3.16": + version "0.3.16" + resolved "https://registry.yarnpkg.com/@tryghost/promise/-/promise-0.3.16.tgz#26d4790e0832ae2eaa2b05b395e801d03c41981e" + integrity sha512-e0rc8/AXGXeN2Bh82HxPyw1+nr+ueDNFIDgwMdOQOmM5xDvKP54y1aveHn2QDQYX1EGNLrAzI8WunIEucHTMxQ== + "@tryghost/referrer-parser@0.1.15": version "0.1.15" resolved "https://registry.yarnpkg.com/@tryghost/referrer-parser/-/referrer-parser-0.1.15.tgz#cd05b93df65e49c04f53aea4e5b28f8257c45f5a" @@ -10211,7 +10224,7 @@ got "14.6.6" lodash "^4.17.21" -"@tryghost/root-utils@0.3.38", "@tryghost/root-utils@^0.3.34": +"@tryghost/root-utils@0.3.38": version "0.3.38" resolved "https://registry.yarnpkg.com/@tryghost/root-utils/-/root-utils-0.3.38.tgz#7f9e52782858f82bb1799adaa7c5a8ced74e1ffe" integrity sha512-ARn8wC6qv867lCr7BZ+IS8S/88K5go0j6HgQFhP27rKje4b40PsxH/P3rO4Ez2NzF/Do8ywFrTWHoLCSsCazXQ== @@ -10219,6 +10232,14 @@ caller "^1.0.1" find-root "^1.1.0" +"@tryghost/root-utils@^0.3.33", "@tryghost/root-utils@^0.3.34": + version "0.3.34" + resolved "https://registry.yarnpkg.com/@tryghost/root-utils/-/root-utils-0.3.34.tgz#db131568cf04069929a27fb8ed519b16a2226a5d" + integrity sha512-RH3nPr5/1tK/nQTZMSO9rDeEelFZbY0gB0HInbhXl7995cgR/yuOnTPWa3CCQT3m/cYPZOPFhlInO8evke9rDg== + dependencies: + caller "^1.0.1" + find-root "^1.1.0" + "@tryghost/root-utils@^2.0.3": version "2.0.3" resolved "https://registry.yarnpkg.com/@tryghost/root-utils/-/root-utils-2.0.3.tgz#7be6daef872b5c3dde8bc022bd20c70f62ab121f" @@ -10248,13 +10269,6 @@ resolved "https://registry.yarnpkg.com/@tryghost/social-urls/-/social-urls-0.1.60.tgz#1b90c1c233264c7b8cfd477789d70de2c2610f61" integrity sha512-lbhdaIwV6XrhyML+ugarYKn2BDam3c/LsLYyezTFZGtFUWmJgm/DvOY2Trd2YATi7iLifLsWhXGhIr5v+hKL3w== -"@tryghost/string@0.2.17": - version "0.2.17" - resolved "https://registry.yarnpkg.com/@tryghost/string/-/string-0.2.17.tgz#c5c548865100a4a0ff7cfe854eb49f1bd90e268f" - integrity sha512-c7/uco8GpUw+tohWtFr0R/zlHHvyXLX3g6+HX3Y52GLTjKsspc0N5GF7l5Y9I0+rwMBcBz9DCWMsTGeLgQBPtQ== - dependencies: - unidecode "^0.1.8" - "@tryghost/string@0.2.21": version "0.2.21" resolved "https://registry.yarnpkg.com/@tryghost/string/-/string-0.2.21.tgz#7294e3fb9dad595b6e180f8bbe75c33845dc45de" @@ -10262,18 +10276,32 @@ dependencies: unidecode "^0.1.8" -"@tryghost/timezone-data@0.4.12": - version "0.4.12" - resolved "https://registry.yarnpkg.com/@tryghost/timezone-data/-/timezone-data-0.4.12.tgz#c8a63979a073fe7ca9a85af4fcf255ff73a13859" - integrity sha512-oUDQyYP3sxpC1/ndT15tfGHx50YqIC1ovktyEkS/1f04+H5+bPiCgCLu/Dvi63u4Jc1GTEcTvHoRqTngpA+mZw== +"@tryghost/string@0.3.2": + version "0.3.2" + resolved "https://registry.yarnpkg.com/@tryghost/string/-/string-0.3.2.tgz#a86773fe460e198a7176e7333d1225d6319c9060" + integrity sha512-tPgTU4o/4m1TBMoSChHm4n7XvXq+x6GJ//B0MdVPK57Rb0GEThsV347C2Fr5+1q71EdICrLbFPYh0vAqEM/eoA== + dependencies: + unidecode "1.1.0" + +"@tryghost/timezone-data@0.4.18": + version "0.4.18" + resolved "https://registry.yarnpkg.com/@tryghost/timezone-data/-/timezone-data-0.4.18.tgz#a5a2d2ed33cc82c9a207dd8575fbc0d813020e60" + integrity sha512-yawVt4pBmbsw2Uwsxd/8rjwyucQX6cefHH48X5Qe5eMQH3mnla5Q+gJ+By9a3Sza1qECvhIG3jUhDM3cLhILzQ== -"@tryghost/tpl@0.1.40", "@tryghost/tpl@^0.1.36": +"@tryghost/tpl@0.1.40": version "0.1.40" resolved "https://registry.yarnpkg.com/@tryghost/tpl/-/tpl-0.1.40.tgz#4dba69276ed9dd1baa44548cc3c3117442d42077" integrity sha512-8w94lbNxXptRCIS8pe/IHjzgVFLxljxXx8+UQLO8NRFKraoEXthkPjAphN2MXKp1UGtj5ldh4Ye4D82bUWceOw== dependencies: lodash.template "^4.5.0" +"@tryghost/tpl@^0.1.36": + version "0.1.36" + resolved "https://registry.yarnpkg.com/@tryghost/tpl/-/tpl-0.1.36.tgz#1c8c5b23b8948d58f207fccb7c707658e8a166fa" + integrity sha512-1bgvGE06ABEuXQqVeuYK3i58YiEFf6fHiXSCq4CzA+MIBUoUs4ID9oQLkdPJwPQ9TsuuJt3z4DPiG8KnLt06fg== + dependencies: + lodash.template "^4.5.0" + "@tryghost/tpl@^2.0.3": version "2.0.3" resolved "https://registry.yarnpkg.com/@tryghost/tpl/-/tpl-2.0.3.tgz#1242eeda93bf1393a1bd61dd4f7e6bb06dad08a6" @@ -10292,7 +10320,7 @@ remark-footnotes "1.0.0" unist-util-visit "^2.0.0" -"@tryghost/validator@0.2.22", "@tryghost/validator@^0.2.17", "@tryghost/validator@^0.2.18": +"@tryghost/validator@0.2.22": version "0.2.22" resolved "https://registry.yarnpkg.com/@tryghost/validator/-/validator-0.2.22.tgz#588ea1458c3fed584047f3b59a62290092975398" integrity sha512-dmobNVEKXMi3K4OdAXLBFwa78hVgy8cYvCPJgfV4h3NtYIyRHqwARr3upT3/ASpVBpKGVBu7XexfSv+tibzsuQ== @@ -10303,7 +10331,18 @@ moment-timezone "^0.5.23" validator "7.2.0" -"@tryghost/version@0.1.38", "@tryghost/version@^0.1.33", "@tryghost/version@^0.1.34": +"@tryghost/validator@^0.2.17", "@tryghost/validator@^0.2.18": + version "0.2.18" + resolved "https://registry.yarnpkg.com/@tryghost/validator/-/validator-0.2.18.tgz#de9a2fbec5c81024a745fc4b4cbfdaaff9a68587" + integrity sha512-ua345mKqmOQvykwSEH25dYSyTe1bndS8/mwr/n/mRREW+p1a0dhuTuS21Z0s2TkYMoyMTcXL50XC3v8jBapk/Q== + dependencies: + "@tryghost/errors" "^1.3.9" + "@tryghost/tpl" "^0.1.36" + lodash "^4.17.21" + moment-timezone "^0.5.23" + validator "7.2.0" + +"@tryghost/version@0.1.38", "@tryghost/version@^0.1.34": version "0.1.38" resolved "https://registry.yarnpkg.com/@tryghost/version/-/version-0.1.38.tgz#dbe7da7750cd384e5db6b6e4da22e8c107c1f38d" integrity sha512-kVaM7eijFRrBLZLDbmiFxHQ/shmAg5UQ9yM4s9GZN4M3OWY34UHNmjoSOniOHnA5E8fYNA8A3IFmS3FW910xYg== @@ -10311,6 +10350,14 @@ "@tryghost/root-utils" "^0.3.34" semver "^7.3.5" +"@tryghost/version@^0.1.33": + version "0.1.33" + resolved "https://registry.yarnpkg.com/@tryghost/version/-/version-0.1.33.tgz#1476e35c48e4555d23bbd322d737ba57b21cfa7b" + integrity sha512-xzczlDomxTtSHL2pzKYis/J1XGc2KYh1flo8PFscy853uI9Pk55fODO4S4UyWFJ1YQVfCycKp9vKTYLJcDGXRw== + dependencies: + "@tryghost/root-utils" "^0.3.33" + semver "^7.3.5" + "@tryghost/webhook-mock-receiver@0.2.17": version "0.2.17" resolved "https://registry.yarnpkg.com/@tryghost/webhook-mock-receiver/-/webhook-mock-receiver-0.2.17.tgz#4c72be56ca5471e8e599f16db3163955718a90a7" @@ -10489,10 +10536,10 @@ resolved "https://registry.yarnpkg.com/@types/color-name/-/color-name-1.1.2.tgz#bdeeb6fdcb78969033767951ab0cb26c7514a658" integrity sha512-JWO/ZyxTKk0bLuOhAavGjnwLR73rUE7qzACnU7gMeyA/gdrSHm2xJwqNPipw2MtaZUaqQ2UG/q7pP6AQiZ8mqw== -"@types/color@3.0.6": - version "3.0.6" - resolved "https://registry.yarnpkg.com/@types/color/-/color-3.0.6.tgz#29c27a99d4de2975e1676712679a0bd7f646a3fb" - integrity sha512-NMiNcZFRUAiUUCCf7zkAelY8eV3aKqfbzyFQlXpPIEeoNDbsEHGpb854V3gzTsGKYj830I5zPuOwU/TP5/cW6A== +"@types/color@4.2.0": + version "4.2.0" + resolved "https://registry.yarnpkg.com/@types/color/-/color-4.2.0.tgz#06b259b912a15080d6cd3be35fc265f16c802eae" + integrity sha512-6+xrIRImMtGAL2X3qYkd02Mgs+gFGs+WsK0b7VVMaO4mYRISwyTjcqNrO0mNSmYEoq++rSLDB2F5HDNmqfOe+A== dependencies: "@types/color-convert" "*" @@ -10703,7 +10750,12 @@ dependencies: "@types/node" "*" -"@types/http-cache-semantics@*", "@types/http-cache-semantics@^4.0.1", "@types/http-cache-semantics@^4.0.4": +"@types/http-cache-semantics@*", "@types/http-cache-semantics@^4.0.1": + version "4.0.2" + resolved "https://registry.yarnpkg.com/@types/http-cache-semantics/-/http-cache-semantics-4.0.2.tgz#abe102d06ccda1efdf0ed98c10ccf7f36a785a41" + integrity sha512-FD+nQWA2zJjh4L9+pFXqWOi0Hs1ryBCfI+985NjluQ1p8EYtoLvjLOKidXBtZ4/IcxDX4o8/E8qDS3540tNliw== + +"@types/http-cache-semantics@^4.0.4": version "4.2.0" resolved "https://registry.yarnpkg.com/@types/http-cache-semantics/-/http-cache-semantics-4.2.0.tgz#f6a7788f438cbfde15f29acad46512b4c01913b3" integrity sha512-L3LgimLHXtGkWikKnsPg0/VFx9OGZaC+eN1u4r+OB1XRqH3meBIAVC2zr1WdMH+RHmnRkqliQAOHNJ/E0j/e0Q== @@ -12116,7 +12168,7 @@ ajv-keywords@^5.1.0: dependencies: fast-deep-equal "^3.1.3" -ajv@8.18.0, ajv@^8.0.0, ajv@^8.0.1, ajv@^8.9.0: +ajv@8.18.0: version "8.18.0" resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.18.0.tgz#8864186b6738d003eb3a933172bb3833e10cefbc" integrity sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A== @@ -12136,6 +12188,16 @@ ajv@^6.1.0, ajv@^6.10.2, ajv@^6.12.3, ajv@^6.12.4, ajv@^6.12.5: json-schema-traverse "^0.4.1" uri-js "^4.2.2" +ajv@^8.0.0, ajv@^8.0.1, ajv@^8.9.0: + version "8.17.1" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.17.1.tgz#37d9a5c776af6bc92d7f4f9510eba4c0a60d11a6" + integrity sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g== + dependencies: + fast-deep-equal "^3.1.3" + fast-uri "^3.0.1" + json-schema-traverse "^1.0.0" + require-from-string "^2.0.2" + alphanum-sort@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/alphanum-sort/-/alphanum-sort-1.0.2.tgz#97a1119649b211ad33691d9f9f486a8ec9fbe0a3" @@ -12784,7 +12846,16 @@ aws4@^1.8.0: resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.11.0.tgz#d61f46d83b2519250e2784daf5b09479a8b41c59" integrity sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA== -axios@^1.0.0, axios@^1.12.0, axios@^1.13.5, axios@^1.3.3, axios@^1.7.4: +axios@1.13.6: + version "1.13.6" + resolved "https://registry.yarnpkg.com/axios/-/axios-1.13.6.tgz#c3f92da917dc209a15dd29936d20d5089b6b6c98" + integrity sha512-ChTCHMouEe2kn713WHbQGcuYrr6fXTBiu460OTwWrWob16g1bXn4vtz07Ope7ewMozJAnEquLk5lWQWtBig9DQ== + dependencies: + follow-redirects "^1.15.11" + form-data "^4.0.5" + proxy-from-env "^1.1.0" + +axios@^1.12.0, axios@^1.13.5, axios@^1.3.3, axios@^1.7.4: version "1.15.0" resolved "https://registry.yarnpkg.com/axios/-/axios-1.15.0.tgz#0fcee91ef03d386514474904b27863b2c683bf4f" integrity sha512-wWyJDlAatxk30ZJer+GeCWS209sA42X+N5jU2jy6oHTp7ufw8uzUTVFBX9+wTfAlhiJXGS0Bq7X6efruWjuK9Q== @@ -15863,7 +15934,7 @@ color-support@^1.1.3: resolved "https://registry.yarnpkg.com/color-support/-/color-support-1.1.3.tgz#93834379a1cc9a0c61f82f52f0d04322251bd5a2" integrity sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg== -color@^3.0.0, color@^3.2.1: +color@3.2.1, color@^3.0.0: version "3.2.1" resolved "https://registry.yarnpkg.com/color/-/color-3.2.1.tgz#3544dc198caf4490c3ecc9a790b54fe9ff45e164" integrity sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA== @@ -20652,7 +20723,7 @@ express-unless@^2.1.3: resolved "https://registry.yarnpkg.com/express-unless/-/express-unless-2.1.3.tgz#f951c6cca52a24da3de32d42cfd4db57bc0f9a2e" integrity sha512-wj4tLMyCVYuIIKHGt0FhCtIViBcwzWejX0EjNxveAa6dG+0XBCQhMbx+PnkLkFCxLC69qoFrxds4pIyL88inaQ== -express@4.21.2: +express@4.21.2, express@^4.10.7, express@^4.17.1, express@^4.17.2, express@^4.21.2: version "4.21.2" resolved "https://registry.yarnpkg.com/express/-/express-4.21.2.tgz#cf250e48362174ead6cea4a566abef0162c1ec32" integrity sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA== @@ -20689,7 +20760,7 @@ express@4.21.2: utils-merge "1.0.1" vary "~1.1.2" -express@4.22.1, express@^4.10.7, express@^4.17.1, express@^4.17.2, express@^4.21.2: +express@4.22.1: version "4.22.1" resolved "https://registry.yarnpkg.com/express/-/express-4.22.1.tgz#1de23a09745a4fffdb39247b344bb5eaff382069" integrity sha512-F2X8g9P1X7uCPZMA3MVf9wcTqlyNp7IhH5qPCI0izhaOIYXaW9L535tGA3qmjRzpH+bZczqq7hVKxTR4NWnu+g== @@ -20961,13 +21032,20 @@ fastest-levenshtein@^1.0.16: resolved "https://registry.yarnpkg.com/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz#210e61b6ff181de91ea9b3d1b84fdedd47e034e5" integrity sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg== -fastq@1.20.1, fastq@^1.13.0, fastq@^1.6.0: +fastq@1.20.1: version "1.20.1" resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.20.1.tgz#ca750a10dc925bc8b18839fd203e3ef4b3ced675" integrity sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw== dependencies: reusify "^1.0.4" +fastq@^1.13.0, fastq@^1.6.0: + version "1.19.1" + resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.19.1.tgz#d50eaba803c8846a883c16492821ebcd2cda55f5" + integrity sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ== + dependencies: + reusify "^1.0.4" + faye-websocket@^0.11.3: version "0.11.4" resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.11.4.tgz#7f0d9275cfdd86a1c963dc8b65fcc451edcbb1da" @@ -22795,7 +22873,12 @@ htmlparser2@^8.0.0, htmlparser2@^8.0.1: domutils "^3.0.1" entities "^4.4.0" -http-cache-semantics@^4.0.0, http-cache-semantics@^4.1.0, http-cache-semantics@^4.1.1, http-cache-semantics@^4.2.0: +http-cache-semantics@^4.0.0, http-cache-semantics@^4.1.0, http-cache-semantics@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz#abe02fcb2985460bf0323be664436ec3476a6d5a" + integrity sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ== + +http-cache-semantics@^4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.2.0.tgz#205f4db64f8562b76a4ff9235aa5279839a09dd5" integrity sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ== @@ -22888,7 +22971,15 @@ http2-wrapper@^1.0.0-beta.5.2: quick-lru "^5.1.1" resolve-alpn "^1.0.0" -http2-wrapper@^2.1.10, http2-wrapper@^2.2.1: +http2-wrapper@^2.1.10: + version "2.2.0" + resolved "https://registry.yarnpkg.com/http2-wrapper/-/http2-wrapper-2.2.0.tgz#b80ad199d216b7d3680195077bd7b9060fa9d7f3" + integrity sha512-kZB0wxMo0sh1PehyjJUWRFEd99KC5TLjZ2cULC4f9iqJBAmKQQXEICjxl5iPJRwP40dpeHFqqhm7tYCvODpqpQ== + dependencies: + quick-lru "^5.1.1" + resolve-alpn "^1.2.0" + +http2-wrapper@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/http2-wrapper/-/http2-wrapper-2.2.1.tgz#310968153dcdedb160d8b72114363ef5fce1f64a" integrity sha512-V5nVw1PAOgfI3Lmeaj2Exmeg7fenjhRUgz1lPSezy1CuhPYbgQtbQj4jZfEAEMlaL+vupsvhjqCyjzob0yxsmQ== @@ -25185,20 +25276,20 @@ keypair@1.0.4: resolved "https://registry.yarnpkg.com/keypair/-/keypair-1.0.4.tgz#a749a45f388593f3950f18b3757d32a93bd8ce83" integrity sha512-zwhgOhhniaL7oxMgUMKKw5219PWWABMO+dgMnzJOQ2/5L3XJtTJGhW2PEXlxXj9zaccdReZJZ83+4NPhVfNVDg== -keyv@*, keyv@^5.5.3, keyv@^5.5.5: - version "5.6.0" - resolved "https://registry.yarnpkg.com/keyv/-/keyv-5.6.0.tgz#03044074c6b4d072d0a62c7b9fa649537baf0105" - integrity sha512-CYDD3SOtsHtyXeEORYRx2qBtpDJFjRTGXUtmNEMGyzYOKj1TE3tycdlho7kA1Ufx9OYWZzg52QFBGALTirzDSw== - dependencies: - "@keyv/serialize" "^1.1.1" - -keyv@^4.0.0, keyv@^4.5.3, keyv@^4.5.4: +keyv@*, keyv@^4.0.0, keyv@^4.5.3, keyv@^4.5.4: version "4.5.4" resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.4.tgz#a879a99e29452f942439f2a405e3af8b31d4de93" integrity sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw== dependencies: json-buffer "3.0.1" +keyv@^5.5.3, keyv@^5.5.5: + version "5.6.0" + resolved "https://registry.yarnpkg.com/keyv/-/keyv-5.6.0.tgz#03044074c6b4d072d0a62c7b9fa649537baf0105" + integrity sha512-CYDD3SOtsHtyXeEORYRx2qBtpDJFjRTGXUtmNEMGyzYOKj1TE3tycdlho7kA1Ufx9OYWZzg52QFBGALTirzDSw== + dependencies: + "@keyv/serialize" "^1.1.1" + kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0: version "3.2.2" resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" @@ -25901,6 +25992,11 @@ lodash-es@4.17.21, lodash-es@^4.17.11, lodash-es@^4.17.15: resolved "https://registry.yarnpkg.com/lodash-es/-/lodash-es-4.17.21.tgz#43e626c46e6591b7750beb2b50117390c609e3ee" integrity sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw== +lodash-es@4.17.23: + version "4.17.23" + resolved "https://registry.yarnpkg.com/lodash-es/-/lodash-es-4.17.23.tgz#58c4360fd1b5d33afc6c0bbd3d1149349b1138e0" + integrity sha512-kVI48u3PZr38HdYz98UmfPnXl2DXrpdctLrFLCd3kOx1xUkOmpFPx7gCWWM5MPkL/fD8zb+Ph0QzjGFs4+hHWg== + lodash._baseassign@^3.0.0: version "3.2.0" resolved "https://registry.yarnpkg.com/lodash._baseassign/-/lodash._baseassign-3.2.0.tgz#8c38a099500f215ad09e59f1722fd0c52bfe0a4e" @@ -26404,11 +26500,6 @@ luxon@3.7.2, luxon@^3.5.0: resolved "https://registry.yarnpkg.com/luxon/-/luxon-3.7.2.tgz#d697e48f478553cca187a0f8436aff468e3ba0ba" integrity sha512-vtEhXh/gNjI9Yg1u4jX/0YVPMvxzHuGgCm6tC5kZyb08yjGWGnqAjGJvcXbqQR2P3MyMEFnRbpcdFS6PBcLqew== -luxon@^1.26.0: - version "1.28.0" - resolved "https://registry.yarnpkg.com/luxon/-/luxon-1.28.0.tgz#e7f96daad3938c06a62de0fb027115d251251fbf" - integrity sha512-TfTiyvZhwBYM/7QdAVDh+7dBTBA29v4ik0Ce9zda3Mnf8on1S5KJI8P2jKFZ8+5C0jhmr0KwJEO/Wdpm0VeWJQ== - lz-string@^1.4.4, lz-string@^1.5.0: version "1.5.0" resolved "https://registry.yarnpkg.com/lz-string/-/lz-string-1.5.0.tgz#c1ab50f77887b712621201ba9fd4e3a6ed099941" @@ -28083,7 +28174,12 @@ normalize-url@^6.0.1, normalize-url@~6.1.0: resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-6.1.0.tgz#40d0885b535deffe3f3147bec877d05fe4c5668a" integrity sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A== -normalize-url@^8.0.0, normalize-url@^8.1.1: +normalize-url@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-8.0.0.tgz#593dbd284f743e8dcf6a5ddf8fadff149c82701a" + integrity sha512-uVFpKhj5MheNBJRTiMZ9pE/7hD1QTeEvugSJW/OmLzAp78PB5O6adfMNTvmfKhXBkvCzC+rqifWcVYpGFwTjnw== + +normalize-url@^8.1.1: version "8.1.1" resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-8.1.1.tgz#751a20c8520e5725404c06015fea21d7567f25ef" integrity sha512-JYc0DPlpGWB40kH5g07gGTrYuMqV653k3uBKY6uITPWds3M0ov3GaWGp9lbE3Bzngx8+XkfzgvASb9vk9JDFXQ== @@ -30683,6 +30779,11 @@ proxy-addr@^2.0.7, proxy-addr@~2.0.7: forwarded "0.2.0" ipaddr.js "1.9.1" +proxy-from-env@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2" + integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg== + proxy-from-env@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-2.1.0.tgz#a7487568adad577cfaaa7e88c49cab3ab3081aba" @@ -35244,6 +35345,11 @@ unicorn-magic@^0.3.0: resolved "https://registry.yarnpkg.com/unicorn-magic/-/unicorn-magic-0.3.0.tgz#4efd45c85a69e0dd576d25532fbfa22aa5c8a104" integrity sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA== +unidecode@1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/unidecode/-/unidecode-1.1.0.tgz#0b5f5ddd9b7b1ce3dbc7a24c72150edd63a83a8c" + integrity sha512-GIp57N6DVVJi8dpeIU6/leJGdv7W65ZSXFLFiNmxvexXkc0nXdqUvhA/qL9KqBKsILxMwg5MnmYNOIDJLb5JVA== + unidecode@^0.1.8: version "0.1.8" resolved "https://registry.yarnpkg.com/unidecode/-/unidecode-0.1.8.tgz#efbb301538bc45246a9ac8c559d72f015305053e" @@ -36422,7 +36528,7 @@ worker-farm@^1.7.0: dependencies: errno "~0.1.7" -workerpool@9.3.4, workerpool@^9.2.0: +workerpool@9.3.4: version "9.3.4" resolved "https://registry.yarnpkg.com/workerpool/-/workerpool-9.3.4.tgz#f6c92395b2141afd78e2a889e80cb338fe9fca41" integrity sha512-TmPRQYYSAnnDiEB0P/Ytip7bFGvqnSU6I2BcuSw7Hx+JSg/DsUi5ebYfc8GYaSdpuvOcEs6dXxPurOYpe9QFwg== @@ -36448,6 +36554,11 @@ workerpool@^6.0.2, workerpool@^6.0.3, workerpool@^6.1.5, workerpool@^6.4.0: resolved "https://registry.yarnpkg.com/workerpool/-/workerpool-6.5.1.tgz#060f73b39d0caf97c6db64da004cd01b4c099544" integrity sha512-Fs4dNYcsdpYSAfVxhnl1L5zTksjvOJxtC5hzMNl+1t9B8hTJTdKDyZ5ju7ztgPy+ft9tBFXoOlDNiOT9WUXZlA== +workerpool@^9.2.0: + version "9.3.3" + resolved "https://registry.yarnpkg.com/workerpool/-/workerpool-9.3.3.tgz#e75281fe62e851afb21cdeef8fa85f6a62ec3583" + integrity sha512-slxCaKbYjEdFT/o2rH9xS1hf4uRDch1w7Uo+apxhZ+sf/1d9e0ZVkn42kPNGP2dgjIx6YFvSevj0zHvbWe2jdw== + world-countries@^5.0.0: version "5.1.0" resolved "https://registry.yarnpkg.com/world-countries/-/world-countries-5.1.0.tgz#ea6b6156d9ef80c9ae6ff1e238d11b7ebd90351f" From 24a60810cc1648fdefe48acfbbf43ddd179c23c8 Mon Sep 17 00:00:00 2001 From: Sodbileg Gansukh Date: Thu, 9 Apr 2026 18:50:47 +0800 Subject: [PATCH 03/18] Added tier and cadence to gift purchase staff notification email (#27289) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit no issues The staff notification for gift subscription purchases previously only showed the buyer name and amount. With this change it also shows the tier and cadence the buyer purchased (e.g. "Premium • 1 year"), so publishers can see at a glance what was actually bought. --------- Co-authored-by: Michael Barrett --- .../gifts/gift-bookshelf-repository.ts | 2 +- .../server/services/gifts/gift-service.ts | 24 ++++---- ghost/core/core/server/services/gifts/gift.ts | 4 +- .../services/staff/email-templates/gift.hbs | 2 + .../staff/email-templates/gift.txt.js | 4 +- .../services/staff/staff-service-emails.js | 11 +++- .../services/gifts/gift-service.test.ts | 28 +++++---- .../unit/server/services/gifts/gift.test.ts | 2 +- .../services/staff/staff-service.test.js | 58 +++++++++++++++++-- 9 files changed, 101 insertions(+), 34 deletions(-) diff --git a/ghost/core/core/server/services/gifts/gift-bookshelf-repository.ts b/ghost/core/core/server/services/gifts/gift-bookshelf-repository.ts index eaaf7b7f513..159b651d9aa 100644 --- a/ghost/core/core/server/services/gifts/gift-bookshelf-repository.ts +++ b/ghost/core/core/server/services/gifts/gift-bookshelf-repository.ts @@ -97,7 +97,7 @@ export class GiftBookshelfRepository implements GiftRepository { stripeCheckoutSessionId: json.stripe_checkout_session_id, stripePaymentIntentId: json.stripe_payment_intent_id, consumesAt: json.consumes_at, - expiresAt: json.expires_at, + expiresAt: json.expires_at ?? new Date(), // TODO: Remove fallback when non-nullable migration is in place status: json.status, purchasedAt: json.purchased_at, redeemedAt: json.redeemed_at, diff --git a/ghost/core/core/server/services/gifts/gift-service.ts b/ghost/core/core/server/services/gifts/gift-service.ts index c569c40a3c9..c2503413dc7 100644 --- a/ghost/core/core/server/services/gifts/gift-service.ts +++ b/ghost/core/core/server/services/gifts/gift-service.ts @@ -48,6 +48,9 @@ interface StaffServiceEmails { memberId: string | null; amount: number; currency: string; + tierName: string; + cadence: 'month' | 'year'; + duration: number; }): Promise; } @@ -125,29 +128,28 @@ export class GiftService { await this.giftRepository.create(gift); + const tier = await this.tiersService.api.read(data.tierId); + + if (!tier) { + throw new errors.NotFoundError({message: `Tier not found: ${data.tierId}`}); + } + try { await this.staffServiceEmails.notifyGiftReceived({ name: member?.get('name') ?? null, email: member?.get('email') ?? data.buyerEmail, memberId: member?.id ?? null, amount: data.amount, - currency: data.currency + currency: data.currency, + tierName: tier.name, + cadence: data.cadence, + duration }); } catch (err) { logging.error('Failed to notify staff of gift purchase', err); } try { - if (!gift.expiresAt) { - throw new errors.InternalServerError({message: 'Gift is missing expiration date'}); - } - - const tier = await this.tiersService.api.read(data.tierId); - - if (!tier) { - throw new errors.NotFoundError({message: `Tier not found: ${data.tierId}`}); - } - await this.giftEmailService.sendPurchaseConfirmation({ buyerEmail: data.buyerEmail, amount: data.amount, diff --git a/ghost/core/core/server/services/gifts/gift.ts b/ghost/core/core/server/services/gifts/gift.ts index 213102c0803..a5cce2071e6 100644 --- a/ghost/core/core/server/services/gifts/gift.ts +++ b/ghost/core/core/server/services/gifts/gift.ts @@ -20,7 +20,7 @@ interface GiftData { stripeCheckoutSessionId: string; stripePaymentIntentId: string; consumesAt: Date | null; - expiresAt: Date | null; + expiresAt: Date; status: GiftStatus; purchasedAt: Date; redeemedAt: Date | null; @@ -55,7 +55,7 @@ export class Gift { stripeCheckoutSessionId: string; stripePaymentIntentId: string; consumesAt: Date | null; - expiresAt: Date | null; + expiresAt: Date; status: GiftStatus; purchasedAt: Date; redeemedAt: Date | null; diff --git a/ghost/core/core/server/services/staff/email-templates/gift.hbs b/ghost/core/core/server/services/staff/email-templates/gift.hbs index 007a3707882..d9d82efadbc 100644 --- a/ghost/core/core/server/services/staff/email-templates/gift.hbs +++ b/ghost/core/core/server/services/staff/email-templates/gift.hbs @@ -38,6 +38,8 @@

From

+

Tier

+

{{gift.tierName}} • {{gift.cadenceLabel}}

Amount received

{{gift.amount}}

diff --git a/ghost/core/core/server/services/staff/email-templates/gift.txt.js b/ghost/core/core/server/services/staff/email-templates/gift.txt.js index 72de03f171b..92e7c5d7e53 100644 --- a/ghost/core/core/server/services/staff/email-templates/gift.txt.js +++ b/ghost/core/core/server/services/staff/email-templates/gift.txt.js @@ -3,7 +3,9 @@ module.exports = function giftText(data) { return ` Someone purchased a gift subscription! -You received a gift subscription purchase of ${data.gift.amount} from "${data.gift.name}". +From: ${data.gift.name} +Tier: ${data.gift.tierName} • ${data.gift.cadenceLabel} +Amount received: ${data.gift.amount} --- diff --git a/ghost/core/core/server/services/staff/staff-service-emails.js b/ghost/core/core/server/services/staff/staff-service-emails.js index aa56d8a8314..fcbb7358425 100644 --- a/ghost/core/core/server/services/staff/staff-service-emails.js +++ b/ghost/core/core/server/services/staff/staff-service-emails.js @@ -301,10 +301,13 @@ class StaffServiceEmails { * @param {string|null} eventData.memberId * @param {number} eventData.amount - amount in cents * @param {string} eventData.currency + * @param {string} eventData.tierName + * @param {'month'|'year'} eventData.cadence + * @param {number} eventData.duration * * @returns {Promise} */ - async notifyGiftReceived({name, email, memberId, amount, currency}) { + async notifyGiftReceived({name, email, memberId, amount, currency, tierName, cadence, duration}) { const users = await this.models.User.getEmailAlertUsers('gift-purchased'); const formattedAmount = this.getFormattedAmount({currency, amount: amount / 100}); @@ -316,6 +319,8 @@ class StaffServiceEmails { email }) : null; + const cadenceLabel = duration === 1 ? `1 ${cadence}` : `${duration} ${cadence}s`; + await this.sendToStaff({ users, subject, @@ -324,7 +329,9 @@ class StaffServiceEmails { templateData: { gift: { name: displayName, - amount: formattedAmount + amount: formattedAmount, + tierName, + cadenceLabel } } }); diff --git a/ghost/core/test/unit/server/services/gifts/gift-service.test.ts b/ghost/core/test/unit/server/services/gifts/gift-service.test.ts index cbb340cec1b..f6fb5ec6cad 100644 --- a/ghost/core/test/unit/server/services/gifts/gift-service.test.ts +++ b/ghost/core/test/unit/server/services/gifts/gift-service.test.ts @@ -224,6 +224,23 @@ describe('GiftService', function () { assert.equal(emailData.memberId, 'member_1'); assert.equal(emailData.amount, 5000); assert.equal(emailData.currency, 'usd'); + assert.equal(emailData.tierName, 'Bronze'); + assert.equal(emailData.cadence, 'year'); + assert.equal(emailData.duration, 1); + }); + + it('throws when tier is not found', async function () { + tiersService.api.read.resolves(null); + + const service = createService(); + + await assert.rejects( + () => service.recordPurchase(purchaseData), + {message: 'Tier not found: tier_1'} + ); + + sinon.assert.notCalled(staffServiceEmails.notifyGiftReceived); + sinon.assert.notCalled(giftEmailService.sendPurchaseConfirmation); }); it('uses buyerEmail and null name when buyer is not a member', async function () { @@ -261,17 +278,6 @@ describe('GiftService', function () { assert.ok(emailData.expiresAt instanceof Date); }); - it('does not send confirmation email when tier is not found', async function () { - tiersService.api.read.resolves(null); - - const service = createService(); - - const result = await service.recordPurchase(purchaseData); - - assert.equal(result, true); - sinon.assert.notCalled(giftEmailService.sendPurchaseConfirmation); - }); - it('does not fail purchase when buyer confirmation email throws', async function () { giftEmailService.sendPurchaseConfirmation.rejects(new Error('SMTP error')); diff --git a/ghost/core/test/unit/server/services/gifts/gift.test.ts b/ghost/core/test/unit/server/services/gifts/gift.test.ts index ae952b91e73..8fbff87200d 100644 --- a/ghost/core/test/unit/server/services/gifts/gift.test.ts +++ b/ghost/core/test/unit/server/services/gifts/gift.test.ts @@ -35,7 +35,7 @@ describe('Gift', function () { it('sets expiresAt to GIFT_EXPIRY_DAYS after purchasedAt', function () { const gift = Gift.fromPurchase(purchaseData); const daysDiff = Math.round( - (gift.expiresAt!.getTime() - gift.purchasedAt.getTime()) / (1000 * 60 * 60 * 24) + (gift.expiresAt.getTime() - gift.purchasedAt.getTime()) / (1000 * 60 * 60 * 24) ); assert.equal(daysDiff, GIFT_EXPIRY_DAYS); diff --git a/ghost/core/test/unit/server/services/staff/staff-service.test.js b/ghost/core/test/unit/server/services/staff/staff-service.test.js index afcd541dfd4..d7973d84dd8 100644 --- a/ghost/core/test/unit/server/services/staff/staff-service.test.js +++ b/ghost/core/test/unit/server/services/staff/staff-service.test.js @@ -981,7 +981,10 @@ describe('StaffService', function () { email: 'alice@example.com', memberId: null, amount: 6000, - currency: 'usd' + currency: 'usd', + tierName: 'Gold', + cadence: 'year', + duration: 1 }); sinon.assert.calledWith(getEmailAlertUsersStub, 'gift-purchased'); @@ -995,7 +998,10 @@ describe('StaffService', function () { email: 'bob@example.com', memberId: null, amount: 1500, - currency: 'eur' + currency: 'eur', + tierName: 'Gold', + cadence: 'year', + duration: 1 }); sinon.assert.calledOnce(mailStub); @@ -1008,7 +1014,10 @@ describe('StaffService', function () { email: 'charlie@example.com', memberId: null, amount: 5000, - currency: 'usd' + currency: 'usd', + tierName: 'Gold', + cadence: 'year', + duration: 1 }); sinon.assert.calledOnce(mailStub); @@ -1021,7 +1030,10 @@ describe('StaffService', function () { email: 'diana@example.com', memberId: null, amount: 2000, - currency: 'gbp' + currency: 'gbp', + tierName: 'Gold', + cadence: 'year', + duration: 1 }); sinon.assert.calledOnce(mailStub); @@ -1034,12 +1046,48 @@ describe('StaffService', function () { email: 'anon@example.com', memberId: null, amount: 3000, - currency: 'usd' + currency: 'usd', + tierName: 'Gold', + cadence: 'year', + duration: 1 }); sinon.assert.calledOnce(mailStub); sinon.assert.calledWith(mailStub, sinon.match.has('subject', sinon.match('from anon@example.com'))); }); + + it('includes tier and cadence in HTML when provided', async function () { + await service.emails.notifyGiftReceived({ + name: 'Erin', + email: 'erin@example.com', + memberId: null, + amount: 12000, + currency: 'usd', + tierName: 'Premium', + cadence: 'year', + duration: 1 + }); + + sinon.assert.calledOnce(mailStub); + sinon.assert.calledWith(mailStub, sinon.match.has('html', sinon.match('Premium'))); + sinon.assert.calledWith(mailStub, sinon.match.has('html', sinon.match('1 year'))); + }); + + it('formats cadence with pluralized unit when duration is greater than 1', async function () { + await service.emails.notifyGiftReceived({ + name: 'Erin', + email: 'erin@example.com', + memberId: null, + amount: 12000, + currency: 'usd', + tierName: 'Premium', + cadence: 'month', + duration: 3 + }); + + sinon.assert.calledOnce(mailStub); + sinon.assert.calledWith(mailStub, sinon.match.has('html', sinon.match('3 months'))); + }); }); }); }); From 0de511bc0073ec5272af60a9d5a95a10043d97f1 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 9 Apr 2026 12:28:32 +0100 Subject: [PATCH 04/18] Update TryGhost test support packages (#27266) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This PR contains the following updates: | Package | Change | [Age](https://docs.renovatebot.com/merge-confidence/) | [Confidence](https://docs.renovatebot.com/merge-confidence/) | |---|---|---|---| | [@tryghost/email-mock-receiver](https://redirect.github.com/TryGhost/framework) ([source](https://redirect.github.com/TryGhost/framework/tree/HEAD/packages/email-mock-receiver)) | [`0.3.11` → `0.3.16`](https://renovatebot.com/diffs/npm/@tryghost%2femail-mock-receiver/0.3.11/0.3.16) | ![age](https://developer.mend.io/api/mc/badges/age/npm/@tryghost%2femail-mock-receiver/0.3.16?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@tryghost%2femail-mock-receiver/0.3.11/0.3.16?slim=true) | | [@tryghost/express-test](https://redirect.github.com/TryGhost/framework) ([source](https://redirect.github.com/TryGhost/framework/tree/HEAD/packages/express-test)) | [`0.15.0` → `0.15.5`](https://renovatebot.com/diffs/npm/@tryghost%2fexpress-test/0.15.0/0.15.5) | ![age](https://developer.mend.io/api/mc/badges/age/npm/@tryghost%2fexpress-test/0.15.5?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@tryghost%2fexpress-test/0.15.0/0.15.5?slim=true) | | [@tryghost/webhook-mock-receiver](https://redirect.github.com/TryGhost/framework) ([source](https://redirect.github.com/TryGhost/framework/tree/HEAD/packages/webhook-mock-receiver)) | [`0.2.17` → `0.2.22`](https://renovatebot.com/diffs/npm/@tryghost%2fwebhook-mock-receiver/0.2.17/0.2.22) | ![age](https://developer.mend.io/api/mc/badges/age/npm/@tryghost%2fwebhook-mock-receiver/0.2.22?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@tryghost%2fwebhook-mock-receiver/0.2.17/0.2.22?slim=true) | --- ### Release Notes
TryGhost/framework (@​tryghost/email-mock-receiver) ### [`v0.3.16`](https://redirect.github.com/TryGhost/framework/compare/@tryghost/email-mock-receiver@0.3.15...@tryghost/email-mock-receiver@0.3.16) [Compare Source](https://redirect.github.com/TryGhost/framework/compare/@tryghost/email-mock-receiver@0.3.15...@tryghost/email-mock-receiver@0.3.16) ### [`v0.3.15`](https://redirect.github.com/TryGhost/framework/compare/@tryghost/email-mock-receiver@0.3.14...@tryghost/email-mock-receiver@0.3.15) [Compare Source](https://redirect.github.com/TryGhost/framework/compare/@tryghost/email-mock-receiver@0.3.14...@tryghost/email-mock-receiver@0.3.15) ### [`v0.3.14`](https://redirect.github.com/TryGhost/framework/compare/@tryghost/email-mock-receiver@0.3.13...@tryghost/email-mock-receiver@0.3.14) [Compare Source](https://redirect.github.com/TryGhost/framework/compare/@tryghost/email-mock-receiver@0.3.13...@tryghost/email-mock-receiver@0.3.14) ### [`v0.3.13`](https://redirect.github.com/TryGhost/framework/compare/@tryghost/email-mock-receiver@0.3.12...@tryghost/email-mock-receiver@0.3.13) [Compare Source](https://redirect.github.com/TryGhost/framework/compare/@tryghost/email-mock-receiver@0.3.12...@tryghost/email-mock-receiver@0.3.13) ### [`v0.3.12`](https://redirect.github.com/TryGhost/framework/compare/@tryghost/email-mock-receiver@0.3.11...@tryghost/email-mock-receiver@0.3.12) [Compare Source](https://redirect.github.com/TryGhost/framework/compare/@tryghost/email-mock-receiver@0.3.11...@tryghost/email-mock-receiver@0.3.12)
TryGhost/framework (@​tryghost/express-test) ### [`v0.15.5`](https://redirect.github.com/TryGhost/framework/compare/@tryghost/express-test@0.15.4...@tryghost/express-test@0.15.5) [Compare Source](https://redirect.github.com/TryGhost/framework/compare/@tryghost/express-test@0.15.4...@tryghost/express-test@0.15.5) ### [`v0.15.4`](https://redirect.github.com/TryGhost/framework/compare/@tryghost/express-test@0.15.3...@tryghost/express-test@0.15.4) [Compare Source](https://redirect.github.com/TryGhost/framework/compare/@tryghost/express-test@0.15.3...@tryghost/express-test@0.15.4) ### [`v0.15.3`](https://redirect.github.com/TryGhost/framework/compare/@tryghost/express-test@0.15.2...@tryghost/express-test@0.15.3) [Compare Source](https://redirect.github.com/TryGhost/framework/compare/@tryghost/express-test@0.15.2...@tryghost/express-test@0.15.3) ### [`v0.15.2`](https://redirect.github.com/TryGhost/framework/compare/@tryghost/express-test@0.15.1...@tryghost/express-test@0.15.2) [Compare Source](https://redirect.github.com/TryGhost/framework/compare/@tryghost/express-test@0.15.1...@tryghost/express-test@0.15.2) ### [`v0.15.1`](https://redirect.github.com/TryGhost/framework/compare/@tryghost/express-test@0.15.0...@tryghost/express-test@0.15.1) [Compare Source](https://redirect.github.com/TryGhost/framework/compare/@tryghost/express-test@0.15.0...@tryghost/express-test@0.15.1)
TryGhost/framework (@​tryghost/webhook-mock-receiver) ### [`v0.2.22`](https://redirect.github.com/TryGhost/framework/compare/@tryghost/webhook-mock-receiver@0.2.21...@tryghost/webhook-mock-receiver@0.2.22) [Compare Source](https://redirect.github.com/TryGhost/framework/compare/@tryghost/webhook-mock-receiver@0.2.21...@tryghost/webhook-mock-receiver@0.2.22) ### [`v0.2.21`](https://redirect.github.com/TryGhost/framework/compare/@tryghost/webhook-mock-receiver@0.2.20...@tryghost/webhook-mock-receiver@0.2.21) [Compare Source](https://redirect.github.com/TryGhost/framework/compare/@tryghost/webhook-mock-receiver@0.2.20...@tryghost/webhook-mock-receiver@0.2.21) ### [`v0.2.20`](https://redirect.github.com/TryGhost/framework/compare/@tryghost/webhook-mock-receiver@0.2.19...@tryghost/webhook-mock-receiver@0.2.20) [Compare Source](https://redirect.github.com/TryGhost/framework/compare/@tryghost/webhook-mock-receiver@0.2.19...@tryghost/webhook-mock-receiver@0.2.20) ### [`v0.2.19`](https://redirect.github.com/TryGhost/framework/compare/@tryghost/webhook-mock-receiver@0.2.18...@tryghost/webhook-mock-receiver@0.2.19) [Compare Source](https://redirect.github.com/TryGhost/framework/compare/@tryghost/webhook-mock-receiver@0.2.18...@tryghost/webhook-mock-receiver@0.2.19) ### [`v0.2.18`](https://redirect.github.com/TryGhost/framework/compare/@tryghost/webhook-mock-receiver@0.2.17...@tryghost/webhook-mock-receiver@0.2.18) [Compare Source](https://redirect.github.com/TryGhost/framework/compare/@tryghost/webhook-mock-receiver@0.2.17...@tryghost/webhook-mock-receiver@0.2.18)
--- ### Configuration 📅 **Schedule**: (in timezone Etc/UTC) - Branch creation - Only on Sunday and Saturday (`* * * * 0,6`) - Between 12:00 AM and 12:59 PM, only on Monday (`* 0-12 * * 1`) - Between 09:00 PM and 11:59 PM, Monday through Friday (`* 21-23 * * 1-5`) - Between 12:00 AM and 04:59 AM, Tuesday through Saturday (`* 0-4 * * 2-6`) - Automerge - Only on Sunday and Saturday (`* * * * 0,6`) - Between 12:00 AM and 12:59 PM, only on Monday (`* 0-12 * * 1`) - Between 10:00 PM and 11:59 PM, Monday through Friday (`* 22-23 * * 1-5`) - Between 12:00 AM and 04:59 AM, Tuesday through Saturday (`* 0-4 * * 2-6`) 🚦 **Automerge**: Enabled. ♻ **Rebasing**: Whenever PR is behind base branch, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about these updates again. --- - [ ] If you want to rebase/retry this PR, check this box --- This PR was generated by [Mend Renovate](https://mend.io/renovate/). View the [repository job log](https://developer.mend.io/github/TryGhost/Ghost). Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- ghost/core/package.json | 6 +- yarn.lock | 178 ++++++++++------------------------------ 2 files changed, 46 insertions(+), 138 deletions(-) diff --git a/ghost/core/package.json b/ghost/core/package.json index 5eb72005aaf..8c38f2d4577 100644 --- a/ghost/core/package.json +++ b/ghost/core/package.json @@ -83,7 +83,7 @@ "@tryghost/database-info": "0.3.35", "@tryghost/debug": "0.1.40", "@tryghost/domain-events": "1.0.8", - "@tryghost/email-mock-receiver": "0.3.11", + "@tryghost/email-mock-receiver": "0.3.16", "@tryghost/errors": "1.3.13", "@tryghost/helpers": "1.1.103", "@tryghost/html-to-plaintext": "1.0.8", @@ -228,8 +228,8 @@ "devDependencies": { "@actions/core": "3.0.0", "@prettier/sync": "0.6.1", - "@tryghost/express-test": "0.15.0", - "@tryghost/webhook-mock-receiver": "0.2.17", + "@tryghost/express-test": "0.15.5", + "@tryghost/webhook-mock-receiver": "0.2.22", "@types/bookshelf": "1.2.9", "@types/common-tags": "1.8.4", "@types/jsonwebtoken": "9.0.10", diff --git a/yarn.lock b/yarn.lock index 8412f3a5d4c..921bf27c030 100644 --- a/yarn.lock +++ b/yarn.lock @@ -9686,7 +9686,7 @@ resolved "https://registry.yarnpkg.com/@tryghost/database-info/-/database-info-0.3.35.tgz#6ce85919ddfd6293514d1649b2170ae8c3d2c65b" integrity sha512-S9OapApwzdh3GS0d3m+KgwH7IhZII6b9Aw5I89HA5VJRPeo6HdaDXiZzSDNcFaUzpx1FFBR0kDu7G+IRPD0eFA== -"@tryghost/debug@0.1.40": +"@tryghost/debug@0.1.40", "@tryghost/debug@^0.1.13", "@tryghost/debug@^0.1.36": version "0.1.40" resolved "https://registry.yarnpkg.com/@tryghost/debug/-/debug-0.1.40.tgz#c2251d1775ec240e1c11f9fcce90900d93aec5ba" integrity sha512-r8ecoTeoickPsn/59tkrouCNHhUEy79MNhJdPNkhx/Q3Oevw+SQBjnVYa5mHaxTaXryM4nNguKM5fbxPGPBo3Q== @@ -9702,14 +9702,6 @@ "@tryghost/root-utils" "^2.0.3" debug "4.4.3" -"@tryghost/debug@^0.1.13", "@tryghost/debug@^0.1.36": - version "0.1.36" - resolved "https://registry.yarnpkg.com/@tryghost/debug/-/debug-0.1.36.tgz#54561ffad4d24632406824aa8b78148a59a826e2" - integrity sha512-6B3zrO7Y3SWlxTB9M+dwhj63whE2R4ktmDYI7r1L1Ao9S//Y0XYOPVVlqUDxHfig7T29JliZfbhZw9VdSEUYjg== - dependencies: - "@tryghost/root-utils" "^0.3.34" - debug "^4.3.1" - "@tryghost/domain-events@1.0.8": version "1.0.8" resolved "https://registry.yarnpkg.com/@tryghost/domain-events/-/domain-events-1.0.8.tgz#106b281714e6531552121bccf102ee7e5c9f3d53" @@ -9724,10 +9716,10 @@ "@tryghost/debug" "^0.1.36" split2 "4.2.0" -"@tryghost/email-mock-receiver@0.3.11": - version "0.3.11" - resolved "https://registry.yarnpkg.com/@tryghost/email-mock-receiver/-/email-mock-receiver-0.3.11.tgz#3ff3e23d0b755480b2c756d1018ee5ece5b1e04e" - integrity sha512-HnYOfGw7uRx48KDwUvWvWqHYzvadRqOcdpXm1d6SVo4SS2e6Mjyocnid73DHWMmfKb2FSSw2Yza3GGvAbZfRKg== +"@tryghost/email-mock-receiver@0.3.16": + version "0.3.16" + resolved "https://registry.yarnpkg.com/@tryghost/email-mock-receiver/-/email-mock-receiver-0.3.16.tgz#89ea4d2a40a6258dd9261f7e3e16e0f7607e6453" + integrity sha512-C72ZeaZa4eCZ4JSIY3BW4UhfBo34UA2O2+jEO7UMCsMT5AAIstv3oQgtj/kLZraFDaNtMOXdsUJA+gQDUTzBOA== "@tryghost/ember-promise-modals@2.0.1": version "2.0.1" @@ -9753,12 +9745,12 @@ "@stdlib/utils-copy" "^0.2.0" uuid "^9.0.0" -"@tryghost/express-test@0.15.0": - version "0.15.0" - resolved "https://registry.yarnpkg.com/@tryghost/express-test/-/express-test-0.15.0.tgz#173776f2e58899786ea2f9d607114ac6da14bcf4" - integrity sha512-NdKLIhW8hVBtzpS0GjGSfyqqUA8hpHIMDyKAJmNOH4PHr1ytvt4NSzGoGnm8GJ9PpdJ/W12VOvzYUGnxKfY1ww== +"@tryghost/express-test@0.15.5": + version "0.15.5" + resolved "https://registry.yarnpkg.com/@tryghost/express-test/-/express-test-0.15.5.tgz#4540d2d125517923e3d838d093c8b7178102a393" + integrity sha512-a50AsvAjqMBP4UfEF+/2+ljPQ/oMA0rHSeoCk8Wwepp9P13Q+3Vl1mK5OjOfoBduhMYa/3kU+ABHeRrUqoiMxw== dependencies: - "@tryghost/jest-snapshot" "^0.5.18" + "@tryghost/jest-snapshot" "^0.5.19" cookiejar "^2.1.3" form-data "^4.0.2" mime-types "^3.0.1" @@ -9811,14 +9803,14 @@ optionalDependencies: sharp "^0.34.5" -"@tryghost/jest-snapshot@^0.5.18": - version "0.5.18" - resolved "https://registry.yarnpkg.com/@tryghost/jest-snapshot/-/jest-snapshot-0.5.18.tgz#a35882500d2a4470c670cd2ce7011628f9aa9d34" - integrity sha512-sc4Q3OsCBcjiC8AbEwgXHPwWdqu8/2MCCUYsoL1tQ7nVZdxOYGI4qfdCybaFLhMOYiQzSoHW8WZs3TsmpVEezA== +"@tryghost/jest-snapshot@^0.5.19": + version "0.5.23" + resolved "https://registry.yarnpkg.com/@tryghost/jest-snapshot/-/jest-snapshot-0.5.23.tgz#e7dc239770d73060ca5b8ca1badef671a750fe6c" + integrity sha512-rhAkxKKlY2NB2+CGdXjY+aAsWA3xrZiR3yfTK+gnTRstuSR9bq8AU26oxE0L0zNCw0myTVF0WiyElCZ+e/4Gvw== dependencies: "@jest/expect" "^28.0.1" "@jest/expect-utils" "^28.0.1" - "@tryghost/errors" "^1.3.8" + "@tryghost/errors" "^1.3.9" jest-snapshot "^29.0.0" "@tryghost/job-manager@1.0.9": @@ -10180,7 +10172,7 @@ prom-client "15.1.3" stoppable "1.1.0" -"@tryghost/promise@0.3.20": +"@tryghost/promise@0.3.20", "@tryghost/promise@^0.3.16": version "0.3.20" resolved "https://registry.yarnpkg.com/@tryghost/promise/-/promise-0.3.20.tgz#f2a336e5f23d8f29f3e2f1a4192bf2d2eed81a58" integrity sha512-afHCBoS72XabqRi7GmHdVAWC/UMsVPGlxnL/epNVp0c/C7tEn6+MgHABXNAW4wViZFhuOda3k7fk3i2K0FAZQg== @@ -10190,11 +10182,6 @@ resolved "https://registry.yarnpkg.com/@tryghost/promise/-/promise-0.3.8.tgz#3134a044e187f6d61393267c680c6cc75235aa96" integrity sha512-ppcnLBWczpbo4sQcGWtjEA82kdZMv4NFF2MvZRi1MBP4lSOSgh9A636eUxlB1/FpIG+D5ixq84xlY4QJMqW2kA== -"@tryghost/promise@^0.3.16": - version "0.3.16" - resolved "https://registry.yarnpkg.com/@tryghost/promise/-/promise-0.3.16.tgz#26d4790e0832ae2eaa2b05b395e801d03c41981e" - integrity sha512-e0rc8/AXGXeN2Bh82HxPyw1+nr+ueDNFIDgwMdOQOmM5xDvKP54y1aveHn2QDQYX1EGNLrAzI8WunIEucHTMxQ== - "@tryghost/referrer-parser@0.1.15": version "0.1.15" resolved "https://registry.yarnpkg.com/@tryghost/referrer-parser/-/referrer-parser-0.1.15.tgz#cd05b93df65e49c04f53aea4e5b28f8257c45f5a" @@ -10224,7 +10211,7 @@ got "14.6.6" lodash "^4.17.21" -"@tryghost/root-utils@0.3.38": +"@tryghost/root-utils@0.3.38", "@tryghost/root-utils@^0.3.34": version "0.3.38" resolved "https://registry.yarnpkg.com/@tryghost/root-utils/-/root-utils-0.3.38.tgz#7f9e52782858f82bb1799adaa7c5a8ced74e1ffe" integrity sha512-ARn8wC6qv867lCr7BZ+IS8S/88K5go0j6HgQFhP27rKje4b40PsxH/P3rO4Ez2NzF/Do8ywFrTWHoLCSsCazXQ== @@ -10232,14 +10219,6 @@ caller "^1.0.1" find-root "^1.1.0" -"@tryghost/root-utils@^0.3.33", "@tryghost/root-utils@^0.3.34": - version "0.3.34" - resolved "https://registry.yarnpkg.com/@tryghost/root-utils/-/root-utils-0.3.34.tgz#db131568cf04069929a27fb8ed519b16a2226a5d" - integrity sha512-RH3nPr5/1tK/nQTZMSO9rDeEelFZbY0gB0HInbhXl7995cgR/yuOnTPWa3CCQT3m/cYPZOPFhlInO8evke9rDg== - dependencies: - caller "^1.0.1" - find-root "^1.1.0" - "@tryghost/root-utils@^2.0.3": version "2.0.3" resolved "https://registry.yarnpkg.com/@tryghost/root-utils/-/root-utils-2.0.3.tgz#7be6daef872b5c3dde8bc022bd20c70f62ab121f" @@ -10288,20 +10267,13 @@ resolved "https://registry.yarnpkg.com/@tryghost/timezone-data/-/timezone-data-0.4.18.tgz#a5a2d2ed33cc82c9a207dd8575fbc0d813020e60" integrity sha512-yawVt4pBmbsw2Uwsxd/8rjwyucQX6cefHH48X5Qe5eMQH3mnla5Q+gJ+By9a3Sza1qECvhIG3jUhDM3cLhILzQ== -"@tryghost/tpl@0.1.40": +"@tryghost/tpl@0.1.40", "@tryghost/tpl@^0.1.36": version "0.1.40" resolved "https://registry.yarnpkg.com/@tryghost/tpl/-/tpl-0.1.40.tgz#4dba69276ed9dd1baa44548cc3c3117442d42077" integrity sha512-8w94lbNxXptRCIS8pe/IHjzgVFLxljxXx8+UQLO8NRFKraoEXthkPjAphN2MXKp1UGtj5ldh4Ye4D82bUWceOw== dependencies: lodash.template "^4.5.0" -"@tryghost/tpl@^0.1.36": - version "0.1.36" - resolved "https://registry.yarnpkg.com/@tryghost/tpl/-/tpl-0.1.36.tgz#1c8c5b23b8948d58f207fccb7c707658e8a166fa" - integrity sha512-1bgvGE06ABEuXQqVeuYK3i58YiEFf6fHiXSCq4CzA+MIBUoUs4ID9oQLkdPJwPQ9TsuuJt3z4DPiG8KnLt06fg== - dependencies: - lodash.template "^4.5.0" - "@tryghost/tpl@^2.0.3": version "2.0.3" resolved "https://registry.yarnpkg.com/@tryghost/tpl/-/tpl-2.0.3.tgz#1242eeda93bf1393a1bd61dd4f7e6bb06dad08a6" @@ -10320,7 +10292,7 @@ remark-footnotes "1.0.0" unist-util-visit "^2.0.0" -"@tryghost/validator@0.2.22": +"@tryghost/validator@0.2.22", "@tryghost/validator@^0.2.17", "@tryghost/validator@^0.2.18": version "0.2.22" resolved "https://registry.yarnpkg.com/@tryghost/validator/-/validator-0.2.22.tgz#588ea1458c3fed584047f3b59a62290092975398" integrity sha512-dmobNVEKXMi3K4OdAXLBFwa78hVgy8cYvCPJgfV4h3NtYIyRHqwARr3upT3/ASpVBpKGVBu7XexfSv+tibzsuQ== @@ -10331,18 +10303,7 @@ moment-timezone "^0.5.23" validator "7.2.0" -"@tryghost/validator@^0.2.17", "@tryghost/validator@^0.2.18": - version "0.2.18" - resolved "https://registry.yarnpkg.com/@tryghost/validator/-/validator-0.2.18.tgz#de9a2fbec5c81024a745fc4b4cbfdaaff9a68587" - integrity sha512-ua345mKqmOQvykwSEH25dYSyTe1bndS8/mwr/n/mRREW+p1a0dhuTuS21Z0s2TkYMoyMTcXL50XC3v8jBapk/Q== - dependencies: - "@tryghost/errors" "^1.3.9" - "@tryghost/tpl" "^0.1.36" - lodash "^4.17.21" - moment-timezone "^0.5.23" - validator "7.2.0" - -"@tryghost/version@0.1.38", "@tryghost/version@^0.1.34": +"@tryghost/version@0.1.38", "@tryghost/version@^0.1.33", "@tryghost/version@^0.1.34": version "0.1.38" resolved "https://registry.yarnpkg.com/@tryghost/version/-/version-0.1.38.tgz#dbe7da7750cd384e5db6b6e4da22e8c107c1f38d" integrity sha512-kVaM7eijFRrBLZLDbmiFxHQ/shmAg5UQ9yM4s9GZN4M3OWY34UHNmjoSOniOHnA5E8fYNA8A3IFmS3FW910xYg== @@ -10350,18 +10311,10 @@ "@tryghost/root-utils" "^0.3.34" semver "^7.3.5" -"@tryghost/version@^0.1.33": - version "0.1.33" - resolved "https://registry.yarnpkg.com/@tryghost/version/-/version-0.1.33.tgz#1476e35c48e4555d23bbd322d737ba57b21cfa7b" - integrity sha512-xzczlDomxTtSHL2pzKYis/J1XGc2KYh1flo8PFscy853uI9Pk55fODO4S4UyWFJ1YQVfCycKp9vKTYLJcDGXRw== - dependencies: - "@tryghost/root-utils" "^0.3.33" - semver "^7.3.5" - -"@tryghost/webhook-mock-receiver@0.2.17": - version "0.2.17" - resolved "https://registry.yarnpkg.com/@tryghost/webhook-mock-receiver/-/webhook-mock-receiver-0.2.17.tgz#4c72be56ca5471e8e599f16db3163955718a90a7" - integrity sha512-XdKkBnwl+iqsS3CHVJQbdSJHrn3Shc4g2+B9X9lFciRmUW5dqKBkpK73qGwXPQdCOVIk6KxIhcXiUtTrmUrd9Q== +"@tryghost/webhook-mock-receiver@0.2.22": + version "0.2.22" + resolved "https://registry.yarnpkg.com/@tryghost/webhook-mock-receiver/-/webhook-mock-receiver-0.2.22.tgz#0bd2a6fc76599ffb25385aaf67306a92025f0bb1" + integrity sha512-QthCC6nmXlDKzuhZkzdZOatpgbJlGcJS6Et7BMfHJ6z/56QA21iCC1nRyLa5oCbh21kXtWZpGvX/heRgu2g07Q== dependencies: p-wait-for "3.2.0" @@ -10750,12 +10703,7 @@ dependencies: "@types/node" "*" -"@types/http-cache-semantics@*", "@types/http-cache-semantics@^4.0.1": - version "4.0.2" - resolved "https://registry.yarnpkg.com/@types/http-cache-semantics/-/http-cache-semantics-4.0.2.tgz#abe102d06ccda1efdf0ed98c10ccf7f36a785a41" - integrity sha512-FD+nQWA2zJjh4L9+pFXqWOi0Hs1ryBCfI+985NjluQ1p8EYtoLvjLOKidXBtZ4/IcxDX4o8/E8qDS3540tNliw== - -"@types/http-cache-semantics@^4.0.4": +"@types/http-cache-semantics@*", "@types/http-cache-semantics@^4.0.1", "@types/http-cache-semantics@^4.0.4": version "4.2.0" resolved "https://registry.yarnpkg.com/@types/http-cache-semantics/-/http-cache-semantics-4.2.0.tgz#f6a7788f438cbfde15f29acad46512b4c01913b3" integrity sha512-L3LgimLHXtGkWikKnsPg0/VFx9OGZaC+eN1u4r+OB1XRqH3meBIAVC2zr1WdMH+RHmnRkqliQAOHNJ/E0j/e0Q== @@ -12168,7 +12116,7 @@ ajv-keywords@^5.1.0: dependencies: fast-deep-equal "^3.1.3" -ajv@8.18.0: +ajv@8.18.0, ajv@^8.0.0, ajv@^8.0.1, ajv@^8.9.0: version "8.18.0" resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.18.0.tgz#8864186b6738d003eb3a933172bb3833e10cefbc" integrity sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A== @@ -12188,16 +12136,6 @@ ajv@^6.1.0, ajv@^6.10.2, ajv@^6.12.3, ajv@^6.12.4, ajv@^6.12.5: json-schema-traverse "^0.4.1" uri-js "^4.2.2" -ajv@^8.0.0, ajv@^8.0.1, ajv@^8.9.0: - version "8.17.1" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.17.1.tgz#37d9a5c776af6bc92d7f4f9510eba4c0a60d11a6" - integrity sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g== - dependencies: - fast-deep-equal "^3.1.3" - fast-uri "^3.0.1" - json-schema-traverse "^1.0.0" - require-from-string "^2.0.2" - alphanum-sort@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/alphanum-sort/-/alphanum-sort-1.0.2.tgz#97a1119649b211ad33691d9f9f486a8ec9fbe0a3" @@ -20723,7 +20661,7 @@ express-unless@^2.1.3: resolved "https://registry.yarnpkg.com/express-unless/-/express-unless-2.1.3.tgz#f951c6cca52a24da3de32d42cfd4db57bc0f9a2e" integrity sha512-wj4tLMyCVYuIIKHGt0FhCtIViBcwzWejX0EjNxveAa6dG+0XBCQhMbx+PnkLkFCxLC69qoFrxds4pIyL88inaQ== -express@4.21.2, express@^4.10.7, express@^4.17.1, express@^4.17.2, express@^4.21.2: +express@4.21.2: version "4.21.2" resolved "https://registry.yarnpkg.com/express/-/express-4.21.2.tgz#cf250e48362174ead6cea4a566abef0162c1ec32" integrity sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA== @@ -20760,7 +20698,7 @@ express@4.21.2, express@^4.10.7, express@^4.17.1, express@^4.17.2, express@^4.21 utils-merge "1.0.1" vary "~1.1.2" -express@4.22.1: +express@4.22.1, express@^4.10.7, express@^4.17.1, express@^4.17.2, express@^4.21.2: version "4.22.1" resolved "https://registry.yarnpkg.com/express/-/express-4.22.1.tgz#1de23a09745a4fffdb39247b344bb5eaff382069" integrity sha512-F2X8g9P1X7uCPZMA3MVf9wcTqlyNp7IhH5qPCI0izhaOIYXaW9L535tGA3qmjRzpH+bZczqq7hVKxTR4NWnu+g== @@ -21032,20 +20970,13 @@ fastest-levenshtein@^1.0.16: resolved "https://registry.yarnpkg.com/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz#210e61b6ff181de91ea9b3d1b84fdedd47e034e5" integrity sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg== -fastq@1.20.1: +fastq@1.20.1, fastq@^1.13.0, fastq@^1.6.0: version "1.20.1" resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.20.1.tgz#ca750a10dc925bc8b18839fd203e3ef4b3ced675" integrity sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw== dependencies: reusify "^1.0.4" -fastq@^1.13.0, fastq@^1.6.0: - version "1.19.1" - resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.19.1.tgz#d50eaba803c8846a883c16492821ebcd2cda55f5" - integrity sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ== - dependencies: - reusify "^1.0.4" - faye-websocket@^0.11.3: version "0.11.4" resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.11.4.tgz#7f0d9275cfdd86a1c963dc8b65fcc451edcbb1da" @@ -22873,12 +22804,7 @@ htmlparser2@^8.0.0, htmlparser2@^8.0.1: domutils "^3.0.1" entities "^4.4.0" -http-cache-semantics@^4.0.0, http-cache-semantics@^4.1.0, http-cache-semantics@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz#abe02fcb2985460bf0323be664436ec3476a6d5a" - integrity sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ== - -http-cache-semantics@^4.2.0: +http-cache-semantics@^4.0.0, http-cache-semantics@^4.1.0, http-cache-semantics@^4.1.1, http-cache-semantics@^4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.2.0.tgz#205f4db64f8562b76a4ff9235aa5279839a09dd5" integrity sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ== @@ -22971,15 +22897,7 @@ http2-wrapper@^1.0.0-beta.5.2: quick-lru "^5.1.1" resolve-alpn "^1.0.0" -http2-wrapper@^2.1.10: - version "2.2.0" - resolved "https://registry.yarnpkg.com/http2-wrapper/-/http2-wrapper-2.2.0.tgz#b80ad199d216b7d3680195077bd7b9060fa9d7f3" - integrity sha512-kZB0wxMo0sh1PehyjJUWRFEd99KC5TLjZ2cULC4f9iqJBAmKQQXEICjxl5iPJRwP40dpeHFqqhm7tYCvODpqpQ== - dependencies: - quick-lru "^5.1.1" - resolve-alpn "^1.2.0" - -http2-wrapper@^2.2.1: +http2-wrapper@^2.1.10, http2-wrapper@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/http2-wrapper/-/http2-wrapper-2.2.1.tgz#310968153dcdedb160d8b72114363ef5fce1f64a" integrity sha512-V5nVw1PAOgfI3Lmeaj2Exmeg7fenjhRUgz1lPSezy1CuhPYbgQtbQj4jZfEAEMlaL+vupsvhjqCyjzob0yxsmQ== @@ -25276,20 +25194,20 @@ keypair@1.0.4: resolved "https://registry.yarnpkg.com/keypair/-/keypair-1.0.4.tgz#a749a45f388593f3950f18b3757d32a93bd8ce83" integrity sha512-zwhgOhhniaL7oxMgUMKKw5219PWWABMO+dgMnzJOQ2/5L3XJtTJGhW2PEXlxXj9zaccdReZJZ83+4NPhVfNVDg== -keyv@*, keyv@^4.0.0, keyv@^4.5.3, keyv@^4.5.4: - version "4.5.4" - resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.4.tgz#a879a99e29452f942439f2a405e3af8b31d4de93" - integrity sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw== - dependencies: - json-buffer "3.0.1" - -keyv@^5.5.3, keyv@^5.5.5: +keyv@*, keyv@^5.5.3, keyv@^5.5.5: version "5.6.0" resolved "https://registry.yarnpkg.com/keyv/-/keyv-5.6.0.tgz#03044074c6b4d072d0a62c7b9fa649537baf0105" integrity sha512-CYDD3SOtsHtyXeEORYRx2qBtpDJFjRTGXUtmNEMGyzYOKj1TE3tycdlho7kA1Ufx9OYWZzg52QFBGALTirzDSw== dependencies: "@keyv/serialize" "^1.1.1" +keyv@^4.0.0, keyv@^4.5.3, keyv@^4.5.4: + version "4.5.4" + resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.4.tgz#a879a99e29452f942439f2a405e3af8b31d4de93" + integrity sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw== + dependencies: + json-buffer "3.0.1" + kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0: version "3.2.2" resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" @@ -25987,12 +25905,12 @@ locate-path@^7.1.0: dependencies: p-locate "^6.0.0" -lodash-es@4.17.21, lodash-es@^4.17.11, lodash-es@^4.17.15: +lodash-es@4.17.21: version "4.17.21" resolved "https://registry.yarnpkg.com/lodash-es/-/lodash-es-4.17.21.tgz#43e626c46e6591b7750beb2b50117390c609e3ee" integrity sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw== -lodash-es@4.17.23: +lodash-es@4.17.23, lodash-es@^4.17.11, lodash-es@^4.17.15: version "4.17.23" resolved "https://registry.yarnpkg.com/lodash-es/-/lodash-es-4.17.23.tgz#58c4360fd1b5d33afc6c0bbd3d1149349b1138e0" integrity sha512-kVI48u3PZr38HdYz98UmfPnXl2DXrpdctLrFLCd3kOx1xUkOmpFPx7gCWWM5MPkL/fD8zb+Ph0QzjGFs4+hHWg== @@ -28174,12 +28092,7 @@ normalize-url@^6.0.1, normalize-url@~6.1.0: resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-6.1.0.tgz#40d0885b535deffe3f3147bec877d05fe4c5668a" integrity sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A== -normalize-url@^8.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-8.0.0.tgz#593dbd284f743e8dcf6a5ddf8fadff149c82701a" - integrity sha512-uVFpKhj5MheNBJRTiMZ9pE/7hD1QTeEvugSJW/OmLzAp78PB5O6adfMNTvmfKhXBkvCzC+rqifWcVYpGFwTjnw== - -normalize-url@^8.1.1: +normalize-url@^8.0.0, normalize-url@^8.1.1: version "8.1.1" resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-8.1.1.tgz#751a20c8520e5725404c06015fea21d7567f25ef" integrity sha512-JYc0DPlpGWB40kH5g07gGTrYuMqV653k3uBKY6uITPWds3M0ov3GaWGp9lbE3Bzngx8+XkfzgvASb9vk9JDFXQ== @@ -36528,7 +36441,7 @@ worker-farm@^1.7.0: dependencies: errno "~0.1.7" -workerpool@9.3.4: +workerpool@9.3.4, workerpool@^9.2.0: version "9.3.4" resolved "https://registry.yarnpkg.com/workerpool/-/workerpool-9.3.4.tgz#f6c92395b2141afd78e2a889e80cb338fe9fca41" integrity sha512-TmPRQYYSAnnDiEB0P/Ytip7bFGvqnSU6I2BcuSw7Hx+JSg/DsUi5ebYfc8GYaSdpuvOcEs6dXxPurOYpe9QFwg== @@ -36554,11 +36467,6 @@ workerpool@^6.0.2, workerpool@^6.0.3, workerpool@^6.1.5, workerpool@^6.4.0: resolved "https://registry.yarnpkg.com/workerpool/-/workerpool-6.5.1.tgz#060f73b39d0caf97c6db64da004cd01b4c099544" integrity sha512-Fs4dNYcsdpYSAfVxhnl1L5zTksjvOJxtC5hzMNl+1t9B8hTJTdKDyZ5ju7ztgPy+ft9tBFXoOlDNiOT9WUXZlA== -workerpool@^9.2.0: - version "9.3.3" - resolved "https://registry.yarnpkg.com/workerpool/-/workerpool-9.3.3.tgz#e75281fe62e851afb21cdeef8fa85f6a62ec3583" - integrity sha512-slxCaKbYjEdFT/o2rH9xS1hf4uRDch1w7Uo+apxhZ+sf/1d9e0ZVkn42kPNGP2dgjIx6YFvSevj0zHvbWe2jdw== - world-countries@^5.0.0: version "5.1.0" resolved "https://registry.yarnpkg.com/world-countries/-/world-countries-5.1.0.tgz#ea6b6156d9ef80c9ae6ff1e238d11b7ebd90351f" From 46c23fbf1fa138fa8daf942fdd3162062bf2b56b Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 9 Apr 2026 12:28:43 +0100 Subject: [PATCH 05/18] Update dependency @playwright/test to v1.59.1 (#27277) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This PR contains the following updates: | Package | Change | [Age](https://docs.renovatebot.com/merge-confidence/) | [Confidence](https://docs.renovatebot.com/merge-confidence/) | |---|---|---|---| | [@playwright/test](https://playwright.dev) ([source](https://redirect.github.com/microsoft/playwright)) | [`1.58.2` → `1.59.1`](https://renovatebot.com/diffs/npm/@playwright%2ftest/1.58.2/1.59.1) | ![age](https://developer.mend.io/api/mc/badges/age/npm/@playwright%2ftest/1.59.1?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@playwright%2ftest/1.58.2/1.59.1?slim=true) | --- ### Release Notes
microsoft/playwright (@​playwright/test) ### [`v1.59.1`](https://redirect.github.com/microsoft/playwright/compare/v1.59.0...d466ac5358cae058cdc75d2ae3ab3ad220042730) [Compare Source](https://redirect.github.com/microsoft/playwright/compare/v1.59.0...v1.59.1) ### [`v1.59.0`](https://redirect.github.com/microsoft/playwright/compare/v1.58.2...01b2b1533e0bfa1c582117e3ec109fcb57657747) [Compare Source](https://redirect.github.com/microsoft/playwright/compare/v1.58.2...v1.59.0)
--- ### Configuration 📅 **Schedule**: (in timezone Etc/UTC) - Branch creation - Only on Sunday and Saturday (`* * * * 0,6`) - Between 12:00 AM and 12:59 PM, only on Monday (`* 0-12 * * 1`) - Between 09:00 PM and 11:59 PM, Monday through Friday (`* 21-23 * * 1-5`) - Between 12:00 AM and 04:59 AM, Tuesday through Saturday (`* 0-4 * * 2-6`) - Automerge - Only on Sunday and Saturday (`* * * * 0,6`) - Between 12:00 AM and 12:59 PM, only on Monday (`* 0-12 * * 1`) - Between 10:00 PM and 11:59 PM, Monday through Friday (`* 22-23 * * 1-5`) - Between 12:00 AM and 04:59 AM, Tuesday through Saturday (`* 0-4 * * 2-6`) 🚦 **Automerge**: Enabled. ♻ **Rebasing**: Whenever PR is behind base branch, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] If you want to rebase/retry this PR, check this box --- This PR was generated by [Mend Renovate](https://mend.io/renovate/). View the [repository job log](https://developer.mend.io/github/TryGhost/Ghost). --------- Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: Hannah Wolfe --- apps/activitypub/package.json | 2 +- apps/admin-x-settings/package.json | 2 +- apps/comments-ui/package.json | 4 ++-- apps/signup-form/package.json | 4 ++-- apps/stats/package.json | 2 +- e2e/package.json | 2 +- yarn.lock | 28 ++++++++++++++-------------- 7 files changed, 22 insertions(+), 22 deletions(-) diff --git a/apps/activitypub/package.json b/apps/activitypub/package.json index 2c83b1a119d..c5151deff98 100644 --- a/apps/activitypub/package.json +++ b/apps/activitypub/package.json @@ -29,7 +29,7 @@ "preview": "vite preview" }, "devDependencies": { - "@playwright/test": "1.58.2", + "@playwright/test": "1.59.1", "@testing-library/react": "14.3.1", "@types/dompurify": "3.2.0", "@types/jest": "29.5.14", diff --git a/apps/admin-x-settings/package.json b/apps/admin-x-settings/package.json index 69095d906d7..35da1b61ceb 100644 --- a/apps/admin-x-settings/package.json +++ b/apps/admin-x-settings/package.json @@ -51,7 +51,7 @@ "validator": "13.12.0" }, "devDependencies": { - "@playwright/test": "1.58.2", + "@playwright/test": "1.59.1", "@testing-library/react": "14.3.1", "@tryghost/admin-x-design-system": "0.0.0", "@tryghost/admin-x-framework": "0.0.0", diff --git a/apps/comments-ui/package.json b/apps/comments-ui/package.json index a19dd672ec0..c48c12cecd1 100644 --- a/apps/comments-ui/package.json +++ b/apps/comments-ui/package.json @@ -1,6 +1,6 @@ { "name": "@tryghost/comments-ui", - "version": "1.4.3", + "version": "1.4.4", "license": "MIT", "repository": "https://github.com/TryGhost/Ghost", "author": "Ghost Foundation", @@ -60,7 +60,7 @@ "react-string-replace": "1.1.1" }, "devDependencies": { - "@playwright/test": "1.58.2", + "@playwright/test": "1.59.1", "@testing-library/jest-dom": "5.17.0", "@testing-library/react": "12.1.5", "@testing-library/user-event": "14.6.1", diff --git a/apps/signup-form/package.json b/apps/signup-form/package.json index 5dd095d5b8e..3ee9182dd26 100644 --- a/apps/signup-form/package.json +++ b/apps/signup-form/package.json @@ -1,6 +1,6 @@ { "name": "@tryghost/signup-form", - "version": "0.3.10", + "version": "0.3.11", "license": "MIT", "repository": "https://github.com/TryGhost/Ghost", "author": "Ghost Foundation", @@ -35,7 +35,7 @@ "react-dom": "18.3.1" }, "devDependencies": { - "@playwright/test": "1.58.2", + "@playwright/test": "1.59.1", "@storybook/addon-essentials": "8.6.14", "@storybook/addon-interactions": "8.6.14", "@storybook/addon-links": "8.6.14", diff --git a/apps/stats/package.json b/apps/stats/package.json index f7d120ee973..289d652cc2b 100644 --- a/apps/stats/package.json +++ b/apps/stats/package.json @@ -34,7 +34,7 @@ }, "devDependencies": { "@faker-js/faker": "9.9.0", - "@playwright/test": "1.58.2", + "@playwright/test": "1.59.1", "@tanstack/react-query": "4.36.1", "@testing-library/jest-dom": "5.17.0", "@testing-library/react": "14.3.1", diff --git a/e2e/package.json b/e2e/package.json index 91269f246db..36eacc031de 100644 --- a/e2e/package.json +++ b/e2e/package.json @@ -31,7 +31,7 @@ "devDependencies": { "@eslint/js": "9.37.0", "@faker-js/faker": "8.4.1", - "@playwright/test": "1.58.2", + "@playwright/test": "1.59.1", "@tryghost/debug": "0.1.40", "@tryghost/logging": "2.5.5", "@types/dockerode": "3.3.47", diff --git a/yarn.lock b/yarn.lock index 921bf27c030..4d37d9f4850 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5417,12 +5417,12 @@ resolved "https://registry.yarnpkg.com/@pkgr/core/-/core-0.2.9.tgz#d229a7b7f9dac167a156992ef23c7f023653f53b" integrity sha512-QNqXyfVS2wm9hweSYD2O7F0G06uurj9kZ96TRQE5Y9hU7+tgdZwIkbAKc5Ocy1HxEY2kuDQa6cQ1WRs/O5LFKA== -"@playwright/test@1.58.2": - version "1.58.2" - resolved "https://registry.yarnpkg.com/@playwright/test/-/test-1.58.2.tgz#b0ad585d2e950d690ef52424967a42f40c6d2cbd" - integrity sha512-akea+6bHYBBfA9uQqSYmlJXn61cTa+jbO87xVLCWbTqbWadRVmhxlXATaOjOgcBaWU4ePo0wB41KMFv3o35IXA== +"@playwright/test@1.59.1": + version "1.59.1" + resolved "https://registry.yarnpkg.com/@playwright/test/-/test-1.59.1.tgz#5c4d38eac84a61527af466602ae20277685a02d6" + integrity sha512-PG6q63nQg5c9rIi4/Z5lR5IVF7yU5MqmKaPOe0HSc0O2cX1fPi96sUQu5j7eo4gKCkB2AnNGoWt7y4/Xx3Kcqg== dependencies: - playwright "1.58.2" + playwright "1.59.1" "@polka/url@^1.0.0-next.24": version "1.0.0-next.29" @@ -29278,17 +29278,17 @@ pkg-up@^3.1.0: dependencies: find-up "^3.0.0" -playwright-core@1.58.2: - version "1.58.2" - resolved "https://registry.yarnpkg.com/playwright-core/-/playwright-core-1.58.2.tgz#ac5f5b4b10d29bcf934415f0b8d133b34b0dcb13" - integrity sha512-yZkEtftgwS8CsfYo7nm0KE8jsvm6i/PTgVtB8DL726wNf6H2IMsDuxCpJj59KDaxCtSnrWan2AeDqM7JBaultg== +playwright-core@1.59.1: + version "1.59.1" + resolved "https://registry.yarnpkg.com/playwright-core/-/playwright-core-1.59.1.tgz#d8a2b28bcb8f2bd08ef3df93b02ae83c813244b2" + integrity sha512-HBV/RJg81z5BiiZ9yPzIiClYV/QMsDCKUyogwH9p3MCP6IYjUFu/MActgYAvK0oWyV9NlwM3GLBjADyWgydVyg== -playwright@1.58.2: - version "1.58.2" - resolved "https://registry.yarnpkg.com/playwright/-/playwright-1.58.2.tgz#afe547164539b0bcfcb79957394a7a3fa8683cfd" - integrity sha512-vA30H8Nvkq/cPBnNw4Q8TWz1EJyqgpuinBcHET0YVJVFldr8JDNiU9LaWAE1KqSkRYazuaBhTpB5ZzShOezQ6A== +playwright@1.59.1: + version "1.59.1" + resolved "https://registry.yarnpkg.com/playwright/-/playwright-1.59.1.tgz#f7b0ca61637ae25264cec370df671bbe1f368a4a" + integrity sha512-C8oWjPR3F81yljW9o5OxcWzfh6avkVwDD2VYdwIGqTkl+OGFISgypqzfu7dOe4QNLL2aqcWBmI3PMtLIK233lw== dependencies: - playwright-core "1.58.2" + playwright-core "1.59.1" optionalDependencies: fsevents "2.3.2" From 7c1b796a726cdda61aecef2fd99198dfe8eae733 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 9 Apr 2026 13:47:53 +0100 Subject: [PATCH 06/18] Update dependency lint-staged to v16 (#27285) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This PR contains the following updates: | Package | Change | [Age](https://docs.renovatebot.com/merge-confidence/) | [Confidence](https://docs.renovatebot.com/merge-confidence/) | |---|---|---|---| | [lint-staged](https://redirect.github.com/lint-staged/lint-staged) | [`15.5.2` → `16.4.0`](https://renovatebot.com/diffs/npm/lint-staged/15.5.2/16.4.0) | ![age](https://developer.mend.io/api/mc/badges/age/npm/lint-staged/16.4.0?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/lint-staged/15.5.2/16.4.0?slim=true) | --- ### Release Notes
lint-staged/lint-staged (lint-staged) ### [`v16.4.0`](https://redirect.github.com/lint-staged/lint-staged/blob/HEAD/CHANGELOG.md#1640) [Compare Source](https://redirect.github.com/lint-staged/lint-staged/compare/v16.3.4...v16.4.0) ##### Minor Changes - [#​1739](https://redirect.github.com/lint-staged/lint-staged/pull/1739) [`687fc90`](https://redirect.github.com/lint-staged/lint-staged/commit/687fc9069a312ac83ca48f035a1bbf453db91814) Thanks [@​hyperz111](https://redirect.github.com/hyperz111)! - Replace `micromatch` with `picomatch` to reduce dependencies. ### [`v16.3.4`](https://redirect.github.com/lint-staged/lint-staged/blob/HEAD/CHANGELOG.md#1634) [Compare Source](https://redirect.github.com/lint-staged/lint-staged/compare/v16.3.3...v16.3.4) ##### Patch Changes - [#​1742](https://redirect.github.com/lint-staged/lint-staged/pull/1742) [`9d6e827`](https://redirect.github.com/lint-staged/lint-staged/commit/9d6e827b0c55da5b091c989111f6c55dd76539d9) Thanks [@​iiroj](https://redirect.github.com/iiroj)! - Update dependencies, including [`tinyexec@1.0.4`](https://redirect.github.com/tinylibs/tinyexec/releases/tag/1.0.4) to make sure local `node_modules/.bin` are preferred to global locations (released in [`tinyexec@1.0.3`](https://redirect.github.com/tinylibs/tinyexec/releases/tag/1.0.3)). ### [`v16.3.3`](https://redirect.github.com/lint-staged/lint-staged/blob/HEAD/CHANGELOG.md#1633) [Compare Source](https://redirect.github.com/lint-staged/lint-staged/compare/v16.3.2...v16.3.3) ##### Patch Changes - [#​1740](https://redirect.github.com/lint-staged/lint-staged/pull/1740) [`0109e8d`](https://redirect.github.com/lint-staged/lint-staged/commit/0109e8d1507409d950dab0d65ce27bd40b1137c7) Thanks [@​iiroj](https://redirect.github.com/iiroj)! - Make sure Git's warning about CRLF line-endings doesn't interfere with creating initial backup stash. ### [`v16.3.2`](https://redirect.github.com/lint-staged/lint-staged/blob/HEAD/CHANGELOG.md#1632) [Compare Source](https://redirect.github.com/lint-staged/lint-staged/compare/v16.3.1...v16.3.2) ##### Patch Changes - [#​1735](https://redirect.github.com/lint-staged/lint-staged/pull/1735) [`2adaf6c`](https://redirect.github.com/lint-staged/lint-staged/commit/2adaf6c3a76152abddbf23b749dfa5d62982f3cf) Thanks [@​iiroj](https://redirect.github.com/iiroj)! - Hide the extra `cmd` window on Windows by spawning tasks without the `detached` option. ### [`v16.3.1`](https://redirect.github.com/lint-staged/lint-staged/blob/HEAD/CHANGELOG.md#1631) [Compare Source](https://redirect.github.com/lint-staged/lint-staged/compare/v16.3.0...v16.3.1) ##### Patch Changes - [#​1729](https://redirect.github.com/lint-staged/lint-staged/pull/1729) [`cd5d762`](https://redirect.github.com/lint-staged/lint-staged/commit/cd5d762c288bcfe36274c32f018cea97dfe11280) Thanks [@​iiroj](https://redirect.github.com/iiroj)! - Remove `nano-spawn` as a dependency from `package.json` as it was replaced with `tinyexec` and is no longer used. ### [`v16.3.0`](https://redirect.github.com/lint-staged/lint-staged/blob/HEAD/CHANGELOG.md#1630) [Compare Source](https://redirect.github.com/lint-staged/lint-staged/compare/v16.2.7...v16.3.0) ##### Minor Changes - [#​1698](https://redirect.github.com/lint-staged/lint-staged/pull/1698) [`feda37a`](https://redirect.github.com/lint-staged/lint-staged/commit/feda37aa590789e847f32a4aabc346af1d79c547) Thanks [@​iiroj](https://redirect.github.com/iiroj)! - Run external processes with [`tinyexec`](https://redirect.github.com/tinylibs/tinyexec) instead of [`nano-spawn`](https://redirect.github.com/sindresorhus/nano-spawn). `nano-spawn` replaced [`execa`](https://redirect.github.com/sindresorhus/execa) in *lint-staged* version 16 to limit the amount of npm dependencies required, but caused some unknown issues related to spawning tasks. Let's hope `tinyexec` improves the situation. - [#​1699](https://redirect.github.com/lint-staged/lint-staged/pull/1699) [`1346d16`](https://redirect.github.com/lint-staged/lint-staged/commit/1346d16387e188911ef64e8bad6b8a6252cb6d71) Thanks [@​iiroj](https://redirect.github.com/iiroj)! - Remove `pidtree` as a dependency. When a task fails, its sub-processes are killed more efficiently via the process group on Unix systems, and the `taskkill` command on Windows. ##### Patch Changes - [#​1726](https://redirect.github.com/lint-staged/lint-staged/pull/1726) [`87467aa`](https://redirect.github.com/lint-staged/lint-staged/commit/87467aaa76e1edc2547f3f3d462a4495afa5337d) Thanks [@​iiroj](https://redirect.github.com/iiroj)! - Incorrect brace expansions like `*.{js}` (*nothing to expand*) are detected exhaustively, instead of just a single pass. ### [`v16.2.7`](https://redirect.github.com/lint-staged/lint-staged/blob/HEAD/CHANGELOG.md#1627) [Compare Source](https://redirect.github.com/lint-staged/lint-staged/compare/v16.2.6...v16.2.7) ##### Patch Changes - [#​1711](https://redirect.github.com/lint-staged/lint-staged/pull/1711) [`ef74c8d`](https://redirect.github.com/lint-staged/lint-staged/commit/ef74c8d165d5acd3ce88567e02b891e0e9af8e0e) Thanks [@​iiroj](https://redirect.github.com/iiroj)! - Do not display a "*failed to spawn*" error message when a task fails normally. This message is reserved for when the task didn't run because spawning it failed. ### [`v16.2.6`](https://redirect.github.com/lint-staged/lint-staged/blob/HEAD/CHANGELOG.md#1626) [Compare Source](https://redirect.github.com/lint-staged/lint-staged/compare/v16.2.5...v16.2.6) ##### Patch Changes - [#​1693](https://redirect.github.com/lint-staged/lint-staged/pull/1693) [`33d4502`](https://redirect.github.com/lint-staged/lint-staged/commit/33d4502ef9c939a9c6f41fc630a34e0985220f8e) Thanks [@​Adrian-Baran-GY](https://redirect.github.com/Adrian-Baran-GY)! - Fix problems with `--continue-on-error` option, where tasks might have still been killed (`SIGINT`) when one of them failed. ### [`v16.2.5`](https://redirect.github.com/lint-staged/lint-staged/blob/HEAD/CHANGELOG.md#1625) [Compare Source](https://redirect.github.com/lint-staged/lint-staged/compare/v16.2.4...v16.2.5) ##### Patch Changes - [#​1687](https://redirect.github.com/lint-staged/lint-staged/pull/1687) [`9e02d9d`](https://redirect.github.com/lint-staged/lint-staged/commit/9e02d9dc8a84bfeb7995520f00f7080b07a2e839) Thanks [@​iiroj](https://redirect.github.com/iiroj)! - Fix unhandled promise rejection when spawning tasks (*instead of the tasks themselves failing*). Previously when a task failed to spawn, *lint-staged* also failed and the backup stash might not have been automatically restored. ### [`v16.2.4`](https://redirect.github.com/lint-staged/lint-staged/blob/HEAD/CHANGELOG.md#1624) [Compare Source](https://redirect.github.com/lint-staged/lint-staged/compare/v16.2.3...v16.2.4) ##### Patch Changes - [#​1682](https://redirect.github.com/lint-staged/lint-staged/pull/1682) [`0176038`](https://redirect.github.com/lint-staged/lint-staged/commit/01760380e57080d136cc396455346c36aef5770e) Thanks [@​iiroj](https://redirect.github.com/iiroj)! - Update dependencies, including [`nano-spawn@2.0.0`](https://redirect.github.com/sindresorhus/nano-spawn/releases/tag/v2.0.0) with bug fixes. - [#​1671](https://redirect.github.com/lint-staged/lint-staged/pull/1671) [`581a54e`](https://redirect.github.com/lint-staged/lint-staged/commit/581a54eea6ba3a3a1b715407c895f63a961903f3) Thanks [@​iiroj](https://redirect.github.com/iiroj)! - Speed up execution by only importing the `yaml` depedency if using YAML configuration files. ### [`v16.2.3`](https://redirect.github.com/lint-staged/lint-staged/blob/HEAD/CHANGELOG.md#1623) [Compare Source](https://redirect.github.com/lint-staged/lint-staged/compare/v16.2.2...v16.2.3) ##### Patch Changes - [#​1669](https://redirect.github.com/lint-staged/lint-staged/pull/1669) [`27cd541`](https://redirect.github.com/lint-staged/lint-staged/commit/27cd5413d973baea6b4f3da704fb3bee8298e751) Thanks [@​iiroj](https://redirect.github.com/iiroj)! - When using `--fail-on-changes`, automatically hidden (partially) unstaged changes are no longer counted to make *lint-staged* fail. ### [`v16.2.2`](https://redirect.github.com/lint-staged/lint-staged/blob/HEAD/CHANGELOG.md#1622) [Compare Source](https://redirect.github.com/lint-staged/lint-staged/compare/v16.2.1...v16.2.2) ##### Patch Changes - [#​1667](https://redirect.github.com/lint-staged/lint-staged/pull/1667) [`699f95d`](https://redirect.github.com/lint-staged/lint-staged/commit/699f95df8f89ac7f7d360bbf93740d19d5899ac5) Thanks [@​iiroj](https://redirect.github.com/iiroj)! - The backup stash will not be dropped when using `--fail-on-changes` and there are errors. When reverting to original state is disabled (via `--no-revert` or `--fail-on-changes`), hidden (partially) unstaged changes are still restored automatically so that it's easier to resolve the situation manually. Additionally, the example for using the backup stash manually now uses the correct backup hash, if available: ```shell % npx lint-staged --fail-on-changes ✔ Backed up original state in git stash (c18d55a3) ✔ Running tasks for staged files... ✖ Tasks modified files and --fail-on-changes was used! ↓ Cleaning up temporary files... ✖ lint-staged failed because `--fail-on-changes` was used. Any lost modifications can be restored from a git stash: > git stash list --format="%h %s" c18d55a3 On main: lint-staged automatic backup > git apply --index c18d55a3 ``` ### [`v16.2.1`](https://redirect.github.com/lint-staged/lint-staged/blob/HEAD/CHANGELOG.md#1621) [Compare Source](https://redirect.github.com/lint-staged/lint-staged/compare/v16.2.0...v16.2.1) ##### Patch Changes - [#​1664](https://redirect.github.com/lint-staged/lint-staged/pull/1664) [`8277b3b`](https://redirect.github.com/lint-staged/lint-staged/commit/8277b3b298421ebbb39c43d7e3538481e15c4659) Thanks [@​iiroj](https://redirect.github.com/iiroj)! - The built-in TypeScript types have been updated to more closely match the implementation. Notably, the list of staged files supplied to task functions is `readonly string[]` and can't be mutated. Thanks [@​outslept](https://redirect.github.com/outslept)! ```diff export default { --- "*": (files: string[]) => void console.log('staged files', files) +++ "*": (files: readonly string[]) => void console.log('staged files', files) } ``` - [#​1654](https://redirect.github.com/lint-staged/lint-staged/pull/1654) [`70b9af3`](https://redirect.github.com/lint-staged/lint-staged/commit/70b9af3ac3fd66af94936e55bb3e91381937b41f) Thanks [@​iiroj](https://redirect.github.com/iiroj)! - This version has been published from GitHub Actions using [Trusted Publishing for npm packages](https://docs.npmjs.com/trusted-publishers). - [#​1659](https://redirect.github.com/lint-staged/lint-staged/pull/1659) [`4996817`](https://redirect.github.com/lint-staged/lint-staged/commit/49968170abb3bab7ac8dc0a6bc5ea92850337baa) Thanks [@​iiroj](https://redirect.github.com/iiroj)! - Fix searching configuration files when the working directory is a subdirectory of a git repository, and there are `package.json` files in the working directory. This situation might happen when running *lint-staged* for a single package in a monorepo. - [#​1654](https://redirect.github.com/lint-staged/lint-staged/pull/1654) [`7021f0a`](https://redirect.github.com/lint-staged/lint-staged/commit/7021f0af40ac1d5787501894c0f2222980023703) Thanks [@​iiroj](https://redirect.github.com/iiroj)! - Return the caret semver range (`^`) to direct dependencies so that future patch and minor versions are allowed. This enables projects to better maintain and deduplicate their own transitive dependencies while not requiring direct updates to *lint-staged*. This was changed in [16.2.0](https://redirect.github.com/lint-staged/lint-staged/releases/tag/v16.2.0) after the vulnerability issues with `chalk` and `debug`, which were also removed in the same version. Given the recent vulnerabilities in the *npm* ecosystem, it's best to be very careful when updating dependencies. ### [`v16.2.0`](https://redirect.github.com/lint-staged/lint-staged/blob/HEAD/CHANGELOG.md#1620) [Compare Source](https://redirect.github.com/lint-staged/lint-staged/compare/v16.1.6...v16.2.0) ##### Minor Changes - [#​1615](https://redirect.github.com/lint-staged/lint-staged/pull/1615) [`99eb742`](https://redirect.github.com/lint-staged/lint-staged/commit/99eb74200e8db69e72dba45314025953b8b0794e) Thanks [@​iiroj](https://redirect.github.com/iiroj)! - Added a new option `--fail-on-changes` to make *lint-staged* exit with code 1 when tasks modify any files, making the `precommit` hook fail. This is similar to the `git diff --exit-code` option. Using this flag also implies the `--no-revert` flag which means any changes made by tasks will be left in the working tree after failing, so that they can be manually staged and the commit tried again. - [#​1611](https://redirect.github.com/lint-staged/lint-staged/pull/1611) [`cd05fd3`](https://redirect.github.com/lint-staged/lint-staged/commit/cd05fd349594baf586fbafb05588ff07d86060b7) Thanks [@​rlorenzo](https://redirect.github.com/rlorenzo)! - Added a new option `--continue-on-error` so that *lint-staged* will run all tasks to completion even if some of them fail. By default, *lint-staded* will exit early on the first failure. - [#​1637](https://redirect.github.com/lint-staged/lint-staged/pull/1637) [`82fcc07`](https://redirect.github.com/lint-staged/lint-staged/commit/82fcc0789c17bf6b2ea2649147abec77fa619375) Thanks [@​iiroj](https://redirect.github.com/iiroj)! - Internal *lint-staged* errors are now thrown and visible in the console output. Previously they were caught with the process exit code set to 1, but not logged. This happens when, for example, there's a syntax error in the *lint-staged* configuration file. - [#​1647](https://redirect.github.com/lint-staged/lint-staged/pull/1647) [`a5ecc06`](https://redirect.github.com/lint-staged/lint-staged/commit/a5ecc0605d52756167417c84cb0007ea7bceaaa3) Thanks [@​iiroj](https://redirect.github.com/iiroj)! - Remove [debug](https://redirect.github.com/debug-js/debug) as a dependency due to recent malware issue; read more at [debug-js/debug#1005](https://redirect.github.com/debug-js/debug/issues/1005). Because of this, the `DEBUG` environment variable is no longer supported — use the `--debug` to enable debugging - [#​1636](https://redirect.github.com/lint-staged/lint-staged/pull/1636) [`8db2717`](https://redirect.github.com/lint-staged/lint-staged/commit/8db2717574ebfa2b80e0fc4eb0b24d705fd264fc) Thanks [@​iiroj](https://redirect.github.com/iiroj)! - Added a new option `--hide-unstaged` so that *lint-staged* will hide all unstaged changes to tracked files before running tasks. The changes will be applied back after running the tasks. Note that the combination of flags `--hide-unstaged --no-hide-partially-staged` isn't meaningful and behaves the same as just `--hide-unstaged`. Thanks to [@​ItsNickBarry](https://redirect.github.com/ItsNickBarry) for the idea and initial implementation in [#​1552](https://redirect.github.com/lint-staged/lint-staged/pull/1552). - [#​1648](https://redirect.github.com/lint-staged/lint-staged/pull/1648) [`7900b3b`](https://redirect.github.com/lint-staged/lint-staged/commit/7900b3b79c5e2e69662cb8b1bcbcae79c3549421) Thanks [@​iiroj](https://redirect.github.com/iiroj)! - Remove [lilconfig](https://redirect.github.com/antonk52/lilconfig) to reduce reliance on third-party dependencies. It was used to find possible config files outside of those tracked in Git, including from the parent directories. This behavior has been moved directly into *lint-staged* and should work about the same. ##### Patch Changes - [#​1633](https://redirect.github.com/lint-staged/lint-staged/pull/1633) [`7f9e485`](https://redirect.github.com/lint-staged/lint-staged/commit/7f9e485a981707897e0d417f6a62008f0c098e00) Thanks [@​dependabot](https://redirect.github.com/apps/dependabot)! - Bumps [listr2](https://redirect.github.com/listr2/listr2) from 9.0.3 to 9.0.4. - [#​1626](https://redirect.github.com/lint-staged/lint-staged/pull/1626) [`99d5a9b`](https://redirect.github.com/lint-staged/lint-staged/commit/99d5a9b0ddcba7d471d39ff3969d37988f1e2705) Thanks [@​iiroj](https://redirect.github.com/iiroj)! - Due to recent phishing attacks, for example [chalk@5.6.1](https://redirect.github.com/chalk/chalk/issues/656) was released with malware. To avoid *lint-staged*'s users being at risk the **direct dependencies are pinned to exact versions**, instead of allowing future patch versions with the [caret (`^`) range](https://docs.npmjs.com/cli/v6/using-npm/semver#caret-ranges-123-025-004). - [#​1588](https://redirect.github.com/lint-staged/lint-staged/pull/1588) [`035bbf2`](https://redirect.github.com/lint-staged/lint-staged/commit/035bbf268ac47bbaf2cfa737c3b2240d38feb22e) Thanks [@​outslept](https://redirect.github.com/outslept)! - Increase performance by listing staged files and searching for configuration concurrently. - [#​1645](https://redirect.github.com/lint-staged/lint-staged/pull/1645) [`deba3ad`](https://redirect.github.com/lint-staged/lint-staged/commit/deba3ad83581938dd71b86b563e62827b5fc2a0a) Thanks [@​iiroj](https://redirect.github.com/iiroj)! - Remove [chalk](https://redirect.github.com/chalk/chalk) as a dependency due to recent malware issue; read more at [chalk/chalk#656](https://redirect.github.com/chalk/chalk/issues/656). If you are having trouble with ANSI color codes when using *lint-staged*, you can try setting either `FORCE_COLOR=true` or `NO_COLOR=true` env variables. ### [`v16.1.6`](https://redirect.github.com/lint-staged/lint-staged/blob/HEAD/CHANGELOG.md#1616) [Compare Source](https://redirect.github.com/lint-staged/lint-staged/compare/v16.1.5...v16.1.6) ##### Patch Changes - [#​1610](https://redirect.github.com/lint-staged/lint-staged/pull/1610) [`e93578e`](https://redirect.github.com/lint-staged/lint-staged/commit/e93578e265a69ed6b02fcaa11486078c1bdbdaaa) Thanks [@​iiroj](https://redirect.github.com/iiroj)! - Try to improve terminating of subprocess of tasks by using `SIGKILL`, and only calling `pidtree` when the the main task process has a known pid. ### [`v16.1.5`](https://redirect.github.com/lint-staged/lint-staged/blob/HEAD/CHANGELOG.md#1615) [Compare Source](https://redirect.github.com/lint-staged/lint-staged/compare/v16.1.4...v16.1.5) ##### Patch Changes - [#​1608](https://redirect.github.com/lint-staged/lint-staged/pull/1608) [`4e3ce22`](https://redirect.github.com/lint-staged/lint-staged/commit/4e3ce225b33f759f78a84d156189dc38e536cdc6) Thanks [@​srsatt](https://redirect.github.com/srsatt)! - Detect the git repo's top-level directory correctly when in a worktree. ### [`v16.1.4`](https://redirect.github.com/lint-staged/lint-staged/blob/HEAD/CHANGELOG.md#1614) [Compare Source](https://redirect.github.com/lint-staged/lint-staged/compare/v16.1.3...v16.1.4) ##### Patch Changes - [#​1604](https://redirect.github.com/lint-staged/lint-staged/pull/1604) [`90b37b0`](https://redirect.github.com/lint-staged/lint-staged/commit/90b37b00c2c30b9cacf6c080f6a0885e1151eb7a) Thanks [@​iiroj](https://redirect.github.com/iiroj)! - Add another `types` field to `package.json` to make even more sure NPM detects that *lint-staged* includes built-in TypeScript type definitions. ### [`v16.1.3`](https://redirect.github.com/lint-staged/lint-staged/blob/HEAD/CHANGELOG.md#1613) [Compare Source](https://redirect.github.com/lint-staged/lint-staged/compare/v16.1.2...v16.1.3) ##### Patch Changes - [#​1602](https://redirect.github.com/lint-staged/lint-staged/pull/1602) [`7ea700b`](https://redirect.github.com/lint-staged/lint-staged/commit/7ea700bcf3d0078a01720a9c8dc13a271387afbd) Thanks [@​dword-design](https://redirect.github.com/dword-design)! - Add the `types` field to `package.json` to make sure NPM detects *lint-staged* includes built-in TypeScript type definitions. ### [`v16.1.2`](https://redirect.github.com/lint-staged/lint-staged/blob/HEAD/CHANGELOG.md#1612) [Compare Source](https://redirect.github.com/lint-staged/lint-staged/compare/v16.1.1...v16.1.2) ##### Patch Changes - [#​1570](https://redirect.github.com/lint-staged/lint-staged/pull/1570) [`a7c0c88`](https://redirect.github.com/lint-staged/lint-staged/commit/a7c0c88bcfe94e695528cb33e69fea58586691fc) Thanks [@​ItsNickBarry](https://redirect.github.com/ItsNickBarry)! - When using `--diff-filter` with the `D` option to include deleted staged files, *lint-staged* no longer tries to stage the deleted files, unless they're no longer deleted. Previously this caused an error from `git add` like `fatal: pathspec 'deleted-file' did not match any files`. - [`38f942e`](https://redirect.github.com/lint-staged/lint-staged/commit/38f942ecc456355d5f12af68db1696f3411f65c2) Thanks [@​iiroj](https://redirect.github.com/iiroj)! - Removed an extraneous log entry that printed `shouldHidePArtiallyStagedFiles` to console output. ### [`v16.1.1`](https://redirect.github.com/lint-staged/lint-staged/blob/HEAD/CHANGELOG.md#1611) [Compare Source](https://redirect.github.com/lint-staged/lint-staged/compare/v16.1.0...v16.1.1) ##### Patch Changes - [#​1565](https://redirect.github.com/lint-staged/lint-staged/pull/1565) [`3686977`](https://redirect.github.com/lint-staged/lint-staged/commit/3686977ccdadf70b709c16c0346ef6c2b18e2376) Thanks [@​iiroj](https://redirect.github.com/iiroj)! - *Lint-staged* now explicitly warns about potential data loss when using `--no-stash`. - [#​1571](https://redirect.github.com/lint-staged/lint-staged/pull/1571) [`02299a9`](https://redirect.github.com/lint-staged/lint-staged/commit/02299a9e4f98a05c13beb27f3596af73aaa8c150) Thanks [@​iiroj](https://redirect.github.com/iiroj)! - Function tasks (introduced in v16.0.0) only receive the staged files matching the configured glob, instead of all staged files. - [#​1563](https://redirect.github.com/lint-staged/lint-staged/pull/1563) [`bc61c74`](https://redirect.github.com/lint-staged/lint-staged/commit/bc61c74383b6d100c55b8d275b979d583ffbe5a1) Thanks [@​iiroj](https://redirect.github.com/iiroj)! - This version fixes incorrect behavior where unstaged changes were committed when using the `--no-stash` option. This happened because `--no-stash` implied `--no-hide-partially-staged`, meaning unstaged changes to files which also had other staged changes were added to the commit by *lint-staged*; this is no longer the case. The previous (incorrect) behavior can still be achieved by using both options `--no-stash --no-hide-partially-staged` at the same time. ### [`v16.1.0`](https://redirect.github.com/lint-staged/lint-staged/blob/HEAD/CHANGELOG.md#1610) [Compare Source](https://redirect.github.com/lint-staged/lint-staged/compare/v16.0.0...v16.1.0) ##### Minor Changes - [#​1536](https://redirect.github.com/lint-staged/lint-staged/pull/1536) [`e729daa`](https://redirect.github.com/lint-staged/lint-staged/commit/e729daa3b3ae28e613f63e730652dbfad5d1c594) Thanks [@​iiroj](https://redirect.github.com/iiroj)! - A new flag `--no-revert` has been introduced for when task modifications should be applied to the index before aborting the commit in case of errors. By default, *lint-staged* will clear all task modifications and revert to the original state. - [#​1550](https://redirect.github.com/lint-staged/lint-staged/pull/1550) [`b27fa3f`](https://redirect.github.com/lint-staged/lint-staged/commit/b27fa3fecb75bcdcaa4bcd483c9d5c0755a22607) Thanks [@​iiroj](https://redirect.github.com/iiroj)! - *Lint-staged* now ignores symlinks and leaves them out from the list of staged files. ##### Patch Changes - [#​1558](https://redirect.github.com/lint-staged/lint-staged/pull/1558) [`c37dc38`](https://redirect.github.com/lint-staged/lint-staged/commit/c37dc38dddbdebc41df4dbd909d79c98c3f69eb3) Thanks [@​iiroj](https://redirect.github.com/iiroj)! - The minimum required Node.js version is lowered to `20.17` following [nano-spawn@1.0.2](https://redirect.github.com/sindresorhus/nano-spawn/releases/tag/v1.0.2). ### [`v16.0.0`](https://redirect.github.com/lint-staged/lint-staged/blob/HEAD/CHANGELOG.md#1600) [Compare Source](https://redirect.github.com/lint-staged/lint-staged/compare/v15.5.2...v16.0.0) ##### Major Changes - [#​1546](https://redirect.github.com/lint-staged/lint-staged/pull/1546) [`158d15c`](https://redirect.github.com/lint-staged/lint-staged/commit/158d15c9aea0a3a87790ec3766442763cf387dba) Thanks [@​iiroj](https://redirect.github.com/iiroj)! - Processes are spawned using [nano-spawn](https://redirect.github.com/sindresorhus/nano-spawn) instead of [execa](https://redirect.github.com/sindresorhus/execa). If you are using Node.js scripts as tasks, you might need to explicitly run them with `node`, especially when using Windows: ```json { "*.js": "node my-js-linter.js" } ``` - [#​1546](https://redirect.github.com/lint-staged/lint-staged/pull/1546) [`158d15c`](https://redirect.github.com/lint-staged/lint-staged/commit/158d15c9aea0a3a87790ec3766442763cf387dba) Thanks [@​iiroj](https://redirect.github.com/iiroj)! - The `--shell` flag has been removed and *lint-staged* no longer supports evaluating commands directly via a shell. To migrate existing commands, you can create a shell script and invoke it instead. Lint-staged will pass matched staged files as a list of arguments, accessible via `"$@​"`: ```shell ```
--- ### Configuration 📅 **Schedule**: (in timezone Etc/UTC) - Branch creation - Only on Sunday and Saturday (`* * * * 0,6`) - Between 12:00 AM and 12:59 PM, only on Monday (`* 0-12 * * 1`) - Between 09:00 PM and 11:59 PM, Monday through Friday (`* 21-23 * * 1-5`) - Between 12:00 AM and 04:59 AM, Tuesday through Saturday (`* 0-4 * * 2-6`) - Automerge - Only on Sunday and Saturday (`* * * * 0,6`) - Between 12:00 AM and 12:59 PM, only on Monday (`* 0-12 * * 1`) - Between 10:00 PM and 11:59 PM, Monday through Friday (`* 22-23 * * 1-5`) - Between 12:00 AM and 04:59 AM, Tuesday through Saturday (`* 0-4 * * 2-6`) 🚦 **Automerge**: Enabled. ♻ **Rebasing**: Whenever PR is behind base branch, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] If you want to rebase/retry this PR, check this box --- This PR was generated by [Mend Renovate](https://mend.io/renovate/). View the [repository job log](https://developer.mend.io/github/TryGhost/Ghost). Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 142 ++++++++++++++++++++++++--------------------------- 2 files changed, 69 insertions(+), 75 deletions(-) diff --git a/package.json b/package.json index b137d2e6443..96bbd61614d 100644 --- a/package.json +++ b/package.json @@ -80,7 +80,7 @@ "husky": "8.0.3", "inquirer": "8.2.7", "jsonc-parser": "3.3.1", - "lint-staged": "15.5.2", + "lint-staged": "16.4.0", "nx": "22.0.4", "rimraf": "6.1.3", "semver": "7.7.4", diff --git a/yarn.lock b/yarn.lock index 4d37d9f4850..28ae69b1b9b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -12215,10 +12215,10 @@ ansi-regex@^5.0.1: resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== -ansi-regex@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-6.0.1.tgz#3183e38fae9a65d7cb5e53945cd5897d0260a06a" - integrity sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA== +ansi-regex@^6.2.2: + version "6.2.2" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-6.2.2.tgz#60216eea464d864597ce2832000738a0589650c1" + integrity sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg== ansi-styles@^2.2.1: version "2.2.1" @@ -12244,10 +12244,10 @@ ansi-styles@^5.0.0, ansi-styles@^5.2.0: resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-5.2.0.tgz#07449690ad45777d1924ac2abb2fc8895dba836b" integrity sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA== -ansi-styles@^6.0.0, ansi-styles@^6.1.0, ansi-styles@^6.2.1: - version "6.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-6.2.1.tgz#0e62320cf99c21afff3b3012192546aacbfb05c5" - integrity sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug== +ansi-styles@^6.1.0, ansi-styles@^6.2.1, ansi-styles@^6.2.3: + version "6.2.3" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-6.2.3.tgz#c044d5dcc521a076413472597a1acb1f103c4041" + integrity sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg== ansi-to-html@^0.6.15, ansi-to-html@^0.6.6: version "0.6.15" @@ -15310,7 +15310,7 @@ chalk@4.1.2, chalk@^4.0.0, chalk@^4.1.0, chalk@^4.1.1, chalk@^4.1.2: ansi-styles "^4.1.0" supports-color "^7.1.0" -chalk@5.6.2, chalk@^5.0.0, chalk@^5.3.0, chalk@^5.4.1: +chalk@5.6.2, chalk@^5.0.0, chalk@^5.3.0: version "5.6.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-5.6.2.tgz#b1238b6e23ea337af71c7f8a295db5af0c158aea" integrity sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA== @@ -15687,13 +15687,13 @@ cli-table@^0.3.1: dependencies: colors "1.0.3" -cli-truncate@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/cli-truncate/-/cli-truncate-4.0.0.tgz#6cc28a2924fee9e25ce91e973db56c7066e6172a" - integrity sha512-nPdaFdQ0h/GEigbPClz11D0v/ZJEwxmeVZGeMo3Z5StPtUTkA9o1lD6QwoirYiSDzbcwn2XcjwmCp68W1IS4TA== +cli-truncate@^5.0.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/cli-truncate/-/cli-truncate-5.2.0.tgz#c8e72aaca8339c773d128c36e0a17c6315b694eb" + integrity sha512-xRwvIOMGrfOAnM1JYtqQImuaNtDEv9v6oIYAs4LIHwTiKee8uwvIi363igssOC0O5U04i4AlENs79LQLu9tEMw== dependencies: - slice-ansi "^5.0.0" - string-width "^7.0.0" + slice-ansi "^8.0.0" + string-width "^8.2.0" cli-width@^2.0.0: version "2.2.1" @@ -15967,10 +15967,10 @@ commander@^11.1.0, commander@~11.1.0: resolved "https://registry.yarnpkg.com/commander/-/commander-11.1.0.tgz#62fdce76006a68e5c1ab3314dc92e800eb83d906" integrity sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ== -commander@^13.1.0: - version "13.1.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-13.1.0.tgz#776167db68c78f38dcce1f9b8d7b8b9a488abf46" - integrity sha512-/rFeCpNJQbhSZjGVwO9RFV3xPqbnERS8MmIQzCtD/zl6gpJuV/bMLuN92oG3F7d8oDEHHRrujSXNUr8fpjntKw== +commander@^14.0.3: + version "14.0.3" + resolved "https://registry.yarnpkg.com/commander/-/commander-14.0.3.tgz#425d79b48f9af82fcd9e4fc1ea8af6c5ec07bbc2" + integrity sha512-H+y0Jo/T1RZ9qPP4Eh1pkcQcLRglraJaSLoyOtHxu6AapkjWVCy2Sit1QQ4x3Dng8qDlSsZEet7g5Pq06MvTgw== commander@^2.19.0, commander@^2.20.0, commander@^2.6.0: version "2.20.3" @@ -21846,10 +21846,10 @@ get-caller-file@^2.0.5: resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== -get-east-asian-width@^1.0.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/get-east-asian-width/-/get-east-asian-width-1.2.0.tgz#5e6ebd9baee6fb8b7b6bd505221065f0cd91f64e" - integrity sha512-2nk+7SIVb14QrgXFHcm84tD4bKQz0RxPuMT8Ag5KPOq7J5fEmAg0UbXdTOSHqNuHSU28k55qnceesxXRZGzKWA== +get-east-asian-width@^1.0.0, get-east-asian-width@^1.3.1, get-east-asian-width@^1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/get-east-asian-width/-/get-east-asian-width-1.5.0.tgz#ce7008fe345edcf5497a6f557cfa54bc318a9ce7" + integrity sha512-CQ+bEO+Tva/qlmw24dCejulK5pMzVnUOFOijVogd3KQs07HnRIgp8TGipvCCRT06xeYEbpbgwaCxglFyiuIcmA== get-func-name@^2.0.1, get-func-name@^2.0.2: version "2.0.2" @@ -23660,17 +23660,12 @@ is-fullwidth-code-point@^3.0.0: resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== -is-fullwidth-code-point@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz#fae3167c729e7463f8461ce512b080a49268aa88" - integrity sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ== - -is-fullwidth-code-point@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-5.0.0.tgz#9609efced7c2f97da7b60145ef481c787c7ba704" - integrity sha512-OVa3u9kkBbw7b8Xw5F9P+D/T9X+Z4+JruYVNapTjPYZYUznQ5YfWeFkOj606XYYW8yugTfC8Pj0hYqvi4ryAhA== +is-fullwidth-code-point@^5.0.0, is-fullwidth-code-point@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-5.1.0.tgz#046b2a6d4f6b156b2233d3207d4b5a9783999b98" + integrity sha512-5XHYaSyiqADb4RnZ1Bdad6cPp8Toise4TzEjcOYDHZkTCbKgiUl7WTUCpNWHuxmDt91wnsZBc9xinNzopv3JMQ== dependencies: - get-east-asian-width "^1.0.0" + get-east-asian-width "^1.3.1" is-generator-fn@^2.0.0: version "2.1.0" @@ -25742,21 +25737,17 @@ linkifyjs@^4.3.2: resolved "https://registry.yarnpkg.com/linkifyjs/-/linkifyjs-4.3.2.tgz#d97eb45419aabf97ceb4b05a7adeb7b8c8ade2b1" integrity sha512-NT1CJtq3hHIreOianA8aSXn6Cw0JzYOuDQbOrSPe7gqFnCpKP++MQe3ODgO3oh2GJFORkAAdqredOa60z63GbA== -lint-staged@15.5.2: - version "15.5.2" - resolved "https://registry.yarnpkg.com/lint-staged/-/lint-staged-15.5.2.tgz#beff028fd0681f7db26ffbb67050a21ed4d059a3" - integrity sha512-YUSOLq9VeRNAo/CTaVmhGDKG+LBtA8KF1X4K5+ykMSwWST1vDxJRB2kv2COgLb1fvpCo+A/y9A0G0znNVmdx4w== +lint-staged@16.4.0: + version "16.4.0" + resolved "https://registry.yarnpkg.com/lint-staged/-/lint-staged-16.4.0.tgz#a00b0e3abff59239cef6d7d9341e8f8473308e23" + integrity sha512-lBWt8hujh/Cjysw5GYVmZpFHXDCgZzhrOm8vbcUdobADZNOK/bRshr2kM3DfgrrtR1DQhfupW9gnIXOfiFi+bw== dependencies: - chalk "^5.4.1" - commander "^13.1.0" - debug "^4.4.0" - execa "^8.0.1" - lilconfig "^3.1.3" - listr2 "^8.2.5" - micromatch "^4.0.8" - pidtree "^0.6.0" + commander "^14.0.3" + listr2 "^9.0.5" + picomatch "^4.0.3" string-argv "^0.3.2" - yaml "^2.7.0" + tinyexec "^1.0.4" + yaml "^2.8.2" liquid-fire@0.34.0: version "0.34.0" @@ -25789,12 +25780,12 @@ liquid-wormhole@3.0.1: ember-decorators "^6.1.1" perf-primitives RobbieTheWagner/perf-primitives#a6a26f11497ca27be3763a88a5f20744e424756b -listr2@^8.2.5: - version "8.2.5" - resolved "https://registry.yarnpkg.com/listr2/-/listr2-8.2.5.tgz#5c9db996e1afeb05db0448196d3d5f64fec2593d" - integrity sha512-iyAZCeyD+c1gPyE9qpFu8af0Y+MRtmKOncdGoA2S5EY8iFq99dmmvkNnHiWo+pj0s7yH7l3KPIgee77tKpXPWQ== +listr2@^9.0.5: + version "9.0.5" + resolved "https://registry.yarnpkg.com/listr2/-/listr2-9.0.5.tgz#92df7c4416a6da630eb9ef46da469b70de97b316" + integrity sha512-ME4Fb83LgEgwNw96RKNvKV4VTLuXfoKudAmm2lP8Kk87KaMK0/Xrx/aAkMWmT8mDb+3MlFDspfbCs7adjRxA2g== dependencies: - cli-truncate "^4.0.0" + cli-truncate "^5.0.0" colorette "^2.0.20" eventemitter3 "^5.0.1" log-update "^6.1.0" @@ -29188,11 +29179,6 @@ picomatch@^4.0.2, picomatch@^4.0.3, picomatch@^4.0.4: resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-4.0.4.tgz#fd6f5e00a143086e074dffe4c924b8fb293b0589" integrity sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A== -pidtree@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/pidtree/-/pidtree-0.6.0.tgz#90ad7b6d42d5841e69e0a2419ef38f8883aa057c" - integrity sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g== - pify@^2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" @@ -32915,14 +32901,6 @@ slice-ansi@^4.0.0: astral-regex "^2.0.0" is-fullwidth-code-point "^3.0.0" -slice-ansi@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-5.0.0.tgz#b73063c57aa96f9cd881654b15294d95d285c42a" - integrity sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ== - dependencies: - ansi-styles "^6.0.0" - is-fullwidth-code-point "^4.0.0" - slice-ansi@^7.1.0: version "7.1.0" resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-7.1.0.tgz#cd6b4655e298a8d1bdeb04250a433094b347b9a9" @@ -32931,6 +32909,14 @@ slice-ansi@^7.1.0: ansi-styles "^6.2.1" is-fullwidth-code-point "^5.0.0" +slice-ansi@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-8.0.0.tgz#22d0b66d18bc5c57f488bfcf36cbde3bef731537" + integrity sha512-stxByr12oeeOyY2BlviTNQlYV5xOj47GirPr4yA1hE9JCtxfQN0+tVbkxwCtYDQWhEKWFHsEK48ORg5jrouCAg== + dependencies: + ansi-styles "^6.2.3" + is-fullwidth-code-point "^5.1.0" + slick@^1.12.2: version "1.12.2" resolved "https://registry.yarnpkg.com/slick/-/slick-1.12.2.tgz#bd048ddb74de7d1ca6915faa4a57570b3550c2d7" @@ -33557,6 +33543,14 @@ string-width@^7.0.0: get-east-asian-width "^1.0.0" strip-ansi "^7.1.0" +string-width@^8.2.0: + version "8.2.0" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-8.2.0.tgz#bdb6a9bd6d7800db635adae96cdb0443fec56c42" + integrity sha512-6hJPQ8N0V0P3SNmP6h2J99RLuzrWz2gvT7VnK5tKvrNqJoyS9W4/Fb8mo31UiPvy00z7DQXkP2hnKBVav76thw== + dependencies: + get-east-asian-width "^1.5.0" + strip-ansi "^7.1.2" + string.prototype.matchall@^4.0.12, string.prototype.matchall@^4.0.5, string.prototype.matchall@^4.0.6: version "4.0.12" resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.12.tgz#6c88740e49ad4956b1332a911e949583a275d4c0" @@ -33681,12 +33675,12 @@ strip-ansi@^6.0.0, strip-ansi@^6.0.1: dependencies: ansi-regex "^5.0.1" -strip-ansi@^7.0.1, strip-ansi@^7.1.0: - version "7.1.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.1.0.tgz#d5b6568ca689d8561370b0707685d22434faff45" - integrity sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ== +strip-ansi@^7.0.1, strip-ansi@^7.1.0, strip-ansi@^7.1.2: + version "7.2.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.2.0.tgz#d22a269522836a627af8d04b5c3fd2c7fa3e32e3" + integrity sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w== dependencies: - ansi-regex "^6.0.1" + ansi-regex "^6.2.2" strip-bom@^3.0.0: version "3.0.0" @@ -34499,7 +34493,7 @@ tinyexec@^0.3.2: resolved "https://registry.yarnpkg.com/tinyexec/-/tinyexec-0.3.2.tgz#941794e657a85e496577995c6eef66f53f42b3d2" integrity sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA== -tinyexec@^1.0.2: +tinyexec@^1.0.2, tinyexec@^1.0.4: version "1.1.1" resolved "https://registry.yarnpkg.com/tinyexec/-/tinyexec-1.1.1.tgz#e1ff45dfa60d1dedb91b734956b78f6c2a3e821b" integrity sha512-VKS/ZaQhhkKFMANmAOhhXVoIfBXblQxGX1myCQ2faQrfmobMftXeJPcZGp0gS07ocvGJWDLZGyOZDadDBqYIJg== @@ -36678,10 +36672,10 @@ yaml@^1.10.0: resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b" integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg== -yaml@^2.4.2, yaml@^2.6.0, yaml@^2.7.0: - version "2.8.1" - resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.8.1.tgz#1870aa02b631f7e8328b93f8bc574fac5d6c4d79" - integrity sha512-lcYcMxX2PO9XMGvAJkJ3OsNMw+/7FKes7/hgerGUYWIoWu5j/+YQqcZr5JnPZWzOsEBgMbSbiSTn/dv/69Mkpw== +yaml@^2.4.2, yaml@^2.6.0, yaml@^2.8.2: + version "2.8.3" + resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.8.3.tgz#a0d6bd2efb3dd03c59370223701834e60409bd7d" + integrity sha512-AvbaCLOO2Otw/lW5bmh9d/WEdcDFdQp2Z2ZUH3pX9U2ihyUY0nvLv7J6TrWowklRGPYbB/IuIMfYgxaCPg5Bpg== yargs-parser@21.1.1, yargs-parser@^21.1.1: version "21.1.1" From 4f95056b1aa0929f0f36d52899e0731af840f228 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 9 Apr 2026 13:48:05 +0100 Subject: [PATCH 07/18] Update dependency lodash-es to v4.17.23 [SECURITY] (#27292) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This PR contains the following updates: | Package | Change | [Age](https://docs.renovatebot.com/merge-confidence/) | [Confidence](https://docs.renovatebot.com/merge-confidence/) | |---|---|---|---| | [lodash-es](https://lodash.com/custom-builds) ([source](https://redirect.github.com/lodash/lodash)) | [`4.17.21` → `4.17.23`](https://renovatebot.com/diffs/npm/lodash-es/4.17.21/4.17.23) | ![age](https://developer.mend.io/api/mc/badges/age/npm/lodash-es/4.17.23?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/lodash-es/4.17.21/4.17.23?slim=true) | ### GitHub Vulnerability Alerts #### [CVE-2025-13465](https://redirect.github.com/lodash/lodash/security/advisories/GHSA-xxjr-mmjv-4gpg) ### Impact Lodash versions 4.0.0 through 4.17.22 are vulnerable to prototype pollution in the `_.unset` and `_.omit` functions. An attacker can pass crafted paths which cause Lodash to delete methods from global prototypes. The issue permits deletion of properties but does not allow overwriting their original behavior. ### Patches This issue is patched on 4.17.23. --- ### Release Notes
lodash/lodash (lodash-es) ### [`v4.17.23`](https://redirect.github.com/lodash/lodash/compare/0082be44648961341600e879042f74cd29d65d05...4.17.23) [Compare Source](https://redirect.github.com/lodash/lodash/compare/0082be44648961341600e879042f74cd29d65d05...4.17.23) ### [`v4.17.22`](https://redirect.github.com/lodash/lodash/compare/4.17.21...0082be44648961341600e879042f74cd29d65d05) [Compare Source](https://redirect.github.com/lodash/lodash/compare/4.17.21...0082be44648961341600e879042f74cd29d65d05)
--- ### Configuration 📅 **Schedule**: (in timezone Etc/UTC) - Branch creation - "" - Automerge - Only on Sunday and Saturday (`* * * * 0,6`) - Between 12:00 AM and 12:59 PM, only on Monday (`* 0-12 * * 1`) - Between 10:00 PM and 11:59 PM, Monday through Friday (`* 22-23 * * 1-5`) - Between 12:00 AM and 04:59 AM, Tuesday through Saturday (`* 0-4 * * 2-6`) 🚦 **Automerge**: Enabled. ♻ **Rebasing**: Whenever PR is behind base branch, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] If you want to rebase/retry this PR, check this box --- This PR was generated by [Mend Renovate](https://mend.io/renovate/). View the [repository job log](https://developer.mend.io/github/TryGhost/Ghost). Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- apps/admin-x-design-system/package.json | 2 +- apps/shade/package.json | 2 +- yarn.lock | 5 ----- 3 files changed, 2 insertions(+), 7 deletions(-) diff --git a/apps/admin-x-design-system/package.json b/apps/admin-x-design-system/package.json index 314d89033dd..cbacdca5b2d 100644 --- a/apps/admin-x-design-system/package.json +++ b/apps/admin-x-design-system/package.json @@ -48,7 +48,7 @@ "eslint-plugin-react-refresh": "0.4.24", "eslint-plugin-tailwindcss": "4.0.0-beta.0", "jsdom": "28.1.0", - "lodash-es": "4.17.21", + "lodash-es": "4.17.23", "postcss": "8.5.6", "postcss-import": "16.1.1", "react": "18.3.1", diff --git a/apps/shade/package.json b/apps/shade/package.json index ed21b4e14f4..3b96186387e 100644 --- a/apps/shade/package.json +++ b/apps/shade/package.json @@ -92,7 +92,7 @@ "eslint-plugin-storybook": "10.3.3", "eslint-plugin-tailwindcss": "4.0.0-beta.0", "jsdom": "28.1.0", - "lodash-es": "4.17.21", + "lodash-es": "4.17.23", "postcss": "8.5.6", "rollup-plugin-node-builtins": "2.1.2", "sinon": "18.0.1", diff --git a/yarn.lock b/yarn.lock index 28ae69b1b9b..7c00ce0419d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -25896,11 +25896,6 @@ locate-path@^7.1.0: dependencies: p-locate "^6.0.0" -lodash-es@4.17.21: - version "4.17.21" - resolved "https://registry.yarnpkg.com/lodash-es/-/lodash-es-4.17.21.tgz#43e626c46e6591b7750beb2b50117390c609e3ee" - integrity sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw== - lodash-es@4.17.23, lodash-es@^4.17.11, lodash-es@^4.17.15: version "4.17.23" resolved "https://registry.yarnpkg.com/lodash-es/-/lodash-es-4.17.23.tgz#58c4360fd1b5d33afc6c0bbd3d1149349b1138e0" From e45d4709b170033b9d6a5d5b5e69d493e2ab5cfc Mon Sep 17 00:00:00 2001 From: Austin Burdine Date: Thu, 9 Apr 2026 09:15:40 -0400 Subject: [PATCH 08/18] Improve performance of core acceptance/legacy CI jobs (#27293) ## Summary - remove nx cache step + unnecessary env var from setup job that hasn't done anything since the Nx v22 update - remove explicit TS package build step in favor of nx automatic build tracking ## Why this change As part of #27202, I was looking into ways to leverage the Nx build cache across jobs in a given CI run, since I noticed that certain packages (the frontend code in apps/* primarily) were being built multiple times throughout the various CI jobs. What I ultimately realized after a bit more investigation is that the Core Acceptance + Legacy tests jobs are building more of the repo than they need to, since the `--exclude=ghost-admin` doesn't actually prevent any work from being done (ghost-admin is a dependency of `@tryghost/admin` so it gets built anyways). ## What the fix does By updating the nx config in ghost/core to dependent on the built target for the test:ci:* scripts (and switching the jobs themselves to use `yarn nx run ghost:test:ci:*`), Nx will automatically build the dependencies it needs to. Overall, this should shave an average of 3-4 minutes off of all of the Acceptance/Legacy test builds. --- .github/workflows/ci.yml | 27 +++------------------------ ghost/core/package.json | 36 ++++++++++++++++++------------------ 2 files changed, 21 insertions(+), 42 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index c4f656cc77d..72b7f134b50 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -21,7 +21,6 @@ env: ${{ github.workspace }}/ghost/*/node_modules ${{ github.workspace }}/e2e/node_modules ~/.cache/ms-playwright/ - NX_REJECT_UNKNOWN_LOCAL_CACHE: 0 NODE_VERSION: 22.18.0 # Disable v8-compile-cache to prevent intermittent V8 deserializer crashes # when multiple parallel Nx workers race to read/write shared bytecode cache @@ -164,17 +163,6 @@ jobs: echo "dep-cache" >> "$GITHUB_ENV" echo "$EOF" >> "$GITHUB_ENV" - - name: Nx cache - uses: actions/cache@668228422ae6a00e4ad889ee87cd7109ec5666a7 # v5 - id: cache_nx - with: - path: .nxcache - key: nx-Linux-${{ github.ref }}-${{ env.HEAD_COMMIT }} - restore-keys: | - nx-Linux-${{ github.ref }}-${{ env.HEAD_COMMIT }} - nx-Linux-${{ github.ref }} - nx-Linux - - name: Check dependency cache uses: actions/cache@668228422ae6a00e4ad889ee87cd7109ec5666a7 # v5 id: cache_dependencies @@ -450,9 +438,6 @@ jobs: env: DEPENDENCY_CACHE_KEY: ${{ needs.job_setup.outputs.dependency_cache_key }} - - name: Build TS packages - run: yarn nx run-many -t build --exclude=ghost-admin - - name: Set timezone (non-UTC) uses: szenius/set-timezone@1f9716b0f7120e344f0c62bb7b1ee98819aefd42 # v2.0 with: @@ -470,12 +455,10 @@ jobs: echo "database__connection__password=root" >> $GITHUB_ENV - name: E2E tests - working-directory: ghost/core - run: yarn test:ci:e2e + run: yarn nx run ghost:test:ci:e2e - name: Integration tests - working-directory: ghost/core - run: yarn test:ci:integration + run: yarn nx run ghost:test:ci:integration - uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v7 if: matrix.node == env.NODE_VERSION && contains(matrix.env.DB, 'mysql') @@ -540,9 +523,6 @@ jobs: env: DEPENDENCY_CACHE_KEY: ${{ needs.job_setup.outputs.dependency_cache_key }} - - name: Build TS packages - run: yarn nx run-many -t build --exclude=ghost-admin - - name: Set env vars (SQLite) if: contains(matrix.env.DB, 'sqlite') run: echo "database__connection__filename=/dev/shm/ghost-test.db" >> $GITHUB_ENV @@ -555,8 +535,7 @@ jobs: echo "database__connection__password=root" >> $GITHUB_ENV - name: Legacy tests - working-directory: ghost/core - run: yarn test:ci:legacy + run: yarn nx run ghost:test:ci:legacy - uses: tryghost/actions/actions/slack-build@0cbdcbeb9030f46b109d5e6e44c14933026d8ca5 # main if: failure() && github.event_name == 'push' && github.ref == 'refs/heads/main' diff --git a/ghost/core/package.json b/ghost/core/package.json index 8c38f2d4577..e24f1fb1dc1 100644 --- a/ghost/core/package.json +++ b/ghost/core/package.json @@ -280,12 +280,7 @@ "targets": { "build:tsc": { "dependsOn": [ - { - "projects": [ - "@tryghost/parse-email-address" - ], - "target": "build" - } + "^build" ] }, "archive": { @@ -307,12 +302,7 @@ }, "lint": { "dependsOn": [ - { - "projects": [ - "@tryghost/parse-email-address" - ], - "target": "build" - } + "^build" ] }, "test:all": { @@ -323,12 +313,22 @@ "test:unit": { "dependsOn": [ "build:assets", - { - "projects": [ - "@tryghost/parse-email-address" - ], - "target": "build" - } + "^build" + ] + }, + "test:ci:e2e": { + "dependsOn": [ + "^build" + ] + }, + "test:ci:legacy": { + "dependsOn": [ + "^build" + ] + }, + "test:ci:integration": { + "dependsOn": [ + "^build" ] } } From 9505bace9d1b6db7092954d6f08b609d8f1dd221 Mon Sep 17 00:00:00 2001 From: Hannah Wolfe Date: Thu, 9 Apr 2026 14:16:39 +0100 Subject: [PATCH 09/18] Fixed redundant CI runs on main branch pushes (#27295) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## Summary - Changed CI concurrency group from `github.run_id` to `github.ref` for push events, so consecutive main branch pushes cancel earlier in-progress runs instead of all running simultaneously - PR concurrency is unaffected (`github.head_ref` takes precedence for PRs) - Observed 5 full CI runs triggered within 60 seconds on main today, each consuming ~147 runner-minutes — this change would cancel all but the latest ## Context The concurrency group `${{ github.head_ref || github.run_id }}` works well for PRs (groups by branch name, cancels stale runs). But for push events `github.head_ref` is empty, so it fell back to `github.run_id` — a unique value per run, meaning no cancellation ever happened on main. During merge bursts (e.g. merging multiple Renovate PRs), this caused 4-5 full CI pipelines to compete for runners simultaneously, starving PR CI runs and causing 15+ minute queue times. --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 72b7f134b50..12b3c15f187 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -30,7 +30,7 @@ env: DISABLE_V8_COMPILE_CACHE: 1 concurrency: - group: ${{ github.head_ref || github.run_id }} + group: ${{ github.head_ref || github.ref }} cancel-in-progress: true jobs: From 71409d9e974184c676b15a5a7a45b73eb4376b6a Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 9 Apr 2026 14:59:00 +0100 Subject: [PATCH 10/18] Update dependency storybook to v8.6.15 [SECURITY] (#27172) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This PR contains the following updates: | Package | Change | [Age](https://docs.renovatebot.com/merge-confidence/) | [Confidence](https://docs.renovatebot.com/merge-confidence/) | |---|---|---|---| | [storybook](https://storybook.js.org) ([source](https://redirect.github.com/storybookjs/storybook/tree/HEAD/code/core)) | [`8.6.14` → `8.6.15`](https://renovatebot.com/diffs/npm/storybook/8.6.14/8.6.15) | ![age](https://developer.mend.io/api/mc/badges/age/npm/storybook/8.6.15?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/storybook/8.6.14/8.6.15?slim=true) | ### GitHub Vulnerability Alerts #### [CVE-2025-68429](https://redirect.github.com/storybookjs/storybook/security/advisories/GHSA-8452-54wp-rmv6) On December 11th, the Storybook team received a responsible disclosure alerting them to a potential vulnerability in certain built and published Storybooks. The vulnerability is a bug in how Storybook handles environment variables defined in a `.env` file, which could, in specific circumstances, lead to those variables being unexpectedly bundled into the artifacts created by the `storybook build` command. When a built Storybook is published to the web, the bundle’s source is viewable, thus potentially exposing those variables to anyone with access. If those variables contained secrets, they should be considered compromised. ## Who is impacted? For a project to be vulnerable to this issue, it must: - Build the Storybook (i.e. run `storybook build` directly or indirectly) in a directory that contains a `.env` file (including variants like `.env.local`) - The `.env` file contains sensitive secrets - Use Storybook version `7.0.0` or above - Publish the built Storybook to the web Storybooks built without a `.env` file at build time are not affected, including common CI-based builds where secrets are provided via platform environment variables rather than `.env` files. Users' Storybook runtime environments (i.e. `storybook dev`) are not affected. Deployed applications that share a repo with a project's Storybook are not affected. Storybook 6 and below are not affected. ## Recommended actions First, Storybook recommends that everyone audit for any sensitive secrets provided via `.env` files and rotate those keys. Second, Storybook has released patched versions of all affected major Storybook versions that no longer have this vulnerability. Projects should upgrade their Storybook—on both local machines and CI environments—to one of these versions **before publishing again**. - `10.1.10+` - `9.1.17+` - `8.6.15+` - `7.6.21+` Finally, some projects may have been relying on the undocumented behavior at the heart of this issue and will need to change how they reference environment variables after this update. If a project can no longer read necessary environmental variable values, it can either prefix the variables with `STORYBOOK_` or use the [`env` property in Storybook’s configuration](https://storybook.js.org/docs/configure/environment-variables#using-storybook-configuration) to manually specify values. In either case, **do not** include sensitive secrets as they *will* be included in the built bundle. ## Further information Details of the vulnerability can be found on the [Storybook announcement](https://storybook.js.org/blog/security-advisory). --- ### Release Notes
storybookjs/storybook (storybook) ### [`v8.6.15`](https://redirect.github.com/storybookjs/storybook/blob/HEAD/CHANGELOG.md#8615) [Compare Source](https://redirect.github.com/storybookjs/storybook/compare/v8.6.14...v8.6.15) - Core: Fix .env-file parsing, thanks [@​jreinhold](https://redirect.github.com/jreinhold)!
--- ### Configuration 📅 **Schedule**: (in timezone Etc/UTC) - Branch creation - "" - Automerge - Only on Sunday and Saturday (`* * * * 0,6`) - Between 12:00 AM and 12:59 PM, only on Monday (`* 0-12 * * 1`) - Between 10:00 PM and 11:59 PM, Monday through Friday (`* 22-23 * * 1-5`) - Between 12:00 AM and 04:59 AM, Tuesday through Saturday (`* 0-4 * * 2-6`) 🚦 **Automerge**: Enabled. ♻ **Rebasing**: Whenever PR is behind base branch, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] If you want to rebase/retry this PR, check this box --- This PR was generated by [Mend Renovate](https://mend.io/renovate/). View the [repository job log](https://developer.mend.io/github/TryGhost/Ghost). --------- Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: Hannah Wolfe --- apps/admin-x-design-system/package.json | 2 +- apps/signup-form/package.json | 4 ++-- yarn.lock | 25 +++++++++++++++---------- 3 files changed, 18 insertions(+), 13 deletions(-) diff --git a/apps/admin-x-design-system/package.json b/apps/admin-x-design-system/package.json index cbacdca5b2d..31925182cdc 100644 --- a/apps/admin-x-design-system/package.json +++ b/apps/admin-x-design-system/package.json @@ -55,7 +55,7 @@ "react-dom": "18.3.1", "rollup-plugin-node-builtins": "2.1.2", "sinon": "18.0.1", - "storybook": "8.6.14", + "storybook": "8.6.15", "tailwindcss": "4.2.1", "typescript": "5.9.3", "validator": "13.12.0", diff --git a/apps/signup-form/package.json b/apps/signup-form/package.json index 3ee9182dd26..dc3e6786d38 100644 --- a/apps/signup-form/package.json +++ b/apps/signup-form/package.json @@ -1,6 +1,6 @@ { "name": "@tryghost/signup-form", - "version": "0.3.11", + "version": "0.3.12", "license": "MIT", "repository": "https://github.com/TryGhost/Ghost", "author": "Ghost Foundation", @@ -59,7 +59,7 @@ "postcss-import": "16.1.1", "prop-types": "15.8.1", "rollup-plugin-node-builtins": "2.1.2", - "storybook": "8.6.14", + "storybook": "8.6.15", "stylelint": "15.11.0", "tailwindcss": "3.4.18", "vite": "5.4.21", diff --git a/yarn.lock b/yarn.lock index 7c00ce0419d..ae518e00d30 100644 --- a/yarn.lock +++ b/yarn.lock @@ -8676,12 +8676,12 @@ dependencies: ts-dedent "^2.0.0" -"@storybook/core@8.6.14": - version "8.6.14" - resolved "https://registry.yarnpkg.com/@storybook/core/-/core-8.6.14.tgz#335b067709fd649512b6553b31ad48c8c56f7ed9" - integrity sha512-1P/w4FSNRqP8j3JQBOi3yGt8PVOgSRbP66Ok520T78eJBeqx9ukCfl912PQZ7SPbW3TIunBwLXMZOjZwBB/JmA== +"@storybook/core@8.6.15": + version "8.6.15" + resolved "https://registry.yarnpkg.com/@storybook/core/-/core-8.6.15.tgz#ba3aa59b02981136fa671d545b64d380c1188c8b" + integrity sha512-VFpKcphNurJpSC4fpUfKL3GTXVoL53oytghGR30QIw5jKWwaT50HVbTyb41BLOUuZjmMhUQA8weiQEew6RX0gw== dependencies: - "@storybook/theming" "8.6.14" + "@storybook/theming" "8.6.15" better-opn "^3.0.2" browser-assert "^1.2.1" esbuild "^0.18.0 || ^0.19.0 || ^0.20.0 || ^0.21.0 || ^0.22.0 || ^0.23.0 || ^0.24.0 || ^0.25.0" @@ -8940,6 +8940,11 @@ resolved "https://registry.yarnpkg.com/@storybook/theming/-/theming-8.6.14.tgz#78c6dc878f705de70c67f2b2d08b8313b985d81a" integrity sha512-r4y+LsiB37V5hzpQo+BM10PaCsp7YlZ0YcZzQP1OCkPlYXmUAFy2VvDKaFRpD8IeNPKug2u4iFm/laDEbs03dg== +"@storybook/theming@8.6.15": + version "8.6.15" + resolved "https://registry.yarnpkg.com/@storybook/theming/-/theming-8.6.15.tgz#781e6b36f113a10e76379956b9451276e8d5bda2" + integrity sha512-dAbL0XOekyT6XsF49R6Etj3WxQ/LpdJDIswUUeHgVJ6/yd2opZOGbPxnwA3zlmAh1c0tvpPyhSDXxSG79u8e4Q== + "@storybook/types@7.0.20": version "7.0.20" resolved "https://registry.yarnpkg.com/@storybook/types/-/types-7.0.20.tgz#6aadc565f5894512b7f8da2aea9cac9448160519" @@ -33383,12 +33388,12 @@ storybook@10.3.3: use-sync-external-store "^1.5.0" ws "^8.18.0" -storybook@8.6.14: - version "8.6.14" - resolved "https://registry.yarnpkg.com/storybook/-/storybook-8.6.14.tgz#d205e73b6427eebf321bcfbe63bfbec3ade4d9db" - integrity sha512-sVKbCj/OTx67jhmauhxc2dcr1P+yOgz/x3h0krwjyMgdc5Oubvxyg4NYDZmzAw+ym36g/lzH8N0Ccp4dwtdfxw== +storybook@8.6.15: + version "8.6.15" + resolved "https://registry.yarnpkg.com/storybook/-/storybook-8.6.15.tgz#eb4a3bae1ac0fe875bb322a412fac9709d9b5124" + integrity sha512-Ob7DMlwWx8s7dMvcQ3xPc02TvUeralb+xX3oaPRk9wY9Hc6M1IBC/7cEoITkSmRS2v38DHubC+mtEKNc1u2gQg== dependencies: - "@storybook/core" "8.6.14" + "@storybook/core" "8.6.15" stream-browserify@^2.0.1: version "2.0.2" From edb9bb701cc698e0f95f2afe160ff6b0210fdcbb Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 9 Apr 2026 14:59:09 +0100 Subject: [PATCH 11/18] Update dependency lodash to v4.17.23 [SECURITY] (#27296) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This PR contains the following updates: | Package | Change | [Age](https://docs.renovatebot.com/merge-confidence/) | [Confidence](https://docs.renovatebot.com/merge-confidence/) | |---|---|---|---| | [lodash](https://lodash.com/) ([source](https://redirect.github.com/lodash/lodash)) | [`4.17.21` → `4.17.23`](https://renovatebot.com/diffs/npm/lodash/4.17.21/4.17.23) | ![age](https://developer.mend.io/api/mc/badges/age/npm/lodash/4.17.23?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/lodash/4.17.21/4.17.23?slim=true) | ### GitHub Vulnerability Alerts #### [CVE-2025-13465](https://redirect.github.com/lodash/lodash/security/advisories/GHSA-xxjr-mmjv-4gpg) ### Impact Lodash versions 4.0.0 through 4.17.22 are vulnerable to prototype pollution in the `_.unset` and `_.omit` functions. An attacker can pass crafted paths which cause Lodash to delete methods from global prototypes. The issue permits deletion of properties but does not allow overwriting their original behavior. ### Patches This issue is patched on 4.17.23. --- ### Release Notes
lodash/lodash (lodash) ### [`v4.17.23`](https://redirect.github.com/lodash/lodash/compare/0082be44648961341600e879042f74cd29d65d05...4.17.23) [Compare Source](https://redirect.github.com/lodash/lodash/compare/4.17.21...4.17.23)
--- ### Configuration 📅 **Schedule**: (in timezone Etc/UTC) - Branch creation - "" - Automerge - Only on Sunday and Saturday (`* * * * 0,6`) - Between 12:00 AM and 12:59 PM, only on Monday (`* 0-12 * * 1`) - Between 10:00 PM and 11:59 PM, Monday through Friday (`* 22-23 * * 1-5`) - Between 12:00 AM and 04:59 AM, Tuesday through Saturday (`* 0-4 * * 2-6`) 🚦 **Automerge**: Enabled. ♻ **Rebasing**: Whenever PR is behind base branch, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] If you want to rebase/retry this PR, check this box --- This PR was generated by [Mend Renovate](https://mend.io/renovate/). View the [repository job log](https://developer.mend.io/github/TryGhost/Ghost). Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- ghost/core/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ghost/core/package.json b/ghost/core/package.json index e24f1fb1dc1..7d29b8c98cb 100644 --- a/ghost/core/package.json +++ b/ghost/core/package.json @@ -182,7 +182,7 @@ "knex": "2.4.2", "knex-migrator": "5.3.2", "leaky-bucket": "2.2.0", - "lodash": "4.17.21", + "lodash": "4.17.23", "luxon": "3.7.2", "mailgun.js": "10.4.0", "metascraper": "5.45.15", From 0bb0912074520a26195a9771fe7449817530980d Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 9 Apr 2026 14:59:18 +0100 Subject: [PATCH 12/18] Update dependency fs-extra to v11.3.4 (#27298) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This PR contains the following updates: | Package | Change | [Age](https://docs.renovatebot.com/merge-confidence/) | [Confidence](https://docs.renovatebot.com/merge-confidence/) | |---|---|---|---| | [fs-extra](https://redirect.github.com/jprichardson/node-fs-extra) | [`11.3.0` → `11.3.4`](https://renovatebot.com/diffs/npm/fs-extra/11.3.0/11.3.4) | ![age](https://developer.mend.io/api/mc/badges/age/npm/fs-extra/11.3.4?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/fs-extra/11.3.0/11.3.4?slim=true) | --- ### Release Notes
jprichardson/node-fs-extra (fs-extra) ### [`v11.3.4`](https://redirect.github.com/jprichardson/node-fs-extra/blob/HEAD/CHANGELOG.md#1134--2026-03-03) [Compare Source](https://redirect.github.com/jprichardson/node-fs-extra/compare/11.3.3...11.3.4) - Fix bug where calling `ensureSymlink`/`ensureSymlinkSync` with a relative `srcPath` would fail if the symlink already existed ([#​1038](https://redirect.github.com/jprichardson/node-fs-extra/issues/1038), [#​1064](https://redirect.github.com/jprichardson/node-fs-extra/pull/1064)) ### [`v11.3.3`](https://redirect.github.com/jprichardson/node-fs-extra/blob/HEAD/CHANGELOG.md#1133--2025-12-18) [Compare Source](https://redirect.github.com/jprichardson/node-fs-extra/compare/11.3.2...11.3.3) - Fix copying symlink when destination is a symlink to the same target ([#​1019](https://redirect.github.com/jprichardson/node-fs-extra/issues/1019), [#​1060](https://redirect.github.com/jprichardson/node-fs-extra/pull/1060)) ### [`v11.3.2`](https://redirect.github.com/jprichardson/node-fs-extra/blob/HEAD/CHANGELOG.md#1132--2025-09-15) [Compare Source](https://redirect.github.com/jprichardson/node-fs-extra/compare/11.3.1...11.3.2) - Fix spurrious `UnhandledPromiseRejectionWarning` that could occur when calling `.copy()` in some cases ([#​1056](https://redirect.github.com/jprichardson/node-fs-extra/issues/1056), [#​1058](https://redirect.github.com/jprichardson/node-fs-extra/pull/1058)) ### [`v11.3.1`](https://redirect.github.com/jprichardson/node-fs-extra/blob/HEAD/CHANGELOG.md#1131--2025-08-05) [Compare Source](https://redirect.github.com/jprichardson/node-fs-extra/compare/11.3.0...11.3.1) - Fix case where `move`/`moveSync` could incorrectly think files are identical on Windows ([#​1050](https://redirect.github.com/jprichardson/node-fs-extra/pull/1050))
--- ### Configuration 📅 **Schedule**: (in timezone Etc/UTC) - Branch creation - Only on Sunday and Saturday (`* * * * 0,6`) - Between 12:00 AM and 12:59 PM, only on Monday (`* 0-12 * * 1`) - Between 09:00 PM and 11:59 PM, Monday through Friday (`* 21-23 * * 1-5`) - Between 12:00 AM and 04:59 AM, Tuesday through Saturday (`* 0-4 * * 2-6`) - Automerge - Only on Sunday and Saturday (`* * * * 0,6`) - Between 12:00 AM and 12:59 PM, only on Monday (`* 0-12 * * 1`) - Between 10:00 PM and 11:59 PM, Monday through Friday (`* 22-23 * * 1-5`) - Between 12:00 AM and 04:59 AM, Tuesday through Saturday (`* 0-4 * * 2-6`) 🚦 **Automerge**: Enabled. ♻ **Rebasing**: Whenever PR is behind base branch, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about these updates again. --- - [ ] If you want to rebase/retry this PR, check this box --- This PR was generated by [Mend Renovate](https://mend.io/renovate/). View the [repository job log](https://developer.mend.io/github/TryGhost/Ghost). Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- ghost/admin/package.json | 2 +- ghost/core/package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/ghost/admin/package.json b/ghost/admin/package.json index 4cd153ab37f..b0614aa176c 100644 --- a/ghost/admin/package.json +++ b/ghost/admin/package.json @@ -124,7 +124,7 @@ "ember-truth-helpers": "3.1.1", "eslint-plugin-babel": "5.3.1", "flexsearch": "0.7.43", - "fs-extra": "11.3.0", + "fs-extra": "11.3.4", "glob": "8.1.0", "google-caja-bower": "https://github.com/acburdine/google-caja-bower#ghost", "keymaster": "https://github.com/madrobby/keymaster.git", diff --git a/ghost/core/package.json b/ghost/core/package.json index 7d29b8c98cb..b50546e2402 100644 --- a/ghost/core/package.json +++ b/ghost/core/package.json @@ -160,7 +160,7 @@ "express-session": "1.19.0", "file-type": "16.5.4", "form-data": "4.0.5", - "fs-extra": "11.3.0", + "fs-extra": "11.3.4", "ghost-storage-base": "1.1.2", "glob": "8.1.0", "got": "13.0.0", From 948a2906bbdc440845997d22d4e1a0add62eb15c Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 9 Apr 2026 14:59:26 +0100 Subject: [PATCH 13/18] Update dependency gscan to v5.4.1 (#27299) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This PR contains the following updates: | Package | Change | [Age](https://docs.renovatebot.com/merge-confidence/) | [Confidence](https://docs.renovatebot.com/merge-confidence/) | |---|---|---|---| | [gscan](https://ghost.org/) ([source](https://redirect.github.com/TryGhost/gscan)) | [`5.4.0` → `5.4.1`](https://renovatebot.com/diffs/npm/gscan/5.4.0/5.4.1) | ![age](https://developer.mend.io/api/mc/badges/age/npm/gscan/5.4.1?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/gscan/5.4.0/5.4.1?slim=true) | --- ### Release Notes
TryGhost/gscan (gscan) ### [`v5.4.1`](https://redirect.github.com/TryGhost/gscan/compare/v5.4.0...v5.4.1) [Compare Source](https://redirect.github.com/TryGhost/gscan/compare/v5.4.0...v5.4.1)
--- ### Configuration 📅 **Schedule**: (in timezone Etc/UTC) - Branch creation - Only on Sunday and Saturday (`* * * * 0,6`) - Between 12:00 AM and 12:59 PM, only on Monday (`* 0-12 * * 1`) - Between 09:00 PM and 11:59 PM, Monday through Friday (`* 21-23 * * 1-5`) - Between 12:00 AM and 04:59 AM, Tuesday through Saturday (`* 0-4 * * 2-6`) - Automerge - Only on Sunday and Saturday (`* * * * 0,6`) - Between 12:00 AM and 12:59 PM, only on Monday (`* 0-12 * * 1`) - Between 10:00 PM and 11:59 PM, Monday through Friday (`* 22-23 * * 1-5`) - Between 12:00 AM and 04:59 AM, Tuesday through Saturday (`* 0-4 * * 2-6`) 🚦 **Automerge**: Enabled. ♻ **Rebasing**: Whenever PR is behind base branch, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] If you want to rebase/retry this PR, check this box --- This PR was generated by [Mend Renovate](https://mend.io/renovate/). View the [repository job log](https://developer.mend.io/github/TryGhost/Ghost). Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- ghost/core/package.json | 2 +- yarn.lock | 460 ++++++++++++++++++++-------------------- 2 files changed, 236 insertions(+), 226 deletions(-) diff --git a/ghost/core/package.json b/ghost/core/package.json index b50546e2402..0e7b1a1305b 100644 --- a/ghost/core/package.json +++ b/ghost/core/package.json @@ -164,7 +164,7 @@ "ghost-storage-base": "1.1.2", "glob": "8.1.0", "got": "13.0.0", - "gscan": "5.4.0", + "gscan": "5.4.1", "handlebars": "4.7.9", "heic-convert": "2.1.0", "html-to-text": "5.1.1", diff --git a/yarn.lock b/yarn.lock index ae518e00d30..914365da01c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3784,15 +3784,15 @@ resolved "https://registry.yarnpkg.com/@faker-js/faker/-/faker-9.9.0.tgz#3ad015fbbaaae7af3149555e0f22b4b30134c69d" integrity sha512-OEl393iCOoo/z8bMezRlJu+GlRGlsKbUAN7jKB6LhnKoqKve5DXRpalbItIIcwnCjs1k/FOPjFzcA6Qn+H+YbA== -"@fastify/otel@0.16.0": - version "0.16.0" - resolved "https://registry.yarnpkg.com/@fastify/otel/-/otel-0.16.0.tgz#e003c9b81039490af9141a7f1397de6b05baa768" - integrity sha512-2304BdM5Q/kUvQC9qJO1KZq3Zn1WWsw+WWkVmFEaj1UE2hEIiuFqrPeglQOwEtw/ftngisqfQ3v70TWMmwhhHA== +"@fastify/otel@0.17.1": + version "0.17.1" + resolved "https://registry.yarnpkg.com/@fastify/otel/-/otel-0.17.1.tgz#a7f13edc40dbc2e0c2a59d54e388f11e4d2235ce" + integrity sha512-K4wyxfUZx2ux5o+b6BtTqouYFVILohLZmSbA2tKUueJstNcBnoGPVhllCaOvbQ3ZrXdUxUC/fyrSWSCqHhdOPg== dependencies: "@opentelemetry/core" "^2.0.0" - "@opentelemetry/instrumentation" "^0.208.0" + "@opentelemetry/instrumentation" "^0.212.0" "@opentelemetry/semantic-conventions" "^1.28.0" - minimatch "^10.0.3" + minimatch "^10.2.4" "@floating-ui/core@^1.4.1": version "1.4.1" @@ -5074,17 +5074,17 @@ dependencies: "@opentelemetry/api" "^1.3.0" -"@opentelemetry/api-logs@0.208.0": - version "0.208.0" - resolved "https://registry.yarnpkg.com/@opentelemetry/api-logs/-/api-logs-0.208.0.tgz#56d3891010a1fa1cf600ba8899ed61b43ace511c" - integrity sha512-CjruKY9V6NMssL/T1kAFgzosF1v9o6oeN+aX5JB/C/xPNtmgIJqcXHG7fA82Ou1zCpWGl4lROQUKwUNE1pMCyg== +"@opentelemetry/api-logs@0.212.0": + version "0.212.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/api-logs/-/api-logs-0.212.0.tgz#ec66a0951b84b1f082e13fd8a027b9f9d65a3f7a" + integrity sha512-TEEVrLbNROUkYY51sBJGk7lO/OLjuepch8+hmpM6ffMJQ2z/KVCjdHuCFX6fJj8OkJP2zckPjrJzQtXU3IAsFg== dependencies: "@opentelemetry/api" "^1.3.0" -"@opentelemetry/api-logs@0.211.0": - version "0.211.0" - resolved "https://registry.yarnpkg.com/@opentelemetry/api-logs/-/api-logs-0.211.0.tgz#32d9ed98939956a84d4e2ff5e01598cb9d28d744" - integrity sha512-swFdZq8MCdmdR22jTVGQDhwqDzcI4M10nhjXkLr1EsIzXgZBqm4ZlmmcWsg3TSNf+3mzgOiqveXmBLZuDi2Lgg== +"@opentelemetry/api-logs@0.213.0": + version "0.213.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/api-logs/-/api-logs-0.213.0.tgz#c7abc7d3c4586cfbfd737c0a2fcfb2323a9def75" + integrity sha512-zRM5/Qj6G84Ej3F1yt33xBVY/3tnMxtL1fiDIxYbDWYaZ/eudVw3/PBiZ8G7JwUxXxjW8gU4g6LnOyfGKYHYgw== dependencies: "@opentelemetry/api" "^1.3.0" @@ -5093,223 +5093,223 @@ resolved "https://registry.yarnpkg.com/@opentelemetry/api/-/api-1.9.0.tgz#d03eba68273dc0f7509e2a3d5cba21eae10379fe" integrity sha512-3giAOQvZiH5F9bMlMiv8+GSPMeqg0dbaeo58/0SlA9sxSqZhnUtxzX9/2FzyhS9sWQf5S0GJE0AKBrFqjpeYcg== -"@opentelemetry/context-async-hooks@^2.5.1": - version "2.6.0" - resolved "https://registry.yarnpkg.com/@opentelemetry/context-async-hooks/-/context-async-hooks-2.6.0.tgz#6c824e900630b378233c1a78ca7f0dc5a3b460b2" - integrity sha512-L8UyDwqpTcbkIK5cgwDRDYDoEhQoj8wp8BwsO19w3LB1Z41yEQm2VJyNfAi9DrLP/YTqXqWpKHyZfR9/tFYo1Q== - -"@opentelemetry/core@2.5.0": - version "2.5.0" - resolved "https://registry.yarnpkg.com/@opentelemetry/core/-/core-2.5.0.tgz#3b2ac6cf471ed9a85eea836048a4de77a2e549d3" - integrity sha512-ka4H8OM6+DlUhSAZpONu0cPBtPPTQKxbxVzC4CzVx5+K4JnroJVBtDzLAMx4/3CDTJXRvVFhpFjtl4SaiTNoyQ== - dependencies: - "@opentelemetry/semantic-conventions" "^1.29.0" +"@opentelemetry/context-async-hooks@^2.6.0": + version "2.6.1" + resolved "https://registry.yarnpkg.com/@opentelemetry/context-async-hooks/-/context-async-hooks-2.6.1.tgz#06e60d5b3fba992a832af7f034758574e951bba3" + integrity sha512-XHzhwRNkBpeP8Fs/qjGrAf9r9PRv67wkJQ/7ZPaBQQ68DYlTBBx5MF9LvPx7mhuXcDessKK2b+DcxqwpgkcivQ== -"@opentelemetry/core@2.6.0", "@opentelemetry/core@^2.0.0", "@opentelemetry/core@^2.5.1": +"@opentelemetry/core@2.6.0": version "2.6.0" resolved "https://registry.yarnpkg.com/@opentelemetry/core/-/core-2.6.0.tgz#719c829ed98bd7af808a2d2c83374df1fd1f3c66" integrity sha512-HLM1v2cbZ4TgYN6KEOj+Bbj8rAKriOdkF9Ed3tG25FoprSiQl7kYc+RRT6fUZGOvx0oMi5U67GoFdT+XUn8zEg== dependencies: "@opentelemetry/semantic-conventions" "^1.29.0" -"@opentelemetry/instrumentation-amqplib@0.58.0": - version "0.58.0" - resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation-amqplib/-/instrumentation-amqplib-0.58.0.tgz#e3dc86ebfa7d72fe861a63b1c24a062faeb64a8c" - integrity sha512-fjpQtH18J6GxzUZ+cwNhWUpb71u+DzT7rFkg5pLssDGaEber91Y2WNGdpVpwGivfEluMlNMZumzjEqfg8DeKXQ== +"@opentelemetry/core@2.6.1", "@opentelemetry/core@^2.0.0", "@opentelemetry/core@^2.6.0": + version "2.6.1" + resolved "https://registry.yarnpkg.com/@opentelemetry/core/-/core-2.6.1.tgz#a59d22a9ae3be80bb41b280bbbe1fe9fbdb6c2a5" + integrity sha512-8xHSGWpJP9wBxgBpnqGL0R3PbdWQndL1Qp50qrg71+B28zK5OQmUgcDKLJgzyAAV38t4tOyLMGDD60LneR5W8g== + dependencies: + "@opentelemetry/semantic-conventions" "^1.29.0" + +"@opentelemetry/instrumentation-amqplib@0.60.0": + version "0.60.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation-amqplib/-/instrumentation-amqplib-0.60.0.tgz#a2b2abe3cf433bea166c18a703c8ddf6accf83da" + integrity sha512-q/B2IvoVXRm1M00MvhnzpMN6rKYOszPXVsALi6u0ss4AYHe+TidZEtLW9N1ZhrobI1dSriHnBqqtAOZVAv07sg== dependencies: "@opentelemetry/core" "^2.0.0" - "@opentelemetry/instrumentation" "^0.211.0" + "@opentelemetry/instrumentation" "^0.213.0" "@opentelemetry/semantic-conventions" "^1.33.0" -"@opentelemetry/instrumentation-connect@0.54.0": - version "0.54.0" - resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation-connect/-/instrumentation-connect-0.54.0.tgz#87312850844b6c57976d00bd3256d55650543772" - integrity sha512-43RmbhUhqt3uuPnc16cX6NsxEASEtn8z/cYV8Zpt6EP4p2h9s4FNuJ4Q9BbEQ2C0YlCCB/2crO1ruVz/hWt8fA== +"@opentelemetry/instrumentation-connect@0.56.0": + version "0.56.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation-connect/-/instrumentation-connect-0.56.0.tgz#8d846d2f7cf1f6b2723e5b0ff5595e8d31cb7446" + integrity sha512-PKp+sSZ7AfzMvGgO3VCyo1inwNu+q7A1k9X88WK4PQ+S6Hp7eFk8pie+sWHDTaARovmqq5V2osav3lQej2B0nw== dependencies: "@opentelemetry/core" "^2.0.0" - "@opentelemetry/instrumentation" "^0.211.0" + "@opentelemetry/instrumentation" "^0.213.0" "@opentelemetry/semantic-conventions" "^1.27.0" "@types/connect" "3.4.38" -"@opentelemetry/instrumentation-dataloader@0.28.0": - version "0.28.0" - resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation-dataloader/-/instrumentation-dataloader-0.28.0.tgz#b857bb038e4a2a3b7278f3da89a1e210bb15339e" - integrity sha512-ExXGBp0sUj8yhm6Znhf9jmuOaGDsYfDES3gswZnKr4MCqoBWQdEFn6EoDdt5u+RdbxQER+t43FoUihEfTSqsjA== +"@opentelemetry/instrumentation-dataloader@0.30.0": + version "0.30.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation-dataloader/-/instrumentation-dataloader-0.30.0.tgz#7fbea57b27165324092639abf090ca3697eb7a80" + integrity sha512-MXHP2Q38cd2OhzEBKAIXUi9uBlPEYzF6BNJbyjUXBQ6kLaf93kRC41vNMIz0Nl5mnuwK7fDvKT+/lpx7BXRwdg== dependencies: - "@opentelemetry/instrumentation" "^0.211.0" + "@opentelemetry/instrumentation" "^0.213.0" -"@opentelemetry/instrumentation-express@0.59.0": - version "0.59.0" - resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation-express/-/instrumentation-express-0.59.0.tgz#c2ac7dcb4f9904926518408cdf4efb046e724382" - integrity sha512-pMKV/qnHiW/Q6pmbKkxt0eIhuNEtvJ7sUAyee192HErlr+a1Jx+FZ3WjfmzhQL1geewyGEiPGkmjjAgNY8TgDA== +"@opentelemetry/instrumentation-express@0.61.0": + version "0.61.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation-express/-/instrumentation-express-0.61.0.tgz#49b4d144ab6e9d6e035941a51f5e573e84e3647f" + integrity sha512-Xdmqo9RZuZlL29Flg8QdwrrX7eW1CZ7wFQPKHyXljNymgKhN1MCsYuqQ/7uxavhSKwAl7WxkTzKhnqpUApLMvQ== dependencies: "@opentelemetry/core" "^2.0.0" - "@opentelemetry/instrumentation" "^0.211.0" + "@opentelemetry/instrumentation" "^0.213.0" "@opentelemetry/semantic-conventions" "^1.27.0" -"@opentelemetry/instrumentation-fs@0.30.0": - version "0.30.0" - resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation-fs/-/instrumentation-fs-0.30.0.tgz#5e28edde0591dc4ffa471a86a68f91e737fe31fb" - integrity sha512-n3Cf8YhG7reaj5dncGlRIU7iT40bxPOjsBEA5Bc1a1g6e9Qvb+JFJ7SEiMlPbUw4PBmxE3h40ltE8LZ3zVt6OA== +"@opentelemetry/instrumentation-fs@0.32.0": + version "0.32.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation-fs/-/instrumentation-fs-0.32.0.tgz#2010d86da8ab3d543f8e44c8fff81b94f904d91d" + integrity sha512-koR6apx0g0wX6RRiPpjA4AFQUQUbXrK16kq4/SZjVp7u5cffJhNkY4TnITxcGA4acGSPYAfx3NHRIv4Khn1axQ== dependencies: "@opentelemetry/core" "^2.0.0" - "@opentelemetry/instrumentation" "^0.211.0" + "@opentelemetry/instrumentation" "^0.213.0" -"@opentelemetry/instrumentation-generic-pool@0.54.0": - version "0.54.0" - resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation-generic-pool/-/instrumentation-generic-pool-0.54.0.tgz#9f3ad0cedbfe5011efe4ebdc76c85a73a0b967a6" - integrity sha512-8dXMBzzmEdXfH/wjuRvcJnUFeWzZHUnExkmFJ2uPfa31wmpyBCMxO59yr8f/OXXgSogNgi/uPo9KW9H7LMIZ+g== +"@opentelemetry/instrumentation-generic-pool@0.56.0": + version "0.56.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation-generic-pool/-/instrumentation-generic-pool-0.56.0.tgz#01560f52d5bac6fb6312a1f0bc74bf0939119894" + integrity sha512-fg+Jffs6fqrf0uQS0hom7qBFKsbtpBiBl8+Vkc63Gx8xh6pVh+FhagmiO6oM0m3vyb683t1lP7yGYq22SiDnqg== dependencies: - "@opentelemetry/instrumentation" "^0.211.0" + "@opentelemetry/instrumentation" "^0.213.0" -"@opentelemetry/instrumentation-graphql@0.58.0": - version "0.58.0" - resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation-graphql/-/instrumentation-graphql-0.58.0.tgz#3ca294ba410e04c920dc82ab4caa23ec1c2e1a2e" - integrity sha512-+yWVVY7fxOs3j2RixCbvue8vUuJ1inHxN2q1sduqDB0Wnkr4vOzVKRYl/Zy7B31/dcPS72D9lo/kltdOTBM3bQ== +"@opentelemetry/instrumentation-graphql@0.61.0": + version "0.61.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation-graphql/-/instrumentation-graphql-0.61.0.tgz#d1f896095a891c9576967645e7fcba935da82a94" + integrity sha512-pUiVASv6nh2XrerTvlbVHh7vKFzscpgwiQ/xvnZuAIzQ5lRjWVdRPUuXbvZJ/Yq79QsE81TZdJ7z9YsXiss1ew== dependencies: - "@opentelemetry/instrumentation" "^0.211.0" + "@opentelemetry/instrumentation" "^0.213.0" -"@opentelemetry/instrumentation-hapi@0.57.0": - version "0.57.0" - resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation-hapi/-/instrumentation-hapi-0.57.0.tgz#27b3a44a51444af3100a321f2e40623e89e5bb75" - integrity sha512-Os4THbvls8cTQTVA8ApLfZZztuuqGEeqog0XUnyRW7QVF0d/vOVBEcBCk1pazPFmllXGEdNbbat8e2fYIWdFbw== +"@opentelemetry/instrumentation-hapi@0.59.0": + version "0.59.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation-hapi/-/instrumentation-hapi-0.59.0.tgz#412ea19e97ead684c5737e1f1aaa19ff940512d3" + integrity sha512-33wa4mEr+9+ztwdgLor1SeBu4Opz4IsmpcLETXAd3VmBrOjez8uQtrsOhPCa5Vhbm5gzDlMYTgFRLQzf8/YHFA== dependencies: "@opentelemetry/core" "^2.0.0" - "@opentelemetry/instrumentation" "^0.211.0" + "@opentelemetry/instrumentation" "^0.213.0" "@opentelemetry/semantic-conventions" "^1.27.0" -"@opentelemetry/instrumentation-http@0.211.0": - version "0.211.0" - resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation-http/-/instrumentation-http-0.211.0.tgz#2f12f83f0c21d37917fd9710fb5b755f28858cf6" - integrity sha512-n0IaQ6oVll9PP84SjbOCwDjaJasWRHi6BLsbMLiT6tNj7QbVOkuA5sk/EfZczwI0j5uTKl1awQPivO/ldVtsqA== +"@opentelemetry/instrumentation-http@0.213.0": + version "0.213.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation-http/-/instrumentation-http-0.213.0.tgz#b379d6bcbae43a7d6d54070f3794527021f176c9" + integrity sha512-B978Xsm5XEPGhm1P07grDoaOFLHapJPkOG9h016cJsyWWxmiLnPu2M/4Nrm7UCkHSiLnkXgC+zVGUAIahy8EEA== dependencies: - "@opentelemetry/core" "2.5.0" - "@opentelemetry/instrumentation" "0.211.0" + "@opentelemetry/core" "2.6.0" + "@opentelemetry/instrumentation" "0.213.0" "@opentelemetry/semantic-conventions" "^1.29.0" forwarded-parse "2.1.2" -"@opentelemetry/instrumentation-ioredis@0.59.0": - version "0.59.0" - resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation-ioredis/-/instrumentation-ioredis-0.59.0.tgz#530d06aa67b73ea732414557adebe1dde7de430f" - integrity sha512-875UxzBHWkW+P4Y45SoFM2AR8f8TzBMD8eO7QXGCyFSCUMP5s9vtt/BS8b/r2kqLyaRPK6mLbdnZznK3XzQWvw== +"@opentelemetry/instrumentation-ioredis@0.61.0": + version "0.61.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation-ioredis/-/instrumentation-ioredis-0.61.0.tgz#e862540cbf188d0ca368d3a75020d165cb8beefb" + integrity sha512-hsHDadUtAFbws1YSDc1XW0svGFKiUbqv2td1Cby+UAiwvojm1NyBo/taifH0t8CuFZ0x/2SDm0iuTwrM5pnVOg== dependencies: - "@opentelemetry/instrumentation" "^0.211.0" + "@opentelemetry/instrumentation" "^0.213.0" "@opentelemetry/redis-common" "^0.38.2" "@opentelemetry/semantic-conventions" "^1.33.0" -"@opentelemetry/instrumentation-kafkajs@0.20.0": - version "0.20.0" - resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation-kafkajs/-/instrumentation-kafkajs-0.20.0.tgz#521db06d10d39f42e842ce336e5c1e48b3da2956" - integrity sha512-yJXOuWZROzj7WmYCUiyT27tIfqBrVtl1/TwVbQyWPz7rL0r1Lu7kWjD0PiVeTCIL6CrIZ7M2s8eBxsTAOxbNvw== +"@opentelemetry/instrumentation-kafkajs@0.22.0": + version "0.22.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation-kafkajs/-/instrumentation-kafkajs-0.22.0.tgz#a3cf7aca003f96211e514a348b7568799efdfba1" + integrity sha512-wJU4IBQMUikdJAcTChLFqK5lo+flo7pahqd8DSLv7uMxsdOdAHj6RzKYAm8pPfUS6ItKYutYyuicwKaFwQKsoA== dependencies: - "@opentelemetry/instrumentation" "^0.211.0" + "@opentelemetry/instrumentation" "^0.213.0" "@opentelemetry/semantic-conventions" "^1.30.0" -"@opentelemetry/instrumentation-knex@0.55.0": - version "0.55.0" - resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation-knex/-/instrumentation-knex-0.55.0.tgz#fefc17d854a107d99ab0dbc8933d5897efce1abd" - integrity sha512-FtTL5DUx5Ka/8VK6P1VwnlUXPa3nrb7REvm5ddLUIeXXq4tb9pKd+/ThB1xM/IjefkRSN3z8a5t7epYw1JLBJQ== +"@opentelemetry/instrumentation-knex@0.57.0": + version "0.57.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation-knex/-/instrumentation-knex-0.57.0.tgz#d46622a3f82f3df2ba29c64498d6ef828a40457e" + integrity sha512-vMCSh8kolEm5rRsc+FZeTZymWmIJwc40hjIKnXH4O0Dv/gAkJJIRXCsPX5cPbe0c0j/34+PsENd0HqKruwhVYw== dependencies: - "@opentelemetry/instrumentation" "^0.211.0" + "@opentelemetry/instrumentation" "^0.213.0" "@opentelemetry/semantic-conventions" "^1.33.1" -"@opentelemetry/instrumentation-koa@0.59.0": - version "0.59.0" - resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation-koa/-/instrumentation-koa-0.59.0.tgz#7df8850fa193a8f590e3fbcab00016e25db27041" - integrity sha512-K9o2skADV20Skdu5tG2bogPKiSpXh4KxfLjz6FuqIVvDJNibwSdu5UvyyBzRVp1rQMV6UmoIk6d3PyPtJbaGSg== +"@opentelemetry/instrumentation-koa@0.61.0": + version "0.61.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation-koa/-/instrumentation-koa-0.61.0.tgz#c12f57b023834afb1c142c11746d560bcc288b5b" + integrity sha512-lvrfWe9ShK/D2X4brmx8ZqqeWPfRl8xekU0FCn7C1dHm5k6+rTOOi36+4fnaHAP8lig9Ux6XQ1D4RNIpPCt1WQ== dependencies: "@opentelemetry/core" "^2.0.0" - "@opentelemetry/instrumentation" "^0.211.0" + "@opentelemetry/instrumentation" "^0.213.0" "@opentelemetry/semantic-conventions" "^1.36.0" -"@opentelemetry/instrumentation-lru-memoizer@0.55.0": - version "0.55.0" - resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation-lru-memoizer/-/instrumentation-lru-memoizer-0.55.0.tgz#776d5f10178adfbda7286b4f31adde8bb518d55a" - integrity sha512-FDBfT7yDGcspN0Cxbu/k8A0Pp1Jhv/m7BMTzXGpcb8ENl3tDj/51U65R5lWzUH15GaZA15HQ5A5wtafklxYj7g== +"@opentelemetry/instrumentation-lru-memoizer@0.57.0": + version "0.57.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation-lru-memoizer/-/instrumentation-lru-memoizer-0.57.0.tgz#4da92ecd1bc5d5e9c7de28ea14ed57c9f29cfefd" + integrity sha512-cEqpUocSKJfwDtLYTTJehRLWzkZ2eoePCxfVIgGkGkb83fMB71O+y4MvRHJPbeV2bdoWdOVrl8uO0+EynWhTEA== dependencies: - "@opentelemetry/instrumentation" "^0.211.0" + "@opentelemetry/instrumentation" "^0.213.0" -"@opentelemetry/instrumentation-mongodb@0.64.0": - version "0.64.0" - resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation-mongodb/-/instrumentation-mongodb-0.64.0.tgz#0027c13fdd7506eb1f618998245edd244cc23cc7" - integrity sha512-pFlCJjweTqVp7B220mCvCld1c1eYKZfQt1p3bxSbcReypKLJTwat+wbL2YZoX9jPi5X2O8tTKFEOahO5ehQGsA== +"@opentelemetry/instrumentation-mongodb@0.66.0": + version "0.66.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation-mongodb/-/instrumentation-mongodb-0.66.0.tgz#990bf4571382d3b02a9584927411c92c375d2fd4" + integrity sha512-d7m9QnAY+4TCWI4q1QRkfrc6fo/92VwssaB1DzQfXNRvu51b78P+HJlWP7Qg6N6nkwdb9faMZNBCZJfftmszkw== dependencies: - "@opentelemetry/instrumentation" "^0.211.0" + "@opentelemetry/instrumentation" "^0.213.0" "@opentelemetry/semantic-conventions" "^1.33.0" -"@opentelemetry/instrumentation-mongoose@0.57.0": - version "0.57.0" - resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation-mongoose/-/instrumentation-mongoose-0.57.0.tgz#2ce3f3bbf66a255958c3a112a92079898d69f624" - integrity sha512-MthiekrU/BAJc5JZoZeJmo0OTX6ycJMiP6sMOSRTkvz5BrPMYDqaJos0OgsLPL/HpcgHP7eo5pduETuLguOqcg== +"@opentelemetry/instrumentation-mongoose@0.59.0": + version "0.59.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation-mongoose/-/instrumentation-mongoose-0.59.0.tgz#8446ece86df59f09c630e7df6d794c8cd08f58d8" + integrity sha512-6/jWU+c1NgznkVLDU/2y0bXV2nJo3o9FWZ9mZ9nN6T/JBNRoMnVXZl2FdBmgH+a5MwaWLs5kmRJTP5oUVGIkPw== dependencies: "@opentelemetry/core" "^2.0.0" - "@opentelemetry/instrumentation" "^0.211.0" + "@opentelemetry/instrumentation" "^0.213.0" "@opentelemetry/semantic-conventions" "^1.33.0" -"@opentelemetry/instrumentation-mysql2@0.57.0": - version "0.57.0" - resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation-mysql2/-/instrumentation-mysql2-0.57.0.tgz#928eda47c6f4ab193d3363fcab01d81a70adc46b" - integrity sha512-nHSrYAwF7+aV1E1V9yOOP9TchOodb6fjn4gFvdrdQXiRE7cMuffyLLbCZlZd4wsspBzVwOXX8mpURdRserAhNA== +"@opentelemetry/instrumentation-mysql2@0.59.0": + version "0.59.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation-mysql2/-/instrumentation-mysql2-0.59.0.tgz#938cd4a294b7e4a6e8c3855b8cfe267c8d2e5493" + integrity sha512-n9/xrVCRBfG9egVbffnlU1uhr+HX0vF4GgtAB/Bvm48wpFgRidqD8msBMiym1kRYzmpWvJqTxNT47u1MkgBEdw== dependencies: - "@opentelemetry/instrumentation" "^0.211.0" + "@opentelemetry/instrumentation" "^0.213.0" "@opentelemetry/semantic-conventions" "^1.33.0" "@opentelemetry/sql-common" "^0.41.2" -"@opentelemetry/instrumentation-mysql@0.57.0": - version "0.57.0" - resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation-mysql/-/instrumentation-mysql-0.57.0.tgz#74d42a1c6d20aee93996f8b6f6b7b69469748754" - integrity sha512-HFS/+FcZ6Q7piM7Il7CzQ4VHhJvGMJWjx7EgCkP5AnTntSN5rb5Xi3TkYJHBKeR27A0QqPlGaCITi93fUDs++Q== +"@opentelemetry/instrumentation-mysql@0.59.0": + version "0.59.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation-mysql/-/instrumentation-mysql-0.59.0.tgz#bf43cafbac5928236ea53704a52c718349c22e38" + integrity sha512-r+V/Fh0sm7Ga8/zk/TI5H5FQRAjwr0RrpfPf8kNIehlsKf12XnvIaZi8ViZkpX0gyPEpLXqzqWD6QHlgObgzZw== dependencies: - "@opentelemetry/instrumentation" "^0.211.0" + "@opentelemetry/instrumentation" "^0.213.0" "@opentelemetry/semantic-conventions" "^1.33.0" "@types/mysql" "2.15.27" -"@opentelemetry/instrumentation-pg@0.63.0": - version "0.63.0" - resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation-pg/-/instrumentation-pg-0.63.0.tgz#852ca5519d756c613bb9f3153a5e70c2b805e5cf" - integrity sha512-dKm/ODNN3GgIQVlbD6ZPxwRc3kleLf95hrRWXM+l8wYo+vSeXtEpQPT53afEf6VFWDVzJK55VGn8KMLtSve/cg== +"@opentelemetry/instrumentation-pg@0.65.0": + version "0.65.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation-pg/-/instrumentation-pg-0.65.0.tgz#f1f76f8c57c5c6fec68c77ce6ee104fee5de13e1" + integrity sha512-W0zpHEIEuyZ8zvb3njaX9AAbHgPYOsSWVOoWmv1sjVRSF6ZpBqtlxBWbU+6hhq1TFWBeWJOXZ8nZS/PUFpLJYQ== dependencies: "@opentelemetry/core" "^2.0.0" - "@opentelemetry/instrumentation" "^0.211.0" + "@opentelemetry/instrumentation" "^0.213.0" "@opentelemetry/semantic-conventions" "^1.34.0" "@opentelemetry/sql-common" "^0.41.2" "@types/pg" "8.15.6" "@types/pg-pool" "2.0.7" -"@opentelemetry/instrumentation-redis@0.59.0": - version "0.59.0" - resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation-redis/-/instrumentation-redis-0.59.0.tgz#44c1bd7852cdadbe77c1bdfa94185528012558cf" - integrity sha512-JKv1KDDYA2chJ1PC3pLP+Q9ISMQk6h5ey+99mB57/ARk0vQPGZTTEb4h4/JlcEpy7AYT8HIGv7X6l+br03Neeg== +"@opentelemetry/instrumentation-redis@0.61.0": + version "0.61.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation-redis/-/instrumentation-redis-0.61.0.tgz#b43b9c3b5d0b124f2e60b055e4529a3a4b55dbc4" + integrity sha512-JnPexA034/0UJRsvH96B0erQoNOqKJZjE2ZRSw9hiTSC23LzE0nJE/u6D+xqOhgUhRnhhcPHq4MdYtmUdYTF+Q== dependencies: - "@opentelemetry/instrumentation" "^0.211.0" + "@opentelemetry/instrumentation" "^0.213.0" "@opentelemetry/redis-common" "^0.38.2" "@opentelemetry/semantic-conventions" "^1.27.0" -"@opentelemetry/instrumentation-tedious@0.30.0": - version "0.30.0" - resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation-tedious/-/instrumentation-tedious-0.30.0.tgz#4a8906b5322c4add4132e6e086c23e17bc23626b" - integrity sha512-bZy9Q8jFdycKQ2pAsyuHYUHNmCxCOGdG6eg1Mn75RvQDccq832sU5OWOBnc12EFUELI6icJkhR7+EQKMBam2GA== +"@opentelemetry/instrumentation-tedious@0.32.0": + version "0.32.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation-tedious/-/instrumentation-tedious-0.32.0.tgz#8204a14adb71adcbf7d72705244d606bb69e428a" + integrity sha512-BQS6gG8RJ1foEqfEZ+wxoqlwfCAzb1ZVG0ad8Gfe4x8T658HJCLGLd4E4NaoQd8EvPfLqOXgzGaE/2U4ytDSWA== dependencies: - "@opentelemetry/instrumentation" "^0.211.0" + "@opentelemetry/instrumentation" "^0.213.0" "@opentelemetry/semantic-conventions" "^1.33.0" "@types/tedious" "^4.0.14" -"@opentelemetry/instrumentation-undici@0.21.0": - version "0.21.0" - resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation-undici/-/instrumentation-undici-0.21.0.tgz#dcb43a364c39e78217946aeb7aa09156e55f4c6c" - integrity sha512-gok0LPUOTz2FQ1YJMZzaHcOzDFyT64XJ8M9rNkugk923/p6lDGms/cRW1cqgqp6N6qcd6K6YdVHwPEhnx9BWbw== +"@opentelemetry/instrumentation-undici@0.23.0": + version "0.23.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation-undici/-/instrumentation-undici-0.23.0.tgz#e328bf6e53847ba7baa2a345d02221cc62917cec" + integrity sha512-LL0VySzKVR2cJSFVZaTYpZl1XTpBGnfzoQPe2W7McS2267ldsaEIqtQY6VXs2KCXN0poFjze5110PIpxHDaDGg== dependencies: "@opentelemetry/core" "^2.0.0" - "@opentelemetry/instrumentation" "^0.211.0" + "@opentelemetry/instrumentation" "^0.213.0" "@opentelemetry/semantic-conventions" "^1.24.0" -"@opentelemetry/instrumentation@0.211.0", "@opentelemetry/instrumentation@^0.211.0": - version "0.211.0" - resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation/-/instrumentation-0.211.0.tgz#d45e20eafa75b5d3e8a9745a6205332893c55f37" - integrity sha512-h0nrZEC/zvI994nhg7EgQ8URIHt0uDTwN90r3qQUdZORS455bbx+YebnGeEuFghUT0HlJSrLF4iHw67f+odY+Q== +"@opentelemetry/instrumentation@0.213.0", "@opentelemetry/instrumentation@^0.213.0": + version "0.213.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation/-/instrumentation-0.213.0.tgz#55362569efd0cba00aab9921a78dd20dfddf70b6" + integrity sha512-3i9NdkET/KvQomeh7UaR/F4r9P25Rx6ooALlWXPIjypcEOUxksCmVu0zA70NBJWlrMW1rPr/LRidFAflLI+s/w== dependencies: - "@opentelemetry/api-logs" "0.211.0" - import-in-the-middle "^2.0.0" + "@opentelemetry/api-logs" "0.213.0" + import-in-the-middle "^3.0.0" require-in-the-middle "^8.0.0" "@opentelemetry/instrumentation@^0.207.0": @@ -5321,13 +5321,13 @@ import-in-the-middle "^2.0.0" require-in-the-middle "^8.0.0" -"@opentelemetry/instrumentation@^0.208.0": - version "0.208.0" - resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation/-/instrumentation-0.208.0.tgz#d764f8e4329dad50804e2e98f010170c14c4ce8f" - integrity sha512-Eju0L4qWcQS+oXxi6pgh7zvE2byogAkcsVv0OjHF/97iOz1N/aKE6etSGowYkie+YA1uo6DNwdSxaaNnLvcRlA== +"@opentelemetry/instrumentation@^0.212.0": + version "0.212.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation/-/instrumentation-0.212.0.tgz#238b6e3e2131217ff4acfe7e8e7b6ce1f0ac0ba0" + integrity sha512-IyXmpNnifNouMOe0I/gX7ENfv2ZCNdYTF0FpCsoBcpbIHzk81Ww9rQTYTnvghszCg7qGrIhNvWC8dhEifgX9Jg== dependencies: - "@opentelemetry/api-logs" "0.208.0" - import-in-the-middle "^2.0.0" + "@opentelemetry/api-logs" "0.212.0" + import-in-the-middle "^2.0.6" require-in-the-middle "^8.0.0" "@opentelemetry/redis-common@^0.38.2": @@ -5335,24 +5335,24 @@ resolved "https://registry.yarnpkg.com/@opentelemetry/redis-common/-/redis-common-0.38.2.tgz#cefa4f3e79db1cd54f19e233b7dfb56621143955" integrity sha512-1BCcU93iwSRZvDAgwUxC/DV4T/406SkMfxGqu5ojc3AvNI+I9GhV7v0J1HljsczuuhcnFLYqD5VmwVXfCGHzxA== -"@opentelemetry/resources@2.6.0", "@opentelemetry/resources@^2.5.1": - version "2.6.0" - resolved "https://registry.yarnpkg.com/@opentelemetry/resources/-/resources-2.6.0.tgz#1a945dbb8986043d8b593c358d5d8e3de6becf5a" - integrity sha512-D4y/+OGe3JSuYUCBxtH5T9DSAWNcvCb/nQWIga8HNtXTVPQn59j0nTBAgaAXxUVBDl40mG3Tc76b46wPlZaiJQ== +"@opentelemetry/resources@2.6.1", "@opentelemetry/resources@^2.6.0": + version "2.6.1" + resolved "https://registry.yarnpkg.com/@opentelemetry/resources/-/resources-2.6.1.tgz#e1b02772c5f65c0e074d59e4743188f7575e97c7" + integrity sha512-lID/vxSuKWXM55XhAKNoYXu9Cutoq5hFdkbTdI/zDKQktXzcWBVhNsOkiZFTMU9UtEWuGRNe0HUgmsFldIdxVA== dependencies: - "@opentelemetry/core" "2.6.0" + "@opentelemetry/core" "2.6.1" "@opentelemetry/semantic-conventions" "^1.29.0" -"@opentelemetry/sdk-trace-base@^2.5.1": - version "2.6.0" - resolved "https://registry.yarnpkg.com/@opentelemetry/sdk-trace-base/-/sdk-trace-base-2.6.0.tgz#d7e752a0906f2bcae3c1261e224aef3e3b3746f9" - integrity sha512-g/OZVkqlxllgFM7qMKqbPV9c1DUPhQ7d4n3pgZFcrnrNft9eJXZM2TNHTPYREJBrtNdRytYyvwjgL5geDKl3EQ== +"@opentelemetry/sdk-trace-base@^2.6.0": + version "2.6.1" + resolved "https://registry.yarnpkg.com/@opentelemetry/sdk-trace-base/-/sdk-trace-base-2.6.1.tgz#ed353062be4c28a0649247ad369654020c29bfce" + integrity sha512-r86ut4T1e8vNwB35CqCcKd45yzqH6/6Wzvpk2/cZB8PsPLlZFTvrh8yfOS3CYZYcUmAx4hHTZJ8AO8Dj8nrdhw== dependencies: - "@opentelemetry/core" "2.6.0" - "@opentelemetry/resources" "2.6.0" + "@opentelemetry/core" "2.6.1" + "@opentelemetry/resources" "2.6.1" "@opentelemetry/semantic-conventions" "^1.29.0" -"@opentelemetry/semantic-conventions@^1.24.0", "@opentelemetry/semantic-conventions@^1.27.0", "@opentelemetry/semantic-conventions@^1.28.0", "@opentelemetry/semantic-conventions@^1.29.0", "@opentelemetry/semantic-conventions@^1.30.0", "@opentelemetry/semantic-conventions@^1.33.0", "@opentelemetry/semantic-conventions@^1.33.1", "@opentelemetry/semantic-conventions@^1.34.0", "@opentelemetry/semantic-conventions@^1.36.0", "@opentelemetry/semantic-conventions@^1.39.0": +"@opentelemetry/semantic-conventions@^1.24.0", "@opentelemetry/semantic-conventions@^1.27.0", "@opentelemetry/semantic-conventions@^1.28.0", "@opentelemetry/semantic-conventions@^1.29.0", "@opentelemetry/semantic-conventions@^1.30.0", "@opentelemetry/semantic-conventions@^1.33.0", "@opentelemetry/semantic-conventions@^1.33.1", "@opentelemetry/semantic-conventions@^1.34.0", "@opentelemetry/semantic-conventions@^1.36.0", "@opentelemetry/semantic-conventions@^1.40.0": version "1.40.0" resolved "https://registry.yarnpkg.com/@opentelemetry/semantic-conventions/-/semantic-conventions-1.40.0.tgz#10b2944ca559386590683392022a897eefd011d3" integrity sha512-cifvXDhcqMwwTlTK04GBNeIe7yyo28Mfby85QXFe1Yk8nmi36Ab/5UQwptOx84SsoGNRg+EVSjwzfSZMy6pmlw== @@ -5441,10 +5441,10 @@ dependencies: make-synchronized "^0.8.0" -"@prisma/instrumentation@7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@prisma/instrumentation/-/instrumentation-7.2.0.tgz#9409a436d8f98e8950c8659aeeba045c4a07e891" - integrity sha512-Rh9Z4x5kEj1OdARd7U18AtVrnL6rmLSI0qYShaB4W7Wx5BKbgzndWF+QnuzMb7GLfVdlT5aYCXoPQVYuYtVu0g== +"@prisma/instrumentation@7.4.2": + version "7.4.2" + resolved "https://registry.yarnpkg.com/@prisma/instrumentation/-/instrumentation-7.4.2.tgz#b05e814d0647343febd26a8ccb039d27ccc69eca" + integrity sha512-r9JfchJF1Ae6yAxcaLu/V1TGqBhAuSDe3mRNOssBfx1rMzfZ4fdNvrgUBwyb/TNTGXFxlH9AZix5P257x07nrg== dependencies: "@opentelemetry/instrumentation" "^0.207.0" @@ -6658,10 +6658,10 @@ "@sentry/types" "7.120.4" "@sentry/utils" "7.120.4" -"@sentry/core@10.43.0": - version "10.43.0" - resolved "https://registry.yarnpkg.com/@sentry/core/-/core-10.43.0.tgz#48b7b2295f36097775b529c59712688c9087c7bc" - integrity sha512-l0SszQAPiQGWl/ferw8GP3ALyHXiGiRKJaOvNmhGO+PrTQyZTZ6OYyPnGijAFRg58dE1V3RCH/zw5d2xSUIiNg== +"@sentry/core@10.46.0": + version "10.46.0" + resolved "https://registry.yarnpkg.com/@sentry/core/-/core-10.46.0.tgz#f3d6398acccddfea27dda656e639494f83d0bb09" + integrity sha512-N3fj4zqBQOhXliS1Ne9euqIKuciHCGOJfPGQLwBoW9DNz03jF+NB8+dUKtrJ79YLoftjVgf8nbgwtADK7NR+2Q== "@sentry/core@7.114.0": version "7.114.0" @@ -6740,55 +6740,55 @@ "@sentry/utils" "7.120.4" localforage "^1.8.1" -"@sentry/node-core@10.43.0": - version "10.43.0" - resolved "https://registry.yarnpkg.com/@sentry/node-core/-/node-core-10.43.0.tgz#f8575be3ad09e86e8e18e54074f3bcafea344234" - integrity sha512-w2H3NSkNMoYOS7o7mR55BM7+xL++dPxMSv1/XDfsra9FYHGppO+Mxk667Ee5k+uDi+wNIioICIh+5XOvZh4+HQ== +"@sentry/node-core@10.46.0": + version "10.46.0" + resolved "https://registry.yarnpkg.com/@sentry/node-core/-/node-core-10.46.0.tgz#15c7a2f8c71089049c8e66206915f2547cae52e2" + integrity sha512-gwLGXfkzmiCmUI1VWttyoZBaVp1ItpDKc8AV2mQblWPQGdLSD0c6uKV/FkU291yZA3rXsrLXVwcWoibwnjE2vw== dependencies: - "@sentry/core" "10.43.0" - "@sentry/opentelemetry" "10.43.0" - import-in-the-middle "^2.0.6" + "@sentry/core" "10.46.0" + "@sentry/opentelemetry" "10.46.0" + import-in-the-middle "^3.0.0" -"@sentry/node@10.43.0": - version "10.43.0" - resolved "https://registry.yarnpkg.com/@sentry/node/-/node-10.43.0.tgz#466acf853565d92d972b7e012fab6558a32a739e" - integrity sha512-oNwXcuZUc4uTTr0WbHZBBIKsKwAKvNMTgbXwxfB37CfzV18wbTirbQABZ/Ir3WNxSgi6ZcnC6UE013jF5XWPqw== +"@sentry/node@10.46.0": + version "10.46.0" + resolved "https://registry.yarnpkg.com/@sentry/node/-/node-10.46.0.tgz#89977f24e8bbd304ad6a1460f6efb5dd6d72ec56" + integrity sha512-vF+7FrUXEtmYWuVcnvBjlWKeyLw/kwHpwnGj9oUmO/a2uKjDmUr53ZVcapggNxCjivavGYr9uHOY64AGdeUyzA== dependencies: - "@fastify/otel" "0.16.0" + "@fastify/otel" "0.17.1" "@opentelemetry/api" "^1.9.0" - "@opentelemetry/context-async-hooks" "^2.5.1" - "@opentelemetry/core" "^2.5.1" - "@opentelemetry/instrumentation" "^0.211.0" - "@opentelemetry/instrumentation-amqplib" "0.58.0" - "@opentelemetry/instrumentation-connect" "0.54.0" - "@opentelemetry/instrumentation-dataloader" "0.28.0" - "@opentelemetry/instrumentation-express" "0.59.0" - "@opentelemetry/instrumentation-fs" "0.30.0" - "@opentelemetry/instrumentation-generic-pool" "0.54.0" - "@opentelemetry/instrumentation-graphql" "0.58.0" - "@opentelemetry/instrumentation-hapi" "0.57.0" - "@opentelemetry/instrumentation-http" "0.211.0" - "@opentelemetry/instrumentation-ioredis" "0.59.0" - "@opentelemetry/instrumentation-kafkajs" "0.20.0" - "@opentelemetry/instrumentation-knex" "0.55.0" - "@opentelemetry/instrumentation-koa" "0.59.0" - "@opentelemetry/instrumentation-lru-memoizer" "0.55.0" - "@opentelemetry/instrumentation-mongodb" "0.64.0" - "@opentelemetry/instrumentation-mongoose" "0.57.0" - "@opentelemetry/instrumentation-mysql" "0.57.0" - "@opentelemetry/instrumentation-mysql2" "0.57.0" - "@opentelemetry/instrumentation-pg" "0.63.0" - "@opentelemetry/instrumentation-redis" "0.59.0" - "@opentelemetry/instrumentation-tedious" "0.30.0" - "@opentelemetry/instrumentation-undici" "0.21.0" - "@opentelemetry/resources" "^2.5.1" - "@opentelemetry/sdk-trace-base" "^2.5.1" - "@opentelemetry/semantic-conventions" "^1.39.0" - "@prisma/instrumentation" "7.2.0" - "@sentry/core" "10.43.0" - "@sentry/node-core" "10.43.0" - "@sentry/opentelemetry" "10.43.0" - import-in-the-middle "^2.0.6" + "@opentelemetry/context-async-hooks" "^2.6.0" + "@opentelemetry/core" "^2.6.0" + "@opentelemetry/instrumentation" "^0.213.0" + "@opentelemetry/instrumentation-amqplib" "0.60.0" + "@opentelemetry/instrumentation-connect" "0.56.0" + "@opentelemetry/instrumentation-dataloader" "0.30.0" + "@opentelemetry/instrumentation-express" "0.61.0" + "@opentelemetry/instrumentation-fs" "0.32.0" + "@opentelemetry/instrumentation-generic-pool" "0.56.0" + "@opentelemetry/instrumentation-graphql" "0.61.0" + "@opentelemetry/instrumentation-hapi" "0.59.0" + "@opentelemetry/instrumentation-http" "0.213.0" + "@opentelemetry/instrumentation-ioredis" "0.61.0" + "@opentelemetry/instrumentation-kafkajs" "0.22.0" + "@opentelemetry/instrumentation-knex" "0.57.0" + "@opentelemetry/instrumentation-koa" "0.61.0" + "@opentelemetry/instrumentation-lru-memoizer" "0.57.0" + "@opentelemetry/instrumentation-mongodb" "0.66.0" + "@opentelemetry/instrumentation-mongoose" "0.59.0" + "@opentelemetry/instrumentation-mysql" "0.59.0" + "@opentelemetry/instrumentation-mysql2" "0.59.0" + "@opentelemetry/instrumentation-pg" "0.65.0" + "@opentelemetry/instrumentation-redis" "0.61.0" + "@opentelemetry/instrumentation-tedious" "0.32.0" + "@opentelemetry/instrumentation-undici" "0.23.0" + "@opentelemetry/resources" "^2.6.0" + "@opentelemetry/sdk-trace-base" "^2.6.0" + "@opentelemetry/semantic-conventions" "^1.40.0" + "@prisma/instrumentation" "7.4.2" + "@sentry/core" "10.46.0" + "@sentry/node-core" "10.46.0" + "@sentry/opentelemetry" "10.46.0" + import-in-the-middle "^3.0.0" "@sentry/node@7.120.4": version "7.120.4" @@ -6801,12 +6801,12 @@ "@sentry/types" "7.120.4" "@sentry/utils" "7.120.4" -"@sentry/opentelemetry@10.43.0": - version "10.43.0" - resolved "https://registry.yarnpkg.com/@sentry/opentelemetry/-/opentelemetry-10.43.0.tgz#c2d3d58e943541a7ae81e79cf264b61c7fa20f1b" - integrity sha512-+fIcnnLdvBHdq4nKq23t9v/B9D4L97fPWEDksXbpGs11o6BsqY4Tlzmce6cP95iiQhPckCEag3FthSND+BYtYQ== +"@sentry/opentelemetry@10.46.0": + version "10.46.0" + resolved "https://registry.yarnpkg.com/@sentry/opentelemetry/-/opentelemetry-10.46.0.tgz#4d60c6ff437169f2402b8ed75a858ae22b074bd9" + integrity sha512-dzzV2ovruGsx9jzusGGr6cNPvMgYRu2BIrF8aMZ3rkQ1OpPJjPStqtA1l1fw0aoxHOxIjFU7ml4emF+xdmMl3g== dependencies: - "@sentry/core" "10.43.0" + "@sentry/core" "10.46.0" "@sentry/react@7.120.4": version "7.120.4" @@ -22341,12 +22341,12 @@ growly@^1.3.0: resolved "https://registry.yarnpkg.com/growly/-/growly-1.3.0.tgz#f10748cbe76af964b7c96c93c6bcc28af120c081" integrity sha512-+xGQY0YyAWCnqy7Cd++hc2JqMYzlm0dG30Jd0beaA64sROr8C4nt8Yc9V5Ro3avlSUDTN0ulqP/VBKi1/lLygw== -gscan@5.4.0: - version "5.4.0" - resolved "https://registry.yarnpkg.com/gscan/-/gscan-5.4.0.tgz#6db83f49b0c7343836c7ca5bf07c40c534d255ec" - integrity sha512-q0hksTZ2q7xlCi5i3OU61c4xukTruLvd/kwvay2l3WDLYYR/ZIg4TJITsb4aXYtre0ihM07NHrjyyLPBFMOSBQ== +gscan@5.4.1: + version "5.4.1" + resolved "https://registry.yarnpkg.com/gscan/-/gscan-5.4.1.tgz#a9f5c6566529c70454dfa1bf9db7709f3373bb55" + integrity sha512-Fgzx/jmXDd2vjw6jZZhe6TwMwQjKlGUgIaxvHk0H22pVtJJaN92ctI0fdGE8q5rXCcH3OGzpQ6jvlnleS7RlNw== dependencies: - "@sentry/node" "10.43.0" + "@sentry/node" "10.46.0" "@tryghost/config" "2.0.3" "@tryghost/debug" "2.0.3" "@tryghost/errors" "3.0.3" @@ -23130,6 +23130,16 @@ import-in-the-middle@^2.0.0, import-in-the-middle@^2.0.6: cjs-module-lexer "^2.2.0" module-details-from-path "^1.0.4" +import-in-the-middle@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/import-in-the-middle/-/import-in-the-middle-3.0.1.tgz#8a0a1230c9b865c0e12698171646ae1e3fff691d" + integrity sha512-pYkiyXVL2Mf3pozdlDGV6NAObxQx13Ae8knZk1UJRJ6uRW/ZRmTGHlQYtrsSl7ubuE5F8CD1z+s1n4RHNuTtuA== + dependencies: + acorn "^8.15.0" + acorn-import-attributes "^1.9.5" + cjs-module-lexer "^2.2.0" + module-details-from-path "^1.0.4" + import-lazy@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/import-lazy/-/import-lazy-4.0.0.tgz#e8eb627483a0a43da3c03f3e35548be5cb0cc153" @@ -27139,7 +27149,7 @@ minimatch@9.0.3: dependencies: brace-expansion "^2.0.1" -minimatch@^10.0.3, minimatch@^10.2.1, minimatch@^10.2.2: +minimatch@^10.2.1, minimatch@^10.2.2, minimatch@^10.2.4: version "10.2.5" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-10.2.5.tgz#bd48687a0be38ed2961399105600f832095861d1" integrity sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg== From e2cb75790e5e8acda7cdd6eaa1fdb49413ce6a59 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 9 Apr 2026 14:59:41 +0100 Subject: [PATCH 14/18] Update dependency nwsapi to v2.2.23 (#27300) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This PR contains the following updates: | Package | Change | [Age](https://docs.renovatebot.com/merge-confidence/) | [Confidence](https://docs.renovatebot.com/merge-confidence/) | |---|---|---|---| | [nwsapi](https://javascript.nwbox.com/nwsapi/) ([source](https://redirect.github.com/dperini/nwsapi)) | [`2.2.12` → `2.2.23`](https://renovatebot.com/diffs/npm/nwsapi/2.2.12/2.2.23) | ![age](https://developer.mend.io/api/mc/badges/age/npm/nwsapi/2.2.23?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/nwsapi/2.2.12/2.2.23?slim=true) | --- ### Release Notes
dperini/nwsapi (nwsapi) ### [`v2.2.23`](https://redirect.github.com/dperini/nwsapi/compare/4b06175e2c209b8c137f3dc1ed1b4748278b97f0...f1664d8d43e036e7d2bd1d179a5599863e25945d) [Compare Source](https://redirect.github.com/dperini/nwsapi/compare/4b06175e2c209b8c137f3dc1ed1b4748278b97f0...f1664d8d43e036e7d2bd1d179a5599863e25945d) ### [`v2.2.22`](https://redirect.github.com/dperini/nwsapi/compare/47b31b7c559b3a1598a1584c8a57cf730d2ff88c...4b06175e2c209b8c137f3dc1ed1b4748278b97f0) [Compare Source](https://redirect.github.com/dperini/nwsapi/compare/47b31b7c559b3a1598a1584c8a57cf730d2ff88c...4b06175e2c209b8c137f3dc1ed1b4748278b97f0) ### [`v2.2.21`](https://redirect.github.com/dperini/nwsapi/compare/10076e3987f7d754e5d694efd31ec713583827ef...47b31b7c559b3a1598a1584c8a57cf730d2ff88c) [Compare Source](https://redirect.github.com/dperini/nwsapi/compare/10076e3987f7d754e5d694efd31ec713583827ef...47b31b7c559b3a1598a1584c8a57cf730d2ff88c) ### [`v2.2.20`](https://redirect.github.com/dperini/nwsapi/compare/300cbe2f625ef2217059e0d3df04dc6649a52037...10076e3987f7d754e5d694efd31ec713583827ef) [Compare Source](https://redirect.github.com/dperini/nwsapi/compare/300cbe2f625ef2217059e0d3df04dc6649a52037...10076e3987f7d754e5d694efd31ec713583827ef) ### [`v2.2.19`](https://redirect.github.com/dperini/nwsapi/compare/f6f79df62eccece06c2ad0ac29d486e65c7e3bcc...300cbe2f625ef2217059e0d3df04dc6649a52037) [Compare Source](https://redirect.github.com/dperini/nwsapi/compare/f6f79df62eccece06c2ad0ac29d486e65c7e3bcc...300cbe2f625ef2217059e0d3df04dc6649a52037) ### [`v2.2.18`](https://redirect.github.com/dperini/nwsapi/compare/37ad99b62941cc8421e682786a6118d774c2bfec...f6f79df62eccece06c2ad0ac29d486e65c7e3bcc) [Compare Source](https://redirect.github.com/dperini/nwsapi/compare/37ad99b62941cc8421e682786a6118d774c2bfec...f6f79df62eccece06c2ad0ac29d486e65c7e3bcc) ### [`v2.2.16`](https://redirect.github.com/dperini/nwsapi/compare/ce1089c21c6c206b4951626ea5599f5ccece20a8...37ad99b62941cc8421e682786a6118d774c2bfec) [Compare Source](https://redirect.github.com/dperini/nwsapi/compare/ce1089c21c6c206b4951626ea5599f5ccece20a8...37ad99b62941cc8421e682786a6118d774c2bfec) ### [`v2.2.15`](https://redirect.github.com/dperini/nwsapi/compare/3eedbf2dc3d0cd63a31962f18c76edebdb551c09...ce1089c21c6c206b4951626ea5599f5ccece20a8) [Compare Source](https://redirect.github.com/dperini/nwsapi/compare/3eedbf2dc3d0cd63a31962f18c76edebdb551c09...ce1089c21c6c206b4951626ea5599f5ccece20a8) ### [`v2.2.14`](https://redirect.github.com/dperini/nwsapi/compare/ee69b43bfe979552161c4e4b7e73c7c70d2efc2b...3eedbf2dc3d0cd63a31962f18c76edebdb551c09) [Compare Source](https://redirect.github.com/dperini/nwsapi/compare/ee69b43bfe979552161c4e4b7e73c7c70d2efc2b...3eedbf2dc3d0cd63a31962f18c76edebdb551c09) ### [`v2.2.13`](https://redirect.github.com/dperini/nwsapi/compare/088475fbbdefc9d10fbdd7f914d92bce96aa9d0f...ee69b43bfe979552161c4e4b7e73c7c70d2efc2b) [Compare Source](https://redirect.github.com/dperini/nwsapi/compare/088475fbbdefc9d10fbdd7f914d92bce96aa9d0f...ee69b43bfe979552161c4e4b7e73c7c70d2efc2b)
--- ### Configuration 📅 **Schedule**: (in timezone Etc/UTC) - Branch creation - Only on Sunday and Saturday (`* * * * 0,6`) - Between 12:00 AM and 12:59 PM, only on Monday (`* 0-12 * * 1`) - Between 09:00 PM and 11:59 PM, Monday through Friday (`* 21-23 * * 1-5`) - Between 12:00 AM and 04:59 AM, Tuesday through Saturday (`* 0-4 * * 2-6`) - Automerge - Only on Sunday and Saturday (`* * * * 0,6`) - Between 12:00 AM and 12:59 PM, only on Monday (`* 0-12 * * 1`) - Between 10:00 PM and 11:59 PM, Monday through Friday (`* 22-23 * * 1-5`) - Between 12:00 AM and 04:59 AM, Tuesday through Saturday (`* 0-4 * * 2-6`) 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Never, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] If you want to rebase/retry this PR, check this box --- This PR was generated by [Mend Renovate](https://mend.io/renovate/). View the [repository job log](https://developer.mend.io/github/TryGhost/Ghost). Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index 96bbd61614d..617c59241a9 100644 --- a/package.json +++ b/package.json @@ -67,7 +67,7 @@ "jackspeak": "2.3.6", "moment": "2.24.0", "moment-timezone": "0.5.45", - "nwsapi": "2.2.12" + "nwsapi": "2.2.23" }, "devDependencies": { "@actions/core": "3.0.0", diff --git a/yarn.lock b/yarn.lock index 914365da01c..086480b9672 100644 --- a/yarn.lock +++ b/yarn.lock @@ -28216,10 +28216,10 @@ numbered@^1.1.0: resolved "https://registry.yarnpkg.com/numbered/-/numbered-1.1.0.tgz#9fcd79564c73a84b9574e8370c3d8e58fe3c133c" integrity sha512-pv/ue2Odr7IfYOO0byC1KgBI10wo5YDauLhxY6/saNzAdAs0r1SotGCPzzCLNPL0xtrAwWRialLu23AAu9xO1g== -nwsapi@2.2.12, nwsapi@^2.2.0, nwsapi@^2.2.12: - version "2.2.12" - resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.12.tgz#fb6af5c0ec35b27b4581eb3bbad34ec9e5c696f8" - integrity sha512-qXDmcVlZV4XRtKFzddidpfVP4oMSGhga+xdMc25mv8kaLUHtgzCDhUxkrN8exkGdTlLNaXj7CV3GtON7zuGZ+w== +nwsapi@2.2.23, nwsapi@^2.2.0, nwsapi@^2.2.12: + version "2.2.23" + resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.23.tgz#59712c3a88e6de2bb0b6ccc1070397267019cf6c" + integrity sha512-7wfH4sLbt4M0gCDzGE6vzQBo0bfTKjU7Sfpqy/7gs1qBfYz2vEJH6vXcBKpO3+6Yu1telwd0t9HpyOoLEQQbIQ== nx@22.0.4: version "22.0.4" From 191095a5822ae4f7b8dc8ca5e411f327c0cdff90 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 9 Apr 2026 15:00:03 +0100 Subject: [PATCH 15/18] Update dependency globals to v17 (#27301) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This PR contains the following updates: | Package | Change | [Age](https://docs.renovatebot.com/merge-confidence/) | [Confidence](https://docs.renovatebot.com/merge-confidence/) | |---|---|---|---| | [globals](https://redirect.github.com/sindresorhus/globals) | [`16.5.0` → `17.4.0`](https://renovatebot.com/diffs/npm/globals/16.5.0/17.4.0) | ![age](https://developer.mend.io/api/mc/badges/age/npm/globals/17.4.0?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/globals/16.5.0/17.4.0?slim=true) | --- ### Release Notes
sindresorhus/globals (globals) ### [`v17.4.0`](https://redirect.github.com/sindresorhus/globals/compare/v17.3.0...a9cfd7493fb701474d4dc946283c7b9d63d64134) [Compare Source](https://redirect.github.com/sindresorhus/globals/compare/v17.3.0...v17.4.0) ### [`v17.3.0`](https://redirect.github.com/sindresorhus/globals/releases/tag/v17.3.0) [Compare Source](https://redirect.github.com/sindresorhus/globals/compare/v17.2.0...v17.3.0) - Update globals (2026-02-01) ([#​336](https://redirect.github.com/sindresorhus/globals/issues/336)) [`295fba9`](https://redirect.github.com/sindresorhus/globals/commit/295fba9) *** ### [`v17.2.0`](https://redirect.github.com/sindresorhus/globals/releases/tag/v17.2.0) [Compare Source](https://redirect.github.com/sindresorhus/globals/compare/v17.1.0...v17.2.0) - `jasmine`: Add `throwUnless` and `throwUnlessAsync` globals ([#​335](https://redirect.github.com/sindresorhus/globals/issues/335)) [`97f23a7`](https://redirect.github.com/sindresorhus/globals/commit/97f23a7) *** ### [`v17.1.0`](https://redirect.github.com/sindresorhus/globals/releases/tag/v17.1.0) [Compare Source](https://redirect.github.com/sindresorhus/globals/compare/v17.0.0...v17.1.0) - Add `webpack` and `rspack` globals ([#​333](https://redirect.github.com/sindresorhus/globals/issues/333)) [`65cae73`](https://redirect.github.com/sindresorhus/globals/commit/65cae73) *** ### [`v17.0.0`](https://redirect.github.com/sindresorhus/globals/releases/tag/v17.0.0) [Compare Source](https://redirect.github.com/sindresorhus/globals/compare/v16.5.0...v17.0.0) ##### Breaking - Split `audioWorklet` environment from `browser` ([#​320](https://redirect.github.com/sindresorhus/globals/issues/320)) [`7bc293e`](https://redirect.github.com/sindresorhus/globals/commit/7bc293e) ##### Improvements - Update globals ([#​329](https://redirect.github.com/sindresorhus/globals/issues/329)) [`ebe1063`](https://redirect.github.com/sindresorhus/globals/commit/ebe1063) - Get all browser globals from both `chrome` and `firefox` ([#​321](https://redirect.github.com/sindresorhus/globals/issues/321)) [`59ceff8`](https://redirect.github.com/sindresorhus/globals/commit/59ceff8) - Add `bunBuiltin` environment ([#​324](https://redirect.github.com/sindresorhus/globals/issues/324)) [`1bc6e3b`](https://redirect.github.com/sindresorhus/globals/commit/1bc6e3b) - Add `denoBuiltin` environment ([#​324](https://redirect.github.com/sindresorhus/globals/issues/324)) [`1bc6e3b`](https://redirect.github.com/sindresorhus/globals/commit/1bc6e3b) - Add `paintWorklet` environment ([#​323](https://redirect.github.com/sindresorhus/globals/issues/323)) [`4b78f56`](https://redirect.github.com/sindresorhus/globals/commit/4b78f56) - Add `sharedWorker` environment ([#​322](https://redirect.github.com/sindresorhus/globals/issues/322)) [`4a02a85`](https://redirect.github.com/sindresorhus/globals/commit/4a02a85) ***
--- ### Configuration 📅 **Schedule**: (in timezone Etc/UTC) - Branch creation - Only on Sunday and Saturday (`* * * * 0,6`) - Between 12:00 AM and 12:59 PM, only on Monday (`* 0-12 * * 1`) - Between 09:00 PM and 11:59 PM, Monday through Friday (`* 21-23 * * 1-5`) - Between 12:00 AM and 04:59 AM, Tuesday through Saturday (`* 0-4 * * 2-6`) - Automerge - Only on Sunday and Saturday (`* * * * 0,6`) - Between 12:00 AM and 12:59 PM, only on Monday (`* 0-12 * * 1`) - Between 10:00 PM and 11:59 PM, Monday through Friday (`* 22-23 * * 1-5`) - Between 12:00 AM and 04:59 AM, Tuesday through Saturday (`* 0-4 * * 2-6`) 🚦 **Automerge**: Enabled. ♻ **Rebasing**: Whenever PR is behind base branch, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] If you want to rebase/retry this PR, check this box --- This PR was generated by [Mend Renovate](https://mend.io/renovate/). View the [repository job log](https://developer.mend.io/github/TryGhost/Ghost). Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- apps/admin/package.json | 2 +- yarn.lock | 13 ++++--------- 2 files changed, 5 insertions(+), 10 deletions(-) diff --git a/apps/admin/package.json b/apps/admin/package.json index 92c863c1eb9..22a3b0779e0 100644 --- a/apps/admin/package.json +++ b/apps/admin/package.json @@ -34,7 +34,7 @@ "eslint-plugin-react-hooks": "5.2.0", "eslint-plugin-react-refresh": "0.4.24", "eslint-plugin-tailwindcss": "4.0.0-beta.0", - "globals": "16.5.0", + "globals": "17.4.0", "jest-extended": "6.0.0", "jsdom": "28.1.0", "sirv": "3.0.2", diff --git a/yarn.lock b/yarn.lock index 086480b9672..462c1cff495 100644 --- a/yarn.lock +++ b/yarn.lock @@ -22148,10 +22148,10 @@ global-prefix@^3.0.0: kind-of "^6.0.2" which "^1.3.1" -globals@16.5.0: - version "16.5.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-16.5.0.tgz#ccf1594a437b97653b2be13ed4d8f5c9f850cac1" - integrity sha512-c/c15i26VrJ4IRt5Z89DnIzCGDn9EcebibhAOjw5ibqEHsE1wLUgkPn9RDmNcUKyU87GeaL633nyJ+pplFR2ZQ== +globals@17.4.0, globals@^17.3.0: + version "17.4.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-17.4.0.tgz#33d7d297ed1536b388a0e2f4bcd0ff19c8ff91b5" + integrity sha512-hjrNztw/VajQwOLsMNT1cbJiH2muO3OROCHnbehc8eY5JyD2gqz4AcMHPqgaOR59DjgUjYAYLeH699g/eWi2jw== globals@^11.1.0: version "11.12.0" @@ -22175,11 +22175,6 @@ globals@^15.11.0: resolved "https://registry.yarnpkg.com/globals/-/globals-15.15.0.tgz#7c4761299d41c32b075715a4ce1ede7897ff72a8" integrity sha512-7ACyT3wmyp3I61S4fG682L0VA2RGD9otkqGJIwNUMF1SWUombIIk+af1unuDYgMm082aHYwD+mzJvv9Iu8dsgg== -globals@^17.3.0: - version "17.3.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-17.3.0.tgz#8b96544c2fa91afada02747cc9731c002a96f3b9" - integrity sha512-yMqGUQVVCkD4tqjOJf3TnrvaaHDMYp4VlUSObbkIiuCPe/ofdMBFIAcBbCSRFWOnos6qRiTVStDwqPLUclaxIw== - globals@^9.18.0: version "9.18.0" resolved "https://registry.yarnpkg.com/globals/-/globals-9.18.0.tgz#aa3896b3e69b487f17e31ed2143d69a8e30c2d8a" From c6f98c7cc15b5104109fce570f10022eda2f79c2 Mon Sep 17 00:00:00 2001 From: Peter Zimon Date: Thu, 9 Apr 2026 17:18:20 +0300 Subject: [PATCH 16/18] Added optional share link in newsletter email templates (#26867) ref https://linear.app/ghost/issue/FEA-480/native-share-buttons-with-link-based-referral-param-for-attribution Adds the newsletter email Share action link (opens the Portal share modal in browser) and related template/tests updates. A follow-up PR will add the ability to toggle this setting on in newsletters from the admin area (defaults to false) https://github.com/TryGhost/Ghost/pull/27237 --------- Co-authored-by: Troy Ciesco --- .../services/email-service/email-renderer.js | 16 +- .../partials/feedback-button.hbs | 8 +- .../email-templates/template.hbs | 11 +- .../email-service/batch-sending.test.js | 40 +++++ .../email-service/email-renderer.test.js | 146 ++++++++++++++++++ ghost/i18n/locales/af/ghost.json | 1 + ghost/i18n/locales/ar/ghost.json | 1 + ghost/i18n/locales/bg/ghost.json | 1 + ghost/i18n/locales/bn/ghost.json | 1 + ghost/i18n/locales/bs/ghost.json | 1 + ghost/i18n/locales/ca/ghost.json | 1 + ghost/i18n/locales/context.json | 2 +- ghost/i18n/locales/cs/ghost.json | 1 + ghost/i18n/locales/da/ghost.json | 1 + ghost/i18n/locales/de-CH/ghost.json | 1 + ghost/i18n/locales/de/ghost.json | 1 + ghost/i18n/locales/el/ghost.json | 1 + ghost/i18n/locales/en/ghost.json | 1 + ghost/i18n/locales/eo/ghost.json | 1 + ghost/i18n/locales/es/ghost.json | 1 + ghost/i18n/locales/et/ghost.json | 1 + ghost/i18n/locales/eu/ghost.json | 1 + ghost/i18n/locales/fa/ghost.json | 1 + ghost/i18n/locales/fi/ghost.json | 1 + ghost/i18n/locales/fr/ghost.json | 1 + ghost/i18n/locales/gd/ghost.json | 1 + ghost/i18n/locales/he/ghost.json | 1 + ghost/i18n/locales/hi/ghost.json | 1 + ghost/i18n/locales/hr/ghost.json | 1 + ghost/i18n/locales/hu/ghost.json | 1 + ghost/i18n/locales/id/ghost.json | 1 + ghost/i18n/locales/is/ghost.json | 1 + ghost/i18n/locales/it/ghost.json | 1 + ghost/i18n/locales/ja/ghost.json | 1 + ghost/i18n/locales/ko/ghost.json | 1 + ghost/i18n/locales/kz/ghost.json | 1 + ghost/i18n/locales/lt/ghost.json | 1 + ghost/i18n/locales/lv/ghost.json | 1 + ghost/i18n/locales/mk/ghost.json | 1 + ghost/i18n/locales/mn/ghost.json | 1 + ghost/i18n/locales/ms/ghost.json | 1 + ghost/i18n/locales/nb/ghost.json | 1 + ghost/i18n/locales/ne/ghost.json | 1 + ghost/i18n/locales/nl/ghost.json | 1 + ghost/i18n/locales/nn/ghost.json | 1 + ghost/i18n/locales/pa/ghost.json | 1 + ghost/i18n/locales/pl/ghost.json | 1 + ghost/i18n/locales/pt-BR/ghost.json | 1 + ghost/i18n/locales/pt/ghost.json | 1 + ghost/i18n/locales/ro/ghost.json | 1 + ghost/i18n/locales/ru/ghost.json | 1 + ghost/i18n/locales/si/ghost.json | 1 + ghost/i18n/locales/sk/ghost.json | 1 + ghost/i18n/locales/sl/ghost.json | 1 + ghost/i18n/locales/sq/ghost.json | 1 + ghost/i18n/locales/sr-Cyrl/ghost.json | 1 + ghost/i18n/locales/sr/ghost.json | 1 + ghost/i18n/locales/sv/ghost.json | 1 + ghost/i18n/locales/sw/ghost.json | 1 + ghost/i18n/locales/ta/ghost.json | 1 + ghost/i18n/locales/th/ghost.json | 1 + ghost/i18n/locales/tr/ghost.json | 1 + ghost/i18n/locales/uk/ghost.json | 1 + ghost/i18n/locales/ur/ghost.json | 1 + ghost/i18n/locales/uz/ghost.json | 1 + ghost/i18n/locales/vi/ghost.json | 1 + ghost/i18n/locales/zh-Hant/ghost.json | 1 + ghost/i18n/locales/zh/ghost.json | 1 + 68 files changed, 274 insertions(+), 11 deletions(-) diff --git a/ghost/core/core/server/services/email-service/email-renderer.js b/ghost/core/core/server/services/email-service/email-renderer.js index 80900185ace..adac5046b42 100644 --- a/ghost/core/core/server/services/email-service/email-renderer.js +++ b/ghost/core/core/server/services/email-service/email-renderer.js @@ -1031,6 +1031,10 @@ class EmailRenderer { } const postUrl = this.#getPostUrl(post); + const isPublicPost = post.get('visibility') === 'public'; + const showShareButton = isPublicPost && newsletter.get('show_share_button'); + const shareUrl = new URL(postUrl); + shareUrl.hash = '/share'; // Signup URL is the post url with a hash added to it const signupUrl = new URL(postUrl); @@ -1054,6 +1058,12 @@ class EmailRenderer { commentUrl.hash = '#ghost-comments-root'; const hasEmailOnlyFlag = post.related('posts_meta')?.get('email_only') ?? false; + const hasFeedbackButtons = newsletter.get('feedback_enabled'); + const showCommentCta = newsletter.get('show_comment_cta') && this.#settingsCache.get('comments_enabled') !== 'off' && !hasEmailOnlyFlag; + const feedbackButtonCount = (hasFeedbackButtons ? 2 : 0) + (showCommentCta ? 1 : 0) + (showShareButton ? 1 : 0); + const feedbackButtonCellWidth = feedbackButtonCount > 0 + ? `${(100 / feedbackButtonCount).toFixed(2).replace(/\.00$/, '')}%` + : null; const latestPosts = []; let latestPostsHasImages = false; @@ -1114,6 +1124,7 @@ class EmailRenderer { post: { title: post.get('title'), url: postUrl, + shareUrl: showShareButton ? shareUrl.href : null, commentUrl: commentUrl.href, authors, publishedAt, @@ -1129,7 +1140,7 @@ class EmailRenderer { name: newsletter.get('name'), showPostTitleSection: newsletter.get('show_post_title_section'), showExcerpt: newsletter.get('show_excerpt'), - showCommentCta: newsletter.get('show_comment_cta') && this.#settingsCache.get('comments_enabled') !== 'off' && !hasEmailOnlyFlag, + showCommentCta, showSubscriptionDetails: newsletter.get('show_subscription_details') }, @@ -1200,10 +1211,11 @@ class EmailRenderer { }, // Audience feedback - feedbackButtons: newsletter.get('feedback_enabled') ? { + feedbackButtons: hasFeedbackButtons ? { likeHref: positiveLink, dislikeHref: negativeLink } : null, + feedbackButtonCellWidth, // Paywall paywall: addPaywall ? { diff --git a/ghost/core/core/server/services/email-service/email-templates/partials/feedback-button.hbs b/ghost/core/core/server/services/email-service/email-templates/partials/feedback-button.hbs index 57efa82c7a2..fdd0eb869b6 100644 --- a/ghost/core/core/server/services/email-service/email-templates/partials/feedback-button.hbs +++ b/ghost/core/core/server/services/email-service/email-templates/partials/feedback-button.hbs @@ -1,7 +1,7 @@ - + - {{buttonText}} + {{buttonText}} - {{!-- Button text possible values: {{t 'More like this'}} {{t 'Less like this'}} {{t 'Comment'}} --}} + {{!-- Button text possible values: {{t 'More like this'}} {{t 'Less like this'}} {{t 'Comment'}} {{t 'Share'}} --}} - \ No newline at end of file + diff --git a/ghost/core/core/server/services/email-service/email-templates/template.hbs b/ghost/core/core/server/services/email-service/email-templates/template.hbs index 1be45c3d5f8..19b23914957 100644 --- a/ghost/core/core/server/services/email-service/email-templates/template.hbs +++ b/ghost/core/core/server/services/email-service/email-templates/template.hbs @@ -19,17 +19,20 @@ - {{#if (or feedbackButtons newsletter.showCommentCta) }} + {{#if (or feedbackButtons newsletter.showCommentCta post.shareUrl) }} {{#if feedbackButtons }} - {{> feedbackButton feedbackButtons href=feedbackButtons.likeHref buttonText='More like this' iconUrl="https://static.ghost.org/v5.0.0/images/more-like-this-mobile.png" width="42" height="42" }} - {{> feedbackButton feedbackButtons href=feedbackButtons.dislikeHref buttonText='Less like this' iconUrl="https://static.ghost.org/v5.0.0/images/less-like-this-mobile.png" width="42" height="42" }} + {{> feedbackButton feedbackButtons href=feedbackButtons.likeHref buttonText='More like this' iconUrl="https://static.ghost.org/v5.0.0/images/more-like-this-mobile.png" width="42" height="42" cellWidth=feedbackButtonCellWidth }} + {{> feedbackButton feedbackButtons href=feedbackButtons.dislikeHref buttonText='Less like this' iconUrl="https://static.ghost.org/v5.0.0/images/less-like-this-mobile.png" width="42" height="42" cellWidth=feedbackButtonCellWidth }} {{/if}} {{#if newsletter.showCommentCta}} - {{> feedbackButton href=post.commentUrl buttonText='Comment' iconUrl="https://static.ghost.org/v5.0.0/images/comment-mobile.png" width="42" height="42"}} + {{> feedbackButton href=post.commentUrl buttonText='Comment' iconUrl="https://static.ghost.org/v5.0.0/images/comment-mobile.png" width="42" height="42" cellWidth=feedbackButtonCellWidth }} + {{/if}} + {{#if post.shareUrl}} + {{> feedbackButton href=post.shareUrl buttonText='Share' iconUrl="https://static.ghost.org/v6.0.0/images/share-mobile.png" width="42" height="42" cellWidth=feedbackButtonCellWidth}} {{/if}} diff --git a/ghost/core/test/integration/services/email-service/batch-sending.test.js b/ghost/core/test/integration/services/email-service/batch-sending.test.js index 59b5dbeb951..50e05603a7b 100644 --- a/ghost/core/test/integration/services/email-service/batch-sending.test.js +++ b/ghost/core/test/integration/services/email-service/batch-sending.test.js @@ -899,6 +899,46 @@ describe.skip('Batch sending tests', function () { await models.Newsletter.edit({show_comment_cta: true}, {id: defaultNewsletter.id}); }); + it('Shows share button when enabled in newsletter for public posts', async function () { + mockSetting('email_track_clicks', false); // Disable link replacement for this test + + const defaultNewsletter = await getDefaultNewsletter(); + const originalShowShareButton = defaultNewsletter.get('show_share_button'); + await models.Newsletter.edit({show_share_button: true}, {id: defaultNewsletter.id}); + + try { + const {html} = await sendEmail(agent, { + title: 'This is a test post title', + mobiledoc: mobileDocExample, + visibility: 'public' + }); + + assert.match(html, /#\/share/); + } finally { + await models.Newsletter.edit({show_share_button: originalShowShareButton}, {id: defaultNewsletter.id}); + } + }); + + it('Hides share button when disabled in newsletter', async function () { + mockSetting('email_track_clicks', false); // Disable link replacement for this test + + const defaultNewsletter = await getDefaultNewsletter(); + const originalShowShareButton = defaultNewsletter.get('show_share_button'); + await models.Newsletter.edit({show_share_button: false}, {id: defaultNewsletter.id}); + + try { + const {html} = await sendEmail(agent, { + title: 'This is a test post title', + mobiledoc: mobileDocExample, + visibility: 'public' + }); + + assert.doesNotMatch(html, /#\/share/); + } finally { + await models.Newsletter.edit({show_share_button: originalShowShareButton}, {id: defaultNewsletter.id}); + } + }); + it('Shows subscription details box for free members', async function () { // Create a new member without a first_name await models.Member.add({ diff --git a/ghost/core/test/unit/server/services/email-service/email-renderer.test.js b/ghost/core/test/unit/server/services/email-service/email-renderer.test.js index 4662335eb79..abf4397bd31 100644 --- a/ghost/core/test/unit/server/services/email-service/email-renderer.test.js +++ b/ghost/core/test/unit/server/services/email-service/email-renderer.test.js @@ -1265,6 +1265,7 @@ describe('Email renderer', function () { name: 'Test Newsletter', show_badge: false, feedback_enabled: true, + show_share_button: true, show_post_title_section: true }; postUrl = 'http://example.com'; @@ -1359,6 +1360,7 @@ describe('Email renderer', function () { name: 'Test Newsletter', show_badge: false, feedback_enabled: true, + show_share_button: true, show_post_title_section: true }); const segment = null; @@ -1379,6 +1381,7 @@ describe('Email renderer', function () { name: 'Test Newsletter', show_badge: false, feedback_enabled: true, + show_share_button: true, show_post_title_section: true }); const segment = null; @@ -1418,6 +1421,79 @@ describe('Email renderer', function () { assert(response.html.includes('http://feedback-link.com/?score=0')); }); + it('includes share links for public posts', async function () { + const post = createModel(basePost); + const newsletter = createModel({ + header_image: null, + name: 'Test Newsletter', + show_badge: false, + feedback_enabled: true, + show_share_button: true, + show_post_title_section: true + }); + const segment = null; + const options = {}; + + const response = await emailRenderer.renderBody( + post, + newsletter, + segment, + options + ); + + assert(response.html.includes('href="http://example.com/#/share"')); + assert(response.html.includes('>Share

')); + }); + + it('does not include share links for non-public posts', async function () { + const post = createModel({ + ...basePost, + visibility: 'members' + }); + const newsletter = createModel({ + header_image: null, + name: 'Test Newsletter', + show_badge: false, + feedback_enabled: true, + show_share_button: true, + show_post_title_section: true + }); + const segment = null; + const options = {}; + + const response = await emailRenderer.renderBody( + post, + newsletter, + segment, + options + ); + + assert(!response.html.includes('#/share')); + }); + + it('does not include share links when disabled in newsletter settings', async function () { + const post = createModel(basePost); + const newsletter = createModel({ + header_image: null, + name: 'Test Newsletter', + show_badge: false, + feedback_enabled: true, + show_share_button: false, + show_post_title_section: true + }); + const segment = null; + const options = {}; + + const response = await emailRenderer.renderBody( + post, + newsletter, + segment, + options + ); + + assert(!response.html.includes('#/share')); + }); + it('uses custom excerpt as preheader', async function () { const post = createModel({...basePost, custom_excerpt: 'Custom excerpt'}); const newsletter = createModel({ @@ -1699,6 +1775,7 @@ describe('Email renderer', function () { name: 'Test Newsletter', show_badge: true, feedback_enabled: true, + show_share_button: true, show_post_title_section: true }); const segment = null; @@ -1748,6 +1825,7 @@ describe('Email renderer', function () { '#', `http://feedback-link.com/?score=1&uuid=%%{uuid}%%&key=%%{key}%%`, `http://feedback-link.com/?score=0&uuid=%%{uuid}%%&key=%%{key}%%`, + `http://tracked-link.com/?m=%%{uuid}%%&url=http%3A%2F%2Fexample.com%2F%3Fsource_tracking%3DTest%2BNewsletter%26post_tracking%3Dadded%23%2Fshare`, `%%{unsubscribe_url}%%`, `https://ghost.org/?via=pbg-newsletter&source_tracking=site` ]); @@ -1770,6 +1848,7 @@ describe('Email renderer', function () { name: 'Test Newsletter', show_badge: true, feedback_enabled: true, + show_share_button: true, show_post_title_section: true }); const segment = null; @@ -1803,6 +1882,7 @@ describe('Email renderer', function () { '#', 'http://feedback-link.com/?score=1&uuid=%%{uuid}%%&key=%%{key}%%', 'http://feedback-link.com/?score=0&uuid=%%{uuid}%%&key=%%{key}%%', + 'http://example.com/#/share', '%%{unsubscribe_url}%%', 'https://ghost.org/?via=pbg-newsletter' ]); @@ -1815,6 +1895,7 @@ describe('Email renderer', function () { name: 'Test Newsletter', show_badge: true, feedback_enabled: true, + show_share_button: true, show_post_title_section: true }); const segment = null; @@ -1858,6 +1939,7 @@ describe('Email renderer', function () { `http://tracked-link.com/?m=%%{uuid}%%&url=https%3A%2F%2Fexample.com%2F%3Fref%3D123%26source_tracking%3DTest%2BNewsletter%26post_tracking%3Dadded`, `http://feedback-link.com/?score=1&uuid=%%{uuid}%%&key=%%{key}%%`, `http://feedback-link.com/?score=0&uuid=%%{uuid}%%&key=%%{key}%%`, + `http://tracked-link.com/?m=%%{uuid}%%&url=http%3A%2F%2Fexample.com%2F%3Fsource_tracking%3DTest%2BNewsletter%26post_tracking%3Dadded%23%2Fshare`, `%%{unsubscribe_url}%%`, `https://ghost.org/?via=pbg-newsletter&source_tracking=site` ]); @@ -2485,6 +2567,70 @@ describe('Email renderer', function () { assert.equal(data.post.publishedAt, '1 Jan 1970'); }); + it('includes share URL for public posts', async function () { + const html = ''; + const post = createModel({ + posts_meta: createModel({}), + loaded: ['posts_meta'], + visibility: 'public' + }); + const newsletter = createModel({ + show_share_button: true + }); + const data = await emailRenderer.getTemplateData({post, newsletter, html, addPaywall: false}); + assert.equal(data.post.shareUrl, 'http://example.com/#/share'); + }); + + it('calculates footer feedback button widths based on visible actions', async function () { + settings.comments_enabled = 'all'; + const html = ''; + const post = createModel({ + posts_meta: createModel({}), + loaded: ['posts_meta'], + visibility: 'public' + }); + const newsletter = createModel({ + feedback_enabled: true, + show_comment_cta: true, + show_share_button: true + }); + + const data = await emailRenderer.getTemplateData({post, newsletter, html, addPaywall: false}); + assert.equal(data.feedbackButtonCellWidth, '25%'); + }); + + it('does not include share URL when the newsletter share button is disabled', async function () { + const html = ''; + const post = createModel({ + posts_meta: createModel({}), + loaded: ['posts_meta'], + visibility: 'public' + }); + const newsletter = createModel({ + show_share_button: false + }); + + const data = await emailRenderer.getTemplateData({post, newsletter, html, addPaywall: false}); + assert.equal(data.post.shareUrl, null); + }); + + it('does not include share URL for non-public posts', async function () { + const html = ''; + const newsletter = createModel({ + show_share_button: true + }); + + for (const visibility of ['members', 'paid', 'tiers']) { + const post = createModel({ + posts_meta: createModel({}), + loaded: ['posts_meta'], + visibility + }); + const data = await emailRenderer.getTemplateData({post, newsletter, html, addPaywall: false}); + assert.equal(data.post.shareUrl, null, `Expected no share URL for "${visibility}" visibility`); + } + }); + it('show feature image if post has feature image', async function () { const html = ''; const post = createModel({ diff --git a/ghost/i18n/locales/af/ghost.json b/ghost/i18n/locales/af/ghost.json index 08008867a3d..cd5577ca69c 100644 --- a/ghost/i18n/locales/af/ghost.json +++ b/ghost/i18n/locales/af/ghost.json @@ -39,6 +39,7 @@ "Secure sign in link for {siteTitle}": "Veilige aanmeldskakel vir {siteTitle}", "See you soon!": "Sien u binnekort weer!", "Sent to {email}": "Gestuur na {email}", + "Share": "", "Sign in": "Meld aan", "Sign in now": "", "Sign in to {siteTitle}": "Meld aan by {siteTitle}", diff --git a/ghost/i18n/locales/ar/ghost.json b/ghost/i18n/locales/ar/ghost.json index 71fee3feae7..62c71b716f2 100644 --- a/ghost/i18n/locales/ar/ghost.json +++ b/ghost/i18n/locales/ar/ghost.json @@ -39,6 +39,7 @@ "Secure sign in link for {siteTitle}": "رابط تسجيل الدخول الامن الى {siteTitle}", "See you soon!": "نراكم قريبا!", "Sent to {email}": "تم الارسال الى {email}", + "Share": "", "Sign in": "تسجيل الدخول", "Sign in now": "", "Sign in to {siteTitle}": "تسجيل الدخول الى {siteTitle}", diff --git a/ghost/i18n/locales/bg/ghost.json b/ghost/i18n/locales/bg/ghost.json index 0d56f8cf8b6..c7115b1c334 100644 --- a/ghost/i18n/locales/bg/ghost.json +++ b/ghost/i18n/locales/bg/ghost.json @@ -39,6 +39,7 @@ "Secure sign in link for {siteTitle}": "Линк за сигурно влизане в сайта {siteTitle}", "See you soon!": "До скоро!", "Sent to {email}": "Изпратено до {email}", + "Share": "", "Sign in": "Вход", "Sign in now": "Влезте сега", "Sign in to {siteTitle}": "Влезте в {siteTitle}", diff --git a/ghost/i18n/locales/bn/ghost.json b/ghost/i18n/locales/bn/ghost.json index d13b3919897..6c96c625698 100644 --- a/ghost/i18n/locales/bn/ghost.json +++ b/ghost/i18n/locales/bn/ghost.json @@ -39,6 +39,7 @@ "Secure sign in link for {siteTitle}": "{siteTitle} এর জন্য নিরাপদ সাইন ইন লিঙ্ক", "See you soon!": "শীঘ্রই দেখা হবে!", "Sent to {email}": "{email} এ পাঠানো হয়েছে", + "Share": "", "Sign in": "সাইন ইন করুন", "Sign in now": "", "Sign in to {siteTitle}": "{siteTitle} এ সাইন ইন করুন", diff --git a/ghost/i18n/locales/bs/ghost.json b/ghost/i18n/locales/bs/ghost.json index e5da83ce941..4e1c4687f81 100644 --- a/ghost/i18n/locales/bs/ghost.json +++ b/ghost/i18n/locales/bs/ghost.json @@ -39,6 +39,7 @@ "Secure sign in link for {siteTitle}": "Siguran link za prijavu za {siteTitle}", "See you soon!": "Vidimo se uskoro!", "Sent to {email}": "Poslano na {email}", + "Share": "", "Sign in": "Prijavi se", "Sign in now": "", "Sign in to {siteTitle}": "Prijavi se na {siteTitle}", diff --git a/ghost/i18n/locales/ca/ghost.json b/ghost/i18n/locales/ca/ghost.json index d54e32e0106..1ee63a50e28 100644 --- a/ghost/i18n/locales/ca/ghost.json +++ b/ghost/i18n/locales/ca/ghost.json @@ -39,6 +39,7 @@ "Secure sign in link for {siteTitle}": "Enllaç segur d'inici de sessió per {siteTitle}", "See you soon!": "A reveure!", "Sent to {email}": "Enviat a {email}", + "Share": "", "Sign in": "Inicia sessió", "Sign in now": "", "Sign in to {siteTitle}": "Inicia sessió a {siteTitle}", diff --git a/ghost/i18n/locales/context.json b/ghost/i18n/locales/context.json index a4d9f40f2b7..777ff61eb16 100644 --- a/ghost/i18n/locales/context.json +++ b/ghost/i18n/locales/context.json @@ -245,7 +245,7 @@ "Sending...": "A loading status message when an email is being sent", "Sent": "Button text when a comment was reported succesfully", "Sent to {email}": "Magic link email footer", - "Share": "Title of Portal share modal for sharing a post", + "Share": "Title of Portal share modal for sharing a post, and label for the newsletter email footer Share button text passed as buttonText to the feedbackButton partial", "Show": "Context menu action for a comment, for administrators - smaller devices", "Show 1 more reply": "Button text to load the last remaining reply for a comment", "Show all": "Show all recommendations", diff --git a/ghost/i18n/locales/cs/ghost.json b/ghost/i18n/locales/cs/ghost.json index 6ceea7e3edb..e62ae78221d 100644 --- a/ghost/i18n/locales/cs/ghost.json +++ b/ghost/i18n/locales/cs/ghost.json @@ -39,6 +39,7 @@ "Secure sign in link for {siteTitle}": "Bezpečný přihlašovací odkaz pro {siteTitle}", "See you soon!": "Na viděnou!", "Sent to {email}": "Odesláno na {email}", + "Share": "", "Sign in": "Přihlásit se", "Sign in now": "", "Sign in to {siteTitle}": "Přihlásit se k {siteTitle}", diff --git a/ghost/i18n/locales/da/ghost.json b/ghost/i18n/locales/da/ghost.json index 00ab9881ad7..763085e2092 100644 --- a/ghost/i18n/locales/da/ghost.json +++ b/ghost/i18n/locales/da/ghost.json @@ -39,6 +39,7 @@ "Secure sign in link for {siteTitle}": "Sikker log ind link til {siteTitle}", "See you soon!": "Vi ses om lidt!", "Sent to {email}": "Sendt til {email}", + "Share": "", "Sign in": "Log ind", "Sign in now": "", "Sign in to {siteTitle}": "Log ind hos {siteTitle}", diff --git a/ghost/i18n/locales/de-CH/ghost.json b/ghost/i18n/locales/de-CH/ghost.json index 2da0bd8948c..dd1a2529aa3 100644 --- a/ghost/i18n/locales/de-CH/ghost.json +++ b/ghost/i18n/locales/de-CH/ghost.json @@ -39,6 +39,7 @@ "Secure sign in link for {siteTitle}": "Sicherer Anmeldelink für unsere Seite «{siteTitle}»", "See you soon!": "Bis bald!", "Sent to {email}": "Gesendet an {email}", + "Share": "", "Sign in": "Einloggen", "Sign in now": "Jetzt einloggen", "Sign in to {siteTitle}": "Bei «{siteTitle}» einloggen", diff --git a/ghost/i18n/locales/de/ghost.json b/ghost/i18n/locales/de/ghost.json index 511b1316f8d..fd7a450854d 100644 --- a/ghost/i18n/locales/de/ghost.json +++ b/ghost/i18n/locales/de/ghost.json @@ -39,6 +39,7 @@ "Secure sign in link for {siteTitle}": "Sicherer Anmeldelink für {siteTitle}", "See you soon!": "Bis bald!", "Sent to {email}": "Gesendet an {email}", + "Share": "", "Sign in": "Einloggen", "Sign in now": "Jetzt einloggen", "Sign in to {siteTitle}": "Bei {siteTitle} einloggen", diff --git a/ghost/i18n/locales/el/ghost.json b/ghost/i18n/locales/el/ghost.json index 304fef490e7..73b43fabde9 100644 --- a/ghost/i18n/locales/el/ghost.json +++ b/ghost/i18n/locales/el/ghost.json @@ -39,6 +39,7 @@ "Secure sign in link for {siteTitle}": "Ασφαλής σύνδεσμος σύνδεσης για το {siteTitle}", "See you soon!": "Τα λέμε σύντομα!", "Sent to {email}": "Απεστάλη στο {email}", + "Share": "", "Sign in": "Σύνδεση", "Sign in now": "", "Sign in to {siteTitle}": "Συνδεθείτε στο {siteTitle}", diff --git a/ghost/i18n/locales/en/ghost.json b/ghost/i18n/locales/en/ghost.json index ca41a4bce9b..9c1cbc8560a 100644 --- a/ghost/i18n/locales/en/ghost.json +++ b/ghost/i18n/locales/en/ghost.json @@ -39,6 +39,7 @@ "Secure sign in link for {siteTitle}": "", "See you soon!": "", "Sent to {email}": "", + "Share": "", "Sign in": "", "Sign in now": "", "Sign in to {siteTitle}": "", diff --git a/ghost/i18n/locales/eo/ghost.json b/ghost/i18n/locales/eo/ghost.json index 98c265f9b50..3654469d82c 100644 --- a/ghost/i18n/locales/eo/ghost.json +++ b/ghost/i18n/locales/eo/ghost.json @@ -39,6 +39,7 @@ "Secure sign in link for {siteTitle}": "Sekura ensaluta ligilo por {siteTitle}", "See you soon!": "Ĝis baldaŭ!", "Sent to {email}": "Sendita al {email}", + "Share": "", "Sign in": "", "Sign in now": "", "Sign in to {siteTitle}": "Ensalutu al {siteTitle}", diff --git a/ghost/i18n/locales/es/ghost.json b/ghost/i18n/locales/es/ghost.json index 75f4027cc47..4226b52311d 100644 --- a/ghost/i18n/locales/es/ghost.json +++ b/ghost/i18n/locales/es/ghost.json @@ -39,6 +39,7 @@ "Secure sign in link for {siteTitle}": "Inicio de sesión seguro para {siteTitle}", "See you soon!": "¡Hasta pronto!", "Sent to {email}": "Enviado a {email}", + "Share": "", "Sign in": "Iniciar sesión", "Sign in now": "", "Sign in to {siteTitle}": "Iniciar sesión en {siteTitle}", diff --git a/ghost/i18n/locales/et/ghost.json b/ghost/i18n/locales/et/ghost.json index a5a3e68f1e6..acde5ab04e2 100644 --- a/ghost/i18n/locales/et/ghost.json +++ b/ghost/i18n/locales/et/ghost.json @@ -39,6 +39,7 @@ "Secure sign in link for {siteTitle}": "Turvaline sisselogimislink {siteTitle} lehele", "See you soon!": "Kohtumiseni!", "Sent to {email}": "Saadetud aadressile {email}", + "Share": "", "Sign in": "Logi sisse", "Sign in now": "", "Sign in to {siteTitle}": "Logi sisse {siteTitle} lehele", diff --git a/ghost/i18n/locales/eu/ghost.json b/ghost/i18n/locales/eu/ghost.json index 09f9562c8b0..3b115c550ef 100644 --- a/ghost/i18n/locales/eu/ghost.json +++ b/ghost/i18n/locales/eu/ghost.json @@ -39,6 +39,7 @@ "Secure sign in link for {siteTitle}": "{siteTitle}(e)n saioa hasteko esteka segurua", "See you soon!": "Laster arte!", "Sent to {email}": "{email}(r)i bidali zaio", + "Share": "", "Sign in": "Hasi saioa", "Sign in now": "", "Sign in to {siteTitle}": "Hasi saioa {siteTitle}(e)n", diff --git a/ghost/i18n/locales/fa/ghost.json b/ghost/i18n/locales/fa/ghost.json index 542f051bb6c..2fe27863434 100644 --- a/ghost/i18n/locales/fa/ghost.json +++ b/ghost/i18n/locales/fa/ghost.json @@ -39,6 +39,7 @@ "Secure sign in link for {siteTitle}": "پیوند امن ورود به وب\u200cسایت {siteTitle}", "See you soon!": "به زودی می\u200cبینمت!", "Sent to {email}": "ارسال شده به {email} ", + "Share": "", "Sign in": "ورود", "Sign in now": "", "Sign in to {siteTitle}": "ورود به وب\u200cسایت {siteTitle}", diff --git a/ghost/i18n/locales/fi/ghost.json b/ghost/i18n/locales/fi/ghost.json index 7f3c30ff513..9b592f5082c 100644 --- a/ghost/i18n/locales/fi/ghost.json +++ b/ghost/i18n/locales/fi/ghost.json @@ -39,6 +39,7 @@ "Secure sign in link for {siteTitle}": "Turvallinen kirjautumislinkki sivustolle {siteTitle}", "See you soon!": "Nähdään pian!", "Sent to {email}": "Lähetetty {email}", + "Share": "", "Sign in": "Kirjaudu sisään", "Sign in now": "Kirjaudu nyt sisään", "Sign in to {siteTitle}": "Kirjaudu sisään sivulle {siteTitle}", diff --git a/ghost/i18n/locales/fr/ghost.json b/ghost/i18n/locales/fr/ghost.json index 1136c12832e..6da26d8cf10 100644 --- a/ghost/i18n/locales/fr/ghost.json +++ b/ghost/i18n/locales/fr/ghost.json @@ -39,6 +39,7 @@ "Secure sign in link for {siteTitle}": "Lien sécurisé de connexion pour {siteTitle}", "See you soon!": "À bientôt !", "Sent to {email}": "Envoyé à {email}", + "Share": "", "Sign in": "Se connecter", "Sign in now": "Connectez-vous", "Sign in to {siteTitle}": "Se connecter à {siteTitle}", diff --git a/ghost/i18n/locales/gd/ghost.json b/ghost/i18n/locales/gd/ghost.json index 0d1c336e7eb..63fef0c84ee 100644 --- a/ghost/i18n/locales/gd/ghost.json +++ b/ghost/i18n/locales/gd/ghost.json @@ -39,6 +39,7 @@ "Secure sign in link for {siteTitle}": "Ceangal tèarainte airson clàradh a-steach ris an làrach-lìn, {siteTitle}", "See you soon!": "Tìoraidh an-dràsta!", "Sent to {email}": "Cuir gu {email}", + "Share": "", "Sign in": "Clàraich a-steach", "Sign in now": "", "Sign in to {siteTitle}": "Clàraich a-steach dhan làrach-lìn, {siteTitle}", diff --git a/ghost/i18n/locales/he/ghost.json b/ghost/i18n/locales/he/ghost.json index a7966163c7b..1b821b67a0a 100644 --- a/ghost/i18n/locales/he/ghost.json +++ b/ghost/i18n/locales/he/ghost.json @@ -39,6 +39,7 @@ "Secure sign in link for {siteTitle}": "לינק הרשמה מאובטח ל{siteTitle}", "See you soon!": "להתראות בקרוב!", "Sent to {email}": "נשלח אל {email}", + "Share": "", "Sign in": "כניסה", "Sign in now": "", "Sign in to {siteTitle}": "כנסו אל {siteTitle}", diff --git a/ghost/i18n/locales/hi/ghost.json b/ghost/i18n/locales/hi/ghost.json index f941eb4e55c..4554dd4d729 100644 --- a/ghost/i18n/locales/hi/ghost.json +++ b/ghost/i18n/locales/hi/ghost.json @@ -39,6 +39,7 @@ "Secure sign in link for {siteTitle}": "{siteTitle} के लिए सुरक्षित साइन इन लिंक", "See you soon!": "जल्द ही मिलते हैं!", "Sent to {email}": "{email} पर भेजा गया", + "Share": "", "Sign in": "साइन इन करें", "Sign in now": "", "Sign in to {siteTitle}": "{siteTitle} में साइन इन करें", diff --git a/ghost/i18n/locales/hr/ghost.json b/ghost/i18n/locales/hr/ghost.json index c03ddeaed52..e9d5eb7e85f 100644 --- a/ghost/i18n/locales/hr/ghost.json +++ b/ghost/i18n/locales/hr/ghost.json @@ -39,6 +39,7 @@ "Secure sign in link for {siteTitle}": "Sigurni link za prijavu na {siteTitle}", "See you soon!": "Vidimo se uskoro!", "Sent to {email}": "Poslano na {email}", + "Share": "", "Sign in": "Prijava", "Sign in now": "", "Sign in to {siteTitle}": "Prijava na {siteTitle}", diff --git a/ghost/i18n/locales/hu/ghost.json b/ghost/i18n/locales/hu/ghost.json index 0957097182e..0419a08d69b 100644 --- a/ghost/i18n/locales/hu/ghost.json +++ b/ghost/i18n/locales/hu/ghost.json @@ -39,6 +39,7 @@ "Secure sign in link for {siteTitle}": "{siteTitle} — Biztonságos bejelentkezési link", "See you soon!": "Üdv!", "Sent to {email}": "Elküldve ide: {email}", + "Share": "", "Sign in": "Bejelentkezés", "Sign in now": "", "Sign in to {siteTitle}": "Bejelentkezem ide: {siteTitle}", diff --git a/ghost/i18n/locales/id/ghost.json b/ghost/i18n/locales/id/ghost.json index 2ee7841b065..7742a59d45c 100644 --- a/ghost/i18n/locales/id/ghost.json +++ b/ghost/i18n/locales/id/ghost.json @@ -39,6 +39,7 @@ "Secure sign in link for {siteTitle}": "Tautan masuk yang aman untuk {siteTitle}", "See you soon!": "Sampai jumpa lagi!", "Sent to {email}": "Dikirim ke {email}", + "Share": "", "Sign in": "Masuk", "Sign in now": "", "Sign in to {siteTitle}": "Masuk ke {siteTitle}", diff --git a/ghost/i18n/locales/is/ghost.json b/ghost/i18n/locales/is/ghost.json index df0090d3a53..73f1225f54c 100644 --- a/ghost/i18n/locales/is/ghost.json +++ b/ghost/i18n/locales/is/ghost.json @@ -39,6 +39,7 @@ "Secure sign in link for {siteTitle}": "Innskráningarhlekkur fyrir {siteTitle}", "See you soon!": "Sjáumst von bráðar!", "Sent to {email}": "Senda til {email}", + "Share": "", "Sign in": "Innskráning", "Sign in now": "", "Sign in to {siteTitle}": "Innskráning á {siteTitle}", diff --git a/ghost/i18n/locales/it/ghost.json b/ghost/i18n/locales/it/ghost.json index f932c6317d1..b4d1e395f96 100644 --- a/ghost/i18n/locales/it/ghost.json +++ b/ghost/i18n/locales/it/ghost.json @@ -39,6 +39,7 @@ "Secure sign in link for {siteTitle}": "Link per l'accesso sicuro a {siteTitle}", "See you soon!": "A presto!", "Sent to {email}": "Inviata a {email}", + "Share": "", "Sign in": "Accedi", "Sign in now": "Accedi ora", "Sign in to {siteTitle}": "Accedi a {siteTitle}", diff --git a/ghost/i18n/locales/ja/ghost.json b/ghost/i18n/locales/ja/ghost.json index 3e7f7d7b4de..4e02194134a 100644 --- a/ghost/i18n/locales/ja/ghost.json +++ b/ghost/i18n/locales/ja/ghost.json @@ -39,6 +39,7 @@ "Secure sign in link for {siteTitle}": "{siteTitle}へのログインリンクです", "See you soon!": "引き続きよろしくお願いします。", "Sent to {email}": "{email}に送信", + "Share": "", "Sign in": "ログイン", "Sign in now": "", "Sign in to {siteTitle}": "{siteTitle}にログイン", diff --git a/ghost/i18n/locales/ko/ghost.json b/ghost/i18n/locales/ko/ghost.json index 87cdfdc2153..39d7667112e 100644 --- a/ghost/i18n/locales/ko/ghost.json +++ b/ghost/i18n/locales/ko/ghost.json @@ -39,6 +39,7 @@ "Secure sign in link for {siteTitle}": "{siteTitle}의 안전한 로그인 링크예요.", "See you soon!": "곧 다시 만나요!", "Sent to {email}": "{email}으로 전송되었어요.", + "Share": "", "Sign in": "로그인", "Sign in now": "", "Sign in to {siteTitle}": "{siteTitle}에 로그인 해주세요.", diff --git a/ghost/i18n/locales/kz/ghost.json b/ghost/i18n/locales/kz/ghost.json index f693d841075..17aff2e9330 100644 --- a/ghost/i18n/locales/kz/ghost.json +++ b/ghost/i18n/locales/kz/ghost.json @@ -39,6 +39,7 @@ "Secure sign in link for {siteTitle}": "{siteTitle} сайтына қауіпсіз кіруге арналған сілтеме", "See you soon!": "Көріскенше!", "Sent to {email}": "{email} поштасына жіберілді", + "Share": "", "Sign in": "Кіру", "Sign in now": "", "Sign in to {siteTitle}": "{siteTitle} сайтына кіру", diff --git a/ghost/i18n/locales/lt/ghost.json b/ghost/i18n/locales/lt/ghost.json index b0e0fff402a..3eef0004d2d 100644 --- a/ghost/i18n/locales/lt/ghost.json +++ b/ghost/i18n/locales/lt/ghost.json @@ -39,6 +39,7 @@ "Secure sign in link for {siteTitle}": "Saugi prisijungimo nuoroda į {siteTitle}", "See you soon!": "Iki pasimatymo!", "Sent to {email}": "Išsiųsta į {email}", + "Share": "", "Sign in": "Prisijungti", "Sign in now": "", "Sign in to {siteTitle}": "Prisijungti prie {siteTitle}", diff --git a/ghost/i18n/locales/lv/ghost.json b/ghost/i18n/locales/lv/ghost.json index 586c9d27dc7..f23d771f810 100644 --- a/ghost/i18n/locales/lv/ghost.json +++ b/ghost/i18n/locales/lv/ghost.json @@ -39,6 +39,7 @@ "Secure sign in link for {siteTitle}": "Droša pierakstīšanās saite vietnei {siteTitle}", "See you soon!": "Uz drīzu tikšanos!", "Sent to {email}": "Nosūtīts uz {email}", + "Share": "", "Sign in": "Pierakstīties", "Sign in now": "", "Sign in to {siteTitle}": "Pierakstieties vietnē {siteTitle}", diff --git a/ghost/i18n/locales/mk/ghost.json b/ghost/i18n/locales/mk/ghost.json index 2465a2f7b33..bb53fb9ce08 100644 --- a/ghost/i18n/locales/mk/ghost.json +++ b/ghost/i18n/locales/mk/ghost.json @@ -39,6 +39,7 @@ "Secure sign in link for {siteTitle}": "Безбеден линк за најава на {siteTitle}", "See you soon!": "Ќе се видиме наскоро!", "Sent to {email}": "Испратете на {email}", + "Share": "", "Sign in": "Најава", "Sign in now": "", "Sign in to {siteTitle}": "Најавете се на {siteTitle}", diff --git a/ghost/i18n/locales/mn/ghost.json b/ghost/i18n/locales/mn/ghost.json index 8035f5c3ff2..5722ba5b137 100644 --- a/ghost/i18n/locales/mn/ghost.json +++ b/ghost/i18n/locales/mn/ghost.json @@ -39,6 +39,7 @@ "Secure sign in link for {siteTitle}": "{siteTitle}-д нэвтрэх нууцлал бүхий холбоос", "See you soon!": "Удахгүй уулзацгаая!", "Sent to {email}": "{email} хаяг руу илгээлээ", + "Share": "", "Sign in": "Нэвтрэх", "Sign in now": "", "Sign in to {siteTitle}": "{siteTitle}-д нэвтрэх", diff --git a/ghost/i18n/locales/ms/ghost.json b/ghost/i18n/locales/ms/ghost.json index 08f081c1edc..48959c87012 100644 --- a/ghost/i18n/locales/ms/ghost.json +++ b/ghost/i18n/locales/ms/ghost.json @@ -39,6 +39,7 @@ "Secure sign in link for {siteTitle}": "Pautan log masuk untuk {siteTitle}", "See you soon!": "Jumpa lagi!", "Sent to {email}": "Dihantar ke {email}", + "Share": "", "Sign in": "Log masuk", "Sign in now": "", "Sign in to {siteTitle}": "Log masuk ke {siteTitle}", diff --git a/ghost/i18n/locales/nb/ghost.json b/ghost/i18n/locales/nb/ghost.json index bf508e623ef..cf110d2ae0e 100644 --- a/ghost/i18n/locales/nb/ghost.json +++ b/ghost/i18n/locales/nb/ghost.json @@ -39,6 +39,7 @@ "Secure sign in link for {siteTitle}": "Sikker påloggingslenke for {siteTitle}", "See you soon!": "Ser deg snart!", "Sent to {email}": "Sendt til {email}", + "Share": "", "Sign in": "Logg inn", "Sign in now": "", "Sign in to {siteTitle}": "Logg inn på {siteTitle}", diff --git a/ghost/i18n/locales/ne/ghost.json b/ghost/i18n/locales/ne/ghost.json index 011137cde72..dcae99d97d2 100644 --- a/ghost/i18n/locales/ne/ghost.json +++ b/ghost/i18n/locales/ne/ghost.json @@ -39,6 +39,7 @@ "Secure sign in link for {siteTitle}": "{siteTitle} को लागि सुरक्षित साइन इन लिङ्क", "See you soon!": "चाँडै भेटौँला!", "Sent to {email}": "{email} मा पठाइयो", + "Share": "", "Sign in": "साइन इन", "Sign in now": "", "Sign in to {siteTitle}": "{siteTitle} मा साइन इन गर्नुहोस्", diff --git a/ghost/i18n/locales/nl/ghost.json b/ghost/i18n/locales/nl/ghost.json index 8cb154973a7..ff4ba88c8cb 100644 --- a/ghost/i18n/locales/nl/ghost.json +++ b/ghost/i18n/locales/nl/ghost.json @@ -39,6 +39,7 @@ "Secure sign in link for {siteTitle}": "Veilige inloglink voor {siteTitle}", "See you soon!": "Tot snel!", "Sent to {email}": "Verzonden naar {email}", + "Share": "", "Sign in": "Inloggen", "Sign in now": "", "Sign in to {siteTitle}": "Inloggen op {siteTitle}", diff --git a/ghost/i18n/locales/nn/ghost.json b/ghost/i18n/locales/nn/ghost.json index 42b943e4e09..529aed8aeba 100644 --- a/ghost/i18n/locales/nn/ghost.json +++ b/ghost/i18n/locales/nn/ghost.json @@ -39,6 +39,7 @@ "Secure sign in link for {siteTitle}": "Trygg innlogginslenke for {siteTitle}", "See you soon!": "På gjensyn!", "Sent to {email}": "Sendt til {email}", + "Share": "", "Sign in": "Logg inn", "Sign in now": "", "Sign in to {siteTitle}": "Logg inn på {siteTitle}", diff --git a/ghost/i18n/locales/pa/ghost.json b/ghost/i18n/locales/pa/ghost.json index b07dd58b915..cf05181d705 100644 --- a/ghost/i18n/locales/pa/ghost.json +++ b/ghost/i18n/locales/pa/ghost.json @@ -39,6 +39,7 @@ "Secure sign in link for {siteTitle}": "{siteTitle} ਲਈ ਸੁਰੱਖਿਅਤ ਸਾਈਨ-ਇਨ ਲਿੰਕ", "See you soon!": "ਜਲਦੀ ਮਿਲਦੇ ਹਾਂ!", "Sent to {email}": "{email} ਨੂੰ ਭੇਜਿਆ ਗਿਆ", + "Share": "", "Sign in": "ਸਾਈਨ ਇਨ ਕਰੋ", "Sign in now": "", "Sign in to {siteTitle}": "{siteTitle} 'ਤੇ ਸਾਈਨ ਇਨ ਕਰੋ", diff --git a/ghost/i18n/locales/pl/ghost.json b/ghost/i18n/locales/pl/ghost.json index b6a1eba7e99..b31fa899b65 100644 --- a/ghost/i18n/locales/pl/ghost.json +++ b/ghost/i18n/locales/pl/ghost.json @@ -39,6 +39,7 @@ "Secure sign in link for {siteTitle}": "Bezpieczny link logowania do {siteTitle}", "See you soon!": "Do zobaczenia!", "Sent to {email}": "Wysłano do {email}", + "Share": "", "Sign in": "Zaloguj się", "Sign in now": "", "Sign in to {siteTitle}": "Zaloguj się do {siteTitle}", diff --git a/ghost/i18n/locales/pt-BR/ghost.json b/ghost/i18n/locales/pt-BR/ghost.json index 1b5972649aa..3d7e3abb5df 100644 --- a/ghost/i18n/locales/pt-BR/ghost.json +++ b/ghost/i18n/locales/pt-BR/ghost.json @@ -39,6 +39,7 @@ "Secure sign in link for {siteTitle}": "Link seguro para acessar o site {siteTitle}", "See you soon!": "Até logo!", "Sent to {email}": "Enviado para {email}", + "Share": "", "Sign in": "Entrar", "Sign in now": "Entrar agora", "Sign in to {siteTitle}": "Entrar no site {siteTitle}", diff --git a/ghost/i18n/locales/pt/ghost.json b/ghost/i18n/locales/pt/ghost.json index e0d1159a9fc..4a904108d07 100644 --- a/ghost/i18n/locales/pt/ghost.json +++ b/ghost/i18n/locales/pt/ghost.json @@ -39,6 +39,7 @@ "Secure sign in link for {siteTitle}": "Ligação segura para entrar em {siteTitle}", "See you soon!": "Até breve!", "Sent to {email}": "Enviado para {email}", + "Share": "", "Sign in": "Entrar", "Sign in now": "", "Sign in to {siteTitle}": "Entrar em {siteTitle}", diff --git a/ghost/i18n/locales/ro/ghost.json b/ghost/i18n/locales/ro/ghost.json index cd3973a9930..f11c92cb128 100644 --- a/ghost/i18n/locales/ro/ghost.json +++ b/ghost/i18n/locales/ro/ghost.json @@ -39,6 +39,7 @@ "Secure sign in link for {siteTitle}": "Link securizat pentru autentificarea la {siteTitle}", "See you soon!": "Pe curând!", "Sent to {email}": "Trimis către {email}", + "Share": "", "Sign in": "Autentificare", "Sign in now": "", "Sign in to {siteTitle}": "Conectează-te la {siteTitle}", diff --git a/ghost/i18n/locales/ru/ghost.json b/ghost/i18n/locales/ru/ghost.json index d447368e0a8..d048a06294b 100644 --- a/ghost/i18n/locales/ru/ghost.json +++ b/ghost/i18n/locales/ru/ghost.json @@ -39,6 +39,7 @@ "Secure sign in link for {siteTitle}": "Ссылка для безопасного входа в систему на {siteTitle}", "See you soon!": "До скорой встречи!", "Sent to {email}": "Отправлено на {email}", + "Share": "", "Sign in": "Войти", "Sign in now": "Войти сейчас", "Sign in to {siteTitle}": "Войти на {siteTitle}", diff --git a/ghost/i18n/locales/si/ghost.json b/ghost/i18n/locales/si/ghost.json index df33c9aefd9..e696519a9df 100644 --- a/ghost/i18n/locales/si/ghost.json +++ b/ghost/i18n/locales/si/ghost.json @@ -39,6 +39,7 @@ "Secure sign in link for {siteTitle}": "{siteTitle} වෙත ආරක්ෂිතව sign in වීම සඳහා වන link එක", "See you soon!": "ඉක්මණින් නැවත හමුවෙමු!", "Sent to {email}": "{email} වෙත යවන ලදී", + "Share": "", "Sign in": "Sign in වෙන්න", "Sign in now": "", "Sign in to {siteTitle}": "{siteTitle} වෙත sign in වෙන්න", diff --git a/ghost/i18n/locales/sk/ghost.json b/ghost/i18n/locales/sk/ghost.json index ce6ecff8790..16a81f91a47 100644 --- a/ghost/i18n/locales/sk/ghost.json +++ b/ghost/i18n/locales/sk/ghost.json @@ -39,6 +39,7 @@ "Secure sign in link for {siteTitle}": "Bezpečný prihlasovací odkaz pre {siteTitle}", "See you soon!": "Dovidenia!", "Sent to {email}": "Odoslané na {email}", + "Share": "", "Sign in": "Prihlásiť sa", "Sign in now": "", "Sign in to {siteTitle}": "Prihlásiť sa na {siteTitle}", diff --git a/ghost/i18n/locales/sl/ghost.json b/ghost/i18n/locales/sl/ghost.json index 201283d8023..b8220bf7676 100644 --- a/ghost/i18n/locales/sl/ghost.json +++ b/ghost/i18n/locales/sl/ghost.json @@ -39,6 +39,7 @@ "Secure sign in link for {siteTitle}": "Varna povezava za prijavo na {siteTitle}", "See you soon!": "Se vidimo kmalu!", "Sent to {email}": "Poslano na {email}", + "Share": "", "Sign in": "Prijavite se", "Sign in now": "", "Sign in to {siteTitle}": "Prijava v {siteTitle}", diff --git a/ghost/i18n/locales/sq/ghost.json b/ghost/i18n/locales/sq/ghost.json index 22db64d01d2..1608022e64b 100644 --- a/ghost/i18n/locales/sq/ghost.json +++ b/ghost/i18n/locales/sq/ghost.json @@ -39,6 +39,7 @@ "Secure sign in link for {siteTitle}": "Lidhja e sigurt e hyrjes për {siteTitle}", "See you soon!": "Shihemi se shpejti!", "Sent to {email}": "Derguar tek {email}", + "Share": "", "Sign in": "Hyr", "Sign in now": "", "Sign in to {siteTitle}": "Hyr ne", diff --git a/ghost/i18n/locales/sr-Cyrl/ghost.json b/ghost/i18n/locales/sr-Cyrl/ghost.json index bfdd4851157..a5ff1ba1bdd 100644 --- a/ghost/i18n/locales/sr-Cyrl/ghost.json +++ b/ghost/i18n/locales/sr-Cyrl/ghost.json @@ -39,6 +39,7 @@ "Secure sign in link for {siteTitle}": "Сигуран линк за пријаву на {siteTitle}", "See you soon!": "Видимо се ускоро!", "Sent to {email}": "Послато на {email}", + "Share": "", "Sign in": "Пријавите се", "Sign in now": "Пријавите се сада", "Sign in to {siteTitle}": "Пријавите се на {siteTitle}", diff --git a/ghost/i18n/locales/sr/ghost.json b/ghost/i18n/locales/sr/ghost.json index 84e4e0000a3..e806ea25276 100644 --- a/ghost/i18n/locales/sr/ghost.json +++ b/ghost/i18n/locales/sr/ghost.json @@ -39,6 +39,7 @@ "Secure sign in link for {siteTitle}": "Siguran link za prijavu na {siteTitle}", "See you soon!": "Vidimo se uskoro!", "Sent to {email}": "Poslato na {email}", + "Share": "", "Sign in": "Prijavite se", "Sign in now": "Prijavite se sada", "Sign in to {siteTitle}": "Prijavite se na {siteTitle}", diff --git a/ghost/i18n/locales/sv/ghost.json b/ghost/i18n/locales/sv/ghost.json index 33ffc91db13..ba07f65dee7 100644 --- a/ghost/i18n/locales/sv/ghost.json +++ b/ghost/i18n/locales/sv/ghost.json @@ -39,6 +39,7 @@ "Secure sign in link for {siteTitle}": "Säker inloggningslänk för {siteTitle}", "See you soon!": "Vi ses snart!", "Sent to {email}": "Skickat till {email}", + "Share": "", "Sign in": "Logga in", "Sign in now": "Logga in nu", "Sign in to {siteTitle}": "Logga in på {siteTitle}", diff --git a/ghost/i18n/locales/sw/ghost.json b/ghost/i18n/locales/sw/ghost.json index 4b875fdcf38..463a18d6adf 100644 --- a/ghost/i18n/locales/sw/ghost.json +++ b/ghost/i18n/locales/sw/ghost.json @@ -39,6 +39,7 @@ "Secure sign in link for {siteTitle}": "Kiungo salama cha kuingia kwa {siteTitle}", "See you soon!": "Tutaonana hivi karibuni!", "Sent to {email}": "Imetumwa kwa {email}", + "Share": "", "Sign in": "Ingia", "Sign in now": "", "Sign in to {siteTitle}": "Ingia kwa {siteTitle}", diff --git a/ghost/i18n/locales/ta/ghost.json b/ghost/i18n/locales/ta/ghost.json index 5db858f34a3..aed73a8000d 100644 --- a/ghost/i18n/locales/ta/ghost.json +++ b/ghost/i18n/locales/ta/ghost.json @@ -39,6 +39,7 @@ "Secure sign in link for {siteTitle}": "{siteTitle} க்கான பாதுகாப்பான உள்நுழைவு இணைப்பு", "See you soon!": "உங்களை விரைவில் சந்திக்கிறோம்!", "Sent to {email}": "{email} க்கு அனுப்பப்பட்டது", + "Share": "", "Sign in": "உள்நுழை", "Sign in now": "", "Sign in to {siteTitle}": "{siteTitle} க்கு உள்நுழையவும்", diff --git a/ghost/i18n/locales/th/ghost.json b/ghost/i18n/locales/th/ghost.json index 713352833e0..71f35f6f283 100644 --- a/ghost/i18n/locales/th/ghost.json +++ b/ghost/i18n/locales/th/ghost.json @@ -39,6 +39,7 @@ "Secure sign in link for {siteTitle}": "ลิงก์ลงชื่อเข้าใช้อย่างปลอดภัยสำหรับ {siteTitle}", "See you soon!": "แล้วพบกัน!", "Sent to {email}": "ส่งไปที่ {email}", + "Share": "", "Sign in": "ลงชื่อเข้าใช้", "Sign in now": "", "Sign in to {siteTitle}": "ลงชื่อเข้าใช้ไปยัง {siteTitle}", diff --git a/ghost/i18n/locales/tr/ghost.json b/ghost/i18n/locales/tr/ghost.json index f97a8430fd7..43ff2ee5207 100644 --- a/ghost/i18n/locales/tr/ghost.json +++ b/ghost/i18n/locales/tr/ghost.json @@ -39,6 +39,7 @@ "Secure sign in link for {siteTitle}": "{siteTitle} için güvenli giriş bağlantısı", "See you soon!": "Yakında görüşmek üzere!", "Sent to {email}": "{email} adresine gönderildi", + "Share": "", "Sign in": "Giriş Yap", "Sign in now": "Şimdi giriş yap", "Sign in to {siteTitle}": "{siteTitle} sitesine giriş yap", diff --git a/ghost/i18n/locales/uk/ghost.json b/ghost/i18n/locales/uk/ghost.json index 29b473b7545..34a41a271b4 100644 --- a/ghost/i18n/locales/uk/ghost.json +++ b/ghost/i18n/locales/uk/ghost.json @@ -39,6 +39,7 @@ "Secure sign in link for {siteTitle}": "Безпечне посилання для входу до {siteTitle}", "See you soon!": "До зустрічі!", "Sent to {email}": "Відправлено на {email}", + "Share": "", "Sign in": "Вхід", "Sign in now": "", "Sign in to {siteTitle}": "Увійти до {siteTitle}", diff --git a/ghost/i18n/locales/ur/ghost.json b/ghost/i18n/locales/ur/ghost.json index 5435ae08ad0..7e6d7b91e31 100644 --- a/ghost/i18n/locales/ur/ghost.json +++ b/ghost/i18n/locales/ur/ghost.json @@ -39,6 +39,7 @@ "Secure sign in link for {siteTitle}": "{siteTitle} کے لئے محفوظ سائن ان لنک", "See you soon!": "جلد ہی ملیں گے!", "Sent to {email}": "{email} کو بھیجا گیا", + "Share": "", "Sign in": "سائن ان", "Sign in now": "", "Sign in to {siteTitle}": "{siteTitle} میں سائن ان کریں", diff --git a/ghost/i18n/locales/uz/ghost.json b/ghost/i18n/locales/uz/ghost.json index 677ea8bd547..872c11ce49d 100644 --- a/ghost/i18n/locales/uz/ghost.json +++ b/ghost/i18n/locales/uz/ghost.json @@ -39,6 +39,7 @@ "Secure sign in link for {siteTitle}": "{siteTitle} uchun xavfsiz kirish havolasi", "See you soon!": "Ko'rishguncha!", "Sent to {email}": "{email}ga yuborildi", + "Share": "", "Sign in": "", "Sign in now": "", "Sign in to {siteTitle}": "{siteTitle}ga kirish", diff --git a/ghost/i18n/locales/vi/ghost.json b/ghost/i18n/locales/vi/ghost.json index 096c8e566eb..a6f85dd92ca 100644 --- a/ghost/i18n/locales/vi/ghost.json +++ b/ghost/i18n/locales/vi/ghost.json @@ -39,6 +39,7 @@ "Secure sign in link for {siteTitle}": "Liên kết đăng nhập {siteTitle} an toàn", "See you soon!": "Hẹn gặp lại bạn!", "Sent to {email}": "Đã gửi đến {email}", + "Share": "", "Sign in": "Đăng nhập", "Sign in now": "Đăng nhập ngay", "Sign in to {siteTitle}": "Đăng nhập {siteTitle}", diff --git a/ghost/i18n/locales/zh-Hant/ghost.json b/ghost/i18n/locales/zh-Hant/ghost.json index 201a407e7e3..7c48187cd86 100644 --- a/ghost/i18n/locales/zh-Hant/ghost.json +++ b/ghost/i18n/locales/zh-Hant/ghost.json @@ -39,6 +39,7 @@ "Secure sign in link for {siteTitle}": "為{siteTitle}準備的安全登入連結", "See you soon!": "再見!", "Sent to {email}": "已發送到 {email}", + "Share": "", "Sign in": "登入", "Sign in now": "立即登入", "Sign in to {siteTitle}": "登入到 {siteTitle}", diff --git a/ghost/i18n/locales/zh/ghost.json b/ghost/i18n/locales/zh/ghost.json index 6689d5bdb22..aa8c07a119f 100644 --- a/ghost/i18n/locales/zh/ghost.json +++ b/ghost/i18n/locales/zh/ghost.json @@ -39,6 +39,7 @@ "Secure sign in link for {siteTitle}": "为 {siteTitle} 准备的安全登录链接", "See you soon!": "回见!", "Sent to {email}": "已发送至 {email}", + "Share": "", "Sign in": "登录", "Sign in now": "立即登录", "Sign in to {siteTitle}": "登录到 {siteTitle}", From 8901578ac76b929097abb7ab698f0aff3729d192 Mon Sep 17 00:00:00 2001 From: Chris Raible Date: Thu, 9 Apr 2026 07:46:27 -0700 Subject: [PATCH 17/18] Added `show_header_icon` column to email design settings table (#27249) closes https://linear.app/tryghost/issue/NY-1213/ This field was overlooked in the initial implementation, but we do want to include it as a customizable option for welcome emails. This PR is just the minimal change to add the column to the `email_design_settings` table; other changes to the frontend modal and the rendering are forthcoming. --- ...-40-32-add-show-header-icon-to-email-design-settings.js | 7 +++++++ ghost/core/core/server/data/schema/schema.js | 1 + ghost/core/core/server/models/email-design-setting.js | 1 + .../__snapshots__/automated-email-design.test.js.snap | 6 ++++-- .../core/test/e2e-api/admin/automated-email-design.test.js | 3 ++- ghost/core/test/unit/server/data/schema/integrity.test.js | 2 +- 6 files changed, 16 insertions(+), 4 deletions(-) create mode 100644 ghost/core/core/server/data/migrations/versions/6.28/2026-04-08-21-40-32-add-show-header-icon-to-email-design-settings.js diff --git a/ghost/core/core/server/data/migrations/versions/6.28/2026-04-08-21-40-32-add-show-header-icon-to-email-design-settings.js b/ghost/core/core/server/data/migrations/versions/6.28/2026-04-08-21-40-32-add-show-header-icon-to-email-design-settings.js new file mode 100644 index 00000000000..5347786bbe1 --- /dev/null +++ b/ghost/core/core/server/data/migrations/versions/6.28/2026-04-08-21-40-32-add-show-header-icon-to-email-design-settings.js @@ -0,0 +1,7 @@ +const {createAddColumnMigration} = require('../../utils'); + +module.exports = createAddColumnMigration('email_design_settings', 'show_header_icon', { + type: 'boolean', + nullable: false, + defaultTo: true +}); diff --git a/ghost/core/core/server/data/schema/schema.js b/ghost/core/core/server/data/schema/schema.js index cd520340695..87dbf415bae 100644 --- a/ghost/core/core/server/data/schema/schema.js +++ b/ghost/core/core/server/data/schema/schema.js @@ -1149,6 +1149,7 @@ module.exports = { background_color: {type: 'string', maxlength: 50, nullable: false, defaultTo: 'light'}, header_background_color: {type: 'string', maxlength: 50, nullable: false, defaultTo: 'transparent'}, header_image: {type: 'string', maxlength: 2000, nullable: true}, + show_header_icon: {type: 'boolean', nullable: false, defaultTo: true}, show_header_title: {type: 'boolean', nullable: false, defaultTo: true}, footer_content: {type: 'text', maxlength: 1000000000, nullable: true}, button_color: {type: 'string', maxlength: 50, nullable: true, defaultTo: 'accent'}, diff --git a/ghost/core/core/server/models/email-design-setting.js b/ghost/core/core/server/models/email-design-setting.js index a26a02fce4c..2ea205cfe1a 100644 --- a/ghost/core/core/server/models/email-design-setting.js +++ b/ghost/core/core/server/models/email-design-setting.js @@ -7,6 +7,7 @@ const EmailDesignSetting = ghostBookshelf.Model.extend({ return { background_color: 'light', header_background_color: 'transparent', + show_header_icon: true, show_header_title: true, button_color: 'accent', button_corners: 'rounded', diff --git a/ghost/core/test/e2e-api/admin/__snapshots__/automated-email-design.test.js.snap b/ghost/core/test/e2e-api/admin/__snapshots__/automated-email-design.test.js.snap index 2a6a8c6b7d0..6a953e5909d 100644 --- a/ghost/core/test/e2e-api/admin/__snapshots__/automated-email-design.test.js.snap +++ b/ghost/core/test/e2e-api/admin/__snapshots__/automated-email-design.test.js.snap @@ -20,6 +20,7 @@ Object { "link_style": "bold", "section_title_color": null, "show_badge": true, + "show_header_icon": false, "show_header_title": true, "slug": "default-automated-email", "title_font_category": "sans_serif", @@ -34,7 +35,7 @@ exports[`Automated Email Design API Edit Can edit the automated email design 2: Object { "access-control-allow-origin": "http://127.0.0.1:2369", "cache-control": "no-cache, private, no-store, must-revalidate, max-stale=0, post-check=0, pre-check=0", - "content-length": "607", + "content-length": "632", "content-type": "application/json; charset=utf-8", "content-version": StringMatching /v\\\\d\\+\\\\\\.\\\\d\\+/, "etag": StringMatching /\\(\\?:W\\\\/\\)\\?"\\(\\?:\\[ !#-\\\\x7E\\\\x80-\\\\xFF\\]\\*\\|\\\\r\\\\n\\[\\\\t \\]\\|\\\\\\\\\\.\\)\\*"/, @@ -218,6 +219,7 @@ Object { "link_style": "underline", "section_title_color": null, "show_badge": true, + "show_header_icon": true, "show_header_title": true, "slug": "default-automated-email", "title_font_category": "sans_serif", @@ -232,7 +234,7 @@ exports[`Automated Email Design API Read Can read the default automated email de Object { "access-control-allow-origin": "http://127.0.0.1:2369", "cache-control": "no-cache, private, no-store, must-revalidate, max-stale=0, post-check=0, pre-check=0", - "content-length": "616", + "content-length": "640", "content-type": "application/json; charset=utf-8", "content-version": StringMatching /v\\\\d\\+\\\\\\.\\\\d\\+/, "etag": StringMatching /\\(\\?:W\\\\/\\)\\?"\\(\\?:\\[ !#-\\\\x7E\\\\x80-\\\\xFF\\]\\*\\|\\\\r\\\\n\\[\\\\t \\]\\|\\\\\\\\\\.\\)\\*"/, diff --git a/ghost/core/test/e2e-api/admin/automated-email-design.test.js b/ghost/core/test/e2e-api/admin/automated-email-design.test.js index d4b24d26480..fc847cdddc0 100644 --- a/ghost/core/test/e2e-api/admin/automated-email-design.test.js +++ b/ghost/core/test/e2e-api/admin/automated-email-design.test.js @@ -39,7 +39,8 @@ describe('Automated Email Design API', function () { .body({automated_email_design: [{ background_color: 'dark', button_corners: 'pill', - link_style: 'bold' + link_style: 'bold', + show_header_icon: false }]}) .expectStatus(200) .matchBodySnapshot({ diff --git a/ghost/core/test/unit/server/data/schema/integrity.test.js b/ghost/core/test/unit/server/data/schema/integrity.test.js index a8c237a7e16..317ee04c866 100644 --- a/ghost/core/test/unit/server/data/schema/integrity.test.js +++ b/ghost/core/test/unit/server/data/schema/integrity.test.js @@ -35,7 +35,7 @@ const validateRouteSettings = require('../../../../../core/server/services/route */ describe('DB version integrity', function () { // Only these variables should need updating - const currentSchemaHash = '6186d5aa5b62b6689ee8786efd5daccc'; + const currentSchemaHash = 'b7519928208d1bf8b84ad4bd3b4b3be0'; const currentFixturesHash = '2f86ab1e3820e86465f9ad738dd0ee93'; const currentSettingsHash = 'a102b80d2ab0cd92325ed007c94d7da6'; const currentRoutesHash = '3d180d52c663d173a6be791ef411ed01'; From 905379ea4894382288917e572ca00a1696f14992 Mon Sep 17 00:00:00 2001 From: Michael Barrett Date: Thu, 9 Apr 2026 16:45:02 +0100 Subject: [PATCH 18/18] Made `expires_at` on `gifts` non-nullable (#27312) ref https://linear.app/ghost/issue/BER-3528 `gifts.expires_at` should always have a value set and never be `null` --- .../2026-04-09-15-17-41-drop-nullable-gifts-expires-at.js | 3 +++ ghost/core/core/server/data/schema/schema.js | 2 +- .../core/server/services/gifts/gift-bookshelf-repository.ts | 4 ++-- ghost/core/test/unit/server/data/schema/integrity.test.js | 2 +- 4 files changed, 7 insertions(+), 4 deletions(-) create mode 100644 ghost/core/core/server/data/migrations/versions/6.28/2026-04-09-15-17-41-drop-nullable-gifts-expires-at.js diff --git a/ghost/core/core/server/data/migrations/versions/6.28/2026-04-09-15-17-41-drop-nullable-gifts-expires-at.js b/ghost/core/core/server/data/migrations/versions/6.28/2026-04-09-15-17-41-drop-nullable-gifts-expires-at.js new file mode 100644 index 00000000000..fcb6afb67e4 --- /dev/null +++ b/ghost/core/core/server/data/migrations/versions/6.28/2026-04-09-15-17-41-drop-nullable-gifts-expires-at.js @@ -0,0 +1,3 @@ +const {createDropNullableMigration} = require('../../utils'); + +module.exports = createDropNullableMigration('gifts', 'expires_at'); diff --git a/ghost/core/core/server/data/schema/schema.js b/ghost/core/core/server/data/schema/schema.js index 87dbf415bae..2618d0c83f7 100644 --- a/ghost/core/core/server/data/schema/schema.js +++ b/ghost/core/core/server/data/schema/schema.js @@ -1224,7 +1224,7 @@ module.exports = { stripe_payment_intent_id: {type: 'string', maxlength: 255, nullable: false, unique: true}, consumes_at: {type: 'dateTime', nullable: true}, - expires_at: {type: 'dateTime', nullable: true}, + expires_at: {type: 'dateTime', nullable: false}, status: { type: 'string', maxlength: 50, nullable: false, validations: { diff --git a/ghost/core/core/server/services/gifts/gift-bookshelf-repository.ts b/ghost/core/core/server/services/gifts/gift-bookshelf-repository.ts index 159b651d9aa..f262ded62f4 100644 --- a/ghost/core/core/server/services/gifts/gift-bookshelf-repository.ts +++ b/ghost/core/core/server/services/gifts/gift-bookshelf-repository.ts @@ -23,7 +23,7 @@ type GiftRow = { stripe_checkout_session_id: string; stripe_payment_intent_id: string; consumes_at: Date | null; - expires_at: Date | null; + expires_at: Date; status: GiftStatus; purchased_at: Date; redeemed_at: Date | null; @@ -97,7 +97,7 @@ export class GiftBookshelfRepository implements GiftRepository { stripeCheckoutSessionId: json.stripe_checkout_session_id, stripePaymentIntentId: json.stripe_payment_intent_id, consumesAt: json.consumes_at, - expiresAt: json.expires_at ?? new Date(), // TODO: Remove fallback when non-nullable migration is in place + expiresAt: json.expires_at, status: json.status, purchasedAt: json.purchased_at, redeemedAt: json.redeemed_at, diff --git a/ghost/core/test/unit/server/data/schema/integrity.test.js b/ghost/core/test/unit/server/data/schema/integrity.test.js index 317ee04c866..d164a9eaad7 100644 --- a/ghost/core/test/unit/server/data/schema/integrity.test.js +++ b/ghost/core/test/unit/server/data/schema/integrity.test.js @@ -35,7 +35,7 @@ const validateRouteSettings = require('../../../../../core/server/services/route */ describe('DB version integrity', function () { // Only these variables should need updating - const currentSchemaHash = 'b7519928208d1bf8b84ad4bd3b4b3be0'; + const currentSchemaHash = '1aedfe928922388669e594aa6b762871'; const currentFixturesHash = '2f86ab1e3820e86465f9ad738dd0ee93'; const currentSettingsHash = 'a102b80d2ab0cd92325ed007c94d7da6'; const currentRoutesHash = '3d180d52c663d173a6be791ef411ed01';