diff --git a/app/javascript/dashboard/modules/search/components/SearchTabs.vue b/app/javascript/dashboard/modules/search/components/SearchTabs.vue
index 656f5b7df..6e5174b5c 100644
--- a/app/javascript/dashboard/modules/search/components/SearchTabs.vue
+++ b/app/javascript/dashboard/modules/search/components/SearchTabs.vue
@@ -1,39 +1,38 @@
-
-
+
-
-
diff --git a/app/javascript/dashboard/modules/search/components/SearchView.vue b/app/javascript/dashboard/modules/search/components/SearchView.vue
index aa9a583ee..1b0a9e4d7 100644
--- a/app/javascript/dashboard/modules/search/components/SearchView.vue
+++ b/app/javascript/dashboard/modules/search/components/SearchView.vue
@@ -1,12 +1,9 @@
-
-
-
-
+
+
-
-
-
- (selectedTab = tab)"
- />
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+ (selectedTab = tab)"
+ />
-
-
-
- {{ $t('SEARCH.EMPTY_STATE_FULL', { query }) }}
-
-
-
-
-
-
-
- {{ $t('SEARCH.EMPTY_STATE_DEFAULT') }}
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ t('SEARCH.EMPTY_STATE_FULL', { query }) }}
+
+
+
+
+
+
+
+ {{ t('SEARCH.EMPTY_STATE_DEFAULT') }}
+
+
diff --git a/app/javascript/dashboard/store/modules/conversationSearch.js b/app/javascript/dashboard/store/modules/conversationSearch.js
index 210081fa1..b4d540fbe 100644
--- a/app/javascript/dashboard/store/modules/conversationSearch.js
+++ b/app/javascript/dashboard/store/modules/conversationSearch.js
@@ -75,11 +75,10 @@ export const actions = {
});
}
},
- async contactSearch({ commit }, { q }) {
- commit(types.CONTACT_SEARCH_SET, []);
+ async contactSearch({ commit }, { q, page = 1 }) {
commit(types.CONTACT_SEARCH_SET_UI_FLAG, { isFetching: true });
try {
- const { data } = await SearchAPI.contacts({ q });
+ const { data } = await SearchAPI.contacts({ q, page });
commit(types.CONTACT_SEARCH_SET, data.payload.contacts);
} catch (error) {
// Ignore error
@@ -87,11 +86,10 @@ export const actions = {
commit(types.CONTACT_SEARCH_SET_UI_FLAG, { isFetching: false });
}
},
- async conversationSearch({ commit }, { q }) {
- commit(types.CONVERSATION_SEARCH_SET, []);
+ async conversationSearch({ commit }, { q, page = 1 }) {
commit(types.CONVERSATION_SEARCH_SET_UI_FLAG, { isFetching: true });
try {
- const { data } = await SearchAPI.conversations({ q });
+ const { data } = await SearchAPI.conversations({ q, page });
commit(types.CONVERSATION_SEARCH_SET, data.payload.conversations);
} catch (error) {
// Ignore error
@@ -99,11 +97,10 @@ export const actions = {
commit(types.CONVERSATION_SEARCH_SET_UI_FLAG, { isFetching: false });
}
},
- async messageSearch({ commit }, { q }) {
- commit(types.MESSAGE_SEARCH_SET, []);
+ async messageSearch({ commit }, { q, page = 1 }) {
commit(types.MESSAGE_SEARCH_SET_UI_FLAG, { isFetching: true });
try {
- const { data } = await SearchAPI.messages({ q });
+ const { data } = await SearchAPI.messages({ q, page });
commit(types.MESSAGE_SEARCH_SET, data.payload.messages);
} catch (error) {
// Ignore error
@@ -112,9 +109,7 @@ export const actions = {
}
},
async clearSearchResults({ commit }) {
- commit(types.MESSAGE_SEARCH_SET, []);
- commit(types.CONVERSATION_SEARCH_SET, []);
- commit(types.CONTACT_SEARCH_SET, []);
+ commit(types.CLEAR_SEARCH_RESULTS);
},
};
@@ -123,13 +118,13 @@ export const mutations = {
state.records = records;
},
[types.CONTACT_SEARCH_SET](state, records) {
- state.contactRecords = records;
+ state.contactRecords = [...state.contactRecords, ...records];
},
[types.CONVERSATION_SEARCH_SET](state, records) {
- state.conversationRecords = records;
+ state.conversationRecords = [...state.conversationRecords, ...records];
},
[types.MESSAGE_SEARCH_SET](state, records) {
- state.messageRecords = records;
+ state.messageRecords = [...state.messageRecords, ...records];
},
[types.SEARCH_CONVERSATIONS_SET_UI_FLAG](state, uiFlags) {
state.uiFlags = { ...state.uiFlags, ...uiFlags };
@@ -146,6 +141,11 @@ export const mutations = {
[types.MESSAGE_SEARCH_SET_UI_FLAG](state, uiFlags) {
state.uiFlags.message = { ...state.uiFlags.message, ...uiFlags };
},
+ [types.CLEAR_SEARCH_RESULTS](state) {
+ state.contactRecords = [];
+ state.conversationRecords = [];
+ state.messageRecords = [];
+ },
};
export default {
diff --git a/app/javascript/dashboard/store/modules/specs/conversationSearch/actions.spec.js b/app/javascript/dashboard/store/modules/specs/conversationSearch/actions.spec.js
index 0fdcae458..ebf6c0557 100644
--- a/app/javascript/dashboard/store/modules/specs/conversationSearch/actions.spec.js
+++ b/app/javascript/dashboard/store/modules/specs/conversationSearch/actions.spec.js
@@ -1,11 +1,19 @@
import { actions } from '../../conversationSearch';
import types from '../../../mutation-types';
import axios from 'axios';
+
const commit = vi.fn();
+const dispatch = vi.fn();
global.axios = axios;
vi.mock('axios');
describe('#actions', () => {
+ beforeEach(() => {
+ commit.mockClear();
+ dispatch.mockClear();
+ axios.get.mockClear();
+ });
+
describe('#get', () => {
it('sends correct actions if no query param is provided', () => {
actions.get({ commit }, { q: '' });
@@ -41,4 +49,111 @@ describe('#actions', () => {
]);
});
});
+
+ describe('#fullSearch', () => {
+ it('should not dispatch any actions if no query provided', async () => {
+ await actions.fullSearch({ commit, dispatch }, { q: '' });
+ expect(dispatch).not.toHaveBeenCalled();
+ });
+
+ it('should dispatch all search actions and set UI flags correctly', async () => {
+ await actions.fullSearch({ commit, dispatch }, { q: 'test' });
+
+ expect(commit.mock.calls).toEqual([
+ [
+ types.FULL_SEARCH_SET_UI_FLAG,
+ { isFetching: true, isSearchCompleted: false },
+ ],
+ [
+ types.FULL_SEARCH_SET_UI_FLAG,
+ { isFetching: false, isSearchCompleted: true },
+ ],
+ ]);
+
+ expect(dispatch).toHaveBeenCalledWith('contactSearch', { q: 'test' });
+ expect(dispatch).toHaveBeenCalledWith('conversationSearch', {
+ q: 'test',
+ });
+ expect(dispatch).toHaveBeenCalledWith('messageSearch', { q: 'test' });
+ });
+ });
+
+ describe('#contactSearch', () => {
+ it('should handle successful contact search', async () => {
+ axios.get.mockResolvedValue({
+ data: { payload: { contacts: [{ id: 1 }] } },
+ });
+
+ await actions.contactSearch({ commit }, { q: 'test', page: 1 });
+ expect(commit.mock.calls).toEqual([
+ [types.CONTACT_SEARCH_SET_UI_FLAG, { isFetching: true }],
+ [types.CONTACT_SEARCH_SET, [{ id: 1 }]],
+ [types.CONTACT_SEARCH_SET_UI_FLAG, { isFetching: false }],
+ ]);
+ });
+
+ it('should handle failed contact search', async () => {
+ axios.get.mockRejectedValue({});
+ await actions.contactSearch({ commit }, { q: 'test' });
+ expect(commit.mock.calls).toEqual([
+ [types.CONTACT_SEARCH_SET_UI_FLAG, { isFetching: true }],
+ [types.CONTACT_SEARCH_SET_UI_FLAG, { isFetching: false }],
+ ]);
+ });
+ });
+
+ describe('#conversationSearch', () => {
+ it('should handle successful conversation search', async () => {
+ axios.get.mockResolvedValue({
+ data: { payload: { conversations: [{ id: 1 }] } },
+ });
+
+ await actions.conversationSearch({ commit }, { q: 'test', page: 1 });
+ expect(commit.mock.calls).toEqual([
+ [types.CONVERSATION_SEARCH_SET_UI_FLAG, { isFetching: true }],
+ [types.CONVERSATION_SEARCH_SET, [{ id: 1 }]],
+ [types.CONVERSATION_SEARCH_SET_UI_FLAG, { isFetching: false }],
+ ]);
+ });
+
+ it('should handle failed conversation search', async () => {
+ axios.get.mockRejectedValue({});
+ await actions.conversationSearch({ commit }, { q: 'test' });
+ expect(commit.mock.calls).toEqual([
+ [types.CONVERSATION_SEARCH_SET_UI_FLAG, { isFetching: true }],
+ [types.CONVERSATION_SEARCH_SET_UI_FLAG, { isFetching: false }],
+ ]);
+ });
+ });
+
+ describe('#messageSearch', () => {
+ it('should handle successful message search', async () => {
+ axios.get.mockResolvedValue({
+ data: { payload: { messages: [{ id: 1 }] } },
+ });
+
+ await actions.messageSearch({ commit }, { q: 'test', page: 1 });
+ expect(commit.mock.calls).toEqual([
+ [types.MESSAGE_SEARCH_SET_UI_FLAG, { isFetching: true }],
+ [types.MESSAGE_SEARCH_SET, [{ id: 1 }]],
+ [types.MESSAGE_SEARCH_SET_UI_FLAG, { isFetching: false }],
+ ]);
+ });
+
+ it('should handle failed message search', async () => {
+ axios.get.mockRejectedValue({});
+ await actions.messageSearch({ commit }, { q: 'test' });
+ expect(commit.mock.calls).toEqual([
+ [types.MESSAGE_SEARCH_SET_UI_FLAG, { isFetching: true }],
+ [types.MESSAGE_SEARCH_SET_UI_FLAG, { isFetching: false }],
+ ]);
+ });
+ });
+
+ describe('#clearSearchResults', () => {
+ it('should commit clear search results mutation', () => {
+ actions.clearSearchResults({ commit });
+ expect(commit).toHaveBeenCalledWith(types.CLEAR_SEARCH_RESULTS);
+ });
+ });
});
diff --git a/app/javascript/dashboard/store/modules/specs/conversationSearch/getters.spec.js b/app/javascript/dashboard/store/modules/specs/conversationSearch/getters.spec.js
index 489a83fd2..ea3ca7048 100644
--- a/app/javascript/dashboard/store/modules/specs/conversationSearch/getters.spec.js
+++ b/app/javascript/dashboard/store/modules/specs/conversationSearch/getters.spec.js
@@ -10,10 +10,49 @@ describe('#getters', () => {
]);
});
+ it('getContactRecords', () => {
+ const state = {
+ contactRecords: [{ id: 1, name: 'Contact 1' }],
+ };
+ expect(getters.getContactRecords(state)).toEqual([
+ { id: 1, name: 'Contact 1' },
+ ]);
+ });
+
+ it('getConversationRecords', () => {
+ const state = {
+ conversationRecords: [{ id: 1, title: 'Conversation 1' }],
+ };
+ expect(getters.getConversationRecords(state)).toEqual([
+ { id: 1, title: 'Conversation 1' },
+ ]);
+ });
+
+ it('getMessageRecords', () => {
+ const state = {
+ messageRecords: [{ id: 1, content: 'Message 1' }],
+ };
+ expect(getters.getMessageRecords(state)).toEqual([
+ { id: 1, content: 'Message 1' },
+ ]);
+ });
+
it('getUIFlags', () => {
const state = {
- uiFlags: { isFetching: false },
+ uiFlags: {
+ isFetching: false,
+ isSearchCompleted: true,
+ contact: { isFetching: true },
+ message: { isFetching: false },
+ conversation: { isFetching: false },
+ },
};
- expect(getters.getUIFlags(state)).toEqual({ isFetching: false });
+ expect(getters.getUIFlags(state)).toEqual({
+ isFetching: false,
+ isSearchCompleted: true,
+ contact: { isFetching: true },
+ message: { isFetching: false },
+ conversation: { isFetching: false },
+ });
});
});
diff --git a/app/javascript/dashboard/store/modules/specs/conversationSearch/mutations.spec.js b/app/javascript/dashboard/store/modules/specs/conversationSearch/mutations.spec.js
index 770129655..7bef2e527 100644
--- a/app/javascript/dashboard/store/modules/specs/conversationSearch/mutations.spec.js
+++ b/app/javascript/dashboard/store/modules/specs/conversationSearch/mutations.spec.js
@@ -10,7 +10,7 @@ describe('#mutations', () => {
});
});
- describe('#SEARCH_CONVERSATIONS_SET', () => {
+ describe('#SEARCH_CONVERSATIONS_SET_UI_FLAG', () => {
it('set uiFlags correctly', () => {
const state = { uiFlags: { isFetching: true } };
mutations[types.SEARCH_CONVERSATIONS_SET_UI_FLAG](state, {
@@ -19,4 +19,99 @@ describe('#mutations', () => {
expect(state.uiFlags).toEqual({ isFetching: false });
});
});
+
+ describe('#CONTACT_SEARCH_SET', () => {
+ it('should append new contact records to existing ones', () => {
+ const state = { contactRecords: [{ id: 1 }] };
+ mutations[types.CONTACT_SEARCH_SET](state, [{ id: 2 }]);
+ expect(state.contactRecords).toEqual([{ id: 1 }, { id: 2 }]);
+ });
+ });
+
+ describe('#CONVERSATION_SEARCH_SET', () => {
+ it('should append new conversation records to existing ones', () => {
+ const state = { conversationRecords: [{ id: 1 }] };
+ mutations[types.CONVERSATION_SEARCH_SET](state, [{ id: 2 }]);
+ expect(state.conversationRecords).toEqual([{ id: 1 }, { id: 2 }]);
+ });
+ });
+
+ describe('#MESSAGE_SEARCH_SET', () => {
+ it('should append new message records to existing ones', () => {
+ const state = { messageRecords: [{ id: 1 }] };
+ mutations[types.MESSAGE_SEARCH_SET](state, [{ id: 2 }]);
+ expect(state.messageRecords).toEqual([{ id: 1 }, { id: 2 }]);
+ });
+ });
+
+ describe('#FULL_SEARCH_SET_UI_FLAG', () => {
+ it('set full search UI flags correctly', () => {
+ const state = {
+ uiFlags: {
+ isFetching: true,
+ isSearchCompleted: false,
+ },
+ };
+ mutations[types.FULL_SEARCH_SET_UI_FLAG](state, {
+ isFetching: false,
+ isSearchCompleted: true,
+ });
+ expect(state.uiFlags).toEqual({
+ isFetching: false,
+ isSearchCompleted: true,
+ });
+ });
+ });
+
+ describe('#CONTACT_SEARCH_SET_UI_FLAG', () => {
+ it('set contact search UI flags correctly', () => {
+ const state = {
+ uiFlags: {
+ contact: { isFetching: true },
+ },
+ };
+ mutations[types.CONTACT_SEARCH_SET_UI_FLAG](state, { isFetching: false });
+ expect(state.uiFlags.contact).toEqual({ isFetching: false });
+ });
+ });
+
+ describe('#CONVERSATION_SEARCH_SET_UI_FLAG', () => {
+ it('set conversation search UI flags correctly', () => {
+ const state = {
+ uiFlags: {
+ conversation: { isFetching: true },
+ },
+ };
+ mutations[types.CONVERSATION_SEARCH_SET_UI_FLAG](state, {
+ isFetching: false,
+ });
+ expect(state.uiFlags.conversation).toEqual({ isFetching: false });
+ });
+ });
+
+ describe('#MESSAGE_SEARCH_SET_UI_FLAG', () => {
+ it('set message search UI flags correctly', () => {
+ const state = {
+ uiFlags: {
+ message: { isFetching: true },
+ },
+ };
+ mutations[types.MESSAGE_SEARCH_SET_UI_FLAG](state, { isFetching: false });
+ expect(state.uiFlags.message).toEqual({ isFetching: false });
+ });
+ });
+
+ describe('#CLEAR_SEARCH_RESULTS', () => {
+ it('should clear all search records', () => {
+ const state = {
+ contactRecords: [{ id: 1 }],
+ conversationRecords: [{ id: 1 }],
+ messageRecords: [{ id: 1 }],
+ };
+ mutations[types.CLEAR_SEARCH_RESULTS](state);
+ expect(state.contactRecords).toEqual([]);
+ expect(state.conversationRecords).toEqual([]);
+ expect(state.messageRecords).toEqual([]);
+ });
+ });
});
diff --git a/app/javascript/dashboard/store/mutation-types.js b/app/javascript/dashboard/store/mutation-types.js
index 7cc5223a0..7416ca9a3 100644
--- a/app/javascript/dashboard/store/mutation-types.js
+++ b/app/javascript/dashboard/store/mutation-types.js
@@ -311,6 +311,7 @@ export default {
CONVERSATION_SEARCH_SET: 'CONVERSATION_SEARCH_SET',
CONVERSATION_SEARCH_SET_UI_FLAG: 'CONVERSATION_SEARCH_SET_UI_FLAG',
MESSAGE_SEARCH_SET: 'MESSAGE_SEARCH_SET',
+ CLEAR_SEARCH_RESULTS: 'CLEAR_SEARCH_RESULTS',
MESSAGE_SEARCH_SET_UI_FLAG: 'MESSAGE_SEARCH_SET_UI_FLAG',
FULL_SEARCH_SET_UI_FLAG: 'FULL_SEARCH_SET_UI_FLAG',
SET_CONVERSATION_PARTICIPANTS_UI_FLAG:
diff --git a/app/services/search_service.rb b/app/services/search_service.rb
index add7938a0..9c7a6ceef 100644
--- a/app/services/search_service.rb
+++ b/app/services/search_service.rb
@@ -30,7 +30,8 @@ class SearchService
.where("cast(conversations.display_id as text) ILIKE :search OR contacts.name ILIKE :search OR contacts.email
ILIKE :search OR contacts.phone_number ILIKE :search OR contacts.identifier ILIKE :search", search: "%#{search_query}%")
.order('conversations.created_at DESC')
- .limit(10)
+ .page(params[:page])
+ .per(15)
end
def filter_messages
@@ -38,13 +39,14 @@ class SearchService
.where('messages.content ILIKE :search', search: "%#{search_query}%")
.where('created_at >= ?', 3.months.ago)
.reorder('created_at DESC')
- .limit(10)
+ .page(params[:page])
+ .per(15)
end
def filter_contacts
@contacts = current_account.contacts.where(
"name ILIKE :search OR email ILIKE :search OR phone_number
ILIKE :search OR identifier ILIKE :search", search: "%#{search_query}%"
- ).resolved_contacts.order_on_last_activity_at('desc').limit(10)
+ ).resolved_contacts.order_on_last_activity_at('desc').page(params[:page]).per(15)
end
end
From 1b1ba3f8ddcdd6e7c882ce71e72c1e15526e74e4 Mon Sep 17 00:00:00 2001
From: Pranav
Date: Mon, 3 Feb 2025 12:44:10 -0800
Subject: [PATCH 10/21] fix: Update the photo/video caption when an update
event is received (#10804)
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
The update ensures proper handling of text updates in photo/video
messages by accounting for the caption attribute in addition to the text
attribute. This change enables consistent processing across both
messages.
Fixes https://github.com/chatwoot/chatwoot/issues/10760
Note: TIL, you can update the video/photo you’ve sent on Telegram, not
just the text. Currently, we’re not handling this. To support it, we
need to parse the payload and update the attachments accordingly. This
could be taken as a followup.
---
.../telegram/update_message_service.rb | 8 ++-
.../telegram/update_message_service_spec.rb | 66 ++++++++++++-------
2 files changed, 48 insertions(+), 26 deletions(-)
diff --git a/app/services/telegram/update_message_service.rb b/app/services/telegram/update_message_service.rb
index 0a0869d88..d76be5a3f 100644
--- a/app/services/telegram/update_message_service.rb
+++ b/app/services/telegram/update_message_service.rb
@@ -28,6 +28,12 @@ class Telegram::UpdateMessageService
end
def update_message
- @message.update!(content: params[:edited_message][:text])
+ edited_message = params[:edited_message]
+
+ if edited_message[:text].present?
+ @message.update!(content: edited_message[:text])
+ elsif edited_message[:caption].present?
+ @message.update!(content: edited_message[:caption])
+ end
end
end
diff --git a/spec/services/telegram/update_message_service_spec.rb b/spec/services/telegram/update_message_service_spec.rb
index 9ef9b673b..5c00c9009 100644
--- a/spec/services/telegram/update_message_service_spec.rb
+++ b/spec/services/telegram/update_message_service_spec.rb
@@ -2,41 +2,57 @@ require 'rails_helper'
describe Telegram::UpdateMessageService do
let!(:telegram_channel) { create(:channel_telegram) }
- let!(:update_params) do
+ let(:common_message_params) do
{
- 'update_id': 2_323_484,
- 'edited_message': {
+ 'from': {
+ 'id': 123,
+ 'username': 'sojan'
+ },
+ 'chat': {
+ 'id': 789,
+ 'type': 'private'
+ },
+ 'date': Time.now.to_i,
+ 'edit_date': Time.now.to_i
+ }
+ end
+
+ let(:text_update_params) do
+ {
+ 'update_id': 1,
+ 'edited_message': common_message_params.merge(
'message_id': 48,
- 'from': {
- 'id': 512_313_123_171_248,
- 'is_bot': false,
- 'first_name': 'Sojan',
- 'last_name': 'Jose',
- 'username': 'sojan'
- },
- 'chat': {
- 'id': 517_123_213_211_248,
- 'first_name': 'Sojan',
- 'last_name': 'Jose',
- 'username': 'sojan',
- 'type': 'private'
- },
- 'date': 1_680_088_034,
- 'edit_date': 1_680_088_056,
'text': 'updated message'
- }
+ )
+ }
+ end
+
+ let(:caption_update_params) do
+ {
+ 'update_id': 2,
+ 'edited_message': common_message_params.merge(
+ 'message_id': 49,
+ 'caption': 'updated caption'
+ )
}
end
describe '#perform' do
context 'when valid update message params' do
- it 'updates the appropriate message' do
- contact_inbox = create(:contact_inbox, inbox: telegram_channel.inbox, source_id: update_params[:edited_message][:chat][:id])
- conversation = create(:conversation, contact_inbox: contact_inbox)
- message = create(:message, conversation: conversation, source_id: update_params[:edited_message][:message_id])
- described_class.new(inbox: telegram_channel.inbox, params: update_params.with_indifferent_access).perform
+ let(:contact_inbox) { create(:contact_inbox, inbox: telegram_channel.inbox, source_id: common_message_params[:chat][:id]) }
+ let(:conversation) { create(:conversation, contact_inbox: contact_inbox) }
+
+ it 'updates the message text when text is present' do
+ message = create(:message, conversation: conversation, source_id: text_update_params[:edited_message][:message_id])
+ described_class.new(inbox: telegram_channel.inbox, params: text_update_params.with_indifferent_access).perform
expect(message.reload.content).to eq('updated message')
end
+
+ it 'updates the message caption when caption is present' do
+ message = create(:message, conversation: conversation, source_id: caption_update_params[:edited_message][:message_id])
+ described_class.new(inbox: telegram_channel.inbox, params: caption_update_params.with_indifferent_access).perform
+ expect(message.reload.content).to eq('updated caption')
+ end
end
context 'when invalid update message params' do
From 41c7683e0449104bda862b247cf1da065fa01767 Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Tue, 4 Feb 2025 18:13:48 -0800
Subject: [PATCH 11/21] chore(deps-dev): bump vite from 5.4.8 to 5.4.12
(#10744)
Bumps [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite)
from 5.4.8 to 5.4.12.
Release notes
Sourced from vite's
releases.
v5.4.12
This version contains a breaking change due to security fixes. See https://github.com/vitejs/vite/security/advisories/GHSA-vg6x-rcgg-rjx6
for more details.
Please refer to CHANGELOG.md
for details.
v5.4.11
Please refer to CHANGELOG.md
for details.
v5.4.10
Please refer to CHANGELOG.md
for details.
v5.4.9
Please refer to CHANGELOG.md
for details.
Changelog
Sourced from vite's
changelog.
5.4.12 (2025-01-20)
- fix!: check host header to prevent DNS rebinding attacks and
introduce
server.allowedHosts (9da4abc)
- fix!: default
server.cors: false to disallow fetching
from untrusted origins (dfea38f)
- fix: verify token for HMR WebSocket connection (b71a5c8)
- chore: add deps update changelog (ecd2375)
5.4.11 (2024-11-11)
- fix(deps): update dependencies of postcss-modules (ceb15db),
closes #18617
5.4.10 (2024-10-23)
- fix: backport #18367,augment
hash for CSS files to prevent chromium erroring by loading previous fil
(7d1a3bc),
closes #18367
#18412
5.4.9 (2024-10-14)
Commits
f428aa9
release: v5.4.12
9da4abc
fix!: check host header to prevent DNS rebinding attacks and introduce
`serve...
b71a5c8
fix: verify token for HMR WebSocket connection
dfea38f
fix!: default server.cors: false to disallow fetching from
untrusted origins
ecd2375
chore: add deps update changelog
c54c860
release: v5.4.11
5f52bc8
release: v5.4.10
7d1a3bc
fix: backport #18367,augment
hash for CSS files to prevent chromium erroring ...
898d61f
release: v5.4.9
508d9ab
fix: bump launch-editor-middleware to v2.9.1 (#18348)
- Additional commits viewable in compare
view
[](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)
Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.
[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)
---
Dependabot commands and options
You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after
your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge
and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating
it. You can achieve the same result by closing it manually
- `@dependabot show ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)
You can disable automated security fix PRs for this repo from the
[Security Alerts
page](https://github.com/chatwoot/chatwoot/network/alerts).
Signed-off-by: dependabot[bot]
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
---
package.json | 4 +-
pnpm-lock.yaml | 278 ++++++++++++++++++++++++++++---------------------
2 files changed, 160 insertions(+), 122 deletions(-)
diff --git a/package.json b/package.json
index 68abbf00b..9118e551a 100644
--- a/package.json
+++ b/package.json
@@ -134,7 +134,7 @@
"prosemirror-model": "^1.22.3",
"size-limit": "^8.2.4",
"tailwindcss": "^3.4.13",
- "vite": "^5.4.8",
+ "vite": "^5.4.12",
"vite-plugin-ruby": "^5.0.0",
"vitest": "2.0.1"
},
@@ -150,7 +150,7 @@
"pnpm": {
"overrides": {
"vite-node": "2.0.1",
- "vite": "5.4.8",
+ "vite": "5.4.12",
"vitest": "2.0.1"
}
},
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index dbd61a211..502485334 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -6,7 +6,7 @@ settings:
overrides:
vite-node: 2.0.1
- vite: 5.4.8
+ vite: 5.4.12
vitest: 2.0.1
importers:
@@ -72,7 +72,7 @@ importers:
version: 8.20.5(vue@3.5.12(typescript@5.6.2))
'@vitejs/plugin-vue':
specifier: ^5.1.4
- version: 5.1.4(vite@5.4.8(@types/node@22.7.0)(sass@1.79.3)(terser@5.33.0))(vue@3.5.12(typescript@5.6.2))
+ version: 5.1.4(vite@5.4.12(@types/node@22.7.0)(sass@1.79.3)(terser@5.33.0))(vue@3.5.12(typescript@5.6.2))
'@vue/compiler-sfc':
specifier: ^3.5.8
version: 3.5.8
@@ -232,7 +232,7 @@ importers:
version: 1.8.1(tailwindcss@3.4.13)
'@histoire/plugin-vue':
specifier: 0.17.15
- version: 0.17.15(histoire@0.17.15(@types/node@22.7.0)(sass@1.79.3)(terser@5.33.0)(vite@5.4.8(@types/node@22.7.0)(sass@1.79.3)(terser@5.33.0)))(vite@5.4.8(@types/node@22.7.0)(sass@1.79.3)(terser@5.33.0))(vue@3.5.12(typescript@5.6.2))
+ version: 0.17.15(histoire@0.17.15(@types/node@22.7.0)(sass@1.79.3)(terser@5.33.0)(vite@5.4.12(@types/node@22.7.0)(sass@1.79.3)(terser@5.33.0)))(vite@5.4.12(@types/node@22.7.0)(sass@1.79.3)(terser@5.33.0))(vue@3.5.12(typescript@5.6.2))
'@iconify-json/logos':
specifier: ^1.2.3
version: 1.2.3
@@ -292,7 +292,7 @@ importers:
version: 6.0.0
histoire:
specifier: 0.17.15
- version: 0.17.15(@types/node@22.7.0)(sass@1.79.3)(terser@5.33.0)(vite@5.4.8(@types/node@22.7.0)(sass@1.79.3)(terser@5.33.0))
+ version: 0.17.15(@types/node@22.7.0)(sass@1.79.3)(terser@5.33.0)(vite@5.4.12(@types/node@22.7.0)(sass@1.79.3)(terser@5.33.0))
husky:
specifier: ^7.0.0
version: 7.0.4
@@ -321,11 +321,11 @@ importers:
specifier: ^3.4.13
version: 3.4.13
vite:
- specifier: 5.4.8
- version: 5.4.8(@types/node@22.7.0)(sass@1.79.3)(terser@5.33.0)
+ specifier: 5.4.12
+ version: 5.4.12(@types/node@22.7.0)(sass@1.79.3)(terser@5.33.0)
vite-plugin-ruby:
specifier: ^5.0.0
- version: 5.0.0(vite@5.4.8(@types/node@22.7.0)(sass@1.79.3)(terser@5.33.0))
+ version: 5.0.0(vite@5.4.12(@types/node@22.7.0)(sass@1.79.3)(terser@5.33.0))
vitest:
specifier: 2.0.1
version: 2.0.1(@types/node@22.7.0)(jsdom@24.1.3)(sass@1.79.3)(terser@5.33.0)
@@ -854,7 +854,7 @@ packages:
'@histoire/shared@0.17.17':
resolution: {integrity: sha512-ueGtURysonT0MujCObPCR57+mgZluMEXCrbc2FBgKAD/DoAt38tNwSGsmLldk2O6nTr7lr6ClbVSgWrLwgY6Xw==}
peerDependencies:
- vite: 5.4.8
+ vite: 5.4.12
'@histoire/vendors@0.17.17':
resolution: {integrity: sha512-QZvmffdoJlLuYftPIkOU5Q2FPAdG2JjMuQ5jF7NmEl0n1XnmbMqtRkdYTZ4eF6CO1KLZ0Zyf6gBQvoT1uWNcjA==}
@@ -924,6 +924,10 @@ packages:
resolution: {integrity: sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==}
engines: {node: '>=6.0.0'}
+ '@jridgewell/gen-mapping@0.3.8':
+ resolution: {integrity: sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==}
+ engines: {node: '>=6.0.0'}
+
'@jridgewell/resolve-uri@3.1.1':
resolution: {integrity: sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==}
engines: {node: '>=6.0.0'}
@@ -1015,83 +1019,98 @@ packages:
'@rails/ujs@7.1.400':
resolution: {integrity: sha512-YwvXm3BR5tn+VCAKYGycLejMRVZE3Ionj5gFjEeGXCZnI0Rpi+7dKpmyu90kdUY7dRUFpHTdu9zZceEzFLl38w==}
- '@rollup/rollup-android-arm-eabi@4.23.0':
- resolution: {integrity: sha512-8OR+Ok3SGEMsAZispLx8jruuXw0HVF16k+ub2eNXKHDmdxL4cf9NlNpAzhlOhNyXzKDEJuFeq0nZm+XlNb1IFw==}
+ '@rollup/rollup-android-arm-eabi@4.31.0':
+ resolution: {integrity: sha512-9NrR4033uCbUBRgvLcBrJofa2KY9DzxL2UKZ1/4xA/mnTNyhZCWBuD8X3tPm1n4KxcgaraOYgrFKSgwjASfmlA==}
cpu: [arm]
os: [android]
- '@rollup/rollup-android-arm64@4.23.0':
- resolution: {integrity: sha512-rEFtX1nP8gqmLmPZsXRMoLVNB5JBwOzIAk/XAcEPuKrPa2nPJ+DuGGpfQUR0XjRm8KjHfTZLpWbKXkA5BoFL3w==}
+ '@rollup/rollup-android-arm64@4.31.0':
+ resolution: {integrity: sha512-iBbODqT86YBFHajxxF8ebj2hwKm1k8PTBQSojSt3d1FFt1gN+xf4CowE47iN0vOSdnd+5ierMHBbu/rHc7nq5g==}
cpu: [arm64]
os: [android]
- '@rollup/rollup-darwin-arm64@4.23.0':
- resolution: {integrity: sha512-ZbqlMkJRMMPeapfaU4drYHns7Q5MIxjM/QeOO62qQZGPh9XWziap+NF9fsqPHT0KzEL6HaPspC7sOwpgyA3J9g==}
+ '@rollup/rollup-darwin-arm64@4.31.0':
+ resolution: {integrity: sha512-WHIZfXgVBX30SWuTMhlHPXTyN20AXrLH4TEeH/D0Bolvx9PjgZnn4H677PlSGvU6MKNsjCQJYczkpvBbrBnG6g==}
cpu: [arm64]
os: [darwin]
- '@rollup/rollup-darwin-x64@4.23.0':
- resolution: {integrity: sha512-PfmgQp78xx5rBCgn2oYPQ1rQTtOaQCna0kRaBlc5w7RlA3TDGGo7m3XaptgitUZ54US9915i7KeVPHoy3/W8tA==}
+ '@rollup/rollup-darwin-x64@4.31.0':
+ resolution: {integrity: sha512-hrWL7uQacTEF8gdrQAqcDy9xllQ0w0zuL1wk1HV8wKGSGbKPVjVUv/DEwT2+Asabf8Dh/As+IvfdU+H8hhzrQQ==}
cpu: [x64]
os: [darwin]
- '@rollup/rollup-linux-arm-gnueabihf@4.23.0':
- resolution: {integrity: sha512-WAeZfAAPus56eQgBioezXRRzArAjWJGjNo/M+BHZygUcs9EePIuGI1Wfc6U/Ki+tMW17FFGvhCfYnfcKPh18SA==}
+ '@rollup/rollup-freebsd-arm64@4.31.0':
+ resolution: {integrity: sha512-S2oCsZ4hJviG1QjPY1h6sVJLBI6ekBeAEssYKad1soRFv3SocsQCzX6cwnk6fID6UQQACTjeIMB+hyYrFacRew==}
+ cpu: [arm64]
+ os: [freebsd]
+
+ '@rollup/rollup-freebsd-x64@4.31.0':
+ resolution: {integrity: sha512-pCANqpynRS4Jirn4IKZH4tnm2+2CqCNLKD7gAdEjzdLGbH1iO0zouHz4mxqg0uEMpO030ejJ0aA6e1PJo2xrPA==}
+ cpu: [x64]
+ os: [freebsd]
+
+ '@rollup/rollup-linux-arm-gnueabihf@4.31.0':
+ resolution: {integrity: sha512-0O8ViX+QcBd3ZmGlcFTnYXZKGbFu09EhgD27tgTdGnkcYXLat4KIsBBQeKLR2xZDCXdIBAlWLkiXE1+rJpCxFw==}
cpu: [arm]
os: [linux]
- '@rollup/rollup-linux-arm-musleabihf@4.23.0':
- resolution: {integrity: sha512-v7PGcp1O5XKZxKX8phTXtmJDVpE20Ub1eF6w9iMmI3qrrPak6yR9/5eeq7ziLMrMTjppkkskXyxnmm00HdtXjA==}
+ '@rollup/rollup-linux-arm-musleabihf@4.31.0':
+ resolution: {integrity: sha512-w5IzG0wTVv7B0/SwDnMYmbr2uERQp999q8FMkKG1I+j8hpPX2BYFjWe69xbhbP6J9h2gId/7ogesl9hwblFwwg==}
cpu: [arm]
os: [linux]
- '@rollup/rollup-linux-arm64-gnu@4.23.0':
- resolution: {integrity: sha512-nAbWsDZ9UkU6xQiXEyXBNHAKbzSAi95H3gTStJq9UGiS1v+YVXwRHcQOQEF/3CHuhX5BVhShKoeOf6Q/1M+Zhg==}
+ '@rollup/rollup-linux-arm64-gnu@4.31.0':
+ resolution: {integrity: sha512-JyFFshbN5xwy6fulZ8B/8qOqENRmDdEkcIMF0Zz+RsfamEW+Zabl5jAb0IozP/8UKnJ7g2FtZZPEUIAlUSX8cA==}
cpu: [arm64]
os: [linux]
- '@rollup/rollup-linux-arm64-musl@4.23.0':
- resolution: {integrity: sha512-5QT/Di5FbGNPaVw8hHO1wETunwkPuZBIu6W+5GNArlKHD9fkMHy7vS8zGHJk38oObXfWdsuLMogD4sBySLJ54g==}
+ '@rollup/rollup-linux-arm64-musl@4.31.0':
+ resolution: {integrity: sha512-kpQXQ0UPFeMPmPYksiBL9WS/BDiQEjRGMfklVIsA0Sng347H8W2iexch+IEwaR7OVSKtr2ZFxggt11zVIlZ25g==}
cpu: [arm64]
os: [linux]
- '@rollup/rollup-linux-powerpc64le-gnu@4.23.0':
- resolution: {integrity: sha512-Sefl6vPyn5axzCsO13r1sHLcmPuiSOrKIImnq34CBurntcJ+lkQgAaTt/9JkgGmaZJ+OkaHmAJl4Bfd0DmdtOQ==}
+ '@rollup/rollup-linux-loongarch64-gnu@4.31.0':
+ resolution: {integrity: sha512-pMlxLjt60iQTzt9iBb3jZphFIl55a70wexvo8p+vVFK+7ifTRookdoXX3bOsRdmfD+OKnMozKO6XM4zR0sHRrQ==}
+ cpu: [loong64]
+ os: [linux]
+
+ '@rollup/rollup-linux-powerpc64le-gnu@4.31.0':
+ resolution: {integrity: sha512-D7TXT7I/uKEuWiRkEFbed1UUYZwcJDU4vZQdPTcepK7ecPhzKOYk4Er2YR4uHKme4qDeIh6N3XrLfpuM7vzRWQ==}
cpu: [ppc64]
os: [linux]
- '@rollup/rollup-linux-riscv64-gnu@4.23.0':
- resolution: {integrity: sha512-o4QI2KU/QbP7ZExMse6ULotdV3oJUYMrdx3rBZCgUF3ur3gJPfe8Fuasn6tia16c5kZBBw0aTmaUygad6VB/hQ==}
+ '@rollup/rollup-linux-riscv64-gnu@4.31.0':
+ resolution: {integrity: sha512-wal2Tc8O5lMBtoePLBYRKj2CImUCJ4UNGJlLwspx7QApYny7K1cUYlzQ/4IGQBLmm+y0RS7dwc3TDO/pmcneTw==}
cpu: [riscv64]
os: [linux]
- '@rollup/rollup-linux-s390x-gnu@4.23.0':
- resolution: {integrity: sha512-+bxqx+V/D4FGrpXzPGKp/SEZIZ8cIW3K7wOtcJAoCrmXvzRtmdUhYNbgd+RztLzfDEfA2WtKj5F4tcbNPuqgeg==}
+ '@rollup/rollup-linux-s390x-gnu@4.31.0':
+ resolution: {integrity: sha512-O1o5EUI0+RRMkK9wiTVpk2tyzXdXefHtRTIjBbmFREmNMy7pFeYXCFGbhKFwISA3UOExlo5GGUuuj3oMKdK6JQ==}
cpu: [s390x]
os: [linux]
- '@rollup/rollup-linux-x64-gnu@4.23.0':
- resolution: {integrity: sha512-I/eXsdVoCKtSgK9OwyQKPAfricWKUMNCwJKtatRYMmDo5N859tbO3UsBw5kT3dU1n6ZcM1JDzPRSGhAUkxfLxw==}
+ '@rollup/rollup-linux-x64-gnu@4.31.0':
+ resolution: {integrity: sha512-zSoHl356vKnNxwOWnLd60ixHNPRBglxpv2g7q0Cd3Pmr561gf0HiAcUBRL3S1vPqRC17Zo2CX/9cPkqTIiai1g==}
cpu: [x64]
os: [linux]
- '@rollup/rollup-linux-x64-musl@4.23.0':
- resolution: {integrity: sha512-4ZoDZy5ShLbbe1KPSafbFh1vbl0asTVfkABC7eWqIs01+66ncM82YJxV2VtV3YVJTqq2P8HMx3DCoRSWB/N3rw==}
+ '@rollup/rollup-linux-x64-musl@4.31.0':
+ resolution: {integrity: sha512-ypB/HMtcSGhKUQNiFwqgdclWNRrAYDH8iMYH4etw/ZlGwiTVxBz2tDrGRrPlfZu6QjXwtd+C3Zib5pFqID97ZA==}
cpu: [x64]
os: [linux]
- '@rollup/rollup-win32-arm64-msvc@4.23.0':
- resolution: {integrity: sha512-+5Ky8dhft4STaOEbZu3/NU4QIyYssKO+r1cD3FzuusA0vO5gso15on7qGzKdNXnc1gOrsgCqZjRw1w+zL4y4hQ==}
+ '@rollup/rollup-win32-arm64-msvc@4.31.0':
+ resolution: {integrity: sha512-JuhN2xdI/m8Hr+aVO3vspO7OQfUFO6bKLIRTAy0U15vmWjnZDLrEgCZ2s6+scAYaQVpYSh9tZtRijApw9IXyMw==}
cpu: [arm64]
os: [win32]
- '@rollup/rollup-win32-ia32-msvc@4.23.0':
- resolution: {integrity: sha512-0SPJk4cPZQhq9qA1UhIRumSE3+JJIBBjtlGl5PNC///BoaByckNZd53rOYD0glpTkYFBQSt7AkMeLVPfx65+BQ==}
+ '@rollup/rollup-win32-ia32-msvc@4.31.0':
+ resolution: {integrity: sha512-U1xZZXYkvdf5MIWmftU8wrM5PPXzyaY1nGCI4KI4BFfoZxHamsIe+BtnPLIvvPykvQWlVbqUXdLa4aJUuilwLQ==}
cpu: [ia32]
os: [win32]
- '@rollup/rollup-win32-x64-msvc@4.23.0':
- resolution: {integrity: sha512-lqCK5GQC8fNo0+JvTSxcG7YB1UKYp8yrNLhsArlvPWN+16ovSZgoehlVHg6X0sSWPUkpjRBR5TuR12ZugowZ4g==}
+ '@rollup/rollup-win32-x64-msvc@4.31.0':
+ resolution: {integrity: sha512-ul8rnCsUumNln5YWwz0ted2ZHFhzhRRnkpBZ+YRuHoRAlUji9KChpOUOndY7uykrPEPXVbHLlsdo6v5yXo/TXw==}
cpu: [x64]
os: [win32]
@@ -1759,7 +1778,7 @@ packages:
resolution: {integrity: sha512-N2XSI2n3sQqp5w7Y/AN/L2XDjBIRGqXko+eDp42sydYSBeJuSm5a1sLf8zakmo8u7tA8NmBgoDLA1HeOESjp9A==}
engines: {node: ^18.0.0 || >=20.0.0}
peerDependencies:
- vite: 5.4.8
+ vite: 5.4.12
vue: ^3.2.25
'@vitest/coverage-v8@2.0.1':
@@ -2179,8 +2198,8 @@ packages:
resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==}
engines: {node: '>= 8.10.0'}
- chokidar@4.0.1:
- resolution: {integrity: sha512-n8enUVCED/KVRQlab1hr3MVpcVMvxtZjmEa956u+4YijlmQED223XMSYj2tLuKvr4jcCTzNNMpQDUer72MMmzA==}
+ chokidar@4.0.3:
+ resolution: {integrity: sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==}
engines: {node: '>= 14.16.0'}
cli-boxes@3.0.0:
@@ -3006,7 +3025,7 @@ packages:
resolution: {integrity: sha512-DiRMSIgj340z+zikqf0f3Pj0CTv2/xtdBMBIAO1EARat+QXxMwumbfK41Gi7f9IIBr+UVmomNcwFxVY2EM/vrw==}
hasBin: true
peerDependencies:
- vite: 5.4.8
+ vite: 5.4.12
hotkeys-js@3.8.7:
resolution: {integrity: sha512-ckAx3EkUr5XjDwjEHDorHxRO2Kb7z6Z2Sxul4MbBkN8Nho7XDslQsgMJT+CiJ5Z4TgRxxvKHEpuLE3imzqy4Lg==}
@@ -4074,8 +4093,8 @@ packages:
resolution: {integrity: sha512-56rxCq7G/XfB4EkXq9Egn5GCqugWvDFjafDOThIdMBsI15iqPqR5r15TfSr1YPYeEI19YeaXMCbY6u88Y76GLQ==}
engines: {node: ^10 || ^12 || >=14}
- postcss@8.4.49:
- resolution: {integrity: sha512-OCVPnIObs4N29kxTjzLfUryOkvZEq+pf8jTF0lg8E7uETuWHA+v7j3c/xJmiqpX450191LlmZfUKkXxkTry7nA==}
+ postcss@8.5.1:
+ resolution: {integrity: sha512-6oz2beyjc5VMn/KV1pPw8fliQkhBXrVn1Z3TVyqZxU8kZpzEKhBdmCFqI6ZbmGtamQvQGuU1sgPTk8ZrXDD7jQ==}
engines: {node: ^10 || ^12 || >=14}
prelude-ls@1.2.1:
@@ -4184,9 +4203,9 @@ packages:
resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==}
engines: {node: '>=8.10.0'}
- readdirp@4.0.2:
- resolution: {integrity: sha512-yDMz9g+VaZkqBYS/ozoBJwaBhTbZo3UNYQHNRw1D3UFQB8oHB4uS/tAODO+ZLjGWmUbKnIlOWO+aaIiAxrUWHA==}
- engines: {node: '>= 14.16.0'}
+ readdirp@4.1.1:
+ resolution: {integrity: sha512-h80JrZu/MHUZCyHu5ciuoI0+WxsCxzxJTILn6Fs8rxSnFPh+UVHYfeIxK1nVGugMqkfC4vJcBOYbkfkwYK0+gw==}
+ engines: {node: '>= 14.18.0'}
recordrtc@5.6.2:
resolution: {integrity: sha512-1QNKKNtl7+KcwD1lyOgP3ZlbiJ1d0HtXnypUy7yq49xEERxk31PHvE9RCciDrulPCY7WJ+oz0R9hpNxgsIurGQ==}
@@ -4241,8 +4260,8 @@ packages:
deprecated: Rimraf versions prior to v4 are no longer supported
hasBin: true
- rollup@4.23.0:
- resolution: {integrity: sha512-vXB4IT9/KLDrS2WRXmY22sVB2wTsTwkpxjB8Q3mnakTENcYw3FRmfdYDy/acNmls+lHmDazgrRjK/yQ6hQAtwA==}
+ rollup@4.31.0:
+ resolution: {integrity: sha512-9cCE8P4rZLx9+PjoyqHLs31V9a9Vpvfo4qNcs6JCiGWYhw2gijSetFbH6SSy1whnkgcefnUwr8sad7tgqsGvnw==}
engines: {node: '>=18.0.0', npm: '>=8.0.0'}
hasBin: true
@@ -4763,10 +4782,10 @@ packages:
vite-plugin-ruby@5.0.0:
resolution: {integrity: sha512-c8PjTp21Ah/ttgnNUyu0qvCXZI08Jr9I24oUKg3TRIRhF5GcOZ++6wtlTCrNFd9COEQbpXHxlRIXd/MEg0iZJw==}
peerDependencies:
- vite: 5.4.8
+ vite: 5.4.12
- vite@5.4.8:
- resolution: {integrity: sha512-FqrItQ4DT1NC4zCUqMB4c4AZORMKIa0m8/URVCZ77OZ/QSNeJ54bU1vrFADbDsuwfIPcgknRkmqakQcgnL4GiQ==}
+ vite@5.4.12:
+ resolution: {integrity: sha512-KwUaKB27TvWwDJr1GjjWthLMATbGEbeWYZIbGZ5qFIsgPP3vWzLu4cVooqhm5/Z2SPDUMjyPVjTztm5tYKwQxA==}
engines: {node: ^18.0.0 || >=20.0.0}
hasBin: true
peerDependencies:
@@ -5557,10 +5576,10 @@ snapshots:
highlight.js: 11.10.0
vue: 3.5.12(typescript@5.6.2)
- '@histoire/app@0.17.17(vite@5.4.8(@types/node@22.7.0)(sass@1.79.3)(terser@5.33.0))':
+ '@histoire/app@0.17.17(vite@5.4.12(@types/node@22.7.0)(sass@1.79.3)(terser@5.33.0))':
dependencies:
- '@histoire/controls': 0.17.17(vite@5.4.8(@types/node@22.7.0)(sass@1.79.3)(terser@5.33.0))
- '@histoire/shared': 0.17.17(vite@5.4.8(@types/node@22.7.0)(sass@1.79.3)(terser@5.33.0))
+ '@histoire/controls': 0.17.17(vite@5.4.12(@types/node@22.7.0)(sass@1.79.3)(terser@5.33.0))
+ '@histoire/shared': 0.17.17(vite@5.4.12(@types/node@22.7.0)(sass@1.79.3)(terser@5.33.0))
'@histoire/vendors': 0.17.17
'@types/flexsearch': 0.7.6
flexsearch: 0.7.21
@@ -5568,7 +5587,7 @@ snapshots:
transitivePeerDependencies:
- vite
- '@histoire/controls@0.17.17(vite@5.4.8(@types/node@22.7.0)(sass@1.79.3)(terser@5.33.0))':
+ '@histoire/controls@0.17.17(vite@5.4.12(@types/node@22.7.0)(sass@1.79.3)(terser@5.33.0))':
dependencies:
'@codemirror/commands': 6.7.0
'@codemirror/lang-json': 6.0.1
@@ -5577,26 +5596,26 @@ snapshots:
'@codemirror/state': 6.4.1
'@codemirror/theme-one-dark': 6.1.2
'@codemirror/view': 6.34.1
- '@histoire/shared': 0.17.17(vite@5.4.8(@types/node@22.7.0)(sass@1.79.3)(terser@5.33.0))
+ '@histoire/shared': 0.17.17(vite@5.4.12(@types/node@22.7.0)(sass@1.79.3)(terser@5.33.0))
'@histoire/vendors': 0.17.17
transitivePeerDependencies:
- vite
- '@histoire/plugin-vue@0.17.15(histoire@0.17.15(@types/node@22.7.0)(sass@1.79.3)(terser@5.33.0)(vite@5.4.8(@types/node@22.7.0)(sass@1.79.3)(terser@5.33.0)))(vite@5.4.8(@types/node@22.7.0)(sass@1.79.3)(terser@5.33.0))(vue@3.5.12(typescript@5.6.2))':
+ '@histoire/plugin-vue@0.17.15(histoire@0.17.15(@types/node@22.7.0)(sass@1.79.3)(terser@5.33.0)(vite@5.4.12(@types/node@22.7.0)(sass@1.79.3)(terser@5.33.0)))(vite@5.4.12(@types/node@22.7.0)(sass@1.79.3)(terser@5.33.0))(vue@3.5.12(typescript@5.6.2))':
dependencies:
- '@histoire/controls': 0.17.17(vite@5.4.8(@types/node@22.7.0)(sass@1.79.3)(terser@5.33.0))
- '@histoire/shared': 0.17.17(vite@5.4.8(@types/node@22.7.0)(sass@1.79.3)(terser@5.33.0))
+ '@histoire/controls': 0.17.17(vite@5.4.12(@types/node@22.7.0)(sass@1.79.3)(terser@5.33.0))
+ '@histoire/shared': 0.17.17(vite@5.4.12(@types/node@22.7.0)(sass@1.79.3)(terser@5.33.0))
'@histoire/vendors': 0.17.17
change-case: 4.1.2
globby: 13.2.2
- histoire: 0.17.15(@types/node@22.7.0)(sass@1.79.3)(terser@5.33.0)(vite@5.4.8(@types/node@22.7.0)(sass@1.79.3)(terser@5.33.0))
+ histoire: 0.17.15(@types/node@22.7.0)(sass@1.79.3)(terser@5.33.0)(vite@5.4.12(@types/node@22.7.0)(sass@1.79.3)(terser@5.33.0))
launch-editor: 2.9.1
pathe: 1.1.2
vue: 3.5.12(typescript@5.6.2)
transitivePeerDependencies:
- vite
- '@histoire/shared@0.17.17(vite@5.4.8(@types/node@22.7.0)(sass@1.79.3)(terser@5.33.0))':
+ '@histoire/shared@0.17.17(vite@5.4.12(@types/node@22.7.0)(sass@1.79.3)(terser@5.33.0))':
dependencies:
'@histoire/vendors': 0.17.17
'@types/fs-extra': 9.0.13
@@ -5604,7 +5623,7 @@ snapshots:
chokidar: 3.6.0
pathe: 1.1.2
picocolors: 1.1.0
- vite: 5.4.8(@types/node@22.7.0)(sass@1.79.3)(terser@5.33.0)
+ vite: 5.4.12(@types/node@22.7.0)(sass@1.79.3)(terser@5.33.0)
'@histoire/vendors@0.17.17': {}
@@ -5691,13 +5710,20 @@ snapshots:
'@jridgewell/sourcemap-codec': 1.5.0
'@jridgewell/trace-mapping': 0.3.25
+ '@jridgewell/gen-mapping@0.3.8':
+ dependencies:
+ '@jridgewell/set-array': 1.2.1
+ '@jridgewell/sourcemap-codec': 1.5.0
+ '@jridgewell/trace-mapping': 0.3.25
+ optional: true
+
'@jridgewell/resolve-uri@3.1.1': {}
'@jridgewell/set-array@1.2.1': {}
'@jridgewell/source-map@0.3.6':
dependencies:
- '@jridgewell/gen-mapping': 0.3.5
+ '@jridgewell/gen-mapping': 0.3.8
'@jridgewell/trace-mapping': 0.3.25
optional: true
@@ -5790,52 +5816,61 @@ snapshots:
'@rails/ujs@7.1.400': {}
- '@rollup/rollup-android-arm-eabi@4.23.0':
+ '@rollup/rollup-android-arm-eabi@4.31.0':
optional: true
- '@rollup/rollup-android-arm64@4.23.0':
+ '@rollup/rollup-android-arm64@4.31.0':
optional: true
- '@rollup/rollup-darwin-arm64@4.23.0':
+ '@rollup/rollup-darwin-arm64@4.31.0':
optional: true
- '@rollup/rollup-darwin-x64@4.23.0':
+ '@rollup/rollup-darwin-x64@4.31.0':
optional: true
- '@rollup/rollup-linux-arm-gnueabihf@4.23.0':
+ '@rollup/rollup-freebsd-arm64@4.31.0':
optional: true
- '@rollup/rollup-linux-arm-musleabihf@4.23.0':
+ '@rollup/rollup-freebsd-x64@4.31.0':
optional: true
- '@rollup/rollup-linux-arm64-gnu@4.23.0':
+ '@rollup/rollup-linux-arm-gnueabihf@4.31.0':
optional: true
- '@rollup/rollup-linux-arm64-musl@4.23.0':
+ '@rollup/rollup-linux-arm-musleabihf@4.31.0':
optional: true
- '@rollup/rollup-linux-powerpc64le-gnu@4.23.0':
+ '@rollup/rollup-linux-arm64-gnu@4.31.0':
optional: true
- '@rollup/rollup-linux-riscv64-gnu@4.23.0':
+ '@rollup/rollup-linux-arm64-musl@4.31.0':
optional: true
- '@rollup/rollup-linux-s390x-gnu@4.23.0':
+ '@rollup/rollup-linux-loongarch64-gnu@4.31.0':
optional: true
- '@rollup/rollup-linux-x64-gnu@4.23.0':
+ '@rollup/rollup-linux-powerpc64le-gnu@4.31.0':
optional: true
- '@rollup/rollup-linux-x64-musl@4.23.0':
+ '@rollup/rollup-linux-riscv64-gnu@4.31.0':
optional: true
- '@rollup/rollup-win32-arm64-msvc@4.23.0':
+ '@rollup/rollup-linux-s390x-gnu@4.31.0':
optional: true
- '@rollup/rollup-win32-ia32-msvc@4.23.0':
+ '@rollup/rollup-linux-x64-gnu@4.31.0':
optional: true
- '@rollup/rollup-win32-x64-msvc@4.23.0':
+ '@rollup/rollup-linux-x64-musl@4.31.0':
+ optional: true
+
+ '@rollup/rollup-win32-arm64-msvc@4.31.0':
+ optional: true
+
+ '@rollup/rollup-win32-ia32-msvc@4.31.0':
+ optional: true
+
+ '@rollup/rollup-win32-x64-msvc@4.31.0':
optional: true
'@rtsao/scc@1.1.0': {}
@@ -6638,9 +6673,9 @@ snapshots:
global: 4.4.0
is-function: 1.0.2
- '@vitejs/plugin-vue@5.1.4(vite@5.4.8(@types/node@22.7.0)(sass@1.79.3)(terser@5.33.0))(vue@3.5.12(typescript@5.6.2))':
+ '@vitejs/plugin-vue@5.1.4(vite@5.4.12(@types/node@22.7.0)(sass@1.79.3)(terser@5.33.0))(vue@3.5.12(typescript@5.6.2))':
dependencies:
- vite: 5.4.8(@types/node@22.7.0)(sass@1.79.3)(terser@5.33.0)
+ vite: 5.4.12(@types/node@22.7.0)(sass@1.79.3)(terser@5.33.0)
vue: 3.5.12(typescript@5.6.2)
'@vitest/coverage-v8@2.0.1(vitest@2.0.1(@types/node@22.7.0)(jsdom@24.1.3)(sass@1.79.3)(terser@5.33.0))':
@@ -6738,7 +6773,7 @@ snapshots:
'@vue/shared': 3.5.12
estree-walker: 2.0.2
magic-string: 0.30.12
- postcss: 8.4.47
+ postcss: 8.5.1
source-map-js: 1.2.1
'@vue/compiler-sfc@3.5.13':
@@ -6750,7 +6785,7 @@ snapshots:
'@vue/shared': 3.5.13
estree-walker: 2.0.2
magic-string: 0.30.14
- postcss: 8.4.49
+ postcss: 8.5.1
source-map-js: 1.2.1
'@vue/compiler-sfc@3.5.8':
@@ -7223,9 +7258,9 @@ snapshots:
optionalDependencies:
fsevents: 2.3.3
- chokidar@4.0.1:
+ chokidar@4.0.3:
dependencies:
- readdirp: 4.0.2
+ readdirp: 4.1.1
optional: true
cli-boxes@3.0.0: {}
@@ -8172,12 +8207,12 @@ snapshots:
highlight.js@11.10.0: {}
- histoire@0.17.15(@types/node@22.7.0)(sass@1.79.3)(terser@5.33.0)(vite@5.4.8(@types/node@22.7.0)(sass@1.79.3)(terser@5.33.0)):
+ histoire@0.17.15(@types/node@22.7.0)(sass@1.79.3)(terser@5.33.0)(vite@5.4.12(@types/node@22.7.0)(sass@1.79.3)(terser@5.33.0)):
dependencies:
'@akryum/tinypool': 0.3.1
- '@histoire/app': 0.17.17(vite@5.4.8(@types/node@22.7.0)(sass@1.79.3)(terser@5.33.0))
- '@histoire/controls': 0.17.17(vite@5.4.8(@types/node@22.7.0)(sass@1.79.3)(terser@5.33.0))
- '@histoire/shared': 0.17.17(vite@5.4.8(@types/node@22.7.0)(sass@1.79.3)(terser@5.33.0))
+ '@histoire/app': 0.17.17(vite@5.4.12(@types/node@22.7.0)(sass@1.79.3)(terser@5.33.0))
+ '@histoire/controls': 0.17.17(vite@5.4.12(@types/node@22.7.0)(sass@1.79.3)(terser@5.33.0))
+ '@histoire/shared': 0.17.17(vite@5.4.12(@types/node@22.7.0)(sass@1.79.3)(terser@5.33.0))
'@histoire/vendors': 0.17.17
'@types/flexsearch': 0.7.6
'@types/markdown-it': 12.2.3
@@ -8204,7 +8239,7 @@ snapshots:
sade: 1.8.1
shiki-es: 0.2.0
sirv: 2.0.4
- vite: 5.4.8(@types/node@22.7.0)(sass@1.79.3)(terser@5.33.0)
+ vite: 5.4.12(@types/node@22.7.0)(sass@1.79.3)(terser@5.33.0)
vite-node: 2.0.1(@types/node@22.7.0)(sass@1.79.3)(terser@5.33.0)
transitivePeerDependencies:
- '@types/node'
@@ -9355,7 +9390,7 @@ snapshots:
picocolors: 1.1.0
source-map-js: 1.2.1
- postcss@8.4.49:
+ postcss@8.5.1:
dependencies:
nanoid: 3.3.8
picocolors: 1.1.1
@@ -9490,7 +9525,7 @@ snapshots:
dependencies:
picomatch: 2.3.1
- readdirp@4.0.2:
+ readdirp@4.1.1:
optional: true
recordrtc@5.6.2: {}
@@ -9542,26 +9577,29 @@ snapshots:
dependencies:
glob: 7.2.3
- rollup@4.23.0:
+ rollup@4.31.0:
dependencies:
'@types/estree': 1.0.6
optionalDependencies:
- '@rollup/rollup-android-arm-eabi': 4.23.0
- '@rollup/rollup-android-arm64': 4.23.0
- '@rollup/rollup-darwin-arm64': 4.23.0
- '@rollup/rollup-darwin-x64': 4.23.0
- '@rollup/rollup-linux-arm-gnueabihf': 4.23.0
- '@rollup/rollup-linux-arm-musleabihf': 4.23.0
- '@rollup/rollup-linux-arm64-gnu': 4.23.0
- '@rollup/rollup-linux-arm64-musl': 4.23.0
- '@rollup/rollup-linux-powerpc64le-gnu': 4.23.0
- '@rollup/rollup-linux-riscv64-gnu': 4.23.0
- '@rollup/rollup-linux-s390x-gnu': 4.23.0
- '@rollup/rollup-linux-x64-gnu': 4.23.0
- '@rollup/rollup-linux-x64-musl': 4.23.0
- '@rollup/rollup-win32-arm64-msvc': 4.23.0
- '@rollup/rollup-win32-ia32-msvc': 4.23.0
- '@rollup/rollup-win32-x64-msvc': 4.23.0
+ '@rollup/rollup-android-arm-eabi': 4.31.0
+ '@rollup/rollup-android-arm64': 4.31.0
+ '@rollup/rollup-darwin-arm64': 4.31.0
+ '@rollup/rollup-darwin-x64': 4.31.0
+ '@rollup/rollup-freebsd-arm64': 4.31.0
+ '@rollup/rollup-freebsd-x64': 4.31.0
+ '@rollup/rollup-linux-arm-gnueabihf': 4.31.0
+ '@rollup/rollup-linux-arm-musleabihf': 4.31.0
+ '@rollup/rollup-linux-arm64-gnu': 4.31.0
+ '@rollup/rollup-linux-arm64-musl': 4.31.0
+ '@rollup/rollup-linux-loongarch64-gnu': 4.31.0
+ '@rollup/rollup-linux-powerpc64le-gnu': 4.31.0
+ '@rollup/rollup-linux-riscv64-gnu': 4.31.0
+ '@rollup/rollup-linux-s390x-gnu': 4.31.0
+ '@rollup/rollup-linux-x64-gnu': 4.31.0
+ '@rollup/rollup-linux-x64-musl': 4.31.0
+ '@rollup/rollup-win32-arm64-msvc': 4.31.0
+ '@rollup/rollup-win32-ia32-msvc': 4.31.0
+ '@rollup/rollup-win32-x64-msvc': 4.31.0
fsevents: 2.3.3
rope-sequence@1.3.2: {}
@@ -9616,7 +9654,7 @@ snapshots:
sass@1.79.3:
dependencies:
- chokidar: 4.0.1
+ chokidar: 4.0.3
immutable: 4.3.7
source-map-js: 1.2.1
optional: true
@@ -10154,7 +10192,7 @@ snapshots:
debug: 4.3.7
pathe: 1.1.2
picocolors: 1.1.0
- vite: 5.4.8(@types/node@22.7.0)(sass@1.79.3)(terser@5.33.0)
+ vite: 5.4.12(@types/node@22.7.0)(sass@1.79.3)(terser@5.33.0)
transitivePeerDependencies:
- '@types/node'
- less
@@ -10166,19 +10204,19 @@ snapshots:
- supports-color
- terser
- vite-plugin-ruby@5.0.0(vite@5.4.8(@types/node@22.7.0)(sass@1.79.3)(terser@5.33.0)):
+ vite-plugin-ruby@5.0.0(vite@5.4.12(@types/node@22.7.0)(sass@1.79.3)(terser@5.33.0)):
dependencies:
debug: 4.3.5
fast-glob: 3.3.2
- vite: 5.4.8(@types/node@22.7.0)(sass@1.79.3)(terser@5.33.0)
+ vite: 5.4.12(@types/node@22.7.0)(sass@1.79.3)(terser@5.33.0)
transitivePeerDependencies:
- supports-color
- vite@5.4.8(@types/node@22.7.0)(sass@1.79.3)(terser@5.33.0):
+ vite@5.4.12(@types/node@22.7.0)(sass@1.79.3)(terser@5.33.0):
dependencies:
esbuild: 0.21.5
- postcss: 8.4.47
- rollup: 4.23.0
+ postcss: 8.5.1
+ rollup: 4.31.0
optionalDependencies:
'@types/node': 22.7.0
fsevents: 2.3.3
@@ -10202,7 +10240,7 @@ snapshots:
std-env: 3.7.0
tinybench: 2.9.0
tinypool: 1.0.0
- vite: 5.4.8(@types/node@22.7.0)(sass@1.79.3)(terser@5.33.0)
+ vite: 5.4.12(@types/node@22.7.0)(sass@1.79.3)(terser@5.33.0)
vite-node: 2.0.1(@types/node@22.7.0)(sass@1.79.3)(terser@5.33.0)
why-is-node-running: 2.3.0
optionalDependencies:
From f2a7e1da6b3866407aaf2d4ba3d237275b8ac8bd Mon Sep 17 00:00:00 2001
From: Shivam Mishra
Date: Wed, 5 Feb 2025 23:42:29 +0530
Subject: [PATCH 12/21] fix: Corepack pnpm issue (#10840)
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
So, a while back Circle CI builds and Heroku builds started to fail.
From all the threads I read, it seems like the [npm registry rotated
it's signing
keys](https://github.com/pnpm/pnpm/issues/9014#issuecomment-2616589753)
New pnpm versions were signed with the new key. Corepack, however,
bundles a static set of trusted keys (from Node’s release), so it
continued verifying signatures only against the old key. When it
encountered packages signed with the new key, Corepack’s integrity check
failed with “Cannot find matching keyid” errors.This mismatch caused
Corepack’s integrity check to fail with “Cannot find matching keyid”
errors.
Workarounds include the following
1. Updating Corepack (to 0.31.0), they [upgraded their
package](https://github.com/nodejs/corepack/releases/tag/v0.31.0) to
include the new integrity check keys. But we seldom control what's going
on with the CI, also, updating this across our scripts is going to be a
painful task. Besides Heroku has [made some
fixes](https://github.com/heroku/buildpacks-nodejs/pull/1010) around
this
2. Disabling integrity checks 🔥 #YOLO
3. Pinning `pnpm` to older versions, or pinning it to a newer version
with the checksum in place.
Doing the third one here, running `corepack use pnpm@9.15.5` fixes this,
[ref](https://github.com/pnpm/pnpm/issues/9014#issuecomment-2623761494)
We can get rid of this over time as CDN caches used by build systems are
refreshed. But the change in this PR is not disruptive in anyway, only
rigidly secure.
Fixes: https://github.com/chatwoot/chatwoot/issues/10832
---
Here are the threads to follow
- https://github.com/pnpm/pnpm/issues/9014
- https://github.com/pnpm/pnpm/issues/9029
- https://github.com/nodejs/corepack/issues/612
- https://github.com/nodejs/corepack/issues/616
- https://github.com/heroku/buildpacks-nodejs/pull/1010
---------
Co-authored-by: Vishnu Narayanan
---
.circleci/config.yml | 2 +-
.devcontainer/docker-compose.yml | 24 ++++++++--------
.github/workflows/frontend-fe.yml | 4 +--
.github/workflows/run_foss_spec.yml | 3 +-
.github/workflows/size-limit.yml | 10 ++-----
deployment/setup_20.04.sh | 10 +++----
docker/Dockerfile | 43 +++++++++++++++++++++--------
package.json | 7 +++--
8 files changed, 58 insertions(+), 45 deletions(-)
diff --git a/.circleci/config.yml b/.circleci/config.yml
index db7f87d5c..bc7053130 100644
--- a/.circleci/config.yml
+++ b/.circleci/config.yml
@@ -19,7 +19,7 @@ jobs:
steps:
- checkout
- node/install:
- node-version: '20.12'
+ node-version: '23.7'
- node/install-pnpm
- node/install-packages:
pkg-manager: pnpm
diff --git a/.devcontainer/docker-compose.yml b/.devcontainer/docker-compose.yml
index 8b0704bfa..c5530ac17 100644
--- a/.devcontainer/docker-compose.yml
+++ b/.devcontainer/docker-compose.yml
@@ -5,30 +5,30 @@
version: '3'
services:
- base:
+ base:
build:
context: ..
dockerfile: .devcontainer/Dockerfile.base
args:
- VARIANT: "ubuntu-22.04"
- NODE_VERSION: "20.9.0"
- RUBY_VERSION: "3.3.3"
+ VARIANT: 'ubuntu-22.04'
+ NODE_VERSION: '23.7.0'
+ RUBY_VERSION: '3.3.3'
# On Linux, you may need to update USER_UID and USER_GID below if not your local UID is not 1000.
- USER_UID: "1000"
- USER_GID: "1000"
+ USER_UID: '1000'
+ USER_GID: '1000'
image: base:latest
-
+
app:
build:
context: ..
dockerfile: .devcontainer/Dockerfile
args:
- VARIANT: "ubuntu-22.04"
- NODE_VERSION: "20.9.0"
- RUBY_VERSION: "3.3.3"
+ VARIANT: 'ubuntu-22.04'
+ NODE_VERSION: '23.7.0'
+ RUBY_VERSION: '3.3.3'
# On Linux, you may need to update USER_UID and USER_GID below if not your local UID is not 1000.
- USER_UID: "1000"
- USER_GID: "1000"
+ USER_UID: '1000'
+ USER_GID: '1000'
volumes:
- ..:/workspace:cached
diff --git a/.github/workflows/frontend-fe.yml b/.github/workflows/frontend-fe.yml
index 15bb6f5e9..5af4857e0 100644
--- a/.github/workflows/frontend-fe.yml
+++ b/.github/workflows/frontend-fe.yml
@@ -23,12 +23,10 @@ jobs:
bundler-cache: true
- uses: pnpm/action-setup@v4
- with:
- version: 9.3.0
- uses: actions/setup-node@v4
with:
- node-version: 20
+ node-version: 23
cache: 'pnpm'
- name: Install pnpm dependencies
diff --git a/.github/workflows/run_foss_spec.yml b/.github/workflows/run_foss_spec.yml
index 0af172849..5a9d35d0b 100644
--- a/.github/workflows/run_foss_spec.yml
+++ b/.github/workflows/run_foss_spec.yml
@@ -38,7 +38,6 @@ jobs:
- uses: actions/checkout@v4
- uses: pnpm/action-setup@v4
with:
- version: 9
ref: ${{ github.event.pull_request.head.ref }}
repository: ${{ github.event.pull_request.head.repo.full_name }}
@@ -48,7 +47,7 @@ jobs:
- uses: actions/setup-node@v4
with:
- node-version: 20
+ node-version: 23
cache: 'pnpm'
- name: Install pnpm dependencies
diff --git a/.github/workflows/size-limit.yml b/.github/workflows/size-limit.yml
index 0758ca7d0..724f69ec3 100644
--- a/.github/workflows/size-limit.yml
+++ b/.github/workflows/size-limit.yml
@@ -19,13 +19,11 @@ jobs:
with:
bundler-cache: true # runs 'bundle install' and caches installed gems automatically
- - uses: pnpm/action-setup@v2
- with:
- version: 9.3.0
+ - uses: pnpm/action-setup@v4
- uses: actions/setup-node@v4
with:
- node-version: 20
+ node-version: 23
cache: 'pnpm'
- name: pnpm
@@ -39,7 +37,7 @@ jobs:
- name: setup env
run: |
cp .env.example .env
-
+
- name: Run asset compile
run: bundle exec rake assets:precompile
env:
@@ -47,5 +45,3 @@ jobs:
- name: Size Check
run: pnpm run size
-
-
diff --git a/deployment/setup_20.04.sh b/deployment/setup_20.04.sh
index 3802f9f95..eddd1bc8b 100644
--- a/deployment/setup_20.04.sh
+++ b/deployment/setup_20.04.sh
@@ -177,7 +177,7 @@ function install_dependencies() {
echo "deb [signed-by=/usr/share/keyrings/redis-archive-keyring.gpg] https://packages.redis.io/deb $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/redis.list
mkdir -p /etc/apt/keyrings
curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | sudo gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg
- NODE_MAJOR=20
+ NODE_MAJOR=23
echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_$NODE_MAJOR.x nodistro main" | sudo tee /etc/apt/sources.list.d/nodesource.list
echo "deb http://apt.postgresql.org/pub/repos/apt/ $(lsb_release -cs)-pgdg 16" > /etc/apt/sources.list.d/pgdg.list
wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
@@ -779,15 +779,15 @@ function upgrade_node() {
# Parse major version number
major_version=$(echo "$current_version" | cut -d. -f1)
- if [ "$major_version" -ge 20 ]; then
- echo "Node.js is already version $current_version (>= 20.x). Skipping Node.js upgrade."
+ if [ "$major_version" -ge 23 ]; then
+ echo "Node.js is already version $current_version (>= 23.x). Skipping Node.js upgrade."
return
fi
- echo "Upgrading Node.js version to v20.x"
+ echo "Upgrading Node.js version to v23.x"
mkdir -p /etc/apt/keyrings
curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | sudo gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg
- NODE_MAJOR=20
+ NODE_MAJOR=23
echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_$NODE_MAJOR.x nodistro main" | sudo tee /etc/apt/sources.list.d/nodesource.list
apt-get update
diff --git a/docker/Dockerfile b/docker/Dockerfile
index d99aa6cf7..008884ce1 100644
--- a/docker/Dockerfile
+++ b/docker/Dockerfile
@@ -1,6 +1,12 @@
# pre-build stage
+FROM node:23-alpine as node
FROM ruby:3.3.3-alpine3.19 AS pre-builder
+ARG NODE_VERSION="23.7.0"
+ARG PNPM_VERSION="10.2.0"
+ENV NODE_VERSION=${NODE_VERSION}
+ENV PNPM_VERSION=${PNPM_VERSION}
+
# ARG default to production settings
# For development docker-compose file overrides ARGS
ARG BUNDLE_WITHOUT="development:test"
@@ -25,18 +31,24 @@ RUN apk update && apk add --no-cache \
tzdata \
postgresql-dev \
postgresql-client \
- nodejs=20.15.1-r0 \
git \
+ curl \
+ xz \
&& mkdir -p /var/app \
&& gem install bundler
-# Install pnpm and configure environment
-RUN wget -qO- https://get.pnpm.io/install.sh | ENV="$HOME/.shrc" SHELL="$(which sh)" sh - \
- && echo 'export PNPM_HOME="/root/.local/share/pnpm"' >> /root/.shrc \
- && echo 'export PATH="$PNPM_HOME:$PATH"' >> /root/.shrc \
- && export PNPM_HOME="/root/.local/share/pnpm" \
- && export PATH="$PNPM_HOME:$PATH" \
- && pnpm --version
+COPY --from=node /usr/local/bin/node /usr/local/bin/
+COPY --from=node /usr/local/lib/node_modules /usr/local/lib/node_modules
+RUN ln -s /usr/local/lib/node_modules/npm/bin/npm-cli.js /usr/local/bin/npm \
+ && ln -s /usr/local/lib/node_modules/npm/bin/npx-cli.js /usr/local/bin/npx
+
+RUN npm install -g pnpm@${PNPM_VERSION}
+
+RUN echo 'export PNPM_HOME="/root/.local/share/pnpm"' >> /root/.shrc \
+ && echo 'export PATH="$PNPM_HOME:$PATH"' >> /root/.shrc \
+ && export PNPM_HOME="/root/.local/share/pnpm" \
+ && export PATH="$PNPM_HOME:$PATH" \
+ && pnpm --version
# Persist the environment variables in Docker
ENV PNPM_HOME="/root/.local/share/pnpm"
@@ -86,6 +98,10 @@ RUN rm -rf /gems/ruby/3.3.0/cache/*.gem \
# final build stage
FROM ruby:3.3.3-alpine3.19
+ARG NODE_VERSION="23.7.0"
+ARG PNPM_VERSION="10.2.0"
+ENV NODE_VERSION=${NODE_VERSION}
+ENV PNPM_VERSION=${PNPM_VERSION}
ARG BUNDLE_WITHOUT="development:test"
ENV BUNDLE_WITHOUT ${BUNDLE_WITHOUT}
@@ -114,11 +130,14 @@ RUN apk update && apk add --no-cache \
vips \
&& gem install bundler
+COPY --from=node /usr/local/bin/node /usr/local/bin/
+COPY --from=node /usr/local/lib/node_modules /usr/local/lib/node_modules
+
RUN if [ "$RAILS_ENV" != "production" ]; then \
- apk add --no-cache nodejs=20.15.1-r0; \
- # Install pnpm and configure environment
- wget -qO- https://get.pnpm.io/install.sh | ENV="$HOME/.shrc" SHELL="$(which sh)" sh - \
- && source /root/.shrc \
+ apk add --no-cache curl \
+ && ln -s /usr/local/lib/node_modules/npm/bin/npm-cli.js /usr/local/bin/npm \
+ && ln -s /usr/local/lib/node_modules/npm/bin/npx-cli.js /usr/local/bin/npx \
+ && npm install -g pnpm@${PNPM_VERSION} \
&& pnpm --version; \
fi
diff --git a/package.json b/package.json
index 9118e551a..62ef883b4 100644
--- a/package.json
+++ b/package.json
@@ -139,8 +139,8 @@
"vitest": "2.0.1"
},
"engines": {
- "node": "20.x",
- "pnpm": "9.x"
+ "node": "23.x",
+ "pnpm": "10.x"
},
"husky": {
"hooks": {
@@ -162,5 +162,6 @@
"*.scss": [
"scss-lint"
]
- }
+ },
+ "packageManager": "pnpm@10.2.0+sha512.0d27364e0139c6aadeed65ada153135e0ca96c8da42123bd50047f961339dc7a758fc2e944b428f52be570d1bd3372455c1c65fa2e7aa0bfbf931190f9552001"
}
From c75041309412f27a3cb90240f9de77b75cf41e87 Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Wed, 5 Feb 2025 12:48:27 -0800
Subject: [PATCH 13/21] chore(deps): Bump vitest from 2.0.1 to 3.0.5 (#10839)
Bumps
[vitest](https://github.com/vitest-dev/vitest/tree/HEAD/packages/vitest)
from 2.0.1 to 3.0.5
---------
Signed-off-by: dependabot[bot]
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Pranav
Co-authored-by: Pranav
---
package.json | 6 +-
pnpm-lock.yaml | 413 ++++++++++++++++++++-----------------------------
2 files changed, 168 insertions(+), 251 deletions(-)
diff --git a/package.json b/package.json
index 62ef883b4..b3fbda8f0 100644
--- a/package.json
+++ b/package.json
@@ -111,7 +111,7 @@
"@iconify-json/ri": "^1.2.3",
"@iconify-json/teenyicons": "^1.2.1",
"@size-limit/file": "^8.2.4",
- "@vitest/coverage-v8": "2.0.1",
+ "@vitest/coverage-v8": "3.0.5",
"@vue/test-utils": "^2.4.6",
"autoprefixer": "^10.4.20",
"eslint": "^8.57.0",
@@ -136,7 +136,7 @@
"tailwindcss": "^3.4.13",
"vite": "^5.4.12",
"vite-plugin-ruby": "^5.0.0",
- "vitest": "2.0.1"
+ "vitest": "3.0.5"
},
"engines": {
"node": "23.x",
@@ -151,7 +151,7 @@
"overrides": {
"vite-node": "2.0.1",
"vite": "5.4.12",
- "vitest": "2.0.1"
+ "vitest": "3.0.5"
}
},
"lint-staged": {
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 502485334..20142653e 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -7,7 +7,7 @@ settings:
overrides:
vite-node: 2.0.1
vite: 5.4.12
- vitest: 2.0.1
+ vitest: 3.0.5
importers:
@@ -252,8 +252,8 @@ importers:
specifier: ^8.2.4
version: 8.2.6(size-limit@8.2.6)
'@vitest/coverage-v8':
- specifier: 2.0.1
- version: 2.0.1(vitest@2.0.1(@types/node@22.7.0)(jsdom@24.1.3)(sass@1.79.3)(terser@5.33.0))
+ specifier: 3.0.5
+ version: 3.0.5(vitest@3.0.5(@types/node@22.7.0)(jsdom@24.1.3)(sass@1.79.3)(terser@5.33.0))
'@vue/test-utils':
specifier: ^2.4.6
version: 2.4.6
@@ -327,8 +327,8 @@ importers:
specifier: ^5.0.0
version: 5.0.0(vite@5.4.12(@types/node@22.7.0)(sass@1.79.3)(terser@5.33.0))
vitest:
- specifier: 2.0.1
- version: 2.0.1(@types/node@22.7.0)(jsdom@24.1.3)(sass@1.79.3)(terser@5.33.0)
+ specifier: 3.0.5
+ version: 3.0.5(@types/node@22.7.0)(jsdom@24.1.3)(sass@1.79.3)(terser@5.33.0)
packages:
@@ -354,18 +354,10 @@ packages:
'@antfu/utils@0.7.10':
resolution: {integrity: sha512-+562v9k4aI80m1+VuMHehNJWLOFjBnXn3tdOitzD0il5b7smkSBal4+a3oKiQTbrwMmN/TBUMDvbdoWDehgOww==}
- '@babel/helper-string-parser@7.24.8':
- resolution: {integrity: sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ==}
- engines: {node: '>=6.9.0'}
-
'@babel/helper-string-parser@7.25.9':
resolution: {integrity: sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==}
engines: {node: '>=6.9.0'}
- '@babel/helper-validator-identifier@7.24.7':
- resolution: {integrity: sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==}
- engines: {node: '>=6.9.0'}
-
'@babel/helper-validator-identifier@7.25.9':
resolution: {integrity: sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==}
engines: {node: '>=6.9.0'}
@@ -384,16 +376,13 @@ packages:
resolution: {integrity: sha512-VBj9MYyDb9tuLq7yzqjgzt6Q+IBQLrGZfdjOekyEirZPHxXWoTSGUTMrpsfi58Up73d13NfYLv8HT9vmznjzhQ==}
engines: {node: '>=6.9.0'}
- '@babel/types@7.25.6':
- resolution: {integrity: sha512-/l42B1qxpG6RdfYf343Uw1vmDjeNhneUXtzhojE7pDgfpEypmRhI6j1kr17XCVv4Cgl9HdAiQY2x0GwKm7rWCw==}
- engines: {node: '>=6.9.0'}
-
'@babel/types@7.26.0':
resolution: {integrity: sha512-Z/yiTPj+lDVnF7lWeKCIJzaIkI0vYO87dMpZ4bg4TDrFe4XXLFWL1TbXU27gBP3QccxV9mZICCrnjnYlJjXHOA==}
engines: {node: '>=6.9.0'}
- '@bcoe/v8-coverage@0.2.3':
- resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==}
+ '@bcoe/v8-coverage@1.0.2':
+ resolution: {integrity: sha512-6zABk/ECA/QYSCQ1NGiVwwbQerUCZ+TQbp64Q3AgmfNvurHH0j8TtXa1qbShXA6qqkpAj4V5W8pP6mLe1mcMqA==}
+ engines: {node: '>=18'}
'@breezystack/lamejs@1.2.7':
resolution: {integrity: sha512-6wc7ck65ctA75Hq7FYHTtTvGnYs6msgdxiSUICQ+A01nVOWg6rqouZB8IdyteRlfpYYiFovkf67dIeOgWIUzTA==}
@@ -916,10 +905,6 @@ packages:
resolution: {integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==}
engines: {node: '>=8'}
- '@jest/schemas@29.6.3':
- resolution: {integrity: sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==}
- engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
-
'@jridgewell/gen-mapping@0.3.5':
resolution: {integrity: sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==}
engines: {node: '>=6.0.0'}
@@ -1177,9 +1162,6 @@ packages:
peerDependencies:
vue: 2.x || 3.x
- '@sinclair/typebox@0.27.8':
- resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==}
-
'@sindresorhus/slugify@2.2.1':
resolution: {integrity: sha512-MkngSCRZ8JdSOCHRaYd+D01XhvU3Hjy6MGl06zhOk614hp9EOAp5gIkBeQg7wtmxpitU6eAL4kdiRMcJa2dlrw==}
engines: {node: '>=12'}
@@ -1781,25 +1763,43 @@ packages:
vite: 5.4.12
vue: ^3.2.25
- '@vitest/coverage-v8@2.0.1':
- resolution: {integrity: sha512-ACcSlJtWlravv0QyJSCO9rvm06msj6x0HooXouB0NXKG6PGxUN5VX4X8QEATfTMGsJlZLqWvq0dEY9W1V0rcSw==}
+ '@vitest/coverage-v8@3.0.5':
+ resolution: {integrity: sha512-zOOWIsj5fHh3jjGwQg+P+J1FW3s4jBu1Zqga0qW60yutsBtqEqNEJKWYh7cYn1yGD+1bdPsPdC/eL4eVK56xMg==}
peerDependencies:
- vitest: 2.0.1
+ '@vitest/browser': 3.0.5
+ vitest: 3.0.5
+ peerDependenciesMeta:
+ '@vitest/browser':
+ optional: true
- '@vitest/expect@2.0.1':
- resolution: {integrity: sha512-yw70WL3ZwzbI2O3MOXYP2Shf4vqVkS3q5FckLJ6lhT9VMMtDyWdofD53COZcoeuHwsBymdOZp99r5bOr5g+oeA==}
+ '@vitest/expect@3.0.5':
+ resolution: {integrity: sha512-nNIOqupgZ4v5jWuQx2DSlHLEs7Q4Oh/7AYwNyE+k0UQzG7tSmjPXShUikn1mpNGzYEN2jJbTvLejwShMitovBA==}
- '@vitest/runner@2.0.1':
- resolution: {integrity: sha512-XfcSXOGGxgR2dQ466ZYqf0ZtDLLDx9mZeQcKjQDLQ9y6Cmk2Wl7wxMuhiYK4Fo1VxCtLcFEGW2XpcfMuiD1Maw==}
+ '@vitest/mocker@3.0.5':
+ resolution: {integrity: sha512-CLPNBFBIE7x6aEGbIjaQAX03ZZlBMaWwAjBdMkIf/cAn6xzLTiM3zYqO/WAbieEjsAZir6tO71mzeHZoodThvw==}
+ peerDependencies:
+ msw: ^2.4.9
+ vite: 5.4.12
+ peerDependenciesMeta:
+ msw:
+ optional: true
+ vite:
+ optional: true
- '@vitest/snapshot@2.0.1':
- resolution: {integrity: sha512-rst79a4Q+J5vrvHRapdfK4BdqpMH0eF58jVY1vYeBo/1be+nkyenGI5SCSohmjf6MkCkI20/yo5oG+0R8qrAnA==}
+ '@vitest/pretty-format@3.0.5':
+ resolution: {integrity: sha512-CjUtdmpOcm4RVtB+up8r2vVDLR16Mgm/bYdkGFe3Yj/scRfCpbSi2W/BDSDcFK7ohw8UXvjMbOp9H4fByd/cOA==}
- '@vitest/spy@2.0.1':
- resolution: {integrity: sha512-NLkdxbSefAtJN56GtCNcB4GiHFb5i9q1uh4V229lrlTZt2fnwsTyjLuWIli1xwK2fQspJJmHXHyWx0Of3KTXWA==}
+ '@vitest/runner@3.0.5':
+ resolution: {integrity: sha512-BAiZFityFexZQi2yN4OX3OkJC6scwRo8EhRB0Z5HIGGgd2q+Nq29LgHU/+ovCtd0fOfXj5ZI6pwdlUmC5bpi8A==}
- '@vitest/utils@2.0.1':
- resolution: {integrity: sha512-STH+2fHZxlveh1mpU4tKzNgRk7RZJyr6kFGJYCI5vocdfqfPsQrgVC6k7dBWHfin5QNB4TLvRS0Ckly3Dt1uWw==}
+ '@vitest/snapshot@3.0.5':
+ resolution: {integrity: sha512-GJPZYcd7v8QNUJ7vRvLDmRwl+a1fGg4T/54lZXe+UOGy47F9yUfE18hRCtXL5aHN/AONu29NGzIXSVFh9K0feA==}
+
+ '@vitest/spy@3.0.5':
+ resolution: {integrity: sha512-5fOzHj0WbUNqPK6blI/8VzZdkBlQLnT25knX0r4dbZI9qoZDf3qAdjoMmDcLG5A83W6oUUFJgUd0EYBc2P5xqg==}
+
+ '@vitest/utils@3.0.5':
+ resolution: {integrity: sha512-N9AX0NUoUtVwKwy21JtwzaqR5L5R5A99GAbrHfCCXK1lp593i/3AZAXhSP43wRQuxYsflrdzEfXZFo1reR1Nkg==}
'@vue/compiler-core@3.5.12':
resolution: {integrity: sha512-ISyBTRMmMYagUxhcpyEH0hpXRd/KqDU4ymofPgl2XAkY9ZhQ+h0ovEZJIiPop13UmR/54oA2cgMDjgroRelaEw==}
@@ -1996,10 +1996,6 @@ packages:
resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==}
engines: {node: '>=8'}
- ansi-styles@5.2.0:
- resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==}
- engines: {node: '>=10'}
-
ansi-styles@6.2.1:
resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==}
engines: {node: '>=12'}
@@ -2164,8 +2160,8 @@ packages:
capital-case@1.0.4:
resolution: {integrity: sha512-ds37W8CytHgwnhGGTi88pcPyR15qoNkOpYwmMMfnWqqWgESapLqvDx6huFjQ5vqWSn2Z06173XNA7LtMOeUh1A==}
- chai@5.1.1:
- resolution: {integrity: sha512-pT1ZgP8rPNqUgieVaEY+ryQr6Q4HXNg8Ei9UnLUrjN4IA7dvQC5JB+/kxVcPNDHyBcc/26CXPkbNzq3qwrOEKA==}
+ chai@5.1.2:
+ resolution: {integrity: sha512-aGtmf24DW6MLHHG5gCx4zaI3uBq3KRtxeVs0DjFH6Z0rDNbsvTxFASFvdj79pxjxZ8/5u3PIiN3IwEIQkiiuPw==}
engines: {node: '>=12'}
chalk@4.1.2:
@@ -2417,17 +2413,8 @@ packages:
supports-color:
optional: true
- debug@4.3.6:
- resolution: {integrity: sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==}
- engines: {node: '>=6.0'}
- peerDependencies:
- supports-color: '*'
- peerDependenciesMeta:
- supports-color:
- optional: true
-
- debug@4.3.7:
- resolution: {integrity: sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==}
+ debug@4.4.0:
+ resolution: {integrity: sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==}
engines: {node: '>=6.0'}
peerDependencies:
supports-color: '*'
@@ -2470,10 +2457,6 @@ packages:
didyoumean@1.2.2:
resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==}
- diff-sequences@29.6.3:
- resolution: {integrity: sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==}
- engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
-
dir-glob@3.0.1:
resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==}
engines: {node: '>=8'}
@@ -2765,9 +2748,9 @@ packages:
resolution: {integrity: sha512-UduyVP7TLB5IcAQl+OzLyLcS/l32W/GLg+AhHJ+ow40FOk2U3SAllPwR44v4vmdFwIWqpdwxxpQbF1n5ta9seA==}
engines: {node: ^14.18.0 || ^16.14.0 || >=18.0.0}
- execa@8.0.1:
- resolution: {integrity: sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==}
- engines: {node: '>=16.17'}
+ expect-type@1.1.0:
+ resolution: {integrity: sha512-bFi65yM+xZgk+u/KRIpekdSYkTB5W1pEf0Lt8Q8Msh7b+eQ7LXVtIB1Bkm4fvclDEL1b2CZkMhv2mOeF8tMdkA==}
+ engines: {node: '>=12.0.0'}
extend-shallow@2.0.1:
resolution: {integrity: sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==}
@@ -2898,9 +2881,6 @@ packages:
resolution: {integrity: sha512-2nk+7SIVb14QrgXFHcm84tD4bKQz0RxPuMT8Ag5KPOq7J5fEmAg0UbXdTOSHqNuHSU28k55qnceesxXRZGzKWA==}
engines: {node: '>=18'}
- get-func-name@2.0.2:
- resolution: {integrity: sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==}
-
get-intrinsic@1.2.4:
resolution: {integrity: sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==}
engines: {node: '>= 0.4'}
@@ -2909,10 +2889,6 @@ packages:
resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==}
engines: {node: '>=10'}
- get-stream@8.0.1:
- resolution: {integrity: sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==}
- engines: {node: '>=16'}
-
get-symbol-description@1.0.0:
resolution: {integrity: sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==}
engines: {node: '>= 0.4'}
@@ -3064,10 +3040,6 @@ packages:
resolution: {integrity: sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ==}
engines: {node: '>=14.18.0'}
- human-signals@5.0.0:
- resolution: {integrity: sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==}
- engines: {node: '>=16.17.0'}
-
husky@7.0.4:
resolution: {integrity: sha512-vbaCKN2QLtP/vD4yvs6iz6hBEo6wkSzs8HpRah1Z6aGmF2KW5PdYuAd7uX5a+OyBZHBhd+TFLqgjUgytQr4RvQ==}
engines: {node: '>=12'}
@@ -3299,9 +3271,6 @@ packages:
resolution: {integrity: sha512-cEiJEAEoIbWfCZYKWhVwFuvPX1gETRYPw6LlaTKoxD3s2AkXzkCjnp6h0V77ozyqj0jakteJ4YqDJT830+lVGw==}
engines: {node: '>=14'}
- js-tokens@9.0.0:
- resolution: {integrity: sha512-WriZw1luRMlmV3LGJaR6QOJjWwgLUTf89OwT2lUOyjX2dJGBwgmIkbcz+7WFZjrZM635JOIR517++e/67CP9dQ==}
-
js-yaml@3.14.1:
resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==}
hasBin: true
@@ -3451,8 +3420,8 @@ packages:
resolution: {integrity: sha512-5UtUDQ/6edw4ofyljDNcOVJQ4c7OjDro4h3y8e1GQL5iYElYclVHJ3zeWchylvMaKnDbDilC8irOVyexnA/Slw==}
engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
- loupe@3.1.1:
- resolution: {integrity: sha512-edNu/8D5MKVfGVFRhFf8aAxiTM6Wumfz5XsaatSxlD3w4R1d/WEKUTydCdPGbl9K7QG/Ca3GnDV2sIKIpXRQcw==}
+ loupe@3.1.3:
+ resolution: {integrity: sha512-kkIp7XSkP78ZxJEsSxW3712C6teJVoeHHwgo9zJ380de7IYyJ2ISlxojcH2pC5OFLewESmnRi/+XCDIEEVyoug==}
lower-case@2.0.2:
resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==}
@@ -3470,14 +3439,11 @@ packages:
magic-string@0.30.11:
resolution: {integrity: sha512-+Wri9p0QHMy+545hKww7YAu5NyzF8iomPL/RQazugQ9+Ez4Ic3mERMd8ZTX5rfK944j+560ZJi8iAwgak1Ac7A==}
- magic-string@0.30.12:
- resolution: {integrity: sha512-Ea8I3sQMVXr8JhN4z+H/d8zwo+tYDgHE9+5G4Wnrwhs0gaK9fXTKx0Tw5Xwsd/bCPTTZNRAdpyzvoeORe9LYpw==}
+ magic-string@0.30.17:
+ resolution: {integrity: sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==}
- magic-string@0.30.14:
- resolution: {integrity: sha512-5c99P1WKTed11ZC0HMJOj6CDIue6F8ySu+bJL+85q1zBEIY8IklrJ1eiKC2NDRh3Ct3FcvmJPyQHb9erXMTJNw==}
-
- magicast@0.3.4:
- resolution: {integrity: sha512-TyDF/Pn36bBji9rWKHlZe+PZb6Mx5V8IHCSxk7X4aljM4e/vyDvZZYwHewdVaqiA0nb3ghfHU/6AUpDxWoER2Q==}
+ magicast@0.3.5:
+ resolution: {integrity: sha512-L0WhttDl+2BOsybvEOLK7fW3UA0OQ0IQ2d6Zl2x/a6vVRs3bAY0ECOSHHeL5jD+SbOpOCUEi0y1DgHEn9Qn1AQ==}
make-dir@4.0.0:
resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==}
@@ -3841,6 +3807,9 @@ packages:
pathe@1.1.2:
resolution: {integrity: sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==}
+ pathe@2.0.2:
+ resolution: {integrity: sha512-15Ztpk+nov8DR524R4BF7uEuzESgzUEAV4Ah7CUMNGXdE5ELuvxElxGXndBl32vMSsWa1jpNf22Z+Er3sKwq+w==}
+
pathval@2.0.0:
resolution: {integrity: sha512-vE7JKRyES09KiunauX7nd2Q9/L7lhok4smP9RZTDeD4MVs72Dp2qNFVz39Nz5a0FVEW0BJR6C0DYrq6unoziZA==}
engines: {node: '>= 14.16'}
@@ -4110,10 +4079,6 @@ packages:
engines: {node: '>=14'}
hasBin: true
- pretty-format@29.7.0:
- resolution: {integrity: sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==}
- engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
-
process@0.11.10:
resolution: {integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==}
engines: {node: '>= 0.6.0'}
@@ -4193,9 +4158,6 @@ packages:
resolution: {integrity: sha512-AAFUA5O1d83pIHEhJwWCq/RQcRukCkn/NSm2QsTEMle5f2hP0ChI2+3Xb051PZCkLryI/Ir1MVKviT2FIloaTQ==}
engines: {node: '>=12'}
- react-is@18.3.1:
- resolution: {integrity: sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==}
-
read-cache@1.0.0:
resolution: {integrity: sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==}
@@ -4434,8 +4396,8 @@ packages:
resolution: {integrity: sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==}
engines: {node: '>= 0.6'}
- std-env@3.7.0:
- resolution: {integrity: sha512-JPbdCEQLj1w5GilpiHAx3qJvFndqybBysA3qUOnznweH4QbNYUsW/ea8QzSrnh0vNsezMMw5bcVool8lM0gwzg==}
+ std-env@3.8.0:
+ resolution: {integrity: sha512-Bc3YwwCB+OzldMxOXJIIvC6cPRWr/LxOp48CdQTOkPyk/t4JWWJbrilwBd7RJzKV8QW7tJkcgAmeuLLJugl5/w==}
stdin-discarder@0.2.2:
resolution: {integrity: sha512-UhDfHmA92YAlNnCfhmq0VeNL5bDbiZGg7sZ2IvPsXubGkiNa9EC+tUTsjBRsYUAz87btI6/1wf4XoVvQ3uRnmQ==}
@@ -4502,9 +4464,6 @@ packages:
resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==}
engines: {node: '>=8'}
- strip-literal@2.1.0:
- resolution: {integrity: sha512-Op+UycaUt/8FbN/Z2TWPBLge3jWrP3xj10f3fnYxf052bKuS3EKs1ZQcVGjnEMdsNVAM+plXRdmjrZ/KgG3Skw==}
-
style-mod@4.1.2:
resolution: {integrity: sha512-wnD1HyVqpJUI2+eKZ+eo1UwghftP6yuFheBqqe+bWCotBjC2K1YnteJILRMs3SM4V/0dLEW1SC27MWP5y+mwmw==}
@@ -4573,24 +4532,24 @@ packages:
tinybench@2.9.0:
resolution: {integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==}
- tinyexec@0.3.0:
- resolution: {integrity: sha512-tVGE0mVJPGb0chKhqmsoosjsS+qUnJVGJpZgsHYQcGoPlG3B51R3PouqTgEGH2Dc9jjFyOqOpix6ZHNMXp1FZg==}
+ tinyexec@0.3.2:
+ resolution: {integrity: sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==}
tinykeys@3.0.0:
resolution: {integrity: sha512-nazawuGv5zx6MuDfDY0rmfXjuOGhD5XU2z0GLURQ1nzl0RUe9OuCJq+0u8xxJZINHe+mr7nw8PWYYZ9WhMFujw==}
- tinypool@1.0.0:
- resolution: {integrity: sha512-KIKExllK7jp3uvrNtvRBYBWBOAXSX8ZvoaD8T+7KB/QHIuoJW3Pmr60zucywjAlMb5TeXUkcs/MWeWLu0qvuAQ==}
+ tinypool@1.0.2:
+ resolution: {integrity: sha512-al6n+QEANGFOMf/dmUMsuS5/r9B06uwlyNjZZql/zv8J7ybHCgoihBNORZCY2mzUuAnomQa2JdhyHKzZxPCrFA==}
engines: {node: ^18.0.0 || >=20.0.0}
+ tinyrainbow@2.0.0:
+ resolution: {integrity: sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw==}
+ engines: {node: '>=14.0.0'}
+
tinyspy@3.0.2:
resolution: {integrity: sha512-n1cw8k1k0x4pgA2+9XrOkFydTerNcJ1zWCO5Nn9scWHTD+5tp8dghT2x1uduQePZTZgd3Tupf+x9BxJjeJi77Q==}
engines: {node: '>=14.0.0'}
- to-fast-properties@2.0.0:
- resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==}
- engines: {node: '>=4'}
-
to-regex-range@5.0.1:
resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
engines: {node: '>=8.0'}
@@ -4815,20 +4774,23 @@ packages:
terser:
optional: true
- vitest@2.0.1:
- resolution: {integrity: sha512-PBPvNXRJiywtI9NmbnEqHIhcXlk8mB0aKf6REQIaYGY4JtWF1Pg8Am+N0vAuxdg/wUSlxPSVJr8QdjwcVxc2Hg==}
- engines: {node: ^18.0.0 || >=20.0.0}
+ vitest@3.0.5:
+ resolution: {integrity: sha512-4dof+HvqONw9bvsYxtkfUp2uHsTN9bV2CZIi1pWgoFpL1Lld8LA1ka9q/ONSsoScAKG7NVGf2stJTI7XRkXb2Q==}
+ engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0}
hasBin: true
peerDependencies:
'@edge-runtime/vm': '*'
- '@types/node': ^18.0.0 || >=20.0.0
- '@vitest/browser': 2.0.1
- '@vitest/ui': 2.0.1
+ '@types/debug': ^4.1.12
+ '@types/node': ^18.0.0 || ^20.0.0 || >=22.0.0
+ '@vitest/browser': 3.0.5
+ '@vitest/ui': 3.0.5
happy-dom: '*'
jsdom: '*'
peerDependenciesMeta:
'@edge-runtime/vm':
optional: true
+ '@types/debug':
+ optional: true
'@types/node':
optional: true
'@vitest/browser':
@@ -5104,27 +5066,23 @@ snapshots:
'@ampproject/remapping@2.3.0':
dependencies:
- '@jridgewell/gen-mapping': 0.3.5
+ '@jridgewell/gen-mapping': 0.3.8
'@jridgewell/trace-mapping': 0.3.25
'@antfu/install-pkg@0.4.1':
dependencies:
package-manager-detector: 0.2.0
- tinyexec: 0.3.0
+ tinyexec: 0.3.2
'@antfu/utils@0.7.10': {}
- '@babel/helper-string-parser@7.24.8': {}
-
'@babel/helper-string-parser@7.25.9': {}
- '@babel/helper-validator-identifier@7.24.7': {}
-
'@babel/helper-validator-identifier@7.25.9': {}
'@babel/parser@7.25.6':
dependencies:
- '@babel/types': 7.25.6
+ '@babel/types': 7.26.0
'@babel/parser@7.26.2':
dependencies:
@@ -5134,18 +5092,12 @@ snapshots:
dependencies:
regenerator-runtime: 0.14.1
- '@babel/types@7.25.6':
- dependencies:
- '@babel/helper-string-parser': 7.24.8
- '@babel/helper-validator-identifier': 7.24.7
- to-fast-properties: 2.0.0
-
'@babel/types@7.26.0':
dependencies:
'@babel/helper-string-parser': 7.25.9
'@babel/helper-validator-identifier': 7.25.9
- '@bcoe/v8-coverage@0.2.3': {}
+ '@bcoe/v8-coverage@1.0.2': {}
'@breezystack/lamejs@1.2.7': {}
@@ -5670,7 +5622,7 @@ snapshots:
'@antfu/install-pkg': 0.4.1
'@antfu/utils': 0.7.10
'@iconify/types': 2.0.0
- debug: 4.3.6
+ debug: 4.4.0
kolorist: 1.8.0
local-pkg: 0.5.0
mlly: 1.7.1
@@ -5700,10 +5652,6 @@ snapshots:
'@istanbuljs/schema@0.1.3': {}
- '@jest/schemas@29.6.3':
- dependencies:
- '@sinclair/typebox': 0.27.8
-
'@jridgewell/gen-mapping@0.3.5':
dependencies:
'@jridgewell/set-array': 1.2.1
@@ -5715,7 +5663,6 @@ snapshots:
'@jridgewell/set-array': 1.2.1
'@jridgewell/sourcemap-codec': 1.5.0
'@jridgewell/trace-mapping': 0.3.25
- optional: true
'@jridgewell/resolve-uri@3.1.1': {}
@@ -5964,8 +5911,6 @@ snapshots:
'@sentry/utils': 8.31.0
vue: 3.5.12(typescript@5.6.2)
- '@sinclair/typebox@0.27.8': {}
-
'@sindresorhus/slugify@2.2.1':
dependencies:
'@sindresorhus/transliterate': 1.6.0
@@ -6678,52 +6623,63 @@ snapshots:
vite: 5.4.12(@types/node@22.7.0)(sass@1.79.3)(terser@5.33.0)
vue: 3.5.12(typescript@5.6.2)
- '@vitest/coverage-v8@2.0.1(vitest@2.0.1(@types/node@22.7.0)(jsdom@24.1.3)(sass@1.79.3)(terser@5.33.0))':
+ '@vitest/coverage-v8@3.0.5(vitest@3.0.5(@types/node@22.7.0)(jsdom@24.1.3)(sass@1.79.3)(terser@5.33.0))':
dependencies:
'@ampproject/remapping': 2.3.0
- '@bcoe/v8-coverage': 0.2.3
- debug: 4.3.7
+ '@bcoe/v8-coverage': 1.0.2
+ debug: 4.4.0
istanbul-lib-coverage: 3.2.2
istanbul-lib-report: 3.0.1
istanbul-lib-source-maps: 5.0.6
istanbul-reports: 3.1.7
- magic-string: 0.30.11
- magicast: 0.3.4
- picocolors: 1.1.0
- std-env: 3.7.0
- strip-literal: 2.1.0
+ magic-string: 0.30.17
+ magicast: 0.3.5
+ std-env: 3.8.0
test-exclude: 7.0.1
- vitest: 2.0.1(@types/node@22.7.0)(jsdom@24.1.3)(sass@1.79.3)(terser@5.33.0)
+ tinyrainbow: 2.0.0
+ vitest: 3.0.5(@types/node@22.7.0)(jsdom@24.1.3)(sass@1.79.3)(terser@5.33.0)
transitivePeerDependencies:
- supports-color
- '@vitest/expect@2.0.1':
+ '@vitest/expect@3.0.5':
dependencies:
- '@vitest/spy': 2.0.1
- '@vitest/utils': 2.0.1
- chai: 5.1.1
+ '@vitest/spy': 3.0.5
+ '@vitest/utils': 3.0.5
+ chai: 5.1.2
+ tinyrainbow: 2.0.0
- '@vitest/runner@2.0.1':
+ '@vitest/mocker@3.0.5(vite@5.4.12(@types/node@22.7.0)(sass@1.79.3)(terser@5.33.0))':
dependencies:
- '@vitest/utils': 2.0.1
- pathe: 1.1.2
+ '@vitest/spy': 3.0.5
+ estree-walker: 3.0.3
+ magic-string: 0.30.17
+ optionalDependencies:
+ vite: 5.4.12(@types/node@22.7.0)(sass@1.79.3)(terser@5.33.0)
- '@vitest/snapshot@2.0.1':
+ '@vitest/pretty-format@3.0.5':
dependencies:
- magic-string: 0.30.11
- pathe: 1.1.2
- pretty-format: 29.7.0
+ tinyrainbow: 2.0.0
- '@vitest/spy@2.0.1':
+ '@vitest/runner@3.0.5':
+ dependencies:
+ '@vitest/utils': 3.0.5
+ pathe: 2.0.2
+
+ '@vitest/snapshot@3.0.5':
+ dependencies:
+ '@vitest/pretty-format': 3.0.5
+ magic-string: 0.30.17
+ pathe: 2.0.2
+
+ '@vitest/spy@3.0.5':
dependencies:
tinyspy: 3.0.2
- '@vitest/utils@2.0.1':
+ '@vitest/utils@3.0.5':
dependencies:
- diff-sequences: 29.6.3
- estree-walker: 3.0.3
- loupe: 3.1.1
- pretty-format: 29.7.0
+ '@vitest/pretty-format': 3.0.5
+ loupe: 3.1.3
+ tinyrainbow: 2.0.0
'@vue/compiler-core@3.5.12':
dependencies:
@@ -6743,7 +6699,7 @@ snapshots:
'@vue/compiler-core@3.5.8':
dependencies:
- '@babel/parser': 7.25.6
+ '@babel/parser': 7.26.2
'@vue/shared': 3.5.8
entities: 4.5.0
estree-walker: 2.0.2
@@ -6772,7 +6728,7 @@ snapshots:
'@vue/compiler-ssr': 3.5.12
'@vue/shared': 3.5.12
estree-walker: 2.0.2
- magic-string: 0.30.12
+ magic-string: 0.30.17
postcss: 8.5.1
source-map-js: 1.2.1
@@ -6784,7 +6740,7 @@ snapshots:
'@vue/compiler-ssr': 3.5.13
'@vue/shared': 3.5.13
estree-walker: 2.0.2
- magic-string: 0.30.14
+ magic-string: 0.30.17
postcss: 8.5.1
source-map-js: 1.2.1
@@ -6948,13 +6904,13 @@ snapshots:
agent-base@6.0.2:
dependencies:
- debug: 4.3.7
+ debug: 4.4.0
transitivePeerDependencies:
- supports-color
agent-base@7.1.1:
dependencies:
- debug: 4.3.7
+ debug: 4.4.0
transitivePeerDependencies:
- supports-color
@@ -6990,8 +6946,6 @@ snapshots:
dependencies:
color-convert: 2.0.1
- ansi-styles@5.2.0: {}
-
ansi-styles@6.2.1: {}
any-promise@1.3.0: {}
@@ -7196,12 +7150,12 @@ snapshots:
tslib: 2.8.1
upper-case-first: 2.0.2
- chai@5.1.1:
+ chai@5.1.2:
dependencies:
assertion-error: 2.0.1
check-error: 2.1.1
deep-eql: 5.0.2
- loupe: 3.1.1
+ loupe: 3.1.3
pathval: 2.0.0
chalk@4.1.2:
@@ -7446,11 +7400,7 @@ snapshots:
dependencies:
ms: 2.1.2
- debug@4.3.6:
- dependencies:
- ms: 2.1.2
-
- debug@4.3.7:
+ debug@4.4.0:
dependencies:
ms: 2.1.3
@@ -7485,8 +7435,6 @@ snapshots:
didyoumean@1.2.2: {}
- diff-sequences@29.6.3: {}
-
dir-glob@3.0.1:
dependencies:
path-type: 4.0.0
@@ -7927,17 +7875,7 @@ snapshots:
signal-exit: 3.0.7
strip-final-newline: 3.0.0
- execa@8.0.1:
- dependencies:
- cross-spawn: 7.0.6
- get-stream: 8.0.1
- human-signals: 5.0.0
- is-stream: 3.0.0
- merge-stream: 2.0.0
- npm-run-path: 5.1.0
- onetime: 6.0.0
- signal-exit: 4.1.0
- strip-final-newline: 3.0.0
+ expect-type@1.1.0: {}
extend-shallow@2.0.1:
dependencies:
@@ -8065,8 +8003,6 @@ snapshots:
get-east-asian-width@1.2.0: {}
- get-func-name@2.0.2: {}
-
get-intrinsic@1.2.4:
dependencies:
es-errors: 1.3.0
@@ -8077,8 +8013,6 @@ snapshots:
get-stream@6.0.1: {}
- get-stream@8.0.1: {}
-
get-symbol-description@1.0.0:
dependencies:
call-bind: 1.0.2
@@ -8278,35 +8212,33 @@ snapshots:
dependencies:
'@tootallnate/once': 2.0.0
agent-base: 6.0.2
- debug: 4.3.7
+ debug: 4.4.0
transitivePeerDependencies:
- supports-color
http-proxy-agent@7.0.2:
dependencies:
agent-base: 7.1.1
- debug: 4.3.5
+ debug: 4.4.0
transitivePeerDependencies:
- supports-color
https-proxy-agent@5.0.1:
dependencies:
agent-base: 6.0.2
- debug: 4.3.7
+ debug: 4.4.0
transitivePeerDependencies:
- supports-color
https-proxy-agent@7.0.5:
dependencies:
agent-base: 7.1.1
- debug: 4.3.5
+ debug: 4.4.0
transitivePeerDependencies:
- supports-color
human-signals@4.3.1: {}
- human-signals@5.0.0: {}
-
husky@7.0.4: {}
iconv-lite@0.6.3:
@@ -8483,7 +8415,7 @@ snapshots:
istanbul-lib-source-maps@5.0.6:
dependencies:
'@jridgewell/trace-mapping': 0.3.25
- debug: 4.3.7
+ debug: 4.4.0
istanbul-lib-coverage: 3.2.2
transitivePeerDependencies:
- supports-color
@@ -8513,8 +8445,6 @@ snapshots:
js-cookie@3.0.5: {}
- js-tokens@9.0.0: {}
-
js-yaml@3.14.1:
dependencies:
argparse: 1.0.10
@@ -8724,9 +8654,7 @@ snapshots:
strip-ansi: 7.1.0
wrap-ansi: 8.1.0
- loupe@3.1.1:
- dependencies:
- get-func-name: 2.0.2
+ loupe@3.1.3: {}
lower-case@2.0.2:
dependencies:
@@ -8748,18 +8676,14 @@ snapshots:
dependencies:
'@jridgewell/sourcemap-codec': 1.5.0
- magic-string@0.30.12:
+ magic-string@0.30.17:
dependencies:
'@jridgewell/sourcemap-codec': 1.5.0
- magic-string@0.30.14:
+ magicast@0.3.5:
dependencies:
- '@jridgewell/sourcemap-codec': 1.5.0
-
- magicast@0.3.4:
- dependencies:
- '@babel/parser': 7.25.6
- '@babel/types': 7.25.6
+ '@babel/parser': 7.26.2
+ '@babel/types': 7.26.0
source-map-js: 1.2.1
make-dir@4.0.0:
@@ -9112,6 +9036,8 @@ snapshots:
pathe@1.1.2: {}
+ pathe@2.0.2: {}
+
pathval@2.0.0: {}
picocolors@1.0.1: {}
@@ -9404,12 +9330,6 @@ snapshots:
prettier@3.3.3: {}
- pretty-format@29.7.0:
- dependencies:
- '@jest/schemas': 29.6.3
- ansi-styles: 5.2.0
- react-is: 18.3.1
-
process@0.11.10: {}
prosemirror-commands@1.6.0:
@@ -9515,8 +9435,6 @@ snapshots:
quick-lru@6.1.2: {}
- react-is@18.3.1: {}
-
read-cache@1.0.0:
dependencies:
pify: 2.3.0
@@ -9785,7 +9703,7 @@ snapshots:
statuses@1.5.0: {}
- std-env@3.7.0: {}
+ std-env@3.8.0: {}
stdin-discarder@0.2.2: {}
@@ -9862,10 +9780,6 @@ snapshots:
strip-json-comments@3.1.1: {}
- strip-literal@2.1.0:
- dependencies:
- js-tokens: 9.0.0
-
style-mod@4.1.2: {}
sucrase@3.35.0:
@@ -9966,16 +9880,16 @@ snapshots:
tinybench@2.9.0: {}
- tinyexec@0.3.0: {}
+ tinyexec@0.3.2: {}
tinykeys@3.0.0: {}
- tinypool@1.0.0: {}
+ tinypool@1.0.2: {}
+
+ tinyrainbow@2.0.0: {}
tinyspy@3.0.2: {}
- to-fast-properties@2.0.0: {}
-
to-regex-range@5.0.1:
dependencies:
is-number: 7.0.0
@@ -10119,13 +10033,13 @@ snapshots:
dependencies:
browserslist: 4.23.0
escalade: 3.1.2
- picocolors: 1.1.0
+ picocolors: 1.1.1
update-browserslist-db@1.1.0(browserslist@4.23.3):
dependencies:
browserslist: 4.23.3
escalade: 3.2.0
- picocolors: 1.1.0
+ picocolors: 1.0.1
upper-case-first@2.0.2:
dependencies:
@@ -10189,9 +10103,9 @@ snapshots:
vite-node@2.0.1(@types/node@22.7.0)(sass@1.79.3)(terser@5.33.0):
dependencies:
cac: 6.7.14
- debug: 4.3.7
+ debug: 4.4.0
pathe: 1.1.2
- picocolors: 1.1.0
+ picocolors: 1.1.1
vite: 5.4.12(@types/node@22.7.0)(sass@1.79.3)(terser@5.33.0)
transitivePeerDependencies:
- '@types/node'
@@ -10223,23 +10137,25 @@ snapshots:
sass: 1.79.3
terser: 5.33.0
- vitest@2.0.1(@types/node@22.7.0)(jsdom@24.1.3)(sass@1.79.3)(terser@5.33.0):
+ vitest@3.0.5(@types/node@22.7.0)(jsdom@24.1.3)(sass@1.79.3)(terser@5.33.0):
dependencies:
- '@ampproject/remapping': 2.3.0
- '@vitest/expect': 2.0.1
- '@vitest/runner': 2.0.1
- '@vitest/snapshot': 2.0.1
- '@vitest/spy': 2.0.1
- '@vitest/utils': 2.0.1
- chai: 5.1.1
- debug: 4.3.7
- execa: 8.0.1
- magic-string: 0.30.11
- pathe: 1.1.2
- picocolors: 1.1.0
- std-env: 3.7.0
+ '@vitest/expect': 3.0.5
+ '@vitest/mocker': 3.0.5(vite@5.4.12(@types/node@22.7.0)(sass@1.79.3)(terser@5.33.0))
+ '@vitest/pretty-format': 3.0.5
+ '@vitest/runner': 3.0.5
+ '@vitest/snapshot': 3.0.5
+ '@vitest/spy': 3.0.5
+ '@vitest/utils': 3.0.5
+ chai: 5.1.2
+ debug: 4.4.0
+ expect-type: 1.1.0
+ magic-string: 0.30.17
+ pathe: 2.0.2
+ std-env: 3.8.0
tinybench: 2.9.0
- tinypool: 1.0.0
+ tinyexec: 0.3.2
+ tinypool: 1.0.2
+ tinyrainbow: 2.0.0
vite: 5.4.12(@types/node@22.7.0)(sass@1.79.3)(terser@5.33.0)
vite-node: 2.0.1(@types/node@22.7.0)(sass@1.79.3)(terser@5.33.0)
why-is-node-running: 2.3.0
@@ -10249,6 +10165,7 @@ snapshots:
transitivePeerDependencies:
- less
- lightningcss
+ - msw
- sass
- sass-embedded
- stylus
@@ -10279,7 +10196,7 @@ snapshots:
vue-eslint-parser@9.4.3(eslint@8.57.0):
dependencies:
- debug: 4.3.5
+ debug: 4.4.0
eslint: 8.57.0
eslint-scope: 7.2.2
eslint-visitor-keys: 3.4.3
From d463a5cc30fe3c13e33b0efb1e14d1d08ea3f7af Mon Sep 17 00:00:00 2001
From: Shivam Mishra
Date: Thu, 6 Feb 2025 08:52:02 +0530
Subject: [PATCH 14/21] fix: incorrect sender name on email meta (#10837)
Fixes https://github.com/chatwoot/chatwoot/issues/10807
---
.../message/bubbles/Email/EmailMeta.vue | 31 +++++++++++++++----
1 file changed, 25 insertions(+), 6 deletions(-)
diff --git a/app/javascript/dashboard/components-next/message/bubbles/Email/EmailMeta.vue b/app/javascript/dashboard/components-next/message/bubbles/Email/EmailMeta.vue
index d2a48290b..f4b863e64 100644
--- a/app/javascript/dashboard/components-next/message/bubbles/Email/EmailMeta.vue
+++ b/app/javascript/dashboard/components-next/message/bubbles/Email/EmailMeta.vue
@@ -26,7 +26,18 @@ const ccEmail = computed(() => {
});
const senderName = computed(() => {
- return sender.value.name ?? '';
+ const fromEmailAddress = fromEmail.value[0] ?? '';
+ const senderEmail = sender.value.email ?? '';
+
+ if (!fromEmailAddress && !senderEmail) return null;
+
+ // if the sender of the conversation and the sender of this particular
+ // email are the same, only then we return the sender name
+ if (fromEmailAddress === senderEmail) {
+ return sender.value.name;
+ }
+
+ return null;
});
const bccEmail = computed(() => {
@@ -59,11 +70,19 @@ const showMeta = computed(() => {
:class="hasError ? 'text-n-ruby-11' : 'text-n-slate-11'"
>
-
-
- {{ senderName }}
-
- <{{ fromEmail[0] }}>
+
+
+
+ {{ senderName }}
+
+ <{{ fromEmail[0] }}>
+
+
+ {{ fromEmail[0] }}
+
{{ $t('EMAIL_HEADER.TO') }}: {{ toEmail.join(', ') }}
From abcff9883fbbb31376698f55ba6573ce17ac14b7 Mon Sep 17 00:00:00 2001
From: Sivin Varghese <64252451+iamsivin@users.noreply.github.com>
Date: Thu, 6 Feb 2025 09:20:25 +0530
Subject: [PATCH 15/21] feat: Order previous conversations by last activity
(#10825)
---
.../api/v1/accounts/contacts/conversations_controller.rb | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/app/controllers/api/v1/accounts/contacts/conversations_controller.rb b/app/controllers/api/v1/accounts/contacts/conversations_controller.rb
index 5e0a0e55e..de0ac4db9 100644
--- a/app/controllers/api/v1/accounts/contacts/conversations_controller.rb
+++ b/app/controllers/api/v1/accounts/contacts/conversations_controller.rb
@@ -2,7 +2,7 @@ class Api::V1::Accounts::Contacts::ConversationsController < Api::V1::Accounts::
def index
@conversations = Current.account.conversations.includes(
:assignee, :contact, :inbox, :taggings
- ).where(inbox_id: inbox_ids, contact_id: @contact.id).order(id: :desc).limit(20)
+ ).where(inbox_id: inbox_ids, contact_id: @contact.id).order(last_activity_at: :desc).limit(20)
end
private
From d5ecbba71f970c51650de26f097bc3f77ca3f50a Mon Sep 17 00:00:00 2001
From: Baptiste Fontaine
Date: Thu, 6 Feb 2025 05:13:38 +0100
Subject: [PATCH 16/21] fix: onboarding/index.html.erb unclosed HTML tags
(#10838)
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
# Pull Request Template
## Description
This was not really an issue because HTML is permissive and auto-closes
these when the parent is closed, but it’s cleaner to do it.
It was also showing errors if you open the project in an IDE.
## Type of change
- Chore
## How Has This Been Tested?
## Checklist:
- [x] My code follows the style guidelines of this project
- [x] I have performed a self-review of my code
- [x] I have commented on my code, particularly in hard-to-understand
areas
- [x] I have made corresponding changes to the documentation
- [x] My changes generate no new warnings
- [ ] I have added tests that prove my fix is effective or that my
feature works
- [x] New and existing unit tests pass locally with my changes
- [x] Any dependent changes have been merged and published in downstream
modules
Co-authored-by: Shivam Mishra
---
app/views/installation/onboarding/index.html.erb | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/app/views/installation/onboarding/index.html.erb b/app/views/installation/onboarding/index.html.erb
index 220da62dd..8b337d16c 100644
--- a/app/views/installation/onboarding/index.html.erb
+++ b/app/views/installation/onboarding/index.html.erb
@@ -70,7 +70,9 @@
Finish Setup
- <% end %>
+ <% end %>
+
+