From 7b4eb25fc86d1bde4a4980951e337bce6cc35bd3 Mon Sep 17 00:00:00 2001 From: Henry Jameson Date: Tue, 4 Aug 2026 19:55:44 +0300 Subject: [PATCH 01/17] cleanup --- build/emojis_plugin.js | 2 +- src/api/chats.js | 4 ++-- src/components/conversation/conversation.js | 2 +- src/components/emoji_input/emoji_input.js | 4 ++-- src/components/emoji_picker/emoji_picker.js | 2 +- src/components/font_control/font_control.js | 2 +- src/components/lists_edit/lists_edit.js | 4 ++-- src/components/registration/registration.js | 2 +- src/components/rich_content/rich_content.jsx | 4 ++-- src/components/settings_modal/helpers/number_setting.js | 2 +- src/components/settings_modal/helpers/unit_setting.js | 2 +- src/components/status/status.js | 2 +- src/modules/statuses.js | 6 +++--- src/modules/users.js | 2 +- src/services/notification_utils/notification_utils.js | 3 +-- src/services/status_parser/status_parser.js | 2 +- src/stores/chats.js | 2 +- src/stores/sync_config.js | 2 +- 18 files changed, 24 insertions(+), 25 deletions(-) diff --git a/build/emojis_plugin.js b/build/emojis_plugin.js index 9872f5331..b21c10048 100644 --- a/build/emojis_plugin.js +++ b/build/emojis_plugin.js @@ -35,7 +35,7 @@ const getAllAccessibleAnnotations = async (projectRoot) => { }), ) ) - .filter((k) => k) + .filter(Boolean) .join(',\n') return ` diff --git a/src/api/chats.js b/src/api/chats.js index 5d766dec4..b212380de 100644 --- a/src/api/chats.js +++ b/src/api/chats.js @@ -18,7 +18,7 @@ export const chats = ({ credentials }) => url: PLEROMA_CHATS_URL, credentials, }).then(({ data }) => ({ - data: data.map(parseChat).filter((c) => c), + data: data.map(parseChat).filter(Boolean), })) export const getOrCreateChat = ({ accountId, credentials }) => @@ -40,7 +40,7 @@ export const chatMessages = ({ method: 'GET', credentials, }).then(({ data }) => ({ - data: data.map(parseChatMessage).filter((c) => c), + data: data.map(parseChatMessage).filter(Boolean), })) } diff --git a/src/components/conversation/conversation.js b/src/components/conversation/conversation.js index fcde9477c..16a22caab 100644 --- a/src/components/conversation/conversation.js +++ b/src/components/conversation/conversation.js @@ -62,7 +62,7 @@ const sortAndFilterConversation = (conversation, statusoid) => { } else { conversation = filter(conversation, (status) => status.type !== 'retweet') } - return conversation.filter((_) => _).sort(sortById) + return conversation.filter(Boolean).sort(sortById) } const conversation = { diff --git a/src/components/emoji_input/emoji_input.js b/src/components/emoji_input/emoji_input.js index 0cce2494d..d8cc7a919 100644 --- a/src/components/emoji_input/emoji_input.js +++ b/src/components/emoji_input/emoji_input.js @@ -188,8 +188,8 @@ const EmojiInput = { } return { - names: names.filter((k) => k), - keywords: keywords.filter((k) => k), + names: names.filter(Boolean), + keywords: keywords.filter(Boolean), } } }, diff --git a/src/components/emoji_picker/emoji_picker.js b/src/components/emoji_picker/emoji_picker.js index 6889fb8b0..ac9952b9b 100644 --- a/src/components/emoji_picker/emoji_picker.js +++ b/src/components/emoji_picker/emoji_picker.js @@ -57,7 +57,7 @@ const maybeLocalizedKeywords = (emoji, languages, nameLocalizer) => { languages.forEach((lang) => { const keywords = emoji.annotations[lang]?.keywords || [] const name = emoji.annotations[lang]?.name - res.push(...keywords.concat([name]).filter((k) => k)) + res.push(...keywords.concat([name]).filter(Boolean)) }) } return res diff --git a/src/components/font_control/font_control.js b/src/components/font_control/font_control.js index 697d83ee2..af4d62358 100644 --- a/src/components/font_control/font_control.js +++ b/src/components/font_control/font_control.js @@ -35,7 +35,7 @@ export default { 'sans-serif', 'monospace', ...(this.options || []), - ].filter((_) => _), + ].filter(Boolean), } }, methods: { diff --git a/src/components/lists_edit/lists_edit.js b/src/components/lists_edit/lists_edit.js index d7a8525a8..7eb035091 100644 --- a/src/components/lists_edit/lists_edit.js +++ b/src/components/lists_edit/lists_edit.js @@ -59,12 +59,12 @@ const ListsNew = { membersUsers() { return [...this.membersUserIds, ...this.addedUserIds] .map((userId) => this.findUser(userId)) - .filter((user) => user) + .filter(Boolean) }, searchUsers() { return this.searchUserIds .map((userId) => this.findUser(userId)) - .filter((user) => user) + .filter(Boolean) }, ...mapState({ currentUser: (state) => state.users.currentUser, diff --git a/src/components/registration/registration.js b/src/components/registration/registration.js index bb8de17b9..ea07c662b 100644 --- a/src/components/registration/registration.js +++ b/src/components/registration/registration.js @@ -128,7 +128,7 @@ const registration = { this.user.captcha_answer_data = this.captcha.answer_data if (this.user.language) { this.user.language = localeService.internalToBackendLocaleMulti( - this.user.language.filter((k) => k), + this.user.language.filter(Boolean), ) } diff --git a/src/components/rich_content/rich_content.jsx b/src/components/rich_content/rich_content.jsx index a00bf2c47..f80f153b1 100644 --- a/src/components/rich_content/rich_content.jsx +++ b/src/components/rich_content/rich_content.jsx @@ -381,13 +381,13 @@ export default { x ? 'mfm-spinX' : null, y ? 'mfm-spinY' : null, 'mfm-spin', - ].filter((a) => a)[0] + ].filter(Boolean)[0] const direction = [ alternate ? 'alternate' : null, left ? 'reverse' : null, 'normal', - ].filter((a) => a)[0] + ].filter(Boolean)[0] newAttrs.style = [ `animation-name: ${anim}`, diff --git a/src/components/settings_modal/helpers/number_setting.js b/src/components/settings_modal/helpers/number_setting.js index d0b23c919..e65d8337a 100644 --- a/src/components/settings_modal/helpers/number_setting.js +++ b/src/components/settings_modal/helpers/number_setting.js @@ -33,7 +33,7 @@ export default { } else if (this.truncate > 1) { return Math.trunc(e.target.value / this.truncate) * this.truncate } - return parseFloat(e.target.value) + return Number.parseFloat(e.target.value) }, }, } diff --git a/src/components/settings_modal/helpers/unit_setting.js b/src/components/settings_modal/helpers/unit_setting.js index 99f4ac38e..f537eab85 100644 --- a/src/components/settings_modal/helpers/unit_setting.js +++ b/src/components/settings_modal/helpers/unit_setting.js @@ -67,7 +67,7 @@ export default { return this.$t(['settings', 'units', this.unitSet, value].join('.')) }, updateValue(e) { - this.configSink(this.path, parseFloat(e.target.value) + this.stateUnit) + this.configSink(this.path, Number.parseFloat(e.target.value) + this.stateUnit) }, updateUnit(e) { let value = this.stateValue diff --git a/src/components/status/status.js b/src/components/status/status.js index 3e10a24e1..a33d29525 100644 --- a/src/components/status/status.js +++ b/src/components/status/status.js @@ -262,7 +262,7 @@ const Status = { this.muteFilterHits.length > 0 ? 'filtered' : null, this.muteBotStatuses && this.botStatus ? 'bot' : null, this.muteSensitiveStatuses && this.sensitiveStatus ? 'nsfw' : null, - ].filter((_) => _) + ].filter(Boolean) }, muteLocalized() { if (this.muteReasons.length === 0) return null diff --git a/src/modules/statuses.js b/src/modules/statuses.js index e3878e85c..0603f1ec1 100644 --- a/src/modules/statuses.js +++ b/src/modules/statuses.js @@ -525,7 +525,7 @@ export const mutations = { }, addRepeats(state, { id, rebloggedByUsers, currentUser }) { const newStatus = state.allStatusesObject[id] - newStatus.rebloggedBy = rebloggedByUsers.filter((_) => _) + newStatus.rebloggedBy = rebloggedByUsers.filter(Boolean) // repeats stats can be incorrect based on polling condition, let's update them using the most recent data newStatus.repeat_num = newStatus.rebloggedBy.length newStatus.repeated = !!newStatus.rebloggedBy.find( @@ -534,7 +534,7 @@ export const mutations = { }, addFavs(state, { id, favoritedByUsers, currentUser }) { const newStatus = state.allStatusesObject[id] - newStatus.favoritedBy = favoritedByUsers.filter((_) => _) + newStatus.favoritedBy = favoritedByUsers.filter(Boolean) // favorites stats can be incorrect based on polling condition, let's update them using the most recent data newStatus.fave_num = newStatus.favoritedBy.length newStatus.favorited = !!newStatus.favoritedBy.find( @@ -879,7 +879,7 @@ const statuses = { store.commit('addNewUsers', data.accounts) store.commit( 'addNewUsers', - data.statuses.map((s) => s.user).filter((u) => u), + data.statuses.map((s) => s.user).filter(Boolean), ) store.commit('addNewStatuses', { statuses: data.statuses, diff --git a/src/modules/users.js b/src/modules/users.js index b58566859..8764efa96 100644 --- a/src/modules/users.js +++ b/src/modules/users.js @@ -635,7 +635,7 @@ const users = { }, addNewNotifications(store, { notifications }) { const users = map(notifications, 'from_profile') - const targetUsers = map(notifications, 'target').filter((_) => _) + const targetUsers = map(notifications, 'target').filter(Boolean) const notificationIds = notifications.map((_) => _.id) store.commit('addNewUsers', users) store.commit('addNewUsers', targetUsers) diff --git a/src/services/notification_utils/notification_utils.js b/src/services/notification_utils/notification_utils.js index 46b81cc66..107b183c2 100644 --- a/src/services/notification_utils/notification_utils.js +++ b/src/services/notification_utils/notification_utils.js @@ -25,7 +25,7 @@ const visibleTypes = (notificationVisibility) => { notificationVisibility.emojiReactions && 'pleroma:emoji_reaction', notificationVisibility.reports && 'pleroma:report', notificationVisibility.polls && 'poll', - ].filter((_) => _) + ].filter(Boolean) } const statusNotifications = new Set([ @@ -96,7 +96,6 @@ export const filteredNotificationsFromStore = ( ) => { // map is just to clone the array since sort mutates it and it causes some issues const sortedNotifications = notificationsFromStore(store) - .map((_) => _) .sort(sortById) // TODO implement sorting elsewhere and make it optional return sortedNotifications.filter((notification) => diff --git a/src/services/status_parser/status_parser.js b/src/services/status_parser/status_parser.js index a011fe265..fc498f540 100644 --- a/src/services/status_parser/status_parser.js +++ b/src/services/status_parser/status_parser.js @@ -88,5 +88,5 @@ export const muteFilterHits = (muteFilters, status) => { } } }) - .filter((_) => _) + .filter(Boolean) } diff --git a/src/stores/chats.js b/src/stores/chats.js index 7908da9c8..5ade0c126 100644 --- a/src/stores/chats.js +++ b/src/stores/chats.js @@ -61,7 +61,7 @@ export const useChatsStore = defineStore('chats', { addNewChats(chats) { window.vuex.commit( 'addNewUsers', - chats.map((k) => k.account).filter((k) => k), + chats.map((k) => k.account).filter(Boolean), ) chats.forEach((updatedChat) => { diff --git a/src/stores/sync_config.js b/src/stores/sync_config.js index 3b71478c1..fb1450c18 100644 --- a/src/stores/sync_config.js +++ b/src/stores/sync_config.js @@ -836,7 +836,7 @@ export const useSyncConfigStore = defineStore('sync_config', { : [path, finalValue] }) newState.prefsStorage.simple = Object.fromEntries( - newEntries.filter((_) => _), + newEntries.filter(Boolean), ) return newState }, From 7bccde3d635b42054afb5d5230e6b62d6f8ab4cd Mon Sep 17 00:00:00 2001 From: Henry Jameson Date: Tue, 4 Aug 2026 19:56:22 +0300 Subject: [PATCH 02/17] wtf --- src/components/settings_modal/helpers/number_setting.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/settings_modal/helpers/number_setting.js b/src/components/settings_modal/helpers/number_setting.js index e65d8337a..8f8861c25 100644 --- a/src/components/settings_modal/helpers/number_setting.js +++ b/src/components/settings_modal/helpers/number_setting.js @@ -28,7 +28,7 @@ export default { methods: { ...Setting.methods, getValue(e) { - if (!this.truncate === 1) { + if (this.truncate === 1) { return Number.parseInt(e.target.value) } else if (this.truncate > 1) { return Math.trunc(e.target.value / this.truncate) * this.truncate From 34cbc24443ea3220556251a27ba40fd0945013be Mon Sep 17 00:00:00 2001 From: Henry Jameson Date: Tue, 4 Aug 2026 19:57:54 +0300 Subject: [PATCH 03/17] wtf --- src/components/settings_modal/tabs/appearance_tab.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/settings_modal/tabs/appearance_tab.js b/src/components/settings_modal/tabs/appearance_tab.js index d93758f9a..e969d373b 100644 --- a/src/components/settings_modal/tabs/appearance_tab.js +++ b/src/components/settings_modal/tabs/appearance_tab.js @@ -236,7 +236,7 @@ const AppearanceTab = { }, stylePalettes() { const ruleset = useInterfaceStore().styleDataUsed || [] - if (!ruleset?.length === 0) return + if (ruleset.length === 0) return const meta = ruleset.find((x) => x.component === '@meta') const result = ruleset .filter((x) => x.component.startsWith('@palette')) From bd79bf987aa7287f11b5d971aac58eb5ad8f0e87 Mon Sep 17 00:00:00 2001 From: Henry Jameson Date: Tue, 4 Aug 2026 19:58:45 +0300 Subject: [PATCH 04/17] wtf --- src/components/settings_modal/tabs/appearance_tab.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/settings_modal/tabs/appearance_tab.js b/src/components/settings_modal/tabs/appearance_tab.js index e969d373b..647c90c47 100644 --- a/src/components/settings_modal/tabs/appearance_tab.js +++ b/src/components/settings_modal/tabs/appearance_tab.js @@ -277,7 +277,7 @@ const AppearanceTab = { return !window.IntersectionObserver }, instanceWallpaper() { - useInstanceStore().instanceIdentity.background + return useInstanceStore().instanceIdentity.background }, instanceWallpaperUsed() { return ( From 18bb953afb519ebad8a4939a9783e809d7e47be9 Mon Sep 17 00:00:00 2001 From: Henry Jameson Date: Tue, 4 Aug 2026 20:15:08 +0300 Subject: [PATCH 05/17] ids are strings now --- src/modules/statuses.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/modules/statuses.js b/src/modules/statuses.js index 0603f1ec1..ef68a5237 100644 --- a/src/modules/statuses.js +++ b/src/modules/statuses.js @@ -49,8 +49,8 @@ const emptyTl = (userId = 0) => ({ visibleStatuses: [], visibleStatusesObject: {}, newStatusCount: 0, - maxId: 0, - minId: 0, + maxId: '0', + minId: '0', minVisibleId: 0, loading: false, followers: [], @@ -64,7 +64,7 @@ export const defaultState = () => ({ scrobblesNextFetch: {}, allStatusesObject: {}, conversationsObject: {}, - maxId: 0, + maxId: '0', favorites: new Set(), timelines: { mentions: emptyTl(), From f7a4ab2cf15a865102a721cea3da2fc2e4665297 Mon Sep 17 00:00:00 2001 From: Henry Jameson Date: Tue, 4 Aug 2026 20:16:29 +0300 Subject: [PATCH 06/17] cleanup --- .../settings_modal/tabs/clutter_tab.js | 18 ++++++++---------- .../settings_modal/tabs/filtering_tab.js | 18 ++++++++---------- src/services/color_convert/color_convert.js | 8 ++++---- src/services/ruffle_service/ruffle_service.js | 6 +++--- src/services/sw/sw.js | 2 +- .../user_highlighter/user_highlighter.js | 2 +- 6 files changed, 25 insertions(+), 29 deletions(-) diff --git a/src/components/settings_modal/tabs/clutter_tab.js b/src/components/settings_modal/tabs/clutter_tab.js index 85749ab3f..6cec2ce93 100644 --- a/src/components/settings_modal/tabs/clutter_tab.js +++ b/src/components/settings_modal/tabs/clutter_tab.js @@ -75,16 +75,14 @@ const ClutterTab = { } return valid }, - createFilter( - filter = { - type: 'word', - value: '', - name: 'New Filter', - enabled: true, - expires: null, - hide: false, - }, - ) { + createFilter({ + type = 'word', + value = '', + name = 'New Filter', + enabled = true, + expires = null, + hide = false, + }) { const newId = uuidv4() filter.order = this.muteFilters.length + 2 diff --git a/src/components/settings_modal/tabs/filtering_tab.js b/src/components/settings_modal/tabs/filtering_tab.js index e0d0f6879..a8c7f3e1b 100644 --- a/src/components/settings_modal/tabs/filtering_tab.js +++ b/src/components/settings_modal/tabs/filtering_tab.js @@ -190,16 +190,14 @@ const FilteringTab = { } return valid }, - createFilter( - filter = { - type: 'word', - value: '', - name: 'New Filter', - enabled: true, - expires: null, - hide: false, - }, - ) { + createFilter({ + type = 'word', + value = '', + name = 'New Filter', + enabled = true, + expires = null, + hide = false, + }) { const newId = uuidv4() filter.order = this.muteFilters.length + 2 diff --git a/src/services/color_convert/color_convert.js b/src/services/color_convert/color_convert.js index dded73da3..768552b1c 100644 --- a/src/services/color_convert/color_convert.js +++ b/src/services/color_convert/color_convert.js @@ -210,16 +210,16 @@ export const rgba2css = function (rgba) { } if (rgba !== null) { - if (rgba.r !== undefined && !isNaN(rgba.r)) { + if (rgba.r !== undefined && !Number.isNaN(rgba.r)) { base.r = rgba.r } - if (rgba.g !== undefined && !isNaN(rgba.g)) { + if (rgba.g !== undefined && !Number.isNaN(rgba.g)) { base.g = rgba.g } - if (rgba.b !== undefined && !isNaN(rgba.b)) { + if (rgba.b !== undefined && !Number.isNaN(rgba.b)) { base.b = rgba.b } - if (rgba.a !== undefined && !isNaN(rgba.a)) { + if (rgba.a !== undefined && !Number.isNaN(rgba.a)) { base.a = rgba.a } } else { diff --git a/src/services/ruffle_service/ruffle_service.js b/src/services/ruffle_service/ruffle_service.js index c029330aa..298f32df3 100644 --- a/src/services/ruffle_service/ruffle_service.js +++ b/src/services/ruffle_service/ruffle_service.js @@ -25,13 +25,13 @@ const createRuffleService = () => { script.src = '/static/ruffle/ruffle.js' script.type = 'text/javascript' script.onerror = (e) => { - reject(e) + reject(new Error('Ruffle script errorred', e)) } script.onabort = (e) => { - reject(e) + reject(new Error('Ruffle script aborted', e)) } script.oncancel = (e) => { - reject(e) + reject(new Error('Ruffle script cancelled', e)) } script.onload = () => { ruffleInstance = window.RufflePlayer diff --git a/src/services/sw/sw.js b/src/services/sw/sw.js index 2b7dabd41..4f044c426 100644 --- a/src/services/sw/sw.js +++ b/src/services/sw/sw.js @@ -3,7 +3,7 @@ function urlBase64ToUint8Array(base64String) { const padding = '='.repeat((4 - (base64String.length % 4)) % 4) const base64 = (base64String + padding) .replaceAll('-', '+') - .replace(/_/g, '/') + .replaceAll('_', '/') const rawData = window.atob(base64) return Uint8Array.from([...rawData].map((char) => char.codePointAt(0))) diff --git a/src/services/user_highlighter/user_highlighter.js b/src/services/user_highlighter/user_highlighter.js index e3f94ea1a..abd0d9633 100644 --- a/src/services/user_highlighter/user_highlighter.js +++ b/src/services/user_highlighter/user_highlighter.js @@ -47,7 +47,7 @@ const highlightStyle = (prefs) => { const highlightClass = (user) => { return ( - 'USER____' + user.screen_name?.replaceAll('.', '_').replace(/@/g, '_AT_') + 'USER____' + user.screen_name?.replaceAll('.', '_').replaceAll('@', '_AT_') ) } From c1830f4b97e84079244e1d9b2ab279f2a100b908 Mon Sep 17 00:00:00 2001 From: Henry Jameson Date: Tue, 4 Aug 2026 20:18:30 +0300 Subject: [PATCH 07/17] specific assertions --- test/unit/specs/components/chat_view.spec.js | 8 ++++---- test/unit/specs/modules/statuses.spec.js | 10 +++++----- test/unit/specs/stores/sync_config.spec.js | 10 +++++----- test/unit/specs/stores/user_highlight.spec.js | 6 +++--- 4 files changed, 17 insertions(+), 17 deletions(-) diff --git a/test/unit/specs/components/chat_view.spec.js b/test/unit/specs/components/chat_view.spec.js index c308e4fbc..d03809e38 100644 --- a/test/unit/specs/components/chat_view.spec.js +++ b/test/unit/specs/components/chat_view.spec.js @@ -66,10 +66,10 @@ describe('ChatView methods', () => { it("Doesn't add duplicates", () => { component.vm.addMessages({ messages: [message1] }) component.vm.addMessages({ messages: [message1] }) - expect(component.vm.messages.length).to.eql(1) + expect(component.vm.messages).to.have.length(1) component.vm.addMessages({ messages: [message2] }) - expect(component.vm.messages.length).to.eql(2) + expect(component.vm.messages).to.have.length(2) }) it('Updates minId and lastMessage and newMessageCount', async () => { @@ -127,11 +127,11 @@ describe('ChatView methods', () => { }) } component.vm.cullOlder() - expect(component.vm.messages.length).to.eql(50) + expect(component.vm.messages).to.have.length(50) expect(component.vm.messages[0].id).to.eql('a0.051') expect(component.vm.minId).to.eql('a0.051') expect(component.vm.messages[49].id).to.eql('a0.100') - expect(Object.keys(component.vm.messagesIndex).length).to.eql(50) + expect(Object.keys(component.vm.messagesIndex)).to.have.length(50) }) }) }) diff --git a/test/unit/specs/modules/statuses.spec.js b/test/unit/specs/modules/statuses.spec.js index cd43496a9..04bd07ffe 100644 --- a/test/unit/specs/modules/statuses.spec.js +++ b/test/unit/specs/modules/statuses.spec.js @@ -278,7 +278,7 @@ describe('Statuses module', () => { timeline: 'public', }) - expect(state.timelines.public.visibleStatuses.length).to.eql(1) + expect(state.timelines.public.visibleStatuses).to.have.length(1) expect(state.timelines.public.visibleStatuses[0].fave_num).to.eql(1) expect(state.timelines.public.maxId).to.eq(favorite.id) @@ -289,7 +289,7 @@ describe('Statuses module', () => { timeline: 'public', }) - expect(state.timelines.public.visibleStatuses.length).to.eql(1) + expect(state.timelines.public.visibleStatuses).to.have.length(1) expect(state.timelines.public.visibleStatuses[0].fave_num).to.eql(1) expect(state.timelines.public.maxId).to.eq(favorite.id) @@ -314,7 +314,7 @@ describe('Statuses module', () => { user, }) - expect(state.timelines.public.visibleStatuses.length).to.eql(1) + expect(state.timelines.public.visibleStatuses).to.have.length(1) expect(state.timelines.public.visibleStatuses[0].fave_num).to.eql(1) expect(state.timelines.public.visibleStatuses[0].favorited).to.eql(true) }) @@ -406,7 +406,7 @@ describe('Statuses module', () => { emoji: '😂', currentUser: { id: 'me' }, }) - expect(state.allStatusesObject['1'].emoji_reactions.length).to.eql(0) + expect(state.allStatusesObject['1'].emoji_reactions).to.have.length(0) }) }) @@ -428,7 +428,7 @@ describe('Statuses module', () => { state.timelines.public.minId = '5' mutations.showNewStatuses(state, { timeline: 'public' }) - expect(state.timelines.public.visibleStatuses.length).to.eql(2) + expect(state.timelines.public.visibleStatuses).to.have.length(2) expect(state.timelines.public.minVisibleId).to.equal('10') expect(state.timelines.public.minId).to.equal('10') }) diff --git a/test/unit/specs/stores/sync_config.spec.js b/test/unit/specs/stores/sync_config.spec.js index a045aa18a..d2e6d42d3 100644 --- a/test/unit/specs/stores/sync_config.spec.js +++ b/test/unit/specs/stores/sync_config.spec.js @@ -125,7 +125,7 @@ describe('The SyncConfig store', () => { }, }) - expect(store.prefsStorage._journal.length).to.eql(500) + expect(store.prefsStorage._journal).to.have.length(500) }) it('should reset local timestamp to remote if contents are the same', async () => { @@ -173,7 +173,7 @@ describe('The SyncConfig store', () => { } store.setPreference({ path: 'simple.palette', value: '1' }) expect(store.prefsStorage.simple.palette).to.eql('1') - expect(store.prefsStorage._journal.length).to.eql(1) + expect(store.prefsStorage._journal).to.have.length(1) expect(store.prefsStorage._journal[0]).to.eql({ path: 'simple.palette', operation: 'set', @@ -199,7 +199,7 @@ describe('The SyncConfig store', () => { store.updateCache({ username: 'test' }) expect(store.prefsStorage.simple.palette).to.eql(2) expect(store.prefsStorage.collections.palette).to.eql([]) - expect(store.prefsStorage._journal.length).to.eql(2) + expect(store.prefsStorage._journal).to.have.length(2) expect(store.prefsStorage._journal[0]).to.eql({ path: 'simple.palette', operation: 'set', @@ -229,7 +229,7 @@ describe('The SyncConfig store', () => { store.updateCache({ username: 'test' }) expect(store.prefsStorage.simple.palette).to.eql(1) expect(store.prefsStorage.collections.palette).to.eql([2]) - expect(store.prefsStorage._journal.length).to.eql(2) + expect(store.prefsStorage._journal).to.have.length(2) }) // TODO We need a proper test for object-based stores @@ -245,7 +245,7 @@ describe('The SyncConfig store', () => { expect(store.prefsStorage.simple.fontInput).to.not.have.property( 'family', ) - expect(store.prefsStorage._journal.length).to.eql(1) + expect(store.prefsStorage._journal).to.have.length(1) }) it('should not allow unsetting depth <= 2', () => { diff --git a/test/unit/specs/stores/user_highlight.spec.js b/test/unit/specs/stores/user_highlight.spec.js index f80143b6e..e97f8f382 100644 --- a/test/unit/specs/stores/user_highlight.spec.js +++ b/test/unit/specs/stores/user_highlight.spec.js @@ -55,7 +55,7 @@ describe('The UserHighlight store', () => { user: 'highlight@testing', type: 'test', }) - expect(store.highlight._journal.length).to.eql(1) + expect(store.highlight._journal).to.have.length(1) expect(store.highlight._journal[0]).to.eql({ user: 'highlight@testing', operation: 'set', @@ -74,7 +74,7 @@ describe('The UserHighlight store', () => { user: 'highlight@testing.xyz', type: 'test', }) - expect(store.highlight._journal.length).to.eql(1) + expect(store.highlight._journal).to.have.length(1) expect(store.highlight._journal[0]).to.eql({ user: 'highlight@testing.xyz', operation: 'set', @@ -98,7 +98,7 @@ describe('The UserHighlight store', () => { user: 'a@test.xyz', type: 'foo', }) - expect(store.highlight._journal.length).to.eql(1) + expect(store.highlight._journal).to.have.length(1) }) }) }) From f39a3eeb3223356f6db0449db5e6a567db8868d6 Mon Sep 17 00:00:00 2001 From: Henry Jameson Date: Tue, 4 Aug 2026 20:27:14 +0300 Subject: [PATCH 08/17] specific assertions --- .../specs/components/post_status_form.spec.js | 20 +++++++++---------- test/unit/specs/lib/persisted_state.spec.js | 2 +- test/unit/specs/modules/users.spec.js | 4 ++-- .../entity_normalizer.spec.js | 2 +- 4 files changed, 14 insertions(+), 14 deletions(-) diff --git a/test/unit/specs/components/post_status_form.spec.js b/test/unit/specs/components/post_status_form.spec.js index 03c0ec8b9..f89102504 100644 --- a/test/unit/specs/components/post_status_form.spec.js +++ b/test/unit/specs/components/post_status_form.spec.js @@ -80,8 +80,8 @@ describe('PostStatusForm', () => { expect(wrapper.vm.refId).to.equal('status-1') expect(wrapper.vm.quotable).to.equal(true) expect(wrapper.vm.inReplyToStatusId).to.equal('status-1') - expect(wrapper.vm.newStatus.quote).to.eql(null) - expect(wrapper.vm.newStatus.poll).to.eql(null) + expect(wrapper.vm.newStatus.quote).to.be.null + expect(wrapper.vm.newStatus.poll).to.be.null expect(wrapper.vm.newStatus.spoilerText).to.eql('') expect(wrapper.vm.newStatus.mentions).to.eql('@replied') expect(wrapper.vm.newStatus.status).to.eql('@replied ') @@ -101,8 +101,8 @@ describe('PostStatusForm', () => { expect(wrapper.vm.statusType).to.equal('reply') expect(wrapper.vm.isReply).to.equal(true) expect(wrapper.vm.quotable).to.equal(false) - expect(wrapper.vm.newStatus.quote).to.eql(null) - expect(wrapper.vm.newStatus.poll).to.eql(null) + expect(wrapper.vm.newStatus.quote).to.be.null + expect(wrapper.vm.newStatus.poll).to.be.null expect(wrapper.vm.newStatus.spoilerText).to.eql('re: subject') expect(wrapper.vm.newStatus.mentions).to.eql('@replied') expect(wrapper.vm.newStatus.status).to.eql('@replied ') @@ -114,9 +114,9 @@ describe('PostStatusForm', () => { expect(wrapper.vm.postingOptions.sensitive).to.eql(false) expect(wrapper.vm.postingOptions.media).to.eql([]) expect(wrapper.vm.postingOptions.inReplyToStatusId).to.eql('status-2') - expect(wrapper.vm.postingOptions.quoteId).to.eql(null) + expect(wrapper.vm.postingOptions.quoteId).to.be.null expect(wrapper.vm.postingOptions.contentType).to.eql('text/plain') - expect(wrapper.vm.postingOptions.poll).to.eql(null) + expect(wrapper.vm.postingOptions.poll).to.be.null }) it('Forces direct mode when replying to a DM, mastodon style subject handling', () => { @@ -139,8 +139,8 @@ describe('PostStatusForm', () => { expect(wrapper.vm.statusType).to.equal('reply') expect(wrapper.vm.isReply).to.equal(true) expect(wrapper.vm.quotable).to.equal(false) - expect(wrapper.vm.newStatus.quote).to.eql(null) - expect(wrapper.vm.newStatus.poll).to.eql(null) + expect(wrapper.vm.newStatus.quote).to.be.null + expect(wrapper.vm.newStatus.poll).to.be.null expect(wrapper.vm.newStatus.spoilerText).to.eql('subject') expect(wrapper.vm.newStatus.mentions).to.eql('@replied') expect(wrapper.vm.newStatus.status).to.eql('@replied ') @@ -207,7 +207,7 @@ describe('PostStatusForm', () => { wrapper.vm.quoteThreadToggled = true wrapper.vm.quoteThreadToggled = false - expect(wrapper.vm.newStatus.quote).to.eql(null) + expect(wrapper.vm.newStatus.quote).to.be.null }) it('Initializes and reset quote when toggling quote attachment', () => { @@ -228,7 +228,7 @@ describe('PostStatusForm', () => { url: '', }) wrapper.vm.toggleQuoteForm() - expect(wrapper.vm.newStatus.quote).to.eql(null) + expect(wrapper.vm.newStatus.quote).to.be.null }) it('Status editing', () => { diff --git a/test/unit/specs/lib/persisted_state.spec.js b/test/unit/specs/lib/persisted_state.spec.js index de7d92bd8..c37d0f99f 100644 --- a/test/unit/specs/lib/persisted_state.spec.js +++ b/test/unit/specs/lib/persisted_state.spec.js @@ -187,7 +187,7 @@ describe('piniaPersistPlugin', () => { const test = useTestStore() test.$patch({ a: 3 }) - expect(await mockStorage.getItem('pinia-local-test')).to.eql(undefined) + expect(await mockStorage.getItem('pinia-local-test')).to.be.undefined // NOTE: it should not even have tried to save, because the subscribe function // is called only after loading the initial state. expect(mockStorage.setItem).not.toHaveBeenCalled() diff --git a/test/unit/specs/modules/users.spec.js b/test/unit/specs/modules/users.spec.js index c07f817d8..1b33f8c4e 100644 --- a/test/unit/specs/modules/users.spec.js +++ b/test/unit/specs/modules/users.spec.js @@ -68,7 +68,7 @@ describe('The users module', () => { }, } const name = 'Guy' - expect(getters.findUser(state)(name)).to.eql(undefined) + expect(getters.findUser(state)(name)).to.be.undefined }) it('returns user with matching id', () => { @@ -114,7 +114,7 @@ describe('The users module', () => { }, } const id = '1' - expect(getters.findUserByName(state)(id)).to.eql(undefined) + expect(getters.findUserByName(state)(id)).to.be.undefined }) }) }) diff --git a/test/unit/specs/services/entity_normalizer/entity_normalizer.spec.js b/test/unit/specs/services/entity_normalizer/entity_normalizer.spec.js index da3f88636..c68c832a0 100644 --- a/test/unit/specs/services/entity_normalizer/entity_normalizer.spec.js +++ b/test/unit/specs/services/entity_normalizer/entity_normalizer.spec.js @@ -101,7 +101,7 @@ describe('API Entities normalizer', () => { describe('Mastoapi preprocessing and converting', () => { it("doesn't blow up", () => { const parsed = mastoapidata.map(parseStatus) - expect(parsed.length).to.eq(mastoapidata.length) + expect(parsed).to.have.length(mastoapidata.length) }) it('processes repeats correctly', () => { From f16e19d2b24203491529d53e784fa5eaac263a77 Mon Sep 17 00:00:00 2001 From: Henry Jameson Date: Tue, 4 Aug 2026 20:33:19 +0300 Subject: [PATCH 09/17] undefineds --- src/api/admin.js | 10 +++++----- src/api/helpers.js | 2 +- src/components/chat_view/chat_view.js | 4 ++-- src/components/color_input/color_input.vue | 4 ++-- src/components/font_control/font_control.vue | 2 +- src/components/opacity_input/opacity_input.vue | 2 +- src/components/range_input/range_input.vue | 4 ++-- src/components/roundness_input/roundness_input.vue | 2 +- .../settings_modal/tabs/old_theme_tab/old_theme_tab.js | 2 +- .../tabs/old_theme_tab/old_theme_tab.vue | 4 ++-- src/i18n/compare | 2 +- src/lib/persisted_state.js | 2 +- src/modules/api.js | 2 +- src/services/color_convert/color_convert.js | 4 ++-- src/stores/sync_config.js | 2 +- src/stores/user_highlight.js | 2 +- 16 files changed, 25 insertions(+), 25 deletions(-) diff --git a/src/api/admin.js b/src/api/admin.js index d4a9e8ff9..8bbee8b4f 100644 --- a/src/api/admin.js +++ b/src/api/admin.js @@ -237,10 +237,10 @@ export const changeStatusScope = ({ credentials, }) => { const payload = {} - if (typeof sensitive !== 'undefined') { + if (sensitive !== undefined) { payload['sensitive'] = sensitive } - if (typeof visibility !== 'undefined') { + if (visibility !== undefined) { payload['visibility'] = visibility } @@ -260,15 +260,15 @@ export const announcementToPayload = ({ }) => { const payload = { content } - if (typeof startsAt !== 'undefined') { + if (startsAt !== undefined) { payload.starts_at = startsAt ? new Date(startsAt).toISOString() : null } - if (typeof endsAt !== 'undefined') { + if (endsAt !== undefined) { payload.ends_at = endsAt ? new Date(endsAt).toISOString() : null } - if (typeof allDay !== 'undefined') { + if (allDay !== undefined) { payload.all_day = allDay } diff --git a/src/api/helpers.js b/src/api/helpers.js index cb2f2bdd5..22ba41ecb 100644 --- a/src/api/helpers.js +++ b/src/api/helpers.js @@ -40,7 +40,7 @@ export const paramsString = (params = {}) => { if ( typeof v === 'object' || typeof v === 'function' || - typeof v === 'undefined' + v === undefined ) throw new TypeError('Array param cannot contain non-primitives!') }) diff --git a/src/components/chat_view/chat_view.js b/src/components/chat_view/chat_view.js index f48b75c65..16b2ae1d7 100644 --- a/src/components/chat_view/chat_view.js +++ b/src/components/chat_view/chat_view.js @@ -97,7 +97,7 @@ const Chat = { mounted() { window.addEventListener('resize', this.handleResize) window.addEventListener('scroll', this.handleScroll) - if (typeof document.hidden !== 'undefined') { + if (document.hidden !== undefined) { document.addEventListener( 'visibilitychange', this.handleVisibilityChange, @@ -112,7 +112,7 @@ const Chat = { unmounted() { window.removeEventListener('scroll', this.handleScroll) window.removeEventListener('resize', this.handleResize) - if (typeof document.hidden !== 'undefined') + if (document.hidden !== undefined) document.removeEventListener( 'visibilitychange', this.handleVisibilityChange, diff --git a/src/components/color_input/color_input.vue b/src/components/color_input/color_input.vue index d6667c28f..53396f532 100644 --- a/src/components/color_input/color_input.vue +++ b/src/components/color_input/color_input.vue @@ -11,11 +11,11 @@ {{ label }}
diff --git a/src/i18n/compare b/src/i18n/compare index 94e5aab55..7afe9355c 100755 --- a/src/i18n/compare +++ b/src/i18n/compare @@ -1,7 +1,7 @@ #!/usr/bin/env node const arg = process.argv[2] -if (typeof arg === 'undefined') { +if (arg === undefined) { console.info('This is a very simple and tiny tool that checks en.json with any other language and') console.info('outputs all the things present in english but missing in foreign language.') console.info('') diff --git a/src/lib/persisted_state.js b/src/lib/persisted_state.js index aef1cc8dc..b4d6c596d 100644 --- a/src/lib/persisted_state.js +++ b/src/lib/persisted_state.js @@ -74,7 +74,7 @@ export default function createPersistedState({ if (saveImmedeatelyActions.includes(mutation.type)) { setState(key, reducer(cloneDeep(state), paths), storage).then( (success) => { - if (typeof success !== 'undefined') { + if (success !== undefined) { if ( mutation.type === 'setOption' || mutation.type === 'setCurrentUser' diff --git a/src/modules/api.js b/src/modules/api.js index 92b849a2b..d2c578c9c 100644 --- a/src/modules/api.js +++ b/src/modules/api.js @@ -325,7 +325,7 @@ const api = { const token = state.wsToken if ( useInstanceCapabilitiesStore().shoutAvailable && - typeof token !== 'undefined' && + token !== undefined && state.socket === null ) { const socket = new Socket('/socket', { params: { token } }) diff --git a/src/services/color_convert/color_convert.js b/src/services/color_convert/color_convert.js index 768552b1c..925969531 100644 --- a/src/services/color_convert/color_convert.js +++ b/src/services/color_convert/color_convert.js @@ -11,7 +11,7 @@ import { contrastRatio, convert, invertLightness } from 'chromatism' * @param {Number} [b] - Blue component */ export const rgb2hex = (r, g, b) => { - if (r === null || typeof r === 'undefined') { + if (r === null || r === undefined) { return undefined } // TODO: clean up this mess @@ -130,7 +130,7 @@ export const arithmeticBlend = (origin, value, operator) => { * @returns {Object} sRGB of resulting color */ export const alphaBlend = (fg, fga, bg) => { - if (fga === 1 || typeof fga === 'undefined') { + if (fga === 1 || fga === undefined) { return fg } diff --git a/src/stores/sync_config.js b/src/stores/sync_config.js index fb1450c18..9464ffb68 100644 --- a/src/stores/sync_config.js +++ b/src/stores/sync_config.js @@ -104,7 +104,7 @@ const _verifyPrefs = (state) => { // Simple Object.entries(defaultState.prefsStorage.simple).forEach(([k, v]) => { - if (typeof v === 'undefined') return + if (v === undefined) return if (typeof v === 'number' || typeof v === 'boolean') return if (typeof v === 'object') return console.warn( diff --git a/src/stores/user_highlight.js b/src/stores/user_highlight.js index 0db37703d..3cd3bfe7d 100644 --- a/src/stores/user_highlight.js +++ b/src/stores/user_highlight.js @@ -43,7 +43,7 @@ const _verifyHighlights = (state) => { // Simple Object.entries(defaultState.highlight).forEach(([k, v]) => { - if (typeof v === 'undefined') return + if (v === undefined) return if (typeof v === 'object') return console.warn(`User highlight ${k} is invalid type ${typeof v}, unsetting`) delete state.highlight[k] From 88b2f89877e7193a5c40efa2482ba1b1bad6016b Mon Sep 17 00:00:00 2001 From: Henry Jameson Date: Tue, 4 Aug 2026 20:38:43 +0300 Subject: [PATCH 10/17] indexof --- src/components/conversation/conversation.js | 2 +- src/modules/users.js | 6 +++--- src/services/file_type/file_type.service.js | 2 +- src/services/theme_data/css_utils.js | 2 +- test/e2e/runner.js | 4 ++-- 5 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/components/conversation/conversation.js b/src/components/conversation/conversation.js index 16a22caab..73aaa2358 100644 --- a/src/components/conversation/conversation.js +++ b/src/components/conversation/conversation.js @@ -309,7 +309,7 @@ const conversation = { (k) => this.getReplies(cur.id) .map((v) => v.id) - .indexOf(k.id) === -1, + .includes(k.id), ), this.conversation, ) diff --git a/src/modules/users.js b/src/modules/users.js index 8764efa96..0988b45c5 100644 --- a/src/modules/users.js +++ b/src/modules/users.js @@ -269,7 +269,7 @@ export const mutations = { state.currentUser.blockIds = blockIds }, addBlockId(state, blockId) { - if (state.currentUser.blockIds.indexOf(blockId) === -1) { + if (state.currentUser.blockIds.includes(blockId)) { state.currentUser.blockIds.push(blockId) } }, @@ -283,7 +283,7 @@ export const mutations = { state.currentUser.muteIdsMaxId = muteIdsMaxId }, addMuteId(state, muteId) { - if (state.currentUser.muteIds.indexOf(muteId) === -1) { + if (state.currentUser.muteIds.includes(muteId)) { state.currentUser.muteIds.push(muteId) } }, @@ -291,7 +291,7 @@ export const mutations = { state.currentUser.domainMutes = domainMutes }, addDomainMute(state, domain) { - if (state.currentUser.domainMutes.indexOf(domain) === -1) { + if (state.currentUser.domainMutes.includes(domain)) { state.currentUser.domainMutes.push(domain) } }, diff --git a/src/services/file_type/file_type.service.js b/src/services/file_type/file_type.service.js index 02f659eec..b6179cd81 100644 --- a/src/services/file_type/file_type.service.js +++ b/src/services/file_type/file_type.service.js @@ -43,7 +43,7 @@ export const fileTypeExt = (url) => { } export const fileMatchesSomeType = (types, file) => - types.some((type) => fileType(file.mimetype) === type) + types.includes(fileType(file.mimetype)) const fileTypeService = { fileType, diff --git a/src/services/theme_data/css_utils.js b/src/services/theme_data/css_utils.js index 990db652c..b728f68d2 100644 --- a/src/services/theme_data/css_utils.js +++ b/src/services/theme_data/css_utils.js @@ -165,7 +165,7 @@ export const getCssRules = (rules, debug) => header, directives, rule.component === 'Text' && - rule.state.indexOf('faint') < 0 && + !rule.state.includes('faint') && rule.directives.textNoCssColor !== 'yes' ? ' color: var(--text);' : '', diff --git a/test/e2e/runner.js b/test/e2e/runner.js index 33fcc322c..06cae7813 100644 --- a/test/e2e/runner.js +++ b/test/e2e/runner.js @@ -10,10 +10,10 @@ const server = require('../../build/dev-server.js') // For more information on Nightwatch's config file, see // http://nightwatchjs.org/guide#settings-file let opts = process.argv.slice(2) -if (opts.indexOf('--config') === -1) { +if (!opts.includes('--config')) { opts = opts.concat(['--config', 'test/e2e/nightwatch.conf.js']) } -if (opts.indexOf('--env') === -1) { +if (!opts.includes('--env')) { opts = opts.concat(['--env', 'chrome']) } From 11054bdad77a901b877ef96cc0722ea9515e11fe Mon Sep 17 00:00:00 2001 From: Henry Jameson Date: Tue, 4 Aug 2026 20:55:55 +0300 Subject: [PATCH 11/17] promises --- src/components/settings_modal/admin_tabs/emoji_tab.js | 10 +++++----- .../settings_modal/helpers/emoji_editing_popover.vue | 2 +- src/lib/persisted_state.js | 2 +- src/services/style_setter/style_setter.js | 6 +----- src/services/sw/sw.js | 4 ++-- src/services/theme_data/theme2_to_theme3.js | 4 ++-- src/services/theme_data/theme_data_3.service.js | 10 +++++----- 7 files changed, 17 insertions(+), 21 deletions(-) diff --git a/src/components/settings_modal/admin_tabs/emoji_tab.js b/src/components/settings_modal/admin_tabs/emoji_tab.js index 7dc9e91bf..33ead7c16 100644 --- a/src/components/settings_modal/admin_tabs/emoji_tab.js +++ b/src/components/settings_modal/admin_tabs/emoji_tab.js @@ -122,7 +122,7 @@ const EmojiTab = { return this.refreshPackList() } else { this.displayError(resp.error) - return Promise.reject(resp) + throw new Error(resp) } }) .then(() => { @@ -139,7 +139,7 @@ const EmojiTab = { return this.refreshPackList() } else { this.displayError(resp.error) - return Promise.reject(resp) + throw new Error(resp) } }) .then(() => { @@ -239,7 +239,7 @@ const EmojiTab = { return this.refreshPackList() } else { this.displayError(resp.error) - return Promise.reject(resp) + throw new Error(resp) } }) .then(() => { @@ -259,7 +259,7 @@ const EmojiTab = { return this.refreshPackList() } else { this.displayError(resp.error) - return Promise.reject(resp) + throw new Error(resp) } }) .then(() => { @@ -280,7 +280,7 @@ const EmojiTab = { return this.refreshPackList() } else { this.displayError(resp.error) - return Promise.reject(resp) + throw new Error(resp) } }) .then(() => { diff --git a/src/components/settings_modal/helpers/emoji_editing_popover.vue b/src/components/settings_modal/helpers/emoji_editing_popover.vue index d3db657d3..0cd04f053 100644 --- a/src/components/settings_modal/helpers/emoji_editing_popover.vue +++ b/src/components/settings_modal/helpers/emoji_editing_popover.vue @@ -262,7 +262,7 @@ export default { .then((resp) => { if (resp.error !== undefined) { this.$emit('displayError', resp.error) - return Promise.reject(resp.error) + throw new Error(resp.error) } return resp.json() diff --git a/src/lib/persisted_state.js b/src/lib/persisted_state.js index b4d6c596d..5fcf259aa 100644 --- a/src/lib/persisted_state.js +++ b/src/lib/persisted_state.js @@ -198,7 +198,7 @@ export const piniaPersistPlugin = const setState = (state) => { if (!loadedGuard.loaded) { console.info('waiting for old state to be loaded...') - return Promise.reject() + throw new Error('Waiting') } else { return storage.setItem(key, state) } diff --git a/src/services/style_setter/style_setter.js b/src/services/style_setter/style_setter.js index 4eed080c1..68e0632bf 100644 --- a/src/services/style_setter/style_setter.js +++ b/src/services/style_setter/style_setter.js @@ -359,11 +359,7 @@ export const getResourcesIndex = async (url, parser = (x) => x) => { const total = [...custom, ...builtin] if (total.length === 0) { - return Promise.reject( - new Error( - `Resource at ${url} and ${customUrl} completely unavailable. Panicking`, - ), - ) + throw new Error(`Resource at ${url} and ${customUrl} completely unavailable. Panicking`) } return Promise.resolve(Object.fromEntries(total)) } diff --git a/src/services/sw/sw.js b/src/services/sw/sw.js index 4f044c426..30c95406b 100644 --- a/src/services/sw/sw.js +++ b/src/services/sw/sw.js @@ -29,9 +29,9 @@ function getOrCreateServiceWorker() { function subscribePush(registration, isEnabled, vapidPublicKey) { if (!isEnabled) - return Promise.reject(new Error('Web Push is disabled in config')) + throw new Error('Web Push is disabled in config') if (!vapidPublicKey) - return Promise.reject(new Error('VAPID public key is not found')) + throw new Error('VAPID public key is not found') const subscribeOptions = { userVisibleOnly: false, diff --git a/src/services/theme_data/theme2_to_theme3.js b/src/services/theme_data/theme2_to_theme3.js index 5bab4818c..9ea319175 100644 --- a/src/services/theme_data/theme2_to_theme3.js +++ b/src/services/theme_data/theme2_to_theme3.js @@ -512,7 +512,7 @@ export const convertTheme2To3 = (data) => { { ...newRule, component: 'Tab' }, { ...newRule, component: 'ScrollbarElement' }, ] - if (newRule.state?.indexOf('toggled') >= 0) { + if (newRule.state?.includes('toggled')) { rules.push({ ...newRule, state: [...newRule.state, 'focused'] }) rules.push({ ...newRule, state: [...newRule.state, 'hover'] }) rules.push({ @@ -520,7 +520,7 @@ export const convertTheme2To3 = (data) => { state: [...newRule.state, 'hover', 'focused'], }) } - if (newRule.state?.indexOf('hover') >= 0) { + if (newRule.state?.includes('hover')) { rules.push({ ...newRule, state: [...newRule.state, 'focused'] }) } return rules diff --git a/src/services/theme_data/theme_data_3.service.js b/src/services/theme_data/theme_data_3.service.js index 626d7daeb..507b384db 100644 --- a/src/services/theme_data/theme_data_3.service.js +++ b/src/services/theme_data/theme_data_3.service.js @@ -690,11 +690,11 @@ export const init = ({ .map((combination) => ['normal', ...combination]) .filter((combo) => { // Optimization: filter out some hard-coded combinations that don't make sense - if (combo.indexOf('disabled') >= 0) { + if (combo.includes('disabled')) { return !( - combo.indexOf('hover') >= 0 || - combo.indexOf('focused') >= 0 || - combo.indexOf('pressed') >= 0 + combo.includes('hover') || + combo.includes('focused') || + combo.includes('pressed') ) } return true @@ -711,7 +711,7 @@ export const init = ({ combination.component = component.name combination.lazy = component.lazy || parent?.lazy combination.parent = parent - if (!liteMode && combination.state.indexOf('hover') >= 0) { + if (!liteMode && combination.state.includes('hover')) { combination.lazy = true } From 03ef01672ea1f04fcaac051a6a3f1fb927552f95 Mon Sep 17 00:00:00 2001 From: Henry Jameson Date: Tue, 4 Aug 2026 21:06:38 +0300 Subject: [PATCH 12/17] more promises --- src/i18n/messages.js | 2 +- src/modules/users.js | 6 +++--- src/services/style_setter/style_setter.js | 4 ++-- src/services/sw/sw.js | 4 ++-- src/stores/interface.js | 6 +++--- 5 files changed, 11 insertions(+), 11 deletions(-) diff --git a/src/i18n/messages.js b/src/i18n/messages.js index 76d6b5386..db80f7ac3 100644 --- a/src/i18n/messages.js +++ b/src/i18n/messages.js @@ -20,7 +20,7 @@ const languageFileMap = import.meta.glob(['./*.json', '!./en.json']) const loadLanguageFile = (code) => { const jsonName = langCodeToJsonName(code) - if (jsonName === 'en') return Promise.resolve({ default: enMessages }) + if (jsonName === 'en') return { default: enMessages } return languageFileMap[`./${jsonName}.json`]() } diff --git a/src/modules/users.js b/src/modules/users.js index 0988b45c5..c4af0fb36 100644 --- a/src/modules/users.js +++ b/src/modules/users.js @@ -76,10 +76,10 @@ const mergeArrayLength = (oldValue, newValue) => { const getNotificationPermission = () => { const Notification = window.Notification - if (!Notification) return Promise.resolve(null) + if (!Notification) return null if (Notification.permission === 'default') return Notification.requestPermission() - return Promise.resolve(Notification.permission) + return Notification.permission } const blockUser = (store, args) => { @@ -388,7 +388,7 @@ const users = { if (!user) { return store.dispatch('fetchUser', id) } else { - return Promise.resolve(user) + return user } }, updateUserAdminData(store, { userAdminData }) { diff --git a/src/services/style_setter/style_setter.js b/src/services/style_setter/style_setter.js index 68e0632bf..a6f22e50b 100644 --- a/src/services/style_setter/style_setter.js +++ b/src/services/style_setter/style_setter.js @@ -316,7 +316,7 @@ export const getResourcesIndex = async (url, parser = (x) => x) => { const resourceTransform = (resources) => { return Object.entries(resources).map(([k, v]) => { if (typeof v === 'object') { - return [k, () => Promise.resolve(v)] + return [k, () => v] } else if (typeof v === 'string') { return [ k, @@ -361,5 +361,5 @@ export const getResourcesIndex = async (url, parser = (x) => x) => { if (total.length === 0) { throw new Error(`Resource at ${url} and ${customUrl} completely unavailable. Panicking`) } - return Promise.resolve(Object.fromEntries(total)) + return Object.fromEntries(total) } diff --git a/src/services/sw/sw.js b/src/services/sw/sw.js index 30c95406b..53c7b0cf2 100644 --- a/src/services/sw/sw.js +++ b/src/services/sw/sw.js @@ -40,10 +40,10 @@ function subscribePush(registration, isEnabled, vapidPublicKey) { return registration.pushManager.subscribe(subscribeOptions) } -function unsubscribePush(registration) { +async function unsubscribePush(registration) { return registration.pushManager.getSubscription().then((subscription) => { if (subscription === null) { - return Promise.resolve('No subscription') + return 'No subscription' } return subscription.unsubscribe() }) diff --git a/src/stores/interface.js b/src/stores/interface.js index edc879614..7be72a8d2 100644 --- a/src/stores/interface.js +++ b/src/stores/interface.js @@ -294,7 +294,7 @@ export const useInterfaceStore = defineStore('interface', { path: 'palettesIndex', value: { _error: e }, }) - return Promise.resolve({}) + return {} } }, setPalette(value) { @@ -332,7 +332,7 @@ export const useInterfaceStore = defineStore('interface', { path: 'simple.stylesIndex', value: { _error: e }, }) - return Promise.resolve({}) + return {} } }, setStyle(value) { @@ -375,7 +375,7 @@ export const useInterfaceStore = defineStore('interface', { path: 'themesIndex', value: { _error: e }, }) - return Promise.resolve({}) + return {} } }, setTheme(value) { From b8a0f540a309f39ee94c65a0464dca908ee8f18d Mon Sep 17 00:00:00 2001 From: Henry Jameson Date: Tue, 4 Aug 2026 21:10:07 +0300 Subject: [PATCH 13/17] flat --- src/components/conversation/conversation.js | 4 +-- src/components/emoji_picker/emoji_picker.js | 2 +- src/services/theme_data/iss_utils.js | 4 +-- src/services/theme_data/theme2_to_theme3.js | 4 +-- .../theme_data/theme_data_3.service.js | 4 +-- src/stores/emoji.js | 26 ++++++++----------- 6 files changed, 20 insertions(+), 24 deletions(-) diff --git a/src/components/conversation/conversation.js b/src/components/conversation/conversation.js index 73aaa2358..f05af6f36 100644 --- a/src/components/conversation/conversation.js +++ b/src/components/conversation/conversation.js @@ -239,9 +239,9 @@ const conversation = { depth, }, walk(forest, forest[id], depth + 1, processed), - ].reduce((a, b) => a.concat(b), []) + ].flat() }) - .reduce((a, b) => a.concat(b), []) + .flat() const linearized = walk( threads.forest, diff --git a/src/components/emoji_picker/emoji_picker.js b/src/components/emoji_picker/emoji_picker.js index ac9952b9b..a0e30bf6d 100644 --- a/src/components/emoji_picker/emoji_picker.js +++ b/src/components/emoji_picker/emoji_picker.js @@ -408,7 +408,7 @@ const EmojiPicker = { isFirstRow: index === 0, })), ) - .reduce((a, c) => a.concat(c), []) + .flat() }, languages() { return ensureFinalFallback( diff --git a/src/services/theme_data/iss_utils.js b/src/services/theme_data/iss_utils.js index 67579a118..d42da3780 100644 --- a/src/services/theme_data/iss_utils.js +++ b/src/services/theme_data/iss_utils.js @@ -24,7 +24,7 @@ export const getAllPossibleCombinations = (array) => { const nonSelf = array.filter((x) => !selfSet.has(x)) return nonSelf.map((x) => [...self, x]) }) - const flatCombos = newCombos.reduce((acc, x) => [...acc, ...x], []) + const flatCombos = newCombos.flat() const uniqueComboStrings = new Set() const uniqueCombos = flatCombos.map(sortBy).filter((x) => { if (uniqueComboStrings.has(x.join())) { @@ -36,7 +36,7 @@ export const getAllPossibleCombinations = (array) => { }) combos.push(uniqueCombos) } - return combos.reduce((acc, x) => [...acc, ...x], []) + return combos.flat() } /** diff --git a/src/services/theme_data/theme2_to_theme3.js b/src/services/theme_data/theme2_to_theme3.js index 9ea319175..96955edfd 100644 --- a/src/services/theme_data/theme2_to_theme3.js +++ b/src/services/theme_data/theme2_to_theme3.js @@ -559,9 +559,9 @@ export const convertTheme2To3 = (data) => { const flatExtRules = extendedRules .filter(Boolean) - .reduce((acc, x) => [...acc, ...x], []) + .flat() .filter(Boolean) - .reduce((acc, x) => [...acc, ...x], []) + .flat() return [ generateRoot(), diff --git a/src/services/theme_data/theme_data_3.service.js b/src/services/theme_data/theme_data_3.service.js index 507b384db..465062225 100644 --- a/src/services/theme_data/theme_data_3.service.js +++ b/src/services/theme_data/theme_data_3.service.js @@ -262,7 +262,7 @@ export const init = ({ ...r, })), ) - .reduce((acc, arr) => [...acc, ...arr], []), + .flat() ...inputRuleset, ].map((rule) => { normalizeCombination(rule) @@ -705,7 +705,7 @@ export const init = ({ .map((variant) => { return stateCombinations.map((state) => ({ variant, state })) }) - .reduce((acc, x) => [...acc, ...x], []) + .flat() stateVariantCombination.forEach((combination) => { combination.component = component.name diff --git a/src/stores/emoji.js b/src/stores/emoji.js index 2d77954f1..8135a483e 100644 --- a/src/stores/emoji.js +++ b/src/stores/emoji.js @@ -120,23 +120,19 @@ export const useEmojiStore = defineStore('emoji', { }, {}) }, standardEmojiList(state) { - return ( - SORTED_EMOJI_GROUP_IDS.map((groupId) => - (this.emoji[groupId] || []).map((k) => - injectAnnotations(k, this.unicodeEmojiAnnotations), - ), - ).reduce((a, b) => a.concat(b), []) ?? [] - ) + return SORTED_EMOJI_GROUP_IDS.map((groupId) => + (this.emoji[groupId] || []).map((k) => + injectAnnotations(k, this.unicodeEmojiAnnotations), + ), + ).flat() }, standardEmojiGroupList(state) { - return ( - SORTED_EMOJI_GROUP_IDS.map((groupId) => ({ - id: groupId, - emojis: (this.emoji[groupId] || []).map((k) => - injectAnnotations(k, this.unicodeEmojiAnnotations), - ), - })) ?? [] - ) + return SORTED_EMOJI_GROUP_IDS.map((groupId) => ({ + id: groupId, + emojis: (this.emoji[groupId] || []).map((k) => + injectAnnotations(k, this.unicodeEmojiAnnotations), + ), + })) }, }, actions: { From a62487b36b57934abbe903e0aa66751e119cb908 Mon Sep 17 00:00:00 2001 From: Henry Jameson Date: Tue, 4 Aug 2026 21:14:09 +0300 Subject: [PATCH 14/17] fixes --- src/api/helpers.js | 6 +----- src/components/conversation/conversation.js | 9 ++++----- src/components/settings_modal/helpers/unit_setting.js | 5 ++++- src/services/notification_utils/notification_utils.js | 3 +-- src/services/style_setter/style_setter.js | 4 +++- src/services/sw/sw.js | 6 ++---- src/services/theme_data/theme_data_3.service.js | 2 +- 7 files changed, 16 insertions(+), 19 deletions(-) diff --git a/src/api/helpers.js b/src/api/helpers.js index 22ba41ecb..90956a4dc 100644 --- a/src/api/helpers.js +++ b/src/api/helpers.js @@ -37,11 +37,7 @@ export const paramsString = (params = {}) => { arrays.forEach(([k, array]) => { array.forEach((v) => { - if ( - typeof v === 'object' || - typeof v === 'function' || - v === undefined - ) + if (typeof v === 'object' || typeof v === 'function' || v === undefined) throw new TypeError('Array param cannot contain non-primitives!') }) }) diff --git a/src/components/conversation/conversation.js b/src/components/conversation/conversation.js index f05af6f36..d27551c3c 100644 --- a/src/components/conversation/conversation.js +++ b/src/components/conversation/conversation.js @@ -305,11 +305,10 @@ const conversation = { topLevel() { const topLevel = this.conversation.reduce( (tl, cur) => - tl.filter( - (k) => - this.getReplies(cur.id) - .map((v) => v.id) - .includes(k.id), + tl.filter((k) => + this.getReplies(cur.id) + .map((v) => v.id) + .includes(k.id), ), this.conversation, ) diff --git a/src/components/settings_modal/helpers/unit_setting.js b/src/components/settings_modal/helpers/unit_setting.js index f537eab85..3be6b7a10 100644 --- a/src/components/settings_modal/helpers/unit_setting.js +++ b/src/components/settings_modal/helpers/unit_setting.js @@ -67,7 +67,10 @@ export default { return this.$t(['settings', 'units', this.unitSet, value].join('.')) }, updateValue(e) { - this.configSink(this.path, Number.parseFloat(e.target.value) + this.stateUnit) + this.configSink( + this.path, + Number.parseFloat(e.target.value) + this.stateUnit, + ) }, updateUnit(e) { let value = this.stateValue diff --git a/src/services/notification_utils/notification_utils.js b/src/services/notification_utils/notification_utils.js index 107b183c2..9e443bf8b 100644 --- a/src/services/notification_utils/notification_utils.js +++ b/src/services/notification_utils/notification_utils.js @@ -95,8 +95,7 @@ export const filteredNotificationsFromStore = ( types, ) => { // map is just to clone the array since sort mutates it and it causes some issues - const sortedNotifications = notificationsFromStore(store) - .sort(sortById) + const sortedNotifications = notificationsFromStore(store).sort(sortById) // TODO implement sorting elsewhere and make it optional return sortedNotifications.filter((notification) => (types || visibleTypes(notificationVisibility)).includes(notification.type), diff --git a/src/services/style_setter/style_setter.js b/src/services/style_setter/style_setter.js index a6f22e50b..318978264 100644 --- a/src/services/style_setter/style_setter.js +++ b/src/services/style_setter/style_setter.js @@ -359,7 +359,9 @@ export const getResourcesIndex = async (url, parser = (x) => x) => { const total = [...custom, ...builtin] if (total.length === 0) { - throw new Error(`Resource at ${url} and ${customUrl} completely unavailable. Panicking`) + throw new Error( + `Resource at ${url} and ${customUrl} completely unavailable. Panicking`, + ) } return Object.fromEntries(total) } diff --git a/src/services/sw/sw.js b/src/services/sw/sw.js index 53c7b0cf2..ef8200a4d 100644 --- a/src/services/sw/sw.js +++ b/src/services/sw/sw.js @@ -28,10 +28,8 @@ function getOrCreateServiceWorker() { } function subscribePush(registration, isEnabled, vapidPublicKey) { - if (!isEnabled) - throw new Error('Web Push is disabled in config') - if (!vapidPublicKey) - throw new Error('VAPID public key is not found') + if (!isEnabled) throw new Error('Web Push is disabled in config') + if (!vapidPublicKey) throw new Error('VAPID public key is not found') const subscribeOptions = { userVisibleOnly: false, diff --git a/src/services/theme_data/theme_data_3.service.js b/src/services/theme_data/theme_data_3.service.js index 465062225..694e41e12 100644 --- a/src/services/theme_data/theme_data_3.service.js +++ b/src/services/theme_data/theme_data_3.service.js @@ -262,7 +262,7 @@ export const init = ({ ...r, })), ) - .flat() + .flat(), ...inputRuleset, ].map((rule) => { normalizeCombination(rule) From 899c852d9cf5da06c8ee3c7d10b8b7b000a38cf1 Mon Sep 17 00:00:00 2001 From: Henry Jameson Date: Tue, 4 Aug 2026 21:17:42 +0300 Subject: [PATCH 15/17] remove copypasta --- .../settings_modal/tabs/clutter_tab.js | 116 +----------------- 1 file changed, 1 insertion(+), 115 deletions(-) diff --git a/src/components/settings_modal/tabs/clutter_tab.js b/src/components/settings_modal/tabs/clutter_tab.js index 6cec2ce93..87269eb99 100644 --- a/src/components/settings_modal/tabs/clutter_tab.js +++ b/src/components/settings_modal/tabs/clutter_tab.js @@ -1,5 +1,4 @@ -import { mapActions, mapState } from 'pinia' -import { v4 as uuidv4 } from 'uuid' +import { mapState } from 'pinia' import Checkbox from 'src/components/checkbox/checkbox.vue' import Select from 'src/components/select/select.vue' @@ -12,7 +11,6 @@ import UnitSetting from '../helpers/unit_setting.vue' import { useInstanceStore } from 'src/stores/instance.js' import { useInstanceCapabilitiesStore } from 'src/stores/instance_capabilities.js' -import { useSyncConfigStore } from 'src/stores/sync_config.js' const ClutterTab = { components: { @@ -33,118 +31,6 @@ const ClutterTab = { store.instanceIdentity.showInstanceSpecificPanel && store.instanceIdentity.instanceSpecificPanelContent, }), - ...mapState(useSyncConfigStore, { - muteFilters: (store) => - Object.entries(store.prefsStorage.simple.muteFilters), - muteFiltersObject: (store) => store.prefsStorage.simple.muteFilters, - }), - }, - methods: { - ...mapActions(useSyncConfigStore, [ - 'setSimplePrefAndSave', - 'unsetSimplePrefAndSave', - 'pushSyncConfig', - ]), - getDatetimeLocal(timestamp) { - const date = new Date(timestamp) - const fmt = new Intl.NumberFormat('en-US', { minimumIntegerDigits: 2 }) - const datetime = [ - date.getFullYear(), - '-', - fmt.format(date.getMonth() + 1), - '-', - fmt.format(date.getDate()), - 'T', - fmt.format(date.getHours()), - ':', - fmt.format(date.getMinutes()), - ].join('') - return datetime - }, - checkRegexValid(id) { - const filter = this.muteFiltersObject[id] - if (filter.type !== 'regexp') return true - if (filter.type !== 'user_regexp') return true - const { value } = filter - let valid = true - try { - new RegExp(value) - } catch { - valid = false - console.error('Invalid RegExp: ' + value) - } - return valid - }, - createFilter({ - type = 'word', - value = '', - name = 'New Filter', - enabled = true, - expires = null, - hide = false, - }) { - const newId = uuidv4() - - filter.order = this.muteFilters.length + 2 - this.muteFiltersDraftObject[newId] = filter - this.setSimplePrefAndSave({ path: 'muteFilters.' + newId, value: filter }) - this.pushSyncConfig() - }, - exportFilter(id) { - this.exportedFilter = { ...this.muteFiltersDraftObject[id] } - delete this.exportedFilter.order - this.filterExporter.exportData() - }, - importFilter() { - this.filterImporter.importData() - }, - copyFilter(id) { - const filter = { ...this.muteFiltersDraftObject[id] } - const newId = uuidv4() - - this.muteFiltersDraftObject[newId] = filter - this.setSimplePrefAndSave({ path: 'muteFilters.' + newId, value: filter }) - this.pushSyncConfig() - }, - deleteFilter(id) { - delete this.muteFiltersDraftObject[id] - this.unsetSimplePrefAndSave({ path: 'muteFilters.' + id, value: null }) - this.pushSyncConfig() - }, - purgeExpiredFilters() { - this.muteFiltersExpired.forEach(([id]) => { - delete this.muteFiltersDraftObject[id] - this.unsetSimplePrefAndSave({ path: 'muteFilters.' + id, value: null }) - }) - this.pushSyncConfig() - }, - updateFilter(id, field, value) { - const filter = { ...this.muteFiltersDraftObject[id] } - if (field === 'expires-never') { - if (!value) { - const offset = 1000 * 60 * 60 * 24 * 14 // 2 weeks - const date = Date.now() + offset - filter.expires = date - } else { - filter.expires = null - } - } else if (field === 'expires') { - const parsed = Date.parse(value) - filter.expires = parsed.valueOf() - } else { - filter[field] = value - } - this.muteFiltersDraftObject[id] = filter - this.muteFiltersDraftDirty[id] = true - }, - saveFilter(id) { - this.setSimplePrefAndSave({ - path: 'muteFilters.' + id, - value: this.muteFiltersDraftObject[id], - }) - this.pushSyncConfig() - this.muteFiltersDraftDirty[id] = false - }, }, // Updating nested properties watch: { From 6c3800c1840af45d6a4f5fc04d31fb340c4e08a1 Mon Sep 17 00:00:00 2001 From: Henry Jameson Date: Tue, 4 Aug 2026 21:17:51 +0300 Subject: [PATCH 16/17] proper fix for new filters --- .../settings_modal/tabs/filtering_tab.js | 27 +++++++++++-------- 1 file changed, 16 insertions(+), 11 deletions(-) diff --git a/src/components/settings_modal/tabs/filtering_tab.js b/src/components/settings_modal/tabs/filtering_tab.js index a8c7f3e1b..3a9cad6d2 100644 --- a/src/components/settings_modal/tabs/filtering_tab.js +++ b/src/components/settings_modal/tabs/filtering_tab.js @@ -190,19 +190,24 @@ const FilteringTab = { } return valid }, - createFilter({ - type = 'word', - value = '', - name = 'New Filter', - enabled = true, - expires = null, - hide = false, - }) { + createFilter(filter) { const newId = uuidv4() + const newFilter = { + type: 'word', + value: '', + name: 'New Filter', + enabled: true, + expires: null, + hide: false, + ...filter, + } - filter.order = this.muteFilters.length + 2 - this.muteFiltersDraftObject[newId] = filter - this.setSimplePrefAndSave({ path: 'muteFilters.' + newId, value: filter }) + newFilter.order = this.muteFilters.length + 2 + this.muteFiltersDraftObject[newId] = newFilter + this.setSimplePrefAndSave({ + path: 'muteFilters.' + newId, + value: newFilter, + }) }, exportFilter(id) { this.exportedFilter = { ...this.muteFiltersDraftObject[id] } From 315bca67f0993fac29817cbedd4e5393b6edeb27 Mon Sep 17 00:00:00 2001 From: Henry Jameson Date: Tue, 4 Aug 2026 21:27:02 +0300 Subject: [PATCH 17/17] sequential pushes --- src/services/theme_data/theme2_to_theme3.js | 56 ++++++++++++--------- 1 file changed, 33 insertions(+), 23 deletions(-) diff --git a/src/services/theme_data/theme2_to_theme3.js b/src/services/theme_data/theme2_to_theme3.js index 96955edfd..8c3ac6ad2 100644 --- a/src/services/theme_data/theme2_to_theme3.js +++ b/src/services/theme_data/theme2_to_theme3.js @@ -191,14 +191,16 @@ export const convertTheme2To3 = (data) => { newRules.push(rule) if (rule.component === 'Button') { - newRules.push({ ...rule, component: 'ScrollbarElement' }) - newRules.push({ ...rule, component: 'Tab' }) - newRules.push({ - ...rule, - component: 'Tab', - state: ['active'], - directives: { opacity: 0 }, - }) + newRules.push( + { ...rule, component: 'ScrollbarElement' }, + { ...rule, component: 'Tab' }, + { + ...rule, + component: 'Tab', + state: ['active'], + directives: { opacity: 0 }, + }, + ) } if (rule.component === 'Panel') { newRules.push({ ...rule, component: 'Post' }) @@ -250,8 +252,10 @@ export const convertTheme2To3 = (data) => { } newRules.push(rule) if (rule.component === 'Button') { - newRules.push({ ...rule, component: 'ScrollbarElement' }) - newRules.push({ ...rule, component: 'Tab' }) + newRules.push( + { ...rule, component: 'ScrollbarElement' }, + { ...rule, component: 'Tab' }, + ) } }) return newRules @@ -349,16 +353,20 @@ export const convertTheme2To3 = (data) => { newRules.push({ ...rule, parent: { component: 'Notification' } }) } if (key === 'buttonPressed') { - newRules.push({ ...rule, state: ['toggled'] }) - newRules.push({ ...rule, state: ['toggled', 'focus'] }) - newRules.push({ ...rule, state: ['pressed', 'focus'] }) - newRules.push({ ...rule, state: ['toggled', 'focus', 'hover'] }) - newRules.push({ ...rule, state: ['pressed', 'focus', 'hover'] }) + newRules.push( + { ...rule, state: ['toggled'] }, + { ...rule, state: ['toggled', 'focus'] }, + { ...rule, state: ['pressed', 'focus'] }, + { ...rule, state: ['toggled', 'focus', 'hover'] }, + { ...rule, state: ['pressed', 'focus', 'hover'] }, + ) } if (rule.component === 'Button') { - newRules.push({ ...rule, component: 'ScrollbarElement' }) - newRules.push({ ...rule, component: 'Tab' }) + newRules.push( + { ...rule, component: 'ScrollbarElement' }, + { ...rule, component: 'Tab' }, + ) } }) return newRules @@ -513,12 +521,14 @@ export const convertTheme2To3 = (data) => { { ...newRule, component: 'ScrollbarElement' }, ] if (newRule.state?.includes('toggled')) { - rules.push({ ...newRule, state: [...newRule.state, 'focused'] }) - rules.push({ ...newRule, state: [...newRule.state, 'hover'] }) - rules.push({ - ...newRule, - state: [...newRule.state, 'hover', 'focused'], - }) + rules.push( + { ...newRule, state: [...newRule.state, 'focused'] }, + { ...newRule, state: [...newRule.state, 'hover'] }, + { + ...newRule, + state: [...newRule.state, 'hover', 'focused'], + }, + ) } if (newRule.state?.includes('hover')) { rules.push({ ...newRule, state: [...newRule.state, 'focused'] })