diff --git a/build/sw_plugin.js b/build/sw_plugin.js index 066c8da12..115e8ca3a 100644 --- a/build/sw_plugin.js +++ b/build/sw_plugin.js @@ -1,7 +1,7 @@ import { readFile } from 'node:fs/promises' +import { exactRegex } from '@rolldown/pluginutils' import { dirname, resolve } from 'node:path' import { fileURLToPath } from 'node:url' -import { exactRegex } from '@rolldown/pluginutils' import { build } from 'vite' import { @@ -15,6 +15,7 @@ const getSWMessagesAsText = async () => { } const projectRoot = dirname(dirname(fileURLToPath(import.meta.url))) + // Idea taken from // https://github.com/vite-pwa/vite-plugin-pwa/blob/main/src/plugins/build.ts // rollup does not support compiling to iife if we want to code-split; @@ -26,13 +27,13 @@ export const buildSwPlugin = ({ swSrc, swDest }) => { const swEnvName = 'virtual:pleroma-fe/service_worker_env' const swEnvNameResolved = '\0' + swEnvName - let config + let rootConfig, config return { name: 'build-sw-plugin', enforce: 'post', configResolved(resolvedConfig) { - resolvedConfig + rootConfig = resolvedConfig config = { define: resolvedConfig.define, resolve: resolvedConfig.resolve, @@ -43,14 +44,14 @@ export const buildSwPlugin = ({ swSrc, swDest }) => { emptyOutDir: false, rolldownOptions: { input: { - main: swSrc, + main: swSrc }, context: 'self', output: { entryFileNames: swDest, codeSplitting: false, format: 'iife', - }, + } }, }, configFile: false, @@ -75,7 +76,7 @@ export const buildSwPlugin = ({ swSrc, swDest }) => { filter: { id: exactRegex(swEnvNameResolved) }, handler() { return `self.serviceWorkerOption = { assets: ${JSON.stringify(assets)} };` - }, + } }, }) }, @@ -84,7 +85,7 @@ export const buildSwPlugin = ({ swSrc, swDest }) => { filter: { id: new RegExp(swDest) }, handler() { return swFullSrc - }, + } }, load: { filter: { id: new RegExp(swFullSrc) }, @@ -99,18 +100,17 @@ export const buildSwPlugin = ({ swSrc, swDest }) => { load: { filter: { id: exactRegex(swEnvNameResolved) }, handler: () => 'self.serviceWorkerOption = { assets: [] }', - }, + } }) const swBundle = await build(config) return swBundle.output[0] - }, + } }, closeBundle: { order: 'post', sequential: true, async handler() { - if (process.env.VITEST) return console.info('Building service worker for production') await build(config) }, diff --git a/package.json b/package.json index c51d98b81..c532d3050 100644 --- a/package.json +++ b/package.json @@ -43,7 +43,7 @@ "localforage": "1.10.0", "parse-link-header": "2.0.0", "phoenix": "1.8.1", - "pinia": "^3.0.4", + "pinia": "^3.0.0", "punycode.js": "2.3.1", "qrcode": "1.5.4", "querystring-es3": "0.2.1", diff --git a/src/App.js b/src/App.js index 16201e9ea..21295c57d 100644 --- a/src/App.js +++ b/src/App.js @@ -2,14 +2,17 @@ import { throttle } from 'lodash' import { mapState } from 'pinia' import { defineAsyncComponent } from 'vue' -import DesktopNav from 'src/components/desktop_nav/desktop_nav.vue' -import FeaturesPanel from 'src/components/features_panel/features_panel.vue' -import GlobalNoticeList from 'src/components/global_notice_list/global_notice_list.vue' -import InstanceSpecificPanel from 'src/components/instance_specific_panel/instance_specific_panel.vue' -import MobileNav from 'src/components/mobile_nav/mobile_nav.vue' -import MobilePostStatusButton from 'src/components/mobile_post_status_button/mobile_post_status_button.vue' -import NavPanel from 'src/components/nav_panel/nav_panel.vue' -import UserPanel from 'src/components/user_panel/user_panel.vue' +import DesktopNav from './components/desktop_nav/desktop_nav.vue' +import FeaturesPanel from './components/features_panel/features_panel.vue' +import GlobalNoticeList from './components/global_notice_list/global_notice_list.vue' +import InstanceSpecificPanel from './components/instance_specific_panel/instance_specific_panel.vue' +import MediaModal from './components/media_modal/media_modal.vue' +import MobileNav from './components/mobile_nav/mobile_nav.vue' +import MobilePostStatusButton from './components/mobile_post_status_button/mobile_post_status_button.vue' +import NavPanel from './components/nav_panel/nav_panel.vue' +import PostStatusModal from './components/post_status_modal/post_status_modal.vue' +import UserPanel from './components/user_panel/user_panel.vue' +import UserReportingModal from './components/user_reporting_modal/user_reporting_modal.vue' import { getOrCreateServiceWorker } from './services/sw/sw' import { windowHeight, windowWidth } from './services/window_utils/window_utils' @@ -33,43 +36,34 @@ export default { UserPanel, NavPanel, Notifications: defineAsyncComponent( - () => import('src/components/notifications/notifications.vue'), + () => import('./components/notifications/notifications.vue'), ), InstanceSpecificPanel, FeaturesPanel, WhoToFollowPanel: defineAsyncComponent( - () => - import('src/components/who_to_follow_panel/who_to_follow_panel.vue'), + () => import('./components/who_to_follow_panel/who_to_follow_panel.vue'), ), ShoutPanel: defineAsyncComponent( () => import('src/components/shout_panel/shout_panel.vue'), ), - MediaModal: defineAsyncComponent( - () => import('src/components/media_modal/media_modal.vue'), - ), + MediaModal, MobilePostStatusButton, MobileNav, DesktopNav, SettingsModal: defineAsyncComponent( - () => import('src/components/settings_modal/settings_modal.vue'), + () => import('./components/settings_modal/settings_modal.vue'), ), UpdateNotification: defineAsyncComponent( - () => - import('src/components/update_notification/update_notification.vue'), - ), - PostStatusModal: defineAsyncComponent( - () => import('src/components/post_status_modal/post_status_modal.vue'), - ), - UserReportingModal: defineAsyncComponent( - () => - import('src/components/user_reporting_modal/user_reporting_modal.vue'), + () => import('./components/update_notification/update_notification.vue'), ), + UserReportingModal, + PostStatusModal, EditStatusModal: defineAsyncComponent( - () => import('src/components/edit_status_modal/edit_status_modal.vue'), + () => import('./components/edit_status_modal/edit_status_modal.vue'), ), StatusHistoryModal: defineAsyncComponent( () => - import('src/components/status_history_modal/status_history_modal.vue'), + import('./components/status_history_modal/status_history_modal.vue'), ), GlobalNoticeList, }, diff --git a/src/boot/after_store.js b/src/boot/after_store.js index fe65a7387..8e008aef2 100644 --- a/src/boot/after_store.js +++ b/src/boot/after_store.js @@ -6,8 +6,8 @@ import { createRouter, createWebHistory } from 'vue-router' import VueVirtualScroller from 'vue-virtual-scroller' import 'vue-virtual-scroller/dist/vue-virtual-scroller.css' -import RichContent from 'src/components/rich_content/rich_content.jsx' import Status from 'src/components/status/status.vue' +import RichContent from 'src/components/rich_content/rich_content.jsx' import StillImage from 'src/components/still-image/still-image.vue' import { config } from '@fortawesome/fontawesome-svg-core' diff --git a/src/components/about/about.js b/src/components/about/about.js index e293895d5..e6a1067fe 100644 --- a/src/components/about/about.js +++ b/src/components/about/about.js @@ -1,10 +1,10 @@ import { mapState } from 'pinia' -import FeaturesPanel from 'src/components/features_panel/features_panel.vue' -import InstanceSpecificPanel from 'src/components/instance_specific_panel/instance_specific_panel.vue' -import MRFTransparencyPanel from 'src/components/mrf_transparency_panel/mrf_transparency_panel.vue' -import StaffPanel from 'src/components/staff_panel/staff_panel.vue' -import TermsOfServicePanel from 'src/components/terms_of_service_panel/terms_of_service_panel.vue' +import FeaturesPanel from '../features_panel/features_panel.vue' +import InstanceSpecificPanel from '../instance_specific_panel/instance_specific_panel.vue' +import MRFTransparencyPanel from '../mrf_transparency_panel/mrf_transparency_panel.vue' +import StaffPanel from '../staff_panel/staff_panel.vue' +import TermsOfServicePanel from '../terms_of_service_panel/terms_of_service_panel.vue' import { useInstanceStore } from 'src/stores/instance.js' import { useMergedConfigStore } from 'src/stores/merged_config.js' diff --git a/src/components/account_actions/account_actions.js b/src/components/account_actions/account_actions.js index 9b4775b97..cb4ac61eb 100644 --- a/src/components/account_actions/account_actions.js +++ b/src/components/account_actions/account_actions.js @@ -1,9 +1,9 @@ import { mapState } from 'pinia' import { defineAsyncComponent } from 'vue' -import Popover from 'src/components/popover/popover.vue' -import ProgressButton from 'src/components/progress_button/progress_button.vue' import UserListMenu from 'src/components/user_list_menu/user_list_menu.vue' +import Popover from '../popover/popover.vue' +import ProgressButton from '../progress_button/progress_button.vue' import { useInstanceCapabilitiesStore } from 'src/stores/instance_capabilities.js' import { useMergedConfigStore } from 'src/stores/merged_config.js' @@ -30,10 +30,7 @@ const AccountActions = { () => import('src/components/confirm_modal/confirm_modal.vue'), ), UserTimedFilterModal: defineAsyncComponent( - () => - import( - 'src/components/user_timed_filter_modal/user_timed_filter_modal.vue' - ), + () => import( 'src/components/user_timed_filter_modal/user_timed_filter_modal.vue'), ), }, methods: { diff --git a/src/components/announcement/announcement.js b/src/components/announcement/announcement.js index 7f559f8fe..b6621264c 100644 --- a/src/components/announcement/announcement.js +++ b/src/components/announcement/announcement.js @@ -1,13 +1,15 @@ import { mapState } from 'vuex' -import AnnouncementEditor from 'src/components/announcement_editor/announcement_editor.vue' import localeService from '../../services/locale/locale.service.js' +import AnnouncementEditor from '../announcement_editor/announcement_editor.vue' + import { useAnnouncementsStore } from 'src/stores/announcements.js' const Announcement = { components: { AnnouncementEditor, + }, data() { return { diff --git a/src/components/announcement_editor/announcement_editor.js b/src/components/announcement_editor/announcement_editor.js index c816083a4..6d22ac1fd 100644 --- a/src/components/announcement_editor/announcement_editor.js +++ b/src/components/announcement_editor/announcement_editor.js @@ -1,4 +1,4 @@ -import Checkbox from 'src/components/checkbox/checkbox.vue' +import Checkbox from '../checkbox/checkbox.vue' const AnnouncementEditor = { components: { diff --git a/src/components/announcements_page/announcements_page.js b/src/components/announcements_page/announcements_page.js index 3c73198c5..b8b1f000a 100644 --- a/src/components/announcements_page/announcements_page.js +++ b/src/components/announcements_page/announcements_page.js @@ -1,7 +1,7 @@ import { mapState } from 'vuex' -import Announcement from 'src/components/announcement/announcement.vue' -import AnnouncementEditor from 'src/components/announcement_editor/announcement_editor.vue' +import Announcement from '../announcement/announcement.vue' +import AnnouncementEditor from '../announcement_editor/announcement_editor.vue' import { useAnnouncementsStore } from 'src/stores/announcements.js' diff --git a/src/components/attachment/attachment.js b/src/components/attachment/attachment.js index 4b733258f..da776bf33 100644 --- a/src/components/attachment/attachment.js +++ b/src/components/attachment/attachment.js @@ -1,9 +1,10 @@ import { mapState } from 'pinia' import { defineAsyncComponent } from 'vue' -import Popover from 'src/components/popover/popover.vue' -import VideoAttachment from 'src/components/video_attachment/video_attachment.vue' import nsfwImage from '../../assets/nsfw.png' +import Popover from '../popover/popover.vue' + +import VideoAttachment from '../video_attachment/video_attachment.vue' import { useInstanceStore } from 'src/stores/instance.js' import { useInstanceCapabilitiesStore } from 'src/stores/instance_capabilities.js' @@ -68,10 +69,12 @@ const Attachment = { } }, components: { - Flash: defineAsyncComponent(() => import('src/components/flash/flash.vue')), + Flash: defineAsyncComponent( + () => import( 'src/components/flash/flash.vue'), + ), VideoAttachment: defineAsyncComponent( - () => import('src/components/video_attachment/video_attachment.vue'), + () => import( 'src/components/video_attachment/video_attachment.vue'), ), Popover, }, diff --git a/src/components/auth_form/auth_form.js b/src/components/auth_form/auth_form.js index 7d853d119..9e05095ca 100644 --- a/src/components/auth_form/auth_form.js +++ b/src/components/auth_form/auth_form.js @@ -1,9 +1,9 @@ import { mapState } from 'pinia' import { h, resolveComponent } from 'vue' -import LoginForm from 'src/components/login_form/login_form.vue' -import MFARecoveryForm from 'src/components/mfa_form/recovery_form.vue' -import MFATOTPForm from 'src/components/mfa_form/totp_form.vue' +import LoginForm from '../login_form/login_form.vue' +import MFARecoveryForm from '../mfa_form/recovery_form.vue' +import MFATOTPForm from '../mfa_form/totp_form.vue' import { useAuthFlowStore } from 'src/stores/auth_flow.js' diff --git a/src/components/avatar_list/avatar_list.js b/src/components/avatar_list/avatar_list.js index 7806fba81..830b64219 100644 --- a/src/components/avatar_list/avatar_list.js +++ b/src/components/avatar_list/avatar_list.js @@ -1,4 +1,4 @@ -import UserAvatar from 'src/components/user_avatar/user_avatar.vue' +import UserAvatar from '../user_avatar/user_avatar.vue' import { useInstanceStore } from 'src/stores/instance.js' diff --git a/src/components/basic_user_card/basic_user_card.js b/src/components/basic_user_card/basic_user_card.js index 1c69f81b4..964c60c56 100644 --- a/src/components/basic_user_card/basic_user_card.js +++ b/src/components/basic_user_card/basic_user_card.js @@ -1,6 +1,7 @@ -import UserAvatar from 'src/components/user_avatar/user_avatar.vue' -import UserLink from 'src/components/user_link/user_link.vue' -import UserPopover from 'src/components/user_popover/user_popover.vue' + +import UserAvatar from '../user_avatar/user_avatar.vue' +import UserLink from '../user_link/user_link.vue' +import UserPopover from '../user_popover/user_popover.vue' import { useInstanceStore } from 'src/stores/instance.js' import { useMergedConfigStore } from 'src/stores/merged_config.js' diff --git a/src/components/block_card/block_card.js b/src/components/block_card/block_card.js index 6484accff..967ce2a3c 100644 --- a/src/components/block_card/block_card.js +++ b/src/components/block_card/block_card.js @@ -1,7 +1,7 @@ import { mapState } from 'pinia' -import BasicUserCard from 'src/components/basic_user_card/basic_user_card.vue' import UserTimedFilterModal from 'src/components/user_timed_filter_modal/user_timed_filter_modal.vue' +import BasicUserCard from '../basic_user_card/basic_user_card.vue' import { useInstanceCapabilitiesStore } from 'src/stores/instance_capabilities.js' diff --git a/src/components/bookmark_folder_edit/bookmark_folder_edit.js b/src/components/bookmark_folder_edit/bookmark_folder_edit.js index 43aa239b2..a036895bf 100644 --- a/src/components/bookmark_folder_edit/bookmark_folder_edit.js +++ b/src/components/bookmark_folder_edit/bookmark_folder_edit.js @@ -1,5 +1,5 @@ -import EmojiPicker from 'src/components/emoji_picker/emoji_picker.vue' import apiService from '../../services/api/api.service' +import EmojiPicker from '../emoji_picker/emoji_picker.vue' import { useBookmarkFoldersStore } from 'src/stores/bookmark_folders.js' import { useInterfaceStore } from 'src/stores/interface.js' diff --git a/src/components/bookmark_folders/bookmark_folders.js b/src/components/bookmark_folders/bookmark_folders.js index 9fd62dae0..1147fd3a5 100644 --- a/src/components/bookmark_folders/bookmark_folders.js +++ b/src/components/bookmark_folders/bookmark_folders.js @@ -1,4 +1,4 @@ -import BookmarkFolderCard from 'src/components/bookmark_folder_card/bookmark_folder_card.vue' +import BookmarkFolderCard from '../bookmark_folder_card/bookmark_folder_card.vue' import { useBookmarkFoldersStore } from 'src/stores/bookmark_folders.js' diff --git a/src/components/bookmark_timeline/bookmark_timeline.js b/src/components/bookmark_timeline/bookmark_timeline.js index bf633c18c..a241b6ac7 100644 --- a/src/components/bookmark_timeline/bookmark_timeline.js +++ b/src/components/bookmark_timeline/bookmark_timeline.js @@ -1,4 +1,4 @@ -import Timeline from 'src/components/timeline/timeline.vue' +import Timeline from '../timeline/timeline.vue' const Bookmarks = { created() { diff --git a/src/components/bubble_timeline/bubble_timeline.js b/src/components/bubble_timeline/bubble_timeline.js index fcbc31ad2..d3835e0e8 100644 --- a/src/components/bubble_timeline/bubble_timeline.js +++ b/src/components/bubble_timeline/bubble_timeline.js @@ -1,4 +1,4 @@ -import Timeline from 'src/components/timeline/timeline.vue' +import Timeline from '../timeline/timeline.vue' const BubbleTimeline = { components: { diff --git a/src/components/chat/chat.js b/src/components/chat/chat.js index 7428c0dc7..2fef86c0a 100644 --- a/src/components/chat/chat.js +++ b/src/components/chat/chat.js @@ -2,13 +2,13 @@ import { throttle } from 'lodash' import { mapState as mapPiniaState } from 'pinia' import { mapGetters, mapState } from 'vuex' -import ChatMessage from 'src/components/chat_message/chat_message.vue' -import ChatTitle from 'src/components/chat_title/chat_title.vue' -import PostStatusForm from 'src/components/post_status_form/post_status_form.vue' import { WSConnectionStatus } from '../../services/api/api.service.js' import chatService from '../../services/chat_service/chat_service.js' import { buildFakeMessage } from '../../services/chat_utils/chat_utils.js' import { promiseInterval } from '../../services/promise_interval/promise_interval.js' +import ChatMessage from '../chat_message/chat_message.vue' +import ChatTitle from '../chat_title/chat_title.vue' +import PostStatusForm from '../post_status_form/post_status_form.vue' import { getNewTopPosition, getScrollPosition, diff --git a/src/components/chat_list/chat_list.js b/src/components/chat_list/chat_list.js index 597fcc709..4c3194ae1 100644 --- a/src/components/chat_list/chat_list.js +++ b/src/components/chat_list/chat_list.js @@ -1,8 +1,8 @@ import { mapGetters, mapState } from 'vuex' -import ChatListItem from 'src/components/chat_list_item/chat_list_item.vue' -import ChatNew from 'src/components/chat_new/chat_new.vue' -import List from 'src/components/list/list.vue' +import ChatListItem from '../chat_list_item/chat_list_item.vue' +import ChatNew from '../chat_new/chat_new.vue' +import List from '../list/list.vue' const ChatList = { components: { diff --git a/src/components/chat_list_item/chat_list_item.js b/src/components/chat_list_item/chat_list_item.js index 3bbb93d60..74df26c1f 100644 --- a/src/components/chat_list_item/chat_list_item.js +++ b/src/components/chat_list_item/chat_list_item.js @@ -1,10 +1,10 @@ import { mapState } from 'vuex' -import AvatarList from 'src/components/avatar_list/avatar_list.vue' -import ChatTitle from 'src/components/chat_title/chat_title.vue' -import StatusBody from 'src/components/status_content/status_content.vue' -import Timeago from 'src/components/timeago/timeago.vue' -import UserAvatar from 'src/components/user_avatar/user_avatar.vue' +import AvatarList from '../avatar_list/avatar_list.vue' +import ChatTitle from '../chat_title/chat_title.vue' +import StatusBody from '../status_content/status_content.vue' +import Timeago from '../timeago/timeago.vue' +import UserAvatar from '../user_avatar/user_avatar.vue' const ChatListItem = { name: 'ChatListItem', diff --git a/src/components/chat_message/chat_message.js b/src/components/chat_message/chat_message.js index ba06172ed..12a147803 100644 --- a/src/components/chat_message/chat_message.js +++ b/src/components/chat_message/chat_message.js @@ -1,15 +1,15 @@ import { mapState as mapPiniaState } from 'pinia' -import { defineAsyncComponent } from 'vue' import { mapGetters, mapState } from 'vuex' +import { defineAsyncComponent } from 'vue' import Attachment from 'src/components/attachment/attachment.vue' import ChatMessageDate from 'src/components/chat_message_date/chat_message_date.vue' -import Gallery from 'src/components/gallery/gallery.vue' import LinkPreview from 'src/components/link-preview/link-preview.vue' import Popover from 'src/components/popover/popover.vue' import StatusContent from 'src/components/status_content/status_content.vue' import UserAvatar from 'src/components/user_avatar/user_avatar.vue' import UserPopover from 'src/components/user_popover/user_popover.vue' +import Gallery from 'src/components/gallery/gallery.vue' import { useInstanceStore } from 'src/stores/instance.js' import { useInterfaceStore } from 'src/stores/interface' diff --git a/src/components/chat_new/chat_new.js b/src/components/chat_new/chat_new.js index 5ee2b610d..50e0f7a8f 100644 --- a/src/components/chat_new/chat_new.js +++ b/src/components/chat_new/chat_new.js @@ -1,7 +1,7 @@ import { mapGetters, mapState } from 'vuex' -import BasicUserCard from 'src/components/basic_user_card/basic_user_card.vue' -import UserAvatar from 'src/components/user_avatar/user_avatar.vue' +import BasicUserCard from '../basic_user_card/basic_user_card.vue' +import UserAvatar from '../user_avatar/user_avatar.vue' import { library } from '@fortawesome/fontawesome-svg-core' import { faChevronLeft, faSearch } from '@fortawesome/free-solid-svg-icons' diff --git a/src/components/chat_title/chat_title.js b/src/components/chat_title/chat_title.js index 52d4445b6..5a2b5d775 100644 --- a/src/components/chat_title/chat_title.js +++ b/src/components/chat_title/chat_title.js @@ -1,5 +1,6 @@ import { defineAsyncComponent } from 'vue' + import UserAvatar from 'src/components/user_avatar/user_avatar.vue' import UserPopover from 'src/components/user_popover/user_popover.vue' diff --git a/src/components/color_input/color_input.vue b/src/components/color_input/color_input.vue index 208bdf2dc..07aed6b81 100644 --- a/src/components/color_input/color_input.vue +++ b/src/components/color_input/color_input.vue @@ -66,8 +66,8 @@