---
packages/pl-fe/package.json | 18 +-
.../pl-fe/src/__fixtures__/account-moved.json | 46 -
.../src/__fixtures__/account-with-emojis.json | 140 -
packages/pl-fe/src/__fixtures__/accounts.json | 182 -
.../__fixtures__/accounts_counter_follow.json | 7 -
.../accounts_counter_initial.json | 7 -
.../accounts_counter_unfollow.json | 7 -
.../admin_api_frontend_config.json | 55 -
.../src/__fixtures__/akkoma-instance.json | 105 -
.../pl-fe/src/__fixtures__/announcements.json | 44 -
packages/pl-fe/src/__fixtures__/app.json | 15 -
packages/pl-fe/src/__fixtures__/blocks.json | 8 -
.../pl-fe/src/__fixtures__/config_db.json | 2735 ----------
.../src/__fixtures__/fedibird-account.json | 35 -
.../src/__fixtures__/fedibird-instance.json | 185 -
.../fedibird-quote-of-quote-post.json | 109 -
.../src/__fixtures__/fedibird-quote-post.json | 108 -
.../src/__fixtures__/friendica-instance.json | 46 -
.../src/__fixtures__/friendica-status.json | 53 -
.../src/__fixtures__/gotosocial-account.json | 27 -
.../src/__fixtures__/gotosocial-instance.json | 42 -
.../src/__fixtures__/gotosocial-status.json | 50 -
.../src/__fixtures__/group-truthsocial.json | 19 -
.../pl-fe/src/__fixtures__/intlMessages.json | 962 ----
packages/pl-fe/src/__fixtures__/lain.json | 57 -
packages/pl-fe/src/__fixtures__/markers.json | 18 -
.../__fixtures__/mastodon-3.0.0-instance.json | 43 -
.../src/__fixtures__/mastodon-account.json | 23 -
.../__fixtures__/mastodon-instance-rc.json | 123 -
.../src/__fixtures__/mastodon-instance.json | 128 -
.../__fixtures__/mastodon-reply-to-self.json | 51 -
.../__fixtures__/mastodon_initial_state.json | 228 -
.../pl-fe/src/__fixtures__/mitra-context.json | 107 -
.../src/__fixtures__/mitra-instance.json | 13 -
.../mitra-status-with-attachments.json | 95 -
packages/pl-fe/src/__fixtures__/mk.json | 123 -
.../__fixtures__/notification-favourite.json | 290 --
.../src/__fixtures__/notification-follow.json | 61 -
.../notification-follow_request.json | 61 -
.../__fixtures__/notification-mention.json | 226 -
.../src/__fixtures__/notification-move.json | 119 -
.../notification-pleroma-chat_mention.json | 73 -
.../notification-pleroma-emoji_reaction.json | 301 --
.../src/__fixtures__/notification-poll.json | 202 -
.../src/__fixtures__/notification-reblog.json | 284 --
.../pl-fe/src/__fixtures__/notification.json | 250 -
.../pl-fe/src/__fixtures__/notifications.json | 4461 -----------------
.../src/__fixtures__/patron-instance.json | 17 -
.../pl-fe/src/__fixtures__/patron-user.json | 4 -
.../src/__fixtures__/pixelfed-instance.json | 66 -
packages/pl-fe/src/__fixtures__/pl-fe.json | 40 -
.../__fixtures__/pleroma-2.2.2-account.json | 46 -
.../src/__fixtures__/pleroma-account.json | 127 -
.../__fixtures__/pleroma-admin-config.json | 3120 ------------
.../src/__fixtures__/pleroma-instance.json | 131 -
.../pleroma-notification-move.json | 119 -
.../src/__fixtures__/pleroma-quote-post.json | 364 --
.../__fixtures__/pleroma-status-deleted.json | 229 -
.../pleroma-status-reply-with-mentions.json | 207 -
.../pleroma-status-with-attachments.json | 238 -
.../__fixtures__/pleroma_initial_results.json | 6 -
.../pl-fe/src/__fixtures__/relationship.json | 14 -
packages/pl-fe/src/__fixtures__/rules.json | 12 -
.../src/__fixtures__/status-custom-emoji.json | 126 -
.../pl-fe/src/__fixtures__/status-cw.json | 63 -
.../pl-fe/src/__fixtures__/status-quotes.json | 15 -
.../status-unordered-mentions.json | 122 -
.../src/__fixtures__/status-with-card.json | 210 -
.../src/__fixtures__/status-with-poll.json | 201 -
packages/pl-fe/src/__fixtures__/user.json | 8 -
packages/pl-fe/src/actions/accounts.test.ts | 466 --
packages/pl-fe/src/actions/compose.test.ts | 133 -
packages/pl-fe/src/actions/importer.ts | 9 +-
packages/pl-fe/src/actions/me.test.ts | 121 -
.../pl-fe/src/actions/notifications.test.ts | 42 -
packages/pl-fe/src/actions/preload.test.ts | 37 -
packages/pl-fe/src/actions/preload.ts | 1 -
packages/pl-fe/src/actions/statuses.test.ts | 161 -
packages/pl-fe/src/api/__mocks__/index.ts | 29 -
.../src/api/hooks/groups/use-group.test.ts | 41 -
.../src/api/hooks/groups/use-groups.test.ts | 49 -
.../pl-fe/src/components/account.test.tsx | 67 -
.../src/components/autosuggest-emoji.test.tsx | 33 -
packages/pl-fe/src/components/badge.test.tsx | 13 -
.../src/components/polls/poll-footer.test.tsx | 140 -
.../src/components/quoted-status.test.tsx | 31 -
.../src/components/scroll-top-button.test.tsx | 44 -
packages/pl-fe/src/components/status.test.tsx | 38 -
.../sensitive-content-overlay.test.tsx | 64 -
.../pl-fe/src/components/ui/avatar.test.tsx | 21 -
.../src/components/ui/button/index.test.tsx | 91 -
.../pl-fe/src/components/ui/card.test.tsx | 37 -
.../pl-fe/src/components/ui/column.test.tsx | 13 -
.../pl-fe/src/components/ui/divider.test.tsx | 20 -
.../pl-fe/src/components/ui/emoji.test.tsx | 24 -
.../src/components/ui/form-actions.test.tsx | 13 -
.../src/components/ui/form-group.test.tsx | 59 -
.../pl-fe/src/components/ui/form.test.tsx | 30 -
.../pl-fe/src/components/ui/modal.test.tsx | 139 -
.../pl-fe/src/components/ui/svg-icon.test.tsx | 17 -
packages/pl-fe/src/entity-store/actions.ts | 11 -
.../pl-fe/src/entity-store/reducer.test.ts | 209 -
packages/pl-fe/src/entity-store/reducer.ts | 20 +-
packages/pl-fe/src/entity-store/utils.ts | 1 -
.../auth-login/components/captcha.test.tsx | 36 -
.../auth-login/components/captcha.tsx | 1 -
.../auth-login/components/login-form.test.tsx | 43 -
.../components/otp-auth-form.test.tsx | 14 -
.../chats/components/chat-list-item.test.tsx | 65 -
.../components/chat-message-list.test.tsx | 144 -
.../components/chat-pane-header.test.tsx | 84 -
.../components/chat-pane/chat-pane.test.tsx | 60 -
.../chat-search/chat-search.test.tsx | 66 -
.../chats/components/chat-widget.test.tsx | 100 -
.../polls/duration-selector.test.tsx | 78 -
.../src/features/compose/editor/utils/url.ts | 11 -
.../pl-fe/src/features/emoji/index.test.ts | 1914 -------
.../pl-fe/src/features/emoji/search.test.ts | 129 -
.../components/group-action-button.test.tsx | 132 -
.../group/components/group-header.test.tsx | 47 -
.../components/group-member-count.test.tsx | 56 -
.../group-member-list-item.test.tsx | 303 --
.../components/group-options-button.test.tsx | 87 -
.../group/components/group-privacy.test.tsx | 40 -
.../components/group-relationship.test.tsx | 67 -
.../discover/group-list-item.test.tsx | 21 -
.../components/notifications.test.tsx | 130 -
.../ui/components/compose-button.test.tsx | 39 -
.../src/features/ui/components/hotkeys.tsx | 4 +-
.../components/panels/sign-up-panel.test.tsx | 20 -
.../components/panels/trends-panel.test.tsx | 74 -
.../ui/components/subscribe-button.test.tsx | 26 -
.../src/hooks/__mocks__/resize-observer.ts | 25 -
.../pl-fe/src/hooks/use-dimensions.test.ts | 62 -
packages/pl-fe/src/hooks/use-dimensions.ts | 38 -
packages/pl-fe/src/jest/factory.ts | 74 -
packages/pl-fe/src/jest/fixtures/chats.json | 54 -
packages/pl-fe/src/jest/mock-stores.tsx | 9 -
packages/pl-fe/src/jest/test-helpers.tsx | 118 -
packages/pl-fe/src/jest/test-setup.ts | 42 -
.../src/modals/unauthorized-modal.test.tsx | 25 -
packages/pl-fe/src/pages/auth/login.test.tsx | 52 -
.../pl-fe/src/queries/__mocks__/client.ts | 13 -
packages/pl-fe/src/queries/chats.test.ts | 295 --
packages/pl-fe/src/queries/trends.test.ts | 46 -
packages/pl-fe/src/reducers/admin.test.ts | 11 -
packages/pl-fe/src/reducers/auth.test.ts | 353 --
packages/pl-fe/src/reducers/compose.test.ts | 482 --
packages/pl-fe/src/reducers/contexts.test.ts | 118 -
.../pl-fe/src/reducers/conversations.test.ts | 67 -
packages/pl-fe/src/reducers/filters.test.ts | 9 -
packages/pl-fe/src/reducers/index.test.ts | 11 -
packages/pl-fe/src/reducers/instance.test.ts | 51 -
packages/pl-fe/src/reducers/me.test.ts | 7 -
packages/pl-fe/src/reducers/meta.test.ts | 12 -
.../src/reducers/push-notifications.test.ts | 19 -
packages/pl-fe/src/reducers/statuses.test.ts | 243 -
packages/pl-fe/src/reducers/timelines.test.ts | 123 -
packages/pl-fe/src/toast.test.tsx | 166 -
packages/pl-fe/src/utils/badges.test.ts | 41 -
packages/pl-fe/src/utils/base64.test.ts | 10 -
packages/pl-fe/src/utils/chats.test.ts | 64 -
packages/pl-fe/src/utils/colors.test.ts | 22 -
packages/pl-fe/src/utils/comparators.test.ts | 7 -
packages/pl-fe/src/utils/config-db.test.ts | 14 -
packages/pl-fe/src/utils/emoji-reacts.test.ts | 82 -
packages/pl-fe/src/utils/emoji.test.ts | 39 -
packages/pl-fe/src/utils/html.test.ts | 10 -
packages/pl-fe/src/utils/input.test.ts | 7 -
packages/pl-fe/src/utils/media.test.ts | 15 -
packages/pl-fe/src/utils/numbers.test.tsx | 108 -
packages/pl-fe/src/utils/numbers.tsx | 4 -
packages/pl-fe/src/utils/queries.test.ts | 109 -
packages/pl-fe/src/utils/redirect.ts | 18 +-
packages/pl-fe/src/utils/status.test.ts | 34 -
packages/pl-fe/src/utils/status.ts | 15 -
packages/pl-fe/src/utils/tailwind.test.ts | 263 -
packages/pl-fe/src/utils/tailwind.ts | 2 -
packages/pl-fe/src/utils/timelines.test.ts | 73 -
packages/pl-fe/tailwind/colors.test.ts | 50 -
packages/pl-fe/tailwind/colors.ts | 2 +-
packages/pl-fe/tsconfig.json | 1 -
packages/pl-fe/vite.config.ts | 6 -
pnpm-lock.yaml | 717 ---
184 files changed, 7 insertions(+), 28073 deletions(-)
delete mode 100644 packages/pl-fe/src/__fixtures__/account-moved.json
delete mode 100644 packages/pl-fe/src/__fixtures__/account-with-emojis.json
delete mode 100644 packages/pl-fe/src/__fixtures__/accounts.json
delete mode 100644 packages/pl-fe/src/__fixtures__/accounts_counter_follow.json
delete mode 100644 packages/pl-fe/src/__fixtures__/accounts_counter_initial.json
delete mode 100644 packages/pl-fe/src/__fixtures__/accounts_counter_unfollow.json
delete mode 100644 packages/pl-fe/src/__fixtures__/admin_api_frontend_config.json
delete mode 100644 packages/pl-fe/src/__fixtures__/akkoma-instance.json
delete mode 100644 packages/pl-fe/src/__fixtures__/announcements.json
delete mode 100644 packages/pl-fe/src/__fixtures__/app.json
delete mode 100644 packages/pl-fe/src/__fixtures__/blocks.json
delete mode 100644 packages/pl-fe/src/__fixtures__/config_db.json
delete mode 100644 packages/pl-fe/src/__fixtures__/fedibird-account.json
delete mode 100644 packages/pl-fe/src/__fixtures__/fedibird-instance.json
delete mode 100644 packages/pl-fe/src/__fixtures__/fedibird-quote-of-quote-post.json
delete mode 100644 packages/pl-fe/src/__fixtures__/fedibird-quote-post.json
delete mode 100644 packages/pl-fe/src/__fixtures__/friendica-instance.json
delete mode 100644 packages/pl-fe/src/__fixtures__/friendica-status.json
delete mode 100644 packages/pl-fe/src/__fixtures__/gotosocial-account.json
delete mode 100644 packages/pl-fe/src/__fixtures__/gotosocial-instance.json
delete mode 100644 packages/pl-fe/src/__fixtures__/gotosocial-status.json
delete mode 100644 packages/pl-fe/src/__fixtures__/group-truthsocial.json
delete mode 100644 packages/pl-fe/src/__fixtures__/intlMessages.json
delete mode 100644 packages/pl-fe/src/__fixtures__/lain.json
delete mode 100644 packages/pl-fe/src/__fixtures__/markers.json
delete mode 100644 packages/pl-fe/src/__fixtures__/mastodon-3.0.0-instance.json
delete mode 100644 packages/pl-fe/src/__fixtures__/mastodon-account.json
delete mode 100644 packages/pl-fe/src/__fixtures__/mastodon-instance-rc.json
delete mode 100644 packages/pl-fe/src/__fixtures__/mastodon-instance.json
delete mode 100644 packages/pl-fe/src/__fixtures__/mastodon-reply-to-self.json
delete mode 100644 packages/pl-fe/src/__fixtures__/mastodon_initial_state.json
delete mode 100644 packages/pl-fe/src/__fixtures__/mitra-context.json
delete mode 100644 packages/pl-fe/src/__fixtures__/mitra-instance.json
delete mode 100644 packages/pl-fe/src/__fixtures__/mitra-status-with-attachments.json
delete mode 100644 packages/pl-fe/src/__fixtures__/mk.json
delete mode 100644 packages/pl-fe/src/__fixtures__/notification-favourite.json
delete mode 100644 packages/pl-fe/src/__fixtures__/notification-follow.json
delete mode 100644 packages/pl-fe/src/__fixtures__/notification-follow_request.json
delete mode 100644 packages/pl-fe/src/__fixtures__/notification-mention.json
delete mode 100644 packages/pl-fe/src/__fixtures__/notification-move.json
delete mode 100644 packages/pl-fe/src/__fixtures__/notification-pleroma-chat_mention.json
delete mode 100644 packages/pl-fe/src/__fixtures__/notification-pleroma-emoji_reaction.json
delete mode 100644 packages/pl-fe/src/__fixtures__/notification-poll.json
delete mode 100644 packages/pl-fe/src/__fixtures__/notification-reblog.json
delete mode 100644 packages/pl-fe/src/__fixtures__/notification.json
delete mode 100644 packages/pl-fe/src/__fixtures__/notifications.json
delete mode 100644 packages/pl-fe/src/__fixtures__/patron-instance.json
delete mode 100644 packages/pl-fe/src/__fixtures__/patron-user.json
delete mode 100644 packages/pl-fe/src/__fixtures__/pixelfed-instance.json
delete mode 100644 packages/pl-fe/src/__fixtures__/pl-fe.json
delete mode 100644 packages/pl-fe/src/__fixtures__/pleroma-2.2.2-account.json
delete mode 100644 packages/pl-fe/src/__fixtures__/pleroma-account.json
delete mode 100644 packages/pl-fe/src/__fixtures__/pleroma-admin-config.json
delete mode 100644 packages/pl-fe/src/__fixtures__/pleroma-instance.json
delete mode 100644 packages/pl-fe/src/__fixtures__/pleroma-notification-move.json
delete mode 100644 packages/pl-fe/src/__fixtures__/pleroma-quote-post.json
delete mode 100644 packages/pl-fe/src/__fixtures__/pleroma-status-deleted.json
delete mode 100644 packages/pl-fe/src/__fixtures__/pleroma-status-reply-with-mentions.json
delete mode 100644 packages/pl-fe/src/__fixtures__/pleroma-status-with-attachments.json
delete mode 100644 packages/pl-fe/src/__fixtures__/pleroma_initial_results.json
delete mode 100644 packages/pl-fe/src/__fixtures__/relationship.json
delete mode 100644 packages/pl-fe/src/__fixtures__/rules.json
delete mode 100644 packages/pl-fe/src/__fixtures__/status-custom-emoji.json
delete mode 100644 packages/pl-fe/src/__fixtures__/status-cw.json
delete mode 100644 packages/pl-fe/src/__fixtures__/status-quotes.json
delete mode 100644 packages/pl-fe/src/__fixtures__/status-unordered-mentions.json
delete mode 100644 packages/pl-fe/src/__fixtures__/status-with-card.json
delete mode 100644 packages/pl-fe/src/__fixtures__/status-with-poll.json
delete mode 100644 packages/pl-fe/src/__fixtures__/user.json
delete mode 100644 packages/pl-fe/src/actions/accounts.test.ts
delete mode 100644 packages/pl-fe/src/actions/compose.test.ts
delete mode 100644 packages/pl-fe/src/actions/me.test.ts
delete mode 100644 packages/pl-fe/src/actions/notifications.test.ts
delete mode 100644 packages/pl-fe/src/actions/preload.test.ts
delete mode 100644 packages/pl-fe/src/actions/statuses.test.ts
delete mode 100644 packages/pl-fe/src/api/__mocks__/index.ts
delete mode 100644 packages/pl-fe/src/api/hooks/groups/use-group.test.ts
delete mode 100644 packages/pl-fe/src/api/hooks/groups/use-groups.test.ts
delete mode 100644 packages/pl-fe/src/components/account.test.tsx
delete mode 100644 packages/pl-fe/src/components/autosuggest-emoji.test.tsx
delete mode 100644 packages/pl-fe/src/components/badge.test.tsx
delete mode 100644 packages/pl-fe/src/components/polls/poll-footer.test.tsx
delete mode 100644 packages/pl-fe/src/components/quoted-status.test.tsx
delete mode 100644 packages/pl-fe/src/components/scroll-top-button.test.tsx
delete mode 100644 packages/pl-fe/src/components/status.test.tsx
delete mode 100644 packages/pl-fe/src/components/statuses/sensitive-content-overlay.test.tsx
delete mode 100644 packages/pl-fe/src/components/ui/avatar.test.tsx
delete mode 100644 packages/pl-fe/src/components/ui/button/index.test.tsx
delete mode 100644 packages/pl-fe/src/components/ui/card.test.tsx
delete mode 100644 packages/pl-fe/src/components/ui/column.test.tsx
delete mode 100644 packages/pl-fe/src/components/ui/divider.test.tsx
delete mode 100644 packages/pl-fe/src/components/ui/emoji.test.tsx
delete mode 100644 packages/pl-fe/src/components/ui/form-actions.test.tsx
delete mode 100644 packages/pl-fe/src/components/ui/form-group.test.tsx
delete mode 100644 packages/pl-fe/src/components/ui/form.test.tsx
delete mode 100644 packages/pl-fe/src/components/ui/modal.test.tsx
delete mode 100644 packages/pl-fe/src/components/ui/svg-icon.test.tsx
delete mode 100644 packages/pl-fe/src/entity-store/reducer.test.ts
delete mode 100644 packages/pl-fe/src/features/auth-login/components/captcha.test.tsx
delete mode 100644 packages/pl-fe/src/features/auth-login/components/login-form.test.tsx
delete mode 100644 packages/pl-fe/src/features/auth-login/components/otp-auth-form.test.tsx
delete mode 100644 packages/pl-fe/src/features/chats/components/chat-list-item.test.tsx
delete mode 100644 packages/pl-fe/src/features/chats/components/chat-message-list.test.tsx
delete mode 100644 packages/pl-fe/src/features/chats/components/chat-pane-header.test.tsx
delete mode 100644 packages/pl-fe/src/features/chats/components/chat-pane/chat-pane.test.tsx
delete mode 100644 packages/pl-fe/src/features/chats/components/chat-search/chat-search.test.tsx
delete mode 100644 packages/pl-fe/src/features/chats/components/chat-widget.test.tsx
delete mode 100644 packages/pl-fe/src/features/compose/components/polls/duration-selector.test.tsx
delete mode 100644 packages/pl-fe/src/features/emoji/index.test.ts
delete mode 100644 packages/pl-fe/src/features/emoji/search.test.ts
delete mode 100644 packages/pl-fe/src/features/group/components/group-action-button.test.tsx
delete mode 100644 packages/pl-fe/src/features/group/components/group-header.test.tsx
delete mode 100644 packages/pl-fe/src/features/group/components/group-member-count.test.tsx
delete mode 100644 packages/pl-fe/src/features/group/components/group-member-list-item.test.tsx
delete mode 100644 packages/pl-fe/src/features/group/components/group-options-button.test.tsx
delete mode 100644 packages/pl-fe/src/features/group/components/group-privacy.test.tsx
delete mode 100644 packages/pl-fe/src/features/group/components/group-relationship.test.tsx
delete mode 100644 packages/pl-fe/src/features/groups/components/discover/group-list-item.test.tsx
delete mode 100644 packages/pl-fe/src/features/notifications/components/notifications.test.tsx
delete mode 100644 packages/pl-fe/src/features/ui/components/compose-button.test.tsx
delete mode 100644 packages/pl-fe/src/features/ui/components/panels/sign-up-panel.test.tsx
delete mode 100644 packages/pl-fe/src/features/ui/components/panels/trends-panel.test.tsx
delete mode 100644 packages/pl-fe/src/features/ui/components/subscribe-button.test.tsx
delete mode 100644 packages/pl-fe/src/hooks/__mocks__/resize-observer.ts
delete mode 100644 packages/pl-fe/src/hooks/use-dimensions.test.ts
delete mode 100644 packages/pl-fe/src/hooks/use-dimensions.ts
delete mode 100644 packages/pl-fe/src/jest/factory.ts
delete mode 100644 packages/pl-fe/src/jest/fixtures/chats.json
delete mode 100644 packages/pl-fe/src/jest/mock-stores.tsx
delete mode 100644 packages/pl-fe/src/jest/test-helpers.tsx
delete mode 100644 packages/pl-fe/src/jest/test-setup.ts
delete mode 100644 packages/pl-fe/src/modals/unauthorized-modal.test.tsx
delete mode 100644 packages/pl-fe/src/pages/auth/login.test.tsx
delete mode 100644 packages/pl-fe/src/queries/__mocks__/client.ts
delete mode 100644 packages/pl-fe/src/queries/chats.test.ts
delete mode 100644 packages/pl-fe/src/queries/trends.test.ts
delete mode 100644 packages/pl-fe/src/reducers/admin.test.ts
delete mode 100644 packages/pl-fe/src/reducers/auth.test.ts
delete mode 100644 packages/pl-fe/src/reducers/compose.test.ts
delete mode 100644 packages/pl-fe/src/reducers/contexts.test.ts
delete mode 100644 packages/pl-fe/src/reducers/conversations.test.ts
delete mode 100644 packages/pl-fe/src/reducers/filters.test.ts
delete mode 100644 packages/pl-fe/src/reducers/index.test.ts
delete mode 100644 packages/pl-fe/src/reducers/instance.test.ts
delete mode 100644 packages/pl-fe/src/reducers/me.test.ts
delete mode 100644 packages/pl-fe/src/reducers/meta.test.ts
delete mode 100644 packages/pl-fe/src/reducers/push-notifications.test.ts
delete mode 100644 packages/pl-fe/src/reducers/statuses.test.ts
delete mode 100644 packages/pl-fe/src/reducers/timelines.test.ts
delete mode 100644 packages/pl-fe/src/toast.test.tsx
delete mode 100644 packages/pl-fe/src/utils/badges.test.ts
delete mode 100644 packages/pl-fe/src/utils/base64.test.ts
delete mode 100644 packages/pl-fe/src/utils/chats.test.ts
delete mode 100644 packages/pl-fe/src/utils/colors.test.ts
delete mode 100644 packages/pl-fe/src/utils/comparators.test.ts
delete mode 100644 packages/pl-fe/src/utils/config-db.test.ts
delete mode 100644 packages/pl-fe/src/utils/emoji-reacts.test.ts
delete mode 100644 packages/pl-fe/src/utils/emoji.test.ts
delete mode 100644 packages/pl-fe/src/utils/html.test.ts
delete mode 100644 packages/pl-fe/src/utils/input.test.ts
delete mode 100644 packages/pl-fe/src/utils/media.test.ts
delete mode 100644 packages/pl-fe/src/utils/numbers.test.tsx
delete mode 100644 packages/pl-fe/src/utils/queries.test.ts
delete mode 100644 packages/pl-fe/src/utils/status.test.ts
delete mode 100644 packages/pl-fe/src/utils/tailwind.test.ts
delete mode 100644 packages/pl-fe/src/utils/timelines.test.ts
delete mode 100644 packages/pl-fe/tailwind/colors.test.ts
diff --git a/packages/pl-fe/package.json b/packages/pl-fe/package.json
index 5d3b81e87..53242f48c 100644
--- a/packages/pl-fe/package.json
+++ b/packages/pl-fe/package.json
@@ -23,9 +23,6 @@
"preview": "npx vite preview",
"audit:fix": "npx yarn-audit-fix",
"i18n": "npx formatjs extract 'src/**/*.{ts,tsx}' --ignore '**/*.d.ts' --out-file build/messages.json && npx formatjs compile build/messages.json --out-file src/locales/en.json",
- "test": "npx vitest",
- "test:coverage": "${npm_execpath} run test --coverage",
- "test:all": "${npm_execpath} run test:coverage && ${npm_execpath} run lint",
"lint": "${npm_execpath} run lint:js && ${npm_execpath} run lint:sass",
"lint:js": "npx eslint --ext .js,.jsx,.cjs,.mjs,.ts,.tsx . --cache",
"lint:sass": "npx stylelint src/styles/**/*.scss",
@@ -93,7 +90,6 @@
"fuzzysort": "^3.1.0",
"graphemesplit": "^2.4.4",
"html-react-parser": "^5.2.11",
- "immutable": "^5.0.3",
"intersection-observer": "^0.12.2",
"intl-messageformat": "^10.7.18",
"intl-pluralrules": "^2.0.1",
@@ -116,7 +112,6 @@
"react-color": "^2.19.3",
"react-datepicker": "^8.3.0",
"react-dom": "^19.2.3",
- "react-error-boundary": "^4.1.2",
"react-helmet-async": "^2.0.5",
"react-hot-toast": "^2.6.0",
"react-inlinesvg": "^4.1.8",
@@ -132,8 +127,6 @@
"resize-observer": "^1.0.4",
"sass-embedded": "^1.93.3",
"stringz": "^2.1.0",
- "tabbable": "^6.4.0",
- "tiny-queue": "^0.2.1",
"use-mutative": "^1.3.1",
"util": "^0.12.5",
"valibot": "^1.2.0",
@@ -142,13 +135,8 @@
},
"devDependencies": {
"@formatjs/cli": "^6.9.0",
- "@jedmao/redux-mock-store": "^3.0.5",
"@sentry/types": "^8.47.0",
"@stylistic/eslint-plugin": "^3.1.0",
- "@testing-library/jest-dom": "^6.6.3",
- "@testing-library/react": "^16.1.0",
- "@testing-library/react-hooks": "^8.0.1",
- "@testing-library/user-event": "^14.5.2",
"@types/dom-chromium-ai": "^0.0.11",
"@types/leaflet": "^1.9.15",
"@types/lodash": "^4.17.13",
@@ -159,7 +147,6 @@
"@types/react-router-dom": "^5.3.3",
"@types/react-sparklines": "^1.7.5",
"@types/react-swipeable-views": "^0.13.6",
- "@types/redux-mock-store": "^1.5.0",
"@typescript-eslint/eslint-plugin": "^8.24.1",
"@typescript-eslint/parser": "^8.24.0",
"@vitejs/plugin-react": "^5.1.3",
@@ -174,9 +161,7 @@
"eslint-plugin-react": "^7.37.3",
"eslint-plugin-react-hooks": "^4.6.2",
"eslint-plugin-tailwindcss": "^3.17.5",
- "fake-indexeddb": "^6.0.0",
"globals": "^15.14.0",
- "jsdom": "^25.0.1",
"rollup-plugin-bundle-stats": "^4.21.10",
"stylelint": "^16.12.0",
"stylelint-config-standard-scss": "^12.0.0",
@@ -190,8 +175,7 @@
"vite-plugin-html": "^3.2.2",
"vite-plugin-pwa": "^1.2.0",
"vite-plugin-require": "^1.2.14",
- "vite-plugin-static-copy": "^3.2.0",
- "vitest": "^2.1.9"
+ "vite-plugin-static-copy": "^3.2.0"
},
"lint-staged": {
"*.{js,cjs,mjs,ts,tsx}": "eslint --cache",
diff --git a/packages/pl-fe/src/__fixtures__/account-moved.json b/packages/pl-fe/src/__fixtures__/account-moved.json
deleted file mode 100644
index dbb194916..000000000
--- a/packages/pl-fe/src/__fixtures__/account-moved.json
+++ /dev/null
@@ -1,46 +0,0 @@
-{
- "id": "106801667066418367",
- "username": "benis911",
- "acct": "benis911",
- "display_name": "",
- "locked": false,
- "bot": false,
- "discoverable": null,
- "group": false,
- "created_at": "2021-08-22T00:00:00.000Z",
- "note": "",
- "url": "https://mastodon.social/@benis911",
- "avatar": "https://mastodon.social/avatars/original/missing.png",
- "avatar_static": "https://mastodon.social/avatars/original/missing.png",
- "header": "https://mastodon.social/headers/original/missing.png",
- "header_static": "https://mastodon.social/headers/original/missing.png",
- "followers_count": 0,
- "following_count": 0,
- "statuses_count": 5,
- "last_status_at": "2022-02-23",
- "moved": {
- "id": "107945464165013501",
- "username": "alex",
- "acct": "alex@fedibird.com",
- "display_name": "",
- "locked": false,
- "bot": false,
- "discoverable": false,
- "group": false,
- "created_at": "2020-01-27T00:00:00.000Z",
- "note": "
",
- "url": "https://fedibird.com/@alex",
- "avatar": "https://mastodon.social/avatars/original/missing.png",
- "avatar_static": "https://mastodon.social/avatars/original/missing.png",
- "header": "https://mastodon.social/headers/original/missing.png",
- "header_static": "https://mastodon.social/headers/original/missing.png",
- "followers_count": 1,
- "following_count": 1,
- "statuses_count": 5,
- "last_status_at": null,
- "emojis": [],
- "fields": []
- },
- "emojis": [],
- "fields": []
-}
diff --git a/packages/pl-fe/src/__fixtures__/account-with-emojis.json b/packages/pl-fe/src/__fixtures__/account-with-emojis.json
deleted file mode 100644
index 19025e150..000000000
--- a/packages/pl-fe/src/__fixtures__/account-with-emojis.json
+++ /dev/null
@@ -1,140 +0,0 @@
-{
- "acct": "alex",
- "avatar": "https://media.gleasonator.com/6d64aecb17348b23aaff78db4687b9476cb0da1c07cc6a819c2e6ec7144c18b1.png",
- "avatar_static": "https://media.gleasonator.com/6d64aecb17348b23aaff78db4687b9476cb0da1c07cc6a819c2e6ec7144c18b1.png",
- "bot": false,
- "created_at": "2020-01-08T01:25:43.000Z",
- "display_name": "Alex Gleason 😂 :soapbox: :ablobcatrainbow:",
- "emojis": [
- {
- "shortcode": "ablobcatrainbow",
- "static_url": "https://gleasonator.com/emoji/blobcat/ablobcatrainbow.png",
- "url": "https://gleasonator.com/emoji/blobcat/ablobcatrainbow.png",
- "visible_in_picker": false
- },
- {
- "shortcode": "soapbox",
- "static_url": "https://gleasonator.com/emoji/Gleasonator/soapbox.png",
- "url": "https://gleasonator.com/emoji/Gleasonator/soapbox.png",
- "visible_in_picker": false
- }
- ],
- "fields": [
- {
- "name": "Website",
- "value": "https://alexgleason.me "
- },
- {
- "name": "Soapbox :ablobcatrainbow:",
- "value": "https://soapbox.pub :soapbox:"
- },
- {
- "name": "Email",
- "value": "alex@alexgleason.me"
- },
- {
- "name": "Gender identity",
- "value": "Soyboy"
- },
- {
- "name": "Donate (PayPal)",
- "value": "https://paypal.me/gleasonator "
- },
- {
- "name": "$BTC",
- "value": "bc1q9cx35adpm73aq2fw40ye6ts8hfxqzjr5unwg0n"
- },
- {
- "name": "$ETH",
- "value": "0xAc9aB5Fc04Dc1cB1789Af75b523Bd23C70B2D717"
- },
- {
- "name": "$DOGE",
- "value": "D5zVZs6jrRakaPVGiErkQiHt9sayzm6V5D"
- },
- {
- "name": "$XMR",
- "value": "45JDCLrjJ4bgVUSbbs2yjy9m5Mf4VLPW8fG7jw9sq5u69rXZZopQogZNeyYkMBnXpkaip4p4QwaaJNhdTotPa9g44DBCzdK"
- }
- ],
- "followers_count": 2476,
- "following_count": 1584,
- "fqn": "alex@gleasonator.com",
- "header": "https://media.gleasonator.com/accounts/headers/000/000/001/original/9d0e4dbf1c9dbc8f.png",
- "header_static": "https://media.gleasonator.com/accounts/headers/000/000/001/original/9d0e4dbf1c9dbc8f.png",
- "id": "9v5bmRalQvjOy0ECcC",
- "last_status_at": "2022-03-12T16:35:10",
- "locked": false,
- "note": "I create Fediverse software that empowers people online. :soapbox: I'm vegan btw Note: If you have a question for me, please tag me publicly. This gives the opportunity for others to chime in, and bystanders to learn.",
- "pleroma": {
- "accepts_chat_messages": true,
- "also_known_as": [
- "https://mitra.social/users/alex"
- ],
- "ap_id": "https://gleasonator.com/users/alex",
- "background_image": null,
- "birthday": "1993-07-03",
- "favicon": "https://gleasonator.com/favicon.png",
- "hide_favorites": true,
- "hide_followers": false,
- "hide_followers_count": false,
- "hide_follows": false,
- "hide_follows_count": false,
- "is_admin": true,
- "is_confirmed": true,
- "is_moderator": false,
- "is_suggested": true,
- "relationship": {},
- "skip_thread_containment": false,
- "tags": []
- },
- "source": {
- "fields": [
- {
- "name": "Website",
- "value": "https://alexgleason.me"
- },
- {
- "name": "Soapbox :ablobcatrainbow:",
- "value": "https://soapbox.pub :soapbox:"
- },
- {
- "name": "Email",
- "value": "alex@alexgleason.me"
- },
- {
- "name": "Gender identity",
- "value": "Soyboy"
- },
- {
- "name": "Donate (PayPal)",
- "value": "https://paypal.me/gleasonator"
- },
- {
- "name": "$BTC",
- "value": "bc1q9cx35adpm73aq2fw40ye6ts8hfxqzjr5unwg0n"
- },
- {
- "name": "$ETH",
- "value": "0xAc9aB5Fc04Dc1cB1789Af75b523Bd23C70B2D717"
- },
- {
- "name": "$DOGE",
- "value": "D5zVZs6jrRakaPVGiErkQiHt9sayzm6V5D"
- },
- {
- "name": "$XMR",
- "value": "45JDCLrjJ4bgVUSbbs2yjy9m5Mf4VLPW8fG7jw9sq5u69rXZZopQogZNeyYkMBnXpkaip4p4QwaaJNhdTotPa9g44DBCzdK"
- }
- ],
- "note": "I create Fediverse software that empowers people online. :soapbox:\r\n\r\nI'm vegan btw\r\n\r\nNote: If you have a question for me, please tag me publicly. This gives the opportunity for others to chime in, and bystanders to learn.",
- "pleroma": {
- "actor_type": "Person",
- "discoverable": false
- },
- "sensitive": false
- },
- "statuses_count": 23674,
- "url": "https://gleasonator.com/users/alex",
- "username": "alex"
-}
diff --git a/packages/pl-fe/src/__fixtures__/accounts.json b/packages/pl-fe/src/__fixtures__/accounts.json
deleted file mode 100644
index f10880171..000000000
--- a/packages/pl-fe/src/__fixtures__/accounts.json
+++ /dev/null
@@ -1,182 +0,0 @@
-{
- "9w1HhmenIAKBHJiUs4":{
- "header_static":"https://media.gleasonator.com/accounts/headers/000/000/001/original/9d0e4dbf1c9dbc8f.png",
- "display_name_html":"Alex Gleason",
- "bot":false,
- "display_name":"Alex Gleason",
- "created_at":"2020-06-12T21:47:28.000Z",
- "locked":false,
- "emojis":[
-
- ],
- "header":"https://media.gleasonator.com/accounts/headers/000/000/001/original/9d0e4dbf1c9dbc8f.png",
- "url":"https://gleasonator.com/users/alex",
- "note":"Fediverse developer. I come in peace. #vegan #freeculture #atheist #antiporn #gendercritical . Boosts ≠ endorsements.",
- "acct":"alex@gleasonator.com",
- "avatar_static":"https://media.gleasonator.com/accounts/avatars/000/000/001/original/1a630e4c4c64c948.jpg",
- "username":"alex",
- "avatar":"https://media.gleasonator.com/accounts/avatars/000/000/001/original/1a630e4c4c64c948.jpg",
- "fields":[
- {
- "name":"Website",
- "value":"https://alexgleason.me ",
- "name_emojified":"Website",
- "value_emojified":"https://alexgleason.me ",
- "value_plain":"https://alexgleason.me"
- },
- {
- "name":"Pleroma+Soapbox",
- "value":"https://soapbox.pub ",
- "name_emojified":"Pleroma+Soapbox",
- "value_emojified":"https://soapbox.pub ",
- "value_plain":"https://soapbox.pub"
- },
- {
- "name":"Email",
- "value":"alex@alexgleason.me",
- "name_emojified":"Email",
- "value_emojified":"alex@alexgleason.me",
- "value_plain":"alex@alexgleason.me"
- },
- {
- "name":"Gender identity",
- "value":"Soyboy",
- "name_emojified":"Gender identity",
- "value_emojified":"Soyboy",
- "value_plain":"Soyboy"
- }
- ],
- "pleroma":{
- "hide_follows":false,
- "hide_followers_count":false,
- "background_image":null,
- "confirmation_pending":false,
- "is_moderator":false,
- "hide_follows_count":false,
- "hide_followers":false,
- "relationship":{
- "showing_reblogs":true,
- "followed_by":false,
- "subscribing":false,
- "blocked_by":false,
- "requested":false,
- "domain_blocking":false,
- "following":false,
- "endorsed":false,
- "blocking":false,
- "muting":false,
- "id":"9w1HhmenIAKBHJiUs4",
- "muting_notifications":false
- },
- "tags":[
-
- ],
- "hide_favorites":true,
- "is_admin":false,
- "skip_thread_containment":false
- },
- "source":{
- "fields":[
-
- ],
- "note":"Fediverse developer. I come in peace. #vegan #freeculture #atheist #antiporn #gendercritical. Boosts ≠ endorsements.",
- "pleroma":{
- "actor_type":"Person",
- "discoverable":false
- },
- "sensitive":false
- },
- "id":"9w1HhmenIAKBHJiUs4",
- "note_emojified":"Fediverse developer. I come in peace. #vegan #freeculture #atheist #antiporn #gendercritical . Boosts ≠ endorsements."
- },
- "9w1HhmenIAKBHJiUs5":{
- "header_static":"https://media.gleasonator.com/accounts/headers/000/000/001/original/9d0e4dbf1c9dbc8f.png",
- "display_name_html":"Alex Gleason",
- "bot":false,
- "display_name":"Alex Gleason",
- "created_at":"2020-06-12T21:47:28.000Z",
- "locked":false,
- "emojis":[
-
- ],
- "header":"https://media.gleasonator.com/accounts/headers/000/000/001/original/9d0e4dbf1c9dbc8f.png",
- "url":"https://gleasonator.com/users/alex",
- "note":"Fediverse developer. I come in peace. #vegan #freeculture #atheist #antiporn #gendercritical . Boosts ≠ endorsements.",
- "acct":"alex@gleasonator.com",
- "avatar_static":"https://media.gleasonator.com/accounts/avatars/000/000/001/original/1a630e4c4c64c948.jpg",
- "username":"alex",
- "avatar":"https://media.gleasonator.com/accounts/avatars/000/000/001/original/1a630e4c4c64c948.jpg",
- "fields":[
- {
- "name":"Website",
- "value":"https://alexgleason.me ",
- "name_emojified":"Website",
- "value_emojified":"https://alexgleason.me ",
- "value_plain":"https://alexgleason.me"
- },
- {
- "name":"Pleroma+Soapbox",
- "value":"https://soapbox.pub ",
- "name_emojified":"Pleroma+Soapbox",
- "value_emojified":"https://soapbox.pub ",
- "value_plain":"https://soapbox.pub"
- },
- {
- "name":"Email",
- "value":"alex@alexgleason.me",
- "name_emojified":"Email",
- "value_emojified":"alex@alexgleason.me",
- "value_plain":"alex@alexgleason.me"
- },
- {
- "name":"Gender identity",
- "value":"Soyboy",
- "name_emojified":"Gender identity",
- "value_emojified":"Soyboy",
- "value_plain":"Soyboy"
- }
- ],
- "pleroma":{
- "hide_follows":false,
- "hide_followers_count":false,
- "background_image":null,
- "confirmation_pending":false,
- "is_moderator":false,
- "hide_follows_count":false,
- "hide_followers":false,
- "relationship":{
- "showing_reblogs":true,
- "followed_by":false,
- "subscribing":false,
- "blocked_by":false,
- "requested":false,
- "domain_blocking":false,
- "following":false,
- "endorsed":false,
- "blocking":false,
- "muting":false,
- "id":"9w1HhmenIAKBHJiUs5",
- "muting_notifications":false
- },
- "tags":[
-
- ],
- "hide_favorites":true,
- "is_admin":false,
- "skip_thread_containment":false
- },
- "source":{
- "fields":[
-
- ],
- "note":"Fediverse developer. I come in peace. #vegan #freeculture #atheist #antiporn #gendercritical. Boosts ≠ endorsements.",
- "pleroma":{
- "actor_type":"Person",
- "discoverable":false
- },
- "sensitive":false
- },
- "id":"9w1HhmenIAKBHJiUs5",
- "note_emojified":"Fediverse developer. I come in peace. #vegan #freeculture #atheist #antiporn #gendercritical . Boosts ≠ endorsements."
- }
-}
diff --git a/packages/pl-fe/src/__fixtures__/accounts_counter_follow.json b/packages/pl-fe/src/__fixtures__/accounts_counter_follow.json
deleted file mode 100644
index 52bccc97b..000000000
--- a/packages/pl-fe/src/__fixtures__/accounts_counter_follow.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "9vMAje101ngtjlMj7w": {
- "followers_count": 2,
- "following_count": 3,
- "statuses_count": 2
- }
-}
diff --git a/packages/pl-fe/src/__fixtures__/accounts_counter_initial.json b/packages/pl-fe/src/__fixtures__/accounts_counter_initial.json
deleted file mode 100644
index ce9b3279e..000000000
--- a/packages/pl-fe/src/__fixtures__/accounts_counter_initial.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "9vMAje101ngtjlMj7w": {
- "followers_count": 2,
- "following_count": 2,
- "statuses_count": 2
- }
-}
diff --git a/packages/pl-fe/src/__fixtures__/accounts_counter_unfollow.json b/packages/pl-fe/src/__fixtures__/accounts_counter_unfollow.json
deleted file mode 100644
index 98bbaaafb..000000000
--- a/packages/pl-fe/src/__fixtures__/accounts_counter_unfollow.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "9vMAje101ngtjlMj7w": {
- "followers_count": 2,
- "following_count": 1,
- "statuses_count": 2
- }
-}
diff --git a/packages/pl-fe/src/__fixtures__/admin_api_frontend_config.json b/packages/pl-fe/src/__fixtures__/admin_api_frontend_config.json
deleted file mode 100644
index 311cb3d95..000000000
--- a/packages/pl-fe/src/__fixtures__/admin_api_frontend_config.json
+++ /dev/null
@@ -1,55 +0,0 @@
-{
- "configs": [
- {
- "group": ":pleroma",
- "key": ":frontend_configurations",
- "value": [
- {
- "tuple": [
- ":pl_fe",
- {
- "logo": "blob:http://localhost:3036/0cdfa863-6889-4199-b870-4942cedd364f",
- "banner": "blob:http://localhost:3036/a835afed-6078-45bd-92b4-7ffd858c3eca",
- "brandColor": "#254f92",
- "customCss": [
- "/instance/static/custom.css"
- ],
- "promoPanel": {
- "items": [
- {
- "icon": "globe",
- "text": "blog",
- "url": "https://teci.world/blog"
- },
- {
- "icon": "globe",
- "text": "book",
- "url": "https://teci.world/book"
- }
- ]
- },
- "extensions": {
- "patron": false
- },
- "defaultSettings": {
- "autoPlayGif": false
- },
- "navlinks": {
- "homeFooter": [
- {
- "title": "about",
- "url": "/instance/about/index.html"
- },
- {
- "title": "tos",
- "url": "/instance/about/tos.html"
- }
- ]
- }
- }
- ]
- }
- ]
- }
- ]
-}
diff --git a/packages/pl-fe/src/__fixtures__/akkoma-instance.json b/packages/pl-fe/src/__fixtures__/akkoma-instance.json
deleted file mode 100644
index a4da0dc94..000000000
--- a/packages/pl-fe/src/__fixtures__/akkoma-instance.json
+++ /dev/null
@@ -1,105 +0,0 @@
-{
- "approval_required": false,
- "avatar_upload_limit": 2000000,
- "background_image": "https://fe.disroot.org/images/city.jpg",
- "background_upload_limit": 4000000,
- "banner_upload_limit": 4000000,
- "description": "FEDIsroot - Federated social network powered by Pleroma (open beta)",
- "description_limit": 5000,
- "email": "admin@example.lan",
- "languages": [
- "en"
- ],
- "max_toot_chars": 5000,
- "pleroma": {
- "metadata": {
- "account_activation_required": false,
- "features": [
- "pleroma_api",
- "akkoma_api",
- "mastodon_api",
- "mastodon_api_streaming",
- "polls",
- "v2_suggestions",
- "pleroma_explicit_addressing",
- "shareable_emoji_packs",
- "multifetch",
- "pleroma:api/v1/notifications:include_types_filter",
- "editing",
- "media_proxy",
- "relay",
- "pleroma_emoji_reactions",
- "exposable_reactions",
- "profile_directory",
- "custom_emoji_reactions",
- "pleroma:get:main/ostatus"
- ],
- "federation": {
- "enabled": true,
- "exclusions": false,
- "mrf_hashtag": {
- "federated_timeline_removal": [],
- "reject": [],
- "sensitive": [
- "nsfw"
- ]
- },
- "mrf_object_age": {
- "actions": [
- "delist",
- "strip_followers"
- ],
- "threshold": 604800
- },
- "mrf_policies": [
- "ObjectAgePolicy",
- "TagPolicy",
- "HashtagPolicy",
- "InlineQuotePolicy"
- ],
- "quarantined_instances": [],
- "quarantined_instances_info": {
- "quarantined_instances": {}
- }
- },
- "fields_limits": {
- "max_fields": 10,
- "max_remote_fields": 20,
- "name_length": 512,
- "value_length": 2048
- },
- "post_formats": [
- "text/plain",
- "text/html",
- "text/markdown",
- "text/bbcode",
- "text/x.misskeymarkdown"
- ],
- "privileged_staff": false
- },
- "stats": {
- "mau": 83
- },
- "vapid_public_key": null
- },
- "poll_limits": {
- "max_expiration": 31536000,
- "max_option_chars": 200,
- "max_options": 20,
- "min_expiration": 0
- },
- "registrations": false,
- "stats": {
- "domain_count": 6972,
- "status_count": 8081,
- "user_count": 357
- },
- "thumbnail": "https://fe.disroot.org/instance/thumbnail.jpeg",
- "title": "FEDIsroot",
- "upload_limit": 16000000,
- "uri": "https://fe.disroot.org",
- "urls": {
- "streaming_api": "wss://fe.disroot.org"
- },
- "version": "2.7.2 (compatible; Akkoma 3.3.1-0-gaf90a4e51)"
-}
diff --git a/packages/pl-fe/src/__fixtures__/announcements.json b/packages/pl-fe/src/__fixtures__/announcements.json
deleted file mode 100644
index 20e1960d0..000000000
--- a/packages/pl-fe/src/__fixtures__/announcements.json
+++ /dev/null
@@ -1,44 +0,0 @@
-[
- {
- "id": "1",
- "content": "Updated to Soapbox v3.
",
- "starts_at": null,
- "ends_at": null,
- "all_day": false,
- "published_at": "2022-06-15T18:47:14.190Z",
- "updated_at": "2022-06-15T18:47:18.339Z",
- "read": true,
- "mentions": [],
- "statuses": [],
- "tags": [],
- "emojis": [],
- "reactions": [
- {
- "name": "📈",
- "count": 476,
- "me": true
- }
- ]
- },
- {
- "id": "2",
- "content": "Rolled back to Soapbox v2 for now.
",
- "starts_at": null,
- "ends_at": null,
- "all_day": false,
- "published_at": "2022-07-13T11:11:50.628Z",
- "updated_at": "2022-07-13T11:11:50.628Z",
- "read": true,
- "mentions": [],
- "statuses": [],
- "tags": [],
- "emojis": [],
- "reactions": [
- {
- "name": "📉",
- "count": 420,
- "me": false
- }
- ]
- }
-]
\ No newline at end of file
diff --git a/packages/pl-fe/src/__fixtures__/app.json b/packages/pl-fe/src/__fixtures__/app.json
deleted file mode 100644
index 18b5ba2b3..000000000
--- a/packages/pl-fe/src/__fixtures__/app.json
+++ /dev/null
@@ -1,15 +0,0 @@
-{
- "vapid_key": "BHczIFh4Wn3Q_7wDgehaB8Ti3Uu8BoyOgXxkOVuEJRuEqxtd9TAno8K9ycz4myiQ1ruiyVfG6xT1JLeXtpxDzUs",
- "token_type": "Bearer",
- "client_secret": "cm_8Zip_UYyYq1DPQ-CRFUolrz894MmWYUC0aeVcklM",
- "redirect_uri": "urn:ietf:wg:oauth:2.0:oob",
- "created_at": 1594764335,
- "name": "SoapboxFE_2020-07-14T22:05:17.054Z",
- "client_id": "bjiy8AxGKXXesfZcyp_iN-uQVE6Cnl03efWoSdOPh9M",
- "expires_in": 600,
- "scope": "read write follow push admin",
- "refresh_token": "IXoCKCsZi3ZCuCjIkeadvEoHRdqOYHklZmv9jvkJ5VA",
- "website": null,
- "id": "134",
- "access_token": "XSkQFSV1R_IvycQmw_uD5z6hQmNyuhh9PtMQbv8TgG8"
-}
diff --git a/packages/pl-fe/src/__fixtures__/blocks.json b/packages/pl-fe/src/__fixtures__/blocks.json
deleted file mode 100644
index 42e8753c5..000000000
--- a/packages/pl-fe/src/__fixtures__/blocks.json
+++ /dev/null
@@ -1,8 +0,0 @@
-[
- {
- "id": "22",
- "username": "twoods",
- "acct": "twoods",
- "display_name": "Tiger Woods"
- }
-]
diff --git a/packages/pl-fe/src/__fixtures__/config_db.json b/packages/pl-fe/src/__fixtures__/config_db.json
deleted file mode 100644
index 10e20a3f5..000000000
--- a/packages/pl-fe/src/__fixtures__/config_db.json
+++ /dev/null
@@ -1,2735 +0,0 @@
-{
- "configs": [
- {
- "group": ":phoenix",
- "key": ":format_encoders",
- "value": [
- {
- "tuple": [
- ":json",
- "Jason"
- ]
- }
- ]
- },
- {
- "group": ":phoenix",
- "key": ":json_library",
- "value": "Jason"
- },
- {
- "group": ":phoenix",
- "key": ":filter_parameters",
- "value": [
- "password",
- "confirm"
- ]
- },
- {
- "group": ":phoenix",
- "key": ":stacktrace_depth",
- "value": 20
- },
- {
- "group": ":logger",
- "key": ":ex_syslogger",
- "value": [
- {
- "tuple": [
- ":level",
- ":debug"
- ]
- },
- {
- "tuple": [
- ":ident",
- "pleroma"
- ]
- },
- {
- "tuple": [
- ":format",
- "$metadata[$level] $message"
- ]
- },
- {
- "tuple": [
- ":metadata",
- [
- ":request_id"
- ]
- ]
- }
- ]
- },
- {
- "group": ":logger",
- "key": ":console",
- "value": [
- {
- "tuple": [
- ":level",
- ":debug"
- ]
- },
- {
- "tuple": [
- ":metadata",
- [
- ":request_id"
- ]
- ]
- },
- {
- "tuple": [
- ":format",
- "[$level] $message\n"
- ]
- }
- ]
- },
- {
- "group": ":floki",
- "key": ":html_parser",
- "value": "Floki.HTMLParser.FastHtml"
- },
- {
- "group": ":tzdata",
- "key": ":http_client",
- "value": "Pleroma.HTTP.Tzdata"
- },
- {
- "group": ":http_signatures",
- "key": ":adapter",
- "value": "Pleroma.Signature"
- },
- {
- "group": ":prometheus",
- "key": "Pleroma.Web.Endpoint.MetricsExporter",
- "value": [
- {
- "tuple": [
- ":path",
- "/api/pleroma/app_metrics"
- ]
- }
- ]
- },
- {
- "group": ":ueberauth",
- "key": "Ueberauth",
- "value": [
- {
- "tuple": [
- ":base_path",
- "/oauth"
- ]
- },
- {
- "tuple": [
- ":providers",
- []
- ]
- }
- ]
- },
- {
- "group": ":esshd",
- "key": ":enabled",
- "value": false
- },
- {
- "group": ":cors_plug",
- "key": ":max_age",
- "value": 86400
- },
- {
- "group": ":cors_plug",
- "key": ":methods",
- "value": [
- "POST",
- "PUT",
- "DELETE",
- "GET",
- "PATCH",
- "OPTIONS"
- ]
- },
- {
- "group": ":cors_plug",
- "key": ":expose",
- "value": [
- "Link",
- "X-RateLimit-Reset",
- "X-RateLimit-Limit",
- "X-RateLimit-Remaining",
- "X-Request-Id",
- "Idempotency-Key"
- ]
- },
- {
- "group": ":cors_plug",
- "key": ":credentials",
- "value": true
- },
- {
- "group": ":cors_plug",
- "key": ":headers",
- "value": [
- "Authorization",
- "Content-Type",
- "Idempotency-Key"
- ]
- },
- {
- "group": ":mime",
- "key": ":types",
- "value": {
- "application/activity+json": [
- "activity+json"
- ],
- "application/jrd+json": [
- "jrd+json"
- ],
- "application/ld+json": [
- "activity+json"
- ],
- "application/xml": [
- "xml"
- ],
- "application/xrd+xml": [
- "xrd+xml"
- ]
- }
- },
- {
- "group": ":quack",
- "key": ":level",
- "value": ":warn"
- },
- {
- "group": ":quack",
- "key": ":meta",
- "value": [
- ":all"
- ]
- },
- {
- "group": ":quack",
- "key": ":webhook_url",
- "value": "https://hooks.slack.com/services/YOUR-KEY-HERE"
- },
- {
- "db": [
- ":subject",
- ":public_key",
- ":private_key"
- ],
- "group": ":web_push_encryption",
- "key": ":vapid_details",
- "value": [
- {
- "tuple": [
- ":subject",
- "mailto:alex@alexgleason.me"
- ]
- },
- {
- "tuple": [
- ":public_key",
- "BAlKFlwdC-9z36ObeNyiIRdGT0luMx-SDEQzrsIRLWvcspqMU7oIhT9HbgTo2gNt8lhtKoOyiQEH9IQqUxwmBp0"
- ]
- },
- {
- "tuple": [
- ":private_key",
- "o6y0A1DtjJGURKJ2RH4BLAHuqG8RcD1rDqxrUOo8wIw"
- ]
- }
- ]
- },
- {
- "group": ":ex_aws",
- "key": ":http_client",
- "value": "Pleroma.HTTP.ExAws"
- },
- {
- "db": [
- ":access_key_id",
- ":secret_access_key",
- ":scheme",
- ":host",
- ":region"
- ],
- "group": ":ex_aws",
- "key": ":s3",
- "value": [
- {
- "tuple": [
- ":access_key_id",
- "3WJHLX5DH6LQT5NKXKU2"
- ]
- },
- {
- "tuple": [
- ":secret_access_key",
- "6Zdlw6XKtmlvvj1to1B25YlEpBAG5ahEs2ExaEqBG4k"
- ]
- },
- {
- "tuple": [
- ":scheme",
- "https://"
- ]
- },
- {
- "tuple": [
- ":host",
- "sfo2.digitaloceanspaces.com"
- ]
- },
- {
- "tuple": [
- ":region",
- "sfo2"
- ]
- }
- ]
- },
- {
- "db": [
- ":default_signer"
- ],
- "group": ":joken",
- "key": ":default_signer",
- "value": "AvRdJr2XiCKeLDrU33rsKA1nTzu1aHypRDpRDCmN00oSHM8+f7Z9BkilF6nWwwv6"
- },
- {
- "group": ":pleroma",
- "key": ":ecto_repos",
- "value": [
- "Pleroma.Repo"
- ]
- },
- {
- "group": ":pleroma",
- "key": "Pleroma.Captcha",
- "value": [
- {
- "tuple": [
- ":enabled",
- true
- ]
- },
- {
- "tuple": [
- ":seconds_valid",
- 300
- ]
- },
- {
- "tuple": [
- ":method",
- "Pleroma.Captcha.Native"
- ]
- }
- ]
- },
- {
- "group": ":pleroma",
- "key": "Pleroma.Captcha.Kocaptcha",
- "value": [
- {
- "tuple": [
- ":endpoint",
- "https://captcha.kotobank.ch"
- ]
- }
- ]
- },
- {
- "group": ":pleroma",
- "key": ":emoji",
- "value": [
- {
- "tuple": [
- ":shortcode_globs",
- [
- "/emoji/custom/**/*.png"
- ]
- ]
- },
- {
- "tuple": [
- ":pack_extensions",
- [
- ".png",
- ".gif"
- ]
- ]
- },
- {
- "tuple": [
- ":groups",
- [
- {
- "tuple": [
- ":Custom",
- [
- "/emoji/*.png",
- "/emoji/**/*.png"
- ]
- ]
- }
- ]
- ]
- },
- {
- "tuple": [
- ":default_manifest",
- "https://git.pleroma.social/pleroma/emoji-index/raw/master/index.json"
- ]
- },
- {
- "tuple": [
- ":shared_pack_cache_seconds_per_file",
- 60
- ]
- }
- ]
- },
- {
- "group": ":pleroma",
- "key": ":uri_schemes",
- "value": [
- {
- "tuple": [
- ":valid_schemes",
- [
- "https",
- "http",
- "dat",
- "dweb",
- "gopher",
- "hyper",
- "ipfs",
- "ipns",
- "irc",
- "ircs",
- "magnet",
- "mailto",
- "mumble",
- "ssb",
- "xmpp"
- ]
- ]
- }
- ]
- },
- {
- "group": ":pleroma",
- "key": ":http",
- "value": [
- {
- "tuple": [
- ":proxy_url",
- null
- ]
- },
- {
- "tuple": [
- ":send_user_agent",
- true
- ]
- },
- {
- "tuple": [
- ":user_agent",
- ":default"
- ]
- },
- {
- "tuple": [
- ":adapter",
- []
- ]
- }
- ]
- },
- {
- "group": ":pleroma",
- "key": ":welcome",
- "value": [
- {
- "tuple": [
- ":direct_message",
- [
- {
- "tuple": [
- ":enabled",
- false
- ]
- },
- {
- "tuple": [
- ":sender_nickname",
- null
- ]
- },
- {
- "tuple": [
- ":message",
- null
- ]
- }
- ]
- ]
- },
- {
- "tuple": [
- ":chat_message",
- [
- {
- "tuple": [
- ":enabled",
- false
- ]
- },
- {
- "tuple": [
- ":sender_nickname",
- null
- ]
- },
- {
- "tuple": [
- ":message",
- null
- ]
- }
- ]
- ]
- },
- {
- "tuple": [
- ":email",
- [
- {
- "tuple": [
- ":enabled",
- false
- ]
- },
- {
- "tuple": [
- ":sender",
- null
- ]
- },
- {
- "tuple": [
- ":subject",
- "Welcome to <%= instance_name %>"
- ]
- },
- {
- "tuple": [
- ":html",
- "Welcome to <%= instance_name %>"
- ]
- },
- {
- "tuple": [
- ":text",
- "Welcome to <%= instance_name %>"
- ]
- }
- ]
- ]
- }
- ]
- },
- {
- "group": ":pleroma",
- "key": ":feed",
- "value": [
- {
- "tuple": [
- ":post_title",
- {
- ":max_length": 100,
- ":omission": "..."
- }
- ]
- }
- ]
- },
- {
- "group": ":pleroma",
- "key": ":markup",
- "value": [
- {
- "tuple": [
- ":allow_inline_images",
- true
- ]
- },
- {
- "tuple": [
- ":allow_headings",
- false
- ]
- },
- {
- "tuple": [
- ":allow_tables",
- false
- ]
- },
- {
- "tuple": [
- ":allow_fonts",
- false
- ]
- },
- {
- "tuple": [
- ":scrub_policy",
- [
- "Pleroma.HTML.Scrubber.Default",
- "Pleroma.HTML.Transform.MediaProxy"
- ]
- ]
- }
- ]
- },
- {
- "group": ":pleroma",
- "key": ":assets",
- "value": [
- {
- "tuple": [
- ":mascots",
- [
- {
- "tuple": [
- ":pleroma_fox_tan",
- {
- ":mime_type": "image/png",
- ":url": "/images/pleroma-fox-tan-smol.png"
- }
- ]
- },
- {
- "tuple": [
- ":pleroma_fox_tan_shy",
- {
- ":mime_type": "image/png",
- ":url": "/images/pleroma-fox-tan-shy.png"
- }
- ]
- }
- ]
- ]
- },
- {
- "tuple": [
- ":default_mascot",
- ":pleroma_fox_tan"
- ]
- }
- ]
- },
- {
- "group": ":pleroma",
- "key": ":manifest",
- "value": [
- {
- "tuple": [
- ":icons",
- [
- {
- ":src": "/static/logo.png",
- ":type": "image/png"
- }
- ]
- ]
- },
- {
- "tuple": [
- ":theme_color",
- "#282c37"
- ]
- },
- {
- "tuple": [
- ":background_color",
- "#191b22"
- ]
- }
- ]
- },
- {
- "group": ":pleroma",
- "key": ":activitypub",
- "value": [
- {
- "tuple": [
- ":unfollow_blocked",
- true
- ]
- },
- {
- "tuple": [
- ":outgoing_blocks",
- true
- ]
- },
- {
- "tuple": [
- ":follow_handshake_timeout",
- 500
- ]
- },
- {
- "tuple": [
- ":note_replies_output_limit",
- 5
- ]
- },
- {
- "tuple": [
- ":sign_object_fetches",
- true
- ]
- },
- {
- "tuple": [
- ":authorized_fetch_mode",
- false
- ]
- }
- ]
- },
- {
- "group": ":pleroma",
- "key": ":streamer",
- "value": [
- {
- "tuple": [
- ":workers",
- 3
- ]
- },
- {
- "tuple": [
- ":overflow_workers",
- 2
- ]
- }
- ]
- },
- {
- "group": ":pleroma",
- "key": ":user",
- "value": [
- {
- "tuple": [
- ":deny_follow_blocked",
- true
- ]
- }
- ]
- },
- {
- "group": ":pleroma",
- "key": ":mrf_normalize_markup",
- "value": [
- {
- "tuple": [
- ":scrub_policy",
- "Pleroma.HTML.Scrubber.Default"
- ]
- }
- ]
- },
- {
- "group": ":pleroma",
- "key": ":mrf_rejectnonpublic",
- "value": [
- {
- "tuple": [
- ":allow_followersonly",
- false
- ]
- },
- {
- "tuple": [
- ":allow_direct",
- false
- ]
- }
- ]
- },
- {
- "group": ":pleroma",
- "key": ":mrf_hellthread",
- "value": [
- {
- "tuple": [
- ":delist_threshold",
- 10
- ]
- },
- {
- "tuple": [
- ":reject_threshold",
- 20
- ]
- }
- ]
- },
- {
- "group": ":pleroma",
- "key": ":mrf_simple",
- "value": [
- {
- "tuple": [
- ":media_removal",
- []
- ]
- },
- {
- "tuple": [
- ":media_nsfw",
- []
- ]
- },
- {
- "tuple": [
- ":federated_timeline_removal",
- []
- ]
- },
- {
- "tuple": [
- ":report_removal",
- []
- ]
- },
- {
- "tuple": [
- ":reject",
- []
- ]
- },
- {
- "tuple": [
- ":followers_only",
- []
- ]
- },
- {
- "tuple": [
- ":accept",
- []
- ]
- },
- {
- "tuple": [
- ":avatar_removal",
- []
- ]
- },
- {
- "tuple": [
- ":banner_removal",
- []
- ]
- },
- {
- "tuple": [
- ":reject_deletes",
- []
- ]
- }
- ]
- },
- {
- "group": ":pleroma",
- "key": ":mrf_keyword",
- "value": [
- {
- "tuple": [
- ":reject",
- []
- ]
- },
- {
- "tuple": [
- ":federated_timeline_removal",
- []
- ]
- },
- {
- "tuple": [
- ":replace",
- []
- ]
- }
- ]
- },
- {
- "group": ":pleroma",
- "key": ":mrf_subchain",
- "value": [
- {
- "tuple": [
- ":match_actor",
- {}
- ]
- }
- ]
- },
- {
- "group": ":pleroma",
- "key": ":mrf_activity_expiration",
- "value": [
- {
- "tuple": [
- ":days",
- 365
- ]
- }
- ]
- },
- {
- "group": ":pleroma",
- "key": ":mrf_vocabulary",
- "value": [
- {
- "tuple": [
- ":accept",
- []
- ]
- },
- {
- "tuple": [
- ":reject",
- []
- ]
- }
- ]
- },
- {
- "group": ":pleroma",
- "key": ":mrf_object_age",
- "value": [
- {
- "tuple": [
- ":threshold",
- 604800
- ]
- },
- {
- "tuple": [
- ":actions",
- [
- ":delist",
- ":strip_followers"
- ]
- ]
- }
- ]
- },
- {
- "group": ":pleroma",
- "key": "Pleroma.Web.MediaProxy.Invalidation.Http",
- "value": [
- {
- "tuple": [
- ":method",
- ":purge"
- ]
- },
- {
- "tuple": [
- ":headers",
- []
- ]
- },
- {
- "tuple": [
- ":options",
- []
- ]
- }
- ]
- },
- {
- "group": ":pleroma",
- "key": "Pleroma.Web.MediaProxy.Invalidation.Script",
- "value": [
- {
- "tuple": [
- ":script_path",
- null
- ]
- }
- ]
- },
- {
- "group": ":pleroma",
- "key": ":chat",
- "value": [
- {
- "tuple": [
- ":enabled",
- true
- ]
- }
- ]
- },
- {
- "group": ":pleroma",
- "key": ":gopher",
- "value": [
- {
- "tuple": [
- ":enabled",
- false
- ]
- },
- {
- "tuple": [
- ":ip",
- {
- "tuple": [
- 0,
- 0,
- 0,
- 0
- ]
- }
- ]
- },
- {
- "tuple": [
- ":port",
- 9999
- ]
- }
- ]
- },
- {
- "group": ":pleroma",
- "key": "Pleroma.Web.Metadata",
- "value": [
- {
- "tuple": [
- ":providers",
- [
- "Pleroma.Web.Metadata.Providers.OpenGraph",
- "Pleroma.Web.Metadata.Providers.TwitterCard",
- "Pleroma.Web.Metadata.Providers.RelMe",
- "Pleroma.Web.Metadata.Providers.Feed"
- ]
- ]
- },
- {
- "tuple": [
- ":unfurl_nsfw",
- false
- ]
- }
- ]
- },
- {
- "group": ":pleroma",
- "key": "Pleroma.Web.Preload",
- "value": [
- {
- "tuple": [
- ":providers",
- [
- "Pleroma.Web.Preload.Providers.Instance"
- ]
- ]
- }
- ]
- },
- {
- "group": ":pleroma",
- "key": ":http_security",
- "value": [
- {
- "tuple": [
- ":enabled",
- true
- ]
- },
- {
- "tuple": [
- ":sts",
- false
- ]
- },
- {
- "tuple": [
- ":sts_max_age",
- 31536000
- ]
- },
- {
- "tuple": [
- ":ct_max_age",
- 2592000
- ]
- },
- {
- "tuple": [
- ":referrer_policy",
- "same-origin"
- ]
- }
- ]
- },
- {
- "group": ":pleroma",
- "key": "Pleroma.User",
- "value": [
- {
- "tuple": [
- ":restricted_nicknames",
- [
- ".well-known",
- "~",
- "about",
- "activities",
- "api",
- "auth",
- "check_password",
- "dev",
- "friend-requests",
- "inbox",
- "internal",
- "main",
- "media",
- "nodeinfo",
- "notice",
- "oauth",
- "objects",
- "ostatus_subscribe",
- "pleroma",
- "proxy",
- "push",
- "registration",
- "relay",
- "settings",
- "status",
- "tag",
- "user-search",
- "user_exists",
- "users",
- "web",
- "verify_credentials",
- "update_credentials",
- "relationships",
- "search",
- "confirmation_resend",
- "mfa"
- ]
- ]
- },
- {
- "tuple": [
- ":email_blacklist",
- []
- ]
- }
- ]
- },
- {
- "group": ":pleroma",
- "key": "Oban",
- "value": [
- {
- "tuple": [
- ":repo",
- "Pleroma.Repo"
- ]
- },
- {
- "tuple": [
- ":log",
- false
- ]
- },
- {
- "tuple": [
- ":queues",
- [
- {
- "tuple": [
- ":activity_expiration",
- 10
- ]
- },
- {
- "tuple": [
- ":federator_incoming",
- 50
- ]
- },
- {
- "tuple": [
- ":federator_outgoing",
- 50
- ]
- },
- {
- "tuple": [
- ":web_push",
- 50
- ]
- },
- {
- "tuple": [
- ":mailer",
- 10
- ]
- },
- {
- "tuple": [
- ":transmogrifier",
- 20
- ]
- },
- {
- "tuple": [
- ":scheduled_activities",
- 10
- ]
- },
- {
- "tuple": [
- ":background",
- 5
- ]
- },
- {
- "tuple": [
- ":remote_fetcher",
- 2
- ]
- },
- {
- "tuple": [
- ":attachments_cleanup",
- 5
- ]
- },
- {
- "tuple": [
- ":new_users_digest",
- 1
- ]
- }
- ]
- ]
- },
- {
- "tuple": [
- ":plugins",
- [
- "Oban.Plugins.Pruner"
- ]
- ]
- },
- {
- "tuple": [
- ":crontab",
- [
- {
- "tuple": [
- "0 0 * * *",
- "Pleroma.Workers.Cron.ClearOauthTokenWorker"
- ]
- },
- {
- "tuple": [
- "0 * * * *",
- "Pleroma.Workers.Cron.StatsWorker"
- ]
- },
- {
- "tuple": [
- "* * * * *",
- "Pleroma.Workers.Cron.PurgeExpiredActivitiesWorker"
- ]
- },
- {
- "tuple": [
- "0 0 * * 0",
- "Pleroma.Workers.Cron.DigestEmailsWorker"
- ]
- },
- {
- "tuple": [
- "0 0 * * *",
- "Pleroma.Workers.Cron.NewUsersDigestWorker"
- ]
- }
- ]
- ]
- }
- ]
- },
- {
- "group": ":pleroma",
- "key": ":workers",
- "value": [
- {
- "tuple": [
- ":retries",
- [
- {
- "tuple": [
- ":federator_incoming",
- 5
- ]
- },
- {
- "tuple": [
- ":federator_outgoing",
- 5
- ]
- }
- ]
- ]
- }
- ]
- },
- {
- "group": ":pleroma",
- "key": "Pleroma.Formatter",
- "value": [
- {
- "tuple": [
- ":class",
- false
- ]
- },
- {
- "tuple": [
- ":rel",
- "ugc"
- ]
- },
- {
- "tuple": [
- ":new_window",
- false
- ]
- },
- {
- "tuple": [
- ":truncate",
- false
- ]
- },
- {
- "tuple": [
- ":strip_prefix",
- false
- ]
- },
- {
- "tuple": [
- ":extra",
- true
- ]
- },
- {
- "tuple": [
- ":validate_tld",
- ":no_scheme"
- ]
- }
- ]
- },
- {
- "group": ":pleroma",
- "key": ":ldap",
- "value": [
- {
- "tuple": [
- ":enabled",
- false
- ]
- },
- {
- "tuple": [
- ":host",
- "localhost"
- ]
- },
- {
- "tuple": [
- ":port",
- 389
- ]
- },
- {
- "tuple": [
- ":ssl",
- false
- ]
- },
- {
- "tuple": [
- ":sslopts",
- []
- ]
- },
- {
- "tuple": [
- ":tls",
- false
- ]
- },
- {
- "tuple": [
- ":tlsopts",
- []
- ]
- },
- {
- "tuple": [
- ":base",
- "dc=example,dc=com"
- ]
- },
- {
- "tuple": [
- ":uid",
- "cn"
- ]
- }
- ]
- },
- {
- "group": ":pleroma",
- "key": ":auth",
- "value": [
- {
- "tuple": [
- ":enforce_oauth_admin_scope_usage",
- true
- ]
- },
- {
- "tuple": [
- ":oauth_consumer_strategies",
- []
- ]
- }
- ]
- },
- {
- "group": ":pleroma",
- "key": "Pleroma.Emails.UserEmail",
- "value": [
- {
- "tuple": [
- ":logo",
- null
- ]
- },
- {
- "tuple": [
- ":styling",
- {
- ":background_color": "#2C3645",
- ":content_background_color": "#1B2635",
- ":header_color": "#d8a070",
- ":link_color": "#d8a070",
- ":text_color": "#b9b9ba",
- ":text_muted_color": "#b9b9ba"
- }
- ]
- }
- ]
- },
- {
- "group": ":pleroma",
- "key": "Pleroma.Emails.NewUsersDigestEmail",
- "value": [
- {
- "tuple": [
- ":enabled",
- false
- ]
- }
- ]
- },
- {
- "group": ":pleroma",
- "key": "Pleroma.ScheduledActivity",
- "value": [
- {
- "tuple": [
- ":daily_user_limit",
- 25
- ]
- },
- {
- "tuple": [
- ":total_user_limit",
- 300
- ]
- },
- {
- "tuple": [
- ":enabled",
- true
- ]
- }
- ]
- },
- {
- "group": ":pleroma",
- "key": ":email_notifications",
- "value": [
- {
- "tuple": [
- ":digest",
- {
- ":active": false,
- ":inactivity_threshold": 7,
- ":interval": 7
- }
- ]
- }
- ]
- },
- {
- "group": ":pleroma",
- "key": ":oauth2",
- "value": [
- {
- "tuple": [
- ":token_expires_in",
- 600
- ]
- },
- {
- "tuple": [
- ":issue_new_refresh_token",
- true
- ]
- },
- {
- "tuple": [
- ":clean_expired_tokens",
- false
- ]
- }
- ]
- },
- {
- "group": ":pleroma",
- "key": ":rate_limit",
- "value": [
- {
- "tuple": [
- ":authentication",
- {
- "tuple": [
- 60000,
- 15
- ]
- }
- ]
- },
- {
- "tuple": [
- ":timeline",
- {
- "tuple": [
- 500,
- 3
- ]
- }
- ]
- },
- {
- "tuple": [
- ":search",
- [
- {
- "tuple": [
- 1000,
- 10
- ]
- },
- {
- "tuple": [
- 1000,
- 30
- ]
- }
- ]
- ]
- },
- {
- "tuple": [
- ":app_account_creation",
- {
- "tuple": [
- 1800000,
- 25
- ]
- }
- ]
- },
- {
- "tuple": [
- ":relations_actions",
- {
- "tuple": [
- 10000,
- 10
- ]
- }
- ]
- },
- {
- "tuple": [
- ":relation_id_action",
- {
- "tuple": [
- 60000,
- 2
- ]
- }
- ]
- },
- {
- "tuple": [
- ":statuses_actions",
- {
- "tuple": [
- 10000,
- 15
- ]
- }
- ]
- },
- {
- "tuple": [
- ":status_id_action",
- {
- "tuple": [
- 60000,
- 3
- ]
- }
- ]
- },
- {
- "tuple": [
- ":password_reset",
- {
- "tuple": [
- 1800000,
- 5
- ]
- }
- ]
- },
- {
- "tuple": [
- ":account_confirmation_resend",
- {
- "tuple": [
- 8640000,
- 5
- ]
- }
- ]
- },
- {
- "tuple": [
- ":ap_routes",
- {
- "tuple": [
- 60000,
- 15
- ]
- }
- ]
- }
- ]
- },
- {
- "group": ":pleroma",
- "key": "Pleroma.ActivityExpiration",
- "value": [
- {
- "tuple": [
- ":enabled",
- true
- ]
- }
- ]
- },
- {
- "group": ":pleroma",
- "key": "Pleroma.Plugs.RemoteIp",
- "value": [
- {
- "tuple": [
- ":enabled",
- true
- ]
- }
- ]
- },
- {
- "group": ":pleroma",
- "key": ":web_cache_ttl",
- "value": [
- {
- "tuple": [
- ":activity_pub",
- null
- ]
- },
- {
- "tuple": [
- ":activity_pub_question",
- 30000
- ]
- }
- ]
- },
- {
- "group": ":pleroma",
- "key": ":modules",
- "value": [
- {
- "tuple": [
- ":runtime_dir",
- "instance/modules"
- ]
- }
- ]
- },
- {
- "group": ":pleroma",
- "key": ":connections_pool",
- "value": [
- {
- "tuple": [
- ":reclaim_multiplier",
- 0.1
- ]
- },
- {
- "tuple": [
- ":connection_acquisition_wait",
- 250
- ]
- },
- {
- "tuple": [
- ":connection_acquisition_retries",
- 5
- ]
- },
- {
- "tuple": [
- ":max_connections",
- 250
- ]
- },
- {
- "tuple": [
- ":max_idle_time",
- 30000
- ]
- },
- {
- "tuple": [
- ":retry",
- 0
- ]
- },
- {
- "tuple": [
- ":await_up_timeout",
- 5000
- ]
- }
- ]
- },
- {
- "group": ":pleroma",
- "key": ":pools",
- "value": [
- {
- "tuple": [
- ":federation",
- [
- {
- "tuple": [
- ":size",
- 50
- ]
- },
- {
- "tuple": [
- ":max_waiting",
- 10
- ]
- }
- ]
- ]
- },
- {
- "tuple": [
- ":media",
- [
- {
- "tuple": [
- ":size",
- 50
- ]
- },
- {
- "tuple": [
- ":max_waiting",
- 10
- ]
- }
- ]
- ]
- },
- {
- "tuple": [
- ":upload",
- [
- {
- "tuple": [
- ":size",
- 25
- ]
- },
- {
- "tuple": [
- ":max_waiting",
- 5
- ]
- }
- ]
- ]
- },
- {
- "tuple": [
- ":default",
- [
- {
- "tuple": [
- ":size",
- 10
- ]
- },
- {
- "tuple": [
- ":max_waiting",
- 2
- ]
- }
- ]
- ]
- }
- ]
- },
- {
- "group": ":pleroma",
- "key": ":hackney_pools",
- "value": [
- {
- "tuple": [
- ":federation",
- [
- {
- "tuple": [
- ":max_connections",
- 50
- ]
- },
- {
- "tuple": [
- ":timeout",
- 150000
- ]
- }
- ]
- ]
- },
- {
- "tuple": [
- ":media",
- [
- {
- "tuple": [
- ":max_connections",
- 50
- ]
- },
- {
- "tuple": [
- ":timeout",
- 150000
- ]
- }
- ]
- ]
- },
- {
- "tuple": [
- ":upload",
- [
- {
- "tuple": [
- ":max_connections",
- 25
- ]
- },
- {
- "tuple": [
- ":timeout",
- 300000
- ]
- }
- ]
- ]
- }
- ]
- },
- {
- "group": ":pleroma",
- "key": ":restrict_unauthenticated",
- "value": [
- {
- "tuple": [
- ":timelines",
- {
- ":federated": ":if_instance_is_private",
- ":local": ":if_instance_is_private"
- }
- ]
- },
- {
- "tuple": [
- ":profiles",
- {
- ":local": ":if_instance_is_private",
- ":remote": ":if_instance_is_private"
- }
- ]
- },
- {
- "tuple": [
- ":activities",
- {
- ":local": ":if_instance_is_private",
- ":remote": ":if_instance_is_private"
- }
- ]
- }
- ]
- },
- {
- "group": ":pleroma",
- "key": ":mrf",
- "value": [
- {
- "tuple": [
- ":policies",
- "Pleroma.Web.ActivityPub.MRF.ObjectAgePolicy"
- ]
- },
- {
- "tuple": [
- ":transparency",
- true
- ]
- },
- {
- "tuple": [
- ":transparency_exclusions",
- []
- ]
- }
- ]
- },
- {
- "group": ":pleroma",
- "key": ":instances_favicons",
- "value": [
- {
- "tuple": [
- ":enabled",
- false
- ]
- }
- ]
- },
- {
- "group": ":pleroma",
- "key": "Pleroma.Web.Auth.Authenticator",
- "value": "Pleroma.Web.Auth.PleromaAuthenticator"
- },
- {
- "group": ":pleroma",
- "key": "Pleroma.Emails.Mailer",
- "value": [
- {
- "tuple": [
- ":enabled",
- false
- ]
- },
- {
- "tuple": [
- ":adapter",
- "Swoosh.Adapters.Local"
- ]
- }
- ]
- },
- {
- "group": ":pleroma",
- "key": "Pleroma.Web.ApiSpec.CastAndValidate",
- "value": [
- {
- "tuple": [
- ":strict",
- true
- ]
- }
- ]
- },
- {
- "group": ":pleroma",
- "key": "Pleroma.Uploaders.S3",
- "value": [
- {
- "tuple": [
- ":streaming_enabled",
- true
- ]
- },
- {
- "tuple": [
- ":public_endpoint",
- "https://media.gleasonator.com"
- ]
- },
- {
- "tuple": [
- ":bucket",
- "gleasonator-media"
- ]
- }
- ]
- },
- {
- "db": [
- ":enabled"
- ],
- "group": ":pleroma",
- "key": ":static_fe",
- "value": [
- {
- "tuple": [
- ":enabled",
- true
- ]
- }
- ]
- },
- {
- "db": [
- ":enabled",
- ":redirect_on_failure"
- ],
- "group": ":pleroma",
- "key": ":media_proxy",
- "value": [
- {
- "tuple": [
- ":invalidation",
- [
- {
- "tuple": [
- ":enabled",
- false
- ]
- },
- {
- "tuple": [
- ":provider",
- "Pleroma.Web.MediaProxy.Invalidation.Script"
- ]
- }
- ]
- ]
- },
- {
- "tuple": [
- ":proxy_opts",
- [
- {
- "tuple": [
- ":redirect_on_failure",
- false
- ]
- },
- {
- "tuple": [
- ":max_body_length",
- 26214400
- ]
- },
- {
- "tuple": [
- ":http",
- [
- {
- "tuple": [
- ":follow_redirect",
- true
- ]
- },
- {
- "tuple": [
- ":pool",
- ":media"
- ]
- }
- ]
- ]
- }
- ]
- ]
- },
- {
- "tuple": [
- ":whitelist",
- []
- ]
- },
- {
- "tuple": [
- ":enabled",
- false
- ]
- },
- {
- "tuple": [
- ":redirect_on_failure",
- true
- ]
- }
- ]
- },
- {
- "db": [
- ":name",
- ":email",
- ":notify_email",
- ":limit",
- ":registrations_open",
- ":rewrite_policy",
- ":max_pinned_statuses",
- ":federating",
- ":static_dir"
- ],
- "group": ":pleroma",
- "key": ":instance",
- "value": [
- {
- "tuple": [
- ":description",
- "Pleroma: An efficient and flexible fediverse server"
- ]
- },
- {
- "tuple": [
- ":background_image",
- "/images/city.jpg"
- ]
- },
- {
- "tuple": [
- ":instance_thumbnail",
- "/instance/thumbnail.jpeg"
- ]
- },
- {
- "tuple": [
- ":description_limit",
- 5000
- ]
- },
- {
- "tuple": [
- ":chat_limit",
- 5000
- ]
- },
- {
- "tuple": [
- ":remote_limit",
- 100000
- ]
- },
- {
- "tuple": [
- ":upload_limit",
- 16000000
- ]
- },
- {
- "tuple": [
- ":avatar_upload_limit",
- 2000000
- ]
- },
- {
- "tuple": [
- ":background_upload_limit",
- 4000000
- ]
- },
- {
- "tuple": [
- ":banner_upload_limit",
- 4000000
- ]
- },
- {
- "tuple": [
- ":poll_limits",
- {
- ":max_expiration": 31536000,
- ":max_option_chars": 200,
- ":max_options": 20,
- ":min_expiration": 0
- }
- ]
- },
- {
- "tuple": [
- ":invites_enabled",
- false
- ]
- },
- {
- "tuple": [
- ":account_activation_required",
- false
- ]
- },
- {
- "tuple": [
- ":account_approval_required",
- false
- ]
- },
- {
- "tuple": [
- ":federation_incoming_replies_max_depth",
- 100
- ]
- },
- {
- "tuple": [
- ":federation_reachability_timeout_days",
- 7
- ]
- },
- {
- "tuple": [
- ":federation_publisher_modules",
- [
- "Pleroma.Web.ActivityPub.Publisher"
- ]
- ]
- },
- {
- "tuple": [
- ":allow_relay",
- true
- ]
- },
- {
- "tuple": [
- ":public",
- true
- ]
- },
- {
- "tuple": [
- ":quarantined_instances",
- []
- ]
- },
- {
- "tuple": [
- ":managed_config",
- true
- ]
- },
- {
- "tuple": [
- ":allowed_post_formats",
- [
- "text/plain",
- "text/html",
- "text/markdown",
- "text/bbcode"
- ]
- ]
- },
- {
- "tuple": [
- ":autofollowed_nicknames",
- []
- ]
- },
- {
- "tuple": [
- ":attachment_links",
- false
- ]
- },
- {
- "tuple": [
- ":max_report_comment_size",
- 1000
- ]
- },
- {
- "tuple": [
- ":safe_dm_mentions",
- false
- ]
- },
- {
- "tuple": [
- ":healthcheck",
- false
- ]
- },
- {
- "tuple": [
- ":remote_post_retention_days",
- 90
- ]
- },
- {
- "tuple": [
- ":skip_thread_containment",
- true
- ]
- },
- {
- "tuple": [
- ":limit_to_local_content",
- ":unauthenticated"
- ]
- },
- {
- "tuple": [
- ":user_bio_length",
- 5000
- ]
- },
- {
- "tuple": [
- ":user_name_length",
- 100
- ]
- },
- {
- "tuple": [
- ":max_account_fields",
- 10
- ]
- },
- {
- "tuple": [
- ":max_remote_account_fields",
- 20
- ]
- },
- {
- "tuple": [
- ":account_field_name_length",
- 512
- ]
- },
- {
- "tuple": [
- ":account_field_value_length",
- 2048
- ]
- },
- {
- "tuple": [
- ":registration_reason_length",
- 500
- ]
- },
- {
- "tuple": [
- ":external_user_synchronization",
- true
- ]
- },
- {
- "tuple": [
- ":extended_nickname_format",
- true
- ]
- },
- {
- "tuple": [
- ":cleanup_attachments",
- false
- ]
- },
- {
- "tuple": [
- ":multi_factor_authentication",
- [
- {
- "tuple": [
- ":totp",
- [
- {
- "tuple": [
- ":digits",
- 6
- ]
- },
- {
- "tuple": [
- ":period",
- 30
- ]
- }
- ]
- ]
- },
- {
- "tuple": [
- ":backup_codes",
- [
- {
- "tuple": [
- ":number",
- 5
- ]
- },
- {
- "tuple": [
- ":length",
- 16
- ]
- }
- ]
- ]
- }
- ]
- ]
- },
- {
- "tuple": [
- ":show_reactions",
- true
- ]
- },
- {
- "tuple": [
- ":name",
- "Soapbox FE Demo"
- ]
- },
- {
- "tuple": [
- ":email",
- "alex@alexgleason.me"
- ]
- },
- {
- "tuple": [
- ":notify_email",
- "alex@alexgleason.me"
- ]
- },
- {
- "tuple": [
- ":limit",
- 5000
- ]
- },
- {
- "tuple": [
- ":registrations_open",
- true
- ]
- },
- {
- "tuple": [
- ":rewrite_policy",
- "Pleroma.Web.ActivityPub.MRF.SimplePolicy"
- ]
- },
- {
- "tuple": [
- ":max_pinned_statuses",
- 10
- ]
- },
- {
- "tuple": [
- ":federating",
- false
- ]
- },
- {
- "tuple": [
- ":static_dir",
- "instance/static"
- ]
- }
- ]
- },
- {
- "db": [
- ":uploads"
- ],
- "group": ":pleroma",
- "key": "Pleroma.Uploaders.Local",
- "value": [
- {
- "tuple": [
- ":uploads",
- "uploads"
- ]
- }
- ]
- },
- {
- "db": [
- ":parsers"
- ],
- "group": ":pleroma",
- "key": ":rich_media",
- "value": [
- {
- "tuple": [
- ":enabled",
- true
- ]
- },
- {
- "tuple": [
- ":ignore_hosts",
- []
- ]
- },
- {
- "tuple": [
- ":ignore_tld",
- [
- "local",
- "localdomain",
- "lan"
- ]
- ]
- },
- {
- "tuple": [
- ":ttl_setters",
- [
- "Pleroma.Web.RichMedia.Parser.TTL.AwsSignedUrl"
- ]
- ]
- },
- {
- "tuple": [
- ":parsers",
- [
- "Pleroma.Web.RichMedia.Parsers.OEmbed",
- "Pleroma.Web.RichMedia.Parsers.TwitterCard"
- ]
- ]
- }
- ]
- },
- {
- "db": [
- ":uploader"
- ],
- "group": ":pleroma",
- "key": "Pleroma.Upload",
- "value": [
- {
- "tuple": [
- ":filters",
- [
- "Pleroma.Upload.Filter.Dedupe"
- ]
- ]
- },
- {
- "tuple": [
- ":link_name",
- false
- ]
- },
- {
- "tuple": [
- ":proxy_remote",
- false
- ]
- },
- {
- "tuple": [
- ":proxy_opts",
- [
- {
- "tuple": [
- ":redirect_on_failure",
- false
- ]
- },
- {
- "tuple": [
- ":max_body_length",
- 26214400
- ]
- },
- {
- "tuple": [
- ":http",
- [
- {
- "tuple": [
- ":follow_redirect",
- true
- ]
- },
- {
- "tuple": [
- ":pool",
- ":upload"
- ]
- }
- ]
- ]
- }
- ]
- ]
- },
- {
- "tuple": [
- ":filename_display_max_length",
- 30
- ]
- },
- {
- "tuple": [
- ":uploader",
- "Pleroma.Uploaders.Local"
- ]
- }
- ]
- },
- {
- "db": [
- ":pl_fe"
- ],
- "group": ":pleroma",
- "key": ":frontend_configurations",
- "value": [
- {
- "tuple": [
- ":pleroma_fe",
- {
- ":alwaysShowSubjectInput": true,
- ":background": "/images/city.jpg",
- ":collapseMessageWithSubject": false,
- ":disableChat": false,
- ":greentext": false,
- ":hideFilteredStatuses": false,
- ":hideMutedPosts": false,
- ":hidePostStats": false,
- ":hideSitename": false,
- ":hideUserStats": false,
- ":loginMethod": "password",
- ":logo": "/static/logo.png",
- ":logoMargin": ".1em",
- ":logoMask": true,
- ":minimalScopesMode": false,
- ":noAttachmentLinks": false,
- ":nsfwCensorImage": "",
- ":postContentType": "text/plain",
- ":redirectRootLogin": "/main/friends",
- ":redirectRootNoLogin": "/main/all",
- ":scopeCopy": true,
- ":showFeaturesPanel": true,
- ":showInstanceSpecificPanel": false,
- ":sidebarRight": false,
- ":subjectLineBehavior": "email",
- ":theme": "pleroma-dark",
- ":webPushNotifications": false
- }
- ]
- },
- {
- "tuple": [
- ":masto_fe",
- {
- ":showInstanceSpecificPanel": true
- }
- ]
- },
- {
- "tuple": [
- ":pl_fe",
- {
- "brandColor": "#0e9066",
- "copyright": "♥2020. Copying is an act of love. Please copy and share.",
- "customCss": [],
- "navlinks": {
- "homeFooter": []
- },
- "promoPanel": {
- "items": []
- }
- }
- ]
- }
- ]
- }
- ],
- "need_reboot": false
-}
diff --git a/packages/pl-fe/src/__fixtures__/fedibird-account.json b/packages/pl-fe/src/__fixtures__/fedibird-account.json
deleted file mode 100644
index 07bbd7057..000000000
--- a/packages/pl-fe/src/__fixtures__/fedibird-account.json
+++ /dev/null
@@ -1,35 +0,0 @@
-{
- "id": "66768",
- "username": "alex",
- "acct": "alex",
- "display_name": "",
- "locked": false,
- "bot": false,
- "cat": false,
- "discoverable": false,
- "group": false,
- "created_at": "2020-01-27T00:00:00.000Z",
- "note": "
",
- "url": "https://fedibird.com/@alex",
- "avatar": "https://fedibird.com/avatars/original/missing.png",
- "avatar_static": "https://fedibird.com/avatars/original/missing.png",
- "header": "https://fedibird.com/headers/original/missing.png",
- "header_static": "https://fedibird.com/headers/original/missing.png",
- "followers_count": 1,
- "following_count": 1,
- "subscribing_count": 0,
- "statuses_count": 5,
- "last_status_at": "2022-02-20",
- "emojis": [],
- "fields": [],
- "other_settings": {
- "birthday": "1993-07-03",
- "location": "Texas, USA",
- "noindex": false,
- "hide_network": false,
- "hide_statuses_count": false,
- "hide_following_count": false,
- "hide_followers_count": false,
- "enable_reaction": true
- }
-}
diff --git a/packages/pl-fe/src/__fixtures__/fedibird-instance.json b/packages/pl-fe/src/__fixtures__/fedibird-instance.json
deleted file mode 100644
index 31e17e34e..000000000
--- a/packages/pl-fe/src/__fixtures__/fedibird-instance.json
+++ /dev/null
@@ -1,185 +0,0 @@
-{
- "uri": "fedibird.com",
- "title": "Fedibird",
- "short_description": "多くの独自機能を備えた、連合志向の汎用Mastodonサーバです。Fediverseの活動拠点としてご利用ください。",
- "description": "多くの独自機能を備えた、連合志向の汎用Mastodonサーバです。Fediverseの活動拠点としてご利用ください。",
- "email": "support@fedibird.com",
- "version": "3.4.1",
- "urls": {
- "streaming_api": "wss://fedibird.com"
- },
- "stats": {
- "user_count": 1964,
- "status_count": 4590304,
- "domain_count": 9024
- },
- "thumbnail": "https://s3.fedibird.com/site_uploads/files/000/000/001/original/fedibird_hero_image.png",
- "languages": [
- "ja"
- ],
- "registrations": true,
- "approval_required": false,
- "invites_enabled": true,
- "configuration": {
- "statuses": {
- "max_characters": 500,
- "max_media_attachments": 4,
- "characters_reserved_per_url": 23,
- "min_expiration": 60,
- "max_expiration": 37152000,
- "supported_expires_actions": [
- "delete",
- "mark"
- ]
- },
- "media_attachments": {
- "supported_mime_types": [
- "image/jpeg",
- "image/png",
- "image/gif",
- "image/webp",
- "image/heif",
- "image/heic",
- "video/webm",
- "video/mp4",
- "video/quicktime",
- "video/ogg",
- "audio/wave",
- "audio/wav",
- "audio/x-wav",
- "audio/x-pn-wave",
- "audio/ogg",
- "audio/mpeg",
- "audio/mp3",
- "audio/webm",
- "audio/flac",
- "audio/aac",
- "audio/m4a",
- "audio/x-m4a",
- "audio/mp4",
- "audio/3gpp",
- "video/x-ms-asf"
- ],
- "image_size_limit": 10485760,
- "image_matrix_limit": 16777216,
- "video_size_limit": 41943040,
- "video_frame_rate_limit": 60,
- "video_matrix_limit": 2304000
- },
- "polls": {
- "max_options": 4,
- "max_characters_per_option": 50,
- "min_expiration": 300,
- "max_expiration": 2629746
- },
- "emoji_reactions": {
- "max_reactions": 20
- }
- },
- "feature_quote": true,
- "fedibird_capabilities": [
- "favourite_hashtag",
- "favourite_domain",
- "favourite_list",
- "status_expire",
- "follow_no_delivery",
- "follow_hashtag",
- "subscribe_account",
- "subscribe_domain",
- "subscribe_keyword",
- "timeline_home_visibility",
- "timeline_no_local",
- "timeline_domain",
- "timeline_group",
- "timeline_group_directory",
- "visibility_mutual",
- "visibility_limited",
- "emoji_reaction",
- "misskey_birthday",
- "misskey_location"
- ],
- "contact_account": {
- "id": "1",
- "username": "noellabo",
- "acct": "noellabo",
- "display_name": "のえる",
- "locked": false,
- "bot": false,
- "cat": false,
- "discoverable": true,
- "group": false,
- "created_at": "2019-08-15T00:00:00.000Z",
- "note": "主に、Fediverseへの関心に基づいた投稿を行うアカウントです。DTP・印刷に関する話をしたり、同人の話をしたり、カレーをブーストしたりします。
Mastodonサーバ『Fedibird』の管理者アカウントでもあります。ご連絡は当アカウントへ、サーバインフォメーションについては https:// fedibird.com/about/more と @info を参照してください。
",
- "url": "https://fedibird.com/@noellabo",
- "avatar": "https://s3.fedibird.com/accounts/avatars/000/000/001/original/6ef3b7f18f726755.png",
- "avatar_static": "https://s3.fedibird.com/accounts/avatars/000/000/001/original/6ef3b7f18f726755.png",
- "header": "https://s3.fedibird.com/accounts/headers/000/000/001/original/6a5a51722c094835.jpg",
- "header_static": "https://s3.fedibird.com/accounts/headers/000/000/001/original/6a5a51722c094835.jpg",
- "followers_count": 1560,
- "following_count": 758,
- "subscribing_count": 121,
- "statuses_count": 61325,
- "last_status_at": "2022-02-24",
- "emojis": [
- {
- "shortcode": "liberapay",
- "url": "https://s3.fedibird.com/custom_emojis/images/000/025/634/original/5b8620742973f844.png",
- "static_url": "https://s3.fedibird.com/custom_emojis/images/000/025/634/static/5b8620742973f844.png",
- "visible_in_picker": true
- },
- {
- "shortcode": "mastodon",
- "url": "https://s3.fedibird.com/custom_emojis/images/000/008/396/original/1317b6f8efcf8318.png",
- "static_url": "https://s3.fedibird.com/custom_emojis/images/000/008/396/static/1317b6f8efcf8318.png",
- "visible_in_picker": true
- }
- ],
- "fields": [
- {
- "name": ":liberapay: Liberapay",
- "value": "https:// liberapay.com/noellabo ",
- "verified_at": "2020-10-22T03:04:43.206+00:00"
- },
- {
- "name": ":mastodon: DTP-Mstdn.jp",
- "value": "https:// dtp-mstdn.jp/@noellabo ",
- "verified_at": "2020-05-23T00:14:02.232+00:00"
- },
- {
- "name": "別宅",
- "value": "https:// gorone.xyz/@noellabo ",
- "verified_at": "2021-08-11T07:48:53.479+00:00"
- },
- {
- "name": "bluesky community",
- "value": "https:// mastodon.blueskycommunity.net/ @noellabo ",
- "verified_at": "2021-11-13T04:28:30.593+00:00"
- }
- ],
- "other_settings": {
- "birthday": null,
- "location": "埼玉県",
- "cat_ears_color": "#d5c5c0",
- "noindex": false,
- "hide_network": false,
- "hide_statuses_count": false,
- "hide_following_count": false,
- "hide_followers_count": false,
- "enable_reaction": true
- }
- },
- "rules": [
- {
- "id": "2",
- "text": "日本の法律と社会規範に従った行動を心がけてください"
- },
- {
- "id": "3",
- "text": "不快や脅威に対してはブロック・ミュート・フィルターで距離をとってください"
- },
- {
- "id": "1",
- "text": "投稿する際は、適切な公開範囲・CW・閲覧注意を使用してください"
- }
- ]
-}
diff --git a/packages/pl-fe/src/__fixtures__/fedibird-quote-of-quote-post.json b/packages/pl-fe/src/__fixtures__/fedibird-quote-of-quote-post.json
deleted file mode 100644
index c00c81860..000000000
--- a/packages/pl-fe/src/__fixtures__/fedibird-quote-of-quote-post.json
+++ /dev/null
@@ -1,109 +0,0 @@
-{
- "id": "107673570598783346",
- "created_at": "2022-01-23T20:05:01.372Z",
- "in_reply_to_id": null,
- "in_reply_to_account_id": null,
- "sensitive": false,
- "spoiler_text": "",
- "visibility": "public",
- "language": "en",
- "uri": "https://fedibird.com/users/alex/statuses/107673570598783346",
- "url": "https://fedibird.com/@alex/107673570598783346",
- "replies_count": 0,
- "reblogs_count": 0,
- "favourites_count": 0,
- "emoji_reactions_count": 0,
- "emoji_reactions": [],
- "content": "test quote of a quote QT: https:// fedibird.com/@alex/10767357008 2615319
",
- "quote_id": "107673570082615319",
- "reblog": null,
- "application": {
- "name": "Web",
- "website": null
- },
- "account": {
- "id": "66768",
- "username": "alex",
- "acct": "alex",
- "display_name": "",
- "locked": false,
- "bot": false,
- "discoverable": null,
- "group": false,
- "created_at": "2020-01-27T00:00:00.000Z",
- "note": "
",
- "url": "https://fedibird.com/@alex",
- "avatar": "https://fedibird.com/avatars/original/missing.png",
- "avatar_static": "https://fedibird.com/avatars/original/missing.png",
- "header": "https://fedibird.com/headers/original/missing.png",
- "header_static": "https://fedibird.com/headers/original/missing.png",
- "followers_count": 0,
- "following_count": 1,
- "subscribing_count": 0,
- "statuses_count": 3,
- "last_status_at": "2022-01-23",
- "emojis": [],
- "fields": []
- },
- "media_attachments": [],
- "mentions": [],
- "tags": [],
- "emojis": [],
- "card": null,
- "poll": null,
- "quote": {
- "id": "107673570082615319",
- "created_at": "2022-01-23T20:04:53.494Z",
- "in_reply_to_id": null,
- "in_reply_to_account_id": null,
- "sensitive": false,
- "spoiler_text": "",
- "visibility": "public",
- "language": "en",
- "uri": "https://fedibird.com/users/alex/statuses/107673570082615319",
- "url": "https://fedibird.com/@alex/107673570082615319",
- "replies_count": 0,
- "reblogs_count": 0,
- "favourites_count": 0,
- "emoji_reactions_count": 0,
- "emoji_reactions": [],
- "content": "test quote QT: https:// fedibird.com/@alex/10767356921 4329435
",
- "quote_id": "107673569214329435",
- "quote": null,
- "reblog": null,
- "application": {
- "name": "Web",
- "website": null
- },
- "account": {
- "id": "66768",
- "username": "alex",
- "acct": "alex",
- "display_name": "",
- "locked": false,
- "bot": false,
- "discoverable": null,
- "group": false,
- "created_at": "2020-01-27T00:00:00.000Z",
- "note": "
",
- "url": "https://fedibird.com/@alex",
- "avatar": "https://fedibird.com/avatars/original/missing.png",
- "avatar_static": "https://fedibird.com/avatars/original/missing.png",
- "header": "https://fedibird.com/headers/original/missing.png",
- "header_static": "https://fedibird.com/headers/original/missing.png",
- "followers_count": 0,
- "following_count": 1,
- "subscribing_count": 0,
- "statuses_count": 3,
- "last_status_at": "2022-01-23",
- "emojis": [],
- "fields": []
- },
- "media_attachments": [],
- "mentions": [],
- "tags": [],
- "emojis": [],
- "card": null,
- "poll": null
- }
-}
diff --git a/packages/pl-fe/src/__fixtures__/fedibird-quote-post.json b/packages/pl-fe/src/__fixtures__/fedibird-quote-post.json
deleted file mode 100644
index 610ab45c6..000000000
--- a/packages/pl-fe/src/__fixtures__/fedibird-quote-post.json
+++ /dev/null
@@ -1,108 +0,0 @@
-{
- "id": "107673570082615319",
- "created_at": "2022-01-23T20:04:53.494Z",
- "in_reply_to_id": null,
- "in_reply_to_account_id": null,
- "sensitive": false,
- "spoiler_text": "",
- "visibility": "public",
- "language": "en",
- "uri": "https://fedibird.com/users/alex/statuses/107673570082615319",
- "url": "https://fedibird.com/@alex/107673570082615319",
- "replies_count": 0,
- "reblogs_count": 0,
- "favourites_count": 0,
- "emoji_reactions_count": 0,
- "emoji_reactions": [],
- "content": "test quote QT: https:// fedibird.com/@alex/10767356921 4329435
",
- "quote_id": "107673569214329435",
- "reblog": null,
- "application": {
- "name": "Web",
- "website": null
- },
- "account": {
- "id": "66768",
- "username": "alex",
- "acct": "alex",
- "display_name": "",
- "locked": false,
- "bot": false,
- "discoverable": null,
- "group": false,
- "created_at": "2020-01-27T00:00:00.000Z",
- "note": "
",
- "url": "https://fedibird.com/@alex",
- "avatar": "https://fedibird.com/avatars/original/missing.png",
- "avatar_static": "https://fedibird.com/avatars/original/missing.png",
- "header": "https://fedibird.com/headers/original/missing.png",
- "header_static": "https://fedibird.com/headers/original/missing.png",
- "followers_count": 0,
- "following_count": 1,
- "subscribing_count": 0,
- "statuses_count": 3,
- "last_status_at": "2022-01-23",
- "emojis": [],
- "fields": []
- },
- "media_attachments": [],
- "mentions": [],
- "tags": [],
- "emojis": [],
- "card": null,
- "poll": null,
- "quote": {
- "id": "107673569214329435",
- "created_at": "2022-01-23T20:04:40.249Z",
- "in_reply_to_id": null,
- "in_reply_to_account_id": null,
- "sensitive": false,
- "spoiler_text": "",
- "visibility": "public",
- "language": "en",
- "uri": "https://fedibird.com/users/alex/statuses/107673569214329435",
- "url": "https://fedibird.com/@alex/107673569214329435",
- "replies_count": 0,
- "reblogs_count": 0,
- "favourites_count": 0,
- "emoji_reactions_count": 0,
- "emoji_reactions": [],
- "content": "test post
",
- "quote": null,
- "reblog": null,
- "application": {
- "name": "Web",
- "website": null
- },
- "account": {
- "id": "66768",
- "username": "alex",
- "acct": "alex",
- "display_name": "",
- "locked": false,
- "bot": false,
- "discoverable": null,
- "group": false,
- "created_at": "2020-01-27T00:00:00.000Z",
- "note": "
",
- "url": "https://fedibird.com/@alex",
- "avatar": "https://fedibird.com/avatars/original/missing.png",
- "avatar_static": "https://fedibird.com/avatars/original/missing.png",
- "header": "https://fedibird.com/headers/original/missing.png",
- "header_static": "https://fedibird.com/headers/original/missing.png",
- "followers_count": 0,
- "following_count": 1,
- "subscribing_count": 0,
- "statuses_count": 3,
- "last_status_at": "2022-01-23",
- "emojis": [],
- "fields": []
- },
- "media_attachments": [],
- "mentions": [],
- "tags": [],
- "emojis": [],
- "card": null,
- "poll": null
- }
-}
diff --git a/packages/pl-fe/src/__fixtures__/friendica-instance.json b/packages/pl-fe/src/__fixtures__/friendica-instance.json
deleted file mode 100644
index cb6902d1f..000000000
--- a/packages/pl-fe/src/__fixtures__/friendica-instance.json
+++ /dev/null
@@ -1,46 +0,0 @@
-{
- "uri": "https://ica.mkljczk.pl",
- "title": "Friendica Social Network",
- "short_description": "",
- "description": "",
- "email": "me@mkljczk.pl",
- "version": "2022.05-dev",
- "urls": null,
- "stats": {
- "user_count": 0,
- "status_count": 0,
- "domain_count": 0
- },
- "thumbnail": "https://ica.mkljczk.plimages/friendica-32.png",
- "languages": [
- "pl"
- ],
- "max_toot_chars": 200000,
- "registrations": true,
- "approval_required": false,
- "invites_enabled": false,
- "contact_account": {
- "id": "2",
- "username": "nofriend",
- "acct": "nofriend",
- "display_name": "marcin mikołajczak",
- "locked": true,
- "bot": false,
- "discoverable": true,
- "group": false,
- "created_at": "2022-02-19T14:51:00.000Z",
- "note": "",
- "url": "https://ica.mkljczk.pl/profile/nofriend",
- "avatar": "https://ica.mkljczk.pl/photo/contact/300/68a16c11-1262-1103-d40b-806159848009?ts=1645292106",
- "avatar_static": "https://ica.mkljczk.pl/photo/contact/300/68a16c11-1262-1103-d40b-806159848009?ts=1645292106",
- "header": "https://ica.mkljczk.pl/photo/header/68a16c11-1262-1103-d40b-806159848009?ts=1645292106",
- "header_static": "https://ica.mkljczk.pl/photo/header/68a16c11-1262-1103-d40b-806159848009?ts=1645292106",
- "followers_count": 0,
- "following_count": 1,
- "statuses_count": 0,
- "last_status_at": "2022-02-20",
- "emojis": [],
- "fields": []
- },
- "rules": []
-}
diff --git a/packages/pl-fe/src/__fixtures__/friendica-status.json b/packages/pl-fe/src/__fixtures__/friendica-status.json
deleted file mode 100644
index fc64e430e..000000000
--- a/packages/pl-fe/src/__fixtures__/friendica-status.json
+++ /dev/null
@@ -1,53 +0,0 @@
-{
- "id": "106",
- "created_at": "2022-02-19T18:19:40.000Z",
- "in_reply_to_id": null,
- "in_reply_to_account_id": null,
- "sensitive": false,
- "spoiler_text": "",
- "visibility": "public",
- "language": "fa",
- "uri": "https://ica.mkljczk.pl/objects/68a16c11-4262-1134-bc4e-0db298374337",
- "url": "https://ica.mkljczk.pl/display/68a16c11-4262-1134-bc4e-0db298374337",
- "replies_count": 0,
- "reblogs_count": 0,
- "favourites_count": 0,
- "favourited": false,
- "reblogged": false,
- "muted": false,
- "bookmarked": true,
- "content": "Hello to Friendica from fe.soapbox.pub!",
- "reblog": null,
- "application": {
- "name": "Soapbox FE"
- },
- "account": {
- "id": "95",
- "username": "alex",
- "acct": "alex",
- "display_name": "Alex Gleason",
- "locked": true,
- "bot": false,
- "discoverable": false,
- "group": false,
- "created_at": "2022-02-19T18:17:43.000Z",
- "note": "",
- "url": "https://ica.mkljczk.pl/profile/alex",
- "avatar": "https://ica.mkljczk.pl/photo/contact/300/68a16c11-1862-1134-4779-f98088458845?ts=1645294804",
- "avatar_static": "https://ica.mkljczk.pl/photo/contact/300/68a16c11-1862-1134-4779-f98088458845?ts=1645294804",
- "header": "https://ica.mkljczk.pl/photo/header/68a16c11-1862-1134-4779-f98088458845?ts=1645294804",
- "header_static": "https://ica.mkljczk.pl/photo/header/68a16c11-1862-1134-4779-f98088458845?ts=1645294804",
- "followers_count": 0,
- "following_count": 0,
- "statuses_count": 2,
- "last_status_at": "2022-02-19",
- "emojis": [],
- "fields": []
- },
- "media_attachments": [],
- "mentions": [],
- "tags": [],
- "emojis": [],
- "card": null,
- "poll": null
-}
diff --git a/packages/pl-fe/src/__fixtures__/gotosocial-account.json b/packages/pl-fe/src/__fixtures__/gotosocial-account.json
deleted file mode 100644
index 3700bc473..000000000
--- a/packages/pl-fe/src/__fixtures__/gotosocial-account.json
+++ /dev/null
@@ -1,27 +0,0 @@
-{
- "id": "00YSECR4P7E64BD5MBA639PRVT",
- "username": "alex",
- "acct": "alex",
- "display_name": "Alex Gleason",
- "locked": false,
- "bot": false,
- "created_at": "2022-02-23T22:43:55Z",
- "note": "My GoToSocial profile
",
- "url": "http://localhost/@alex",
- "avatar": "",
- "avatar_static": "",
- "header": "",
- "header_static": "",
- "followers_count": 0,
- "following_count": 0,
- "statuses_count": 1,
- "last_status_at": "2022-02-23T22:54:14Z",
- "emojis": [],
- "fields": [],
- "source": {
- "privacy": "unlisted",
- "language": "en",
- "note": "My GoToSocial profile
",
- "fields": []
- }
-}
diff --git a/packages/pl-fe/src/__fixtures__/gotosocial-instance.json b/packages/pl-fe/src/__fixtures__/gotosocial-instance.json
deleted file mode 100644
index fdaf4c96b..000000000
--- a/packages/pl-fe/src/__fixtures__/gotosocial-instance.json
+++ /dev/null
@@ -1,42 +0,0 @@
-{
- "uri": "http://localhost",
- "title": "localhost",
- "description": "",
- "short_description": "",
- "email": "",
- "version": "0.2.0 31935ee",
- "registrations": true,
- "approval_required": true,
- "invites_enabled": false,
- "urls": {
- "streaming_api": "wss://localhost"
- },
- "stats": {
- "domain_count": 0,
- "status_count": 1,
- "user_count": 1
- },
- "thumbnail": "",
- "contact_account": {
- "id": "",
- "username": "",
- "acct": "",
- "display_name": "",
- "locked": false,
- "bot": false,
- "created_at": "",
- "note": "",
- "url": "",
- "avatar": "",
- "avatar_static": "",
- "header": "",
- "header_static": "",
- "followers_count": 0,
- "following_count": 0,
- "statuses_count": 0,
- "last_status_at": "",
- "emojis": null,
- "fields": null
- },
- "max_toot_chars": 5000
-}
diff --git a/packages/pl-fe/src/__fixtures__/gotosocial-status.json b/packages/pl-fe/src/__fixtures__/gotosocial-status.json
deleted file mode 100644
index 3546482b2..000000000
--- a/packages/pl-fe/src/__fixtures__/gotosocial-status.json
+++ /dev/null
@@ -1,50 +0,0 @@
-{
- "id": "01FWMCNM07GGDV8HF40NZ9YTGR",
- "created_at": "2022-02-23T22:54:14Z",
- "sensitive": false,
- "spoiler_text": "",
- "visibility": "public",
- "language": "en",
- "uri": "http://localhost/users/alex/statuses/01FWMCNM07GGDV8HF40NZ9YTGR",
- "url": "http://localhost/@alex/statuses/01FWMCNM07GGDV8HF40NZ9YTGR",
- "replies_count": 0,
- "reblogs_count": 0,
- "favourites_count": 0,
- "favourited": false,
- "reblogged": false,
- "muted": false,
- "bookmarked": false,
- "content": "Hello GoToSocial!
",
- "application": {
- "name": "Soapbox FE",
- "website": "https://soapbox.pub/"
- },
- "account": {
- "id": "00YSECR4P7E64BD5MBA639PRVT",
- "username": "alex",
- "acct": "alex",
- "display_name": "alex",
- "locked": false,
- "bot": false,
- "created_at": "2022-02-23T22:43:55Z",
- "note": "",
- "url": "http://localhost/@alex",
- "avatar": "",
- "avatar_static": "",
- "header": "",
- "header_static": "",
- "followers_count": 0,
- "following_count": 0,
- "statuses_count": 1,
- "last_status_at": "2022-02-23T22:54:14Z",
- "emojis": [],
- "fields": []
- },
- "media_attachments": [],
- "mentions": [],
- "tags": [],
- "emojis": [],
- "card": null,
- "poll": null,
- "text": "Hello GoToSocial!"
-}
diff --git a/packages/pl-fe/src/__fixtures__/group-truthsocial.json b/packages/pl-fe/src/__fixtures__/group-truthsocial.json
deleted file mode 100644
index 63d8b14d5..000000000
--- a/packages/pl-fe/src/__fixtures__/group-truthsocial.json
+++ /dev/null
@@ -1,19 +0,0 @@
-{
- "avatar": "https://media.covfefe.social/groups/avatars/109/989/480/368/015/378/original/50b0d899bc5aae13.jpg",
- "avatar_static": "https://media.covfefe.social/groups/avatars/109/989/480/368/015/378/original/50b0d899bc5aae13.jpg",
- "created_at": "2023-03-08T00:00:00.000Z",
- "discoverable": true,
- "display_name": "PATRIOT PATRIOTS",
- "domain": null,
- "group_visibility": "everyone",
- "header": "https://media.covfefe.social/groups/headers/109/989/480/368/015/378/original/c5063b59f919cd4a.png",
- "header_static": "https://media.covfefe.social/groups/headers/109/989/480/368/015/378/original/c5063b59f919cd4a.png",
- "id": "109989480368015378",
- "members_count": 1,
- "membership_required": true,
- "note": "patriots 900000001",
- "owner": {
- "id": "424023483294040"
- },
- "tags": []
-}
\ No newline at end of file
diff --git a/packages/pl-fe/src/__fixtures__/intlMessages.json b/packages/pl-fe/src/__fixtures__/intlMessages.json
deleted file mode 100644
index e2bd3bd56..000000000
--- a/packages/pl-fe/src/__fixtures__/intlMessages.json
+++ /dev/null
@@ -1,962 +0,0 @@
-{
- "default": {
- "account.add_or_remove_from_list": "Add or Remove from lists",
- "account.badges.bot": "Bot",
- "account.block": "Block @{name}",
- "account.block_domain": "Hide everything from {domain}",
- "account.blocked": "Blocked",
- "account.direct": "Direct message @{name}",
- "account.domain_blocked": "Domain hidden",
- "account.edit_profile": "Edit profile",
- "account.endorse": "Feature on profile",
- "account.follow": "Follow",
- "account.followers": "Followers",
- "account.followers.empty": "No one follows this user yet.",
- "account.follows": "Follows",
- "account.follows.empty": "This user doesn\"t follow anyone yet.",
- "account.follows_you": "Follows you",
- "account.hide_reblogs": "Hide reposts from @{name}",
- "account.link_verified_on": "Ownership of this link was checked on {date}",
- "account.locked_info": "This account privacy status is set to locked. The owner manually reviews who can follow them.",
- "account.login": "Log in",
- "account.media": "Media",
- "account.member_since": "Joined {date}",
- "account.mention": "Mention",
- "account.message": "Message",
- "account.moved_to": "{name} has moved to:",
- "account.mute": "Mute @{name}",
- "account.mute_notifications": "Mute notifications from @{name}",
- "account.muted": "Muted",
- "account.posts": "Posts",
- "account.posts_with_replies": "Posts and replies",
- "account.profile": "Profile",
- "account.register": "Sign up",
- "account.report": "Report @{name}",
- "account.requested": "Awaiting approval. Click to cancel follow request",
- "account.share": "Share @{name}\"s profile",
- "account.show_reblogs": "Show reposts from @{name}",
- "account.unblock": "Unblock @{name}",
- "account.unblock_domain": "Unhide {domain}",
- "account.unendorse": "Don\"t feature on profile",
- "account.unfollow": "Unfollow",
- "account.unmute": "Unmute @{name}",
- "account.unmute_notifications": "Unmute notifications from @{name}",
- "account_gallery.none": "No media to show.",
- "alert.unexpected.message": "An unexpected error occurred.",
- "alert.unexpected.title": "Oops!",
- "audio.close": "Close audio",
- "audio.expand": "Expand audio",
- "audio.hide": "Hide audio",
- "audio.mute": "Mute",
- "audio.pause": "Pause",
- "audio.play": "Play",
- "audio.unmute": "Unmute",
- "boost_modal.combo": "You can press {combo} to skip this next time",
- "bundle_column_error.body": "Something went wrong while loading this page.",
- "bundle_column_error.retry": "Try again",
- "bundle_column_error.title": "Network error",
- "bundle_modal_error.close": "Close",
- "bundle_modal_error.message": "Something went wrong while loading this page.",
- "bundle_modal_error.retry": "Try again",
- "column.blocks": "Blocked users",
- "column.community": "Local timeline",
- "column.direct": "Direct messages",
- "column.domain_blocks": "Hidden domains",
- "column.edit_profile": "Edit profile",
- "column.filters": "Muted words",
- "column.follow_requests": "Follow requests",
- "column.groups": "Groups",
- "column.home": "Home",
- "column.lists": "Lists",
- "column.mutes": "Muted users",
- "column.notifications": "Alerts",
- "column.preferences": "Preferences",
- "column.public": "Federated timeline",
- "column.security": "Security",
- "column_back_button.label": "Back",
- "column_header.hide_settings": "Hide settings",
- "column_header.show_settings": "Show settings",
- "column_subheading.settings": "Settings",
- "community.column_settings.media_only": "Media Only",
- "compose_form.direct_message_warning": "This post will only be sent to the mentioned users.",
- "compose_form.direct_message_warning_learn_more": "Learn more",
- "compose_form.hashtag_warning": "This post won\"t be listed under any hashtag as it is unlisted. Only public posts can be searched by hashtag.",
- "compose_form.lock_disclaimer": "Your account is not {locked}. Anyone can follow you to view your follower-only posts.",
- "compose_form.lock_disclaimer.lock": "locked",
- "compose_form.placeholder": "What\"s on your mind?",
- "compose_form.poll.add_option": "Add a choice",
- "compose_form.poll.duration": "Poll duration",
- "compose_form.poll.option_placeholder": "Choice {number}",
- "compose_form.poll.remove_option": "Delete",
- "compose_form.poll.type.hint": "Click to toggle poll type. Radio button (default) is single. Checkbox is multiple.",
- "compose_form.publish": "Publish",
- "compose_form.publish_loud": "{publish}!",
- "compose_form.sensitive.hide": "Mark media as sensitive",
- "compose_form.sensitive.marked": "Media is marked as sensitive",
- "compose_form.sensitive.unmarked": "Media is not marked as sensitive",
- "compose_form.spoiler.marked": "Text is hidden behind warning",
- "compose_form.spoiler.unmarked": "Text is not hidden",
- "compose_form.spoiler_placeholder": "Write your warning here",
- "confirmation_modal.cancel": "Cancel",
- "confirmations.block.block_and_report": "Block & Report",
- "confirmations.block.confirm": "Block",
- "confirmations.block.message": "Are you sure you want to block {name}?",
- "confirmations.delete.confirm": "Delete",
- "confirmations.delete.message": "Are you sure you want to delete this post?",
- "confirmations.delete_list.confirm": "Delete",
- "confirmations.delete_list.message": "Are you sure you want to permanently delete this list?",
- "confirmations.domain_block.confirm": "Hide entire domain",
- "confirmations.domain_block.message": "Are you really, really sure you want to block the entire {domain}? In most cases a few targeted blocks or mutes are sufficient and preferable. You will not see content from that domain in any public timelines or your notifications.",
- "confirmations.mute.confirm": "Mute",
- "confirmations.mute.message": "Are you sure you want to mute {name}?",
- "confirmations.redraft.confirm": "Delete & redraft",
- "confirmations.redraft.message": "Are you sure you want to delete this post and re-draft it? Favorites and reposts will be lost, and replies to the original post will be orphaned.",
- "confirmations.reply.confirm": "Reply",
- "confirmations.reply.message": "Replying now will overwrite the message you are currently composing. Are you sure you want to proceed?",
- "confirmations.unfollow.confirm": "Unfollow",
- "confirmations.unfollow.message": "Are you sure you want to unfollow {name}?",
- "donate": "Donate",
- "edit_profile.fields.avatar_label": "Avatar",
- "edit_profile.fields.bio_label": "Bio",
- "edit_profile.fields.bot_label": "This is a bot account",
- "edit_profile.fields.display_name_label": "Display name",
- "edit_profile.fields.header_label": "Header",
- "edit_profile.fields.locked_label": "Lock account",
- "edit_profile.fields.meta_fields.content_placeholder": "Content",
- "edit_profile.fields.meta_fields.label_placeholder": "Label",
- "edit_profile.fields.meta_fields_label": "Profile metadata",
- "edit_profile.hints.avatar": "PNG, GIF or JPG. Will be downscaled to {size}",
- "edit_profile.hints.bot": "This account mainly performs automated actions and might not be monitored",
- "edit_profile.hints.header": "PNG, GIF or JPG. Will be downscaled to {size}",
- "edit_profile.hints.locked": "Requires you to manually approve followers",
- "edit_profile.hints.meta_fields": "You can have up to {count, plural, one {# item} other {# items}} displayed as a table on your profile",
- "edit_profile.save": "Save",
- "embed.instructions": "Embed this post on your website by copying the code below.",
- "embed.preview": "Here is what it will look like:",
- "emoji_button.activity": "Activity",
- "emoji_button.custom": "Custom",
- "emoji_button.flags": "Flags",
- "emoji_button.food": "Food & Drink",
- "emoji_button.label": "Insert emoji",
- "emoji_button.nature": "Nature",
- "emoji_button.not_found": "No emojos!! (╯°□°)╯︵ ┻━┻",
- "emoji_button.objects": "Objects",
- "emoji_button.people": "People",
- "emoji_button.recent": "Frequently used",
- "emoji_button.search": "Search...",
- "emoji_button.search_results": "Search results",
- "emoji_button.symbols": "Symbols",
- "emoji_button.travel": "Travel & Places",
- "empty_column.account_timeline": "No posts here!",
- "empty_column.account_unavailable": "Profile unavailable",
- "empty_column.blocks": "You haven\"t blocked any users yet.",
- "empty_column.community": "The local timeline is empty. Write something publicly to get the ball rolling!",
- "empty_column.direct": "You don\"t have any direct messages yet. When you send or receive one, it will show up here.",
- "empty_column.domain_blocks": "There are no hidden domains yet.",
- "empty_column.favourited_statuses": "You don\"t have any liked posts yet. When you like one, it will show up here.",
- "empty_column.favourites": "No one has liked this post yet. When someone does, they will show up here.",
- "empty_column.filters": "You haven\"t created any muted words yet.",
- "empty_column.follow_requests": "You don\"t have any follow requests yet. When you receive one, it will show up here.",
- "empty_column.group": "There is nothing in this group yet. When members of this group make new posts, they will appear here.",
- "empty_column.hashtag": "There is nothing in this hashtag yet.",
- "empty_column.home": "Or you can visit {public} to get started and meet other users.",
- "empty_column.home.local_tab": "the {site_title} tab",
- "empty_column.list": "There is nothing in this list yet. When members of this list create new posts, they will appear here.",
- "empty_column.lists": "You don\"t have any lists yet. When you create one, it will show up here.",
- "empty_column.mutes": "You haven\"t muted any users yet.",
- "empty_column.notifications": "You don\"t have any notifications yet. Interact with others to start the conversation.",
- "empty_column.public": "There is nothing here! Write something publicly, or manually follow users from other servers to fill it up",
- "fediverse_tab.explanation_box.explanation": "{site_title} is part of the Fediverse, a social network made up of thousands of independent social media sites (aka 'servers'). The posts you see here are from 3rd-party servers. You have the freedom to engage with them, or to block any server you don\"t like. Pay attention to the full username after the second @ symbol to know which server a post is from. To see only {site_title} posts, visit {local}.",
- "fediverse_tab.explanation_box.title": "What is the Fediverse?",
- "follow_request.authorize": "Authorize",
- "follow_request.reject": "Reject",
- "getting_started.heading": "Getting started",
- "getting_started.open_source_notice": "{code_name} is open source software. You can contribute or report issues at {code_link} (v{code_version}).",
- "group.members.empty": "This group does not has any members.",
- "group.removed_accounts.empty": "This group does not has any removed accounts.",
- "groups.card.join": "Join",
- "groups.card.members": "Members",
- "groups.card.roles.admin": "You\"re an admin",
- "groups.card.roles.member": "You\"re a member",
- "groups.card.view": "View",
- "groups.create": "Create group",
- "groups.form.coverImage": "Upload new banner image (optional)",
- "groups.form.coverImageChange": "Banner image selected",
- "groups.form.create": "Create group",
- "groups.form.description": "Description",
- "groups.form.title": "Title",
- "groups.form.update": "Update group",
- "groups.removed_accounts": "Removed Accounts",
- "groups.tab_admin": "Manage",
- "groups.tab_featured": "Featured",
- "groups.tab_member": "Member",
- "hashtag.column_header.tag_mode.all": "and {additional}",
- "hashtag.column_header.tag_mode.any": "or {additional}",
- "hashtag.column_header.tag_mode.none": "without {additional}",
- "home.column_settings.basic": "Basic",
- "home.column_settings.show_reblogs": "Show reposts",
- "home.column_settings.show_replies": "Show replies",
- "home_column.lists": "Lists",
- "home_column_header.fediverse": "Fediverse",
- "home_column_header.home": "Home",
- "intervals.full.days": "{number, plural, one {# day} other {# days}}",
- "intervals.full.hours": "{number, plural, one {# hour} other {# hours}}",
- "intervals.full.minutes": "{number, plural, one {# minute} other {# minutes}}",
- "keyboard_shortcuts.back": "to navigate back",
- "keyboard_shortcuts.blocked": "to open blocked users list",
- "keyboard_shortcuts.boost": "to repost",
- "keyboard_shortcuts.column": "to focus a post in one of the columns",
- "keyboard_shortcuts.compose": "to focus the compose textarea",
- "keyboard_shortcuts.direct": "to open direct messages column",
- "keyboard_shortcuts.down": "to move down in the list",
- "keyboard_shortcuts.enter": "to open post",
- "keyboard_shortcuts.favourite": "to like",
- "keyboard_shortcuts.favourites": "to open likes list",
- "keyboard_shortcuts.heading": "Keyboard shortcuts",
- "keyboard_shortcuts.home": "to open home timeline",
- "keyboard_shortcuts.hotkey": "Hotkey",
- "keyboard_shortcuts.legend": "to display this legend",
- "keyboard_shortcuts.mention": "to mention author",
- "keyboard_shortcuts.muted": "to open muted users list",
- "keyboard_shortcuts.my_profile": "to open your profile",
- "keyboard_shortcuts.notifications": "to open notifications column",
- "keyboard_shortcuts.pinned": "to open pinned posts list",
- "keyboard_shortcuts.profile": "to open author\"s profile",
- "keyboard_shortcuts.reply": "to reply",
- "keyboard_shortcuts.requests": "to open follow requests list",
- "keyboard_shortcuts.search": "to focus search",
- "keyboard_shortcuts.start": "to open 'get started' column",
- "keyboard_shortcuts.toggle_hidden": "to show/hide text behind CW",
- "keyboard_shortcuts.toggle_sensitivity": "to show/hide media",
- "keyboard_shortcuts.toot": "to start a new post",
- "keyboard_shortcuts.unfocus": "to un-focus compose textarea/search",
- "keyboard_shortcuts.up": "to move up in the list",
- "lightbox.close": "Close",
- "lightbox.next": "Next",
- "lightbox.previous": "Previous",
- "lightbox.view_context": "View context",
- "list.click_to_add": "Click here to add people",
- "list_adder.header_title": "Add or Remove from Lists",
- "lists.account.add": "Add to list",
- "lists.account.remove": "Remove from list",
- "lists.delete": "Delete list",
- "lists.edit": "Edit list",
- "lists.edit.submit": "Change title",
- "lists.new.create": "Add list",
- "lists.new.create_title": "Add list",
- "lists.new.save_title": "Save Title",
- "lists.new.title_placeholder": "New list title",
- "lists.search": "Search among people you follow",
- "lists.subheading": "Your lists",
- "lists.view_all": "View all lists",
- "loading_indicator.label": "Loading...",
- "login.fields.password_placeholder": "Password",
- "login.fields.username_placeholder": "Username",
- "login.log_in": "Log in",
- "login.reset_password_hint": "Trouble logging in?",
- "media_gallery.toggle_visible": "Hide",
- "missing_indicator.label": "Not found",
- "missing_indicator.sublabel": "This resource could not be found",
- "morefollows.followers_label": "…and {count} more {count, plural, one {follower} other {followers}} on remote sites.",
- "morefollows.following_label": "…and {count} more {count, plural, one {follow} other {follows}} on remote sites.",
- "mute_modal.hide_notifications": "Hide notifications from this user?",
- "navigation_bar.admin_settings": "Admin settings",
- "navigation_bar.plfe_config": "Soapbox config",
- "navigation_bar.blocks": "Blocked users",
- "navigation_bar.community_timeline": "Local timeline",
- "navigation_bar.compose": "Compose new post",
- "navigation_bar.direct": "Direct messages",
- "navigation_bar.discover": "Discover",
- "navigation_bar.domain_blocks": "Hidden domains",
- "navigation_bar.edit_profile": "Edit profile",
- "navigation_bar.favourites": "Likes",
- "navigation_bar.filters": "Muted words",
- "navigation_bar.follow_requests": "Follow requests",
- "navigation_bar.info": "About this server",
- "navigation_bar.keyboard_shortcuts": "Hotkeys",
- "navigation_bar.lists": "Lists",
- "navigation_bar.logout": "Logout",
- "navigation_bar.messages": "Messages",
- "navigation_bar.mutes": "Muted users",
- "navigation_bar.personal": "Personal",
- "navigation_bar.pins": "Pinned posts",
- "navigation_bar.preferences": "Preferences",
- "navigation_bar.public_timeline": "Federated timeline",
- "navigation_bar.security": "Security",
- "notification.pleroma:emoji_reaction": "{name} reacted to your post",
- "notification.favourite": "{name} liked your post",
- "notification.follow": "{name} followed you",
- "notification.mention": "{name} mentioned you",
- "notification.poll": "A poll you have voted in has ended",
- "notification.reblog": "{name} reposted your post",
- "notifications.clear": "Clear notifications",
- "notifications.clear_confirmation": "Are you sure you want to permanently clear all your notifications?",
- "notifications.column_settings.alert": "Desktop notifications",
- "notifications.column_settings.favourite": "Likes:",
- "notifications.column_settings.filter_bar.advanced": "Display all categories",
- "notifications.column_settings.filter_bar.category": "Quick filter bar",
- "notifications.column_settings.filter_bar.show": "Show",
- "notifications.column_settings.follow": "New followers:",
- "notifications.column_settings.mention": "Mentions:",
- "notifications.column_settings.poll": "Poll results:",
- "notifications.column_settings.push": "Push notifications",
- "notifications.column_settings.reblog": "Reposts:",
- "notifications.column_settings.show": "Show in column",
- "notifications.column_settings.sound": "Play sound",
- "notifications.filter.all": "All",
- "notifications.filter.boosts": "Reposts",
- "notifications.filter.favourites": "Likes",
- "notifications.filter.follows": "Follows",
- "notifications.filter.mentions": "Mentions",
- "notifications.filter.polls": "Poll results",
- "notifications.group": "{count} notifications",
- "notifications.queue_label": "Click to see {count} new {count, plural, one {notification} other {notifications}}",
- "pinned_statuses.none": "No pins to show.",
- "poll.closed": "Closed",
- "poll.refresh": "Refresh",
- "poll.total_votes": "{count, plural, one {# vote} other {# votes}}",
- "poll.vote": "Vote",
- "poll_button.add_poll": "Add a poll",
- "poll_button.remove_poll": "Remove poll",
- "preferences.fields.auto_play_gif_label": "Auto-play animated GIFs",
- "preferences.fields.auto_play_video_label": "Auto-play videos",
- "preferences.fields.boost_modal_label": "Show confirmation dialog before reposting",
- "preferences.fields.delete_modal_label": "Show confirmation dialog before deleting a post",
- "preferences.fields.demetricator_label": "Use Demetricator",
- "preferences.fields.dyslexic_font_label": "Dyslexic mode",
- "preferences.fields.expand_spoilers_label": "Always expand posts marked with content warnings",
- "preferences.fields.language_label": "Language",
- "preferences.fields.privacy_label": "Post privacy",
- "preferences.fields.reduce_motion_label": "Reduce motion in animations",
- "preferences.fields.system_font_label": "Use system\"s default font",
- "preferences.fields.theme_label": "Theme",
- "preferences.fields.unfollow_modal_label": "Show confirmation dialog before unfollowing someone",
- "preferences.hints.demetricator": "Decrease social media anxiety by hiding all numbers from the site.",
- "preferences.hints.privacy_followers_only": "Only show to followers",
- "preferences.hints.privacy_public": "Everyone can see",
- "preferences.hints.privacy_unlisted": "Everyone can see, but not listed on public timelines",
- "preferences.options.privacy_followers_only": "Followers-only",
- "preferences.options.privacy_public": "Public",
- "preferences.options.privacy_unlisted": "Unlisted",
- "preferences.options.theme_dark": "Dark",
- "preferences.options.theme_light": "Light",
- "privacy.change": "Adjust post privacy",
- "privacy.direct.long": "Post to mentioned users only",
- "privacy.direct.short": "Direct",
- "privacy.private.long": "Post to followers only",
- "privacy.private.short": "Followers-only",
- "privacy.public.long": "Post to public timelines",
- "privacy.public.short": "Public",
- "privacy.unlisted.long": "Do not post to public timelines",
- "privacy.unlisted.short": "Unlisted",
- "regeneration_indicator.label": "Loading…",
- "regeneration_indicator.sublabel": "Your home feed is being prepared!",
- "registration.agreement": "I agree to the {tos}.",
- "registration.fields.confirm_placeholder": "Password (again)",
- "registration.fields.email_placeholder": "E-Mail address",
- "registration.fields.password_placeholder": "Password",
- "registration.fields.username_placeholder": "Username",
- "registration.lead": "With an account on {instance} you\"ll be able to follow people on any server in the fediverse.",
- "registration.sign_up": "Sign up",
- "registration.tos": "Terms of Service",
- "relative_time.days": "{number}d",
- "relative_time.hours": "{number}h",
- "relative_time.just_now": "now",
- "relative_time.minutes": "{number}m",
- "relative_time.seconds": "{number}s",
- "reply_indicator.cancel": "Cancel",
- "report.block": "Block {target}",
- "report.block_hint": "Do you also want to block this account?",
- "report.forward": "Forward to {target}",
- "report.forward_hint": "The account is from another server. Send a copy of the report there as well?",
- "report.hint": "The report will be sent to your server moderators. You can provide an explanation of why you are reporting this account below:",
- "report.placeholder": "Additional comments",
- "report.submit": "Submit",
- "report.target": "Reporting {target}",
- "search.placeholder": "Search",
- "search_popout.search_format": "Advanced search format",
- "search_popout.tips.full_text": "Simple text returns posts you have written, favorited, reposted, or have been mentioned in, as well as matching usernames, display names, and hashtags.",
- "search_popout.tips.hashtag": "hashtag",
- "search_popout.tips.status": "post",
- "search_popout.tips.user": "user",
- "search_results.accounts": "People",
- "search_results.hashtags": "Hashtags",
- "search_results.statuses": "Posts",
- "search_results.top": "Top",
- "search_results.total": "{count, number} {count, plural, one {result} other {results}}",
- "security.fields.email.label": "Email address",
- "security.fields.new_password.label": "New password",
- "security.fields.old_password.label": "Current password",
- "security.fields.password.label": "Password",
- "security.fields.password_confirmation.label": "New password (again)",
- "security.headers.tokens": "Sessions",
- "security.headers.update_email": "Change Email",
- "security.headers.update_password": "Change Password",
- "security.submit": "Save changes",
- "security.tokens.revoke": "Revoke",
- "security.update_email.fail": "Update email failed.",
- "security.update_email.success": "Email successfully updated.",
- "security.update_password.fail": "Update password failed.",
- "security.update_password.success": "Password successfully updated.",
- "signup_panel.subtitle": "Sign up now to discuss what's happening.",
- "signup_panel.title": "New to {site_title}?",
- "status.admin_account": "Open moderation interface for @{name}",
- "status.admin_status": "Open this post in the moderation interface",
- "status.block": "Block @{name}",
- "status.cancel_reblog_private": "Un-repost",
- "status.cannot_reblog": "This post cannot be reposted",
- "status.copy": "Copy link to post",
- "status.delete": "Delete",
- "status.detailed_status": "Detailed conversation view",
- "status.direct": "Direct message @{name}",
- "status.embed": "Embed",
- "status.favourite": "Like",
- "status.filtered": "Filtered",
- "status.load_more": "Load more",
- "status.media_hidden": "Media hidden",
- "status.mention": "Mention @{name}",
- "status.more": "More",
- "status.mute": "Mute @{name}",
- "status.mute_conversation": "Mute conversation",
- "status.open": "Expand this post",
- "status.pin": "Pin on profile",
- "status.pinned": "Pinned post",
- "status.read_more": "Read more",
- "status.reblog": "Repost",
- "status.reblog_private": "Repost to original audience",
- "status.reblogged_by": "{name} reposted",
- "status.reblogs.empty": "No one has reposted this post yet. When someone does, they will show up here.",
- "status.redraft": "Delete & re-draft",
- "status.remove_account_from_group": "Remove account from group",
- "status.remove_post_from_group": "Remove post from group",
- "status.reply": "Reply",
- "status.replyAll": "Reply to thread",
- "status.report": "Report @{name}",
- "status.sensitive_warning": "Sensitive content",
- "status.share": "Share",
- "status.show_less": "Show less",
- "status.show_less_all": "Show less for all",
- "status.show_more": "Show more",
- "status.show_more_all": "Show more for all",
- "status.show_thread": "Show thread",
- "status.unmute_conversation": "Unmute conversation",
- "status.unpin": "Unpin from profile",
- "status_list.queue_label": "Click to see {count} new {count, plural, one {post} other {posts}}",
- "suggestions.dismiss": "Dismiss suggestion",
- "tabs_bar.apps": "Apps",
- "tabs_bar.home": "Home",
- "tabs_bar.news": "News",
- "tabs_bar.notifications": "Alerts",
- "tabs_bar.post": "Post",
- "tabs_bar.search": "Search",
- "time_remaining.days": "{number, plural, one {# day} other {# days}} left",
- "time_remaining.hours": "{number, plural, one {# hour} other {# hours}} left",
- "time_remaining.minutes": "{number, plural, one {# minute} other {# minutes}} left",
- "time_remaining.moments": "Moments remaining",
- "time_remaining.seconds": "{number, plural, one {# second} other {# seconds}} left",
- "trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} talking",
- "trends.title": "Trends",
- "ui.beforeunload": "Your draft will be lost if you leave.",
- "unauthorized_modal.footer": "Already have an account? {login}.",
- "unauthorized_modal.text": "You need to be logged in to do that.",
- "unauthorized_modal.title": "Sign up for {site_title}",
- "upload_area.title": "Drag & drop to upload",
- "upload_button.label": "Add media attachment",
- "upload_error.limit": "File upload limit exceeded.",
- "upload_error.poll": "File upload not allowed with polls.",
- "upload_form.description": "Describe for the visually impaired",
- "upload_form.focus": "Change preview",
- "upload_form.undo": "Delete",
- "upload_progress.label": "Uploading...",
- "video.close": "Close video",
- "video.exit_fullscreen": "Exit full screen",
- "video.expand": "Expand video",
- "video.fullscreen": "Full screen",
- "video.hide": "Hide video",
- "video.mute": "Mute sound",
- "video.pause": "Pause",
- "video.play": "Play",
- "video.unmute": "Unmute sound",
- "who_to_follow.title": "Who To Follow"
- },
- "account.add_or_remove_from_list": "Add or Remove from lists",
- "account.badges.bot": "Bot",
- "account.block": "Block @{name}",
- "account.block_domain": "Hide everything from {domain}",
- "account.blocked": "Blocked",
- "account.direct": "Direct message @{name}",
- "account.domain_blocked": "Domain hidden",
- "account.edit_profile": "Edit profile",
- "account.endorse": "Feature on profile",
- "account.follow": "Follow",
- "account.followers": "Followers",
- "account.followers.empty": "No one follows this user yet.",
- "account.follows": "Follows",
- "account.follows.empty": "This user doesn\"t follow anyone yet.",
- "account.follows_you": "Follows you",
- "account.hide_reblogs": "Hide reposts from @{name}",
- "account.link_verified_on": "Ownership of this link was checked on {date}",
- "account.locked_info": "This account privacy status is set to locked. The owner manually reviews who can follow them.",
- "account.login": "Log in",
- "account.media": "Media",
- "account.member_since": "Joined {date}",
- "account.mention": "Mention",
- "account.message": "Message",
- "account.moved_to": "{name} has moved to:",
- "account.mute": "Mute @{name}",
- "account.mute_notifications": "Mute notifications from @{name}",
- "account.muted": "Muted",
- "account.posts": "Posts",
- "account.posts_with_replies": "Posts and replies",
- "account.profile": "Profile",
- "account.register": "Sign up",
- "account.report": "Report @{name}",
- "account.requested": "Awaiting approval. Click to cancel follow request",
- "account.share": "Share @{name}\"s profile",
- "account.show_reblogs": "Show reposts from @{name}",
- "account.unblock": "Unblock @{name}",
- "account.unblock_domain": "Unhide {domain}",
- "account.unendorse": "Don\"t feature on profile",
- "account.unfollow": "Unfollow",
- "account.unmute": "Unmute @{name}",
- "account.unmute_notifications": "Unmute notifications from @{name}",
- "account_gallery.none": "No media to show.",
- "alert.unexpected.message": "An unexpected error occurred.",
- "alert.unexpected.title": "Oops!",
- "audio.close": "Close audio",
- "audio.expand": "Expand audio",
- "audio.hide": "Hide audio",
- "audio.mute": "Mute",
- "audio.pause": "Pause",
- "audio.play": "Play",
- "audio.unmute": "Unmute",
- "boost_modal.combo": "You can press {combo} to skip this next time",
- "bundle_column_error.body": "Something went wrong while loading this page.",
- "bundle_column_error.retry": "Try again",
- "bundle_column_error.title": "Network error",
- "bundle_modal_error.close": "Close",
- "bundle_modal_error.message": "Something went wrong while loading this page.",
- "bundle_modal_error.retry": "Try again",
- "column.blocks": "Blocked users",
- "column.community": "Local timeline",
- "column.direct": "Direct messages",
- "column.domain_blocks": "Hidden domains",
- "column.edit_profile": "Edit profile",
- "column.filters": "Muted words",
- "column.follow_requests": "Follow requests",
- "column.groups": "Groups",
- "column.home": "Home",
- "column.lists": "Lists",
- "column.mutes": "Muted users",
- "column.notifications": "Alerts",
- "column.preferences": "Preferences",
- "column.public": "Federated timeline",
- "column.security": "Security",
- "column_back_button.label": "Back",
- "column_header.hide_settings": "Hide settings",
- "column_header.show_settings": "Show settings",
- "column_subheading.settings": "Settings",
- "community.column_settings.media_only": "Media Only",
- "compose_form.direct_message_warning": "This post will only be sent to the mentioned users.",
- "compose_form.direct_message_warning_learn_more": "Learn more",
- "compose_form.hashtag_warning": "This post won\"t be listed under any hashtag as it is unlisted. Only public posts can be searched by hashtag.",
- "compose_form.lock_disclaimer": "Your account is not {locked}. Anyone can follow you to view your follower-only posts.",
- "compose_form.lock_disclaimer.lock": "locked",
- "compose_form.placeholder": "What\"s on your mind?",
- "compose_form.poll.add_option": "Add a choice",
- "compose_form.poll.duration": "Poll duration",
- "compose_form.poll.option_placeholder": "Choice {number}",
- "compose_form.poll.remove_option": "Delete",
- "compose_form.poll.type.hint": "Click to toggle poll type. Radio button (default) is single. Checkbox is multiple.",
- "compose_form.publish": "Publish",
- "compose_form.publish_loud": "{publish}!",
- "compose_form.sensitive.hide": "Mark media as sensitive",
- "compose_form.sensitive.marked": "Media is marked as sensitive",
- "compose_form.sensitive.unmarked": "Media is not marked as sensitive",
- "compose_form.spoiler.marked": "Text is hidden behind warning",
- "compose_form.spoiler.unmarked": "Text is not hidden",
- "compose_form.spoiler_placeholder": "Write your warning here",
- "confirmation_modal.cancel": "Cancel",
- "confirmations.block.block_and_report": "Block & Report",
- "confirmations.block.confirm": "Block",
- "confirmations.block.message": "Are you sure you want to block {name}?",
- "confirmations.delete.confirm": "Delete",
- "confirmations.delete.message": "Are you sure you want to delete this post?",
- "confirmations.delete_list.confirm": "Delete",
- "confirmations.delete_list.message": "Are you sure you want to permanently delete this list?",
- "confirmations.domain_block.confirm": "Hide entire domain",
- "confirmations.domain_block.message": "Are you really, really sure you want to block the entire {domain}? In most cases a few targeted blocks or mutes are sufficient and preferable. You will not see content from that domain in any public timelines or your notifications.",
- "confirmations.mute.confirm": "Mute",
- "confirmations.mute.message": "Are you sure you want to mute {name}?",
- "confirmations.redraft.confirm": "Delete & redraft",
- "confirmations.redraft.message": "Are you sure you want to delete this post and re-draft it? Favorites and reposts will be lost, and replies to the original post will be orphaned.",
- "confirmations.reply.confirm": "Reply",
- "confirmations.reply.message": "Replying now will overwrite the message you are currently composing. Are you sure you want to proceed?",
- "confirmations.unfollow.confirm": "Unfollow",
- "confirmations.unfollow.message": "Are you sure you want to unfollow {name}?",
- "donate": "Donate",
- "edit_profile.fields.avatar_label": "Avatar",
- "edit_profile.fields.bio_label": "Bio",
- "edit_profile.fields.bot_label": "This is a bot account",
- "edit_profile.fields.display_name_label": "Display name",
- "edit_profile.fields.header_label": "Header",
- "edit_profile.fields.locked_label": "Lock account",
- "edit_profile.fields.meta_fields.content_placeholder": "Content",
- "edit_profile.fields.meta_fields.label_placeholder": "Label",
- "edit_profile.fields.meta_fields_label": "Profile metadata",
- "edit_profile.hints.avatar": "PNG, GIF or JPG. Will be downscaled to {size}",
- "edit_profile.hints.bot": "This account mainly performs automated actions and might not be monitored",
- "edit_profile.hints.header": "PNG, GIF or JPG. Will be downscaled to {size}",
- "edit_profile.hints.locked": "Requires you to manually approve followers",
- "edit_profile.hints.meta_fields": "You can have up to {count, plural, one {# item} other {# items}} displayed as a table on your profile",
- "edit_profile.save": "Save",
- "embed.instructions": "Embed this post on your website by copying the code below.",
- "embed.preview": "Here is what it will look like:",
- "emoji_button.activity": "Activity",
- "emoji_button.custom": "Custom",
- "emoji_button.flags": "Flags",
- "emoji_button.food": "Food & Drink",
- "emoji_button.label": "Insert emoji",
- "emoji_button.nature": "Nature",
- "emoji_button.not_found": "No emojos!! (╯°□°)╯︵ ┻━┻",
- "emoji_button.objects": "Objects",
- "emoji_button.people": "People",
- "emoji_button.recent": "Frequently used",
- "emoji_button.search": "Search...",
- "emoji_button.search_results": "Search results",
- "emoji_button.symbols": "Symbols",
- "emoji_button.travel": "Travel & Places",
- "empty_column.account_timeline": "No posts here!",
- "empty_column.account_unavailable": "Profile unavailable",
- "empty_column.blocks": "You haven\"t blocked any users yet.",
- "empty_column.community": "The local timeline is empty. Write something publicly to get the ball rolling!",
- "empty_column.direct": "You don\"t have any direct messages yet. When you send or receive one, it will show up here.",
- "empty_column.domain_blocks": "There are no hidden domains yet.",
- "empty_column.favourited_statuses": "You don\"t have any liked posts yet. When you like one, it will show up here.",
- "empty_column.favourites": "No one has liked this post yet. When someone does, they will show up here.",
- "empty_column.filters": "You haven\"t created any muted words yet.",
- "empty_column.follow_requests": "You don\"t have any follow requests yet. When you receive one, it will show up here.",
- "empty_column.group": "There is nothing in this group yet. When members of this group make new posts, they will appear here.",
- "empty_column.hashtag": "There is nothing in this hashtag yet.",
- "empty_column.home": "Or you can visit {public} to get started and meet other users.",
- "empty_column.home.local_tab": "the {site_title} tab",
- "empty_column.list": "There is nothing in this list yet. When members of this list create new posts, they will appear here.",
- "empty_column.lists": "You don\"t have any lists yet. When you create one, it will show up here.",
- "empty_column.mutes": "You haven\"t muted any users yet.",
- "empty_column.notifications": "You don\"t have any notifications yet. Interact with others to start the conversation.",
- "empty_column.public": "There is nothing here! Write something publicly, or manually follow users from other servers to fill it up",
- "fediverse_tab.explanation_box.explanation": "{site_title} is part of the Fediverse, a social network made up of thousands of independent social media sites (aka 'servers'). The posts you see here are from 3rd-party servers. You have the freedom to engage with them, or to block any server you don\"t like. Pay attention to the full username after the second @ symbol to know which server a post is from. To see only {site_title} posts, visit {local}.",
- "fediverse_tab.explanation_box.title": "What is the Fediverse?",
- "follow_request.authorize": "Authorize",
- "follow_request.reject": "Reject",
- "getting_started.heading": "Getting started",
- "getting_started.open_source_notice": "{code_name} is open source software. You can contribute or report issues at {code_link} (v{code_version}).",
- "group.members.empty": "This group does not has any members.",
- "group.removed_accounts.empty": "This group does not has any removed accounts.",
- "groups.card.join": "Join",
- "groups.card.members": "Members",
- "groups.card.roles.admin": "You\"re an admin",
- "groups.card.roles.member": "You\"re a member",
- "groups.card.view": "View",
- "groups.create": "Create group",
- "groups.form.coverImage": "Upload new banner image (optional)",
- "groups.form.coverImageChange": "Banner image selected",
- "groups.form.create": "Create group",
- "groups.form.description": "Description",
- "groups.form.title": "Title",
- "groups.form.update": "Update group",
- "groups.removed_accounts": "Removed Accounts",
- "groups.tab_admin": "Manage",
- "groups.tab_featured": "Featured",
- "groups.tab_member": "Member",
- "hashtag.column_header.tag_mode.all": "and {additional}",
- "hashtag.column_header.tag_mode.any": "or {additional}",
- "hashtag.column_header.tag_mode.none": "without {additional}",
- "home.column_settings.basic": "Basic",
- "home.column_settings.show_reblogs": "Show reposts",
- "home.column_settings.show_replies": "Show replies",
- "home_column.lists": "Lists",
- "home_column_header.fediverse": "Fediverse",
- "home_column_header.home": "Home",
- "intervals.full.days": "{number, plural, one {# day} other {# days}}",
- "intervals.full.hours": "{number, plural, one {# hour} other {# hours}}",
- "intervals.full.minutes": "{number, plural, one {# minute} other {# minutes}}",
- "keyboard_shortcuts.back": "to navigate back",
- "keyboard_shortcuts.blocked": "to open blocked users list",
- "keyboard_shortcuts.boost": "to repost",
- "keyboard_shortcuts.column": "to focus a post in one of the columns",
- "keyboard_shortcuts.compose": "to focus the compose textarea",
- "keyboard_shortcuts.direct": "to open direct messages column",
- "keyboard_shortcuts.down": "to move down in the list",
- "keyboard_shortcuts.enter": "to open post",
- "keyboard_shortcuts.favourite": "to like",
- "keyboard_shortcuts.favourites": "to open likes list",
- "keyboard_shortcuts.heading": "Keyboard shortcuts",
- "keyboard_shortcuts.home": "to open home timeline",
- "keyboard_shortcuts.hotkey": "Hotkey",
- "keyboard_shortcuts.legend": "to display this legend",
- "keyboard_shortcuts.mention": "to mention author",
- "keyboard_shortcuts.muted": "to open muted users list",
- "keyboard_shortcuts.my_profile": "to open your profile",
- "keyboard_shortcuts.notifications": "to open notifications column",
- "keyboard_shortcuts.pinned": "to open pinned posts list",
- "keyboard_shortcuts.profile": "to open author\"s profile",
- "keyboard_shortcuts.reply": "to reply",
- "keyboard_shortcuts.requests": "to open follow requests list",
- "keyboard_shortcuts.search": "to focus search",
- "keyboard_shortcuts.start": "to open 'get started' column",
- "keyboard_shortcuts.toggle_hidden": "to show/hide text behind CW",
- "keyboard_shortcuts.toggle_sensitivity": "to show/hide media",
- "keyboard_shortcuts.toot": "to start a new post",
- "keyboard_shortcuts.unfocus": "to un-focus compose textarea/search",
- "keyboard_shortcuts.up": "to move up in the list",
- "lightbox.close": "Close",
- "lightbox.next": "Next",
- "lightbox.previous": "Previous",
- "lightbox.view_context": "View context",
- "list.click_to_add": "Click here to add people",
- "list_adder.header_title": "Add or Remove from Lists",
- "lists.account.add": "Add to list",
- "lists.account.remove": "Remove from list",
- "lists.delete": "Delete list",
- "lists.edit": "Edit list",
- "lists.edit.submit": "Change title",
- "lists.new.create": "Add list",
- "lists.new.create_title": "Add list",
- "lists.new.save_title": "Save Title",
- "lists.new.title_placeholder": "New list title",
- "lists.search": "Search among people you follow",
- "lists.subheading": "Your lists",
- "lists.view_all": "View all lists",
- "loading_indicator.label": "Loading...",
- "login.fields.password_placeholder": "Password",
- "login.fields.username_placeholder": "Username",
- "login.log_in": "Log in",
- "login.reset_password_hint": "Trouble logging in?",
- "media_gallery.toggle_visible": "Hide",
- "missing_indicator.label": "Not found",
- "missing_indicator.sublabel": "This resource could not be found",
- "morefollows.followers_label": "…and {count} more {count, plural, one {follower} other {followers}} on remote sites.",
- "morefollows.following_label": "…and {count} more {count, plural, one {follow} other {follows}} on remote sites.",
- "mute_modal.hide_notifications": "Hide notifications from this user?",
- "navigation_bar.admin_settings": "Admin settings",
- "navigation_bar.plfe_config": "Soapbox config",
- "navigation_bar.blocks": "Blocked users",
- "navigation_bar.community_timeline": "Local timeline",
- "navigation_bar.compose": "Compose new post",
- "navigation_bar.direct": "Direct messages",
- "navigation_bar.discover": "Discover",
- "navigation_bar.domain_blocks": "Hidden domains",
- "navigation_bar.edit_profile": "Edit profile",
- "navigation_bar.favourites": "Likes",
- "navigation_bar.filters": "Muted words",
- "navigation_bar.follow_requests": "Follow requests",
- "navigation_bar.info": "About this server",
- "navigation_bar.keyboard_shortcuts": "Hotkeys",
- "navigation_bar.lists": "Lists",
- "navigation_bar.logout": "Logout",
- "navigation_bar.messages": "Messages",
- "navigation_bar.mutes": "Muted users",
- "navigation_bar.personal": "Personal",
- "navigation_bar.pins": "Pinned posts",
- "navigation_bar.preferences": "Preferences",
- "navigation_bar.public_timeline": "Federated timeline",
- "navigation_bar.security": "Security",
- "notification.pleroma:emoji_reaction": "{name} reacted to your post",
- "notification.favourite": "{name} liked your post",
- "notification.follow": "{name} followed you",
- "notification.mention": "{name} mentioned you",
- "notification.poll": "A poll you have voted in has ended",
- "notification.reblog": "{name} reposted your post",
- "notifications.clear": "Clear notifications",
- "notifications.clear_confirmation": "Are you sure you want to permanently clear all your notifications?",
- "notifications.column_settings.alert": "Desktop notifications",
- "notifications.column_settings.favourite": "Likes:",
- "notifications.column_settings.filter_bar.advanced": "Display all categories",
- "notifications.column_settings.filter_bar.category": "Quick filter bar",
- "notifications.column_settings.filter_bar.show": "Show",
- "notifications.column_settings.follow": "New followers:",
- "notifications.column_settings.mention": "Mentions:",
- "notifications.column_settings.poll": "Poll results:",
- "notifications.column_settings.push": "Push notifications",
- "notifications.column_settings.reblog": "Reposts:",
- "notifications.column_settings.show": "Show in column",
- "notifications.column_settings.sound": "Play sound",
- "notifications.filter.all": "All",
- "notifications.filter.boosts": "Reposts",
- "notifications.filter.favourites": "Likes",
- "notifications.filter.follows": "Follows",
- "notifications.filter.mentions": "Mentions",
- "notifications.filter.polls": "Poll results",
- "notifications.group": "{count} notifications",
- "notifications.queue_label": "Click to see {count} new {count, plural, one {notification} other {notifications}}",
- "pinned_statuses.none": "No pins to show.",
- "poll.closed": "Closed",
- "poll.refresh": "Refresh",
- "poll.total_votes": "{count, plural, one {# vote} other {# votes}}",
- "poll.vote": "Vote",
- "poll_button.add_poll": "Add a poll",
- "poll_button.remove_poll": "Remove poll",
- "preferences.fields.auto_play_gif_label": "Auto-play animated GIFs",
- "preferences.fields.boost_modal_label": "Show confirmation dialog before reposting",
- "preferences.fields.delete_modal_label": "Show confirmation dialog before deleting a post",
- "preferences.fields.demetricator_label": "Use Demetricator",
- "preferences.fields.dyslexic_font_label": "Dyslexic mode",
- "preferences.fields.expand_spoilers_label": "Always expand posts marked with content warnings",
- "preferences.fields.language_label": "Language",
- "preferences.fields.privacy_label": "Post privacy",
- "preferences.fields.reduce_motion_label": "Reduce motion in animations",
- "preferences.fields.system_font_label": "Use system\"s default font",
- "preferences.fields.theme_label": "Theme",
- "preferences.fields.unfollow_modal_label": "Show confirmation dialog before unfollowing someone",
- "preferences.hints.demetricator": "Decrease social media anxiety by hiding all numbers from the site.",
- "preferences.hints.privacy_followers_only": "Only show to followers",
- "preferences.hints.privacy_public": "Everyone can see",
- "preferences.hints.privacy_unlisted": "Everyone can see, but not listed on public timelines",
- "preferences.options.privacy_followers_only": "Followers-only",
- "preferences.options.privacy_public": "Public",
- "preferences.options.privacy_unlisted": "Unlisted",
- "preferences.options.theme_dark": "Dark",
- "preferences.options.theme_light": "Light",
- "privacy.change": "Adjust post privacy",
- "privacy.direct.long": "Post to mentioned users only",
- "privacy.direct.short": "Direct",
- "privacy.private.long": "Post to followers only",
- "privacy.private.short": "Followers-only",
- "privacy.public.long": "Post to public timelines",
- "privacy.public.short": "Public",
- "privacy.unlisted.long": "Do not post to public timelines",
- "privacy.unlisted.short": "Unlisted",
- "regeneration_indicator.label": "Loading…",
- "regeneration_indicator.sublabel": "Your home feed is being prepared!",
- "registration.agreement": "I agree to the {tos}.",
- "registration.fields.confirm_placeholder": "Password (again)",
- "registration.fields.email_placeholder": "E-Mail address",
- "registration.fields.password_placeholder": "Password",
- "registration.fields.username_placeholder": "Username",
- "registration.lead": "With an account on {instance} you\"ll be able to follow people on any server in the fediverse.",
- "registration.sign_up": "Sign up",
- "registration.tos": "Terms of Service",
- "registration.privacy": "Privacy Policy",
- "registration.acceptance": "By registering, you agree to the {terms} and {privacy}.",
- "registration.reason": "Reason for Joining",
- "relative_time.days": "{number}d",
- "relative_time.hours": "{number}h",
- "relative_time.just_now": "now",
- "relative_time.minutes": "{number}m",
- "relative_time.seconds": "{number}s",
- "reply_indicator.cancel": "Cancel",
- "report.block": "Block {target}",
- "report.block_hint": "Do you also want to block this account?",
- "report.forward": "Forward to {target}",
- "report.forward_hint": "The account is from another server. Send a copy of the report there as well?",
- "report.hint": "The report will be sent to your server moderators. You can provide an explanation of why you are reporting this account below:",
- "report.placeholder": "Additional comments",
- "report.submit": "Submit",
- "report.target": "Reporting {target}",
- "search.placeholder": "Search",
- "search_popout.search_format": "Advanced search format",
- "search_popout.tips.full_text": "Simple text returns posts you have written, favorited, reposted, or have been mentioned in, as well as matching usernames, display names, and hashtags.",
- "search_popout.tips.hashtag": "hashtag",
- "search_popout.tips.status": "post",
- "search_popout.tips.user": "user",
- "search_results.accounts": "People",
- "search_results.hashtags": "Hashtags",
- "search_results.statuses": "Posts",
- "search_results.top": "Top",
- "search_results.total": "{count, number} {count, plural, one {result} other {results}}",
- "security.fields.email.label": "Email address",
- "security.fields.new_password.label": "New password",
- "security.fields.old_password.label": "Current password",
- "security.fields.password.label": "Password",
- "security.fields.password_confirmation.label": "New password (again)",
- "security.headers.tokens": "Sessions",
- "security.headers.update_email": "Change Email",
- "security.headers.update_password": "Change Password",
- "security.submit": "Save changes",
- "security.tokens.revoke": "Revoke",
- "security.update_email.fail": "Update email failed.",
- "security.update_email.success": "Email successfully updated.",
- "security.update_password.fail": "Update password failed.",
- "security.update_password.success": "Password successfully updated.",
- "signup_panel.subtitle": "Sign up now to discuss what's happening.",
- "signup_panel.title": "New to {site_title}?",
- "status.admin_account": "Open moderation interface for @{name}",
- "status.admin_status": "Open this post in the moderation interface",
- "status.block": "Block @{name}",
- "status.cancel_reblog_private": "Un-repost",
- "status.cannot_reblog": "This post cannot be reposted",
- "status.copy": "Copy link to post",
- "status.delete": "Delete",
- "status.detailed_status": "Detailed conversation view",
- "status.direct": "Direct message @{name}",
- "status.embed": "Embed",
- "status.favourite": "Like",
- "status.filtered": "Filtered",
- "status.load_more": "Load more",
- "status.media_hidden": "Media hidden",
- "status.mention": "Mention @{name}",
- "status.more": "More",
- "status.mute": "Mute @{name}",
- "status.mute_conversation": "Mute conversation",
- "status.open": "Expand this post",
- "status.pin": "Pin on profile",
- "status.pinned": "Pinned post",
- "status.read_more": "Read more",
- "status.reblog": "Repost",
- "status.reblog_private": "Repost to original audience",
- "status.reblogged_by": "{name} reposted",
- "status.reblogs.empty": "No one has reposted this post yet. When someone does, they will show up here.",
- "status.redraft": "Delete & re-draft",
- "status.remove_account_from_group": "Remove account from group",
- "status.remove_post_from_group": "Remove post from group",
- "status.reply": "Reply",
- "status.replyAll": "Reply to thread",
- "status.report": "Report @{name}",
- "status.sensitive_warning": "Sensitive content",
- "status.share": "Share",
- "status.show_less": "Show less",
- "status.show_less_all": "Show less for all",
- "status.show_more": "Show more",
- "status.show_more_all": "Show more for all",
- "status.show_thread": "Show thread",
- "status.unmute_conversation": "Unmute conversation",
- "status.unpin": "Unpin from profile",
- "status_list.queue_label": "Click to see {count} new {count, plural, one {post} other {posts}}",
- "suggestions.dismiss": "Dismiss suggestion",
- "tabs_bar.apps": "Apps",
- "tabs_bar.home": "Home",
- "tabs_bar.news": "News",
- "tabs_bar.notifications": "Alerts",
- "tabs_bar.post": "Post",
- "tabs_bar.search": "Search",
- "time_remaining.days": "{number, plural, one {# day} other {# days}} left",
- "time_remaining.hours": "{number, plural, one {# hour} other {# hours}} left",
- "time_remaining.minutes": "{number, plural, one {# minute} other {# minutes}} left",
- "time_remaining.moments": "Moments remaining",
- "time_remaining.seconds": "{number, plural, one {# second} other {# seconds}} left",
- "trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} talking",
- "trends.title": "Trends",
- "ui.beforeunload": "Your draft will be lost if you leave.",
- "unauthorized_modal.footer": "Already have an account? {login}.",
- "unauthorized_modal.text": "You need to be logged in to do that.",
- "unauthorized_modal.title": "Sign up for {site_title}",
- "upload_area.title": "Drag & drop to upload",
- "upload_button.label": "Add media attachment",
- "upload_error.limit": "File upload limit exceeded.",
- "upload_error.poll": "File upload not allowed with polls.",
- "upload_form.description": "Describe for the visually impaired",
- "upload_form.focus": "Change preview",
- "upload_form.undo": "Delete",
- "upload_progress.label": "Uploading...",
- "video.close": "Close video",
- "video.exit_fullscreen": "Exit full screen",
- "video.expand": "Expand video",
- "video.fullscreen": "Full screen",
- "video.hide": "Hide video",
- "video.mute": "Mute sound",
- "video.pause": "Pause",
- "video.play": "Play",
- "video.unmute": "Unmute sound",
- "who_to_follow.title": "Who To Follow"
-}
diff --git a/packages/pl-fe/src/__fixtures__/lain.json b/packages/pl-fe/src/__fixtures__/lain.json
deleted file mode 100644
index ab27af48e..000000000
--- a/packages/pl-fe/src/__fixtures__/lain.json
+++ /dev/null
@@ -1,57 +0,0 @@
-{
- "acct": "lain@lain.com",
- "avatar": "https://lain.com/media/0b7eb9eee68845f94dd1c7bd10d9bae90a2420cf6704de5485179c441eb0e6e0.jpg",
- "avatar_static": "https://lain.com/media/0b7eb9eee68845f94dd1c7bd10d9bae90a2420cf6704de5485179c441eb0e6e0.jpg",
- "bot": false,
- "created_at": "2020-01-10T17:30:10.000Z",
- "display_name": "Avalokiteshvara",
- "emojis": [],
- "fields": [],
- "followers_count": 807,
- "following_count": 223,
- "header": "https://lain.com/media/fb0768dfa331ad730de32189d2e89b99fe51eebe1782a16cf076d7693394e4f9.png",
- "header_static": "https://lain.com/media/fb0768dfa331ad730de32189d2e89b99fe51eebe1782a16cf076d7693394e4f9.png",
- "id": "9v5bqYwY2jfmvPNhTM",
- "locked": false,
- "note": "No more hiding",
- "pleroma": {
- "background_image": null,
- "confirmation_pending": true,
- "deactivated": false,
- "hide_favorites": true,
- "hide_followers": false,
- "hide_followers_count": false,
- "hide_follows": false,
- "hide_follows_count": false,
- "is_admin": false,
- "is_moderator": false,
- "relationship": {
- "blocked_by": false,
- "blocking": false,
- "domain_blocking": false,
- "endorsed": false,
- "followed_by": true,
- "following": true,
- "id": "9v5bqYwY2jfmvPNhTM",
- "muting": false,
- "muting_notifications": false,
- "requested": false,
- "showing_reblogs": true,
- "subscribing": false
- },
- "skip_thread_containment": false,
- "tags": []
- },
- "source": {
- "fields": [],
- "note": "No more hiding",
- "pleroma": {
- "actor_type": "Person",
- "discoverable": false
- },
- "sensitive": false
- },
- "statuses_count": 21107,
- "url": "https://lain.com/users/lain",
- "username": "lain"
-}
diff --git a/packages/pl-fe/src/__fixtures__/markers.json b/packages/pl-fe/src/__fixtures__/markers.json
deleted file mode 100644
index ba3f5f882..000000000
--- a/packages/pl-fe/src/__fixtures__/markers.json
+++ /dev/null
@@ -1,18 +0,0 @@
-{
- "notifications": {
- "last_read_id": "35098814",
- "version": 361,
- "updated_at": "2019-11-26T22:37:25.239Z",
- "pleroma": {
- "unread_count": 3
- }
- },
- "home": {
- "last_read_id": "103206604258487607",
- "version": 468,
- "updated_at": "2019-11-26T22:37:25.235Z",
- "pleroma": {
- "unread_count": 32
- }
- }
-}
diff --git a/packages/pl-fe/src/__fixtures__/mastodon-3.0.0-instance.json b/packages/pl-fe/src/__fixtures__/mastodon-3.0.0-instance.json
deleted file mode 100644
index f1d0a5e6d..000000000
--- a/packages/pl-fe/src/__fixtures__/mastodon-3.0.0-instance.json
+++ /dev/null
@@ -1,43 +0,0 @@
-{
- "uri": "animalliberation.social",
- "title": "Animal Liberation Network",
- "short_description": "",
- "description": "Animal Liberation Network is a community for animal activists on the Fediverse. You can connect with other activists through the local timeline , as well as spread your activism to the outside world with the federated timeline .",
- "email": "alex@alexgleason.me",
- "version": "3.0.0",
- "urls": {
- "streaming_api": "wss://animalliberation.social"
- },
- "stats": {
- "user_count": 662,
- "status_count": 2904,
- "domain_count": 4003
- },
- "thumbnail": "https://animalliberation.social/packs/media/images/preview-9a17d32fc48369e8ccd910a75260e67d.jpg",
- "languages": [
- "en"
- ],
- "registrations": true,
- "approval_required": false,
- "contact_account": {
- "id": "1",
- "username": "alex",
- "acct": "alex",
- "display_name": "Alex Gleason",
- "locked": false,
- "bot": false,
- "created_at": "2016-11-30T22:19:42.956Z",
- "note": "Animal liberation free software Communist
",
- "url": "https://animalliberation.social/@alex",
- "avatar": "https://media.animalliberation.social/accounts/avatars/000/000/001/original/media.jpg",
- "avatar_static": "https://media.animalliberation.social/accounts/avatars/000/000/001/original/media.jpg",
- "header": "https://media.animalliberation.social/accounts/headers/000/000/001/original/09887023017e02c9.jpg",
- "header_static": "https://media.animalliberation.social/accounts/headers/000/000/001/original/09887023017e02c9.jpg",
- "followers_count": 236,
- "following_count": 83,
- "statuses_count": 357,
- "last_status_at": "2021-02-20T19:28:24.353Z",
- "emojis": [],
- "fields": []
- }
-}
diff --git a/packages/pl-fe/src/__fixtures__/mastodon-account.json b/packages/pl-fe/src/__fixtures__/mastodon-account.json
deleted file mode 100644
index 7a00340bf..000000000
--- a/packages/pl-fe/src/__fixtures__/mastodon-account.json
+++ /dev/null
@@ -1,23 +0,0 @@
-{
- "id": "106801667066418367",
- "username": "benis911",
- "acct": "benis911",
- "display_name": "",
- "locked": false,
- "bot": false,
- "discoverable": null,
- "group": false,
- "created_at": "2021-08-22T00:00:00.000Z",
- "note": "",
- "url": "https://mastodon.social/@benis911",
- "avatar": "https://mastodon.social/avatars/original/missing.png",
- "avatar_static": "https://mastodon.social/avatars/original/missing.png",
- "header": "https://mastodon.social/headers/original/missing.png",
- "header_static": "https://mastodon.social/headers/original/missing.png",
- "followers_count": 1,
- "following_count": 0,
- "statuses_count": 5,
- "last_status_at": "2022-02-23",
- "emojis": [],
- "fields": []
-}
diff --git a/packages/pl-fe/src/__fixtures__/mastodon-instance-rc.json b/packages/pl-fe/src/__fixtures__/mastodon-instance-rc.json
deleted file mode 100644
index 277839d14..000000000
--- a/packages/pl-fe/src/__fixtures__/mastodon-instance-rc.json
+++ /dev/null
@@ -1,123 +0,0 @@
-{
- "uri": "mastodon.social",
- "title": "Mastodon",
- "short_description": "Server run by the main developers of the project It is not focused on any particular niche interest - everyone is welcome as long as you follow our code of conduct!",
- "description": "Server run by the main developers of the project It is not focused on any particular niche interest - everyone is welcome as long as you follow our code of conduct!",
- "email": "staff@mastodon.social",
- "version": "3.5.0rc1",
- "urls": {
- "streaming_api": "wss://mastodon.social"
- },
- "stats": {
- "user_count": 635078,
- "status_count": 34700866,
- "domain_count": 21989
- },
- "thumbnail": "https://files.mastodon.social/site_uploads/files/000/000/001/original/vlcsnap-2018-08-27-16h43m11s127.png",
- "languages": [
- "en"
- ],
- "registrations": true,
- "approval_required": false,
- "invites_enabled": true,
- "configuration": {
- "statuses": {
- "max_characters": 500,
- "max_media_attachments": 4,
- "characters_reserved_per_url": 23
- },
- "media_attachments": {
- "supported_mime_types": [
- "image/jpeg",
- "image/png",
- "image/gif",
- "video/webm",
- "video/mp4",
- "video/quicktime",
- "video/ogg",
- "audio/wave",
- "audio/wav",
- "audio/x-wav",
- "audio/x-pn-wave",
- "audio/ogg",
- "audio/vorbis",
- "audio/mpeg",
- "audio/mp3",
- "audio/webm",
- "audio/flac",
- "audio/aac",
- "audio/m4a",
- "audio/x-m4a",
- "audio/mp4",
- "audio/3gpp",
- "video/x-ms-asf"
- ],
- "image_size_limit": 10485760,
- "image_matrix_limit": 16777216,
- "video_size_limit": 41943040,
- "video_frame_rate_limit": 60,
- "video_matrix_limit": 2304000
- },
- "polls": {
- "max_options": 4,
- "max_characters_per_option": 50,
- "min_expiration": 300,
- "max_expiration": 2629746
- }
- },
- "contact_account": {
- "id": "1",
- "username": "Gargron",
- "acct": "Gargron",
- "display_name": "Eugen",
- "locked": false,
- "bot": false,
- "discoverable": true,
- "group": false,
- "created_at": "2016-03-16T00:00:00.000Z",
- "note": "Founder, CEO and lead developer @Mastodon , Germany.
",
- "url": "https://mastodon.social/@Gargron",
- "avatar": "https://files.mastodon.social/accounts/avatars/000/000/001/original/ccb05a778962e171.png",
- "avatar_static": "https://files.mastodon.social/accounts/avatars/000/000/001/original/ccb05a778962e171.png",
- "header": "https://files.mastodon.social/accounts/headers/000/000/001/original/3b91c9965d00888b.jpeg",
- "header_static": "https://files.mastodon.social/accounts/headers/000/000/001/original/3b91c9965d00888b.jpeg",
- "followers_count": 99760,
- "following_count": 274,
- "statuses_count": 71657,
- "last_status_at": "2022-03-17",
- "emojis": [],
- "fields": [
- {
- "name": "Patreon",
- "value": "https://www. patreon.com/mastodon ",
- "verified_at": null
- }
- ]
- },
- "rules": [
- {
- "id": "1",
- "text": "Sexually explicit or violent media must be marked as sensitive when posting"
- },
- {
- "id": "2",
- "text": "No racism, sexism, homophobia, transphobia, xenophobia, or casteism"
- },
- {
- "id": "3",
- "text": "No incitement of violence or promotion of violent ideologies"
- },
- {
- "id": "4",
- "text": "No harassment, dogpiling or doxxing of other users"
- },
- {
- "id": "5",
- "text": "No content illegal in Germany"
- },
- {
- "id": "7",
- "text": "Do not share intentionally false or misleading information"
- }
- ]
-}
diff --git a/packages/pl-fe/src/__fixtures__/mastodon-instance.json b/packages/pl-fe/src/__fixtures__/mastodon-instance.json
deleted file mode 100644
index 3c8a2f9d3..000000000
--- a/packages/pl-fe/src/__fixtures__/mastodon-instance.json
+++ /dev/null
@@ -1,128 +0,0 @@
-{
- "uri": "mastodon.social",
- "title": "Mastodon",
- "short_description": "Server run by the main developers of the project It is not focused on any particular niche interest - everyone is welcome as long as you follow our code of conduct!",
- "description": "Server run by the main developers of the project It is not focused on any particular niche interest - everyone is welcome as long as you follow our code of conduct!",
- "email": "staff@mastodon.social",
- "version": "3.4.3",
- "urls": {
- "streaming_api": "wss://mastodon.social"
- },
- "stats": {
- "user_count": 619022,
- "status_count": 33914684,
- "domain_count": 21524
- },
- "thumbnail": "https://files.mastodon.social/site_uploads/files/000/000/001/original/vlcsnap-2018-08-27-16h43m11s127.png",
- "languages": [
- "en"
- ],
- "registrations": true,
- "approval_required": false,
- "invites_enabled": true,
- "configuration": {
- "statuses": {
- "max_characters": 500,
- "max_media_attachments": 4,
- "characters_reserved_per_url": 23
- },
- "media_attachments": {
- "supported_mime_types": [
- "image/jpeg",
- "image/png",
- "image/gif",
- "video/webm",
- "video/mp4",
- "video/quicktime",
- "video/ogg",
- "audio/wave",
- "audio/wav",
- "audio/x-wav",
- "audio/x-pn-wave",
- "audio/ogg",
- "audio/vorbis",
- "audio/mpeg",
- "audio/mp3",
- "audio/webm",
- "audio/flac",
- "audio/aac",
- "audio/m4a",
- "audio/x-m4a",
- "audio/mp4",
- "audio/3gpp",
- "video/x-ms-asf"
- ],
- "image_size_limit": 10485760,
- "image_matrix_limit": 16777216,
- "video_size_limit": 41943040,
- "video_frame_rate_limit": 60,
- "video_matrix_limit": 2304000
- },
- "polls": {
- "max_options": 4,
- "max_characters_per_option": 50,
- "min_expiration": 300,
- "max_expiration": 2629746
- }
- },
- "contact_account": {
- "id": "1",
- "username": "Gargron",
- "acct": "Gargron",
- "display_name": "Eugen 🎄",
- "locked": false,
- "bot": false,
- "discoverable": true,
- "group": false,
- "created_at": "2016-03-16T00:00:00.000Z",
- "note": "Founder, CEO and lead developer @Mastodon , Germany.
",
- "url": "https://mastodon.social/@Gargron",
- "avatar": "https://files.mastodon.social/accounts/avatars/000/000/001/original/ccb05a778962e171.png",
- "avatar_static": "https://files.mastodon.social/accounts/avatars/000/000/001/original/ccb05a778962e171.png",
- "header": "https://files.mastodon.social/accounts/headers/000/000/001/original/3b91c9965d00888b.jpeg",
- "header_static": "https://files.mastodon.social/accounts/headers/000/000/001/original/3b91c9965d00888b.jpeg",
- "followers_count": 98343,
- "following_count": 271,
- "statuses_count": 71288,
- "last_status_at": "2022-01-31",
- "emojis": [],
- "fields": [
- {
- "name": "Patreon",
- "value": "https://www. patreon.com/mastodon ",
- "verified_at": null
- },
- {
- "name": "Homepage",
- "value": "https:// zeonfederated.com ",
- "verified_at": "2019-07-15T18:29:57.191+00:00"
- }
- ]
- },
- "rules": [
- {
- "id": "1",
- "text": "Sexually explicit or violent media must be marked as sensitive when posting"
- },
- {
- "id": "2",
- "text": "No racism, sexism, homophobia, transphobia, xenophobia, or casteism"
- },
- {
- "id": "3",
- "text": "No incitement of violence or promotion of violent ideologies"
- },
- {
- "id": "4",
- "text": "No harassment, dogpiling or doxxing of other users"
- },
- {
- "id": "5",
- "text": "No content illegal in Germany"
- },
- {
- "id": "6",
- "text": "No spam, advertising or bot accounts"
- }
- ]
-}
diff --git a/packages/pl-fe/src/__fixtures__/mastodon-reply-to-self.json b/packages/pl-fe/src/__fixtures__/mastodon-reply-to-self.json
deleted file mode 100644
index 7cfc756f3..000000000
--- a/packages/pl-fe/src/__fixtures__/mastodon-reply-to-self.json
+++ /dev/null
@@ -1,51 +0,0 @@
-{
- "id": "107828148293766288",
- "created_at": "2022-02-20T03:16:09.812Z",
- "in_reply_to_id": "107828147870368566",
- "in_reply_to_account_id": "106801667066418367",
- "sensitive": false,
- "spoiler_text": "",
- "visibility": "public",
- "language": "en",
- "uri": "https://mastodon.social/users/benis911/statuses/107828148293766288",
- "url": "https://mastodon.social/@benis911/107828148293766288",
- "replies_count": 0,
- "reblogs_count": 0,
- "favourites_count": 0,
- "edited_at": null,
- "content": "test reply to self
",
- "reblog": null,
- "application": {
- "name": "Soapbox FE",
- "website": "https://soapbox.pub/"
- },
- "account": {
- "id": "106801667066418367",
- "username": "benis911",
- "acct": "benis911",
- "display_name": "",
- "locked": false,
- "bot": false,
- "discoverable": null,
- "group": false,
- "created_at": "2021-08-22T00:00:00.000Z",
- "note": "
",
- "url": "https://mastodon.social/@benis911",
- "avatar": "https://mastodon.social/avatars/original/missing.png",
- "avatar_static": "https://mastodon.social/avatars/original/missing.png",
- "header": "https://mastodon.social/headers/original/missing.png",
- "header_static": "https://mastodon.social/headers/original/missing.png",
- "followers_count": 0,
- "following_count": 0,
- "statuses_count": 3,
- "last_status_at": "2022-02-20",
- "emojis": [],
- "fields": []
- },
- "media_attachments": [],
- "mentions": [],
- "tags": [],
- "emojis": [],
- "card": null,
- "poll": null
-}
diff --git a/packages/pl-fe/src/__fixtures__/mastodon_initial_state.json b/packages/pl-fe/src/__fixtures__/mastodon_initial_state.json
deleted file mode 100644
index 521285683..000000000
--- a/packages/pl-fe/src/__fixtures__/mastodon_initial_state.json
+++ /dev/null
@@ -1,228 +0,0 @@
-{
- "meta": {
- "streaming_api_base_url": "wss://mastodon.social",
- "access_token": "Nh15V9JWyY5Fshf2OJ_feNvOIkTV7YGVfEJFr0Y0D6Q",
- "locale": "en",
- "domain": "mastodon.social",
- "title": "Mastodon",
- "admin": "1",
- "search_enabled": true,
- "repository": "mastodon/mastodon",
- "source_url": "https://github.com/mastodon/mastodon",
- "version": "3.4.1",
- "invites_enabled": true,
- "limited_federation_mode": false,
- "mascot": null,
- "profile_directory": true,
- "trends": true,
- "me": "106801667066418367",
- "unfollow_modal": false,
- "boost_modal": false,
- "delete_modal": true,
- "auto_play_gif": false,
- "display_media": "default",
- "expand_spoilers": false,
- "reduce_motion": false,
- "disable_swiping": false,
- "advanced_layout": false,
- "use_blurhash": true,
- "use_pending_items": false,
- "is_staff": false,
- "crop_images": true
- },
- "compose": {
- "me": "106801667066418367",
- "default_privacy": "public",
- "default_sensitive": false,
- "text": ""
- },
- "accounts": {
- "1": {
- "id": "1",
- "username": "Gargron",
- "acct": "Gargron",
- "display_name": "Eugen",
- "locked": false,
- "bot": false,
- "discoverable": true,
- "group": false,
- "created_at": "2016-03-16T00:00:00.000Z",
- "note": "\\u003cp\\u003eDeveloper of Mastodon and administrator of mastodon.social. I post service announcements, development updates, and personal stuff.\\u003c/p\\u003e",
- "url": "https://mastodon.social/@Gargron",
- "avatar": "https://files.mastodon.social/accounts/avatars/000/000/001/original/d96d39a0abb45b92.jpg",
- "avatar_static": "https://files.mastodon.social/accounts/avatars/000/000/001/original/d96d39a0abb45b92.jpg",
- "header": "https://files.mastodon.social/accounts/headers/000/000/001/original/c91b871f294ea63e.png",
- "header_static": "https://files.mastodon.social/accounts/headers/000/000/001/original/c91b871f294ea63e.png",
- "followers_count": 469426,
- "following_count": 459,
- "statuses_count": 70336,
- "last_status_at": "2021-09-15",
- "emojis": [],
- "fields": [
- {
- "name": "Patreon",
- "value": "\\u003ca href=\"https://www.patreon.com/mastodon\" rel=\"me nofollow noopener noreferrer\" target=\"_blank\"\\u003e\\u003cspan class=\"invisible\"\\u003ehttps://www.\\u003c/span\\u003e\\u003cspan class=\"\"\\u003epatreon.com/mastodon\\u003c/span\\u003e\\u003cspan class=\"invisible\"\\u003e\\u003c/span\\u003e\\u003c/a\\u003e",
- "verified_at": null
- },
- {
- "name": "Homepage",
- "value": "\\u003ca href=\"https://zeonfederated.com\" rel=\"me nofollow noopener noreferrer\" target=\"_blank\"\\u003e\\u003cspan class=\"invisible\"\\u003ehttps://\\u003c/span\\u003e\\u003cspan class=\"\"\\u003ezeonfederated.com\\u003c/span\\u003e\\u003cspan class=\"invisible\"\\u003e\\u003c/span\\u003e\\u003c/a\\u003e",
- "verified_at": "2019-07-15T18:29:57.191+00:00"
- }
- ]
- },
- "106801667066418367": {
- "id": "106801667066418367",
- "username": "benis911",
- "acct": "benis911",
- "display_name": "",
- "locked": false,
- "bot": false,
- "discoverable": null,
- "group": false,
- "created_at": "2021-08-22T00:00:00.000Z",
- "note": "\\u003cp\\u003e\\u003c/p\\u003e",
- "url": "https://mastodon.social/@benis911",
- "avatar": "https://mastodon.social/avatars/original/missing.png",
- "avatar_static": "https://mastodon.social/avatars/original/missing.png",
- "header": "https://mastodon.social/headers/original/missing.png",
- "header_static": "https://mastodon.social/headers/original/missing.png",
- "followers_count": 0,
- "following_count": 0,
- "statuses_count": 0,
- "last_status_at": null,
- "emojis": [],
- "fields": []
- }
- },
- "media_attachments": {
- "accept_content_types": [
- ".jpg",
- ".jpeg",
- ".png",
- ".gif",
- ".webm",
- ".mp4",
- ".m4v",
- ".mov",
- ".ogg",
- ".oga",
- ".mp3",
- ".wav",
- ".flac",
- ".opus",
- ".aac",
- ".m4a",
- ".3gp",
- ".wma",
- "image/jpeg",
- "image/png",
- "image/gif",
- "video/webm",
- "video/mp4",
- "video/quicktime",
- "video/ogg",
- "audio/wave",
- "audio/wav",
- "audio/x-wav",
- "audio/x-pn-wave",
- "audio/ogg",
- "audio/mpeg",
- "audio/mp3",
- "audio/webm",
- "audio/flac",
- "audio/aac",
- "audio/m4a",
- "audio/x-m4a",
- "audio/mp4",
- "audio/3gpp",
- "video/x-ms-asf"
- ]
- },
- "settings": {
- "known_fediverse": false,
- "notifications": {
- "alerts": {
- "follow": false,
- "follow_request": false,
- "favourite": false,
- "reblog": false,
- "mention": false,
- "poll": false,
- "status": false
- },
- "quickFilter": {
- "active": "all",
- "show": true,
- "advanced": false
- },
- "dismissPermissionBanner": false,
- "showUnread": true,
- "shows": {
- "follow": true,
- "follow_request": false,
- "favourite": true,
- "reblog": true,
- "mention": true,
- "poll": true,
- "status": true
- },
- "sounds": {
- "follow": true,
- "follow_request": false,
- "favourite": true,
- "reblog": true,
- "mention": true,
- "poll": true,
- "status": true
- }
- },
- "public": {
- "regex": {
- "body": ""
- }
- },
- "direct": {
- "regex": {
- "body": ""
- }
- },
- "community": {
- "regex": {
- "body": ""
- }
- },
- "skinTone": 1,
- "trends": {
- "show": true
- },
- "columns": [
- {
- "id": "COMPOSE",
- "uuid": "b6dce3ed-c6cc-4446-8981-f08f8461ae8d",
- "params": {}
- },
- {
- "id": "HOME",
- "uuid": "e89b270b-6e79-4956-98fb-e8bf0aff098c",
- "params": {}
- },
- {
- "id": "NOTIFICATIONS",
- "uuid": "d359cdfa-e074-44ba-bde5-f46867a3bca6",
- "params": {}
- }
- ],
- "introductionVersion": 20181216044202,
- "home": {
- "shows": {
- "reblog": true,
- "reply": true
- },
- "regex": {
- "body": ""
- }
- }
- },
- "push_subscription": null
-}
diff --git a/packages/pl-fe/src/__fixtures__/mitra-context.json b/packages/pl-fe/src/__fixtures__/mitra-context.json
deleted file mode 100644
index 91b48420c..000000000
--- a/packages/pl-fe/src/__fixtures__/mitra-context.json
+++ /dev/null
@@ -1,107 +0,0 @@
-[
- {
- "id": "017ed503-bc96-301a-e871-2c23b30ddd05",
- "uri": "https://mitra.social/objects/017ed503-bc96-301a-e871-2c23b30ddd05",
- "created_at": "2022-02-07T16:28:18.966874Z",
- "account": {
- "id": "017ed4f9-c121-2ae6-0805-15516cce02c3",
- "username": "alex",
- "acct": "alex",
- "url": "https://mitra.social/users/alex",
- "display_name": null,
- "created_at": "2022-02-07T16:17:24.769229Z",
- "note": null,
- "avatar": null,
- "header": null,
- "fields": [],
- "followers_count": 1,
- "following_count": 1,
- "statuses_count": 3,
- "source": null,
- "wallet_address": null
- },
- "content": "@silverpill sup!",
- "in_reply_to_id": null,
- "reblog": null,
- "visibility": "public",
- "replies_count": 1,
- "favourites_count": 0,
- "reblogs_count": 0,
- "media_attachments": [],
- "mentions": [
- {
- "id": "dd4ebc18-269d-4c7b-a310-03d29c6ab551",
- "username": "silverpill",
- "acct": "silverpill",
- "url": "https://mitra.social/users/silverpill"
- }
- ],
- "tags": [],
- "favourited": false,
- "reblogged": false,
- "ipfs_cid": null,
- "token_id": null,
- "token_tx_id": null
- },
- {
- "id": "017ed505-5926-392f-256a-f86d5075df70",
- "uri": "https://mitra.social/objects/017ed505-5926-392f-256a-f86d5075df70",
- "created_at": "2022-02-07T16:30:04.582771Z",
- "account": {
- "id": "dd4ebc18-269d-4c7b-a310-03d29c6ab551",
- "username": "silverpill",
- "acct": "silverpill",
- "url": "https://mitra.social/users/silverpill",
- "display_name": "silverpill",
- "created_at": "2021-11-06T21:08:57.441927Z",
- "note": "Admin of mitra.social instance. It is running experimental ActivityPub server Mitra .",
- "avatar": "https://mitra.social/media/6a785bf7dd05f61c3590e8935aa49156a499ac30fd1e402f79e7e164adb36e2c.png",
- "header": null,
- "fields": [
- {
- "name": "Matrix",
- "value": "@silverpill:poa.st"
- },
- {
- "name": "Alt",
- "value": "@silverpill@poa.st"
- },
- {
- "name": "Code",
- "value": "https://codeberg.org/silverpill/ "
- },
- {
- "name": "$XMR",
- "value": "884y9LmsWY7PQNsyR7bJy1dvj91tuF5spVabyCnPk4KfQtSuzFbQobTFC7xSemJgVW1FWAwnJbjTZX5zZWbBrfkv62DB62d"
- }
- ],
- "followers_count": 27,
- "following_count": 15,
- "statuses_count": 110,
- "source": null,
- "wallet_address": null
- },
- "content": "@alex welcome",
- "in_reply_to_id": "017ed503-bc96-301a-e871-2c23b30ddd05",
- "reblog": null,
- "visibility": "public",
- "replies_count": 0,
- "favourites_count": 1,
- "reblogs_count": 0,
- "media_attachments": [],
- "mentions": [
- {
- "id": "017ed4f9-c121-2ae6-0805-15516cce02c3",
- "username": "alex",
- "acct": "alex",
- "url": "https://mitra.social/users/alex"
- }
- ],
- "tags": [],
- "favourited": true,
- "reblogged": false,
- "ipfs_cid": null,
- "token_id": null,
- "token_tx_id": null
- }
-]
diff --git a/packages/pl-fe/src/__fixtures__/mitra-instance.json b/packages/pl-fe/src/__fixtures__/mitra-instance.json
deleted file mode 100644
index 2c476ba30..000000000
--- a/packages/pl-fe/src/__fixtures__/mitra-instance.json
+++ /dev/null
@@ -1,13 +0,0 @@
-{
- "uri": "mitra.social",
- "title": "Mitra",
- "short_description": "Federated social network with smart contracts",
- "description": "This is an instance of [Mitra](https://codeberg.org/silverpill/mitra), federated social network built on [ActivityPub](https://activitypub.rocks/) protocol.\nRegistration is invitation-only.\nAdmin:\n - [@silverpill@mitra.social](https://mitra.social/profile/dd4ebc18-269d-4c7b-a310-03d29c6ab551)\n - Matrix: @silverpill:poa.st\n",
- "version": "3.0.0 (compatible; Mitra 0.4.0)",
- "registrations": false,
- "login_message": "Sign this message to log in to https://mitra.social. Do not sign this message on other sites!",
- "post_character_limit": 5000,
- "blockchain_explorer_url": null,
- "blockchain_contract_address": null,
- "ipfs_gateway_url": "https://ipfs.mitra.social"
-}
diff --git a/packages/pl-fe/src/__fixtures__/mitra-status-with-attachments.json b/packages/pl-fe/src/__fixtures__/mitra-status-with-attachments.json
deleted file mode 100644
index 689e4d3bb..000000000
--- a/packages/pl-fe/src/__fixtures__/mitra-status-with-attachments.json
+++ /dev/null
@@ -1,95 +0,0 @@
-{
- "id": "017eeb0e-e5e7-98fe-6b2b-ad02349251fb",
- "uri": "https://gleasonator.com/objects/aa5e66c9-0a10-4167-9c80-f40d9574aaec",
- "created_at": "2022-02-11T23:11:59.891770Z",
- "account": {
- "id": "8fe4d6ed-3a99-43e1-a7d4-66b4e635f756",
- "username": "alex",
- "acct": "alex@gleasonator.com",
- "url": "https://gleasonator.com/users/alex",
- "display_name": "Alex Gleason",
- "created_at": "2021-11-14T17:01:17.446307Z",
- "note": "I create Fediverse software that empowers people online. I'm vegan btw Note: If you have a question for me, please tag me publicly. This gives the opportunity for others to chime in, and bystanders to learn.",
- "avatar": "https://mitra.social/media/6d64aecb17348b23aaff78db4687b9476cb0da1c07cc6a819c2e6ec7144c18b1.png",
- "header": "https://mitra.social/media/bdfb009adac0e31257e9fe527d3844a7234cc71f6e06dff2bec94354639555dd.png",
- "fields": [
- {
- "name": "Website",
- "value": "https://alexgleason.me "
- },
- {
- "name": "Pleroma+Soapbox",
- "value": "https://soapbox.pub "
- },
- {
- "name": "Email",
- "value": "alex@alexgleason.me"
- },
- {
- "name": "Gender identity",
- "value": "Soyboy"
- },
- {
- "name": "Donate (PayPal)",
- "value": "https://paypal.me/gleasonator "
- },
- {
- "name": "$BTC",
- "value": "bc1q9cx35adpm73aq2fw40ye6ts8hfxqzjr5unwg0n"
- },
- {
- "name": "$ETH",
- "value": "0xAc9aB5Fc04Dc1cB1789Af75b523Bd23C70B2D717"
- },
- {
- "name": "$DOGE",
- "value": "D5zVZs6jrRakaPVGiErkQiHt9sayzm6V5D"
- },
- {
- "name": "$XMR",
- "value": "45JDCLrjJ4bgVUSbbs2yjy9m5Mf4VLPW8fG7jw9sq5u69rXZZopQogZNeyYkMBnXpkaip4p4QwaaJNhdTotPa9g44DBCzdK"
- }
- ],
- "followers_count": 2,
- "following_count": 2,
- "statuses_count": 970,
- "source": null,
- "wallet_address": null
- },
- "content": "Test
",
- "in_reply_to_id": null,
- "reblog": null,
- "visibility": "public",
- "replies_count": 0,
- "favourites_count": 0,
- "reblogs_count": 0,
- "media_attachments": [
- {
- "id": "017eeb0e-e5df-30a4-77a7-a929145cb836",
- "type": "image",
- "url": "https://mitra.social/media/8e04e6091bbbac79641b5812508683ce72c38693661c18d16040553f2371e18d.png"
- },
- {
- "id": "017eeb0e-e5e4-2a48-2889-afdebf368a54",
- "type": "unknown",
- "url": "https://mitra.social/media/8f72dc2e98572eb4ba7c3a902bca5f69c448fc4391837e5f8f0d4556280440ac"
- },
- {
- "id": "017eeb0e-e5e5-79fd-6054-8b6869b1db49",
- "type": "unknown",
- "url": "https://mitra.social/media/55a81a090247cc4fc127e5716bcf7964f6e0df9b584f85f4696c0b994747a4d0.oga"
- },
- {
- "id": "017eeb0e-e5e6-c416-a444-21e560c47839",
- "type": "unknown",
- "url": "https://mitra.social/media/0d96a4ff68ad6d4b6f1f30f713b18d5184912ba8dd389f86aa7710db079abcb0"
- }
- ],
- "mentions": [],
- "tags": [],
- "favourited": false,
- "reblogged": false,
- "ipfs_cid": null,
- "token_id": null,
- "token_tx_id": null
-}
diff --git a/packages/pl-fe/src/__fixtures__/mk.json b/packages/pl-fe/src/__fixtures__/mk.json
deleted file mode 100644
index a7c841f1e..000000000
--- a/packages/pl-fe/src/__fixtures__/mk.json
+++ /dev/null
@@ -1,123 +0,0 @@
-{
- "acct": "mk",
- "avatar": "https://media.spinster.xyz/4043b9fb3f9d468aa48a8d68294f338914d9d54b2816aa1c789f548efe6c6239.jpg",
- "avatar_static": "https://media.spinster.xyz/4043b9fb3f9d468aa48a8d68294f338914d9d54b2816aa1c789f548efe6c6239.jpg",
- "bot": false,
- "created_at": "2019-08-01T22:06:30.000Z",
- "display_name": "M. K. Fain",
- "emojis": [
- {
- "shortcode": "4w",
- "static_url": "https://spinster.xyz/emoji/custom/4w.png",
- "url": "https://spinster.xyz/emoji/custom/4w.png",
- "visible_in_picker": false
- },
- {
- "shortcode": "spinster",
- "static_url": "https://spinster.xyz/emoji/custom/spinster.png",
- "url": "https://spinster.xyz/emoji/custom/spinster.png",
- "visible_in_picker": false
- }
- ],
- "fields": [
- {
- "name": "Website",
- "value": "https://marykatefain.com "
- },
- {
- "name": "Twitter",
- "value": "https://twitter.com/mkay_fain "
- },
- {
- "name": "Patreon",
- "value": "https://www.patreon.com/mkfain "
- },
- {
- "name": "Paypal",
- "value": "https://www.paypal.com/donate?hosted_button_id=NYXHYFQ6CRWJJ "
- },
- {
- "name": "Facebook",
- "value": "https://www.facebook.com/M-K-Fain-102559968375112 "
- },
- {
- "name": "Dog Pics",
- "value": "https://www.instagram.com/mmkaayyy92 "
- },
- {
- "name": "$BTC",
- "value": "bc1q7fp347muhnuxrtu0pft6eswn0e7pldhssdg8py"
- }
- ],
- "followers_count": 5687,
- "following_count": 18017,
- "fqn": "mk@spinster.xyz",
- "header": "https://media.spinster.xyz/3a5f9d5ef06940d0c319f8f0135b1153a8a42cefd10eace97378875c0347da71.png",
- "header_static": "https://media.spinster.xyz/3a5f9d5ef06940d0c319f8f0135b1153a8a42cefd10eace97378875c0347da71.png",
- "id": "9y4BZYXEDuQ6K1zW9g",
- "last_status_at": "2022-02-27T01:58:21",
- "locked": false,
- "note": ":spinster: Admin of @spinster :4w: Editor of @4WPub Sorry I didn't reply to you. Boost ≠ agree. All opinions my own.",
- "pleroma": {
- "accepts_chat_messages": true,
- "also_known_as": [],
- "ap_id": "https://spinster.xyz/users/mk",
- "background_image": null,
- "favicon": "https://spinster.xyz/favicon.png",
- "hide_favorites": true,
- "hide_followers": false,
- "hide_followers_count": false,
- "hide_follows": false,
- "hide_follows_count": false,
- "is_admin": true,
- "is_confirmed": true,
- "is_moderator": false,
- "is_suggested": true,
- "relationship": {},
- "skip_thread_containment": false,
- "tags": [
- "verified"
- ]
- },
- "source": {
- "fields": [
- {
- "name": "Website",
- "value": "https://marykatefain.com"
- },
- {
- "name": "Twitter",
- "value": "https://twitter.com/mkay_fain"
- },
- {
- "name": "Patreon",
- "value": "https://www.patreon.com/mkfain"
- },
- {
- "name": "Paypal",
- "value": "https://www.paypal.com/donate?hosted_button_id=NYXHYFQ6CRWJJ"
- },
- {
- "name": "Facebook",
- "value": "https://www.facebook.com/M-K-Fain-102559968375112"
- },
- {
- "name": "Dog Pics",
- "value": "https://www.instagram.com/mmkaayyy92"
- },
- {
- "name": "$BTC",
- "value": "bc1q7fp347muhnuxrtu0pft6eswn0e7pldhssdg8py"
- }
- ],
- "note": ":spinster: Admin of @spinster\r\n:4w: Editor of @4WPub\r\n\r\nSorry I didn't reply to you.\r\n\r\nBoost ≠ agree. All opinions my own.",
- "pleroma": {
- "actor_type": "Person",
- "discoverable": false
- },
- "sensitive": false
- },
- "statuses_count": 9580,
- "url": "https://spinster.xyz/users/mk",
- "username": "mk"
-}
diff --git a/packages/pl-fe/src/__fixtures__/notification-favourite.json b/packages/pl-fe/src/__fixtures__/notification-favourite.json
deleted file mode 100644
index 00da9c8f9..000000000
--- a/packages/pl-fe/src/__fixtures__/notification-favourite.json
+++ /dev/null
@@ -1,290 +0,0 @@
-{
- "account": {
- "acct": "Hollahollara@spinster.xyz",
- "avatar": "https://gleasonator.com/proxy/LArKQiIrW265rGIJGwdgX7rRsao/aHR0cHM6Ly9tZWRpYS5zcGluc3Rlci54eXovYWNjb3VudHMvYXZhdGFycy8wMDAvMTQxLzI5NC9vcmlnaW5hbC9lNjA1NjljMjBjNGY3ODNjLnBuZw/e60569c20c4f783c.png",
- "avatar_static": "https://gleasonator.com/proxy/LArKQiIrW265rGIJGwdgX7rRsao/aHR0cHM6Ly9tZWRpYS5zcGluc3Rlci54eXovYWNjb3VudHMvYXZhdGFycy8wMDAvMTQxLzI5NC9vcmlnaW5hbC9lNjA1NjljMjBjNGY3ODNjLnBuZw/e60569c20c4f783c.png",
- "bot": false,
- "created_at": "2020-05-29T03:15:59.000Z",
- "display_name": "Hollahollara",
- "emojis": [],
- "fields": [],
- "followers_count": 0,
- "following_count": 0,
- "fqn": "Hollahollara@spinster.xyz",
- "header": "https://gleasonator.com/proxy/XSANC57uDBL3tM0LBLEer7yMyaA/aHR0cHM6Ly9tZWRpYS5zcGluc3Rlci54eXovYWNjb3VudHMvaGVhZGVycy8wMDAvMTQxLzI5NC9vcmlnaW5hbC84NTMzMWEzMjJkMTIyN2Q0LnBuZw/85331a322d1227d4.png",
- "header_static": "https://gleasonator.com/proxy/XSANC57uDBL3tM0LBLEer7yMyaA/aHR0cHM6Ly9tZWRpYS5zcGluc3Rlci54eXovYWNjb3VudHMvaGVhZGVycy8wMDAvMTQxLzI5NC9vcmlnaW5hbC84NTMzMWEzMjJkMTIyN2Q0LnBuZw/85331a322d1227d4.png",
- "id": "9vWfJdLwuJSyJXqCeG",
- "last_status_at": "2022-04-16T20:33:32",
- "locked": true,
- "note": "Adult human female. Artist. Evil terv. Millennial, killing all the things. Public Universal Friend.www.jenniferaldridge.com ",
- "pleroma": {
- "accepts_chat_messages": true,
- "also_known_as": [],
- "ap_id": "https://spinster.xyz/users/Hollahollara",
- "background_image": null,
- "deactivated": false,
- "favicon": "https://gleasonator.com/proxy/owo6QgsHm_0ogz5enHyvD68wDUA/aHR0cHM6Ly9zcGluc3Rlci54eXovZmF2aWNvbi5wbmc/favicon.png",
- "hide_favorites": true,
- "hide_followers": true,
- "hide_followers_count": false,
- "hide_follows": true,
- "hide_follows_count": false,
- "is_admin": false,
- "is_confirmed": true,
- "is_moderator": false,
- "is_suggested": false,
- "location": null,
- "relationship": {},
- "skip_thread_containment": false,
- "tags": []
- },
- "source": {
- "fields": [],
- "note": "",
- "pleroma": {
- "actor_type": "Person",
- "discoverable": false
- },
- "sensitive": false
- },
- "statuses_count": 7191,
- "url": "https://spinster.xyz/users/Hollahollara",
- "username": "Hollahollara"
- },
- "created_at": "2022-04-14T20:36:52.000Z",
- "id": "427825",
- "pleroma": {
- "is_muted": false,
- "is_seen": true
- },
- "status": {
- "account": {
- "acct": "alex",
- "avatar": "https://media.gleasonator.com/6d64aecb17348b23aaff78db4687b9476cb0da1c07cc6a819c2e6ec7144c18b1.png",
- "avatar_static": "https://media.gleasonator.com/6d64aecb17348b23aaff78db4687b9476cb0da1c07cc6a819c2e6ec7144c18b1.png",
- "bot": false,
- "created_at": "2020-01-08T01:25:43.000Z",
- "display_name": "Alex Gleason",
- "emojis": [],
- "fields": [
- {
- "name": "Website",
- "value": "https://alexgleason.me "
- },
- {
- "name": "Soapbox",
- "value": "https://soapbox.pub "
- },
- {
- "name": "Email",
- "value": "alex@alexgleason.me"
- },
- {
- "name": "Gender identity",
- "value": "Soyboy"
- },
- {
- "name": "Donate (PayPal)",
- "value": "https://paypal.me/gleasonator "
- },
- {
- "name": "$BTC",
- "value": "bc1q9cx35adpm73aq2fw40ye6ts8hfxqzjr5unwg0n"
- },
- {
- "name": "$ETH",
- "value": "0xAc9aB5Fc04Dc1cB1789Af75b523Bd23C70B2D717"
- },
- {
- "name": "$DOGE",
- "value": "D5zVZs6jrRakaPVGiErkQiHt9sayzm6V5D"
- },
- {
- "name": "$XMR",
- "value": "45JDCLrjJ4bgVUSbbs2yjy9m5Mf4VLPW8fG7jw9sq5u69rXZZopQogZNeyYkMBnXpkaip4p4QwaaJNhdTotPa9g44DBCzdK"
- }
- ],
- "follow_requests_count": 0,
- "followers_count": 2602,
- "following_count": 1603,
- "fqn": "alex@gleasonator.com",
- "header": "https://media.gleasonator.com/accounts/headers/000/000/001/original/9d0e4dbf1c9dbc8f.png",
- "header_static": "https://media.gleasonator.com/accounts/headers/000/000/001/original/9d0e4dbf1c9dbc8f.png",
- "id": "9v5bmRalQvjOy0ECcC",
- "last_status_at": "2022-04-16T19:23:50",
- "locked": false,
- "note": "I create Fediverse software that empowers people online. I'm vegan btw Note: If you have a question for me, please tag me publicly. This gives the opportunity for others to chime in, and bystanders to learn.",
- "pleroma": {
- "accepts_chat_messages": true,
- "accepts_email_list": true,
- "allow_following_move": true,
- "also_known_as": [
- "https://mitra.social/users/alex"
- ],
- "ap_id": "https://gleasonator.com/users/alex",
- "background_image": null,
- "birthday": "1993-07-03",
- "deactivated": false,
- "email": "alex@alexgleason.me",
- "favicon": "https://gleasonator.com/favicon.png",
- "hide_favorites": true,
- "hide_followers": false,
- "hide_followers_count": false,
- "hide_follows": false,
- "hide_follows_count": false,
- "is_admin": true,
- "is_confirmed": true,
- "is_moderator": false,
- "is_suggested": true,
- "location": "Texas",
- "notification_settings": {
- "block_from_strangers": false,
- "hide_notification_contents": false
- },
- "relationship": {},
- "skip_thread_containment": false,
- "tags": [],
- "unread_conversation_count": 392,
- "unread_notifications_count": 2
- },
- "source": {
- "fields": [
- {
- "name": "Website",
- "value": "https://alexgleason.me"
- },
- {
- "name": "Soapbox",
- "value": "https://soapbox.pub"
- },
- {
- "name": "Email",
- "value": "alex@alexgleason.me"
- },
- {
- "name": "Gender identity",
- "value": "Soyboy"
- },
- {
- "name": "Donate (PayPal)",
- "value": "https://paypal.me/gleasonator"
- },
- {
- "name": "$BTC",
- "value": "bc1q9cx35adpm73aq2fw40ye6ts8hfxqzjr5unwg0n"
- },
- {
- "name": "$ETH",
- "value": "0xAc9aB5Fc04Dc1cB1789Af75b523Bd23C70B2D717"
- },
- {
- "name": "$DOGE",
- "value": "D5zVZs6jrRakaPVGiErkQiHt9sayzm6V5D"
- },
- {
- "name": "$XMR",
- "value": "45JDCLrjJ4bgVUSbbs2yjy9m5Mf4VLPW8fG7jw9sq5u69rXZZopQogZNeyYkMBnXpkaip4p4QwaaJNhdTotPa9g44DBCzdK"
- }
- ],
- "note": "I create Fediverse software that empowers people online.\r\n\r\nI'm vegan btw\r\n\r\nNote: If you have a question for me, please tag me publicly. This gives the opportunity for others to chime in, and bystanders to learn.",
- "pleroma": {
- "actor_type": "Person",
- "discoverable": false,
- "no_rich_text": false,
- "show_birthday": true,
- "show_role": true
- },
- "privacy": "public",
- "sensitive": false
- },
- "statuses_count": 24050,
- "url": "https://gleasonator.com/users/alex",
- "username": "alex"
- },
- "application": {
- "name": "Soapbox FE",
- "website": "https://soapbox.pub/"
- },
- "bookmarked": false,
- "card": null,
- "content": "",
- "created_at": "2022-04-12T01:31:00.000Z",
- "emojis": [],
- "favourited": false,
- "favourites_count": 11,
- "id": "AIMEslRcKrcu02D3HU",
- "in_reply_to_account_id": null,
- "in_reply_to_id": null,
- "language": null,
- "media_attachments": [
- {
- "blurhash": "etMZzVWq%1%1o#_NayWCofae_Ns:R*kDjYS5a{jYoJj]V@a}WBbGof",
- "description": "",
- "id": "AIMEqtBeZtvpQvqfIG",
- "meta": {
- "original": {
- "aspect": 0.9726443768996961,
- "height": 658,
- "width": 640
- }
- },
- "pleroma": {
- "mime_type": "image/jpeg"
- },
- "preview_url": "https://media.gleasonator.com/6c0a1d878b7c9d1d737f415645cf34cdacdf6438c468348f4fa7534a15798023.jpg",
- "remote_url": "https://media.gleasonator.com/6c0a1d878b7c9d1d737f415645cf34cdacdf6438c468348f4fa7534a15798023.jpg",
- "text_url": "https://media.gleasonator.com/6c0a1d878b7c9d1d737f415645cf34cdacdf6438c468348f4fa7534a15798023.jpg",
- "type": "image",
- "url": "https://media.gleasonator.com/6c0a1d878b7c9d1d737f415645cf34cdacdf6438c468348f4fa7534a15798023.jpg"
- }
- ],
- "mentions": [],
- "muted": false,
- "pinned": false,
- "pleroma": {
- "content": {
- "text/plain": ""
- },
- "content_type": null,
- "conversation_id": "AIMEslPqRSCzuXNdWC",
- "direct_conversation_id": null,
- "emoji_reactions": [
- {
- "count": 4,
- "me": false,
- "name": "😆"
- },
- {
- "count": 1,
- "me": false,
- "name": "🤢"
- }
- ],
- "expires_at": null,
- "in_reply_to_account_acct": null,
- "local": true,
- "parent_visible": false,
- "pinned_at": null,
- "quote": null,
- "quote_url": null,
- "quote_visible": false,
- "spoiler_text": {
- "text/plain": ""
- },
- "thread_muted": false
- },
- "poll": null,
- "reblog": null,
- "reblogged": false,
- "reblogs_count": 4,
- "replies_count": 0,
- "sensitive": false,
- "spoiler_text": "",
- "tags": [],
- "text": null,
- "uri": "https://gleasonator.com/objects/7953f9fb-d3d7-4f50-b9d8-27e311ac1f5e",
- "url": "https://gleasonator.com/notice/AIMEslRcKrcu02D3HU",
- "visibility": "public"
- },
- "type": "favourite"
-}
diff --git a/packages/pl-fe/src/__fixtures__/notification-follow.json b/packages/pl-fe/src/__fixtures__/notification-follow.json
deleted file mode 100644
index f563646ad..000000000
--- a/packages/pl-fe/src/__fixtures__/notification-follow.json
+++ /dev/null
@@ -1,61 +0,0 @@
-{
- "account": {
- "acct": "neko@rdrama.cc",
- "avatar": "https://gleasonator.com/proxy/QJ3einzsXdobgWPsyZowxnor1zY/aHR0cHM6Ly9yZHJhbWEuY2MvbWVkaWEvODcyNDhjYjctZWYwNC00ZThjLWEwYzEtNTYxNWMyNWM0MTk1L2Jsb2I/blob",
- "avatar_static": "https://gleasonator.com/proxy/QJ3einzsXdobgWPsyZowxnor1zY/aHR0cHM6Ly9yZHJhbWEuY2MvbWVkaWEvODcyNDhjYjctZWYwNC00ZThjLWEwYzEtNTYxNWMyNWM0MTk1L2Jsb2I/blob",
- "bot": false,
- "created_at": "2022-04-16T20:23:16.000Z",
- "display_name": "Nekobit",
- "emojis": [],
- "fields": [],
- "followers_count": 19,
- "following_count": 357,
- "fqn": "neko@rdrama.cc",
- "header": "https://gleasonator.com/proxy/ojpBSVKfePvLnb7pwqepQspzIko/aHR0cHM6Ly9yZHJhbWEuY2MvbWVkaWEvNjBkMTJjOWYtOTNkNi00ODBmLThhMGUtMTE3M2ZkNjg5MzhmL3dhbGxwYXBlcmZsYXJlLmNvbV93YWxscGFwZXItd2ViLmpwZw/wallpaperflare.com_wallpaper-web.jpg",
- "header_static": "https://gleasonator.com/proxy/ojpBSVKfePvLnb7pwqepQspzIko/aHR0cHM6Ly9yZHJhbWEuY2MvbWVkaWEvNjBkMTJjOWYtOTNkNi00ODBmLThhMGUtMTE3M2ZkNjg5MzhmL3dhbGxwYXBlcmZsYXJlLmNvbV93YWxscGFwZXItd2ViLmpwZw/wallpaperflare.com_wallpaper-web.jpg",
- "id": "AIW9zGESDwdT27vk0W",
- "last_status_at": "2022-04-16T21:49:29",
- "locked": false,
- "note": "New instance, hello! Please follow if you followed my desuposter.club alt",
- "pleroma": {
- "accepts_chat_messages": true,
- "also_known_as": [],
- "ap_id": "https://rdrama.cc/users/neko",
- "background_image": null,
- "deactivated": false,
- "favicon": "https://gleasonator.com/proxy/dbCdmChqVRi0vjYTCpRj5lDLtNM/aHR0cHM6Ly9yZHJhbWEuY2MvZmF2aWNvbi5wbmc/favicon.png",
- "hide_favorites": true,
- "hide_followers": false,
- "hide_followers_count": false,
- "hide_follows": false,
- "hide_follows_count": false,
- "is_admin": false,
- "is_confirmed": true,
- "is_moderator": false,
- "is_suggested": false,
- "location": null,
- "relationship": {},
- "skip_thread_containment": false,
- "tags": []
- },
- "source": {
- "fields": [],
- "note": "",
- "pleroma": {
- "actor_type": "Person",
- "discoverable": false
- },
- "sensitive": false
- },
- "statuses_count": 6,
- "url": "https://rdrama.cc/users/neko",
- "username": "neko"
- },
- "created_at": "2022-04-16T20:24:03.000Z",
- "id": "429280",
- "pleroma": {
- "is_muted": false,
- "is_seen": true
- },
- "type": "follow"
-}
diff --git a/packages/pl-fe/src/__fixtures__/notification-follow_request.json b/packages/pl-fe/src/__fixtures__/notification-follow_request.json
deleted file mode 100644
index 391dfec50..000000000
--- a/packages/pl-fe/src/__fixtures__/notification-follow_request.json
+++ /dev/null
@@ -1,61 +0,0 @@
-{
- "account": {
- "acct": "alex@spinster.xyz",
- "avatar": "https://gleasonator.com/images/avi.png",
- "avatar_static": "https://gleasonator.com/images/avi.png",
- "bot": false,
- "created_at": "2020-01-08T03:08:22.000Z",
- "display_name": "**MOVED**",
- "emojis": [],
- "fields": [],
- "followers_count": 1005,
- "following_count": 724,
- "fqn": "alex@spinster.xyz",
- "header": "https://gleasonator.com/proxy/yxa7ucolLFAsmBHYJzksSh_zoao/aHR0cHM6Ly9tZWRpYS5zcGluc3Rlci54eXovYWNjb3VudHMvaGVhZGVycy8wMDAvMDAwLzAwMS9vcmlnaW5hbC83ZmE4MWY5ZmZiYWVjZDk3LnBuZw/7fa81f9ffbaecd97.png",
- "header_static": "https://gleasonator.com/proxy/yxa7ucolLFAsmBHYJzksSh_zoao/aHR0cHM6Ly9tZWRpYS5zcGluc3Rlci54eXovYWNjb3VudHMvaGVhZGVycy8wMDAvMDAwLzAwMS9vcmlnaW5hbC83ZmE4MWY5ZmZiYWVjZDk3LnBuZw/7fa81f9ffbaecd97.png",
- "id": "9v5bmXkCYkqU30gp9s",
- "last_status_at": null,
- "locked": true,
- "note": "Moved to https://spinster.xyz/@alex@gleasonator.com ",
- "pleroma": {
- "accepts_chat_messages": true,
- "also_known_as": [],
- "ap_id": "https://spinster.xyz/users/alex",
- "background_image": null,
- "deactivated": false,
- "favicon": "https://gleasonator.com/proxy/owo6QgsHm_0ogz5enHyvD68wDUA/aHR0cHM6Ly9zcGluc3Rlci54eXovZmF2aWNvbi5wbmc/favicon.png",
- "hide_favorites": true,
- "hide_followers": false,
- "hide_followers_count": false,
- "hide_follows": false,
- "hide_follows_count": false,
- "is_admin": false,
- "is_confirmed": false,
- "is_moderator": false,
- "is_suggested": false,
- "location": null,
- "relationship": {},
- "skip_thread_containment": false,
- "tags": []
- },
- "source": {
- "fields": [],
- "note": "",
- "pleroma": {
- "actor_type": "Person",
- "discoverable": false
- },
- "sensitive": false
- },
- "statuses_count": 2687,
- "url": "https://spinster.xyz/users/alex",
- "username": "alex"
- },
- "created_at": "2020-12-30T02:23:35.000Z",
- "id": "87967",
- "pleroma": {
- "is_muted": false,
- "is_seen": true
- },
- "type": "follow_request"
-}
diff --git a/packages/pl-fe/src/__fixtures__/notification-mention.json b/packages/pl-fe/src/__fixtures__/notification-mention.json
deleted file mode 100644
index d2ad0a265..000000000
--- a/packages/pl-fe/src/__fixtures__/notification-mention.json
+++ /dev/null
@@ -1,226 +0,0 @@
-{
- "account": {
- "acct": "silverpill@mitra.social",
- "avatar": "https://gleasonator.com/proxy/ZbLqy9s8Hxn9I5K23y2mffsL6iY/aHR0cHM6Ly9taXRyYS5zb2NpYWwvbWVkaWEvNmE3ODViZjdkZDA1ZjYxYzM1OTBlODkzNWFhNDkxNTZhNDk5YWMzMGZkMWU0MDJmNzllN2UxNjRhZGIzNmUyYy5wbmc/6a785bf7dd05f61c3590e8935aa49156a499ac30fd1e402f79e7e164adb36e2c.png",
- "avatar_static": "https://gleasonator.com/proxy/ZbLqy9s8Hxn9I5K23y2mffsL6iY/aHR0cHM6Ly9taXRyYS5zb2NpYWwvbWVkaWEvNmE3ODViZjdkZDA1ZjYxYzM1OTBlODkzNWFhNDkxNTZhNDk5YWMzMGZkMWU0MDJmNzllN2UxNjRhZGIzNmUyYy5wbmc/6a785bf7dd05f61c3590e8935aa49156a499ac30fd1e402f79e7e164adb36e2c.png",
- "bot": false,
- "created_at": "2021-11-11T22:31:51.000Z",
- "display_name": "silverpill",
- "emojis": [],
- "fields": [
- {
- "name": "Matrix",
- "value": "@silverpill:poa.st"
- },
- {
- "name": "Alt",
- "value": "@silverpill@poa.st"
- },
- {
- "name": "Code",
- "value": "https://codeberg.org/silverpill/ "
- },
- {
- "name": "$XMR",
- "value": "884y9LmsWY7PQNsyR7bJy1dvj91tuF5spVabyCnPk4KfQtSuzFbQobTFC7xSemJgVW1FWAwnJbjTZX5zZWbBrfkv62DB62d"
- }
- ],
- "followers_count": 0,
- "following_count": 0,
- "fqn": "silverpill@mitra.social",
- "header": "https://gleasonator.com/images/banner.png",
- "header_static": "https://gleasonator.com/images/banner.png",
- "id": "ADIzJ7q9gExPvDKBCS",
- "last_status_at": "2022-04-15T11:27:33",
- "locked": false,
- "note": "",
- "pleroma": {
- "accepts_chat_messages": false,
- "also_known_as": [],
- "ap_id": "https://mitra.social/users/silverpill",
- "background_image": null,
- "deactivated": false,
- "favicon": "https://gleasonator.com/proxy/XSE9_kQbQyYcSFWszWx2GgCbBuY/aHR0cHM6Ly9taXRyYS5zb2NpYWwvZmF2aWNvbi5pY28/favicon.ico",
- "hide_favorites": true,
- "hide_followers": true,
- "hide_followers_count": false,
- "hide_follows": true,
- "hide_follows_count": false,
- "is_admin": false,
- "is_confirmed": true,
- "is_moderator": false,
- "is_suggested": false,
- "location": null,
- "relationship": {},
- "skip_thread_containment": false,
- "tags": []
- },
- "source": {
- "fields": [],
- "note": "",
- "pleroma": {
- "actor_type": "Person",
- "discoverable": false
- },
- "sensitive": false
- },
- "statuses_count": 135,
- "url": "https://mitra.social/users/silverpill",
- "username": "silverpill"
- },
- "created_at": "2022-04-15T11:27:33.000Z",
- "id": "428172",
- "pleroma": {
- "is_muted": false,
- "is_seen": true
- },
- "status": {
- "account": {
- "acct": "silverpill@mitra.social",
- "avatar": "https://gleasonator.com/proxy/ZbLqy9s8Hxn9I5K23y2mffsL6iY/aHR0cHM6Ly9taXRyYS5zb2NpYWwvbWVkaWEvNmE3ODViZjdkZDA1ZjYxYzM1OTBlODkzNWFhNDkxNTZhNDk5YWMzMGZkMWU0MDJmNzllN2UxNjRhZGIzNmUyYy5wbmc/6a785bf7dd05f61c3590e8935aa49156a499ac30fd1e402f79e7e164adb36e2c.png",
- "avatar_static": "https://gleasonator.com/proxy/ZbLqy9s8Hxn9I5K23y2mffsL6iY/aHR0cHM6Ly9taXRyYS5zb2NpYWwvbWVkaWEvNmE3ODViZjdkZDA1ZjYxYzM1OTBlODkzNWFhNDkxNTZhNDk5YWMzMGZkMWU0MDJmNzllN2UxNjRhZGIzNmUyYy5wbmc/6a785bf7dd05f61c3590e8935aa49156a499ac30fd1e402f79e7e164adb36e2c.png",
- "bot": false,
- "created_at": "2021-11-11T22:31:51.000Z",
- "display_name": "silverpill",
- "emojis": [],
- "fields": [
- {
- "name": "Matrix",
- "value": "@silverpill:poa.st"
- },
- {
- "name": "Alt",
- "value": "@silverpill@poa.st"
- },
- {
- "name": "Code",
- "value": "https://codeberg.org/silverpill/ "
- },
- {
- "name": "$XMR",
- "value": "884y9LmsWY7PQNsyR7bJy1dvj91tuF5spVabyCnPk4KfQtSuzFbQobTFC7xSemJgVW1FWAwnJbjTZX5zZWbBrfkv62DB62d"
- }
- ],
- "followers_count": 0,
- "following_count": 0,
- "fqn": "silverpill@mitra.social",
- "header": "https://gleasonator.com/images/banner.png",
- "header_static": "https://gleasonator.com/images/banner.png",
- "id": "ADIzJ7q9gExPvDKBCS",
- "last_status_at": "2022-04-15T11:27:33",
- "locked": false,
- "note": "",
- "pleroma": {
- "accepts_chat_messages": false,
- "also_known_as": [],
- "ap_id": "https://mitra.social/users/silverpill",
- "background_image": null,
- "deactivated": false,
- "favicon": "https://gleasonator.com/proxy/XSE9_kQbQyYcSFWszWx2GgCbBuY/aHR0cHM6Ly9taXRyYS5zb2NpYWwvZmF2aWNvbi5pY28/favicon.ico",
- "hide_favorites": true,
- "hide_followers": true,
- "hide_followers_count": false,
- "hide_follows": true,
- "hide_follows_count": false,
- "is_admin": false,
- "is_confirmed": true,
- "is_moderator": false,
- "is_suggested": false,
- "location": null,
- "relationship": {},
- "skip_thread_containment": false,
- "tags": []
- },
- "source": {
- "fields": [],
- "note": "",
- "pleroma": {
- "actor_type": "Person",
- "discoverable": false
- },
- "sensitive": false
- },
- "statuses_count": 135,
- "url": "https://mitra.social/users/silverpill",
- "username": "silverpill"
- },
- "application": null,
- "bookmarked": true,
- "card": {
- "author_name": "",
- "author_url": "",
- "blurhash": null,
- "description": "The ActivityPub protocol is a decentralized social networking protocol\n based upon the [ActivityStreams] 2.0 data format.\n It provides a client to server API for creating, updating and deleting\n content, as well as a federated server to server API for delivering\n notifications and content.",
- "embed_url": "",
- "height": 0,
- "html": "",
- "image": null,
- "provider_name": "www.w3.org",
- "provider_url": "https://www.w3.org",
- "title": "ActivityPub",
- "type": "link",
- "url": "https://www.w3.org/TR/activitypub/#retrieving-objects",
- "width": 0
- },
- "content": "@alex @lain The second one is suggested by ActivityPub spec: https://www.w3.org/TR/activitypub/#retrieving-objects \nThe first one is likely a legacy of earlier ActivityStreams standards, I'm not sure",
- "created_at": "2022-04-15T11:27:28.000Z",
- "emojis": [],
- "favourited": true,
- "favourites_count": 2,
- "id": "AITJf9Wpr0msWChNBI",
- "in_reply_to_account_id": "9v5bmRalQvjOy0ECcC",
- "in_reply_to_id": "AISPFI5nnPaS7J94rI",
- "language": null,
- "media_attachments": [],
- "mentions": [
- {
- "acct": "alex",
- "id": "9v5bmRalQvjOy0ECcC",
- "url": "https://gleasonator.com/users/alex",
- "username": "alex"
- },
- {
- "acct": "lain@lain.com",
- "id": "9v5bqYwY2jfmvPNhTM",
- "url": "https://lain.com/users/lain",
- "username": "lain"
- }
- ],
- "muted": false,
- "pinned": false,
- "pleroma": {
- "content": {
- "text/plain": "@alex @lain The second one is suggested by ActivityPub spec: https://www.w3.org/TR/activitypub/#retrieving-objects\nThe first one is likely a legacy of earlier ActivityStreams standards, I'm not sure"
- },
- "content_type": null,
- "conversation_id": "AISPFI2bzH2DxPeWsy",
- "direct_conversation_id": null,
- "emoji_reactions": [],
- "expires_at": null,
- "in_reply_to_account_acct": "alex",
- "local": false,
- "parent_visible": true,
- "pinned_at": null,
- "quote": null,
- "quote_url": null,
- "quote_visible": false,
- "spoiler_text": {
- "text/plain": ""
- },
- "thread_muted": false
- },
- "poll": null,
- "reblog": null,
- "reblogged": false,
- "reblogs_count": 0,
- "replies_count": 0,
- "sensitive": false,
- "spoiler_text": "",
- "tags": [],
- "text": null,
- "uri": "https://mitra.social/objects/01802cfa-633c-1c2c-e9cf-e6e0ffef0afe",
- "url": "https://mitra.social/objects/01802cfa-633c-1c2c-e9cf-e6e0ffef0afe",
- "visibility": "public"
- },
- "type": "mention"
-}
diff --git a/packages/pl-fe/src/__fixtures__/notification-move.json b/packages/pl-fe/src/__fixtures__/notification-move.json
deleted file mode 100644
index 4bffd1906..000000000
--- a/packages/pl-fe/src/__fixtures__/notification-move.json
+++ /dev/null
@@ -1,119 +0,0 @@
-{
- "account": {
- "acct": "alex@fedibird.com",
- "avatar": "https://gleasonator.com/images/avi.png",
- "avatar_static": "https://gleasonator.com/images/avi.png",
- "bot": false,
- "created_at": "2022-01-24T21:25:37.000Z",
- "display_name": "alex@fedibird.com",
- "emojis": [],
- "fields": [],
- "followers_count": 0,
- "following_count": 2,
- "fqn": "alex@fedibird.com",
- "header": "https://gleasonator.com/images/banner.png",
- "header_static": "https://gleasonator.com/images/banner.png",
- "id": "AFmHQ18XZ7Lco68MW8",
- "last_status_at": "2022-03-16T22:07:53",
- "locked": false,
- "note": "
",
- "pleroma": {
- "accepts_chat_messages": null,
- "also_known_as": [],
- "ap_id": "https://fedibird.com/users/alex",
- "background_image": null,
- "birthday": "1993-07-03",
- "deactivated": false,
- "favicon": "https://gleasonator.com/proxy/HzfsidHss3CuA7aM2zxXN-tAjF8/aHR0cHM6Ly9mZWRpYmlyZC5jb20vZmF2aWNvbi5pY28/favicon.ico",
- "hide_favorites": true,
- "hide_followers": false,
- "hide_followers_count": false,
- "hide_follows": false,
- "hide_follows_count": false,
- "is_admin": false,
- "is_confirmed": true,
- "is_moderator": false,
- "is_suggested": false,
- "location": "Texas",
- "relationship": {},
- "skip_thread_containment": false,
- "tags": []
- },
- "source": {
- "fields": [],
- "note": "",
- "pleroma": {
- "actor_type": "Person",
- "discoverable": false
- },
- "sensitive": false
- },
- "statuses_count": 5,
- "url": "https://fedibird.com/@alex",
- "username": "alex"
- },
- "created_at": "2022-03-17T00:08:48.000Z",
- "id": "406814",
- "pleroma": {
- "is_muted": false,
- "is_seen": true
- },
- "target": {
- "acct": "benis911",
- "avatar": "https://gleasonator.com/images/avi.png",
- "avatar_static": "https://gleasonator.com/images/avi.png",
- "bot": false,
- "created_at": "2021-03-26T20:42:11.000Z",
- "display_name": "benis911",
- "emojis": [],
- "fields": [],
- "followers_count": 0,
- "following_count": 0,
- "fqn": "benis911@gleasonator.com",
- "header": "https://media.gleasonator.com/fc595bbbcf5aabefecd1c2adfe5b7f5457db59847992881668653a0338ba25bd.jpg",
- "header_static": "https://media.gleasonator.com/fc595bbbcf5aabefecd1c2adfe5b7f5457db59847992881668653a0338ba25bd.jpg",
- "id": "A5c5LK7EJTFR0u26Pg",
- "last_status_at": "2022-03-19T22:33:38",
- "locked": false,
- "note": "hello world 2",
- "pleroma": {
- "accepts_chat_messages": true,
- "also_known_as": [
- "https://gleasonator.com/users/alex",
- "https://poa.st/users/alex",
- "https://fedibird.com/users/alex"
- ],
- "ap_id": "https://gleasonator.com/users/benis911",
- "background_image": null,
- "birthday": "2000-01-25",
- "deactivated": false,
- "favicon": "https://gleasonator.com/favicon.png",
- "hide_favorites": true,
- "hide_followers": true,
- "hide_followers_count": true,
- "hide_follows": true,
- "hide_follows_count": true,
- "is_admin": false,
- "is_confirmed": true,
- "is_moderator": false,
- "is_suggested": false,
- "location": null,
- "relationship": {},
- "skip_thread_containment": false,
- "tags": []
- },
- "source": {
- "fields": [],
- "note": "hello world 2",
- "pleroma": {
- "actor_type": "Person",
- "discoverable": false
- },
- "sensitive": false
- },
- "statuses_count": 174,
- "url": "https://gleasonator.com/users/benis911",
- "username": "benis911"
- },
- "type": "move"
-}
diff --git a/packages/pl-fe/src/__fixtures__/notification-pleroma-chat_mention.json b/packages/pl-fe/src/__fixtures__/notification-pleroma-chat_mention.json
deleted file mode 100644
index c90cc7bb9..000000000
--- a/packages/pl-fe/src/__fixtures__/notification-pleroma-chat_mention.json
+++ /dev/null
@@ -1,73 +0,0 @@
-{
- "account": {
- "acct": "dave",
- "avatar": "https://media.gleasonator.com/68c29c30c18f30dd2898f85466bf1670312dda816617e6d31421c7e4c30a8265.png",
- "avatar_static": "https://media.gleasonator.com/68c29c30c18f30dd2898f85466bf1670312dda816617e6d31421c7e4c30a8265.png",
- "bot": false,
- "created_at": "2020-02-01T07:28:46.000Z",
- "display_name": "Elden Beedle 🇺🇦 🇫🇷",
- "emojis": [],
- "fields": [],
- "followers_count": 490,
- "following_count": 367,
- "fqn": "dave@gleasonator.com",
- "header": "https://media.gleasonator.com/47e8907c322a0e55d12b211846aa27c6b386e947326fe14bb09c89ef7317901d.jpg",
- "header_static": "https://media.gleasonator.com/47e8907c322a0e55d12b211846aa27c6b386e947326fe14bb09c89ef7317901d.jpg",
- "id": "9v5c0Pkz3MT5KTfam8",
- "last_status_at": "2022-04-16T19:57:10",
- "locked": false,
- "note": "Beedle is back, baby! Mostly just crosspost memes and stuff I find on the internet",
- "pleroma": {
- "accepts_chat_messages": true,
- "also_known_as": [],
- "ap_id": "https://gleasonator.com/users/dave",
- "background_image": null,
- "birthday": "1990-01-01",
- "deactivated": false,
- "favicon": "https://gleasonator.com/favicon.png",
- "hide_favorites": true,
- "hide_followers": false,
- "hide_followers_count": false,
- "hide_follows": false,
- "hide_follows_count": false,
- "is_admin": false,
- "is_confirmed": true,
- "is_moderator": false,
- "is_suggested": true,
- "location": null,
- "relationship": {},
- "skip_thread_containment": false,
- "tags": []
- },
- "source": {
- "fields": [],
- "note": "Beedle is back, baby!\r\n\r\nMostly just crosspost memes and stuff I find on the internet",
- "pleroma": {
- "actor_type": "Person",
- "discoverable": false
- },
- "sensitive": false
- },
- "statuses_count": 16758,
- "url": "https://gleasonator.com/users/dave",
- "username": "dave"
- },
- "chat_message": {
- "account_id": "9v5c0Pkz3MT5KTfam8",
- "attachment": null,
- "card": null,
- "chat_id": "9yX4Q9DiC2te6lvk5g",
- "content": "Cool, it works, I'll keep letting you know when I find broken stuff",
- "created_at": "2022-04-16T19:22:54.000Z",
- "emojis": [],
- "id": "AIW4bHoICoZ9CsRTW4",
- "unread": false
- },
- "created_at": "2022-04-16T19:22:55.000Z",
- "id": "429247",
- "pleroma": {
- "is_muted": false,
- "is_seen": true
- },
- "type": "pleroma:chat_mention"
-}
diff --git a/packages/pl-fe/src/__fixtures__/notification-pleroma-emoji_reaction.json b/packages/pl-fe/src/__fixtures__/notification-pleroma-emoji_reaction.json
deleted file mode 100644
index cc988d3a3..000000000
--- a/packages/pl-fe/src/__fixtures__/notification-pleroma-emoji_reaction.json
+++ /dev/null
@@ -1,301 +0,0 @@
-{
- "account": {
- "acct": "dave",
- "avatar": "https://media.gleasonator.com/68c29c30c18f30dd2898f85466bf1670312dda816617e6d31421c7e4c30a8265.png",
- "avatar_static": "https://media.gleasonator.com/68c29c30c18f30dd2898f85466bf1670312dda816617e6d31421c7e4c30a8265.png",
- "bot": false,
- "created_at": "2020-02-01T07:28:46.000Z",
- "display_name": "Elden Beedle 🇺🇦 🇫🇷",
- "emojis": [],
- "fields": [],
- "followers_count": 490,
- "following_count": 367,
- "fqn": "dave@gleasonator.com",
- "header": "https://media.gleasonator.com/47e8907c322a0e55d12b211846aa27c6b386e947326fe14bb09c89ef7317901d.jpg",
- "header_static": "https://media.gleasonator.com/47e8907c322a0e55d12b211846aa27c6b386e947326fe14bb09c89ef7317901d.jpg",
- "id": "9v5c0Pkz3MT5KTfam8",
- "last_status_at": "2022-04-16T19:57:10",
- "locked": false,
- "note": "Beedle is back, baby! Mostly just crosspost memes and stuff I find on the internet",
- "pleroma": {
- "accepts_chat_messages": true,
- "also_known_as": [],
- "ap_id": "https://gleasonator.com/users/dave",
- "background_image": null,
- "birthday": "1990-01-01",
- "deactivated": false,
- "favicon": "https://gleasonator.com/favicon.png",
- "hide_favorites": true,
- "hide_followers": false,
- "hide_followers_count": false,
- "hide_follows": false,
- "hide_follows_count": false,
- "is_admin": false,
- "is_confirmed": true,
- "is_moderator": false,
- "is_suggested": true,
- "location": null,
- "relationship": {},
- "skip_thread_containment": false,
- "tags": []
- },
- "source": {
- "fields": [],
- "note": "Beedle is back, baby!\r\n\r\nMostly just crosspost memes and stuff I find on the internet",
- "pleroma": {
- "actor_type": "Person",
- "discoverable": false
- },
- "sensitive": false
- },
- "statuses_count": 16758,
- "url": "https://gleasonator.com/users/dave",
- "username": "dave"
- },
- "created_at": "2022-04-16T16:52:15.000Z",
- "emoji": "😮",
- "id": "429071",
- "pleroma": {
- "is_muted": false,
- "is_seen": true
- },
- "status": {
- "account": {
- "acct": "alex",
- "avatar": "https://media.gleasonator.com/6d64aecb17348b23aaff78db4687b9476cb0da1c07cc6a819c2e6ec7144c18b1.png",
- "avatar_static": "https://media.gleasonator.com/6d64aecb17348b23aaff78db4687b9476cb0da1c07cc6a819c2e6ec7144c18b1.png",
- "bot": false,
- "created_at": "2020-01-08T01:25:43.000Z",
- "display_name": "Alex Gleason",
- "emojis": [],
- "fields": [
- {
- "name": "Website",
- "value": "https://alexgleason.me "
- },
- {
- "name": "Soapbox",
- "value": "https://soapbox.pub "
- },
- {
- "name": "Email",
- "value": "alex@alexgleason.me"
- },
- {
- "name": "Gender identity",
- "value": "Soyboy"
- },
- {
- "name": "Donate (PayPal)",
- "value": "https://paypal.me/gleasonator "
- },
- {
- "name": "$BTC",
- "value": "bc1q9cx35adpm73aq2fw40ye6ts8hfxqzjr5unwg0n"
- },
- {
- "name": "$ETH",
- "value": "0xAc9aB5Fc04Dc1cB1789Af75b523Bd23C70B2D717"
- },
- {
- "name": "$DOGE",
- "value": "D5zVZs6jrRakaPVGiErkQiHt9sayzm6V5D"
- },
- {
- "name": "$XMR",
- "value": "45JDCLrjJ4bgVUSbbs2yjy9m5Mf4VLPW8fG7jw9sq5u69rXZZopQogZNeyYkMBnXpkaip4p4QwaaJNhdTotPa9g44DBCzdK"
- }
- ],
- "follow_requests_count": 0,
- "followers_count": 2602,
- "following_count": 1603,
- "fqn": "alex@gleasonator.com",
- "header": "https://media.gleasonator.com/accounts/headers/000/000/001/original/9d0e4dbf1c9dbc8f.png",
- "header_static": "https://media.gleasonator.com/accounts/headers/000/000/001/original/9d0e4dbf1c9dbc8f.png",
- "id": "9v5bmRalQvjOy0ECcC",
- "last_status_at": "2022-04-16T19:23:50",
- "locked": false,
- "note": "I create Fediverse software that empowers people online. I'm vegan btw Note: If you have a question for me, please tag me publicly. This gives the opportunity for others to chime in, and bystanders to learn.",
- "pleroma": {
- "accepts_chat_messages": true,
- "accepts_email_list": true,
- "allow_following_move": true,
- "also_known_as": [
- "https://mitra.social/users/alex"
- ],
- "ap_id": "https://gleasonator.com/users/alex",
- "background_image": null,
- "birthday": "1993-07-03",
- "deactivated": false,
- "email": "alex@alexgleason.me",
- "favicon": "https://gleasonator.com/favicon.png",
- "hide_favorites": true,
- "hide_followers": false,
- "hide_followers_count": false,
- "hide_follows": false,
- "hide_follows_count": false,
- "is_admin": true,
- "is_confirmed": true,
- "is_moderator": false,
- "is_suggested": true,
- "location": "Texas",
- "notification_settings": {
- "block_from_strangers": false,
- "hide_notification_contents": false
- },
- "relationship": {},
- "skip_thread_containment": false,
- "tags": [],
- "unread_conversation_count": 392,
- "unread_notifications_count": 0
- },
- "source": {
- "fields": [
- {
- "name": "Website",
- "value": "https://alexgleason.me"
- },
- {
- "name": "Soapbox",
- "value": "https://soapbox.pub"
- },
- {
- "name": "Email",
- "value": "alex@alexgleason.me"
- },
- {
- "name": "Gender identity",
- "value": "Soyboy"
- },
- {
- "name": "Donate (PayPal)",
- "value": "https://paypal.me/gleasonator"
- },
- {
- "name": "$BTC",
- "value": "bc1q9cx35adpm73aq2fw40ye6ts8hfxqzjr5unwg0n"
- },
- {
- "name": "$ETH",
- "value": "0xAc9aB5Fc04Dc1cB1789Af75b523Bd23C70B2D717"
- },
- {
- "name": "$DOGE",
- "value": "D5zVZs6jrRakaPVGiErkQiHt9sayzm6V5D"
- },
- {
- "name": "$XMR",
- "value": "45JDCLrjJ4bgVUSbbs2yjy9m5Mf4VLPW8fG7jw9sq5u69rXZZopQogZNeyYkMBnXpkaip4p4QwaaJNhdTotPa9g44DBCzdK"
- }
- ],
- "note": "I create Fediverse software that empowers people online.\r\n\r\nI'm vegan btw\r\n\r\nNote: If you have a question for me, please tag me publicly. This gives the opportunity for others to chime in, and bystanders to learn.",
- "pleroma": {
- "actor_type": "Person",
- "discoverable": false,
- "no_rich_text": false,
- "show_birthday": true,
- "show_role": true
- },
- "privacy": "public",
- "sensitive": false
- },
- "statuses_count": 24050,
- "url": "https://gleasonator.com/users/alex",
- "username": "alex"
- },
- "application": {
- "name": "Soapbox FE",
- "website": "https://soapbox.pub/"
- },
- "bookmarked": false,
- "card": {
- "author_name": "Kaze Emanuar",
- "author_url": "https://www.youtube.com/c/KazeEmanuar",
- "blurhash": null,
- "description": "",
- "embed_url": null,
- "height": 113,
- "html": "VIDEO ",
- "image": "https://gleasonator.com/proxy/mI004Vq00johZtAUmMp0fC_XAuM/aHR0cHM6Ly9pLnl0aW1nLmNvbS92aS90X3J6WW5YRVFsRS9ocWRlZmF1bHQuanBn/hqdefault.jpg",
- "provider_name": "YouTube",
- "provider_url": "https://www.youtube.com/",
- "title": "FIXING the ENTIRE SM64 Source Code (INSANE N64 performance)",
- "type": "video",
- "url": "https://youtu.be/t_rzYnXEQlE",
- "width": 200
- },
- "content": "Bruh. This guy rewrote the reversed engineered Super Mario 64 code for 10x performance. Games need to be open source. https://youtu.be/t_rzYnXEQlE
",
- "created_at": "2022-04-16T16:40:28.000Z",
- "emojis": [],
- "favourited": false,
- "favourites_count": 11,
- "id": "AIVq6SrJg5yb8eGVsm",
- "in_reply_to_account_id": null,
- "in_reply_to_id": null,
- "language": null,
- "media_attachments": [],
- "mentions": [],
- "muted": false,
- "pinned": false,
- "pleroma": {
- "content": {
- "text/plain": "Bruh. This guy rewrote the reversed engineered Super Mario 64 code for 10x performance. Games need to be open source. https://youtu.be/t_rzYnXEQlE"
- },
- "content_type": null,
- "conversation_id": "AIVq6SqFk37r5LlfE0",
- "direct_conversation_id": null,
- "emoji_reactions": [
- {
- "count": 1,
- "me": false,
- "name": "❤️"
- },
- {
- "count": 2,
- "me": false,
- "name": "😮"
- },
- {
- "count": 1,
- "me": false,
- "name": "😆"
- },
- {
- "count": 1,
- "me": false,
- "name": "👍🏻"
- },
- {
- "count": 1,
- "me": false,
- "name": "🔥"
- }
- ],
- "expires_at": null,
- "in_reply_to_account_acct": null,
- "local": true,
- "parent_visible": false,
- "pinned_at": null,
- "quote": null,
- "quote_url": null,
- "quote_visible": false,
- "spoiler_text": {
- "text/plain": ""
- },
- "thread_muted": false
- },
- "poll": null,
- "reblog": null,
- "reblogged": false,
- "reblogs_count": 7,
- "replies_count": 2,
- "sensitive": false,
- "spoiler_text": "",
- "tags": [],
- "text": null,
- "uri": "https://gleasonator.com/objects/160dcbb2-73bc-4cd2-971e-e7f6a38602a0",
- "url": "https://gleasonator.com/notice/AIVq6SrJg5yb8eGVsm",
- "visibility": "public"
- },
- "type": "pleroma:emoji_reaction"
-}
diff --git a/packages/pl-fe/src/__fixtures__/notification-poll.json b/packages/pl-fe/src/__fixtures__/notification-poll.json
deleted file mode 100644
index fe582f249..000000000
--- a/packages/pl-fe/src/__fixtures__/notification-poll.json
+++ /dev/null
@@ -1,202 +0,0 @@
-{
- "account": {
- "acct": "dave",
- "avatar": "https://media.gleasonator.com/68c29c30c18f30dd2898f85466bf1670312dda816617e6d31421c7e4c30a8265.png",
- "avatar_static": "https://media.gleasonator.com/68c29c30c18f30dd2898f85466bf1670312dda816617e6d31421c7e4c30a8265.png",
- "bot": false,
- "created_at": "2020-02-01T07:28:46.000Z",
- "display_name": "Elden Beedle 🇺🇦 🇫🇷",
- "emojis": [],
- "fields": [],
- "followers_count": 490,
- "following_count": 367,
- "fqn": "dave@gleasonator.com",
- "header": "https://media.gleasonator.com/47e8907c322a0e55d12b211846aa27c6b386e947326fe14bb09c89ef7317901d.jpg",
- "header_static": "https://media.gleasonator.com/47e8907c322a0e55d12b211846aa27c6b386e947326fe14bb09c89ef7317901d.jpg",
- "id": "9v5c0Pkz3MT5KTfam8",
- "last_status_at": "2022-04-16T19:57:10",
- "locked": false,
- "note": "Beedle is back, baby! Mostly just crosspost memes and stuff I find on the internet",
- "pleroma": {
- "accepts_chat_messages": true,
- "also_known_as": [],
- "ap_id": "https://gleasonator.com/users/dave",
- "background_image": null,
- "birthday": "1990-01-01",
- "deactivated": false,
- "favicon": "https://gleasonator.com/favicon.png",
- "hide_favorites": true,
- "hide_followers": false,
- "hide_followers_count": false,
- "hide_follows": false,
- "hide_follows_count": false,
- "is_admin": false,
- "is_confirmed": true,
- "is_moderator": false,
- "is_suggested": true,
- "location": null,
- "relationship": {},
- "skip_thread_containment": false,
- "tags": []
- },
- "source": {
- "fields": [],
- "note": "Beedle is back, baby!\r\n\r\nMostly just crosspost memes and stuff I find on the internet",
- "pleroma": {
- "actor_type": "Person",
- "discoverable": false
- },
- "sensitive": false
- },
- "statuses_count": 16758,
- "url": "https://gleasonator.com/users/dave",
- "username": "dave"
- },
- "created_at": "2022-04-14T01:12:27.000Z",
- "id": "427339",
- "pleroma": {
- "is_muted": false,
- "is_seen": true
- },
- "status": {
- "account": {
- "acct": "dave",
- "avatar": "https://media.gleasonator.com/68c29c30c18f30dd2898f85466bf1670312dda816617e6d31421c7e4c30a8265.png",
- "avatar_static": "https://media.gleasonator.com/68c29c30c18f30dd2898f85466bf1670312dda816617e6d31421c7e4c30a8265.png",
- "bot": false,
- "created_at": "2020-02-01T07:28:46.000Z",
- "display_name": "Elden Beedle 🇺🇦 🇫🇷",
- "emojis": [],
- "fields": [],
- "followers_count": 490,
- "following_count": 367,
- "fqn": "dave@gleasonator.com",
- "header": "https://media.gleasonator.com/47e8907c322a0e55d12b211846aa27c6b386e947326fe14bb09c89ef7317901d.jpg",
- "header_static": "https://media.gleasonator.com/47e8907c322a0e55d12b211846aa27c6b386e947326fe14bb09c89ef7317901d.jpg",
- "id": "9v5c0Pkz3MT5KTfam8",
- "last_status_at": "2022-04-16T19:57:10",
- "locked": false,
- "note": "Beedle is back, baby! Mostly just crosspost memes and stuff I find on the internet",
- "pleroma": {
- "accepts_chat_messages": true,
- "also_known_as": [],
- "ap_id": "https://gleasonator.com/users/dave",
- "background_image": null,
- "birthday": "1990-01-01",
- "deactivated": false,
- "favicon": "https://gleasonator.com/favicon.png",
- "hide_favorites": true,
- "hide_followers": false,
- "hide_followers_count": false,
- "hide_follows": false,
- "hide_follows_count": false,
- "is_admin": false,
- "is_confirmed": true,
- "is_moderator": false,
- "is_suggested": true,
- "location": null,
- "relationship": {},
- "skip_thread_containment": false,
- "tags": []
- },
- "source": {
- "fields": [],
- "note": "Beedle is back, baby!\r\n\r\nMostly just crosspost memes and stuff I find on the internet",
- "pleroma": {
- "actor_type": "Person",
- "discoverable": false
- },
- "sensitive": false
- },
- "statuses_count": 16758,
- "url": "https://gleasonator.com/users/dave",
- "username": "dave"
- },
- "application": {
- "name": "Soapbox FE",
- "website": "https://soapbox.pub/"
- },
- "bookmarked": false,
- "card": null,
- "content": "Focusing on just the look, what do you guys think?
",
- "created_at": "2022-04-13T01:12:26.000Z",
- "emojis": [],
- "favourited": false,
- "favourites_count": 1,
- "id": "AIOHjtGEaqUHoXGVf6",
- "in_reply_to_account_id": "9v5c0Pkz3MT5KTfam8",
- "in_reply_to_id": "AIOFTLqQrljhdNBNHE",
- "language": null,
- "media_attachments": [],
- "mentions": [
- {
- "acct": "dave",
- "id": "9v5c0Pkz3MT5KTfam8",
- "url": "https://gleasonator.com/users/dave",
- "username": "dave"
- }
- ],
- "muted": false,
- "pinned": false,
- "pleroma": {
- "content": {
- "text/plain": "Focusing on just the look, what do you guys think?"
- },
- "content_type": null,
- "conversation_id": "AIOFTLp0x2bNYyWF4C",
- "direct_conversation_id": null,
- "emoji_reactions": [],
- "expires_at": null,
- "in_reply_to_account_acct": "dave",
- "local": true,
- "parent_visible": true,
- "pinned_at": null,
- "quote": null,
- "quote_url": null,
- "quote_visible": false,
- "spoiler_text": {
- "text/plain": ""
- },
- "thread_muted": false
- },
- "poll": {
- "emojis": [],
- "expired": true,
- "expires_at": "2022-04-14T01:12:26.000Z",
- "id": "AIOHjtAuucEZY2mGNE",
- "multiple": false,
- "options": [
- {
- "title": "Looks good, looking forward to wider deployment",
- "votes_count": 10
- },
- {
- "title": "Not a fan, l'll stick to the current UI thanks",
- "votes_count": 1
- },
- {
- "title": "Hard to say, need to actually try to decide honestly",
- "votes_count": 1
- }
- ],
- "own_votes": [
- 0
- ],
- "voted": true,
- "voters_count": 12,
- "votes_count": 12
- },
- "reblog": null,
- "reblogged": false,
- "reblogs_count": 1,
- "replies_count": 1,
- "sensitive": false,
- "spoiler_text": "",
- "tags": [],
- "text": null,
- "uri": "https://gleasonator.com/objects/a8465271-a48d-4c39-a0a9-d3eda3ab2735",
- "url": "https://gleasonator.com/notice/AIOHjtGEaqUHoXGVf6",
- "visibility": "public"
- },
- "type": "poll"
-}
diff --git a/packages/pl-fe/src/__fixtures__/notification-reblog.json b/packages/pl-fe/src/__fixtures__/notification-reblog.json
deleted file mode 100644
index 94638b8cd..000000000
--- a/packages/pl-fe/src/__fixtures__/notification-reblog.json
+++ /dev/null
@@ -1,284 +0,0 @@
-{
- "account": {
- "acct": "rob@nicecrew.digital",
- "avatar": "https://gleasonator.com/proxy/RcEgR4-0InIpw_sCpDWV-XrAbmY/aHR0cHM6Ly9uaWNlY3Jldy5kaWdpdGFsL21lZGlhL2M0MTllMTk1Nzg0MmEzMTY5M2MzNDExNTZlMTBhNmQwMTY2ZTM5YzQzM2ExZTczMmVmYWNlYmJkYjAyMDYzZjEucG5n/c419e1957842a31693c341156e10a6d0166e39c433a1e732efacebbdb02063f1.png",
- "avatar_static": "https://gleasonator.com/proxy/RcEgR4-0InIpw_sCpDWV-XrAbmY/aHR0cHM6Ly9uaWNlY3Jldy5kaWdpdGFsL21lZGlhL2M0MTllMTk1Nzg0MmEzMTY5M2MzNDExNTZlMTBhNmQwMTY2ZTM5YzQzM2ExZTczMmVmYWNlYmJkYjAyMDYzZjEucG5n/c419e1957842a31693c341156e10a6d0166e39c433a1e732efacebbdb02063f1.png",
- "bot": false,
- "created_at": "2022-03-10T12:30:41.000Z",
- "display_name": "Rob Colbert",
- "emojis": [],
- "fields": [
- {
- "name": "Shing.tv",
- "value": "https://shing.tv "
- },
- {
- "name": "LibertyLinks",
- "value": "https://libertylinks.io "
- },
- {
- "name": "GiveSendGo",
- "value": "https://givesendgo.com/dtp "
- }
- ],
- "followers_count": 0,
- "following_count": 0,
- "fqn": "rob@nicecrew.digital",
- "header": "https://gleasonator.com/proxy/t4--aro68-XZlasaR2bYiuiZMcA/aHR0cHM6Ly9uaWNlY3Jldy5kaWdpdGFsL21lZGlhL2E5ODYzYWE4YjEzM2QwMzkxNmU1N2MzNDgzMzBhZmE5MTM5MDFlNGZiMDEwYjk1Y2FiZjlmYmZiZTA4N2QxODMucG5n/a9863aa8b133d03916e57c348330afa913901e4fb010b95cabf9fbfbe087d183.png",
- "header_static": "https://gleasonator.com/proxy/t4--aro68-XZlasaR2bYiuiZMcA/aHR0cHM6Ly9uaWNlY3Jldy5kaWdpdGFsL21lZGlhL2E5ODYzYWE4YjEzM2QwMzkxNmU1N2MzNDgzMzBhZmE5MTM5MDFlNGZiMDEwYjk1Y2FiZjlmYmZiZTA4N2QxODMucG5n/a9863aa8b133d03916e57c348330afa913901e4fb010b95cabf9fbfbe087d183.png",
- "id": "AHGmnebARD1aa1IiBc",
- "last_status_at": "2022-04-16T21:08:35",
- "locked": false,
- "note": "Creator and CTO of the Digital Telepresence Platform and DTP Technologies, LLC.",
- "pleroma": {
- "accepts_chat_messages": true,
- "also_known_as": [],
- "ap_id": "https://nicecrew.digital/users/rob",
- "background_image": null,
- "deactivated": false,
- "favicon": "https://gleasonator.com/proxy/gb2NPo0Kv_svADN1_J9_9iSwlrY/aHR0cHM6Ly9uaWNlY3Jldy5kaWdpdGFsL2Zhdmljb24ucG5n/favicon.png",
- "hide_favorites": true,
- "hide_followers": true,
- "hide_followers_count": false,
- "hide_follows": true,
- "hide_follows_count": false,
- "is_admin": false,
- "is_confirmed": true,
- "is_moderator": false,
- "is_suggested": false,
- "location": null,
- "relationship": {},
- "skip_thread_containment": false,
- "tags": []
- },
- "source": {
- "fields": [],
- "note": "",
- "pleroma": {
- "actor_type": "Person",
- "discoverable": false
- },
- "sensitive": false
- },
- "statuses_count": 761,
- "url": "https://nicecrew.digital/users/rob",
- "username": "rob"
- },
- "created_at": "2022-04-16T03:43:24.000Z",
- "id": "428608",
- "pleroma": {
- "is_muted": false,
- "is_seen": true
- },
- "status": {
- "account": {
- "acct": "alex",
- "avatar": "https://media.gleasonator.com/6d64aecb17348b23aaff78db4687b9476cb0da1c07cc6a819c2e6ec7144c18b1.png",
- "avatar_static": "https://media.gleasonator.com/6d64aecb17348b23aaff78db4687b9476cb0da1c07cc6a819c2e6ec7144c18b1.png",
- "bot": false,
- "created_at": "2020-01-08T01:25:43.000Z",
- "display_name": "Alex Gleason",
- "emojis": [],
- "fields": [
- {
- "name": "Website",
- "value": "https://alexgleason.me "
- },
- {
- "name": "Soapbox",
- "value": "https://soapbox.pub "
- },
- {
- "name": "Email",
- "value": "alex@alexgleason.me"
- },
- {
- "name": "Gender identity",
- "value": "Soyboy"
- },
- {
- "name": "Donate (PayPal)",
- "value": "https://paypal.me/gleasonator "
- },
- {
- "name": "$BTC",
- "value": "bc1q9cx35adpm73aq2fw40ye6ts8hfxqzjr5unwg0n"
- },
- {
- "name": "$ETH",
- "value": "0xAc9aB5Fc04Dc1cB1789Af75b523Bd23C70B2D717"
- },
- {
- "name": "$DOGE",
- "value": "D5zVZs6jrRakaPVGiErkQiHt9sayzm6V5D"
- },
- {
- "name": "$XMR",
- "value": "45JDCLrjJ4bgVUSbbs2yjy9m5Mf4VLPW8fG7jw9sq5u69rXZZopQogZNeyYkMBnXpkaip4p4QwaaJNhdTotPa9g44DBCzdK"
- }
- ],
- "follow_requests_count": 0,
- "followers_count": 2602,
- "following_count": 1603,
- "fqn": "alex@gleasonator.com",
- "header": "https://media.gleasonator.com/accounts/headers/000/000/001/original/9d0e4dbf1c9dbc8f.png",
- "header_static": "https://media.gleasonator.com/accounts/headers/000/000/001/original/9d0e4dbf1c9dbc8f.png",
- "id": "9v5bmRalQvjOy0ECcC",
- "last_status_at": "2022-04-16T19:23:50",
- "locked": false,
- "note": "I create Fediverse software that empowers people online. I'm vegan btw Note: If you have a question for me, please tag me publicly. This gives the opportunity for others to chime in, and bystanders to learn.",
- "pleroma": {
- "accepts_chat_messages": true,
- "accepts_email_list": true,
- "allow_following_move": true,
- "also_known_as": [
- "https://mitra.social/users/alex"
- ],
- "ap_id": "https://gleasonator.com/users/alex",
- "background_image": null,
- "birthday": "1993-07-03",
- "deactivated": false,
- "email": "alex@alexgleason.me",
- "favicon": "https://gleasonator.com/favicon.png",
- "hide_favorites": true,
- "hide_followers": false,
- "hide_followers_count": false,
- "hide_follows": false,
- "hide_follows_count": false,
- "is_admin": true,
- "is_confirmed": true,
- "is_moderator": false,
- "is_suggested": true,
- "location": "Texas",
- "notification_settings": {
- "block_from_strangers": false,
- "hide_notification_contents": false
- },
- "relationship": {},
- "skip_thread_containment": false,
- "tags": [],
- "unread_conversation_count": 392,
- "unread_notifications_count": 0
- },
- "source": {
- "fields": [
- {
- "name": "Website",
- "value": "https://alexgleason.me"
- },
- {
- "name": "Soapbox",
- "value": "https://soapbox.pub"
- },
- {
- "name": "Email",
- "value": "alex@alexgleason.me"
- },
- {
- "name": "Gender identity",
- "value": "Soyboy"
- },
- {
- "name": "Donate (PayPal)",
- "value": "https://paypal.me/gleasonator"
- },
- {
- "name": "$BTC",
- "value": "bc1q9cx35adpm73aq2fw40ye6ts8hfxqzjr5unwg0n"
- },
- {
- "name": "$ETH",
- "value": "0xAc9aB5Fc04Dc1cB1789Af75b523Bd23C70B2D717"
- },
- {
- "name": "$DOGE",
- "value": "D5zVZs6jrRakaPVGiErkQiHt9sayzm6V5D"
- },
- {
- "name": "$XMR",
- "value": "45JDCLrjJ4bgVUSbbs2yjy9m5Mf4VLPW8fG7jw9sq5u69rXZZopQogZNeyYkMBnXpkaip4p4QwaaJNhdTotPa9g44DBCzdK"
- }
- ],
- "note": "I create Fediverse software that empowers people online.\r\n\r\nI'm vegan btw\r\n\r\nNote: If you have a question for me, please tag me publicly. This gives the opportunity for others to chime in, and bystanders to learn.",
- "pleroma": {
- "actor_type": "Person",
- "discoverable": false,
- "no_rich_text": false,
- "show_birthday": true,
- "show_role": true
- },
- "privacy": "public",
- "sensitive": false
- },
- "statuses_count": 24050,
- "url": "https://gleasonator.com/users/alex",
- "username": "alex"
- },
- "application": {
- "name": "Soapbox FE",
- "website": "https://soapbox.pub/"
- },
- "bookmarked": false,
- "card": null,
- "content": "The @fsf needs to give out an award to every American who has never downloaded TikTok.
",
- "created_at": "2022-04-16T03:42:50.000Z",
- "emojis": [],
- "favourited": false,
- "favourites_count": 15,
- "id": "AIUihbqUEe5Uvv7P9s",
- "in_reply_to_account_id": null,
- "in_reply_to_id": null,
- "language": null,
- "media_attachments": [],
- "mentions": [
- {
- "acct": "fsf@status.fsf.org",
- "id": "9v5boQSsaxVc3AU8u0",
- "url": "https://status.fsf.org/fsf",
- "username": "fsf"
- }
- ],
- "muted": false,
- "pinned": false,
- "pleroma": {
- "content": {
- "text/plain": "The @fsf needs to give out an award to every American who has never downloaded TikTok."
- },
- "content_type": null,
- "conversation_id": "AIUihbp4JuxArWSGwq",
- "direct_conversation_id": null,
- "emoji_reactions": [
- {
- "count": 2,
- "me": false,
- "name": "🔥"
- }
- ],
- "expires_at": null,
- "in_reply_to_account_acct": null,
- "local": true,
- "parent_visible": false,
- "pinned_at": null,
- "quote": null,
- "quote_url": null,
- "quote_visible": false,
- "spoiler_text": {
- "text/plain": ""
- },
- "thread_muted": false
- },
- "poll": null,
- "reblog": null,
- "reblogged": false,
- "reblogs_count": 8,
- "replies_count": 4,
- "sensitive": false,
- "spoiler_text": "",
- "tags": [],
- "text": null,
- "uri": "https://gleasonator.com/objects/6be95787-fb9c-41cd-96cf-9652b2680863",
- "url": "https://gleasonator.com/notice/AIUihbqUEe5Uvv7P9s",
- "visibility": "public"
- },
- "type": "reblog"
-}
diff --git a/packages/pl-fe/src/__fixtures__/notification.json b/packages/pl-fe/src/__fixtures__/notification.json
deleted file mode 100644
index 65f522bb8..000000000
--- a/packages/pl-fe/src/__fixtures__/notification.json
+++ /dev/null
@@ -1,250 +0,0 @@
-{
- "account": {
- "acct": "crockwave",
- "avatar": "https://media.gleasonator.com/d6dcd2779bdb63ef8b8a5f127743f5ad757046943c4b4a8867215c15a72c5e55.png",
- "avatar_static": "https://media.gleasonator.com/d6dcd2779bdb63ef8b8a5f127743f5ad757046943c4b4a8867215c15a72c5e55.png",
- "bot": false,
- "created_at": "2020-02-26T16:31:25.000Z",
- "display_name": "Curtis Rock",
- "emojis": [],
- "fields": [
- {
- "name": "Web Site/Book",
- "value": "https://teci.world/a-users-guide-to-the-great-awakening "
- },
- {
- "name": "Gab",
- "value": "https://gab.com/crockwave "
- },
- {
- "name": "Twitter",
- "value": "https://twitter.com/GAP_Great "
- },
- {
- "name": "MeWe",
- "value": "https://mewe.com/i/curtisrock "
- }
- ],
- "followers_count": 13,
- "following_count": 11,
- "header": "https://media.gleasonator.com/82720af49afb0daa2a700f4371db9848cd7efb38eaca09d47898e8e7b527e0b4.png",
- "header_static": "https://media.gleasonator.com/82720af49afb0daa2a700f4371db9848cd7efb38eaca09d47898e8e7b527e0b4.png",
- "id": "9v5c6xSEgAi3Zu1Lv6",
- "locked": false,
- "note": "soapbox development team test test2",
- "pleroma": {
- "background_image": null,
- "confirmation_pending": false,
- "deactivated": false,
- "hide_favorites": true,
- "hide_followers": false,
- "hide_followers_count": false,
- "hide_follows": false,
- "hide_follows_count": false,
- "is_admin": false,
- "is_moderator": false,
- "relationship": {
- "blocked_by": false,
- "blocking": false,
- "domain_blocking": false,
- "endorsed": false,
- "followed_by": true,
- "following": true,
- "id": "9v5c6xSEgAi3Zu1Lv6",
- "muting": false,
- "muting_notifications": false,
- "requested": false,
- "showing_reblogs": true,
- "subscribing": false
- },
- "skip_thread_containment": false,
- "tags": []
- },
- "source": {
- "fields": [
- {
- "name": "Web Site/Book",
- "value": "https://teci.world/a-users-guide-to-the-great-awakening"
- },
- {
- "name": "Gab",
- "value": "https://gab.com/crockwave"
- },
- {
- "name": "Twitter",
- "value": "https://twitter.com/GAP_Great"
- },
- {
- "name": "MeWe",
- "value": "https://mewe.com/i/curtisrock"
- }
- ],
- "note": "soapbox development team test test2",
- "pleroma": {
- "actor_type": "Person",
- "discoverable": false
- },
- "sensitive": false
- },
- "statuses_count": 212,
- "url": "https://gleasonator.com/users/crockwave",
- "username": "crockwave"
- },
- "created_at": "2020-06-10T02:51:05.000Z",
- "id": "10743",
- "pleroma": {
- "is_seen": true
- },
- "status": {
- "account": {
- "acct": "alex",
- "avatar": "https://media.gleasonator.com/accounts/avatars/000/000/001/original/1a630e4c4c64c948.jpg",
- "avatar_static": "https://media.gleasonator.com/accounts/avatars/000/000/001/original/1a630e4c4c64c948.jpg",
- "bot": false,
- "created_at": "2020-01-08T01:25:43.000Z",
- "display_name": "Alex Gleason",
- "emojis": [],
- "fields": [
- {
- "name": "Website",
- "value": "https://alexgleason.me "
- },
- {
- "name": "Pleroma+Soapbox",
- "value": "https://soapbox.pub "
- },
- {
- "name": "Email",
- "value": "alex@alexgleason.me"
- },
- {
- "name": "Gender identity",
- "value": "Soyboy"
- }
- ],
- "follow_requests_count": 0,
- "followers_count": 474,
- "following_count": 1083,
- "header": "https://media.gleasonator.com/accounts/headers/000/000/001/original/9d0e4dbf1c9dbc8f.png",
- "header_static": "https://media.gleasonator.com/accounts/headers/000/000/001/original/9d0e4dbf1c9dbc8f.png",
- "id": "9v5bmRalQvjOy0ECcC",
- "locked": false,
- "note": "Fediverse developer. I come in peace. #vegan #freeculture #atheist #antiporn #gendercritical . Boosts ≠ endorsements.",
- "pleroma": {
- "allow_following_move": true,
- "background_image": null,
- "confirmation_pending": false,
- "deactivated": false,
- "hide_favorites": true,
- "hide_followers": false,
- "hide_followers_count": false,
- "hide_follows": false,
- "hide_follows_count": false,
- "is_admin": true,
- "is_moderator": false,
- "notification_settings": {
- "followers": true,
- "follows": true,
- "non_followers": true,
- "non_follows": true,
- "privacy_option": false
- },
- "relationship": {
- "blocked_by": false,
- "blocking": false,
- "domain_blocking": false,
- "endorsed": false,
- "followed_by": false,
- "following": false,
- "id": "9v5bmRalQvjOy0ECcC",
- "muting": false,
- "muting_notifications": false,
- "requested": false,
- "showing_reblogs": true,
- "subscribing": false
- },
- "skip_thread_containment": false,
- "tags": [],
- "unread_conversation_count": 25
- },
- "source": {
- "fields": [
- {
- "name": "Website",
- "value": "https://alexgleason.me"
- },
- {
- "name": "Pleroma+Soapbox",
- "value": "https://soapbox.pub"
- },
- {
- "name": "Email",
- "value": "alex@alexgleason.me"
- },
- {
- "name": "Gender identity",
- "value": "Soyboy"
- }
- ],
- "note": "Fediverse developer. I come in peace. #vegan #freeculture #atheist #antiporn #gendercritical. Boosts ≠ endorsements.",
- "pleroma": {
- "actor_type": "Person",
- "discoverable": false,
- "no_rich_text": false,
- "show_role": true
- },
- "privacy": "public",
- "sensitive": false
- },
- "statuses_count": 4857,
- "url": "https://gleasonator.com/users/alex",
- "username": "alex"
- },
- "application": {
- "name": "Web",
- "website": null
- },
- "bookmarked": false,
- "card": null,
- "content": "At 10.72% test coverage, Soapbox FE now has 2x more than MastoFE, which only has 4.21%. Pleroma FE doesn't seem to report coverage, but I suspect it's better than both of these combined. I don't know how Mastodon got away with not writing tests for so long, but I feel like there could be an entire release dedicated only to going back and writing missing tests... jesus.",
- "created_at": "2020-06-10T01:29:20.000Z",
- "emojis": [],
- "favourited": false,
- "favourites_count": 4,
- "id": "9vvNxoo5EFbbnfdXQu",
- "in_reply_to_account_id": null,
- "in_reply_to_id": null,
- "language": null,
- "media_attachments": [],
- "mentions": [],
- "muted": false,
- "pinned": false,
- "pleroma": {
- "content": {
- "text_plain": "At 10.72% test coverage, Soapbox FE now has 2x more than MastoFE, which only has 4.21%.Pleroma FE doesn't seem to report coverage, but I suspect it's better than both of these combined.I don't know how Mastodon got away with not writing tests for so long, but I feel like there could be an entire release dedicated only to going back and writing missing tests... jesus."
- },
- "conversation_id": 1168229,
- "direct_conversation_id": null,
- "emoji_reactions": [],
- "expires_at": null,
- "in_reply_to_account_acct": null,
- "local": true,
- "spoiler_text": {
- "text_plain": ""
- },
- "thread_muted": false
- },
- "poll": null,
- "reblog": null,
- "reblogged": false,
- "reblogs_count": 0,
- "replies_count": 0,
- "sensitive": false,
- "spoiler_text": "",
- "tags": [],
- "uri": "https://gleasonator.com/objects/aa294f83-5a6c-4d2b-ba20-2b8bf69a82ba",
- "url": "https://gleasonator.com/notice/9vvNxoo5EFbbnfdXQu",
- "visibility": "public"
- },
- "type": "favourite"
-}
diff --git a/packages/pl-fe/src/__fixtures__/notifications.json b/packages/pl-fe/src/__fixtures__/notifications.json
deleted file mode 100644
index fd99490c8..000000000
--- a/packages/pl-fe/src/__fixtures__/notifications.json
+++ /dev/null
@@ -1,4461 +0,0 @@
-[
- {
- "account": {
- "acct": "seanking",
- "avatar": "https://gleasonator.com/images/avi.png",
- "avatar_static": "https://gleasonator.com/images/avi.png",
- "bot": false,
- "created_at": "2020-05-24T01:46:12.000Z",
- "display_name": "Sean King",
- "emojis": [],
- "fields": [],
- "followers_count": 8,
- "following_count": 4,
- "header": "https://gleasonator.com/images/banner.png",
- "header_static": "https://gleasonator.com/images/banner.png",
- "id": "9vMAje101ngtjlMj7w",
- "locked": false,
- "note": "Hi, I'm Sean King, Founder and President of Sandia Mesa. I'll be here to try out new features and help test out some with Soapbox FE.",
- "pleroma": {
- "background_image": null,
- "confirmation_pending": true,
- "deactivated": false,
- "hide_favorites": true,
- "hide_followers": false,
- "hide_followers_count": false,
- "hide_follows": false,
- "hide_follows_count": false,
- "is_admin": false,
- "is_moderator": false,
- "relationship": {
- "blocked_by": false,
- "blocking": false,
- "domain_blocking": false,
- "endorsed": false,
- "followed_by": true,
- "following": true,
- "id": "9vMAje101ngtjlMj7w",
- "muting": false,
- "muting_notifications": false,
- "requested": false,
- "showing_reblogs": true,
- "subscribing": false
- },
- "skip_thread_containment": false,
- "tags": []
- },
- "source": {
- "fields": [],
- "note": "Hi, I'm Sean King, Founder and President of Sandia Mesa. I'll be here to try out new features and help test out some with Soapbox FE.",
- "pleroma": {
- "actor_type": "Person",
- "discoverable": false
- },
- "sensitive": false
- },
- "statuses_count": 15,
- "url": "https://gleasonator.com/users/seanking",
- "username": "seanking"
- },
- "created_at": "2020-06-10T02:54:39.000Z",
- "emoji": "😢",
- "id": "10744",
- "pleroma": {
- "is_seen": false
- },
- "status": {
- "account": {
- "acct": "alex",
- "avatar": "https://media.gleasonator.com/accounts/avatars/000/000/001/original/1a630e4c4c64c948.jpg",
- "avatar_static": "https://media.gleasonator.com/accounts/avatars/000/000/001/original/1a630e4c4c64c948.jpg",
- "bot": false,
- "created_at": "2020-01-08T01:25:43.000Z",
- "display_name": "Alex Gleason",
- "emojis": [],
- "fields": [
- {
- "name": "Website",
- "value": "https://alexgleason.me "
- },
- {
- "name": "Pleroma+Soapbox",
- "value": "https://soapbox.pub "
- },
- {
- "name": "Email",
- "value": "alex@alexgleason.me"
- },
- {
- "name": "Gender identity",
- "value": "Soyboy"
- }
- ],
- "follow_requests_count": 0,
- "followers_count": 474,
- "following_count": 1083,
- "header": "https://media.gleasonator.com/accounts/headers/000/000/001/original/9d0e4dbf1c9dbc8f.png",
- "header_static": "https://media.gleasonator.com/accounts/headers/000/000/001/original/9d0e4dbf1c9dbc8f.png",
- "id": "9v5bmRalQvjOy0ECcC",
- "locked": false,
- "note": "Fediverse developer. I come in peace. #vegan #freeculture #atheist #antiporn #gendercritical . Boosts ≠ endorsements.",
- "pleroma": {
- "allow_following_move": true,
- "background_image": null,
- "confirmation_pending": false,
- "deactivated": false,
- "hide_favorites": true,
- "hide_followers": false,
- "hide_followers_count": false,
- "hide_follows": false,
- "hide_follows_count": false,
- "is_admin": true,
- "is_moderator": false,
- "notification_settings": {
- "followers": true,
- "follows": true,
- "non_followers": true,
- "non_follows": true,
- "privacy_option": false
- },
- "relationship": {
- "blocked_by": false,
- "blocking": false,
- "domain_blocking": false,
- "endorsed": false,
- "followed_by": false,
- "following": false,
- "id": "9v5bmRalQvjOy0ECcC",
- "muting": false,
- "muting_notifications": false,
- "requested": false,
- "showing_reblogs": true,
- "subscribing": false
- },
- "skip_thread_containment": false,
- "tags": [],
- "unread_conversation_count": 25
- },
- "source": {
- "fields": [
- {
- "name": "Website",
- "value": "https://alexgleason.me"
- },
- {
- "name": "Pleroma+Soapbox",
- "value": "https://soapbox.pub"
- },
- {
- "name": "Email",
- "value": "alex@alexgleason.me"
- },
- {
- "name": "Gender identity",
- "value": "Soyboy"
- }
- ],
- "note": "Fediverse developer. I come in peace. #vegan #freeculture #atheist #antiporn #gendercritical. Boosts ≠ endorsements.",
- "pleroma": {
- "actor_type": "Person",
- "discoverable": false,
- "no_rich_text": false,
- "show_role": true
- },
- "privacy": "public",
- "sensitive": false
- },
- "statuses_count": 4857,
- "url": "https://gleasonator.com/users/alex",
- "username": "alex"
- },
- "application": {
- "name": "Web",
- "website": null
- },
- "bookmarked": false,
- "card": null,
- "content": "At 10.72% test coverage, Soapbox FE now has 2x more than MastoFE, which only has 4.21%. Pleroma FE doesn't seem to report coverage, but I suspect it's better than both of these combined. I don't know how Mastodon got away with not writing tests for so long, but I feel like there could be an entire release dedicated only to going back and writing missing tests... jesus.",
- "created_at": "2020-06-10T01:29:20.000Z",
- "emojis": [],
- "favourited": false,
- "favourites_count": 4,
- "id": "9vvNxoo5EFbbnfdXQu",
- "in_reply_to_account_id": null,
- "in_reply_to_id": null,
- "language": null,
- "media_attachments": [],
- "mentions": [],
- "muted": false,
- "pinned": false,
- "pleroma": {
- "content": {
- "text_plain": "At 10.72% test coverage, Soapbox FE now has 2x more than MastoFE, which only has 4.21%.Pleroma FE doesn't seem to report coverage, but I suspect it's better than both of these combined.I don't know how Mastodon got away with not writing tests for so long, but I feel like there could be an entire release dedicated only to going back and writing missing tests... jesus."
- },
- "conversation_id": 1168229,
- "direct_conversation_id": null,
- "emoji_reactions": [],
- "expires_at": null,
- "in_reply_to_account_acct": null,
- "local": true,
- "spoiler_text": {
- "text_plain": ""
- },
- "thread_muted": false
- },
- "poll": null,
- "reblog": null,
- "reblogged": false,
- "reblogs_count": 0,
- "replies_count": 0,
- "sensitive": false,
- "spoiler_text": "",
- "tags": [],
- "uri": "https://gleasonator.com/objects/aa294f83-5a6c-4d2b-ba20-2b8bf69a82ba",
- "url": "https://gleasonator.com/notice/9vvNxoo5EFbbnfdXQu",
- "visibility": "public"
- },
- "type": "pleroma:emoji_reaction"
- },
- {
- "account": {
- "acct": "crockwave",
- "avatar": "https://media.gleasonator.com/d6dcd2779bdb63ef8b8a5f127743f5ad757046943c4b4a8867215c15a72c5e55.png",
- "avatar_static": "https://media.gleasonator.com/d6dcd2779bdb63ef8b8a5f127743f5ad757046943c4b4a8867215c15a72c5e55.png",
- "bot": false,
- "created_at": "2020-02-26T16:31:25.000Z",
- "display_name": "Curtis Rock",
- "emojis": [],
- "fields": [
- {
- "name": "Web Site/Book",
- "value": "https://teci.world/a-users-guide-to-the-great-awakening "
- },
- {
- "name": "Gab",
- "value": "https://gab.com/crockwave "
- },
- {
- "name": "Twitter",
- "value": "https://twitter.com/GAP_Great "
- },
- {
- "name": "MeWe",
- "value": "https://mewe.com/i/curtisrock "
- }
- ],
- "followers_count": 13,
- "following_count": 11,
- "header": "https://media.gleasonator.com/82720af49afb0daa2a700f4371db9848cd7efb38eaca09d47898e8e7b527e0b4.png",
- "header_static": "https://media.gleasonator.com/82720af49afb0daa2a700f4371db9848cd7efb38eaca09d47898e8e7b527e0b4.png",
- "id": "9v5c6xSEgAi3Zu1Lv6",
- "locked": false,
- "note": "soapbox development team test test2",
- "pleroma": {
- "background_image": null,
- "confirmation_pending": false,
- "deactivated": false,
- "hide_favorites": true,
- "hide_followers": false,
- "hide_followers_count": false,
- "hide_follows": false,
- "hide_follows_count": false,
- "is_admin": false,
- "is_moderator": false,
- "relationship": {
- "blocked_by": false,
- "blocking": false,
- "domain_blocking": false,
- "endorsed": false,
- "followed_by": true,
- "following": true,
- "id": "9v5c6xSEgAi3Zu1Lv6",
- "muting": false,
- "muting_notifications": false,
- "requested": false,
- "showing_reblogs": true,
- "subscribing": false
- },
- "skip_thread_containment": false,
- "tags": []
- },
- "source": {
- "fields": [
- {
- "name": "Web Site/Book",
- "value": "https://teci.world/a-users-guide-to-the-great-awakening"
- },
- {
- "name": "Gab",
- "value": "https://gab.com/crockwave"
- },
- {
- "name": "Twitter",
- "value": "https://twitter.com/GAP_Great"
- },
- {
- "name": "MeWe",
- "value": "https://mewe.com/i/curtisrock"
- }
- ],
- "note": "soapbox development team test test2",
- "pleroma": {
- "actor_type": "Person",
- "discoverable": false
- },
- "sensitive": false
- },
- "statuses_count": 212,
- "url": "https://gleasonator.com/users/crockwave",
- "username": "crockwave"
- },
- "created_at": "2020-06-10T02:51:05.000Z",
- "id": "10743",
- "pleroma": {
- "is_seen": true
- },
- "status": {
- "account": {
- "acct": "alex",
- "avatar": "https://media.gleasonator.com/accounts/avatars/000/000/001/original/1a630e4c4c64c948.jpg",
- "avatar_static": "https://media.gleasonator.com/accounts/avatars/000/000/001/original/1a630e4c4c64c948.jpg",
- "bot": false,
- "created_at": "2020-01-08T01:25:43.000Z",
- "display_name": "Alex Gleason",
- "emojis": [],
- "fields": [
- {
- "name": "Website",
- "value": "https://alexgleason.me "
- },
- {
- "name": "Pleroma+Soapbox",
- "value": "https://soapbox.pub "
- },
- {
- "name": "Email",
- "value": "alex@alexgleason.me"
- },
- {
- "name": "Gender identity",
- "value": "Soyboy"
- }
- ],
- "follow_requests_count": 0,
- "followers_count": 474,
- "following_count": 1083,
- "header": "https://media.gleasonator.com/accounts/headers/000/000/001/original/9d0e4dbf1c9dbc8f.png",
- "header_static": "https://media.gleasonator.com/accounts/headers/000/000/001/original/9d0e4dbf1c9dbc8f.png",
- "id": "9v5bmRalQvjOy0ECcC",
- "locked": false,
- "note": "Fediverse developer. I come in peace. #vegan #freeculture #atheist #antiporn #gendercritical . Boosts ≠ endorsements.",
- "pleroma": {
- "allow_following_move": true,
- "background_image": null,
- "confirmation_pending": false,
- "deactivated": false,
- "hide_favorites": true,
- "hide_followers": false,
- "hide_followers_count": false,
- "hide_follows": false,
- "hide_follows_count": false,
- "is_admin": true,
- "is_moderator": false,
- "notification_settings": {
- "followers": true,
- "follows": true,
- "non_followers": true,
- "non_follows": true,
- "privacy_option": false
- },
- "relationship": {
- "blocked_by": false,
- "blocking": false,
- "domain_blocking": false,
- "endorsed": false,
- "followed_by": false,
- "following": false,
- "id": "9v5bmRalQvjOy0ECcC",
- "muting": false,
- "muting_notifications": false,
- "requested": false,
- "showing_reblogs": true,
- "subscribing": false
- },
- "skip_thread_containment": false,
- "tags": [],
- "unread_conversation_count": 25
- },
- "source": {
- "fields": [
- {
- "name": "Website",
- "value": "https://alexgleason.me"
- },
- {
- "name": "Pleroma+Soapbox",
- "value": "https://soapbox.pub"
- },
- {
- "name": "Email",
- "value": "alex@alexgleason.me"
- },
- {
- "name": "Gender identity",
- "value": "Soyboy"
- }
- ],
- "note": "Fediverse developer. I come in peace. #vegan #freeculture #atheist #antiporn #gendercritical. Boosts ≠ endorsements.",
- "pleroma": {
- "actor_type": "Person",
- "discoverable": false,
- "no_rich_text": false,
- "show_role": true
- },
- "privacy": "public",
- "sensitive": false
- },
- "statuses_count": 4857,
- "url": "https://gleasonator.com/users/alex",
- "username": "alex"
- },
- "application": {
- "name": "Web",
- "website": null
- },
- "bookmarked": false,
- "card": null,
- "content": "At 10.72% test coverage, Soapbox FE now has 2x more than MastoFE, which only has 4.21%. Pleroma FE doesn't seem to report coverage, but I suspect it's better than both of these combined. I don't know how Mastodon got away with not writing tests for so long, but I feel like there could be an entire release dedicated only to going back and writing missing tests... jesus.",
- "created_at": "2020-06-10T01:29:20.000Z",
- "emojis": [],
- "favourited": false,
- "favourites_count": 4,
- "id": "9vvNxoo5EFbbnfdXQu",
- "in_reply_to_account_id": null,
- "in_reply_to_id": null,
- "language": null,
- "media_attachments": [],
- "mentions": [],
- "muted": false,
- "pinned": false,
- "pleroma": {
- "content": {
- "text_plain": "At 10.72% test coverage, Soapbox FE now has 2x more than MastoFE, which only has 4.21%.Pleroma FE doesn't seem to report coverage, but I suspect it's better than both of these combined.I don't know how Mastodon got away with not writing tests for so long, but I feel like there could be an entire release dedicated only to going back and writing missing tests... jesus."
- },
- "conversation_id": 1168229,
- "direct_conversation_id": null,
- "emoji_reactions": [],
- "expires_at": null,
- "in_reply_to_account_acct": null,
- "local": true,
- "spoiler_text": {
- "text_plain": ""
- },
- "thread_muted": false
- },
- "poll": null,
- "reblog": null,
- "reblogged": false,
- "reblogs_count": 0,
- "replies_count": 0,
- "sensitive": false,
- "spoiler_text": "",
- "tags": [],
- "uri": "https://gleasonator.com/objects/aa294f83-5a6c-4d2b-ba20-2b8bf69a82ba",
- "url": "https://gleasonator.com/notice/9vvNxoo5EFbbnfdXQu",
- "visibility": "public"
- },
- "type": "favourite"
- },
- {
- "account": {
- "acct": "niggaflamebuttholeaids@husk.site",
- "avatar": "https://husk.site/media/063a8f97e9b5d2f04e01e8ce98f71a201f82e86e53b78e66b121b774a3ca565d.png",
- "avatar_static": "https://husk.site/media/063a8f97e9b5d2f04e01e8ce98f71a201f82e86e53b78e66b121b774a3ca565d.png",
- "bot": false,
- "created_at": "2020-05-03T01:39:47.000Z",
- "display_name": ":brain3: Steven :alexjonesflexing:",
- "emojis": [
- {
- "shortcode": "alexjonesflexing",
- "static_url": "https://husk.site/emoji/custom/alexjonesflexing.png",
- "url": "https://husk.site/emoji/custom/alexjonesflexing.png",
- "visible_in_picker": false
- },
- {
- "shortcode": "brain3",
- "static_url": "https://husk.site/emoji/custom/brain3.png",
- "url": "https://husk.site/emoji/custom/brain3.png",
- "visible_in_picker": false
- }
- ],
- "fields": [],
- "followers_count": 90,
- "following_count": 67,
- "header": "https://husk.site/media/8af4afad13e7940333df2680b1ade653bb6e63b76d58d583ed8cffe85292dc16.png",
- "header_static": "https://husk.site/media/8af4afad13e7940333df2680b1ade653bb6e63b76d58d583ed8cffe85292dc16.png",
- "id": "9v5cKMOPGqPcgfcWp6",
- "locked": false,
- "note": "Professional Liar",
- "pleroma": {
- "background_image": null,
- "confirmation_pending": true,
- "deactivated": false,
- "hide_favorites": true,
- "hide_followers": false,
- "hide_followers_count": false,
- "hide_follows": false,
- "hide_follows_count": false,
- "is_admin": false,
- "is_moderator": false,
- "relationship": {
- "blocked_by": false,
- "blocking": false,
- "domain_blocking": false,
- "endorsed": false,
- "followed_by": true,
- "following": true,
- "id": "9v5cKMOPGqPcgfcWp6",
- "muting": false,
- "muting_notifications": false,
- "requested": false,
- "showing_reblogs": true,
- "subscribing": false
- },
- "skip_thread_containment": false,
- "tags": []
- },
- "source": {
- "fields": [],
- "note": "Professional Liar",
- "pleroma": {
- "actor_type": "Person",
- "discoverable": true
- },
- "sensitive": false
- },
- "statuses_count": 5350,
- "url": "https://husk.site/users/niggaflamebuttholeaids",
- "username": "niggaflamebuttholeaids"
- },
- "created_at": "2020-06-10T02:05:06.000Z",
- "id": "10741",
- "pleroma": {
- "is_seen": true
- },
- "status": {
- "account": {
- "acct": "alex",
- "avatar": "https://media.gleasonator.com/accounts/avatars/000/000/001/original/1a630e4c4c64c948.jpg",
- "avatar_static": "https://media.gleasonator.com/accounts/avatars/000/000/001/original/1a630e4c4c64c948.jpg",
- "bot": false,
- "created_at": "2020-01-08T01:25:43.000Z",
- "display_name": "Alex Gleason",
- "emojis": [],
- "fields": [
- {
- "name": "Website",
- "value": "https://alexgleason.me "
- },
- {
- "name": "Pleroma+Soapbox",
- "value": "https://soapbox.pub "
- },
- {
- "name": "Email",
- "value": "alex@alexgleason.me"
- },
- {
- "name": "Gender identity",
- "value": "Soyboy"
- }
- ],
- "follow_requests_count": 0,
- "followers_count": 474,
- "following_count": 1083,
- "header": "https://media.gleasonator.com/accounts/headers/000/000/001/original/9d0e4dbf1c9dbc8f.png",
- "header_static": "https://media.gleasonator.com/accounts/headers/000/000/001/original/9d0e4dbf1c9dbc8f.png",
- "id": "9v5bmRalQvjOy0ECcC",
- "locked": false,
- "note": "Fediverse developer. I come in peace. #vegan #freeculture #atheist #antiporn #gendercritical . Boosts ≠ endorsements.",
- "pleroma": {
- "allow_following_move": true,
- "background_image": null,
- "confirmation_pending": false,
- "deactivated": false,
- "hide_favorites": true,
- "hide_followers": false,
- "hide_followers_count": false,
- "hide_follows": false,
- "hide_follows_count": false,
- "is_admin": true,
- "is_moderator": false,
- "notification_settings": {
- "followers": true,
- "follows": true,
- "non_followers": true,
- "non_follows": true,
- "privacy_option": false
- },
- "relationship": {
- "blocked_by": false,
- "blocking": false,
- "domain_blocking": false,
- "endorsed": false,
- "followed_by": false,
- "following": false,
- "id": "9v5bmRalQvjOy0ECcC",
- "muting": false,
- "muting_notifications": false,
- "requested": false,
- "showing_reblogs": true,
- "subscribing": false
- },
- "skip_thread_containment": false,
- "tags": [],
- "unread_conversation_count": 25
- },
- "source": {
- "fields": [
- {
- "name": "Website",
- "value": "https://alexgleason.me"
- },
- {
- "name": "Pleroma+Soapbox",
- "value": "https://soapbox.pub"
- },
- {
- "name": "Email",
- "value": "alex@alexgleason.me"
- },
- {
- "name": "Gender identity",
- "value": "Soyboy"
- }
- ],
- "note": "Fediverse developer. I come in peace. #vegan #freeculture #atheist #antiporn #gendercritical. Boosts ≠ endorsements.",
- "pleroma": {
- "actor_type": "Person",
- "discoverable": false,
- "no_rich_text": false,
- "show_role": true
- },
- "privacy": "public",
- "sensitive": false
- },
- "statuses_count": 4857,
- "url": "https://gleasonator.com/users/alex",
- "username": "alex"
- },
- "application": {
- "name": "Web",
- "website": null
- },
- "bookmarked": false,
- "card": null,
- "content": "At 10.72% test coverage, Soapbox FE now has 2x more than MastoFE, which only has 4.21%. Pleroma FE doesn't seem to report coverage, but I suspect it's better than both of these combined. I don't know how Mastodon got away with not writing tests for so long, but I feel like there could be an entire release dedicated only to going back and writing missing tests... jesus.",
- "created_at": "2020-06-10T01:29:20.000Z",
- "emojis": [],
- "favourited": false,
- "favourites_count": 4,
- "id": "9vvNxoo5EFbbnfdXQu",
- "in_reply_to_account_id": null,
- "in_reply_to_id": null,
- "language": null,
- "media_attachments": [],
- "mentions": [],
- "muted": false,
- "pinned": false,
- "pleroma": {
- "content": {
- "text_plain": "At 10.72% test coverage, Soapbox FE now has 2x more than MastoFE, which only has 4.21%.Pleroma FE doesn't seem to report coverage, but I suspect it's better than both of these combined.I don't know how Mastodon got away with not writing tests for so long, but I feel like there could be an entire release dedicated only to going back and writing missing tests... jesus."
- },
- "conversation_id": 1168229,
- "direct_conversation_id": null,
- "emoji_reactions": [],
- "expires_at": null,
- "in_reply_to_account_acct": null,
- "local": true,
- "spoiler_text": {
- "text_plain": ""
- },
- "thread_muted": false
- },
- "poll": null,
- "reblog": null,
- "reblogged": false,
- "reblogs_count": 0,
- "replies_count": 0,
- "sensitive": false,
- "spoiler_text": "",
- "tags": [],
- "uri": "https://gleasonator.com/objects/aa294f83-5a6c-4d2b-ba20-2b8bf69a82ba",
- "url": "https://gleasonator.com/notice/9vvNxoo5EFbbnfdXQu",
- "visibility": "public"
- },
- "type": "favourite"
- },
- {
- "account": {
- "acct": "dielan@shitposter.club",
- "avatar": "https://shitposter.club/media/99884dfe7d89658f00c7454cfd9d3cc932a650384a69963b8499fc89284464b5.gif?name=99884dfe7d89658f00c7454cfd9d3cc932a650384a69963b8499fc89284464b5.gif",
- "avatar_static": "https://shitposter.club/media/99884dfe7d89658f00c7454cfd9d3cc932a650384a69963b8499fc89284464b5.gif?name=99884dfe7d89658f00c7454cfd9d3cc932a650384a69963b8499fc89284464b5.gif",
- "bot": false,
- "created_at": "2020-01-09T13:21:37.000Z",
- "display_name": ":8b_d::8b_i::8b_e::8b_l::8b_a::8b_n:",
- "emojis": [
- {
- "shortcode": "8b_a",
- "static_url": "https://shitposter.club/emoji/stolen/8b_a.png",
- "url": "https://shitposter.club/emoji/stolen/8b_a.png",
- "visible_in_picker": false
- },
- {
- "shortcode": "8b_d",
- "static_url": "https://shitposter.club/emoji/stolen/8b_d.png",
- "url": "https://shitposter.club/emoji/stolen/8b_d.png",
- "visible_in_picker": false
- },
- {
- "shortcode": "8b_e",
- "static_url": "https://shitposter.club/emoji/stolen/8b_e.png",
- "url": "https://shitposter.club/emoji/stolen/8b_e.png",
- "visible_in_picker": false
- },
- {
- "shortcode": "8b_i",
- "static_url": "https://shitposter.club/emoji/stolen/8b_i.png",
- "url": "https://shitposter.club/emoji/stolen/8b_i.png",
- "visible_in_picker": false
- },
- {
- "shortcode": "8b_l",
- "static_url": "https://shitposter.club/emoji/stolen/8b_l.png",
- "url": "https://shitposter.club/emoji/stolen/8b_l.png",
- "visible_in_picker": false
- },
- {
- "shortcode": "8b_n",
- "static_url": "https://shitposter.club/emoji/stolen/8b_n.png",
- "url": "https://shitposter.club/emoji/stolen/8b_n.png",
- "visible_in_picker": false
- }
- ],
- "fields": [],
- "followers_count": 855,
- "following_count": 962,
- "header": "https://shitposter.club/media/8c063a5c6625df7fca6b2c201b4473c524ac8dd29b227a86e1ad93ead4abc5f5.png?name=MQFDMQIO15X8.png",
- "header_static": "https://shitposter.club/media/8c063a5c6625df7fca6b2c201b4473c524ac8dd29b227a86e1ad93ead4abc5f5.png?name=MQFDMQIO15X8.png",
- "id": "9v5bpF8QCmRpCUJ1ay",
- "locked": false,
- "note": "The Botfather Podcast: @podcast@melonmancy.net Waifu: @ironee212@shitposter.club ",
- "pleroma": {
- "background_image": null,
- "confirmation_pending": true,
- "deactivated": false,
- "hide_favorites": true,
- "hide_followers": false,
- "hide_followers_count": false,
- "hide_follows": false,
- "hide_follows_count": false,
- "is_admin": false,
- "is_moderator": false,
- "relationship": {
- "blocked_by": false,
- "blocking": false,
- "domain_blocking": false,
- "endorsed": false,
- "followed_by": true,
- "following": true,
- "id": "9v5bpF8QCmRpCUJ1ay",
- "muting": false,
- "muting_notifications": false,
- "requested": false,
- "showing_reblogs": true,
- "subscribing": false
- },
- "skip_thread_containment": false,
- "tags": []
- },
- "source": {
- "fields": [],
- "note": "The Botfather\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nPodcast: @podcast@melonmancy.net \nWaifu: @ironee212@shitposter.club",
- "pleroma": {
- "actor_type": "Person",
- "discoverable": false
- },
- "sensitive": false
- },
- "statuses_count": 5474,
- "url": "https://shitposter.club/users/dielan",
- "username": "dielan"
- },
- "created_at": "2020-06-10T01:32:59.000Z",
- "id": "10740",
- "pleroma": {
- "is_seen": true
- },
- "status": {
- "account": {
- "acct": "dielan@shitposter.club",
- "avatar": "https://shitposter.club/media/99884dfe7d89658f00c7454cfd9d3cc932a650384a69963b8499fc89284464b5.gif?name=99884dfe7d89658f00c7454cfd9d3cc932a650384a69963b8499fc89284464b5.gif",
- "avatar_static": "https://shitposter.club/media/99884dfe7d89658f00c7454cfd9d3cc932a650384a69963b8499fc89284464b5.gif?name=99884dfe7d89658f00c7454cfd9d3cc932a650384a69963b8499fc89284464b5.gif",
- "bot": false,
- "created_at": "2020-01-09T13:21:37.000Z",
- "display_name": ":8b_d::8b_i::8b_e::8b_l::8b_a::8b_n:",
- "emojis": [
- {
- "shortcode": "8b_a",
- "static_url": "https://shitposter.club/emoji/stolen/8b_a.png",
- "url": "https://shitposter.club/emoji/stolen/8b_a.png",
- "visible_in_picker": false
- },
- {
- "shortcode": "8b_d",
- "static_url": "https://shitposter.club/emoji/stolen/8b_d.png",
- "url": "https://shitposter.club/emoji/stolen/8b_d.png",
- "visible_in_picker": false
- },
- {
- "shortcode": "8b_e",
- "static_url": "https://shitposter.club/emoji/stolen/8b_e.png",
- "url": "https://shitposter.club/emoji/stolen/8b_e.png",
- "visible_in_picker": false
- },
- {
- "shortcode": "8b_i",
- "static_url": "https://shitposter.club/emoji/stolen/8b_i.png",
- "url": "https://shitposter.club/emoji/stolen/8b_i.png",
- "visible_in_picker": false
- },
- {
- "shortcode": "8b_l",
- "static_url": "https://shitposter.club/emoji/stolen/8b_l.png",
- "url": "https://shitposter.club/emoji/stolen/8b_l.png",
- "visible_in_picker": false
- },
- {
- "shortcode": "8b_n",
- "static_url": "https://shitposter.club/emoji/stolen/8b_n.png",
- "url": "https://shitposter.club/emoji/stolen/8b_n.png",
- "visible_in_picker": false
- }
- ],
- "fields": [],
- "followers_count": 855,
- "following_count": 962,
- "header": "https://shitposter.club/media/8c063a5c6625df7fca6b2c201b4473c524ac8dd29b227a86e1ad93ead4abc5f5.png?name=MQFDMQIO15X8.png",
- "header_static": "https://shitposter.club/media/8c063a5c6625df7fca6b2c201b4473c524ac8dd29b227a86e1ad93ead4abc5f5.png?name=MQFDMQIO15X8.png",
- "id": "9v5bpF8QCmRpCUJ1ay",
- "locked": false,
- "note": "The Botfather Podcast: @podcast@melonmancy.net Waifu: @ironee212@shitposter.club ",
- "pleroma": {
- "background_image": null,
- "confirmation_pending": true,
- "deactivated": false,
- "hide_favorites": true,
- "hide_followers": false,
- "hide_followers_count": false,
- "hide_follows": false,
- "hide_follows_count": false,
- "is_admin": false,
- "is_moderator": false,
- "relationship": {
- "blocked_by": false,
- "blocking": false,
- "domain_blocking": false,
- "endorsed": false,
- "followed_by": true,
- "following": true,
- "id": "9v5bpF8QCmRpCUJ1ay",
- "muting": false,
- "muting_notifications": false,
- "requested": false,
- "showing_reblogs": true,
- "subscribing": false
- },
- "skip_thread_containment": false,
- "tags": []
- },
- "source": {
- "fields": [],
- "note": "The Botfather\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nPodcast: @podcast@melonmancy.net \nWaifu: @ironee212@shitposter.club",
- "pleroma": {
- "actor_type": "Person",
- "discoverable": false
- },
- "sensitive": false
- },
- "statuses_count": 5474,
- "url": "https://shitposter.club/users/dielan",
- "username": "dielan"
- },
- "application": {
- "name": "Web",
- "website": null
- },
- "bookmarked": false,
- "card": null,
- "content": "@alex you dont need to write tests when your community builds a social framework that flags people not using your software as bad people. They have no choice but to eat it up bugs in all",
- "created_at": "2020-06-10T01:32:58.000Z",
- "emojis": [],
- "favourited": false,
- "favourites_count": 1,
- "id": "9vvOI4du3rkuhoX8wS",
- "in_reply_to_account_id": "9v5bmRalQvjOy0ECcC",
- "in_reply_to_id": "9vvNxoo5EFbbnfdXQu",
- "language": null,
- "media_attachments": [],
- "mentions": [
- {
- "acct": "alex",
- "id": "9v5bmRalQvjOy0ECcC",
- "url": "https://gleasonator.com/users/alex",
- "username": "alex"
- }
- ],
- "muted": false,
- "pinned": false,
- "pleroma": {
- "content": {
- "text_plain": "@alex you dont need to write tests when your community builds a social framework that flags people not using your software as bad people. They have no choice but to eat it up bugs in all"
- },
- "conversation_id": 1168229,
- "direct_conversation_id": null,
- "emoji_reactions": [
- {
- "count": 1,
- "me": true,
- "name": "😆"
- }
- ],
- "expires_at": null,
- "in_reply_to_account_acct": "alex",
- "local": false,
- "spoiler_text": {
- "text_plain": ""
- },
- "thread_muted": false
- },
- "poll": null,
- "reblog": null,
- "reblogged": false,
- "reblogs_count": 0,
- "replies_count": 0,
- "sensitive": false,
- "spoiler_text": "",
- "tags": [],
- "uri": "https://shitposter.club/objects/3e7565f6-13f2-432c-a316-7d4034f91d79",
- "url": "https://shitposter.club/objects/3e7565f6-13f2-432c-a316-7d4034f91d79",
- "visibility": "public"
- },
- "type": "mention"
- },
- {
- "account": {
- "acct": "tk@bbs.kawa-kun.com",
- "avatar": "https://bbs.kawa-kun.com/media/66c8ef028f985b01c41f173f868a84a49f8ab60b4e919b4231366963953ad75e.png?name=noface_avatar.png",
- "avatar_static": "https://bbs.kawa-kun.com/media/66c8ef028f985b01c41f173f868a84a49f8ab60b4e919b4231366963953ad75e.png?name=noface_avatar.png",
- "bot": false,
- "created_at": "2020-01-28T22:21:12.000Z",
- "display_name": "竹下憲二✔️",
- "emojis": [],
- "fields": [],
- "followers_count": 204,
- "following_count": 205,
- "header": "https://gleasonator.com/images/banner.png",
- "header_static": "https://gleasonator.com/images/banner.png",
- "id": "9v5bzD24sOZtZm5gVU",
- "locked": false,
- "note": "The monotony is bad enough on its own, but the scarcity of groceries makes the roll of this situation even worse. The Great Wall of Mastodon is ever-expanding. XMPP: tk@msg.kawa-kun.com Telegram: Ask Flickr: https://www.flickr.com/photos/105592384@N07/ #cycling #linux #pchardware ",
- "pleroma": {
- "background_image": null,
- "confirmation_pending": true,
- "deactivated": false,
- "hide_favorites": true,
- "hide_followers": false,
- "hide_followers_count": false,
- "hide_follows": false,
- "hide_follows_count": false,
- "is_admin": false,
- "is_moderator": false,
- "relationship": {
- "blocked_by": false,
- "blocking": false,
- "domain_blocking": false,
- "endorsed": false,
- "followed_by": true,
- "following": true,
- "id": "9v5bzD24sOZtZm5gVU",
- "muting": false,
- "muting_notifications": false,
- "requested": false,
- "showing_reblogs": true,
- "subscribing": false
- },
- "skip_thread_containment": false,
- "tags": []
- },
- "source": {
- "fields": [],
- "note": "The monotony is bad enough on its own, but the scarcity of groceries makes the roll of this situation even worse.\n\nThe Great Wall of Mastodon is ever-expanding.\n\nXMPP: tk@msg.kawa-kun.com\nTelegram: Ask\n\nFlickr: https://www.flickr.com/photos/105592384@N07/\n\n#cycling #linux #pchardware",
- "pleroma": {
- "actor_type": "Person",
- "discoverable": true
- },
- "sensitive": false
- },
- "statuses_count": 10393,
- "url": "https://bbs.kawa-kun.com/users/tk",
- "username": "tk"
- },
- "created_at": "2020-06-10T01:30:44.000Z",
- "id": "10739",
- "pleroma": {
- "is_seen": true
- },
- "status": {
- "account": {
- "acct": "alex",
- "avatar": "https://media.gleasonator.com/accounts/avatars/000/000/001/original/1a630e4c4c64c948.jpg",
- "avatar_static": "https://media.gleasonator.com/accounts/avatars/000/000/001/original/1a630e4c4c64c948.jpg",
- "bot": false,
- "created_at": "2020-01-08T01:25:43.000Z",
- "display_name": "Alex Gleason",
- "emojis": [],
- "fields": [
- {
- "name": "Website",
- "value": "https://alexgleason.me "
- },
- {
- "name": "Pleroma+Soapbox",
- "value": "https://soapbox.pub "
- },
- {
- "name": "Email",
- "value": "alex@alexgleason.me"
- },
- {
- "name": "Gender identity",
- "value": "Soyboy"
- }
- ],
- "follow_requests_count": 0,
- "followers_count": 474,
- "following_count": 1083,
- "header": "https://media.gleasonator.com/accounts/headers/000/000/001/original/9d0e4dbf1c9dbc8f.png",
- "header_static": "https://media.gleasonator.com/accounts/headers/000/000/001/original/9d0e4dbf1c9dbc8f.png",
- "id": "9v5bmRalQvjOy0ECcC",
- "locked": false,
- "note": "Fediverse developer. I come in peace. #vegan #freeculture #atheist #antiporn #gendercritical . Boosts ≠ endorsements.",
- "pleroma": {
- "allow_following_move": true,
- "background_image": null,
- "confirmation_pending": false,
- "deactivated": false,
- "hide_favorites": true,
- "hide_followers": false,
- "hide_followers_count": false,
- "hide_follows": false,
- "hide_follows_count": false,
- "is_admin": true,
- "is_moderator": false,
- "notification_settings": {
- "followers": true,
- "follows": true,
- "non_followers": true,
- "non_follows": true,
- "privacy_option": false
- },
- "relationship": {
- "blocked_by": false,
- "blocking": false,
- "domain_blocking": false,
- "endorsed": false,
- "followed_by": false,
- "following": false,
- "id": "9v5bmRalQvjOy0ECcC",
- "muting": false,
- "muting_notifications": false,
- "requested": false,
- "showing_reblogs": true,
- "subscribing": false
- },
- "skip_thread_containment": false,
- "tags": [],
- "unread_conversation_count": 25
- },
- "source": {
- "fields": [
- {
- "name": "Website",
- "value": "https://alexgleason.me"
- },
- {
- "name": "Pleroma+Soapbox",
- "value": "https://soapbox.pub"
- },
- {
- "name": "Email",
- "value": "alex@alexgleason.me"
- },
- {
- "name": "Gender identity",
- "value": "Soyboy"
- }
- ],
- "note": "Fediverse developer. I come in peace. #vegan #freeculture #atheist #antiporn #gendercritical. Boosts ≠ endorsements.",
- "pleroma": {
- "actor_type": "Person",
- "discoverable": false,
- "no_rich_text": false,
- "show_role": true
- },
- "privacy": "public",
- "sensitive": false
- },
- "statuses_count": 4857,
- "url": "https://gleasonator.com/users/alex",
- "username": "alex"
- },
- "application": {
- "name": "Web",
- "website": null
- },
- "bookmarked": false,
- "card": null,
- "content": "At 10.72% test coverage, Soapbox FE now has 2x more than MastoFE, which only has 4.21%. Pleroma FE doesn't seem to report coverage, but I suspect it's better than both of these combined. I don't know how Mastodon got away with not writing tests for so long, but I feel like there could be an entire release dedicated only to going back and writing missing tests... jesus.",
- "created_at": "2020-06-10T01:29:20.000Z",
- "emojis": [],
- "favourited": false,
- "favourites_count": 4,
- "id": "9vvNxoo5EFbbnfdXQu",
- "in_reply_to_account_id": null,
- "in_reply_to_id": null,
- "language": null,
- "media_attachments": [],
- "mentions": [],
- "muted": false,
- "pinned": false,
- "pleroma": {
- "content": {
- "text_plain": "At 10.72% test coverage, Soapbox FE now has 2x more than MastoFE, which only has 4.21%.Pleroma FE doesn't seem to report coverage, but I suspect it's better than both of these combined.I don't know how Mastodon got away with not writing tests for so long, but I feel like there could be an entire release dedicated only to going back and writing missing tests... jesus."
- },
- "conversation_id": 1168229,
- "direct_conversation_id": null,
- "emoji_reactions": [],
- "expires_at": null,
- "in_reply_to_account_acct": null,
- "local": true,
- "spoiler_text": {
- "text_plain": ""
- },
- "thread_muted": false
- },
- "poll": null,
- "reblog": null,
- "reblogged": false,
- "reblogs_count": 0,
- "replies_count": 0,
- "sensitive": false,
- "spoiler_text": "",
- "tags": [],
- "uri": "https://gleasonator.com/objects/aa294f83-5a6c-4d2b-ba20-2b8bf69a82ba",
- "url": "https://gleasonator.com/notice/9vvNxoo5EFbbnfdXQu",
- "visibility": "public"
- },
- "type": "favourite"
- },
- {
- "account": {
- "acct": "cy@verge.info.tm",
- "avatar": "https://verge.info.tm/media/906c5ecab609712291859dfd56c4c8df746d5f71737745fcb70e7e8d8a93fae0.jpg",
- "avatar_static": "https://verge.info.tm/media/906c5ecab609712291859dfd56c4c8df746d5f71737745fcb70e7e8d8a93fae0.jpg",
- "bot": false,
- "created_at": "2020-05-31T02:52:45.000Z",
- "display_name": "cy",
- "emojis": [],
- "fields": [],
- "followers_count": 0,
- "following_count": 0,
- "header": "https://verge.info.tm/media/58d7a0358697dd90e76b55f068341d6d314c4954081b67a8a78355d2912f15bf.jpg",
- "header_static": "https://verge.info.tm/media/58d7a0358697dd90e76b55f068341d6d314c4954081b67a8a78355d2912f15bf.jpg",
- "id": "9vamGqGoKW9uQAWG7k",
- "locked": false,
- "note": "Just someone near #Portland , #Oregon , living in west #Hillsboro . The sidewalks are empty. I know not who lives down the street. I'm all alone. Plz send hugs PGP: dsa3072/E4F606A10AC7DA56 Tox: 2F22EF2948934B65812827248FB6B2142F4AA9725C8599D02AFC7D3103B94B191A43C2E6DCF6",
- "pleroma": {
- "background_image": null,
- "confirmation_pending": false,
- "deactivated": false,
- "hide_favorites": true,
- "hide_followers": false,
- "hide_followers_count": false,
- "hide_follows": false,
- "hide_follows_count": false,
- "is_admin": false,
- "is_moderator": false,
- "relationship": {
- "blocked_by": false,
- "blocking": false,
- "domain_blocking": false,
- "endorsed": false,
- "followed_by": false,
- "following": false,
- "id": "9vamGqGoKW9uQAWG7k",
- "muting": false,
- "muting_notifications": false,
- "requested": false,
- "showing_reblogs": true,
- "subscribing": false
- },
- "skip_thread_containment": false,
- "tags": []
- },
- "source": {
- "fields": [],
- "note": "Just someone near #Portland, #Oregon, living in west #Hillsboro. The sidewalks are empty. I know not who lives down the street. I'm all alone. Plz send hugs\nPGP: dsa3072/E4F606A10AC7DA56\nTox: 2F22EF2948934B65812827248FB6B2142F4AA9725C8599D02AFC7D3103B94B191A43C2E6DCF6",
- "pleroma": {
- "actor_type": "Person",
- "discoverable": true
- },
- "sensitive": false
- },
- "statuses_count": 77,
- "url": "https://verge.info.tm/users/cy",
- "username": "cy"
- },
- "created_at": "2020-06-09T20:36:39.000Z",
- "id": "10731",
- "pleroma": {
- "is_seen": true
- },
- "status": {
- "account": {
- "acct": "cy@verge.info.tm",
- "avatar": "https://verge.info.tm/media/906c5ecab609712291859dfd56c4c8df746d5f71737745fcb70e7e8d8a93fae0.jpg",
- "avatar_static": "https://verge.info.tm/media/906c5ecab609712291859dfd56c4c8df746d5f71737745fcb70e7e8d8a93fae0.jpg",
- "bot": false,
- "created_at": "2020-05-31T02:52:45.000Z",
- "display_name": "cy",
- "emojis": [],
- "fields": [],
- "followers_count": 0,
- "following_count": 0,
- "header": "https://verge.info.tm/media/58d7a0358697dd90e76b55f068341d6d314c4954081b67a8a78355d2912f15bf.jpg",
- "header_static": "https://verge.info.tm/media/58d7a0358697dd90e76b55f068341d6d314c4954081b67a8a78355d2912f15bf.jpg",
- "id": "9vamGqGoKW9uQAWG7k",
- "locked": false,
- "note": "Just someone near #Portland , #Oregon , living in west #Hillsboro . The sidewalks are empty. I know not who lives down the street. I'm all alone. Plz send hugs PGP: dsa3072/E4F606A10AC7DA56 Tox: 2F22EF2948934B65812827248FB6B2142F4AA9725C8599D02AFC7D3103B94B191A43C2E6DCF6",
- "pleroma": {
- "background_image": null,
- "confirmation_pending": false,
- "deactivated": false,
- "hide_favorites": true,
- "hide_followers": false,
- "hide_followers_count": false,
- "hide_follows": false,
- "hide_follows_count": false,
- "is_admin": false,
- "is_moderator": false,
- "relationship": {
- "blocked_by": false,
- "blocking": false,
- "domain_blocking": false,
- "endorsed": false,
- "followed_by": false,
- "following": false,
- "id": "9vamGqGoKW9uQAWG7k",
- "muting": false,
- "muting_notifications": false,
- "requested": false,
- "showing_reblogs": true,
- "subscribing": false
- },
- "skip_thread_containment": false,
- "tags": []
- },
- "source": {
- "fields": [],
- "note": "Just someone near #Portland, #Oregon, living in west #Hillsboro. The sidewalks are empty. I know not who lives down the street. I'm all alone. Plz send hugs\nPGP: dsa3072/E4F606A10AC7DA56\nTox: 2F22EF2948934B65812827248FB6B2142F4AA9725C8599D02AFC7D3103B94B191A43C2E6DCF6",
- "pleroma": {
- "actor_type": "Person",
- "discoverable": true
- },
- "sensitive": false
- },
- "statuses_count": 77,
- "url": "https://verge.info.tm/users/cy",
- "username": "cy"
- },
- "application": {
- "name": "Web",
- "website": null
- },
- "bookmarked": false,
- "card": null,
- "content": "@alex The first step to getting people to commit inhumane acts is to convince them that they are incapable of doing so.
",
- "created_at": "2020-06-09T20:36:38.000Z",
- "emojis": [],
- "favourited": true,
- "favourites_count": 2,
- "id": "9vuxqLdmfiHiVXb2tU",
- "in_reply_to_account_id": "9v5bmRalQvjOy0ECcC",
- "in_reply_to_id": "9vtSW9UapzWfImEAPw",
- "language": null,
- "media_attachments": [],
- "mentions": [
- {
- "acct": "alex",
- "id": "9v5bmRalQvjOy0ECcC",
- "url": "https://gleasonator.com/users/alex",
- "username": "alex"
- }
- ],
- "muted": false,
- "pinned": false,
- "pleroma": {
- "content": {
- "text_plain": "@alex The first step to getting people to commit inhumane acts is to convince them that they are incapable of doing so."
- },
- "conversation_id": 1117237,
- "direct_conversation_id": null,
- "emoji_reactions": [],
- "expires_at": null,
- "in_reply_to_account_acct": "alex",
- "local": false,
- "spoiler_text": {
- "text_plain": ""
- },
- "thread_muted": false
- },
- "poll": null,
- "reblog": null,
- "reblogged": false,
- "reblogs_count": 0,
- "replies_count": 0,
- "sensitive": false,
- "spoiler_text": "",
- "tags": [],
- "uri": "https://verge.info.tm/objects/3901aa21-5e89-447b-842e-1721e2e7309f",
- "url": "https://verge.info.tm/objects/3901aa21-5e89-447b-842e-1721e2e7309f",
- "visibility": "public"
- },
- "type": "mention"
- },
- {
- "account": {
- "acct": "seanking",
- "avatar": "https://gleasonator.com/images/avi.png",
- "avatar_static": "https://gleasonator.com/images/avi.png",
- "bot": false,
- "created_at": "2020-05-24T01:46:12.000Z",
- "display_name": "Sean King",
- "emojis": [],
- "fields": [],
- "followers_count": 8,
- "following_count": 4,
- "header": "https://gleasonator.com/images/banner.png",
- "header_static": "https://gleasonator.com/images/banner.png",
- "id": "9vMAje101ngtjlMj7w",
- "locked": false,
- "note": "Hi, I'm Sean King, Founder and President of Sandia Mesa. I'll be here to try out new features and help test out some with Soapbox FE.",
- "pleroma": {
- "background_image": null,
- "confirmation_pending": true,
- "deactivated": false,
- "hide_favorites": true,
- "hide_followers": false,
- "hide_followers_count": false,
- "hide_follows": false,
- "hide_follows_count": false,
- "is_admin": false,
- "is_moderator": false,
- "relationship": {
- "blocked_by": false,
- "blocking": false,
- "domain_blocking": false,
- "endorsed": false,
- "followed_by": true,
- "following": true,
- "id": "9vMAje101ngtjlMj7w",
- "muting": false,
- "muting_notifications": false,
- "requested": false,
- "showing_reblogs": true,
- "subscribing": false
- },
- "skip_thread_containment": false,
- "tags": []
- },
- "source": {
- "fields": [],
- "note": "Hi, I'm Sean King, Founder and President of Sandia Mesa. I'll be here to try out new features and help test out some with Soapbox FE.",
- "pleroma": {
- "actor_type": "Person",
- "discoverable": false
- },
- "sensitive": false
- },
- "statuses_count": 15,
- "url": "https://gleasonator.com/users/seanking",
- "username": "seanking"
- },
- "created_at": "2020-06-09T18:53:51.000Z",
- "id": "10729",
- "pleroma": {
- "is_seen": true
- },
- "status": {
- "account": {
- "acct": "alex",
- "avatar": "https://media.gleasonator.com/accounts/avatars/000/000/001/original/1a630e4c4c64c948.jpg",
- "avatar_static": "https://media.gleasonator.com/accounts/avatars/000/000/001/original/1a630e4c4c64c948.jpg",
- "bot": false,
- "created_at": "2020-01-08T01:25:43.000Z",
- "display_name": "Alex Gleason",
- "emojis": [],
- "fields": [
- {
- "name": "Website",
- "value": "https://alexgleason.me "
- },
- {
- "name": "Pleroma+Soapbox",
- "value": "https://soapbox.pub "
- },
- {
- "name": "Email",
- "value": "alex@alexgleason.me"
- },
- {
- "name": "Gender identity",
- "value": "Soyboy"
- }
- ],
- "follow_requests_count": 0,
- "followers_count": 474,
- "following_count": 1083,
- "header": "https://media.gleasonator.com/accounts/headers/000/000/001/original/9d0e4dbf1c9dbc8f.png",
- "header_static": "https://media.gleasonator.com/accounts/headers/000/000/001/original/9d0e4dbf1c9dbc8f.png",
- "id": "9v5bmRalQvjOy0ECcC",
- "locked": false,
- "note": "Fediverse developer. I come in peace. #vegan #freeculture #atheist #antiporn #gendercritical . Boosts ≠ endorsements.",
- "pleroma": {
- "allow_following_move": true,
- "background_image": null,
- "confirmation_pending": false,
- "deactivated": false,
- "hide_favorites": true,
- "hide_followers": false,
- "hide_followers_count": false,
- "hide_follows": false,
- "hide_follows_count": false,
- "is_admin": true,
- "is_moderator": false,
- "notification_settings": {
- "followers": true,
- "follows": true,
- "non_followers": true,
- "non_follows": true,
- "privacy_option": false
- },
- "relationship": {
- "blocked_by": false,
- "blocking": false,
- "domain_blocking": false,
- "endorsed": false,
- "followed_by": false,
- "following": false,
- "id": "9v5bmRalQvjOy0ECcC",
- "muting": false,
- "muting_notifications": false,
- "requested": false,
- "showing_reblogs": true,
- "subscribing": false
- },
- "skip_thread_containment": false,
- "tags": [],
- "unread_conversation_count": 25
- },
- "source": {
- "fields": [
- {
- "name": "Website",
- "value": "https://alexgleason.me"
- },
- {
- "name": "Pleroma+Soapbox",
- "value": "https://soapbox.pub"
- },
- {
- "name": "Email",
- "value": "alex@alexgleason.me"
- },
- {
- "name": "Gender identity",
- "value": "Soyboy"
- }
- ],
- "note": "Fediverse developer. I come in peace. #vegan #freeculture #atheist #antiporn #gendercritical. Boosts ≠ endorsements.",
- "pleroma": {
- "actor_type": "Person",
- "discoverable": false,
- "no_rich_text": false,
- "show_role": true
- },
- "privacy": "public",
- "sensitive": false
- },
- "statuses_count": 4857,
- "url": "https://gleasonator.com/users/alex",
- "username": "alex"
- },
- "application": {
- "name": "Web",
- "website": null
- },
- "bookmarked": false,
- "card": null,
- "content": "Pleroma Recurring Donations update: looking into other solutions, possibly working from fosspay instead: https://git.pleroma.social/pleroma/pleroma/-/issues/1853#note_62881 ",
- "created_at": "2020-06-09T18:08:42.000Z",
- "emojis": [],
- "favourited": false,
- "favourites_count": 3,
- "id": "9vukdh0qbKoPch1GVM",
- "in_reply_to_account_id": null,
- "in_reply_to_id": null,
- "language": null,
- "media_attachments": [],
- "mentions": [],
- "muted": false,
- "pinned": false,
- "pleroma": {
- "content": {
- "text_plain": "Pleroma Recurring Donations update: looking into other solutions, possibly working from fosspay instead: https://git.pleroma.social/pleroma/pleroma/-/issues/1853#note_62881"
- },
- "conversation_id": 1149840,
- "direct_conversation_id": null,
- "emoji_reactions": [],
- "expires_at": null,
- "in_reply_to_account_acct": null,
- "local": true,
- "spoiler_text": {
- "text_plain": ""
- },
- "thread_muted": false
- },
- "poll": null,
- "reblog": null,
- "reblogged": false,
- "reblogs_count": 1,
- "replies_count": 0,
- "sensitive": false,
- "spoiler_text": "",
- "tags": [],
- "uri": "https://gleasonator.com/objects/945e75ad-e6ce-4f07-be69-23027e153100",
- "url": "https://gleasonator.com/notice/9vukdh0qbKoPch1GVM",
- "visibility": "public"
- },
- "type": "favourite"
- },
- {
- "account": {
- "acct": "lain@lain.com",
- "avatar": "https://lain.com/media/0b7eb9eee68845f94dd1c7bd10d9bae90a2420cf6704de5485179c441eb0e6e0.jpg",
- "avatar_static": "https://lain.com/media/0b7eb9eee68845f94dd1c7bd10d9bae90a2420cf6704de5485179c441eb0e6e0.jpg",
- "bot": false,
- "created_at": "2020-01-10T17:30:10.000Z",
- "display_name": "Avalokiteshvara",
- "emojis": [],
- "fields": [],
- "followers_count": 807,
- "following_count": 223,
- "header": "https://lain.com/media/fb0768dfa331ad730de32189d2e89b99fe51eebe1782a16cf076d7693394e4f9.png",
- "header_static": "https://lain.com/media/fb0768dfa331ad730de32189d2e89b99fe51eebe1782a16cf076d7693394e4f9.png",
- "id": "9v5bqYwY2jfmvPNhTM",
- "locked": false,
- "note": "No more hiding",
- "pleroma": {
- "background_image": null,
- "confirmation_pending": true,
- "deactivated": false,
- "hide_favorites": true,
- "hide_followers": false,
- "hide_followers_count": false,
- "hide_follows": false,
- "hide_follows_count": false,
- "is_admin": false,
- "is_moderator": false,
- "relationship": {
- "blocked_by": false,
- "blocking": false,
- "domain_blocking": false,
- "endorsed": false,
- "followed_by": true,
- "following": true,
- "id": "9v5bqYwY2jfmvPNhTM",
- "muting": false,
- "muting_notifications": false,
- "requested": false,
- "showing_reblogs": true,
- "subscribing": false
- },
- "skip_thread_containment": false,
- "tags": []
- },
- "source": {
- "fields": [],
- "note": "No more hiding",
- "pleroma": {
- "actor_type": "Person",
- "discoverable": false
- },
- "sensitive": false
- },
- "statuses_count": 20907,
- "url": "https://lain.com/users/lain",
- "username": "lain"
- },
- "created_at": "2020-06-09T18:47:58.000Z",
- "id": "10728",
- "pleroma": {
- "is_seen": true
- },
- "status": {
- "account": {
- "acct": "lain@lain.com",
- "avatar": "https://lain.com/media/0b7eb9eee68845f94dd1c7bd10d9bae90a2420cf6704de5485179c441eb0e6e0.jpg",
- "avatar_static": "https://lain.com/media/0b7eb9eee68845f94dd1c7bd10d9bae90a2420cf6704de5485179c441eb0e6e0.jpg",
- "bot": false,
- "created_at": "2020-01-10T17:30:10.000Z",
- "display_name": "Avalokiteshvara",
- "emojis": [],
- "fields": [],
- "followers_count": 807,
- "following_count": 223,
- "header": "https://lain.com/media/fb0768dfa331ad730de32189d2e89b99fe51eebe1782a16cf076d7693394e4f9.png",
- "header_static": "https://lain.com/media/fb0768dfa331ad730de32189d2e89b99fe51eebe1782a16cf076d7693394e4f9.png",
- "id": "9v5bqYwY2jfmvPNhTM",
- "locked": false,
- "note": "No more hiding",
- "pleroma": {
- "background_image": null,
- "confirmation_pending": true,
- "deactivated": false,
- "hide_favorites": true,
- "hide_followers": false,
- "hide_followers_count": false,
- "hide_follows": false,
- "hide_follows_count": false,
- "is_admin": false,
- "is_moderator": false,
- "relationship": {
- "blocked_by": false,
- "blocking": false,
- "domain_blocking": false,
- "endorsed": false,
- "followed_by": true,
- "following": true,
- "id": "9v5bqYwY2jfmvPNhTM",
- "muting": false,
- "muting_notifications": false,
- "requested": false,
- "showing_reblogs": true,
- "subscribing": false
- },
- "skip_thread_containment": false,
- "tags": []
- },
- "source": {
- "fields": [],
- "note": "No more hiding",
- "pleroma": {
- "actor_type": "Person",
- "discoverable": false
- },
- "sensitive": false
- },
- "statuses_count": 20907,
- "url": "https://lain.com/users/lain",
- "username": "lain"
- },
- "application": {
- "name": "Web",
- "website": null
- },
- "bookmarked": false,
- "card": null,
- "content": "@alex @crockwave well, the preliminary state of the issue is not "no it's not happening", but rather " let's find a way to make this possible in the generic case", so we'll see what can be done. I think a wrapper is definitely possible but also probably expensive to maintain.",
- "created_at": "2020-06-09T18:47:56.000Z",
- "emojis": [],
- "favourited": true,
- "favourites_count": 3,
- "id": "9vuo8zWu6ZHTtNd5qy",
- "in_reply_to_account_id": "9v5bmRalQvjOy0ECcC",
- "in_reply_to_id": "9vun9P6euZhNGLzDsG",
- "language": null,
- "media_attachments": [],
- "mentions": [
- {
- "acct": "alex",
- "id": "9v5bmRalQvjOy0ECcC",
- "url": "https://gleasonator.com/users/alex",
- "username": "alex"
- },
- {
- "acct": "crockwave",
- "id": "9v5c6xSEgAi3Zu1Lv6",
- "url": "https://gleasonator.com/users/crockwave",
- "username": "crockwave"
- }
- ],
- "muted": false,
- "pinned": false,
- "pleroma": {
- "content": {
- "text_plain": "@alex @crockwave well, the preliminary state of the issue is not \"no it's not happening\", but rather \" let's find a way to make this possible in the generic case\", so we'll see what can be done. I think a wrapper is definitely possible but also probably expensive to maintain."
- },
- "conversation_id": 1149840,
- "direct_conversation_id": null,
- "emoji_reactions": [],
- "expires_at": null,
- "in_reply_to_account_acct": "alex",
- "local": false,
- "spoiler_text": {
- "text_plain": ""
- },
- "thread_muted": false
- },
- "poll": null,
- "reblog": null,
- "reblogged": false,
- "reblogs_count": 0,
- "replies_count": 0,
- "sensitive": false,
- "spoiler_text": "",
- "tags": [],
- "uri": "https://lain.com/objects/d4f12540-1988-4609-8830-923da784cbbc",
- "url": "https://lain.com/objects/d4f12540-1988-4609-8830-923da784cbbc",
- "visibility": "public"
- },
- "type": "mention"
- },
- {
- "account": {
- "acct": "crockwave",
- "avatar": "https://media.gleasonator.com/d6dcd2779bdb63ef8b8a5f127743f5ad757046943c4b4a8867215c15a72c5e55.png",
- "avatar_static": "https://media.gleasonator.com/d6dcd2779bdb63ef8b8a5f127743f5ad757046943c4b4a8867215c15a72c5e55.png",
- "bot": false,
- "created_at": "2020-02-26T16:31:25.000Z",
- "display_name": "Curtis Rock",
- "emojis": [],
- "fields": [
- {
- "name": "Web Site/Book",
- "value": "https://teci.world/a-users-guide-to-the-great-awakening "
- },
- {
- "name": "Gab",
- "value": "https://gab.com/crockwave "
- },
- {
- "name": "Twitter",
- "value": "https://twitter.com/GAP_Great "
- },
- {
- "name": "MeWe",
- "value": "https://mewe.com/i/curtisrock "
- }
- ],
- "followers_count": 13,
- "following_count": 11,
- "header": "https://media.gleasonator.com/82720af49afb0daa2a700f4371db9848cd7efb38eaca09d47898e8e7b527e0b4.png",
- "header_static": "https://media.gleasonator.com/82720af49afb0daa2a700f4371db9848cd7efb38eaca09d47898e8e7b527e0b4.png",
- "id": "9v5c6xSEgAi3Zu1Lv6",
- "locked": false,
- "note": "soapbox development team test test2",
- "pleroma": {
- "background_image": null,
- "confirmation_pending": false,
- "deactivated": false,
- "hide_favorites": true,
- "hide_followers": false,
- "hide_followers_count": false,
- "hide_follows": false,
- "hide_follows_count": false,
- "is_admin": false,
- "is_moderator": false,
- "relationship": {
- "blocked_by": false,
- "blocking": false,
- "domain_blocking": false,
- "endorsed": false,
- "followed_by": true,
- "following": true,
- "id": "9v5c6xSEgAi3Zu1Lv6",
- "muting": false,
- "muting_notifications": false,
- "requested": false,
- "showing_reblogs": true,
- "subscribing": false
- },
- "skip_thread_containment": false,
- "tags": []
- },
- "source": {
- "fields": [
- {
- "name": "Web Site/Book",
- "value": "https://teci.world/a-users-guide-to-the-great-awakening"
- },
- {
- "name": "Gab",
- "value": "https://gab.com/crockwave"
- },
- {
- "name": "Twitter",
- "value": "https://twitter.com/GAP_Great"
- },
- {
- "name": "MeWe",
- "value": "https://mewe.com/i/curtisrock"
- }
- ],
- "note": "soapbox development team test test2",
- "pleroma": {
- "actor_type": "Person",
- "discoverable": false
- },
- "sensitive": false
- },
- "statuses_count": 212,
- "url": "https://gleasonator.com/users/crockwave",
- "username": "crockwave"
- },
- "created_at": "2020-06-09T18:38:07.000Z",
- "id": "10724",
- "pleroma": {
- "is_seen": true
- },
- "status": {
- "account": {
- "acct": "alex",
- "avatar": "https://media.gleasonator.com/accounts/avatars/000/000/001/original/1a630e4c4c64c948.jpg",
- "avatar_static": "https://media.gleasonator.com/accounts/avatars/000/000/001/original/1a630e4c4c64c948.jpg",
- "bot": false,
- "created_at": "2020-01-08T01:25:43.000Z",
- "display_name": "Alex Gleason",
- "emojis": [],
- "fields": [
- {
- "name": "Website",
- "value": "https://alexgleason.me "
- },
- {
- "name": "Pleroma+Soapbox",
- "value": "https://soapbox.pub "
- },
- {
- "name": "Email",
- "value": "alex@alexgleason.me"
- },
- {
- "name": "Gender identity",
- "value": "Soyboy"
- }
- ],
- "follow_requests_count": 0,
- "followers_count": 474,
- "following_count": 1083,
- "header": "https://media.gleasonator.com/accounts/headers/000/000/001/original/9d0e4dbf1c9dbc8f.png",
- "header_static": "https://media.gleasonator.com/accounts/headers/000/000/001/original/9d0e4dbf1c9dbc8f.png",
- "id": "9v5bmRalQvjOy0ECcC",
- "locked": false,
- "note": "Fediverse developer. I come in peace. #vegan #freeculture #atheist #antiporn #gendercritical . Boosts ≠ endorsements.",
- "pleroma": {
- "allow_following_move": true,
- "background_image": null,
- "confirmation_pending": false,
- "deactivated": false,
- "hide_favorites": true,
- "hide_followers": false,
- "hide_followers_count": false,
- "hide_follows": false,
- "hide_follows_count": false,
- "is_admin": true,
- "is_moderator": false,
- "notification_settings": {
- "followers": true,
- "follows": true,
- "non_followers": true,
- "non_follows": true,
- "privacy_option": false
- },
- "relationship": {
- "blocked_by": false,
- "blocking": false,
- "domain_blocking": false,
- "endorsed": false,
- "followed_by": false,
- "following": false,
- "id": "9v5bmRalQvjOy0ECcC",
- "muting": false,
- "muting_notifications": false,
- "requested": false,
- "showing_reblogs": true,
- "subscribing": false
- },
- "skip_thread_containment": false,
- "tags": [],
- "unread_conversation_count": 25
- },
- "source": {
- "fields": [
- {
- "name": "Website",
- "value": "https://alexgleason.me"
- },
- {
- "name": "Pleroma+Soapbox",
- "value": "https://soapbox.pub"
- },
- {
- "name": "Email",
- "value": "alex@alexgleason.me"
- },
- {
- "name": "Gender identity",
- "value": "Soyboy"
- }
- ],
- "note": "Fediverse developer. I come in peace. #vegan #freeculture #atheist #antiporn #gendercritical. Boosts ≠ endorsements.",
- "pleroma": {
- "actor_type": "Person",
- "discoverable": false,
- "no_rich_text": false,
- "show_role": true
- },
- "privacy": "public",
- "sensitive": false
- },
- "statuses_count": 4857,
- "url": "https://gleasonator.com/users/alex",
- "username": "alex"
- },
- "application": {
- "name": "Web",
- "website": null
- },
- "bookmarked": false,
- "card": null,
- "content": "@crockwave I think we can achieve both those things (funding goal on homepage, Patron badge) by exposing API endpoints from fosspay. I agree a wrapper service could provide many future benefits, but I've done that exact thing before (see: Mastodon Engine: https://gitlab.com/soapbox-pub/mastodon-engine ) and it was experimental, back-breaking, and required a DEEP understanding of the underlying tech. I just don't have the time or energy to dive that deep into Phoenix right now, especially not having a strong grasp of Elixir.",
- "created_at": "2020-06-09T18:36:50.000Z",
- "emojis": [],
- "favourited": false,
- "favourites_count": 1,
- "id": "9vun9P6euZhNGLzDsG",
- "in_reply_to_account_id": "9v5c6xSEgAi3Zu1Lv6",
- "in_reply_to_id": "9vumx07RzIPCI7RUqO",
- "language": null,
- "media_attachments": [],
- "mentions": [
- {
- "acct": "crockwave",
- "id": "9v5c6xSEgAi3Zu1Lv6",
- "url": "https://gleasonator.com/users/crockwave",
- "username": "crockwave"
- }
- ],
- "muted": false,
- "pinned": false,
- "pleroma": {
- "content": {
- "text_plain": "@crockwave I think we can achieve both those things (funding goal on homepage, Patron badge) by exposing API endpoints from fosspay.I agree a wrapper service could provide many future benefits, but I've done that exact thing before (see: Mastodon Engine: https://gitlab.com/soapbox-pub/mastodon-engine ) and it was experimental, back-breaking, and required a DEEP understanding of the underlying tech. I just don't have the time or energy to dive that deep into Phoenix right now, especially not having a strong grasp of Elixir."
- },
- "conversation_id": 1149840,
- "direct_conversation_id": null,
- "emoji_reactions": [],
- "expires_at": null,
- "in_reply_to_account_acct": "crockwave",
- "local": true,
- "spoiler_text": {
- "text_plain": ""
- },
- "thread_muted": false
- },
- "poll": null,
- "reblog": null,
- "reblogged": false,
- "reblogs_count": 0,
- "replies_count": 2,
- "sensitive": false,
- "spoiler_text": "",
- "tags": [],
- "uri": "https://gleasonator.com/objects/0260c269-09ba-46b8-a59d-710c00bbb674",
- "url": "https://gleasonator.com/notice/9vun9P6euZhNGLzDsG",
- "visibility": "public"
- },
- "type": "favourite"
- },
- {
- "account": {
- "acct": "realcaseyrollins",
- "avatar": "https://media.gleasonator.com/accounts/avatars/000/023/720/original/1dbd625cbe9113c4.png",
- "avatar_static": "https://media.gleasonator.com/accounts/avatars/000/023/720/original/1dbd625cbe9113c4.png",
- "bot": false,
- "created_at": "2020-01-31T05:03:54.000Z",
- "display_name": "Queso",
- "emojis": [],
- "fields": [],
- "followers_count": 49,
- "following_count": 81,
- "header": "https://media.gleasonator.com/accounts/headers/000/023/720/original/9dfdc7a027af0e9e.jpg",
- "header_static": "https://media.gleasonator.com/accounts/headers/000/023/720/original/9dfdc7a027af0e9e.jpg",
- "id": "9v5bzlc4J5ZMpFBuKG",
- "locked": false,
- "note": "Hey I'm just tryin' out Soapbox
",
- "pleroma": {
- "background_image": null,
- "confirmation_pending": false,
- "deactivated": false,
- "hide_favorites": true,
- "hide_followers": false,
- "hide_followers_count": false,
- "hide_follows": false,
- "hide_follows_count": false,
- "is_admin": false,
- "is_moderator": false,
- "relationship": {
- "blocked_by": false,
- "blocking": false,
- "domain_blocking": false,
- "endorsed": false,
- "followed_by": true,
- "following": true,
- "id": "9v5bzlc4J5ZMpFBuKG",
- "muting": false,
- "muting_notifications": false,
- "requested": false,
- "showing_reblogs": true,
- "subscribing": false
- },
- "skip_thread_containment": false,
- "tags": []
- },
- "source": {
- "fields": [],
- "note": "Hey I'm just tryin' out Soapbox",
- "pleroma": {
- "actor_type": "Person",
- "discoverable": false
- },
- "sensitive": false
- },
- "statuses_count": 72,
- "url": "https://gleasonator.com/users/realcaseyrollins",
- "username": "realcaseyrollins"
- },
- "created_at": "2020-06-09T18:37:27.000Z",
- "emoji": "😢",
- "id": "10722",
- "pleroma": {
- "is_seen": true
- },
- "status": {
- "account": {
- "acct": "alex",
- "avatar": "https://media.gleasonator.com/accounts/avatars/000/000/001/original/1a630e4c4c64c948.jpg",
- "avatar_static": "https://media.gleasonator.com/accounts/avatars/000/000/001/original/1a630e4c4c64c948.jpg",
- "bot": false,
- "created_at": "2020-01-08T01:25:43.000Z",
- "display_name": "Alex Gleason",
- "emojis": [],
- "fields": [
- {
- "name": "Website",
- "value": "https://alexgleason.me "
- },
- {
- "name": "Pleroma+Soapbox",
- "value": "https://soapbox.pub "
- },
- {
- "name": "Email",
- "value": "alex@alexgleason.me"
- },
- {
- "name": "Gender identity",
- "value": "Soyboy"
- }
- ],
- "follow_requests_count": 0,
- "followers_count": 474,
- "following_count": 1083,
- "header": "https://media.gleasonator.com/accounts/headers/000/000/001/original/9d0e4dbf1c9dbc8f.png",
- "header_static": "https://media.gleasonator.com/accounts/headers/000/000/001/original/9d0e4dbf1c9dbc8f.png",
- "id": "9v5bmRalQvjOy0ECcC",
- "locked": false,
- "note": "Fediverse developer. I come in peace. #vegan #freeculture #atheist #antiporn #gendercritical . Boosts ≠ endorsements.",
- "pleroma": {
- "allow_following_move": true,
- "background_image": null,
- "confirmation_pending": false,
- "deactivated": false,
- "hide_favorites": true,
- "hide_followers": false,
- "hide_followers_count": false,
- "hide_follows": false,
- "hide_follows_count": false,
- "is_admin": true,
- "is_moderator": false,
- "notification_settings": {
- "followers": true,
- "follows": true,
- "non_followers": true,
- "non_follows": true,
- "privacy_option": false
- },
- "relationship": {
- "blocked_by": false,
- "blocking": false,
- "domain_blocking": false,
- "endorsed": false,
- "followed_by": false,
- "following": false,
- "id": "9v5bmRalQvjOy0ECcC",
- "muting": false,
- "muting_notifications": false,
- "requested": false,
- "showing_reblogs": true,
- "subscribing": false
- },
- "skip_thread_containment": false,
- "tags": [],
- "unread_conversation_count": 25
- },
- "source": {
- "fields": [
- {
- "name": "Website",
- "value": "https://alexgleason.me"
- },
- {
- "name": "Pleroma+Soapbox",
- "value": "https://soapbox.pub"
- },
- {
- "name": "Email",
- "value": "alex@alexgleason.me"
- },
- {
- "name": "Gender identity",
- "value": "Soyboy"
- }
- ],
- "note": "Fediverse developer. I come in peace. #vegan #freeculture #atheist #antiporn #gendercritical. Boosts ≠ endorsements.",
- "pleroma": {
- "actor_type": "Person",
- "discoverable": false,
- "no_rich_text": false,
- "show_role": true
- },
- "privacy": "public",
- "sensitive": false
- },
- "statuses_count": 4857,
- "url": "https://gleasonator.com/users/alex",
- "username": "alex"
- },
- "application": {
- "name": "Web",
- "website": null
- },
- "bookmarked": false,
- "card": null,
- "content": "Been feeling like I'm losing my mind a bit the past few days. I feel like I'm pushing heavy weights up a steep hill and it's never-ending. Can't wait to get to the top so I can sail down. Working on automated tests today.",
- "created_at": "2020-06-09T18:34:26.000Z",
- "emojis": [],
- "favourited": false,
- "favourites_count": 1,
- "id": "9vumw53EAK9vIW1oqe",
- "in_reply_to_account_id": null,
- "in_reply_to_id": null,
- "language": null,
- "media_attachments": [],
- "mentions": [],
- "muted": false,
- "pinned": false,
- "pleroma": {
- "content": {
- "text_plain": "Been feeling like I'm losing my mind a bit the past few days. I feel like I'm pushing heavy weights up a steep hill and it's never-ending. Can't wait to get to the top so I can sail down.Working on automated tests today."
- },
- "conversation_id": 1150963,
- "direct_conversation_id": null,
- "emoji_reactions": [
- {
- "count": 1,
- "me": false,
- "name": "😢"
- }
- ],
- "expires_at": null,
- "in_reply_to_account_acct": null,
- "local": true,
- "spoiler_text": {
- "text_plain": ""
- },
- "thread_muted": false
- },
- "poll": null,
- "reblog": null,
- "reblogged": false,
- "reblogs_count": 0,
- "replies_count": 0,
- "sensitive": false,
- "spoiler_text": "",
- "tags": [],
- "uri": "https://gleasonator.com/objects/30bde29e-c456-41ce-b767-bf562513285b",
- "url": "https://gleasonator.com/notice/9vumw53EAK9vIW1oqe",
- "visibility": "public"
- },
- "type": "pleroma:emoji_reaction"
- },
- {
- "account": {
- "acct": "crockwave",
- "avatar": "https://media.gleasonator.com/d6dcd2779bdb63ef8b8a5f127743f5ad757046943c4b4a8867215c15a72c5e55.png",
- "avatar_static": "https://media.gleasonator.com/d6dcd2779bdb63ef8b8a5f127743f5ad757046943c4b4a8867215c15a72c5e55.png",
- "bot": false,
- "created_at": "2020-02-26T16:31:25.000Z",
- "display_name": "Curtis Rock",
- "emojis": [],
- "fields": [
- {
- "name": "Web Site/Book",
- "value": "https://teci.world/a-users-guide-to-the-great-awakening "
- },
- {
- "name": "Gab",
- "value": "https://gab.com/crockwave "
- },
- {
- "name": "Twitter",
- "value": "https://twitter.com/GAP_Great "
- },
- {
- "name": "MeWe",
- "value": "https://mewe.com/i/curtisrock "
- }
- ],
- "followers_count": 13,
- "following_count": 11,
- "header": "https://media.gleasonator.com/82720af49afb0daa2a700f4371db9848cd7efb38eaca09d47898e8e7b527e0b4.png",
- "header_static": "https://media.gleasonator.com/82720af49afb0daa2a700f4371db9848cd7efb38eaca09d47898e8e7b527e0b4.png",
- "id": "9v5c6xSEgAi3Zu1Lv6",
- "locked": false,
- "note": "soapbox development team test test2",
- "pleroma": {
- "background_image": null,
- "confirmation_pending": false,
- "deactivated": false,
- "hide_favorites": true,
- "hide_followers": false,
- "hide_followers_count": false,
- "hide_follows": false,
- "hide_follows_count": false,
- "is_admin": false,
- "is_moderator": false,
- "relationship": {
- "blocked_by": false,
- "blocking": false,
- "domain_blocking": false,
- "endorsed": false,
- "followed_by": true,
- "following": true,
- "id": "9v5c6xSEgAi3Zu1Lv6",
- "muting": false,
- "muting_notifications": false,
- "requested": false,
- "showing_reblogs": true,
- "subscribing": false
- },
- "skip_thread_containment": false,
- "tags": []
- },
- "source": {
- "fields": [
- {
- "name": "Web Site/Book",
- "value": "https://teci.world/a-users-guide-to-the-great-awakening"
- },
- {
- "name": "Gab",
- "value": "https://gab.com/crockwave"
- },
- {
- "name": "Twitter",
- "value": "https://twitter.com/GAP_Great"
- },
- {
- "name": "MeWe",
- "value": "https://mewe.com/i/curtisrock"
- }
- ],
- "note": "soapbox development team test test2",
- "pleroma": {
- "actor_type": "Person",
- "discoverable": false
- },
- "sensitive": false
- },
- "statuses_count": 212,
- "url": "https://gleasonator.com/users/crockwave",
- "username": "crockwave"
- },
- "created_at": "2020-06-09T18:37:26.000Z",
- "id": "10721",
- "pleroma": {
- "is_seen": true
- },
- "status": {
- "account": {
- "acct": "crockwave",
- "avatar": "https://media.gleasonator.com/d6dcd2779bdb63ef8b8a5f127743f5ad757046943c4b4a8867215c15a72c5e55.png",
- "avatar_static": "https://media.gleasonator.com/d6dcd2779bdb63ef8b8a5f127743f5ad757046943c4b4a8867215c15a72c5e55.png",
- "bot": false,
- "created_at": "2020-02-26T16:31:25.000Z",
- "display_name": "Curtis Rock",
- "emojis": [],
- "fields": [
- {
- "name": "Web Site/Book",
- "value": "https://teci.world/a-users-guide-to-the-great-awakening "
- },
- {
- "name": "Gab",
- "value": "https://gab.com/crockwave "
- },
- {
- "name": "Twitter",
- "value": "https://twitter.com/GAP_Great "
- },
- {
- "name": "MeWe",
- "value": "https://mewe.com/i/curtisrock "
- }
- ],
- "followers_count": 13,
- "following_count": 11,
- "header": "https://media.gleasonator.com/82720af49afb0daa2a700f4371db9848cd7efb38eaca09d47898e8e7b527e0b4.png",
- "header_static": "https://media.gleasonator.com/82720af49afb0daa2a700f4371db9848cd7efb38eaca09d47898e8e7b527e0b4.png",
- "id": "9v5c6xSEgAi3Zu1Lv6",
- "locked": false,
- "note": "soapbox development team test test2",
- "pleroma": {
- "background_image": null,
- "confirmation_pending": false,
- "deactivated": false,
- "hide_favorites": true,
- "hide_followers": false,
- "hide_followers_count": false,
- "hide_follows": false,
- "hide_follows_count": false,
- "is_admin": false,
- "is_moderator": false,
- "relationship": {
- "blocked_by": false,
- "blocking": false,
- "domain_blocking": false,
- "endorsed": false,
- "followed_by": true,
- "following": true,
- "id": "9v5c6xSEgAi3Zu1Lv6",
- "muting": false,
- "muting_notifications": false,
- "requested": false,
- "showing_reblogs": true,
- "subscribing": false
- },
- "skip_thread_containment": false,
- "tags": []
- },
- "source": {
- "fields": [
- {
- "name": "Web Site/Book",
- "value": "https://teci.world/a-users-guide-to-the-great-awakening"
- },
- {
- "name": "Gab",
- "value": "https://gab.com/crockwave"
- },
- {
- "name": "Twitter",
- "value": "https://twitter.com/GAP_Great"
- },
- {
- "name": "MeWe",
- "value": "https://mewe.com/i/curtisrock"
- }
- ],
- "note": "soapbox development team test test2",
- "pleroma": {
- "actor_type": "Person",
- "discoverable": false
- },
- "sensitive": false
- },
- "statuses_count": 212,
- "url": "https://gleasonator.com/users/crockwave",
- "username": "crockwave"
- },
- "application": {
- "name": "Web",
- "website": null
- },
- "bookmarked": false,
- "card": null,
- "content": "@alex Can you create some automated test templates, then outsource the drudgerous portion of the effort to your support team?",
- "created_at": "2020-06-09T18:37:26.000Z",
- "emojis": [],
- "favourited": true,
- "favourites_count": 1,
- "id": "9vunChQZFapwxAs0EC",
- "in_reply_to_account_id": "9v5bmRalQvjOy0ECcC",
- "in_reply_to_id": "9vumw53EAK9vIW1oqe",
- "language": null,
- "media_attachments": [],
- "mentions": [
- {
- "acct": "alex",
- "id": "9v5bmRalQvjOy0ECcC",
- "url": "https://gleasonator.com/users/alex",
- "username": "alex"
- }
- ],
- "muted": false,
- "pinned": false,
- "pleroma": {
- "content": {
- "text_plain": "@alex Can you create some automated test templates, then outsource the drudgerous portion of the effort to your support team?"
- },
- "conversation_id": 1150963,
- "direct_conversation_id": null,
- "emoji_reactions": [],
- "expires_at": null,
- "in_reply_to_account_acct": "alex",
- "local": true,
- "spoiler_text": {
- "text_plain": ""
- },
- "thread_muted": false
- },
- "poll": null,
- "reblog": null,
- "reblogged": false,
- "reblogs_count": 0,
- "replies_count": 1,
- "sensitive": false,
- "spoiler_text": "",
- "tags": [],
- "uri": "https://gleasonator.com/objects/c3b656ca-616d-4241-9c30-bc1ac92848bd",
- "url": "https://gleasonator.com/notice/9vunChQZFapwxAs0EC",
- "visibility": "public"
- },
- "type": "mention"
- },
- {
- "account": {
- "acct": "PFreak@panthermodern.net",
- "avatar": "https://pool.jortage.com/panthermodernnet/accounts/avatars/000/129/877/original/8250b48cca8b4980.jpg",
- "avatar_static": "https://pool.jortage.com/panthermodernnet/accounts/avatars/000/129/877/original/8250b48cca8b4980.jpg",
- "bot": false,
- "created_at": "2020-02-27T17:25:04.000Z",
- "display_name": "PFreak@panthermodern.net",
- "emojis": [],
- "fields": [
- {
- "name": "pgp",
- "value": "just ask :)"
- },
- {
- "name": "pronouns",
- "value": "she/her || they/them"
- },
- {
- "name": "groks?",
- "value": "groks"
- }
- ],
- "followers_count": 2,
- "following_count": 15,
- "header": "https://pool.jortage.com/panthermodernnet/accounts/headers/000/129/877/original/f509a4a560064193.png",
- "header_static": "https://pool.jortage.com/panthermodernnet/accounts/headers/000/129/877/original/f509a4a560064193.png",
- "id": "9v5c7DOvOFZH2Gavyq",
- "locked": true,
- "note": "Some creature with an internet connection... Computers were my first friends in life.
#NoBot
",
- "pleroma": {
- "background_image": null,
- "confirmation_pending": true,
- "deactivated": false,
- "hide_favorites": true,
- "hide_followers": false,
- "hide_followers_count": false,
- "hide_follows": false,
- "hide_follows_count": false,
- "is_admin": false,
- "is_moderator": false,
- "relationship": {
- "blocked_by": false,
- "blocking": false,
- "domain_blocking": false,
- "endorsed": false,
- "followed_by": true,
- "following": true,
- "id": "9v5c7DOvOFZH2Gavyq",
- "muting": false,
- "muting_notifications": false,
- "requested": false,
- "showing_reblogs": true,
- "subscribing": false
- },
- "skip_thread_containment": false,
- "tags": []
- },
- "source": {
- "fields": [],
- "note": "Some creature with an internet connection...\nComputers were my first friends in life.#NoBot",
- "pleroma": {
- "actor_type": "Person",
- "discoverable": true
- },
- "sensitive": false
- },
- "statuses_count": 253,
- "url": "https://social.panthermodern.net/@PFreak",
- "username": "PFreak"
- },
- "created_at": "2020-06-09T18:36:20.000Z",
- "id": "10718",
- "pleroma": {
- "is_seen": true
- },
- "status": {
- "account": {
- "acct": "PFreak@panthermodern.net",
- "avatar": "https://pool.jortage.com/panthermodernnet/accounts/avatars/000/129/877/original/8250b48cca8b4980.jpg",
- "avatar_static": "https://pool.jortage.com/panthermodernnet/accounts/avatars/000/129/877/original/8250b48cca8b4980.jpg",
- "bot": false,
- "created_at": "2020-02-27T17:25:04.000Z",
- "display_name": "PFreak@panthermodern.net",
- "emojis": [],
- "fields": [
- {
- "name": "pgp",
- "value": "just ask :)"
- },
- {
- "name": "pronouns",
- "value": "she/her || they/them"
- },
- {
- "name": "groks?",
- "value": "groks"
- }
- ],
- "followers_count": 2,
- "following_count": 15,
- "header": "https://pool.jortage.com/panthermodernnet/accounts/headers/000/129/877/original/f509a4a560064193.png",
- "header_static": "https://pool.jortage.com/panthermodernnet/accounts/headers/000/129/877/original/f509a4a560064193.png",
- "id": "9v5c7DOvOFZH2Gavyq",
- "locked": true,
- "note": "Some creature with an internet connection... Computers were my first friends in life.
#NoBot
",
- "pleroma": {
- "background_image": null,
- "confirmation_pending": true,
- "deactivated": false,
- "hide_favorites": true,
- "hide_followers": false,
- "hide_followers_count": false,
- "hide_follows": false,
- "hide_follows_count": false,
- "is_admin": false,
- "is_moderator": false,
- "relationship": {
- "blocked_by": false,
- "blocking": false,
- "domain_blocking": false,
- "endorsed": false,
- "followed_by": true,
- "following": true,
- "id": "9v5c7DOvOFZH2Gavyq",
- "muting": false,
- "muting_notifications": false,
- "requested": false,
- "showing_reblogs": true,
- "subscribing": false
- },
- "skip_thread_containment": false,
- "tags": []
- },
- "source": {
- "fields": [],
- "note": "Some creature with an internet connection...\nComputers were my first friends in life.#NoBot",
- "pleroma": {
- "actor_type": "Person",
- "discoverable": true
- },
- "sensitive": false
- },
- "statuses_count": 253,
- "url": "https://social.panthermodern.net/@PFreak",
- "username": "PFreak"
- },
- "application": {
- "name": "Web",
- "website": null
- },
- "bookmarked": false,
- "card": null,
- "content": "@alex it's good to be thorough, and is useful if that code ever changes down the line.
",
- "created_at": "2020-06-09T18:36:19.000Z",
- "emojis": [],
- "favourited": true,
- "favourites_count": 1,
- "id": "9vun6Z45Qh45HPQgQi",
- "in_reply_to_account_id": "9v5bmRalQvjOy0ECcC",
- "in_reply_to_id": "9vufIbN3slCeH1X984",
- "language": null,
- "media_attachments": [],
- "mentions": [
- {
- "acct": "alex",
- "id": "9v5bmRalQvjOy0ECcC",
- "url": "https://gleasonator.com/users/alex",
- "username": "alex"
- }
- ],
- "muted": false,
- "pinned": false,
- "pleroma": {
- "content": {
- "text_plain": "@alex it's good to be thorough, and is useful if that code ever changes down the line."
- },
- "conversation_id": 1147390,
- "direct_conversation_id": null,
- "emoji_reactions": [],
- "expires_at": null,
- "in_reply_to_account_acct": "alex",
- "local": false,
- "spoiler_text": {
- "text_plain": ""
- },
- "thread_muted": false
- },
- "poll": null,
- "reblog": null,
- "reblogged": false,
- "reblogs_count": 0,
- "replies_count": 0,
- "sensitive": false,
- "spoiler_text": "",
- "tags": [],
- "uri": "https://social.panthermodern.net/users/PFreak/statuses/104315471735910922",
- "url": "https://social.panthermodern.net/@PFreak/104315471735910922",
- "visibility": "public"
- },
- "type": "mention"
- },
- {
- "account": {
- "acct": "hackerjunkie@quey.org",
- "avatar": "https://media.quey.org/quey-media/accounts/avatars/000/215/311/original/5339ce3b70ea8c04.png",
- "avatar_static": "https://media.quey.org/quey-media/accounts/avatars/000/215/311/original/5339ce3b70ea8c04.png",
- "bot": false,
- "created_at": "2020-02-11T19:13:34.000Z",
- "display_name": "Thaha Jemni",
- "emojis": [],
- "fields": [
- {
- "name": "Country",
- "value": "The Netherlands"
- },
- {
- "name": "Fav. OS",
- "value": "Linux"
- }
- ],
- "followers_count": 38,
- "following_count": 48,
- "header": "https://media.quey.org/quey-media/accounts/headers/000/215/311/original/f9dcebd451487a6c.png",
- "header_static": "https://media.quey.org/quey-media/accounts/headers/000/215/311/original/f9dcebd451487a6c.png",
- "id": "9v5c3Y0cpOFdnATp5c",
- "locked": false,
- "note": "Lover of tech. Supporter of freedom.
Be nice, I will be nice back.
Boosts ≠ endorsement.
",
- "pleroma": {
- "background_image": null,
- "confirmation_pending": true,
- "deactivated": false,
- "hide_favorites": true,
- "hide_followers": false,
- "hide_followers_count": false,
- "hide_follows": false,
- "hide_follows_count": false,
- "is_admin": false,
- "is_moderator": false,
- "relationship": {
- "blocked_by": false,
- "blocking": false,
- "domain_blocking": false,
- "endorsed": false,
- "followed_by": true,
- "following": true,
- "id": "9v5c3Y0cpOFdnATp5c",
- "muting": false,
- "muting_notifications": false,
- "requested": false,
- "showing_reblogs": true,
- "subscribing": false
- },
- "skip_thread_containment": false,
- "tags": []
- },
- "source": {
- "fields": [],
- "note": "Lover of tech. Supporter of freedom.Be nice, I will be nice back.Boosts ≠ endorsement.",
- "pleroma": {
- "actor_type": "Person",
- "discoverable": false
- },
- "sensitive": false
- },
- "statuses_count": 642,
- "url": "https://quey.org/@hackerjunkie",
- "username": "hackerjunkie"
- },
- "created_at": "2020-06-09T18:36:14.000Z",
- "id": "10717",
- "pleroma": {
- "is_seen": true
- },
- "status": {
- "account": {
- "acct": "hackerjunkie@quey.org",
- "avatar": "https://media.quey.org/quey-media/accounts/avatars/000/215/311/original/5339ce3b70ea8c04.png",
- "avatar_static": "https://media.quey.org/quey-media/accounts/avatars/000/215/311/original/5339ce3b70ea8c04.png",
- "bot": false,
- "created_at": "2020-02-11T19:13:34.000Z",
- "display_name": "Thaha Jemni",
- "emojis": [],
- "fields": [
- {
- "name": "Country",
- "value": "The Netherlands"
- },
- {
- "name": "Fav. OS",
- "value": "Linux"
- }
- ],
- "followers_count": 38,
- "following_count": 48,
- "header": "https://media.quey.org/quey-media/accounts/headers/000/215/311/original/f9dcebd451487a6c.png",
- "header_static": "https://media.quey.org/quey-media/accounts/headers/000/215/311/original/f9dcebd451487a6c.png",
- "id": "9v5c3Y0cpOFdnATp5c",
- "locked": false,
- "note": "Lover of tech. Supporter of freedom.
Be nice, I will be nice back.
Boosts ≠ endorsement.
",
- "pleroma": {
- "background_image": null,
- "confirmation_pending": true,
- "deactivated": false,
- "hide_favorites": true,
- "hide_followers": false,
- "hide_followers_count": false,
- "hide_follows": false,
- "hide_follows_count": false,
- "is_admin": false,
- "is_moderator": false,
- "relationship": {
- "blocked_by": false,
- "blocking": false,
- "domain_blocking": false,
- "endorsed": false,
- "followed_by": true,
- "following": true,
- "id": "9v5c3Y0cpOFdnATp5c",
- "muting": false,
- "muting_notifications": false,
- "requested": false,
- "showing_reblogs": true,
- "subscribing": false
- },
- "skip_thread_containment": false,
- "tags": []
- },
- "source": {
- "fields": [],
- "note": "Lover of tech. Supporter of freedom.Be nice, I will be nice back.Boosts ≠ endorsement.",
- "pleroma": {
- "actor_type": "Person",
- "discoverable": false
- },
- "sensitive": false
- },
- "statuses_count": 642,
- "url": "https://quey.org/@hackerjunkie",
- "username": "hackerjunkie"
- },
- "application": {
- "name": "Web",
- "website": null
- },
- "bookmarked": false,
- "card": null,
- "content": "@alex whatever you do: KEEP GOING ALMOST THERE YOU CAN DO IT!
",
- "created_at": "2020-06-09T18:36:14.000Z",
- "emojis": [],
- "favourited": true,
- "favourites_count": 1,
- "id": "9vun65zpVRQd7oDNGi",
- "in_reply_to_account_id": "9v5bmRalQvjOy0ECcC",
- "in_reply_to_id": "9vumw53EAK9vIW1oqe",
- "language": null,
- "media_attachments": [],
- "mentions": [
- {
- "acct": "alex",
- "id": "9v5bmRalQvjOy0ECcC",
- "url": "https://gleasonator.com/users/alex",
- "username": "alex"
- }
- ],
- "muted": false,
- "pinned": false,
- "pleroma": {
- "content": {
- "text_plain": "@alex whatever you do: KEEP GOING ALMOST THERE YOU CAN DO IT!"
- },
- "conversation_id": 1150963,
- "direct_conversation_id": null,
- "emoji_reactions": [],
- "expires_at": null,
- "in_reply_to_account_acct": "alex",
- "local": false,
- "spoiler_text": {
- "text_plain": ""
- },
- "thread_muted": false
- },
- "poll": null,
- "reblog": null,
- "reblogged": false,
- "reblogs_count": 3,
- "replies_count": 0,
- "sensitive": false,
- "spoiler_text": "",
- "tags": [],
- "uri": "https://quey.org/users/hackerjunkie/statuses/104315471432969831",
- "url": "https://quey.org/@hackerjunkie/104315471432969831",
- "visibility": "public"
- },
- "type": "mention"
- },
- {
- "account": {
- "acct": "niggaflamebuttholeaids@husk.site",
- "avatar": "https://husk.site/media/063a8f97e9b5d2f04e01e8ce98f71a201f82e86e53b78e66b121b774a3ca565d.png",
- "avatar_static": "https://husk.site/media/063a8f97e9b5d2f04e01e8ce98f71a201f82e86e53b78e66b121b774a3ca565d.png",
- "bot": false,
- "created_at": "2020-05-03T01:39:47.000Z",
- "display_name": ":brain3: Steven :alexjonesflexing:",
- "emojis": [
- {
- "shortcode": "alexjonesflexing",
- "static_url": "https://husk.site/emoji/custom/alexjonesflexing.png",
- "url": "https://husk.site/emoji/custom/alexjonesflexing.png",
- "visible_in_picker": false
- },
- {
- "shortcode": "brain3",
- "static_url": "https://husk.site/emoji/custom/brain3.png",
- "url": "https://husk.site/emoji/custom/brain3.png",
- "visible_in_picker": false
- }
- ],
- "fields": [],
- "followers_count": 90,
- "following_count": 67,
- "header": "https://husk.site/media/8af4afad13e7940333df2680b1ade653bb6e63b76d58d583ed8cffe85292dc16.png",
- "header_static": "https://husk.site/media/8af4afad13e7940333df2680b1ade653bb6e63b76d58d583ed8cffe85292dc16.png",
- "id": "9v5cKMOPGqPcgfcWp6",
- "locked": false,
- "note": "Professional Liar",
- "pleroma": {
- "background_image": null,
- "confirmation_pending": true,
- "deactivated": false,
- "hide_favorites": true,
- "hide_followers": false,
- "hide_followers_count": false,
- "hide_follows": false,
- "hide_follows_count": false,
- "is_admin": false,
- "is_moderator": false,
- "relationship": {
- "blocked_by": false,
- "blocking": false,
- "domain_blocking": false,
- "endorsed": false,
- "followed_by": true,
- "following": true,
- "id": "9v5cKMOPGqPcgfcWp6",
- "muting": false,
- "muting_notifications": false,
- "requested": false,
- "showing_reblogs": true,
- "subscribing": false
- },
- "skip_thread_containment": false,
- "tags": []
- },
- "source": {
- "fields": [],
- "note": "Professional Liar",
- "pleroma": {
- "actor_type": "Person",
- "discoverable": true
- },
- "sensitive": false
- },
- "statuses_count": 5350,
- "url": "https://husk.site/users/niggaflamebuttholeaids",
- "username": "niggaflamebuttholeaids"
- },
- "created_at": "2020-06-09T18:35:23.000Z",
- "id": "10716",
- "pleroma": {
- "is_seen": true
- },
- "status": {
- "account": {
- "acct": "alex",
- "avatar": "https://media.gleasonator.com/accounts/avatars/000/000/001/original/1a630e4c4c64c948.jpg",
- "avatar_static": "https://media.gleasonator.com/accounts/avatars/000/000/001/original/1a630e4c4c64c948.jpg",
- "bot": false,
- "created_at": "2020-01-08T01:25:43.000Z",
- "display_name": "Alex Gleason",
- "emojis": [],
- "fields": [
- {
- "name": "Website",
- "value": "https://alexgleason.me "
- },
- {
- "name": "Pleroma+Soapbox",
- "value": "https://soapbox.pub "
- },
- {
- "name": "Email",
- "value": "alex@alexgleason.me"
- },
- {
- "name": "Gender identity",
- "value": "Soyboy"
- }
- ],
- "follow_requests_count": 0,
- "followers_count": 474,
- "following_count": 1083,
- "header": "https://media.gleasonator.com/accounts/headers/000/000/001/original/9d0e4dbf1c9dbc8f.png",
- "header_static": "https://media.gleasonator.com/accounts/headers/000/000/001/original/9d0e4dbf1c9dbc8f.png",
- "id": "9v5bmRalQvjOy0ECcC",
- "locked": false,
- "note": "Fediverse developer. I come in peace. #vegan #freeculture #atheist #antiporn #gendercritical . Boosts ≠ endorsements.",
- "pleroma": {
- "allow_following_move": true,
- "background_image": null,
- "confirmation_pending": false,
- "deactivated": false,
- "hide_favorites": true,
- "hide_followers": false,
- "hide_followers_count": false,
- "hide_follows": false,
- "hide_follows_count": false,
- "is_admin": true,
- "is_moderator": false,
- "notification_settings": {
- "followers": true,
- "follows": true,
- "non_followers": true,
- "non_follows": true,
- "privacy_option": false
- },
- "relationship": {
- "blocked_by": false,
- "blocking": false,
- "domain_blocking": false,
- "endorsed": false,
- "followed_by": false,
- "following": false,
- "id": "9v5bmRalQvjOy0ECcC",
- "muting": false,
- "muting_notifications": false,
- "requested": false,
- "showing_reblogs": true,
- "subscribing": false
- },
- "skip_thread_containment": false,
- "tags": [],
- "unread_conversation_count": 25
- },
- "source": {
- "fields": [
- {
- "name": "Website",
- "value": "https://alexgleason.me"
- },
- {
- "name": "Pleroma+Soapbox",
- "value": "https://soapbox.pub"
- },
- {
- "name": "Email",
- "value": "alex@alexgleason.me"
- },
- {
- "name": "Gender identity",
- "value": "Soyboy"
- }
- ],
- "note": "Fediverse developer. I come in peace. #vegan #freeculture #atheist #antiporn #gendercritical. Boosts ≠ endorsements.",
- "pleroma": {
- "actor_type": "Person",
- "discoverable": false,
- "no_rich_text": false,
- "show_role": true
- },
- "privacy": "public",
- "sensitive": false
- },
- "statuses_count": 4857,
- "url": "https://gleasonator.com/users/alex",
- "username": "alex"
- },
- "application": {
- "name": "Web",
- "website": null
- },
- "bookmarked": false,
- "card": null,
- "content": "Been feeling like I'm losing my mind a bit the past few days. I feel like I'm pushing heavy weights up a steep hill and it's never-ending. Can't wait to get to the top so I can sail down. Working on automated tests today.",
- "created_at": "2020-06-09T18:34:26.000Z",
- "emojis": [],
- "favourited": false,
- "favourites_count": 1,
- "id": "9vumw53EAK9vIW1oqe",
- "in_reply_to_account_id": null,
- "in_reply_to_id": null,
- "language": null,
- "media_attachments": [],
- "mentions": [],
- "muted": false,
- "pinned": false,
- "pleroma": {
- "content": {
- "text_plain": "Been feeling like I'm losing my mind a bit the past few days. I feel like I'm pushing heavy weights up a steep hill and it's never-ending. Can't wait to get to the top so I can sail down.Working on automated tests today."
- },
- "conversation_id": 1150963,
- "direct_conversation_id": null,
- "emoji_reactions": [
- {
- "count": 1,
- "me": false,
- "name": "😢"
- }
- ],
- "expires_at": null,
- "in_reply_to_account_acct": null,
- "local": true,
- "spoiler_text": {
- "text_plain": ""
- },
- "thread_muted": false
- },
- "poll": null,
- "reblog": null,
- "reblogged": false,
- "reblogs_count": 0,
- "replies_count": 0,
- "sensitive": false,
- "spoiler_text": "",
- "tags": [],
- "uri": "https://gleasonator.com/objects/30bde29e-c456-41ce-b767-bf562513285b",
- "url": "https://gleasonator.com/notice/9vumw53EAK9vIW1oqe",
- "visibility": "public"
- },
- "type": "favourite"
- },
- {
- "account": {
- "acct": "niggaflamebuttholeaids@husk.site",
- "avatar": "https://husk.site/media/063a8f97e9b5d2f04e01e8ce98f71a201f82e86e53b78e66b121b774a3ca565d.png",
- "avatar_static": "https://husk.site/media/063a8f97e9b5d2f04e01e8ce98f71a201f82e86e53b78e66b121b774a3ca565d.png",
- "bot": false,
- "created_at": "2020-05-03T01:39:47.000Z",
- "display_name": ":brain3: Steven :alexjonesflexing:",
- "emojis": [
- {
- "shortcode": "alexjonesflexing",
- "static_url": "https://husk.site/emoji/custom/alexjonesflexing.png",
- "url": "https://husk.site/emoji/custom/alexjonesflexing.png",
- "visible_in_picker": false
- },
- {
- "shortcode": "brain3",
- "static_url": "https://husk.site/emoji/custom/brain3.png",
- "url": "https://husk.site/emoji/custom/brain3.png",
- "visible_in_picker": false
- }
- ],
- "fields": [],
- "followers_count": 90,
- "following_count": 67,
- "header": "https://husk.site/media/8af4afad13e7940333df2680b1ade653bb6e63b76d58d583ed8cffe85292dc16.png",
- "header_static": "https://husk.site/media/8af4afad13e7940333df2680b1ade653bb6e63b76d58d583ed8cffe85292dc16.png",
- "id": "9v5cKMOPGqPcgfcWp6",
- "locked": false,
- "note": "Professional Liar",
- "pleroma": {
- "background_image": null,
- "confirmation_pending": true,
- "deactivated": false,
- "hide_favorites": true,
- "hide_followers": false,
- "hide_followers_count": false,
- "hide_follows": false,
- "hide_follows_count": false,
- "is_admin": false,
- "is_moderator": false,
- "relationship": {
- "blocked_by": false,
- "blocking": false,
- "domain_blocking": false,
- "endorsed": false,
- "followed_by": true,
- "following": true,
- "id": "9v5cKMOPGqPcgfcWp6",
- "muting": false,
- "muting_notifications": false,
- "requested": false,
- "showing_reblogs": true,
- "subscribing": false
- },
- "skip_thread_containment": false,
- "tags": []
- },
- "source": {
- "fields": [],
- "note": "Professional Liar",
- "pleroma": {
- "actor_type": "Person",
- "discoverable": true
- },
- "sensitive": false
- },
- "statuses_count": 5350,
- "url": "https://husk.site/users/niggaflamebuttholeaids",
- "username": "niggaflamebuttholeaids"
- },
- "created_at": "2020-06-09T18:35:09.000Z",
- "id": "10715",
- "pleroma": {
- "is_seen": true
- },
- "status": {
- "account": {
- "acct": "niggaflamebuttholeaids@husk.site",
- "avatar": "https://husk.site/media/063a8f97e9b5d2f04e01e8ce98f71a201f82e86e53b78e66b121b774a3ca565d.png",
- "avatar_static": "https://husk.site/media/063a8f97e9b5d2f04e01e8ce98f71a201f82e86e53b78e66b121b774a3ca565d.png",
- "bot": false,
- "created_at": "2020-05-03T01:39:47.000Z",
- "display_name": ":brain3: Steven :alexjonesflexing:",
- "emojis": [
- {
- "shortcode": "alexjonesflexing",
- "static_url": "https://husk.site/emoji/custom/alexjonesflexing.png",
- "url": "https://husk.site/emoji/custom/alexjonesflexing.png",
- "visible_in_picker": false
- },
- {
- "shortcode": "brain3",
- "static_url": "https://husk.site/emoji/custom/brain3.png",
- "url": "https://husk.site/emoji/custom/brain3.png",
- "visible_in_picker": false
- }
- ],
- "fields": [],
- "followers_count": 90,
- "following_count": 67,
- "header": "https://husk.site/media/8af4afad13e7940333df2680b1ade653bb6e63b76d58d583ed8cffe85292dc16.png",
- "header_static": "https://husk.site/media/8af4afad13e7940333df2680b1ade653bb6e63b76d58d583ed8cffe85292dc16.png",
- "id": "9v5cKMOPGqPcgfcWp6",
- "locked": false,
- "note": "Professional Liar",
- "pleroma": {
- "background_image": null,
- "confirmation_pending": true,
- "deactivated": false,
- "hide_favorites": true,
- "hide_followers": false,
- "hide_followers_count": false,
- "hide_follows": false,
- "hide_follows_count": false,
- "is_admin": false,
- "is_moderator": false,
- "relationship": {
- "blocked_by": false,
- "blocking": false,
- "domain_blocking": false,
- "endorsed": false,
- "followed_by": true,
- "following": true,
- "id": "9v5cKMOPGqPcgfcWp6",
- "muting": false,
- "muting_notifications": false,
- "requested": false,
- "showing_reblogs": true,
- "subscribing": false
- },
- "skip_thread_containment": false,
- "tags": []
- },
- "source": {
- "fields": [],
- "note": "Professional Liar",
- "pleroma": {
- "actor_type": "Person",
- "discoverable": true
- },
- "sensitive": false
- },
- "statuses_count": 5350,
- "url": "https://husk.site/users/niggaflamebuttholeaids",
- "username": "niggaflamebuttholeaids"
- },
- "application": {
- "name": "Web",
- "website": null
- },
- "bookmarked": false,
- "card": null,
- "content": "@alex You're close to a finish line 🌈",
- "created_at": "2020-06-09T18:35:08.000Z",
- "emojis": [],
- "favourited": true,
- "favourites_count": 1,
- "id": "9vun03Vlpd9xgHH5UW",
- "in_reply_to_account_id": "9v5bmRalQvjOy0ECcC",
- "in_reply_to_id": "9vumw53EAK9vIW1oqe",
- "language": null,
- "media_attachments": [],
- "mentions": [
- {
- "acct": "alex",
- "id": "9v5bmRalQvjOy0ECcC",
- "url": "https://gleasonator.com/users/alex",
- "username": "alex"
- }
- ],
- "muted": false,
- "pinned": false,
- "pleroma": {
- "content": {
- "text_plain": "@alex You're close to a finish line 🌈"
- },
- "conversation_id": 1150963,
- "direct_conversation_id": null,
- "emoji_reactions": [],
- "expires_at": null,
- "in_reply_to_account_acct": "alex",
- "local": false,
- "spoiler_text": {
- "text_plain": ""
- },
- "thread_muted": false
- },
- "poll": null,
- "reblog": null,
- "reblogged": false,
- "reblogs_count": 0,
- "replies_count": 0,
- "sensitive": false,
- "spoiler_text": "",
- "tags": [],
- "uri": "https://husk.site/objects/9d3eb87b-978c-4ff2-8fb7-22fe22adcbd7",
- "url": "https://husk.site/objects/9d3eb87b-978c-4ff2-8fb7-22fe22adcbd7",
- "visibility": "unlisted"
- },
- "type": "mention"
- },
- {
- "account": {
- "acct": "crockwave",
- "avatar": "https://media.gleasonator.com/d6dcd2779bdb63ef8b8a5f127743f5ad757046943c4b4a8867215c15a72c5e55.png",
- "avatar_static": "https://media.gleasonator.com/d6dcd2779bdb63ef8b8a5f127743f5ad757046943c4b4a8867215c15a72c5e55.png",
- "bot": false,
- "created_at": "2020-02-26T16:31:25.000Z",
- "display_name": "Curtis Rock",
- "emojis": [],
- "fields": [
- {
- "name": "Web Site/Book",
- "value": "https://teci.world/a-users-guide-to-the-great-awakening "
- },
- {
- "name": "Gab",
- "value": "https://gab.com/crockwave "
- },
- {
- "name": "Twitter",
- "value": "https://twitter.com/GAP_Great "
- },
- {
- "name": "MeWe",
- "value": "https://mewe.com/i/curtisrock "
- }
- ],
- "followers_count": 13,
- "following_count": 11,
- "header": "https://media.gleasonator.com/82720af49afb0daa2a700f4371db9848cd7efb38eaca09d47898e8e7b527e0b4.png",
- "header_static": "https://media.gleasonator.com/82720af49afb0daa2a700f4371db9848cd7efb38eaca09d47898e8e7b527e0b4.png",
- "id": "9v5c6xSEgAi3Zu1Lv6",
- "locked": false,
- "note": "soapbox development team test test2",
- "pleroma": {
- "background_image": null,
- "confirmation_pending": false,
- "deactivated": false,
- "hide_favorites": true,
- "hide_followers": false,
- "hide_followers_count": false,
- "hide_follows": false,
- "hide_follows_count": false,
- "is_admin": false,
- "is_moderator": false,
- "relationship": {
- "blocked_by": false,
- "blocking": false,
- "domain_blocking": false,
- "endorsed": false,
- "followed_by": true,
- "following": true,
- "id": "9v5c6xSEgAi3Zu1Lv6",
- "muting": false,
- "muting_notifications": false,
- "requested": false,
- "showing_reblogs": true,
- "subscribing": false
- },
- "skip_thread_containment": false,
- "tags": []
- },
- "source": {
- "fields": [
- {
- "name": "Web Site/Book",
- "value": "https://teci.world/a-users-guide-to-the-great-awakening"
- },
- {
- "name": "Gab",
- "value": "https://gab.com/crockwave"
- },
- {
- "name": "Twitter",
- "value": "https://twitter.com/GAP_Great"
- },
- {
- "name": "MeWe",
- "value": "https://mewe.com/i/curtisrock"
- }
- ],
- "note": "soapbox development team test test2",
- "pleroma": {
- "actor_type": "Person",
- "discoverable": false
- },
- "sensitive": false
- },
- "statuses_count": 212,
- "url": "https://gleasonator.com/users/crockwave",
- "username": "crockwave"
- },
- "created_at": "2020-06-09T18:34:36.000Z",
- "id": "10713",
- "pleroma": {
- "is_seen": true
- },
- "status": {
- "account": {
- "acct": "crockwave",
- "avatar": "https://media.gleasonator.com/d6dcd2779bdb63ef8b8a5f127743f5ad757046943c4b4a8867215c15a72c5e55.png",
- "avatar_static": "https://media.gleasonator.com/d6dcd2779bdb63ef8b8a5f127743f5ad757046943c4b4a8867215c15a72c5e55.png",
- "bot": false,
- "created_at": "2020-02-26T16:31:25.000Z",
- "display_name": "Curtis Rock",
- "emojis": [],
- "fields": [
- {
- "name": "Web Site/Book",
- "value": "https://teci.world/a-users-guide-to-the-great-awakening "
- },
- {
- "name": "Gab",
- "value": "https://gab.com/crockwave "
- },
- {
- "name": "Twitter",
- "value": "https://twitter.com/GAP_Great "
- },
- {
- "name": "MeWe",
- "value": "https://mewe.com/i/curtisrock "
- }
- ],
- "followers_count": 13,
- "following_count": 11,
- "header": "https://media.gleasonator.com/82720af49afb0daa2a700f4371db9848cd7efb38eaca09d47898e8e7b527e0b4.png",
- "header_static": "https://media.gleasonator.com/82720af49afb0daa2a700f4371db9848cd7efb38eaca09d47898e8e7b527e0b4.png",
- "id": "9v5c6xSEgAi3Zu1Lv6",
- "locked": false,
- "note": "soapbox development team test test2",
- "pleroma": {
- "background_image": null,
- "confirmation_pending": false,
- "deactivated": false,
- "hide_favorites": true,
- "hide_followers": false,
- "hide_followers_count": false,
- "hide_follows": false,
- "hide_follows_count": false,
- "is_admin": false,
- "is_moderator": false,
- "relationship": {
- "blocked_by": false,
- "blocking": false,
- "domain_blocking": false,
- "endorsed": false,
- "followed_by": true,
- "following": true,
- "id": "9v5c6xSEgAi3Zu1Lv6",
- "muting": false,
- "muting_notifications": false,
- "requested": false,
- "showing_reblogs": true,
- "subscribing": false
- },
- "skip_thread_containment": false,
- "tags": []
- },
- "source": {
- "fields": [
- {
- "name": "Web Site/Book",
- "value": "https://teci.world/a-users-guide-to-the-great-awakening"
- },
- {
- "name": "Gab",
- "value": "https://gab.com/crockwave"
- },
- {
- "name": "Twitter",
- "value": "https://twitter.com/GAP_Great"
- },
- {
- "name": "MeWe",
- "value": "https://mewe.com/i/curtisrock"
- }
- ],
- "note": "soapbox development team test test2",
- "pleroma": {
- "actor_type": "Person",
- "discoverable": false
- },
- "sensitive": false
- },
- "statuses_count": 212,
- "url": "https://gleasonator.com/users/crockwave",
- "username": "crockwave"
- },
- "application": {
- "name": "Web",
- "website": null
- },
- "bookmarked": false,
- "card": null,
- "content": "@alex I think a wrapper service can provide many future benefits, if the complications are manageable. It would allow you to stay well ahead of the features development curve. There is also great value in displaying funding goals status on the home page. The Patron tag is also highly valuable from a social community standpoint.",
- "created_at": "2020-06-09T18:34:36.000Z",
- "emojis": [],
- "favourited": true,
- "favourites_count": 2,
- "id": "9vumx07RzIPCI7RUqO",
- "in_reply_to_account_id": "9v5bmRalQvjOy0ECcC",
- "in_reply_to_id": "9vukdh0qbKoPch1GVM",
- "language": null,
- "media_attachments": [],
- "mentions": [
- {
- "acct": "alex",
- "id": "9v5bmRalQvjOy0ECcC",
- "url": "https://gleasonator.com/users/alex",
- "username": "alex"
- }
- ],
- "muted": false,
- "pinned": false,
- "pleroma": {
- "content": {
- "text_plain": "@alex I think a wrapper service can provide many future benefits, if the complications are manageable. It would allow you to stay well ahead of the features development curve. There is also great value in displaying funding goals status on the home page. The Patron tag is also highly valuable from a social community standpoint."
- },
- "conversation_id": 1149840,
- "direct_conversation_id": null,
- "emoji_reactions": [],
- "expires_at": null,
- "in_reply_to_account_acct": "alex",
- "local": true,
- "spoiler_text": {
- "text_plain": ""
- },
- "thread_muted": false
- },
- "poll": null,
- "reblog": null,
- "reblogged": false,
- "reblogs_count": 0,
- "replies_count": 0,
- "sensitive": false,
- "spoiler_text": "",
- "tags": [],
- "uri": "https://gleasonator.com/objects/33384000-c19e-4df3-a5ea-b1d5a8dc4c3c",
- "url": "https://gleasonator.com/notice/9vumx07RzIPCI7RUqO",
- "visibility": "public"
- },
- "type": "mention"
- },
- {
- "account": {
- "acct": "crockwave",
- "avatar": "https://media.gleasonator.com/d6dcd2779bdb63ef8b8a5f127743f5ad757046943c4b4a8867215c15a72c5e55.png",
- "avatar_static": "https://media.gleasonator.com/d6dcd2779bdb63ef8b8a5f127743f5ad757046943c4b4a8867215c15a72c5e55.png",
- "bot": false,
- "created_at": "2020-02-26T16:31:25.000Z",
- "display_name": "Curtis Rock",
- "emojis": [],
- "fields": [
- {
- "name": "Web Site/Book",
- "value": "https://teci.world/a-users-guide-to-the-great-awakening "
- },
- {
- "name": "Gab",
- "value": "https://gab.com/crockwave "
- },
- {
- "name": "Twitter",
- "value": "https://twitter.com/GAP_Great "
- },
- {
- "name": "MeWe",
- "value": "https://mewe.com/i/curtisrock "
- }
- ],
- "followers_count": 13,
- "following_count": 11,
- "header": "https://media.gleasonator.com/82720af49afb0daa2a700f4371db9848cd7efb38eaca09d47898e8e7b527e0b4.png",
- "header_static": "https://media.gleasonator.com/82720af49afb0daa2a700f4371db9848cd7efb38eaca09d47898e8e7b527e0b4.png",
- "id": "9v5c6xSEgAi3Zu1Lv6",
- "locked": false,
- "note": "soapbox development team test test2",
- "pleroma": {
- "background_image": null,
- "confirmation_pending": false,
- "deactivated": false,
- "hide_favorites": true,
- "hide_followers": false,
- "hide_followers_count": false,
- "hide_follows": false,
- "hide_follows_count": false,
- "is_admin": false,
- "is_moderator": false,
- "relationship": {
- "blocked_by": false,
- "blocking": false,
- "domain_blocking": false,
- "endorsed": false,
- "followed_by": true,
- "following": true,
- "id": "9v5c6xSEgAi3Zu1Lv6",
- "muting": false,
- "muting_notifications": false,
- "requested": false,
- "showing_reblogs": true,
- "subscribing": false
- },
- "skip_thread_containment": false,
- "tags": []
- },
- "source": {
- "fields": [
- {
- "name": "Web Site/Book",
- "value": "https://teci.world/a-users-guide-to-the-great-awakening"
- },
- {
- "name": "Gab",
- "value": "https://gab.com/crockwave"
- },
- {
- "name": "Twitter",
- "value": "https://twitter.com/GAP_Great"
- },
- {
- "name": "MeWe",
- "value": "https://mewe.com/i/curtisrock"
- }
- ],
- "note": "soapbox development team test test2",
- "pleroma": {
- "actor_type": "Person",
- "discoverable": false
- },
- "sensitive": false
- },
- "statuses_count": 212,
- "url": "https://gleasonator.com/users/crockwave",
- "username": "crockwave"
- },
- "created_at": "2020-06-09T18:31:42.000Z",
- "id": "10712",
- "pleroma": {
- "is_seen": true
- },
- "status": {
- "account": {
- "acct": "alex",
- "avatar": "https://media.gleasonator.com/accounts/avatars/000/000/001/original/1a630e4c4c64c948.jpg",
- "avatar_static": "https://media.gleasonator.com/accounts/avatars/000/000/001/original/1a630e4c4c64c948.jpg",
- "bot": false,
- "created_at": "2020-01-08T01:25:43.000Z",
- "display_name": "Alex Gleason",
- "emojis": [],
- "fields": [
- {
- "name": "Website",
- "value": "https://alexgleason.me "
- },
- {
- "name": "Pleroma+Soapbox",
- "value": "https://soapbox.pub "
- },
- {
- "name": "Email",
- "value": "alex@alexgleason.me"
- },
- {
- "name": "Gender identity",
- "value": "Soyboy"
- }
- ],
- "follow_requests_count": 0,
- "followers_count": 474,
- "following_count": 1083,
- "header": "https://media.gleasonator.com/accounts/headers/000/000/001/original/9d0e4dbf1c9dbc8f.png",
- "header_static": "https://media.gleasonator.com/accounts/headers/000/000/001/original/9d0e4dbf1c9dbc8f.png",
- "id": "9v5bmRalQvjOy0ECcC",
- "locked": false,
- "note": "Fediverse developer. I come in peace. #vegan #freeculture #atheist #antiporn #gendercritical . Boosts ≠ endorsements.",
- "pleroma": {
- "allow_following_move": true,
- "background_image": null,
- "confirmation_pending": false,
- "deactivated": false,
- "hide_favorites": true,
- "hide_followers": false,
- "hide_followers_count": false,
- "hide_follows": false,
- "hide_follows_count": false,
- "is_admin": true,
- "is_moderator": false,
- "notification_settings": {
- "followers": true,
- "follows": true,
- "non_followers": true,
- "non_follows": true,
- "privacy_option": false
- },
- "relationship": {
- "blocked_by": false,
- "blocking": false,
- "domain_blocking": false,
- "endorsed": false,
- "followed_by": false,
- "following": false,
- "id": "9v5bmRalQvjOy0ECcC",
- "muting": false,
- "muting_notifications": false,
- "requested": false,
- "showing_reblogs": true,
- "subscribing": false
- },
- "skip_thread_containment": false,
- "tags": [],
- "unread_conversation_count": 25
- },
- "source": {
- "fields": [
- {
- "name": "Website",
- "value": "https://alexgleason.me"
- },
- {
- "name": "Pleroma+Soapbox",
- "value": "https://soapbox.pub"
- },
- {
- "name": "Email",
- "value": "alex@alexgleason.me"
- },
- {
- "name": "Gender identity",
- "value": "Soyboy"
- }
- ],
- "note": "Fediverse developer. I come in peace. #vegan #freeculture #atheist #antiporn #gendercritical. Boosts ≠ endorsements.",
- "pleroma": {
- "actor_type": "Person",
- "discoverable": false,
- "no_rich_text": false,
- "show_role": true
- },
- "privacy": "public",
- "sensitive": false
- },
- "statuses_count": 4857,
- "url": "https://gleasonator.com/users/alex",
- "username": "alex"
- },
- "application": {
- "name": "Web",
- "website": null
- },
- "bookmarked": false,
- "card": null,
- "content": "Pleroma Recurring Donations update: looking into other solutions, possibly working from fosspay instead: https://git.pleroma.social/pleroma/pleroma/-/issues/1853#note_62881 ",
- "created_at": "2020-06-09T18:08:42.000Z",
- "emojis": [],
- "favourited": false,
- "favourites_count": 3,
- "id": "9vukdh0qbKoPch1GVM",
- "in_reply_to_account_id": null,
- "in_reply_to_id": null,
- "language": null,
- "media_attachments": [],
- "mentions": [],
- "muted": false,
- "pinned": false,
- "pleroma": {
- "content": {
- "text_plain": "Pleroma Recurring Donations update: looking into other solutions, possibly working from fosspay instead: https://git.pleroma.social/pleroma/pleroma/-/issues/1853#note_62881"
- },
- "conversation_id": 1149840,
- "direct_conversation_id": null,
- "emoji_reactions": [],
- "expires_at": null,
- "in_reply_to_account_acct": null,
- "local": true,
- "spoiler_text": {
- "text_plain": ""
- },
- "thread_muted": false
- },
- "poll": null,
- "reblog": null,
- "reblogged": false,
- "reblogs_count": 1,
- "replies_count": 0,
- "sensitive": false,
- "spoiler_text": "",
- "tags": [],
- "uri": "https://gleasonator.com/objects/945e75ad-e6ce-4f07-be69-23027e153100",
- "url": "https://gleasonator.com/notice/9vukdh0qbKoPch1GVM",
- "visibility": "public"
- },
- "type": "favourite"
- },
- {
- "account": {
- "acct": "judgedread@freespeechextremist.com",
- "avatar": "https://freespeechextremist.com/media/208ebb008b0c4e1ba3eb1ac42523883cd0eaf00b37d329051e5ed36ab709ffbc.png?name=dreddavi2019.png",
- "avatar_static": "https://freespeechextremist.com/media/208ebb008b0c4e1ba3eb1ac42523883cd0eaf00b37d329051e5ed36ab709ffbc.png?name=dreddavi2019.png",
- "bot": false,
- "created_at": "2020-01-08T09:47:11.000Z",
- "display_name": "Dread :verified:",
- "emojis": [
- {
- "shortcode": "verified",
- "static_url": "https://freespeechextremist.com/emoji/custom/verified.png",
- "url": "https://freespeechextremist.com/emoji/custom/verified.png",
- "visible_in_picker": false
- }
- ],
- "fields": [],
- "followers_count": 463,
- "following_count": 52,
- "header": "https://freespeechextremist.com/media/4f58807e934a28d718052cb47c38c4af955dbd4d0e1c15b26a47bb7e32f5efba.png?name=magasanta.png",
- "header_static": "https://freespeechextremist.com/media/4f58807e934a28d718052cb47c38c4af955dbd4d0e1c15b26a47bb7e32f5efba.png?name=magasanta.png",
- "id": "9v5bn9xIUVtqYd6oqW",
- "locked": false,
- "note": "IN MAGA CITY ONE I AM THE LAW",
- "pleroma": {
- "background_image": null,
- "confirmation_pending": true,
- "deactivated": false,
- "hide_favorites": true,
- "hide_followers": true,
- "hide_followers_count": false,
- "hide_follows": true,
- "hide_follows_count": false,
- "is_admin": false,
- "is_moderator": false,
- "relationship": {
- "blocked_by": false,
- "blocking": false,
- "domain_blocking": false,
- "endorsed": false,
- "followed_by": true,
- "following": true,
- "id": "9v5bn9xIUVtqYd6oqW",
- "muting": false,
- "muting_notifications": false,
- "requested": false,
- "showing_reblogs": true,
- "subscribing": false
- },
- "skip_thread_containment": false,
- "tags": []
- },
- "source": {
- "fields": [],
- "note": "IN MAGA CITY ONE I AM THE LAW",
- "pleroma": {
- "actor_type": "Person",
- "discoverable": true
- },
- "sensitive": false
- },
- "statuses_count": 2967,
- "url": "https://freespeechextremist.com/users/judgedread",
- "username": "judgedread"
- },
- "created_at": "2020-06-09T18:25:58.000Z",
- "id": "10711",
- "pleroma": {
- "is_seen": true
- },
- "status": {
- "account": {
- "acct": "alex",
- "avatar": "https://media.gleasonator.com/accounts/avatars/000/000/001/original/1a630e4c4c64c948.jpg",
- "avatar_static": "https://media.gleasonator.com/accounts/avatars/000/000/001/original/1a630e4c4c64c948.jpg",
- "bot": false,
- "created_at": "2020-01-08T01:25:43.000Z",
- "display_name": "Alex Gleason",
- "emojis": [],
- "fields": [
- {
- "name": "Website",
- "value": "https://alexgleason.me "
- },
- {
- "name": "Pleroma+Soapbox",
- "value": "https://soapbox.pub "
- },
- {
- "name": "Email",
- "value": "alex@alexgleason.me"
- },
- {
- "name": "Gender identity",
- "value": "Soyboy"
- }
- ],
- "follow_requests_count": 0,
- "followers_count": 474,
- "following_count": 1083,
- "header": "https://media.gleasonator.com/accounts/headers/000/000/001/original/9d0e4dbf1c9dbc8f.png",
- "header_static": "https://media.gleasonator.com/accounts/headers/000/000/001/original/9d0e4dbf1c9dbc8f.png",
- "id": "9v5bmRalQvjOy0ECcC",
- "locked": false,
- "note": "Fediverse developer. I come in peace. #vegan #freeculture #atheist #antiporn #gendercritical . Boosts ≠ endorsements.",
- "pleroma": {
- "allow_following_move": true,
- "background_image": null,
- "confirmation_pending": false,
- "deactivated": false,
- "hide_favorites": true,
- "hide_followers": false,
- "hide_followers_count": false,
- "hide_follows": false,
- "hide_follows_count": false,
- "is_admin": true,
- "is_moderator": false,
- "notification_settings": {
- "followers": true,
- "follows": true,
- "non_followers": true,
- "non_follows": true,
- "privacy_option": false
- },
- "relationship": {
- "blocked_by": false,
- "blocking": false,
- "domain_blocking": false,
- "endorsed": false,
- "followed_by": false,
- "following": false,
- "id": "9v5bmRalQvjOy0ECcC",
- "muting": false,
- "muting_notifications": false,
- "requested": false,
- "showing_reblogs": true,
- "subscribing": false
- },
- "skip_thread_containment": false,
- "tags": [],
- "unread_conversation_count": 25
- },
- "source": {
- "fields": [
- {
- "name": "Website",
- "value": "https://alexgleason.me"
- },
- {
- "name": "Pleroma+Soapbox",
- "value": "https://soapbox.pub"
- },
- {
- "name": "Email",
- "value": "alex@alexgleason.me"
- },
- {
- "name": "Gender identity",
- "value": "Soyboy"
- }
- ],
- "note": "Fediverse developer. I come in peace. #vegan #freeculture #atheist #antiporn #gendercritical. Boosts ≠ endorsements.",
- "pleroma": {
- "actor_type": "Person",
- "discoverable": false,
- "no_rich_text": false,
- "show_role": true
- },
- "privacy": "public",
- "sensitive": false
- },
- "statuses_count": 4857,
- "url": "https://gleasonator.com/users/alex",
- "username": "alex"
- },
- "application": {
- "name": "Web",
- "website": null
- },
- "bookmarked": false,
- "card": null,
- "content": "@lain Yeah I have no clue what the reasoning was for that one. 😆 It's crazy how "words" are such an ongoing issue in FOSS. A seasoned programmer once told me she's had the deepest programming debates about "naming things." It's true that names are important in programming, but at the end of the day it's just code.",
- "created_at": "2020-06-09T06:12:44.000Z",
- "emojis": [],
- "favourited": false,
- "favourites_count": 2,
- "id": "9vtik6wOifKqi1uXFA",
- "in_reply_to_account_id": "9v5bqYwY2jfmvPNhTM",
- "in_reply_to_id": "9vtiLkS2gRq20c5yHw",
- "language": null,
- "media_attachments": [],
- "mentions": [
- {
- "acct": "lain@lain.com",
- "id": "9v5bqYwY2jfmvPNhTM",
- "url": "https://lain.com/users/lain",
- "username": "lain"
- }
- ],
- "muted": false,
- "pinned": false,
- "pleroma": {
- "content": {
- "text_plain": "@lain Yeah I have no clue what the reasoning was for that one. 😆 It's crazy how \"words\" are such an ongoing issue in FOSS.A seasoned programmer once told me she's had the deepest programming debates about \"naming things.\" It's true that names are important in programming, but at the end of the day it's just code."
- },
- "conversation_id": 1122858,
- "direct_conversation_id": null,
- "emoji_reactions": [],
- "expires_at": null,
- "in_reply_to_account_acct": "lain@lain.com",
- "local": true,
- "spoiler_text": {
- "text_plain": ""
- },
- "thread_muted": false
- },
- "poll": null,
- "reblog": null,
- "reblogged": false,
- "reblogs_count": 0,
- "replies_count": 0,
- "sensitive": false,
- "spoiler_text": "",
- "tags": [],
- "uri": "https://gleasonator.com/objects/e26ed039-136a-4d48-a599-7e4dc4960147",
- "url": "https://gleasonator.com/notice/9vtik6wOifKqi1uXFA",
- "visibility": "public"
- },
- "type": "favourite"
- },
- {
- "account": {
- "acct": "judgedread@freespeechextremist.com",
- "avatar": "https://freespeechextremist.com/media/208ebb008b0c4e1ba3eb1ac42523883cd0eaf00b37d329051e5ed36ab709ffbc.png?name=dreddavi2019.png",
- "avatar_static": "https://freespeechextremist.com/media/208ebb008b0c4e1ba3eb1ac42523883cd0eaf00b37d329051e5ed36ab709ffbc.png?name=dreddavi2019.png",
- "bot": false,
- "created_at": "2020-01-08T09:47:11.000Z",
- "display_name": "Dread :verified:",
- "emojis": [
- {
- "shortcode": "verified",
- "static_url": "https://freespeechextremist.com/emoji/custom/verified.png",
- "url": "https://freespeechextremist.com/emoji/custom/verified.png",
- "visible_in_picker": false
- }
- ],
- "fields": [],
- "followers_count": 463,
- "following_count": 52,
- "header": "https://freespeechextremist.com/media/4f58807e934a28d718052cb47c38c4af955dbd4d0e1c15b26a47bb7e32f5efba.png?name=magasanta.png",
- "header_static": "https://freespeechextremist.com/media/4f58807e934a28d718052cb47c38c4af955dbd4d0e1c15b26a47bb7e32f5efba.png?name=magasanta.png",
- "id": "9v5bn9xIUVtqYd6oqW",
- "locked": false,
- "note": "IN MAGA CITY ONE I AM THE LAW",
- "pleroma": {
- "background_image": null,
- "confirmation_pending": true,
- "deactivated": false,
- "hide_favorites": true,
- "hide_followers": true,
- "hide_followers_count": false,
- "hide_follows": true,
- "hide_follows_count": false,
- "is_admin": false,
- "is_moderator": false,
- "relationship": {
- "blocked_by": false,
- "blocking": false,
- "domain_blocking": false,
- "endorsed": false,
- "followed_by": true,
- "following": true,
- "id": "9v5bn9xIUVtqYd6oqW",
- "muting": false,
- "muting_notifications": false,
- "requested": false,
- "showing_reblogs": true,
- "subscribing": false
- },
- "skip_thread_containment": false,
- "tags": []
- },
- "source": {
- "fields": [],
- "note": "IN MAGA CITY ONE I AM THE LAW",
- "pleroma": {
- "actor_type": "Person",
- "discoverable": true
- },
- "sensitive": false
- },
- "statuses_count": 2967,
- "url": "https://freespeechextremist.com/users/judgedread",
- "username": "judgedread"
- },
- "created_at": "2020-06-09T18:25:51.000Z",
- "id": "10710",
- "pleroma": {
- "is_seen": true
- },
- "status": {
- "account": {
- "acct": "judgedread@freespeechextremist.com",
- "avatar": "https://freespeechextremist.com/media/208ebb008b0c4e1ba3eb1ac42523883cd0eaf00b37d329051e5ed36ab709ffbc.png?name=dreddavi2019.png",
- "avatar_static": "https://freespeechextremist.com/media/208ebb008b0c4e1ba3eb1ac42523883cd0eaf00b37d329051e5ed36ab709ffbc.png?name=dreddavi2019.png",
- "bot": false,
- "created_at": "2020-01-08T09:47:11.000Z",
- "display_name": "Dread :verified:",
- "emojis": [
- {
- "shortcode": "verified",
- "static_url": "https://freespeechextremist.com/emoji/custom/verified.png",
- "url": "https://freespeechextremist.com/emoji/custom/verified.png",
- "visible_in_picker": false
- }
- ],
- "fields": [],
- "followers_count": 463,
- "following_count": 52,
- "header": "https://freespeechextremist.com/media/4f58807e934a28d718052cb47c38c4af955dbd4d0e1c15b26a47bb7e32f5efba.png?name=magasanta.png",
- "header_static": "https://freespeechextremist.com/media/4f58807e934a28d718052cb47c38c4af955dbd4d0e1c15b26a47bb7e32f5efba.png?name=magasanta.png",
- "id": "9v5bn9xIUVtqYd6oqW",
- "locked": false,
- "note": "IN MAGA CITY ONE I AM THE LAW",
- "pleroma": {
- "background_image": null,
- "confirmation_pending": true,
- "deactivated": false,
- "hide_favorites": true,
- "hide_followers": true,
- "hide_followers_count": false,
- "hide_follows": true,
- "hide_follows_count": false,
- "is_admin": false,
- "is_moderator": false,
- "relationship": {
- "blocked_by": false,
- "blocking": false,
- "domain_blocking": false,
- "endorsed": false,
- "followed_by": true,
- "following": true,
- "id": "9v5bn9xIUVtqYd6oqW",
- "muting": false,
- "muting_notifications": false,
- "requested": false,
- "showing_reblogs": true,
- "subscribing": false
- },
- "skip_thread_containment": false,
- "tags": []
- },
- "source": {
- "fields": [],
- "note": "IN MAGA CITY ONE I AM THE LAW",
- "pleroma": {
- "actor_type": "Person",
- "discoverable": true
- },
- "sensitive": false
- },
- "statuses_count": 2967,
- "url": "https://freespeechextremist.com/users/judgedread",
- "username": "judgedread"
- },
- "application": {
- "name": "Web",
- "website": null
- },
- "bookmarked": false,
- "card": null,
- "content": "@alex @lain The Peter Principle has a chapter on this. The less significant the decision the more people feel qualified to have an opinion on it.",
- "created_at": "2020-06-09T18:25:50.000Z",
- "emojis": [],
- "favourited": false,
- "favourites_count": 0,
- "id": "9vumAbQUUZUho8GpNY",
- "in_reply_to_account_id": "9v5bmRalQvjOy0ECcC",
- "in_reply_to_id": "9vtik6wOifKqi1uXFA",
- "language": null,
- "media_attachments": [],
- "mentions": [
- {
- "acct": "alex",
- "id": "9v5bmRalQvjOy0ECcC",
- "url": "https://gleasonator.com/users/alex",
- "username": "alex"
- },
- {
- "acct": "lain@lain.com",
- "id": "9v5bqYwY2jfmvPNhTM",
- "url": "https://lain.com/users/lain",
- "username": "lain"
- }
- ],
- "muted": false,
- "pinned": false,
- "pleroma": {
- "content": {
- "text_plain": "@alex @lain The Peter Principle has a chapter on this.The less significant the decision the more people feel qualified to have an opinion on it."
- },
- "conversation_id": 1122858,
- "direct_conversation_id": null,
- "emoji_reactions": [],
- "expires_at": null,
- "in_reply_to_account_acct": "alex",
- "local": false,
- "spoiler_text": {
- "text_plain": ""
- },
- "thread_muted": false
- },
- "poll": null,
- "reblog": null,
- "reblogged": false,
- "reblogs_count": 0,
- "replies_count": 0,
- "sensitive": false,
- "spoiler_text": "",
- "tags": [],
- "uri": "https://freespeechextremist.com/objects/f66b52ad-733d-4f39-b1e0-5894620da68f",
- "url": "https://freespeechextremist.com/objects/f66b52ad-733d-4f39-b1e0-5894620da68f",
- "visibility": "public"
- },
- "type": "mention"
- },
- {
- "account": {
- "acct": "realcaseyrollins@gameliberty.club",
- "avatar": "https://gameliberty.club/system/accounts/avatars/000/152/185/original/5ebd1445396f1cfc.png?1587331139",
- "avatar_static": "https://gameliberty.club/system/accounts/avatars/000/152/185/original/5ebd1445396f1cfc.png?1587331139",
- "bot": false,
- "created_at": "2020-06-09T05:19:42.000Z",
- "display_name": "DON'T RIOT 🔵 :verified:",
- "emojis": [
- {
- "shortcode": "verified",
- "static_url": "https://gameliberty.club/system/custom_emojis/images/000/013/521/original/759328de266b47aa.png?1552490515",
- "url": "https://gameliberty.club/system/custom_emojis/images/000/013/521/original/759328de266b47aa.png?1552490515",
- "visible_in_picker": false
- }
- ],
- "fields": [
- {
- "name": "Gender Identity",
- "value": "Cisgender Heterosexual Male Human"
- },
- {
- "name": "Counter Points Media",
- "value": "https://www.bitchute.com/channel/M4vBArMe72x0/ "
- },
- {
- "name": "SFW Account",
- "value": "@realcaseyrollins "
- },
- {
- "name": "My clone",
- "value": "@notcaseyrollins"
- }
- ],
- "followers_count": 0,
- "following_count": 0,
- "header": "https://gameliberty.club/system/accounts/headers/000/152/185/original/41ff3762439e7b4a.png?1582765040",
- "header_static": "https://gameliberty.club/system/accounts/headers/000/152/185/original/41ff3762439e7b4a.png?1582765040",
- "id": "9v5c73UwD2R6K1Kaxs",
- "locked": false,
- "note": ""Ugly homophobe!" - @HernanHenry "Morally defunct" - @freemo "Racist! I look down on you." - @pennyzhangsan "Confirmed Nazi." - @p
This used to be way longer. TL;DR, I'm Christian, have a grudge against Gab but like some of the users, am on the #ADHD spectrum, don't like racism, hate groupthink and tribalism, and oh yeah, I have a podcast right here:
https:// bitbucket.org/caseyrollins/cou ntercast/raw/master/rss2.xml
Two favorite Bible verses:
Jesus replied: “‘Love the Lord your God with all your heart and with all your soul and with all your mind.’ This is the first and greatest commandment. And the second is like it: ‘Love your neighbor as yourself.’ (Matthew 22:37-39)
Rejoice in the Lord always. I will say it again: Rejoice! (Phillipians 4:4)
Headspace indicators (inspired by pizza@goblin.camp): 🔵 = I'm in a good headspace. ⚪ = Not doing great, but still ok. 🔴 = Terrible headspace, feel free to ask me how I'm doing. May react angrier than usual to insults.
",
- "pleroma": {
- "background_image": null,
- "confirmation_pending": false,
- "deactivated": false,
- "hide_favorites": true,
- "hide_followers": false,
- "hide_followers_count": false,
- "hide_follows": false,
- "hide_follows_count": false,
- "is_admin": false,
- "is_moderator": false,
- "relationship": {
- "blocked_by": false,
- "blocking": false,
- "domain_blocking": false,
- "endorsed": false,
- "followed_by": true,
- "following": true,
- "id": "9v5c73UwD2R6K1Kaxs",
- "muting": false,
- "muting_notifications": false,
- "requested": false,
- "showing_reblogs": true,
- "subscribing": false
- },
- "skip_thread_containment": false,
- "tags": []
- },
- "source": {
- "fields": [],
- "note": ""Ugly homophobe!" - @HernanHenry\n"Morally defunct" - @freemo\n"Racist! I look down on you." - @pennyzhangsan\n"Confirmed Nazi." - @pThis used to be way longer. TL;DR, I'm Christian, have a grudge against Gab but like some of the users, am on the #ADHD spectrum, don't like racism, hate groupthink and tribalism, and oh yeah, I have a podcast right here:https://bitbucket.org/caseyrollins/countercast/raw/master/rss2.xmlTwo favorite Bible verses:Jesus replied: “‘Love the Lord your God with all your heart and with all your soul and with all your mind.’ This is the first and greatest commandment. And the second is like it: ‘Love your neighbor as yourself.’ (Matthew 22:37-39)Rejoice in the Lord always. I will say it again: Rejoice! (Phillipians 4:4)Headspace indicators (inspired by pizza@goblin.camp):\n🔵 = I'm in a good headspace.\n⚪ = Not doing great, but still ok.\n🔴 = Terrible headspace, feel free to ask me how I'm doing. May react angrier than usual to insults.",
- "pleroma": {
- "actor_type": "Person",
- "discoverable": true
- },
- "sensitive": false
- },
- "statuses_count": 49,
- "url": "https://gameliberty.club/@realcaseyrollins",
- "username": "realcaseyrollins"
- },
- "created_at": "2020-06-09T18:09:39.000Z",
- "id": "10709",
- "pleroma": {
- "is_seen": true
- },
- "status": {
- "account": {
- "acct": "alex",
- "avatar": "https://media.gleasonator.com/accounts/avatars/000/000/001/original/1a630e4c4c64c948.jpg",
- "avatar_static": "https://media.gleasonator.com/accounts/avatars/000/000/001/original/1a630e4c4c64c948.jpg",
- "bot": false,
- "created_at": "2020-01-08T01:25:43.000Z",
- "display_name": "Alex Gleason",
- "emojis": [],
- "fields": [
- {
- "name": "Website",
- "value": "https://alexgleason.me "
- },
- {
- "name": "Pleroma+Soapbox",
- "value": "https://soapbox.pub "
- },
- {
- "name": "Email",
- "value": "alex@alexgleason.me"
- },
- {
- "name": "Gender identity",
- "value": "Soyboy"
- }
- ],
- "follow_requests_count": 0,
- "followers_count": 474,
- "following_count": 1083,
- "header": "https://media.gleasonator.com/accounts/headers/000/000/001/original/9d0e4dbf1c9dbc8f.png",
- "header_static": "https://media.gleasonator.com/accounts/headers/000/000/001/original/9d0e4dbf1c9dbc8f.png",
- "id": "9v5bmRalQvjOy0ECcC",
- "locked": false,
- "note": "Fediverse developer. I come in peace. #vegan #freeculture #atheist #antiporn #gendercritical . Boosts ≠ endorsements.",
- "pleroma": {
- "allow_following_move": true,
- "background_image": null,
- "confirmation_pending": false,
- "deactivated": false,
- "hide_favorites": true,
- "hide_followers": false,
- "hide_followers_count": false,
- "hide_follows": false,
- "hide_follows_count": false,
- "is_admin": true,
- "is_moderator": false,
- "notification_settings": {
- "followers": true,
- "follows": true,
- "non_followers": true,
- "non_follows": true,
- "privacy_option": false
- },
- "relationship": {
- "blocked_by": false,
- "blocking": false,
- "domain_blocking": false,
- "endorsed": false,
- "followed_by": false,
- "following": false,
- "id": "9v5bmRalQvjOy0ECcC",
- "muting": false,
- "muting_notifications": false,
- "requested": false,
- "showing_reblogs": true,
- "subscribing": false
- },
- "skip_thread_containment": false,
- "tags": [],
- "unread_conversation_count": 25
- },
- "source": {
- "fields": [
- {
- "name": "Website",
- "value": "https://alexgleason.me"
- },
- {
- "name": "Pleroma+Soapbox",
- "value": "https://soapbox.pub"
- },
- {
- "name": "Email",
- "value": "alex@alexgleason.me"
- },
- {
- "name": "Gender identity",
- "value": "Soyboy"
- }
- ],
- "note": "Fediverse developer. I come in peace. #vegan #freeculture #atheist #antiporn #gendercritical. Boosts ≠ endorsements.",
- "pleroma": {
- "actor_type": "Person",
- "discoverable": false,
- "no_rich_text": false,
- "show_role": true
- },
- "privacy": "public",
- "sensitive": false
- },
- "statuses_count": 4857,
- "url": "https://gleasonator.com/users/alex",
- "username": "alex"
- },
- "application": {
- "name": "Web",
- "website": null
- },
- "bookmarked": false,
- "card": null,
- "content": "Pleroma Recurring Donations update: looking into other solutions, possibly working from fosspay instead: https://git.pleroma.social/pleroma/pleroma/-/issues/1853#note_62881 ",
- "created_at": "2020-06-09T18:08:42.000Z",
- "emojis": [],
- "favourited": false,
- "favourites_count": 3,
- "id": "9vukdh0qbKoPch1GVM",
- "in_reply_to_account_id": null,
- "in_reply_to_id": null,
- "language": null,
- "media_attachments": [],
- "mentions": [],
- "muted": false,
- "pinned": false,
- "pleroma": {
- "content": {
- "text_plain": "Pleroma Recurring Donations update: looking into other solutions, possibly working from fosspay instead: https://git.pleroma.social/pleroma/pleroma/-/issues/1853#note_62881"
- },
- "conversation_id": 1149840,
- "direct_conversation_id": null,
- "emoji_reactions": [],
- "expires_at": null,
- "in_reply_to_account_acct": null,
- "local": true,
- "spoiler_text": {
- "text_plain": ""
- },
- "thread_muted": false
- },
- "poll": null,
- "reblog": null,
- "reblogged": false,
- "reblogs_count": 1,
- "replies_count": 0,
- "sensitive": false,
- "spoiler_text": "",
- "tags": [],
- "uri": "https://gleasonator.com/objects/945e75ad-e6ce-4f07-be69-23027e153100",
- "url": "https://gleasonator.com/notice/9vukdh0qbKoPch1GVM",
- "visibility": "public"
- },
- "type": "reblog"
- }
-]
diff --git a/packages/pl-fe/src/__fixtures__/patron-instance.json b/packages/pl-fe/src/__fixtures__/patron-instance.json
deleted file mode 100644
index e8b82196c..000000000
--- a/packages/pl-fe/src/__fixtures__/patron-instance.json
+++ /dev/null
@@ -1,17 +0,0 @@
-{
- "funding": {
- "amount": 3500,
- "patrons": 3,
- "currency": "usd",
- "interval": "monthly"
- },
- "goals": [
- {
- "amount": 20000,
- "currency": "usd",
- "interval": "monthly",
- "text": "I'll be able to afford an avocado."
- }
- ],
- "url": "https://patron.gleasonator.com"
-}
diff --git a/packages/pl-fe/src/__fixtures__/patron-user.json b/packages/pl-fe/src/__fixtures__/patron-user.json
deleted file mode 100644
index 95d36674c..000000000
--- a/packages/pl-fe/src/__fixtures__/patron-user.json
+++ /dev/null
@@ -1,4 +0,0 @@
-{
- "is_patron": true,
- "url": "https://gleasonator.com/users/dave"
-}
diff --git a/packages/pl-fe/src/__fixtures__/pixelfed-instance.json b/packages/pl-fe/src/__fixtures__/pixelfed-instance.json
deleted file mode 100644
index 41830e0e4..000000000
--- a/packages/pl-fe/src/__fixtures__/pixelfed-instance.json
+++ /dev/null
@@ -1,66 +0,0 @@
-{
- "uri": "pixelfed.social",
- "title": "pixelfed",
- "short_description": "Pixelfed is an image sharing platform, an ethical alternative to centralized platforms",
- "description": "Pixelfed is an image sharing platform, an ethical alternative to centralized platforms",
- "email": "hello@pixelfed.org",
- "version": "2.7.2 (compatible; Pixelfed 0.11.2)",
- "urls": {
- "streaming_api": "wss://pixelfed.social"
- },
- "stats": {
- "user_count": 45061,
- "status_count": 301357,
- "domain_count": 5028
- },
- "thumbnail": "https://pixelfed.social/img/pixelfed-icon-color.png",
- "languages": [
- "en"
- ],
- "registrations": true,
- "approval_required": false,
- "contact_account": {
- "id": "1",
- "username": "admin",
- "acct": "admin",
- "display_name": "Admin",
- "discoverable": true,
- "locked": false,
- "followers_count": 419,
- "following_count": 2,
- "statuses_count": 6,
- "note": "pixelfed.social Admin. Managed by @dansup",
- "url": "https://pixelfed.social/admin",
- "avatar": "https://pixelfed.social/storage/avatars/000/000/000/001/LSHNCgwbby7wu3iCYV6H_avatar.png?v=4",
- "created_at": "2018-06-01T03:54:08.000000Z",
- "avatar_static": "https://pixelfed.social/storage/avatars/000/000/000/001/LSHNCgwbby7wu3iCYV6H_avatar.png?v=4",
- "bot": false,
- "emojis": [],
- "fields": [],
- "header": "https://pixelfed.social/storage/headers/missing.png",
- "header_static": "https://pixelfed.social/storage/headers/missing.png",
- "last_status_at": null
- },
- "rules": [
- {
- "id": "1",
- "text": "Sexually explicit or violent media must be marked as sensitive when posting"
- },
- {
- "id": "2",
- "text": "No racism, sexism, homophobia, transphobia, xenophobia, or casteism"
- },
- {
- "id": "3",
- "text": "No incitement of violence or promotion of violent ideologies"
- },
- {
- "id": "4",
- "text": "No harassment, dogpiling or doxxing of other users"
- },
- {
- "id": "5",
- "text": "No content illegal in United States"
- }
- ]
-}
diff --git a/packages/pl-fe/src/__fixtures__/pl-fe.json b/packages/pl-fe/src/__fixtures__/pl-fe.json
deleted file mode 100644
index 6208b855b..000000000
--- a/packages/pl-fe/src/__fixtures__/pl-fe.json
+++ /dev/null
@@ -1,40 +0,0 @@
-{
- "logo": "blob:http://localhost:3036/0cdfa863-6889-4199-b870-4942cedd364f",
- "banner": "blob:http://localhost:3036/a835afed-6078-45bd-92b4-7ffd858c3eca",
- "brandColor": "#254f92",
- "customCss": [
- "/instance/static/custom.css"
- ],
- "promoPanel": {
- "items": [
- {
- "icon": "globe",
- "text": "blog",
- "url": "https://teci.world/blog"
- },
- {
- "icon": "globe",
- "text": "book",
- "url": "https://teci.world/book"
- }
- ]
- },
- "extensions": {
- "patron": false
- },
- "defaultSettings": {
- "autoPlayGif": false
- },
- "navlinks": {
- "homeFooter": [
- {
- "title": "about",
- "url": "/instance/about/index.html"
- },
- {
- "title": "tos",
- "url": "/instance/about/tos.html"
- }
- ]
- }
-}
diff --git a/packages/pl-fe/src/__fixtures__/pleroma-2.2.2-account.json b/packages/pl-fe/src/__fixtures__/pleroma-2.2.2-account.json
deleted file mode 100644
index 7df005d65..000000000
--- a/packages/pl-fe/src/__fixtures__/pleroma-2.2.2-account.json
+++ /dev/null
@@ -1,46 +0,0 @@
-{
- "acct": "alex",
- "avatar": "https://freespeechextremist.com/images/avi.png",
- "avatar_static": "https://freespeechextremist.com/images/avi.png",
- "bot": false,
- "created_at": "2022-02-28T01:55:05.000Z",
- "display_name": "Alex Gleason",
- "emojis": [],
- "fields": [],
- "followers_count": 0,
- "following_count": 0,
- "header": "https://freespeechextremist.com/images/banner.png",
- "header_static": "https://freespeechextremist.com/images/banner.png",
- "id": "AGv8wCadU7DqWgMqNk",
- "locked": false,
- "note": "I'm testing out compatibility with an older Pleroma version",
- "pleroma": {
- "accepts_chat_messages": true,
- "ap_id": "https://freespeechextremist.com/users/alex",
- "background_image": null,
- "confirmation_pending": false,
- "favicon": null,
- "hide_favorites": true,
- "hide_followers": false,
- "hide_followers_count": false,
- "hide_follows": false,
- "hide_follows_count": false,
- "is_admin": false,
- "is_moderator": false,
- "relationship": {},
- "skip_thread_containment": false,
- "tags": []
- },
- "source": {
- "fields": [],
- "note": "I'm testing out compatibility with an older Pleroma version",
- "pleroma": {
- "actor_type": "Person",
- "discoverable": true
- },
- "sensitive": false
- },
- "statuses_count": 0,
- "url": "https://freespeechextremist.com/users/alex",
- "username": "alex"
-}
diff --git a/packages/pl-fe/src/__fixtures__/pleroma-account.json b/packages/pl-fe/src/__fixtures__/pleroma-account.json
deleted file mode 100644
index 022978fde..000000000
--- a/packages/pl-fe/src/__fixtures__/pleroma-account.json
+++ /dev/null
@@ -1,127 +0,0 @@
-{
- "acct": "alex",
- "avatar": "https://media.gleasonator.com/6d64aecb17348b23aaff78db4687b9476cb0da1c07cc6a819c2e6ec7144c18b1.png",
- "avatar_static": "https://media.gleasonator.com/6d64aecb17348b23aaff78db4687b9476cb0da1c07cc6a819c2e6ec7144c18b1.png",
- "bot": false,
- "created_at": "2020-01-08T01:25:43.000Z",
- "display_name": "Alex Gleason",
- "emojis": [],
- "fields": [
- {
- "name": "Website",
- "value": "https://alexgleason.me "
- },
- {
- "name": "Soapbox",
- "value": "https://soapbox.pub "
- },
- {
- "name": "Email",
- "value": "alex@alexgleason.me"
- },
- {
- "name": "Gender identity",
- "value": "Soyboy"
- },
- {
- "name": "Donate (PayPal)",
- "value": "https://paypal.me/gleasonator "
- },
- {
- "name": "$BTC",
- "value": "bc1q9cx35adpm73aq2fw40ye6ts8hfxqzjr5unwg0n"
- },
- {
- "name": "$ETH",
- "value": "0xAc9aB5Fc04Dc1cB1789Af75b523Bd23C70B2D717"
- },
- {
- "name": "$DOGE",
- "value": "D5zVZs6jrRakaPVGiErkQiHt9sayzm6V5D"
- },
- {
- "name": "$XMR",
- "value": "45JDCLrjJ4bgVUSbbs2yjy9m5Mf4VLPW8fG7jw9sq5u69rXZZopQogZNeyYkMBnXpkaip4p4QwaaJNhdTotPa9g44DBCzdK"
- }
- ],
- "followers_count": 2378,
- "following_count": 1571,
- "fqn": "alex@gleasonator.com",
- "header": "https://media.gleasonator.com/accounts/headers/000/000/001/original/9d0e4dbf1c9dbc8f.png",
- "header_static": "https://media.gleasonator.com/accounts/headers/000/000/001/original/9d0e4dbf1c9dbc8f.png",
- "id": "9v5bmRalQvjOy0ECcC",
- "last_status_at": "2022-02-20T04:14:49",
- "locked": false,
- "note": "I create Fediverse software that empowers people online. I'm vegan btw Note: If you have a question for me, please tag me publicly. This gives the opportunity for others to chime in, and bystanders to learn.",
- "pleroma": {
- "accepts_chat_messages": true,
- "also_known_as": [
- "https://mitra.social/users/alex"
- ],
- "ap_id": "https://gleasonator.com/users/alex",
- "background_image": null,
- "birthday": "1993-07-03",
- "favicon": "https://gleasonator.com/favicon.png",
- "hide_favorites": true,
- "hide_followers": false,
- "hide_followers_count": false,
- "hide_follows": false,
- "hide_follows_count": false,
- "is_admin": true,
- "is_confirmed": true,
- "is_moderator": false,
- "is_suggested": true,
- "relationship": {},
- "skip_thread_containment": false,
- "tags": []
- },
- "source": {
- "fields": [
- {
- "name": "Website",
- "value": "https://alexgleason.me"
- },
- {
- "name": "Soapbox",
- "value": "https://soapbox.pub"
- },
- {
- "name": "Email",
- "value": "alex@alexgleason.me"
- },
- {
- "name": "Gender identity",
- "value": "Soyboy"
- },
- {
- "name": "Donate (PayPal)",
- "value": "https://paypal.me/gleasonator"
- },
- {
- "name": "$BTC",
- "value": "bc1q9cx35adpm73aq2fw40ye6ts8hfxqzjr5unwg0n"
- },
- {
- "name": "$ETH",
- "value": "0xAc9aB5Fc04Dc1cB1789Af75b523Bd23C70B2D717"
- },
- {
- "name": "$DOGE",
- "value": "D5zVZs6jrRakaPVGiErkQiHt9sayzm6V5D"
- },
- {
- "name": "$XMR",
- "value": "45JDCLrjJ4bgVUSbbs2yjy9m5Mf4VLPW8fG7jw9sq5u69rXZZopQogZNeyYkMBnXpkaip4p4QwaaJNhdTotPa9g44DBCzdK"
- }
- ],
- "note": "I create Fediverse software that empowers people online.\r\n\r\nI'm vegan btw\r\n\r\nNote: If you have a question for me, please tag me publicly. This gives the opportunity for others to chime in, and bystanders to learn.",
- "pleroma": {
- "actor_type": "Person",
- "discoverable": false
- },
- "sensitive": false
- },
- "statuses_count": 23477,
- "url": "https://gleasonator.com/users/alex",
- "username": "alex"
-}
diff --git a/packages/pl-fe/src/__fixtures__/pleroma-admin-config.json b/packages/pl-fe/src/__fixtures__/pleroma-admin-config.json
deleted file mode 100644
index 8e17d1e7b..000000000
--- a/packages/pl-fe/src/__fixtures__/pleroma-admin-config.json
+++ /dev/null
@@ -1,3120 +0,0 @@
-{
- "configs": [
- {
- "group": ":pleroma",
- "key": ":ecto_repos",
- "value": [
- "Pleroma.Repo"
- ]
- },
- {
- "group": ":pleroma",
- "key": "Pleroma.Captcha",
- "value": [
- {
- "tuple": [
- ":enabled",
- true
- ]
- },
- {
- "tuple": [
- ":seconds_valid",
- 300
- ]
- },
- {
- "tuple": [
- ":method",
- "Pleroma.Captcha.Native"
- ]
- }
- ]
- },
- {
- "group": ":pleroma",
- "key": "Pleroma.Captcha.Kocaptcha",
- "value": [
- {
- "tuple": [
- ":endpoint",
- "https://captcha.kotobank.ch"
- ]
- }
- ]
- },
- {
- "group": ":pleroma",
- "key": "Pleroma.Uploaders.S3",
- "value": [
- {
- "tuple": [
- ":bucket",
- null
- ]
- },
- {
- "tuple": [
- ":bucket_namespace",
- null
- ]
- },
- {
- "tuple": [
- ":truncated_namespace",
- null
- ]
- },
- {
- "tuple": [
- ":streaming_enabled",
- true
- ]
- }
- ]
- },
- {
- "group": ":pleroma",
- "key": ":emoji",
- "value": [
- {
- "tuple": [
- ":shortcode_globs",
- [
- "/emoji/custom/**/*.png"
- ]
- ]
- },
- {
- "tuple": [
- ":pack_extensions",
- [
- ".png",
- ".gif"
- ]
- ]
- },
- {
- "tuple": [
- ":groups",
- [
- {
- "tuple": [
- ":Custom",
- [
- "/emoji/*.png",
- "/emoji/**/*.png"
- ]
- ]
- }
- ]
- ]
- },
- {
- "tuple": [
- ":default_manifest",
- "https://git.pleroma.social/pleroma/emoji-index/raw/master/index.json"
- ]
- },
- {
- "tuple": [
- ":shared_pack_cache_seconds_per_file",
- 60
- ]
- }
- ]
- },
- {
- "group": ":pleroma",
- "key": ":uri_schemes",
- "value": [
- {
- "tuple": [
- ":valid_schemes",
- [
- "https",
- "http",
- "dat",
- "dweb",
- "gopher",
- "hyper",
- "ipfs",
- "ipns",
- "irc",
- "ircs",
- "magnet",
- "mailto",
- "mumble",
- "ssb",
- "xmpp"
- ]
- ]
- }
- ]
- },
- {
- "group": ":pleroma",
- "key": ":http",
- "value": [
- {
- "tuple": [
- ":proxy_url",
- null
- ]
- },
- {
- "tuple": [
- ":send_user_agent",
- true
- ]
- },
- {
- "tuple": [
- ":user_agent",
- ":default"
- ]
- },
- {
- "tuple": [
- ":adapter",
- []
- ]
- }
- ]
- },
- {
- "group": ":pleroma",
- "key": ":welcome",
- "value": [
- {
- "tuple": [
- ":direct_message",
- [
- {
- "tuple": [
- ":enabled",
- false
- ]
- },
- {
- "tuple": [
- ":sender_nickname",
- null
- ]
- },
- {
- "tuple": [
- ":message",
- null
- ]
- }
- ]
- ]
- },
- {
- "tuple": [
- ":chat_message",
- [
- {
- "tuple": [
- ":enabled",
- false
- ]
- },
- {
- "tuple": [
- ":sender_nickname",
- null
- ]
- },
- {
- "tuple": [
- ":message",
- null
- ]
- }
- ]
- ]
- },
- {
- "tuple": [
- ":email",
- [
- {
- "tuple": [
- ":enabled",
- false
- ]
- },
- {
- "tuple": [
- ":sender",
- null
- ]
- },
- {
- "tuple": [
- ":subject",
- "Welcome to <%= instance_name %>"
- ]
- },
- {
- "tuple": [
- ":html",
- "Welcome to <%= instance_name %>"
- ]
- },
- {
- "tuple": [
- ":text",
- "Welcome to <%= instance_name %>"
- ]
- }
- ]
- ]
- }
- ]
- },
- {
- "group": ":pleroma",
- "key": ":feed",
- "value": [
- {
- "tuple": [
- ":post_title",
- {
- ":max_length": 100,
- ":omission": "..."
- }
- ]
- }
- ]
- },
- {
- "group": ":pleroma",
- "key": ":markup",
- "value": [
- {
- "tuple": [
- ":allow_inline_images",
- true
- ]
- },
- {
- "tuple": [
- ":allow_headings",
- false
- ]
- },
- {
- "tuple": [
- ":allow_tables",
- false
- ]
- },
- {
- "tuple": [
- ":allow_fonts",
- false
- ]
- },
- {
- "tuple": [
- ":scrub_policy",
- [
- "Pleroma.HTML.Scrubber.Default",
- "Pleroma.HTML.Transform.MediaProxy"
- ]
- ]
- }
- ]
- },
- {
- "group": ":pleroma",
- "key": ":frontend_configurations",
- "value": [
- {
- "tuple": [
- ":pleroma_fe",
- {
- ":alwaysShowSubjectInput": true,
- ":background": "/images/city.jpg",
- ":collapseMessageWithSubject": false,
- ":disableChat": false,
- ":greentext": false,
- ":hideFilteredStatuses": false,
- ":hideMutedPosts": false,
- ":hidePostStats": false,
- ":hideSitename": false,
- ":hideUserStats": false,
- ":loginMethod": "password",
- ":logo": "/static/logo.svg",
- ":logoMargin": ".1em",
- ":logoMask": true,
- ":minimalScopesMode": false,
- ":noAttachmentLinks": false,
- ":nsfwCensorImage": "",
- ":postContentType": "text/plain",
- ":redirectRootLogin": "/main/friends",
- ":redirectRootNoLogin": "/main/all",
- ":scopeCopy": true,
- ":showFeaturesPanel": true,
- ":showInstanceSpecificPanel": false,
- ":sidebarRight": false,
- ":subjectLineBehavior": "email",
- ":theme": "pleroma-dark",
- ":webPushNotifications": false
- }
- ]
- }
- ]
- },
- {
- "group": ":pleroma",
- "key": ":assets",
- "value": [
- {
- "tuple": [
- ":mascots",
- [
- {
- "tuple": [
- ":pleroma_fox_tan",
- {
- ":mime_type": "image/png",
- ":url": "/images/pleroma-fox-tan-smol.png"
- }
- ]
- },
- {
- "tuple": [
- ":pleroma_fox_tan_shy",
- {
- ":mime_type": "image/png",
- ":url": "/images/pleroma-fox-tan-shy.png"
- }
- ]
- }
- ]
- ]
- },
- {
- "tuple": [
- ":default_mascot",
- ":pleroma_fox_tan"
- ]
- }
- ]
- },
- {
- "group": ":pleroma",
- "key": ":manifest",
- "value": [
- {
- "tuple": [
- ":icons",
- [
- {
- ":src": "/static/logo.svg",
- ":type": "image/svg+xml"
- }
- ]
- ]
- },
- {
- "tuple": [
- ":theme_color",
- "#282c37"
- ]
- },
- {
- "tuple": [
- ":background_color",
- "#191b22"
- ]
- }
- ]
- },
- {
- "group": ":pleroma",
- "key": ":streamer",
- "value": [
- {
- "tuple": [
- ":workers",
- 3
- ]
- },
- {
- "tuple": [
- ":overflow_workers",
- 2
- ]
- }
- ]
- },
- {
- "group": ":pleroma",
- "key": ":user",
- "value": [
- {
- "tuple": [
- ":deny_follow_blocked",
- true
- ]
- }
- ]
- },
- {
- "group": ":pleroma",
- "key": ":mrf_normalize_markup",
- "value": [
- {
- "tuple": [
- ":scrub_policy",
- "Pleroma.HTML.Scrubber.Default"
- ]
- }
- ]
- },
- {
- "group": ":pleroma",
- "key": ":mrf_rejectnonpublic",
- "value": [
- {
- "tuple": [
- ":allow_followersonly",
- false
- ]
- },
- {
- "tuple": [
- ":allow_direct",
- false
- ]
- }
- ]
- },
- {
- "group": ":pleroma",
- "key": ":mrf_simple",
- "value": [
- {
- "tuple": [
- ":media_removal",
- []
- ]
- },
- {
- "tuple": [
- ":media_nsfw",
- []
- ]
- },
- {
- "tuple": [
- ":federated_timeline_removal",
- []
- ]
- },
- {
- "tuple": [
- ":report_removal",
- []
- ]
- },
- {
- "tuple": [
- ":reject",
- []
- ]
- },
- {
- "tuple": [
- ":followers_only",
- []
- ]
- },
- {
- "tuple": [
- ":accept",
- []
- ]
- },
- {
- "tuple": [
- ":avatar_removal",
- []
- ]
- },
- {
- "tuple": [
- ":banner_removal",
- []
- ]
- },
- {
- "tuple": [
- ":reject_deletes",
- []
- ]
- }
- ]
- },
- {
- "group": ":pleroma",
- "key": ":mrf_keyword",
- "value": [
- {
- "tuple": [
- ":reject",
- []
- ]
- },
- {
- "tuple": [
- ":federated_timeline_removal",
- []
- ]
- },
- {
- "tuple": [
- ":replace",
- []
- ]
- }
- ]
- },
- {
- "group": ":pleroma",
- "key": ":mrf_hashtag",
- "value": [
- {
- "tuple": [
- ":sensitive",
- [
- "nsfw"
- ]
- ]
- },
- {
- "tuple": [
- ":reject",
- []
- ]
- },
- {
- "tuple": [
- ":federated_timeline_removal",
- []
- ]
- }
- ]
- },
- {
- "group": ":pleroma",
- "key": ":mrf_subchain",
- "value": [
- {
- "tuple": [
- ":match_actor",
- {}
- ]
- }
- ]
- },
- {
- "group": ":pleroma",
- "key": ":mrf_activity_expiration",
- "value": [
- {
- "tuple": [
- ":days",
- 365
- ]
- }
- ]
- },
- {
- "group": ":pleroma",
- "key": ":mrf_vocabulary",
- "value": [
- {
- "tuple": [
- ":accept",
- []
- ]
- },
- {
- "tuple": [
- ":reject",
- []
- ]
- }
- ]
- },
- {
- "group": ":pleroma",
- "key": ":mrf_object_age",
- "value": [
- {
- "tuple": [
- ":threshold",
- 604800
- ]
- },
- {
- "tuple": [
- ":actions",
- [
- ":delist",
- ":strip_followers"
- ]
- ]
- }
- ]
- },
- {
- "group": ":pleroma",
- "key": ":mrf_nsfw_api",
- "value": [
- {
- "tuple": [
- ":url",
- "http://127.0.0.1:5000/"
- ]
- },
- {
- "tuple": [
- ":threshold",
- 0.7
- ]
- },
- {
- "tuple": [
- ":mark_sensitive",
- true
- ]
- },
- {
- "tuple": [
- ":unlist",
- false
- ]
- },
- {
- "tuple": [
- ":reject",
- false
- ]
- }
- ]
- },
- {
- "group": ":pleroma",
- "key": ":mrf_follow_bot",
- "value": [
- {
- "tuple": [
- ":follower_nickname",
- null
- ]
- }
- ]
- },
- {
- "group": ":pleroma",
- "key": ":mrf_inline_quote",
- "value": [
- {
- "tuple": [
- ":prefix",
- "RT"
- ]
- }
- ]
- },
- {
- "group": ":pleroma",
- "key": ":rich_media",
- "value": [
- {
- "tuple": [
- ":enabled",
- true
- ]
- },
- {
- "tuple": [
- ":ignore_hosts",
- []
- ]
- },
- {
- "tuple": [
- ":ignore_tld",
- [
- "local",
- "localdomain",
- "lan"
- ]
- ]
- },
- {
- "tuple": [
- ":parsers",
- [
- "Pleroma.Web.RichMedia.Parsers.OEmbed",
- "Pleroma.Web.RichMedia.Parsers.TwitterCard"
- ]
- ]
- },
- {
- "tuple": [
- ":oembed_providers_enabled",
- true
- ]
- },
- {
- "tuple": [
- ":failure_backoff",
- 60000
- ]
- },
- {
- "tuple": [
- ":ttl_setters",
- [
- "Pleroma.Web.RichMedia.Parser.TTL.AwsSignedUrl"
- ]
- ]
- }
- ]
- },
- {
- "group": ":pleroma",
- "key": "Pleroma.Web.MediaProxy.Invalidation.Http",
- "value": [
- {
- "tuple": [
- ":method",
- ":purge"
- ]
- },
- {
- "tuple": [
- ":headers",
- []
- ]
- },
- {
- "tuple": [
- ":options",
- []
- ]
- }
- ]
- },
- {
- "group": ":pleroma",
- "key": "Pleroma.Web.MediaProxy.Invalidation.Script",
- "value": [
- {
- "tuple": [
- ":script_path",
- null
- ]
- },
- {
- "tuple": [
- ":url_format",
- null
- ]
- }
- ]
- },
- {
- "group": ":pleroma",
- "key": ":media_preview_proxy",
- "value": [
- {
- "tuple": [
- ":enabled",
- false
- ]
- },
- {
- "tuple": [
- ":thumbnail_max_width",
- 600
- ]
- },
- {
- "tuple": [
- ":thumbnail_max_height",
- 600
- ]
- },
- {
- "tuple": [
- ":image_quality",
- 85
- ]
- },
- {
- "tuple": [
- ":min_content_length",
- 102400
- ]
- }
- ]
- },
- {
- "group": ":pleroma",
- "key": ":shout",
- "value": [
- {
- "tuple": [
- ":enabled",
- true
- ]
- },
- {
- "tuple": [
- ":limit",
- 5000
- ]
- }
- ]
- },
- {
- "group": ":pleroma",
- "key": ":gopher",
- "value": [
- {
- "tuple": [
- ":enabled",
- false
- ]
- },
- {
- "tuple": [
- ":ip",
- {
- "tuple": [
- 0,
- 0,
- 0,
- 0
- ]
- }
- ]
- },
- {
- "tuple": [
- ":port",
- 9999
- ]
- }
- ]
- },
- {
- "group": ":pleroma",
- "key": "Pleroma.Web.Metadata",
- "value": [
- {
- "tuple": [
- ":providers",
- [
- "Pleroma.Web.Metadata.Providers.OpenGraph",
- "Pleroma.Web.Metadata.Providers.TwitterCard"
- ]
- ]
- },
- {
- "tuple": [
- ":unfurl_nsfw",
- false
- ]
- }
- ]
- },
- {
- "group": ":pleroma",
- "key": "Pleroma.Web.Preload",
- "value": [
- {
- "tuple": [
- ":providers",
- [
- "Pleroma.Web.Preload.Providers.Instance"
- ]
- ]
- }
- ]
- },
- {
- "group": ":pleroma",
- "key": ":http_security",
- "value": [
- {
- "tuple": [
- ":enabled",
- true
- ]
- },
- {
- "tuple": [
- ":sts",
- false
- ]
- },
- {
- "tuple": [
- ":sts_max_age",
- 31536000
- ]
- },
- {
- "tuple": [
- ":ct_max_age",
- 2592000
- ]
- },
- {
- "tuple": [
- ":referrer_policy",
- "same-origin"
- ]
- }
- ]
- },
- {
- "group": ":pleroma",
- "key": "Pleroma.User",
- "value": [
- {
- "tuple": [
- ":restricted_nicknames",
- [
- ".well-known",
- "~",
- "about",
- "activities",
- "api",
- "auth",
- "check_password",
- "dev",
- "friend-requests",
- "inbox",
- "internal",
- "main",
- "media",
- "nodeinfo",
- "notice",
- "oauth",
- "objects",
- "ostatus_subscribe",
- "pleroma",
- "proxy",
- "push",
- "registration",
- "relay",
- "settings",
- "status",
- "tag",
- "user-search",
- "user_exists",
- "users",
- "web",
- "verify_credentials",
- "update_credentials",
- "relationships",
- "search",
- "confirmation_resend",
- "mfa"
- ]
- ]
- },
- {
- "tuple": [
- ":email_blacklist",
- []
- ]
- }
- ]
- },
- {
- "group": ":pleroma",
- "key": "Oban",
- "value": [
- {
- "tuple": [
- ":repo",
- "Pleroma.Repo"
- ]
- },
- {
- "tuple": [
- ":log",
- false
- ]
- },
- {
- "tuple": [
- ":queues",
- [
- {
- "tuple": [
- ":activity_expiration",
- 10
- ]
- },
- {
- "tuple": [
- ":token_expiration",
- 5
- ]
- },
- {
- "tuple": [
- ":filter_expiration",
- 1
- ]
- },
- {
- "tuple": [
- ":backup",
- 1
- ]
- },
- {
- "tuple": [
- ":federator_incoming",
- 50
- ]
- },
- {
- "tuple": [
- ":federator_outgoing",
- 50
- ]
- },
- {
- "tuple": [
- ":ingestion_queue",
- 50
- ]
- },
- {
- "tuple": [
- ":web_push",
- 50
- ]
- },
- {
- "tuple": [
- ":mailer",
- 10
- ]
- },
- {
- "tuple": [
- ":transmogrifier",
- 20
- ]
- },
- {
- "tuple": [
- ":scheduled_activities",
- 10
- ]
- },
- {
- "tuple": [
- ":poll_notifications",
- 10
- ]
- },
- {
- "tuple": [
- ":background",
- 5
- ]
- },
- {
- "tuple": [
- ":remote_fetcher",
- 2
- ]
- },
- {
- "tuple": [
- ":attachments_cleanup",
- 1
- ]
- },
- {
- "tuple": [
- ":new_users_digest",
- 1
- ]
- },
- {
- "tuple": [
- ":mute_expire",
- 5
- ]
- }
- ]
- ]
- },
- {
- "tuple": [
- ":plugins",
- [
- "Oban.Plugins.Pruner"
- ]
- ]
- },
- {
- "tuple": [
- ":crontab",
- [
- {
- "tuple": [
- "0 0 * * 0",
- "Pleroma.Workers.Cron.DigestEmailsWorker"
- ]
- },
- {
- "tuple": [
- "0 0 * * *",
- "Pleroma.Workers.Cron.NewUsersDigestWorker"
- ]
- }
- ]
- ]
- }
- ]
- },
- {
- "group": ":pleroma",
- "key": ":workers",
- "value": [
- {
- "tuple": [
- ":retries",
- [
- {
- "tuple": [
- ":federator_incoming",
- 5
- ]
- },
- {
- "tuple": [
- ":federator_outgoing",
- 5
- ]
- }
- ]
- ]
- }
- ]
- },
- {
- "group": ":pleroma",
- "key": "Pleroma.Formatter",
- "value": [
- {
- "tuple": [
- ":class",
- false
- ]
- },
- {
- "tuple": [
- ":rel",
- "ugc"
- ]
- },
- {
- "tuple": [
- ":new_window",
- false
- ]
- },
- {
- "tuple": [
- ":truncate",
- false
- ]
- },
- {
- "tuple": [
- ":strip_prefix",
- false
- ]
- },
- {
- "tuple": [
- ":extra",
- true
- ]
- },
- {
- "tuple": [
- ":validate_tld",
- ":no_scheme"
- ]
- }
- ]
- },
- {
- "group": ":pleroma",
- "key": ":ldap",
- "value": [
- {
- "tuple": [
- ":enabled",
- false
- ]
- },
- {
- "tuple": [
- ":host",
- "localhost"
- ]
- },
- {
- "tuple": [
- ":port",
- 389
- ]
- },
- {
- "tuple": [
- ":ssl",
- false
- ]
- },
- {
- "tuple": [
- ":sslopts",
- []
- ]
- },
- {
- "tuple": [
- ":tls",
- false
- ]
- },
- {
- "tuple": [
- ":tlsopts",
- []
- ]
- },
- {
- "tuple": [
- ":base",
- "dc=example,dc=com"
- ]
- },
- {
- "tuple": [
- ":uid",
- "cn"
- ]
- }
- ]
- },
- {
- "group": ":pleroma",
- "key": ":auth",
- "value": [
- {
- "tuple": [
- ":oauth_consumer_strategies",
- []
- ]
- }
- ]
- },
- {
- "group": ":pleroma",
- "key": "Pleroma.Emails.UserEmail",
- "value": [
- {
- "tuple": [
- ":logo",
- null
- ]
- },
- {
- "tuple": [
- ":styling",
- {
- ":background_color": "#2C3645",
- ":content_background_color": "#1B2635",
- ":header_color": "#d8a070",
- ":link_color": "#d8a070",
- ":text_color": "#b9b9ba",
- ":text_muted_color": "#b9b9ba"
- }
- ]
- }
- ]
- },
- {
- "group": ":pleroma",
- "key": "Pleroma.Emails.NewUsersDigestEmail",
- "value": [
- {
- "tuple": [
- ":enabled",
- false
- ]
- }
- ]
- },
- {
- "group": ":pleroma",
- "key": "Pleroma.ScheduledActivity",
- "value": [
- {
- "tuple": [
- ":daily_user_limit",
- 25
- ]
- },
- {
- "tuple": [
- ":total_user_limit",
- 300
- ]
- },
- {
- "tuple": [
- ":enabled",
- true
- ]
- }
- ]
- },
- {
- "group": ":pleroma",
- "key": ":email_notifications",
- "value": [
- {
- "tuple": [
- ":digest",
- {
- ":active": false,
- ":inactivity_threshold": 7,
- ":interval": 7
- }
- ]
- }
- ]
- },
- {
- "group": ":pleroma",
- "key": ":oauth2",
- "value": [
- {
- "tuple": [
- ":token_expires_in",
- 3153600000
- ]
- },
- {
- "tuple": [
- ":issue_new_refresh_token",
- true
- ]
- },
- {
- "tuple": [
- ":clean_expired_tokens",
- false
- ]
- }
- ]
- },
- {
- "group": ":pleroma",
- "key": ":features",
- "value": [
- {
- "tuple": [
- ":improved_hashtag_timeline",
- ":auto"
- ]
- }
- ]
- },
- {
- "group": ":pleroma",
- "key": ":populate_hashtags_table",
- "value": [
- {
- "tuple": [
- ":fault_rate_allowance",
- 0.01
- ]
- }
- ]
- },
- {
- "group": ":pleroma",
- "key": ":rate_limit",
- "value": [
- {
- "tuple": [
- ":authentication",
- {
- "tuple": [
- 60000,
- 15
- ]
- }
- ]
- },
- {
- "tuple": [
- ":timeline",
- {
- "tuple": [
- 500,
- 3
- ]
- }
- ]
- },
- {
- "tuple": [
- ":search",
- [
- {
- "tuple": [
- 1000,
- 10
- ]
- },
- {
- "tuple": [
- 1000,
- 30
- ]
- }
- ]
- ]
- },
- {
- "tuple": [
- ":app_account_creation",
- {
- "tuple": [
- 1800000,
- 25
- ]
- }
- ]
- },
- {
- "tuple": [
- ":relations_actions",
- {
- "tuple": [
- 10000,
- 10
- ]
- }
- ]
- },
- {
- "tuple": [
- ":relation_id_action",
- {
- "tuple": [
- 60000,
- 2
- ]
- }
- ]
- },
- {
- "tuple": [
- ":statuses_actions",
- {
- "tuple": [
- 10000,
- 15
- ]
- }
- ]
- },
- {
- "tuple": [
- ":status_id_action",
- {
- "tuple": [
- 60000,
- 3
- ]
- }
- ]
- },
- {
- "tuple": [
- ":password_reset",
- {
- "tuple": [
- 1800000,
- 5
- ]
- }
- ]
- },
- {
- "tuple": [
- ":account_confirmation_resend",
- {
- "tuple": [
- 8640000,
- 5
- ]
- }
- ]
- },
- {
- "tuple": [
- ":ap_routes",
- {
- "tuple": [
- 60000,
- 15
- ]
- }
- ]
- }
- ]
- },
- {
- "group": ":pleroma",
- "key": "Pleroma.Workers.PurgeExpiredActivity",
- "value": [
- {
- "tuple": [
- ":enabled",
- true
- ]
- },
- {
- "tuple": [
- ":min_lifetime",
- 600
- ]
- }
- ]
- },
- {
- "group": ":pleroma",
- "key": "Pleroma.Web.Plugs.RemoteIp",
- "value": [
- {
- "tuple": [
- ":enabled",
- true
- ]
- },
- {
- "tuple": [
- ":headers",
- [
- "x-forwarded-for"
- ]
- ]
- },
- {
- "tuple": [
- ":proxies",
- []
- ]
- },
- {
- "tuple": [
- ":reserved",
- [
- "127.0.0.0/8",
- "::1/128",
- "fc00::/7",
- "10.0.0.0/8",
- "172.16.0.0/12",
- "192.168.0.0/16"
- ]
- ]
- }
- ]
- },
- {
- "group": ":pleroma",
- "key": ":static_fe",
- "value": [
- {
- "tuple": [
- ":enabled",
- false
- ]
- }
- ]
- },
- {
- "group": ":pleroma",
- "key": ":web_cache_ttl",
- "value": [
- {
- "tuple": [
- ":activity_pub",
- null
- ]
- },
- {
- "tuple": [
- ":activity_pub_question",
- 30000
- ]
- }
- ]
- },
- {
- "group": ":pleroma",
- "key": ":modules",
- "value": [
- {
- "tuple": [
- ":runtime_dir",
- "instance/modules"
- ]
- }
- ]
- },
- {
- "group": ":pleroma",
- "key": ":connections_pool",
- "value": [
- {
- "tuple": [
- ":reclaim_multiplier",
- 0.1
- ]
- },
- {
- "tuple": [
- ":connection_acquisition_wait",
- 250
- ]
- },
- {
- "tuple": [
- ":connection_acquisition_retries",
- 5
- ]
- },
- {
- "tuple": [
- ":max_connections",
- 250
- ]
- },
- {
- "tuple": [
- ":max_idle_time",
- 30000
- ]
- },
- {
- "tuple": [
- ":retry",
- 0
- ]
- },
- {
- "tuple": [
- ":connect_timeout",
- 5000
- ]
- }
- ]
- },
- {
- "group": ":pleroma",
- "key": ":pools",
- "value": [
- {
- "tuple": [
- ":federation",
- [
- {
- "tuple": [
- ":size",
- 50
- ]
- },
- {
- "tuple": [
- ":max_waiting",
- 10
- ]
- },
- {
- "tuple": [
- ":recv_timeout",
- 10000
- ]
- }
- ]
- ]
- },
- {
- "tuple": [
- ":media",
- [
- {
- "tuple": [
- ":size",
- 50
- ]
- },
- {
- "tuple": [
- ":max_waiting",
- 20
- ]
- },
- {
- "tuple": [
- ":recv_timeout",
- 15000
- ]
- }
- ]
- ]
- },
- {
- "tuple": [
- ":upload",
- [
- {
- "tuple": [
- ":size",
- 25
- ]
- },
- {
- "tuple": [
- ":max_waiting",
- 5
- ]
- },
- {
- "tuple": [
- ":recv_timeout",
- 15000
- ]
- }
- ]
- ]
- },
- {
- "tuple": [
- ":default",
- [
- {
- "tuple": [
- ":size",
- 10
- ]
- },
- {
- "tuple": [
- ":max_waiting",
- 2
- ]
- },
- {
- "tuple": [
- ":recv_timeout",
- 5000
- ]
- }
- ]
- ]
- }
- ]
- },
- {
- "group": ":pleroma",
- "key": ":hackney_pools",
- "value": [
- {
- "tuple": [
- ":federation",
- [
- {
- "tuple": [
- ":max_connections",
- 50
- ]
- },
- {
- "tuple": [
- ":timeout",
- 150000
- ]
- }
- ]
- ]
- },
- {
- "tuple": [
- ":media",
- [
- {
- "tuple": [
- ":max_connections",
- 50
- ]
- },
- {
- "tuple": [
- ":timeout",
- 150000
- ]
- }
- ]
- ]
- },
- {
- "tuple": [
- ":upload",
- [
- {
- "tuple": [
- ":max_connections",
- 25
- ]
- },
- {
- "tuple": [
- ":timeout",
- 300000
- ]
- }
- ]
- ]
- }
- ]
- },
- {
- "group": ":pleroma",
- "key": ":majic_pool",
- "value": [
- {
- "tuple": [
- ":size",
- 2
- ]
- }
- ]
- },
- {
- "group": ":pleroma",
- "key": ":restrict_unauthenticated",
- "value": [
- {
- "tuple": [
- ":timelines",
- {
- ":federated": ":if_instance_is_private",
- ":local": ":if_instance_is_private"
- }
- ]
- },
- {
- "tuple": [
- ":profiles",
- {
- ":local": ":if_instance_is_private",
- ":remote": ":if_instance_is_private"
- }
- ]
- },
- {
- "tuple": [
- ":activities",
- {
- ":local": ":if_instance_is_private",
- ":remote": ":if_instance_is_private"
- }
- ]
- }
- ]
- },
- {
- "group": ":pleroma",
- "key": ":instances_favicons",
- "value": [
- {
- "tuple": [
- ":enabled",
- false
- ]
- }
- ]
- },
- {
- "group": ":pleroma",
- "key": "Pleroma.Web.Auth.Authenticator",
- "value": "Pleroma.Web.Auth.PleromaAuthenticator"
- },
- {
- "group": ":pleroma",
- "key": "Pleroma.User.Backup",
- "value": [
- {
- "tuple": [
- ":purge_after_days",
- 30
- ]
- },
- {
- "tuple": [
- ":limit_days",
- 7
- ]
- },
- {
- "tuple": [
- ":dir",
- null
- ]
- }
- ]
- },
- {
- "group": ":pleroma",
- "key": "ConcurrentLimiter",
- "value": [
- {
- "tuple": [
- "Pleroma.Web.RichMedia.Helpers",
- [
- {
- "tuple": [
- ":max_running",
- 5
- ]
- },
- {
- "tuple": [
- ":max_waiting",
- 5
- ]
- }
- ]
- ]
- },
- {
- "tuple": [
- "Pleroma.Web.ActivityPub.MRF.MediaProxyWarmingPolicy",
- [
- {
- "tuple": [
- ":max_running",
- 5
- ]
- },
- {
- "tuple": [
- ":max_waiting",
- 5
- ]
- }
- ]
- ]
- }
- ]
- },
- {
- "group": ":pleroma",
- "key": ":activitypub",
- "value": [
- {
- "tuple": [
- ":unfollow_blocked",
- true
- ]
- },
- {
- "tuple": [
- ":outgoing_blocks",
- true
- ]
- },
- {
- "tuple": [
- ":follow_handshake_timeout",
- 500
- ]
- },
- {
- "tuple": [
- ":note_replies_output_limit",
- 5
- ]
- },
- {
- "tuple": [
- ":sign_object_fetches",
- true
- ]
- },
- {
- "tuple": [
- ":authorized_fetch_mode",
- false
- ]
- },
- {
- "tuple": [
- ":blockers_visible",
- false
- ]
- }
- ]
- },
- {
- "group": ":pleroma",
- "key": ":frontends",
- "value": [
- {
- "tuple": [
- ":available",
- {
- "admin-fe": {
- "build_url": "https://git.pleroma.social/pleroma/admin-fe/-/jobs/artifacts/${ref}/download?job=build",
- "git": "https://git.pleroma.social/pleroma/admin-fe",
- "name": "admin-fe",
- "ref": "develop"
- },
- "fedi-fe": {
- "build_url": "https://git.pleroma.social/pleroma/fedi-fe/-/jobs/artifacts/${ref}/download?job=build",
- "custom-http-headers": [
- {
- "tuple": [
- "service-worker-allowed",
- "/"
- ]
- }
- ],
- "git": "https://git.pleroma.social/pleroma/fedi-fe",
- "name": "fedi-fe",
- "ref": "master"
- },
- "kenoma": {
- "build_url": "https://git.pleroma.social/lambadalambda/kenoma/-/jobs/artifacts/${ref}/download?job=build",
- "git": "https://git.pleroma.social/lambadalambda/kenoma",
- "name": "kenoma",
- "ref": "master"
- },
- "pleroma-fe": {
- "build_url": "https://git.pleroma.social/pleroma/pleroma-fe/-/jobs/artifacts/${ref}/download?job=build",
- "git": "https://git.pleroma.social/pleroma/pleroma-fe",
- "name": "pleroma-fe",
- "ref": "develop"
- },
- "soapbox-fe": {
- "build_dir": "static",
- "build_url": "https://gitlab.com/soapbox-pub/soapbox-fe/-/jobs/artifacts/${ref}/download?job=build-production",
- "git": "https://gitlab.com/soapbox-pub/soapbox-fe",
- "name": "soapbox-fe",
- "ref": "develop"
- }
- }
- ]
- },
- {
- "tuple": [
- ":primary",
- {
- "name": "landing-fe",
- "ref": "vendor"
- }
- ]
- }
- ]
- },
- {
- "group": ":pleroma",
- "key": "Pleroma.Upload",
- "value": [
- {
- "tuple": [
- ":uploader",
- "Pleroma.Uploaders.Local"
- ]
- },
- {
- "tuple": [
- ":link_name",
- false
- ]
- },
- {
- "tuple": [
- ":proxy_remote",
- false
- ]
- },
- {
- "tuple": [
- ":filename_display_max_length",
- 30
- ]
- },
- {
- "tuple": [
- ":default_description",
- null
- ]
- },
- {
- "tuple": [
- ":base_url",
- null
- ]
- },
- {
- "tuple": [
- ":filters",
- [
- "Pleroma.Upload.Filter.AnalyzeMetadata",
- "Pleroma.Upload.Filter.Dedupe",
- "Pleroma.Upload.Filter.Exiftool"
- ]
- ]
- }
- ]
- },
- {
- "group": ":pleroma",
- "key": ":mrf",
- "value": [
- {
- "tuple": [
- ":transparency",
- true
- ]
- },
- {
- "tuple": [
- ":transparency_exclusions",
- []
- ]
- },
- {
- "tuple": [
- ":policies",
- [
- "Pleroma.Web.ActivityPub.MRF.SimplePolicy",
- "Pleroma.Web.ActivityPub.MRF.HellthreadPolicy",
- "Pleroma.Web.ActivityPub.MRF.ObjectAgePolicy",
- "Pleroma.Web.ActivityPub.MRF.TagPolicy",
- "Pleroma.Web.ActivityPub.MRF.InlineQuotePolicy"
- ]
- ]
- }
- ]
- },
- {
- "group": ":pleroma",
- "key": ":dangerzone",
- "value": [
- {
- "tuple": [
- ":override_repo_pool_size",
- true
- ]
- }
- ]
- },
- {
- "group": ":pleroma",
- "key": ":mrf_hellthread",
- "value": [
- {
- "tuple": [
- ":delist_threshold",
- 15
- ]
- },
- {
- "tuple": [
- ":reject_threshold",
- 100
- ]
- }
- ]
- },
- {
- "group": ":pleroma",
- "key": "Pleroma.Emails.Mailer",
- "value": [
- {
- "tuple": [
- ":enabled",
- false
- ]
- },
- {
- "tuple": [
- ":adapter",
- "Swoosh.Adapters.Local"
- ]
- }
- ]
- },
- {
- "group": ":pleroma",
- "key": "Pleroma.Web.ApiSpec.CastAndValidate",
- "value": [
- {
- "tuple": [
- ":strict",
- true
- ]
- }
- ]
- },
- {
- "group": ":pleroma",
- "key": ":media_proxy",
- "value": [
- {
- "tuple": [
- ":invalidation",
- [
- {
- "tuple": [
- ":enabled",
- false
- ]
- },
- {
- "tuple": [
- ":provider",
- "Pleroma.Web.MediaProxy.Invalidation.Script"
- ]
- }
- ]
- ]
- },
- {
- "tuple": [
- ":proxy_opts",
- [
- {
- "tuple": [
- ":redirect_on_failure",
- false
- ]
- },
- {
- "tuple": [
- ":max_body_length",
- 26214400
- ]
- },
- {
- "tuple": [
- ":max_read_duration",
- 30000
- ]
- },
- {
- "tuple": [
- ":http",
- [
- {
- "tuple": [
- ":follow_redirect",
- true
- ]
- },
- {
- "tuple": [
- ":pool",
- ":media"
- ]
- }
- ]
- ]
- }
- ]
- ]
- },
- {
- "tuple": [
- ":whitelist",
- []
- ]
- },
- {
- "tuple": [
- ":enabled",
- false
- ]
- },
- {
- "tuple": [
- ":redirect_on_failure",
- true
- ]
- }
- ]
- },
- {
- "group": ":pleroma",
- "key": ":instance",
- "value": [
- {
- "tuple": [
- ":background_image",
- "/images/city.jpg"
- ]
- },
- {
- "tuple": [
- ":description_limit",
- 5000
- ]
- },
- {
- "tuple": [
- ":remote_limit",
- 100000
- ]
- },
- {
- "tuple": [
- ":upload_limit",
- 16000000
- ]
- },
- {
- "tuple": [
- ":avatar_upload_limit",
- 2000000
- ]
- },
- {
- "tuple": [
- ":background_upload_limit",
- 4000000
- ]
- },
- {
- "tuple": [
- ":banner_upload_limit",
- 4000000
- ]
- },
- {
- "tuple": [
- ":poll_limits",
- {
- ":max_expiration": 31536000,
- ":max_option_chars": 200,
- ":max_options": 20,
- ":min_expiration": 0
- }
- ]
- },
- {
- "tuple": [
- ":invites_enabled",
- false
- ]
- },
- {
- "tuple": [
- ":account_activation_required",
- false
- ]
- },
- {
- "tuple": [
- ":account_approval_required",
- false
- ]
- },
- {
- "tuple": [
- ":federating",
- true
- ]
- },
- {
- "tuple": [
- ":federation_incoming_replies_max_depth",
- 100
- ]
- },
- {
- "tuple": [
- ":federation_reachability_timeout_days",
- 7
- ]
- },
- {
- "tuple": [
- ":federation_publisher_modules",
- [
- "Pleroma.Web.ActivityPub.Publisher"
- ]
- ]
- },
- {
- "tuple": [
- ":allow_relay",
- true
- ]
- },
- {
- "tuple": [
- ":public",
- true
- ]
- },
- {
- "tuple": [
- ":quarantined_instances",
- []
- ]
- },
- {
- "tuple": [
- ":allowed_post_formats",
- [
- "text/plain",
- "text/html",
- "text/markdown",
- "text/bbcode"
- ]
- ]
- },
- {
- "tuple": [
- ":autofollowed_nicknames",
- []
- ]
- },
- {
- "tuple": [
- ":autofollowing_nicknames",
- []
- ]
- },
- {
- "tuple": [
- ":max_pinned_statuses",
- 1
- ]
- },
- {
- "tuple": [
- ":attachment_links",
- false
- ]
- },
- {
- "tuple": [
- ":max_report_comment_size",
- 1000
- ]
- },
- {
- "tuple": [
- ":safe_dm_mentions",
- false
- ]
- },
- {
- "tuple": [
- ":healthcheck",
- false
- ]
- },
- {
- "tuple": [
- ":remote_post_retention_days",
- 90
- ]
- },
- {
- "tuple": [
- ":skip_thread_containment",
- true
- ]
- },
- {
- "tuple": [
- ":limit_to_local_content",
- ":unauthenticated"
- ]
- },
- {
- "tuple": [
- ":user_bio_length",
- 5000
- ]
- },
- {
- "tuple": [
- ":user_name_length",
- 100
- ]
- },
- {
- "tuple": [
- ":user_location_length",
- 50
- ]
- },
- {
- "tuple": [
- ":max_account_fields",
- 10
- ]
- },
- {
- "tuple": [
- ":max_remote_account_fields",
- 20
- ]
- },
- {
- "tuple": [
- ":account_field_name_length",
- 512
- ]
- },
- {
- "tuple": [
- ":account_field_value_length",
- 2048
- ]
- },
- {
- "tuple": [
- ":registration_reason_length",
- 500
- ]
- },
- {
- "tuple": [
- ":external_user_synchronization",
- true
- ]
- },
- {
- "tuple": [
- ":extended_nickname_format",
- true
- ]
- },
- {
- "tuple": [
- ":cleanup_attachments",
- false
- ]
- },
- {
- "tuple": [
- ":multi_factor_authentication",
- [
- {
- "tuple": [
- ":totp",
- [
- {
- "tuple": [
- ":digits",
- 6
- ]
- },
- {
- "tuple": [
- ":period",
- 30
- ]
- }
- ]
- ]
- },
- {
- "tuple": [
- ":backup_codes",
- [
- {
- "tuple": [
- ":number",
- 5
- ]
- },
- {
- "tuple": [
- ":length",
- 16
- ]
- }
- ]
- ]
- }
- ]
- ]
- },
- {
- "tuple": [
- ":show_reactions",
- true
- ]
- },
- {
- "tuple": [
- ":password_reset_token_validity",
- 86400
- ]
- },
- {
- "tuple": [
- ":profile_directory",
- true
- ]
- },
- {
- "tuple": [
- ":max_endorsed_users",
- 20
- ]
- },
- {
- "tuple": [
- ":birthday_required",
- false
- ]
- },
- {
- "tuple": [
- ":birthday_min_age",
- 0
- ]
- },
- {
- "tuple": [
- ":privileged_staff",
- true
- ]
- },
- {
- "tuple": [
- ":max_media_attachments",
- 20
- ]
- },
- {
- "tuple": [
- ":description",
- "Social media owned by you"
- ]
- },
- {
- "tuple": [
- ":instance_thumbnail",
- "/instance/thumbnail.png"
- ]
- },
- {
- "tuple": [
- ":name",
- "localhost"
- ]
- },
- {
- "tuple": [
- ":email",
- "alex@alexgleason.me"
- ]
- },
- {
- "tuple": [
- ":notify_email",
- "alex@alexgleason.me"
- ]
- },
- {
- "tuple": [
- ":limit",
- 5000
- ]
- },
- {
- "tuple": [
- ":registrations_open",
- true
- ]
- },
- {
- "tuple": [
- ":static_dir",
- "/home/alex/Projects/soapbox-be/instance/static"
- ]
- }
- ]
- },
- {
- "group": ":pleroma",
- "key": "Pleroma.Uploaders.Local",
- "value": [
- {
- "tuple": [
- ":uploads",
- "/home/alex/Projects/soapbox-be/uploads"
- ]
- }
- ]
- },
- {
- "group": ":joken",
- "key": ":default_signer",
- "value": "KaehAYXaKzxCdcqSD35I6R9KRUMvgqb0DBMV6PIiqjoHbg0eppqH6nSpNp4fbbLT"
- },
- {
- "group": ":web_push_encryption",
- "key": ":http_client",
- "value": "Pleroma.HTTP.WebPush"
- },
- {
- "group": ":web_push_encryption",
- "key": ":vapid_details",
- "value": [
- {
- "tuple": [
- ":subject",
- "mailto:alex@alexgleason.me"
- ]
- },
- {
- "tuple": [
- ":public_key",
- "BCUFu4_-77t6dQ2XfZIyEE7k8H4r11s-a5doq7hZHDv9RqTUek-8yrE9nUN-rZYTxkjxuXF7IMcDdRgZ1fOCUy8"
- ]
- },
- {
- "tuple": [
- ":private_key",
- "KN3JU4Ug0e7_lsxhqOW_jQuQNeQTrr7QtOmdNIpUUbY"
- ]
- }
- ]
- },
- {
- "group": ":phoenix",
- "key": ":format_encoders",
- "value": [
- {
- "tuple": [
- ":json",
- "Jason"
- ]
- },
- {
- "tuple": [
- ":\"activity+json\"",
- "Jason"
- ]
- }
- ]
- },
- {
- "group": ":phoenix",
- "key": ":json_library",
- "value": "Jason"
- },
- {
- "group": ":phoenix",
- "key": ":filter_parameters",
- "value": [
- "password",
- "confirm"
- ]
- },
- {
- "group": ":phoenix",
- "key": ":stacktrace_depth",
- "value": 20
- },
- {
- "group": ":phoenix",
- "key": ":plug_init_mode",
- "value": ":runtime"
- },
- {
- "group": ":logger",
- "key": ":ex_syslogger",
- "value": [
- {
- "tuple": [
- ":level",
- ":debug"
- ]
- },
- {
- "tuple": [
- ":ident",
- "pleroma"
- ]
- },
- {
- "tuple": [
- ":format",
- "$metadata[$level] $message"
- ]
- },
- {
- "tuple": [
- ":metadata",
- [
- ":request_id"
- ]
- ]
- }
- ]
- },
- {
- "group": ":logger",
- "key": ":console",
- "value": [
- {
- "tuple": [
- ":level",
- ":debug"
- ]
- },
- {
- "tuple": [
- ":metadata",
- [
- ":request_id"
- ]
- ]
- },
- {
- "tuple": [
- ":format",
- "[$level] $message\n"
- ]
- }
- ]
- },
- {
- "group": ":floki",
- "key": ":html_parser",
- "value": "Floki.HTMLParser.FastHtml"
- },
- {
- "group": ":ex_aws",
- "key": ":s3",
- "value": [
- {
- "tuple": [
- ":access_key_id",
- null
- ]
- },
- {
- "tuple": [
- ":secret_access_key",
- null
- ]
- },
- {
- "tuple": [
- ":scheme",
- "https://"
- ]
- }
- ]
- },
- {
- "group": ":ex_aws",
- "key": ":http_client",
- "value": "Pleroma.HTTP.ExAws"
- },
- {
- "group": ":tzdata",
- "key": ":http_client",
- "value": "Pleroma.HTTP.Tzdata"
- },
- {
- "group": ":http_signatures",
- "key": ":adapter",
- "value": "Pleroma.Signature"
- },
- {
- "group": ":prometheus",
- "key": "Pleroma.Web.Endpoint.MetricsExporter",
- "value": [
- {
- "tuple": [
- ":enabled",
- false
- ]
- },
- {
- "tuple": [
- ":auth",
- false
- ]
- },
- {
- "tuple": [
- ":ip_whitelist",
- []
- ]
- },
- {
- "tuple": [
- ":path",
- "/api/pleroma/app_metrics"
- ]
- },
- {
- "tuple": [
- ":format",
- ":text"
- ]
- }
- ]
- },
- {
- "group": ":ueberauth",
- "key": "Ueberauth",
- "value": [
- {
- "tuple": [
- ":base_path",
- "/oauth"
- ]
- },
- {
- "tuple": [
- ":providers",
- []
- ]
- }
- ]
- },
- {
- "group": ":esshd",
- "key": ":enabled",
- "value": false
- },
- {
- "group": ":cors_plug",
- "key": ":max_age",
- "value": 86400
- },
- {
- "group": ":cors_plug",
- "key": ":methods",
- "value": [
- "POST",
- "PUT",
- "DELETE",
- "GET",
- "PATCH",
- "OPTIONS"
- ]
- },
- {
- "group": ":cors_plug",
- "key": ":expose",
- "value": [
- "Link",
- "X-RateLimit-Reset",
- "X-RateLimit-Limit",
- "X-RateLimit-Remaining",
- "X-Request-Id",
- "Idempotency-Key"
- ]
- },
- {
- "group": ":cors_plug",
- "key": ":credentials",
- "value": true
- },
- {
- "group": ":cors_plug",
- "key": ":headers",
- "value": [
- "Authorization",
- "Content-Type",
- "Idempotency-Key"
- ]
- },
- {
- "group": ":mime",
- "key": ":types",
- "value": {
- "application/activity+json": [
- "activity+json"
- ],
- "application/jrd+json": [
- "jrd+json"
- ],
- "application/ld+json": [
- "activity+json"
- ],
- "application/xml": [
- "xml"
- ],
- "application/xrd+xml": [
- "xrd+xml"
- ]
- }
- },
- {
- "group": ":quack",
- "key": ":level",
- "value": ":warn"
- },
- {
- "group": ":quack",
- "key": ":meta",
- "value": [
- ":all"
- ]
- },
- {
- "group": ":quack",
- "key": ":webhook_url",
- "value": "https://hooks.slack.com/services/YOUR-KEY-HERE"
- }
- ],
- "need_reboot": false
-}
diff --git a/packages/pl-fe/src/__fixtures__/pleroma-instance.json b/packages/pl-fe/src/__fixtures__/pleroma-instance.json
deleted file mode 100644
index b91376302..000000000
--- a/packages/pl-fe/src/__fixtures__/pleroma-instance.json
+++ /dev/null
@@ -1,131 +0,0 @@
-{
- "approval_required": true,
- "avatar_upload_limit": 2000000,
- "background_image": "https://gleasonator.com/images/city.jpg",
- "background_upload_limit": 4000000,
- "banner_upload_limit": 4000000,
- "description": "Building the next generation of the Fediverse. Speak freely.",
- "description_limit": 5000,
- "email": "alex@alexgleason.me",
- "languages": [
- "en"
- ],
- "max_toot_chars": 5000,
- "pleroma": {
- "metadata": {
- "account_activation_required": false,
- "birthday_min_age": 0,
- "birthday_required": false,
- "features": [
- "pleroma_api",
- "mastodon_api",
- "mastodon_api_streaming",
- "polls",
- "v2_suggestions",
- "pleroma_explicit_addressing",
- "shareable_emoji_packs",
- "multifetch",
- "pleroma:api/v1/notifications:include_types_filter",
- "quote_posting",
- "media_proxy",
- "relay",
- "pleroma_emoji_reactions",
- "pleroma_chat_messages",
- "email_list",
- "profile_directory"
- ],
- "federation": {
- "enabled": true,
- "exclusions": false,
- "mrf_hashtag": {
- "federated_timeline_removal": [],
- "reject": [],
- "sensitive": [
- "nsfw"
- ]
- },
- "mrf_policies": [
- "TagPolicy",
- "SimplePolicy",
- "InlineQuotePolicy",
- "HashtagPolicy"
- ],
- "mrf_simple": {
- "accept": [],
- "avatar_removal": [
- "pawoo.net",
- "sinblr.com",
- "dajiaweibo.com",
- "baraag.net"
- ],
- "banner_removal": [
- "pawoo.net",
- "sinblr.com",
- "dajiaweibo.com",
- "baraag.net"
- ],
- "federated_timeline_removal": [],
- "followers_only": [],
- "media_nsfw": [],
- "media_removal": [
- "pawoo.net",
- "sinblr.com",
- "dajiaweibo.com",
- "baraag.net"
- ],
- "reject": [
- "solagg.com"
- ],
- "reject_deletes": [],
- "report_removal": []
- },
- "mrf_simple_info": {},
- "quarantined_instances": [],
- "quarantined_instances_info": {
- "quarantined_instances": {}
- }
- },
- "fields_limits": {
- "max_fields": 15,
- "max_remote_fields": 20,
- "name_length": 512,
- "value_length": 2048
- },
- "post_formats": [
- "text/plain",
- "text/html",
- "text/markdown",
- "text/bbcode"
- ],
- "privileged_staff": true
- },
- "stats": {
- "mau": 71
- },
- "vapid_public_key": "BLElLQVJVmY_e4F5JoYxI5jXiVOYNsJ9p-amkykc9NcI-jwa9T1Y2GIbDqbY-HqC6ayPkfW4K4o9vgBFKYmkuS4"
- },
- "poll_limits": {
- "max_expiration": 31536000,
- "max_option_chars": 200,
- "max_options": 20,
- "min_expiration": 0
- },
- "registrations": true,
- "shout_limit": 5000,
- "soapbox": {
- "version": "1.1.1"
- },
- "stats": {
- "domain_count": 8140,
- "status_count": 101956,
- "user_count": 421
- },
- "thumbnail": "https://media.gleasonator.com/c0d38bde6ef0b3baa483f574797662ebd83ef9e1a1162e8e4fcd930bb4b3c068.png",
- "title": "Gleasonator",
- "upload_limit": 100000000,
- "uri": "https://gleasonator.com",
- "urls": {
- "streaming_api": "wss://gleasonator.com"
- },
- "version": "2.7.2 (compatible; Pleroma 2.4.51-1129-gf2cfef09-gleasonator)"
-}
diff --git a/packages/pl-fe/src/__fixtures__/pleroma-notification-move.json b/packages/pl-fe/src/__fixtures__/pleroma-notification-move.json
deleted file mode 100644
index d7a763457..000000000
--- a/packages/pl-fe/src/__fixtures__/pleroma-notification-move.json
+++ /dev/null
@@ -1,119 +0,0 @@
-{
- "account": {
- "acct": "alex@fedibird.com",
- "avatar": "https://gleasonator.com/images/avi.png",
- "avatar_static": "https://gleasonator.com/images/avi.png",
- "bot": false,
- "created_at": "2022-01-24T21:25:37.000Z",
- "display_name": "alex@fedibird.com",
- "emojis": [],
- "fields": [],
- "followers_count": 2,
- "following_count": 1,
- "fqn": "alex@fedibird.com",
- "header": "https://gleasonator.com/images/banner.png",
- "header_static": "https://gleasonator.com/images/banner.png",
- "id": "AFmHQ18XZ7Lco68MW8",
- "last_status_at": "2022-03-16T22:07:53",
- "locked": false,
- "note": "
",
- "pleroma": {
- "accepts_chat_messages": null,
- "also_known_as": [],
- "ap_id": "https://fedibird.com/users/alex",
- "background_image": null,
- "birthday": "1993-07-03",
- "deactivated": false,
- "favicon": "https://gleasonator.com/proxy/HzfsidHss3CuA7aM2zxXN-tAjF8/aHR0cHM6Ly9mZWRpYmlyZC5jb20vZmF2aWNvbi5pY28/favicon.ico",
- "hide_favorites": true,
- "hide_followers": false,
- "hide_followers_count": false,
- "hide_follows": false,
- "hide_follows_count": false,
- "is_admin": false,
- "is_confirmed": true,
- "is_moderator": false,
- "is_suggested": false,
- "location": "Texas, USA",
- "relationship": {},
- "skip_thread_containment": false,
- "tags": []
- },
- "source": {
- "fields": [],
- "note": "",
- "pleroma": {
- "actor_type": "Person",
- "discoverable": false
- },
- "sensitive": false
- },
- "statuses_count": 5,
- "url": "https://fedibird.com/@alex",
- "username": "alex"
- },
- "created_at": "2022-03-17T00:08:48.000Z",
- "id": "406814",
- "pleroma": {
- "is_muted": false,
- "is_seen": true
- },
- "target": {
- "acct": "benis911",
- "avatar": "https://gleasonator.com/images/avi.png",
- "avatar_static": "https://gleasonator.com/images/avi.png",
- "bot": false,
- "created_at": "2021-03-26T20:42:11.000Z",
- "display_name": "benis911",
- "emojis": [],
- "fields": [],
- "followers_count": 0,
- "following_count": 0,
- "fqn": "benis911@gleasonator.com",
- "header": "https://media.gleasonator.com/fc595bbbcf5aabefecd1c2adfe5b7f5457db59847992881668653a0338ba25bd.jpg",
- "header_static": "https://media.gleasonator.com/fc595bbbcf5aabefecd1c2adfe5b7f5457db59847992881668653a0338ba25bd.jpg",
- "id": "A5c5LK7EJTFR0u26Pg",
- "last_status_at": "2022-03-16T22:01:57",
- "locked": false,
- "note": "hello world 2",
- "pleroma": {
- "accepts_chat_messages": true,
- "also_known_as": [
- "https://gleasonator.com/users/alex",
- "https://poa.st/users/alex",
- "https://fedibird.com/users/alex"
- ],
- "ap_id": "https://gleasonator.com/users/benis911",
- "background_image": null,
- "birthday": "2000-01-25",
- "deactivated": false,
- "favicon": "https://gleasonator.com/favicon.png",
- "hide_favorites": true,
- "hide_followers": true,
- "hide_followers_count": true,
- "hide_follows": true,
- "hide_follows_count": true,
- "is_admin": false,
- "is_confirmed": true,
- "is_moderator": false,
- "is_suggested": false,
- "location": null,
- "relationship": {},
- "skip_thread_containment": false,
- "tags": []
- },
- "source": {
- "fields": [],
- "note": "hello world 2",
- "pleroma": {
- "actor_type": "Person",
- "discoverable": false
- },
- "sensitive": false
- },
- "statuses_count": 172,
- "url": "https://gleasonator.com/users/benis911",
- "username": "benis911"
- },
- "type": "move"
-}
diff --git a/packages/pl-fe/src/__fixtures__/pleroma-quote-post.json b/packages/pl-fe/src/__fixtures__/pleroma-quote-post.json
deleted file mode 100644
index 994671ce4..000000000
--- a/packages/pl-fe/src/__fixtures__/pleroma-quote-post.json
+++ /dev/null
@@ -1,364 +0,0 @@
-{
- "account": {
- "acct": "alex",
- "avatar": "https://media.gleasonator.com/6d64aecb17348b23aaff78db4687b9476cb0da1c07cc6a819c2e6ec7144c18b1.png",
- "avatar_static": "https://media.gleasonator.com/6d64aecb17348b23aaff78db4687b9476cb0da1c07cc6a819c2e6ec7144c18b1.png",
- "bot": false,
- "created_at": "2020-01-08T01:25:43.000Z",
- "display_name": "Alex Gleason",
- "emojis": [],
- "fields": [
- {
- "name": "Website",
- "value": "https://alexgleason.me "
- },
- {
- "name": "Pleroma+Soapbox",
- "value": "https://soapbox.pub "
- },
- {
- "name": "Email",
- "value": "alex@alexgleason.me"
- },
- {
- "name": "Gender identity",
- "value": "Soyboy"
- },
- {
- "name": "Donate (PayPal)",
- "value": "https://paypal.me/gleasonator "
- },
- {
- "name": "$BTC",
- "value": "bc1q9cx35adpm73aq2fw40ye6ts8hfxqzjr5unwg0n"
- },
- {
- "name": "$ETH",
- "value": "0xAc9aB5Fc04Dc1cB1789Af75b523Bd23C70B2D717"
- },
- {
- "name": "$DOGE",
- "value": "D5zVZs6jrRakaPVGiErkQiHt9sayzm6V5D"
- },
- {
- "name": "$XMR",
- "value": "45JDCLrjJ4bgVUSbbs2yjy9m5Mf4VLPW8fG7jw9sq5u69rXZZopQogZNeyYkMBnXpkaip4p4QwaaJNhdTotPa9g44DBCzdK"
- }
- ],
- "followers_count": 2220,
- "following_count": 1544,
- "fqn": "alex@gleasonator.com",
- "header": "https://media.gleasonator.com/accounts/headers/000/000/001/original/9d0e4dbf1c9dbc8f.png",
- "header_static": "https://media.gleasonator.com/accounts/headers/000/000/001/original/9d0e4dbf1c9dbc8f.png",
- "id": "9v5bmRalQvjOy0ECcC",
- "last_status_at": "2022-01-24T21:02:44",
- "locked": false,
- "note": "I create Fediverse software that empowers people online. I'm vegan btw Note: If you have a question for me, please tag me publicly. This gives the opportunity for others to chime in, and bystanders to learn.",
- "pleroma": {
- "accepts_chat_messages": true,
- "also_known_as": [],
- "ap_id": "https://gleasonator.com/users/alex",
- "background_image": null,
- "favicon": "https://gleasonator.com/favicon.png",
- "hide_favorites": true,
- "hide_followers": false,
- "hide_followers_count": false,
- "hide_follows": false,
- "hide_follows_count": false,
- "is_admin": true,
- "is_confirmed": true,
- "is_moderator": false,
- "is_suggested": true,
- "relationship": {},
- "skip_thread_containment": false,
- "tags": []
- },
- "source": {
- "fields": [
- {
- "name": "Website",
- "value": "https://alexgleason.me"
- },
- {
- "name": "Pleroma+Soapbox",
- "value": "https://soapbox.pub"
- },
- {
- "name": "Email",
- "value": "alex@alexgleason.me"
- },
- {
- "name": "Gender identity",
- "value": "Soyboy"
- },
- {
- "name": "Donate (PayPal)",
- "value": "https://paypal.me/gleasonator"
- },
- {
- "name": "$BTC",
- "value": "bc1q9cx35adpm73aq2fw40ye6ts8hfxqzjr5unwg0n"
- },
- {
- "name": "$ETH",
- "value": "0xAc9aB5Fc04Dc1cB1789Af75b523Bd23C70B2D717"
- },
- {
- "name": "$DOGE",
- "value": "D5zVZs6jrRakaPVGiErkQiHt9sayzm6V5D"
- },
- {
- "name": "$XMR",
- "value": "45JDCLrjJ4bgVUSbbs2yjy9m5Mf4VLPW8fG7jw9sq5u69rXZZopQogZNeyYkMBnXpkaip4p4QwaaJNhdTotPa9g44DBCzdK"
- }
- ],
- "note": "I create Fediverse software that empowers people online.\r\n\r\nI'm vegan btw\r\n\r\nNote: If you have a question for me, please tag me publicly. This gives the opportunity for others to chime in, and bystanders to learn.",
- "pleroma": {
- "actor_type": "Person",
- "discoverable": false
- },
- "sensitive": false
- },
- "statuses_count": 23004,
- "url": "https://gleasonator.com/users/alex",
- "username": "alex"
- },
- "application": {
- "name": "Soapbox FE",
- "website": "https://soapbox.pub/"
- },
- "bookmarked": false,
- "card": null,
- "content": "Quote post
",
- "created_at": "2022-01-24T21:02:34.000Z",
- "emojis": [],
- "favourited": false,
- "favourites_count": 0,
- "id": "AFmFMSpITT9xcOJKcK",
- "in_reply_to_account_id": null,
- "in_reply_to_id": null,
- "language": null,
- "media_attachments": [],
- "mentions": [
- {
- "acct": "alex",
- "id": "9v5bmRalQvjOy0ECcC",
- "url": "https://gleasonator.com/users/alex",
- "username": "alex"
- }
- ],
- "muted": false,
- "pinned": false,
- "pleroma": {
- "content": {
- "text/plain": "Quote post"
- },
- "conversation_id": "AFmFMSnWa3k3WtTur2",
- "direct_conversation_id": null,
- "emoji_reactions": [
- {
- "count": 1,
- "me": false,
- "name": "👍"
- }
- ],
- "expires_at": null,
- "in_reply_to_account_acct": null,
- "local": true,
- "parent_visible": false,
- "pinned_at": null,
- "quote": {
- "account": {
- "acct": "alex",
- "avatar": "https://media.gleasonator.com/6d64aecb17348b23aaff78db4687b9476cb0da1c07cc6a819c2e6ec7144c18b1.png",
- "avatar_static": "https://media.gleasonator.com/6d64aecb17348b23aaff78db4687b9476cb0da1c07cc6a819c2e6ec7144c18b1.png",
- "bot": false,
- "created_at": "2020-01-08T01:25:43.000Z",
- "display_name": "Alex Gleason",
- "emojis": [],
- "fields": [
- {
- "name": "Website",
- "value": "https://alexgleason.me "
- },
- {
- "name": "Pleroma+Soapbox",
- "value": "https://soapbox.pub "
- },
- {
- "name": "Email",
- "value": "alex@alexgleason.me"
- },
- {
- "name": "Gender identity",
- "value": "Soyboy"
- },
- {
- "name": "Donate (PayPal)",
- "value": "https://paypal.me/gleasonator "
- },
- {
- "name": "$BTC",
- "value": "bc1q9cx35adpm73aq2fw40ye6ts8hfxqzjr5unwg0n"
- },
- {
- "name": "$ETH",
- "value": "0xAc9aB5Fc04Dc1cB1789Af75b523Bd23C70B2D717"
- },
- {
- "name": "$DOGE",
- "value": "D5zVZs6jrRakaPVGiErkQiHt9sayzm6V5D"
- },
- {
- "name": "$XMR",
- "value": "45JDCLrjJ4bgVUSbbs2yjy9m5Mf4VLPW8fG7jw9sq5u69rXZZopQogZNeyYkMBnXpkaip4p4QwaaJNhdTotPa9g44DBCzdK"
- }
- ],
- "followers_count": 2220,
- "following_count": 1544,
- "fqn": "alex@gleasonator.com",
- "header": "https://media.gleasonator.com/accounts/headers/000/000/001/original/9d0e4dbf1c9dbc8f.png",
- "header_static": "https://media.gleasonator.com/accounts/headers/000/000/001/original/9d0e4dbf1c9dbc8f.png",
- "id": "9v5bmRalQvjOy0ECcC",
- "last_status_at": "2022-01-24T21:02:44",
- "locked": false,
- "note": "I create Fediverse software that empowers people online. I'm vegan btw Note: If you have a question for me, please tag me publicly. This gives the opportunity for others to chime in, and bystanders to learn.",
- "pleroma": {
- "accepts_chat_messages": true,
- "also_known_as": [],
- "ap_id": "https://gleasonator.com/users/alex",
- "background_image": null,
- "favicon": "https://gleasonator.com/favicon.png",
- "hide_favorites": true,
- "hide_followers": false,
- "hide_followers_count": false,
- "hide_follows": false,
- "hide_follows_count": false,
- "is_admin": true,
- "is_confirmed": true,
- "is_moderator": false,
- "is_suggested": true,
- "relationship": {},
- "skip_thread_containment": false,
- "tags": []
- },
- "source": {
- "fields": [
- {
- "name": "Website",
- "value": "https://alexgleason.me"
- },
- {
- "name": "Pleroma+Soapbox",
- "value": "https://soapbox.pub"
- },
- {
- "name": "Email",
- "value": "alex@alexgleason.me"
- },
- {
- "name": "Gender identity",
- "value": "Soyboy"
- },
- {
- "name": "Donate (PayPal)",
- "value": "https://paypal.me/gleasonator"
- },
- {
- "name": "$BTC",
- "value": "bc1q9cx35adpm73aq2fw40ye6ts8hfxqzjr5unwg0n"
- },
- {
- "name": "$ETH",
- "value": "0xAc9aB5Fc04Dc1cB1789Af75b523Bd23C70B2D717"
- },
- {
- "name": "$DOGE",
- "value": "D5zVZs6jrRakaPVGiErkQiHt9sayzm6V5D"
- },
- {
- "name": "$XMR",
- "value": "45JDCLrjJ4bgVUSbbs2yjy9m5Mf4VLPW8fG7jw9sq5u69rXZZopQogZNeyYkMBnXpkaip4p4QwaaJNhdTotPa9g44DBCzdK"
- }
- ],
- "note": "I create Fediverse software that empowers people online.\r\n\r\nI'm vegan btw\r\n\r\nNote: If you have a question for me, please tag me publicly. This gives the opportunity for others to chime in, and bystanders to learn.",
- "pleroma": {
- "actor_type": "Person",
- "discoverable": false
- },
- "sensitive": false
- },
- "statuses_count": 23004,
- "url": "https://gleasonator.com/users/alex",
- "username": "alex"
- },
- "application": {
- "name": "Soapbox FE",
- "website": "https://soapbox.pub/"
- },
- "bookmarked": false,
- "card": null,
- "content": "Test post
",
- "created_at": "2022-01-24T21:02:25.000Z",
- "emojis": [],
- "favourited": false,
- "favourites_count": 0,
- "id": "AFmFLcd6XYVdjWCrOS",
- "in_reply_to_account_id": null,
- "in_reply_to_id": null,
- "language": null,
- "media_attachments": [],
- "mentions": [],
- "muted": false,
- "pinned": false,
- "pleroma": {
- "content": {
- "text/plain": "Test post"
- },
- "conversation_id": "AFmFLcaGi6EzaisayO",
- "direct_conversation_id": null,
- "emoji_reactions": [],
- "expires_at": null,
- "in_reply_to_account_acct": null,
- "local": true,
- "parent_visible": false,
- "pinned_at": null,
- "quote": null,
- "quote_url": null,
- "spoiler_text": {
- "text/plain": ""
- },
- "thread_muted": false
- },
- "poll": null,
- "reblog": null,
- "reblogged": false,
- "reblogs_count": 0,
- "replies_count": 0,
- "sensitive": false,
- "spoiler_text": "",
- "tags": [],
- "text": null,
- "uri": "https://gleasonator.com/objects/4f35159c-3794-4037-9269-a7c84f7137c7",
- "url": "https://gleasonator.com/notice/AFmFLcd6XYVdjWCrOS",
- "visibility": "public"
- },
- "quote_url": "https://gleasonator.com/objects/4f35159c-3794-4037-9269-a7c84f7137c7",
- "spoiler_text": {
- "text/plain": ""
- },
- "thread_muted": false
- },
- "poll": null,
- "reblog": null,
- "reblogged": false,
- "reblogs_count": 0,
- "replies_count": 0,
- "sensitive": false,
- "spoiler_text": "",
- "tags": [],
- "text": null,
- "uri": "https://gleasonator.com/objects/54d93075-7d04-4016-a128-81f3843bca79",
- "url": "https://gleasonator.com/notice/AFmFMSpITT9xcOJKcK",
- "visibility": "public"
-}
diff --git a/packages/pl-fe/src/__fixtures__/pleroma-status-deleted.json b/packages/pl-fe/src/__fixtures__/pleroma-status-deleted.json
deleted file mode 100644
index 2d37af257..000000000
--- a/packages/pl-fe/src/__fixtures__/pleroma-status-deleted.json
+++ /dev/null
@@ -1,229 +0,0 @@
-{
- "account": {
- "acct": "alex",
- "avatar": "https://media.gleasonator.com/6d64aecb17348b23aaff78db4687b9476cb0da1c07cc6a819c2e6ec7144c18b1.png",
- "avatar_static": "https://media.gleasonator.com/6d64aecb17348b23aaff78db4687b9476cb0da1c07cc6a819c2e6ec7144c18b1.png",
- "bot": false,
- "created_at": "2020-01-08T01:25:43.000Z",
- "display_name": "Alex Gleason",
- "emojis": [],
- "fields": [
- {
- "name": "Website",
- "value": "https://alexgleason.me "
- },
- {
- "name": "Soapbox",
- "value": "https://soapbox.pub "
- },
- {
- "name": "Email",
- "value": "alex@alexgleason.me"
- },
- {
- "name": "Gender identity",
- "value": "Soyboy"
- },
- {
- "name": "Donate (PayPal)",
- "value": "https://paypal.me/gleasonator "
- },
- {
- "name": "$BTC",
- "value": "bc1q9cx35adpm73aq2fw40ye6ts8hfxqzjr5unwg0n"
- },
- {
- "name": "$ETH",
- "value": "0xAc9aB5Fc04Dc1cB1789Af75b523Bd23C70B2D717"
- },
- {
- "name": "$DOGE",
- "value": "D5zVZs6jrRakaPVGiErkQiHt9sayzm6V5D"
- },
- {
- "name": "$XMR",
- "value": "45JDCLrjJ4bgVUSbbs2yjy9m5Mf4VLPW8fG7jw9sq5u69rXZZopQogZNeyYkMBnXpkaip4p4QwaaJNhdTotPa9g44DBCzdK"
- }
- ],
- "follow_requests_count": 0,
- "followers_count": 2489,
- "following_count": 1586,
- "fqn": "alex@gleasonator.com",
- "header": "https://media.gleasonator.com/accounts/headers/000/000/001/original/9d0e4dbf1c9dbc8f.png",
- "header_static": "https://media.gleasonator.com/accounts/headers/000/000/001/original/9d0e4dbf1c9dbc8f.png",
- "id": "9v5bmRalQvjOy0ECcC",
- "last_status_at": "2022-03-16T21:57:17",
- "locked": false,
- "note": "I create Fediverse software that empowers people online. I'm vegan btw Note: If you have a question for me, please tag me publicly. This gives the opportunity for others to chime in, and bystanders to learn.",
- "pleroma": {
- "accepts_chat_messages": true,
- "accepts_email_list": true,
- "allow_following_move": true,
- "also_known_as": [
- "https://mitra.social/users/alex"
- ],
- "ap_id": "https://gleasonator.com/users/alex",
- "background_image": null,
- "birthday": "1993-07-03",
- "deactivated": false,
- "email": "alex@alexgleason.me",
- "favicon": "https://gleasonator.com/favicon.png",
- "hide_favorites": true,
- "hide_followers": false,
- "hide_followers_count": false,
- "hide_follows": false,
- "hide_follows_count": false,
- "is_admin": true,
- "is_confirmed": true,
- "is_moderator": false,
- "is_suggested": true,
- "location": null,
- "notification_settings": {
- "block_from_strangers": false,
- "hide_notification_contents": false
- },
- "relationship": {},
- "skip_thread_containment": false,
- "tags": [],
- "unread_conversation_count": 392,
- "unread_notifications_count": 2
- },
- "source": {
- "fields": [
- {
- "name": "Website",
- "value": "https://alexgleason.me"
- },
- {
- "name": "Soapbox",
- "value": "https://soapbox.pub"
- },
- {
- "name": "Email",
- "value": "alex@alexgleason.me"
- },
- {
- "name": "Gender identity",
- "value": "Soyboy"
- },
- {
- "name": "Donate (PayPal)",
- "value": "https://paypal.me/gleasonator"
- },
- {
- "name": "$BTC",
- "value": "bc1q9cx35adpm73aq2fw40ye6ts8hfxqzjr5unwg0n"
- },
- {
- "name": "$ETH",
- "value": "0xAc9aB5Fc04Dc1cB1789Af75b523Bd23C70B2D717"
- },
- {
- "name": "$DOGE",
- "value": "D5zVZs6jrRakaPVGiErkQiHt9sayzm6V5D"
- },
- {
- "name": "$XMR",
- "value": "45JDCLrjJ4bgVUSbbs2yjy9m5Mf4VLPW8fG7jw9sq5u69rXZZopQogZNeyYkMBnXpkaip4p4QwaaJNhdTotPa9g44DBCzdK"
- }
- ],
- "note": "I create Fediverse software that empowers people online.\r\n\r\nI'm vegan btw\r\n\r\nNote: If you have a question for me, please tag me publicly. This gives the opportunity for others to chime in, and bystanders to learn.",
- "pleroma": {
- "actor_type": "Person",
- "discoverable": false,
- "no_rich_text": false,
- "show_birthday": true,
- "show_role": true
- },
- "privacy": "public",
- "sensitive": false
- },
- "statuses_count": 23695,
- "url": "https://gleasonator.com/users/alex",
- "username": "alex"
- },
- "application": {
- "name": "Soapbox FE",
- "website": "https://soapbox.pub/"
- },
- "bookmarked": false,
- "card": null,
- "content": "I am going to delete this post for testing purposes
",
- "created_at": "2022-03-16T21:57:16.000Z",
- "emojis": [],
- "favourited": false,
- "favourites_count": 3,
- "id": "AHU2RrX0wdcwzCYjFQ",
- "in_reply_to_account_id": null,
- "in_reply_to_id": null,
- "language": null,
- "media_attachments": [
- {
- "blurhash": "eWGlL@?b~q%MRj4nt7IUof%M%MIURjRjIUM{IUM{Rjayxut7j[j[xu",
- "description": "",
- "id": "508107650",
- "meta": {
- "original": {
- "aspect": 1,
- "height": 1024,
- "width": 1024
- }
- },
- "pleroma": {
- "mime_type": "image/png"
- },
- "preview_url": "https://media.gleasonator.com/2b9ddcd8b27cad786fd34bc2cfe02c1b63aa1b8e7b8d72379b5c9375fb61f199.png",
- "remote_url": "https://media.gleasonator.com/2b9ddcd8b27cad786fd34bc2cfe02c1b63aa1b8e7b8d72379b5c9375fb61f199.png",
- "text_url": "https://media.gleasonator.com/2b9ddcd8b27cad786fd34bc2cfe02c1b63aa1b8e7b8d72379b5c9375fb61f199.png",
- "type": "image",
- "url": "https://media.gleasonator.com/2b9ddcd8b27cad786fd34bc2cfe02c1b63aa1b8e7b8d72379b5c9375fb61f199.png"
- }
- ],
- "mentions": [],
- "muted": false,
- "pinned": false,
- "pleroma": {
- "content": {
- "text/plain": "I am going to delete this post for testing purposes"
- },
- "content_type": "text/markdown",
- "conversation_id": "AHU2RrUB7BMIqPESpM",
- "direct_conversation_id": null,
- "emoji_reactions": [
- {
- "count": 1,
- "me": false,
- "name": "😭"
- },
- {
- "count": 1,
- "me": false,
- "name": "❔"
- }
- ],
- "expires_at": null,
- "in_reply_to_account_acct": null,
- "local": true,
- "parent_visible": false,
- "pinned_at": null,
- "quote": null,
- "quote_url": null,
- "quote_visible": false,
- "spoiler_text": {
- "text/plain": ""
- },
- "thread_muted": false
- },
- "poll": null,
- "reblog": null,
- "reblogged": false,
- "reblogs_count": 1,
- "replies_count": 2,
- "sensitive": false,
- "spoiler_text": "",
- "tags": [],
- "text": "I am going to delete this post for testing purposes",
- "uri": "https://gleasonator.com/objects/205ec868-d28d-4668-a56a-33321f7e285e",
- "url": "https://gleasonator.com/notice/AHU2RrX0wdcwzCYjFQ",
- "visibility": "public"
-}
diff --git a/packages/pl-fe/src/__fixtures__/pleroma-status-reply-with-mentions.json b/packages/pl-fe/src/__fixtures__/pleroma-status-reply-with-mentions.json
deleted file mode 100644
index 21caf17e0..000000000
--- a/packages/pl-fe/src/__fixtures__/pleroma-status-reply-with-mentions.json
+++ /dev/null
@@ -1,207 +0,0 @@
-{
- "account": {
- "acct": "alex",
- "avatar": "https://media.gleasonator.com/6d64aecb17348b23aaff78db4687b9476cb0da1c07cc6a819c2e6ec7144c18b1.png",
- "avatar_static": "https://media.gleasonator.com/6d64aecb17348b23aaff78db4687b9476cb0da1c07cc6a819c2e6ec7144c18b1.png",
- "bot": false,
- "created_at": "2020-01-08T01:25:43.000Z",
- "display_name": "Alex Gleason",
- "emojis": [],
- "fields": [
- {
- "name": "Website",
- "value": "https://alexgleason.me "
- },
- {
- "name": "Soapbox",
- "value": "https://soapbox.pub "
- },
- {
- "name": "Email",
- "value": "alex@alexgleason.me"
- },
- {
- "name": "Gender identity",
- "value": "Soyboy"
- },
- {
- "name": "Donate (PayPal)",
- "value": "https://paypal.me/gleasonator "
- },
- {
- "name": "$BTC",
- "value": "bc1q9cx35adpm73aq2fw40ye6ts8hfxqzjr5unwg0n"
- },
- {
- "name": "$ETH",
- "value": "0xAc9aB5Fc04Dc1cB1789Af75b523Bd23C70B2D717"
- },
- {
- "name": "$DOGE",
- "value": "D5zVZs6jrRakaPVGiErkQiHt9sayzm6V5D"
- },
- {
- "name": "$XMR",
- "value": "45JDCLrjJ4bgVUSbbs2yjy9m5Mf4VLPW8fG7jw9sq5u69rXZZopQogZNeyYkMBnXpkaip4p4QwaaJNhdTotPa9g44DBCzdK"
- }
- ],
- "followers_count": 2536,
- "following_count": 1587,
- "fqn": "alex@gleasonator.com",
- "header": "https://media.gleasonator.com/accounts/headers/000/000/001/original/9d0e4dbf1c9dbc8f.png",
- "header_static": "https://media.gleasonator.com/accounts/headers/000/000/001/original/9d0e4dbf1c9dbc8f.png",
- "id": "9v5bmRalQvjOy0ECcC",
- "last_status_at": "2022-03-26T15:13:42",
- "locked": false,
- "note": "I create Fediverse software that empowers people online. I'm vegan btw Note: If you have a question for me, please tag me publicly. This gives the opportunity for others to chime in, and bystanders to learn.",
- "pleroma": {
- "accepts_chat_messages": true,
- "also_known_as": [
- "https://mitra.social/users/alex"
- ],
- "ap_id": "https://gleasonator.com/users/alex",
- "background_image": null,
- "birthday": "1993-07-03",
- "favicon": "https://gleasonator.com/favicon.png",
- "hide_favorites": true,
- "hide_followers": false,
- "hide_followers_count": false,
- "hide_follows": false,
- "hide_follows_count": false,
- "is_admin": true,
- "is_confirmed": true,
- "is_moderator": false,
- "is_suggested": true,
- "location": null,
- "relationship": {},
- "skip_thread_containment": false,
- "tags": []
- },
- "source": {
- "fields": [
- {
- "name": "Website",
- "value": "https://alexgleason.me"
- },
- {
- "name": "Soapbox",
- "value": "https://soapbox.pub"
- },
- {
- "name": "Email",
- "value": "alex@alexgleason.me"
- },
- {
- "name": "Gender identity",
- "value": "Soyboy"
- },
- {
- "name": "Donate (PayPal)",
- "value": "https://paypal.me/gleasonator"
- },
- {
- "name": "$BTC",
- "value": "bc1q9cx35adpm73aq2fw40ye6ts8hfxqzjr5unwg0n"
- },
- {
- "name": "$ETH",
- "value": "0xAc9aB5Fc04Dc1cB1789Af75b523Bd23C70B2D717"
- },
- {
- "name": "$DOGE",
- "value": "D5zVZs6jrRakaPVGiErkQiHt9sayzm6V5D"
- },
- {
- "name": "$XMR",
- "value": "45JDCLrjJ4bgVUSbbs2yjy9m5Mf4VLPW8fG7jw9sq5u69rXZZopQogZNeyYkMBnXpkaip4p4QwaaJNhdTotPa9g44DBCzdK"
- }
- ],
- "note": "I create Fediverse software that empowers people online.\r\n\r\nI'm vegan btw\r\n\r\nNote: If you have a question for me, please tag me publicly. This gives the opportunity for others to chime in, and bystanders to learn.",
- "pleroma": {
- "actor_type": "Person",
- "discoverable": false
- },
- "sensitive": false
- },
- "statuses_count": 23825,
- "url": "https://gleasonator.com/users/alex",
- "username": "alex"
- },
- "application": {
- "name": "Soapbox FE",
- "website": "https://soapbox.pub/"
- },
- "bookmarked": false,
- "card": null,
- "content": "DMs are definitely only federated to the servers of the recipients tho. So if I DM a kfcc user, the kfcc admins can see it, but no other instance admins can.
",
- "created_at": "2022-03-21T05:04:45.000Z",
- "emojis": [],
- "favourited": false,
- "favourites_count": 5,
- "id": "AHcweewcCh0iPUtMdk",
- "in_reply_to_account_id": "9v5bo8xPghEnkedGzo",
- "in_reply_to_id": "AHcwFrnbH1Xb2RqxhQ",
- "language": null,
- "media_attachments": [],
- "mentions": [
- {
- "acct": "crunklord420@kiwifarms.cc",
- "id": "9v5bo8xPghEnkedGzo",
- "url": "https://kiwifarms.cc/users/crunklord420",
- "username": "crunklord420"
- },
- {
- "acct": "becassine@kiwifarms.cc",
- "id": "A6W9i7UOhgpBBOkcEK",
- "url": "https://kiwifarms.cc/users/becassine",
- "username": "becassine"
- },
- {
- "acct": "King_Porgi@poa.st",
- "id": "A5U7Z228z3h3dBdg6C",
- "url": "https://poa.st/users/King_Porgi",
- "username": "King_Porgi"
- },
- {
- "acct": "ademan@thebag.social",
- "id": "A79wLvOahABnWFnwWm",
- "url": "https://thebag.social/users/ademan",
- "username": "ademan"
- }
- ],
- "muted": false,
- "pinned": false,
- "pleroma": {
- "content": {
- "text/plain": "DMs are definitely only federated to the servers of the recipients tho. So if I DM a kfcc user, the kfcc admins can see it, but no other instance admins can."
- },
- "content_type": null,
- "conversation_id": "AHcrQt04eG9qB87g3s",
- "direct_conversation_id": null,
- "emoji_reactions": [],
- "expires_at": null,
- "in_reply_to_account_acct": "crunklord420@kiwifarms.cc",
- "local": true,
- "parent_visible": true,
- "pinned_at": null,
- "quote": null,
- "quote_url": null,
- "quote_visible": false,
- "spoiler_text": {
- "text/plain": ""
- },
- "thread_muted": false
- },
- "poll": null,
- "reblog": null,
- "reblogged": false,
- "reblogs_count": 0,
- "replies_count": 2,
- "sensitive": false,
- "spoiler_text": "",
- "tags": [],
- "text": null,
- "uri": "https://gleasonator.com/objects/0981bab7-a086-4ed9-b938-adc3ed9d5f51",
- "url": "https://gleasonator.com/notice/AHcweewcCh0iPUtMdk",
- "visibility": "public"
-}
diff --git a/packages/pl-fe/src/__fixtures__/pleroma-status-with-attachments.json b/packages/pl-fe/src/__fixtures__/pleroma-status-with-attachments.json
deleted file mode 100644
index 75db8292f..000000000
--- a/packages/pl-fe/src/__fixtures__/pleroma-status-with-attachments.json
+++ /dev/null
@@ -1,238 +0,0 @@
-{
- "account": {
- "acct": "alex",
- "avatar": "https://media.gleasonator.com/6d64aecb17348b23aaff78db4687b9476cb0da1c07cc6a819c2e6ec7144c18b1.png",
- "avatar_static": "https://media.gleasonator.com/6d64aecb17348b23aaff78db4687b9476cb0da1c07cc6a819c2e6ec7144c18b1.png",
- "bot": false,
- "created_at": "2020-01-08T01:25:43.000Z",
- "display_name": "Alex Gleason",
- "emojis": [],
- "fields": [
- {
- "name": "Website",
- "value": "https://alexgleason.me "
- },
- {
- "name": "Pleroma+Soapbox",
- "value": "https://soapbox.pub "
- },
- {
- "name": "Email",
- "value": "alex@alexgleason.me"
- },
- {
- "name": "Gender identity",
- "value": "Soyboy"
- },
- {
- "name": "Donate (PayPal)",
- "value": "https://paypal.me/gleasonator "
- },
- {
- "name": "$BTC",
- "value": "bc1q9cx35adpm73aq2fw40ye6ts8hfxqzjr5unwg0n"
- },
- {
- "name": "$ETH",
- "value": "0xAc9aB5Fc04Dc1cB1789Af75b523Bd23C70B2D717"
- },
- {
- "name": "$DOGE",
- "value": "D5zVZs6jrRakaPVGiErkQiHt9sayzm6V5D"
- },
- {
- "name": "$XMR",
- "value": "45JDCLrjJ4bgVUSbbs2yjy9m5Mf4VLPW8fG7jw9sq5u69rXZZopQogZNeyYkMBnXpkaip4p4QwaaJNhdTotPa9g44DBCzdK"
- }
- ],
- "followers_count": 2344,
- "following_count": 1564,
- "fqn": "alex@gleasonator.com",
- "header": "https://media.gleasonator.com/accounts/headers/000/000/001/original/9d0e4dbf1c9dbc8f.png",
- "header_static": "https://media.gleasonator.com/accounts/headers/000/000/001/original/9d0e4dbf1c9dbc8f.png",
- "id": "9v5bmRalQvjOy0ECcC",
- "last_status_at": "2022-02-11T23:12:00",
- "locked": false,
- "note": "I create Fediverse software that empowers people online. I'm vegan btw Note: If you have a question for me, please tag me publicly. This gives the opportunity for others to chime in, and bystanders to learn.",
- "pleroma": {
- "accepts_chat_messages": true,
- "also_known_as": [],
- "ap_id": "https://gleasonator.com/users/alex",
- "background_image": null,
- "birthday": "1993-07-03",
- "favicon": "https://gleasonator.com/favicon.png",
- "hide_favorites": true,
- "hide_followers": false,
- "hide_followers_count": false,
- "hide_follows": false,
- "hide_follows_count": false,
- "is_admin": true,
- "is_confirmed": true,
- "is_moderator": false,
- "is_suggested": true,
- "relationship": {},
- "skip_thread_containment": false,
- "tags": []
- },
- "source": {
- "fields": [
- {
- "name": "Website",
- "value": "https://alexgleason.me"
- },
- {
- "name": "Pleroma+Soapbox",
- "value": "https://soapbox.pub"
- },
- {
- "name": "Email",
- "value": "alex@alexgleason.me"
- },
- {
- "name": "Gender identity",
- "value": "Soyboy"
- },
- {
- "name": "Donate (PayPal)",
- "value": "https://paypal.me/gleasonator"
- },
- {
- "name": "$BTC",
- "value": "bc1q9cx35adpm73aq2fw40ye6ts8hfxqzjr5unwg0n"
- },
- {
- "name": "$ETH",
- "value": "0xAc9aB5Fc04Dc1cB1789Af75b523Bd23C70B2D717"
- },
- {
- "name": "$DOGE",
- "value": "D5zVZs6jrRakaPVGiErkQiHt9sayzm6V5D"
- },
- {
- "name": "$XMR",
- "value": "45JDCLrjJ4bgVUSbbs2yjy9m5Mf4VLPW8fG7jw9sq5u69rXZZopQogZNeyYkMBnXpkaip4p4QwaaJNhdTotPa9g44DBCzdK"
- }
- ],
- "note": "I create Fediverse software that empowers people online.\r\n\r\nI'm vegan btw\r\n\r\nNote: If you have a question for me, please tag me publicly. This gives the opportunity for others to chime in, and bystanders to learn.",
- "pleroma": {
- "actor_type": "Person",
- "discoverable": false
- },
- "sensitive": false
- },
- "statuses_count": 23357,
- "url": "https://gleasonator.com/users/alex",
- "username": "alex"
- },
- "application": {
- "name": "Soapbox FE",
- "website": "https://soapbox.pub/"
- },
- "bookmarked": false,
- "card": null,
- "content": "Test
",
- "created_at": "2022-02-11T23:11:59.000Z",
- "emojis": [],
- "favourited": false,
- "favourites_count": 1,
- "id": "AGNkA21auFR5lnEAHw",
- "in_reply_to_account_id": null,
- "in_reply_to_id": null,
- "language": null,
- "media_attachments": [
- {
- "blurhash": "emLqe9t7~q%M%M-;WBt7ofRj%Moft7ofoft7ayWBj[of-;j[ayofM{",
- "description": "",
- "id": "974611173",
- "meta": {
- "original": {
- "aspect": 0.9944598337950139,
- "height": 1444,
- "width": 1436
- }
- },
- "pleroma": {
- "mime_type": "image/png"
- },
- "preview_url": "https://media.gleasonator.com/8e04e6091bbbac79641b5812508683ce72c38693661c18d16040553f2371e18d.png",
- "remote_url": "https://media.gleasonator.com/8e04e6091bbbac79641b5812508683ce72c38693661c18d16040553f2371e18d.png",
- "text_url": "https://media.gleasonator.com/8e04e6091bbbac79641b5812508683ce72c38693661c18d16040553f2371e18d.png",
- "type": "image",
- "url": "https://media.gleasonator.com/8e04e6091bbbac79641b5812508683ce72c38693661c18d16040553f2371e18d.png"
- },
- {
- "blurhash": null,
- "description": "",
- "id": "-1764036199",
- "pleroma": {
- "mime_type": "application/x-nes-rom"
- },
- "preview_url": "https://media.gleasonator.com/8f72dc2e98572eb4ba7c3a902bca5f69c448fc4391837e5f8f0d4556280440ac.nes",
- "remote_url": "https://media.gleasonator.com/8f72dc2e98572eb4ba7c3a902bca5f69c448fc4391837e5f8f0d4556280440ac.nes",
- "text_url": "https://media.gleasonator.com/8f72dc2e98572eb4ba7c3a902bca5f69c448fc4391837e5f8f0d4556280440ac.nes",
- "type": "unknown",
- "url": "https://media.gleasonator.com/8f72dc2e98572eb4ba7c3a902bca5f69c448fc4391837e5f8f0d4556280440ac.nes"
- },
- {
- "blurhash": null,
- "description": "",
- "id": "-636167741",
- "pleroma": {
- "mime_type": "audio/ogg"
- },
- "preview_url": "https://media.gleasonator.com/55a81a090247cc4fc127e5716bcf7964f6e0df9b584f85f4696c0b994747a4d0.ogg",
- "remote_url": "https://media.gleasonator.com/55a81a090247cc4fc127e5716bcf7964f6e0df9b584f85f4696c0b994747a4d0.ogg",
- "text_url": "https://media.gleasonator.com/55a81a090247cc4fc127e5716bcf7964f6e0df9b584f85f4696c0b994747a4d0.ogg",
- "type": "audio",
- "url": "https://media.gleasonator.com/55a81a090247cc4fc127e5716bcf7964f6e0df9b584f85f4696c0b994747a4d0.ogg"
- },
- {
- "blurhash": null,
- "description": "",
- "id": "517941208",
- "pleroma": {
- "mime_type": "text/plain"
- },
- "preview_url": "https://media.gleasonator.com/0d96a4ff68ad6d4b6f1f30f713b18d5184912ba8dd389f86aa7710db079abcb0.LICENSE",
- "remote_url": "https://media.gleasonator.com/0d96a4ff68ad6d4b6f1f30f713b18d5184912ba8dd389f86aa7710db079abcb0.LICENSE",
- "text_url": "https://media.gleasonator.com/0d96a4ff68ad6d4b6f1f30f713b18d5184912ba8dd389f86aa7710db079abcb0.LICENSE",
- "type": "unknown",
- "url": "https://media.gleasonator.com/0d96a4ff68ad6d4b6f1f30f713b18d5184912ba8dd389f86aa7710db079abcb0.LICENSE"
- }
- ],
- "mentions": [],
- "muted": false,
- "pinned": false,
- "pleroma": {
- "content": {
- "text/plain": "Test"
- },
- "conversation_id": "AGNkA1yP66srbtjcJc",
- "direct_conversation_id": null,
- "emoji_reactions": [],
- "expires_at": null,
- "in_reply_to_account_acct": null,
- "local": true,
- "parent_visible": false,
- "pinned_at": null,
- "quote": null,
- "quote_url": null,
- "quote_visible": false,
- "spoiler_text": {
- "text/plain": ""
- },
- "thread_muted": false
- },
- "poll": null,
- "reblog": null,
- "reblogged": false,
- "reblogs_count": 0,
- "replies_count": 0,
- "sensitive": false,
- "spoiler_text": "",
- "tags": [],
- "text": null,
- "uri": "https://gleasonator.com/objects/aa5e66c9-0a10-4167-9c80-f40d9574aaec",
- "url": "https://gleasonator.com/notice/AGNkA21auFR5lnEAHw",
- "visibility": "public"
-}
diff --git a/packages/pl-fe/src/__fixtures__/pleroma_initial_results.json b/packages/pl-fe/src/__fixtures__/pleroma_initial_results.json
deleted file mode 100644
index 027b646e0..000000000
--- a/packages/pl-fe/src/__fixtures__/pleroma_initial_results.json
+++ /dev/null
@@ -1,6 +0,0 @@
-{
- "/api/pleroma/frontend_configurations": "eyJtYXN0b19mZSI6eyJzaG93SW5zdGFuY2VTcGVjaWZpY1BhbmVsIjp0cnVlfSwicGxlcm9tYV9mZSI6eyJhbHdheXNTaG93U3ViamVjdElucHV0Ijp0cnVlLCJiYWNrZ3JvdW5kIjoiL2ltYWdlcy9jaXR5LmpwZyIsImNvbGxhcHNlTWVzc2FnZVdpdGhTdWJqZWN0IjpmYWxzZSwiZGlzYWJsZUNoYXQiOmZhbHNlLCJncmVlbnRleHQiOmZhbHNlLCJoaWRlRmlsdGVyZWRTdGF0dXNlcyI6ZmFsc2UsImhpZGVNdXRlZFBvc3RzIjpmYWxzZSwiaGlkZVBvc3RTdGF0cyI6ZmFsc2UsImhpZGVTaXRlbmFtZSI6ZmFsc2UsImhpZGVVc2VyU3RhdHMiOmZhbHNlLCJsb2dpbk1ldGhvZCI6InBhc3N3b3JkIiwibG9nbyI6Ii9zdGF0aWMvbG9nby5zdmciLCJsb2dvTWFyZ2luIjoiLjFlbSIsImxvZ29NYXNrIjp0cnVlLCJtaW5pbWFsU2NvcGVzTW9kZSI6ZmFsc2UsIm5vQXR0YWNobWVudExpbmtzIjpmYWxzZSwibnNmd0NlbnNvckltYWdlIjoiIiwicG9zdENvbnRlbnRUeXBlIjoidGV4dC9wbGFpbiIsInJlZGlyZWN0Um9vdExvZ2luIjoiL21haW4vZnJpZW5kcyIsInJlZGlyZWN0Um9vdE5vTG9naW4iOiIvbWFpbi9hbGwiLCJzY29wZUNvcHkiOnRydWUsInNob3dGZWF0dXJlc1BhbmVsIjp0cnVlLCJzaG93SW5zdGFuY2VTcGVjaWZpY1BhbmVsIjpmYWxzZSwic2lkZWJhclJpZ2h0IjpmYWxzZSwic3ViamVjdExpbmVCZWhhdmlvciI6ImVtYWlsIiwidGhlbWUiOiJwbGVyb21hLWRhcmsiLCJ3ZWJQdXNoTm90aWZpY2F0aW9ucyI6ZmFsc2V9LCJzb2FwYm94X2ZlIjp7ImJyYW5kQ29sb3IiOiIjMWNhODJiIiwiY3J5cHRvQWRkcmVzc2VzIjpbeyJhZGRyZXNzIjoiYmMxcTljeDM1YWRwbTczYXEyZnc0MHllNnRzOGhmeHF6anI1dW53ZzBuIiwibm90ZSI6IiIsInRpY2tlciI6ImJ0YyJ9LHsiYWRkcmVzcyI6IjB4QWM5YUI1RmMwNERjMWNCMTc4OUFmNzViNTIzQmQyM0M3MEIyRDcxNyIsInRpY2tlciI6ImV0aCJ9LHsiYWRkcmVzcyI6IkQ1elZaczZqclJha2FQVkdpRXJrUWlIdDlzYXl6bTZWNUQiLCJ0aWNrZXIiOiJkb2dlIn0seyJhZGRyZXNzIjoiMHg1NDFhNDVjYjIxMmI1N2Y0MTM5MzQyN2ZiMTUzMzVmYzg5YzM1ODUxIiwidGlja2VyIjoidWJxIn0seyJhZGRyZXNzIjoiNDVKRENMcmpKNGJnVlVTYmJzMnlqeTltNU1mNFZMUFc4Zkc3anc5c3E1dTY5clhaWm9wUW9nWk5leVlrTUJuWHBrYWlwNHA0UXdhYUpOaGRUb3RQYTlnNDREQkN6ZEsiLCJub3RlIjoiIiwidGlja2VyIjoieG1yIn0seyJhZGRyZXNzIjoibHRjMXFkYTY0NWpkZjRqc3p3eGN2c24zMnlrZGhlbXZseDd5bDluNWd6OSIsIm5vdGUiOiIiLCJ0aWNrZXIiOiJsdGMifSx7ImFkZHJlc3MiOiJiaXRjb2luY2FzaDpxcGNmbm05dzh1ZW1heDM4eXFoeWc1OHpuMnB0cGY2c3p2a3IwbjQ4YTciLCJub3RlIjoiIiwidGlja2VyIjoiYmNoIn0seyJhZGRyZXNzIjoiWG5CNXA0SnZMM1NvOTFBMWMxTUVSb3paRWplTVNzQUQ3SiIsIm5vdGUiOiIiLCJ0aWNrZXIiOiJkYXNoIn0seyJhZGRyZXNzIjoidDFQSFpYNVpqWTd5NjFpQzE5QTk1OFc5aGR5SDNTaUxKdUYiLCJub3RlIjoiIiwidGlja2VyIjoiemVjIn0seyJhZGRyZXNzIjoiMHhCODFCQUVFMTBkMTYzNDA0YTFjNjAwNDVhODcyYTBkYTlFMjU4NDY1Iiwibm90ZSI6IiIsInRpY2tlciI6ImV0YyJ9LHsiYWRkcmVzcyI6IkFHVExSWGFwUFlweHQzUExkaVhFczh5NGtMdzZReTNDNHQiLCJub3RlIjoiIiwidGlja2VyIjoiYnRnIn0seyJhZGRyZXNzIjoiU2JRY0ZVRGk3a0t5eGttc2t6VzN3NzR4NjhINWVVcmc3NiIsIm5vdGUiOiIiLCJ0aWNrZXIiOiJkZ2IifSx7ImFkZHJlc3MiOiJON25vbXBVVnh6NUFUcnpSVlR6dzdDYUFKb1NpVnRFY1F4Iiwibm90ZSI6IiIsInRpY2tlciI6Im5tYyJ9LHsiYWRkcmVzcyI6IjNBUWNVZ0NiRjZ5bWlSNEhHQ1U4QU54OVNxYnpMNm54OHIiLCJub3RlIjoiIiwidGlja2VyIjoidnRjIn1dLCJjcnlwdG9Eb25hdGVQYW5lbCI6eyJsaW1pdCI6MX0sImRlZmF1bHRTZXR0aW5ncyI6eyJ0aGVtZU1vZGUiOiJsaWdodCJ9LCJleHRlbnNpb25zIjp7InBhdHJvbiI6eyJlbmFibGVkIjp0cnVlfX0sImdyZWVudGV4dCI6dHJ1ZSwibG9nbyI6Imh0dHBzOi8vbWVkaWEuZ2xlYXNvbmF0b3IuY29tLzBjNzYwYjNlY2RiYzk5M2JhNDdiNzg1ZDBhZGVjZjBlYzcxZmQ5YzU5ODA4ZTI3ZDA2NjViOWY3N2EzMmQ4ZGUucG5nIiwibmF2bGlua3MiOnsiaG9tZUZvb3RlciI6W3sidGl0bGUiOiJBYm91dCIsInVybCI6Ii9hYm91dCJ9LHsidGl0bGUiOiJUZXJtcyBvZiBTZXJ2aWNlIiwidXJsIjoiL2Fib3V0L3RvcyJ9LHsidGl0bGUiOiJQcml2YWN5IFBvbGljeSIsInVybCI6Ii9hYm91dC9wcml2YWN5In0seyJ0aXRsZSI6IkRNQ0EiLCJ1cmwiOiIvYWJvdXQvZG1jYSJ9LHsidGl0bGUiOiJTb3VyY2UgQ29kZSIsInVybCI6Ii9hYm91dCNvcGVuc291cmNlIn1dfSwicHJvbW9QYW5lbCI6eyJpdGVtcyI6W3siaWNvbiI6ImNvbW1lbnQtbyIsInRleHQiOiJHbGVhc29uYXRvciB0aGVtZSBzb25nIiwidXJsIjoiaHR0cHM6Ly9tZWRpYS5nbGVhc29uYXRvci5jb20vY3VzdG9tLzI2MTkwNV9nbGVhc29uYXRvcl9zb25nLm1wMyJ9XX0sInZlcmlmaWVkQ2FuRWRpdE5hbWUiOnRydWV9fQ==",
- "/api/v1/instance": "eyJhcHByb3ZhbF9yZXF1aXJlZCI6dHJ1ZSwiYXZhdGFyX3VwbG9hZF9saW1pdCI6MjAwMDAwMCwiYmFja2dyb3VuZF9pbWFnZSI6Imh0dHBzOi8vZ2xlYXNvbmF0b3IuY29tL2ltYWdlcy9jaXR5LmpwZyIsImJhY2tncm91bmRfdXBsb2FkX2xpbWl0Ijo0MDAwMDAwLCJiYW5uZXJfdXBsb2FkX2xpbWl0Ijo0MDAwMDAwLCJjaGF0X2xpbWl0Ijo1MDAwLCJkZXNjcmlwdGlvbiI6IkJ1aWxkaW5nIHRoZSBuZXh0IGdlbmVyYXRpb24gb2YgdGhlIEZlZGl2ZXJzZS4gU3BlYWsgZnJlZWx5LiIsImRlc2NyaXB0aW9uX2xpbWl0Ijo1MDAwLCJlbWFpbCI6ImFsZXhAYWxleGdsZWFzb24ubWUiLCJsYW5ndWFnZXMiOlsiZW4iXSwibWF4X3Rvb3RfY2hhcnMiOjUwMDAsInBsZXJvbWEiOnsibWV0YWRhdGEiOnsiYWNjb3VudF9hY3RpdmF0aW9uX3JlcXVpcmVkIjpmYWxzZSwiZmVhdHVyZXMiOlsicGxlcm9tYV9hcGkiLCJtYXN0b2Rvbl9hcGkiLCJtYXN0b2Rvbl9hcGlfc3RyZWFtaW5nIiwicG9sbHMiLCJwbGVyb21hX2V4cGxpY2l0X2FkZHJlc3NpbmciLCJzaGFyZWFibGVfZW1vamlfcGFja3MiLCJtdWx0aWZldGNoIiwicGxlcm9tYTphcGkvdjEvbm90aWZpY2F0aW9uczppbmNsdWRlX3R5cGVzX2ZpbHRlciIsIm1lZGlhX3Byb3h5IiwicmVsYXkiLCJwbGVyb21hX2Vtb2ppX3JlYWN0aW9ucyIsInBsZXJvbWFfY2hhdF9tZXNzYWdlcyIsImVtYWlsX2xpc3QiXSwiZmVkZXJhdGlvbiI6eyJlbmFibGVkIjp0cnVlLCJleGNsdXNpb25zIjpmYWxzZSwibXJmX3BvbGljaWVzIjpbIlRhZ1BvbGljeSIsIlNpbXBsZVBvbGljeSJdLCJtcmZfc2ltcGxlIjp7ImFjY2VwdCI6W10sImF2YXRhcl9yZW1vdmFsIjpbInBhd29vLm5ldCIsInNpbmJsci5jb20iLCJkYWppYXdlaWJvLmNvbSJdLCJiYW5uZXJfcmVtb3ZhbCI6WyJwYXdvby5uZXQiLCJzaW5ibHIuY29tIiwiZGFqaWF3ZWliby5jb20iXSwiZmVkZXJhdGVkX3RpbWVsaW5lX3JlbW92YWwiOltdLCJmb2xsb3dlcnNfb25seSI6W10sIm1lZGlhX25zZnciOltdLCJtZWRpYV9yZW1vdmFsIjpbInBhd29vLm5ldCIsInNpbmJsci5jb20iLCJkYWppYXdlaWJvLmNvbSJdLCJyZWplY3QiOltdLCJyZWplY3RfZGVsZXRlcyI6W10sInJlcG9ydF9yZW1vdmFsIjpbXX0sInF1YXJhbnRpbmVkX2luc3RhbmNlcyI6W119LCJmaWVsZHNfbGltaXRzIjp7Im1heF9maWVsZHMiOjE1LCJtYXhfcmVtb3RlX2ZpZWxkcyI6MjAsIm5hbWVfbGVuZ3RoIjo1MTIsInZhbHVlX2xlbmd0aCI6MjA0OH0sInBvc3RfZm9ybWF0cyI6WyJ0ZXh0L3BsYWluIiwidGV4dC9odG1sIiwidGV4dC9tYXJrZG93biIsInRleHQvYmJjb2RlIl19LCJzdGF0cyI6eyJtYXUiOjU0fSwidmFwaWRfcHVibGljX2tleSI6IkJMRWxMUVZKVm1ZX2U0RjVKb1l4STVqWGlWT1lOc0o5cC1hbWt5a2M5TmNJLWp3YTlUMVkyR0liRHFiWS1IcUM2YXlQa2ZXNEs0bzl2Z0JGS1lta3VTNCJ9LCJwb2xsX2xpbWl0cyI6eyJtYXhfZXhwaXJhdGlvbiI6MzE1MzYwMDAsIm1heF9vcHRpb25fY2hhcnMiOjIwMCwibWF4X29wdGlvbnMiOjIwLCJtaW5fZXhwaXJhdGlvbiI6MH0sInJlZ2lzdHJhdGlvbnMiOnRydWUsInNvYXBib3giOnsidmVyc2lvbiI6IjEuMS4xIn0sInN0YXRzIjp7ImRvbWFpbl9jb3VudCI6NzIwMCwic3RhdHVzX2NvdW50Ijo3ODkwNiwidXNlcl9jb3VudCI6MzU3fSwidGh1bWJuYWlsIjoiaHR0cHM6Ly9nbGVhc29uYXRvci5jb21odHRwczovL21lZGlhLmdsZWFzb25hdG9yLmNvbS9jMGQzOGJkZTZlZjBiM2JhYTQ4M2Y1NzQ3OTc2NjJlYmQ4M2VmOWUxYTExNjJlOGU0ZmNkOTMwYmI0YjNjMDY4LnBuZyIsInRpdGxlIjoiR2xlYXNvbmF0b3IiLCJ1cGxvYWRfbGltaXQiOjEwMDAwMDAwMCwidXJpIjoiaHR0cHM6Ly9nbGVhc29uYXRvci5jb20iLCJ1cmxzIjp7InN0cmVhbWluZ19hcGkiOiJ3c3M6Ly9nbGVhc29uYXRvci5jb20ifSwidmVyc2lvbiI6IjIuNy4yIChjb21wYXRpYmxlOyBQbGVyb21hIDIuMy4wLTExMS1nYjQ3OGE4N2UtZGV2ZWxvcCkifQ==",
- "/instance/panel.html": "IjxkaXYgc3R5bGU9XCJtYXJnaW4tbGVmdDoxMnB4OyBtYXJnaW4tcmlnaHQ6MTJweFwiPlxuPHA+V2VsY29tZSB0byA8YSBocmVmPVwiaHR0cHM6Ly9wbGVyb21hLnNvY2lhbFwiIHRhcmdldD1cIl9ibGFua1wiPlBsZXJvbWEhPC9hPjwvcD4gICAgXG48cD48YSBocmVmPVwiL21haW4vYWxsXCI+UGxlcm9tYSBGRTwvYT4gfCA8YSBocmVmPVwiL3dlYlwiPk1hc3RvZG9uIEZFPC9hPjwvcD5cbjwvZGl2PlxuXG4i",
- "/nodeinfo/2.0.json": "eyJtZXRhZGF0YSI6eyJhY2NvdW50QWN0aXZhdGlvblJlcXVpcmVkIjpmYWxzZSwiZmVhdHVyZXMiOlsicGxlcm9tYV9hcGkiLCJtYXN0b2Rvbl9hcGkiLCJtYXN0b2Rvbl9hcGlfc3RyZWFtaW5nIiwicG9sbHMiLCJwbGVyb21hX2V4cGxpY2l0X2FkZHJlc3NpbmciLCJzaGFyZWFibGVfZW1vamlfcGFja3MiLCJtdWx0aWZldGNoIiwicGxlcm9tYTphcGkvdjEvbm90aWZpY2F0aW9uczppbmNsdWRlX3R5cGVzX2ZpbHRlciIsIm1lZGlhX3Byb3h5IiwicmVsYXkiLCJwbGVyb21hX2Vtb2ppX3JlYWN0aW9ucyIsInBsZXJvbWFfY2hhdF9tZXNzYWdlcyIsImVtYWlsX2xpc3QiXSwiZmVkZXJhdGlvbiI6eyJlbmFibGVkIjp0cnVlLCJleGNsdXNpb25zIjpmYWxzZSwibXJmX3BvbGljaWVzIjpbIlRhZ1BvbGljeSIsIlNpbXBsZVBvbGljeSJdLCJtcmZfc2ltcGxlIjp7ImFjY2VwdCI6W10sImF2YXRhcl9yZW1vdmFsIjpbInBhd29vLm5ldCIsInNpbmJsci5jb20iLCJkYWppYXdlaWJvLmNvbSJdLCJiYW5uZXJfcmVtb3ZhbCI6WyJwYXdvby5uZXQiLCJzaW5ibHIuY29tIiwiZGFqaWF3ZWliby5jb20iXSwiZmVkZXJhdGVkX3RpbWVsaW5lX3JlbW92YWwiOltdLCJmb2xsb3dlcnNfb25seSI6W10sIm1lZGlhX25zZnciOltdLCJtZWRpYV9yZW1vdmFsIjpbInBhd29vLm5ldCIsInNpbmJsci5jb20iLCJkYWppYXdlaWJvLmNvbSJdLCJyZWplY3QiOltdLCJyZWplY3RfZGVsZXRlcyI6W10sInJlcG9ydF9yZW1vdmFsIjpbXX0sInF1YXJhbnRpbmVkX2luc3RhbmNlcyI6W119LCJmaWVsZHNMaW1pdHMiOnsibWF4RmllbGRzIjoxNSwibWF4UmVtb3RlRmllbGRzIjoyMCwibmFtZUxlbmd0aCI6NTEyLCJ2YWx1ZUxlbmd0aCI6MjA0OH0sImludml0ZXNFbmFibGVkIjpmYWxzZSwibWFpbGVyRW5hYmxlZCI6dHJ1ZSwibm9kZURlc2NyaXB0aW9uIjoiQnVpbGRpbmcgdGhlIG5leHQgZ2VuZXJhdGlvbiBvZiB0aGUgRmVkaXZlcnNlLiBTcGVhayBmcmVlbHkuIiwibm9kZU5hbWUiOiJHbGVhc29uYXRvciIsInBvbGxMaW1pdHMiOnsibWF4X2V4cGlyYXRpb24iOjMxNTM2MDAwLCJtYXhfb3B0aW9uX2NoYXJzIjoyMDAsIm1heF9vcHRpb25zIjoyMCwibWluX2V4cGlyYXRpb24iOjB9LCJwb3N0Rm9ybWF0cyI6WyJ0ZXh0L3BsYWluIiwidGV4dC9odG1sIiwidGV4dC9tYXJrZG93biIsInRleHQvYmJjb2RlIl0sInByaXZhdGUiOmZhbHNlLCJyZXN0cmljdGVkTmlja25hbWVzIjpbIi53ZWxsLWtub3duIiwifiIsImFib3V0IiwiYWN0aXZpdGllcyIsImFwaSIsImF1dGgiLCJjaGVja19wYXNzd29yZCIsImRldiIsImZyaWVuZC1yZXF1ZXN0cyIsImluYm94IiwiaW50ZXJuYWwiLCJtYWluIiwibWVkaWEiLCJub2RlaW5mbyIsIm5vdGljZSIsIm9hdXRoIiwib2JqZWN0cyIsIm9zdGF0dXNfc3Vic2NyaWJlIiwicGxlcm9tYSIsInByb3h5IiwicHVzaCIsInJlZ2lzdHJhdGlvbiIsInJlbGF5Iiwic2V0dGluZ3MiLCJzdGF0dXMiLCJ0YWciLCJ1c2VyLXNlYXJjaCIsInVzZXJfZXhpc3RzIiwidXNlcnMiLCJ3ZWIiLCJ2ZXJpZnlfY3JlZGVudGlhbHMiLCJ1cGRhdGVfY3JlZGVudGlhbHMiLCJyZWxhdGlvbnNoaXBzIiwic2VhcmNoIiwiY29uZmlybWF0aW9uX3Jlc2VuZCIsIm1mYSJdLCJza2lwVGhyZWFkQ29udGFpbm1lbnQiOnRydWUsInN0YWZmQWNjb3VudHMiOlsiaHR0cHM6Ly9nbGVhc29uYXRvci5jb20vdXNlcnMvYWxleCJdLCJzdWdnZXN0aW9ucyI6eyJlbmFibGVkIjpmYWxzZX0sInVwbG9hZExpbWl0cyI6eyJhdmF0YXIiOjIwMDAwMDAsImJhY2tncm91bmQiOjQwMDAwMDAsImJhbm5lciI6NDAwMDAwMCwiZ2VuZXJhbCI6MTAwMDAwMDAwfX0sIm9wZW5SZWdpc3RyYXRpb25zIjp0cnVlLCJwcm90b2NvbHMiOlsiYWN0aXZpdHlwdWIiXSwic2VydmljZXMiOnsiaW5ib3VuZCI6W10sIm91dGJvdW5kIjpbXX0sInNvZnR3YXJlIjp7Im5hbWUiOiJwbGVyb21hIiwidmVyc2lvbiI6IjIuMy4wLTExMS1nYjQ3OGE4N2UtZGV2ZWxvcCJ9LCJ1c2FnZSI6eyJsb2NhbFBvc3RzIjo3ODkwNiwidXNlcnMiOnsidG90YWwiOjM1N319LCJ2ZXJzaW9uIjoiMi4wIn0="
-}
diff --git a/packages/pl-fe/src/__fixtures__/relationship.json b/packages/pl-fe/src/__fixtures__/relationship.json
deleted file mode 100644
index 179b8335e..000000000
--- a/packages/pl-fe/src/__fixtures__/relationship.json
+++ /dev/null
@@ -1,14 +0,0 @@
-{
- "showing_reblogs": true,
- "followed_by": false,
- "subscribing": false,
- "blocked_by": false,
- "requested": false,
- "domain_blocking": false,
- "following": false,
- "endorsed": false,
- "blocking": true,
- "muting": false,
- "id": "9vMAje101ngtjlMj7w",
- "muting_notifications": true
-}
diff --git a/packages/pl-fe/src/__fixtures__/rules.json b/packages/pl-fe/src/__fixtures__/rules.json
deleted file mode 100644
index f5f3756f9..000000000
--- a/packages/pl-fe/src/__fixtures__/rules.json
+++ /dev/null
@@ -1,12 +0,0 @@
-[
- {
- "id": "1",
- "text": "Illegal activity and behavior",
- "subtext": "Content that depicts illegal or criminal acts, threats of violence."
- },
- {
- "id": "2",
- "text": "Intellectual property infringement",
- "subtext": "Impersonating another account or business, infringing on intellectual property rights."
- }
-]
diff --git a/packages/pl-fe/src/__fixtures__/status-custom-emoji.json b/packages/pl-fe/src/__fixtures__/status-custom-emoji.json
deleted file mode 100644
index ac3f184ee..000000000
--- a/packages/pl-fe/src/__fixtures__/status-custom-emoji.json
+++ /dev/null
@@ -1,126 +0,0 @@
-{
- "account": {
- "acct": "benis911",
- "avatar": "https://gleasonator.com/images/avi.png",
- "avatar_static": "https://gleasonator.com/images/avi.png",
- "bot": false,
- "created_at": "2021-03-26T20:42:11.000Z",
- "display_name": "benis911",
- "emojis": [],
- "fields": [],
- "followers_count": 0,
- "following_count": 0,
- "fqn": "benis911@gleasonator.com",
- "header": "https://media.gleasonator.com/fc595bbbcf5aabefecd1c2adfe5b7f5457db59847992881668653a0338ba25bd.jpg",
- "header_static": "https://media.gleasonator.com/fc595bbbcf5aabefecd1c2adfe5b7f5457db59847992881668653a0338ba25bd.jpg",
- "id": "A5c5LK7EJTFR0u26Pg",
- "last_status_at": "2022-02-23T17:31:08",
- "locked": true,
- "note": "hello world 2",
- "pleroma": {
- "accepts_chat_messages": true,
- "also_known_as": [
- "https://gleasonator.com/users/alex",
- "https://poa.st/users/alex"
- ],
- "ap_id": "https://gleasonator.com/users/benis911",
- "background_image": null,
- "birthday": "2000-01-25",
- "favicon": "https://gleasonator.com/favicon.png",
- "hide_favorites": true,
- "hide_followers": true,
- "hide_followers_count": true,
- "hide_follows": true,
- "hide_follows_count": true,
- "is_admin": false,
- "is_confirmed": true,
- "is_moderator": false,
- "is_suggested": false,
- "relationship": {},
- "skip_thread_containment": false,
- "tags": []
- },
- "source": {
- "fields": [],
- "note": "hello world 2",
- "pleroma": {
- "actor_type": "Person",
- "discoverable": false
- },
- "sensitive": false
- },
- "statuses_count": 152,
- "url": "https://gleasonator.com/users/benis911",
- "username": "benis911"
- },
- "application": {
- "name": "Soapbox FE",
- "website": "https://soapbox.pub/"
- },
- "bookmarked": false,
- "card": null,
- "content": "Hello :ablobcathyper: :ageblobcat: 😂 world 😋 test :blobcatphoto:",
- "created_at": "2022-02-23T17:31:07.000Z",
- "emojis": [
- {
- "shortcode": "ablobcathyper",
- "static_url": "https://gleasonator.com/emoji/blobcat/ablobcathyper.png",
- "url": "https://gleasonator.com/emoji/blobcat/ablobcathyper.png",
- "visible_in_picker": false
- },
- {
- "shortcode": "ageblobcat",
- "static_url": "https://gleasonator.com/emoji/blobcat/ageblobcat.png",
- "url": "https://gleasonator.com/emoji/blobcat/ageblobcat.png",
- "visible_in_picker": false
- },
- {
- "shortcode": "blobcatphoto",
- "static_url": "https://gleasonator.com/emoji/blobcat/blobcatphoto.png",
- "url": "https://gleasonator.com/emoji/blobcat/blobcatphoto.png",
- "visible_in_picker": false
- }
- ],
- "favourited": false,
- "favourites_count": 0,
- "id": "AGm7uC9DaAIGUa4KYK",
- "in_reply_to_account_id": null,
- "in_reply_to_id": null,
- "language": null,
- "media_attachments": [],
- "mentions": [],
- "muted": false,
- "pinned": false,
- "pleroma": {
- "content": {
- "text/plain": "Hello :ablobcathyper: :ageblobcat: 😂 world 😋 test :blobcatphoto:"
- },
- "conversation_id": "AGm7uC3BwZTOBtFW9w",
- "direct_conversation_id": null,
- "emoji_reactions": [],
- "expires_at": null,
- "in_reply_to_account_acct": null,
- "local": true,
- "parent_visible": false,
- "pinned_at": null,
- "quote": null,
- "quote_url": null,
- "quote_visible": false,
- "spoiler_text": {
- "text/plain": ""
- },
- "thread_muted": false
- },
- "poll": null,
- "reblog": null,
- "reblogged": false,
- "reblogs_count": 0,
- "replies_count": 0,
- "sensitive": false,
- "spoiler_text": "",
- "tags": [],
- "text": null,
- "uri": "https://gleasonator.com/objects/2dc79219-aed6-40c0-8818-0c2d26ed3436",
- "url": "https://gleasonator.com/notice/AGm7uC9DaAIGUa4KYK",
- "visibility": "public"
-}
diff --git a/packages/pl-fe/src/__fixtures__/status-cw.json b/packages/pl-fe/src/__fixtures__/status-cw.json
deleted file mode 100644
index af9978cfb..000000000
--- a/packages/pl-fe/src/__fixtures__/status-cw.json
+++ /dev/null
@@ -1,63 +0,0 @@
-{
- "id": "107831528995252317",
- "created_at": "2022-02-20T17:35:55.224Z",
- "in_reply_to_id": null,
- "in_reply_to_account_id": null,
- "sensitive": true,
- "spoiler_text": "testing",
- "visibility": "public",
- "language": "en",
- "uri": "https://fedibird.com/users/alex/statuses/107831528995252317",
- "url": "https://fedibird.com/@alex/107831528995252317",
- "replies_count": 0,
- "reblogs_count": 0,
- "favourites_count": 0,
- "emoji_reactions_count": 0,
- "emoji_reactions": [],
- "content": "hello world
",
- "reblog": null,
- "application": {
- "name": "Web",
- "website": null
- },
- "account": {
- "id": "66768",
- "username": "alex",
- "acct": "alex",
- "display_name": "",
- "locked": false,
- "bot": false,
- "cat": false,
- "discoverable": null,
- "group": false,
- "created_at": "2020-01-27T00:00:00.000Z",
- "note": "
",
- "url": "https://fedibird.com/@alex",
- "avatar": "https://fedibird.com/avatars/original/missing.png",
- "avatar_static": "https://fedibird.com/avatars/original/missing.png",
- "header": "https://fedibird.com/headers/original/missing.png",
- "header_static": "https://fedibird.com/headers/original/missing.png",
- "followers_count": 1,
- "following_count": 1,
- "subscribing_count": 0,
- "statuses_count": 5,
- "last_status_at": "2022-02-20",
- "emojis": [],
- "fields": [],
- "other_settings": {
- "noindex": false,
- "hide_network": false,
- "hide_statuses_count": false,
- "hide_following_count": false,
- "hide_followers_count": false,
- "enable_reaction": true
- }
- },
- "media_attachments": [],
- "mentions": [],
- "tags": [],
- "emojis": [],
- "card": null,
- "poll": null,
- "quote": null
-}
diff --git a/packages/pl-fe/src/__fixtures__/status-quotes.json b/packages/pl-fe/src/__fixtures__/status-quotes.json
deleted file mode 100644
index d74a149c9..000000000
--- a/packages/pl-fe/src/__fixtures__/status-quotes.json
+++ /dev/null
@@ -1,15 +0,0 @@
-[
- {
- "account": {
- "id": "ABDSjI3Q0R8aDaz1U0"
- },
- "content": "quoast",
- "id": "AJsajx9hY4Q7IKQXEe",
- "pleroma": {
- "quote": {
- "content": "10
",
- "id": "AJmoVikzI3SkyITyim"
- }
- }
- }
-]
diff --git a/packages/pl-fe/src/__fixtures__/status-unordered-mentions.json b/packages/pl-fe/src/__fixtures__/status-unordered-mentions.json
deleted file mode 100644
index 40bdbe8b6..000000000
--- a/packages/pl-fe/src/__fixtures__/status-unordered-mentions.json
+++ /dev/null
@@ -1,122 +0,0 @@
-{
- "account": {
- "acct": "apropos@freespeechextremist.com",
- "avatar": "https://gleasonator.com/proxy/WVdkCbG7AOZ_eqMzskzXQoyjq8o/aHR0cHM6Ly9mcmVlc3BlZWNoZXh0cmVtaXN0LmNvbS9tZWRpYS8zN2I4MDMzZC03OGQ1LTQ0YmMtYmY5NC0xYTI2NzY5NTQwM2YvYmxvYi5wbmc_bmFtZT1ibG9iLnBuZw/blob.png",
- "avatar_static": "https://gleasonator.com/proxy/WVdkCbG7AOZ_eqMzskzXQoyjq8o/aHR0cHM6Ly9mcmVlc3BlZWNoZXh0cmVtaXN0LmNvbS9tZWRpYS8zN2I4MDMzZC03OGQ1LTQ0YmMtYmY5NC0xYTI2NzY5NTQwM2YvYmxvYi5wbmc_bmFtZT1ibG9iLnBuZw/blob.png",
- "bot": false,
- "created_at": "2020-05-21T07:20:46.000Z",
- "display_name": "of nothing",
- "emojis": [],
- "fields": [],
- "followers_count": 87,
- "following_count": 85,
- "fqn": "apropos@freespeechextremist.com",
- "header": "https://gleasonator.com/proxy/pIracLGWm_skCfOOgdwcCNqES5s/aHR0cHM6Ly9mcmVlc3BlZWNoZXh0cmVtaXN0LmNvbS9tZWRpYS8yZDEwYmRjZC01NDUwLTRjZjYtYWFhZS1hNTJjMzYwYjk2YjYvdHJhY2tzb25tYXJzLmpwZz9uYW1lPXRyYWNrc29ubWFycy5qcGc/tracksonmars.jpg",
- "header_static": "https://gleasonator.com/proxy/pIracLGWm_skCfOOgdwcCNqES5s/aHR0cHM6Ly9mcmVlc3BlZWNoZXh0cmVtaXN0LmNvbS9tZWRpYS8yZDEwYmRjZC01NDUwLTRjZjYtYWFhZS1hNTJjMzYwYjk2YjYvdHJhY2tzb25tYXJzLmpwZz9uYW1lPXRyYWNrc29ubWFycy5qcGc/tracksonmars.jpg",
- "id": "9vGR3IWmWVYRkKUZ4i",
- "last_status_at": "2022-01-07T21:47:39",
- "locked": false,
- "note": "If you wait by the river long enough, the bodies of your enemies will float by. Deo Vindice",
- "pleroma": {
- "accepts_chat_messages": true,
- "also_known_as": [],
- "ap_id": "https://freespeechextremist.com/users/apropos",
- "background_image": null,
- "favicon": "https://gleasonator.com/proxy/EN7BSaEEYTRpmRj4lITIjgWp2sg/aHR0cHM6Ly9mcmVlc3BlZWNoZXh0cmVtaXN0LmNvbS9mYXZpY29uLnBuZw/favicon.png",
- "hide_favorites": true,
- "hide_followers": false,
- "hide_followers_count": false,
- "hide_follows": false,
- "hide_follows_count": false,
- "is_admin": false,
- "is_confirmed": true,
- "is_moderator": false,
- "is_suggested": false,
- "relationship": {},
- "skip_thread_containment": false,
- "tags": []
- },
- "source": {
- "fields": [],
- "note": "",
- "pleroma": {
- "actor_type": "Person",
- "discoverable": false
- },
- "sensitive": false
- },
- "statuses_count": 7087,
- "url": "https://freespeechextremist.com/users/apropos",
- "username": "apropos"
- },
- "application": null,
- "bookmarked": false,
- "card": null,
- "content": "@NEETzsche @alex @Lumeinshin @sneeden >seething 'posting', just like you.",
- "created_at": "2022-01-07T17:29:58.000Z",
- "emojis": [],
- "favourited": false,
- "favourites_count": 1,
- "id": "AFChectaqZjmOVkXZ2",
- "in_reply_to_account_id": "9v5bw7hEGBPc9nrpzc",
- "in_reply_to_id": "AFChbnWqrAZ2VIlPJw",
- "language": null,
- "media_attachments": [],
- "mentions": [
- {
- "acct": "alex",
- "id": "9v5bmRalQvjOy0ECcC",
- "url": "https://gleasonator.com/users/alex",
- "username": "alex"
- },
- {
- "acct": "NEETzsche@iddqd.social",
- "id": "9v5bw7hEGBPc9nrpzc",
- "url": "https://iddqd.social/users/NEETzsche",
- "username": "NEETzsche"
- },
- {
- "acct": "Lumeinshin@pleroma.skyshanty.xyz",
- "id": "A3dFSwTkwgRfd998iG",
- "url": "https://pleroma.skyshanty.xyz/users/Lumeinshin",
- "username": "Lumeinshin"
- },
- {
- "acct": "sneeden@social.silkky.cloud",
- "id": "ACrsPAbAOPh3GbKZhQ",
- "url": "https://social.silkky.cloud/users/sneeden",
- "username": "sneeden"
- }
- ],
- "muted": false,
- "pinned": false,
- "pleroma": {
- "content": {
- "text/plain": "@NEETzsche @alex @Lumeinshin @sneeden >seething'posting', just like you."
- },
- "conversation_id": "AFCYCBFN9SgOwoIWTg",
- "direct_conversation_id": null,
- "emoji_reactions": [],
- "expires_at": null,
- "in_reply_to_account_acct": "NEETzsche@iddqd.social",
- "local": false,
- "parent_visible": true,
- "pinned_at": null,
- "spoiler_text": {
- "text/plain": ""
- },
- "thread_muted": false
- },
- "poll": null,
- "reblog": null,
- "reblogged": false,
- "reblogs_count": 0,
- "replies_count": 0,
- "sensitive": false,
- "spoiler_text": "",
- "tags": [],
- "text": null,
- "uri": "https://freespeechextremist.com/objects/714b0e04-bec4-4a2a-9514-312814380064",
- "url": "https://freespeechextremist.com/objects/714b0e04-bec4-4a2a-9514-312814380064",
- "visibility": "public"
-}
diff --git a/packages/pl-fe/src/__fixtures__/status-with-card.json b/packages/pl-fe/src/__fixtures__/status-with-card.json
deleted file mode 100644
index da2f83b94..000000000
--- a/packages/pl-fe/src/__fixtures__/status-with-card.json
+++ /dev/null
@@ -1,210 +0,0 @@
-{
- "account": {
- "acct": "alex",
- "avatar": "https://media.gleasonator.com/6d64aecb17348b23aaff78db4687b9476cb0da1c07cc6a819c2e6ec7144c18b1.png",
- "avatar_static": "https://media.gleasonator.com/6d64aecb17348b23aaff78db4687b9476cb0da1c07cc6a819c2e6ec7144c18b1.png",
- "bot": false,
- "created_at": "2020-01-08T01:25:43.000Z",
- "display_name": "Alex Gleason",
- "emojis": [
- {
- "shortcode": "soapbox",
- "static_url": "https://gleasonator.com/emoji/Gleasonator/soapbox.png",
- "url": "https://gleasonator.com/emoji/Gleasonator/soapbox.png",
- "visible_in_picker": false
- }
- ],
- "fields": [
- {
- "name": "Website",
- "value": "https://alexgleason.me "
- },
- {
- "name": "Soapbox :soapbox:",
- "value": "https://soapbox.pub "
- },
- {
- "name": "Email",
- "value": "alex@alexgleason.me"
- },
- {
- "name": "Gender identity",
- "value": "Soyboy"
- },
- {
- "name": "Donate (PayPal)",
- "value": "https://paypal.me/gleasonator "
- },
- {
- "name": "$BTC",
- "value": "bc1q9cx35adpm73aq2fw40ye6ts8hfxqzjr5unwg0n"
- },
- {
- "name": "$ETH",
- "value": "0xAc9aB5Fc04Dc1cB1789Af75b523Bd23C70B2D717"
- },
- {
- "name": "$DOGE",
- "value": "D5zVZs6jrRakaPVGiErkQiHt9sayzm6V5D"
- },
- {
- "name": "$XMR",
- "value": "45JDCLrjJ4bgVUSbbs2yjy9m5Mf4VLPW8fG7jw9sq5u69rXZZopQogZNeyYkMBnXpkaip4p4QwaaJNhdTotPa9g44DBCzdK"
- }
- ],
- "followers_count": 2476,
- "following_count": 1584,
- "fqn": "alex@gleasonator.com",
- "header": "https://media.gleasonator.com/accounts/headers/000/000/001/original/9d0e4dbf1c9dbc8f.png",
- "header_static": "https://media.gleasonator.com/accounts/headers/000/000/001/original/9d0e4dbf1c9dbc8f.png",
- "id": "9v5bmRalQvjOy0ECcC",
- "last_status_at": "2022-03-12T16:35:10",
- "locked": false,
- "note": "I create Fediverse software that empowers people online. :soapbox: I'm vegan btw Note: If you have a question for me, please tag me publicly. This gives the opportunity for others to chime in, and bystanders to learn.",
- "pleroma": {
- "accepts_chat_messages": true,
- "also_known_as": [
- "https://mitra.social/users/alex"
- ],
- "ap_id": "https://gleasonator.com/users/alex",
- "background_image": null,
- "birthday": "1993-07-03",
- "favicon": "https://gleasonator.com/favicon.png",
- "hide_favorites": true,
- "hide_followers": false,
- "hide_followers_count": false,
- "hide_follows": false,
- "hide_follows_count": false,
- "is_admin": true,
- "is_confirmed": true,
- "is_moderator": false,
- "is_suggested": true,
- "relationship": {},
- "skip_thread_containment": false,
- "tags": []
- },
- "source": {
- "fields": [
- {
- "name": "Website",
- "value": "https://alexgleason.me"
- },
- {
- "name": "Soapbox :soapbox:",
- "value": "https://soapbox.pub"
- },
- {
- "name": "Email",
- "value": "alex@alexgleason.me"
- },
- {
- "name": "Gender identity",
- "value": "Soyboy"
- },
- {
- "name": "Donate (PayPal)",
- "value": "https://paypal.me/gleasonator"
- },
- {
- "name": "$BTC",
- "value": "bc1q9cx35adpm73aq2fw40ye6ts8hfxqzjr5unwg0n"
- },
- {
- "name": "$ETH",
- "value": "0xAc9aB5Fc04Dc1cB1789Af75b523Bd23C70B2D717"
- },
- {
- "name": "$DOGE",
- "value": "D5zVZs6jrRakaPVGiErkQiHt9sayzm6V5D"
- },
- {
- "name": "$XMR",
- "value": "45JDCLrjJ4bgVUSbbs2yjy9m5Mf4VLPW8fG7jw9sq5u69rXZZopQogZNeyYkMBnXpkaip4p4QwaaJNhdTotPa9g44DBCzdK"
- }
- ],
- "note": "I create Fediverse software that empowers people online. :soapbox:\r\n\r\nI'm vegan btw\r\n\r\nNote: If you have a question for me, please tag me publicly. This gives the opportunity for others to chime in, and bystanders to learn.",
- "pleroma": {
- "actor_type": "Person",
- "discoverable": false
- },
- "sensitive": false
- },
- "statuses_count": 23674,
- "url": "https://gleasonator.com/users/alex",
- "username": "alex"
- },
- "application": null,
- "bookmarked": false,
- "card": {
- "author_name": "Alex Gleason",
- "author_url": "https://soapbox.pub/author/alex/",
- "blurhash": null,
- "description": "On cryptocurrency I’ve always believed integrated donations would be a necessary part of the Fediverse. Admins do all the heavy lifting; it’s a thankless job. Meanwhile users want to help secure their new online home, but feel powerless to do so. I have been running an experimental payment platform based on Stripe alongside my Soapbox […]",
- "embed_url": null,
- "height": 338,
- "html": "",
- "image": "https://gleasonator.com/proxy/L2kUi5uxMdoC6LYYrnAdlJviPGQ/aHR0cHM6Ly9tZWRpYS5zb2FwYm94LnB1Yi91cGxvYWRzLzIwMjEvMDcvdi0xLTMtdGh1bWIucG5n/v-1-3-thumb.png",
- "provider_name": "Soapbox",
- "provider_url": "https://soapbox.pub",
- "title": "Soapbox FE v1.3: The Crypto Release - Soapbox",
- "type": "link",
- "url": "https://soapbox.pub/blog/soapbox-fe-v1.3-cryptocurrency-release/",
- "width": 600
- },
- "content": "Soapbox FE v1.3 released. Read about it here: https://soapbox.pub/blog/soapbox-fe-v1.3-cryptocurrency-release/
Enjoy!
",
- "created_at": "2021-07-02T20:49:39.000Z",
- "emojis": [],
- "favourited": false,
- "favourites_count": 29,
- "id": "A8tEMYF2GNnfPcL4dc",
- "in_reply_to_account_id": null,
- "in_reply_to_id": null,
- "language": null,
- "media_attachments": [],
- "mentions": [],
- "muted": false,
- "pinned": true,
- "pleroma": {
- "content": {
- "text/plain": "Soapbox FE v1.3 released. Read about it here: https://soapbox.pub/blog/soapbox-fe-v1.3-cryptocurrency-release/Enjoy!"
- },
- "conversation_id": "16496668",
- "direct_conversation_id": null,
- "emoji_reactions": [
- {
- "count": 5,
- "me": false,
- "name": "❤️"
- },
- {
- "count": 1,
- "me": false,
- "name": "👍"
- }
- ],
- "expires_at": null,
- "in_reply_to_account_acct": null,
- "local": true,
- "parent_visible": false,
- "pinned_at": "2021-11-23T01:38:44.000Z",
- "quote": null,
- "quote_url": null,
- "quote_visible": false,
- "spoiler_text": {
- "text/plain": ""
- },
- "thread_muted": false
- },
- "poll": null,
- "reblog": null,
- "reblogged": false,
- "reblogs_count": 16,
- "replies_count": 7,
- "sensitive": false,
- "spoiler_text": "",
- "tags": [],
- "text": null,
- "uri": "https://gleasonator.com/objects/3eabaf63-47f4-4314-9ddb-ce7dbf46b393",
- "url": "https://gleasonator.com/notice/A8tEMYF2GNnfPcL4dc",
- "visibility": "public"
-}
diff --git a/packages/pl-fe/src/__fixtures__/status-with-poll.json b/packages/pl-fe/src/__fixtures__/status-with-poll.json
deleted file mode 100644
index 9dfd90d7e..000000000
--- a/packages/pl-fe/src/__fixtures__/status-with-poll.json
+++ /dev/null
@@ -1,201 +0,0 @@
-{
- "account": {
- "acct": "alex",
- "avatar": "https://media.gleasonator.com/6d64aecb17348b23aaff78db4687b9476cb0da1c07cc6a819c2e6ec7144c18b1.png",
- "avatar_static": "https://media.gleasonator.com/6d64aecb17348b23aaff78db4687b9476cb0da1c07cc6a819c2e6ec7144c18b1.png",
- "bot": false,
- "created_at": "2020-01-08T01:25:43.000Z",
- "display_name": "Alex Gleason",
- "emojis": [],
- "fields": [
- {
- "name": "Website",
- "value": "https://alexgleason.me "
- },
- {
- "name": "Soapbox",
- "value": "https://soapbox.pub "
- },
- {
- "name": "Email",
- "value": "alex@alexgleason.me"
- },
- {
- "name": "Gender identity",
- "value": "Soyboy"
- },
- {
- "name": "Donate (PayPal)",
- "value": "https://paypal.me/gleasonator "
- },
- {
- "name": "$BTC",
- "value": "bc1q9cx35adpm73aq2fw40ye6ts8hfxqzjr5unwg0n"
- },
- {
- "name": "$ETH",
- "value": "0xAc9aB5Fc04Dc1cB1789Af75b523Bd23C70B2D717"
- },
- {
- "name": "$DOGE",
- "value": "D5zVZs6jrRakaPVGiErkQiHt9sayzm6V5D"
- },
- {
- "name": "$XMR",
- "value": "45JDCLrjJ4bgVUSbbs2yjy9m5Mf4VLPW8fG7jw9sq5u69rXZZopQogZNeyYkMBnXpkaip4p4QwaaJNhdTotPa9g44DBCzdK"
- }
- ],
- "followers_count": 2390,
- "following_count": 1574,
- "fqn": "alex@gleasonator.com",
- "header": "https://media.gleasonator.com/accounts/headers/000/000/001/original/9d0e4dbf1c9dbc8f.png",
- "header_static": "https://media.gleasonator.com/accounts/headers/000/000/001/original/9d0e4dbf1c9dbc8f.png",
- "id": "9v5bmRalQvjOy0ECcC",
- "last_status_at": "2022-02-23T17:54:41",
- "locked": false,
- "note": "I create Fediverse software that empowers people online. I'm vegan btw Note: If you have a question for me, please tag me publicly. This gives the opportunity for others to chime in, and bystanders to learn.",
- "pleroma": {
- "accepts_chat_messages": true,
- "also_known_as": [
- "https://mitra.social/users/alex"
- ],
- "ap_id": "https://gleasonator.com/users/alex",
- "background_image": null,
- "birthday": "1993-07-03",
- "favicon": "https://gleasonator.com/favicon.png",
- "hide_favorites": true,
- "hide_followers": false,
- "hide_followers_count": false,
- "hide_follows": false,
- "hide_follows_count": false,
- "is_admin": true,
- "is_confirmed": true,
- "is_moderator": false,
- "is_suggested": true,
- "relationship": {},
- "skip_thread_containment": false,
- "tags": []
- },
- "source": {
- "fields": [
- {
- "name": "Website",
- "value": "https://alexgleason.me"
- },
- {
- "name": "Soapbox",
- "value": "https://soapbox.pub"
- },
- {
- "name": "Email",
- "value": "alex@alexgleason.me"
- },
- {
- "name": "Gender identity",
- "value": "Soyboy"
- },
- {
- "name": "Donate (PayPal)",
- "value": "https://paypal.me/gleasonator"
- },
- {
- "name": "$BTC",
- "value": "bc1q9cx35adpm73aq2fw40ye6ts8hfxqzjr5unwg0n"
- },
- {
- "name": "$ETH",
- "value": "0xAc9aB5Fc04Dc1cB1789Af75b523Bd23C70B2D717"
- },
- {
- "name": "$DOGE",
- "value": "D5zVZs6jrRakaPVGiErkQiHt9sayzm6V5D"
- },
- {
- "name": "$XMR",
- "value": "45JDCLrjJ4bgVUSbbs2yjy9m5Mf4VLPW8fG7jw9sq5u69rXZZopQogZNeyYkMBnXpkaip4p4QwaaJNhdTotPa9g44DBCzdK"
- }
- ],
- "note": "I create Fediverse software that empowers people online.\r\n\r\nI'm vegan btw\r\n\r\nNote: If you have a question for me, please tag me publicly. This gives the opportunity for others to chime in, and bystanders to learn.",
- "pleroma": {
- "actor_type": "Person",
- "discoverable": false
- },
- "sensitive": false
- },
- "statuses_count": 23502,
- "url": "https://gleasonator.com/users/alex",
- "username": "alex"
- },
- "application": null,
- "bookmarked": false,
- "card": null,
- "content": "What is tolerance?
",
- "created_at": "2020-03-23T19:33:06.000Z",
- "emojis": [],
- "favourited": false,
- "favourites_count": 47,
- "id": "103874034847713213",
- "in_reply_to_account_id": null,
- "in_reply_to_id": null,
- "language": null,
- "media_attachments": [],
- "mentions": [],
- "muted": false,
- "pinned": true,
- "pleroma": {
- "content": {
- "text/plain": "What is tolerance?"
- },
- "conversation_id": "3023268",
- "direct_conversation_id": null,
- "emoji_reactions": [
- {
- "count": 3,
- "me": false,
- "name": "❤️"
- }
- ],
- "expires_at": null,
- "in_reply_to_account_acct": null,
- "local": true,
- "parent_visible": false,
- "pinned_at": "2021-11-23T01:38:44.000Z",
- "quote": null,
- "quote_url": null,
- "quote_visible": false,
- "spoiler_text": {
- "text/plain": ""
- },
- "thread_muted": false
- },
- "poll": {
- "emojis": [],
- "expired": true,
- "expires_at": "2020-03-24T19:33:06.000Z",
- "id": "4930",
- "multiple": false,
- "options": [
- {
- "title": "Banning, censoring, and deplatforming anyone you disagree with",
- "votes_count": 2
- },
- {
- "title": "Promoting free speech, even for people and ideas you dislike",
- "votes_count": 36
- }
- ],
- "voters_count": 2,
- "votes_count": 38
- },
- "reblog": null,
- "reblogged": false,
- "reblogs_count": 26,
- "replies_count": 14,
- "sensitive": false,
- "spoiler_text": "",
- "tags": [],
- "text": null,
- "uri": "https://gleasonator.com/users/alex/statuses/103874034847713213",
- "url": "https://gleasonator.com/notice/103874034847713213",
- "visibility": "public"
-}
diff --git a/packages/pl-fe/src/__fixtures__/user.json b/packages/pl-fe/src/__fixtures__/user.json
deleted file mode 100644
index 24617cc4a..000000000
--- a/packages/pl-fe/src/__fixtures__/user.json
+++ /dev/null
@@ -1,8 +0,0 @@
-{
- "access_token": "UVBP2e17b4pTpb_h8fImIm3F5a66IBVb-JkyZHs4gLE",
- "expires_in": 600,
- "me": "https://social.teci.world/users/curtis",
- "refresh_token": "c2DpbVxYZBJDogNn-VBNFES72yXPNUYQCv0CrXGOplY",
- "scope": "read write follow push admin",
- "token_type": "Bearer"
-}
diff --git a/packages/pl-fe/src/actions/accounts.test.ts b/packages/pl-fe/src/actions/accounts.test.ts
deleted file mode 100644
index 56db8af9a..000000000
--- a/packages/pl-fe/src/actions/accounts.test.ts
+++ /dev/null
@@ -1,466 +0,0 @@
-import { Map as ImmutableMap } from 'immutable';
-
-import { __stub } from '@/api';
-import { buildInstance, buildRelationship } from '@/jest/factory';
-import { mockStore, rootState } from '@/jest/test-helpers';
-
-import {
- createAccount,
- fetchAccount,
- fetchAccountByUsername,
- fetchRelationships,
-} from './accounts';
-
-let store: ReturnType;
-
-describe('createAccount()', () => {
- const params = {
- email: 'foo@bar.com',
- };
-
- describe('with a successful API request', () => {
- beforeEach(() => {
- const state = rootState;
- store = mockStore(state);
-
- __stub((mock) => {
- mock.onPost('/api/v1/accounts').reply(200, { token: '123 ' });
- });
- });
-
- it('dispatches the correct actions', async() => {
- const expectedActions = [
- { type: 'ACCOUNT_CREATE_REQUEST', params },
- {
- type: 'ACCOUNT_CREATE_SUCCESS',
- params,
- token: { token: '123 ' },
- },
- ];
- await store.dispatch(createAccount(params));
- const actions = store.getActions();
-
- expect(actions).toEqual(expectedActions);
- });
- });
-});
-
-describe('fetchAccount()', () => {
- const id = '123';
-
- describe('when the account has "should_refetch" set to false', () => {
- beforeEach(() => {
- const account = {
- id,
- acct: 'justin-username',
- display_name: 'Justin L',
- avatar: 'test.jpg',
- };
-
- const state = {
- ...rootState,
- entities: {
- 'ACCOUNTS': {
- store: {
- [id]: account,
- },
- lists: {},
- },
- },
- };
-
- store = mockStore(state);
-
- __stub((mock) => {
- mock.onGet(`/api/v1/accounts/${id}`).reply(200, account);
- });
- });
-
- it('should do nothing', async() => {
- await store.dispatch(fetchAccount(id));
- const actions = store.getActions();
-
- expect(actions).toEqual([]);
- });
- });
-
- describe('with a successful API request', async () => {
- const account = await import('@/__fixtures__/pleroma-account.json');
-
- beforeEach(() => {
- const state = rootState;
- store = mockStore(state);
-
- __stub((mock) => {
- mock.onGet(`/api/v1/accounts/${id}`).reply(200, account);
- });
- });
-
- it('should dispatch the correct actions', async() => {
- const expectedActions = [
- { type: 'ACCOUNT_FETCH_REQUEST', id: '123' },
- { type: 'ACCOUNTS_IMPORT', accounts: [account] },
- {
- type: 'ACCOUNT_FETCH_SUCCESS',
- account,
- },
- ];
-
- await store.dispatch(fetchAccount(id));
- const actions = store.getActions();
-
- expect(actions).toEqual(expectedActions);
- });
- });
-
- describe('with an unsuccessful API request', () => {
- beforeEach(() => {
- const state = rootState;
- store = mockStore(state);
-
- __stub((mock) => {
- mock.onGet(`/api/v1/accounts/${id}`).networkError();
- });
- });
-
- it('should dispatch the correct actions', async() => {
- const expectedActions = [
- { type: 'ACCOUNT_FETCH_REQUEST', id: '123' },
- {
- type: 'ACCOUNT_FETCH_FAIL',
- id,
- error: new Error('Network Error'),
- skipAlert: true,
- },
- ];
-
- await store.dispatch(fetchAccount(id));
- const actions = store.getActions();
-
- expect(actions).toEqual(expectedActions);
- });
- });
-});
-
-describe('fetchAccountByUsername()', () => {
- const id = '123';
- const username = 'tiger';
- let state, account: any;
-
- beforeEach(() => {
- account = {
- id,
- acct: username,
- display_name: 'Tiger',
- avatar: 'test.jpg',
- birthday: undefined,
- };
-
- state = {
- ...rootState,
- entities: {
- 'ACCOUNTS': {
- store: {
- [id]: account,
- },
- lists: {},
- },
- },
- };
-
- store = mockStore(state);
-
- __stub((mock) => {
- mock.onGet(`/api/v1/accounts/${id}`).reply(200, account);
- });
- });
-
- describe('when "accountByUsername" feature is enabled', () => {
- beforeEach(() => {
- const state = {
- ...rootState,
- me: '123',
- instance: buildInstance({
- version: '2.7.2 (compatible; Pleroma 2.4.52-1337-g4779199e.gleasonator+soapbox)',
- pleroma: {
- metadata: {
- features: [],
- },
- },
- }),
- };
-
- store = mockStore(state);
- });
-
- describe('with a successful API request', () => {
- beforeEach(() => {
- __stub((mock) => {
- mock.onGet(`/api/v1/accounts/${username}`).reply(200, account);
- mock.onGet(`/api/v1/accounts/relationships?${[account.id].map(id => `id[]=${id}`).join('&')}`);
- });
- });
-
- it('should return dispatch the proper actions', async() => {
- await store.dispatch(fetchAccountByUsername(username));
- const actions = store.getActions();
-
- expect(actions[0]).toEqual({
- type: 'RELATIONSHIPS_FETCH_REQUEST',
- ids: ['123'],
- });
- expect(actions[1].type).toEqual('ACCOUNTS_IMPORT');
- expect(actions[2].type).toEqual('ACCOUNT_FETCH_SUCCESS');
- });
- });
-
- describe('with an unsuccessful API request', () => {
- beforeEach(() => {
- __stub((mock) => {
- mock.onGet(`/api/v1/accounts/${username}`).networkError();
- });
- });
-
- it('should return dispatch the proper actions', async() => {
- const expectedActions = [
- {
- type: 'ACCOUNT_FETCH_FAIL',
- id: null,
- error: new Error('Network Error'),
- skipAlert: true,
- },
- { type: 'ACCOUNT_FETCH_FAIL_FOR_USERNAME_LOOKUP', username: 'tiger' },
- ];
-
- await store.dispatch(fetchAccountByUsername(username));
- const actions = store.getActions();
-
- expect(actions).toEqual(expectedActions);
- });
- });
- });
-
- describe('when "accountLookup" feature is enabled', () => {
- beforeEach(() => {
- const state = {
- ...rootState,
- me: '123',
- instance: buildInstance({
- version: '3.4.1 (compatible; TruthSocial 1.0.0)',
- pleroma: {
- metadata: {
- features: [],
- },
- },
- }),
- };
-
- store = mockStore(state);
- });
-
- describe('with a successful API request', () => {
- beforeEach(() => {
- __stub((mock) => {
- mock.onGet('/api/v1/accounts/lookup').reply(200, account);
- });
- });
-
- it('should return dispatch the proper actions', async() => {
- await store.dispatch(fetchAccountByUsername(username));
- const actions = store.getActions();
-
- expect(actions[0]).toEqual({
- type: 'ACCOUNT_LOOKUP_REQUEST',
- acct: username,
- });
- expect(actions[1].type).toEqual('ACCOUNTS_IMPORT');
- expect(actions[2].type).toEqual('ACCOUNT_LOOKUP_SUCCESS');
- expect(actions[3].type).toEqual('RELATIONSHIPS_FETCH_REQUEST');
- expect(actions[4].type).toEqual('ACCOUNT_FETCH_SUCCESS');
- });
- });
-
- describe('with an unsuccessful API request', () => {
- beforeEach(() => {
- __stub((mock) => {
- mock.onGet('/api/v1/accounts/lookup').networkError();
- });
- });
-
- it('should return dispatch the proper actions', async() => {
- const expectedActions = [
- { type: 'ACCOUNT_LOOKUP_REQUEST', acct: 'tiger' },
- { type: 'ACCOUNT_LOOKUP_FAIL' },
- {
- type: 'ACCOUNT_FETCH_FAIL',
- id: null,
- error: new Error('Network Error'),
- skipAlert: true,
- },
- { type: 'ACCOUNT_FETCH_FAIL_FOR_USERNAME_LOOKUP', username },
- ];
-
- await store.dispatch(fetchAccountByUsername(username));
- const actions = store.getActions();
-
- expect(actions).toEqual(expectedActions);
- });
- });
- });
-
- describe('when using the accountSearch function', () => {
- beforeEach(() => {
- const state = { ...rootState, me: '123' };
- store = mockStore(state);
- });
-
- describe('with a successful API request', () => {
- beforeEach(() => {
- __stub((mock) => {
- mock.onGet('/api/v1/accounts/search').reply(200, [account]);
- });
- });
-
- it('should return dispatch the proper actions', async() => {
- await store.dispatch(fetchAccountByUsername(username));
- const actions = store.getActions();
-
- expect(actions[0]).toEqual({
- type: 'ACCOUNT_SEARCH_REQUEST',
- params: { q: username, limit: 5, resolve: true },
- });
- expect(actions[1].type).toEqual('ACCOUNTS_IMPORT');
- expect(actions[2].type).toEqual('ACCOUNT_SEARCH_SUCCESS');
- expect(actions[3]).toEqual({
- type: 'RELATIONSHIPS_FETCH_REQUEST',
- ids: [ '123' ],
- });
- expect(actions[4].type).toEqual('ACCOUNT_FETCH_SUCCESS');
- });
- });
-
- describe('with an unsuccessful API request', () => {
- beforeEach(() => {
- __stub((mock) => {
- mock.onGet('/api/v1/accounts/search').networkError();
- });
- });
-
- it('should return dispatch the proper actions', async() => {
- const expectedActions = [
- {
- type: 'ACCOUNT_SEARCH_REQUEST',
- params: { q: username, limit: 5, resolve: true },
- },
- { type: 'ACCOUNT_SEARCH_FAIL', skipAlert: true },
- {
- type: 'ACCOUNT_FETCH_FAIL',
- id: null,
- error: new Error('Network Error'),
- skipAlert: true,
- },
- { type: 'ACCOUNT_FETCH_FAIL_FOR_USERNAME_LOOKUP', username },
- ];
-
- await store.dispatch(fetchAccountByUsername(username));
- const actions = store.getActions();
-
- expect(actions).toEqual(expectedActions);
- });
- });
- });
-});
-
-describe('fetchRelationships()', () => {
- const id = '1';
-
- describe('when logged out', () => {
- beforeEach(() => {
- const state = { ...rootState, me: null };
- store = mockStore(state);
- });
-
- it('should do nothing', async() => {
- await store.dispatch(fetchRelationships([id]));
- const actions = store.getActions();
-
- expect(actions).toEqual([]);
- });
- });
-
- describe('when logged in', () => {
- beforeEach(() => {
- const state = { ...rootState, me: '123' };
- store = mockStore(state);
- });
-
- describe('without newAccountIds', () => {
- beforeEach(() => {
- const state = {
- ...rootState,
- me: '123',
- relationships: ImmutableMap({ [id]: buildRelationship() }),
- };
-
- store = mockStore(state);
- });
-
- it('should do nothing', async() => {
- await store.dispatch(fetchRelationships([id]));
- const actions = store.getActions();
-
- expect(actions).toEqual([]);
- });
- });
-
- describe('with a successful API request', () => {
- beforeEach(() => {
- const state = {
- ...rootState,
- me: '123',
- relationships: ImmutableMap(),
- };
-
- store = mockStore(state);
-
- __stub((mock) => {
- mock
- .onGet(`/api/v1/accounts/relationships?${[id].map(id => `id[]=${id}`).join('&')}`)
- .reply(200, []);
- });
- });
-
- it('should dispatch the correct actions', async() => {
- const expectedActions = [
- { type: 'RELATIONSHIPS_FETCH_REQUEST', ids: [id] },
- { type: 'RELATIONSHIPS_FETCH_SUCCESS', relationships: [] },
- ];
- await store.dispatch(fetchRelationships([id]));
- const actions = store.getActions();
-
- expect(actions).toEqual(expectedActions);
- });
- });
-
- describe('with an unsuccessful API request', () => {
- beforeEach(() => {
- __stub((mock) => {
- mock
- .onGet(`/api/v1/accounts/relationships?${[id].map(id => `id[]=${id}`).join('&')}`)
- .networkError();
- });
- });
-
- it('should dispatch the correct actions', async() => {
- const expectedActions = [
- { type: 'RELATIONSHIPS_FETCH_REQUEST', ids: [id] },
- { type: 'RELATIONSHIPS_FETCH_FAIL', error: new Error('Network Error') },
- ];
- await store.dispatch(fetchRelationships([id]));
- const actions = store.getActions();
-
- expect(actions).toEqual(expectedActions);
- });
- });
- });
-});
diff --git a/packages/pl-fe/src/actions/compose.test.ts b/packages/pl-fe/src/actions/compose.test.ts
deleted file mode 100644
index b7d905fe3..000000000
--- a/packages/pl-fe/src/actions/compose.test.ts
+++ /dev/null
@@ -1,133 +0,0 @@
-import { OrderedSet as ImmutableOrderedSet } from 'immutable';
-
-import { buildInstance } from '@/jest/factory';
-import { mockStore, rootState } from '@/jest/test-helpers';
-import { ReducerCompose } from '@/reducers/compose';
-
-import { uploadCompose, submitCompose } from './compose';
-import { STATUS_CREATE_REQUEST } from './statuses';
-
-import type { IntlShape } from 'react-intl';
-
-describe('uploadCompose()', () => {
- describe('with images', () => {
- let files: FileList, store: ReturnType;
-
- beforeEach(() => {
- const instance = buildInstance({
- configuration: {
- statuses: {
- max_media_attachments: 4,
- },
- media_attachments: {
- image_size_limit: 10,
- },
- },
- });
-
- const state = {
- ...rootState,
- me: '1234',
- instance,
- compose: rootState.compose.set('home', ReducerCompose()),
- };
-
- store = mockStore(state);
- files = [{
- uri: 'image.png',
- name: 'Image',
- size: 15,
- type: 'image/png',
- }] as unknown as FileList;
- });
-
- it('creates an alert if exceeds max size', async() => {
- const mockIntl = {
- formatMessage: vi.fn().mockReturnValue('Image exceeds the current file size limit (10 Bytes)'),
- } as unknown as IntlShape;
-
- const expectedActions = [
- { type: 'COMPOSE_UPLOAD_REQUEST', id: 'home' },
- { type: 'COMPOSE_UPLOAD_FAIL', id: 'home', error: true },
- ];
-
- await store.dispatch(uploadCompose('home', files, mockIntl));
- const actions = store.getActions();
-
- expect(actions).toEqual(expectedActions);
- });
- });
-
- describe('with videos', () => {
- let files: FileList, store: ReturnType;
-
- beforeEach(() => {
- const instance = buildInstance({
- configuration: {
- statuses: {
- max_media_attachments: 4,
- },
- media_attachments: {
- video_size_limit: 10,
- },
- },
- });
-
- const state = {
- ...rootState,
- me: '1234',
- instance,
- compose: rootState.compose.set('home', ReducerCompose()),
- };
-
- store = mockStore(state);
- files = [{
- uri: 'video.mp4',
- name: 'Video',
- size: 15,
- type: 'video/mp4',
- }] as unknown as FileList;
- });
-
- it('creates an alert if exceeds max size', async() => {
- const mockIntl = {
- formatMessage: vi.fn().mockReturnValue('Video exceeds the current file size limit (10 Bytes)'),
- } as unknown as IntlShape;
-
- const expectedActions = [
- { type: 'COMPOSE_UPLOAD_REQUEST', id: 'home' },
- { type: 'COMPOSE_UPLOAD_FAIL', id: 'home', error: true },
- ];
-
- await store.dispatch(uploadCompose('home', files, mockIntl));
- const actions = store.getActions();
-
- expect(actions).toEqual(expectedActions);
- });
- });
-});
-
-describe('submitCompose()', () => {
- it('inserts mentions from text', async() => {
- const state = {
- ...rootState,
- me: '1234',
- compose: rootState.compose.set('home', ReducerCompose({ text: '@alex hello @mkljczk@pl.fediverse.pl @gg@汉语/漢語.com alex@alexgleason.me' })),
- };
-
- const store = mockStore(state);
- await store.dispatch(submitCompose('home'));
- const actions = store.getActions();
-
- const statusCreateRequest = actions.find(action => action.type === STATUS_CREATE_REQUEST);
- const to = statusCreateRequest!.params.to as ImmutableOrderedSet;
-
- const expected = [
- 'alex',
- 'mkljczk@pl.fediverse.pl',
- 'gg@汉语/漢語.com',
- ];
-
- expect(to.toJS()).toEqual(expected);
- });
-});
diff --git a/packages/pl-fe/src/actions/importer.ts b/packages/pl-fe/src/actions/importer.ts
index ae0274429..709bff183 100644
--- a/packages/pl-fe/src/actions/importer.ts
+++ b/packages/pl-fe/src/actions/importer.ts
@@ -8,7 +8,6 @@ import type { Account as BaseAccount, Group as BaseGroup, Poll as BasePoll, Rela
const STATUS_IMPORT = 'STATUS_IMPORT' as const;
const STATUSES_IMPORT = 'STATUSES_IMPORT' as const;
-const POLLS_IMPORT = 'POLLS_IMPORT' as const;
const isEmpty = (object: Record) => !Object.values(object).some(value => value);
@@ -23,11 +22,6 @@ interface ImportStatusesAction {
statuses: Array;
}
-interface ImportPollAction {
- type: typeof POLLS_IMPORT;
- polls: Array;
-}
-
const importEntities = (entities: {
accounts?: Array;
groups?: Array;
@@ -110,12 +104,11 @@ const importEntities = (entities: {
if (!isEmpty(statuses)) dispatch({ type: STATUSES_IMPORT, statuses: Object.values(statuses) });
};
-type ImporterAction = ImportStatusAction | ImportStatusesAction | ImportPollAction;
+type ImporterAction = ImportStatusAction | ImportStatusesAction;
export {
STATUS_IMPORT,
STATUSES_IMPORT,
- POLLS_IMPORT,
importEntities,
type ImporterAction,
};
diff --git a/packages/pl-fe/src/actions/me.test.ts b/packages/pl-fe/src/actions/me.test.ts
deleted file mode 100644
index 3eff9cc46..000000000
--- a/packages/pl-fe/src/actions/me.test.ts
+++ /dev/null
@@ -1,121 +0,0 @@
-import { Map as ImmutableMap } from 'immutable';
-
-import { __stub } from '@/api';
-import { buildAccount } from '@/jest/factory';
-import { mockStore, rootState } from '@/jest/test-helpers';
-import { AuthUserRecord, ReducerRecord } from '@/reducers/auth';
-
-import { fetchMe, patchMe } from './me';
-
-vi.mock('../../storage/kv-store', () => ({
- __esModule: true,
- default: {
- getItemOrError: vi.fn().mockReturnValue(Promise.resolve({})),
- },
-}));
-
-let store: ReturnType;
-
-describe('fetchMe()', () => {
- describe('without a token', () => {
- beforeEach(() => {
- const state = rootState;
- store = mockStore(state);
- });
-
- it('dispatches the correct actions', async() => {
- const expectedActions = [{ type: 'ME_FETCH_SKIP' }];
- await store.dispatch(fetchMe());
- const actions = store.getActions();
-
- expect(actions).toEqual(expectedActions);
- });
- });
-
- describe('with a token', () => {
- const accountUrl = 'accountUrl';
- const token = '123';
-
- beforeEach(() => {
- const state = {
- ...rootState,
- auth: ReducerRecord({
- me: accountUrl,
- users: ImmutableMap({
- [accountUrl]: AuthUserRecord({
- 'access_token': token,
- }),
- }),
- }),
- entities: {
- 'ACCOUNTS': {
- store: {
- [accountUrl]: buildAccount({ url: accountUrl }),
- },
- lists: {},
- },
- },
- };
-
- store = mockStore(state);
- });
-
- describe('with a successful API response', () => {
- beforeEach(() => {
- __stub((mock) => {
- mock.onGet('/api/v1/accounts/verify_credentials').reply(200, {});
- });
- });
-
- it('dispatches the correct actions', async() => {
- const expectedActions = [
- { type: 'ME_FETCH_REQUEST' },
- { type: 'AUTH_ACCOUNT_REMEMBER_REQUEST', accountUrl },
- { type: 'ACCOUNTS_IMPORT', accounts: [] },
- {
- type: 'AUTH_ACCOUNT_REMEMBER_SUCCESS',
- account: {},
- accountUrl,
- },
- { type: 'VERIFY_CREDENTIALS_REQUEST', token: '123' },
- { type: 'ACCOUNTS_IMPORT', accounts: [] },
- { type: 'VERIFY_CREDENTIALS_SUCCESS', token: '123', account: {} },
- ];
- await store.dispatch(fetchMe());
- const actions = store.getActions();
-
- expect(actions).toEqual(expectedActions);
- });
- });
- });
-});
-
-describe('patchMe()', () => {
- beforeEach(() => {
- const state = rootState;
- store = mockStore(state);
- });
-
- describe('with a successful API response', () => {
- beforeEach(() => {
- __stub((mock) => {
- mock.onPatch('/api/v1/accounts/update_credentials').reply(200, {});
- });
- });
-
- it('dispatches the correct actions', async() => {
- const expectedActions = [
- { type: 'ME_PATCH_REQUEST' },
- { type: 'ACCOUNTS_IMPORT', accounts: [] },
- {
- type: 'ME_PATCH_SUCCESS',
- me: {},
- },
- ];
- await store.dispatch(patchMe({}));
- const actions = store.getActions();
-
- expect(actions).toEqual(expectedActions);
- });
- });
-});
diff --git a/packages/pl-fe/src/actions/notifications.test.ts b/packages/pl-fe/src/actions/notifications.test.ts
deleted file mode 100644
index 9bf12d9c4..000000000
--- a/packages/pl-fe/src/actions/notifications.test.ts
+++ /dev/null
@@ -1,42 +0,0 @@
-import { OrderedMap as ImmutableOrderedMap } from 'immutable';
-
-import { __stub } from '@/api';
-import { mockStore, rootState } from '@/jest/test-helpers';
-import { normalizeNotification } from '@/normalizers/notification';
-
-import { markReadNotifications } from './notifications';
-
-describe('markReadNotifications()', () => {
- it('fires off marker when top notification is newer than lastRead', async() => {
- __stub((mock) => mock.onPost('/api/v1/markers').reply(200, {}));
-
- const items = ImmutableOrderedMap({
- '10': normalizeNotification({ id: '10' }),
- });
-
- const state = {
- ...rootState,
- me: '123',
- notifications: rootState.notifications.merge({
- lastRead: '9',
- items,
- }),
- };
-
- const store = mockStore(state);
-
- const expectedActions = [{
- type: 'MARKER_SAVE_REQUEST',
- marker: {
- notifications: {
- last_read_id: '10',
- },
- },
- }];
-
- store.dispatch(markReadNotifications());
- const actions = store.getActions();
-
- expect(actions).toEqual(expectedActions);
- });
-});
diff --git a/packages/pl-fe/src/actions/preload.test.ts b/packages/pl-fe/src/actions/preload.test.ts
deleted file mode 100644
index 4cf6d6496..000000000
--- a/packages/pl-fe/src/actions/preload.test.ts
+++ /dev/null
@@ -1,37 +0,0 @@
-import { Map as ImmutableMap } from 'immutable';
-
-import { __stub } from '@/api';
-import { mockStore } from '@/jest/test-helpers';
-
-import { VERIFY_CREDENTIALS_REQUEST } from './auth';
-import { ACCOUNTS_IMPORT } from './importer';
-import {
- MASTODON_PRELOAD_IMPORT,
- preloadMastodon,
-} from './preload';
-
-describe('preloadMastodon()', () => {
- it('creates the expected actions', async () => {
- const data = await import('@/__fixtures__/mastodon_initial_state.json');
-
- __stub(mock => {
- mock.onGet('/api/v1/accounts/verify_credentials')
- .reply(200, {});
- });
-
- const store = mockStore(ImmutableMap());
- store.dispatch(preloadMastodon(data));
- const actions = store.getActions();
-
- expect(actions[0].type).toEqual(ACCOUNTS_IMPORT);
- expect(actions[0].accounts[0].username).toEqual('Gargron');
- expect(actions[0].accounts[1].username).toEqual('benis911');
-
- expect(actions[1]).toEqual({
- type: VERIFY_CREDENTIALS_REQUEST,
- token: 'Nh15V9JWyY5Fshf2OJ_feNvOIkTV7YGVfEJFr0Y0D6Q',
- });
-
- expect(actions[2]).toEqual({ type: MASTODON_PRELOAD_IMPORT, data });
- });
-});
diff --git a/packages/pl-fe/src/actions/preload.ts b/packages/pl-fe/src/actions/preload.ts
index 83fcdba4e..353294295 100644
--- a/packages/pl-fe/src/actions/preload.ts
+++ b/packages/pl-fe/src/actions/preload.ts
@@ -70,6 +70,5 @@ export {
pleromaDecoder,
decodeFromMarkup,
preload,
- preloadMastodon,
type PreloadAction,
};
diff --git a/packages/pl-fe/src/actions/statuses.test.ts b/packages/pl-fe/src/actions/statuses.test.ts
deleted file mode 100644
index e7331a357..000000000
--- a/packages/pl-fe/src/actions/statuses.test.ts
+++ /dev/null
@@ -1,161 +0,0 @@
-import { fromJS, Map as ImmutableMap } from 'immutable';
-
-import { STATUSES_IMPORT } from '@/actions/importer';
-import { __stub } from '@/api';
-import { mockStore, rootState } from '@/jest/test-helpers';
-import { normalizeStatus } from '@/normalizers/status';
-
-import { deleteStatus, fetchContext } from './statuses';
-
-describe('fetchContext()', () => {
- it('handles Mitra context', async () => {
- const statuses = await import('@/__fixtures__/mitra-context.json');
-
- __stub(mock => {
- mock.onGet('/api/v1/statuses/017ed505-5926-392f-256a-f86d5075df70/context')
- .reply(200, statuses);
- });
-
- const store = mockStore(rootState);
- await store.dispatch(fetchContext('017ed505-5926-392f-256a-f86d5075df70'));
- const actions = store.getActions();
-
- expect(actions[3].type).toEqual(STATUSES_IMPORT);
- expect(actions[3].statuses[0].id).toEqual('017ed503-bc96-301a-e871-2c23b30ddd05');
- });
-});
-
-describe('deleteStatus()', () => {
- let store: ReturnType;
-
- describe('if logged out', () => {
- beforeEach(() => {
- const state = { ...rootState, me: null };
- store = mockStore(state);
- });
-
- it('should do nothing', async() => {
- await store.dispatch(deleteStatus('1'));
- const actions = store.getActions();
-
- expect(actions).toEqual([]);
- });
- });
-
- describe('if logged in', () => {
- const statusId = 'AHU2RrX0wdcwzCYjFQ';
- const cachedStatus = normalizeStatus({
- id: statusId,
- });
-
- beforeEach(() => {
- const state = {
- ...rootState,
- me: '1234',
- statuses: fromJS({
- [statusId]: cachedStatus,
- }) as any,
- };
-
- store = mockStore(state);
- });
-
- describe('with a successful API request', () => {
- let status: any;
-
- beforeEach(async () => {
- status = await import('@/__fixtures__/pleroma-status-deleted.json');
-
- __stub((mock) => {
- mock.onDelete(`/api/v1/statuses/${statusId}`).reply(200, status);
- });
- });
-
- it('should delete the status from the API', async() => {
- const expectedActions = [
- {
- type: 'STATUS_DELETE_REQUEST',
- params: cachedStatus,
- },
- { type: 'STATUS_DELETE_SUCCESS', id: statusId },
- {
- type: 'TIMELINE_DELETE',
- id: statusId,
- accountId: null,
- references: ImmutableMap({}),
- reblogOf: null,
- },
- ];
- await store.dispatch(deleteStatus(statusId));
- const actions = store.getActions();
-
- expect(actions).toEqual(expectedActions);
- });
-
- it('should handle redraft', async() => {
- const expectedActions = [
- {
- type: 'STATUS_DELETE_REQUEST',
- params: cachedStatus,
- },
- { type: 'STATUS_DELETE_SUCCESS', id: statusId },
- {
- type: 'TIMELINE_DELETE',
- id: statusId,
- accountId: null,
- references: ImmutableMap({}),
- reblogOf: null,
- },
- {
- type: 'COMPOSE_SET_STATUS',
- status: cachedStatus,
- rawText: status.text,
- explicitAddressing: false,
- spoilerText: '',
- contentType: 'text/markdown',
- v: {
- build: undefined,
- compatVersion: '0.0.0',
- software: 'Mastodon',
- version: '0.0.0',
- },
- withRedraft: true,
- id: 'compose-modal',
- },
- { type: 'MODAL_CLOSE', modalType: 'COMPOSE', modalProps: undefined },
- { type: 'MODAL_OPEN', modalType: 'COMPOSE', modalProps: undefined },
- ];
- await store.dispatch(deleteStatus(statusId, undefined, true));
- const actions = store.getActions();
-
- expect(actions).toEqual(expectedActions);
- });
- });
-
- describe('with an unsuccessful API request', () => {
- beforeEach(() => {
- __stub((mock) => {
- mock.onDelete(`/api/v1/statuses/${statusId}`).networkError();
- });
- });
-
- it('should dispatch failed action', async() => {
- const expectedActions = [
- {
- type: 'STATUS_DELETE_REQUEST',
- params: cachedStatus,
- },
- {
- type: 'STATUS_DELETE_FAIL',
- params: cachedStatus,
- error: new Error('Network Error'),
- },
- ];
- await store.dispatch(deleteStatus(statusId, undefined, true));
- const actions = store.getActions();
-
- expect(actions).toEqual(expectedActions);
- });
- });
- });
-});
diff --git a/packages/pl-fe/src/api/__mocks__/index.ts b/packages/pl-fe/src/api/__mocks__/index.ts
deleted file mode 100644
index 3945260f6..000000000
--- a/packages/pl-fe/src/api/__mocks__/index.ts
+++ /dev/null
@@ -1,29 +0,0 @@
-// import MockAdapter from 'axios-mock-adapter';
-import { vi } from 'vitest';
-
-const api = await vi.importActual('../index') as Record;
-let mocks: Array = [];
-
-const __stub = (func: (mock: any) => void) => mocks.push(func);
-const __clear = (): Function[] => mocks = [];
-
-// const setupMock = (axios: AxiosInstance) => {
-// const mock = new MockAdapter(axios, { onNoMatch: 'throwException' });
-// mocks.map(func => func(mock));
-// };
-
-const staticClient = api.staticClient;
-
-const baseClient = (...params: any[]) => {
- const axios = api.baseClient(...params);
- // setupMock(axios);
- return axios;
-};
-
-export default (...params: any[]) => {
- const axios = api.default(...params);
- // setupMock(axios);
- return axios;
-};
-
-export { __stub, __clear, staticClient, baseClient };
diff --git a/packages/pl-fe/src/api/hooks/groups/use-group.test.ts b/packages/pl-fe/src/api/hooks/groups/use-group.test.ts
deleted file mode 100644
index 24d794977..000000000
--- a/packages/pl-fe/src/api/hooks/groups/use-group.test.ts
+++ /dev/null
@@ -1,41 +0,0 @@
-import { __stub } from '@/api';
-import { buildGroup } from '@/jest/factory';
-import { renderHook, waitFor } from '@/jest/test-helpers';
-
-import { useGroup } from './use-group';
-
-const group = buildGroup({ id: '1', display_name: 'soapbox' });
-
-describe('useGroup hook', () => {
- describe('with a successful request', () => {
- beforeEach(() => {
- __stub((mock) => {
- mock.onGet(`/api/v1/groups/${group.id}`).reply(200, group);
- });
- });
-
- it('is successful', async () => {
- const { result } = renderHook(() => useGroup(group.id));
-
- await waitFor(() => expect(result.current.isFetching).toBe(false));
-
- expect(result.current.group?.id).toBe(group.id);
- });
- });
-
- describe('with an unsuccessful query', () => {
- beforeEach(() => {
- __stub((mock) => {
- mock.onGet(`/api/v1/groups/${group.id}`).networkError();
- });
- });
-
- it('is has error state', async() => {
- const { result } = renderHook(() => useGroup(group.id));
-
- await waitFor(() => expect(result.current.isFetching).toBe(false));
-
- expect(result.current.group).toBeUndefined();
- });
- });
-});
diff --git a/packages/pl-fe/src/api/hooks/groups/use-groups.test.ts b/packages/pl-fe/src/api/hooks/groups/use-groups.test.ts
deleted file mode 100644
index 8ef89f79e..000000000
--- a/packages/pl-fe/src/api/hooks/groups/use-groups.test.ts
+++ /dev/null
@@ -1,49 +0,0 @@
-import { instanceSchema } from 'pl-api';
-import * as v from 'valibot';
-
-import { __stub } from '@/api';
-import { buildGroup } from '@/jest/factory';
-import { renderHook, waitFor } from '@/jest/test-helpers';
-
-import { useGroups } from './use-groups';
-
-const group = buildGroup({ id: '1', display_name: 'soapbox' });
-const store = {
- instance: v.parse(instanceSchema, {
- version: '3.4.1 (compatible; TruthSocial 1.0.0+unreleased)',
- }),
-};
-
-describe('useGroups hook', () => {
- describe('with a successful request', () => {
- beforeEach(() => {
- __stub((mock) => {
- mock.onGet('/api/v1/groups').reply(200, [group]);
- });
- });
-
- it('is successful', async () => {
- const { result } = renderHook(useGroups, undefined, store);
-
- await waitFor(() => expect(result.current.isFetching).toBe(false));
-
- expect(result.current.groups).toHaveLength(1);
- });
- });
-
- describe('with an unsuccessful query', () => {
- beforeEach(() => {
- __stub((mock) => {
- mock.onGet('/api/v1/groups').networkError();
- });
- });
-
- it('is has error state', async() => {
- const { result } = renderHook(useGroups, undefined, store);
-
- await waitFor(() => expect(result.current.isFetching).toBe(false));
-
- expect(result.current.groups).toHaveLength(0);
- });
- });
-});
diff --git a/packages/pl-fe/src/components/account.test.tsx b/packages/pl-fe/src/components/account.test.tsx
deleted file mode 100644
index 3a428a810..000000000
--- a/packages/pl-fe/src/components/account.test.tsx
+++ /dev/null
@@ -1,67 +0,0 @@
-import React from 'react';
-
-import { buildAccount } from '@/jest/factory';
-import { render, screen } from '@/jest/test-helpers';
-
-import Account from './account';
-
-describe(' ', () => {
- it('renders account name and username', () => {
- const account = buildAccount({
- id: '1',
- acct: 'justin-username',
- display_name: 'Justin L',
- avatar: 'test.jpg',
- });
-
- const store = {
- accounts: {
- '1': account,
- },
- };
-
- render( , undefined, store);
- expect(screen.getByTestId('account')).toHaveTextContent('Justin L');
- expect(screen.getByTestId('account')).toHaveTextContent(/justin-username/i);
- });
-
- describe('verification badge', () => {
- it('renders verification badge', () => {
- const account = buildAccount({
- id: '1',
- acct: 'justin-username',
- display_name: 'Justin L',
- avatar: 'test.jpg',
- verified: true,
- });
-
- const store = {
- accounts: {
- '1': account,
- },
- };
-
- render( , undefined, store);
- expect(screen.getByTestId('verified-badge')).toBeInTheDocument();
- });
-
- it('does not render verification badge', () => {
- const account = buildAccount({
- id: '1',
- acct: 'justin-username',
- display_name: 'Justin L',
- avatar: 'test.jpg',
- verified: false,
- });
-
- const store = {
- accounts: {
- '1': account,
- },
- };
-
- render( , undefined, store);
- expect(screen.queryAllByTestId('verified-badge')).toHaveLength(0);
- });
- });
-});
diff --git a/packages/pl-fe/src/components/autosuggest-emoji.test.tsx b/packages/pl-fe/src/components/autosuggest-emoji.test.tsx
deleted file mode 100644
index 3f9150460..000000000
--- a/packages/pl-fe/src/components/autosuggest-emoji.test.tsx
+++ /dev/null
@@ -1,33 +0,0 @@
-import React from 'react';
-
-import { render, screen } from '@/jest/test-helpers';
-
-import AutosuggestEmoji from './autosuggest-emoji';
-
-describe(' ', () => {
- it('renders native emoji', () => {
- const emoji = {
- native: '💙',
- colons: ':foobar:',
- };
-
- render( );
-
- expect(screen.getByTestId('emoji')).toHaveTextContent('foobar');
- expect(screen.getByRole('img').getAttribute('src')).not.toBe('http://example.com/emoji.png');
- });
-
- it('renders emoji with custom url', () => {
- const emoji = {
- custom: true,
- imageUrl: 'http://example.com/emoji.png',
- native: 'foobar',
- colons: ':foobar:',
- };
-
- render( );
-
- expect(screen.getByTestId('emoji')).toHaveTextContent('foobar');
- expect(screen.getByRole('img').getAttribute('src')).toBe('http://example.com/emoji.png');
- });
-});
diff --git a/packages/pl-fe/src/components/badge.test.tsx b/packages/pl-fe/src/components/badge.test.tsx
deleted file mode 100644
index 57c851271..000000000
--- a/packages/pl-fe/src/components/badge.test.tsx
+++ /dev/null
@@ -1,13 +0,0 @@
-import React from 'react';
-
-import { render, screen } from '@/jest/test-helpers';
-
-import Badge from './badge';
-
-describe(' ', () => {
- it('renders correctly', () => {
- render( );
-
- expect(screen.getByTestId('badge')).toHaveTextContent('Patron');
- });
-});
diff --git a/packages/pl-fe/src/components/polls/poll-footer.test.tsx b/packages/pl-fe/src/components/polls/poll-footer.test.tsx
deleted file mode 100644
index 4e06e91e2..000000000
--- a/packages/pl-fe/src/components/polls/poll-footer.test.tsx
+++ /dev/null
@@ -1,140 +0,0 @@
-import userEvent from '@testing-library/user-event';
-import React from 'react';
-import { IntlProvider } from 'react-intl';
-import { Provider } from 'react-redux';
-
-import { __stub } from '@/api';
-import { mockStore, render, screen, rootState } from '@/jest/test-helpers';
-
-import PollFooter from './poll-footer';
-
-import type { Poll } from 'pl-api';
-
-let poll: Poll = {
- id: '1',
- options: [{
- title: 'Apples',
- votes_count: 0,
- title_emojified: 'Apples',
- }, {
- title: 'Oranges',
- votes_count: 0,
- title_emojified: 'Oranges',
- }],
- emojis: [],
- expired: false,
- expires_at: '2020-03-24T19:33:06.000Z',
- multiple: true,
- voters_count: 0,
- votes_count: 0,
- own_votes: null,
- voted: false,
-};
-
-describe(' ', () => {
- describe('with "showResults" enabled', () => {
- it('renders the Refresh button', () => {
- render( );
-
- expect(screen.getByTestId('poll-footer')).toHaveTextContent('Refresh');
- });
-
- it('responds to the Refresh button', async() => {
- __stub((mock) => {
- mock.onGet('/api/v1/polls/1').reply(200, {});
- });
-
- const user = userEvent.setup();
- const store = mockStore(rootState);
- render(
-
-
-
-
- ,
- );
-
- await user.click(screen.getByTestId('poll-refresh'));
- const actions = store.getActions();
- expect(actions).toEqual([
- { type: 'POLL_FETCH_REQUEST' },
- { type: 'POLLS_IMPORT', polls: [{}] },
- { type: 'POLL_FETCH_SUCCESS', poll: {} },
- ]);
- });
-
- it('does not render the Vote button', () => {
- render( );
-
- expect(screen.queryAllByTestId('button')).toHaveLength(0);
- });
-
- describe('when the Poll has not expired', () => {
- beforeEach(() => {
- poll = {
- ...poll,
- expired: false,
- };
- });
-
- it('renders time remaining', () => {
- render( );
-
- expect(screen.getByTestId('poll-expiration')).toHaveTextContent('Moments remaining');
- });
- });
-
- describe('when the Poll has expired', () => {
- beforeEach(() => {
- poll = {
- ...poll,
- expired: true,
- };
- });
-
- it('renders closed', () => {
- render( );
-
- expect(screen.getByTestId('poll-expiration')).toHaveTextContent('Closed');
- });
- });
- });
-
- describe('with "showResults" disabled', () => {
- it('does not render the Refresh button', () => {
- render( );
-
- expect(screen.getByTestId('poll-footer')).not.toHaveTextContent('Refresh');
- });
-
- describe('when the Poll is multiple', () => {
- beforeEach(() => {
- poll = {
- ...poll,
- multiple: true,
- };
- });
-
- it('renders the Vote button', () => {
- render( );
-
- expect(screen.getByTestId('button')).toHaveTextContent('Vote');
- });
- });
-
- describe('when the Poll is not multiple', () => {
- beforeEach(() => {
- poll = {
- ...poll,
- multiple: false,
- };
- });
-
- it('does not render the Vote button', () => {
- render( );
-
- expect(screen.queryAllByTestId('button')).toHaveLength(0);
- });
- });
- });
-});
diff --git a/packages/pl-fe/src/components/quoted-status.test.tsx b/packages/pl-fe/src/components/quoted-status.test.tsx
deleted file mode 100644
index e394a1147..000000000
--- a/packages/pl-fe/src/components/quoted-status.test.tsx
+++ /dev/null
@@ -1,31 +0,0 @@
-import React from 'react';
-
-import { render, screen, rootState } from '@/jest/test-helpers';
-import { normalizeStatus } from '@/normalizers/status';
-
-import QuotedStatus from './quoted-status';
-
-import type { ReducerStatus } from '@/reducers/statuses';
-
-describe(' ', () => {
- it('renders content', () => {
- const account = {
- id: '1',
- acct: 'alex',
- url: 'https://soapbox.test/users/alex',
- };
-
- const status = normalizeStatus({
- id: '1',
- account,
- content: 'hello world',
- contentHtml: 'hello world',
- }) as ReducerStatus;
-
- const state = rootState/*.accounts.set('1', account)*/;
-
- render( , undefined, state);
- screen.getByText(/hello world/i);
- expect(screen.getByTestId('quoted-status')).toHaveTextContent(/hello world/i);
- });
-});
diff --git a/packages/pl-fe/src/components/scroll-top-button.test.tsx b/packages/pl-fe/src/components/scroll-top-button.test.tsx
deleted file mode 100644
index 286d0a848..000000000
--- a/packages/pl-fe/src/components/scroll-top-button.test.tsx
+++ /dev/null
@@ -1,44 +0,0 @@
-import React from 'react';
-import { defineMessages } from 'react-intl';
-
-import { render, screen } from '@/jest/test-helpers';
-
-import ScrollTopButton from './scroll-top-button';
-
-const messages = defineMessages({
- queue: { id: 'status_list.queue_label', defaultMessage: 'Click to see {count} new {count, plural, one {post} other {posts}}' },
-});
-
-describe(' ', () => {
- it('renders correctly', async() => {
- render(
- {}}
- count={0}
- message={messages.queue}
- />,
- );
- expect(screen.queryAllByRole('link')).toHaveLength(0);
-
- render(
- {}}
- count={1}
- message={messages.queue}
- />,
- );
- expect(screen.getByText('Click to see 1 new post')).toBeInTheDocument();
-
- render(
- {}}
- count={9999999}
- message={messages.queue}
- />,
- );
- expect(screen.getByText('Click to see 9999999 new posts')).toBeInTheDocument();
- });
-});
diff --git a/packages/pl-fe/src/components/status.test.tsx b/packages/pl-fe/src/components/status.test.tsx
deleted file mode 100644
index 9c2bf40dc..000000000
--- a/packages/pl-fe/src/components/status.test.tsx
+++ /dev/null
@@ -1,38 +0,0 @@
-import React from 'react';
-
-import { buildAccount } from '@/jest/factory';
-import { render, screen, rootState } from '@/jest/test-helpers';
-import { normalizeStatus } from '@/normalizers/status';
-
-import Status from './status';
-
-import type { ReducerStatus } from '@/reducers/statuses';
-
-const account = buildAccount({
- id: '1',
- acct: 'alex',
-});
-
-const status = normalizeStatus({
- id: '1',
- account,
- content: 'hello world',
- contentHtml: 'hello world',
-}) as ReducerStatus;
-
-describe(' ', () => {
- const state = rootState/*.accounts.set('1', account)*/;
-
- it('renders content', () => {
- render( , undefined, state);
- screen.getByText(/hello world/i);
- expect(screen.getByTestId('status')).toHaveTextContent(/hello world/i);
- });
-
- describe('the Status Action Bar', () => {
- it('is rendered', () => {
- render( , undefined, state);
- expect(screen.getByTestId('status-action-bar')).toBeInTheDocument();
- });
- });
-});
diff --git a/packages/pl-fe/src/components/statuses/sensitive-content-overlay.test.tsx b/packages/pl-fe/src/components/statuses/sensitive-content-overlay.test.tsx
deleted file mode 100644
index 4c0c7d667..000000000
--- a/packages/pl-fe/src/components/statuses/sensitive-content-overlay.test.tsx
+++ /dev/null
@@ -1,64 +0,0 @@
-import { Map as ImmutableMap } from 'immutable';
-import React from 'react';
-
-import { fireEvent, render, rootState, screen } from '@/jest/test-helpers';
-import { normalizeStatus } from '@/normalizers/status';
-import { ReducerStatus } from '@/reducers/statuses';
-
-import SensitiveContentOverlay from './sensitive-content-overlay';
-
-describe(' ', () => {
- let status: ReducerStatus;
-
- describe('when the Status is marked as sensitive', () => {
- beforeEach(() => {
- status = normalizeStatus({ sensitive: true }) as ReducerStatus;
- });
-
- it('displays the "Sensitive content" warning', () => {
- render( );
- expect(screen.getByTestId('sensitive-overlay')).toHaveTextContent('Sensitive content');
- });
-
- it('does not allow user to delete the status', () => {
- render( );
- expect(screen.queryAllByTestId('icon-button')).toHaveLength(0);
- });
-
- it('can be toggled', () => {
- render( );
-
- fireEvent.click(screen.getByTestId('button'));
- expect(screen.getByTestId('sensitive-overlay')).not.toHaveTextContent('Sensitive content');
- expect(screen.getByTestId('sensitive-overlay')).toHaveTextContent('Hide');
-
- fireEvent.click(screen.getByTestId('button'));
- expect(screen.getByTestId('sensitive-overlay')).toHaveTextContent('Sensitive content');
- expect(screen.getByTestId('sensitive-overlay')).not.toHaveTextContent('Hide');
- });
- });
-
- describe('when the Status is marked as sensitive and displayMedia set to "show_all"', () => {
- let store: any;
-
- beforeEach(() => {
- status = normalizeStatus({ sensitive: true }) as ReducerStatus;
- store = rootState
- .set('settings', ImmutableMap({
- displayMedia: 'show_all',
- }));
- });
-
- it('can be toggled', () => {
- render( , undefined, store);
-
- fireEvent.click(screen.getByTestId('button'));
- expect(screen.getByTestId('sensitive-overlay')).toHaveTextContent('Sensitive content');
- expect(screen.getByTestId('sensitive-overlay')).not.toHaveTextContent('Hide');
-
- fireEvent.click(screen.getByTestId('button'));
- expect(screen.getByTestId('sensitive-overlay')).not.toHaveTextContent('Sensitive content');
- expect(screen.getByTestId('sensitive-overlay')).toHaveTextContent('Hide');
- });
- });
-});
diff --git a/packages/pl-fe/src/components/ui/avatar.test.tsx b/packages/pl-fe/src/components/ui/avatar.test.tsx
deleted file mode 100644
index c8a073d13..000000000
--- a/packages/pl-fe/src/components/ui/avatar.test.tsx
+++ /dev/null
@@ -1,21 +0,0 @@
-import React from 'react';
-
-import { render, screen } from '@/jest/test-helpers';
-
-import Avatar from './avatar';
-
-const src = '/static/alice.jpg';
-
-describe(' ', () => {
- it('renders', () => {
- render( );
-
- expect(screen.getByRole('img')).toBeInTheDocument();
- });
-
- it('handles size props', () => {
- render( );
-
- expect(screen.getByTestId('still-image-container').getAttribute('style')).toMatch(/50px/i);
- });
-});
diff --git a/packages/pl-fe/src/components/ui/button/index.test.tsx b/packages/pl-fe/src/components/ui/button/index.test.tsx
deleted file mode 100644
index d454814ac..000000000
--- a/packages/pl-fe/src/components/ui/button/index.test.tsx
+++ /dev/null
@@ -1,91 +0,0 @@
-import React from 'react';
-
-import { fireEvent, render, screen } from '@/jest/test-helpers';
-
-import Button from '.';
-
-describe(' ', () => {
- it('renders the given text', () => {
- const text = 'foo';
- render( );
-
- expect(screen.getByRole('button')).toHaveTextContent(text);
- });
-
- it('renders the children', () => {
- render(children
);
-
- expect(screen.getByRole('button')).toHaveTextContent('children');
- });
-
- it('renders the props.text instead of children', () => {
- const text = 'foo';
- const children = children
;
- render({children} );
-
- expect(screen.getByRole('button')).toHaveTextContent('foo');
- expect(screen.getByRole('button')).not.toHaveTextContent('children');
- });
-
- it('handles click events using the given handler', () => {
- const handler = vi.fn();
- render( );
-
- fireEvent.click(screen.getByRole('button'));
- expect(handler.mock.calls.length).toEqual(1);
- });
-
- it('does not handle click events if props.disabled given', () => {
- const handler = vi.fn();
- render( );
-
- fireEvent.click(screen.getByRole('button'));
- expect(handler.mock.calls.length).toEqual(0);
- });
-
- it('renders a disabled attribute if props.disabled given', () => {
- render( );
-
- expect(screen.getByRole('button')).toBeDisabled();
- });
-
- it('render full-width button if block prop given', () => {
- render( );
-
- expect(screen.getByRole('button')).toHaveClass('w-full');
- });
-
- it('handles Theme properly', () => {
- render( );
-
- expect(screen.getByRole('button')).toHaveClass('bg-transparent border-gray-400');
- });
-
- describe('to prop', () => {
- it('renders a link', () => {
- render(link );
-
- expect(screen.getByRole('link')).toBeInTheDocument();
- });
-
- it('does not render a link', () => {
- render(link );
-
- expect(screen.queryAllByRole('link')).toHaveLength(0);
- });
- });
-
- describe('icon prop', () => {
- it('renders an icon', () => {
- render(button );
-
- expect(screen.getByTestId('icon')).toBeInTheDocument();
- });
-
- it('does not render an icon', () => {
- render(button );
-
- expect(screen.queryAllByTestId('icon')).toHaveLength(0);
- });
- });
-});
diff --git a/packages/pl-fe/src/components/ui/card.test.tsx b/packages/pl-fe/src/components/ui/card.test.tsx
deleted file mode 100644
index 56d06bae4..000000000
--- a/packages/pl-fe/src/components/ui/card.test.tsx
+++ /dev/null
@@ -1,37 +0,0 @@
-import React from 'react';
-
-import { render, screen } from '@/jest/test-helpers';
-
-import { Card, CardBody, CardHeader, CardTitle } from './card';
-
-describe(' ', () => {
- it('renders the CardTitle and CardBody', () => {
- render(
-
-
-
-
-
-
- Card Body
-
- ,
- );
-
- expect(screen.getByTestId('card-title')).toHaveTextContent('Card Title');
- expect(screen.getByTestId('card-body')).toHaveTextContent('Card Body');
- expect(screen.queryByTestId('back-button')).not.toBeInTheDocument();
- });
-
- it('renders the Back Button', () => {
- render(
-
-
-
-
- ,
- );
-
- expect(screen.getByTestId('back-button')).toBeInTheDocument();
- });
-});
diff --git a/packages/pl-fe/src/components/ui/column.test.tsx b/packages/pl-fe/src/components/ui/column.test.tsx
deleted file mode 100644
index 4fd9ddd48..000000000
--- a/packages/pl-fe/src/components/ui/column.test.tsx
+++ /dev/null
@@ -1,13 +0,0 @@
-import React from 'react';
-
-import { render, screen } from '@/jest/test-helpers';
-
-import { Column } from './column';
-
-describe(' ', () => {
- it('renders correctly with minimal props', () => {
- render( );
-
- expect(screen.getByRole('button')).toHaveTextContent('Back');
- });
-});
diff --git a/packages/pl-fe/src/components/ui/divider.test.tsx b/packages/pl-fe/src/components/ui/divider.test.tsx
deleted file mode 100644
index 426ee6be4..000000000
--- a/packages/pl-fe/src/components/ui/divider.test.tsx
+++ /dev/null
@@ -1,20 +0,0 @@
-import React from 'react';
-
-import { render, screen } from '@/jest/test-helpers';
-
-import Divider from './divider';
-
-describe(' ', () => {
- it('renders without text', () => {
- render( );
-
- expect(screen.queryAllByTestId('divider-text')).toHaveLength(0);
- });
-
- it('renders text', () => {
- const text = 'Hello';
- render( );
-
- expect(screen.getByTestId('divider-text')).toHaveTextContent(text);
- });
-});
diff --git a/packages/pl-fe/src/components/ui/emoji.test.tsx b/packages/pl-fe/src/components/ui/emoji.test.tsx
deleted file mode 100644
index 215d91c0f..000000000
--- a/packages/pl-fe/src/components/ui/emoji.test.tsx
+++ /dev/null
@@ -1,24 +0,0 @@
-import React from 'react';
-
-import { render, screen } from '@/jest/test-helpers';
-
-import Emoji from './emoji';
-
-describe(' ', () => {
- it('renders a simple emoji', () => {
- render( );
-
- const img = screen.getByRole('img');
- expect(img.getAttribute('src')).toBe('/packs/emoji/1f600.svg');
- expect(img.getAttribute('alt')).toBe('😀');
- });
-
- // https://emojipedia.org/emoji-flag-sequence/
- it('renders a sequence emoji', () => {
- render( );
-
- const img = screen.getByRole('img');
- expect(img.getAttribute('src')).toBe('/packs/emoji/1f1fa-1f1f8.svg');
- expect(img.getAttribute('alt')).toBe('🇺🇸');
- });
-});
diff --git a/packages/pl-fe/src/components/ui/form-actions.test.tsx b/packages/pl-fe/src/components/ui/form-actions.test.tsx
deleted file mode 100644
index 082fccbc6..000000000
--- a/packages/pl-fe/src/components/ui/form-actions.test.tsx
+++ /dev/null
@@ -1,13 +0,0 @@
-import React from 'react';
-
-import { render, screen } from '@/jest/test-helpers';
-
-import FormActions from './form-actions';
-
-describe(' ', () => {
- it('renders successfully', () => {
- render(child
);
-
- expect(screen.getByTestId('child')).toBeInTheDocument();
- });
-});
diff --git a/packages/pl-fe/src/components/ui/form-group.test.tsx b/packages/pl-fe/src/components/ui/form-group.test.tsx
deleted file mode 100644
index ede420ffb..000000000
--- a/packages/pl-fe/src/components/ui/form-group.test.tsx
+++ /dev/null
@@ -1,59 +0,0 @@
-import React from 'react';
-
-import { render, screen } from '@/jest/test-helpers';
-
-import FormGroup from './form-group';
-
-describe(' ', () => {
- it('connects the label and input', () => {
- render(
- <>
-
-
-
-
-
-
-
-
-
-
-
- >,
- );
-
- expect(screen.getByLabelText('My label')).toHaveAttribute('data-testid');
- expect(screen.getByLabelText('My other label')).not.toHaveAttribute('data-testid');
- expect(screen.queryByTestId('form-group-error')).not.toBeInTheDocument();
- });
-
- it('renders errors', () => {
- render(
-
-
- ,
- );
-
- expect(screen.getByTestId('form-group-error')).toHaveTextContent('is invalid');
- });
-
- it('renders label', () => {
- render(
-
-
- ,
- );
-
- expect(screen.getByTestId('form-group-label')).toHaveTextContent('My label');
- });
-
- it('renders hint', () => {
- render(
-
-
- ,
- );
-
- expect(screen.getByTestId('form-group-hint')).toHaveTextContent('My hint');
- });
-});
diff --git a/packages/pl-fe/src/components/ui/form.test.tsx b/packages/pl-fe/src/components/ui/form.test.tsx
deleted file mode 100644
index c2ebb0205..000000000
--- a/packages/pl-fe/src/components/ui/form.test.tsx
+++ /dev/null
@@ -1,30 +0,0 @@
-import React from 'react';
-
-import { fireEvent, render, screen } from '@/jest/test-helpers';
-
-import Form from './form';
-
-describe('', () => {
- it('renders children', () => {
- const onSubmitMock = vi.fn();
- render(
- ,
- );
-
- expect(screen.getByTestId('form')).toHaveTextContent('children');
- });
-
- it('handles onSubmit prop', () => {
- const onSubmitMock = vi.fn();
- render(
- ,
- );
-
- fireEvent.submit(
- screen.getByTestId('form'), {
- preventDefault: () => {},
- },
- );
- expect(onSubmitMock).toHaveBeenCalled();
- });
-});
diff --git a/packages/pl-fe/src/components/ui/modal.test.tsx b/packages/pl-fe/src/components/ui/modal.test.tsx
deleted file mode 100644
index 10ae8a271..000000000
--- a/packages/pl-fe/src/components/ui/modal.test.tsx
+++ /dev/null
@@ -1,139 +0,0 @@
-import userEvent from '@testing-library/user-event';
-import React from 'react';
-
-import { render, screen } from '@/jest/test-helpers';
-
-import Modal from './modal';
-
-describe(' ', () => {
- it('renders', () => {
- render( );
- expect(screen.getByTestId('modal')).toBeInTheDocument();
- });
-
- it('renders children', () => {
- render(
);
- expect(screen.getByTestId('child')).toBeInTheDocument();
- });
-
- it('focuses the primary action', () => {
- render(
- null}
- confirmationText='Click me'
- />,
- );
-
- expect(screen.getByRole('button')).toHaveFocus();
- });
-
- describe('onClose prop', () => {
- it('renders the Icon to close the modal', async() => {
- const mockFn = vi.fn();
- const user = userEvent.setup();
-
- render( );
- expect(screen.getByTestId('icon-button')).toBeInTheDocument();
-
- expect(mockFn).not.toBeCalled();
- await user.click(screen.getByTestId('icon-button'));
- expect(mockFn).toBeCalled();
- });
-
- it('does not render the Icon to close the modal', () => {
- render( );
- expect(screen.queryAllByTestId('icon-button')).toHaveLength(0);
- });
- });
-
- describe('confirmationAction prop', () => {
- it('renders the confirmation button', async() => {
- const mockFn = vi.fn();
- const user = userEvent.setup();
-
- render(
- ,
- );
-
- expect(mockFn).not.toBeCalled();
- await user.click(screen.getByRole('button'));
- expect(mockFn).toBeCalled();
- });
-
- it('does not render the actions to', () => {
- render( );
- expect(screen.queryAllByTestId('modal-actions')).toHaveLength(0);
- });
-
- describe('with secondaryAction', () => {
- it('renders the secondary button', async() => {
- const confirmationAction = vi.fn();
- const secondaryAction = vi.fn();
- const user = userEvent.setup();
-
- render(
- ,
- );
-
- await user.click(screen.getByText(/secondary/i));
- expect(secondaryAction).toBeCalled();
- expect(confirmationAction).not.toBeCalled();
- });
-
- it('does not render the secondary action', () => {
- render(
- null}
- confirmationText='Click me'
- />,
- );
- expect(screen.queryAllByRole('button')).toHaveLength(1);
- });
- });
-
- describe('with cancelAction', () => {
- it('renders the cancel button', async() => {
- const confirmationAction = vi.fn();
- const cancelAction = vi.fn();
- const user = userEvent.setup();
-
- render(
- ,
- );
-
- await user.click(screen.getByText(/cancel/i));
- expect(cancelAction).toBeCalled();
- expect(confirmationAction).not.toBeCalled();
- });
-
- it('does not render the cancel action', () => {
- render(
- null}
- confirmationText='Click me'
- />,
- );
- expect(screen.queryAllByRole('button')).toHaveLength(1);
- });
- });
- });
-});
diff --git a/packages/pl-fe/src/components/ui/svg-icon.test.tsx b/packages/pl-fe/src/components/ui/svg-icon.test.tsx
deleted file mode 100644
index 07bfcaa6c..000000000
--- a/packages/pl-fe/src/components/ui/svg-icon.test.tsx
+++ /dev/null
@@ -1,17 +0,0 @@
-import IconCode from '@phosphor-icons/core/regular/code.svg';
-import React from 'react';
-
-import { render, screen } from '@/jest/test-helpers';
-
-import SvgIcon from './svg-icon';
-
-describe(' ', () => {
- it('renders loading element with default size', async () => {
- render( );
-
- const svg = screen.getByTestId('svg-icon-loader');
- expect(svg.getAttribute('width')).toBe('24');
- expect(svg.getAttribute('height')).toBe('24');
- expect(svg.getAttribute('class')).toBe('text-primary-500');
- });
-});
diff --git a/packages/pl-fe/src/entity-store/actions.ts b/packages/pl-fe/src/entity-store/actions.ts
index 1bdc7f269..1030829cd 100644
--- a/packages/pl-fe/src/entity-store/actions.ts
+++ b/packages/pl-fe/src/entity-store/actions.ts
@@ -3,7 +3,6 @@ import type { EntitiesTransaction, Entity, EntityListState, ImportPosition } fro
const ENTITIES_IMPORT = 'ENTITIES_IMPORT' as const;
const ENTITIES_DELETE = 'ENTITIES_DELETE' as const;
const ENTITIES_DISMISS = 'ENTITIES_DISMISS' as const;
-const ENTITIES_INCREMENT = 'ENTITIES_INCREMENT' as const;
const ENTITIES_FETCH_REQUEST = 'ENTITIES_FETCH_REQUEST' as const;
const ENTITIES_FETCH_SUCCESS = 'ENTITIES_FETCH_SUCCESS' as const;
const ENTITIES_FETCH_FAIL = 'ENTITIES_FETCH_FAIL' as const;
@@ -42,13 +41,6 @@ const dismissEntities = (ids: Iterable, entityType: string, listKey: str
listKey,
});
-const incrementEntities = (entityType: string, listKey: string, diff: number) => ({
- type: ENTITIES_INCREMENT,
- entityType,
- listKey,
- diff,
-});
-
const entitiesFetchRequest = (entityType: string, listKey?: string) => ({
type: ENTITIES_FETCH_REQUEST,
entityType,
@@ -95,7 +87,6 @@ type EntityAction =
ReturnType
| ReturnType
| ReturnType
- | ReturnType
| ReturnType
| ReturnType
| ReturnType
@@ -108,7 +99,6 @@ export {
ENTITIES_IMPORT,
ENTITIES_DELETE,
ENTITIES_DISMISS,
- ENTITIES_INCREMENT,
ENTITIES_FETCH_REQUEST,
ENTITIES_FETCH_SUCCESS,
ENTITIES_FETCH_FAIL,
@@ -117,7 +107,6 @@ export {
importEntities,
deleteEntities,
dismissEntities,
- incrementEntities,
entitiesFetchRequest,
entitiesFetchSuccess,
entitiesFetchFail,
diff --git a/packages/pl-fe/src/entity-store/reducer.test.ts b/packages/pl-fe/src/entity-store/reducer.test.ts
deleted file mode 100644
index 385a0002c..000000000
--- a/packages/pl-fe/src/entity-store/reducer.test.ts
+++ /dev/null
@@ -1,209 +0,0 @@
-import {
- deleteEntities,
- dismissEntities,
- entitiesFetchFail,
- entitiesFetchRequest,
- entitiesFetchSuccess,
- importEntities,
- incrementEntities,
-} from './actions';
-import reducer, { State } from './reducer';
-import { createListState } from './utils';
-
-import type { EntityCache } from './types';
-
-interface TestEntity {
- id: string;
- msg: string;
-}
-
-test('import entities', () => {
- const entities: TestEntity[] = [
- { id: '1', msg: 'yolo' },
- { id: '2', msg: 'benis' },
- { id: '3', msg: 'boop' },
- ];
-
- const action = importEntities(entities, 'TestEntity');
- const result = reducer(undefined, action);
- const cache = result.TestEntity as EntityCache;
-
- expect(cache.store['1']!.msg).toBe('yolo');
- expect(Object.values(cache.lists).length).toBe(0);
-});
-
-test('import entities into a list', () => {
- const entities: TestEntity[] = [
- { id: '1', msg: 'yolo' },
- { id: '2', msg: 'benis' },
- { id: '3', msg: 'boop' },
- ];
-
- const action = importEntities(entities, 'TestEntity', 'thingies');
- const result = reducer(undefined, action);
- const cache = result.TestEntity as EntityCache;
-
- expect(cache.store['2']!.msg).toBe('benis');
- expect(cache.lists.thingies!.ids.size).toBe(3);
- expect(cache.lists.thingies!.state.totalCount).toBe(3);
-
- // Now try adding an additional item.
- const entities2: TestEntity[] = [
- { id: '4', msg: 'hehe' },
- ];
-
- const action2 = importEntities(entities2, 'TestEntity', 'thingies');
- const result2 = reducer(result, action2);
- const cache2 = result2.TestEntity as EntityCache;
-
- expect(cache2.store['4']!.msg).toBe('hehe');
- expect(cache2.lists.thingies!.ids.size).toBe(4);
- expect(cache2.lists.thingies!.state.totalCount).toBe(4);
-
- // Finally, update an item.
- const entities3: TestEntity[] = [
- { id: '2', msg: 'yolofam' },
- ];
-
- const action3 = importEntities(entities3, 'TestEntity', 'thingies');
- const result3 = reducer(result2, action3);
- const cache3 = result3.TestEntity as EntityCache;
-
- expect(cache3.store['2']!.msg).toBe('yolofam');
- expect(cache3.lists.thingies!.ids.size).toBe(4); // unchanged
- expect(cache3.lists.thingies!.state.totalCount).toBe(4);
-});
-
-test('fetching updates the list state', () => {
- const action = entitiesFetchRequest('TestEntity', 'thingies');
- const result = reducer(undefined, action);
-
- expect(result.TestEntity!.lists.thingies!.state.fetching).toBe(true);
-});
-
-test('failure adds the error to the state', () => {
- const error = new Error('whoopsie');
-
- const action = entitiesFetchFail('TestEntity', 'thingies', error);
- const result = reducer(undefined, action);
-
- expect(result.TestEntity!.lists.thingies!.state.error).toBe(error);
-});
-
-test('import entities with override', () => {
- const state: State = {
- TestEntity: {
- store: { '1': { id: '1' }, '2': { id: '2' }, '3': { id: '3' } },
- lists: {
- thingies: {
- ids: new Set(['1', '2', '3']),
- state: { ...createListState(), totalCount: 3 },
- },
- },
- },
- };
-
- const entities: TestEntity[] = [
- { id: '4', msg: 'yolo' },
- { id: '5', msg: 'benis' },
- ];
-
- const now = new Date();
-
- const action = entitiesFetchSuccess(entities, 'TestEntity', 'thingies', 'end', {
- next: undefined,
- prev: undefined,
- totalCount: 2,
- error: null,
- fetched: true,
- fetching: false,
- lastFetchedAt: now,
- invalid: false,
- }, true);
-
- const result = reducer(state, action);
- const cache = result.TestEntity as EntityCache;
-
- expect([...cache.lists.thingies!.ids]).toEqual(['4', '5']);
- expect(cache.lists.thingies!.state.lastFetchedAt).toBe(now); // Also check that newState worked
-});
-
-test('deleting items', () => {
- const state: State = {
- TestEntity: {
- store: { '1': { id: '1' }, '2': { id: '2' }, '3': { id: '3' } },
- lists: {
- '': {
- ids: new Set(['1', '2', '3']),
- state: { ...createListState(), totalCount: 3 },
- },
- },
- },
- };
-
- const action = deleteEntities(['3', '1'], 'TestEntity');
- const result = reducer(state, action);
-
- expect(result.TestEntity!.store).toMatchObject({ '2': { id: '2' } });
- expect([...result.TestEntity!.lists['']!.ids]).toEqual(['2']);
- expect(result.TestEntity!.lists['']!.state.totalCount).toBe(1);
-});
-
-test('dismiss items', () => {
- const state: State = {
- TestEntity: {
- store: { '1': { id: '1' }, '2': { id: '2' }, '3': { id: '3' } },
- lists: {
- yolo: {
- ids: new Set(['1', '2', '3']),
- state: { ...createListState(), totalCount: 3 },
- },
- },
- },
- };
-
- const action = dismissEntities(['3', '1'], 'TestEntity', 'yolo');
- const result = reducer(state, action);
-
- expect(result.TestEntity!.store).toMatchObject(state.TestEntity!.store);
- expect([...result.TestEntity!.lists.yolo!.ids]).toEqual(['2']);
- expect(result.TestEntity!.lists.yolo!.state.totalCount).toBe(1);
-});
-
-test('increment items', () => {
- const state: State = {
- TestEntity: {
- store: { '1': { id: '1' }, '2': { id: '2' }, '3': { id: '3' } },
- lists: {
- thingies: {
- ids: new Set(['1', '2', '3']),
- state: { ...createListState(), totalCount: 3 },
- },
- },
- },
- };
-
- const action = incrementEntities('TestEntity', 'thingies', 1);
- const result = reducer(state, action);
-
- expect(result.TestEntity!.lists.thingies!.state.totalCount).toBe(4);
-});
-
-test('decrement items', () => {
- const state: State = {
- TestEntity: {
- store: { '1': { id: '1' }, '2': { id: '2' }, '3': { id: '3' } },
- lists: {
- thingies: {
- ids: new Set(['1', '2', '3']),
- state: { ...createListState(), totalCount: 3 },
- },
- },
- },
- };
-
- const action = incrementEntities('TestEntity', 'thingies', -1);
- const result = reducer(state, action);
-
- expect(result.TestEntity!.lists.thingies!.state.totalCount).toBe(2);
-});
diff --git a/packages/pl-fe/src/entity-store/reducer.ts b/packages/pl-fe/src/entity-store/reducer.ts
index 66e16667d..bc9cae717 100644
--- a/packages/pl-fe/src/entity-store/reducer.ts
+++ b/packages/pl-fe/src/entity-store/reducer.ts
@@ -8,7 +8,6 @@ import {
ENTITIES_FETCH_SUCCESS,
ENTITIES_FETCH_FAIL,
ENTITIES_INVALIDATE_LIST,
- ENTITIES_INCREMENT,
ENTITIES_TRANSACTION,
type EntityAction,
type DeleteEntitiesOpts,
@@ -114,21 +113,6 @@ const dismissEntities = (
}
};
-const incrementEntities = (
- draft: Draft,
- entityType: string,
- listKey: string,
- diff: number,
-) => {
- const cache = draft[entityType] ?? createCache();
- const list = cache.lists[listKey];
-
- if (typeof list?.state?.totalCount === 'number') {
- list.state.totalCount += diff;
- draft[entityType] = cache;
- }
-};
-
const setFetching = (
draft: Draft,
entityType: string,
@@ -175,8 +159,6 @@ const reducer = (state: Readonly = {}, action: EntityAction): State => {
return create(state, draft => deleteEntities(draft, action.entityType, action.ids, action.opts));
case ENTITIES_DISMISS:
return create(state, draft => dismissEntities(draft, action.entityType, action.ids, action.listKey));
- case ENTITIES_INCREMENT:
- return create(state, draft => incrementEntities(draft, action.entityType, action.listKey, action.diff));
case ENTITIES_FETCH_SUCCESS:
return create(state, draft => importEntities(draft, action.entityType, action.entities, action.listKey, action.pos, action.newState, action.overwrite), { enableAutoFreeze: true });
case ENTITIES_FETCH_REQUEST:
@@ -192,4 +174,4 @@ const reducer = (state: Readonly = {}, action: EntityAction): State => {
}
};
-export { type State, reducer as default };
+export { reducer as default };
diff --git a/packages/pl-fe/src/entity-store/utils.ts b/packages/pl-fe/src/entity-store/utils.ts
index 2568eb78d..fddd20012 100644
--- a/packages/pl-fe/src/entity-store/utils.ts
+++ b/packages/pl-fe/src/entity-store/utils.ts
@@ -52,5 +52,4 @@ export {
updateList,
createCache,
createList,
- createListState,
};
diff --git a/packages/pl-fe/src/features/auth-login/components/captcha.test.tsx b/packages/pl-fe/src/features/auth-login/components/captcha.test.tsx
deleted file mode 100644
index 4c2c8dcd1..000000000
--- a/packages/pl-fe/src/features/auth-login/components/captcha.test.tsx
+++ /dev/null
@@ -1,36 +0,0 @@
-import { Map as ImmutableMap } from 'immutable';
-import React from 'react';
-
-import { render, screen } from '@/jest/test-helpers';
-
-import CaptchaField, { NativeCaptchaField } from './captcha';
-
-describe(' ', () => {
- it('renders null by default', () => {
- render( );
-
- expect(screen.queryAllByRole('textbox')).toHaveLength(0);
- });
-});
-
-describe(' ', () => {
- it('renders correctly', () => {
- const captcha = ImmutableMap({
- answer_data: 'QTEyOEdDTQ...',
- token: 'CcDExJcv6qqOVw',
- type: 'native',
- url: 'data:image/png;base64,...',
- });
-
- render(
- {}}
- onClick={() => {}}
- value=''
- />,
- );
-
- expect(screen.queryAllByRole('textbox')).toHaveLength(1);
- });
-});
diff --git a/packages/pl-fe/src/features/auth-login/components/captcha.tsx b/packages/pl-fe/src/features/auth-login/components/captcha.tsx
index f9047227b..2507178a4 100644
--- a/packages/pl-fe/src/features/auth-login/components/captcha.tsx
+++ b/packages/pl-fe/src/features/auth-login/components/captcha.tsx
@@ -129,5 +129,4 @@ const NativeCaptchaField: React.FC = ({ captcha, onChange,
export {
CaptchaField as default,
- NativeCaptchaField,
};
diff --git a/packages/pl-fe/src/features/auth-login/components/login-form.test.tsx b/packages/pl-fe/src/features/auth-login/components/login-form.test.tsx
deleted file mode 100644
index 54cde5bad..000000000
--- a/packages/pl-fe/src/features/auth-login/components/login-form.test.tsx
+++ /dev/null
@@ -1,43 +0,0 @@
-import { instanceSchema } from 'pl-api';
-import React from 'react';
-import * as v from 'valibot';
-
-import { fireEvent, render, screen } from '@/jest/test-helpers';
-
-import LoginForm from './login-form';
-
-describe(' ', () => {
- it('renders for Pleroma', () => {
- const mockFn = vi.fn();
- const store = {
- instance: v.parse(instanceSchema, {
- version: '2.7.2 (compatible; Pleroma 2.3.0)',
- }),
- };
-
- render( , undefined, store);
-
- expect(screen.getByRole('heading')).toHaveTextContent(/sign in/i);
- });
-
- it('renders for Mastodon', () => {
- const mockFn = vi.fn();
- const store = {
- instance: v.parse(instanceSchema, {
- version: '3.0.0',
- }),
- };
-
- render( , undefined, store);
-
- expect(screen.getByRole('heading')).toHaveTextContent(/sign in/i);
- });
-
- it('responds to the handleSubmit prop', () => {
- const mockFn = vi.fn();
- render( );
- fireEvent.submit(screen.getByTestId(/button/i));
-
- expect(mockFn).toHaveBeenCalledTimes(1);
- });
-});
diff --git a/packages/pl-fe/src/features/auth-login/components/otp-auth-form.test.tsx b/packages/pl-fe/src/features/auth-login/components/otp-auth-form.test.tsx
deleted file mode 100644
index b46120ef8..000000000
--- a/packages/pl-fe/src/features/auth-login/components/otp-auth-form.test.tsx
+++ /dev/null
@@ -1,14 +0,0 @@
-import React from 'react';
-
-import { render, screen } from '@/jest/test-helpers';
-
-import OtpAuthForm from './otp-auth-form';
-
-describe(' ', () => {
- it('renders correctly', () => {
- render( );
-
- expect(screen.getByRole('heading')).toHaveTextContent('OTP Login');
- expect(screen.getByTestId('form')).toBeInTheDocument();
- });
-});
diff --git a/packages/pl-fe/src/features/chats/components/chat-list-item.test.tsx b/packages/pl-fe/src/features/chats/components/chat-list-item.test.tsx
deleted file mode 100644
index 3d9b33583..000000000
--- a/packages/pl-fe/src/features/chats/components/chat-list-item.test.tsx
+++ /dev/null
@@ -1,65 +0,0 @@
-import React from 'react';
-
-import { render, screen } from '@/jest/test-helpers';
-import { IChat } from '@/queries/chats';
-
-import ChatListItem from './chat-list-item';
-
-const chat: any = {
- id: '1',
- unread: 5,
- last_message: {
- account_id: '2',
- chat_id: '1',
- content: 'hello world',
- created_at: '2022-09-09T16:02:26.186Z',
- id: '12332423234',
- unread: true,
- },
- created_at: '2022-09-09T16:02:26.186Z',
- updated_at: '2022-09-09T16:02:26.186Z',
- accepted: true,
- account: {
- acct: 'username',
- display_name: 'johnnie',
- },
-};
-
-describe(' ', () => {
- it('renders correctly', () => {
- render( );
-
- expect(screen.getByTestId('chat-list-item')).toBeInTheDocument();
- expect(screen.getByTestId('chat-list-item')).toHaveTextContent(chat.account.display_name);
- });
-
- describe('last message content', () => {
- it('renders the last message', () => {
- render( );
-
- expect(screen.getByTestId('chat-last-message')).toBeInTheDocument();
- });
-
- it('does not render the last message', () => {
- const changedChat = { ...chat, last_message: null };
- render( );
-
- expect(screen.queryAllByTestId('chat-last-message')).toHaveLength(0);
- });
-
- describe('unread', () => {
- it('renders the unread dot', () => {
- render( );
-
- expect(screen.getByTestId('chat-unread-indicator')).toBeInTheDocument();
- });
-
- it('does not render the unread dot', () => {
- const changedChat = { ...chat, last_message: { ...chat.last_message, unread: false } };
- render( );
-
- expect(screen.queryAllByTestId('chat-unread-indicator')).toHaveLength(0);
- });
- });
- });
-});
diff --git a/packages/pl-fe/src/features/chats/components/chat-message-list.test.tsx b/packages/pl-fe/src/features/chats/components/chat-message-list.test.tsx
deleted file mode 100644
index 6d33c25e0..000000000
--- a/packages/pl-fe/src/features/chats/components/chat-message-list.test.tsx
+++ /dev/null
@@ -1,144 +0,0 @@
-import userEvent from '@testing-library/user-event';
-import React from 'react';
-import { VirtuosoMockContext } from 'react-virtuoso';
-
-import { __stub } from '@/api';
-import { ChatContext } from '@/contexts/chat-context';
-import { buildAccount, buildInstance } from '@/jest/factory';
-import { queryClient, render, rootState, screen, waitFor } from '@/jest/test-helpers';
-import { normalizeChatMessage } from '@/normalizers/chat-message';
-import { IChat } from '@/queries/chats';
-import { ChatMessage } from '@/types/entities';
-
-import ChatMessageList from './chat-message-list';
-
-const chat: IChat = {
- account: buildAccount({
- username: 'username',
- verified: true,
- id: '1',
- acct: 'acct',
- avatar: 'avatar',
- avatar_static: 'avatar',
- display_name: 'my name',
- }),
- created_at: '2020-06-10T02:05:06.000Z',
- id: '14',
- last_message: null,
- unread: 5,
-};
-
-const chatMessages: ChatMessage[] = [
- normalizeChatMessage({
- account_id: '1',
- chat_id: '14',
- content: 'this is the first chat',
- created_at: '2022-09-09T16:02:26.186Z',
- id: '1',
- unread: false,
- pending: false,
- }),
- normalizeChatMessage({
- account_id: '2',
- chat_id: '14',
- content: 'this is the second chat',
- created_at: '2022-09-09T16:04:26.186Z',
- id: '2',
- unread: true,
- pending: false,
- }),
-];
-
-// Mock scrollIntoView function.
-window.HTMLElement.prototype.scrollIntoView = () => { };
-Object.assign(navigator, {
- clipboard: {
- writeText: () => { },
- },
-});
-
-const store = {
- ...rootState,
- me: '1',
- instance: buildInstance({ version: '3.4.1 (compatible; TruthSocial 1.0.0+unreleased)' }),
-};
-
-const renderComponentWithChatContext = () => render(
-
-
-
-
- ,
- store,
-);
-
-beforeEach(() => {
- queryClient.clear();
-});
-
-describe(' ', () => {
- describe('when the query is loading', () => {
- beforeEach(() => {
- __stub((mock) => {
- mock.onGet(`/api/v1/pleroma/chats/${chat.id}/messages`).reply(200, chatMessages, {
- link: null,
- });
- });
- });
-
- it('displays the skeleton loader', async () => {
- renderComponentWithChatContext();
-
- expect(screen.queryAllByTestId('placeholder-chat-message')).toHaveLength(5);
-
- await waitFor(() => {
- expect(screen.getByTestId('chat-message-list-intro')).toBeInTheDocument();
- expect(screen.queryAllByTestId('placeholder-chat-message')).toHaveLength(0);
- });
- });
- });
-
- describe('when the query is finished loading', () => {
- beforeEach(() => {
- __stub((mock) => {
- mock.onGet(`/api/v1/pleroma/chats/${chat.id}/messages`).reply(200, chatMessages, {
- link: null,
- });
- });
- });
-
- it('displays the intro', async () => {
- renderComponentWithChatContext();
-
- expect(screen.queryAllByTestId('chat-message-list-intro')).toHaveLength(0);
-
- await waitFor(() => {
- expect(screen.getByTestId('chat-message-list-intro')).toBeInTheDocument();
- });
- });
-
- it('displays the messages', async () => {
- renderComponentWithChatContext();
-
- expect(screen.queryAllByTestId('chat-message')).toHaveLength(0);
-
- await waitFor(() => {
- expect(screen.queryAllByTestId('chat-message')).toHaveLength(chatMessages.length);
- });
- });
-
- it('displays the correct menu options depending on the owner of the message', async () => {
- renderComponentWithChatContext();
-
- await waitFor(() => {
- expect(screen.queryAllByTestId('chat-message-menu')).toHaveLength(2);
- });
-
- // my message
- await userEvent.click(screen.queryAllByTestId('chat-message-menu')[0].querySelector('button') as any);
-
- // other user message
- await userEvent.click(screen.queryAllByTestId('chat-message-menu')[1].querySelector('button') as any);
- });
- });
-});
diff --git a/packages/pl-fe/src/features/chats/components/chat-pane-header.test.tsx b/packages/pl-fe/src/features/chats/components/chat-pane-header.test.tsx
deleted file mode 100644
index 94dc1c046..000000000
--- a/packages/pl-fe/src/features/chats/components/chat-pane-header.test.tsx
+++ /dev/null
@@ -1,84 +0,0 @@
-import userEvent from '@testing-library/user-event';
-import React from 'react';
-
-import { render, screen } from '@/jest/test-helpers';
-
-import ChatPaneHeader from './chat-widget/chat-pane-header';
-
-describe(' ', () => {
- it('handles the onToggle prop', async () => {
- const mockFn = vi.fn();
- render( );
-
- await userEvent.click(screen.getByTestId('icon-button'));
- expect(mockFn).toHaveBeenCalled();
- });
-
- describe('the "title" prop', () => {
- describe('when it is a string', () => {
- it('renders the title', () => {
- const title = 'Messages';
- render( );
-
- expect(screen.getByTestId('title')).toHaveTextContent(title);
- });
- });
-
- describe('when it is a node', () => {
- it('renders the title', () => {
- const title = (
-
- );
- render( );
-
- expect(screen.getByTestId('title')).toHaveTextContent('hello world');
- });
- });
- });
-
- describe('the "unreadCount" prop', () => {
- describe('when present', () => {
- it('renders the unread count', () => {
- const count = 14;
- render( );
-
- expect(screen.getByTestId('unread-count')).toHaveTextContent(String(count));
- });
- });
-
- describe('when 0', () => {
- it('does not render the unread count', () => {
- const count = 0;
- render( );
-
- expect(screen.queryAllByTestId('unread-count')).toHaveLength(0);
- });
- });
-
- describe('when unprovided', () => {
- it('does not render the unread count', () => {
- render( );
-
- expect(screen.queryAllByTestId('unread-count')).toHaveLength(0);
- });
- });
- });
-
- describe('secondaryAction prop', () => {
- it('handles the secondaryAction callback', async () => {
- const mockFn = vi.fn();
- render(
- ,
- );
-
- await userEvent.click(screen.queryAllByTestId('icon-button')[0]);
- expect(mockFn).toBeCalled();
- });
- });
-});
diff --git a/packages/pl-fe/src/features/chats/components/chat-pane/chat-pane.test.tsx b/packages/pl-fe/src/features/chats/components/chat-pane/chat-pane.test.tsx
deleted file mode 100644
index 430b24ffd..000000000
--- a/packages/pl-fe/src/features/chats/components/chat-pane/chat-pane.test.tsx
+++ /dev/null
@@ -1,60 +0,0 @@
-import React from 'react';
-
-import { __stub } from '@/api';
-import { ChatContext } from '@/contexts/chat-context';
-import { StatProvider } from '@/contexts/stat-context';
-import chats from '@/jest/fixtures/chats.json';
-import { render, screen, waitFor } from '@/jest/test-helpers';
-
-import ChatPane from './chat-pane';
-
-const renderComponentWithChatContext = (store = {}) => render(
-
-
-
-
- ,
- undefined,
- store,
-);
-
-describe(' ', () => {
- // describe('when there are no chats', () => {
- // let store: ReturnType;
-
- // beforeEach(() => {
- // const state = rootState.setIn(['instance', 'version'], '2.7.2 (compatible; Pleroma 2.2.0)');
- // store = mockStore(state);
-
- // __stub((mock) => {
- // mock.onGet('/api/v1/pleroma/chats').reply(200, [], {
- // link: null,
- // });
- // });
- // });
-
- // it('renders the blankslate', async () => {
- // renderComponentWithChatContext(store);
-
- // await waitFor(() => {
- // expect(screen.getByTestId('chat-pane-blankslate')).toBeInTheDocument();
- // });
- // });
- // });
-
- beforeEach(() => {
- __stub((mock) => {
- mock.onGet('/api/v1/pleroma/chats').reply(200, chats, {
- link: '; rel=\'prev\'',
- });
- });
- });
-
- it('does not render the search input', async () => {
- renderComponentWithChatContext();
-
- await waitFor(() => {
- expect(screen.queryAllByTestId('chat-search-input')).toHaveLength(0);
- });
- });
-});
diff --git a/packages/pl-fe/src/features/chats/components/chat-search/chat-search.test.tsx b/packages/pl-fe/src/features/chats/components/chat-search/chat-search.test.tsx
deleted file mode 100644
index f217398f2..000000000
--- a/packages/pl-fe/src/features/chats/components/chat-search/chat-search.test.tsx
+++ /dev/null
@@ -1,66 +0,0 @@
-import userEvent from '@testing-library/user-event';
-import React from 'react';
-
-import { __stub } from '@/api';
-import { ChatProvider } from '@/contexts/chat-context';
-import { render, screen, waitFor } from '@/jest/test-helpers';
-
-import ChatSearch from './chat-search';
-
-const renderComponent = () => render(
-
-
- ,
-);
-
-describe(' ', () => {
- beforeEach(async() => {
- renderComponent();
- });
-
- it('renders the search input', () => {
- expect(screen.getByTestId('search')).toBeInTheDocument();
- });
-
- describe('when searching', () => {
- describe('with results', () => {
- beforeEach(() => {
- __stub((mock) => {
- mock.onGet('/api/v1/accounts/search').reply(200, [{
- id: '1',
- avatar: 'url',
- verified: false,
- display_name: 'steve',
- acct: 'sjobs',
- }]);
- });
- });
-
- it('renders accounts', async() => {
- const user = userEvent.setup();
- await user.type(screen.getByTestId('search'), 'ste');
-
- await waitFor(() => {
- expect(screen.queryAllByTestId('account')).toHaveLength(1);
- });
- });
- });
-
- describe('without results', () => {
- beforeEach(() => {
- __stub((mock) => {
- mock.onGet('/api/v1/accounts/search').reply(200, []);
- });
- });
-
- it('renders accounts', async() => {
- const user = userEvent.setup();
- await user.type(screen.getByTestId('search'), 'ste');
-
- await waitFor(() => {
- expect(screen.getByTestId('no-results')).toBeInTheDocument();
- });
- });
- });
- });
-});
diff --git a/packages/pl-fe/src/features/chats/components/chat-widget.test.tsx b/packages/pl-fe/src/features/chats/components/chat-widget.test.tsx
deleted file mode 100644
index f7bfb8477..000000000
--- a/packages/pl-fe/src/features/chats/components/chat-widget.test.tsx
+++ /dev/null
@@ -1,100 +0,0 @@
-import React from 'react';
-import { Route, Switch } from 'react-router-dom';
-
-import { buildAccount } from '@/jest/factory';
-import { render, rootState } from '@/jest/test-helpers';
-
-import ChatWidget from './chat-widget/chat-widget';
-
-const id = '1';
-const account = buildAccount({
- id,
- acct: 'justin-username',
- display_name: 'Justin L',
- avatar: 'test.jpg',
-});
-
-const store = {
- ...rootState,
- me: id,
- entities: {
- 'ACCOUNTS': {
- store: {
- [id]: account,
- },
- lists: {},
- },
- },
-};
-
-describe(' ', () => {
- describe('when on the /chats endpoint', () => {
- it('hides the widget', async () => {
- const App = () => (
-
- Chats page
- Homepage
-
- );
-
- const screen = render(
- ,
- {},
- store,
- { initialEntries: ['/chats'] },
- );
-
- expect(screen.queryAllByTestId('pane')).toHaveLength(0);
- });
- });
-
- // describe('when the user has not onboarded chats', () => {
- // it('hides the widget', async () => {
- // const accountWithoutChats = buildAccount({
- // id,
- // acct: 'justin-username',
- // display_name: 'Justin L',
- // avatar: 'test.jpg',
- // source: {
- // chats_onboarded: false,
- // },
- // });
- // const newStore = store.set('entities', {
- // 'ACCOUNTS': {
- // store: {
- // [id]: accountWithoutChats,
- // },
- // lists: {},
- // },
- // });
-
- // const screen = render(
- // ,
- // {},
- // newStore,
- // );
-
- // expect(screen.queryAllByTestId('pane')).toHaveLength(0);
- // });
- // });
-
- describe('when the user is onboarded and the endpoint is not /chats', () => {
- it('shows the widget', async () => {
- const App = () => (
-
- Chats page
- Homepage
-
- );
-
- const screen = render(
- ,
- {},
- store,
- { initialEntries: ['/'] },
- );
-
- expect(screen.queryAllByTestId('pane')).toHaveLength(1);
- });
- });
-});
diff --git a/packages/pl-fe/src/features/compose/components/polls/duration-selector.test.tsx b/packages/pl-fe/src/features/compose/components/polls/duration-selector.test.tsx
deleted file mode 100644
index 37c4b8a94..000000000
--- a/packages/pl-fe/src/features/compose/components/polls/duration-selector.test.tsx
+++ /dev/null
@@ -1,78 +0,0 @@
-import userEvent from '@testing-library/user-event';
-import React from 'react';
-
-import { render, screen } from '@/jest/test-helpers';
-
-import DurationSelector from './duration-selector';
-
-describe(' ', () => {
- it('defaults to 2 days', () => {
- const handler = vi.fn();
- render( );
-
- expect(screen.getByTestId('duration-selector-days')).toHaveValue('2');
- expect(screen.getByTestId('duration-selector-hours')).toHaveValue('0');
- expect(screen.getByTestId('duration-selector-minutes')).toHaveValue('0');
- });
-
- describe('when changing the day', () => {
- it('calls the "onDurationChange" callback', async() => {
- const handler = vi.fn();
- render( );
-
- await userEvent.selectOptions(
- screen.getByTestId('duration-selector-days'),
- screen.getByRole('option', { name: '1 day' }),
- );
-
- expect(handler.mock.calls[0][0]).toEqual(172800); // 2 days
- expect(handler.mock.calls[1][0]).toEqual(86400); // 1 day
- });
-
- it('should disable the hour/minute select if 7 days selected', async() => {
- const handler = vi.fn();
- render( );
-
- expect(screen.getByTestId('duration-selector-hours')).not.toBeDisabled();
- expect(screen.getByTestId('duration-selector-minutes')).not.toBeDisabled();
-
- await userEvent.selectOptions(
- screen.getByTestId('duration-selector-days'),
- screen.getByRole('option', { name: '7 days' }),
- );
-
- expect(screen.getByTestId('duration-selector-hours')).toBeDisabled();
- expect(screen.getByTestId('duration-selector-minutes')).toBeDisabled();
- });
- });
-
- describe('when changing the hour', () => {
- it('calls the "onDurationChange" callback', async() => {
- const handler = vi.fn();
- render( );
-
- await userEvent.selectOptions(
- screen.getByTestId('duration-selector-hours'),
- screen.getByRole('option', { name: '1 hour' }),
- );
-
- expect(handler.mock.calls[0][0]).toEqual(172800); // 2 days
- expect(handler.mock.calls[1][0]).toEqual(176400); // 2 days, 1 hour
- });
- });
-
- describe('when changing the minute', () => {
- it('calls the "onDurationChange" callback', async() => {
- const handler = vi.fn();
- render( );
-
- await userEvent.selectOptions(
- screen.getByTestId('duration-selector-minutes'),
- screen.getByRole('option', { name: '15 minutes' }),
- );
-
- expect(handler.mock.calls[0][0]).toEqual(172800); // 2 days
- expect(handler.mock.calls[1][0]).toEqual(173700); // 2 days, 1 minute
- });
- });
-});
diff --git a/packages/pl-fe/src/features/compose/editor/utils/url.ts b/packages/pl-fe/src/features/compose/editor/utils/url.ts
index 7bc2236ba..2fe5e2b71 100644
--- a/packages/pl-fe/src/features/compose/editor/utils/url.ts
+++ b/packages/pl-fe/src/features/compose/editor/utils/url.ts
@@ -24,14 +24,3 @@ export const sanitizeUrl = (url: string): string => {
}
return url;
};
-
-// Source: https://stackoverflow.com/a/8234912/2013580
-const urlRegExp = new RegExp(
- /((([A-Za-z]{3,9}:(?:\/\/)?)(?:[-;:&=+$,\w]+@)?[A-Za-z0-9.-]+|(?:www.|[-;:&=+$,\w]+@)[A-Za-z0-9.-]+)((?:\/[+~%/.\w-_]*)?\??(?:[-+=&;%@.\w_]*)#?(?:[\w]*))?)/,
-);
-
-export const validateUrl = (url: string): boolean => {
- // TODO Fix UI for link insertion; it should never default to an invalid URL such as https://.
- // Maybe show a dialog where they user can type the URL before inserting it.
- return url === 'https://' || urlRegExp.test(url);
-};
diff --git a/packages/pl-fe/src/features/emoji/index.test.ts b/packages/pl-fe/src/features/emoji/index.test.ts
deleted file mode 100644
index 852181044..000000000
--- a/packages/pl-fe/src/features/emoji/index.test.ts
+++ /dev/null
@@ -1,1914 +0,0 @@
-import emojify from '.';
-
-describe('emoji', () => {
- describe('.emojify', () => {
- it('ignores unknown shortcodes', () => {
- expect(emojify(':foobarbazfake:')).toEqual(':foobarbazfake:');
- });
-
- it('ignores shortcodes inside of tags', () => {
- expect(emojify('
')).toEqual('
');
- });
-
- it('works with unclosed tags', () => {
- expect(emojify('hello>')).toEqual('hello>');
- expect(emojify(' {
- expect(emojify('smile:')).toEqual('smile:');
- expect(emojify(':smile')).toEqual(':smile');
- });
-
- it('does unicode', () => {
- expect(emojify('\uD83D\uDC69\u200D\uD83D\uDC69\u200D\uD83D\uDC66\u200D\uD83D\uDC66')).toEqual(
- ' ');
- expect(emojify('👨👩👧👧')).toEqual(
- ' ');
- expect(emojify('👩👩👦')).toEqual(' ');
- expect(emojify('\u2757')).toEqual(
- ' ');
- });
-
- it('does multiple unicode', () => {
- expect(emojify('\u2757 #\uFE0F\u20E3')).toEqual(
- ' ');
- expect(emojify('\u2757#\uFE0F\u20E3')).toEqual(
- ' ');
- expect(emojify('\u2757 #\uFE0F\u20E3 \u2757')).toEqual(
- ' ');
- expect(emojify('foo \u2757 #\uFE0F\u20E3 bar')).toEqual(
- 'foo bar');
- });
-
- it('ignores unicode inside of tags', () => {
- expect(emojify('
')).toEqual('
');
- });
-
- it('does multiple emoji properly (issue 5188)', () => {
- expect(emojify('👌🌈💕')).toEqual(' ');
- expect(emojify('👌 🌈 💕')).toEqual(' ');
- });
-
- it('does an emoji that has no shortcode', () => {
- expect(emojify('👁🗨')).toEqual(' ');
- });
-
- it('skips the textual presentation VS15 character', () => {
- expect(emojify('✴︎')) // This is U+2734 EIGHT POINTED BLACK STAR then U+FE0E VARIATION SELECTOR-15
- .toEqual(' ');
- });
-
- it('full v14 unicode emoji map', () => {
- expect(emojify('💯')).toEqual(' ');
- expect(emojify('🔢')).toEqual(' ');
- expect(emojify('😀')).toEqual(' ');
- expect(emojify('😃')).toEqual(' ');
- expect(emojify('😄')).toEqual(' ');
- expect(emojify('😁')).toEqual(' ');
- expect(emojify('😆')).toEqual(' ');
- expect(emojify('😅')).toEqual(' ');
- expect(emojify('🤣')).toEqual(' ');
- expect(emojify('😂')).toEqual(' ');
- expect(emojify('🙂')).toEqual(' ');
- expect(emojify('🙃')).toEqual(' ');
- expect(emojify('🫠')).toEqual(' ');
- expect(emojify('😉')).toEqual(' ');
- expect(emojify('😊')).toEqual(' ');
- expect(emojify('😇')).toEqual(' ');
- expect(emojify('🥰')).toEqual(' ');
- expect(emojify('😍')).toEqual(' ');
- expect(emojify('🤩')).toEqual(' ');
- expect(emojify('😘')).toEqual(' ');
- expect(emojify('😗')).toEqual(' ');
- expect(emojify('☺️')).toEqual(' ');
- expect(emojify('😚')).toEqual(' ');
- expect(emojify('😙')).toEqual(' ');
- expect(emojify('🥲')).toEqual(' ');
- expect(emojify('😋')).toEqual(' ');
- expect(emojify('😛')).toEqual(' ');
- expect(emojify('😜')).toEqual(' ');
- expect(emojify('🤪')).toEqual(' ');
- expect(emojify('😝')).toEqual(' ');
- expect(emojify('🤑')).toEqual(' ');
- expect(emojify('🤗')).toEqual(' ');
- expect(emojify('🤭')).toEqual(' ');
- expect(emojify('🫢')).toEqual(' ');
- expect(emojify('🫣')).toEqual(' ');
- expect(emojify('🤫')).toEqual(' ');
- expect(emojify('🤔')).toEqual(' ');
- expect(emojify('🫡')).toEqual(' ');
- expect(emojify('🤐')).toEqual(' ');
- expect(emojify('🤨')).toEqual(' ');
- expect(emojify('😐')).toEqual(' ');
- expect(emojify('😑')).toEqual(' ');
- expect(emojify('😶')).toEqual(' ');
- expect(emojify('🫥')).toEqual(' ');
- expect(emojify('😶🌫️')).toEqual(' ');
- expect(emojify('😏')).toEqual(' ');
- expect(emojify('😒')).toEqual(' ');
- expect(emojify('🙄')).toEqual(' ');
- expect(emojify('😬')).toEqual(' ');
- expect(emojify('😮💨')).toEqual(' ');
- expect(emojify('🤥')).toEqual(' ');
- expect(emojify('😌')).toEqual(' ');
- expect(emojify('😔')).toEqual(' ');
- expect(emojify('😪')).toEqual(' ');
- expect(emojify('🤤')).toEqual(' ');
- expect(emojify('😴')).toEqual(' ');
- expect(emojify('😷')).toEqual(' ');
- expect(emojify('🤒')).toEqual(' ');
- expect(emojify('🤕')).toEqual(' ');
- expect(emojify('🤢')).toEqual(' ');
- expect(emojify('🤮')).toEqual(' ');
- expect(emojify('🤧')).toEqual(' ');
- expect(emojify('🥵')).toEqual(' ');
- expect(emojify('🥶')).toEqual(' ');
- expect(emojify('🥴')).toEqual(' ');
- expect(emojify('😵')).toEqual(' ');
- expect(emojify('😵💫')).toEqual(' ');
- expect(emojify('🤯')).toEqual(' ');
- expect(emojify('🤠')).toEqual(' ');
- expect(emojify('🥳')).toEqual(' ');
- expect(emojify('🥸')).toEqual(' ');
- expect(emojify('😎')).toEqual(' ');
- expect(emojify('🤓')).toEqual(' ');
- expect(emojify('🧐')).toEqual(' ');
- expect(emojify('😕')).toEqual(' ');
- expect(emojify('🫤')).toEqual(' ');
- expect(emojify('😟')).toEqual(' ');
- expect(emojify('🙁')).toEqual(' ');
- expect(emojify('☹️')).toEqual(' ');
- expect(emojify('😮')).toEqual(' ');
- expect(emojify('😯')).toEqual(' ');
- expect(emojify('😲')).toEqual(' ');
- expect(emojify('😳')).toEqual(' ');
- expect(emojify('🥺')).toEqual(' ');
- expect(emojify('🥹')).toEqual(' ');
- expect(emojify('😦')).toEqual(' ');
- expect(emojify('😧')).toEqual(' ');
- expect(emojify('😨')).toEqual(' ');
- expect(emojify('😰')).toEqual(' ');
- expect(emojify('😥')).toEqual(' ');
- expect(emojify('😢')).toEqual(' ');
- expect(emojify('😭')).toEqual(' ');
- expect(emojify('😱')).toEqual(' ');
- expect(emojify('😖')).toEqual(' ');
- expect(emojify('😣')).toEqual(' ');
- expect(emojify('😞')).toEqual(' ');
- expect(emojify('😓')).toEqual(' ');
- expect(emojify('😩')).toEqual(' ');
- expect(emojify('😫')).toEqual(' ');
- expect(emojify('🥱')).toEqual(' ');
- expect(emojify('😤')).toEqual(' ');
- expect(emojify('😡')).toEqual(' ');
- expect(emojify('😠')).toEqual(' ');
- expect(emojify('🤬')).toEqual(' ');
- expect(emojify('😈')).toEqual(' ');
- expect(emojify('👿')).toEqual(' ');
- expect(emojify('💀')).toEqual(' ');
- expect(emojify('☠️')).toEqual(' ');
- expect(emojify('💩')).toEqual(' ');
- expect(emojify('🤡')).toEqual(' ');
- expect(emojify('👹')).toEqual(' ');
- expect(emojify('👺')).toEqual(' ');
- expect(emojify('👻')).toEqual(' ');
- expect(emojify('👽')).toEqual(' ');
- expect(emojify('👾')).toEqual(' ');
- expect(emojify('🤖')).toEqual(' ');
- expect(emojify('😺')).toEqual(' ');
- expect(emojify('😸')).toEqual(' ');
- expect(emojify('😹')).toEqual(' ');
- expect(emojify('😻')).toEqual(' ');
- expect(emojify('😼')).toEqual(' ');
- expect(emojify('😽')).toEqual(' ');
- expect(emojify('🙀')).toEqual(' ');
- expect(emojify('😿')).toEqual(' ');
- expect(emojify('😾')).toEqual(' ');
- expect(emojify('🙈')).toEqual(' ');
- expect(emojify('🙉')).toEqual(' ');
- expect(emojify('🙊')).toEqual(' ');
- expect(emojify('💋')).toEqual(' ');
- expect(emojify('💌')).toEqual(' ');
- expect(emojify('💘')).toEqual(' ');
- expect(emojify('💝')).toEqual(' ');
- expect(emojify('💖')).toEqual(' ');
- expect(emojify('💗')).toEqual(' ');
- expect(emojify('💓')).toEqual(' ');
- expect(emojify('💞')).toEqual(' ');
- expect(emojify('💕')).toEqual(' ');
- expect(emojify('💟')).toEqual(' ');
- expect(emojify('❣️')).toEqual(' ');
- expect(emojify('💔')).toEqual(' ');
- expect(emojify('❤️🔥')).toEqual(' ');
- expect(emojify('❤️🩹')).toEqual(' ');
- expect(emojify('❤️')).toEqual(' ');
- expect(emojify('🧡')).toEqual(' ');
- expect(emojify('💛')).toEqual(' ');
- expect(emojify('💚')).toEqual(' ');
- expect(emojify('💙')).toEqual(' ');
- expect(emojify('💜')).toEqual(' ');
- expect(emojify('🤎')).toEqual(' ');
- expect(emojify('🖤')).toEqual(' ');
- expect(emojify('🤍')).toEqual(' ');
- expect(emojify('💢')).toEqual(' ');
- expect(emojify('💥')).toEqual(' ');
- expect(emojify('💫')).toEqual(' ');
- expect(emojify('💦')).toEqual(' ');
- expect(emojify('💨')).toEqual(' ');
- expect(emojify('🕳️')).toEqual(' ');
- expect(emojify('💣')).toEqual(' ');
- expect(emojify('💬')).toEqual(' ');
- expect(emojify('👁️🗨️')).toEqual(' ');
- expect(emojify('🗨️')).toEqual(' ');
- expect(emojify('🗯️')).toEqual(' ');
- expect(emojify('💭')).toEqual(' ');
- expect(emojify('💤')).toEqual(' ');
- expect(emojify('👋')).toEqual(' ');
- expect(emojify('🤚')).toEqual(' ');
- expect(emojify('🖐️')).toEqual(' ');
- expect(emojify('✋')).toEqual(' ');
- expect(emojify('🖖')).toEqual(' ');
- expect(emojify('🫱')).toEqual(' ');
- expect(emojify('🫲')).toEqual(' ');
- expect(emojify('🫳')).toEqual(' ');
- expect(emojify('🫴')).toEqual(' ');
- expect(emojify('👌')).toEqual(' ');
- expect(emojify('🤌')).toEqual(' ');
- expect(emojify('🤏')).toEqual(' ');
- expect(emojify('✌️')).toEqual(' ');
- expect(emojify('🤞')).toEqual(' ');
- expect(emojify('🫰')).toEqual(' ');
- expect(emojify('🤟')).toEqual(' ');
- expect(emojify('🤘')).toEqual(' ');
- expect(emojify('🤙')).toEqual(' ');
- expect(emojify('👈')).toEqual(' ');
- expect(emojify('👉')).toEqual(' ');
- expect(emojify('👆')).toEqual(' ');
- expect(emojify('🖕')).toEqual(' ');
- expect(emojify('👇')).toEqual(' ');
- expect(emojify('☝️')).toEqual(' ');
- expect(emojify('🫵')).toEqual(' ');
- expect(emojify('👍')).toEqual(' ');
- expect(emojify('👎')).toEqual(' ');
- expect(emojify('✊')).toEqual(' ');
- expect(emojify('👊')).toEqual(' ');
- expect(emojify('🤛')).toEqual(' ');
- expect(emojify('🤜')).toEqual(' ');
- expect(emojify('👏')).toEqual(' ');
- expect(emojify('🙌')).toEqual(' ');
- expect(emojify('🫶')).toEqual(' ');
- expect(emojify('👐')).toEqual(' ');
- expect(emojify('🤲')).toEqual(' ');
- expect(emojify('🤝')).toEqual(' ');
- expect(emojify('🙏')).toEqual(' ');
- expect(emojify('✍️')).toEqual(' ');
- expect(emojify('💅')).toEqual(' ');
- expect(emojify('🤳')).toEqual(' ');
- expect(emojify('💪')).toEqual(' ');
- expect(emojify('🦾')).toEqual(' ');
- expect(emojify('🦿')).toEqual(' ');
- expect(emojify('🦵')).toEqual(' ');
- expect(emojify('🦶')).toEqual(' ');
- expect(emojify('👂')).toEqual(' ');
- expect(emojify('🦻')).toEqual(' ');
- expect(emojify('👃')).toEqual(' ');
- expect(emojify('🧠')).toEqual(' ');
- expect(emojify('🫀')).toEqual(' ');
- expect(emojify('🫁')).toEqual(' ');
- expect(emojify('🦷')).toEqual(' ');
- expect(emojify('🦴')).toEqual(' ');
- expect(emojify('👀')).toEqual(' ');
- expect(emojify('👁️')).toEqual(' ');
- expect(emojify('👅')).toEqual(' ');
- expect(emojify('👄')).toEqual(' ');
- expect(emojify('🫦')).toEqual(' ');
- expect(emojify('👶')).toEqual(' ');
- expect(emojify('🧒')).toEqual(' ');
- expect(emojify('👦')).toEqual(' ');
- expect(emojify('👧')).toEqual(' ');
- expect(emojify('🧑')).toEqual(' ');
- expect(emojify('👱')).toEqual(' ');
- expect(emojify('👨')).toEqual(' ');
- expect(emojify('🧔')).toEqual(' ');
- expect(emojify('🧔♂️')).toEqual(' ');
- expect(emojify('🧔♀️')).toEqual(' ');
- expect(emojify('👨🦰')).toEqual(' ');
- expect(emojify('👨🦱')).toEqual(' ');
- expect(emojify('👨🦳')).toEqual(' ');
- expect(emojify('👨🦲')).toEqual(' ');
- expect(emojify('👩')).toEqual(' ');
- expect(emojify('👩🦰')).toEqual(' ');
- expect(emojify('🧑🦰')).toEqual(' ');
- expect(emojify('👩🦱')).toEqual(' ');
- expect(emojify('🧑🦱')).toEqual(' ');
- expect(emojify('👩🦳')).toEqual(' ');
- expect(emojify('🧑🦳')).toEqual(' ');
- expect(emojify('👩🦲')).toEqual(' ');
- expect(emojify('🧑🦲')).toEqual(' ');
- expect(emojify('👱♀️')).toEqual(' ');
- expect(emojify('👱♂️')).toEqual(' ');
- expect(emojify('🧓')).toEqual(' ');
- expect(emojify('👴')).toEqual(' ');
- expect(emojify('👵')).toEqual(' ');
- expect(emojify('🙍')).toEqual(' ');
- expect(emojify('🙍♂️')).toEqual(' ');
- expect(emojify('🙍♀️')).toEqual(' ');
- expect(emojify('🙎')).toEqual(' ');
- expect(emojify('🙎♂️')).toEqual(' ');
- expect(emojify('🙎♀️')).toEqual(' ');
- expect(emojify('🙅')).toEqual(' ');
- expect(emojify('🙅♂️')).toEqual(' ');
- expect(emojify('🙅♀️')).toEqual(' ');
- expect(emojify('🙆')).toEqual(' ');
- expect(emojify('🙆♂️')).toEqual(' ');
- expect(emojify('🙆♀️')).toEqual(' ');
- expect(emojify('💁')).toEqual(' ');
- expect(emojify('💁♂️')).toEqual(' ');
- expect(emojify('💁♀️')).toEqual(' ');
- expect(emojify('🙋')).toEqual(' ');
- expect(emojify('🙋♂️')).toEqual(' ');
- expect(emojify('🙋♀️')).toEqual(' ');
- expect(emojify('🧏')).toEqual(' ');
- expect(emojify('🧏♂️')).toEqual(' ');
- expect(emojify('🧏♀️')).toEqual(' ');
- expect(emojify('🙇')).toEqual(' ');
- expect(emojify('🙇♂️')).toEqual(' ');
- expect(emojify('🙇♀️')).toEqual(' ');
- expect(emojify('🤦')).toEqual(' ');
- expect(emojify('🤦♂️')).toEqual(' ');
- expect(emojify('🤦♀️')).toEqual(' ');
- expect(emojify('🤷')).toEqual(' ');
- expect(emojify('🤷♂️')).toEqual(' ');
- expect(emojify('🤷♀️')).toEqual(' ');
- expect(emojify('🧑⚕️')).toEqual(' ');
- expect(emojify('👨⚕️')).toEqual(' ');
- expect(emojify('👩⚕️')).toEqual(' ');
- expect(emojify('🧑🎓')).toEqual(' ');
- expect(emojify('👨🎓')).toEqual(' ');
- expect(emojify('👩🎓')).toEqual(' ');
- expect(emojify('🧑🏫')).toEqual(' ');
- expect(emojify('👨🏫')).toEqual(' ');
- expect(emojify('👩🏫')).toEqual(' ');
- expect(emojify('🧑⚖️')).toEqual(' ');
- expect(emojify('👨⚖️')).toEqual(' ');
- expect(emojify('👩⚖️')).toEqual(' ');
- expect(emojify('🧑🌾')).toEqual(' ');
- expect(emojify('👨🌾')).toEqual(' ');
- expect(emojify('👩🌾')).toEqual(' ');
- expect(emojify('🧑🍳')).toEqual(' ');
- expect(emojify('👨🍳')).toEqual(' ');
- expect(emojify('👩🍳')).toEqual(' ');
- expect(emojify('🧑🔧')).toEqual(' ');
- expect(emojify('👨🔧')).toEqual(' ');
- expect(emojify('👩🔧')).toEqual(' ');
- expect(emojify('🧑🏭')).toEqual(' ');
- expect(emojify('👨🏭')).toEqual(' ');
- expect(emojify('👩🏭')).toEqual(' ');
- expect(emojify('🧑💼')).toEqual(' ');
- expect(emojify('👨💼')).toEqual(' ');
- expect(emojify('👩💼')).toEqual(' ');
- expect(emojify('🧑🔬')).toEqual(' ');
- expect(emojify('👨🔬')).toEqual(' ');
- expect(emojify('👩🔬')).toEqual(' ');
- expect(emojify('🧑💻')).toEqual(' ');
- expect(emojify('👨💻')).toEqual(' ');
- expect(emojify('👩💻')).toEqual(' ');
- expect(emojify('🧑🎤')).toEqual(' ');
- expect(emojify('👨🎤')).toEqual(' ');
- expect(emojify('👩🎤')).toEqual(' ');
- expect(emojify('🧑🎨')).toEqual(' ');
- expect(emojify('👨🎨')).toEqual(' ');
- expect(emojify('👩🎨')).toEqual(' ');
- expect(emojify('🧑✈️')).toEqual(' ');
- expect(emojify('👨✈️')).toEqual(' ');
- expect(emojify('👩✈️')).toEqual(' ');
- expect(emojify('🧑🚀')).toEqual(' ');
- expect(emojify('👨🚀')).toEqual(' ');
- expect(emojify('👩🚀')).toEqual(' ');
- expect(emojify('🧑🚒')).toEqual(' ');
- expect(emojify('👨🚒')).toEqual(' ');
- expect(emojify('👩🚒')).toEqual(' ');
- expect(emojify('👮')).toEqual(' ');
- expect(emojify('👮♂️')).toEqual(' ');
- expect(emojify('👮♀️')).toEqual(' ');
- expect(emojify('🕵️')).toEqual(' ');
- expect(emojify('🕵️♂️')).toEqual(' ');
- expect(emojify('🕵️♀️')).toEqual(' ');
- expect(emojify('💂')).toEqual(' ');
- expect(emojify('💂♂️')).toEqual(' ');
- expect(emojify('💂♀️')).toEqual(' ');
- expect(emojify('🥷')).toEqual(' ');
- expect(emojify('👷')).toEqual(' ');
- expect(emojify('👷♂️')).toEqual(' ');
- expect(emojify('👷♀️')).toEqual(' ');
- expect(emojify('🫅')).toEqual(' ');
- expect(emojify('🤴')).toEqual(' ');
- expect(emojify('👸')).toEqual(' ');
- expect(emojify('👳')).toEqual(' ');
- expect(emojify('👳♂️')).toEqual(' ');
- expect(emojify('👳♀️')).toEqual(' ');
- expect(emojify('👲')).toEqual(' ');
- expect(emojify('🧕')).toEqual(' ');
- expect(emojify('🤵')).toEqual(' ');
- expect(emojify('🤵♂️')).toEqual(' ');
- expect(emojify('🤵♀️')).toEqual(' ');
- expect(emojify('👰')).toEqual(' ');
- expect(emojify('👰♂️')).toEqual(' ');
- expect(emojify('👰♀️')).toEqual(' ');
- expect(emojify('🤰')).toEqual(' ');
- expect(emojify('🫃')).toEqual(' ');
- expect(emojify('🫄')).toEqual(' ');
- expect(emojify('🤱')).toEqual(' ');
- expect(emojify('👩🍼')).toEqual(' ');
- expect(emojify('👨🍼')).toEqual(' ');
- expect(emojify('🧑🍼')).toEqual(' ');
- expect(emojify('👼')).toEqual(' ');
- expect(emojify('🎅')).toEqual(' ');
- expect(emojify('🤶')).toEqual(' ');
- expect(emojify('🧑🎄')).toEqual(' ');
- expect(emojify('🦸')).toEqual(' ');
- expect(emojify('🦸♂️')).toEqual(' ');
- expect(emojify('🦸♀️')).toEqual(' ');
- expect(emojify('🦹')).toEqual(' ');
- expect(emojify('🦹♂️')).toEqual(' ');
- expect(emojify('🦹♀️')).toEqual(' ');
- expect(emojify('🧙')).toEqual(' ');
- expect(emojify('🧙♂️')).toEqual(' ');
- expect(emojify('🧙♀️')).toEqual(' ');
- expect(emojify('🧚')).toEqual(' ');
- expect(emojify('🧚♂️')).toEqual(' ');
- expect(emojify('🧚♀️')).toEqual(' ');
- expect(emojify('🧛')).toEqual(' ');
- expect(emojify('🧛♂️')).toEqual(' ');
- expect(emojify('🧛♀️')).toEqual(' ');
- expect(emojify('🧜')).toEqual(' ');
- expect(emojify('🧜♂️')).toEqual(' ');
- expect(emojify('🧜♀️')).toEqual(' ');
- expect(emojify('🧝')).toEqual(' ');
- expect(emojify('🧝♂️')).toEqual(' ');
- expect(emojify('🧝♀️')).toEqual(' ');
- expect(emojify('🧞')).toEqual(' ');
- expect(emojify('🧞♂️')).toEqual(' ');
- expect(emojify('🧞♀️')).toEqual(' ');
- expect(emojify('🧟')).toEqual(' ');
- expect(emojify('🧟♂️')).toEqual(' ');
- expect(emojify('🧟♀️')).toEqual(' ');
- expect(emojify('🧌')).toEqual(' ');
- expect(emojify('💆')).toEqual(' ');
- expect(emojify('💆♂️')).toEqual(' ');
- expect(emojify('💆♀️')).toEqual(' ');
- expect(emojify('💇')).toEqual(' ');
- expect(emojify('💇♂️')).toEqual(' ');
- expect(emojify('💇♀️')).toEqual(' ');
- expect(emojify('🚶')).toEqual(' ');
- expect(emojify('🚶♂️')).toEqual(' ');
- expect(emojify('🚶♀️')).toEqual(' ');
- expect(emojify('🧍')).toEqual(' ');
- expect(emojify('🧍♂️')).toEqual(' ');
- expect(emojify('🧍♀️')).toEqual(' ');
- expect(emojify('🧎')).toEqual(' ');
- expect(emojify('🧎♂️')).toEqual(' ');
- expect(emojify('🧎♀️')).toEqual(' ');
- expect(emojify('🧑🦯')).toEqual(' ');
- expect(emojify('👨🦯')).toEqual(' ');
- expect(emojify('👩🦯')).toEqual(' ');
- expect(emojify('🧑🦼')).toEqual(' ');
- expect(emojify('👨🦼')).toEqual(' ');
- expect(emojify('👩🦼')).toEqual(' ');
- expect(emojify('🧑🦽')).toEqual(' ');
- expect(emojify('👨🦽')).toEqual(' ');
- expect(emojify('👩🦽')).toEqual(' ');
- expect(emojify('🏃')).toEqual(' ');
- expect(emojify('🏃♂️')).toEqual(' ');
- expect(emojify('🏃♀️')).toEqual(' ');
- expect(emojify('💃')).toEqual(' ');
- expect(emojify('🕺')).toEqual(' ');
- expect(emojify('🕴️')).toEqual(' ');
- expect(emojify('👯')).toEqual(' ');
- expect(emojify('👯♂️')).toEqual(' ');
- expect(emojify('👯♀️')).toEqual(' ');
- expect(emojify('🧖')).toEqual(' ');
- expect(emojify('🧖♂️')).toEqual(' ');
- expect(emojify('🧖♀️')).toEqual(' ');
- expect(emojify('🧗')).toEqual(' ');
- expect(emojify('🧗♂️')).toEqual(' ');
- expect(emojify('🧗♀️')).toEqual(' ');
- expect(emojify('🤺')).toEqual(' ');
- expect(emojify('🏇')).toEqual(' ');
- expect(emojify('⛷️')).toEqual(' ');
- expect(emojify('🏂')).toEqual(' ');
- expect(emojify('🏌️')).toEqual(' ');
- expect(emojify('🏌️♂️')).toEqual(' ');
- expect(emojify('🏌️♀️')).toEqual(' ');
- expect(emojify('🏄')).toEqual(' ');
- expect(emojify('🏄♂️')).toEqual(' ');
- expect(emojify('🏄♀️')).toEqual(' ');
- expect(emojify('🚣')).toEqual(' ');
- expect(emojify('🚣♂️')).toEqual(' ');
- expect(emojify('🚣♀️')).toEqual(' ');
- expect(emojify('🏊')).toEqual(' ');
- expect(emojify('🏊♂️')).toEqual(' ');
- expect(emojify('🏊♀️')).toEqual(' ');
- expect(emojify('⛹️')).toEqual(' ');
- expect(emojify('⛹️♂️')).toEqual(' ');
- expect(emojify('⛹️♀️')).toEqual(' ');
- expect(emojify('🏋️')).toEqual(' ');
- expect(emojify('🏋️♂️')).toEqual(' ');
- expect(emojify('🏋️♀️')).toEqual(' ');
- expect(emojify('🚴')).toEqual(' ');
- expect(emojify('🚴♂️')).toEqual(' ');
- expect(emojify('🚴♀️')).toEqual(' ');
- expect(emojify('🚵')).toEqual(' ');
- expect(emojify('🚵♂️')).toEqual(' ');
- expect(emojify('🚵♀️')).toEqual(' ');
- expect(emojify('🤸')).toEqual(' ');
- expect(emojify('🤸♂️')).toEqual(' ');
- expect(emojify('🤸♀️')).toEqual(' ');
- expect(emojify('🤼')).toEqual(' ');
- expect(emojify('🤼♂️')).toEqual(' ');
- expect(emojify('🤼♀️')).toEqual(' ');
- expect(emojify('🤽')).toEqual(' ');
- expect(emojify('🤽♂️')).toEqual(' ');
- expect(emojify('🤽♀️')).toEqual(' ');
- expect(emojify('🤾')).toEqual(' ');
- expect(emojify('🤾♂️')).toEqual(' ');
- expect(emojify('🤾♀️')).toEqual(' ');
- expect(emojify('🤹')).toEqual(' ');
- expect(emojify('🤹♂️')).toEqual(' ');
- expect(emojify('🤹♀️')).toEqual(' ');
- expect(emojify('🧘')).toEqual(' ');
- expect(emojify('🧘♂️')).toEqual(' ');
- expect(emojify('🧘♀️')).toEqual(' ');
- expect(emojify('🛀')).toEqual(' ');
- expect(emojify('🛌')).toEqual(' ');
- expect(emojify('🧑🤝🧑')).toEqual(' ');
- expect(emojify('👭')).toEqual(' ');
- expect(emojify('👫')).toEqual(' ');
- expect(emojify('👬')).toEqual(' ');
- expect(emojify('💏')).toEqual(' ');
- expect(emojify('👩❤️💋👨')).toEqual(' ');
- expect(emojify('👨❤️💋👨')).toEqual(' ');
- expect(emojify('👩❤️💋👩')).toEqual(' ');
- expect(emojify('💑')).toEqual(' ');
- expect(emojify('👩❤️👨')).toEqual(' ');
- expect(emojify('👨❤️👨')).toEqual(' ');
- expect(emojify('👩❤️👩')).toEqual(' ');
- expect(emojify('👪')).toEqual(' ');
- expect(emojify('👨👩👦')).toEqual(' ');
- expect(emojify('👨👩👧')).toEqual(' ');
- expect(emojify('👨👩👧👦')).toEqual(' ');
- expect(emojify('👨👩👦👦')).toEqual(' ');
- expect(emojify('👨👩👧👧')).toEqual(' ');
- expect(emojify('👨👨👦')).toEqual(' ');
- expect(emojify('👨👨👧')).toEqual(' ');
- expect(emojify('👨👨👧👦')).toEqual(' ');
- expect(emojify('👨👨👦👦')).toEqual(' ');
- expect(emojify('👨👨👧👧')).toEqual(' ');
- expect(emojify('👩👩👦')).toEqual(' ');
- expect(emojify('👩👩👧')).toEqual(' ');
- expect(emojify('👩👩👧👦')).toEqual(' ');
- expect(emojify('👩👩👦👦')).toEqual(' ');
- expect(emojify('👩👩👧👧')).toEqual(' ');
- expect(emojify('👨👦')).toEqual(' ');
- expect(emojify('👨👦👦')).toEqual(' ');
- expect(emojify('👨👧')).toEqual(' ');
- expect(emojify('👨👧👦')).toEqual(' ');
- expect(emojify('👨👧👧')).toEqual(' ');
- expect(emojify('👩👦')).toEqual(' ');
- expect(emojify('👩👦👦')).toEqual(' ');
- expect(emojify('👩👧')).toEqual(' ');
- expect(emojify('👩👧👦')).toEqual(' ');
- expect(emojify('👩👧👧')).toEqual(' ');
- expect(emojify('🗣️')).toEqual(' ');
- expect(emojify('👤')).toEqual(' ');
- expect(emojify('👥')).toEqual(' ');
- expect(emojify('🫂')).toEqual(' ');
- expect(emojify('👣')).toEqual(' ');
- expect(emojify('🐵')).toEqual(' ');
- expect(emojify('🐒')).toEqual(' ');
- expect(emojify('🦍')).toEqual(' ');
- expect(emojify('🦧')).toEqual(' ');
- expect(emojify('🐶')).toEqual(' ');
- expect(emojify('🐕')).toEqual(' ');
- expect(emojify('🦮')).toEqual(' ');
- expect(emojify('🐕🦺')).toEqual(' ');
- expect(emojify('🐩')).toEqual(' ');
- expect(emojify('🐺')).toEqual(' ');
- expect(emojify('🦊')).toEqual(' ');
- expect(emojify('🦝')).toEqual(' ');
- expect(emojify('🐱')).toEqual(' ');
- expect(emojify('🐈')).toEqual(' ');
- expect(emojify('🐈⬛')).toEqual(' ');
- expect(emojify('🦁')).toEqual(' ');
- expect(emojify('🐯')).toEqual(' ');
- expect(emojify('🐅')).toEqual(' ');
- expect(emojify('🐆')).toEqual(' ');
- expect(emojify('🐴')).toEqual(' ');
- expect(emojify('🐎')).toEqual(' ');
- expect(emojify('🦄')).toEqual(' ');
- expect(emojify('🦓')).toEqual(' ');
- expect(emojify('🦌')).toEqual(' ');
- expect(emojify('🦬')).toEqual(' ');
- expect(emojify('🐮')).toEqual(' ');
- expect(emojify('🐂')).toEqual(' ');
- expect(emojify('🐃')).toEqual(' ');
- expect(emojify('🐄')).toEqual(' ');
- expect(emojify('🐷')).toEqual(' ');
- expect(emojify('🐖')).toEqual(' ');
- expect(emojify('🐗')).toEqual(' ');
- expect(emojify('🐽')).toEqual(' ');
- expect(emojify('🐏')).toEqual(' ');
- expect(emojify('🐑')).toEqual(' ');
- expect(emojify('🐐')).toEqual(' ');
- expect(emojify('🐪')).toEqual(' ');
- expect(emojify('🐫')).toEqual(' ');
- expect(emojify('🦙')).toEqual(' ');
- expect(emojify('🦒')).toEqual(' ');
- expect(emojify('🐘')).toEqual(' ');
- expect(emojify('🦣')).toEqual(' ');
- expect(emojify('🦏')).toEqual(' ');
- expect(emojify('🦛')).toEqual(' ');
- expect(emojify('🐭')).toEqual(' ');
- expect(emojify('🐁')).toEqual(' ');
- expect(emojify('🐀')).toEqual(' ');
- expect(emojify('🐹')).toEqual(' ');
- expect(emojify('🐰')).toEqual(' ');
- expect(emojify('🐇')).toEqual(' ');
- expect(emojify('🐿️')).toEqual(' ');
- expect(emojify('🦫')).toEqual(' ');
- expect(emojify('🦔')).toEqual(' ');
- expect(emojify('🦇')).toEqual(' ');
- expect(emojify('🐻')).toEqual(' ');
- expect(emojify('🐻❄️')).toEqual(' ');
- expect(emojify('🐨')).toEqual(' ');
- expect(emojify('🐼')).toEqual(' ');
- expect(emojify('🦥')).toEqual(' ');
- expect(emojify('🦦')).toEqual(' ');
- expect(emojify('🦨')).toEqual(' ');
- expect(emojify('🦘')).toEqual(' ');
- expect(emojify('🦡')).toEqual(' ');
- expect(emojify('🐾')).toEqual(' ');
- expect(emojify('🦃')).toEqual(' ');
- expect(emojify('🐔')).toEqual(' ');
- expect(emojify('🐓')).toEqual(' ');
- expect(emojify('🐣')).toEqual(' ');
- expect(emojify('🐤')).toEqual(' ');
- expect(emojify('🐥')).toEqual(' ');
- expect(emojify('🐦')).toEqual(' ');
- expect(emojify('🐧')).toEqual(' ');
- expect(emojify('🕊️')).toEqual(' ');
- expect(emojify('🦅')).toEqual(' ');
- expect(emojify('🦆')).toEqual(' ');
- expect(emojify('🦢')).toEqual(' ');
- expect(emojify('🦉')).toEqual(' ');
- expect(emojify('🦤')).toEqual(' ');
- expect(emojify('🪶')).toEqual(' ');
- expect(emojify('🦩')).toEqual(' ');
- expect(emojify('🦚')).toEqual(' ');
- expect(emojify('🦜')).toEqual(' ');
- expect(emojify('🐸')).toEqual(' ');
- expect(emojify('🐊')).toEqual(' ');
- expect(emojify('🐢')).toEqual(' ');
- expect(emojify('🦎')).toEqual(' ');
- expect(emojify('🐍')).toEqual(' ');
- expect(emojify('🐲')).toEqual(' ');
- expect(emojify('🐉')).toEqual(' ');
- expect(emojify('🦕')).toEqual(' ');
- expect(emojify('🦖')).toEqual(' ');
- expect(emojify('🐳')).toEqual(' ');
- expect(emojify('🐋')).toEqual(' ');
- expect(emojify('🐬')).toEqual(' ');
- expect(emojify('🦭')).toEqual(' ');
- expect(emojify('🐟')).toEqual(' ');
- expect(emojify('🐠')).toEqual(' ');
- expect(emojify('🐡')).toEqual(' ');
- expect(emojify('🦈')).toEqual(' ');
- expect(emojify('🐙')).toEqual(' ');
- expect(emojify('🐚')).toEqual(' ');
- expect(emojify('🪸')).toEqual(' ');
- expect(emojify('🐌')).toEqual(' ');
- expect(emojify('🦋')).toEqual(' ');
- expect(emojify('🐛')).toEqual(' ');
- expect(emojify('🐜')).toEqual(' ');
- expect(emojify('🐝')).toEqual(' ');
- expect(emojify('🪲')).toEqual(' ');
- expect(emojify('🐞')).toEqual(' ');
- expect(emojify('🦗')).toEqual(' ');
- expect(emojify('🪳')).toEqual(' ');
- expect(emojify('🕷️')).toEqual(' ');
- expect(emojify('🕸️')).toEqual(' ');
- expect(emojify('🦂')).toEqual(' ');
- expect(emojify('🦟')).toEqual(' ');
- expect(emojify('🪰')).toEqual(' ');
- expect(emojify('🪱')).toEqual(' ');
- expect(emojify('🦠')).toEqual(' ');
- expect(emojify('💐')).toEqual(' ');
- expect(emojify('🌸')).toEqual(' ');
- expect(emojify('💮')).toEqual(' ');
- expect(emojify('🪷')).toEqual(' ');
- expect(emojify('🏵️')).toEqual(' ');
- expect(emojify('🌹')).toEqual(' ');
- expect(emojify('🥀')).toEqual(' ');
- expect(emojify('🌺')).toEqual(' ');
- expect(emojify('🌻')).toEqual(' ');
- expect(emojify('🌼')).toEqual(' ');
- expect(emojify('🌷')).toEqual(' ');
- expect(emojify('🌱')).toEqual(' ');
- expect(emojify('🪴')).toEqual(' ');
- expect(emojify('🌲')).toEqual(' ');
- expect(emojify('🌳')).toEqual(' ');
- expect(emojify('🌴')).toEqual(' ');
- expect(emojify('🌵')).toEqual(' ');
- expect(emojify('🌾')).toEqual(' ');
- expect(emojify('🌿')).toEqual(' ');
- expect(emojify('☘️')).toEqual(' ');
- expect(emojify('🍀')).toEqual(' ');
- expect(emojify('🍁')).toEqual(' ');
- expect(emojify('🍂')).toEqual(' ');
- expect(emojify('🍃')).toEqual(' ');
- expect(emojify('🪹')).toEqual(' ');
- expect(emojify('🪺')).toEqual(' ');
- expect(emojify('🍇')).toEqual(' ');
- expect(emojify('🍈')).toEqual(' ');
- expect(emojify('🍉')).toEqual(' ');
- expect(emojify('🍊')).toEqual(' ');
- expect(emojify('🍋')).toEqual(' ');
- expect(emojify('🍌')).toEqual(' ');
- expect(emojify('🍍')).toEqual(' ');
- expect(emojify('🥭')).toEqual(' ');
- expect(emojify('🍎')).toEqual(' ');
- expect(emojify('🍏')).toEqual(' ');
- expect(emojify('🍐')).toEqual(' ');
- expect(emojify('🍑')).toEqual(' ');
- expect(emojify('🍒')).toEqual(' ');
- expect(emojify('🍓')).toEqual(' ');
- expect(emojify('🫐')).toEqual(' ');
- expect(emojify('🥝')).toEqual(' ');
- expect(emojify('🍅')).toEqual(' ');
- expect(emojify('🫒')).toEqual(' ');
- expect(emojify('🥥')).toEqual(' ');
- expect(emojify('🥑')).toEqual(' ');
- expect(emojify('🍆')).toEqual(' ');
- expect(emojify('🥔')).toEqual(' ');
- expect(emojify('🥕')).toEqual(' ');
- expect(emojify('🌽')).toEqual(' ');
- expect(emojify('🌶️')).toEqual(' ');
- expect(emojify('🫑')).toEqual(' ');
- expect(emojify('🥒')).toEqual(' ');
- expect(emojify('🥬')).toEqual(' ');
- expect(emojify('🥦')).toEqual(' ');
- expect(emojify('🧄')).toEqual(' ');
- expect(emojify('🧅')).toEqual(' ');
- expect(emojify('🍄')).toEqual(' ');
- expect(emojify('🥜')).toEqual(' ');
- expect(emojify('🫘')).toEqual(' ');
- expect(emojify('🌰')).toEqual(' ');
- expect(emojify('🍞')).toEqual(' ');
- expect(emojify('🥐')).toEqual(' ');
- expect(emojify('🥖')).toEqual(' ');
- expect(emojify('🫓')).toEqual(' ');
- expect(emojify('🥨')).toEqual(' ');
- expect(emojify('🥯')).toEqual(' ');
- expect(emojify('🥞')).toEqual(' ');
- expect(emojify('🧇')).toEqual(' ');
- expect(emojify('🧀')).toEqual(' ');
- expect(emojify('🍖')).toEqual(' ');
- expect(emojify('🍗')).toEqual(' ');
- expect(emojify('🥩')).toEqual(' ');
- expect(emojify('🥓')).toEqual(' ');
- expect(emojify('🍔')).toEqual(' ');
- expect(emojify('🍟')).toEqual(' ');
- expect(emojify('🍕')).toEqual(' ');
- expect(emojify('🌭')).toEqual(' ');
- expect(emojify('🥪')).toEqual(' ');
- expect(emojify('🌮')).toEqual(' ');
- expect(emojify('🌯')).toEqual(' ');
- expect(emojify('🫔')).toEqual(' ');
- expect(emojify('🥙')).toEqual(' ');
- expect(emojify('🧆')).toEqual(' ');
- expect(emojify('🥚')).toEqual(' ');
- expect(emojify('🍳')).toEqual(' ');
- expect(emojify('🥘')).toEqual(' ');
- expect(emojify('🍲')).toEqual(' ');
- expect(emojify('🫕')).toEqual(' ');
- expect(emojify('🥣')).toEqual(' ');
- expect(emojify('🥗')).toEqual(' ');
- expect(emojify('🍿')).toEqual(' ');
- expect(emojify('🧈')).toEqual(' ');
- expect(emojify('🧂')).toEqual(' ');
- expect(emojify('🥫')).toEqual(' ');
- expect(emojify('🍱')).toEqual(' ');
- expect(emojify('🍘')).toEqual(' ');
- expect(emojify('🍙')).toEqual(' ');
- expect(emojify('🍚')).toEqual(' ');
- expect(emojify('🍛')).toEqual(' ');
- expect(emojify('🍜')).toEqual(' ');
- expect(emojify('🍝')).toEqual(' ');
- expect(emojify('🍠')).toEqual(' ');
- expect(emojify('🍢')).toEqual(' ');
- expect(emojify('🍣')).toEqual(' ');
- expect(emojify('🍤')).toEqual(' ');
- expect(emojify('🍥')).toEqual(' ');
- expect(emojify('🥮')).toEqual(' ');
- expect(emojify('🍡')).toEqual(' ');
- expect(emojify('🥟')).toEqual(' ');
- expect(emojify('🥠')).toEqual(' ');
- expect(emojify('🥡')).toEqual(' ');
- expect(emojify('🦀')).toEqual(' ');
- expect(emojify('🦞')).toEqual(' ');
- expect(emojify('🦐')).toEqual(' ');
- expect(emojify('🦑')).toEqual(' ');
- expect(emojify('🦪')).toEqual(' ');
- expect(emojify('🍦')).toEqual(' ');
- expect(emojify('🍧')).toEqual(' ');
- expect(emojify('🍨')).toEqual(' ');
- expect(emojify('🍩')).toEqual(' ');
- expect(emojify('🍪')).toEqual(' ');
- expect(emojify('🎂')).toEqual(' ');
- expect(emojify('🍰')).toEqual(' ');
- expect(emojify('🧁')).toEqual(' ');
- expect(emojify('🥧')).toEqual(' ');
- expect(emojify('🍫')).toEqual(' ');
- expect(emojify('🍬')).toEqual(' ');
- expect(emojify('🍭')).toEqual(' ');
- expect(emojify('🍮')).toEqual(' ');
- expect(emojify('🍯')).toEqual(' ');
- expect(emojify('🍼')).toEqual(' ');
- expect(emojify('🥛')).toEqual(' ');
- expect(emojify('☕')).toEqual(' ');
- expect(emojify('🫖')).toEqual(' ');
- expect(emojify('🍵')).toEqual(' ');
- expect(emojify('🍶')).toEqual(' ');
- expect(emojify('🍾')).toEqual(' ');
- expect(emojify('🍷')).toEqual(' ');
- expect(emojify('🍸')).toEqual(' ');
- expect(emojify('🍹')).toEqual(' ');
- expect(emojify('🍺')).toEqual(' ');
- expect(emojify('🍻')).toEqual(' ');
- expect(emojify('🥂')).toEqual(' ');
- expect(emojify('🥃')).toEqual(' ');
- expect(emojify('🫗')).toEqual(' ');
- expect(emojify('🥤')).toEqual(' ');
- expect(emojify('🧋')).toEqual(' ');
- expect(emojify('🧃')).toEqual(' ');
- expect(emojify('🧉')).toEqual(' ');
- expect(emojify('🧊')).toEqual(' ');
- expect(emojify('🥢')).toEqual(' ');
- expect(emojify('🍽️')).toEqual(' ');
- expect(emojify('🍴')).toEqual(' ');
- expect(emojify('🥄')).toEqual(' ');
- expect(emojify('🔪')).toEqual(' ');
- expect(emojify('🫙')).toEqual(' ');
- expect(emojify('🏺')).toEqual(' ');
- expect(emojify('🌍')).toEqual(' ');
- expect(emojify('🌎')).toEqual(' ');
- expect(emojify('🌏')).toEqual(' ');
- expect(emojify('🌐')).toEqual(' ');
- expect(emojify('🗺️')).toEqual(' ');
- expect(emojify('🗾')).toEqual(' ');
- expect(emojify('🧭')).toEqual(' ');
- expect(emojify('🏔️')).toEqual(' ');
- expect(emojify('⛰️')).toEqual(' ');
- expect(emojify('🌋')).toEqual(' ');
- expect(emojify('🗻')).toEqual(' ');
- expect(emojify('🏕️')).toEqual(' ');
- expect(emojify('🏖️')).toEqual(' ');
- expect(emojify('🏜️')).toEqual(' ');
- expect(emojify('🏝️')).toEqual(' ');
- expect(emojify('🏞️')).toEqual(' ');
- expect(emojify('🏟️')).toEqual(' ');
- expect(emojify('🏛️')).toEqual(' ');
- expect(emojify('🏗️')).toEqual(' ');
- expect(emojify('🧱')).toEqual(' ');
- expect(emojify('🪨')).toEqual(' ');
- expect(emojify('🪵')).toEqual(' ');
- expect(emojify('🛖')).toEqual(' ');
- expect(emojify('🏘️')).toEqual(' ');
- expect(emojify('🏚️')).toEqual(' ');
- expect(emojify('🏠')).toEqual(' ');
- expect(emojify('🏡')).toEqual(' ');
- expect(emojify('🏢')).toEqual(' ');
- expect(emojify('🏣')).toEqual(' ');
- expect(emojify('🏤')).toEqual(' ');
- expect(emojify('🏥')).toEqual(' ');
- expect(emojify('🏦')).toEqual(' ');
- expect(emojify('🏨')).toEqual(' ');
- expect(emojify('🏩')).toEqual(' ');
- expect(emojify('🏪')).toEqual(' ');
- expect(emojify('🏫')).toEqual(' ');
- expect(emojify('🏬')).toEqual(' ');
- expect(emojify('🏭')).toEqual(' ');
- expect(emojify('🏯')).toEqual(' ');
- expect(emojify('🏰')).toEqual(' ');
- expect(emojify('💒')).toEqual(' ');
- expect(emojify('🗼')).toEqual(' ');
- expect(emojify('🗽')).toEqual(' ');
- expect(emojify('⛪')).toEqual(' ');
- expect(emojify('🕌')).toEqual(' ');
- expect(emojify('🛕')).toEqual(' ');
- expect(emojify('🕍')).toEqual(' ');
- expect(emojify('⛩️')).toEqual(' ');
- expect(emojify('🕋')).toEqual(' ');
- expect(emojify('⛲')).toEqual(' ');
- expect(emojify('⛺')).toEqual(' ');
- expect(emojify('🌁')).toEqual(' ');
- expect(emojify('🌃')).toEqual(' ');
- expect(emojify('🏙️')).toEqual(' ');
- expect(emojify('🌄')).toEqual(' ');
- expect(emojify('🌅')).toEqual(' ');
- expect(emojify('🌆')).toEqual(' ');
- expect(emojify('🌇')).toEqual(' ');
- expect(emojify('🌉')).toEqual(' ');
- expect(emojify('♨️')).toEqual(' ');
- expect(emojify('🎠')).toEqual(' ');
- expect(emojify('🛝')).toEqual(' ');
- expect(emojify('🎡')).toEqual(' ');
- expect(emojify('🎢')).toEqual(' ');
- expect(emojify('💈')).toEqual(' ');
- expect(emojify('🎪')).toEqual(' ');
- expect(emojify('🚂')).toEqual(' ');
- expect(emojify('🚃')).toEqual(' ');
- expect(emojify('🚄')).toEqual(' ');
- expect(emojify('🚅')).toEqual(' ');
- expect(emojify('🚆')).toEqual(' ');
- expect(emojify('🚇')).toEqual(' ');
- expect(emojify('🚈')).toEqual(' ');
- expect(emojify('🚉')).toEqual(' ');
- expect(emojify('🚊')).toEqual(' ');
- expect(emojify('🚝')).toEqual(' ');
- expect(emojify('🚞')).toEqual(' ');
- expect(emojify('🚋')).toEqual(' ');
- expect(emojify('🚌')).toEqual(' ');
- expect(emojify('🚍')).toEqual(' ');
- expect(emojify('🚎')).toEqual(' ');
- expect(emojify('🚐')).toEqual(' ');
- expect(emojify('🚑')).toEqual(' ');
- expect(emojify('🚒')).toEqual(' ');
- expect(emojify('🚓')).toEqual(' ');
- expect(emojify('🚔')).toEqual(' ');
- expect(emojify('🚕')).toEqual(' ');
- expect(emojify('🚖')).toEqual(' ');
- expect(emojify('🚗')).toEqual(' ');
- expect(emojify('🚘')).toEqual(' ');
- expect(emojify('🚙')).toEqual(' ');
- expect(emojify('🛻')).toEqual(' ');
- expect(emojify('🚚')).toEqual(' ');
- expect(emojify('🚛')).toEqual(' ');
- expect(emojify('🚜')).toEqual(' ');
- expect(emojify('🏎️')).toEqual(' ');
- expect(emojify('🏍️')).toEqual(' ');
- expect(emojify('🛵')).toEqual(' ');
- expect(emojify('🦽')).toEqual(' ');
- expect(emojify('🦼')).toEqual(' ');
- expect(emojify('🛺')).toEqual(' ');
- expect(emojify('🚲')).toEqual(' ');
- expect(emojify('🛴')).toEqual(' ');
- expect(emojify('🛹')).toEqual(' ');
- expect(emojify('🛼')).toEqual(' ');
- expect(emojify('🚏')).toEqual(' ');
- expect(emojify('🛣️')).toEqual(' ');
- expect(emojify('🛤️')).toEqual(' ');
- expect(emojify('🛢️')).toEqual(' ');
- expect(emojify('⛽')).toEqual(' ');
- expect(emojify('🛞')).toEqual(' ');
- expect(emojify('🚨')).toEqual(' ');
- expect(emojify('🚥')).toEqual(' ');
- expect(emojify('🚦')).toEqual(' ');
- expect(emojify('🛑')).toEqual(' ');
- expect(emojify('🚧')).toEqual(' ');
- expect(emojify('⚓')).toEqual(' ');
- expect(emojify('🛟')).toEqual(' ');
- expect(emojify('⛵')).toEqual(' ');
- expect(emojify('🛶')).toEqual(' ');
- expect(emojify('🚤')).toEqual(' ');
- expect(emojify('🛳️')).toEqual(' ');
- expect(emojify('⛴️')).toEqual(' ');
- expect(emojify('🛥️')).toEqual(' ');
- expect(emojify('🚢')).toEqual(' ');
- expect(emojify('✈️')).toEqual(' ');
- expect(emojify('🛩️')).toEqual(' ');
- expect(emojify('🛫')).toEqual(' ');
- expect(emojify('🛬')).toEqual(' ');
- expect(emojify('🪂')).toEqual(' ');
- expect(emojify('💺')).toEqual(' ');
- expect(emojify('🚁')).toEqual(' ');
- expect(emojify('🚟')).toEqual(' ');
- expect(emojify('🚠')).toEqual(' ');
- expect(emojify('🚡')).toEqual(' ');
- expect(emojify('🛰️')).toEqual(' ');
- expect(emojify('🚀')).toEqual(' ');
- expect(emojify('🛸')).toEqual(' ');
- expect(emojify('🛎️')).toEqual(' ');
- expect(emojify('🧳')).toEqual(' ');
- expect(emojify('⌛')).toEqual(' ');
- expect(emojify('⏳')).toEqual(' ');
- expect(emojify('⌚')).toEqual(' ');
- expect(emojify('⏰')).toEqual(' ');
- expect(emojify('⏱️')).toEqual(' ');
- expect(emojify('⏲️')).toEqual(' ');
- expect(emojify('🕰️')).toEqual(' ');
- expect(emojify('🕛')).toEqual(' ');
- expect(emojify('🕧')).toEqual(' ');
- expect(emojify('🕐')).toEqual(' ');
- expect(emojify('🕜')).toEqual(' ');
- expect(emojify('🕑')).toEqual(' ');
- expect(emojify('🕝')).toEqual(' ');
- expect(emojify('🕒')).toEqual(' ');
- expect(emojify('🕞')).toEqual(' ');
- expect(emojify('🕓')).toEqual(' ');
- expect(emojify('🕟')).toEqual(' ');
- expect(emojify('🕔')).toEqual(' ');
- expect(emojify('🕠')).toEqual(' ');
- expect(emojify('🕕')).toEqual(' ');
- expect(emojify('🕡')).toEqual(' ');
- expect(emojify('🕖')).toEqual(' ');
- expect(emojify('🕢')).toEqual(' ');
- expect(emojify('🕗')).toEqual(' ');
- expect(emojify('🕣')).toEqual(' ');
- expect(emojify('🕘')).toEqual(' ');
- expect(emojify('🕤')).toEqual(' ');
- expect(emojify('🕙')).toEqual(' ');
- expect(emojify('🕥')).toEqual(' ');
- expect(emojify('🕚')).toEqual(' ');
- expect(emojify('🕦')).toEqual(' ');
- expect(emojify('🌑')).toEqual(' ');
- expect(emojify('🌒')).toEqual(' ');
- expect(emojify('🌓')).toEqual(' ');
- expect(emojify('🌔')).toEqual(' ');
- expect(emojify('🌕')).toEqual(' ');
- expect(emojify('🌖')).toEqual(' ');
- expect(emojify('🌗')).toEqual(' ');
- expect(emojify('🌘')).toEqual(' ');
- expect(emojify('🌙')).toEqual(' ');
- expect(emojify('🌚')).toEqual(' ');
- expect(emojify('🌛')).toEqual(' ');
- expect(emojify('🌜')).toEqual(' ');
- expect(emojify('🌡️')).toEqual(' ');
- expect(emojify('☀️')).toEqual(' ');
- expect(emojify('🌝')).toEqual(' ');
- expect(emojify('🌞')).toEqual(' ');
- expect(emojify('🪐')).toEqual(' ');
- expect(emojify('⭐')).toEqual(' ');
- expect(emojify('🌟')).toEqual(' ');
- expect(emojify('🌠')).toEqual(' ');
- expect(emojify('🌌')).toEqual(' ');
- expect(emojify('☁️')).toEqual(' ');
- expect(emojify('⛅')).toEqual(' ');
- expect(emojify('⛈️')).toEqual(' ');
- expect(emojify('🌤️')).toEqual(' ');
- expect(emojify('🌥️')).toEqual(' ');
- expect(emojify('🌦️')).toEqual(' ');
- expect(emojify('🌧️')).toEqual(' ');
- expect(emojify('🌨️')).toEqual(' ');
- expect(emojify('🌩️')).toEqual(' ');
- expect(emojify('🌪️')).toEqual(' ');
- expect(emojify('🌫️')).toEqual(' ');
- expect(emojify('🌬️')).toEqual(' ');
- expect(emojify('🌀')).toEqual(' ');
- expect(emojify('🌈')).toEqual(' ');
- expect(emojify('🌂')).toEqual(' ');
- expect(emojify('☂️')).toEqual(' ');
- expect(emojify('☔')).toEqual(' ');
- expect(emojify('⛱️')).toEqual(' ');
- expect(emojify('⚡')).toEqual(' ');
- expect(emojify('❄️')).toEqual(' ');
- expect(emojify('☃️')).toEqual(' ');
- expect(emojify('⛄')).toEqual(' ');
- expect(emojify('☄️')).toEqual(' ');
- expect(emojify('🔥')).toEqual(' ');
- expect(emojify('💧')).toEqual(' ');
- expect(emojify('🌊')).toEqual(' ');
- expect(emojify('🎃')).toEqual(' ');
- expect(emojify('🎄')).toEqual(' ');
- expect(emojify('🎆')).toEqual(' ');
- expect(emojify('🎇')).toEqual(' ');
- expect(emojify('🧨')).toEqual(' ');
- expect(emojify('✨')).toEqual(' ');
- expect(emojify('🎈')).toEqual(' ');
- expect(emojify('🎉')).toEqual(' ');
- expect(emojify('🎊')).toEqual(' ');
- expect(emojify('🎋')).toEqual(' ');
- expect(emojify('🎍')).toEqual(' ');
- expect(emojify('🎎')).toEqual(' ');
- expect(emojify('🎏')).toEqual(' ');
- expect(emojify('🎐')).toEqual(' ');
- expect(emojify('🎑')).toEqual(' ');
- expect(emojify('🧧')).toEqual(' ');
- expect(emojify('🎀')).toEqual(' ');
- expect(emojify('🎁')).toEqual(' ');
- expect(emojify('🎗️')).toEqual(' ');
- expect(emojify('🎟️')).toEqual(' ');
- expect(emojify('🎫')).toEqual(' ');
- expect(emojify('🎖️')).toEqual(' ');
- expect(emojify('🏆')).toEqual(' ');
- expect(emojify('🏅')).toEqual(' ');
- expect(emojify('🥇')).toEqual(' ');
- expect(emojify('🥈')).toEqual(' ');
- expect(emojify('🥉')).toEqual(' ');
- expect(emojify('⚽')).toEqual(' ');
- expect(emojify('⚾')).toEqual(' ');
- expect(emojify('🥎')).toEqual(' ');
- expect(emojify('🏀')).toEqual(' ');
- expect(emojify('🏐')).toEqual(' ');
- expect(emojify('🏈')).toEqual(' ');
- expect(emojify('🏉')).toEqual(' ');
- expect(emojify('🎾')).toEqual(' ');
- expect(emojify('🥏')).toEqual(' ');
- expect(emojify('🎳')).toEqual(' ');
- expect(emojify('🏏')).toEqual(' ');
- expect(emojify('🏑')).toEqual(' ');
- expect(emojify('🏒')).toEqual(' ');
- expect(emojify('🥍')).toEqual(' ');
- expect(emojify('🏓')).toEqual(' ');
- expect(emojify('🏸')).toEqual(' ');
- expect(emojify('🥊')).toEqual(' ');
- expect(emojify('🥋')).toEqual(' ');
- expect(emojify('🥅')).toEqual(' ');
- expect(emojify('⛳')).toEqual(' ');
- expect(emojify('⛸️')).toEqual(' ');
- expect(emojify('🎣')).toEqual(' ');
- expect(emojify('🤿')).toEqual(' ');
- expect(emojify('🎽')).toEqual(' ');
- expect(emojify('🎿')).toEqual(' ');
- expect(emojify('🛷')).toEqual(' ');
- expect(emojify('🥌')).toEqual(' ');
- expect(emojify('🎯')).toEqual(' ');
- expect(emojify('🪀')).toEqual(' ');
- expect(emojify('🪁')).toEqual(' ');
- expect(emojify('🎱')).toEqual(' ');
- expect(emojify('🔮')).toEqual(' ');
- expect(emojify('🪄')).toEqual(' ');
- expect(emojify('🧿')).toEqual(' ');
- expect(emojify('🪬')).toEqual(' ');
- expect(emojify('🎮')).toEqual(' ');
- expect(emojify('🕹️')).toEqual(' ');
- expect(emojify('🎰')).toEqual(' ');
- expect(emojify('🎲')).toEqual(' ');
- expect(emojify('🧩')).toEqual(' ');
- expect(emojify('🧸')).toEqual(' ');
- expect(emojify('🪅')).toEqual(' ');
- expect(emojify('🪩')).toEqual(' ');
- expect(emojify('🪆')).toEqual(' ');
- expect(emojify('♠️')).toEqual(' ');
- expect(emojify('♥️')).toEqual(' ');
- expect(emojify('♦️')).toEqual(' ');
- expect(emojify('♣️')).toEqual(' ');
- expect(emojify('♟️')).toEqual(' ');
- expect(emojify('🃏')).toEqual(' ');
- expect(emojify('🀄')).toEqual(' ');
- expect(emojify('🎴')).toEqual(' ');
- expect(emojify('🎭')).toEqual(' ');
- expect(emojify('🖼️')).toEqual(' ');
- expect(emojify('🎨')).toEqual(' ');
- expect(emojify('🧵')).toEqual(' ');
- expect(emojify('🪡')).toEqual(' ');
- expect(emojify('🧶')).toEqual(' ');
- expect(emojify('🪢')).toEqual(' ');
- expect(emojify('👓')).toEqual(' ');
- expect(emojify('🕶️')).toEqual(' ');
- expect(emojify('🥽')).toEqual(' ');
- expect(emojify('🥼')).toEqual(' ');
- expect(emojify('🦺')).toEqual(' ');
- expect(emojify('👔')).toEqual(' ');
- expect(emojify('👕')).toEqual(' ');
- expect(emojify('👖')).toEqual(' ');
- expect(emojify('🧣')).toEqual(' ');
- expect(emojify('🧤')).toEqual(' ');
- expect(emojify('🧥')).toEqual(' ');
- expect(emojify('🧦')).toEqual(' ');
- expect(emojify('👗')).toEqual(' ');
- expect(emojify('👘')).toEqual(' ');
- expect(emojify('🥻')).toEqual(' ');
- expect(emojify('🩱')).toEqual(' ');
- expect(emojify('🩲')).toEqual(' ');
- expect(emojify('🩳')).toEqual(' ');
- expect(emojify('👙')).toEqual(' ');
- expect(emojify('👚')).toEqual(' ');
- expect(emojify('👛')).toEqual(' ');
- expect(emojify('👜')).toEqual(' ');
- expect(emojify('👝')).toEqual(' ');
- expect(emojify('🛍️')).toEqual(' ');
- expect(emojify('🎒')).toEqual(' ');
- expect(emojify('🩴')).toEqual(' ');
- expect(emojify('👞')).toEqual(' ');
- expect(emojify('👟')).toEqual(' ');
- expect(emojify('🥾')).toEqual(' ');
- expect(emojify('🥿')).toEqual(' ');
- expect(emojify('👠')).toEqual(' ');
- expect(emojify('👡')).toEqual(' ');
- expect(emojify('🩰')).toEqual(' ');
- expect(emojify('👢')).toEqual(' ');
- expect(emojify('👑')).toEqual(' ');
- expect(emojify('👒')).toEqual(' ');
- expect(emojify('🎩')).toEqual(' ');
- expect(emojify('🎓')).toEqual(' ');
- expect(emojify('🧢')).toEqual(' ');
- expect(emojify('🪖')).toEqual(' ');
- expect(emojify('⛑️')).toEqual(' ');
- expect(emojify('📿')).toEqual(' ');
- expect(emojify('💄')).toEqual(' ');
- expect(emojify('💍')).toEqual(' ');
- expect(emojify('💎')).toEqual(' ');
- expect(emojify('🔇')).toEqual(' ');
- expect(emojify('🔈')).toEqual(' ');
- expect(emojify('🔉')).toEqual(' ');
- expect(emojify('🔊')).toEqual(' ');
- expect(emojify('📢')).toEqual(' ');
- expect(emojify('📣')).toEqual(' ');
- expect(emojify('📯')).toEqual(' ');
- expect(emojify('🔔')).toEqual(' ');
- expect(emojify('🔕')).toEqual(' ');
- expect(emojify('🎼')).toEqual(' ');
- expect(emojify('🎵')).toEqual(' ');
- expect(emojify('🎶')).toEqual(' ');
- expect(emojify('🎙️')).toEqual(' ');
- expect(emojify('🎚️')).toEqual(' ');
- expect(emojify('🎛️')).toEqual(' ');
- expect(emojify('🎤')).toEqual(' ');
- expect(emojify('🎧')).toEqual(' ');
- expect(emojify('📻')).toEqual(' ');
- expect(emojify('🎷')).toEqual(' ');
- expect(emojify('🪗')).toEqual(' ');
- expect(emojify('🎸')).toEqual(' ');
- expect(emojify('🎹')).toEqual(' ');
- expect(emojify('🎺')).toEqual(' ');
- expect(emojify('🎻')).toEqual(' ');
- expect(emojify('🪕')).toEqual(' ');
- expect(emojify('🥁')).toEqual(' ');
- expect(emojify('🪘')).toEqual(' ');
- expect(emojify('📱')).toEqual(' ');
- expect(emojify('📲')).toEqual(' ');
- expect(emojify('☎️')).toEqual(' ');
- expect(emojify('📞')).toEqual(' ');
- expect(emojify('📟')).toEqual(' ');
- expect(emojify('📠')).toEqual(' ');
- expect(emojify('🔋')).toEqual(' ');
- expect(emojify('🪫')).toEqual(' ');
- expect(emojify('🔌')).toEqual(' ');
- expect(emojify('💻')).toEqual(' ');
- expect(emojify('🖥️')).toEqual(' ');
- expect(emojify('🖨️')).toEqual(' ');
- expect(emojify('⌨️')).toEqual(' ');
- expect(emojify('🖱️')).toEqual(' ');
- expect(emojify('🖲️')).toEqual(' ');
- expect(emojify('💽')).toEqual(' ');
- expect(emojify('💾')).toEqual(' ');
- expect(emojify('💿')).toEqual(' ');
- expect(emojify('📀')).toEqual(' ');
- expect(emojify('🧮')).toEqual(' ');
- expect(emojify('🎥')).toEqual(' ');
- expect(emojify('🎞️')).toEqual(' ');
- expect(emojify('📽️')).toEqual(' ');
- expect(emojify('🎬')).toEqual(' ');
- expect(emojify('📺')).toEqual(' ');
- expect(emojify('📷')).toEqual(' ');
- expect(emojify('📸')).toEqual(' ');
- expect(emojify('📹')).toEqual(' ');
- expect(emojify('📼')).toEqual(' ');
- expect(emojify('🔍')).toEqual(' ');
- expect(emojify('🔎')).toEqual(' ');
- expect(emojify('🕯️')).toEqual(' ');
- expect(emojify('💡')).toEqual(' ');
- expect(emojify('🔦')).toEqual(' ');
- expect(emojify('🏮')).toEqual(' ');
- expect(emojify('🪔')).toEqual(' ');
- expect(emojify('📔')).toEqual(' ');
- expect(emojify('📕')).toEqual(' ');
- expect(emojify('📖')).toEqual(' ');
- expect(emojify('📗')).toEqual(' ');
- expect(emojify('📘')).toEqual(' ');
- expect(emojify('📙')).toEqual(' ');
- expect(emojify('📚')).toEqual(' ');
- expect(emojify('📓')).toEqual(' ');
- expect(emojify('📒')).toEqual(' ');
- expect(emojify('📃')).toEqual(' ');
- expect(emojify('📜')).toEqual(' ');
- expect(emojify('📄')).toEqual(' ');
- expect(emojify('📰')).toEqual(' ');
- expect(emojify('🗞️')).toEqual(' ');
- expect(emojify('📑')).toEqual(' ');
- expect(emojify('🔖')).toEqual(' ');
- expect(emojify('🏷️')).toEqual(' ');
- expect(emojify('💰')).toEqual(' ');
- expect(emojify('🪙')).toEqual(' ');
- expect(emojify('💴')).toEqual(' ');
- expect(emojify('💵')).toEqual(' ');
- expect(emojify('💶')).toEqual(' ');
- expect(emojify('💷')).toEqual(' ');
- expect(emojify('💸')).toEqual(' ');
- expect(emojify('💳')).toEqual(' ');
- expect(emojify('🧾')).toEqual(' ');
- expect(emojify('💹')).toEqual(' ');
- expect(emojify('✉️')).toEqual(' ');
- expect(emojify('📧')).toEqual(' ');
- expect(emojify('📨')).toEqual(' ');
- expect(emojify('📩')).toEqual(' ');
- expect(emojify('📤')).toEqual(' ');
- expect(emojify('📥')).toEqual(' ');
- expect(emojify('📦')).toEqual(' ');
- expect(emojify('📫')).toEqual(' ');
- expect(emojify('📪')).toEqual(' ');
- expect(emojify('📬')).toEqual(' ');
- expect(emojify('📭')).toEqual(' ');
- expect(emojify('📮')).toEqual(' ');
- expect(emojify('🗳️')).toEqual(' ');
- expect(emojify('✏️')).toEqual(' ');
- expect(emojify('✒️')).toEqual(' ');
- expect(emojify('🖋️')).toEqual(' ');
- expect(emojify('🖊️')).toEqual(' ');
- expect(emojify('🖌️')).toEqual(' ');
- expect(emojify('🖍️')).toEqual(' ');
- expect(emojify('📝')).toEqual(' ');
- expect(emojify('💼')).toEqual(' ');
- expect(emojify('📁')).toEqual(' ');
- expect(emojify('📂')).toEqual(' ');
- expect(emojify('🗂️')).toEqual(' ');
- expect(emojify('📅')).toEqual(' ');
- expect(emojify('📆')).toEqual(' ');
- expect(emojify('🗒️')).toEqual(' ');
- expect(emojify('🗓️')).toEqual(' ');
- expect(emojify('📇')).toEqual(' ');
- expect(emojify('📈')).toEqual(' ');
- expect(emojify('📉')).toEqual(' ');
- expect(emojify('📊')).toEqual(' ');
- expect(emojify('📋')).toEqual(' ');
- expect(emojify('📌')).toEqual(' ');
- expect(emojify('📍')).toEqual(' ');
- expect(emojify('📎')).toEqual(' ');
- expect(emojify('🖇️')).toEqual(' ');
- expect(emojify('📏')).toEqual(' ');
- expect(emojify('📐')).toEqual(' ');
- expect(emojify('✂️')).toEqual(' ');
- expect(emojify('🗃️')).toEqual(' ');
- expect(emojify('🗄️')).toEqual(' ');
- expect(emojify('🗑️')).toEqual(' ');
- expect(emojify('🔒')).toEqual(' ');
- expect(emojify('🔓')).toEqual(' ');
- expect(emojify('🔏')).toEqual(' ');
- expect(emojify('🔐')).toEqual(' ');
- expect(emojify('🔑')).toEqual(' ');
- expect(emojify('🗝️')).toEqual(' ');
- expect(emojify('🔨')).toEqual(' ');
- expect(emojify('🪓')).toEqual(' ');
- expect(emojify('⛏️')).toEqual(' ');
- expect(emojify('⚒️')).toEqual(' ');
- expect(emojify('🛠️')).toEqual(' ');
- expect(emojify('🗡️')).toEqual(' ');
- expect(emojify('⚔️')).toEqual(' ');
- expect(emojify('🔫')).toEqual(' ');
- expect(emojify('🪃')).toEqual(' ');
- expect(emojify('🏹')).toEqual(' ');
- expect(emojify('🛡️')).toEqual(' ');
- expect(emojify('🪚')).toEqual(' ');
- expect(emojify('🔧')).toEqual(' ');
- expect(emojify('🪛')).toEqual(' ');
- expect(emojify('🔩')).toEqual(' ');
- expect(emojify('⚙️')).toEqual(' ');
- expect(emojify('🗜️')).toEqual(' ');
- expect(emojify('⚖️')).toEqual(' ');
- expect(emojify('🦯')).toEqual(' ');
- expect(emojify('🔗')).toEqual(' ');
- expect(emojify('⛓️')).toEqual(' ');
- expect(emojify('🪝')).toEqual(' ');
- expect(emojify('🧰')).toEqual(' ');
- expect(emojify('🧲')).toEqual(' ');
- expect(emojify('🪜')).toEqual(' ');
- expect(emojify('⚗️')).toEqual(' ');
- expect(emojify('🧪')).toEqual(' ');
- expect(emojify('🧫')).toEqual(' ');
- expect(emojify('🧬')).toEqual(' ');
- expect(emojify('🔬')).toEqual(' ');
- expect(emojify('🔭')).toEqual(' ');
- expect(emojify('📡')).toEqual(' ');
- expect(emojify('💉')).toEqual(' ');
- expect(emojify('🩸')).toEqual(' ');
- expect(emojify('💊')).toEqual(' ');
- expect(emojify('🩹')).toEqual(' ');
- expect(emojify('🩼')).toEqual(' ');
- expect(emojify('🩺')).toEqual(' ');
- expect(emojify('🩻')).toEqual(' ');
- expect(emojify('🚪')).toEqual(' ');
- expect(emojify('🛗')).toEqual(' ');
- expect(emojify('🪞')).toEqual(' ');
- expect(emojify('🪟')).toEqual(' ');
- expect(emojify('🛏️')).toEqual(' ');
- expect(emojify('🛋️')).toEqual(' ');
- expect(emojify('🪑')).toEqual(' ');
- expect(emojify('🚽')).toEqual(' ');
- expect(emojify('🪠')).toEqual(' ');
- expect(emojify('🚿')).toEqual(' ');
- expect(emojify('🛁')).toEqual(' ');
- expect(emojify('🪤')).toEqual(' ');
- expect(emojify('🪒')).toEqual(' ');
- expect(emojify('🧴')).toEqual(' ');
- expect(emojify('🧷')).toEqual(' ');
- expect(emojify('🧹')).toEqual(' ');
- expect(emojify('🧺')).toEqual(' ');
- expect(emojify('🧻')).toEqual(' ');
- expect(emojify('🪣')).toEqual(' ');
- expect(emojify('🧼')).toEqual(' ');
- expect(emojify('🫧')).toEqual(' ');
- expect(emojify('🪥')).toEqual(' ');
- expect(emojify('🧽')).toEqual(' ');
- expect(emojify('🧯')).toEqual(' ');
- expect(emojify('🛒')).toEqual(' ');
- expect(emojify('🚬')).toEqual(' ');
- expect(emojify('⚰️')).toEqual(' ');
- expect(emojify('🪦')).toEqual(' ');
- expect(emojify('⚱️')).toEqual(' ');
- expect(emojify('🗿')).toEqual(' ');
- expect(emojify('🪧')).toEqual(' ');
- expect(emojify('🪪')).toEqual(' ');
- expect(emojify('🏧')).toEqual(' ');
- expect(emojify('🚮')).toEqual(' ');
- expect(emojify('🚰')).toEqual(' ');
- expect(emojify('♿')).toEqual(' ');
- expect(emojify('🚹')).toEqual(' ');
- expect(emojify('🚺')).toEqual(' ');
- expect(emojify('🚻')).toEqual(' ');
- expect(emojify('🚼')).toEqual(' ');
- expect(emojify('🚾')).toEqual(' ');
- expect(emojify('🛂')).toEqual(' ');
- expect(emojify('🛃')).toEqual(' ');
- expect(emojify('🛄')).toEqual(' ');
- expect(emojify('🛅')).toEqual(' ');
- expect(emojify('⚠️')).toEqual(' ');
- expect(emojify('🚸')).toEqual(' ');
- expect(emojify('⛔')).toEqual(' ');
- expect(emojify('🚫')).toEqual(' ');
- expect(emojify('🚳')).toEqual(' ');
- expect(emojify('🚭')).toEqual(' ');
- expect(emojify('🚯')).toEqual(' ');
- expect(emojify('🚱')).toEqual(' ');
- expect(emojify('🚷')).toEqual(' ');
- expect(emojify('📵')).toEqual(' ');
- expect(emojify('🔞')).toEqual(' ');
- expect(emojify('☢️')).toEqual(' ');
- expect(emojify('☣️')).toEqual(' ');
- expect(emojify('⬆️')).toEqual(' ');
- expect(emojify('↗️')).toEqual(' ');
- expect(emojify('➡️')).toEqual(' ');
- expect(emojify('↘️')).toEqual(' ');
- expect(emojify('⬇️')).toEqual(' ');
- expect(emojify('↙️')).toEqual(' ');
- expect(emojify('⬅️')).toEqual(' ');
- expect(emojify('↖️')).toEqual(' ');
- expect(emojify('↕️')).toEqual(' ');
- expect(emojify('↔️')).toEqual(' ');
- expect(emojify('↩️')).toEqual(' ');
- expect(emojify('↪️')).toEqual(' ');
- expect(emojify('⤴️')).toEqual(' ');
- expect(emojify('⤵️')).toEqual(' ');
- expect(emojify('🔃')).toEqual(' ');
- expect(emojify('🔄')).toEqual(' ');
- expect(emojify('🔙')).toEqual(' ');
- expect(emojify('🔚')).toEqual(' ');
- expect(emojify('🔛')).toEqual(' ');
- expect(emojify('🔜')).toEqual(' ');
- expect(emojify('🔝')).toEqual(' ');
- expect(emojify('🛐')).toEqual(' ');
- expect(emojify('⚛️')).toEqual(' ');
- expect(emojify('🕉️')).toEqual(' ');
- expect(emojify('✡️')).toEqual(' ');
- expect(emojify('☸️')).toEqual(' ');
- expect(emojify('☯️')).toEqual(' ');
- expect(emojify('✝️')).toEqual(' ');
- expect(emojify('☦️')).toEqual(' ');
- expect(emojify('☪️')).toEqual(' ');
- expect(emojify('☮️')).toEqual(' ');
- expect(emojify('🕎')).toEqual(' ');
- expect(emojify('🔯')).toEqual(' ');
- expect(emojify('♈')).toEqual(' ');
- expect(emojify('♉')).toEqual(' ');
- expect(emojify('♊')).toEqual(' ');
- expect(emojify('♋')).toEqual(' ');
- expect(emojify('♌')).toEqual(' ');
- expect(emojify('♍')).toEqual(' ');
- expect(emojify('♎')).toEqual(' ');
- expect(emojify('♏')).toEqual(' ');
- expect(emojify('♐')).toEqual(' ');
- expect(emojify('♑')).toEqual(' ');
- expect(emojify('♒')).toEqual(' ');
- expect(emojify('♓')).toEqual(' ');
- expect(emojify('⛎')).toEqual(' ');
- expect(emojify('🔀')).toEqual(' ');
- expect(emojify('🔁')).toEqual(' ');
- expect(emojify('🔂')).toEqual(' ');
- expect(emojify('▶️')).toEqual(' ');
- expect(emojify('⏩')).toEqual(' ');
- expect(emojify('⏭️')).toEqual(' ');
- expect(emojify('⏯️')).toEqual(' ');
- expect(emojify('◀️')).toEqual(' ');
- expect(emojify('⏪')).toEqual(' ');
- expect(emojify('⏮️')).toEqual(' ');
- expect(emojify('🔼')).toEqual(' ');
- expect(emojify('⏫')).toEqual(' ');
- expect(emojify('🔽')).toEqual(' ');
- expect(emojify('⏬')).toEqual(' ');
- expect(emojify('⏸️')).toEqual(' ');
- expect(emojify('⏹️')).toEqual(' ');
- expect(emojify('⏺️')).toEqual(' ');
- expect(emojify('⏏️')).toEqual(' ');
- expect(emojify('🎦')).toEqual(' ');
- expect(emojify('🔅')).toEqual(' ');
- expect(emojify('🔆')).toEqual(' ');
- expect(emojify('📶')).toEqual(' ');
- expect(emojify('📳')).toEqual(' ');
- expect(emojify('📴')).toEqual(' ');
- expect(emojify('♀️')).toEqual(' ');
- expect(emojify('♂️')).toEqual(' ');
- expect(emojify('⚧️')).toEqual(' ');
- expect(emojify('✖️')).toEqual(' ');
- expect(emojify('➕')).toEqual(' ');
- expect(emojify('➖')).toEqual(' ');
- expect(emojify('➗')).toEqual(' ');
- expect(emojify('🟰')).toEqual(' ');
- expect(emojify('♾️')).toEqual(' ');
- expect(emojify('‼️')).toEqual(' ');
- expect(emojify('⁉️')).toEqual(' ');
- expect(emojify('❓')).toEqual(' ');
- expect(emojify('❔')).toEqual(' ');
- expect(emojify('❕')).toEqual(' ');
- expect(emojify('❗')).toEqual(' ');
- expect(emojify('〰️')).toEqual(' ');
- expect(emojify('💱')).toEqual(' ');
- expect(emojify('💲')).toEqual(' ');
- expect(emojify('⚕️')).toEqual(' ');
- expect(emojify('♻️')).toEqual(' ');
- expect(emojify('⚜️')).toEqual(' ');
- expect(emojify('🔱')).toEqual(' ');
- expect(emojify('📛')).toEqual(' ');
- expect(emojify('🔰')).toEqual(' ');
- expect(emojify('⭕')).toEqual(' ');
- expect(emojify('✅')).toEqual(' ');
- expect(emojify('☑️')).toEqual(' ');
- expect(emojify('✔️')).toEqual(' ');
- expect(emojify('❌')).toEqual(' ');
- expect(emojify('❎')).toEqual(' ');
- expect(emojify('➰')).toEqual(' ');
- expect(emojify('➿')).toEqual(' ');
- expect(emojify('〽️')).toEqual(' ');
- expect(emojify('✳️')).toEqual(' ');
- expect(emojify('✴️')).toEqual(' ');
- expect(emojify('❇️')).toEqual(' ');
- expect(emojify('©️')).toEqual(' ');
- expect(emojify('®️')).toEqual(' ');
- expect(emojify('™️')).toEqual(' ');
- expect(emojify('#️⃣')).toEqual(' ');
- expect(emojify('*️⃣')).toEqual(' ');
- expect(emojify('0️⃣')).toEqual(' ');
- expect(emojify('1️⃣')).toEqual(' ');
- expect(emojify('2️⃣')).toEqual(' ');
- expect(emojify('3️⃣')).toEqual(' ');
- expect(emojify('4️⃣')).toEqual(' ');
- expect(emojify('5️⃣')).toEqual(' ');
- expect(emojify('6️⃣')).toEqual(' ');
- expect(emojify('7️⃣')).toEqual(' ');
- expect(emojify('8️⃣')).toEqual(' ');
- expect(emojify('9️⃣')).toEqual(' ');
- expect(emojify('🔟')).toEqual(' ');
- expect(emojify('🔠')).toEqual(' ');
- expect(emojify('🔡')).toEqual(' ');
- expect(emojify('🔣')).toEqual(' ');
- expect(emojify('🔤')).toEqual(' ');
- expect(emojify('🅰️')).toEqual(' ');
- expect(emojify('🆎')).toEqual(' ');
- expect(emojify('🅱️')).toEqual(' ');
- expect(emojify('🆑')).toEqual(' ');
- expect(emojify('🆒')).toEqual(' ');
- expect(emojify('🆓')).toEqual(' ');
- expect(emojify('ℹ️')).toEqual(' ');
- expect(emojify('🆔')).toEqual(' ');
- expect(emojify('Ⓜ️')).toEqual(' ');
- expect(emojify('🆕')).toEqual(' ');
- expect(emojify('🆖')).toEqual(' ');
- expect(emojify('🅾️')).toEqual(' ');
- expect(emojify('🆗')).toEqual(' ');
- expect(emojify('🅿️')).toEqual(' ');
- expect(emojify('🆘')).toEqual(' ');
- expect(emojify('🆙')).toEqual(' ');
- expect(emojify('🆚')).toEqual(' ');
- expect(emojify('🈁')).toEqual(' ');
- expect(emojify('🈂️')).toEqual(' ');
- expect(emojify('🈷️')).toEqual(' ');
- expect(emojify('🈶')).toEqual(' ');
- expect(emojify('🈯')).toEqual(' ');
- expect(emojify('🉐')).toEqual(' ');
- expect(emojify('🈹')).toEqual(' ');
- expect(emojify('🈚')).toEqual(' ');
- expect(emojify('🈲')).toEqual(' ');
- expect(emojify('🉑')).toEqual(' ');
- expect(emojify('🈸')).toEqual(' ');
- expect(emojify('🈴')).toEqual(' ');
- expect(emojify('🈳')).toEqual(' ');
- expect(emojify('㊗️')).toEqual(' ');
- expect(emojify('㊙️')).toEqual(' ');
- expect(emojify('🈺')).toEqual(' ');
- expect(emojify('🈵')).toEqual(' ');
- expect(emojify('🔴')).toEqual(' ');
- expect(emojify('🟠')).toEqual(' ');
- expect(emojify('🟡')).toEqual(' ');
- expect(emojify('🟢')).toEqual(' ');
- expect(emojify('🔵')).toEqual(' ');
- expect(emojify('🟣')).toEqual(' ');
- expect(emojify('🟤')).toEqual(' ');
- expect(emojify('⚫')).toEqual(' ');
- expect(emojify('⚪')).toEqual(' ');
- expect(emojify('🟥')).toEqual(' ');
- expect(emojify('🟧')).toEqual(' ');
- expect(emojify('🟨')).toEqual(' ');
- expect(emojify('🟩')).toEqual(' ');
- expect(emojify('🟦')).toEqual(' ');
- expect(emojify('🟪')).toEqual(' ');
- expect(emojify('🟫')).toEqual(' ');
- expect(emojify('⬛')).toEqual(' ');
- expect(emojify('⬜')).toEqual(' ');
- expect(emojify('◼️')).toEqual(' ');
- expect(emojify('◻️')).toEqual(' ');
- expect(emojify('◾')).toEqual(' ');
- expect(emojify('◽')).toEqual(' ');
- expect(emojify('▪️')).toEqual(' ');
- expect(emojify('▫️')).toEqual(' ');
- expect(emojify('🔶')).toEqual(' ');
- expect(emojify('🔷')).toEqual(' ');
- expect(emojify('🔸')).toEqual(' ');
- expect(emojify('🔹')).toEqual(' ');
- expect(emojify('🔺')).toEqual(' ');
- expect(emojify('🔻')).toEqual(' ');
- expect(emojify('💠')).toEqual(' ');
- expect(emojify('🔘')).toEqual(' ');
- expect(emojify('🔳')).toEqual(' ');
- expect(emojify('🔲')).toEqual(' ');
- expect(emojify('🏁')).toEqual(' ');
- expect(emojify('🚩')).toEqual(' ');
- expect(emojify('🎌')).toEqual(' ');
- expect(emojify('🏴')).toEqual(' ');
- expect(emojify('🏳️')).toEqual(' ');
- expect(emojify('🏳️🌈')).toEqual(' ');
- expect(emojify('🏳️⚧️')).toEqual(' ');
- expect(emojify('🏴☠️')).toEqual(' ');
- expect(emojify('🇦🇨')).toEqual(' ');
- expect(emojify('🇦🇩')).toEqual(' ');
- expect(emojify('🇦🇪')).toEqual(' ');
- expect(emojify('🇦🇫')).toEqual(' ');
- expect(emojify('🇦🇬')).toEqual(' ');
- expect(emojify('🇦🇮')).toEqual(' ');
- expect(emojify('🇦🇱')).toEqual(' ');
- expect(emojify('🇦🇲')).toEqual(' ');
- expect(emojify('🇦🇴')).toEqual(' ');
- expect(emojify('🇦🇶')).toEqual(' ');
- expect(emojify('🇦🇷')).toEqual(' ');
- expect(emojify('🇦🇸')).toEqual(' ');
- expect(emojify('🇦🇹')).toEqual(' ');
- expect(emojify('🇦🇺')).toEqual(' ');
- expect(emojify('🇦🇼')).toEqual(' ');
- expect(emojify('🇦🇽')).toEqual(' ');
- expect(emojify('🇦🇿')).toEqual(' ');
- expect(emojify('🇧🇦')).toEqual(' ');
- expect(emojify('🇧🇧')).toEqual(' ');
- expect(emojify('🇧🇩')).toEqual(' ');
- expect(emojify('🇧🇪')).toEqual(' ');
- expect(emojify('🇧🇫')).toEqual(' ');
- expect(emojify('🇧🇬')).toEqual(' ');
- expect(emojify('🇧🇭')).toEqual(' ');
- expect(emojify('🇧🇮')).toEqual(' ');
- expect(emojify('🇧🇯')).toEqual(' ');
- expect(emojify('🇧🇱')).toEqual(' ');
- expect(emojify('🇧🇲')).toEqual(' ');
- expect(emojify('🇧🇳')).toEqual(' ');
- expect(emojify('🇧🇴')).toEqual(' ');
- expect(emojify('🇧🇶')).toEqual(' ');
- expect(emojify('🇧🇷')).toEqual(' ');
- expect(emojify('🇧🇸')).toEqual(' ');
- expect(emojify('🇧🇹')).toEqual(' ');
- expect(emojify('🇧🇻')).toEqual(' ');
- expect(emojify('🇧🇼')).toEqual(' ');
- expect(emojify('🇧🇾')).toEqual(' ');
- expect(emojify('🇧🇿')).toEqual(' ');
- expect(emojify('🇨🇦')).toEqual(' ');
- expect(emojify('🇨🇨')).toEqual(' ');
- expect(emojify('🇨🇩')).toEqual(' ');
- expect(emojify('🇨🇫')).toEqual(' ');
- expect(emojify('🇨🇬')).toEqual(' ');
- expect(emojify('🇨🇭')).toEqual(' ');
- expect(emojify('🇨🇮')).toEqual(' ');
- expect(emojify('🇨🇰')).toEqual(' ');
- expect(emojify('🇨🇱')).toEqual(' ');
- expect(emojify('🇨🇲')).toEqual(' ');
- expect(emojify('🇨🇳')).toEqual(' ');
- expect(emojify('🇨🇴')).toEqual(' ');
- expect(emojify('🇨🇵')).toEqual(' ');
- expect(emojify('🇨🇷')).toEqual(' ');
- expect(emojify('🇨🇺')).toEqual(' ');
- expect(emojify('🇨🇻')).toEqual(' ');
- expect(emojify('🇨🇼')).toEqual(' ');
- expect(emojify('🇨🇽')).toEqual(' ');
- expect(emojify('🇨🇾')).toEqual(' ');
- expect(emojify('🇨🇿')).toEqual(' ');
- expect(emojify('🇩🇪')).toEqual(' ');
- expect(emojify('🇩🇬')).toEqual(' ');
- expect(emojify('🇩🇯')).toEqual(' ');
- expect(emojify('🇩🇰')).toEqual(' ');
- expect(emojify('🇩🇲')).toEqual(' ');
- expect(emojify('🇩🇴')).toEqual(' ');
- expect(emojify('🇩🇿')).toEqual(' ');
- expect(emojify('🇪🇦')).toEqual(' ');
- expect(emojify('🇪🇨')).toEqual(' ');
- expect(emojify('🇪🇪')).toEqual(' ');
- expect(emojify('🇪🇬')).toEqual(' ');
- expect(emojify('🇪🇭')).toEqual(' ');
- expect(emojify('🇪🇷')).toEqual(' ');
- expect(emojify('🇪🇸')).toEqual(' ');
- expect(emojify('🇪🇹')).toEqual(' ');
- expect(emojify('🇪🇺')).toEqual(' ');
- expect(emojify('🇫🇮')).toEqual(' ');
- expect(emojify('🇫🇯')).toEqual(' ');
- expect(emojify('🇫🇰')).toEqual(' ');
- expect(emojify('🇫🇲')).toEqual(' ');
- expect(emojify('🇫🇴')).toEqual(' ');
- expect(emojify('🇫🇷')).toEqual(' ');
- expect(emojify('🇬🇦')).toEqual(' ');
- expect(emojify('🇬🇧')).toEqual(' ');
- expect(emojify('🇬🇩')).toEqual(' ');
- expect(emojify('🇬🇪')).toEqual(' ');
- expect(emojify('🇬🇫')).toEqual(' ');
- expect(emojify('🇬🇬')).toEqual(' ');
- expect(emojify('🇬🇭')).toEqual(' ');
- expect(emojify('🇬🇮')).toEqual(' ');
- expect(emojify('🇬🇱')).toEqual(' ');
- expect(emojify('🇬🇲')).toEqual(' ');
- expect(emojify('🇬🇳')).toEqual(' ');
- expect(emojify('🇬🇵')).toEqual(' ');
- expect(emojify('🇬🇶')).toEqual(' ');
- expect(emojify('🇬🇷')).toEqual(' ');
- expect(emojify('🇬🇸')).toEqual(' ');
- expect(emojify('🇬🇹')).toEqual(' ');
- expect(emojify('🇬🇺')).toEqual(' ');
- expect(emojify('🇬🇼')).toEqual(' ');
- expect(emojify('🇬🇾')).toEqual(' ');
- expect(emojify('🇭🇰')).toEqual(' ');
- expect(emojify('🇭🇲')).toEqual(' ');
- expect(emojify('🇭🇳')).toEqual(' ');
- expect(emojify('🇭🇷')).toEqual(' ');
- expect(emojify('🇭🇹')).toEqual(' ');
- expect(emojify('🇭🇺')).toEqual(' ');
- expect(emojify('🇮🇨')).toEqual(' ');
- expect(emojify('🇮🇩')).toEqual(' ');
- expect(emojify('🇮🇪')).toEqual(' ');
- expect(emojify('🇮🇱')).toEqual(' ');
- expect(emojify('🇮🇲')).toEqual(' ');
- expect(emojify('🇮🇳')).toEqual(' ');
- expect(emojify('🇮🇴')).toEqual(' ');
- expect(emojify('🇮🇶')).toEqual(' ');
- expect(emojify('🇮🇷')).toEqual(' ');
- expect(emojify('🇮🇸')).toEqual(' ');
- expect(emojify('🇮🇹')).toEqual(' ');
- expect(emojify('🇯🇪')).toEqual(' ');
- expect(emojify('🇯🇲')).toEqual(' ');
- expect(emojify('🇯🇴')).toEqual(' ');
- expect(emojify('🇯🇵')).toEqual(' ');
- expect(emojify('🇰🇪')).toEqual(' ');
- expect(emojify('🇰🇬')).toEqual(' ');
- expect(emojify('🇰🇭')).toEqual(' ');
- expect(emojify('🇰🇮')).toEqual(' ');
- expect(emojify('🇰🇲')).toEqual(' ');
- expect(emojify('🇰🇳')).toEqual(' ');
- expect(emojify('🇰🇵')).toEqual(' ');
- expect(emojify('🇰🇷')).toEqual(' ');
- expect(emojify('🇰🇼')).toEqual(' ');
- expect(emojify('🇰🇾')).toEqual(' ');
- expect(emojify('🇰🇿')).toEqual(' ');
- expect(emojify('🇱🇦')).toEqual(' ');
- expect(emojify('🇱🇧')).toEqual(' ');
- expect(emojify('🇱🇨')).toEqual(' ');
- expect(emojify('🇱🇮')).toEqual(' ');
- expect(emojify('🇱🇰')).toEqual(' ');
- expect(emojify('🇱🇷')).toEqual(' ');
- expect(emojify('🇱🇸')).toEqual(' ');
- expect(emojify('🇱🇹')).toEqual(' ');
- expect(emojify('🇱🇺')).toEqual(' ');
- expect(emojify('🇱🇻')).toEqual(' ');
- expect(emojify('🇱🇾')).toEqual(' ');
- expect(emojify('🇲🇦')).toEqual(' ');
- expect(emojify('🇲🇨')).toEqual(' ');
- expect(emojify('🇲🇩')).toEqual(' ');
- expect(emojify('🇲🇪')).toEqual(' ');
- expect(emojify('🇲🇫')).toEqual(' ');
- expect(emojify('🇲🇬')).toEqual(' ');
- expect(emojify('🇲🇭')).toEqual(' ');
- expect(emojify('🇲🇰')).toEqual(' ');
- expect(emojify('🇲🇱')).toEqual(' ');
- expect(emojify('🇲🇲')).toEqual(' ');
- expect(emojify('🇲🇳')).toEqual(' ');
- expect(emojify('🇲🇴')).toEqual(' ');
- expect(emojify('🇲🇵')).toEqual(' ');
- expect(emojify('🇲🇶')).toEqual(' ');
- expect(emojify('🇲🇷')).toEqual(' ');
- expect(emojify('🇲🇸')).toEqual(' ');
- expect(emojify('🇲🇹')).toEqual(' ');
- expect(emojify('🇲🇺')).toEqual(' ');
- expect(emojify('🇲🇻')).toEqual(' ');
- expect(emojify('🇲🇼')).toEqual(' ');
- expect(emojify('🇲🇽')).toEqual(' ');
- expect(emojify('🇲🇾')).toEqual(' ');
- expect(emojify('🇲🇿')).toEqual(' ');
- expect(emojify('🇳🇦')).toEqual(' ');
- expect(emojify('🇳🇨')).toEqual(' ');
- expect(emojify('🇳🇪')).toEqual(' ');
- expect(emojify('🇳🇫')).toEqual(' ');
- expect(emojify('🇳🇬')).toEqual(' ');
- expect(emojify('🇳🇮')).toEqual(' ');
- expect(emojify('🇳🇱')).toEqual(' ');
- expect(emojify('🇳🇴')).toEqual(' ');
- expect(emojify('🇳🇵')).toEqual(' ');
- expect(emojify('🇳🇷')).toEqual(' ');
- expect(emojify('🇳🇺')).toEqual(' ');
- expect(emojify('🇳🇿')).toEqual(' ');
- expect(emojify('🇴🇲')).toEqual(' ');
- expect(emojify('🇵🇦')).toEqual(' ');
- expect(emojify('🇵🇪')).toEqual(' ');
- expect(emojify('🇵🇫')).toEqual(' ');
- expect(emojify('🇵🇬')).toEqual(' ');
- expect(emojify('🇵🇭')).toEqual(' ');
- expect(emojify('🇵🇰')).toEqual(' ');
- expect(emojify('🇵🇱')).toEqual(' ');
- expect(emojify('🇵🇲')).toEqual(' ');
- expect(emojify('🇵🇳')).toEqual(' ');
- expect(emojify('🇵🇷')).toEqual(' ');
- expect(emojify('🇵🇸')).toEqual(' ');
- expect(emojify('🇵🇹')).toEqual(' ');
- expect(emojify('🇵🇼')).toEqual(' ');
- expect(emojify('🇵🇾')).toEqual(' ');
- expect(emojify('🇶🇦')).toEqual(' ');
- expect(emojify('🇷🇪')).toEqual(' ');
- expect(emojify('🇷🇴')).toEqual(' ');
- expect(emojify('🇷🇸')).toEqual(' ');
- expect(emojify('🇷🇺')).toEqual(' ');
- expect(emojify('🇷🇼')).toEqual(' ');
- expect(emojify('🇸🇦')).toEqual(' ');
- expect(emojify('🇸🇧')).toEqual(' ');
- expect(emojify('🇸🇨')).toEqual(' ');
- expect(emojify('🇸🇩')).toEqual(' ');
- expect(emojify('🇸🇪')).toEqual(' ');
- expect(emojify('🇸🇬')).toEqual(' ');
- expect(emojify('🇸🇭')).toEqual(' ');
- expect(emojify('🇸🇮')).toEqual(' ');
- expect(emojify('🇸🇯')).toEqual(' ');
- expect(emojify('🇸🇰')).toEqual(' ');
- expect(emojify('🇸🇱')).toEqual(' ');
- expect(emojify('🇸🇲')).toEqual(' ');
- expect(emojify('🇸🇳')).toEqual(' ');
- expect(emojify('🇸🇴')).toEqual(' ');
- expect(emojify('🇸🇷')).toEqual(' ');
- expect(emojify('🇸🇸')).toEqual(' ');
- expect(emojify('🇸🇹')).toEqual(' ');
- expect(emojify('🇸🇻')).toEqual(' ');
- expect(emojify('🇸🇽')).toEqual(' ');
- expect(emojify('🇸🇾')).toEqual(' ');
- expect(emojify('🇸🇿')).toEqual(' ');
- expect(emojify('🇹🇦')).toEqual(' ');
- expect(emojify('🇹🇨')).toEqual(' ');
- expect(emojify('🇹🇩')).toEqual(' ');
- expect(emojify('🇹🇫')).toEqual(' ');
- expect(emojify('🇹🇬')).toEqual(' ');
- expect(emojify('🇹🇭')).toEqual(' ');
- expect(emojify('🇹🇯')).toEqual(' ');
- expect(emojify('🇹🇰')).toEqual(' ');
- expect(emojify('🇹🇱')).toEqual(' ');
- expect(emojify('🇹🇲')).toEqual(' ');
- expect(emojify('🇹🇳')).toEqual(' ');
- expect(emojify('🇹🇴')).toEqual(' ');
- expect(emojify('🇹🇷')).toEqual(' ');
- expect(emojify('🇹🇹')).toEqual(' ');
- expect(emojify('🇹🇻')).toEqual(' ');
- expect(emojify('🇹🇼')).toEqual(' ');
- expect(emojify('🇹🇿')).toEqual(' ');
- expect(emojify('🇺🇦')).toEqual(' ');
- expect(emojify('🇺🇬')).toEqual(' ');
- expect(emojify('🇺🇲')).toEqual(' ');
- expect(emojify('🇺🇳')).toEqual(' ');
- expect(emojify('🇺🇸')).toEqual(' ');
- expect(emojify('🇺🇾')).toEqual(' ');
- expect(emojify('🇺🇿')).toEqual(' ');
- expect(emojify('🇻🇦')).toEqual(' ');
- expect(emojify('🇻🇨')).toEqual(' ');
- expect(emojify('🇻🇪')).toEqual(' ');
- expect(emojify('🇻🇬')).toEqual(' ');
- expect(emojify('🇻🇮')).toEqual(' ');
- expect(emojify('🇻🇳')).toEqual(' ');
- expect(emojify('🇻🇺')).toEqual(' ');
- expect(emojify('🇼🇫')).toEqual(' ');
- expect(emojify('🇼🇸')).toEqual(' ');
- expect(emojify('🇽🇰')).toEqual(' ');
- expect(emojify('🇾🇪')).toEqual(' ');
- expect(emojify('🇾🇹')).toEqual(' ');
- expect(emojify('🇿🇦')).toEqual(' ');
- expect(emojify('🇿🇲')).toEqual(' ');
- expect(emojify('🇿🇼')).toEqual(' ');
- expect(emojify('🏴')).toEqual(' ');
- expect(emojify('🏴')).toEqual(' ');
- expect(emojify('🏴')).toEqual(' ');
- });
- });
-});
diff --git a/packages/pl-fe/src/features/emoji/search.test.ts b/packages/pl-fe/src/features/emoji/search.test.ts
deleted file mode 100644
index 40c71df6c..000000000
--- a/packages/pl-fe/src/features/emoji/search.test.ts
+++ /dev/null
@@ -1,129 +0,0 @@
-import { List, Map } from 'immutable';
-import pick from 'lodash/pick';
-
-import search, { addCustomToPool } from './search';
-
-const trimEmojis = (emoji: any) => pick(emoji, ['id', 'unified', 'native', 'custom']);
-
-describe('emoji_index', () => {
- it('should give same result for emoji_index_light and emoji-mart', () => {
- const expected = [
- {
- id: 'pineapple',
- unified: '1f34d',
- native: '🍍',
- },
- ];
- expect(search('pineapple').map(trimEmojis)).toEqual(expected);
- });
-
- it('orders search results correctly', () => {
- const expected = [
- { id: 'apple', unified: '1f34e', native: '🍎' },
- { id: 'pineapple', unified: '1f34d', native: '🍍' },
- { id: 'green_apple', unified: '1f34f', native: '🍏' },
- { id: 'iphone', unified: '1f4f1', native: '📱' },
- ];
-
- expect(search('apple').map(trimEmojis)).toEqual(expected);
- });
-
- it('handles custom emojis', () => {
- const custom = [
- {
- id: 'mastodon',
- name: 'mastodon',
- keywords: ['mastodon'],
- skins: { src: 'http://example.com' },
- },
- ];
-
- const custom_emojis = List([
- Map({ static_url: 'http://example.com', shortcode: 'mastodon' }),
- ]);
-
- const lightExpected = [
- {
- id: 'mastodon',
- custom: true,
- },
- ];
-
- addCustomToPool(custom);
- expect(search('masto', {}, custom_emojis).map(trimEmojis)).toEqual(lightExpected);
- });
-
- it('updates custom emoji if another is passed', () => {
- const custom = [
- {
- id: 'mastodon',
- name: 'mastodon',
- keywords: ['mastodon'],
- skins: { src: 'http://example.com' },
- },
- ];
-
- addCustomToPool(custom);
-
- const custom2 = [
- {
- id: 'pleroma',
- name: 'pleroma',
- keywords: ['pleroma'],
- skins: { src: 'http://example.com' },
- },
- ];
-
- addCustomToPool(custom2);
-
- const custom_emojis = List([
- Map({ static_url: 'http://example.com', shortcode: 'pleroma' }),
- ]);
-
- const expected: any = [];
- expect(search('masto', {}, custom_emojis).map(trimEmojis)).toEqual(expected);
- });
-
- it('does an emoji whose unified name is irregular', () => {
- const expected = [
- {
- 'id': 'water_polo',
- 'unified': '1f93d',
- 'native': '🤽',
- },
- {
- 'id': 'man-playing-water-polo',
- 'unified': '1f93d-200d-2642-fe0f',
- 'native': '🤽♂️',
- },
- {
- 'id': 'woman-playing-water-polo',
- 'unified': '1f93d-200d-2640-fe0f',
- 'native': '🤽♀️',
- },
- ];
- expect(search('polo').map(trimEmojis)).toEqual(expected);
- });
-
- it('can search for thinking_face', () => {
- const expected = [
- {
- id: 'thinking_face',
- unified: '1f914',
- native: '🤔',
- },
- ];
- expect(search('thinking_fac').map(trimEmojis)).toEqual(expected);
- });
-
- it('can search for woman-facepalming', () => {
- const expected = [
- {
- id: 'woman-facepalming',
- unified: '1f926-200d-2640-fe0f',
- native: '🤦♀️',
- },
- ];
- expect(search('woman-facep').map(trimEmojis)).toEqual(expected);
- });
-});
diff --git a/packages/pl-fe/src/features/group/components/group-action-button.test.tsx b/packages/pl-fe/src/features/group/components/group-action-button.test.tsx
deleted file mode 100644
index a3ad268ae..000000000
--- a/packages/pl-fe/src/features/group/components/group-action-button.test.tsx
+++ /dev/null
@@ -1,132 +0,0 @@
-import { GroupRoles } from 'pl-api';
-import React from 'react';
-
-import { buildGroup, buildGroupRelationship } from '@/jest/factory';
-import { render, screen } from '@/jest/test-helpers';
-
-import GroupActionButton from './group-action-button';
-
-import type { Group } from 'pl-api';
-
-let group: Group;
-
-describe(' ', () => {
- describe('with no group relationship', () => {
- beforeEach(() => {
- group = buildGroup({
- relationship: null,
- });
- });
-
- describe('with a private group', () => {
- beforeEach(() => {
- group = { ...group, locked: true };
- });
-
- it('should render the Request Access button', () => {
- render( );
-
- expect(screen.getByRole('button')).toHaveTextContent('Request Access');
- });
- });
-
- describe('with a public group', () => {
- beforeEach(() => {
- group = { ...group, locked: false };
- });
-
- it('should render the Join Group button', () => {
- render( );
-
- expect(screen.getByRole('button')).toHaveTextContent('Join Group');
- });
- });
- });
-
- describe('with no group relationship member', () => {
- beforeEach(() => {
- group = buildGroup({
- relationship: buildGroupRelationship({
- member: false,
- }),
- });
- });
-
- describe('with a private group', () => {
- beforeEach(() => {
- group = { ...group, locked: true };
- });
-
- it('should render the Request Access button', () => {
- render( );
-
- expect(screen.getByRole('button')).toHaveTextContent('Request Access');
- });
- });
-
- describe('with a public group', () => {
- beforeEach(() => {
- group = { ...group, locked: false };
- });
-
- it('should render the Join Group button', () => {
- render( );
-
- expect(screen.getByRole('button')).toHaveTextContent('Join Group');
- });
- });
- });
-
- describe('when the user has requested to join', () => {
- beforeEach(() => {
- group = buildGroup({
- relationship: buildGroupRelationship({
- requested: true,
- member: true,
- }),
- });
- });
-
- it('should render the Cancel Request button', () => {
- render( );
-
- expect(screen.getByRole('button')).toHaveTextContent('Cancel Request');
- });
- });
-
- describe('when the user is an Admin', () => {
- beforeEach(() => {
- group = buildGroup({
- relationship: buildGroupRelationship({
- requested: false,
- member: true,
- role: GroupRoles.OWNER,
- }),
- });
- });
-
- it('should render the Manage Group button', () => {
- render( );
-
- expect(screen.getByRole('button')).toHaveTextContent('Manage Group');
- });
- });
-
- describe('when the user is just a member', () => {
- beforeEach(() => {
- group = buildGroup({
- relationship: buildGroupRelationship({
- requested: false,
- member: true,
- role: GroupRoles.USER,
- }),
- });
- });
-
- it('should render the Leave Group button', () => {
- render( );
-
- expect(screen.getByRole('button')).toHaveTextContent('Leave Group');
- });
- });
-});
diff --git a/packages/pl-fe/src/features/group/components/group-header.test.tsx b/packages/pl-fe/src/features/group/components/group-header.test.tsx
deleted file mode 100644
index 5251c0a7e..000000000
--- a/packages/pl-fe/src/features/group/components/group-header.test.tsx
+++ /dev/null
@@ -1,47 +0,0 @@
-import React from 'react';
-
-import { buildGroup } from '@/jest/factory';
-import { render, screen } from '@/jest/test-helpers';
-
-import GroupHeader from './group-header';
-
-import type { Group } from 'pl-api';
-
-let group: Group;
-
-describe(' ', () => {
- describe('without a group', () => {
- it('should render the blankslate', () => {
- render( );
- expect(screen.getByTestId('group-header-missing')).toBeInTheDocument();
- });
- });
-
- describe('when the Group has been deleted', () => {
- it('only shows name, header, and avatar', () => {
- group = buildGroup({ display_name: 'my group', deleted_at: new Date().toISOString() });
- render( );
-
- expect(screen.queryAllByTestId('group-header-missing')).toHaveLength(0);
- expect(screen.queryAllByTestId('group-actions')).toHaveLength(0);
- expect(screen.queryAllByTestId('group-meta')).toHaveLength(0);
- expect(screen.getByTestId('group-header-image')).toBeInTheDocument();
- expect(screen.getByTestId('group-avatar')).toBeInTheDocument();
- expect(screen.getByTestId('group-name')).toBeInTheDocument();
- });
- });
-
- describe('with a valid Group', () => {
- it('only shows all fields', () => {
- group = buildGroup({ display_name: 'my group', deleted_at: null });
- render( );
-
- expect(screen.queryAllByTestId('group-header-missing')).toHaveLength(0);
- expect(screen.getByTestId('group-actions')).toBeInTheDocument();
- expect(screen.getByTestId('group-meta')).toBeInTheDocument();
- expect(screen.getByTestId('group-header-image')).toBeInTheDocument();
- expect(screen.getByTestId('group-avatar')).toBeInTheDocument();
- expect(screen.getByTestId('group-name')).toBeInTheDocument();
- });
- });
-});
diff --git a/packages/pl-fe/src/features/group/components/group-member-count.test.tsx b/packages/pl-fe/src/features/group/components/group-member-count.test.tsx
deleted file mode 100644
index 0158256a8..000000000
--- a/packages/pl-fe/src/features/group/components/group-member-count.test.tsx
+++ /dev/null
@@ -1,56 +0,0 @@
-import React from 'react';
-
-import { buildGroup } from '@/jest/factory';
-import { render, screen } from '@/jest/test-helpers';
-
-import GroupMemberCount from './group-member-count';
-
-import type { Group } from 'pl-api';
-
-let group: Group;
-
-describe(' ', () => {
- describe('with support for "members_count"', () => {
- describe('with 1 member', () => {
- beforeEach(() => {
- group = buildGroup({
- members_count: 1,
- });
- });
-
- it('should render correctly', () => {
- render( );
-
- expect(screen.getByTestId('group-member-count').textContent).toEqual('1 member');
- });
- });
-
- describe('with 2 members', () => {
- beforeEach(() => {
- group = buildGroup({
- members_count: 2,
- });
- });
-
- it('should render correctly', () => {
- render( );
-
- expect(screen.getByTestId('group-member-count').textContent).toEqual('2 members');
- });
- });
-
- describe('with 1000 members', () => {
- beforeEach(() => {
- group = buildGroup({
- members_count: 1000,
- });
- });
-
- it('should render correctly', () => {
- render( );
-
- expect(screen.getByTestId('group-member-count').textContent).toEqual('1k members');
- });
- });
- });
-});
diff --git a/packages/pl-fe/src/features/group/components/group-member-list-item.test.tsx b/packages/pl-fe/src/features/group/components/group-member-list-item.test.tsx
deleted file mode 100644
index dd1f9423b..000000000
--- a/packages/pl-fe/src/features/group/components/group-member-list-item.test.tsx
+++ /dev/null
@@ -1,303 +0,0 @@
-import userEvent from '@testing-library/user-event';
-import { GroupRoles } from 'pl-api';
-import React from 'react';
-
-import { __stub } from '@/api';
-import { buildGroup, buildGroupMember, buildGroupRelationship } from '@/jest/factory';
-import { render, screen, waitFor } from '@/jest/test-helpers';
-
-import GroupMemberListItem from './group-member-list-item';
-
-describe(' ', () => {
- describe('account rendering', () => {
- const accountId = '4';
- const groupMember = buildGroupMember({}, {
- id: accountId,
- display_name: 'tiger woods',
- });
-
- beforeEach(() => {
- __stub((mock) => {
- mock.onGet(`/api/v1/accounts/${accountId}`).reply(200, groupMember.account);
- });
- });
-
- it('should render the users avatar', async () => {
- const group = buildGroup({
- relationship: buildGroupRelationship(),
- });
-
- render( );
-
- await waitFor(() => {
- expect(screen.getByTestId('group-member-list-item')).toHaveTextContent(groupMember.account.display_name);
- });
- });
- });
-
- describe('role badge', () => {
- const accountId = '4';
- const group = buildGroup();
-
- describe('when the user is an Owner', () => {
- const groupMember = buildGroupMember({ role: GroupRoles.OWNER }, {
- id: accountId,
- display_name: 'tiger woods',
- });
-
- beforeEach(() => {
- __stub((mock) => {
- mock.onGet(`/api/v1/accounts/${accountId}`).reply(200, groupMember.account);
- });
- });
-
- it('should render the correct badge', async () => {
- render( );
-
- await waitFor(() => {
- expect(screen.getByTestId('role-badge')).toHaveTextContent('owner');
- });
- });
- });
-
- describe('when the user is an Admin', () => {
- const groupMember = buildGroupMember({ role: GroupRoles.ADMIN }, {
- id: accountId,
- display_name: 'tiger woods',
- });
-
- beforeEach(() => {
- __stub((mock) => {
- mock.onGet(`/api/v1/accounts/${accountId}`).reply(200, groupMember.account);
- });
- });
-
- it('should render the correct badge', async () => {
- render( );
-
- await waitFor(() => {
- expect(screen.getByTestId('role-badge')).toHaveTextContent('admin');
- });
- });
- });
-
- describe('when the user is an User', () => {
- const groupMember = buildGroupMember({ role: GroupRoles.USER }, {
- id: accountId,
- display_name: 'tiger woods',
- });
-
- beforeEach(() => {
- __stub((mock) => {
- mock.onGet(`/api/v1/accounts/${accountId}`).reply(200, groupMember.account);
- });
- });
-
- it('should render no correct badge', async () => {
- render( );
-
- await waitFor(() => {
- expect(screen.queryAllByTestId('role-badge')).toHaveLength(0);
- });
- });
- });
- });
-
- describe('as a Group owner', () => {
- const group = buildGroup({
- relationship: buildGroupRelationship({
- role: GroupRoles.OWNER,
- member: true,
- }),
- });
-
- describe('when the user has role of "user"', () => {
- const accountId = '4';
- const groupMember = buildGroupMember({}, {
- id: accountId,
- display_name: 'tiger woods',
- username: 'tiger',
- });
-
- beforeEach(() => {
- __stub((mock) => {
- mock.onGet(`/api/v1/accounts/${accountId}`).reply(200, groupMember.account);
- });
- });
-
- it('should render dropdown with correct Owner actions', async () => {
- const user = userEvent.setup();
-
- render( );
-
- await waitFor(async() => {
- await user.click(screen.getByTestId('icon-button'));
- });
-
- const dropdownMenu = screen.getByTestId('dropdown-menu');
- expect(dropdownMenu).toHaveTextContent('Assign admin role');
- expect(dropdownMenu).toHaveTextContent('Kick @tiger from group');
- expect(dropdownMenu).toHaveTextContent('Ban from group');
- });
- });
-
- describe('when the user has role of "admin"', () => {
- const accountId = '4';
- const groupMember = buildGroupMember(
- {
- role: GroupRoles.ADMIN,
- },
- {
- id: accountId,
- display_name: 'tiger woods',
- username: 'tiger',
- },
- );
-
- beforeEach(() => {
- __stub((mock) => {
- mock.onGet(`/api/v1/accounts/${accountId}`).reply(200, groupMember.account);
- });
- });
-
- it('should render dropdown with correct Owner actions', async () => {
- const user = userEvent.setup();
-
- render( );
-
- await waitFor(async() => {
- await user.click(screen.getByTestId('icon-button'));
- });
-
- const dropdownMenu = screen.getByTestId('dropdown-menu');
- expect(dropdownMenu).toHaveTextContent('Remove admin role');
- expect(dropdownMenu).toHaveTextContent('Kick @tiger from group');
- expect(dropdownMenu).toHaveTextContent('Ban from group');
- });
- });
- });
-
- describe('as a Group admin', () => {
- const group = buildGroup({
- relationship: buildGroupRelationship({
- role: GroupRoles.ADMIN,
- member: true,
- }),
- });
-
- describe('when the user has role of "user"', () => {
- const accountId = '4';
- const groupMember = buildGroupMember({}, {
- id: accountId,
- display_name: 'tiger woods',
- username: 'tiger',
- });
-
- beforeEach(() => {
- __stub((mock) => {
- mock.onGet(`/api/v1/accounts/${accountId}`).reply(200, groupMember.account);
- });
- });
-
- it('should render dropdown with correct Admin actions', async () => {
- const user = userEvent.setup();
-
- render( );
-
- await waitFor(async() => {
- await user.click(screen.getByTestId('icon-button'));
- });
-
- const dropdownMenu = screen.getByTestId('dropdown-menu');
- expect(dropdownMenu).not.toHaveTextContent('Assign admin role');
- expect(dropdownMenu).toHaveTextContent('Kick @tiger from group');
- expect(dropdownMenu).toHaveTextContent('Ban from group');
- });
- });
-
- describe('when the user has role of "admin"', () => {
- const accountId = '4';
- const groupMember = buildGroupMember(
- {
- role: GroupRoles.ADMIN,
- },
- {
- id: accountId,
- display_name: 'tiger woods',
- username: 'tiger',
- },
- );
-
- beforeEach(() => {
- __stub((mock) => {
- mock.onGet(`/api/v1/accounts/${accountId}`).reply(200, groupMember.account);
- });
- });
-
- it('should not render the dropdown', async () => {
- render( );
-
- await waitFor(async() => {
- expect(screen.queryAllByTestId('icon-button')).toHaveLength(0);
- });
- });
- });
-
- describe('when the user has role of "owner"', () => {
- const accountId = '4';
- const groupMember = buildGroupMember(
- {
- role: GroupRoles.OWNER,
- },
- {
- id: accountId,
- display_name: 'tiger woods',
- username: 'tiger',
- },
- );
-
- beforeEach(() => {
- __stub((mock) => {
- mock.onGet(`/api/v1/accounts/${accountId}`).reply(200, groupMember.account);
- });
- });
-
- it('should not render the dropdown', async () => {
- render( );
-
- await waitFor(async() => {
- expect(screen.queryAllByTestId('icon-button')).toHaveLength(0);
- });
- });
- });
- });
-
- describe('as a Group user', () => {
- const group = buildGroup({
- relationship: buildGroupRelationship({
- role: GroupRoles.USER,
- member: true,
- }),
- });
- const accountId = '4';
- const groupMember = buildGroupMember({}, {
- id: accountId,
- display_name: 'tiger woods',
- username: 'tiger',
- });
-
- beforeEach(() => {
- __stub((mock) => {
- mock.onGet(`/api/v1/accounts/${accountId}`).reply(200, groupMember.account);
- });
- });
-
- it('should not render the dropdown', async () => {
- render( );
-
- await waitFor(async() => {
- expect(screen.queryAllByTestId('icon-button')).toHaveLength(0);
- });
- });
- });
-});
diff --git a/packages/pl-fe/src/features/group/components/group-options-button.test.tsx b/packages/pl-fe/src/features/group/components/group-options-button.test.tsx
deleted file mode 100644
index 715ff823e..000000000
--- a/packages/pl-fe/src/features/group/components/group-options-button.test.tsx
+++ /dev/null
@@ -1,87 +0,0 @@
-import { GroupRoles } from 'pl-api';
-import React from 'react';
-
-import { buildGroup, buildGroupRelationship } from '@/jest/factory';
-import { render, screen } from '@/jest/test-helpers';
-
-import GroupOptionsButton from './group-options-button';
-
-import type { Group } from 'pl-api';
-
-let group: Group;
-
-describe(' ', () => {
- describe('when the user blocked', () => {
- beforeEach(() => {
- group = buildGroup({
- relationship: buildGroupRelationship({
- requested: false,
- member: true,
- blocked_by: true,
- role: GroupRoles.USER,
- }),
- });
- });
-
- it('should render null', () => {
- render( );
-
- expect(screen.queryAllByTestId('dropdown-menu-button')).toHaveLength(0);
- });
- });
-
- describe('when the user is an admin', () => {
- beforeEach(() => {
- group = buildGroup({
- relationship: buildGroupRelationship({
- requested: false,
- member: true,
- role: GroupRoles.ADMIN,
- }),
- });
- });
-
- it('should render one option for leaving the group', () => {
- render( );
-
- // Leave group option only
- expect(screen.queryAllByTestId('dropdown-menu-button')).toHaveLength(1);
- });
- });
-
- describe('when the user is an owner', () => {
- beforeEach(() => {
- group = buildGroup({
- relationship: buildGroupRelationship({
- requested: false,
- member: true,
- role: GroupRoles.OWNER,
- }),
- });
- });
-
- it('should render one option for muting the group', () => {
- render( );
-
- expect(screen.queryAllByTestId('dropdown-menu-button')).toHaveLength(1);
- });
- });
-
- describe('when the user is a member', () => {
- beforeEach(() => {
- group = buildGroup({
- relationship: buildGroupRelationship({
- requested: false,
- member: true,
- role: GroupRoles.USER,
- }),
- });
- });
-
- it('should render the dropdown menu', () => {
- render( );
-
- expect(screen.queryAllByTestId('dropdown-menu-button')).toHaveLength(1);
- });
- });
-});
diff --git a/packages/pl-fe/src/features/group/components/group-privacy.test.tsx b/packages/pl-fe/src/features/group/components/group-privacy.test.tsx
deleted file mode 100644
index ca9a99513..000000000
--- a/packages/pl-fe/src/features/group/components/group-privacy.test.tsx
+++ /dev/null
@@ -1,40 +0,0 @@
-import React from 'react';
-
-import { buildGroup } from '@/jest/factory';
-import { render, screen } from '@/jest/test-helpers';
-
-import GroupPrivacy from './group-privacy';
-
-import type { Group } from 'pl-api';
-
-let group: Group;
-
-describe(' ', () => {
- describe('with a Private group', () => {
- beforeEach(() => {
- group = buildGroup({
- locked: true,
- });
- });
-
- it('should render the correct text', () => {
- render( );
-
- expect(screen.getByTestId('group-privacy')).toHaveTextContent('Private');
- });
- });
-
- describe('with a Public group', () => {
- beforeEach(() => {
- group = buildGroup({
- locked: false,
- });
- });
-
- it('should render the correct text', () => {
- render( );
-
- expect(screen.getByTestId('group-privacy')).toHaveTextContent('Public');
- });
- });
-});
diff --git a/packages/pl-fe/src/features/group/components/group-relationship.test.tsx b/packages/pl-fe/src/features/group/components/group-relationship.test.tsx
deleted file mode 100644
index 9c40c5eea..000000000
--- a/packages/pl-fe/src/features/group/components/group-relationship.test.tsx
+++ /dev/null
@@ -1,67 +0,0 @@
-import { GroupRoles } from 'pl-api';
-import React from 'react';
-
-import { buildGroup, buildGroupRelationship } from '@/jest/factory';
-import { render, screen } from '@/jest/test-helpers';
-
-import GroupRelationship from './group-relationship';
-
-import type { Group } from 'pl-api';
-
-let group: Group;
-
-describe(' ', () => {
- describe('when the user is an admin', () => {
- beforeEach(() => {
- group = buildGroup({
- relationship: buildGroupRelationship({
- requested: false,
- member: true,
- role: GroupRoles.ADMIN,
- }),
- });
- });
-
- it('should render the relationship', () => {
- render( );
-
- expect(screen.getByTestId('group-relationship')).toHaveTextContent('Admin');
- });
- });
-
- describe('when the user is an owner', () => {
- beforeEach(() => {
- group = buildGroup({
- relationship: buildGroupRelationship({
- requested: false,
- member: true,
- role: GroupRoles.OWNER,
- }),
- });
- });
-
- it('should render the relationship', () => {
- render( );
-
- expect(screen.getByTestId('group-relationship')).toHaveTextContent('Owner');
- });
- });
-
- describe('when the user is a member', () => {
- beforeEach(() => {
- group = buildGroup({
- relationship: buildGroupRelationship({
- requested: false,
- member: true,
- role: GroupRoles.USER,
- }),
- });
- });
-
- it('should render null', () => {
- render( );
-
- expect(screen.queryAllByTestId('group-relationship')).toHaveLength(0);
- });
- });
-});
diff --git a/packages/pl-fe/src/features/groups/components/discover/group-list-item.test.tsx b/packages/pl-fe/src/features/groups/components/discover/group-list-item.test.tsx
deleted file mode 100644
index e2cff5ba4..000000000
--- a/packages/pl-fe/src/features/groups/components/discover/group-list-item.test.tsx
+++ /dev/null
@@ -1,21 +0,0 @@
-import React from 'react';
-
-import { buildGroup } from '@/jest/factory';
-import { render, screen } from '@/jest/test-helpers';
-
-import GroupListItem from './group-list-item';
-
-describe(' {
- it('should render correctly', () => {
- const group = buildGroup({
- display_name: 'group name here',
- locked: false,
- members_count: 6,
- });
- render( );
-
- expect(screen.getByTestId('group-list-item')).toHaveTextContent(group.display_name);
- expect(screen.getByTestId('group-list-item')).toHaveTextContent('Public');
- expect(screen.getByTestId('group-list-item')).toHaveTextContent('6 members');
- });
-});
diff --git a/packages/pl-fe/src/features/notifications/components/notifications.test.tsx b/packages/pl-fe/src/features/notifications/components/notifications.test.tsx
deleted file mode 100644
index edb2b7cc0..000000000
--- a/packages/pl-fe/src/features/notifications/components/notifications.test.tsx
+++ /dev/null
@@ -1,130 +0,0 @@
-import React from 'react';
-
-import { updateNotifications } from '@/actions/notifications';
-import { render, screen, rootState, createTestStore } from '@/jest/test-helpers';
-
-import Notification from './notification';
-
-/** Prepare the notification for use by the component */
-const normalize = (notification: any) => {
- const store = createTestStore(rootState);
- store.dispatch(updateNotifications(notification) as any);
- const state = store.getState();
-
- return {
- // @ts-ignore
- notification: state.notifications.items.get(notification.id)!,
- state,
- };
-};
-
-describe(' ', () => {
- it('renders a follow notification', async () => {
- const { notification, state } = normalize(await import('@/__fixtures__/notification-follow.json'));
-
- render( , undefined, state);
-
- expect(screen.getByTestId('notification')).toBeInTheDocument();
- expect(screen.getByTestId('account')).toContainHTML('neko@rdrama.cc');
- expect(screen.getByTestId('message')).toHaveTextContent('Nekobit followed you');
- });
-
- describe('grouped notifications', () => {
- it('renders a grouped follow notification for more than 2', async () => {
- const { notification, state } = normalize({
- ...await import('@/__fixtures__/notification-follow.json'),
- total_count: 5,
- });
-
- render( , undefined, state);
-
- expect(screen.getByTestId('notification')).toBeInTheDocument();
- expect(screen.getByTestId('account')).toContainHTML('neko@rdrama.cc');
- expect(screen.getByTestId('message')).toHaveTextContent('Nekobit + 4 others followed you');
- });
-
- it('renders a grouped follow notification for 1', async () => {
- const { notification, state } = normalize({
- ...await import('@/__fixtures__/notification-follow.json'),
- total_count: 2,
- });
-
- render( , undefined, state);
-
- expect(screen.getByTestId('notification')).toBeInTheDocument();
- expect(screen.getByTestId('account')).toContainHTML('neko@rdrama.cc');
- expect(screen.getByTestId('message')).toHaveTextContent('Nekobit + 1 other followed you');
- });
- });
-
- it('renders a favourite notification', async () => {
- const { notification, state } = normalize(await import('@/__fixtures__/notification-favourite.json'));
-
- render( , undefined, state);
-
- expect(screen.getByTestId('notification')).toContainHTML('Hollahollara@spinster.xyz');
- expect(screen.getByTestId('status')).toContainHTML('https://media.gleasonator.com');
- });
-
- // it('renders a follow_request notification', async () => {
- // const { notification, state } = normalize(await import('@/__fixtures__/notification-follow_request.json'));
-
- // render( , undefined, state);
-
- // expect(screen.getByTestId('notification')).toBeInTheDocument();
- // expect(screen.getByTestId('account')).toContainHTML('alex@spinster.xyz');
- // });
-
- it('renders a mention notification', async () => {
- const { notification, state } = normalize(await import('@/__fixtures__/notification-mention.json'));
-
- render( , undefined, state);
-
- expect(screen.getByTestId('notification')).toContainHTML('silverpill@mitra.social');
- expect(screen.getByTestId('status')).toContainHTML('ActivityPub spec');
- });
-
- it('renders a move notification', async () => {
- const { notification, state } = normalize(await import('@/__fixtures__/notification-move.json'));
-
- render( , undefined, state);
-
- expect(screen.getByTestId('notification')).toContainHTML('alex@fedibird.com');
- expect(screen.getByTestId('account')).toContainHTML('benis911');
- });
-
- it('renders a pleroma:emoji_reaction notification', async () => {
- const { notification, state } = normalize(await import('@/__fixtures__/notification-pleroma-emoji_reaction.json'));
-
- render( , undefined, state);
-
- expect(screen.getByTestId('notification')).toContainHTML('😮');
- expect(screen.getByTestId('status')).toContainHTML('Super Mario 64');
- });
-
- it('renders a pleroma:chat_mention notification', async () => {
- const { notification, state } = normalize(await import('@/__fixtures__/notification-pleroma-chat_mention.json'));
-
- render( , undefined, state);
-
- expect(screen.getByTestId('notification')).toContainHTML('dave');
- });
-
- it('renders a poll notification', async () => {
- const { notification, state } = normalize(await import('@/__fixtures__/notification-poll.json'));
-
- render( , undefined, state);
-
- expect(screen.getByTestId('notification')).toBeInTheDocument();
- expect(screen.getByTestId('status')).toContainHTML('what do you guys think?');
- });
-
- it('renders a reblog notification', async () => {
- const { notification, state } = normalize(await import('@/__fixtures__/notification-reblog.json'));
-
- render( , undefined, state);
-
- expect(screen.getByTestId('notification')).toContainHTML('rob@nicecrew.digital');
- expect(screen.getByTestId('status')).toContainHTML('never downloaded TikTok');
- });
-});
diff --git a/packages/pl-fe/src/features/ui/components/compose-button.test.tsx b/packages/pl-fe/src/features/ui/components/compose-button.test.tsx
deleted file mode 100644
index c601f1ef3..000000000
--- a/packages/pl-fe/src/features/ui/components/compose-button.test.tsx
+++ /dev/null
@@ -1,39 +0,0 @@
-import { fireEvent, render, screen } from '@testing-library/react';
-import React from 'react';
-import { IntlProvider } from 'react-intl';
-import { Provider } from 'react-redux';
-import { MemoryRouter } from 'react-router-dom';
-
-import { mockStore, rootState } from '@/jest/test-helpers';
-
-import ComposeButton from './compose-button';
-
-const store = mockStore(rootState);
-const renderComposeButton = () => {
- render(
-
-
-
-
-
-
- ,
- );
-};
-
-describe(' ', () => {
- it('renders a button element', () => {
- renderComposeButton();
-
- expect(screen.getByRole('button')).toHaveTextContent('Compose');
- });
-
- it('dispatches the MODAL_OPEN action', () => {
- renderComposeButton();
-
- expect(store.getActions().length).toEqual(0);
- fireEvent.click(screen.getByRole('button'));
- expect(store.getActions()[0].type).toEqual('MODAL_CLOSE');
- expect(store.getActions()[1].type).toEqual('MODAL_OPEN');
- });
-});
diff --git a/packages/pl-fe/src/features/ui/components/hotkeys.tsx b/packages/pl-fe/src/features/ui/components/hotkeys.tsx
index 8d607d22a..f9be46377 100644
--- a/packages/pl-fe/src/features/ui/components/hotkeys.tsx
+++ b/packages/pl-fe/src/features/ui/components/hotkeys.tsx
@@ -173,11 +173,11 @@ const hotkeyMatcherMap = {
type HotkeyName = keyof typeof hotkeyMatcherMap;
-export type HandlerMap = Partial<
+type HandlerMap = Partial<
Record void>
>;
-export function useHotkeys(handlers: HandlerMap) {
+function useHotkeys(handlers: HandlerMap) {
const ref = useRef(null);
const bufferedKeys = useRef([]);
const sequenceTimer = useRef | null>(null);
diff --git a/packages/pl-fe/src/features/ui/components/panels/sign-up-panel.test.tsx b/packages/pl-fe/src/features/ui/components/panels/sign-up-panel.test.tsx
deleted file mode 100644
index 275eaab45..000000000
--- a/packages/pl-fe/src/features/ui/components/panels/sign-up-panel.test.tsx
+++ /dev/null
@@ -1,20 +0,0 @@
-import React from 'react';
-
-import { storeOpen } from '@/jest/mock-stores';
-import { render, screen } from '@/jest/test-helpers';
-
-import SignUpPanel from './sign-up-panel';
-
-describe(' ', () => {
- it('doesn\'t render by default', () => {
- render( );
- expect(screen.queryByTestId('sign-up-panel')).not.toBeInTheDocument();
- });
-
- describe('with registrations enabled', () => {
- it('successfully renders', () => {
- render( , undefined, storeOpen);
- expect(screen.getByTestId('sign-up-panel')).toBeInTheDocument();
- });
- });
-});
diff --git a/packages/pl-fe/src/features/ui/components/panels/trends-panel.test.tsx b/packages/pl-fe/src/features/ui/components/panels/trends-panel.test.tsx
deleted file mode 100644
index 5ca17311d..000000000
--- a/packages/pl-fe/src/features/ui/components/panels/trends-panel.test.tsx
+++ /dev/null
@@ -1,74 +0,0 @@
-import React from 'react';
-
-import { __stub } from '@/api';
-import { queryClient, render, screen, waitFor } from '@/jest/test-helpers';
-
-import TrendsPanel from './trends-panel';
-
-describe(' ', () => {
- beforeEach(() => {
- queryClient.clear();
- });
-
- describe('with hashtags', () => {
- beforeEach(() => {
- __stub((mock) => {
- mock.onGet('/api/v1/trends')
- .reply(200, [
- {
- name: 'hashtag 1',
- url: 'https://example.com',
- history: [{
- day: '1652745600',
- uses: '294',
- accounts: '180',
- }],
- },
- { name: 'hashtag 2', url: 'https://example.com' },
- ]);
- });
- });
-
- it('renders trending hashtags', async() => {
- render( );
-
- await waitFor(() => {
- expect(screen.getByTestId('hashtag')).toHaveTextContent(/hashtag 1/i);
- expect(screen.getByTestId('hashtag')).toHaveTextContent(/180 people talking/i);
- expect(screen.getByTestId('sparklines')).toBeInTheDocument();
- });
- });
-
- it('renders multiple trends', async() => {
- render( );
-
- await waitFor(() => {
- expect(screen.queryAllByTestId('hashtag')).toHaveLength(2);
- });
- });
-
- it('respects the limit prop', async() => {
- render( );
-
- await waitFor(() => {
- expect(screen.queryAllByTestId('hashtag')).toHaveLength(1);
- });
- });
- });
-
- describe('without hashtags', () => {
- beforeEach(() => {
- __stub((mock) => {
- mock.onGet('/api/v1/trends').reply(200, []);
- });
- });
-
- it('renders empty', async() => {
- render( );
-
- await waitFor(() => {
- expect(screen.queryAllByTestId('hashtag')).toHaveLength(0);
- });
- });
- });
-});
diff --git a/packages/pl-fe/src/features/ui/components/subscribe-button.test.tsx b/packages/pl-fe/src/features/ui/components/subscribe-button.test.tsx
deleted file mode 100644
index 624f0b636..000000000
--- a/packages/pl-fe/src/features/ui/components/subscribe-button.test.tsx
+++ /dev/null
@@ -1,26 +0,0 @@
-import React from 'react';
-
-import { buildAccount, buildRelationship } from '@/jest/factory';
-import { render, screen } from '@/jest/test-helpers';
-
-import SubscribeButton from './subscription-button';
-
-const justin = {
- id: '1',
- acct: 'justin-username',
- display_name: 'Justin L',
- avatar: 'test.jpg',
-};
-
-describe(' ', () => {
- let store: any;
-
- describe('with "accountNotifies" disabled', () => {
- it('renders nothing', () => {
- const account = buildAccount({ ...justin, relationship: buildRelationship({ following: true }) });
-
- render( , undefined, store);
- expect(screen.queryAllByTestId('icon-button')).toHaveLength(0);
- });
- });
-});
diff --git a/packages/pl-fe/src/hooks/__mocks__/resize-observer.ts b/packages/pl-fe/src/hooks/__mocks__/resize-observer.ts
deleted file mode 100644
index 47c3ebc17..000000000
--- a/packages/pl-fe/src/hooks/__mocks__/resize-observer.ts
+++ /dev/null
@@ -1,25 +0,0 @@
-let listener: ((rect: any) => void) | undefined = undefined;
-const mockDisconnect = vi.fn();
-
-class ResizeObserver {
-
- constructor(ls: any) {
- listener = ls;
- }
-
- observe() {
- // do nothing
- }
- unobserve() {
- // do nothing
- }
- disconnect() {
- mockDisconnect();
- }
-
-}
-
-// eslint-disable-next-line compat/compat
-(window as any).ResizeObserver = ResizeObserver;
-
-export { ResizeObserver as default, listener, mockDisconnect };
diff --git a/packages/pl-fe/src/hooks/use-dimensions.test.ts b/packages/pl-fe/src/hooks/use-dimensions.test.ts
deleted file mode 100644
index 3ce75e972..000000000
--- a/packages/pl-fe/src/hooks/use-dimensions.test.ts
+++ /dev/null
@@ -1,62 +0,0 @@
-import { renderHook, act } from '@testing-library/react-hooks';
-
-import { listener, mockDisconnect } from './__mocks__/resize-observer';
-import { useDimensions } from './use-dimensions';
-
-describe('useDimensions()', () => {
- beforeEach(() => {
- mockDisconnect.mockClear();
- });
-
- it('defaults to 0', () => {
- const { result } = renderHook(() => useDimensions());
-
- act(() => {
- const div = document.createElement('div');
- (result.current[1] as any)(div);
- });
-
- expect(result.current[2]).toMatchObject({
- width: 0,
- height: 0,
- });
- });
-
- it('measures the dimensions of a DOM element', () => {
- const { result } = renderHook(() => useDimensions());
-
- act(() => {
- const div = document.createElement('div');
- (result.current[1] as any)(div);
- });
-
- act(() => {
- listener!([
- {
- contentRect: {
- width: 200,
- height: 200,
- },
- },
- ]);
- });
-
- expect(result.current[2]).toMatchObject({
- width: 200,
- height: 200,
- });
- });
-
- it('disconnects on unmount', () => {
- const { result, unmount } = renderHook(() => useDimensions());
-
- act(() => {
- const div = document.createElement('div');
- (result.current[1] as any)(div);
- });
-
- expect(mockDisconnect).toHaveBeenCalledTimes(0);
- unmount();
- expect(mockDisconnect).toHaveBeenCalledTimes(1);
- });
-});
diff --git a/packages/pl-fe/src/hooks/use-dimensions.ts b/packages/pl-fe/src/hooks/use-dimensions.ts
deleted file mode 100644
index 2376b389d..000000000
--- a/packages/pl-fe/src/hooks/use-dimensions.ts
+++ /dev/null
@@ -1,38 +0,0 @@
-import { useEffect, useMemo, useState } from 'react';
-
-type UseDimensionsRect = { width: number; height: number };
-type UseDimensionsResult = [Element | null, any, any]
-
-const defaultState: UseDimensionsRect = {
- width: 0,
- height: 0,
-};
-
-const useDimensions = (): UseDimensionsResult => {
- const [element, setRef] = useState(null);
- const [rect, setRect] = useState(defaultState);
-
- const observer = useMemo(
- () =>
- new ResizeObserver((entries: any) => {
- if (entries[0]) {
- const { width, height } = entries[0].contentRect;
- setRect({ width, height });
- }
- }),
- [],
- );
-
- useEffect(() => {
- if (!element) return;
- observer.observe(element);
-
- return () => {
- observer.disconnect();
- };
- }, [element]);
-
- return [element, setRef, rect];
-};
-
-export { useDimensions };
diff --git a/packages/pl-fe/src/jest/factory.ts b/packages/pl-fe/src/jest/factory.ts
deleted file mode 100644
index df727e9c2..000000000
--- a/packages/pl-fe/src/jest/factory.ts
+++ /dev/null
@@ -1,74 +0,0 @@
-import {
- accountSchema,
- groupMemberSchema,
- groupRelationshipSchema,
- groupSchema,
- instanceSchema,
- relationshipSchema,
- statusSchema,
- GroupRoles,
- type Account,
- type Group,
- type GroupMember,
- type GroupRelationship,
- type Instance,
- type Relationship,
- type Status,
-} from 'pl-api';
-import * as v from 'valibot';
-
-import type { PartialDeep } from 'type-fest';
-
-// TODO: there's probably a better way to create these factory functions.
-// This looks promising but didn't work on my first attempt: https://github.com/anatine/zod-plugins/tree/main/packages/zod-mock
-
-const buildAccount = (props: PartialDeep = {}): Account =>
- v.parse(accountSchema, Object.assign({
- id: crypto.randomUUID(),
- url: `https://soapbox.test/users/${crypto.randomUUID()}`,
- }, props));
-
-const buildGroup = (props: PartialDeep = {}): Group =>
- v.parse(groupSchema, Object.assign({
- id: crypto.randomUUID(),
- owner: {
- id: crypto.randomUUID(),
- },
- }, props));
-
-const buildGroupRelationship = (props: PartialDeep = {}): GroupRelationship =>
- v.parse(groupRelationshipSchema, Object.assign({
- id: crypto.randomUUID(),
- }, props));
-
-const buildGroupMember = (
- props: PartialDeep = {},
- accountProps: PartialDeep = {},
-): GroupMember => v.parse(groupMemberSchema, Object.assign({
- id: crypto.randomUUID(),
- account: buildAccount(accountProps),
- role: GroupRoles.USER,
-}, props));
-
-const buildInstance = (props: PartialDeep = {}) => v.parse(instanceSchema, props);
-
-const buildRelationship = (props: PartialDeep = {}): Relationship =>
- v.parse(relationshipSchema, Object.assign({
- id: crypto.randomUUID(),
- }, props));
-
-const buildStatus = (props: PartialDeep = {}) =>
- v.parse(statusSchema, Object.assign({
- id: crypto.randomUUID(),
- account: buildAccount(),
- }, props));
-
-export {
- buildAccount,
- buildGroup,
- buildGroupMember,
- buildGroupRelationship,
- buildInstance,
- buildRelationship,
- buildStatus,
-};
diff --git a/packages/pl-fe/src/jest/fixtures/chats.json b/packages/pl-fe/src/jest/fixtures/chats.json
deleted file mode 100644
index 101851fc7..000000000
--- a/packages/pl-fe/src/jest/fixtures/chats.json
+++ /dev/null
@@ -1,54 +0,0 @@
-[
- {
- "id": "1",
- "unread": 0,
- "last_message": {
- "account_id": "2",
- "chat_id": "85",
- "content": "last message content",
- "created_at": "2022-09-28T17:43:01.432Z",
- "id": "1166",
- "unread": false
- },
- "created_at": "2022-08-26T14:49:16.360Z",
- "updated_at": "2022-09-29T19:09:30.257Z",
- "accepted": true,
- "account": {
- "id": "2",
- "username": "leonard",
- "acct": "leonard",
- "display_name": "leonard",
- "created_at": "2021-10-19T00:00:00.000Z",
- "avatar": "original.jpg",
- "avatar_static": "original.jpg",
- "verified": false,
- "accepting_messages": true
- }
- },
- {
- "id": "2",
- "unread": 0,
- "last_message": {
- "account_id": "3",
- "chat_id": "125",
- "content": "\u003cp\u003eInventore enim numquam nihil facilis nostrum eum natus provident quis veritatis esse dolorem praesentium rem cumque.\u003c/p\u003e",
- "created_at": "2022-09-23T14:09:29.625Z",
- "id": "1033",
- "unread": false
- },
- "created_at": "2022-09-22T15:06:49.675Z",
- "updated_at": "2022-09-23T14:09:29.628Z",
- "accepted": true,
- "account": {
- "id": "3",
- "username": "sheldon",
- "acct": "sheldon",
- "display_name": "sheldon",
- "created_at": "2022-09-22T00:00:00.000Z",
- "avatar": "original.jpg",
- "avatar_static": "original.jpg",
- "verified": false,
- "accepting_messages": true
- }
- }
-]
\ No newline at end of file
diff --git a/packages/pl-fe/src/jest/mock-stores.tsx b/packages/pl-fe/src/jest/mock-stores.tsx
deleted file mode 100644
index da7e0e3cb..000000000
--- a/packages/pl-fe/src/jest/mock-stores.tsx
+++ /dev/null
@@ -1,9 +0,0 @@
-import { instanceSchema } from 'pl-api';
-import * as v from 'valibot';
-
-/** Store with registrations open. */
-const storeOpen = { instance: v.parse(instanceSchema, { registrations: true }) };
-
-export {
- storeOpen,
-};
diff --git a/packages/pl-fe/src/jest/test-helpers.tsx b/packages/pl-fe/src/jest/test-helpers.tsx
deleted file mode 100644
index 1c4dcd756..000000000
--- a/packages/pl-fe/src/jest/test-helpers.tsx
+++ /dev/null
@@ -1,118 +0,0 @@
-import { configureMockStore } from '@jedmao/redux-mock-store';
-import { QueryClientProvider } from '@tanstack/react-query';
-import { render, RenderOptions } from '@testing-library/react';
-import { renderHook, RenderHookOptions } from '@testing-library/react-hooks';
-import React, { FC, ReactElement } from 'react';
-import { Toaster } from 'react-hot-toast';
-import { IntlProvider } from 'react-intl';
-import { Provider } from 'react-redux';
-import { MemoryRouter } from 'react-router-dom';
-import { applyMiddleware, createStore } from 'redux';
-import { thunk } from 'redux-thunk';
-
-import { ChatProvider } from '@/contexts/chat-context';
-import { StatProvider } from '@/contexts/stat-context';
-import { queryClient } from '@/queries/client';
-
-import { default as rootReducer } from '../reducers';
-
-import type { AppDispatch } from '@/store';
-import type { Action, AnyAction } from 'redux';
-
-// Mock Redux
-// https://redux.js.org/recipes/writing-tests/
-const rootState = rootReducer(undefined, {} as Action);
-const mockStore = configureMockStore([thunk]);
-
-/** Apply actions to the state, one at a time. */
-const applyActions = (state: any, actions: any, reducer: any) =>
- actions.reduce((state: any, action: any) => reducer(state, action), state);
-
-const createTestStore = (initialState: any) => createStore(rootReducer, initialState, applyMiddleware(thunk));
-const TestApp: FC = ({ children, storeProps, routerProps = {} }) => {
- let store: ReturnType;
- let appState = rootState;
-
- if (storeProps && typeof storeProps.getState !== 'undefined') { // storeProps is a store
- store = storeProps;
- } else if (storeProps) { // storeProps is state
- appState = { ...rootState, ...storeProps };
- store = createTestStore(appState);
- } else {
- store = createTestStore(appState);
- }
-
- const props = {
- locale: 'en',
- store,
- };
-
- return (
-
-
-
-
-
-
-
- {children}
-
-
-
-
-
-
-
-
-
- );
-};
-
-const customRender = (
- ui: ReactElement,
- options?: Omit,
- store?: any,
- routerProps?: any,
-) => render(ui, {
- wrapper: () => ,
- ...options,
-});
-
-/** Like renderHook, but with access to the Redux store. */
-const customRenderHook = (
- callback: (props?: any) => any,
- options?: Omit, 'wrapper'>,
- store?: any,
-) => renderHook(callback, {
- wrapper: ({ children }) => ,
- ...options,
- });
-
-const mockWindowProperty = (property: any, value: any) => {
- const { [property]: originalProperty } = window;
- delete window[property];
-
- beforeAll(() => {
- Object.defineProperty(window, property, {
- configurable: true,
- writable: true,
- value,
- });
- });
-
- afterAll(() => {
- window[property] = originalProperty;
- });
-};
-
-export * from '@testing-library/react';
-export {
- customRender as render,
- customRenderHook as renderHook,
- mockStore,
- applyActions,
- rootState,
- mockWindowProperty,
- createTestStore,
- queryClient,
-};
diff --git a/packages/pl-fe/src/jest/test-setup.ts b/packages/pl-fe/src/jest/test-setup.ts
deleted file mode 100644
index 42e2b7ca1..000000000
--- a/packages/pl-fe/src/jest/test-setup.ts
+++ /dev/null
@@ -1,42 +0,0 @@
-import { act } from '@testing-library/react';
-import { toast } from 'react-hot-toast';
-// eslint-disable-next-line import/no-extraneous-dependencies
-import '@testing-library/jest-dom/vitest';
-// Mock IndexedDB
-// https://dev.to/andyhaskell/testing-your-indexeddb-code-with-jest-2o17
-import 'fake-indexeddb/auto';
-
-import { __clear as clearApiMocks } from '../api/__mocks__';
-
-// API mocking
-vi.mock('@/api');
-afterEach(() => {
- clearApiMocks();
-});
-
-// Query mocking
-vi.mock('@/queries/client');
-
-// Clear toasts after each test.
-afterEach(() => {
- act(() => {
- toast.remove();
- });
-});
-
-const intersectionObserverMock = () => ({ observe: () => null, disconnect: () => null });
-window.IntersectionObserver = vi.fn().mockImplementation(intersectionObserverMock);
-
-Object.defineProperty(window, 'matchMedia', {
- writable: true,
- value: vi.fn().mockImplementation(query => ({
- matches: false,
- media: query,
- onchange: null,
- addListener: vi.fn(), // Deprecated
- removeListener: vi.fn(), // Deprecated
- addEventListener: vi.fn(),
- removeEventListener: vi.fn(),
- dispatchEvent: vi.fn(),
- })),
-});
diff --git a/packages/pl-fe/src/modals/unauthorized-modal.test.tsx b/packages/pl-fe/src/modals/unauthorized-modal.test.tsx
deleted file mode 100644
index 6a4377d9a..000000000
--- a/packages/pl-fe/src/modals/unauthorized-modal.test.tsx
+++ /dev/null
@@ -1,25 +0,0 @@
-import React from 'react';
-
-import { storeOpen } from '@/jest/mock-stores';
-import { render, screen } from '@/jest/test-helpers';
-
-import UnauthorizedModal from './unauthorized-modal';
-
-describe(' ', () => {
- it('successfully renders', () => {
- render( );
- expect(screen.getByTestId('modal')).toBeInTheDocument();
- });
-
- it('doesn\'t display the signup button by default', () => {
- render( );
- expect(screen.queryByText('Sign up')).not.toBeInTheDocument();
- });
-
- describe('with registrations enabled', () => {
- it('displays the signup button', () => {
- render( , undefined, storeOpen);
- expect(screen.getByText('Sign up')).toBeInTheDocument();
- });
- });
-});
diff --git a/packages/pl-fe/src/pages/auth/login.test.tsx b/packages/pl-fe/src/pages/auth/login.test.tsx
deleted file mode 100644
index e9306f70c..000000000
--- a/packages/pl-fe/src/pages/auth/login.test.tsx
+++ /dev/null
@@ -1,52 +0,0 @@
-import { instanceSchema } from 'pl-api';
-import React from 'react';
-import * as v from 'valibot';
-
-import { render, screen } from '@/jest/test-helpers';
-
-import LoginPage from './login';
-
-describe(' ', () => {
- it('renders correctly on load', () => {
- const store = {
- instance: v.parse(instanceSchema, {
- version: '2.7.2 (compatible; Pleroma 2.3.0)',
- }),
- };
-
- render( , undefined, store);
-
- expect(screen.getByRole('heading')).toHaveTextContent('Sign In');
- });
-
- // it('renders the OTP form when logIn returns with mfa_required', () => {
- //
- // stubApi(mock => {
- // mock.onPost('/api/v1/apps').reply(200, {
- // data: {
- // client_id:'12345', client_secret:'12345', id:'111', name:'SoapboxFE', redirect_uri:'urn:ietf:wg:oauth:2.0:oob', website:null, vapid_key:'12345',
- // },
- // });
- // mock.onPost('/oauth/token').reply(403, {
- // error:'mfa_required', mfa_token:'12345', supported_challenge_types:'totp',
- // });
- // });
- //
- // const app = new Map();
- // app.set('app', { client_id: '12345', client_secret:'12345' });
- // const store = mockStore(ImmutableMap({
- // auth: { app },
- // }));
- // const loginPage = createComponent( , { store });
- //
- // return loginPage.handleSubmit().then(() => {
- // const wrapper = loginPage.toJSON();
- // expect(wrapper.children[0].children[0].children[0].children[0]).toEqual(expect.objectContaining({
- // type: 'h1',
- // props: { className: 'otp-login' },
- // children: [ 'OTP Login' ],
- // }));
- // });
- //
- // });
-});
diff --git a/packages/pl-fe/src/queries/__mocks__/client.ts b/packages/pl-fe/src/queries/__mocks__/client.ts
deleted file mode 100644
index 56123fd1d..000000000
--- a/packages/pl-fe/src/queries/__mocks__/client.ts
+++ /dev/null
@@ -1,13 +0,0 @@
-import { QueryClient } from '@tanstack/react-query';
-
-const queryClient = new QueryClient({
- defaultOptions: {
- queries: {
- staleTime: 0,
- gcTime: Infinity,
- retry: false,
- },
- },
-});
-
-export { queryClient };
diff --git a/packages/pl-fe/src/queries/chats.test.ts b/packages/pl-fe/src/queries/chats.test.ts
deleted file mode 100644
index b602879ca..000000000
--- a/packages/pl-fe/src/queries/chats.test.ts
+++ /dev/null
@@ -1,295 +0,0 @@
-import { Map as ImmutableMap } from 'immutable';
-import sumBy from 'lodash/sumBy';
-import { useEffect } from 'react';
-
-import { __stub } from '@/api';
-import { buildAccount, buildRelationship } from '@/jest/factory';
-import { createTestStore, mockStore, queryClient, renderHook, rootState, waitFor } from '@/jest/test-helpers';
-import { normalizeChatMessage } from '@/normalizers/chat-message';
-import { Store } from '@/store';
-import { flattenPages } from '@/utils/queries';
-
-import { ChatKeys, IChat, useChat, useChatActions, useChatMessages, useChats } from './chats';
-
-const chat: IChat = {
- account: buildAccount({
- username: 'username',
- verified: true,
- id: '1',
- acct: 'acct',
- avatar: 'avatar',
- avatar_static: 'avatar',
- display_name: 'my name',
- }),
- created_at: '2020-06-10T02:05:06.000Z',
- id: '1',
- last_message: null,
- unread: 0,
-};
-
-const buildChatMessage = (id: string) => normalizeChatMessage({
- id,
- chat_id: '1',
- account_id: '1',
- content: `chat message #${id}`,
- created_at: '2020-06-10T02:05:06.000Z',
- expiration: 1209600,
- unread: true,
-});
-
-describe('ChatKeys', () => {
- it('has a "chat" key', () => {
- const id = '1';
-
- expect(ChatKeys.chat(id)).toEqual(['chats', 'chat', id]);
- });
-
- it('has a "chatMessages" key', () => {
- const id = '1';
-
- expect(ChatKeys.chatMessages(id)).toEqual(['chats', 'messages', id]);
- });
-});
-
-describe('useChatMessages', () => {
- let store: ReturnType;
-
- beforeEach(() => {
- queryClient.clear();
- });
-
- describe('when the user is blocked', () => {
- beforeEach(() => {
- const state = {
- ...rootState,
- relationships: ImmutableMap({ '1': buildRelationship({ blocked_by: true }) }),
- };
-
- store = mockStore(state);
- });
-
- it('is does not fetch the endpoint', async () => {
- const { result } = renderHook(() => useChatMessages(chat), undefined, store);
-
- await waitFor(() => expect(result.current.isFetching).toBe(false));
-
- expect(result.current.data?.length).toBeUndefined();
- });
- });
-
- describe('when the user is not blocked', () => {
- describe('with a successful request', () => {
- beforeEach(() => {
- __stub((mock) => {
- mock.onGet(`/api/v1/pleroma/chats/${chat.id}/messages`)
- .reply(200, [
- buildChatMessage('2'),
- ], {
- link: `; rel="prev"`,
- });
- });
- });
-
- it('is successful', async () => {
- const { result } = renderHook(() => useChatMessages(chat));
-
- await waitFor(() => expect(result.current.isFetching).toBe(false));
-
- expect(result.current.data?.length).toBe(1);
- });
- });
-
- describe('with an unsuccessful query', () => {
- beforeEach(() => {
- __stub((mock) => {
- mock.onGet(`/api/v1/pleroma/chats/${chat.id}/messages`).networkError();
- });
- });
-
- it('is has error state', async() => {
- const { result } = renderHook(() => useChatMessages(chat));
-
- await waitFor(() => expect(result.current.isFetching).toBe(false));
-
- expect(result.current.error).toBeDefined();
- });
- });
- });
-});
-
-describe('useChats', () => {
- // let store: ReturnType;
-
- beforeEach(() => {
- queryClient.clear();
- });
-
- // describe('with a successful request', () => {
- // beforeEach(() => {
- // const state = rootState.setIn(['instance', 'version'], '2.7.2 (compatible; Pleroma 2.2.0)');
- // store = mockStore(state);
-
- // __stub((mock) => {
- // mock.onGet('/api/v1/pleroma/chats')
- // .reply(200, [
- // chat,
- // ], {
- // link: '; rel="prev"',
- // });
- // });
- // });
-
- // it('is successful', async () => {
- // const { result } = renderHook(() => useChats().chatsQuery, undefined, store);
-
- // await waitFor(() => expect(result.current.isFetching).toBe(false));
-
- // expect(result.current.data?.length).toBe(1);
- // });
- // });
-
- describe('with an unsuccessful query', () => {
- beforeEach(() => {
- __stub((mock) => {
- mock.onGet('/api/v1/pleroma/chats').networkError();
- });
- });
-
- it('is has error state', async() => {
- const { result } = renderHook(() => useChats().chatsQuery);
-
- await waitFor(() => expect(result.current.isFetching).toBe(false));
-
- expect(result.current.error).toBeDefined();
- });
- });
-});
-
-describe('useChat()', () => {
- const relationshipId = '123';
- let store: Store;
-
- beforeEach(() => {
- const state = rootState;
- store = createTestStore(state);
-
- queryClient.clear();
- });
-
- describe('with a successful request', () => {
- beforeEach(() => {
- __stub((mock) => {
- mock.onGet(`/api/v1/pleroma/chats/${chat.id}`).reply(200, chat);
- mock
- .onGet(`/api/v1/accounts/relationships?id[]=${chat.account.id}`)
- .reply(200, [buildRelationship({ id: relationshipId, blocked_by: true })]);
- });
- });
-
- it('is successful', async () => {
- expect(store.getState().relationships.getIn([relationshipId, 'blocked_by'])).toBeUndefined();
-
- const { result } = renderHook(() => useChat(chat.id), undefined, store);
-
- await waitFor(() => expect(result.current.isFetching).toBe(false));
-
- expect(store.getState().relationships.getIn([relationshipId, 'id'])).toBe(relationshipId);
- expect(store.getState().relationships.getIn([relationshipId, 'blocked_by'])).toBe(true);
- expect(result.current.data.id).toBe(chat.id);
- });
- });
-
- describe('with an unsuccessful query', () => {
- beforeEach(() => {
- __stub((mock) => {
- mock.onGet(`/api/v1/pleroma/chats/${chat.id}`).networkError();
- });
- });
-
- it('is has error state', async() => {
- const { result } = renderHook(() => useChat(chat.id));
-
- await waitFor(() => expect(result.current.isFetching).toBe(false));
-
- expect(result.current.error).toBeDefined();
- });
- });
-});
-
-describe('useChatActions', () => {
- beforeEach(() => {
- queryClient.clear();
- });
-
- describe('markChatAsRead()', () => {
- const nextUnreadCount = 5;
-
- beforeEach(() => {
- __stub((mock) => {
- mock
- .onPost(`/api/v1/pleroma/chats/${chat.id}/read`, { last_read_id: '2' })
- .reply(200, { ...chat, unread: nextUnreadCount });
- });
- });
-
- it('updates the queryCache', async() => {
- const initialQueryData = {
- pages: [
- { result: [chat], hasMore: false, link: undefined },
- ],
- pageParams: [undefined],
- };
- const initialFlattenedData = flattenPages(initialQueryData);
- expect(sumBy(initialFlattenedData, (chat: IChat) => chat.unread)).toBe(0);
-
- queryClient.setQueryData(['chats', 'search'], initialQueryData);
-
- const { result } = renderHook(() => useChatActions(chat.id).markChatAsRead('2'));
-
- await waitFor(() => {
- expect(result.current).resolves.toBeDefined();
- });
-
- const nextQueryData = queryClient.getQueryData(['chats', 'search']);
- const nextFlattenedData = flattenPages(nextQueryData as any);
- expect(sumBy(nextFlattenedData as any, (chat: IChat) => chat.unread)).toBe(nextUnreadCount);
- });
- });
-
- describe('createChatMessage()', () => {
- beforeEach(() => {
- const initialQueryData = {
- pages: [
- { result: [buildChatMessage('1')], hasMore: false, link: undefined },
- ],
- pageParams: [undefined],
- };
-
- queryClient.setQueryData(ChatKeys.chatMessages(chat.id), initialQueryData);
-
- __stub((mock) => {
- mock
- .onPost(`/api/v1/pleroma/chats/${chat.id}/messages`)
- .reply(200, { hello: 'world' });
- });
- });
-
- it('creates a chat message', async() => {
- const { result } = renderHook(() => {
- const { createChatMessage } = useChatActions(chat.id);
-
- useEffect(() => {
- createChatMessage.mutate({ chatId: chat.id, content: 'hello' });
- }, []);
-
- return createChatMessage;
- });
-
- await waitFor(() => {
- expect(result.current.isLoading).toBe(false);
- });
-
- expect(result.current.data.data).toEqual({ hello: 'world' });
- });
- });
-});
diff --git a/packages/pl-fe/src/queries/trends.test.ts b/packages/pl-fe/src/queries/trends.test.ts
deleted file mode 100644
index cd8a410e4..000000000
--- a/packages/pl-fe/src/queries/trends.test.ts
+++ /dev/null
@@ -1,46 +0,0 @@
-import { __stub } from '@/api';
-import { queryClient, renderHook, waitFor } from '@/jest/test-helpers';
-
-import useTrends from './trends';
-
-describe('useTrends', () => {
- beforeEach(() => {
- queryClient.clear();
- });
-
- describe('with a successful query', () => {
- beforeEach(() => {
- __stub((mock) => {
- mock.onGet('/api/v1/trends')
- .reply(200, [
- { name: '#golf', url: 'https://example.com' },
- { name: '#tennis', url: 'https://example.com' },
- ]);
- });
- });
-
- it('is successful', async() => {
- const { result } = renderHook(() => useTrends());
-
- await waitFor(() => expect(result.current.isFetching).toBe(false));
-
- expect(result.current.data?.length).toBe(2);
- });
- });
-
- describe('with an unsuccessful query', () => {
- beforeEach(() => {
- __stub((mock) => {
- mock.onGet('/api/v1/trends').networkError();
- });
- });
-
- it('is successful', async() => {
- const { result } = renderHook(() => useTrends());
-
- await waitFor(() => expect(result.current.isFetching).toBe(false));
-
- expect(result.current.error).toBeDefined();
- });
- });
-});
diff --git a/packages/pl-fe/src/reducers/admin.test.ts b/packages/pl-fe/src/reducers/admin.test.ts
deleted file mode 100644
index fa4e26959..000000000
--- a/packages/pl-fe/src/reducers/admin.test.ts
+++ /dev/null
@@ -1,11 +0,0 @@
-import { Record as ImmutableRecord } from 'immutable';
-
-import reducer from './admin';
-
-describe('admin reducer', () => {
- it('should return the initial state', () => {
- const result = reducer(undefined, {} as any);
- expect(ImmutableRecord.isRecord(result)).toBe(true);
- expect(result.needsReboot).toBe(false);
- });
-});
diff --git a/packages/pl-fe/src/reducers/auth.test.ts b/packages/pl-fe/src/reducers/auth.test.ts
deleted file mode 100644
index 6e7913344..000000000
--- a/packages/pl-fe/src/reducers/auth.test.ts
+++ /dev/null
@@ -1,353 +0,0 @@
-import { Map as ImmutableMap } from 'immutable';
-
-import {
- AUTH_APP_CREATED,
- AUTH_LOGGED_IN,
- AUTH_LOGGED_OUT,
- VERIFY_CREDENTIALS_SUCCESS,
- VERIFY_CREDENTIALS_FAIL,
- SWITCH_ACCOUNT,
-} from '@/actions/auth';
-import { ME_FETCH_SKIP } from '@/actions/me';
-import { MASTODON_PRELOAD_IMPORT } from '@/actions/preload';
-import { buildAccount } from '@/jest/factory';
-
-import reducer, { AuthAppRecord, AuthTokenRecord, AuthUserRecord, ReducerRecord } from './auth';
-
-describe('auth reducer', () => {
- it('should return the initial state', () => {
- expect(reducer(undefined, {} as any).toJS()).toMatchObject({
- app: {},
- users: {},
- tokens: {},
- me: null,
- });
- });
-
- describe('AUTH_APP_CREATED', () => {
- it('should copy in the app', () => {
- const token = { token_type: 'Bearer', access_token: 'ABCDEFG' };
- const action = { type: AUTH_APP_CREATED, app: token };
-
- const result = reducer(undefined, action);
- const expected = AuthAppRecord(token);
-
- expect(result.app).toEqual(expected);
- });
- });
-
- describe('AUTH_LOGGED_IN', () => {
- it('should import the token', () => {
- const token = { token_type: 'Bearer', access_token: 'ABCDEFG' };
- const action = { type: AUTH_LOGGED_IN, token };
-
- const result = reducer(undefined, action);
- const expected = ImmutableMap({ 'ABCDEFG': AuthTokenRecord(token) });
-
- expect(result.tokens).toEqual(expected);
- });
-
- it('should merge the token with existing state', () => {
- const state = ReducerRecord({
- tokens: ImmutableMap({ 'ABCDEFG': AuthTokenRecord({ token_type: 'Bearer', access_token: 'ABCDEFG' }) }),
- });
-
- const expected = ImmutableMap({
- 'ABCDEFG': AuthTokenRecord({ token_type: 'Bearer', access_token: 'ABCDEFG' }),
- 'HIJKLMN': AuthTokenRecord({ token_type: 'Bearer', access_token: 'HIJKLMN' }),
- });
-
- const action = {
- type: AUTH_LOGGED_IN,
- token: { token_type: 'Bearer', access_token: 'HIJKLMN' },
- };
-
- const result = reducer(state, action);
- expect(result.tokens).toEqual(expected);
- });
- });
-
- describe('AUTH_LOGGED_OUT', () => {
- it('deletes the user', () => {
- const action = {
- type: AUTH_LOGGED_OUT,
- account: buildAccount({ url: 'https://gleasonator.com/users/alex' }),
- };
-
- const state = ReducerRecord({
- users: ImmutableMap({
- 'https://gleasonator.com/users/alex': AuthUserRecord({ id: '1234', access_token: 'ABCDEFG', url: 'https://gleasonator.com/users/alex' }),
- 'https://gleasonator.com/users/benis': AuthUserRecord({ id: '5678', access_token: 'HIJKLMN', url: 'https://gleasonator.com/users/benis' }),
- }),
- });
-
- const expected = ImmutableMap({
- 'https://gleasonator.com/users/benis': AuthUserRecord({ id: '5678', access_token: 'HIJKLMN', url: 'https://gleasonator.com/users/benis' }),
- });
-
- const result = reducer(state, action);
- expect(result.users).toEqual(expected);
- });
-
- it('sets `me` to the next available user', () => {
- const state = ReducerRecord({
- me: 'https://gleasonator.com/users/alex',
- users: ImmutableMap({
- 'https://gleasonator.com/users/alex': AuthUserRecord({ id: '1234', access_token: 'ABCDEFG', url: 'https://gleasonator.com/users/alex' }),
- 'https://gleasonator.com/users/benis': AuthUserRecord({ id: '5678', access_token: 'HIJKLMN', url: 'https://gleasonator.com/users/benis' }),
- }),
- });
-
- const action = {
- type: AUTH_LOGGED_OUT,
- account: buildAccount({ url: 'https://gleasonator.com/users/alex' }),
- };
-
- const result = reducer(state, action);
- expect(result.me).toEqual('https://gleasonator.com/users/benis');
- });
- });
-
- describe('VERIFY_CREDENTIALS_SUCCESS', () => {
- it('should import the user', () => {
- const action = {
- type: VERIFY_CREDENTIALS_SUCCESS,
- token: 'ABCDEFG',
- account: { id: '1234', url: 'https://gleasonator.com/users/alex' },
- };
-
- const expected = ImmutableMap({
- 'https://gleasonator.com/users/alex': AuthUserRecord({ id: '1234', access_token: 'ABCDEFG', url: 'https://gleasonator.com/users/alex' }),
- });
-
- const result = reducer(undefined, action);
- expect(result.users).toEqual(expected);
- });
-
- it('should set the account in the token', () => {
- const action = {
- type: VERIFY_CREDENTIALS_SUCCESS,
- token: 'ABCDEFG',
- account: { id: '1234', url: 'https://gleasonator.com/users/alex' },
- };
-
- const state = ReducerRecord({
- tokens: ImmutableMap({ 'ABCDEFG': AuthTokenRecord({ token_type: 'Bearer', access_token: 'ABCDEFG' }) }),
- });
-
- const expected = {
- 'ABCDEFG': {
- token_type: 'Bearer',
- access_token: 'ABCDEFG',
- account: '1234',
- me: 'https://gleasonator.com/users/alex',
- },
- };
-
- const result = reducer(state, action);
- expect(result.tokens.toJS()).toMatchObject(expected);
- });
-
- it('sets `me` to the account if unset', () => {
- const action = {
- type: VERIFY_CREDENTIALS_SUCCESS,
- token: 'ABCDEFG',
- account: { id: '1234', url: 'https://gleasonator.com/users/alex' },
- };
-
- const result = reducer(undefined, action);
- expect(result.me).toEqual('https://gleasonator.com/users/alex');
- });
-
- it('leaves `me` alone if already set', () => {
- const action = {
- type: VERIFY_CREDENTIALS_SUCCESS,
- token: 'ABCDEFG',
- account: { id: '1234', url: 'https://gleasonator.com/users/alex' },
- };
-
- const state = ReducerRecord({ me: 'https://gleasonator.com/users/benis' });
-
- const result = reducer(state, action);
- expect(result.me).toEqual('https://gleasonator.com/users/benis');
- });
-
- it('deletes mismatched users', () => {
- const action = {
- type: VERIFY_CREDENTIALS_SUCCESS,
- token: 'ABCDEFG',
- account: { id: '1234', url: 'https://gleasonator.com/users/alex' },
- };
-
- const state = ReducerRecord({
- users: ImmutableMap({
- 'https://gleasonator.com/users/mk': AuthUserRecord({ id: '4567', access_token: 'ABCDEFG', url: 'https://gleasonator.com/users/mk' }),
- 'https://gleasonator.com/users/curtis': AuthUserRecord({ id: '1234', access_token: 'ABCDEFG', url: 'https://gleasonator.com/users/curtis' }),
- 'https://gleasonator.com/users/benis': AuthUserRecord({ id: '5432', access_token: 'HIJKLMN', url: 'https://gleasonator.com/users/benis' }),
- }),
- });
-
- const expected = ImmutableMap({
- 'https://gleasonator.com/users/alex': AuthUserRecord({ id: '1234', access_token: 'ABCDEFG', url: 'https://gleasonator.com/users/alex' }),
- 'https://gleasonator.com/users/benis': AuthUserRecord({ id: '5432', access_token: 'HIJKLMN', url: 'https://gleasonator.com/users/benis' }),
- });
-
- const result = reducer(state, action);
- expect(result.users).toEqual(expected);
- });
-
- it('upgrades from an ID to a URL', () => {
- const action = {
- type: VERIFY_CREDENTIALS_SUCCESS,
- token: 'ABCDEFG',
- account: { id: '1234', url: 'https://gleasonator.com/users/alex' },
- };
-
- const state = ReducerRecord({
- me: '1234',
- users: ImmutableMap({
- '1234': AuthUserRecord({ id: '1234', access_token: 'ABCDEFG' }),
- '5432': AuthUserRecord({ id: '5432', access_token: 'HIJKLMN' }),
- }),
- tokens: ImmutableMap({
- 'ABCDEFG': AuthTokenRecord({ access_token: 'ABCDEFG', account: '1234' }),
- }),
- });
-
- const expected = {
- me: 'https://gleasonator.com/users/alex',
- users: {
- 'https://gleasonator.com/users/alex': { id: '1234', access_token: 'ABCDEFG', url: 'https://gleasonator.com/users/alex' },
- '5432': { id: '5432', access_token: 'HIJKLMN' },
- },
- tokens: {
- 'ABCDEFG': { access_token: 'ABCDEFG', account: '1234', me: 'https://gleasonator.com/users/alex' },
- },
- };
-
- const result = reducer(state, action);
- expect(result.toJS()).toMatchObject(expected);
- });
- });
-
- describe('VERIFY_CREDENTIALS_FAIL', () => {
- it('should delete the failed token if it 403\'d', () => {
- const state = ReducerRecord({
- tokens: ImmutableMap({
- 'ABCDEFG': AuthTokenRecord({ token_type: 'Bearer', access_token: 'ABCDEFG' }),
- 'HIJKLMN': AuthTokenRecord({ token_type: 'Bearer', access_token: 'HIJKLMN' }),
- }),
- });
-
- const expected = ImmutableMap({
- 'HIJKLMN': AuthTokenRecord({ token_type: 'Bearer', access_token: 'HIJKLMN' }),
- });
-
- const action = {
- type: VERIFY_CREDENTIALS_FAIL,
- token: 'ABCDEFG',
- error: { response: { status: 403 } },
- };
-
- const result = reducer(state, action);
- expect(result.tokens).toEqual(expected);
- });
-
- it('should delete any users associated with the failed token', () => {
- const state = ReducerRecord({
- users: ImmutableMap({
- 'https://gleasonator.com/users/alex': AuthUserRecord({ id: '1234', access_token: 'ABCDEFG', url: 'https://gleasonator.com/users/alex' }),
- 'https://gleasonator.com/users/benis': AuthUserRecord({ id: '5678', access_token: 'HIJKLMN', url: 'https://gleasonator.com/users/benis' }),
- }),
- });
-
- const expected = ImmutableMap({
- 'https://gleasonator.com/users/benis': AuthUserRecord({ id: '5678', access_token: 'HIJKLMN', url: 'https://gleasonator.com/users/benis' }),
- });
-
- const action = {
- type: VERIFY_CREDENTIALS_FAIL,
- token: 'ABCDEFG',
- error: { response: { status: 403 } },
- };
-
- const result = reducer(state, action);
- expect(result.users).toEqual(expected);
- });
-
- it('should reassign `me` to the next in line', () => {
- const state = ReducerRecord({
- me: 'https://gleasonator.com/users/alex',
- users: ImmutableMap({
- 'https://gleasonator.com/users/alex': AuthUserRecord({ id: '1234', access_token: 'ABCDEFG', url: 'https://gleasonator.com/users/alex' }),
- 'https://gleasonator.com/users/benis': AuthUserRecord({ id: '5678', access_token: 'HIJKLMN', url: 'https://gleasonator.com/users/benis' }),
- }),
- });
-
- const action = {
- type: VERIFY_CREDENTIALS_FAIL,
- token: 'ABCDEFG',
- error: { response: { status: 403 } },
- };
-
- const result = reducer(state, action);
- expect(result.me).toEqual('https://gleasonator.com/users/benis');
- });
- });
-
- describe('SWITCH_ACCOUNT', () => {
- it('sets the value of `me`', () => {
- const action = {
- type: SWITCH_ACCOUNT,
- account: { url: 'https://gleasonator.com/users/benis' },
- };
-
- const result = reducer(undefined, action);
- expect(result.me).toEqual('https://gleasonator.com/users/benis');
- });
- });
-
- describe('ME_FETCH_SKIP', () => {
- it('sets `me` to null', () => {
- const state = ReducerRecord({ me: 'https://gleasonator.com/users/alex' });
- const action = { type: ME_FETCH_SKIP };
- const result = reducer(state, action);
- expect(result.me).toEqual(null);
- });
- });
-
- describe('MASTODON_PRELOAD_IMPORT', () => {
- it('imports the user and token', async () => {
- const data = await import('@/__fixtures__/mastodon_initial_state.json');
-
- const action = {
- type: MASTODON_PRELOAD_IMPORT,
- data,
- };
-
- const expected = {
- me: 'https://mastodon.social/@benis911',
- app: {},
- users: {
- 'https://mastodon.social/@benis911': {
- id: '106801667066418367',
- access_token: 'Nh15V9JWyY5Fshf2OJ_feNvOIkTV7YGVfEJFr0Y0D6Q',
- url: 'https://mastodon.social/@benis911',
- },
- },
- tokens: {
- 'Nh15V9JWyY5Fshf2OJ_feNvOIkTV7YGVfEJFr0Y0D6Q': {
- access_token: 'Nh15V9JWyY5Fshf2OJ_feNvOIkTV7YGVfEJFr0Y0D6Q',
- account: '106801667066418367',
- me: 'https://mastodon.social/@benis911',
- scope: 'read write follow push',
- token_type: 'Bearer',
- },
- },
- };
-
- const result = reducer(undefined, action);
- expect(result.toJS()).toMatchObject(expected);
- });
- });
-});
diff --git a/packages/pl-fe/src/reducers/compose.test.ts b/packages/pl-fe/src/reducers/compose.test.ts
deleted file mode 100644
index d6baa4fc2..000000000
--- a/packages/pl-fe/src/reducers/compose.test.ts
+++ /dev/null
@@ -1,482 +0,0 @@
-import { List as ImmutableList, Record as ImmutableRecord, fromJS } from 'immutable';
-
-import * as actions from '@/actions/compose';
-import { ME_FETCH_SUCCESS, ME_PATCH_SUCCESS } from '@/actions/me';
-import { SETTING_CHANGE } from '@/actions/settings';
-import { TIMELINE_DELETE } from '@/actions/timelines';
-import { normalizeStatus } from '@/normalizers/status';
-
-import reducer, { initialState, ReducerCompose } from './compose';
-
-describe('compose reducer', () => {
- it('returns the initial state by default', () => {
- const state = reducer(undefined, {} as any);
- expect(state.toJS()).toMatchObject({
- default: {
- sensitive: false,
- spoiler: false,
- spoiler_text: '',
- privacy: 'public',
- text: '',
- caretPosition: null,
- in_reply_to: null,
- is_submitting: false,
- is_changing_upload: false,
- is_uploading: false,
- progress: 0,
- media_attachments: [],
- poll: null,
- suggestion_token: null,
- suggestions: [],
- tagHistory: [],
- content_type: 'text/plain',
- },
- });
- expect(state.get('default')!.idempotencyKey.length === 36);
- });
-
- describe('COMPOSE_SET_STATUS', () => {
- it('strips Pleroma integer attachments', async () => {
- const status = await import('@/__fixtures__/pleroma-status-deleted.json');
-
- const action = {
- type: actions.COMPOSE_SET_STATUS,
- id: 'compose-modal',
- status: normalizeStatus(fromJS(status)),
- v: { software: 'Pleroma' },
- withRedraft: true,
- };
-
- const result = reducer(undefined, action as any);
- expect(result.get('compose-modal')!.media_attachments.isEmpty()).toBe(true);
- });
-
- it('leaves non-Pleroma integer attachments alone', async () => {
- const status = await import('@/__fixtures__/pleroma-status-deleted.json');
-
- const action = {
- type: actions.COMPOSE_SET_STATUS,
- id: 'compose-modal',
- status: normalizeStatus(fromJS(status)),
- };
-
- const result = reducer(undefined, action as any);
- expect(result.get('compose-modal')!.media_attachments.getIn([0, 'id'])).toEqual('508107650');
- });
-
- it('sets the id when editing a post', async () => {
- const status = await import('@/__fixtures__/pleroma-status-deleted.json');
-
- const action = {
- id: 'compose-modal',
- withRedraft: false,
- type: actions.COMPOSE_SET_STATUS,
- status: normalizeStatus(fromJS(status)),
- };
-
- const result = reducer(undefined, action as any);
- expect(result.get('compose-modal')!.id).toEqual('AHU2RrX0wdcwzCYjFQ');
- });
-
- it('does not set the id when redrafting a post', async () => {
- const status = await import('@/__fixtures__/pleroma-status-deleted.json');
-
- const action = {
- id: 'compose-modal',
- withRedraft: true,
- type: actions.COMPOSE_SET_STATUS,
- status: normalizeStatus(fromJS(status)),
- };
-
- const result = reducer(undefined, action as any);
- expect(result.get('compose-modal')!.id).toEqual(null);
- });
- });
-
- it('uses \'public\' scope as default', () => {
- const action = {
- type: actions.COMPOSE_REPLY,
- id: 'compose-modal',
- status: ImmutableRecord({})(),
- account: ImmutableRecord({})(),
- };
- expect(reducer(undefined, action as any).toJS()['compose-modal']).toMatchObject({ privacy: 'public' });
- });
-
- it('uses \'direct\' scope when replying to a DM', () => {
- const state = initialState.set('default', ReducerCompose({ privacy: 'public' }));
- const action = {
- type: actions.COMPOSE_REPLY,
- id: 'compose-modal',
- status: ImmutableRecord({ visibility: 'direct' })(),
- account: ImmutableRecord({})(),
- };
- expect(reducer(state as any, action as any).toJS()['compose-modal']).toMatchObject({ privacy: 'direct' });
- });
-
- it('uses \'private\' scope when replying to a private post', () => {
- const state = initialState.set('default', ReducerCompose({ privacy: 'public' }));
- const action = {
- type: actions.COMPOSE_REPLY,
- id: 'compose-modal',
- status: ImmutableRecord({ visibility: 'private' })(),
- account: ImmutableRecord({})(),
- };
- expect(reducer(state as any, action as any).toJS()['compose-modal']).toMatchObject({ privacy: 'private' });
- });
-
- it('uses \'unlisted\' scope when replying to an unlisted post', () => {
- const state = initialState.set('default', ReducerCompose({ privacy: 'public' }));
- const action = {
- type: actions.COMPOSE_REPLY,
- id: 'compose-modal',
- status: ImmutableRecord({ visibility: 'unlisted' })(),
- account: ImmutableRecord({})(),
- };
- expect(reducer(state, action as any).toJS()['compose-modal']).toMatchObject({ privacy: 'unlisted' });
- });
-
- it('uses \'private\' scope when set as preference and replying to a public post', () => {
- const state = initialState.set('default', ReducerCompose({ privacy: 'private' }));
- const action = {
- type: actions.COMPOSE_REPLY,
- id: 'compose-modal',
- status: ImmutableRecord({ visibility: 'public' })(),
- account: ImmutableRecord({})(),
- };
- expect(reducer(state, action as any).toJS()['compose-modal']).toMatchObject({ privacy: 'private' });
- });
-
- it('uses \'unlisted\' scope when set as preference and replying to a public post', () => {
- const state = initialState.set('default', ReducerCompose({ privacy: 'unlisted' }));
- const action = {
- type: actions.COMPOSE_REPLY,
- id: 'compose-modal',
- status: ImmutableRecord({ visibility: 'public' })(),
- account: ImmutableRecord({})(),
- };
- expect(reducer(state, action as any).toJS()['compose-modal']).toMatchObject({ privacy: 'unlisted' });
- });
-
- it('sets preferred scope on user login', () => {
- const state = initialState.set('default', ReducerCompose({ privacy: 'public' }));
- const action = {
- type: ME_FETCH_SUCCESS,
- me: { pleroma: { settings_store: { pl_fe: { defaultPrivacy: 'unlisted' } } } },
- };
- expect(reducer(state, action as any).toJS().default).toMatchObject({
- privacy: 'unlisted',
- });
- });
-
- it('sets preferred scope on settings change', () => {
- const state = initialState.set('default', ReducerCompose({ privacy: 'public' }));
- const action = {
- type: SETTING_CHANGE,
- path: ['defaultPrivacy'],
- value: 'unlisted',
- };
- expect(reducer(state, action).toJS().default).toMatchObject({
- privacy: 'unlisted',
- });
- });
-
- it('sets default scope on settings save', () => {
- const state = initialState.set('default', ReducerCompose({ privacy: 'public' }));
- const action = {
- type: ME_PATCH_SUCCESS,
- me: { pleroma: { settings_store: { pl_fe: { defaultPrivacy: 'unlisted' } } } },
- };
- expect(reducer(state, action).toJS().default).toMatchObject({
- privacy: 'unlisted',
- });
- });
-
- it('should handle COMPOSE_SPOILERNESS_CHANGE on CW button click', () => {
- const state = initialState.set('home', ReducerCompose({ spoiler_text: 'spoiler text', spoiler: true, sensitive: true, media_attachments: ImmutableList() }));
- const action = {
- type: actions.COMPOSE_SPOILERNESS_CHANGE,
- id: 'home',
- };
- expect(reducer(state, action).toJS().home).toMatchObject({
- spoiler: false,
- spoiler_text: '',
- sensitive: false,
- });
- });
-
- it('should handle COMPOSE_SPOILER_TEXT_CHANGE', () => {
- const state = initialState.set('home', ReducerCompose({ spoiler_text: 'prevtext' }));
- const action = {
- type: actions.COMPOSE_SPOILER_TEXT_CHANGE,
- id: 'home',
- text: 'nexttext',
- };
- expect(reducer(state, action).toJS().home).toMatchObject({
- spoiler_text: 'nexttext',
- });
- });
-
- it('should handle COMPOSE_VISIBILITY_CHANGE', () => {
- const state = initialState.set('home', ReducerCompose({ privacy: 'public' }));
- const action = {
- type: actions.COMPOSE_VISIBILITY_CHANGE,
- id: 'home',
- value: 'direct',
- };
- expect(reducer(state, action).toJS().home).toMatchObject({
- privacy: 'direct',
- });
- });
-
- describe('COMPOSE_CHANGE', () => {
- it('should handle text changing', () => {
- const state = initialState.set('home', ReducerCompose({ text: 'prevtext' }));
- const action = {
- type: actions.COMPOSE_CHANGE,
- id: 'home',
- text: 'nexttext',
- };
- expect(reducer(state, action).toJS().home).toMatchObject({
- text: 'nexttext',
- });
- });
- });
-
- it('should handle COMPOSE_SUBMIT_REQUEST', () => {
- const state = initialState.set('home', ReducerCompose({ is_submitting: false }));
- const action = {
- type: actions.COMPOSE_SUBMIT_REQUEST,
- id: 'home',
- };
- expect(reducer(state, action).toJS().home).toMatchObject({
- is_submitting: true,
- });
- });
-
- it('should handle COMPOSE_UPLOAD_CHANGE_REQUEST', () => {
- const state = initialState.set('home', ReducerCompose({ is_changing_upload: false }));
- const action = {
- type: actions.COMPOSE_UPLOAD_CHANGE_REQUEST,
- id: 'home',
- };
- expect(reducer(state, action as any).toJS().home).toMatchObject({
- is_changing_upload: true,
- });
- });
-
- it('should handle COMPOSE_SUBMIT_SUCCESS', () => {
- const state = initialState.set('home', ReducerCompose({ privacy: 'private' }));
- const action = {
- type: actions.COMPOSE_SUBMIT_SUCCESS,
- id: 'home',
- };
- expect(reducer(state, action as any).toJS().home).toMatchObject({
- privacy: 'public',
- });
- });
-
- it('should handle COMPOSE_SUBMIT_FAIL', () => {
- const state = initialState.set('home', ReducerCompose({ is_submitting: true }));
- const action = {
- type: actions.COMPOSE_SUBMIT_FAIL,
- id: 'home',
- };
- expect(reducer(state, action as any).toJS().home).toMatchObject({
- is_submitting: false,
- });
- });
-
- it('should handle COMPOSE_UPLOAD_CHANGE_FAIL', () => {
- const state = initialState.set('home', ReducerCompose({ is_changing_upload: true }));
- const action = {
- type: actions.COMPOSE_UPLOAD_CHANGE_FAIL,
- composeId: 'home',
- };
- expect(reducer(state, action as any).toJS().home).toMatchObject({
- is_changing_upload: false,
- });
- });
-
- it('should handle COMPOSE_UPLOAD_REQUEST', () => {
- const state = initialState.set('home', ReducerCompose({ is_uploading: false }));
- const action = {
- type: actions.COMPOSE_UPLOAD_REQUEST,
- id: 'home',
- };
- expect(reducer(state, action as any).toJS().home).toMatchObject({
- is_uploading: true,
- });
- });
-
- it('should handle COMPOSE_UPLOAD_SUCCESS', () => {
- const state = initialState.set('home', ReducerCompose({ media_attachments: ImmutableList() }));
- const media = [
- {
- description: null,
- id: '1375732379',
- pleroma: {
- mime_type: 'image/jpeg',
- },
- preview_url: 'https://media.gleasonator.com/media_attachments/files/000/853/856/original/7035d67937053e1d.jpg',
- remote_url: 'https://media.gleasonator.com/media_attachments/files/000/853/856/original/7035d67937053e1d.jpg',
- text_url: 'https://media.gleasonator.com/media_attachments/files/000/853/856/original/7035d67937053e1d.jpg',
- type: 'image',
- url: 'https://media.gleasonator.com/media_attachments/files/000/853/856/original/7035d67937053e1d.jpg',
- },
- ];
- const action = {
- type: actions.COMPOSE_UPLOAD_SUCCESS,
- id: 'home',
- media: media,
- };
- expect(reducer(state, action as any).toJS().home).toMatchObject({
- is_uploading: false,
- });
- });
-
- it('should handle COMPOSE_UPLOAD_FAIL', () => {
- const state = initialState.set('home', ReducerCompose({ is_uploading: true }));
- const action = {
- type: actions.COMPOSE_UPLOAD_FAIL,
- id: 'home',
- };
- expect(reducer(state, action as any).toJS().home).toMatchObject({
- is_uploading: false,
- });
- });
-
- it('should handle COMPOSE_UPLOAD_PROGRESS', () => {
- const state = initialState.set('home', ReducerCompose({ progress: 0 }));
- const action = {
- type: actions.COMPOSE_UPLOAD_PROGRESS,
- id: 'home',
- loaded: 10,
- total: 15,
- };
- expect(reducer(state, action).toJS().home).toMatchObject({
- progress: 67,
- });
- });
-
- it('should handle COMPOSE_SUGGESTIONS_CLEAR', () => {
- const state = initialState.set('home', ReducerCompose());
- const action = {
- type: actions.COMPOSE_SUGGESTIONS_CLEAR,
- id: 'home',
- suggestions: [],
- suggestion_token: 'aiekdns3',
- };
- expect(reducer(state, action).toJS().home).toMatchObject({
- suggestion_token: null,
- });
- });
-
- it('should handle COMPOSE_SUGGESTION_TAGS_UPDATE', () => {
- const state = initialState.set('home', ReducerCompose({ tagHistory: ImmutableList([ 'hashtag' ]) }));
- const action = {
- type: actions.COMPOSE_SUGGESTION_TAGS_UPDATE,
- id: 'home',
- token: 'aaadken3',
- tags: ImmutableList([
- { name: 'hashtag', url: '', history: null },
- ]),
- };
- expect(reducer(state, action).toJS().home).toMatchObject({
- suggestion_token: 'aaadken3',
- suggestions: [],
- tagHistory: [ 'hashtag' ],
- });
- });
-
- it('should handle COMPOSE_TAG_HISTORY_UPDATE', () => {
- const action = {
- type: actions.COMPOSE_TAG_HISTORY_UPDATE,
- id: 'home',
- tags: [ 'hashtag', 'hashtag2'],
- };
- expect(reducer(undefined, action).toJS().home).toMatchObject({
- tagHistory: [ 'hashtag', 'hashtag2' ],
- });
- });
-
- it('should handle TIMELINE_DELETE - delete status from timeline', () => {
- const state = initialState.set('compose-modal', ReducerCompose({ in_reply_to: '9wk6pmImMrZjgrK7iC' }));
- const action = {
- type: TIMELINE_DELETE,
- id: '9wk6pmImMrZjgrK7iC',
- };
- expect(reducer(state, action as any).toJS()['compose-modal']).toMatchObject({
- in_reply_to: null,
- });
- });
-
- it('should handle COMPOSE_POLL_ADD', () => {
- const state = initialState.set('home', ReducerCompose({ poll: null }));
- const initialPoll = Object({
- options: [
- '',
- '',
- ],
- expires_in: 86400,
- multiple: false,
- });
- const action = {
- type: actions.COMPOSE_POLL_ADD,
- id: 'home',
- };
- expect(reducer(state, action).toJS().home).toMatchObject({
- poll: initialPoll,
- });
- });
-
- it('should handle COMPOSE_POLL_REMOVE', () => {
- const state = initialState.set('home', ReducerCompose());
- const action = {
- type: actions.COMPOSE_POLL_REMOVE,
- id: 'home',
- };
- expect(reducer(state, action).toJS().home).toMatchObject({
- poll: null,
- });
- });
-
- it('should handle COMPOSE_POLL_OPTION_CHANGE', () => {
- const initialPoll = Object({
- options: [
- 'option 1',
- 'option 2',
- ],
- expires_in: 86400,
- multiple: false,
- });
- const state = initialState.set('home', ReducerCompose({ poll: initialPoll }));
- const action = {
- type: actions.COMPOSE_POLL_OPTION_CHANGE,
- id: 'home',
- index: 0,
- title: 'change option',
- };
- const updatedPoll = Object({
- options: [
- 'change option',
- 'option 2',
- ],
- expires_in: 86400,
- multiple: false,
- });
- expect(reducer(state, action).toJS().home).toMatchObject({
- poll: updatedPoll,
- });
- });
-
- it('sets the post content-type', () => {
- const state = initialState.set('home', ReducerCompose());
- const action = {
- type: actions.COMPOSE_TYPE_CHANGE,
- id: 'home',
- value: 'text/plain',
- };
- expect(reducer(state, action).toJS().home).toMatchObject({ content_type: 'text/plain' });
- });
-});
diff --git a/packages/pl-fe/src/reducers/contexts.test.ts b/packages/pl-fe/src/reducers/contexts.test.ts
deleted file mode 100644
index 9ab72f933..000000000
--- a/packages/pl-fe/src/reducers/contexts.test.ts
+++ /dev/null
@@ -1,118 +0,0 @@
-import {
- Map as ImmutableMap,
- OrderedSet as ImmutableOrderedSet,
- fromJS,
- is,
-} from 'immutable';
-
-import { STATUS_IMPORT } from '@/actions/importer';
-import { CONTEXT_FETCH_SUCCESS } from '@/actions/statuses';
-import { TIMELINE_DELETE } from '@/actions/timelines';
-import { applyActions } from '@/jest/test-helpers';
-
-import reducer, { ReducerRecord } from './contexts';
-
-describe('contexts reducer', () => {
- it('should return the initial state', () => {
- expect(reducer(undefined, {} as any)).toEqual(ReducerRecord({
- inReplyTos: ImmutableMap(),
- replies: ImmutableMap(),
- }));
- });
-
- describe(CONTEXT_FETCH_SUCCESS, () => {
- it('inserts a tombstone connecting an orphaned descendant', () => {
- const status = { id: 'A', in_reply_to_id: null };
-
- const context = {
- id: 'A',
- ancestors: [],
- descendants: [
- { id: 'C', in_reply_to_id: 'B' },
- ],
- };
-
- const actions = [
- { type: STATUS_IMPORT, status },
- { type: CONTEXT_FETCH_SUCCESS, ...context },
- ];
-
- const result = applyActions(undefined, actions, reducer);
- expect(result.inReplyTos.get('C')).toBe('C-tombstone');
- expect(result.replies.get('A').toArray()).toEqual(['C-tombstone']);
- });
-
- it('inserts a tombstone connecting an orphaned descendant (with null in_reply_to_id)', () => {
- const status = { id: 'A', in_reply_to_id: null };
-
- const context = {
- id: 'A',
- ancestors: [],
- descendants: [
- { id: 'C', in_reply_to_id: null },
- ],
- };
-
- const actions = [
- { type: STATUS_IMPORT, status },
- { type: CONTEXT_FETCH_SUCCESS, ...context },
- ];
-
- const result = applyActions(undefined, actions, reducer);
- expect(result.inReplyTos.get('C')).toBe('C-tombstone');
- expect(result.replies.get('A').toArray()).toEqual(['C-tombstone']);
- });
-
- it('doesn\'t explode when it encounters a loop', () => {
- const status = { id: 'A', in_reply_to_id: null };
-
- const context = {
- id: 'A',
- ancestors: [],
- descendants: [
- { id: 'C', in_reply_to_id: 'E' },
- { id: 'D', in_reply_to_id: 'C' },
- { id: 'E', in_reply_to_id: 'D' },
- { id: 'F', in_reply_to_id: 'F' },
- ],
- };
-
- const actions = [
- { type: STATUS_IMPORT, status },
- { type: CONTEXT_FETCH_SUCCESS, ...context },
- ];
-
- const result = applyActions(undefined, actions, reducer);
-
- // These checks are superficial. We just don't want a stack overflow!
- expect(result.inReplyTos.get('C')).toBe('C-tombstone');
- expect(result.replies.get('A').toArray()).toEqual(['C-tombstone', 'F-tombstone']);
- });
- });
-
- describe(TIMELINE_DELETE, () => {
- it('deletes the status', () => {
- const action = { type: TIMELINE_DELETE, id: 'B' };
-
- const state = ReducerRecord({
- inReplyTos: fromJS({
- B: 'A',
- C: 'B',
- }) as ImmutableMap,
- replies: fromJS({
- A: ImmutableOrderedSet(['B']),
- B: ImmutableOrderedSet(['C']),
- }) as ImmutableMap>,
- });
-
- const expected = ReducerRecord({
- inReplyTos: fromJS({}) as ImmutableMap,
- replies: fromJS({
- A: ImmutableOrderedSet(),
- }) as ImmutableMap>,
- });
-
- expect(is(reducer(state, action), expected)).toBe(true);
- });
- });
-});
diff --git a/packages/pl-fe/src/reducers/conversations.test.ts b/packages/pl-fe/src/reducers/conversations.test.ts
deleted file mode 100644
index 89027b95c..000000000
--- a/packages/pl-fe/src/reducers/conversations.test.ts
+++ /dev/null
@@ -1,67 +0,0 @@
-import { List as ImmutableList, Record as ImmutableRecord } from 'immutable';
-
-import * as actions from '@/actions/conversations';
-
-import reducer from './conversations';
-
-describe('conversations reducer', () => {
- it('should return the initial state', () => {
- expect(reducer(undefined, {} as any)).toMatchObject({
- items: ImmutableList(),
- isLoading: false,
- hasMore: true,
- mounted: 0,
- });
- });
-
- it('should handle CONVERSATIONS_FETCH_REQUEST', () => {
- const state = ImmutableRecord({ isLoading: false })();
- const action = {
- type: actions.CONVERSATIONS_FETCH_REQUEST,
- };
- expect(reducer(state as any, action).toJS()).toMatchObject({
- isLoading: true,
- });
- });
-
- it('should handle CONVERSATIONS_FETCH_FAIL', () => {
- const state = ImmutableRecord({ isLoading: true })();
- const action = {
- type: actions.CONVERSATIONS_FETCH_FAIL,
- };
- expect(reducer(state as any, action).toJS()).toMatchObject({
- isLoading: false,
- });
- });
-
- // it('should handle the Action CONVERSATIONS_MOUNT', () => {
- // expect(
- // reducer(
- // {
- // mounted: false,
- // },
- // {
- // type: 'CONVERSATIONS_MOUNT',
- // },
- // ),
- // ).toEqual({
- // mounted: true,
- // });
- // });
- //
- // it('should handle the Action CONVERSATIONS_UNMOUNT', () => {
- // expect(
- // reducer(
- // {
- // mounted: true,
- // },
- // {
- // type: 'CONVERSATIONS_UNMOUNT',
- // },
- // ),
- // ).toEqual({
- // mounted: false,
- // });
- // });
-
-});
diff --git a/packages/pl-fe/src/reducers/filters.test.ts b/packages/pl-fe/src/reducers/filters.test.ts
deleted file mode 100644
index 492eff94a..000000000
--- a/packages/pl-fe/src/reducers/filters.test.ts
+++ /dev/null
@@ -1,9 +0,0 @@
-import { List as ImmutableList } from 'immutable';
-
-import reducer from './filters';
-
-describe('filters reducer', () => {
- it('should return the initial state', () => {
- expect(reducer(undefined, {} as any)).toEqual(ImmutableList());
- });
-});
diff --git a/packages/pl-fe/src/reducers/index.test.ts b/packages/pl-fe/src/reducers/index.test.ts
deleted file mode 100644
index a3b1cf2ea..000000000
--- a/packages/pl-fe/src/reducers/index.test.ts
+++ /dev/null
@@ -1,11 +0,0 @@
-import { Record as ImmutableRecord } from 'immutable';
-
-import reducer from '.';
-
-describe('root reducer', () => {
- it('should return the initial state', () => {
- const result = reducer(undefined, {} as any);
- expect(ImmutableRecord.isRecord(result)).toBe(true);
- expect(result.instance.version).toEqual('0.0.0');
- });
-});
diff --git a/packages/pl-fe/src/reducers/instance.test.ts b/packages/pl-fe/src/reducers/instance.test.ts
deleted file mode 100644
index 5a0c87a82..000000000
--- a/packages/pl-fe/src/reducers/instance.test.ts
+++ /dev/null
@@ -1,51 +0,0 @@
-import { ADMIN_CONFIG_UPDATE_REQUEST } from '@/actions/admin';
-
-import reducer from './instance';
-
-describe('instance reducer', () => {
- it('should return the initial state', () => {
- const result = reducer(undefined, {} as any);
-
- const expected = {
- description_limit: 1500,
- configuration: {
- chats: {
- max_characters: 5000,
- max_media_attachments: 1,
- },
- statuses: {
- max_characters: 500,
- max_media_attachments: 4,
- },
- polls: {
- max_options: 4,
- max_characters_per_option: 25,
- min_expiration: 300,
- max_expiration: 2629746,
- },
- },
- version: '0.0.0',
- };
-
- expect(result).toMatchObject(expected);
- });
-
- describe('ADMIN_CONFIG_UPDATE_REQUEST', async () => {
- const { configs } = await import('@/__fixtures__/pleroma-admin-config.json');
-
- it('imports the configs', () => {
- const action = {
- type: ADMIN_CONFIG_UPDATE_REQUEST,
- configs,
- };
-
- // The normalizer has `registrations: closed` by default
- const state = reducer(undefined, {} as any);
- expect(state.registrations).toBe(false);
-
- // After importing the configs, registration will be open
- const result = reducer(state, action);
- expect(result.registrations).toBe(true);
- });
- });
-});
diff --git a/packages/pl-fe/src/reducers/me.test.ts b/packages/pl-fe/src/reducers/me.test.ts
deleted file mode 100644
index 753171d11..000000000
--- a/packages/pl-fe/src/reducers/me.test.ts
+++ /dev/null
@@ -1,7 +0,0 @@
-import reducer from './me';
-
-describe('me reducer', () => {
- it('should return the initial state', () => {
- expect(reducer(undefined, {} as any)).toEqual(null);
- });
-});
diff --git a/packages/pl-fe/src/reducers/meta.test.ts b/packages/pl-fe/src/reducers/meta.test.ts
deleted file mode 100644
index 93ddc40ee..000000000
--- a/packages/pl-fe/src/reducers/meta.test.ts
+++ /dev/null
@@ -1,12 +0,0 @@
-import { Record as ImmutableRecord } from 'immutable';
-
-import reducer from './meta';
-
-describe('meta reducer', () => {
- it('should return the initial state', () => {
- const result = reducer(undefined, {} as any);
- expect(ImmutableRecord.isRecord(result)).toBe(true);
- expect(result.instance_fetch_failed).toBe(false);
- expect(result.swUpdating).toBe(false);
- });
-});
diff --git a/packages/pl-fe/src/reducers/push-notifications.test.ts b/packages/pl-fe/src/reducers/push-notifications.test.ts
deleted file mode 100644
index 021cb1771..000000000
--- a/packages/pl-fe/src/reducers/push-notifications.test.ts
+++ /dev/null
@@ -1,19 +0,0 @@
-import reducer from './push-notifications';
-
-describe('push_notifications reducer', () => {
- it('should return the initial state', () => {
- expect(reducer(undefined, {} as any).toJS()).toEqual({
- subscription: null,
- alerts: {
- follow: true,
- follow_request: true,
- favourite: true,
- reblog: true,
- mention: true,
- poll: true,
- },
- isSubscribed: false,
- browserSupport: false,
- });
- });
-});
diff --git a/packages/pl-fe/src/reducers/statuses.test.ts b/packages/pl-fe/src/reducers/statuses.test.ts
deleted file mode 100644
index b4eb857e4..000000000
--- a/packages/pl-fe/src/reducers/statuses.test.ts
+++ /dev/null
@@ -1,243 +0,0 @@
-import {
- Map as ImmutableMap,
- Record as ImmutableRecord,
-} from 'immutable';
-
-import { STATUS_IMPORT } from '@/actions/importer';
-import {
- STATUS_CREATE_REQUEST,
- STATUS_CREATE_FAIL,
- STATUS_DELETE_REQUEST,
- STATUS_DELETE_FAIL,
-} from '@/actions/statuses';
-import { normalizeStatus } from '@/normalizers/status';
-
-import reducer, { ReducerStatus } from './statuses';
-
-describe('statuses reducer', () => {
- it('should return the initial state', () => {
- expect(reducer(undefined, {} as any)).toEqual(ImmutableMap());
- });
-
- describe('STATUS_IMPORT', () => {
- it('parses the status as a Record', async () => {
- const status = await import('@/__fixtures__/pleroma-quote-post.json');
- const action = { type: STATUS_IMPORT, status };
- const result = reducer(undefined, action).get('AFmFMSpITT9xcOJKcK');
-
- expect(ImmutableRecord.isRecord(result)).toBe(true);
- });
-
- it('fixes the order of mentions', async () => {
- const status = await import('@/__fixtures__/status-unordered-mentions.json');
- const action = { type: STATUS_IMPORT, status };
-
- const expected = ['NEETzsche', 'alex', 'Lumeinshin', 'sneeden'];
-
- const result = reducer(undefined, action)
- .get('AFChectaqZjmOVkXZ2')?.mentions
- .map(mention => mention.get('username'))
- .toJS();
-
- expect(result).toEqual(expected);
- });
-
- it('preserves the quote', async () => {
- const quotePost = await import('@/__fixtures__/pleroma-quote-post.json');
- const quotedQuotePost = await import('@/__fixtures__/pleroma-quote-of-quote-post.json');
-
- let state = undefined;
- state = reducer(state, { type: STATUS_IMPORT, status: quotePost });
- state = reducer(state, { type: STATUS_IMPORT, status: quotedQuotePost.pleroma.quote });
-
- expect(state.getIn(['AFmFMSpITT9xcOJKcK', 'quote'])).toEqual('AFmFLcd6XYVdjWCrOS');
- });
-
- it('normalizes Mitra attachments', async () => {
- const status = await import('@/__fixtures__/mitra-status-with-attachments.json');
-
- const state = reducer(undefined, { type: STATUS_IMPORT, status });
-
- const expected = [{
- id: '017eeb0e-e5df-30a4-77a7-a929145cb836',
- type: 'image',
- url: 'https://mitra.social/media/8e04e6091bbbac79641b5812508683ce72c38693661c18d16040553f2371e18d.png',
- preview_url: 'https://mitra.social/media/8e04e6091bbbac79641b5812508683ce72c38693661c18d16040553f2371e18d.png',
- remote_url: null,
- }, {
- id: '017eeb0e-e5e4-2a48-2889-afdebf368a54',
- type: 'unknown',
- url: 'https://mitra.social/media/8f72dc2e98572eb4ba7c3a902bca5f69c448fc4391837e5f8f0d4556280440ac',
- preview_url: 'https://mitra.social/media/8f72dc2e98572eb4ba7c3a902bca5f69c448fc4391837e5f8f0d4556280440ac',
- remote_url: null,
- }, {
- id: '017eeb0e-e5e5-79fd-6054-8b6869b1db49',
- type: 'unknown',
- url: 'https://mitra.social/media/55a81a090247cc4fc127e5716bcf7964f6e0df9b584f85f4696c0b994747a4d0.oga',
- preview_url: 'https://mitra.social/media/55a81a090247cc4fc127e5716bcf7964f6e0df9b584f85f4696c0b994747a4d0.oga',
- remote_url: null,
- }, {
- id: '017eeb0e-e5e6-c416-a444-21e560c47839',
- type: 'unknown',
- url: 'https://mitra.social/media/0d96a4ff68ad6d4b6f1f30f713b18d5184912ba8dd389f86aa7710db079abcb0',
- preview_url: 'https://mitra.social/media/0d96a4ff68ad6d4b6f1f30f713b18d5184912ba8dd389f86aa7710db079abcb0',
- remote_url: null,
- }];
-
- expect(state.get('017eeb0e-e5e7-98fe-6b2b-ad02349251fb')?.media_attachments.toJS()).toMatchObject(expected);
- });
-
- it('fixes Pleroma attachments', async () => {
- const status = await import('@/__fixtures__/pleroma-status-with-attachments.json');
- const action = { type: STATUS_IMPORT, status };
- const state = reducer(undefined, action);
- const result = state.get('AGNkA21auFR5lnEAHw')?.media_attachments;
-
- expect(result?.size).toBe(4);
- expect(result?.get(1)?.meta).toEqual(ImmutableMap());
- expect(result?.getIn([1, 'pleroma', 'mime_type'])).toBe('application/x-nes-rom');
- });
-
- it('hides CWs', async () => {
- const status = await import('@/__fixtures__/status-cw.json');
- const action = { type: STATUS_IMPORT, status };
-
- const hidden = reducer(undefined, action).getIn(['107831528995252317', 'hidden']);
- expect(hidden).toBe(true);
- });
-
- it('parses custom emojis', async () => {
- const status = await import('@/__fixtures__/status-custom-emoji.json');
- const action = { type: STATUS_IMPORT, status };
-
- const expected = 'Hello world test ';
-
- const result = reducer(undefined, action).getIn(['AGm7uC9DaAIGUa4KYK', 'contentHtml']);
- expect(result).toBe(expected);
- });
-
- it('builds search_index', async () => {
- const status = await import('@/__fixtures__/status-with-poll.json');
- const action = { type: STATUS_IMPORT, status };
-
- const expected = `What is tolerance?
-
-Banning, censoring, and deplatforming anyone you disagree with
-
-Promoting free speech, even for people and ideas you dislike`;
-
- const result = reducer(undefined, action).getIn(['103874034847713213', 'search_index']);
- expect(result).toEqual(expected);
- });
-
- it('builds search_index with mentions', async () => {
- const status = await import('@/__fixtures__/pleroma-status-reply-with-mentions.json');
- const action = { type: STATUS_IMPORT, status };
-
- const expected = `DMs are definitely only federated to the servers of the recipients tho. So if I DM a kfcc user, the kfcc admins can see it, but no other instance admins can.
-
-@crunklord420@kiwifarms.cc
-
-@becassine@kiwifarms.cc
-
-@King_Porgi@poa.st
-
-@ademan@thebag.social`;
-
- const result = reducer(undefined, action).getIn(['AHcweewcCh0iPUtMdk', 'search_index']);
- expect(result).toEqual(expected);
- });
- });
-
- describe('STATUS_CREATE_REQUEST', () => {
- it('increments the replies_count of its parent', () => {
- const state = ImmutableMap({
- '123': normalizeStatus({ replies_count: 4 }) as ReducerStatus,
- });
-
- const action = {
- type: STATUS_CREATE_REQUEST,
- params: { in_reply_to_id: '123' },
- };
-
- const result = reducer(state, action).getIn(['123', 'replies_count']);
- expect(result).toEqual(5);
- });
- });
-
- describe('STATUS_CREATE_FAIL', () => {
- it('decrements the replies_count of its parent', () => {
- const state = ImmutableMap({
- '123': normalizeStatus({ replies_count: 5 }) as ReducerStatus,
- });
-
- const action = {
- type: STATUS_CREATE_FAIL,
- params: { in_reply_to_id: '123' },
- };
-
- const result = reducer(state, action).getIn(['123', 'replies_count']);
- expect(result).toEqual(4);
- });
- });
-
- describe('STATUS_DELETE_REQUEST', () => {
- it('decrements the replies_count of its parent', () => {
- const state = ImmutableMap({
- '123': normalizeStatus({ replies_count: 4 }) as ReducerStatus,
- });
-
- const action = {
- type: STATUS_DELETE_REQUEST,
- params: { in_reply_to_id: '123' },
- };
-
- const result = reducer(state, action).getIn(['123', 'replies_count']);
- expect(result).toEqual(3);
- });
-
- it('gracefully does nothing if no parent', () => {
- const state = ImmutableMap({
- '123': normalizeStatus({ replies_count: 4 }) as ReducerStatus,
- });
-
- const action = {
- type: STATUS_DELETE_REQUEST,
- params: { id: '1' },
- };
-
- const result = reducer(state, action).getIn(['123', 'replies_count']);
- expect(result).toEqual(4);
- });
- });
-
- describe('STATUS_DELETE_FAIL', () => {
- it('decrements the replies_count of its parent', () => {
- const state = ImmutableMap({
- '123': normalizeStatus({ replies_count: 4 }) as ReducerStatus,
- });
-
- const action = {
- type: STATUS_DELETE_FAIL,
- params: { in_reply_to_id: '123' },
- };
-
- const result = reducer(state, action).getIn(['123', 'replies_count']);
- expect(result).toEqual(5);
- });
-
- it('gracefully does nothing if no parent', () => {
- const state = ImmutableMap({
- '123': normalizeStatus({ replies_count: 4 }) as ReducerStatus,
- });
-
- const action = {
- type: STATUS_DELETE_FAIL,
- params: { id: '1' },
- };
-
- const result = reducer(state, action).getIn(['123', 'replies_count']);
- expect(result).toEqual(4);
- });
- });
-});
diff --git a/packages/pl-fe/src/reducers/timelines.test.ts b/packages/pl-fe/src/reducers/timelines.test.ts
deleted file mode 100644
index 3af0421f9..000000000
--- a/packages/pl-fe/src/reducers/timelines.test.ts
+++ /dev/null
@@ -1,123 +0,0 @@
-import { Map as ImmutableMap, OrderedSet as ImmutableOrderedSet, Record as ImmutableRecord, fromJS } from 'immutable';
-
-import {
- TIMELINE_EXPAND_REQUEST,
- TIMELINE_EXPAND_FAIL,
- TIMELINE_EXPAND_SUCCESS,
-} from '@/actions/timelines';
-
-import reducer from './timelines';
-
-describe('timelines reducer', () => {
- it('should return the initial state', () => {
- expect(reducer(undefined, {} as any)).toEqual(ImmutableMap());
- });
-
- describe('TIMELINE_EXPAND_REQUEST', () => {
- it('sets loading to true', () => {
- const action = {
- type: TIMELINE_EXPAND_REQUEST,
- timeline: 'home',
- };
-
- const result = reducer(undefined, action);
- expect(result.getIn(['home', 'isLoading'])).toBe(true);
- });
- });
-
- describe('TIMELINE_EXPAND_FAIL', () => {
- it('sets loading to false', () => {
- const state = ImmutableMap({
- home: ImmutableRecord({ isLoading: true })(),
- });
-
- const action = {
- type: TIMELINE_EXPAND_FAIL,
- timeline: 'home',
- };
-
- const result = reducer(state as any, action);
- expect(result.getIn(['home', 'isLoading'])).toBe(false);
- });
- });
-
- describe('TIMELINE_EXPAND_SUCCESS', () => {
- it('sets loading to false', () => {
- const state = ImmutableMap(fromJS({
- home: ImmutableRecord({ isLoading: true })(),
- }));
-
- const action = {
- type: TIMELINE_EXPAND_SUCCESS,
- timeline: 'home',
- };
-
- const result = reducer(state as any, action);
- expect(result.getIn(['home', 'isLoading'])).toBe(false);
- });
-
- it('adds the status IDs', () => {
- const expected = ImmutableOrderedSet(['1', '2', '5']);
-
- const action = {
- type: TIMELINE_EXPAND_SUCCESS,
- timeline: 'home',
- statuses: [{ id: '1' }, { id: '2' }, { id: '5' }],
- };
-
- const result = reducer(undefined, action);
- expect(result.getIn(['home', 'items'])).toEqual(expected);
- });
-
- it('merges new status IDs', () => {
- const state = ImmutableMap(fromJS({
- home: ImmutableRecord({ items: ImmutableOrderedSet(['5', '2', '1']) })(),
- }));
-
- const expected = ImmutableOrderedSet(['6', '5', '4', '2', '1']);
-
- const action = {
- type: TIMELINE_EXPAND_SUCCESS,
- timeline: 'home',
- statuses: [{ id: '6' }, { id: '5' }, { id: '4' }],
- };
-
- const result = reducer(state as any, action);
- expect(result.getIn(['home', 'items'])).toEqual(expected);
- });
-
- it('merges old status IDs', () => {
- const state = ImmutableMap(fromJS({
- home: ImmutableRecord({ items: ImmutableOrderedSet(['6', '4', '3']) })(),
- }));
-
- const expected = ImmutableOrderedSet(['6', '4', '3', '5', '2', '1']);
-
- const action = {
- type: TIMELINE_EXPAND_SUCCESS,
- timeline: 'home',
- statuses: [{ id: '5' }, { id: '2' }, { id: '1' }],
- };
-
- const result = reducer(state as any, action);
- expect(result.getIn(['home', 'items'])).toEqual(expected);
- });
-
- it('overrides pinned post IDs', () => {
- const state = ImmutableMap(fromJS({
- 'account:1:pinned': ImmutableRecord({ items: ImmutableOrderedSet(['5', '2', '1']) })(),
- }));
-
- const expected = ImmutableOrderedSet(['9', '8', '7']);
-
- const action = {
- type: TIMELINE_EXPAND_SUCCESS,
- timeline: 'home',
- statuses: [{ id: '9' }, { id: '8' }, { id: '7' }],
- };
-
- const result = reducer(state as any, action);
- expect(result.getIn(['home', 'items'])).toEqual(expected);
- });
- });
-});
diff --git a/packages/pl-fe/src/toast.test.tsx b/packages/pl-fe/src/toast.test.tsx
deleted file mode 100644
index af23c7e60..000000000
--- a/packages/pl-fe/src/toast.test.tsx
+++ /dev/null
@@ -1,166 +0,0 @@
-import { render } from '@testing-library/react';
-// import { AxiosError, AxiosHeaders } from 'axios';
-import React from 'react';
-import { Toaster } from 'react-hot-toast';
-import { IntlProvider } from 'react-intl';
-
-import { act, screen } from '@/jest/test-helpers';
-
-import toast from './toast';
-
-const renderApp = () => ({
- toast,
- ...render(
-
-
- ,
- ),
-});
-
-beforeAll(() => {
- vi.spyOn(console, 'error').mockImplementation(() => {});
-});
-
-afterEach(() => {
- (console.error as any).mockClear();
-});
-
-afterAll(() => {
- (console.error as any).mockRestore();
-});
-
-describe('toasts', () => {
- it('renders successfully', async() => {
- const { toast } = renderApp();
-
- act(() => {
- toast.success('hello');
- });
-
- expect(screen.getByTestId('toast')).toBeInTheDocument();
- expect(screen.getByTestId('toast-message')).toHaveTextContent('hello');
- });
-
- describe('actionable button', () => {
- it('renders the button', async() => {
- const { toast } = renderApp();
-
- act(() => {
- toast.success('hello', { action: () => null, actionLabel: 'click me' });
- });
-
- expect(screen.getByTestId('toast-action')).toHaveTextContent('click me');
- });
-
- it('does not render the button', async() => {
- const { toast } = renderApp();
-
- act(() => {
- toast.success('hello');
- });
-
- expect(screen.queryAllByTestId('toast-action')).toHaveLength(0);
- });
- });
-
- // describe('showAlertForError()', () => {
- // const buildError = (message: string, status: number) => new AxiosError(message, String(status), undefined, null, {
- // data: {
- // error: message,
- // },
- // statusText: String(status),
- // status,
- // headers: {},
- // config: {
- // headers: new AxiosHeaders(),
- // },
- // });
-
- // describe('with a 502 status code', () => {
- // it('renders the correct message', async() => {
- // const message = 'The server is down';
- // const error = buildError(message, 502);
- // const { toast } = renderApp();
-
- // act(() => {
- // toast.showAlertForError(error);
- // });
-
- // expect(screen.getByTestId('toast')).toBeInTheDocument();
- // expect(screen.getByTestId('toast-message')).toHaveTextContent('The server is down');
- // });
- // });
-
- // describe('with a 404 status code', () => {
- // it('renders the correct message', async() => {
- // const error = buildError('', 404);
- // const { toast } = renderApp();
-
- // act(() => {
- // toast.showAlertForError(error);
- // });
-
- // expect(screen.queryAllByTestId('toast')).toHaveLength(0);
- // });
- // });
-
- // describe('with a 410 status code', () => {
- // it('renders the correct message', async() => {
- // const error = buildError('', 410);
- // const { toast } = renderApp();
-
- // act(() => {
- // toast.showAlertForError(error);
- // });
-
- // expect(screen.queryAllByTestId('toast')).toHaveLength(0);
- // });
- // });
-
- // describe('with an accepted status code', () => {
- // describe('with a message from the server', () => {
- // it('renders the correct message', async() => {
- // const message = 'custom message';
- // const error = buildError(message, 200);
- // const { toast } = renderApp();
-
- // act(() => {
- // toast.showAlertForError(error);
- // });
-
- // expect(screen.getByTestId('toast')).toBeInTheDocument();
- // expect(screen.getByTestId('toast-message')).toHaveTextContent(message);
- // });
- // });
-
- // describe('without a message from the server', () => {
- // it('renders the correct message', async() => {
- // const message = 'The request has been accepted for processing';
- // const error = buildError(message, 202);
- // const { toast } = renderApp();
-
- // act(() => {
- // toast.showAlertForError(error);
- // });
-
- // expect(screen.getByTestId('toast')).toBeInTheDocument();
- // expect(screen.getByTestId('toast-message')).toHaveTextContent(message);
- // });
- // });
- // });
-
- // // describe('without a response', () => {
- // // it('renders the default message', async() => {
- // // const error = new AxiosError();
- // // const { toast } = renderApp();
-
- // // act(() => {
- // // toast.showAlertForError(error);
- // // });
-
- // // expect(screen.getByTestId('toast')).toBeInTheDocument();
- // // expect(screen.getByTestId('toast-message')).toHaveTextContent('An unexpected error occurred.');
- // // });
- // // });
- // });
-});
diff --git a/packages/pl-fe/src/utils/badges.test.ts b/packages/pl-fe/src/utils/badges.test.ts
deleted file mode 100644
index 2dff7a903..000000000
--- a/packages/pl-fe/src/utils/badges.test.ts
+++ /dev/null
@@ -1,41 +0,0 @@
-import { buildAccount } from '@/jest/factory';
-
-import {
- tagToBadge,
- badgeToTag,
- filterBadges,
- getTagDiff,
- getBadges,
-} from './badges';
-
-test('tagToBadge', () => {
- expect(tagToBadge('yolo')).toEqual('badge:yolo');
-});
-
-test('badgeToTag', () => {
- expect(badgeToTag('badge:yolo')).toEqual('yolo');
- expect(badgeToTag('badge:badge:')).toEqual('badge:');
-});
-
-test('filterBadges', () => {
- const tags = ['one', 'badge:two', 'badge:three', 'four'];
- const badges = ['badge:two', 'badge:three'];
- expect(filterBadges(tags)).toEqual(badges);
-});
-
-test('getTagDiff', () => {
- const oldTags = ['one', 'two', 'three'];
- const newTags = ['three', 'four', 'five'];
-
- const expected = {
- added: ['four', 'five'],
- removed: ['one', 'two'],
- };
-
- expect(getTagDiff(oldTags, newTags)).toEqual(expected);
-});
-
-test('getBadges', () => {
- const account = buildAccount({ id: '1', pleroma: { tags: ['a', 'b', 'badge:c'] } });
- expect(getBadges(account)).toEqual(['badge:c']);
-});
diff --git a/packages/pl-fe/src/utils/base64.test.ts b/packages/pl-fe/src/utils/base64.test.ts
deleted file mode 100644
index ae0782677..000000000
--- a/packages/pl-fe/src/utils/base64.test.ts
+++ /dev/null
@@ -1,10 +0,0 @@
-import * as base64 from './base64';
-
-describe('base64', () => {
- describe('decode', () => {
- it('returns a uint8 array', () => {
- const arr = base64.decode('dGVzdA==');
- expect(arr).toEqual(new Uint8Array([116, 101, 115, 116]));
- });
- });
-});
diff --git a/packages/pl-fe/src/utils/chats.test.ts b/packages/pl-fe/src/utils/chats.test.ts
deleted file mode 100644
index cb6bee96e..000000000
--- a/packages/pl-fe/src/utils/chats.test.ts
+++ /dev/null
@@ -1,64 +0,0 @@
-import { buildAccount } from '@/jest/factory';
-import { normalizeChatMessage } from '@/normalizers/chat-message';
-import { ChatKeys, IChat } from '@/queries/chats';
-import { queryClient } from '@/queries/client';
-
-import { updateChatMessage } from './chats';
-
-const chat: IChat = {
- account: buildAccount({
- username: 'username',
- verified: true,
- id: '1',
- acct: 'acct',
- avatar: 'avatar',
- avatar_static: 'avatar',
- display_name: 'my name',
- }),
- created_at: '2020-06-10T02:05:06.000Z',
- id: '1',
- last_message: null,
- unread: 0,
-};
-
-const buildChatMessage = (id: string) => normalizeChatMessage({
- id,
- chat_id: '1',
- account_id: '1',
- content: `chat message #${id}`,
- created_at: '2020-06-10T02:05:06.000Z',
- unread: true,
-});
-
-describe('chat utils', () => {
- describe('updateChatMessage()', () => {
- const initialChatMessage = buildChatMessage('1');
-
- beforeEach(() => {
- const initialQueryData = {
- pages: [
- { result: [initialChatMessage], hasMore: false, link: undefined },
- ],
- pageParams: [undefined],
- };
-
- queryClient.setQueryData(ChatKeys.chatMessages(chat.id), initialQueryData);
- });
-
- it('correctly updates the chat message', () => {
- expect(
- (queryClient.getQueryData(ChatKeys.chatMessages(chat.id)) as any).pages[0].result[0].content,
- ).toEqual(initialChatMessage.content);
-
- const nextChatMessage = normalizeChatMessage({
- ...initialChatMessage.toJS(),
- content: 'new content',
- });
-
- updateChatMessage(nextChatMessage);
- expect(
- (queryClient.getQueryData(ChatKeys.chatMessages(chat.id)) as any).pages[0].result[0].content,
- ).toEqual(nextChatMessage.content);
- });
- });
-});
diff --git a/packages/pl-fe/src/utils/colors.test.ts b/packages/pl-fe/src/utils/colors.test.ts
deleted file mode 100644
index 787d5886e..000000000
--- a/packages/pl-fe/src/utils/colors.test.ts
+++ /dev/null
@@ -1,22 +0,0 @@
-import tintify from './colors';
-
-const AZURE = '#0482d8';
-
-describe('tintify()', () => {
- it('generates tints from a base color', () => {
- const result = tintify(AZURE);
-
- expect(result).toEqual({
- '100': '#e6f3fb',
- '200': '#c0e0f5',
- '300': '#4fa8e4',
- '400': '#369be0',
- '50': '#f2f9fd',
- '500': '#0482d8',
- '600': '#0475c2',
- '700': '#0362a2',
- '800': '#012741',
- '900': '#011929',
- });
- });
-});
diff --git a/packages/pl-fe/src/utils/comparators.test.ts b/packages/pl-fe/src/utils/comparators.test.ts
deleted file mode 100644
index d1254ae0b..000000000
--- a/packages/pl-fe/src/utils/comparators.test.ts
+++ /dev/null
@@ -1,7 +0,0 @@
-import { compareId } from './comparators';
-
-test('compareId', () => {
- expect(compareId('3', '3')).toBe(0);
- expect(compareId('10', '1')).toBe(1);
- expect(compareId('99', '100')).toBe(-1);
-});
diff --git a/packages/pl-fe/src/utils/config-db.test.ts b/packages/pl-fe/src/utils/config-db.test.ts
deleted file mode 100644
index c9c73eb2e..000000000
--- a/packages/pl-fe/src/utils/config-db.test.ts
+++ /dev/null
@@ -1,14 +0,0 @@
-import { List as ImmutableList, fromJS } from 'immutable';
-
-import config_db from '@/__fixtures__/config_db.json';
-
-import { ConfigDB } from './config-db';
-
-test('find', () => {
- const configs = fromJS(config_db).get('configs');
- expect(ConfigDB.find(configs as ImmutableList, ':phoenix', ':json_library')).toEqual(fromJS({
- group: ':phoenix',
- key: ':json_library',
- value: 'Jason',
- }));
-});
diff --git a/packages/pl-fe/src/utils/emoji-reacts.test.ts b/packages/pl-fe/src/utils/emoji-reacts.test.ts
deleted file mode 100644
index 3e12a9dc9..000000000
--- a/packages/pl-fe/src/utils/emoji-reacts.test.ts
+++ /dev/null
@@ -1,82 +0,0 @@
-import { List as ImmutableList, fromJS } from 'immutable';
-import { emojiReactionSchema } from 'pl-api';
-import * as v from 'valibot';
-
-import {
- simulateEmojiReact,
- simulateUnEmojiReact,
-} from './emoji-reacts';
-
-describe('simulateEmojiReact', () => {
- it('adds the emoji to the list', () => {
- const emojiReacts = ImmutableList([
- { 'count': 2, 'me': false, 'name': '👍', 'url': undefined },
- { 'count': 2, 'me': false, 'name': '❤', 'url': undefined },
- ].map((react) => v.parse(emojiReactionSchema, react)));
- expect(simulateEmojiReact(emojiReacts, '❤')).toEqual(fromJS([
- { 'count': 2, 'me': false, 'name': '👍', 'url': undefined },
- { 'count': 3, 'me': true, 'name': '❤', 'url': undefined },
- ]));
- });
-
- it('creates the emoji if it didn\'t already exist', () => {
- const emojiReacts = ImmutableList([
- { 'count': 2, 'me': false, 'name': '👍', 'url': undefined },
- { 'count': 2, 'me': false, 'name': '❤', 'url': undefined },
- ].map((react) => v.parse(emojiReactionSchema, react)));
- expect(simulateEmojiReact(emojiReacts, '😯')).toEqual(fromJS([
- { 'count': 2, 'me': false, 'name': '👍', 'url': undefined },
- { 'count': 2, 'me': false, 'name': '❤', 'url': undefined },
- { 'count': 1, 'me': true, 'name': '😯', 'url': undefined },
- ]));
- });
-
- it('adds a custom emoji to the list', () => {
- const emojiReacts = ImmutableList([
- { 'count': 2, 'me': false, 'name': '👍', 'url': undefined },
- { 'count': 2, 'me': false, 'name': '❤', 'url': undefined },
- ].map((react) => v.parse(emojiReactionSchema, react)));
- expect(simulateEmojiReact(emojiReacts, 'soapbox', 'https://gleasonator.com/emoji/Gleasonator/soapbox.png')).toEqual(fromJS([
- { 'count': 2, 'me': false, 'name': '👍', 'url': undefined },
- { 'count': 2, 'me': false, 'name': '❤', 'url': undefined },
- { 'count': 1, 'me': true, 'name': 'soapbox', 'url': 'https://gleasonator.com/emoji/Gleasonator/soapbox.png' },
- ]));
- });
-});
-
-describe('simulateUnEmojiReact', () => {
- it('removes the emoji from the list', () => {
- const emojiReacts = ImmutableList([
- { 'count': 2, 'me': false, 'name': '👍' },
- { 'count': 3, 'me': true, 'name': '❤' },
- ].map((react) => v.parse(emojiReactionSchema, react)));
- expect(simulateUnEmojiReact(emojiReacts, '❤')).toEqual(fromJS([
- { 'count': 2, 'me': false, 'name': '👍' },
- { 'count': 2, 'me': false, 'name': '❤' },
- ]));
- });
-
- it('removes the emoji if it\'s the last one in the list', () => {
- const emojiReacts = ImmutableList([
- { 'count': 2, 'me': false, 'name': '👍' },
- { 'count': 2, 'me': false, 'name': '❤' },
- { 'count': 1, 'me': true, 'name': '😯' },
- ].map((react) => v.parse(emojiReactionSchema, react)));
- expect(simulateUnEmojiReact(emojiReacts, '😯')).toEqual(fromJS([
- { 'count': 2, 'me': false, 'name': '👍' },
- { 'count': 2, 'me': false, 'name': '❤' },
- ]));
- });
-
- it ('removes custom emoji from the list', () => {
- const emojiReacts = ImmutableList([
- { 'count': 2, 'me': false, 'name': '👍' },
- { 'count': 2, 'me': false, 'name': '❤' },
- { 'count': 1, 'me': true, 'name': 'soapbox', 'url': 'https://gleasonator.com/emoji/Gleasonator/soapbox.png' },
- ].map((react) => v.parse(emojiReactionSchema, react)));
- expect(simulateUnEmojiReact(emojiReacts, 'soapbox')).toEqual(fromJS([
- { 'count': 2, 'me': false, 'name': '👍' },
- { 'count': 2, 'me': false, 'name': '❤' },
- ]));
- });
-});
diff --git a/packages/pl-fe/src/utils/emoji.test.ts b/packages/pl-fe/src/utils/emoji.test.ts
deleted file mode 100644
index 9880589c2..000000000
--- a/packages/pl-fe/src/utils/emoji.test.ts
+++ /dev/null
@@ -1,39 +0,0 @@
-import {
- removeVS16s,
- toCodePoints,
-} from './emoji';
-
-const ASCII_HEART = '❤'; // '\u2764\uFE0F'
-const RED_HEART_RGI = '❤️'; // '\u2764'
-const JOY = '😂';
-
-describe('removeVS16s()', () => {
- it('removes Variation Selector-16 characters from emoji', () => {
- // Sanity check
- expect(ASCII_HEART).not.toBe(RED_HEART_RGI);
-
- // It normalizes an emoji with VS16s
- expect(removeVS16s(RED_HEART_RGI)).toBe(ASCII_HEART);
-
- // Leaves a regular emoji alone
- expect(removeVS16s(JOY)).toBe(JOY);
- });
-});
-
-describe('toCodePoints()', () => {
- it('converts a plain emoji', () => {
- expect(toCodePoints('😂')).toEqual(['1f602']);
- });
-
- it('converts a VS16 emoji', () => {
- expect(toCodePoints(RED_HEART_RGI)).toEqual(['2764', 'fe0f']);
- });
-
- it('converts an ASCII character', () => {
- expect(toCodePoints(ASCII_HEART)).toEqual(['2764']);
- });
-
- it('converts a sequence emoji', () => {
- expect(toCodePoints('🇺🇸')).toEqual(['1f1fa', '1f1f8']);
- });
-});
diff --git a/packages/pl-fe/src/utils/html.test.ts b/packages/pl-fe/src/utils/html.test.ts
deleted file mode 100644
index cf0a62d1d..000000000
--- a/packages/pl-fe/src/utils/html.test.ts
+++ /dev/null
@@ -1,10 +0,0 @@
-import * as html from './html';
-
-describe('html', () => {
- describe('unsecapeHTML', () => {
- it('returns unescaped HTML', () => {
- const output = html.unescapeHTML('lorem
ipsum
<br>');
- expect(output).toEqual('lorem\n\nipsum\n ');
- });
- });
-});
diff --git a/packages/pl-fe/src/utils/input.test.ts b/packages/pl-fe/src/utils/input.test.ts
deleted file mode 100644
index 90fb1dc81..000000000
--- a/packages/pl-fe/src/utils/input.test.ts
+++ /dev/null
@@ -1,7 +0,0 @@
-import { normalizeUsername } from './input';
-
-test('normalizeUsername', () => {
- expect(normalizeUsername('@alex')).toBe('alex');
- expect(normalizeUsername('alex@alexgleason.me')).toBe('alex@alexgleason.me');
- expect(normalizeUsername('@alex@gleasonator.com')).toBe('alex@gleasonator.com');
-});
diff --git a/packages/pl-fe/src/utils/media.test.ts b/packages/pl-fe/src/utils/media.test.ts
deleted file mode 100644
index c819f594c..000000000
--- a/packages/pl-fe/src/utils/media.test.ts
+++ /dev/null
@@ -1,15 +0,0 @@
-import { addAutoPlay } from './media';
-
-describe('addAutoPlay()', () => {
- it('adds the correct query parameters to the src', () => {
- const html = 'VIDEO ';
- expect(addAutoPlay(html)).toEqual('VIDEO ');
- });
-
- describe('when the iframe src already has params', () => {
- it('adds the correct query parameters to the src', () => {
- const html = 'VIDEO ';
- expect(addAutoPlay(html)).toEqual('VIDEO ');
- });
- });
-});
diff --git a/packages/pl-fe/src/utils/numbers.test.tsx b/packages/pl-fe/src/utils/numbers.test.tsx
deleted file mode 100644
index 747d7c59b..000000000
--- a/packages/pl-fe/src/utils/numbers.test.tsx
+++ /dev/null
@@ -1,108 +0,0 @@
-import React from 'react';
-
-import { render, screen } from '@/jest/test-helpers';
-
-import { isIntegerId, shortNumberFormat } from './numbers';
-
-test('isIntegerId()', () => {
- expect(isIntegerId('0')).toBe(true);
- expect(isIntegerId('1')).toBe(true);
- expect(isIntegerId('508107650')).toBe(true);
- expect(isIntegerId('-1764036199')).toBe(true);
- expect(isIntegerId('106801667066418367')).toBe(true);
- expect(isIntegerId('9v5bmRalQvjOy0ECcC')).toBe(false);
- expect(isIntegerId(null as any)).toBe(false);
- expect(isIntegerId(undefined as any)).toBe(false);
-});
-describe('shortNumberFormat', () => {
- test('handles non-numbers', () => {
- render({shortNumberFormat('not-number')}
, undefined, null);
- expect(screen.getByTestId('num')).toHaveTextContent('•');
- });
-
- test('handles max argument', () => {
- render({shortNumberFormat(25, 20)}
, undefined, null);
- expect(screen.getByTestId('num')).toHaveTextContent('20+');
- });
-
- test('formats numbers under 1,000', () => {
- render({shortNumberFormat(555)}
, undefined, null);
- expect(screen.getByTestId('num')).toHaveTextContent('555');
- });
-
- test('formats numbers under 1,000,000', () => {
- render({shortNumberFormat(5555)}
, undefined, null);
- expect(screen.getByTestId('num')).toHaveTextContent('5.55k');
- });
-
- test('formats numbers over 1,000,000', () => {
- render({shortNumberFormat(5555555)}
, undefined, null);
- expect(screen.getByTestId('num')).toHaveTextContent('5.55M');
- });
-
- test('formats a multitude of numbers', () => {
- let result = render({shortNumberFormat(0)}
, undefined, null);
- expect(screen.getByTestId('num')).toHaveTextContent('0');
- result.unmount();
-
- result = render({shortNumberFormat(1)}
);
- expect(screen.getByTestId('num')).toHaveTextContent('1');
- result.unmount();
-
- result = render({shortNumberFormat(999)}
, undefined, null);
- expect(screen.getByTestId('num')).toHaveTextContent('999');
- result.unmount();
-
- result = render({shortNumberFormat(1000)}
, undefined, null);
- expect(screen.getByTestId('num')).toHaveTextContent('1k');
- result.unmount();
-
- result = render({shortNumberFormat(1001)}
, undefined, null);
- expect(screen.getByTestId('num')).toHaveTextContent('1k');
- result.unmount();
-
- result = render({shortNumberFormat(1005)}
, undefined, null);
- expect(screen.getByTestId('num')).toHaveTextContent('1k');
- result.unmount();
-
- result = render({shortNumberFormat(1006)}
, undefined, null);
- expect(screen.getByTestId('num')).toHaveTextContent('1k');
- result.unmount();
-
- result = render({shortNumberFormat(1010)}
, undefined, null);
- expect(screen.getByTestId('num')).toHaveTextContent('1.01k');
- result.unmount();
-
- result = render({shortNumberFormat(1530)}
, undefined, null);
- expect(screen.getByTestId('num')).toHaveTextContent('1.53k');
- result.unmount();
-
- result = render({shortNumberFormat(10530)}
, undefined, null);
- expect(screen.getByTestId('num')).toHaveTextContent('10.5k');
- result.unmount();
-
- result = render({shortNumberFormat(999500)}
, undefined, null);
- expect(screen.getByTestId('num')).toHaveTextContent('999k');
- result.unmount();
-
- result = render({shortNumberFormat(999999)}
, undefined, null);
- expect(screen.getByTestId('num')).toHaveTextContent('999k');
- result.unmount();
-
- result = render({shortNumberFormat(999499)}
, undefined, null);
- expect(screen.getByTestId('num')).toHaveTextContent('999k');
- result.unmount();
-
- result = render({shortNumberFormat(1000000)}
, undefined, null);
- expect(screen.getByTestId('num')).toHaveTextContent('1M');
- result.unmount();
-
- result = render({shortNumberFormat(3905558)}
, undefined, null);
- expect(screen.getByTestId('num')).toHaveTextContent('3.9M');
- result.unmount();
-
- result = render({shortNumberFormat(1031511)}
, undefined, null);
- expect(screen.getByTestId('num')).toHaveTextContent('1.03M');
- result.unmount();
- });
-});
diff --git a/packages/pl-fe/src/utils/numbers.tsx b/packages/pl-fe/src/utils/numbers.tsx
index 3524dbcee..5b623b071 100644
--- a/packages/pl-fe/src/utils/numbers.tsx
+++ b/packages/pl-fe/src/utils/numbers.tsx
@@ -46,12 +46,8 @@ const shortNumberFormat = (number: any, max?: number): React.ReactNode => {
);
};
-/** Check if an entity ID is an integer (eg not a FlakeId). */
-const isIntegerId = (id: string): boolean => new RegExp(/^-?[0-9]+$/g).test(id);
-
export {
isNumber,
roundDown,
shortNumberFormat,
- isIntegerId,
};
diff --git a/packages/pl-fe/src/utils/queries.test.ts b/packages/pl-fe/src/utils/queries.test.ts
deleted file mode 100644
index 451a76b32..000000000
--- a/packages/pl-fe/src/utils/queries.test.ts
+++ /dev/null
@@ -1,109 +0,0 @@
-import { InfiniteData } from '@tanstack/react-query';
-
-import { queryClient } from '@/queries/client';
-
-import { PaginatedResult, sortQueryData, updatePageItem } from './queries';
-
-interface Item {
- id: number;
- text: string;
-}
-
-const buildItem = (id: number): Item => ({ id, text: `item ${id}` });
-
-const queryKey = ['test', 'query'];
-
-describe('updatePageItem()', () => {
- beforeEach(() => {
- queryClient.clear();
- });
-
- describe('without cached data', () => {
- it('safely returns undefined', () => {
- updatePageItem- (queryKey, buildItem(1), (o, n) => o.id === n.id);
- const nextQueryData = queryClient.getQueryData
>>(queryKey);
- expect(nextQueryData).toBeUndefined();
- });
- });
-
- describe('with cached data', () => {
- const cachedQueryData = {
- pages: [
- {
- result: [buildItem(1), buildItem(2), buildItem(3)],
- hasMore: false,
- link: undefined,
- },
- ],
- pageParams: [undefined],
- };
-
- beforeEach(() => {
- queryClient.setQueryData(queryKey, cachedQueryData);
- });
-
- it('updates the correct item in the cached data', () => {
- const initialQueryData = queryClient.getQueryData>>(queryKey);
- expect(initialQueryData?.pages[0].result.map((r) => r.id)).toEqual([1, 2, 3]);
- expect(initialQueryData?.pages[0].result.find((r) => r.id === 2)?.text).toEqual('item 2');
- updatePageItem- (queryKey, { id: 2, text: 'new text' }, (o, n) => o.id === n.id);
- const nextQueryData = queryClient.getQueryData
>>(queryKey);
- expect(nextQueryData?.pages[0].result.map((r) => r.id)).toEqual([1, 2, 3]);
- expect(nextQueryData?.pages[0].result.find((r) => r.id === 2)?.text).toEqual('new text');
- });
- });
-});
-
-describe('sortQueryData()', () => {
- beforeEach(() => {
- queryClient.clear();
- });
-
- describe('without cached data', () => {
- it('safely returns undefined', () => {
- sortQueryData- (queryKey, (a, b) => b.id - a.id);
- const nextQueryData = queryClient.getQueryData
>>(queryKey);
- expect(nextQueryData).toBeUndefined();
- });
- });
-
- describe('with cached data', () => {
- const cachedQueryData = {
- pages: [
- {
- result: [...Array(20).fill(0).map((_, idx) => buildItem(idx))],
- hasMore: false,
- link: undefined,
- },
- {
- result: [...Array(4).fill(0).map((_, idx) => buildItem(idx + 20))],
- hasMore: true,
- link: 'my-link',
- },
- ],
- pageParams: [undefined],
- };
-
- beforeEach(() => {
- queryClient.setQueryData(queryKey, cachedQueryData);
- });
-
- it('sorts the cached data', () => {
- const initialQueryData = queryClient.getQueryData>>(queryKey);
- expect(initialQueryData?.pages[0].result[0].id === 0); // first id is 0
- sortQueryData- (queryKey, (a, b) => b.id - a.id); // sort descending
- const nextQueryData = queryClient.getQueryData
>>(queryKey);
- expect(nextQueryData?.pages[0].result[0].id === 0); // first id is now 23
- });
-
- it('persists the metadata', () => {
- const initialQueryData = queryClient.getQueryData>>(queryKey);
- const initialMetaData = initialQueryData?.pages.map((page) => page.link);
- sortQueryData- (queryKey, (a, b) => b.id - a.id);
- const nextQueryData = queryClient.getQueryData
>>(queryKey);
- const nextMetaData = nextQueryData?.pages.map((page) => page.link);
-
- expect(initialMetaData).toEqual(nextMetaData);
- });
- });
-});
diff --git a/packages/pl-fe/src/utils/redirect.ts b/packages/pl-fe/src/utils/redirect.ts
index e344c434c..b44ae5cbf 100644
--- a/packages/pl-fe/src/utils/redirect.ts
+++ b/packages/pl-fe/src/utils/redirect.ts
@@ -1,5 +1,3 @@
-import { useEffect } from 'react';
-
const LOCAL_STORAGE_REDIRECT_KEY = 'plfe:redirect_uri';
const getRedirectUrl = () => {
@@ -12,18 +10,4 @@ const getRedirectUrl = () => {
return redirectUri || '/';
};
-const useCachedLocationHandler = () => {
- const removeCachedRedirectUri = () => localStorage.removeItem(LOCAL_STORAGE_REDIRECT_KEY);
-
- useEffect(() => {
- window.addEventListener('beforeunload', removeCachedRedirectUri);
-
- return () => {
- window.removeEventListener('beforeunload', removeCachedRedirectUri);
- };
- }, []);
-
- return null;
-};
-
-export { getRedirectUrl, useCachedLocationHandler };
+export { getRedirectUrl };
diff --git a/packages/pl-fe/src/utils/status.test.ts b/packages/pl-fe/src/utils/status.test.ts
deleted file mode 100644
index e00e0ed5b..000000000
--- a/packages/pl-fe/src/utils/status.test.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-import { buildStatus } from '@/jest/factory';
-
-import {
- hasIntegerMediaIds,
- defaultMediaVisibility,
-} from './status';
-
-describe('hasIntegerMediaIds()', () => {
- it('returns true for a Pleroma deleted status', async () => {
- const status = buildStatus(await import('@/__fixtures__/pleroma-status-deleted.json') as any);
- expect(hasIntegerMediaIds(status)).toBe(true);
- });
-});
-
-describe('defaultMediaVisibility()', () => {
- it('returns false with no status', () => {
- expect(defaultMediaVisibility(undefined, 'default')).toBe(false);
- });
-
- it('hides sensitive media by default', () => {
- const status = buildStatus({ sensitive: true });
- expect(defaultMediaVisibility(status, 'default')).toBe(false);
- });
-
- it('hides media when displayMedia is hide_all', () => {
- const status = buildStatus({});
- expect(defaultMediaVisibility(status, 'hide_all')).toBe(false);
- });
-
- it('shows sensitive media when displayMedia is show_all', () => {
- const status = buildStatus({ sensitive: true });
- expect(defaultMediaVisibility(status, 'show_all')).toBe(true);
- });
-});
diff --git a/packages/pl-fe/src/utils/status.ts b/packages/pl-fe/src/utils/status.ts
index 0c30075ac..10ec50ad5 100644
--- a/packages/pl-fe/src/utils/status.ts
+++ b/packages/pl-fe/src/utils/status.ts
@@ -1,14 +1,6 @@
-import { isIntegerId } from '@/utils/numbers';
-
import type { Status } from '@/normalizers/status';
import type { IntlShape } from 'react-intl';
-/** Get the initial visibility of media attachments from user settings. */
-const defaultMediaVisibility = (
- status: Pick,
- displayMedia: string,
-): boolean => (displayMedia !== 'hide_all' && !status.sensitive || displayMedia === 'show_all');
-
/** Grab the first external link from a status. */
const getFirstExternalLink = (status: Pick): HTMLAnchorElement | null => {
try {
@@ -26,11 +18,6 @@ const getFirstExternalLink = (status: Pick): HTMLAnchorElemen
const shouldHaveCard = (status: Pick): boolean =>
Boolean(getFirstExternalLink(status));
-/** Whether the media IDs on this status have integer IDs (opposed to FlakeIds). */
-// https://gitlab.com/soapbox-pub/soapbox/-/merge_requests/1087
-const hasIntegerMediaIds = (status: Pick): boolean =>
- status.media_attachments.some(({ id }) => isIntegerId(id));
-
/** Sanitize status text for use with screen readers. */
const textForScreenReader = (
intl: IntlShape,
@@ -67,9 +54,7 @@ const getStatusIdsFromLinksInContent = (content: string): string[] => {
};
export {
- defaultMediaVisibility,
shouldHaveCard,
- hasIntegerMediaIds,
textForScreenReader,
getStatusIdsFromLinksInContent,
};
diff --git a/packages/pl-fe/src/utils/tailwind.test.ts b/packages/pl-fe/src/utils/tailwind.test.ts
deleted file mode 100644
index 4341caeb6..000000000
--- a/packages/pl-fe/src/utils/tailwind.test.ts
+++ /dev/null
@@ -1,263 +0,0 @@
-import { Map as ImmutableMap } from 'immutable';
-
-import { toTailwind, fromBasicColors, expandPalette } from './tailwind';
-
-describe('toTailwind()', () => {
- it('handles empty pl-fe config', () => {
- const frontendConfig = ImmutableMap();
- const result = toTailwind(frontendConfig);
- const expected = ImmutableMap({ colors: ImmutableMap() });
- expect(result).toEqual(expected);
- });
-
- it('converts brandColor into a Tailwind color palette', () => {
- const frontendConfig = ImmutableMap({ brandColor: '#0482d8' });
-
- const expected = {
- brandColor: '#0482d8',
- colors: {
- primary: {
- 50: '#f2f9fd',
- 100: '#e6f3fb',
- 200: '#c0e0f5',
- 300: '#4fa8e4',
- 400: '#369be0',
- 500: '#0482d8',
- 600: '#0475c2',
- 700: '#0362a2',
- 800: '#012741',
- 900: '#011929',
- },
- },
- };
-
- const result = toTailwind(frontendConfig);
- expect(result.toJS()).toMatchObject(expected);
- });
-
- it('prefers Tailwind colors object over legacy colors', () => {
- const frontendConfig = ImmutableMap({
- brandColor: '#0482d8',
- colors: ImmutableMap({
- primary: ImmutableMap({
- 300: '#ff0000',
- }),
- }),
- });
-
- const expected = {
- brandColor: '#0482d8',
- colors: {
- primary: {
- 50: '#f2f9fd',
- 100: '#e6f3fb',
- 200: '#c0e0f5',
- 300: '#ff0000', // <--
- 400: '#369be0',
- 500: '#0482d8',
- 600: '#0475c2',
- 700: '#0362a2',
- 800: '#012741',
- 900: '#011929',
- },
- },
- };
-
- const result = toTailwind(frontendConfig);
- expect(result.toJS()).toMatchObject(expected);
- });
-});
-
-describe('fromBasicColors()', () => {
- it('converts only brandColor', () => {
- const frontendConfig = ImmutableMap({ brandColor: '#0482d8' });
-
- const expected = {
- primary: {
- 50: '#f2f9fd',
- 100: '#e6f3fb',
- 200: '#c0e0f5',
- 300: '#4fa8e4',
- 400: '#369be0',
- 500: '#0482d8',
- 600: '#0475c2',
- 700: '#0362a2',
- 800: '#012741',
- 900: '#011929',
- },
- // Accent color is generated from brandColor
- accent: {
- 50: '#f3fbfd',
- 100: '#e7f7fa',
- 200: '#c3ecf4',
- 300: '#58cadf',
- 400: '#40c2da',
- 500: '#10b3d1',
- 600: '#0ea1bc',
- 700: '#0c869d',
- 800: '#05363f',
- 900: '#032228',
- },
- secondary: {
- 50: '#f3fbfd',
- 100: '#e7f7fa',
- 200: '#c3ecf4',
- 300: '#58cadf',
- 400: '#40c2da',
- 500: '#10b3d1',
- 600: '#0ea1bc',
- 700: '#0c869d',
- 800: '#05363f',
- 900: '#032228',
- },
- gray: {
- 50: '#f8fafa',
- 100: '#f1f4f6',
- 200: '#dde4e8',
- 300: '#9eb2bf',
- 400: '#91a7b5',
- 500: '#7591a3',
- 600: '#698393',
- 700: '#586d7a',
- 800: '#232c31',
- 900: '#161c1f',
- },
- };
-
- const result = fromBasicColors(frontendConfig);
- expect(result).toEqual(expected);
- });
-
- it('converts both legacy colors', () => {
- const frontendConfig = ImmutableMap({
- brandColor: '#0482d8',
- accentColor: '#2bd110',
- });
-
- const expected = {
- primary: {
- 50: '#f2f9fd',
- 100: '#e6f3fb',
- 200: '#c0e0f5',
- 300: '#4fa8e4',
- 400: '#369be0',
- 500: '#0482d8',
- 600: '#0475c2',
- 700: '#0362a2',
- 800: '#012741',
- 900: '#011929',
- },
- accent: {
- 50: '#f4fdf3',
- 100: '#eafae7',
- 200: '#caf4c3',
- 300: '#6bdf58',
- 400: '#55da40',
- 500: '#2bd110',
- 600: '#27bc0e',
- 700: '#209d0c',
- 800: '#0d3f05',
- 900: '#082803',
- },
- secondary: {
- 50: '#f4fdf3',
- 100: '#eafae7',
- 200: '#caf4c3',
- 300: '#6bdf58',
- 400: '#55da40',
- 500: '#2bd110',
- 600: '#27bc0e',
- 700: '#209d0c',
- 800: '#0d3f05',
- 900: '#082803',
- },
- gray: {
- 50: '#f8fafa',
- 100: '#f1f4f6',
- 200: '#dde4e8',
- 300: '#9eb2bf',
- 400: '#91a7b5',
- 500: '#7591a3',
- 600: '#698393',
- 700: '#586d7a',
- 800: '#232c31',
- 900: '#161c1f',
- },
- };
-
- const result = fromBasicColors(frontendConfig);
- expect(result).toEqual(expected);
- });
-});
-
-describe('expandPalette()', () => {
- it('expands one color', () => {
- const palette = { primary: '#0482d8' };
-
- const expected = {
- primary: {
- 50: '#f2f9fd',
- 100: '#e6f3fb',
- 200: '#c0e0f5',
- 300: '#4fa8e4',
- 400: '#369be0',
- 500: '#0482d8',
- 600: '#0475c2',
- 700: '#0362a2',
- 800: '#012741',
- 900: '#011929',
- },
- };
-
- const result = expandPalette(palette);
- expect(result).toEqual(expected);
- });
-
- it('expands mixed palette', () => {
- const palette = {
- primary: {
- 50: '#f2f9fd',
- 100: '#e6f3fb',
- 200: '#c0e0f5',
- 300: '#4fa8e4',
- 400: '#369be0',
- 500: '#0482d8',
- 600: '#0475c2',
- 700: '#0362a2',
- 800: '#012741',
- 900: '#011929',
- },
- accent: '#2bd110',
- };
-
- const expected = {
- primary: {
- 50: '#f2f9fd',
- 100: '#e6f3fb',
- 200: '#c0e0f5',
- 300: '#4fa8e4',
- 400: '#369be0',
- 500: '#0482d8',
- 600: '#0475c2',
- 700: '#0362a2',
- 800: '#012741',
- 900: '#011929',
- },
- accent: {
- 50: '#f4fdf3',
- 100: '#eafae7',
- 200: '#caf4c3',
- 300: '#6bdf58',
- 400: '#55da40',
- 500: '#2bd110',
- 600: '#27bc0e',
- 700: '#209d0c',
- 800: '#0d3f05',
- 900: '#082803',
- },
- };
-
- const result = expandPalette(palette);
- expect(result).toEqual(expected);
- });
-});
diff --git a/packages/pl-fe/src/utils/tailwind.ts b/packages/pl-fe/src/utils/tailwind.ts
index 7041d0c52..3fc8c487e 100644
--- a/packages/pl-fe/src/utils/tailwind.ts
+++ b/packages/pl-fe/src/utils/tailwind.ts
@@ -59,7 +59,5 @@ const toTailwind = (config: {
};
export {
- expandPalette,
- fromBasicColors,
toTailwind,
};
diff --git a/packages/pl-fe/src/utils/timelines.test.ts b/packages/pl-fe/src/utils/timelines.test.ts
deleted file mode 100644
index f248e2ee9..000000000
--- a/packages/pl-fe/src/utils/timelines.test.ts
+++ /dev/null
@@ -1,73 +0,0 @@
-import { fromJS } from 'immutable';
-
-import { buildStatus } from '@/jest/factory';
-
-import { shouldFilter } from './timelines';
-
-describe('shouldFilter', () => {
- it('returns false under normal circumstances', () => {
- const columnSettings = fromJS({});
- const status = buildStatus({});
- expect(shouldFilter(status, columnSettings)).toBe(false);
- });
-
- it('reblog: returns true when `shows.reblog == false`', () => {
- const columnSettings = fromJS({ shows: { reblog: false } });
- const status = buildStatus({ reblog: buildStatus() as any });
- expect(shouldFilter(status, columnSettings)).toBe(true);
- });
-
- it('reblog: returns false when `shows.reblog == true`', () => {
- const columnSettings = fromJS({ shows: { reblog: true } });
- const status = buildStatus({ reblog: buildStatus() as any });
- expect(shouldFilter(status, columnSettings)).toBe(false);
- });
-
- it('reply: returns true when `shows.reply == false`', () => {
- const columnSettings = fromJS({ shows: { reply: false } });
- const status = buildStatus({ in_reply_to_id: '1234' });
- expect(shouldFilter(status, columnSettings)).toBe(true);
- });
-
- it('reply: returns false when `shows.reply == true`', () => {
- const columnSettings = fromJS({ shows: { reply: true } });
- const status = buildStatus({ in_reply_to_id: '1234' });
- expect(shouldFilter(status, columnSettings)).toBe(false);
- });
-
- it('direct: returns true when `shows.direct == false`', () => {
- const columnSettings = fromJS({ shows: { direct: false } });
- const status = buildStatus({ visibility: 'direct' });
- expect(shouldFilter(status, columnSettings)).toBe(true);
- });
-
- it('direct: returns false when `shows.direct == true`', () => {
- const columnSettings = fromJS({ shows: { direct: true } });
- const status = buildStatus({ visibility: 'direct' });
- expect(shouldFilter(status, columnSettings)).toBe(false);
- });
-
- it('direct: returns false for a public post when `shows.direct == false`', () => {
- const columnSettings = fromJS({ shows: { direct: false } });
- const status = buildStatus({ visibility: 'public' });
- expect(shouldFilter(status, columnSettings)).toBe(false);
- });
-
- it('multiple settings', () => {
- const columnSettings = fromJS({ shows: { reblog: false, reply: false, direct: false } });
- const status = buildStatus({ reblog: null, in_reply_to_id: null, visibility: 'direct' });
- expect(shouldFilter(status, columnSettings)).toBe(true);
- });
-
- it('multiple settings', () => {
- const columnSettings = fromJS({ shows: { reblog: false, reply: true, direct: false } });
- const status = buildStatus({ reblog: null, in_reply_to_id: '1234', visibility: 'public' });
- expect(shouldFilter(status, columnSettings)).toBe(false);
- });
-
- it('multiple settings', () => {
- const columnSettings = fromJS({ shows: { reblog: true, reply: false, direct: true } });
- const status = buildStatus({ reblog: {}, in_reply_to_id: '1234', visibility: 'direct' });
- expect(shouldFilter(status, columnSettings)).toBe(true);
- });
-});
diff --git a/packages/pl-fe/tailwind/colors.test.ts b/packages/pl-fe/tailwind/colors.test.ts
deleted file mode 100644
index 426de1db2..000000000
--- a/packages/pl-fe/tailwind/colors.test.ts
+++ /dev/null
@@ -1,50 +0,0 @@
-import {
- withOpacityValue,
- parseColorMatrix,
-} from './colors';
-
-describe('withOpacityValue()', () => {
- it('returns a Tailwind color function with alpha support', () => {
- const result = withOpacityValue('--color-primary-500');
-
- // It returns a function
- expect(typeof result).toBe('function');
-
- // Test calling the function
- expect(result).toBe('rgb(var(--color-primary-500) / )');
- });
-});
-
-describe('parseColorMatrix()', () => {
- it('returns a Tailwind color object', () => {
- const colorMatrix = {
- gray: [50, 100, 200, 300, 400, 500, 600, 700, 800, 900],
- primary: [50, 100, 200, 300, 400, 500, 600, 700, 800, 900],
- success: [50, 100, 200, 300, 400, 500, 600, 700, 800, 900],
- danger: [50, 100, 200, 300, 400, 500, 600, 700, 800, 900],
- accent: [300, 500],
- };
-
- const result = parseColorMatrix(colorMatrix);
-
- // Colors are mapped to functions which return CSS values
- // @ts-ignore
- expect(result.accent['300']).toEqual('rgb(var(--color-accent-300) / )');
- });
-
- it('parses single-tint values', () => {
- const colorMatrix = {
- gray: [50, 100, 200, 300, 400, 500, 600, 700, 800, 900],
- primary: [50, 100, 200, 300, 400, 500, 600, 700, 800, 900],
- success: [50, 100, 200, 300, 400, 500, 600, 700, 800, 900],
- danger: [50, 100, 200, 300, 400, 500, 600, 700, 800, 900],
- accent: [300, 500],
- 'gradient-start': true,
- 'gradient-end': true,
- };
-
- const result = parseColorMatrix(colorMatrix);
-
- expect(result['gradient-start']).toEqual('rgb(var(--color-gradient-start) / )');
- });
-});
diff --git a/packages/pl-fe/tailwind/colors.ts b/packages/pl-fe/tailwind/colors.ts
index bfb21718b..a83a47f16 100644
--- a/packages/pl-fe/tailwind/colors.ts
+++ b/packages/pl-fe/tailwind/colors.ts
@@ -37,4 +37,4 @@ const parseColorMatrix = (colorMatrix: ColorMatrix): RecursiveKeyValuePair =>
return palette;
}, {});
-export { withOpacityValue, parseColorMatrix };
+export { parseColorMatrix };
diff --git a/packages/pl-fe/tsconfig.json b/packages/pl-fe/tsconfig.json
index 52cdc94f6..ba8c097f8 100644
--- a/packages/pl-fe/tsconfig.json
+++ b/packages/pl-fe/tsconfig.json
@@ -22,7 +22,6 @@
],
"types": [
"vite/client",
- "vitest/globals",
"vite-plugin-compile-time/client"
],
},
diff --git a/packages/pl-fe/vite.config.ts b/packages/pl-fe/vite.config.ts
index b8aaa70a7..ec0e97947 100644
--- a/packages/pl-fe/vite.config.ts
+++ b/packages/pl-fe/vite.config.ts
@@ -1,4 +1,3 @@
-///
import fs from 'node:fs';
import { fileURLToPath, URL } from 'node:url';
@@ -180,11 +179,6 @@ const config = defineConfig(({ command }) => ({
],
dedupe: ['@floating-ui/react', 'tabbable', 'query-string', 'valibot'],
},
- test: {
- globals: true,
- environment: 'jsdom',
- setupFiles: 'src/jest/test-setup.ts',
- },
}));
/** Return file as string, or return empty string if the file isn't found. */
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 13336d530..e9950e695 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -431,18 +431,6 @@ importers:
'@stylistic/eslint-plugin':
specifier: ^3.1.0
version: 3.1.0(eslint@8.57.1)(typescript@5.7.3)
- '@testing-library/jest-dom':
- specifier: ^6.6.3
- version: 6.6.4
- '@testing-library/react':
- specifier: ^16.1.0
- version: 16.3.0(@testing-library/dom@10.4.1)(@types/react-dom@18.3.7(@types/react@18.3.27))(@types/react@18.3.27)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
- '@testing-library/react-hooks':
- specifier: ^8.0.1
- version: 8.0.1(@types/react@18.3.27)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
- '@testing-library/user-event':
- specifier: ^14.5.2
- version: 14.6.1(@testing-library/dom@10.4.1)
'@types/dom-chromium-ai':
specifier: ^0.0.11
version: 0.0.11
@@ -518,15 +506,9 @@ importers:
eslint-plugin-tailwindcss:
specifier: ^3.17.5
version: 3.18.2(tailwindcss@3.4.17)
- fake-indexeddb:
- specifier: ^6.0.0
- version: 6.0.1
globals:
specifier: ^15.14.0
version: 15.15.0
- jsdom:
- specifier: ^25.0.1
- version: 25.0.1
rollup-plugin-bundle-stats:
specifier: ^4.21.10
version: 4.21.10(core-js@3.44.0)(rollup@2.79.2)(vite@7.3.1(@types/node@25.0.3)(jiti@1.21.7)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.46.0)(yaml@2.8.0))
@@ -569,9 +551,6 @@ importers:
vite-plugin-static-copy:
specifier: ^3.2.0
version: 3.2.0(vite@7.3.1(@types/node@25.0.3)(jiti@1.21.7)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.46.0)(yaml@2.8.0))
- vitest:
- specifier: ^2.1.9
- version: 2.1.9(@types/node@25.0.3)(jsdom@25.0.1)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.46.0)
packages/pl-hooks:
dependencies:
@@ -636,9 +615,6 @@ packages:
'@acemir/cssom@0.9.30':
resolution: {integrity: sha512-9CnlMCI0LmCIq0olalQqdWrJHPzm0/tw3gzOA9zJSgvFX7Xau3D24mAGa4BtwxwY69nsuJW6kQqqCzf/mEcQgg==}
- '@adobe/css-tools@4.4.3':
- resolution: {integrity: sha512-VQKMkwriZbaOgVCby1UDY/LDk5fIjhQicCvVPFqfe+69fWaPWydbWJ3wRt59/YzIwda1I81loas3oCoHxnqvdA==}
-
'@alloc/quick-lru@5.2.0':
resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==}
engines: {node: '>=10'}
@@ -649,9 +625,6 @@ packages:
peerDependencies:
ajv: '>=8'
- '@asamuzakjp/css-color@3.2.0':
- resolution: {integrity: sha512-K1A6z8tS3XsmCMM86xoWdn7Fkdn9m6RSVtocUrJYIwZnFVkng/PvkEoWtOWmP+Scc6saYWHWZYbndEEXxl24jw==}
-
'@asamuzakjp/css-color@4.1.1':
resolution: {integrity: sha512-B0Hv6G3gWGMn0xKJ0txEi/jM5iFpT3MfDxmhZFb4W047GvytCf1DHQ1D69W3zHI4yWe2aTZAA0JnbMZ7Xc8DuQ==}
@@ -1240,10 +1213,6 @@ packages:
core-js: ^3.0.0
lodash: ^4.0.0
- '@csstools/color-helpers@5.0.2':
- resolution: {integrity: sha512-JqWH1vsgdGcw2RR6VliXXdA0/59LttzlU8UlRT/iUUsEeWfYq8I+K0yhihEUTTHLRm1EXvpsCx3083EU15ecsA==}
- engines: {node: '>=18'}
-
'@csstools/color-helpers@5.1.0':
resolution: {integrity: sha512-S11EXWJyy0Mz5SYvRmY8nJYTFFd1LCNV+7cXyAgQtOOuzb4EsgfqDufL+9esx72/eLhsRdGZwaldu/h+E4t4BA==}
engines: {node: '>=18'}
@@ -1255,13 +1224,6 @@ packages:
'@csstools/css-parser-algorithms': ^3.0.5
'@csstools/css-tokenizer': ^3.0.4
- '@csstools/css-color-parser@3.0.10':
- resolution: {integrity: sha512-TiJ5Ajr6WRd1r8HSiwJvZBiJOqtH86aHpUjq5aEKWHiII2Qfjqd/HCWKPOW8EP4vcspXbHnXrwIDlu5savQipg==}
- engines: {node: '>=18'}
- peerDependencies:
- '@csstools/css-parser-algorithms': ^3.0.5
- '@csstools/css-tokenizer': ^3.0.4
-
'@csstools/css-color-parser@3.1.0':
resolution: {integrity: sha512-nbtKwh3a6xNVIp/VRuXV64yTKnb1IjTAEEh3irzS+HkKjAOYLTGNb9pmVNntZ8iVBHcWDA2Dof0QtPgFI1BaTA==}
engines: {node: '>=18'}
@@ -2737,51 +2699,6 @@ packages:
'@tanstack/store@0.8.0':
resolution: {integrity: sha512-Om+BO0YfMZe//X2z0uLF2j+75nQga6TpTJgLJQBiq85aOyZNIhkCgleNcud2KQg4k4v9Y9l+Uhru3qWMPGTOzQ==}
- '@testing-library/dom@10.4.1':
- resolution: {integrity: sha512-o4PXJQidqJl82ckFaXUeoAW+XysPLauYI43Abki5hABd853iMhitooc6znOnczgbTYmEP6U6/y1ZyKAIsvMKGg==}
- engines: {node: '>=18'}
-
- '@testing-library/jest-dom@6.6.4':
- resolution: {integrity: sha512-xDXgLjVunjHqczScfkCJ9iyjdNOVHvvCdqHSSxwM9L0l/wHkTRum67SDc020uAlCoqktJplgO2AAQeLP1wgqDQ==}
- engines: {node: '>=14', npm: '>=6', yarn: '>=1'}
-
- '@testing-library/react-hooks@8.0.1':
- resolution: {integrity: sha512-Aqhl2IVmLt8IovEVarNDFuJDVWVvhnr9/GCU6UUnrYXwgDFF9h2L2o2P9KBni1AST5sT6riAyoukFLyjQUgD/g==}
- engines: {node: '>=12'}
- peerDependencies:
- '@types/react': ^18.3.18
- react: ^16.9.0 || ^17.0.0
- react-dom: ^16.9.0 || ^17.0.0
- react-test-renderer: ^16.9.0 || ^17.0.0
- peerDependenciesMeta:
- '@types/react':
- optional: true
- react-dom:
- optional: true
- react-test-renderer:
- optional: true
-
- '@testing-library/react@16.3.0':
- resolution: {integrity: sha512-kFSyxiEDwv1WLl2fgsq6pPBbw5aWKrsY2/noi1Id0TK0UParSF62oFQFGHXIyaG4pp2tEub/Zlel+fjjZILDsw==}
- engines: {node: '>=18'}
- peerDependencies:
- '@testing-library/dom': ^10.0.0
- '@types/react': ^18.3.18
- '@types/react-dom': ^18.3.5
- react: ^18.0.0 || ^19.0.0
- react-dom: ^18.0.0 || ^19.0.0
- peerDependenciesMeta:
- '@types/react':
- optional: true
- '@types/react-dom':
- optional: true
-
- '@testing-library/user-event@14.6.1':
- resolution: {integrity: sha512-vq7fv0rnt+QTXgPxr5Hjc210p6YKq2kmdziLgnsZGgLJ9e6VAShx1pACLuRjd/AS/sr7phAR58OIIpf0LlmQNw==}
- engines: {node: '>=12', npm: '>=6'}
- peerDependencies:
- '@testing-library/dom': '>=7.21.4'
-
'@transfem-org/sfm-js@0.24.8':
resolution: {integrity: sha1-G97++XwNPZZaxIExiJbm2kJZSg0=, tarball: https://activitypub.software/api/v4/projects/2/packages/npm/@transfem-org/sfm-js/-/@transfem-org/sfm-js-0.24.8.tgz}
@@ -2801,9 +2718,6 @@ packages:
'@types/argparse@1.0.38':
resolution: {integrity: sha512-ebDJ9b0e702Yr7pWgB0jzm+CX4Srzz8RcXtLJDJB+BSccqMa36uyH/zUsSYao5+BD1ytv3k3rPYCq4mAE1hsXA==}
- '@types/aria-query@5.0.4':
- resolution: {integrity: sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw==}
-
'@types/babel__core@7.20.5':
resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==}
@@ -3177,35 +3091,6 @@ packages:
peerDependencies:
vite: ^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0
- '@vitest/expect@2.1.9':
- resolution: {integrity: sha512-UJCIkTBenHeKT1TTlKMJWy1laZewsRIzYighyYiJKZreqtdxSos/S1t+ktRMQWu2CKqaarrkeszJx1cgC5tGZw==}
-
- '@vitest/mocker@2.1.9':
- resolution: {integrity: sha512-tVL6uJgoUdi6icpxmdrn5YNo3g3Dxv+IHJBr0GXHaEdTcw3F+cPKnsXFhli6nO+f/6SDKPHEK1UN+k+TQv0Ehg==}
- peerDependencies:
- msw: ^2.4.9
- vite: ^5.0.0
- peerDependenciesMeta:
- msw:
- optional: true
- vite:
- optional: true
-
- '@vitest/pretty-format@2.1.9':
- resolution: {integrity: sha512-KhRIdGV2U9HOUzxfiHmY8IFHTdqtOhIzCpd8WRdJiE7D/HUcZVD0EgQCVjm+Q9gkUXWgBvMmTtZgIG48wq7sOQ==}
-
- '@vitest/runner@2.1.9':
- resolution: {integrity: sha512-ZXSSqTFIrzduD63btIfEyOmNcBmQvgOVsPNPe0jYtESiXkhd8u2erDLnMxmGrDCwHCCHE7hxwRDCT3pt0esT4g==}
-
- '@vitest/snapshot@2.1.9':
- resolution: {integrity: sha512-oBO82rEjsxLNJincVhLhaxxZdEtV0EFHMK5Kmx5sJ6H9L183dHECjiefOAdnqpIgT5eZwT04PoggUnW88vOBNQ==}
-
- '@vitest/spy@2.1.9':
- resolution: {integrity: sha512-E1B35FwzXXTs9FHNK6bDszs7mtydNi5MIfUWpceJ8Xbfb1gBMscAnwLbEu+B44ed6W3XjL9/ehLPHR1fkf1KLQ==}
-
- '@vitest/utils@2.1.9':
- resolution: {integrity: sha512-v0psaMSkNJ3A2NMrUEHFRzJtDPFn+/VWZ5WxImB21T9fjucJRmS7xCS3ppEnARb9y11OAzaD+P2Ps+b+BGX5iQ==}
-
'@volar/language-core@2.4.22':
resolution: {integrity: sha512-gp4M7Di5KgNyIyO903wTClYBavRt6UyFNpc5LWfyZr1lBsTUY+QrVZfmbNF2aCyfklBOVk9YC4p+zkwoyT7ECg==}
@@ -3384,10 +3269,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'}
@@ -3412,9 +3293,6 @@ packages:
argparse@2.0.1:
resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==}
- aria-query@5.3.0:
- resolution: {integrity: sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==}
-
aria-query@5.3.2:
resolution: {integrity: sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==}
engines: {node: '>= 0.4'}
@@ -3455,10 +3333,6 @@ packages:
resolution: {integrity: sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==}
engines: {node: '>= 0.4'}
- assertion-error@2.0.1:
- resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==}
- engines: {node: '>=12'}
-
ast-metadata-inferer@0.8.1:
resolution: {integrity: sha512-ht3Dm6Zr7SXv6t1Ra6gFo0+kLDglHGrEbYihTkcycrbHw7WCcuhBzPlJYHEsIpycaUwzsJHje+vUcxXUX4ztTA==}
@@ -3476,9 +3350,6 @@ packages:
async@3.2.6:
resolution: {integrity: sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==}
- asynckit@0.4.0:
- resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==}
-
at-least-node@1.0.0:
resolution: {integrity: sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==}
engines: {node: '>= 4.0.0'}
@@ -3577,10 +3448,6 @@ packages:
peerDependencies:
esbuild: '>=0.18'
- cac@6.7.14:
- resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==}
- engines: {node: '>=8'}
-
cacheable@1.10.3:
resolution: {integrity: sha512-M6p10iJ/VT0wT7TLIGUnm958oVrU2cUK8pQAVU21Zu7h8rbk/PeRtRWrvHJBql97Bhzk3g1N6+2VKC+Rjxna9Q==}
@@ -3616,10 +3483,6 @@ packages:
caniuse-lite@1.0.30001762:
resolution: {integrity: sha512-PxZwGNvH7Ak8WX5iXzoK1KPZttBXNPuaOvI2ZYU7NrlM+d9Ov+TUvlLOBNGzVXAntMSMMlJPd+jY6ovrVjSmUw==}
- chai@5.2.1:
- resolution: {integrity: sha512-5nFxhUrX0PqtyogoYOA8IPswy5sZFTOsBFl/9bNsmDLgsxYTzSZQJDPppDnZPTQbzSEm0hqGjWPzRemQCYbD6A==}
- engines: {node: '>=18'}
-
chalk@4.1.2:
resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==}
engines: {node: '>=10'}
@@ -3632,10 +3495,6 @@ packages:
resolution: {integrity: sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==}
engines: {node: '>=10'}
- check-error@2.1.1:
- resolution: {integrity: sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==}
- engines: {node: '>= 16'}
-
chokidar@3.6.0:
resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==}
engines: {node: '>= 8.10.0'}
@@ -3680,10 +3539,6 @@ packages:
colorjs.io@0.5.2:
resolution: {integrity: sha512-twmVoizEW7ylZSN32OgKdXRmo1qg+wT5/6C3xu5b9QsWzSFAhHLn2xd8ro0diCsKfCj1RdaTP/nrcW+vAoQPIw==}
- combined-stream@1.0.8:
- resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==}
- engines: {node: '>= 0.8'}
-
commander@13.1.0:
resolution: {integrity: sha512-/rFeCpNJQbhSZjGVwO9RFV3xPqbnERS8MmIQzCtD/zl6gpJuV/bMLuN92oG3F7d8oDEHHRrujSXNUr8fpjntKw==}
engines: {node: '>=18'}
@@ -3797,9 +3652,6 @@ packages:
resolution: {integrity: sha512-u/O3vwbptzhMs3L1fQE82ZSLHQQfto5gyZzwteVIEyeaY5Fc7R4dapF/BvRoSYFeqfBk4m0V1Vafq5Pjv25wvA==}
engines: {node: '>= 6'}
- css.escape@1.5.1:
- resolution: {integrity: sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg==}
-
cssesc@3.0.0:
resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==}
engines: {node: '>=4'}
@@ -3827,10 +3679,6 @@ packages:
resolution: {integrity: sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==}
engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0, npm: '>=7.0.0'}
- cssstyle@4.6.0:
- resolution: {integrity: sha512-2z+rWdzbbSZv6/rhtvzvqeZQHrBaqgogqt85sqFNbabZOuFbCVFb8kPeEtZjiKkbrm395irpNKiYeFeLiQnFPg==}
- engines: {node: '>=18'}
-
cssstyle@5.3.7:
resolution: {integrity: sha512-7D2EPVltRrsTkhpQmksIu+LxeWAIEk6wRDMJ1qljlv+CKHJM+cJLlfhWIzNA44eAsHXSNe3+vO6DW1yCYx8SuQ==}
engines: {node: '>=20'}
@@ -3844,10 +3692,6 @@ packages:
damerau-levenshtein@1.0.8:
resolution: {integrity: sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==}
- data-urls@5.0.0:
- resolution: {integrity: sha512-ZYP5VBHshaDAiVZxjbRVcFJpc+4xGgT0bK3vzy1HLN8jTO975HEbuYzZJcHoQEY5K1a0z8YayJkyVETa08eNTg==}
- engines: {node: '>=18'}
-
data-urls@6.0.0:
resolution: {integrity: sha512-BnBS08aLUM+DKamupXs3w2tJJoqU+AkaE/+6vQxi/G/DPmIZFJJp9Dkb1kM03AZx8ADehDUZgsNxju3mPXZYIA==}
engines: {node: '>=20'}
@@ -3903,10 +3747,6 @@ packages:
resolution: {integrity: sha512-+8VxcR21HhTy8nOt6jf20w0c9CADrw1O8d+VZ/YzzCt4bJ3uBjw+D1q2osAB8RnpwwaeYBxy0HyKQxD5JBMuuQ==}
engines: {node: '>=14.16'}
- deep-eql@5.0.2:
- resolution: {integrity: sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==}
- engines: {node: '>=6'}
-
deep-is@0.1.4:
resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==}
@@ -3922,14 +3762,6 @@ packages:
resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==}
engines: {node: '>= 0.4'}
- delayed-stream@1.0.0:
- resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==}
- engines: {node: '>=0.4.0'}
-
- dequal@2.0.3:
- resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==}
- engines: {node: '>=6'}
-
detect-it@4.0.1:
resolution: {integrity: sha512-dg5YBTJYvogK1+dA2mBUDKzOWfYZtHVba89SyZUhc4+e3i2tzgjANFg5lDRCd3UOtRcw00vUTMK8LELcMdicug==}
@@ -3962,12 +3794,6 @@ packages:
resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==}
engines: {node: '>=6.0.0'}
- dom-accessibility-api@0.5.16:
- resolution: {integrity: sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==}
-
- dom-accessibility-api@0.6.3:
- resolution: {integrity: sha512-7ZgogeTnjuHbo+ct10G9Ffp0mif17idi0IyWNVA/wcwcm7NPOD/WEHVP3n7n3MhXqxoIYm8d6MuZohYWIZ4T3w==}
-
dom-serializer@1.4.1:
resolution: {integrity: sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==}
@@ -4297,9 +4123,6 @@ packages:
estree-walker@2.0.2:
resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==}
- estree-walker@3.0.3:
- resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==}
-
esutils@2.0.3:
resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==}
engines: {node: '>=0.10.0'}
@@ -4318,17 +4141,9 @@ packages:
exifr@7.1.3:
resolution: {integrity: sha512-g/aje2noHivrRSLbAUtBPWFbxKdKhgj/xr1vATDdUXPOFYJlQ62Ft0oy+72V6XLIpDJfHs6gXLbBLAolqOXYRw==}
- expect-type@1.2.2:
- resolution: {integrity: sha512-JhFGDVJ7tmDJItKhYgJCGLOWjuK9vPxiXoUFLwLDc99NlmklilbiQJwoctZtt13+xMw91MCk/REan6MWHqDjyA==}
- engines: {node: '>=12.0.0'}
-
exsolve@1.0.7:
resolution: {integrity: sha512-VO5fQUzZtI6C+vx4w/4BWJpg3s/5l+6pRQEHzFRM8WFi4XffSP1Z+4qi7GbjWbvRQEbdIco5mIMq+zX4rPuLrw==}
- fake-indexeddb@6.0.1:
- resolution: {integrity: sha512-He2AjQGHe46svIFq5+L2Nx/eHDTI1oKgoevBP+TthnjymXiKkeJQ3+ITeWey99Y5+2OaPFbI1qEsx/5RsGtWnQ==}
- engines: {node: '>=18'}
-
fast-average-color@9.5.0:
resolution: {integrity: sha512-nC6x2YIlJ9xxgkMFMd1BNoM1ctMjNoRKfRliPmiEWW3S6rLTHiQcy9g3pt/xiKv/D0NAAkhb9VyV+WJFvTqMGg==}
engines: {node: '>= 12'}
@@ -4430,10 +4245,6 @@ packages:
resolution: {integrity: sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==}
engines: {node: '>=14'}
- form-data@4.0.4:
- resolution: {integrity: sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow==}
- engines: {node: '>= 6'}
-
fraction.js@5.3.4:
resolution: {integrity: sha512-1X1NTtiJphryn/uLQz3whtY6jK3fTqoE3ohKs0tT+Ujr1W59oopxmoEh7Lu5p6vBaPbgoM0bzveAW4Qi5RyWDQ==}
@@ -4604,10 +4415,6 @@ packages:
html-dom-parser@5.1.2:
resolution: {integrity: sha512-9nD3Rj3/FuQt83AgIa1Y3ruzspwFFA54AJbQnohXN+K6fL1/bhcDQJJY5Ne4L4A163ADQFVESd/0TLyNoV0mfg==}
- html-encoding-sniffer@4.0.0:
- resolution: {integrity: sha512-Y22oTqIU4uuPgEemfz7NDJz6OeKf12Lsu+QC+s3BVpda64lTiMYCyGwg5ki4vFxkMwQdeZDl2adZoqUgdFuTgQ==}
- engines: {node: '>=18'}
-
html-encoding-sniffer@6.0.0:
resolution: {integrity: sha512-CV9TW3Y3f8/wT0BRFc1/KAVQ3TUHiXmaAb6VW9vtiMFf7SLoMd1PdAc4W3KFOFETBJUb90KatHqlsZMWV+R9Gg==}
engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0}
@@ -4654,10 +4461,6 @@ packages:
engines: {node: '>=18'}
hasBin: true
- iconv-lite@0.6.3:
- resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==}
- engines: {node: '>=0.10.0'}
-
idb@7.1.1:
resolution: {integrity: sha512-gchesWBzyvGHRO9W8tzUWFDycow5gwjvFKfyV9FF32Y7F50yZMp7mP+T2mJIWFx49zicqyC4uefHM17o6xKIVQ==}
@@ -4690,10 +4493,6 @@ packages:
resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==}
engines: {node: '>=0.8.19'}
- indent-string@4.0.0:
- resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==}
- engines: {node: '>=8'}
-
inflight@1.0.6:
resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==}
deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.
@@ -4942,15 +4741,6 @@ packages:
resolution: {integrity: sha512-Hicd6JK5Njt2QB6XYFS7ok9e37O8AYk3jTcppG4YVQnYjOemymvTcmc7OWsmq/Qqj5TdRFO5/x/tIPmBeRtGHg==}
engines: {node: '>=12.0.0'}
- jsdom@25.0.1:
- resolution: {integrity: sha512-8i7LzZj7BF8uplX+ZyOlIz86V6TAsSs+np6m1kpW9u0JWi4z/1t+FzcK1aek+ybTnAC4KhBL4uXCNT0wcUIeCw==}
- engines: {node: '>=18'}
- peerDependencies:
- canvas: ^2.11.2
- peerDependenciesMeta:
- canvas:
- optional: true
-
jsdom@27.4.0:
resolution: {integrity: sha512-mjzqwWRD9Y1J1KUi7W97Gja1bwOOM5Ug0EZ6UDK3xS7j7mndrkwozHtSblfomlzyB4NepioNt+B2sOSzczVgtQ==}
engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0}
@@ -5155,9 +4945,6 @@ packages:
resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==}
hasBin: true
- loupe@3.2.0:
- resolution: {integrity: sha512-2NCfZcT5VGVNX9mSZIxLRkEAegDGBpuQZBy13desuHeVORmBDyAET4TkJr4SjqQy3A8JDofMN6LpkK8Xcm/dlw==}
-
lower-case@2.0.2:
resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==}
@@ -5178,10 +4965,6 @@ packages:
lunr@2.3.9:
resolution: {integrity: sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow==}
- lz-string@1.5.0:
- resolution: {integrity: sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==}
- hasBin: true
-
magic-string@0.25.9:
resolution: {integrity: sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==}
@@ -5252,10 +5035,6 @@ packages:
resolution: {integrity: sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==}
engines: {node: '>=18'}
- min-indent@1.0.1:
- resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==}
- engines: {node: '>=4'}
-
mini-css-extract-plugin@2.9.4:
resolution: {integrity: sha512-ZWYT7ln73Hptxqxk2DxPU9MmapXRhxkJD6tkSR04dnQxm8BGu2hzgKLugK5yySD97u/8yy7Ma7E76k9ZdvtjkQ==}
engines: {node: '>= 12.13.0'}
@@ -5347,9 +5126,6 @@ packages:
nth-check@2.1.1:
resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==}
- nwsapi@2.2.21:
- resolution: {integrity: sha512-o6nIY3qwiSXl7/LuOU0Dmuctd34Yay0yeuZRLFmDPrrdHpXKFndPj3hM+YEPVHYC5fx2otBx4Ilc/gyYSAUaIA==}
-
object-assign@4.1.1:
resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==}
engines: {node: '>=0.10.0'}
@@ -5455,9 +5231,6 @@ packages:
parse-statements@1.0.11:
resolution: {integrity: sha512-HlsyYdMBnbPQ9Jr/VgJ1YF4scnldvJpJxCVx6KgqPL4dxppsWrJHCIIxQXMJrqGnsRkNPATbeMJ8Yxu7JMsYcA==}
- parse5@7.3.0:
- resolution: {integrity: sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==}
-
parse5@8.0.0:
resolution: {integrity: sha512-9m4m5GSgXjL4AjumKzq1Fgfp3Z8rsvjRNbnkVwfu2ImRqE5D0LnY2QfDen18FSY9C573YU5XxSapdHZTZ2WolA==}
@@ -5497,16 +5270,9 @@ packages:
pathe@0.2.0:
resolution: {integrity: sha512-sTitTPYnn23esFR3RlqYBWn4c45WGeLcsKzQiUpXJAyfcWkolvlYpV8FLo7JishK946oQwMFUCHXQ9AjGPKExw==}
- pathe@1.1.2:
- resolution: {integrity: sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==}
-
pathe@2.0.3:
resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==}
- pathval@2.0.1:
- resolution: {integrity: sha512-//nshmD55c46FuFw26xV/xFAaB5HF9Xdap7HJBBnrKdAd6/GxDBaNA1870O79+9ueg61cZLSVc+OaFlfmObYVQ==}
- engines: {node: '>= 14.16'}
-
picocolors@1.1.1:
resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==}
@@ -5786,10 +5552,6 @@ packages:
resolution: {integrity: sha512-mQUvGU6aUFQ+rNvTIAcZuWGRT9a6f6Yrg9bHs4ImKF+HZCEK+plBvnAZYSIQztknZF2qnzNtr6F8s0+IuptdlQ==}
engines: {node: ^14.13.1 || >=16.0.0}
- pretty-format@27.5.1:
- resolution: {integrity: sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==}
- engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0}
-
prismjs@1.30.0:
resolution: {integrity: sha512-DEvV2ZF2r2/63V+tK8hQvrR2ZGn10srHbXviTlcv7Kpzw8jWiNTqbVgjO3IY8RxrrOUF8VPMQQFysYYYv0YZxw==}
engines: {node: '>=6'}
@@ -5847,12 +5609,6 @@ packages:
peerDependencies:
react: ^19.2.3
- react-error-boundary@3.1.4:
- resolution: {integrity: sha512-uM9uPzZJTF6wRQORmSrvOIgt4lJ9MC1sNgEOj2XGsDTRE4kmpWxg7ENK9EWNKJRMAOY9z0MuF4yIfl6gp4sotA==}
- engines: {node: '>=10', npm: '>=6'}
- peerDependencies:
- react: '>=16.13.1'
-
react-error-boundary@4.1.2:
resolution: {integrity: sha512-GQDxZ5Jd+Aq/qUxbCm1UtzmL/s++V7zKgE8yMktJiCQXCCFZnMZh9ng+6/Ne6PjNSXH0L9CjeOEREfRnq6Duag==}
peerDependencies:
@@ -5906,9 +5662,6 @@ packages:
react-is@16.13.1:
resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==}
- react-is@17.0.2:
- resolution: {integrity: sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==}
-
react-property@2.0.2:
resolution: {integrity: sha512-+PbtI3VuDV0l6CleQMsx2gtK0JZbZKbpdu5ynr+lbsuvtmgbNcS3VM0tuY2QjFNOcWxvXeHjDpy42RO+4U2rug==}
@@ -5983,10 +5736,6 @@ packages:
resolution: {integrity: sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==}
engines: {node: '>= 14.18.0'}
- redent@3.0.0:
- resolution: {integrity: sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==}
- engines: {node: '>=8'}
-
redux-thunk@3.1.0:
resolution: {integrity: sha512-NW2r5T6ksUKXCabzhL9z+h206HQw/NJkcLm1GPImRQ8IzfXwRGqjVhKJGauHirT0DAuyy6hjdnMZaRoAcy0Klw==}
peerDependencies:
@@ -6142,12 +5891,6 @@ packages:
engines: {node: '>=18.0.0', npm: '>=8.0.0'}
hasBin: true
- rrweb-cssom@0.7.1:
- resolution: {integrity: sha512-TrEMa7JGdVm0UThDJSx7ddw5nVm3UJS9o9CCIZ72B1vSyEZoziDqBYP3XIoi/12lKrJR8rE3jeFHMok2F/Mnsg==}
-
- rrweb-cssom@0.8.0:
- resolution: {integrity: sha512-guoltQEx+9aMf2gDZ0s62EcV8lsXR+0w8915TC3ITdn2YueuNjdAYh/levpU9nFaoChh9RUS5ZdQMrKfVEN9tw==}
-
run-parallel@1.2.0:
resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==}
@@ -6169,9 +5912,6 @@ packages:
resolution: {integrity: sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==}
engines: {node: '>= 0.4'}
- safer-buffer@2.1.2:
- resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==}
-
sass-embedded-all-unknown@1.93.3:
resolution: {integrity: sha512-3okGgnE41eg+CPLtAPletu6nQ4N0ij7AeW+Sl5Km4j29XcmqZQeFwYjHe1AlKTEgLi/UAONk1O8i8/lupeKMbw==}
cpu: ['!arm', '!arm64', '!riscv64', '!x64']
@@ -6369,9 +6109,6 @@ packages:
resolution: {integrity: sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==}
engines: {node: '>= 0.4'}
- siginfo@2.0.0:
- resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==}
-
signal-exit@4.1.0:
resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==}
engines: {node: '>=14'}
@@ -6439,12 +6176,6 @@ packages:
stable-hash@0.0.5:
resolution: {integrity: sha512-+L3ccpzibovGXFK+Ap/f8LOS0ahMrHTf3xu7mMLSpEGU0EO9ucaysSylKo9eRDFNhWve/y275iPmIZ4z39a9iA==}
- stackback@0.0.2:
- resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==}
-
- std-env@3.9.0:
- resolution: {integrity: sha512-UGvjygr6F6tpH7o2qyqR6QYpwraIjKSdtzyBdyytFOHmPZY917kwdwLG0RbOjWOnKmnm3PeHjaoLLMie7kPLQw==}
-
stop-iteration-iterator@1.1.0:
resolution: {integrity: sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==}
engines: {node: '>= 0.4'}
@@ -6524,10 +6255,6 @@ packages:
resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==}
engines: {node: '>=12'}
- strip-indent@3.0.0:
- resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==}
- engines: {node: '>=8'}
-
strip-json-comments@3.1.1:
resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==}
engines: {node: '>=8'}
@@ -6706,15 +6433,9 @@ packages:
tiny-warning@1.0.3:
resolution: {integrity: sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==}
- tinybench@2.9.0:
- resolution: {integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==}
-
tinycolor2@1.6.0:
resolution: {integrity: sha512-XPaBkWQJdsf3pLKJV9p4qN/S+fm2Oj8AIPo1BTUhg5oxkvm9+SVEGFdhyOz7tTdUTfvxMiAs4sp6/eZO2Ew+pw==}
- tinyexec@0.3.2:
- resolution: {integrity: sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==}
-
tinyglobby@0.2.14:
resolution: {integrity: sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ==}
engines: {node: '>=12.0.0'}
@@ -6723,28 +6444,9 @@ packages:
resolution: {integrity: sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==}
engines: {node: '>=12.0.0'}
- tinypool@1.1.1:
- resolution: {integrity: sha512-Zba82s87IFq9A9XmjiX5uZA/ARWDrB03OHlq+Vw1fSdt0I+4/Kutwy8BP4Y/y/aORMo61FQ0vIb5j44vSo5Pkg==}
- engines: {node: ^18.0.0 || >=20.0.0}
-
- tinyrainbow@1.2.0:
- resolution: {integrity: sha512-weEDEq7Z5eTHPDh4xjX789+fHfF+P8boiFB+0vbWzpbnbsEr/GRaohi/uMKxg8RZMXnl1ItAi/IUHWMsjDV7kQ==}
- engines: {node: '>=14.0.0'}
-
- tinyspy@3.0.2:
- resolution: {integrity: sha512-n1cw8k1k0x4pgA2+9XrOkFydTerNcJ1zWCO5Nn9scWHTD+5tp8dghT2x1uduQePZTZgd3Tupf+x9BxJjeJi77Q==}
- engines: {node: '>=14.0.0'}
-
- tldts-core@6.1.86:
- resolution: {integrity: sha512-Je6p7pkk+KMzMv2XXKmAE3McmolOQFdxkKw0R8EYNr7sELW46JqnNeTX8ybPiQgvg1ymCoF8LXs5fzFaZvJPTA==}
-
tldts-core@7.0.19:
resolution: {integrity: sha512-lJX2dEWx0SGH4O6p+7FPwYmJ/bu1JbcGJ8RLaG9b7liIgZ85itUVEPbMtWRVrde/0fnDPEPHW10ZsKW3kVsE9A==}
- tldts@6.1.86:
- resolution: {integrity: sha512-WMi/OQ2axVTf/ykqCQgXiIct+mSQDFdH2fkwhPwgEwvJ1kSzZRiinb0zF2Xb8u4+OqPChmyI6MEu4EezNJz+FQ==}
- hasBin: true
-
tldts@7.0.19:
resolution: {integrity: sha512-8PWx8tvC4jDB39BQw1m4x8y5MH1BcQ5xHeL2n7UVFulMPH/3Q0uiamahFJ3lXA0zO2SUyRXuVVbWSDmstlt9YA==}
hasBin: true
@@ -6753,10 +6455,6 @@ packages:
resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
engines: {node: '>=8.0'}
- tough-cookie@5.1.2:
- resolution: {integrity: sha512-FVDYdxtnj0G6Qm/DhNPSb8Ju59ULcup3tuJxkFb5K8Bv2pUXILbf0xZWU8PX8Ov19OXljbUyveOFwRMwkXzO+A==}
- engines: {node: '>=16'}
-
tough-cookie@6.0.0:
resolution: {integrity: sha512-kXuRi1mtaKMrsLUxz3sQYvVl37B0Ns6MzfrtV5DvJceE9bPyspOqk9xxv7XbZWcfLWbFmm997vl83qUWVJA64w==}
engines: {node: '>=16'}
@@ -6764,10 +6462,6 @@ packages:
tr46@1.0.1:
resolution: {integrity: sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==}
- tr46@5.1.1:
- resolution: {integrity: sha512-hdF5ZgjTqgAntKkklYw0R03MG2x/bSzTtkxmIRw/sTNV8YXsCJ1tfLAX23lhxhHJlEf3CRCOCGGWw3vI3GaSPw==}
- engines: {node: '>=18'}
-
tr46@6.0.0:
resolution: {integrity: sha512-bLVMLPtstlZ4iMQHpFHTR7GAGj2jxi8Dg0s2h2MafAE4uSWF98FC/3MomU51iQAMf8/qDUbKWf5GxuvvVcXEhw==}
engines: {node: '>=20'}
@@ -6958,11 +6652,6 @@ packages:
varint@6.0.0:
resolution: {integrity: sha512-cXEIW6cfr15lFv563k4GuVuW/fiwjknytD37jIOLSdSWuOI6WnO/oKwmP2FQTU2l01LP8/M5TSAJpzUaGe3uWg==}
- vite-node@2.1.9:
- resolution: {integrity: sha512-AM9aQ/IPrW/6ENLQg3AGY4K1N2TGZdR5e4gu/MmmR2xR3Ll1+dib+nook92g4TV3PXVyeyxdWwtaCAiUL0hMxA==}
- engines: {node: ^18.0.0 || >=20.0.0}
- hasBin: true
-
vite-plugin-checker@0.12.0:
resolution: {integrity: sha512-CmdZdDOGss7kdQwv73UyVgLPv0FVYe5czAgnmRX2oKljgEvSrODGuClaV3PDR2+3ou7N/OKGauDDBjy2MB07Rg==}
engines: {node: '>=16.11'}
@@ -7114,31 +6803,6 @@ packages:
yaml:
optional: true
- vitest@2.1.9:
- resolution: {integrity: sha512-MSmPM9REYqDGBI8439mA4mWhV5sKmDlBKWIYbA3lRb2PTHACE0mgKwA8yQ2xq9vxDTuk4iPrECBAEW2aoFXY0Q==}
- engines: {node: ^18.0.0 || >=20.0.0}
- hasBin: true
- peerDependencies:
- '@edge-runtime/vm': '*'
- '@types/node': ^18.0.0 || >=20.0.0
- '@vitest/browser': 2.1.9
- '@vitest/ui': 2.1.9
- happy-dom: '*'
- jsdom: '*'
- peerDependenciesMeta:
- '@edge-runtime/vm':
- optional: true
- '@types/node':
- optional: true
- '@vitest/browser':
- optional: true
- '@vitest/ui':
- optional: true
- happy-dom:
- optional: true
- jsdom:
- optional: true
-
vscode-uri@3.1.0:
resolution: {integrity: sha512-/BpdSx+yCQGnCvecbyXdxHDkuk55/G3xwnC0GqY4gmQ3j+A+g8kzzgB4Nk/SINjqn6+waqw3EgbVF2QKExkRxQ==}
@@ -7168,10 +6832,6 @@ packages:
webidl-conversions@4.0.2:
resolution: {integrity: sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==}
- webidl-conversions@7.0.0:
- resolution: {integrity: sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==}
- engines: {node: '>=12'}
-
webidl-conversions@8.0.1:
resolution: {integrity: sha512-BMhLD/Sw+GbJC21C/UgyaZX41nPt8bUTg+jWyDeg7e7YN4xOM05YPSIXceACnXVtqyEw/LMClUQMtMZ+PGGpqQ==}
engines: {node: '>=20'}
@@ -7190,19 +6850,10 @@ packages:
webpack-cli:
optional: true
- whatwg-encoding@3.1.1:
- resolution: {integrity: sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==}
- engines: {node: '>=18'}
- deprecated: Use @exodus/bytes instead for a more spec-conformant and faster implementation
-
whatwg-mimetype@4.0.0:
resolution: {integrity: sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==}
engines: {node: '>=18'}
- whatwg-url@14.2.0:
- resolution: {integrity: sha512-De72GdQZzNTUBBChsXueQUnPKDkg/5A5zp7pFDuQAj5UFoENpiACU0wlCvzpAGnTkj++ihpKwKyYewn/XNUbKw==}
- engines: {node: '>=18'}
-
whatwg-url@15.1.0:
resolution: {integrity: sha512-2ytDk0kiEj/yu90JOAp44PVPUkO9+jVhyf+SybKlRHSDlvOOZhdPIrr7xTH64l4WixO2cP+wQIcgujkGBPPz6g==}
engines: {node: '>=20'}
@@ -7235,11 +6886,6 @@ packages:
engines: {node: '>= 8'}
hasBin: true
- why-is-node-running@2.3.0:
- resolution: {integrity: sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==}
- engines: {node: '>=8'}
- hasBin: true
-
word-wrap@1.2.5:
resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==}
engines: {node: '>=0.10.0'}
@@ -7392,8 +7038,6 @@ snapshots:
'@acemir/cssom@0.9.30': {}
- '@adobe/css-tools@4.4.3': {}
-
'@alloc/quick-lru@5.2.0': {}
'@apideck/better-ajv-errors@0.3.6(ajv@8.18.0)':
@@ -7403,14 +7047,6 @@ snapshots:
jsonpointer: 5.0.1
leven: 3.1.0
- '@asamuzakjp/css-color@3.2.0':
- dependencies:
- '@csstools/css-calc': 2.1.4(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4)
- '@csstools/css-color-parser': 3.0.10(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4)
- '@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4)
- '@csstools/css-tokenizer': 3.0.4
- lru-cache: 10.4.3
-
'@asamuzakjp/css-color@4.1.1':
dependencies:
'@csstools/css-calc': 2.1.4(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4)
@@ -8186,8 +7822,6 @@ snapshots:
lodash: 4.17.23
serialize-query-params: 2.0.4
- '@csstools/color-helpers@5.0.2': {}
-
'@csstools/color-helpers@5.1.0': {}
'@csstools/css-calc@2.1.4(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4)':
@@ -8195,13 +7829,6 @@ snapshots:
'@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4)
'@csstools/css-tokenizer': 3.0.4
- '@csstools/css-color-parser@3.0.10(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4)':
- dependencies:
- '@csstools/color-helpers': 5.0.2
- '@csstools/css-calc': 2.1.4(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4)
- '@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4)
- '@csstools/css-tokenizer': 3.0.4
-
'@csstools/css-color-parser@3.1.0(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4)':
dependencies:
'@csstools/color-helpers': 5.1.0
@@ -9574,50 +9201,6 @@ snapshots:
'@tanstack/store@0.8.0': {}
- '@testing-library/dom@10.4.1':
- dependencies:
- '@babel/code-frame': 7.29.0
- '@babel/runtime': 7.28.6
- '@types/aria-query': 5.0.4
- aria-query: 5.3.0
- dom-accessibility-api: 0.5.16
- lz-string: 1.5.0
- picocolors: 1.1.1
- pretty-format: 27.5.1
-
- '@testing-library/jest-dom@6.6.4':
- dependencies:
- '@adobe/css-tools': 4.4.3
- aria-query: 5.3.2
- css.escape: 1.5.1
- dom-accessibility-api: 0.6.3
- lodash: 4.17.23
- picocolors: 1.1.1
- redent: 3.0.0
-
- '@testing-library/react-hooks@8.0.1(@types/react@18.3.27)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)':
- dependencies:
- '@babel/runtime': 7.28.2
- react: 19.2.3
- react-error-boundary: 3.1.4(react@19.2.3)
- optionalDependencies:
- '@types/react': 18.3.27
- react-dom: 19.2.3(react@19.2.3)
-
- '@testing-library/react@16.3.0(@testing-library/dom@10.4.1)(@types/react-dom@18.3.7(@types/react@18.3.27))(@types/react@18.3.27)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)':
- dependencies:
- '@babel/runtime': 7.28.2
- '@testing-library/dom': 10.4.1
- react: 19.2.3
- react-dom: 19.2.3(react@19.2.3)
- optionalDependencies:
- '@types/react': 18.3.27
- '@types/react-dom': 18.3.7(@types/react@18.3.27)
-
- '@testing-library/user-event@14.6.1(@testing-library/dom@10.4.1)':
- dependencies:
- '@testing-library/dom': 10.4.1
-
'@transfem-org/sfm-js@0.24.8':
dependencies:
'@twemoji/parser': 15.0.0
@@ -9635,8 +9218,6 @@ snapshots:
'@types/argparse@1.0.38': {}
- '@types/aria-query@5.0.4': {}
-
'@types/babel__core@7.20.5':
dependencies:
'@babel/parser': 7.29.0
@@ -10129,46 +9710,6 @@ snapshots:
transitivePeerDependencies:
- supports-color
- '@vitest/expect@2.1.9':
- dependencies:
- '@vitest/spy': 2.1.9
- '@vitest/utils': 2.1.9
- chai: 5.2.1
- tinyrainbow: 1.2.0
-
- '@vitest/mocker@2.1.9(vite@5.4.21(@types/node@25.0.3)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.46.0))':
- dependencies:
- '@vitest/spy': 2.1.9
- estree-walker: 3.0.3
- magic-string: 0.30.17
- optionalDependencies:
- vite: 5.4.21(@types/node@25.0.3)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.46.0)
-
- '@vitest/pretty-format@2.1.9':
- dependencies:
- tinyrainbow: 1.2.0
-
- '@vitest/runner@2.1.9':
- dependencies:
- '@vitest/utils': 2.1.9
- pathe: 1.1.2
-
- '@vitest/snapshot@2.1.9':
- dependencies:
- '@vitest/pretty-format': 2.1.9
- magic-string: 0.30.17
- pathe: 1.1.2
-
- '@vitest/spy@2.1.9':
- dependencies:
- tinyspy: 3.0.2
-
- '@vitest/utils@2.1.9':
- dependencies:
- '@vitest/pretty-format': 2.1.9
- loupe: 3.2.0
- tinyrainbow: 1.2.0
-
'@volar/language-core@2.4.22':
dependencies:
'@volar/source-map': 2.4.22
@@ -10397,8 +9938,6 @@ snapshots:
dependencies:
color-convert: 2.0.1
- ansi-styles@5.2.0: {}
-
ansi-styles@6.2.1: {}
any-promise@1.3.0: {}
@@ -10418,10 +9957,6 @@ snapshots:
argparse@2.0.1: {}
- aria-query@5.3.0:
- dependencies:
- dequal: 2.0.3
-
aria-query@5.3.2: {}
array-buffer-byte-length@1.0.2:
@@ -10493,8 +10028,6 @@ snapshots:
get-intrinsic: 1.3.0
is-array-buffer: 3.0.5
- assertion-error@2.0.1: {}
-
ast-metadata-inferer@0.8.1:
dependencies:
'@mdn/browser-compat-data': 5.7.6
@@ -10507,8 +10040,6 @@ snapshots:
async@3.2.6: {}
- asynckit@0.4.0: {}
-
at-least-node@1.0.0: {}
autoprefixer@10.4.23(postcss@8.5.6):
@@ -10605,8 +10136,6 @@ snapshots:
esbuild: 0.24.2
load-tsconfig: 0.2.5
- cac@6.7.14: {}
-
cacheable@1.10.3:
dependencies:
hookified: 1.11.0
@@ -10649,14 +10178,6 @@ snapshots:
caniuse-lite@1.0.30001762: {}
- chai@5.2.1:
- dependencies:
- assertion-error: 2.0.1
- check-error: 2.1.1
- deep-eql: 5.0.2
- loupe: 3.2.0
- pathval: 2.0.1
-
chalk@4.1.2:
dependencies:
ansi-styles: 4.3.0
@@ -10666,8 +10187,6 @@ snapshots:
char-regex@1.0.2: {}
- check-error@2.1.1: {}
-
chokidar@3.6.0:
dependencies:
anymatch: 3.1.3
@@ -10713,10 +10232,6 @@ snapshots:
colorjs.io@0.5.2: {}
- combined-stream@1.0.8:
- dependencies:
- delayed-stream: 1.0.0
-
commander@13.1.0: {}
commander@2.20.3: {}
@@ -10813,8 +10328,6 @@ snapshots:
css-what@6.2.2: {}
- css.escape@1.5.1: {}
-
cssesc@3.0.0: {}
cssnano-preset-default@6.1.2(postcss@8.5.6):
@@ -10865,11 +10378,6 @@ snapshots:
dependencies:
css-tree: 2.2.1
- cssstyle@4.6.0:
- dependencies:
- '@asamuzakjp/css-color': 3.2.0
- rrweb-cssom: 0.8.0
-
cssstyle@5.3.7:
dependencies:
'@asamuzakjp/css-color': 4.1.1
@@ -10883,11 +10391,6 @@ snapshots:
damerau-levenshtein@1.0.8: {}
- data-urls@5.0.0:
- dependencies:
- whatwg-mimetype: 4.0.0
- whatwg-url: 14.2.0
-
data-urls@6.0.0:
dependencies:
whatwg-mimetype: 4.0.0
@@ -10931,8 +10434,6 @@ snapshots:
decode-uri-component@0.4.1: {}
- deep-eql@5.0.2: {}
-
deep-is@0.1.4: {}
deepmerge@4.3.1: {}
@@ -10949,10 +10450,6 @@ snapshots:
has-property-descriptors: 1.0.2
object-keys: 1.1.1
- delayed-stream@1.0.0: {}
-
- dequal@2.0.3: {}
-
detect-it@4.0.1: {}
detect-libc@1.0.3:
@@ -10980,10 +10477,6 @@ snapshots:
dependencies:
esutils: 2.0.3
- dom-accessibility-api@0.5.16: {}
-
- dom-accessibility-api@0.6.3: {}
-
dom-serializer@1.4.1:
dependencies:
domelementtype: 2.3.0
@@ -11621,10 +11114,6 @@ snapshots:
estree-walker@2.0.2: {}
- estree-walker@3.0.3:
- dependencies:
- '@types/estree': 1.0.8
-
esutils@2.0.3: {}
eventemitter3@5.0.1: {}
@@ -11645,12 +11134,8 @@ snapshots:
exifr@7.1.3: {}
- expect-type@1.2.2: {}
-
exsolve@1.0.7: {}
- fake-indexeddb@6.0.1: {}
-
fast-average-color@9.5.0: {}
fast-deep-equal@3.1.3: {}
@@ -11748,14 +11233,6 @@ snapshots:
cross-spawn: 7.0.6
signal-exit: 4.1.0
- form-data@4.0.4:
- dependencies:
- asynckit: 0.4.0
- combined-stream: 1.0.8
- es-set-tostringtag: 2.1.0
- hasown: 2.0.2
- mime-types: 2.1.35
-
fraction.js@5.3.4: {}
fs-extra@10.1.0:
@@ -11941,10 +11418,6 @@ snapshots:
domhandler: 5.0.3
htmlparser2: 10.0.0
- html-encoding-sniffer@4.0.0:
- dependencies:
- whatwg-encoding: 3.1.1
-
html-encoding-sniffer@6.0.0:
dependencies:
'@exodus/bytes': 1.8.0
@@ -12000,10 +11473,6 @@ snapshots:
husky@9.1.7: {}
- iconv-lite@0.6.3:
- dependencies:
- safer-buffer: 2.1.2
-
idb@7.1.1: {}
ignore@5.3.2: {}
@@ -12025,8 +11494,6 @@ snapshots:
imurmurhash@0.1.4: {}
- indent-string@4.0.0: {}
-
inflight@1.0.6:
dependencies:
once: 1.4.0
@@ -12276,34 +11743,6 @@ snapshots:
jsdoc-type-pratt-parser@4.1.0: {}
- jsdom@25.0.1:
- dependencies:
- cssstyle: 4.6.0
- data-urls: 5.0.0
- decimal.js: 10.6.0
- form-data: 4.0.4
- html-encoding-sniffer: 4.0.0
- http-proxy-agent: 7.0.2
- https-proxy-agent: 7.0.6
- is-potential-custom-element-name: 1.0.1
- nwsapi: 2.2.21
- parse5: 7.3.0
- rrweb-cssom: 0.7.1
- saxes: 6.0.0
- symbol-tree: 3.2.4
- tough-cookie: 5.1.2
- w3c-xmlserializer: 5.0.0
- webidl-conversions: 7.0.0
- whatwg-encoding: 3.1.1
- whatwg-mimetype: 4.0.0
- whatwg-url: 14.2.0
- ws: 8.18.3
- xml-name-validator: 5.0.0
- transitivePeerDependencies:
- - bufferutil
- - supports-color
- - utf-8-validate
-
jsdom@27.4.0:
dependencies:
'@acemir/cssom': 0.9.30
@@ -12518,8 +11957,6 @@ snapshots:
dependencies:
js-tokens: 4.0.0
- loupe@3.2.0: {}
-
lower-case@2.0.2:
dependencies:
tslib: 2.8.1
@@ -12538,8 +11975,6 @@ snapshots:
lunr@2.3.9: {}
- lz-string@1.5.0: {}
-
magic-string@0.25.9:
dependencies:
sourcemap-codec: 1.4.8
@@ -12598,8 +12033,6 @@ snapshots:
mimic-function@5.0.1: {}
- min-indent@1.0.1: {}
-
mini-css-extract-plugin@2.9.4(webpack@5.101.0(esbuild@0.24.2)):
dependencies:
schema-utils: 4.3.2
@@ -12685,8 +12118,6 @@ snapshots:
dependencies:
boolbase: 1.0.0
- nwsapi@2.2.21: {}
-
object-assign@4.1.1: {}
object-hash@3.0.0: {}
@@ -12806,10 +12237,6 @@ snapshots:
parse-statements@1.0.11: {}
- parse5@7.3.0:
- dependencies:
- entities: 6.0.1
-
parse5@8.0.0:
dependencies:
entities: 6.0.1
@@ -12840,12 +12267,8 @@ snapshots:
pathe@0.2.0: {}
- pathe@1.1.2: {}
-
pathe@2.0.3: {}
- pathval@2.0.1: {}
-
picocolors@1.1.1: {}
picomatch@2.3.1: {}
@@ -13088,12 +12511,6 @@ snapshots:
pretty-bytes@6.1.1: {}
- pretty-format@27.5.1:
- dependencies:
- ansi-regex: 5.0.1
- ansi-styles: 5.2.0
- react-is: 17.0.2
-
prismjs@1.30.0: {}
process@0.11.10: {}
@@ -13156,11 +12573,6 @@ snapshots:
react: 19.2.3
scheduler: 0.27.0
- react-error-boundary@3.1.4(react@19.2.3):
- dependencies:
- '@babel/runtime': 7.28.2
- react: 19.2.3
-
react-error-boundary@4.1.2(react@19.2.3):
dependencies:
'@babel/runtime': 7.28.2
@@ -13219,8 +12631,6 @@ snapshots:
react-is@16.13.1: {}
- react-is@17.0.2: {}
-
react-property@2.0.2: {}
react-redux@9.2.0(@types/react@18.3.27)(react@19.2.3)(redux@5.0.1):
@@ -13295,11 +12705,6 @@ snapshots:
readdirp@4.1.2: {}
- redent@3.0.0:
- dependencies:
- indent-string: 4.0.0
- strip-indent: 3.0.0
-
redux-thunk@3.1.0(redux@5.0.1):
dependencies:
redux: 5.0.1
@@ -13484,10 +12889,6 @@ snapshots:
'@rollup/rollup-win32-x64-msvc': 4.57.1
fsevents: 2.3.3
- rrweb-cssom@0.7.1: {}
-
- rrweb-cssom@0.8.0: {}
-
run-parallel@1.2.0:
dependencies:
queue-microtask: 1.2.3
@@ -13517,8 +12918,6 @@ snapshots:
es-errors: 1.3.0
is-regex: 1.2.1
- safer-buffer@2.1.2: {}
-
sass-embedded-all-unknown@1.93.3:
dependencies:
sass: 1.93.3
@@ -13709,8 +13108,6 @@ snapshots:
side-channel-map: 1.0.1
side-channel-weakmap: 1.0.2
- siginfo@2.0.0: {}
-
signal-exit@4.1.0: {}
slash@3.0.0: {}
@@ -13765,10 +13162,6 @@ snapshots:
stable-hash@0.0.5: {}
- stackback@0.0.2: {}
-
- std-env@3.9.0: {}
-
stop-iteration-iterator@1.1.0:
dependencies:
es-errors: 1.3.0
@@ -13876,10 +13269,6 @@ snapshots:
strip-final-newline@3.0.0: {}
- strip-indent@3.0.0:
- dependencies:
- min-indent: 1.0.1
-
strip-json-comments@3.1.1: {}
style-to-js@1.1.21:
@@ -14118,12 +13507,8 @@ snapshots:
tiny-warning@1.0.3: {}
- tinybench@2.9.0: {}
-
tinycolor2@1.6.0: {}
- tinyexec@0.3.2: {}
-
tinyglobby@0.2.14:
dependencies:
fdir: 6.4.6(picomatch@4.0.3)
@@ -14134,20 +13519,8 @@ snapshots:
fdir: 6.5.0(picomatch@4.0.3)
picomatch: 4.0.3
- tinypool@1.1.1: {}
-
- tinyrainbow@1.2.0: {}
-
- tinyspy@3.0.2: {}
-
- tldts-core@6.1.86: {}
-
tldts-core@7.0.19: {}
- tldts@6.1.86:
- dependencies:
- tldts-core: 6.1.86
-
tldts@7.0.19:
dependencies:
tldts-core: 7.0.19
@@ -14156,10 +13529,6 @@ snapshots:
dependencies:
is-number: 7.0.0
- tough-cookie@5.1.2:
- dependencies:
- tldts: 6.1.86
-
tough-cookie@6.0.0:
dependencies:
tldts: 7.0.19
@@ -14168,10 +13537,6 @@ snapshots:
dependencies:
punycode: 2.3.1
- tr46@5.1.1:
- dependencies:
- punycode: 2.3.1
-
tr46@6.0.0:
dependencies:
punycode: 2.3.1
@@ -14379,24 +13744,6 @@ snapshots:
varint@6.0.0: {}
- vite-node@2.1.9(@types/node@25.0.3)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.46.0):
- dependencies:
- cac: 6.7.14
- debug: 4.4.1
- es-module-lexer: 1.7.0
- pathe: 1.1.2
- vite: 5.4.21(@types/node@25.0.3)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.46.0)
- transitivePeerDependencies:
- - '@types/node'
- - less
- - lightningcss
- - sass
- - sass-embedded
- - stylus
- - sugarss
- - supports-color
- - terser
-
vite-plugin-checker@0.12.0(eslint@8.57.1)(meow@13.2.0)(optionator@0.9.4)(stylelint@16.23.0(typescript@5.7.3))(typescript@5.7.3)(vite@7.3.1(@types/node@25.0.3)(jiti@1.21.7)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.46.0)(yaml@2.8.0)):
dependencies:
'@babel/code-frame': 7.29.0
@@ -14538,18 +13885,6 @@ snapshots:
sass-embedded: 1.93.3
terser: 5.46.0
- vite@5.4.21(@types/node@25.0.3)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.46.0):
- dependencies:
- esbuild: 0.21.5
- postcss: 8.5.6
- rollup: 4.52.5
- optionalDependencies:
- '@types/node': 25.0.3
- fsevents: 2.3.3
- sass: 1.93.3
- sass-embedded: 1.93.3
- terser: 5.46.0
-
vite@7.3.1(@types/node@25.0.3)(jiti@1.21.7)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.46.0)(yaml@2.8.0):
dependencies:
esbuild: 0.27.3
@@ -14567,42 +13902,6 @@ snapshots:
terser: 5.46.0
yaml: 2.8.0
- vitest@2.1.9(@types/node@25.0.3)(jsdom@25.0.1)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.46.0):
- dependencies:
- '@vitest/expect': 2.1.9
- '@vitest/mocker': 2.1.9(vite@5.4.21(@types/node@25.0.3)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.46.0))
- '@vitest/pretty-format': 2.1.9
- '@vitest/runner': 2.1.9
- '@vitest/snapshot': 2.1.9
- '@vitest/spy': 2.1.9
- '@vitest/utils': 2.1.9
- chai: 5.2.1
- debug: 4.4.1
- expect-type: 1.2.2
- magic-string: 0.30.17
- pathe: 1.1.2
- std-env: 3.9.0
- tinybench: 2.9.0
- tinyexec: 0.3.2
- tinypool: 1.1.1
- tinyrainbow: 1.2.0
- vite: 5.4.21(@types/node@25.0.3)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.46.0)
- vite-node: 2.1.9(@types/node@25.0.3)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.46.0)
- why-is-node-running: 2.3.0
- optionalDependencies:
- '@types/node': 25.0.3
- jsdom: 25.0.1
- transitivePeerDependencies:
- - less
- - lightningcss
- - msw
- - sass
- - sass-embedded
- - stylus
- - sugarss
- - supports-color
- - terser
-
vscode-uri@3.1.0: {}
vue-loader@17.4.2(@vue/compiler-sfc@3.5.18)(webpack@5.101.0(esbuild@0.24.2)):
@@ -14629,8 +13928,6 @@ snapshots:
webidl-conversions@4.0.2: {}
- webidl-conversions@7.0.0: {}
-
webidl-conversions@8.0.1: {}
webpack-sources@3.3.3: {}
@@ -14667,17 +13964,8 @@ snapshots:
- esbuild
- uglify-js
- whatwg-encoding@3.1.1:
- dependencies:
- iconv-lite: 0.6.3
-
whatwg-mimetype@4.0.0: {}
- whatwg-url@14.2.0:
- dependencies:
- tr46: 5.1.1
- webidl-conversions: 7.0.0
-
whatwg-url@15.1.0:
dependencies:
tr46: 6.0.0
@@ -14738,11 +14026,6 @@ snapshots:
dependencies:
isexe: 2.0.0
- why-is-node-running@2.3.0:
- dependencies:
- siginfo: 2.0.0
- stackback: 0.0.2
-
word-wrap@1.2.5: {}
workbox-background-sync@7.3.0:
From 1cfa337ac2e46891224c06647c638b2bbf0ee1ed Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?nicole=20miko=C5=82ajczyk?=
Date: Sat, 14 Feb 2026 23:27:12 +0100
Subject: [PATCH 05/74] nicolium: update vite-plugin-compile-time
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Signed-off-by: nicole mikołajczyk
---
packages/pl-fe/package.json | 3 +-
packages/pl-fe/src/build-config.ts | 49 +++++++-
.../utils/manifest-map-compiletime.ts | 16 ---
.../crypto-donate/utils/manifest-map.ts | 16 ++-
.../src/features/emoji/mapping-compiletime.ts | 107 ------------------
packages/pl-fe/src/features/emoji/mapping.ts | 106 ++++++++++++++++-
packages/pl-fe/src/service-worker/sw.ts | 4 +-
.../src/service-worker/web-push-locales.ts | 54 ++++-----
packages/pl-fe/src/utils/code-compiletime.ts | 52 ---------
packages/pl-fe/src/utils/code.ts | 55 ++++++++-
pnpm-lock.yaml | 82 ++++----------
11 files changed, 275 insertions(+), 269 deletions(-)
delete mode 100644 packages/pl-fe/src/features/crypto-donate/utils/manifest-map-compiletime.ts
delete mode 100644 packages/pl-fe/src/features/emoji/mapping-compiletime.ts
delete mode 100644 packages/pl-fe/src/utils/code-compiletime.ts
diff --git a/packages/pl-fe/package.json b/packages/pl-fe/package.json
index 53242f48c..51930828b 100644
--- a/packages/pl-fe/package.json
+++ b/packages/pl-fe/package.json
@@ -127,6 +127,7 @@
"resize-observer": "^1.0.4",
"sass-embedded": "^1.93.3",
"stringz": "^2.1.0",
+ "tabbable": "^6.4.0",
"use-mutative": "^1.3.1",
"util": "^0.12.5",
"valibot": "^1.2.0",
@@ -171,7 +172,7 @@
"typescript": "5.7.3",
"vite": "^7.3.1",
"vite-plugin-checker": "^0.12.0",
- "vite-plugin-compile-time": "^0.3.2",
+ "vite-plugin-compile-time": "^0.4.6",
"vite-plugin-html": "^3.2.2",
"vite-plugin-pwa": "^1.2.0",
"vite-plugin-require": "^1.2.14",
diff --git a/packages/pl-fe/src/build-config.ts b/packages/pl-fe/src/build-config.ts
index 72e4b5186..448b407fc 100644
--- a/packages/pl-fe/src/build-config.ts
+++ b/packages/pl-fe/src/build-config.ts
@@ -1,8 +1,51 @@
-import type { PlFeEnv } from './build-config-compiletime';
+/**
+ * Build config: configuration set at build time.
+ * @module pl-fe/build-config
+ */
-export const {
+// eslint-disable-next-line import/extensions
+import trim from 'lodash/trim.js';
+// eslint-disable-next-line import/extensions
+import trimEnd from 'lodash/trimEnd.js';
+
+const env = compileTime(() => {
+ const {
+ NODE_ENV,
+ BACKEND_URL,
+ FE_SUBDIRECTORY,
+ WITH_LANDING_PAGE,
+ } = process.env;
+
+ const sanitizeURL = (url: string | undefined = ''): string => {
+ try {
+ return trimEnd(new URL(url).toString(), '/');
+ } catch {
+ return '';
+ }
+ };
+
+ const sanitizeBasename = (path: string | undefined = ''): string => `/${trim(path, '/')}`;
+
+ return {
+ NODE_ENV: NODE_ENV || 'development',
+ BACKEND_URL: sanitizeURL(BACKEND_URL),
+ FE_SUBDIRECTORY: sanitizeBasename(FE_SUBDIRECTORY),
+ WITH_LANDING_PAGE: WITH_LANDING_PAGE === 'true',
+ };
+});
+
+const {
NODE_ENV,
BACKEND_URL,
FE_SUBDIRECTORY,
WITH_LANDING_PAGE,
-} = import.meta.compileTime('./build-config-compiletime.ts');
+} = env;
+
+export type PlFeEnv = typeof env;
+
+export {
+ NODE_ENV,
+ BACKEND_URL,
+ FE_SUBDIRECTORY,
+ WITH_LANDING_PAGE,
+};
diff --git a/packages/pl-fe/src/features/crypto-donate/utils/manifest-map-compiletime.ts b/packages/pl-fe/src/features/crypto-donate/utils/manifest-map-compiletime.ts
deleted file mode 100644
index ff3686620..000000000
--- a/packages/pl-fe/src/features/crypto-donate/utils/manifest-map-compiletime.ts
+++ /dev/null
@@ -1,16 +0,0 @@
-// Converts cryptocurrency-icon's manifest file from a list to a map.
-// See: https://github.com/spothq/cryptocurrency-icons/blob/master/manifest.json
-
-import { createRequire } from 'node:module';
-
-const require = createRequire(import.meta.url);
-const manifest = require('cryptocurrency-icons/manifest.json');
-
-const manifestMap = manifest.reduce((acc: Record, entry: typeof manifest[0]) => {
- acc[entry.symbol.toLowerCase()] = entry;
- return acc;
-}, {});
-
-export default () => ({
- data: manifestMap,
-});
diff --git a/packages/pl-fe/src/features/crypto-donate/utils/manifest-map.ts b/packages/pl-fe/src/features/crypto-donate/utils/manifest-map.ts
index d544bde5b..781ff82e2 100644
--- a/packages/pl-fe/src/features/crypto-donate/utils/manifest-map.ts
+++ b/packages/pl-fe/src/features/crypto-donate/utils/manifest-map.ts
@@ -1,3 +1,5 @@
+import { createRequire } from 'node:module';
+
interface ManifestMap {
[s: string]: {
symbol: string;
@@ -6,6 +8,18 @@ interface ManifestMap {
};
}
-export default import.meta.compileTime('./manifest-map-compiletime.ts');
+const manifestMap = compileTime(() => {
+ const require = createRequire(import.meta.url);
+ const manifest = require('cryptocurrency-icons/manifest.json');
+
+ const manifestMap = manifest.reduce((acc: Record, entry: typeof manifest[0]) => {
+ acc[entry.symbol.toLowerCase()] = entry;
+ return acc;
+ }, {});
+
+ return manifestMap;
+});
+
+export default manifestMap;
export type { ManifestMap };
diff --git a/packages/pl-fe/src/features/emoji/mapping-compiletime.ts b/packages/pl-fe/src/features/emoji/mapping-compiletime.ts
deleted file mode 100644
index f5ef8cdf0..000000000
--- a/packages/pl-fe/src/features/emoji/mapping-compiletime.ts
+++ /dev/null
@@ -1,107 +0,0 @@
-import { createRequire } from 'node:module';
-
-import type { EmojiData } from './data';
-import type { UnicodeMap } from './mapping';
-
-const require = createRequire(import.meta.url);
-const data = require('@emoji-mart/data/sets/14/twitter.json');
-
-const stripLeadingZeros = /^0+/;
-
-/*
- * Twemoji strips their hex codes from unicode codepoints to make it look "pretty"
- * - leading 0s are removed
- * - fe0f is removed unless it has 200d
- * - fe0f is NOT removed for 1f441-fe0f-200d-1f5e8-fe0f even though it has a 200d
- *
- * this is all wrong
- */
-const blacklist = {
- '1f441-fe0f-200d-1f5e8-fe0f': true,
-};
-
-const tweaks = {
- '#⃣': ['23-20e3', 'hash'],
- '*⃣': ['2a-20e3', 'keycap_star'],
- '0⃣': ['30-20e3', 'zero'],
- '1⃣': ['31-20e3', 'one'],
- '2⃣': ['32-20e3', 'two'],
- '3⃣': ['33-20e3', 'three'],
- '4⃣': ['34-20e3', 'four'],
- '5⃣': ['35-20e3', 'five'],
- '6⃣': ['36-20e3', 'six'],
- '7⃣': ['37-20e3', 'seven'],
- '8⃣': ['38-20e3', 'eight'],
- '9⃣': ['39-20e3', 'nine'],
- '❤🔥': ['2764-fe0f-200d-1f525', 'heart_on_fire'],
- '❤🩹': ['2764-fe0f-200d-1fa79', 'mending_heart'],
- '👁🗨️': ['1f441-fe0f-200d-1f5e8-fe0f', 'eye-in-speech-bubble'],
- '👁️🗨': ['1f441-fe0f-200d-1f5e8-fe0f', 'eye-in-speech-bubble'],
- '👁🗨': ['1f441-fe0f-200d-1f5e8-fe0f', 'eye-in-speech-bubble'],
- '🕵♂️': ['1f575-fe0f-200d-2642-fe0f', 'male-detective'],
- '🕵️♂': ['1f575-fe0f-200d-2642-fe0f', 'male-detective'],
- '🕵♂': ['1f575-fe0f-200d-2642-fe0f', 'male-detective'],
- '🕵♀️': ['1f575-fe0f-200d-2640-fe0f', 'female-detective'],
- '🕵️♀': ['1f575-fe0f-200d-2640-fe0f', 'female-detective'],
- '🕵♀': ['1f575-fe0f-200d-2640-fe0f', 'female-detective'],
- '🏌♂️': ['1f3cc-fe0f-200d-2642-fe0f', 'man-golfing'],
- '🏌️♂': ['1f3cc-fe0f-200d-2642-fe0f', 'man-golfing'],
- '🏌♂': ['1f3cc-fe0f-200d-2642-fe0f', 'man-golfing'],
- '🏌♀️': ['1f3cc-fe0f-200d-2640-fe0f', 'woman-golfing'],
- '🏌️♀': ['1f3cc-fe0f-200d-2640-fe0f', 'woman-golfing'],
- '🏌♀': ['1f3cc-fe0f-200d-2640-fe0f', 'woman-golfing'],
- '⛹♂️': ['26f9-fe0f-200d-2642-fe0f', 'man-bouncing-ball'],
- '⛹️♂': ['26f9-fe0f-200d-2642-fe0f', 'man-bouncing-ball'],
- '⛹♂': ['26f9-fe0f-200d-2642-fe0f', 'man-bouncing-ball'],
- '⛹♀️': ['26f9-fe0f-200d-2640-fe0f', 'woman-bouncing-ball'],
- '⛹️♀': ['26f9-fe0f-200d-2640-fe0f', 'woman-bouncing-ball'],
- '⛹♀': ['26f9-fe0f-200d-2640-fe0f', 'woman-bouncing-ball'],
- '🏋♂️': ['1f3cb-fe0f-200d-2642-fe0f', 'man-lifting-weights'],
- '🏋️♂': ['1f3cb-fe0f-200d-2642-fe0f', 'man-lifting-weights'],
- '🏋♂': ['1f3cb-fe0f-200d-2642-fe0f', 'man-lifting-weights'],
- '🏋♀️': ['1f3cb-fe0f-200d-2640-fe0f', 'woman-lifting-weights'],
- '🏋️♀': ['1f3cb-fe0f-200d-2640-fe0f', 'woman-lifting-weights'],
- '🏋♀': ['1f3cb-fe0f-200d-2640-fe0f', 'woman-lifting-weights'],
- '🏳🌈': ['1f3f3-fe0f-200d-1f308', 'rainbow_flag'],
- '🏳⚧️': ['1f3f3-fe0f-200d-26a7-fe0f', 'transgender_flag'],
- '🏳️⚧': ['1f3f3-fe0f-200d-26a7-fe0f', 'transgender_flag'],
- '🏳⚧': ['1f3f3-fe0f-200d-26a7-fe0f', 'transgender_flag'],
-};
-
-const stripcodes = (unified: string, native: string) => {
- const stripped = unified.replace(stripLeadingZeros, '');
-
- if (unified.includes('200d') && !(unified in blacklist)) {
- return stripped;
- } else {
- return stripped.replaceAll('-fe0f', '');
- }
-};
-
-const generateMappings = (emojiMap: EmojiData['emojis']): UnicodeMap => {
- const result: UnicodeMap = {};
- const emojis = Object.values(emojiMap ?? {});
-
- for (const value of emojis) {
- for (const item of value.skins) {
- const { unified, native } = item;
- const stripped = stripcodes(unified, native);
-
- result[native] = { unified: stripped, shortcode: value.id };
- }
- }
-
- for (const [native, [unified, shortcode]] of Object.entries(tweaks)) {
- const stripped = stripcodes(unified, native);
-
- result[native] = { unified: stripped, shortcode };
- }
-
- return result;
-};
-
-const unicodeMapping = generateMappings(data.emojis);
-
-export default () => ({
- data: unicodeMapping,
-});
diff --git a/packages/pl-fe/src/features/emoji/mapping.ts b/packages/pl-fe/src/features/emoji/mapping.ts
index a76d52245..2e6ca376a 100644
--- a/packages/pl-fe/src/features/emoji/mapping.ts
+++ b/packages/pl-fe/src/features/emoji/mapping.ts
@@ -1,3 +1,7 @@
+import { createRequire } from 'node:module';
+
+import type { EmojiData } from './data';
+
interface UnicodeMap {
[s: string]: {
unified: string;
@@ -5,6 +9,106 @@ interface UnicodeMap {
};
}
-export default import.meta.compileTime('./mapping-compiletime.ts');
+const unicodeMapping = compileTime(() => {
+ const require = createRequire(import.meta.url);
+ const data = require('@emoji-mart/data/sets/14/twitter.json');
+
+ const stripLeadingZeros = /^0+/;
+
+ /*
+ * Twemoji strips their hex codes from unicode codepoints to make it look "pretty"
+ * - leading 0s are removed
+ * - fe0f is removed unless it has 200d
+ * - fe0f is NOT removed for 1f441-fe0f-200d-1f5e8-fe0f even though it has a 200d
+ *
+ * this is all wrong
+ */
+ const blacklist = {
+ '1f441-fe0f-200d-1f5e8-fe0f': true,
+ };
+
+ const tweaks = {
+ '#⃣': ['23-20e3', 'hash'],
+ '*⃣': ['2a-20e3', 'keycap_star'],
+ '0⃣': ['30-20e3', 'zero'],
+ '1⃣': ['31-20e3', 'one'],
+ '2⃣': ['32-20e3', 'two'],
+ '3⃣': ['33-20e3', 'three'],
+ '4⃣': ['34-20e3', 'four'],
+ '5⃣': ['35-20e3', 'five'],
+ '6⃣': ['36-20e3', 'six'],
+ '7⃣': ['37-20e3', 'seven'],
+ '8⃣': ['38-20e3', 'eight'],
+ '9⃣': ['39-20e3', 'nine'],
+ '❤🔥': ['2764-fe0f-200d-1f525', 'heart_on_fire'],
+ '❤🩹': ['2764-fe0f-200d-1fa79', 'mending_heart'],
+ '👁🗨️': ['1f441-fe0f-200d-1f5e8-fe0f', 'eye-in-speech-bubble'],
+ '👁️🗨': ['1f441-fe0f-200d-1f5e8-fe0f', 'eye-in-speech-bubble'],
+ '👁🗨': ['1f441-fe0f-200d-1f5e8-fe0f', 'eye-in-speech-bubble'],
+ '🕵♂️': ['1f575-fe0f-200d-2642-fe0f', 'male-detective'],
+ '🕵️♂': ['1f575-fe0f-200d-2642-fe0f', 'male-detective'],
+ '🕵♂': ['1f575-fe0f-200d-2642-fe0f', 'male-detective'],
+ '🕵♀️': ['1f575-fe0f-200d-2640-fe0f', 'female-detective'],
+ '🕵️♀': ['1f575-fe0f-200d-2640-fe0f', 'female-detective'],
+ '🕵♀': ['1f575-fe0f-200d-2640-fe0f', 'female-detective'],
+ '🏌♂️': ['1f3cc-fe0f-200d-2642-fe0f', 'man-golfing'],
+ '🏌️♂': ['1f3cc-fe0f-200d-2642-fe0f', 'man-golfing'],
+ '🏌♂': ['1f3cc-fe0f-200d-2642-fe0f', 'man-golfing'],
+ '🏌♀️': ['1f3cc-fe0f-200d-2640-fe0f', 'woman-golfing'],
+ '🏌️♀': ['1f3cc-fe0f-200d-2640-fe0f', 'woman-golfing'],
+ '🏌♀': ['1f3cc-fe0f-200d-2640-fe0f', 'woman-golfing'],
+ '⛹♂️': ['26f9-fe0f-200d-2642-fe0f', 'man-bouncing-ball'],
+ '⛹️♂': ['26f9-fe0f-200d-2642-fe0f', 'man-bouncing-ball'],
+ '⛹♂': ['26f9-fe0f-200d-2642-fe0f', 'man-bouncing-ball'],
+ '⛹♀️': ['26f9-fe0f-200d-2640-fe0f', 'woman-bouncing-ball'],
+ '⛹️♀': ['26f9-fe0f-200d-2640-fe0f', 'woman-bouncing-ball'],
+ '⛹♀': ['26f9-fe0f-200d-2640-fe0f', 'woman-bouncing-ball'],
+ '🏋♂️': ['1f3cb-fe0f-200d-2642-fe0f', 'man-lifting-weights'],
+ '🏋️♂': ['1f3cb-fe0f-200d-2642-fe0f', 'man-lifting-weights'],
+ '🏋♂': ['1f3cb-fe0f-200d-2642-fe0f', 'man-lifting-weights'],
+ '🏋♀️': ['1f3cb-fe0f-200d-2640-fe0f', 'woman-lifting-weights'],
+ '🏋️♀': ['1f3cb-fe0f-200d-2640-fe0f', 'woman-lifting-weights'],
+ '🏋♀': ['1f3cb-fe0f-200d-2640-fe0f', 'woman-lifting-weights'],
+ '🏳🌈': ['1f3f3-fe0f-200d-1f308', 'rainbow_flag'],
+ '🏳⚧️': ['1f3f3-fe0f-200d-26a7-fe0f', 'transgender_flag'],
+ '🏳️⚧': ['1f3f3-fe0f-200d-26a7-fe0f', 'transgender_flag'],
+ '🏳⚧': ['1f3f3-fe0f-200d-26a7-fe0f', 'transgender_flag'],
+ };
+
+ const stripcodes = (unified: string, native: string) => {
+ const stripped = unified.replace(stripLeadingZeros, '');
+
+ if (unified.includes('200d') && !(unified in blacklist)) {
+ return stripped;
+ } else {
+ return stripped.replaceAll('-fe0f', '');
+ }
+ };
+
+ const generateMappings = (emojiMap: EmojiData['emojis']): UnicodeMap => {
+ const result: UnicodeMap = {};
+ const emojis = Object.values(emojiMap ?? {});
+
+ for (const value of emojis) {
+ for (const item of value.skins) {
+ const { unified, native } = item;
+ const stripped = stripcodes(unified, native);
+
+ result[native] = { unified: stripped, shortcode: value.id };
+ }
+ }
+
+ for (const [native, [unified, shortcode]] of Object.entries(tweaks)) {
+ const stripped = stripcodes(unified, native);
+
+ result[native] = { unified: stripped, shortcode };
+ }
+
+ return result;
+ };
+
+ return generateMappings(data.emojis);
+});
+export default unicodeMapping;
export type { UnicodeMap };
diff --git a/packages/pl-fe/src/service-worker/sw.ts b/packages/pl-fe/src/service-worker/sw.ts
index cc0b86699..94172c61f 100644
--- a/packages/pl-fe/src/service-worker/sw.ts
+++ b/packages/pl-fe/src/service-worker/sw.ts
@@ -3,14 +3,14 @@ import IntlMessageFormat from 'intl-messageformat';
import 'intl-pluralrules';
import unescape from 'lodash/unescape';
+import locales from './web-push-locales';
+
import type {
Account as AccountEntity,
Notification as NotificationEntity,
Status as StatusEntity,
} from 'pl-api';
-const locales = import.meta.compileTime>>('./web-push-locales.ts');
-
/** Limit before we start grouping device notifications into a single notification. */
const MAX_NOTIFICATIONS = 5;
/** Tag for the grouped notification. */
diff --git a/packages/pl-fe/src/service-worker/web-push-locales.ts b/packages/pl-fe/src/service-worker/web-push-locales.ts
index efb638dd1..ec52e339c 100644
--- a/packages/pl-fe/src/service-worker/web-push-locales.ts
+++ b/packages/pl-fe/src/service-worker/web-push-locales.ts
@@ -1,37 +1,39 @@
import fs from 'node:fs';
import path from 'path';
-const filtered: Record> = {};
-const filenames = fs.readdirSync(path.resolve(__dirname, '../locales'));
+const filtered = compileTime(() => {
+ const filtered: Record> = {};
+ const filenames = fs.readdirSync(path.resolve(__dirname, '../locales'));
-filenames.forEach(filename => {
- if (!filename.match(/\.json$/) || filename.match(/defaultMessages|whitelist/)) return;
+ filenames.forEach(filename => {
+ if (!filename.match(/\.json$/) || filename.match(/defaultMessages|whitelist/)) return;
- const content = fs.readFileSync(path.resolve(__dirname, `../locales/${filename}`), 'utf-8');
- const full = JSON.parse(content) as Record;
- const locale = filename.split('.')[0];
+ const content = fs.readFileSync(path.resolve(__dirname, `../locales/${filename}`), 'utf-8');
+ const full = JSON.parse(content) as Record;
+ const locale = filename.split('.')[0];
- filtered[locale] = {
- 'notification.favourite': full['notification.favourite'] || '',
- 'notification.follow': full['notification.follow'] || '',
- 'notification.follow_request': full['notification.follow_request'] || '',
- 'notification.mention': full['notification.mention'] || '',
- 'notification.reblog': full['notification.reblog'] || '',
- 'notification.poll': full['notification.poll'] || '',
- 'notification.status': full['notification.status'] || '',
- 'notification.move': full['notification.move'] || '',
+ filtered[locale] = {
+ 'notification.favourite': full['notification.favourite'] || '',
+ 'notification.follow': full['notification.follow'] || '',
+ 'notification.follow_request': full['notification.follow_request'] || '',
+ 'notification.mention': full['notification.mention'] || '',
+ 'notification.reblog': full['notification.reblog'] || '',
+ 'notification.poll': full['notification.poll'] || '',
+ 'notification.status': full['notification.status'] || '',
+ 'notification.move': full['notification.move'] || '',
- 'notification.pleroma:chat_mention': full['notification.pleroma:chat_mention'] || '',
- 'notification.pleroma:emoji_reaction': full['notification.pleroma:emoji_reaction'] || '',
+ 'notification.pleroma:chat_mention': full['notification.pleroma:chat_mention'] || '',
+ 'notification.pleroma:emoji_reaction': full['notification.pleroma:emoji_reaction'] || '',
- 'status.show_more': full['status.show_more'] || '',
- 'status.reblog': full['status.reblog'] || '',
- 'status.favourite': full['status.favourite'] || '',
+ 'status.show_more': full['status.show_more'] || '',
+ 'status.reblog': full['status.reblog'] || '',
+ 'status.favourite': full['status.favourite'] || '',
- 'notifications.group': full['notifications.group'] || '',
- };
+ 'notifications.group': full['notifications.group'] || '',
+ };
+ });
+
+ return filtered;
});
-export default () => ({
- data: filtered,
-});
+export default filtered;
diff --git a/packages/pl-fe/src/utils/code-compiletime.ts b/packages/pl-fe/src/utils/code-compiletime.ts
deleted file mode 100644
index f229d5e10..000000000
--- a/packages/pl-fe/src/utils/code-compiletime.ts
+++ /dev/null
@@ -1,52 +0,0 @@
-import { execSync } from 'node:child_process';
-
-import pkg from '../../package.json';
-
-const { CI_COMMIT_TAG, CI_COMMIT_REF_NAME, CI_COMMIT_SHA } = process.env;
-
-const shortRepoName = (url: string): string => new URL(url).pathname.substring(1);
-const trimHash = (hash: string): string => hash.substring(0, 7);
-
-const tryGit = (cmd: string): string | undefined => {
- try {
- return String(execSync(cmd));
- } catch (e) {
- return undefined;
- }
-};
-
-const version = (pkg: { version: string }): string => {
- // Try to discern from GitLab CI first
- if (CI_COMMIT_TAG === `v${pkg.version}` || CI_COMMIT_REF_NAME === 'stable') {
- return pkg.version;
- }
-
- if (typeof CI_COMMIT_SHA === 'string') {
- return `${pkg.version}-${trimHash(CI_COMMIT_SHA)}`;
- }
-
- // Fall back to git directly
- const head = tryGit('git rev-parse HEAD');
- const tag = tryGit(`git rev-parse v${pkg.version}`);
-
- if (head && head !== tag) return `${pkg.version}-${trimHash(head)}`;
-
- // Fall back to version in package.json
- return pkg.version;
-};
-
-const code = {
- name: pkg.name,
- displayName: pkg.displayName,
- url: pkg.repository.url,
- repository: shortRepoName(pkg.repository.url),
- version: version(pkg),
- homepage: pkg.homepage,
- ref: CI_COMMIT_TAG || CI_COMMIT_SHA || tryGit('git rev-parse HEAD'),
-};
-
-export type Code = typeof code;
-
-export default () => ({
- data: code,
-});
diff --git a/packages/pl-fe/src/utils/code.ts b/packages/pl-fe/src/utils/code.ts
index dd22a303c..ec9e02b6f 100644
--- a/packages/pl-fe/src/utils/code.ts
+++ b/packages/pl-fe/src/utils/code.ts
@@ -1,3 +1,54 @@
-import type { Code } from './code-compiletime';
+import { execSync } from 'node:child_process';
-export default import.meta.compileTime('./code-compiletime.ts');
+import pkg from '../../package.json';
+
+const code = compileTime(() => {
+ const { CI_COMMIT_TAG, CI_COMMIT_REF_NAME, CI_COMMIT_SHA } = process.env;
+
+ const shortRepoName = (url: string): string => new URL(url).pathname.substring(1);
+ const trimHash = (hash: string): string => hash.substring(0, 7);
+
+ const tryGit = (cmd: string): string | undefined => {
+ try {
+ return String(execSync(cmd));
+ } catch (e) {
+ return undefined;
+ }
+ };
+
+ const version = (pkg: { version: string }): string => {
+ // Try to discern from GitLab CI first
+ if (CI_COMMIT_TAG === `v${pkg.version}` || CI_COMMIT_REF_NAME === 'stable') {
+ return pkg.version;
+ }
+
+ if (typeof CI_COMMIT_SHA === 'string') {
+ return `${pkg.version}-${trimHash(CI_COMMIT_SHA)}`;
+ }
+
+ // Fall back to git directly
+ const head = tryGit('git rev-parse HEAD');
+ const tag = tryGit(`git rev-parse v${pkg.version}`);
+
+ if (head && head !== tag) return `${pkg.version}-${trimHash(head)}`;
+
+ // Fall back to version in package.json
+ return pkg.version;
+ };
+
+ const code = {
+ name: pkg.name,
+ displayName: pkg.displayName,
+ url: pkg.repository.url,
+ repository: shortRepoName(pkg.repository.url),
+ version: version(pkg),
+ homepage: pkg.homepage,
+ ref: CI_COMMIT_TAG || CI_COMMIT_SHA || tryGit('git rev-parse HEAD'),
+ };
+
+ return code;
+});
+
+export type Code = typeof code;
+
+export default code;
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index e9950e695..98ab5bc87 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -280,9 +280,6 @@ importers:
html-react-parser:
specifier: ^5.2.11
version: 5.2.11(@types/react@18.3.27)(react@19.2.3)
- immutable:
- specifier: ^5.0.3
- version: 5.1.3
intersection-observer:
specifier: ^0.12.2
version: 0.12.2
@@ -349,9 +346,6 @@ importers:
react-dom:
specifier: ^19.2.3
version: 19.2.3(react@19.2.3)
- react-error-boundary:
- specifier: ^4.1.2
- version: 4.1.2(react@19.2.3)
react-helmet-async:
specifier: ^2.0.5
version: 2.0.5(react@19.2.3)
@@ -400,9 +394,6 @@ importers:
tabbable:
specifier: ^6.4.0
version: 6.4.0
- tiny-queue:
- specifier: ^0.2.1
- version: 0.2.1
use-mutative:
specifier: ^1.3.1
version: 1.3.1(@types/react@18.3.27)(mutative@1.3.0)(react@19.2.3)
@@ -422,9 +413,6 @@ importers:
'@formatjs/cli':
specifier: ^6.9.0
version: 6.9.0(@vue/compiler-core@3.5.18)
- '@jedmao/redux-mock-store':
- specifier: ^3.0.5
- version: 3.0.5(redux@5.0.1)
'@sentry/types':
specifier: ^8.47.0
version: 8.55.0
@@ -461,9 +449,6 @@ importers:
'@types/react-swipeable-views':
specifier: ^0.13.6
version: 0.13.6
- '@types/redux-mock-store':
- specifier: ^1.5.0
- version: 1.5.0
'@typescript-eslint/eslint-plugin':
specifier: ^8.24.1
version: 8.38.0(@typescript-eslint/parser@8.38.0(eslint@8.57.1)(typescript@5.7.3))(eslint@8.57.1)(typescript@5.7.3)
@@ -537,8 +522,8 @@ importers:
specifier: ^0.12.0
version: 0.12.0(eslint@8.57.1)(meow@13.2.0)(optionator@0.9.4)(stylelint@16.23.0(typescript@5.7.3))(typescript@5.7.3)(vite@7.3.1(@types/node@25.0.3)(jiti@1.21.7)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.46.0)(yaml@2.8.0))
vite-plugin-compile-time:
- specifier: ^0.3.2
- version: 0.3.2(vite@7.3.1(@types/node@25.0.3)(jiti@1.21.7)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.46.0)(yaml@2.8.0))
+ specifier: ^0.4.6
+ version: 0.4.6(vite@7.3.1(@types/node@25.0.3)(jiti@1.21.7)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.46.0)(yaml@2.8.0))
vite-plugin-html:
specifier: ^3.2.2
version: 3.2.2(vite@7.3.1(@types/node@25.0.3)(jiti@1.21.7)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.46.0)(yaml@2.8.0))
@@ -1891,11 +1876,6 @@ packages:
resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==}
engines: {node: '>=12'}
- '@jedmao/redux-mock-store@3.0.5':
- resolution: {integrity: sha512-zNcVCd5/ekSMdQWk64CqTPM24D9Lo59st9KvS+fljGpQXV4SliB7Vo0NFQIgvQJWPYeeobdngnrGy0XbCaARNw==}
- peerDependencies:
- redux: ^4
-
'@jridgewell/gen-mapping@0.3.12':
resolution: {integrity: sha512-OuLGC46TjB5BbN1dH8JULVVZY4WTdkF7tV9Ys6wLL1rubZnCMstOhNHueU5bLCrnRuDhKPDM4g6sw4Bel5Gzqg==}
@@ -2837,9 +2817,6 @@ packages:
peerDependencies:
'@types/react': ^18.3.18
- '@types/redux-mock-store@1.5.0':
- resolution: {integrity: sha512-jcscBazm6j05Hs6xYCca6psTUBbFT2wqMxT7wZEHAYFxHB/I8jYk7d5msrHUlDiSL02HdTqTmkK2oIV8i3C8DA==}
-
'@types/resolve@1.20.2':
resolution: {integrity: sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==}
@@ -3373,6 +3350,9 @@ packages:
resolution: {integrity: sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==}
engines: {node: '>= 0.4'}
+ babel-dead-code-elimination@1.0.12:
+ resolution: {integrity: sha512-GERT7L2TiYcYDtYk1IpD+ASAYXjKbLTDPhBtYj7X1NuRMDTMtAx9kyBenub1Ev41lo91OHCKdmP+egTDmfQ7Ig==}
+
babel-plugin-polyfill-corejs2@0.4.15:
resolution: {integrity: sha512-hR3GwrRwHUfYwGfrisXPIDP3JcYfBrW7wKE7+Au6wDYl7fm/ka1NEII6kORzxNU556JjfidZeBsO10kYvtV1aw==}
peerDependencies:
@@ -5609,11 +5589,6 @@ packages:
peerDependencies:
react: ^19.2.3
- react-error-boundary@4.1.2:
- resolution: {integrity: sha512-GQDxZ5Jd+Aq/qUxbCm1UtzmL/s++V7zKgE8yMktJiCQXCCFZnMZh9ng+6/Ne6PjNSXH0L9CjeOEREfRnq6Duag==}
- peerDependencies:
- react: '>=16.13.1'
-
react-error-boundary@6.0.0:
resolution: {integrity: sha512-gdlJjD7NWr0IfkPlaREN2d9uUZUlksrfOx7SX62VRerwXbMY6ftGCIZua1VG1aXFNOimhISsTq+Owp725b9SiA==}
peerDependencies:
@@ -5741,9 +5716,6 @@ packages:
peerDependencies:
redux: ^5.0.0
- redux@4.2.1:
- resolution: {integrity: sha512-LAUYz4lc+Do8/g7aeRa8JkyDErK6ekstQaqWQrNRW//MY1TvCEpMtpTWvlQ+FPbWCx+Xixu/6SHt5N0HR+SB4w==}
-
redux@5.0.1:
resolution: {integrity: sha512-M9/ELqF6fy8FwmkpnF0S3YKOqMyoWJ4+CS5Efg2ct3oY9daQvd/Pc71FpGZsVsbl3Cpb+IIcjBDUnnyBdQbq4w==}
@@ -6427,9 +6399,6 @@ packages:
tiny-invariant@1.3.3:
resolution: {integrity: sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==}
- tiny-queue@0.2.1:
- resolution: {integrity: sha512-EijGsv7kzd9I9g0ByCl6h42BWNGUZrlCSejfrb3AKeHC33SGbASu1VDf5O3rRiiUOhAC9CHdZxFPbZu0HmR70A==}
-
tiny-warning@1.0.3:
resolution: {integrity: sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==}
@@ -6689,8 +6658,8 @@ packages:
vue-tsc:
optional: true
- vite-plugin-compile-time@0.3.2:
- resolution: {integrity: sha512-obNDktew663JQlriX5MJV/l2e8ofPzr1yfZBq0erjIxMuwmmnEfT7SYBGfcb/Y35u17nzQqsAvCvqbsxpbmvwQ==}
+ vite-plugin-compile-time@0.4.6:
+ resolution: {integrity: sha512-0aHRCd3AtDekc5pMq5+cyrVqBPVjT8bISD1/EU3ebJDovZsv3Wom6uDF4+Uf1zxUTfn27gHFSFQ11R3ciqPg7g==}
peerDependencies:
vite: '>=2'
@@ -8276,10 +8245,6 @@ snapshots:
wrap-ansi: 8.1.0
wrap-ansi-cjs: wrap-ansi@7.0.0
- '@jedmao/redux-mock-store@3.0.5(redux@5.0.1)':
- dependencies:
- redux: 5.0.1
-
'@jridgewell/gen-mapping@0.3.12':
dependencies:
'@jridgewell/sourcemap-codec': 1.5.4
@@ -9356,10 +9321,6 @@ snapshots:
dependencies:
'@types/react': 18.3.27
- '@types/redux-mock-store@1.5.0':
- dependencies:
- redux: 4.2.1
-
'@types/resolve@1.20.2': {}
'@types/semver@7.7.0': {}
@@ -10059,6 +10020,15 @@ snapshots:
axobject-query@4.1.0: {}
+ babel-dead-code-elimination@1.0.12:
+ dependencies:
+ '@babel/core': 7.29.0
+ '@babel/parser': 7.29.0
+ '@babel/traverse': 7.29.0
+ '@babel/types': 7.29.0
+ transitivePeerDependencies:
+ - supports-color
+
babel-plugin-polyfill-corejs2@0.4.15(@babel/core@7.29.0):
dependencies:
'@babel/compat-data': 7.29.0
@@ -12573,11 +12543,6 @@ snapshots:
react: 19.2.3
scheduler: 0.27.0
- react-error-boundary@4.1.2(react@19.2.3):
- dependencies:
- '@babel/runtime': 7.28.2
- react: 19.2.3
-
react-error-boundary@6.0.0(react@19.2.3):
dependencies:
'@babel/runtime': 7.28.6
@@ -12709,10 +12674,6 @@ snapshots:
dependencies:
redux: 5.0.1
- redux@4.2.1:
- dependencies:
- '@babel/runtime': 7.28.2
-
redux@5.0.1: {}
reflect.getprototypeof@1.0.10:
@@ -13503,8 +13464,6 @@ snapshots:
tiny-invariant@1.3.3: {}
- tiny-queue@0.2.1: {}
-
tiny-warning@1.0.3: {}
tinycolor2@1.6.0: {}
@@ -13762,13 +13721,20 @@ snapshots:
stylelint: 16.23.0(typescript@5.7.3)
typescript: 5.7.3
- vite-plugin-compile-time@0.3.2(vite@7.3.1(@types/node@25.0.3)(jiti@1.21.7)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.46.0)(yaml@2.8.0)):
+ vite-plugin-compile-time@0.4.6(vite@7.3.1(@types/node@25.0.3)(jiti@1.21.7)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.46.0)(yaml@2.8.0)):
dependencies:
+ '@babel/generator': 7.29.1
+ '@babel/parser': 7.29.0
+ '@babel/traverse': 7.29.0
+ '@babel/types': 7.29.0
+ babel-dead-code-elimination: 1.0.12
bundle-require: 5.1.0(esbuild@0.24.2)
devalue: 5.1.1
esbuild: 0.24.2
magic-string: 0.30.17
vite: 7.3.1(@types/node@25.0.3)(jiti@1.21.7)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.46.0)(yaml@2.8.0)
+ transitivePeerDependencies:
+ - supports-color
vite-plugin-dts@4.5.4(@types/node@20.19.9)(rollup@4.57.1)(typescript@5.9.2)(vite@5.4.21(@types/node@20.19.9)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.46.0)):
dependencies:
From a6ab74f72ddfa9ce26b4628f687de3395b0a65d1 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?nicole=20miko=C5=82ajczyk?=
Date: Sat, 14 Feb 2026 23:33:32 +0100
Subject: [PATCH 06/74] nicolium: switch to vite 8 beta
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Signed-off-by: nicole mikołajczyk
---
packages/pl-fe/package.json | 2 +-
packages/pl-fe/src/service-worker/sw.ts | 6 +-
pnpm-lock.yaml | 705 +++++++++++++-----------
3 files changed, 391 insertions(+), 322 deletions(-)
diff --git a/packages/pl-fe/package.json b/packages/pl-fe/package.json
index 51930828b..af0e933a0 100644
--- a/packages/pl-fe/package.json
+++ b/packages/pl-fe/package.json
@@ -170,7 +170,7 @@
"tslib": "^2.8.1",
"type-fest": "^4.30.1",
"typescript": "5.7.3",
- "vite": "^7.3.1",
+ "vite": "^8.0.0-beta.14",
"vite-plugin-checker": "^0.12.0",
"vite-plugin-compile-time": "^0.4.6",
"vite-plugin-html": "^3.2.2",
diff --git a/packages/pl-fe/src/service-worker/sw.ts b/packages/pl-fe/src/service-worker/sw.ts
index 94172c61f..2b9df1b3a 100644
--- a/packages/pl-fe/src/service-worker/sw.ts
+++ b/packages/pl-fe/src/service-worker/sw.ts
@@ -194,21 +194,21 @@ const handlePush = (event: PushEvent) => {
/** Native action to open a status on the device. */
const actionExpand = (preferred_locale: string) => ({
action: 'expand',
- icon: `/${require('../../assets/images/web-push/web-push-icon_expand.png')}`,
+ icon: `/${require('../assets/images/web-push/web-push-icon_expand.png')}`,
title: formatMessage('status.show_more', preferred_locale),
});
/** Native action to repost status. */
const actionReblog = (preferred_locale: string) => ({
action: 'reblog',
- icon: `/${require('../../assets/images/web-push/web-push-icon_reblog.png')}`,
+ icon: `/${require('../assets/images/web-push/web-push-icon_reblog.png')}`,
title: formatMessage('status.reblog', preferred_locale),
});
/** Native action to like status. */
const actionFavourite = (preferred_locale: string) => ({
action: 'favourite',
- icon: `/${require('../../assets/images/web-push/web-push-icon_favourite.png')}`,
+ icon: `/${require('../assets/images/web-push/web-push-icon_favourite.png')}`,
title: formatMessage('status.favourite', preferred_locale),
});
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 98ab5bc87..d0a1cc1ef 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -105,10 +105,10 @@ importers:
version: 5.9.2
vite:
specifier: ^5.4.21
- version: 5.4.21(@types/node@22.17.0)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.46.0)
+ version: 5.4.21(@types/node@22.17.0)(lightningcss@1.31.1)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.46.0)
vite-plugin-dts:
specifier: ^4.5.4
- version: 4.5.4(@types/node@22.17.0)(rollup@4.57.1)(typescript@5.9.2)(vite@5.4.21(@types/node@22.17.0)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.46.0))
+ version: 4.5.4(@types/node@22.17.0)(rollup@4.57.1)(typescript@5.9.2)(vite@5.4.21(@types/node@22.17.0)(lightningcss@1.31.1)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.46.0))
ws:
specifier: ^8.18.3
version: 8.18.3
@@ -457,7 +457,7 @@ importers:
version: 8.38.0(eslint@8.57.1)(typescript@5.7.3)
'@vitejs/plugin-react':
specifier: ^5.1.3
- version: 5.1.4(vite@7.3.1(@types/node@25.0.3)(jiti@1.21.7)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.46.0)(yaml@2.8.0))
+ version: 5.1.4(vite@8.0.0-beta.14(@types/node@25.0.3)(esbuild@0.24.2)(jiti@1.21.7)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.46.0)(yaml@2.8.0))
eslint:
specifier: ^8.57.1
version: 8.57.1
@@ -496,7 +496,7 @@ importers:
version: 15.15.0
rollup-plugin-bundle-stats:
specifier: ^4.21.10
- version: 4.21.10(core-js@3.44.0)(rollup@2.79.2)(vite@7.3.1(@types/node@25.0.3)(jiti@1.21.7)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.46.0)(yaml@2.8.0))
+ version: 4.21.10(core-js@3.44.0)(rolldown@1.0.0-rc.4)(rollup@2.79.2)(vite@8.0.0-beta.14(@types/node@25.0.3)(esbuild@0.24.2)(jiti@1.21.7)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.46.0)(yaml@2.8.0))
stylelint:
specifier: ^16.12.0
version: 16.23.0(typescript@5.7.3)
@@ -516,26 +516,26 @@ importers:
specifier: 5.7.3
version: 5.7.3
vite:
- specifier: ^7.3.1
- version: 7.3.1(@types/node@25.0.3)(jiti@1.21.7)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.46.0)(yaml@2.8.0)
+ specifier: ^8.0.0-beta.14
+ version: 8.0.0-beta.14(@types/node@25.0.3)(esbuild@0.24.2)(jiti@1.21.7)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.46.0)(yaml@2.8.0)
vite-plugin-checker:
specifier: ^0.12.0
- version: 0.12.0(eslint@8.57.1)(meow@13.2.0)(optionator@0.9.4)(stylelint@16.23.0(typescript@5.7.3))(typescript@5.7.3)(vite@7.3.1(@types/node@25.0.3)(jiti@1.21.7)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.46.0)(yaml@2.8.0))
+ version: 0.12.0(eslint@8.57.1)(meow@13.2.0)(optionator@0.9.4)(stylelint@16.23.0(typescript@5.7.3))(typescript@5.7.3)(vite@8.0.0-beta.14(@types/node@25.0.3)(esbuild@0.24.2)(jiti@1.21.7)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.46.0)(yaml@2.8.0))
vite-plugin-compile-time:
specifier: ^0.4.6
- version: 0.4.6(vite@7.3.1(@types/node@25.0.3)(jiti@1.21.7)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.46.0)(yaml@2.8.0))
+ version: 0.4.6(vite@8.0.0-beta.14(@types/node@25.0.3)(esbuild@0.24.2)(jiti@1.21.7)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.46.0)(yaml@2.8.0))
vite-plugin-html:
specifier: ^3.2.2
- version: 3.2.2(vite@7.3.1(@types/node@25.0.3)(jiti@1.21.7)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.46.0)(yaml@2.8.0))
+ version: 3.2.2(vite@8.0.0-beta.14(@types/node@25.0.3)(esbuild@0.24.2)(jiti@1.21.7)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.46.0)(yaml@2.8.0))
vite-plugin-pwa:
specifier: ^1.2.0
- version: 1.2.0(vite@7.3.1(@types/node@25.0.3)(jiti@1.21.7)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.46.0)(yaml@2.8.0))(workbox-build@7.3.0(@types/babel__core@7.20.5))(workbox-window@7.3.0)
+ version: 1.2.0(vite@8.0.0-beta.14(@types/node@25.0.3)(esbuild@0.24.2)(jiti@1.21.7)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.46.0)(yaml@2.8.0))(workbox-build@7.3.0(@types/babel__core@7.20.5))(workbox-window@7.3.0)
vite-plugin-require:
specifier: ^1.2.14
- version: 1.2.14(esbuild@0.24.2)(vite@7.3.1(@types/node@25.0.3)(jiti@1.21.7)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.46.0)(yaml@2.8.0))
+ version: 1.2.14(esbuild@0.24.2)(vite@8.0.0-beta.14(@types/node@25.0.3)(esbuild@0.24.2)(jiti@1.21.7)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.46.0)(yaml@2.8.0))
vite-plugin-static-copy:
specifier: ^3.2.0
- version: 3.2.0(vite@7.3.1(@types/node@25.0.3)(jiti@1.21.7)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.46.0)(yaml@2.8.0))
+ version: 3.2.0(vite@8.0.0-beta.14(@types/node@25.0.3)(esbuild@0.24.2)(jiti@1.21.7)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.46.0)(yaml@2.8.0))
packages/pl-hooks:
dependencies:
@@ -590,10 +590,10 @@ importers:
version: 5.9.2
vite:
specifier: ^5.4.21
- version: 5.4.21(@types/node@20.19.9)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.46.0)
+ version: 5.4.21(@types/node@20.19.9)(lightningcss@1.31.1)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.46.0)
vite-plugin-dts:
specifier: ^4.2.1
- version: 4.5.4(@types/node@20.19.9)(rollup@4.57.1)(typescript@5.9.2)(vite@5.4.21(@types/node@20.19.9)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.46.0))
+ version: 4.5.4(@types/node@20.19.9)(rollup@4.57.1)(typescript@5.9.2)(vite@5.4.21(@types/node@20.19.9)(lightningcss@1.31.1)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.46.0))
packages:
@@ -1249,12 +1249,21 @@ packages:
'@emnapi/core@1.4.5':
resolution: {integrity: sha512-XsLw1dEOpkSX/WucdqUhPWP7hDxSvZiY+fsUC14h+FtQ2Ifni4znbBt8punRX+Uj2JG/uDb8nEHVKvrVlvdZ5Q==}
+ '@emnapi/core@1.8.1':
+ resolution: {integrity: sha512-AvT9QFpxK0Zd8J0jopedNm+w/2fIzvtPKPjqyw9jwvBaReTTqPBk9Hixaz7KbjimP+QNz605/XnjFcDAL2pqBg==}
+
'@emnapi/runtime@1.4.5':
resolution: {integrity: sha512-++LApOtY0pEEz1zrd9vy1/zXVaVJJ/EbAF3u0fXIzPJEDtnITsBGbbK0EkM72amhl/R5b+5xx0Y/QhcVOpuulg==}
+ '@emnapi/runtime@1.8.1':
+ resolution: {integrity: sha512-mehfKSMWjjNol8659Z8KxEMrdSJDDot5SXMq00dM8BN4o+CLNXQ0xH2V7EchNHV4RmbZLmmPdEaXZc5H2FXmDg==}
+
'@emnapi/wasi-threads@1.0.4':
resolution: {integrity: sha512-PJR+bOmMOPH8AtcTGAyYNiuJ3/Fcoj2XN/gBEWzDIKh254XO+mM9XoXHk5GNEhodxeMznbg7BlRojVbKN+gC6g==}
+ '@emnapi/wasi-threads@1.1.0':
+ resolution: {integrity: sha512-WI0DdZ8xFSbgMjR1sFsKABJ/C5OnRrjT06JXbZKexJGrDuPTzZdDYfFlsgcCXCyf+suG5QU2e/y1Wo2V/OapLQ==}
+
'@emoji-mart/data@1.2.1':
resolution: {integrity: sha512-no2pQMWiBy6gpBEiqGeU77/bFejDqUTRY7KX+0+iur13op3bqUsXdnwoZs6Xb1zbv0gAj5VvS1PWoUUckSr5Dw==}
@@ -1274,12 +1283,6 @@ packages:
cpu: [ppc64]
os: [aix]
- '@esbuild/aix-ppc64@0.27.3':
- resolution: {integrity: sha512-9fJMTNFTWZMh5qwrBItuziu834eOCUcEqymSH7pY+zoMVEZg3gcPuBNxH1EvfVYe9h0x/Ptw8KBzv7qxb7l8dg==}
- engines: {node: '>=18'}
- cpu: [ppc64]
- os: [aix]
-
'@esbuild/android-arm64@0.21.5':
resolution: {integrity: sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==}
engines: {node: '>=12'}
@@ -1292,12 +1295,6 @@ packages:
cpu: [arm64]
os: [android]
- '@esbuild/android-arm64@0.27.3':
- resolution: {integrity: sha512-YdghPYUmj/FX2SYKJ0OZxf+iaKgMsKHVPF1MAq/P8WirnSpCStzKJFjOjzsW0QQ7oIAiccHdcqjbHmJxRb/dmg==}
- engines: {node: '>=18'}
- cpu: [arm64]
- os: [android]
-
'@esbuild/android-arm@0.21.5':
resolution: {integrity: sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==}
engines: {node: '>=12'}
@@ -1310,12 +1307,6 @@ packages:
cpu: [arm]
os: [android]
- '@esbuild/android-arm@0.27.3':
- resolution: {integrity: sha512-i5D1hPY7GIQmXlXhs2w8AWHhenb00+GxjxRncS2ZM7YNVGNfaMxgzSGuO8o8SJzRc/oZwU2bcScvVERk03QhzA==}
- engines: {node: '>=18'}
- cpu: [arm]
- os: [android]
-
'@esbuild/android-x64@0.21.5':
resolution: {integrity: sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==}
engines: {node: '>=12'}
@@ -1328,12 +1319,6 @@ packages:
cpu: [x64]
os: [android]
- '@esbuild/android-x64@0.27.3':
- resolution: {integrity: sha512-IN/0BNTkHtk8lkOM8JWAYFg4ORxBkZQf9zXiEOfERX/CzxW3Vg1ewAhU7QSWQpVIzTW+b8Xy+lGzdYXV6UZObQ==}
- engines: {node: '>=18'}
- cpu: [x64]
- os: [android]
-
'@esbuild/darwin-arm64@0.21.5':
resolution: {integrity: sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==}
engines: {node: '>=12'}
@@ -1346,12 +1331,6 @@ packages:
cpu: [arm64]
os: [darwin]
- '@esbuild/darwin-arm64@0.27.3':
- resolution: {integrity: sha512-Re491k7ByTVRy0t3EKWajdLIr0gz2kKKfzafkth4Q8A5n1xTHrkqZgLLjFEHVD+AXdUGgQMq+Godfq45mGpCKg==}
- engines: {node: '>=18'}
- cpu: [arm64]
- os: [darwin]
-
'@esbuild/darwin-x64@0.21.5':
resolution: {integrity: sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==}
engines: {node: '>=12'}
@@ -1364,12 +1343,6 @@ packages:
cpu: [x64]
os: [darwin]
- '@esbuild/darwin-x64@0.27.3':
- resolution: {integrity: sha512-vHk/hA7/1AckjGzRqi6wbo+jaShzRowYip6rt6q7VYEDX4LEy1pZfDpdxCBnGtl+A5zq8iXDcyuxwtv3hNtHFg==}
- engines: {node: '>=18'}
- cpu: [x64]
- os: [darwin]
-
'@esbuild/freebsd-arm64@0.21.5':
resolution: {integrity: sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==}
engines: {node: '>=12'}
@@ -1382,12 +1355,6 @@ packages:
cpu: [arm64]
os: [freebsd]
- '@esbuild/freebsd-arm64@0.27.3':
- resolution: {integrity: sha512-ipTYM2fjt3kQAYOvo6vcxJx3nBYAzPjgTCk7QEgZG8AUO3ydUhvelmhrbOheMnGOlaSFUoHXB6un+A7q4ygY9w==}
- engines: {node: '>=18'}
- cpu: [arm64]
- os: [freebsd]
-
'@esbuild/freebsd-x64@0.21.5':
resolution: {integrity: sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==}
engines: {node: '>=12'}
@@ -1400,12 +1367,6 @@ packages:
cpu: [x64]
os: [freebsd]
- '@esbuild/freebsd-x64@0.27.3':
- resolution: {integrity: sha512-dDk0X87T7mI6U3K9VjWtHOXqwAMJBNN2r7bejDsc+j03SEjtD9HrOl8gVFByeM0aJksoUuUVU9TBaZa2rgj0oA==}
- engines: {node: '>=18'}
- cpu: [x64]
- os: [freebsd]
-
'@esbuild/linux-arm64@0.21.5':
resolution: {integrity: sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==}
engines: {node: '>=12'}
@@ -1418,12 +1379,6 @@ packages:
cpu: [arm64]
os: [linux]
- '@esbuild/linux-arm64@0.27.3':
- resolution: {integrity: sha512-sZOuFz/xWnZ4KH3YfFrKCf1WyPZHakVzTiqji3WDc0BCl2kBwiJLCXpzLzUBLgmp4veFZdvN5ChW4Eq/8Fc2Fg==}
- engines: {node: '>=18'}
- cpu: [arm64]
- os: [linux]
-
'@esbuild/linux-arm@0.21.5':
resolution: {integrity: sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==}
engines: {node: '>=12'}
@@ -1436,12 +1391,6 @@ packages:
cpu: [arm]
os: [linux]
- '@esbuild/linux-arm@0.27.3':
- resolution: {integrity: sha512-s6nPv2QkSupJwLYyfS+gwdirm0ukyTFNl3KTgZEAiJDd+iHZcbTPPcWCcRYH+WlNbwChgH2QkE9NSlNrMT8Gfw==}
- engines: {node: '>=18'}
- cpu: [arm]
- os: [linux]
-
'@esbuild/linux-ia32@0.21.5':
resolution: {integrity: sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==}
engines: {node: '>=12'}
@@ -1454,12 +1403,6 @@ packages:
cpu: [ia32]
os: [linux]
- '@esbuild/linux-ia32@0.27.3':
- resolution: {integrity: sha512-yGlQYjdxtLdh0a3jHjuwOrxQjOZYD/C9PfdbgJJF3TIZWnm/tMd/RcNiLngiu4iwcBAOezdnSLAwQDPqTmtTYg==}
- engines: {node: '>=18'}
- cpu: [ia32]
- os: [linux]
-
'@esbuild/linux-loong64@0.21.5':
resolution: {integrity: sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==}
engines: {node: '>=12'}
@@ -1472,12 +1415,6 @@ packages:
cpu: [loong64]
os: [linux]
- '@esbuild/linux-loong64@0.27.3':
- resolution: {integrity: sha512-WO60Sn8ly3gtzhyjATDgieJNet/KqsDlX5nRC5Y3oTFcS1l0KWba+SEa9Ja1GfDqSF1z6hif/SkpQJbL63cgOA==}
- engines: {node: '>=18'}
- cpu: [loong64]
- os: [linux]
-
'@esbuild/linux-mips64el@0.21.5':
resolution: {integrity: sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==}
engines: {node: '>=12'}
@@ -1490,12 +1427,6 @@ packages:
cpu: [mips64el]
os: [linux]
- '@esbuild/linux-mips64el@0.27.3':
- resolution: {integrity: sha512-APsymYA6sGcZ4pD6k+UxbDjOFSvPWyZhjaiPyl/f79xKxwTnrn5QUnXR5prvetuaSMsb4jgeHewIDCIWljrSxw==}
- engines: {node: '>=18'}
- cpu: [mips64el]
- os: [linux]
-
'@esbuild/linux-ppc64@0.21.5':
resolution: {integrity: sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==}
engines: {node: '>=12'}
@@ -1508,12 +1439,6 @@ packages:
cpu: [ppc64]
os: [linux]
- '@esbuild/linux-ppc64@0.27.3':
- resolution: {integrity: sha512-eizBnTeBefojtDb9nSh4vvVQ3V9Qf9Df01PfawPcRzJH4gFSgrObw+LveUyDoKU3kxi5+9RJTCWlj4FjYXVPEA==}
- engines: {node: '>=18'}
- cpu: [ppc64]
- os: [linux]
-
'@esbuild/linux-riscv64@0.21.5':
resolution: {integrity: sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==}
engines: {node: '>=12'}
@@ -1526,12 +1451,6 @@ packages:
cpu: [riscv64]
os: [linux]
- '@esbuild/linux-riscv64@0.27.3':
- resolution: {integrity: sha512-3Emwh0r5wmfm3ssTWRQSyVhbOHvqegUDRd0WhmXKX2mkHJe1SFCMJhagUleMq+Uci34wLSipf8Lagt4LlpRFWQ==}
- engines: {node: '>=18'}
- cpu: [riscv64]
- os: [linux]
-
'@esbuild/linux-s390x@0.21.5':
resolution: {integrity: sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==}
engines: {node: '>=12'}
@@ -1544,12 +1463,6 @@ packages:
cpu: [s390x]
os: [linux]
- '@esbuild/linux-s390x@0.27.3':
- resolution: {integrity: sha512-pBHUx9LzXWBc7MFIEEL0yD/ZVtNgLytvx60gES28GcWMqil8ElCYR4kvbV2BDqsHOvVDRrOxGySBM9Fcv744hw==}
- engines: {node: '>=18'}
- cpu: [s390x]
- os: [linux]
-
'@esbuild/linux-x64@0.21.5':
resolution: {integrity: sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==}
engines: {node: '>=12'}
@@ -1562,24 +1475,12 @@ packages:
cpu: [x64]
os: [linux]
- '@esbuild/linux-x64@0.27.3':
- resolution: {integrity: sha512-Czi8yzXUWIQYAtL/2y6vogER8pvcsOsk5cpwL4Gk5nJqH5UZiVByIY8Eorm5R13gq+DQKYg0+JyQoytLQas4dA==}
- engines: {node: '>=18'}
- cpu: [x64]
- os: [linux]
-
'@esbuild/netbsd-arm64@0.24.2':
resolution: {integrity: sha512-wuLK/VztRRpMt9zyHSazyCVdCXlpHkKm34WUyinD2lzK07FAHTq0KQvZZlXikNWkDGoT6x3TD51jKQ7gMVpopw==}
engines: {node: '>=18'}
cpu: [arm64]
os: [netbsd]
- '@esbuild/netbsd-arm64@0.27.3':
- resolution: {integrity: sha512-sDpk0RgmTCR/5HguIZa9n9u+HVKf40fbEUt+iTzSnCaGvY9kFP0YKBWZtJaraonFnqef5SlJ8/TiPAxzyS+UoA==}
- engines: {node: '>=18'}
- cpu: [arm64]
- os: [netbsd]
-
'@esbuild/netbsd-x64@0.21.5':
resolution: {integrity: sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==}
engines: {node: '>=12'}
@@ -1592,24 +1493,12 @@ packages:
cpu: [x64]
os: [netbsd]
- '@esbuild/netbsd-x64@0.27.3':
- resolution: {integrity: sha512-P14lFKJl/DdaE00LItAukUdZO5iqNH7+PjoBm+fLQjtxfcfFE20Xf5CrLsmZdq5LFFZzb5JMZ9grUwvtVYzjiA==}
- engines: {node: '>=18'}
- cpu: [x64]
- os: [netbsd]
-
'@esbuild/openbsd-arm64@0.24.2':
resolution: {integrity: sha512-YQbi46SBct6iKnszhSvdluqDmxCJA+Pu280Av9WICNwQmMxV7nLRHZfjQzwbPs3jeWnuAhE9Jy0NrnJ12Oz+0A==}
engines: {node: '>=18'}
cpu: [arm64]
os: [openbsd]
- '@esbuild/openbsd-arm64@0.27.3':
- resolution: {integrity: sha512-AIcMP77AvirGbRl/UZFTq5hjXK+2wC7qFRGoHSDrZ5v5b8DK/GYpXW3CPRL53NkvDqb9D+alBiC/dV0Fb7eJcw==}
- engines: {node: '>=18'}
- cpu: [arm64]
- os: [openbsd]
-
'@esbuild/openbsd-x64@0.21.5':
resolution: {integrity: sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==}
engines: {node: '>=12'}
@@ -1622,18 +1511,6 @@ packages:
cpu: [x64]
os: [openbsd]
- '@esbuild/openbsd-x64@0.27.3':
- resolution: {integrity: sha512-DnW2sRrBzA+YnE70LKqnM3P+z8vehfJWHXECbwBmH/CU51z6FiqTQTHFenPlHmo3a8UgpLyH3PT+87OViOh1AQ==}
- engines: {node: '>=18'}
- cpu: [x64]
- os: [openbsd]
-
- '@esbuild/openharmony-arm64@0.27.3':
- resolution: {integrity: sha512-NinAEgr/etERPTsZJ7aEZQvvg/A6IsZG/LgZy+81wON2huV7SrK3e63dU0XhyZP4RKGyTm7aOgmQk0bGp0fy2g==}
- engines: {node: '>=18'}
- cpu: [arm64]
- os: [openharmony]
-
'@esbuild/sunos-x64@0.21.5':
resolution: {integrity: sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==}
engines: {node: '>=12'}
@@ -1646,12 +1523,6 @@ packages:
cpu: [x64]
os: [sunos]
- '@esbuild/sunos-x64@0.27.3':
- resolution: {integrity: sha512-PanZ+nEz+eWoBJ8/f8HKxTTD172SKwdXebZ0ndd953gt1HRBbhMsaNqjTyYLGLPdoWHy4zLU7bDVJztF5f3BHA==}
- engines: {node: '>=18'}
- cpu: [x64]
- os: [sunos]
-
'@esbuild/win32-arm64@0.21.5':
resolution: {integrity: sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==}
engines: {node: '>=12'}
@@ -1664,12 +1535,6 @@ packages:
cpu: [arm64]
os: [win32]
- '@esbuild/win32-arm64@0.27.3':
- resolution: {integrity: sha512-B2t59lWWYrbRDw/tjiWOuzSsFh1Y/E95ofKz7rIVYSQkUYBjfSgf6oeYPNWHToFRr2zx52JKApIcAS/D5TUBnA==}
- engines: {node: '>=18'}
- cpu: [arm64]
- os: [win32]
-
'@esbuild/win32-ia32@0.21.5':
resolution: {integrity: sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==}
engines: {node: '>=12'}
@@ -1682,12 +1547,6 @@ packages:
cpu: [ia32]
os: [win32]
- '@esbuild/win32-ia32@0.27.3':
- resolution: {integrity: sha512-QLKSFeXNS8+tHW7tZpMtjlNb7HKau0QDpwm49u0vUp9y1WOF+PEzkU84y9GqYaAVW8aH8f3GcBck26jh54cX4Q==}
- engines: {node: '>=18'}
- cpu: [ia32]
- os: [win32]
-
'@esbuild/win32-x64@0.21.5':
resolution: {integrity: sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==}
engines: {node: '>=12'}
@@ -1700,12 +1559,6 @@ packages:
cpu: [x64]
os: [win32]
- '@esbuild/win32-x64@0.27.3':
- resolution: {integrity: sha512-4uJGhsxuptu3OcpVAzli+/gWusVGwZZHTlS63hh++ehExkVT8SgiEf7/uC/PclrPPkLhZqGgCTjd0VWLo6xMqA==}
- engines: {node: '>=18'}
- cpu: [x64]
- os: [win32]
-
'@eslint-community/eslint-utils@4.7.0':
resolution: {integrity: sha512-dyybb3AcajC7uha6CvhdVRJqaKyn7w2YKqKyAN37NKYgZT36w+iRb0Dymmc5qEJ549c/S31cMMSFd75bteCpCw==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
@@ -2009,6 +1862,9 @@ packages:
'@napi-rs/wasm-runtime@0.2.12':
resolution: {integrity: sha512-ZVWUcfwY4E/yPitQJl481FjFo3K22D6qF0DuFH6Y/nbnE11GY5uguDxZMGXPQ8WQ0128MXQD7TnfHyK4oWoIJQ==}
+ '@napi-rs/wasm-runtime@1.1.1':
+ resolution: {integrity: sha512-p64ah1M1ld8xjWv3qbvFwHiFVWrq1yFvV4f7w+mzaqiR4IlSgkqhcRdHwsGgomwzBH51sRY4NEowLxnaBjcW/A==}
+
'@nodelib/fs.scandir@2.1.5':
resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==}
engines: {node: '>= 8'}
@@ -2025,6 +1881,13 @@ packages:
resolution: {integrity: sha512-nn5ozdjYQpUCZlWGuxcJY/KpxkWQs4DcbMCmKojjyrYDEAGy4Ce19NN4v5MduafTwJlbKc99UA8YhSVqq9yPZA==}
engines: {node: '>=12.4.0'}
+ '@oxc-project/runtime@0.113.0':
+ resolution: {integrity: sha512-apRWH/gXeAsl/sQiblIZnLu7f8P/C9S2fJIicuHV9KOK9J7Hv1JPyTwB8WAcOrDBfjs+cbzjMOGe9UR2ue4ZQg==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+
+ '@oxc-project/types@0.113.0':
+ resolution: {integrity: sha512-Tp3XmgxwNQ9pEN9vxgJBAqdRamHibi76iowQ38O2I4PMpcvNRQNVsU2n1x1nv9yh0XoTrGFzf7cZSGxmixxrhA==}
+
'@parcel/watcher-android-arm64@2.5.1':
resolution: {integrity: sha512-KF8+j9nNbUN8vzOFDpRMsaKBHZ/mcjEjMToVMJOhTozkDonQFFrRcfdLWn6yWKCmJKmdVxSgHiYvTCef4/qcBA==}
engines: {node: '>= 10.0.0'}
@@ -2211,9 +2074,89 @@ packages:
react-redux:
optional: true
+ '@rolldown/binding-android-arm64@1.0.0-rc.4':
+ resolution: {integrity: sha512-vRq9f4NzvbdZavhQbjkJBx7rRebDKYR9zHfO/Wg486+I7bSecdUapzCm5cyXoK+LHokTxgSq7A5baAXUZkIz0w==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm64]
+ os: [android]
+
+ '@rolldown/binding-darwin-arm64@1.0.0-rc.4':
+ resolution: {integrity: sha512-kFgEvkWLqt3YCgKB5re9RlIrx9bRsvyVUnaTakEpOPuLGzLpLapYxE9BufJNvPg8GjT6mB1alN4yN1NjzoeM8Q==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm64]
+ os: [darwin]
+
+ '@rolldown/binding-darwin-x64@1.0.0-rc.4':
+ resolution: {integrity: sha512-JXmaOJGsL/+rsmMfutcDjxWM2fTaVgCHGoXS7nE8Z3c9NAYjGqHvXrAhMUZvMpHS/k7Mg+X7n/MVKb7NYWKKww==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [x64]
+ os: [darwin]
+
+ '@rolldown/binding-freebsd-x64@1.0.0-rc.4':
+ resolution: {integrity: sha512-ep3Catd6sPnHTM0P4hNEvIv5arnDvk01PfyJIJ+J3wVCG1eEaPo09tvFqdtcaTrkwQy0VWR24uz+cb4IsK53Qw==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [x64]
+ os: [freebsd]
+
+ '@rolldown/binding-linux-arm-gnueabihf@1.0.0-rc.4':
+ resolution: {integrity: sha512-LwA5ayKIpnsgXJEwWc3h8wPiS33NMIHd9BhsV92T8VetVAbGe2qXlJwNVDGHN5cOQ22R9uYvbrQir2AB+ntT2w==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm]
+ os: [linux]
+
+ '@rolldown/binding-linux-arm64-gnu@1.0.0-rc.4':
+ resolution: {integrity: sha512-AC1WsGdlV1MtGay/OQ4J9T7GRadVnpYRzTcygV1hKnypbYN20Yh4t6O1Sa2qRBMqv1etulUknqXjc3CTIsBu6A==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm64]
+ os: [linux]
+
+ '@rolldown/binding-linux-arm64-musl@1.0.0-rc.4':
+ resolution: {integrity: sha512-lU+6rgXXViO61B4EudxtVMXSOfiZONR29Sys5VGSetUY7X8mg9FCKIIjcPPj8xNDeYzKl+H8F/qSKOBVFJChCQ==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm64]
+ os: [linux]
+
+ '@rolldown/binding-linux-x64-gnu@1.0.0-rc.4':
+ resolution: {integrity: sha512-DZaN1f0PGp/bSvKhtw50pPsnln4T13ycDq1FrDWRiHmWt1JeW+UtYg9touPFf8yt993p8tS2QjybpzKNTxYEwg==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [x64]
+ os: [linux]
+
+ '@rolldown/binding-linux-x64-musl@1.0.0-rc.4':
+ resolution: {integrity: sha512-RnGxwZLN7fhMMAItnD6dZ7lvy+TI7ba+2V54UF4dhaWa/p8I/ys1E73KO6HmPmgz92ZkfD8TXS1IMV8+uhbR9g==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [x64]
+ os: [linux]
+
+ '@rolldown/binding-openharmony-arm64@1.0.0-rc.4':
+ resolution: {integrity: sha512-6lcI79+X8klGiGd8yHuTgQRjuuJYNggmEml+RsyN596P23l/zf9FVmJ7K0KVKkFAeYEdg0iMUKyIxiV5vebDNQ==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm64]
+ os: [openharmony]
+
+ '@rolldown/binding-wasm32-wasi@1.0.0-rc.4':
+ resolution: {integrity: sha512-wz7ohsKCAIWy91blZ/1FlpPdqrsm1xpcEOQVveWoL6+aSPKL4VUcoYmmzuLTssyZxRpEwzuIxL/GDsvpjaBtOw==}
+ engines: {node: '>=14.0.0'}
+ cpu: [wasm32]
+
+ '@rolldown/binding-win32-arm64-msvc@1.0.0-rc.4':
+ resolution: {integrity: sha512-cfiMrfuWCIgsFmcVG0IPuO6qTRHvF7NuG3wngX1RZzc6dU8FuBFb+J3MIR5WrdTNozlumfgL4cvz+R4ozBCvsQ==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm64]
+ os: [win32]
+
+ '@rolldown/binding-win32-x64-msvc@1.0.0-rc.4':
+ resolution: {integrity: sha512-p6UeR9y7ht82AH57qwGuFYn69S6CZ7LLKdCKy/8T3zS9VTrJei2/CGsTUV45Da4Z9Rbhc7G4gyWQ/Ioamqn09g==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [x64]
+ os: [win32]
+
'@rolldown/pluginutils@1.0.0-rc.3':
resolution: {integrity: sha512-eybk3TjzzzV97Dlj5c+XrBFW57eTNhzod66y9HrBlzJ6NsCrWCp/2kaPS3K9wJmurBC0Tdw4yPjXKZqlznim3Q==}
+ '@rolldown/pluginutils@1.0.0-rc.4':
+ resolution: {integrity: sha512-1BrrmTu0TWfOP1riA8uakjFc9bpIUGzVKETsOtzY39pPga8zELGDl8eu1Dx7/gjM5CAz14UknsUMpBO8L+YntQ==}
+
'@rollup/plugin-babel@5.3.1':
resolution: {integrity: sha512-WFfdLWU/xVWKeRQnKmIAQULUI7Il0gZnBIH/ZFO069wYIfPu+8zrfp/KMW0atmELoRDq8FbiP3VCss9MhCut7Q==}
engines: {node: '>= 10.0.0'}
@@ -2695,6 +2638,9 @@ packages:
'@tybys/wasm-util@0.10.0':
resolution: {integrity: sha512-VyyPYFlOMNylG45GoAe0xDoLwWuowvf92F9kySqzYh8vmYm7D2u4iUJKa1tOUpS70Ku13ASrOkS4ScXFsTaCNQ==}
+ '@tybys/wasm-util@0.10.1':
+ resolution: {integrity: sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==}
+
'@types/argparse@1.0.38':
resolution: {integrity: sha512-ebDJ9b0e702Yr7pWgB0jzm+CX4Srzz8RcXtLJDJB+BSccqMa36uyH/zUsSYao5+BD1ytv3k3rPYCq4mAE1hsXA==}
@@ -3750,6 +3696,10 @@ packages:
engines: {node: '>=0.10'}
hasBin: true
+ detect-libc@2.1.2:
+ resolution: {integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==}
+ engines: {node: '>=8'}
+
detect-passive-events@2.0.3:
resolution: {integrity: sha512-QN/1X65Axis6a9D8qg8Py9cwY/fkWAmAH/edTbmLMcv4m5dboLJ7LcAi8CfaCON2tjk904KwKX/HTdsHC6yeRg==}
@@ -3916,11 +3866,6 @@ packages:
engines: {node: '>=18'}
hasBin: true
- esbuild@0.27.3:
- resolution: {integrity: sha512-8VwMnyGCONIs6cWue2IdpHxHnAjzxnw2Zr7MkVxB2vjmQ2ivqGFb4LEG3SMnv0Gb2F/G/2yA8zUaiL1gywDCCg==}
- engines: {node: '>=18'}
- hasBin: true
-
escalade@3.2.0:
resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==}
engines: {node: '>=6'}
@@ -4834,6 +4779,76 @@ packages:
lie@3.1.1:
resolution: {integrity: sha512-RiNhHysUjhrDQntfYSfY4MU24coXXdEOgw9WGcKHNeEwffDYbF//u87M1EWaMGzuFoSbqW0C9C6lEEhDOAswfw==}
+ lightningcss-android-arm64@1.31.1:
+ resolution: {integrity: sha512-HXJF3x8w9nQ4jbXRiNppBCqeZPIAfUo8zE/kOEGbW5NZvGc/K7nMxbhIr+YlFlHW5mpbg/YFPdbnCh1wAXCKFg==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [arm64]
+ os: [android]
+
+ lightningcss-darwin-arm64@1.31.1:
+ resolution: {integrity: sha512-02uTEqf3vIfNMq3h/z2cJfcOXnQ0GRwQrkmPafhueLb2h7mqEidiCzkE4gBMEH65abHRiQvhdcQ+aP0D0g67sg==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [arm64]
+ os: [darwin]
+
+ lightningcss-darwin-x64@1.31.1:
+ resolution: {integrity: sha512-1ObhyoCY+tGxtsz1lSx5NXCj3nirk0Y0kB/g8B8DT+sSx4G9djitg9ejFnjb3gJNWo7qXH4DIy2SUHvpoFwfTA==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [x64]
+ os: [darwin]
+
+ lightningcss-freebsd-x64@1.31.1:
+ resolution: {integrity: sha512-1RINmQKAItO6ISxYgPwszQE1BrsVU5aB45ho6O42mu96UiZBxEXsuQ7cJW4zs4CEodPUioj/QrXW1r9pLUM74A==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [x64]
+ os: [freebsd]
+
+ lightningcss-linux-arm-gnueabihf@1.31.1:
+ resolution: {integrity: sha512-OOCm2//MZJ87CdDK62rZIu+aw9gBv4azMJuA8/KB74wmfS3lnC4yoPHm0uXZ/dvNNHmnZnB8XLAZzObeG0nS1g==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [arm]
+ os: [linux]
+
+ lightningcss-linux-arm64-gnu@1.31.1:
+ resolution: {integrity: sha512-WKyLWztD71rTnou4xAD5kQT+982wvca7E6QoLpoawZ1gP9JM0GJj4Tp5jMUh9B3AitHbRZ2/H3W5xQmdEOUlLg==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [arm64]
+ os: [linux]
+
+ lightningcss-linux-arm64-musl@1.31.1:
+ resolution: {integrity: sha512-mVZ7Pg2zIbe3XlNbZJdjs86YViQFoJSpc41CbVmKBPiGmC4YrfeOyz65ms2qpAobVd7WQsbW4PdsSJEMymyIMg==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [arm64]
+ os: [linux]
+
+ lightningcss-linux-x64-gnu@1.31.1:
+ resolution: {integrity: sha512-xGlFWRMl+0KvUhgySdIaReQdB4FNudfUTARn7q0hh/V67PVGCs3ADFjw+6++kG1RNd0zdGRlEKa+T13/tQjPMA==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [x64]
+ os: [linux]
+
+ lightningcss-linux-x64-musl@1.31.1:
+ resolution: {integrity: sha512-eowF8PrKHw9LpoZii5tdZwnBcYDxRw2rRCyvAXLi34iyeYfqCQNA9rmUM0ce62NlPhCvof1+9ivRaTY6pSKDaA==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [x64]
+ os: [linux]
+
+ lightningcss-win32-arm64-msvc@1.31.1:
+ resolution: {integrity: sha512-aJReEbSEQzx1uBlQizAOBSjcmr9dCdL3XuC/6HLXAxmtErsj2ICo5yYggg1qOODQMtnjNQv2UHb9NpOuFtYe4w==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [arm64]
+ os: [win32]
+
+ lightningcss-win32-x64-msvc@1.31.1:
+ resolution: {integrity: sha512-I9aiFrbd7oYHwlnQDqr1Roz+fTz61oDDJX7n9tYF9FJymH1cIN1DtKw3iYt6b8WZgEjoNwVSncwF4wx/ZedMhw==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [x64]
+ os: [win32]
+
+ lightningcss@1.31.1:
+ resolution: {integrity: sha512-l51N2r93WmGUye3WuFoN5k10zyvrVs0qfKBhyC5ogUQ6Ew6JUSswh78mbSO+IU3nTWsyOArqPCcShdQSadghBQ==}
+ engines: {node: '>= 12.0.0'}
+
lilconfig@3.1.3:
resolution: {integrity: sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==}
engines: {node: '>=14'}
@@ -5803,6 +5818,11 @@ packages:
deprecated: Rimraf versions prior to v4 are no longer supported
hasBin: true
+ rolldown@1.0.0-rc.4:
+ resolution: {integrity: sha512-V2tPDUrY3WSevrvU2E41ijZlpF+5PbZu4giH+VpNraaadsJGHa4fR6IFwsocVwEXDoAdIv5qgPPxgrvKAOIPtA==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ hasBin: true
+
rollup-plugin-bundle-stats@4.21.10:
resolution: {integrity: sha512-vcUqcAZpXHhBf/Gu7OLcRIVU4Rz6ZXISNCsbuFdpfkGcYDOOcB+pYkTXx73ZHHdD4RkT5SlkrQQwdNKfrTPc5g==}
engines: {node: '>= 16.0'}
@@ -6732,15 +6752,16 @@ packages:
terser:
optional: true
- vite@7.3.1:
- resolution: {integrity: sha512-w+N7Hifpc3gRjZ63vYBXA56dvvRlNWRczTdmCBBa+CotUzAPf5b7YMdMR/8CQoeYE5LX3W4wj6RYTgonm1b9DA==}
+ vite@8.0.0-beta.14:
+ resolution: {integrity: sha512-oLW66oi8tZcoxu6+1HFXb+5hLHco3OnEVu2Awmj5NqEo7vxaqybjBM0BXHcq+jAFhzkMGXJl8xcO5qDBczgKLg==}
engines: {node: ^20.19.0 || >=22.12.0}
hasBin: true
peerDependencies:
'@types/node': ^20.19.0 || >=22.12.0
+ '@vitejs/devtools': ^0.0.0-alpha.31
+ esbuild: ^0.27.0
jiti: '>=1.21.0'
less: ^4.0.0
- lightningcss: ^1.21.0
sass: ^1.70.0
sass-embedded: ^1.70.0
stylus: '>=0.54.8'
@@ -6751,12 +6772,14 @@ packages:
peerDependenciesMeta:
'@types/node':
optional: true
+ '@vitejs/devtools':
+ optional: true
+ esbuild:
+ optional: true
jiti:
optional: true
less:
optional: true
- lightningcss:
- optional: true
sass:
optional: true
sass-embedded:
@@ -7830,16 +7853,32 @@ snapshots:
tslib: 2.8.1
optional: true
+ '@emnapi/core@1.8.1':
+ dependencies:
+ '@emnapi/wasi-threads': 1.1.0
+ tslib: 2.8.1
+ optional: true
+
'@emnapi/runtime@1.4.5':
dependencies:
tslib: 2.8.1
optional: true
+ '@emnapi/runtime@1.8.1':
+ dependencies:
+ tslib: 2.8.1
+ optional: true
+
'@emnapi/wasi-threads@1.0.4':
dependencies:
tslib: 2.8.1
optional: true
+ '@emnapi/wasi-threads@1.1.0':
+ dependencies:
+ tslib: 2.8.1
+ optional: true
+
'@emoji-mart/data@1.2.1': {}
'@es-joy/jsdoccomment@0.50.2':
@@ -7856,222 +7895,144 @@ snapshots:
'@esbuild/aix-ppc64@0.24.2':
optional: true
- '@esbuild/aix-ppc64@0.27.3':
- optional: true
-
'@esbuild/android-arm64@0.21.5':
optional: true
'@esbuild/android-arm64@0.24.2':
optional: true
- '@esbuild/android-arm64@0.27.3':
- optional: true
-
'@esbuild/android-arm@0.21.5':
optional: true
'@esbuild/android-arm@0.24.2':
optional: true
- '@esbuild/android-arm@0.27.3':
- optional: true
-
'@esbuild/android-x64@0.21.5':
optional: true
'@esbuild/android-x64@0.24.2':
optional: true
- '@esbuild/android-x64@0.27.3':
- optional: true
-
'@esbuild/darwin-arm64@0.21.5':
optional: true
'@esbuild/darwin-arm64@0.24.2':
optional: true
- '@esbuild/darwin-arm64@0.27.3':
- optional: true
-
'@esbuild/darwin-x64@0.21.5':
optional: true
'@esbuild/darwin-x64@0.24.2':
optional: true
- '@esbuild/darwin-x64@0.27.3':
- optional: true
-
'@esbuild/freebsd-arm64@0.21.5':
optional: true
'@esbuild/freebsd-arm64@0.24.2':
optional: true
- '@esbuild/freebsd-arm64@0.27.3':
- optional: true
-
'@esbuild/freebsd-x64@0.21.5':
optional: true
'@esbuild/freebsd-x64@0.24.2':
optional: true
- '@esbuild/freebsd-x64@0.27.3':
- optional: true
-
'@esbuild/linux-arm64@0.21.5':
optional: true
'@esbuild/linux-arm64@0.24.2':
optional: true
- '@esbuild/linux-arm64@0.27.3':
- optional: true
-
'@esbuild/linux-arm@0.21.5':
optional: true
'@esbuild/linux-arm@0.24.2':
optional: true
- '@esbuild/linux-arm@0.27.3':
- optional: true
-
'@esbuild/linux-ia32@0.21.5':
optional: true
'@esbuild/linux-ia32@0.24.2':
optional: true
- '@esbuild/linux-ia32@0.27.3':
- optional: true
-
'@esbuild/linux-loong64@0.21.5':
optional: true
'@esbuild/linux-loong64@0.24.2':
optional: true
- '@esbuild/linux-loong64@0.27.3':
- optional: true
-
'@esbuild/linux-mips64el@0.21.5':
optional: true
'@esbuild/linux-mips64el@0.24.2':
optional: true
- '@esbuild/linux-mips64el@0.27.3':
- optional: true
-
'@esbuild/linux-ppc64@0.21.5':
optional: true
'@esbuild/linux-ppc64@0.24.2':
optional: true
- '@esbuild/linux-ppc64@0.27.3':
- optional: true
-
'@esbuild/linux-riscv64@0.21.5':
optional: true
'@esbuild/linux-riscv64@0.24.2':
optional: true
- '@esbuild/linux-riscv64@0.27.3':
- optional: true
-
'@esbuild/linux-s390x@0.21.5':
optional: true
'@esbuild/linux-s390x@0.24.2':
optional: true
- '@esbuild/linux-s390x@0.27.3':
- optional: true
-
'@esbuild/linux-x64@0.21.5':
optional: true
'@esbuild/linux-x64@0.24.2':
optional: true
- '@esbuild/linux-x64@0.27.3':
- optional: true
-
'@esbuild/netbsd-arm64@0.24.2':
optional: true
- '@esbuild/netbsd-arm64@0.27.3':
- optional: true
-
'@esbuild/netbsd-x64@0.21.5':
optional: true
'@esbuild/netbsd-x64@0.24.2':
optional: true
- '@esbuild/netbsd-x64@0.27.3':
- optional: true
-
'@esbuild/openbsd-arm64@0.24.2':
optional: true
- '@esbuild/openbsd-arm64@0.27.3':
- optional: true
-
'@esbuild/openbsd-x64@0.21.5':
optional: true
'@esbuild/openbsd-x64@0.24.2':
optional: true
- '@esbuild/openbsd-x64@0.27.3':
- optional: true
-
- '@esbuild/openharmony-arm64@0.27.3':
- optional: true
-
'@esbuild/sunos-x64@0.21.5':
optional: true
'@esbuild/sunos-x64@0.24.2':
optional: true
- '@esbuild/sunos-x64@0.27.3':
- optional: true
-
'@esbuild/win32-arm64@0.21.5':
optional: true
'@esbuild/win32-arm64@0.24.2':
optional: true
- '@esbuild/win32-arm64@0.27.3':
- optional: true
-
'@esbuild/win32-ia32@0.21.5':
optional: true
'@esbuild/win32-ia32@0.24.2':
optional: true
- '@esbuild/win32-ia32@0.27.3':
- optional: true
-
'@esbuild/win32-x64@0.21.5':
optional: true
'@esbuild/win32-x64@0.24.2':
optional: true
- '@esbuild/win32-x64@0.27.3':
- optional: true
-
'@eslint-community/eslint-utils@4.7.0(eslint@8.57.1)':
dependencies:
eslint: 8.57.1
@@ -8523,6 +8484,13 @@ snapshots:
'@tybys/wasm-util': 0.10.0
optional: true
+ '@napi-rs/wasm-runtime@1.1.1':
+ dependencies:
+ '@emnapi/core': 1.8.1
+ '@emnapi/runtime': 1.8.1
+ '@tybys/wasm-util': 0.10.1
+ optional: true
+
'@nodelib/fs.scandir@2.1.5':
dependencies:
'@nodelib/fs.stat': 2.0.5
@@ -8537,6 +8505,10 @@ snapshots:
'@nolyfill/is-core-module@1.0.39': {}
+ '@oxc-project/runtime@0.113.0': {}
+
+ '@oxc-project/types@0.113.0': {}
+
'@parcel/watcher-android-arm64@2.5.1':
optional: true
@@ -8715,8 +8687,51 @@ snapshots:
react: 19.2.3
react-redux: 9.2.0(@types/react@18.3.27)(react@19.2.3)(redux@5.0.1)
+ '@rolldown/binding-android-arm64@1.0.0-rc.4':
+ optional: true
+
+ '@rolldown/binding-darwin-arm64@1.0.0-rc.4':
+ optional: true
+
+ '@rolldown/binding-darwin-x64@1.0.0-rc.4':
+ optional: true
+
+ '@rolldown/binding-freebsd-x64@1.0.0-rc.4':
+ optional: true
+
+ '@rolldown/binding-linux-arm-gnueabihf@1.0.0-rc.4':
+ optional: true
+
+ '@rolldown/binding-linux-arm64-gnu@1.0.0-rc.4':
+ optional: true
+
+ '@rolldown/binding-linux-arm64-musl@1.0.0-rc.4':
+ optional: true
+
+ '@rolldown/binding-linux-x64-gnu@1.0.0-rc.4':
+ optional: true
+
+ '@rolldown/binding-linux-x64-musl@1.0.0-rc.4':
+ optional: true
+
+ '@rolldown/binding-openharmony-arm64@1.0.0-rc.4':
+ optional: true
+
+ '@rolldown/binding-wasm32-wasi@1.0.0-rc.4':
+ dependencies:
+ '@napi-rs/wasm-runtime': 1.1.1
+ optional: true
+
+ '@rolldown/binding-win32-arm64-msvc@1.0.0-rc.4':
+ optional: true
+
+ '@rolldown/binding-win32-x64-msvc@1.0.0-rc.4':
+ optional: true
+
'@rolldown/pluginutils@1.0.0-rc.3': {}
+ '@rolldown/pluginutils@1.0.0-rc.4': {}
+
'@rollup/plugin-babel@5.3.1(@babel/core@7.29.0)(@types/babel__core@7.20.5)(rollup@2.79.2)':
dependencies:
'@babel/core': 7.29.0
@@ -9181,6 +9196,11 @@ snapshots:
tslib: 2.8.1
optional: true
+ '@tybys/wasm-util@0.10.1':
+ dependencies:
+ tslib: 2.8.1
+ optional: true
+
'@types/argparse@1.0.38': {}
'@types/babel__core@7.20.5':
@@ -9659,7 +9679,7 @@ snapshots:
'@use-gesture/core': 10.3.1
react: 19.2.3
- '@vitejs/plugin-react@5.1.4(vite@7.3.1(@types/node@25.0.3)(jiti@1.21.7)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.46.0)(yaml@2.8.0))':
+ '@vitejs/plugin-react@5.1.4(vite@8.0.0-beta.14(@types/node@25.0.3)(esbuild@0.24.2)(jiti@1.21.7)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.46.0)(yaml@2.8.0))':
dependencies:
'@babel/core': 7.29.0
'@babel/plugin-transform-react-jsx-self': 7.27.1(@babel/core@7.29.0)
@@ -9667,7 +9687,7 @@ snapshots:
'@rolldown/pluginutils': 1.0.0-rc.3
'@types/babel__core': 7.20.5
react-refresh: 0.18.0
- vite: 7.3.1(@types/node@25.0.3)(jiti@1.21.7)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.46.0)(yaml@2.8.0)
+ vite: 8.0.0-beta.14(@types/node@25.0.3)(esbuild@0.24.2)(jiti@1.21.7)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.46.0)(yaml@2.8.0)
transitivePeerDependencies:
- supports-color
@@ -10425,6 +10445,8 @@ snapshots:
detect-libc@1.0.3:
optional: true
+ detect-libc@2.1.2: {}
+
detect-passive-events@2.0.3:
dependencies:
detect-it: 4.0.1
@@ -10696,35 +10718,6 @@ snapshots:
'@esbuild/win32-ia32': 0.24.2
'@esbuild/win32-x64': 0.24.2
- esbuild@0.27.3:
- optionalDependencies:
- '@esbuild/aix-ppc64': 0.27.3
- '@esbuild/android-arm': 0.27.3
- '@esbuild/android-arm64': 0.27.3
- '@esbuild/android-x64': 0.27.3
- '@esbuild/darwin-arm64': 0.27.3
- '@esbuild/darwin-x64': 0.27.3
- '@esbuild/freebsd-arm64': 0.27.3
- '@esbuild/freebsd-x64': 0.27.3
- '@esbuild/linux-arm': 0.27.3
- '@esbuild/linux-arm64': 0.27.3
- '@esbuild/linux-ia32': 0.27.3
- '@esbuild/linux-loong64': 0.27.3
- '@esbuild/linux-mips64el': 0.27.3
- '@esbuild/linux-ppc64': 0.27.3
- '@esbuild/linux-riscv64': 0.27.3
- '@esbuild/linux-s390x': 0.27.3
- '@esbuild/linux-x64': 0.27.3
- '@esbuild/netbsd-arm64': 0.27.3
- '@esbuild/netbsd-x64': 0.27.3
- '@esbuild/openbsd-arm64': 0.27.3
- '@esbuild/openbsd-x64': 0.27.3
- '@esbuild/openharmony-arm64': 0.27.3
- '@esbuild/sunos-x64': 0.27.3
- '@esbuild/win32-arm64': 0.27.3
- '@esbuild/win32-ia32': 0.27.3
- '@esbuild/win32-x64': 0.27.3
-
escalade@3.2.0: {}
escape-string-regexp@4.0.0: {}
@@ -11835,6 +11828,55 @@ snapshots:
dependencies:
immediate: 3.0.6
+ lightningcss-android-arm64@1.31.1:
+ optional: true
+
+ lightningcss-darwin-arm64@1.31.1:
+ optional: true
+
+ lightningcss-darwin-x64@1.31.1:
+ optional: true
+
+ lightningcss-freebsd-x64@1.31.1:
+ optional: true
+
+ lightningcss-linux-arm-gnueabihf@1.31.1:
+ optional: true
+
+ lightningcss-linux-arm64-gnu@1.31.1:
+ optional: true
+
+ lightningcss-linux-arm64-musl@1.31.1:
+ optional: true
+
+ lightningcss-linux-x64-gnu@1.31.1:
+ optional: true
+
+ lightningcss-linux-x64-musl@1.31.1:
+ optional: true
+
+ lightningcss-win32-arm64-msvc@1.31.1:
+ optional: true
+
+ lightningcss-win32-x64-msvc@1.31.1:
+ optional: true
+
+ lightningcss@1.31.1:
+ dependencies:
+ detect-libc: 2.1.2
+ optionalDependencies:
+ lightningcss-android-arm64: 1.31.1
+ lightningcss-darwin-arm64: 1.31.1
+ lightningcss-darwin-x64: 1.31.1
+ lightningcss-freebsd-x64: 1.31.1
+ lightningcss-linux-arm-gnueabihf: 1.31.1
+ lightningcss-linux-arm64-gnu: 1.31.1
+ lightningcss-linux-arm64-musl: 1.31.1
+ lightningcss-linux-x64-gnu: 1.31.1
+ lightningcss-linux-x64-musl: 1.31.1
+ lightningcss-win32-arm64-msvc: 1.31.1
+ lightningcss-win32-x64-msvc: 1.31.1
+
lilconfig@3.1.3: {}
line-awesome@1.3.0: {}
@@ -12764,28 +12806,50 @@ snapshots:
dependencies:
glob: 7.2.3
- rollup-plugin-bundle-stats@4.21.10(core-js@3.44.0)(rollup@2.79.2)(vite@7.3.1(@types/node@25.0.3)(jiti@1.21.7)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.46.0)(yaml@2.8.0)):
+ rolldown@1.0.0-rc.4:
+ dependencies:
+ '@oxc-project/types': 0.113.0
+ '@rolldown/pluginutils': 1.0.0-rc.4
+ optionalDependencies:
+ '@rolldown/binding-android-arm64': 1.0.0-rc.4
+ '@rolldown/binding-darwin-arm64': 1.0.0-rc.4
+ '@rolldown/binding-darwin-x64': 1.0.0-rc.4
+ '@rolldown/binding-freebsd-x64': 1.0.0-rc.4
+ '@rolldown/binding-linux-arm-gnueabihf': 1.0.0-rc.4
+ '@rolldown/binding-linux-arm64-gnu': 1.0.0-rc.4
+ '@rolldown/binding-linux-arm64-musl': 1.0.0-rc.4
+ '@rolldown/binding-linux-x64-gnu': 1.0.0-rc.4
+ '@rolldown/binding-linux-x64-musl': 1.0.0-rc.4
+ '@rolldown/binding-openharmony-arm64': 1.0.0-rc.4
+ '@rolldown/binding-wasm32-wasi': 1.0.0-rc.4
+ '@rolldown/binding-win32-arm64-msvc': 1.0.0-rc.4
+ '@rolldown/binding-win32-x64-msvc': 1.0.0-rc.4
+
+ rollup-plugin-bundle-stats@4.21.10(core-js@3.44.0)(rolldown@1.0.0-rc.4)(rollup@2.79.2)(vite@8.0.0-beta.14(@types/node@25.0.3)(esbuild@0.24.2)(jiti@1.21.7)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.46.0)(yaml@2.8.0)):
dependencies:
'@bundle-stats/cli-utils': 4.21.10(core-js@3.44.0)
- rollup-plugin-webpack-stats: 2.1.11(rollup@2.79.2)(vite@7.3.1(@types/node@25.0.3)(jiti@1.21.7)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.46.0)(yaml@2.8.0))
+ rollup-plugin-webpack-stats: 2.1.11(rolldown@1.0.0-rc.4)(rollup@2.79.2)(vite@8.0.0-beta.14(@types/node@25.0.3)(esbuild@0.24.2)(jiti@1.21.7)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.46.0)(yaml@2.8.0))
tslib: 2.8.1
optionalDependencies:
+ rolldown: 1.0.0-rc.4
rollup: 2.79.2
- vite: 7.3.1(@types/node@25.0.3)(jiti@1.21.7)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.46.0)(yaml@2.8.0)
+ vite: 8.0.0-beta.14(@types/node@25.0.3)(esbuild@0.24.2)(jiti@1.21.7)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.46.0)(yaml@2.8.0)
transitivePeerDependencies:
- core-js
- rollup-plugin-stats@1.5.6(rollup@2.79.2)(vite@7.3.1(@types/node@25.0.3)(jiti@1.21.7)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.46.0)(yaml@2.8.0)):
+ rollup-plugin-stats@1.5.6(rolldown@1.0.0-rc.4)(rollup@2.79.2)(vite@8.0.0-beta.14(@types/node@25.0.3)(esbuild@0.24.2)(jiti@1.21.7)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.46.0)(yaml@2.8.0)):
optionalDependencies:
+ rolldown: 1.0.0-rc.4
rollup: 2.79.2
- vite: 7.3.1(@types/node@25.0.3)(jiti@1.21.7)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.46.0)(yaml@2.8.0)
+ vite: 8.0.0-beta.14(@types/node@25.0.3)(esbuild@0.24.2)(jiti@1.21.7)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.46.0)(yaml@2.8.0)
- rollup-plugin-webpack-stats@2.1.11(rollup@2.79.2)(vite@7.3.1(@types/node@25.0.3)(jiti@1.21.7)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.46.0)(yaml@2.8.0)):
+ rollup-plugin-webpack-stats@2.1.11(rolldown@1.0.0-rc.4)(rollup@2.79.2)(vite@8.0.0-beta.14(@types/node@25.0.3)(esbuild@0.24.2)(jiti@1.21.7)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.46.0)(yaml@2.8.0)):
dependencies:
- rollup-plugin-stats: 1.5.6(rollup@2.79.2)(vite@7.3.1(@types/node@25.0.3)(jiti@1.21.7)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.46.0)(yaml@2.8.0))
+ rollup-plugin-stats: 1.5.6(rolldown@1.0.0-rc.4)(rollup@2.79.2)(vite@8.0.0-beta.14(@types/node@25.0.3)(esbuild@0.24.2)(jiti@1.21.7)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.46.0)(yaml@2.8.0))
optionalDependencies:
+ rolldown: 1.0.0-rc.4
rollup: 2.79.2
- vite: 7.3.1(@types/node@25.0.3)(jiti@1.21.7)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.46.0)(yaml@2.8.0)
+ vite: 8.0.0-beta.14(@types/node@25.0.3)(esbuild@0.24.2)(jiti@1.21.7)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.46.0)(yaml@2.8.0)
rollup@2.79.2:
optionalDependencies:
@@ -12849,6 +12913,7 @@ snapshots:
'@rollup/rollup-win32-x64-gnu': 4.57.1
'@rollup/rollup-win32-x64-msvc': 4.57.1
fsevents: 2.3.3
+ optional: true
run-parallel@1.2.0:
dependencies:
@@ -13703,7 +13768,7 @@ snapshots:
varint@6.0.0: {}
- vite-plugin-checker@0.12.0(eslint@8.57.1)(meow@13.2.0)(optionator@0.9.4)(stylelint@16.23.0(typescript@5.7.3))(typescript@5.7.3)(vite@7.3.1(@types/node@25.0.3)(jiti@1.21.7)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.46.0)(yaml@2.8.0)):
+ vite-plugin-checker@0.12.0(eslint@8.57.1)(meow@13.2.0)(optionator@0.9.4)(stylelint@16.23.0(typescript@5.7.3))(typescript@5.7.3)(vite@8.0.0-beta.14(@types/node@25.0.3)(esbuild@0.24.2)(jiti@1.21.7)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.46.0)(yaml@2.8.0)):
dependencies:
'@babel/code-frame': 7.29.0
chokidar: 4.0.3
@@ -13712,7 +13777,7 @@ snapshots:
picomatch: 4.0.3
tiny-invariant: 1.3.3
tinyglobby: 0.2.15
- vite: 7.3.1(@types/node@25.0.3)(jiti@1.21.7)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.46.0)(yaml@2.8.0)
+ vite: 8.0.0-beta.14(@types/node@25.0.3)(esbuild@0.24.2)(jiti@1.21.7)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.46.0)(yaml@2.8.0)
vscode-uri: 3.1.0
optionalDependencies:
eslint: 8.57.1
@@ -13721,7 +13786,7 @@ snapshots:
stylelint: 16.23.0(typescript@5.7.3)
typescript: 5.7.3
- vite-plugin-compile-time@0.4.6(vite@7.3.1(@types/node@25.0.3)(jiti@1.21.7)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.46.0)(yaml@2.8.0)):
+ vite-plugin-compile-time@0.4.6(vite@8.0.0-beta.14(@types/node@25.0.3)(esbuild@0.24.2)(jiti@1.21.7)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.46.0)(yaml@2.8.0)):
dependencies:
'@babel/generator': 7.29.1
'@babel/parser': 7.29.0
@@ -13732,11 +13797,11 @@ snapshots:
devalue: 5.1.1
esbuild: 0.24.2
magic-string: 0.30.17
- vite: 7.3.1(@types/node@25.0.3)(jiti@1.21.7)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.46.0)(yaml@2.8.0)
+ vite: 8.0.0-beta.14(@types/node@25.0.3)(esbuild@0.24.2)(jiti@1.21.7)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.46.0)(yaml@2.8.0)
transitivePeerDependencies:
- supports-color
- vite-plugin-dts@4.5.4(@types/node@20.19.9)(rollup@4.57.1)(typescript@5.9.2)(vite@5.4.21(@types/node@20.19.9)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.46.0)):
+ vite-plugin-dts@4.5.4(@types/node@20.19.9)(rollup@4.57.1)(typescript@5.9.2)(vite@5.4.21(@types/node@20.19.9)(lightningcss@1.31.1)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.46.0)):
dependencies:
'@microsoft/api-extractor': 7.52.10(@types/node@20.19.9)
'@rollup/pluginutils': 5.2.0(rollup@4.57.1)
@@ -13749,13 +13814,13 @@ snapshots:
magic-string: 0.30.17
typescript: 5.9.2
optionalDependencies:
- vite: 5.4.21(@types/node@20.19.9)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.46.0)
+ vite: 5.4.21(@types/node@20.19.9)(lightningcss@1.31.1)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.46.0)
transitivePeerDependencies:
- '@types/node'
- rollup
- supports-color
- vite-plugin-dts@4.5.4(@types/node@22.17.0)(rollup@4.57.1)(typescript@5.9.2)(vite@5.4.21(@types/node@22.17.0)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.46.0)):
+ vite-plugin-dts@4.5.4(@types/node@22.17.0)(rollup@4.57.1)(typescript@5.9.2)(vite@5.4.21(@types/node@22.17.0)(lightningcss@1.31.1)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.46.0)):
dependencies:
'@microsoft/api-extractor': 7.52.10(@types/node@22.17.0)
'@rollup/pluginutils': 5.2.0(rollup@4.57.1)
@@ -13768,13 +13833,13 @@ snapshots:
magic-string: 0.30.17
typescript: 5.9.2
optionalDependencies:
- vite: 5.4.21(@types/node@22.17.0)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.46.0)
+ vite: 5.4.21(@types/node@22.17.0)(lightningcss@1.31.1)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.46.0)
transitivePeerDependencies:
- '@types/node'
- rollup
- supports-color
- vite-plugin-html@3.2.2(vite@7.3.1(@types/node@25.0.3)(jiti@1.21.7)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.46.0)(yaml@2.8.0)):
+ vite-plugin-html@3.2.2(vite@8.0.0-beta.14(@types/node@25.0.3)(esbuild@0.24.2)(jiti@1.21.7)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.46.0)(yaml@2.8.0)):
dependencies:
'@rollup/pluginutils': 4.2.1
colorette: 2.0.20
@@ -13788,27 +13853,27 @@ snapshots:
html-minifier-terser: 6.1.0
node-html-parser: 5.4.2
pathe: 0.2.0
- vite: 7.3.1(@types/node@25.0.3)(jiti@1.21.7)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.46.0)(yaml@2.8.0)
+ vite: 8.0.0-beta.14(@types/node@25.0.3)(esbuild@0.24.2)(jiti@1.21.7)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.46.0)(yaml@2.8.0)
- vite-plugin-pwa@1.2.0(vite@7.3.1(@types/node@25.0.3)(jiti@1.21.7)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.46.0)(yaml@2.8.0))(workbox-build@7.3.0(@types/babel__core@7.20.5))(workbox-window@7.3.0):
+ vite-plugin-pwa@1.2.0(vite@8.0.0-beta.14(@types/node@25.0.3)(esbuild@0.24.2)(jiti@1.21.7)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.46.0)(yaml@2.8.0))(workbox-build@7.3.0(@types/babel__core@7.20.5))(workbox-window@7.3.0):
dependencies:
debug: 4.4.3
pretty-bytes: 6.1.1
tinyglobby: 0.2.15
- vite: 7.3.1(@types/node@25.0.3)(jiti@1.21.7)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.46.0)(yaml@2.8.0)
+ vite: 8.0.0-beta.14(@types/node@25.0.3)(esbuild@0.24.2)(jiti@1.21.7)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.46.0)(yaml@2.8.0)
workbox-build: 7.3.0(@types/babel__core@7.20.5)
workbox-window: 7.3.0
transitivePeerDependencies:
- supports-color
- vite-plugin-require@1.2.14(esbuild@0.24.2)(vite@7.3.1(@types/node@25.0.3)(jiti@1.21.7)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.46.0)(yaml@2.8.0)):
+ vite-plugin-require@1.2.14(esbuild@0.24.2)(vite@8.0.0-beta.14(@types/node@25.0.3)(esbuild@0.24.2)(jiti@1.21.7)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.46.0)(yaml@2.8.0)):
dependencies:
'@babel/generator': 7.28.0
'@babel/parser': 7.28.0
'@babel/traverse': 7.28.0
'@babel/types': 7.28.2
'@vue/compiler-sfc': 3.5.18
- vite: 7.3.1(@types/node@25.0.3)(jiti@1.21.7)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.46.0)(yaml@2.8.0)
+ vite: 8.0.0-beta.14(@types/node@25.0.3)(esbuild@0.24.2)(jiti@1.21.7)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.46.0)(yaml@2.8.0)
vue-loader: 17.4.2(@vue/compiler-sfc@3.5.18)(webpack@5.101.0(esbuild@0.24.2))
webpack: 5.101.0(esbuild@0.24.2)
transitivePeerDependencies:
@@ -13819,15 +13884,15 @@ snapshots:
- vue
- webpack-cli
- vite-plugin-static-copy@3.2.0(vite@7.3.1(@types/node@25.0.3)(jiti@1.21.7)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.46.0)(yaml@2.8.0)):
+ vite-plugin-static-copy@3.2.0(vite@8.0.0-beta.14(@types/node@25.0.3)(esbuild@0.24.2)(jiti@1.21.7)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.46.0)(yaml@2.8.0)):
dependencies:
chokidar: 3.6.0
p-map: 7.0.4
picocolors: 1.1.1
tinyglobby: 0.2.15
- vite: 7.3.1(@types/node@25.0.3)(jiti@1.21.7)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.46.0)(yaml@2.8.0)
+ vite: 8.0.0-beta.14(@types/node@25.0.3)(esbuild@0.24.2)(jiti@1.21.7)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.46.0)(yaml@2.8.0)
- vite@5.4.21(@types/node@20.19.9)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.46.0):
+ vite@5.4.21(@types/node@20.19.9)(lightningcss@1.31.1)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.46.0):
dependencies:
esbuild: 0.21.5
postcss: 8.5.6
@@ -13835,11 +13900,12 @@ snapshots:
optionalDependencies:
'@types/node': 20.19.9
fsevents: 2.3.3
+ lightningcss: 1.31.1
sass: 1.93.3
sass-embedded: 1.93.3
terser: 5.46.0
- vite@5.4.21(@types/node@22.17.0)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.46.0):
+ vite@5.4.21(@types/node@22.17.0)(lightningcss@1.31.1)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.46.0):
dependencies:
esbuild: 0.21.5
postcss: 8.5.6
@@ -13847,20 +13913,23 @@ snapshots:
optionalDependencies:
'@types/node': 22.17.0
fsevents: 2.3.3
+ lightningcss: 1.31.1
sass: 1.93.3
sass-embedded: 1.93.3
terser: 5.46.0
- vite@7.3.1(@types/node@25.0.3)(jiti@1.21.7)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.46.0)(yaml@2.8.0):
+ vite@8.0.0-beta.14(@types/node@25.0.3)(esbuild@0.24.2)(jiti@1.21.7)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.46.0)(yaml@2.8.0):
dependencies:
- esbuild: 0.27.3
+ '@oxc-project/runtime': 0.113.0
fdir: 6.5.0(picomatch@4.0.3)
+ lightningcss: 1.31.1
picomatch: 4.0.3
postcss: 8.5.6
- rollup: 4.57.1
+ rolldown: 1.0.0-rc.4
tinyglobby: 0.2.15
optionalDependencies:
'@types/node': 25.0.3
+ esbuild: 0.24.2
fsevents: 2.3.3
jiti: 1.21.7
sass: 1.93.3
From ffdfeadb8f1c9d8d18c6aa882062735d5cb2fab6 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?nicole=20miko=C5=82ajczyk?=
Date: Sat, 14 Feb 2026 23:37:32 +0100
Subject: [PATCH 07/74] nicolium: also migrate pl-api
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Signed-off-by: nicole mikołajczyk
---
packages/pl-api/package.json | 2 +-
packages/pl-hooks/package.json | 2 +-
pnpm-lock.yaml | 524 ++-------------------------------
3 files changed, 30 insertions(+), 498 deletions(-)
diff --git a/packages/pl-api/package.json b/packages/pl-api/package.json
index 6f1bf1506..9717800b4 100644
--- a/packages/pl-api/package.json
+++ b/packages/pl-api/package.json
@@ -36,7 +36,7 @@
"typedoc-material-theme": "^1.4.0",
"typedoc-plugin-valibot": "^1.0.0",
"typescript": "^5.8.3",
- "vite": "^5.4.21",
+ "vite": "^8.0.0-beta.14",
"vite-plugin-dts": "^4.5.4",
"ws": "^8.18.3"
},
diff --git a/packages/pl-hooks/package.json b/packages/pl-hooks/package.json
index cb56fad19..29e898a48 100644
--- a/packages/pl-hooks/package.json
+++ b/packages/pl-hooks/package.json
@@ -29,7 +29,7 @@
"eslint-plugin-import": "^2.28.1",
"eslint-plugin-promise": "^6.0.0",
"typescript": "^5.6.2",
- "vite": "^5.4.21",
+ "vite": "^8.0.0-beta.14",
"vite-plugin-dts": "^4.2.1"
},
"dependencies": {
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index d0a1cc1ef..c523169c3 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -104,11 +104,11 @@ importers:
specifier: ^5.8.3
version: 5.9.2
vite:
- specifier: ^5.4.21
- version: 5.4.21(@types/node@22.17.0)(lightningcss@1.31.1)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.46.0)
+ specifier: ^8.0.0-beta.14
+ version: 8.0.0-beta.14(@types/node@22.17.0)(jiti@1.21.7)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.46.0)(yaml@2.8.0)
vite-plugin-dts:
specifier: ^4.5.4
- version: 4.5.4(@types/node@22.17.0)(rollup@4.57.1)(typescript@5.9.2)(vite@5.4.21(@types/node@22.17.0)(lightningcss@1.31.1)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.46.0))
+ version: 4.5.4(@types/node@22.17.0)(rollup@4.57.1)(typescript@5.9.2)(vite@8.0.0-beta.14(@types/node@22.17.0)(jiti@1.21.7)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.46.0)(yaml@2.8.0))
ws:
specifier: ^8.18.3
version: 8.18.3
@@ -589,11 +589,11 @@ importers:
specifier: ^5.6.2
version: 5.9.2
vite:
- specifier: ^5.4.21
- version: 5.4.21(@types/node@20.19.9)(lightningcss@1.31.1)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.46.0)
+ specifier: ^8.0.0-beta.14
+ version: 8.0.0-beta.14(@types/node@20.19.9)(jiti@1.21.7)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.46.0)(yaml@2.8.0)
vite-plugin-dts:
specifier: ^4.2.1
- version: 4.5.4(@types/node@20.19.9)(rollup@4.57.1)(typescript@5.9.2)(vite@5.4.21(@types/node@20.19.9)(lightningcss@1.31.1)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.46.0))
+ version: 4.5.4(@types/node@20.19.9)(rollup@4.57.1)(typescript@5.9.2)(vite@8.0.0-beta.14(@types/node@20.19.9)(jiti@1.21.7)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.46.0)(yaml@2.8.0))
packages:
@@ -1271,204 +1271,102 @@ packages:
resolution: {integrity: sha512-YAdE/IJSpwbOTiaURNCKECdAwqrJuFiZhylmesBcIRawtYKnBR2wxPhoIewMg+Yu+QuYvHfJNReWpoxGBKOChA==}
engines: {node: '>=18'}
- '@esbuild/aix-ppc64@0.21.5':
- resolution: {integrity: sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==}
- engines: {node: '>=12'}
- cpu: [ppc64]
- os: [aix]
-
'@esbuild/aix-ppc64@0.24.2':
resolution: {integrity: sha512-thpVCb/rhxE/BnMLQ7GReQLLN8q9qbHmI55F4489/ByVg2aQaQ6kbcLb6FHkocZzQhxc4gx0sCk0tJkKBFzDhA==}
engines: {node: '>=18'}
cpu: [ppc64]
os: [aix]
- '@esbuild/android-arm64@0.21.5':
- resolution: {integrity: sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==}
- engines: {node: '>=12'}
- cpu: [arm64]
- os: [android]
-
'@esbuild/android-arm64@0.24.2':
resolution: {integrity: sha512-cNLgeqCqV8WxfcTIOeL4OAtSmL8JjcN6m09XIgro1Wi7cF4t/THaWEa7eL5CMoMBdjoHOTh/vwTO/o2TRXIyzg==}
engines: {node: '>=18'}
cpu: [arm64]
os: [android]
- '@esbuild/android-arm@0.21.5':
- resolution: {integrity: sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==}
- engines: {node: '>=12'}
- cpu: [arm]
- os: [android]
-
'@esbuild/android-arm@0.24.2':
resolution: {integrity: sha512-tmwl4hJkCfNHwFB3nBa8z1Uy3ypZpxqxfTQOcHX+xRByyYgunVbZ9MzUUfb0RxaHIMnbHagwAxuTL+tnNM+1/Q==}
engines: {node: '>=18'}
cpu: [arm]
os: [android]
- '@esbuild/android-x64@0.21.5':
- resolution: {integrity: sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==}
- engines: {node: '>=12'}
- cpu: [x64]
- os: [android]
-
'@esbuild/android-x64@0.24.2':
resolution: {integrity: sha512-B6Q0YQDqMx9D7rvIcsXfmJfvUYLoP722bgfBlO5cGvNVb5V/+Y7nhBE3mHV9OpxBf4eAS2S68KZztiPaWq4XYw==}
engines: {node: '>=18'}
cpu: [x64]
os: [android]
- '@esbuild/darwin-arm64@0.21.5':
- resolution: {integrity: sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==}
- engines: {node: '>=12'}
- cpu: [arm64]
- os: [darwin]
-
'@esbuild/darwin-arm64@0.24.2':
resolution: {integrity: sha512-kj3AnYWc+CekmZnS5IPu9D+HWtUI49hbnyqk0FLEJDbzCIQt7hg7ucF1SQAilhtYpIujfaHr6O0UHlzzSPdOeA==}
engines: {node: '>=18'}
cpu: [arm64]
os: [darwin]
- '@esbuild/darwin-x64@0.21.5':
- resolution: {integrity: sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==}
- engines: {node: '>=12'}
- cpu: [x64]
- os: [darwin]
-
'@esbuild/darwin-x64@0.24.2':
resolution: {integrity: sha512-WeSrmwwHaPkNR5H3yYfowhZcbriGqooyu3zI/3GGpF8AyUdsrrP0X6KumITGA9WOyiJavnGZUwPGvxvwfWPHIA==}
engines: {node: '>=18'}
cpu: [x64]
os: [darwin]
- '@esbuild/freebsd-arm64@0.21.5':
- resolution: {integrity: sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==}
- engines: {node: '>=12'}
- cpu: [arm64]
- os: [freebsd]
-
'@esbuild/freebsd-arm64@0.24.2':
resolution: {integrity: sha512-UN8HXjtJ0k/Mj6a9+5u6+2eZ2ERD7Edt1Q9IZiB5UZAIdPnVKDoG7mdTVGhHJIeEml60JteamR3qhsr1r8gXvg==}
engines: {node: '>=18'}
cpu: [arm64]
os: [freebsd]
- '@esbuild/freebsd-x64@0.21.5':
- resolution: {integrity: sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==}
- engines: {node: '>=12'}
- cpu: [x64]
- os: [freebsd]
-
'@esbuild/freebsd-x64@0.24.2':
resolution: {integrity: sha512-TvW7wE/89PYW+IevEJXZ5sF6gJRDY/14hyIGFXdIucxCsbRmLUcjseQu1SyTko+2idmCw94TgyaEZi9HUSOe3Q==}
engines: {node: '>=18'}
cpu: [x64]
os: [freebsd]
- '@esbuild/linux-arm64@0.21.5':
- resolution: {integrity: sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==}
- engines: {node: '>=12'}
- cpu: [arm64]
- os: [linux]
-
'@esbuild/linux-arm64@0.24.2':
resolution: {integrity: sha512-7HnAD6074BW43YvvUmE/35Id9/NB7BeX5EoNkK9obndmZBUk8xmJJeU7DwmUeN7tkysslb2eSl6CTrYz6oEMQg==}
engines: {node: '>=18'}
cpu: [arm64]
os: [linux]
- '@esbuild/linux-arm@0.21.5':
- resolution: {integrity: sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==}
- engines: {node: '>=12'}
- cpu: [arm]
- os: [linux]
-
'@esbuild/linux-arm@0.24.2':
resolution: {integrity: sha512-n0WRM/gWIdU29J57hJyUdIsk0WarGd6To0s+Y+LwvlC55wt+GT/OgkwoXCXvIue1i1sSNWblHEig00GBWiJgfA==}
engines: {node: '>=18'}
cpu: [arm]
os: [linux]
- '@esbuild/linux-ia32@0.21.5':
- resolution: {integrity: sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==}
- engines: {node: '>=12'}
- cpu: [ia32]
- os: [linux]
-
'@esbuild/linux-ia32@0.24.2':
resolution: {integrity: sha512-sfv0tGPQhcZOgTKO3oBE9xpHuUqguHvSo4jl+wjnKwFpapx+vUDcawbwPNuBIAYdRAvIDBfZVvXprIj3HA+Ugw==}
engines: {node: '>=18'}
cpu: [ia32]
os: [linux]
- '@esbuild/linux-loong64@0.21.5':
- resolution: {integrity: sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==}
- engines: {node: '>=12'}
- cpu: [loong64]
- os: [linux]
-
'@esbuild/linux-loong64@0.24.2':
resolution: {integrity: sha512-CN9AZr8kEndGooS35ntToZLTQLHEjtVB5n7dl8ZcTZMonJ7CCfStrYhrzF97eAecqVbVJ7APOEe18RPI4KLhwQ==}
engines: {node: '>=18'}
cpu: [loong64]
os: [linux]
- '@esbuild/linux-mips64el@0.21.5':
- resolution: {integrity: sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==}
- engines: {node: '>=12'}
- cpu: [mips64el]
- os: [linux]
-
'@esbuild/linux-mips64el@0.24.2':
resolution: {integrity: sha512-iMkk7qr/wl3exJATwkISxI7kTcmHKE+BlymIAbHO8xanq/TjHaaVThFF6ipWzPHryoFsesNQJPE/3wFJw4+huw==}
engines: {node: '>=18'}
cpu: [mips64el]
os: [linux]
- '@esbuild/linux-ppc64@0.21.5':
- resolution: {integrity: sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==}
- engines: {node: '>=12'}
- cpu: [ppc64]
- os: [linux]
-
'@esbuild/linux-ppc64@0.24.2':
resolution: {integrity: sha512-shsVrgCZ57Vr2L8mm39kO5PPIb+843FStGt7sGGoqiiWYconSxwTiuswC1VJZLCjNiMLAMh34jg4VSEQb+iEbw==}
engines: {node: '>=18'}
cpu: [ppc64]
os: [linux]
- '@esbuild/linux-riscv64@0.21.5':
- resolution: {integrity: sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==}
- engines: {node: '>=12'}
- cpu: [riscv64]
- os: [linux]
-
'@esbuild/linux-riscv64@0.24.2':
resolution: {integrity: sha512-4eSFWnU9Hhd68fW16GD0TINewo1L6dRrB+oLNNbYyMUAeOD2yCK5KXGK1GH4qD/kT+bTEXjsyTCiJGHPZ3eM9Q==}
engines: {node: '>=18'}
cpu: [riscv64]
os: [linux]
- '@esbuild/linux-s390x@0.21.5':
- resolution: {integrity: sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==}
- engines: {node: '>=12'}
- cpu: [s390x]
- os: [linux]
-
'@esbuild/linux-s390x@0.24.2':
resolution: {integrity: sha512-S0Bh0A53b0YHL2XEXC20bHLuGMOhFDO6GN4b3YjRLK//Ep3ql3erpNcPlEFed93hsQAjAQDNsvcK+hV90FubSw==}
engines: {node: '>=18'}
cpu: [s390x]
os: [linux]
- '@esbuild/linux-x64@0.21.5':
- resolution: {integrity: sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==}
- engines: {node: '>=12'}
- cpu: [x64]
- os: [linux]
-
'@esbuild/linux-x64@0.24.2':
resolution: {integrity: sha512-8Qi4nQcCTbLnK9WoMjdC9NiTG6/E38RNICU6sUNqK0QFxCYgoARqVqxdFmWkdonVsvGqWhmm7MO0jyTqLqwj0Q==}
engines: {node: '>=18'}
@@ -1481,12 +1379,6 @@ packages:
cpu: [arm64]
os: [netbsd]
- '@esbuild/netbsd-x64@0.21.5':
- resolution: {integrity: sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==}
- engines: {node: '>=12'}
- cpu: [x64]
- os: [netbsd]
-
'@esbuild/netbsd-x64@0.24.2':
resolution: {integrity: sha512-VefFaQUc4FMmJuAxmIHgUmfNiLXY438XrL4GDNV1Y1H/RW3qow68xTwjZKfj/+Plp9NANmzbH5R40Meudu8mmw==}
engines: {node: '>=18'}
@@ -1499,60 +1391,30 @@ packages:
cpu: [arm64]
os: [openbsd]
- '@esbuild/openbsd-x64@0.21.5':
- resolution: {integrity: sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==}
- engines: {node: '>=12'}
- cpu: [x64]
- os: [openbsd]
-
'@esbuild/openbsd-x64@0.24.2':
resolution: {integrity: sha512-+iDS6zpNM6EnJyWv0bMGLWSWeXGN/HTaF/LXHXHwejGsVi+ooqDfMCCTerNFxEkM3wYVcExkeGXNqshc9iMaOA==}
engines: {node: '>=18'}
cpu: [x64]
os: [openbsd]
- '@esbuild/sunos-x64@0.21.5':
- resolution: {integrity: sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==}
- engines: {node: '>=12'}
- cpu: [x64]
- os: [sunos]
-
'@esbuild/sunos-x64@0.24.2':
resolution: {integrity: sha512-hTdsW27jcktEvpwNHJU4ZwWFGkz2zRJUz8pvddmXPtXDzVKTTINmlmga3ZzwcuMpUvLw7JkLy9QLKyGpD2Yxig==}
engines: {node: '>=18'}
cpu: [x64]
os: [sunos]
- '@esbuild/win32-arm64@0.21.5':
- resolution: {integrity: sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==}
- engines: {node: '>=12'}
- cpu: [arm64]
- os: [win32]
-
'@esbuild/win32-arm64@0.24.2':
resolution: {integrity: sha512-LihEQ2BBKVFLOC9ZItT9iFprsE9tqjDjnbulhHoFxYQtQfai7qfluVODIYxt1PgdoyQkz23+01rzwNwYfutxUQ==}
engines: {node: '>=18'}
cpu: [arm64]
os: [win32]
- '@esbuild/win32-ia32@0.21.5':
- resolution: {integrity: sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==}
- engines: {node: '>=12'}
- cpu: [ia32]
- os: [win32]
-
'@esbuild/win32-ia32@0.24.2':
resolution: {integrity: sha512-q+iGUwfs8tncmFC9pcnD5IvRHAzmbwQ3GPS5/ceCyHdjXubwQWI12MKWSNSMYLJMq23/IUCvJMS76PDqXe1fxA==}
engines: {node: '>=18'}
cpu: [ia32]
os: [win32]
- '@esbuild/win32-x64@0.21.5':
- resolution: {integrity: sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==}
- engines: {node: '>=12'}
- cpu: [x64]
- os: [win32]
-
'@esbuild/win32-x64@0.24.2':
resolution: {integrity: sha512-7VTgWzgMGvup6aSqDPLiW5zHaxYJGTO4OokMjIlrCtf+VpEL+cXKtCvg723iguPYI5oaUNdS+/V7OU2gvXVWEg==}
engines: {node: '>=18'}
@@ -2219,111 +2081,56 @@ packages:
rollup:
optional: true
- '@rollup/rollup-android-arm-eabi@4.52.5':
- resolution: {integrity: sha512-8c1vW4ocv3UOMp9K+gToY5zL2XiiVw3k7f1ksf4yO1FlDFQ1C2u72iACFnSOceJFsWskc2WZNqeRhFRPzv+wtQ==}
- cpu: [arm]
- os: [android]
-
'@rollup/rollup-android-arm-eabi@4.57.1':
resolution: {integrity: sha512-A6ehUVSiSaaliTxai040ZpZ2zTevHYbvu/lDoeAteHI8QnaosIzm4qwtezfRg1jOYaUmnzLX1AOD6Z+UJjtifg==}
cpu: [arm]
os: [android]
- '@rollup/rollup-android-arm64@4.52.5':
- resolution: {integrity: sha512-mQGfsIEFcu21mvqkEKKu2dYmtuSZOBMmAl5CFlPGLY94Vlcm+zWApK7F/eocsNzp8tKmbeBP8yXyAbx0XHsFNA==}
- cpu: [arm64]
- os: [android]
-
'@rollup/rollup-android-arm64@4.57.1':
resolution: {integrity: sha512-dQaAddCY9YgkFHZcFNS/606Exo8vcLHwArFZ7vxXq4rigo2bb494/xKMMwRRQW6ug7Js6yXmBZhSBRuBvCCQ3w==}
cpu: [arm64]
os: [android]
- '@rollup/rollup-darwin-arm64@4.52.5':
- resolution: {integrity: sha512-takF3CR71mCAGA+v794QUZ0b6ZSrgJkArC+gUiG6LB6TQty9T0Mqh3m2ImRBOxS2IeYBo4lKWIieSvnEk2OQWA==}
- cpu: [arm64]
- os: [darwin]
-
'@rollup/rollup-darwin-arm64@4.57.1':
resolution: {integrity: sha512-crNPrwJOrRxagUYeMn/DZwqN88SDmwaJ8Cvi/TN1HnWBU7GwknckyosC2gd0IqYRsHDEnXf328o9/HC6OkPgOg==}
cpu: [arm64]
os: [darwin]
- '@rollup/rollup-darwin-x64@4.52.5':
- resolution: {integrity: sha512-W901Pla8Ya95WpxDn//VF9K9u2JbocwV/v75TE0YIHNTbhqUTv9w4VuQ9MaWlNOkkEfFwkdNhXgcLqPSmHy0fA==}
- cpu: [x64]
- os: [darwin]
-
'@rollup/rollup-darwin-x64@4.57.1':
resolution: {integrity: sha512-Ji8g8ChVbKrhFtig5QBV7iMaJrGtpHelkB3lsaKzadFBe58gmjfGXAOfI5FV0lYMH8wiqsxKQ1C9B0YTRXVy4w==}
cpu: [x64]
os: [darwin]
- '@rollup/rollup-freebsd-arm64@4.52.5':
- resolution: {integrity: sha512-QofO7i7JycsYOWxe0GFqhLmF6l1TqBswJMvICnRUjqCx8b47MTo46W8AoeQwiokAx3zVryVnxtBMcGcnX12LvA==}
- cpu: [arm64]
- os: [freebsd]
-
'@rollup/rollup-freebsd-arm64@4.57.1':
resolution: {integrity: sha512-R+/WwhsjmwodAcz65guCGFRkMb4gKWTcIeLy60JJQbXrJ97BOXHxnkPFrP+YwFlaS0m+uWJTstrUA9o+UchFug==}
cpu: [arm64]
os: [freebsd]
- '@rollup/rollup-freebsd-x64@4.52.5':
- resolution: {integrity: sha512-jr21b/99ew8ujZubPo9skbrItHEIE50WdV86cdSoRkKtmWa+DDr6fu2c/xyRT0F/WazZpam6kk7IHBerSL7LDQ==}
- cpu: [x64]
- os: [freebsd]
-
'@rollup/rollup-freebsd-x64@4.57.1':
resolution: {integrity: sha512-IEQTCHeiTOnAUC3IDQdzRAGj3jOAYNr9kBguI7MQAAZK3caezRrg0GxAb6Hchg4lxdZEI5Oq3iov/w/hnFWY9Q==}
cpu: [x64]
os: [freebsd]
- '@rollup/rollup-linux-arm-gnueabihf@4.52.5':
- resolution: {integrity: sha512-PsNAbcyv9CcecAUagQefwX8fQn9LQ4nZkpDboBOttmyffnInRy8R8dSg6hxxl2Re5QhHBf6FYIDhIj5v982ATQ==}
- cpu: [arm]
- os: [linux]
-
'@rollup/rollup-linux-arm-gnueabihf@4.57.1':
resolution: {integrity: sha512-F8sWbhZ7tyuEfsmOxwc2giKDQzN3+kuBLPwwZGyVkLlKGdV1nvnNwYD0fKQ8+XS6hp9nY7B+ZeK01EBUE7aHaw==}
cpu: [arm]
os: [linux]
- '@rollup/rollup-linux-arm-musleabihf@4.52.5':
- resolution: {integrity: sha512-Fw4tysRutyQc/wwkmcyoqFtJhh0u31K+Q6jYjeicsGJJ7bbEq8LwPWV/w0cnzOqR2m694/Af6hpFayLJZkG2VQ==}
- cpu: [arm]
- os: [linux]
-
'@rollup/rollup-linux-arm-musleabihf@4.57.1':
resolution: {integrity: sha512-rGfNUfn0GIeXtBP1wL5MnzSj98+PZe/AXaGBCRmT0ts80lU5CATYGxXukeTX39XBKsxzFpEeK+Mrp9faXOlmrw==}
cpu: [arm]
os: [linux]
- '@rollup/rollup-linux-arm64-gnu@4.52.5':
- resolution: {integrity: sha512-a+3wVnAYdQClOTlyapKmyI6BLPAFYs0JM8HRpgYZQO02rMR09ZcV9LbQB+NL6sljzG38869YqThrRnfPMCDtZg==}
- cpu: [arm64]
- os: [linux]
-
'@rollup/rollup-linux-arm64-gnu@4.57.1':
resolution: {integrity: sha512-MMtej3YHWeg/0klK2Qodf3yrNzz6CGjo2UntLvk2RSPlhzgLvYEB3frRvbEF2wRKh1Z2fDIg9KRPe1fawv7C+g==}
cpu: [arm64]
os: [linux]
- '@rollup/rollup-linux-arm64-musl@4.52.5':
- resolution: {integrity: sha512-AvttBOMwO9Pcuuf7m9PkC1PUIKsfaAJ4AYhy944qeTJgQOqJYJ9oVl2nYgY7Rk0mkbsuOpCAYSs6wLYB2Xiw0Q==}
- cpu: [arm64]
- os: [linux]
-
'@rollup/rollup-linux-arm64-musl@4.57.1':
resolution: {integrity: sha512-1a/qhaaOXhqXGpMFMET9VqwZakkljWHLmZOX48R0I/YLbhdxr1m4gtG1Hq7++VhVUmf+L3sTAf9op4JlhQ5u1Q==}
cpu: [arm64]
os: [linux]
- '@rollup/rollup-linux-loong64-gnu@4.52.5':
- resolution: {integrity: sha512-DkDk8pmXQV2wVrF6oq5tONK6UHLz/XcEVow4JTTerdeV1uqPeHxwcg7aFsfnSm9L+OO8WJsWotKM2JJPMWrQtA==}
- cpu: [loong64]
- os: [linux]
-
'@rollup/rollup-linux-loong64-gnu@4.57.1':
resolution: {integrity: sha512-QWO6RQTZ/cqYtJMtxhkRkidoNGXc7ERPbZN7dVW5SdURuLeVU7lwKMpo18XdcmpWYd0qsP1bwKPf7DNSUinhvA==}
cpu: [loong64]
@@ -2334,11 +2141,6 @@ packages:
cpu: [loong64]
os: [linux]
- '@rollup/rollup-linux-ppc64-gnu@4.52.5':
- resolution: {integrity: sha512-W/b9ZN/U9+hPQVvlGwjzi+Wy4xdoH2I8EjaCkMvzpI7wJUs8sWJ03Rq96jRnHkSrcHTpQe8h5Tg3ZzUPGauvAw==}
- cpu: [ppc64]
- os: [linux]
-
'@rollup/rollup-linux-ppc64-gnu@4.57.1':
resolution: {integrity: sha512-4BrCgrpZo4hvzMDKRqEaW1zeecScDCR+2nZ86ATLhAoJ5FQ+lbHVD3ttKe74/c7tNT9c6F2viwB3ufwp01Oh2w==}
cpu: [ppc64]
@@ -2349,51 +2151,26 @@ packages:
cpu: [ppc64]
os: [linux]
- '@rollup/rollup-linux-riscv64-gnu@4.52.5':
- resolution: {integrity: sha512-sjQLr9BW7R/ZiXnQiWPkErNfLMkkWIoCz7YMn27HldKsADEKa5WYdobaa1hmN6slu9oWQbB6/jFpJ+P2IkVrmw==}
- cpu: [riscv64]
- os: [linux]
-
'@rollup/rollup-linux-riscv64-gnu@4.57.1':
resolution: {integrity: sha512-ptA88htVp0AwUUqhVghwDIKlvJMD/fmL/wrQj99PRHFRAG6Z5nbWoWG4o81Nt9FT+IuqUQi+L31ZKAFeJ5Is+A==}
cpu: [riscv64]
os: [linux]
- '@rollup/rollup-linux-riscv64-musl@4.52.5':
- resolution: {integrity: sha512-hq3jU/kGyjXWTvAh2awn8oHroCbrPm8JqM7RUpKjalIRWWXE01CQOf/tUNWNHjmbMHg/hmNCwc/Pz3k1T/j/Lg==}
- cpu: [riscv64]
- os: [linux]
-
'@rollup/rollup-linux-riscv64-musl@4.57.1':
resolution: {integrity: sha512-S51t7aMMTNdmAMPpBg7OOsTdn4tySRQvklmL3RpDRyknk87+Sp3xaumlatU+ppQ+5raY7sSTcC2beGgvhENfuw==}
cpu: [riscv64]
os: [linux]
- '@rollup/rollup-linux-s390x-gnu@4.52.5':
- resolution: {integrity: sha512-gn8kHOrku8D4NGHMK1Y7NA7INQTRdVOntt1OCYypZPRt6skGbddska44K8iocdpxHTMMNui5oH4elPH4QOLrFQ==}
- cpu: [s390x]
- os: [linux]
-
'@rollup/rollup-linux-s390x-gnu@4.57.1':
resolution: {integrity: sha512-Bl00OFnVFkL82FHbEqy3k5CUCKH6OEJL54KCyx2oqsmZnFTR8IoNqBF+mjQVcRCT5sB6yOvK8A37LNm/kPJiZg==}
cpu: [s390x]
os: [linux]
- '@rollup/rollup-linux-x64-gnu@4.52.5':
- resolution: {integrity: sha512-hXGLYpdhiNElzN770+H2nlx+jRog8TyynpTVzdlc6bndktjKWyZyiCsuDAlpd+j+W+WNqfcyAWz9HxxIGfZm1Q==}
- cpu: [x64]
- os: [linux]
-
'@rollup/rollup-linux-x64-gnu@4.57.1':
resolution: {integrity: sha512-ABca4ceT4N+Tv/GtotnWAeXZUZuM/9AQyCyKYyKnpk4yoA7QIAuBt6Hkgpw8kActYlew2mvckXkvx0FfoInnLg==}
cpu: [x64]
os: [linux]
- '@rollup/rollup-linux-x64-musl@4.52.5':
- resolution: {integrity: sha512-arCGIcuNKjBoKAXD+y7XomR9gY6Mw7HnFBv5Rw7wQRvwYLR7gBAgV7Mb2QTyjXfTveBNFAtPt46/36vV9STLNg==}
- cpu: [x64]
- os: [linux]
-
'@rollup/rollup-linux-x64-musl@4.57.1':
resolution: {integrity: sha512-HFps0JeGtuOR2convgRRkHCekD7j+gdAuXM+/i6kGzQtFhlCtQkpwtNzkNj6QhCDp7DRJ7+qC/1Vg2jt5iSOFw==}
cpu: [x64]
@@ -2404,51 +2181,26 @@ packages:
cpu: [x64]
os: [openbsd]
- '@rollup/rollup-openharmony-arm64@4.52.5':
- resolution: {integrity: sha512-QoFqB6+/9Rly/RiPjaomPLmR/13cgkIGfA40LHly9zcH1S0bN2HVFYk3a1eAyHQyjs3ZJYlXvIGtcCs5tko9Cw==}
- cpu: [arm64]
- os: [openharmony]
-
'@rollup/rollup-openharmony-arm64@4.57.1':
resolution: {integrity: sha512-4wYoDpNg6o/oPximyc/NG+mYUejZrCU2q+2w6YZqrAs2UcNUChIZXjtafAiiZSUc7On8v5NyNj34Kzj/Ltk6dQ==}
cpu: [arm64]
os: [openharmony]
- '@rollup/rollup-win32-arm64-msvc@4.52.5':
- resolution: {integrity: sha512-w0cDWVR6MlTstla1cIfOGyl8+qb93FlAVutcor14Gf5Md5ap5ySfQ7R9S/NjNaMLSFdUnKGEasmVnu3lCMqB7w==}
- cpu: [arm64]
- os: [win32]
-
'@rollup/rollup-win32-arm64-msvc@4.57.1':
resolution: {integrity: sha512-O54mtsV/6LW3P8qdTcamQmuC990HDfR71lo44oZMZlXU4tzLrbvTii87Ni9opq60ds0YzuAlEr/GNwuNluZyMQ==}
cpu: [arm64]
os: [win32]
- '@rollup/rollup-win32-ia32-msvc@4.52.5':
- resolution: {integrity: sha512-Aufdpzp7DpOTULJCuvzqcItSGDH73pF3ko/f+ckJhxQyHtp67rHw3HMNxoIdDMUITJESNE6a8uh4Lo4SLouOUg==}
- cpu: [ia32]
- os: [win32]
-
'@rollup/rollup-win32-ia32-msvc@4.57.1':
resolution: {integrity: sha512-P3dLS+IerxCT/7D2q2FYcRdWRl22dNbrbBEtxdWhXrfIMPP9lQhb5h4Du04mdl5Woq05jVCDPCMF7Ub0NAjIew==}
cpu: [ia32]
os: [win32]
- '@rollup/rollup-win32-x64-gnu@4.52.5':
- resolution: {integrity: sha512-UGBUGPFp1vkj6p8wCRraqNhqwX/4kNQPS57BCFc8wYh0g94iVIW33wJtQAx3G7vrjjNtRaxiMUylM0ktp/TRSQ==}
- cpu: [x64]
- os: [win32]
-
'@rollup/rollup-win32-x64-gnu@4.57.1':
resolution: {integrity: sha512-VMBH2eOOaKGtIJYleXsi2B8CPVADrh+TyNxJ4mWPnKfLB/DBUmzW+5m1xUrcwWoMfSLagIRpjUFeW5CO5hyciQ==}
cpu: [x64]
os: [win32]
- '@rollup/rollup-win32-x64-msvc@4.52.5':
- resolution: {integrity: sha512-TAcgQh2sSkykPRWLrdyy2AiceMckNf5loITqXxFI5VuQjS5tSuw3WlwdN8qv8vzjLAUTvYaH/mVjSFpbkFbpTg==}
- cpu: [x64]
- os: [win32]
-
'@rollup/rollup-win32-x64-msvc@4.57.1':
resolution: {integrity: sha512-mxRFDdHIWRxg3UfIIAwCm6NzvxG0jDX/wBN6KsQFTvKFqqg9vTrWUE68qEjHt19A5wwx5X5aUi2zuZT7YR0jrA==}
cpu: [x64]
@@ -3856,11 +3608,6 @@ packages:
resolution: {integrity: sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==}
engines: {node: '>= 0.4'}
- esbuild@0.21.5:
- resolution: {integrity: sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==}
- engines: {node: '>=12'}
- hasBin: true
-
esbuild@0.24.2:
resolution: {integrity: sha512-+9egpBW8I3CD5XPe0n6BfT5fxLzxrlDzqydF3aviG+9ni1lDC/OvMHcxqEFV0+LANZG5R1bFMWfUrjVsdwxJvA==}
engines: {node: '>=18'}
@@ -5873,11 +5620,6 @@ packages:
engines: {node: '>=10.0.0'}
hasBin: true
- rollup@4.52.5:
- resolution: {integrity: sha512-3GuObel8h7Kqdjt0gxkEzaifHTqLVW56Y/bjN7PSQtkKr0w3V/QYSdt6QWYtd7A1xUtYQigtdUfgj1RvWVtorw==}
- engines: {node: '>=18.0.0', npm: '>=8.0.0'}
- hasBin: true
-
rollup@4.57.1:
resolution: {integrity: sha512-oQL6lgK3e2QZeQ7gcgIkS2YZPg5slw37hYufJ3edKlfQSGGm8ICoxswK15ntSzF/a8+h7ekRy7k7oWc3BQ7y8A==}
engines: {node: '>=18.0.0', npm: '>=8.0.0'}
@@ -6721,37 +6463,6 @@ packages:
peerDependencies:
vite: ^5.0.0 || ^6.0.0 || ^7.0.0
- vite@5.4.21:
- resolution: {integrity: sha512-o5a9xKjbtuhY6Bi5S3+HvbRERmouabWbyUcpXXUA1u+GNUKoROi9byOJ8M0nHbHYHkYICiMlqxkg1KkYmm25Sw==}
- engines: {node: ^18.0.0 || >=20.0.0}
- hasBin: true
- peerDependencies:
- '@types/node': ^18.0.0 || >=20.0.0
- less: '*'
- lightningcss: ^1.21.0
- sass: '*'
- sass-embedded: '*'
- stylus: '*'
- sugarss: '*'
- terser: ^5.4.0
- peerDependenciesMeta:
- '@types/node':
- optional: true
- less:
- optional: true
- lightningcss:
- optional: true
- sass:
- optional: true
- sass-embedded:
- optional: true
- stylus:
- optional: true
- sugarss:
- optional: true
- terser:
- optional: true
-
vite@8.0.0-beta.14:
resolution: {integrity: sha512-oLW66oi8tZcoxu6+1HFXb+5hLHco3OnEVu2Awmj5NqEo7vxaqybjBM0BXHcq+jAFhzkMGXJl8xcO5qDBczgKLg==}
engines: {node: ^20.19.0 || >=22.12.0}
@@ -7889,147 +7600,78 @@ snapshots:
esquery: 1.6.0
jsdoc-type-pratt-parser: 4.1.0
- '@esbuild/aix-ppc64@0.21.5':
- optional: true
-
'@esbuild/aix-ppc64@0.24.2':
optional: true
- '@esbuild/android-arm64@0.21.5':
- optional: true
-
'@esbuild/android-arm64@0.24.2':
optional: true
- '@esbuild/android-arm@0.21.5':
- optional: true
-
'@esbuild/android-arm@0.24.2':
optional: true
- '@esbuild/android-x64@0.21.5':
- optional: true
-
'@esbuild/android-x64@0.24.2':
optional: true
- '@esbuild/darwin-arm64@0.21.5':
- optional: true
-
'@esbuild/darwin-arm64@0.24.2':
optional: true
- '@esbuild/darwin-x64@0.21.5':
- optional: true
-
'@esbuild/darwin-x64@0.24.2':
optional: true
- '@esbuild/freebsd-arm64@0.21.5':
- optional: true
-
'@esbuild/freebsd-arm64@0.24.2':
optional: true
- '@esbuild/freebsd-x64@0.21.5':
- optional: true
-
'@esbuild/freebsd-x64@0.24.2':
optional: true
- '@esbuild/linux-arm64@0.21.5':
- optional: true
-
'@esbuild/linux-arm64@0.24.2':
optional: true
- '@esbuild/linux-arm@0.21.5':
- optional: true
-
'@esbuild/linux-arm@0.24.2':
optional: true
- '@esbuild/linux-ia32@0.21.5':
- optional: true
-
'@esbuild/linux-ia32@0.24.2':
optional: true
- '@esbuild/linux-loong64@0.21.5':
- optional: true
-
'@esbuild/linux-loong64@0.24.2':
optional: true
- '@esbuild/linux-mips64el@0.21.5':
- optional: true
-
'@esbuild/linux-mips64el@0.24.2':
optional: true
- '@esbuild/linux-ppc64@0.21.5':
- optional: true
-
'@esbuild/linux-ppc64@0.24.2':
optional: true
- '@esbuild/linux-riscv64@0.21.5':
- optional: true
-
'@esbuild/linux-riscv64@0.24.2':
optional: true
- '@esbuild/linux-s390x@0.21.5':
- optional: true
-
'@esbuild/linux-s390x@0.24.2':
optional: true
- '@esbuild/linux-x64@0.21.5':
- optional: true
-
'@esbuild/linux-x64@0.24.2':
optional: true
'@esbuild/netbsd-arm64@0.24.2':
optional: true
- '@esbuild/netbsd-x64@0.21.5':
- optional: true
-
'@esbuild/netbsd-x64@0.24.2':
optional: true
'@esbuild/openbsd-arm64@0.24.2':
optional: true
- '@esbuild/openbsd-x64@0.21.5':
- optional: true
-
'@esbuild/openbsd-x64@0.24.2':
optional: true
- '@esbuild/sunos-x64@0.21.5':
- optional: true
-
'@esbuild/sunos-x64@0.24.2':
optional: true
- '@esbuild/win32-arm64@0.21.5':
- optional: true
-
'@esbuild/win32-arm64@0.24.2':
optional: true
- '@esbuild/win32-ia32@0.21.5':
- optional: true
-
'@esbuild/win32-ia32@0.24.2':
optional: true
- '@esbuild/win32-x64@0.21.5':
- optional: true
-
'@esbuild/win32-x64@0.24.2':
optional: true
@@ -8795,144 +8437,78 @@ snapshots:
optionalDependencies:
rollup: 2.79.2
- '@rollup/rollup-android-arm-eabi@4.52.5':
- optional: true
-
'@rollup/rollup-android-arm-eabi@4.57.1':
optional: true
- '@rollup/rollup-android-arm64@4.52.5':
- optional: true
-
'@rollup/rollup-android-arm64@4.57.1':
optional: true
- '@rollup/rollup-darwin-arm64@4.52.5':
- optional: true
-
'@rollup/rollup-darwin-arm64@4.57.1':
optional: true
- '@rollup/rollup-darwin-x64@4.52.5':
- optional: true
-
'@rollup/rollup-darwin-x64@4.57.1':
optional: true
- '@rollup/rollup-freebsd-arm64@4.52.5':
- optional: true
-
'@rollup/rollup-freebsd-arm64@4.57.1':
optional: true
- '@rollup/rollup-freebsd-x64@4.52.5':
- optional: true
-
'@rollup/rollup-freebsd-x64@4.57.1':
optional: true
- '@rollup/rollup-linux-arm-gnueabihf@4.52.5':
- optional: true
-
'@rollup/rollup-linux-arm-gnueabihf@4.57.1':
optional: true
- '@rollup/rollup-linux-arm-musleabihf@4.52.5':
- optional: true
-
'@rollup/rollup-linux-arm-musleabihf@4.57.1':
optional: true
- '@rollup/rollup-linux-arm64-gnu@4.52.5':
- optional: true
-
'@rollup/rollup-linux-arm64-gnu@4.57.1':
optional: true
- '@rollup/rollup-linux-arm64-musl@4.52.5':
- optional: true
-
'@rollup/rollup-linux-arm64-musl@4.57.1':
optional: true
- '@rollup/rollup-linux-loong64-gnu@4.52.5':
- optional: true
-
'@rollup/rollup-linux-loong64-gnu@4.57.1':
optional: true
'@rollup/rollup-linux-loong64-musl@4.57.1':
optional: true
- '@rollup/rollup-linux-ppc64-gnu@4.52.5':
- optional: true
-
'@rollup/rollup-linux-ppc64-gnu@4.57.1':
optional: true
'@rollup/rollup-linux-ppc64-musl@4.57.1':
optional: true
- '@rollup/rollup-linux-riscv64-gnu@4.52.5':
- optional: true
-
'@rollup/rollup-linux-riscv64-gnu@4.57.1':
optional: true
- '@rollup/rollup-linux-riscv64-musl@4.52.5':
- optional: true
-
'@rollup/rollup-linux-riscv64-musl@4.57.1':
optional: true
- '@rollup/rollup-linux-s390x-gnu@4.52.5':
- optional: true
-
'@rollup/rollup-linux-s390x-gnu@4.57.1':
optional: true
- '@rollup/rollup-linux-x64-gnu@4.52.5':
- optional: true
-
'@rollup/rollup-linux-x64-gnu@4.57.1':
optional: true
- '@rollup/rollup-linux-x64-musl@4.52.5':
- optional: true
-
'@rollup/rollup-linux-x64-musl@4.57.1':
optional: true
'@rollup/rollup-openbsd-x64@4.57.1':
optional: true
- '@rollup/rollup-openharmony-arm64@4.52.5':
- optional: true
-
'@rollup/rollup-openharmony-arm64@4.57.1':
optional: true
- '@rollup/rollup-win32-arm64-msvc@4.52.5':
- optional: true
-
'@rollup/rollup-win32-arm64-msvc@4.57.1':
optional: true
- '@rollup/rollup-win32-ia32-msvc@4.52.5':
- optional: true
-
'@rollup/rollup-win32-ia32-msvc@4.57.1':
optional: true
- '@rollup/rollup-win32-x64-gnu@4.52.5':
- optional: true
-
'@rollup/rollup-win32-x64-gnu@4.57.1':
optional: true
- '@rollup/rollup-win32-x64-msvc@4.52.5':
- optional: true
-
'@rollup/rollup-win32-x64-msvc@4.57.1':
optional: true
@@ -10664,32 +10240,6 @@ snapshots:
is-date-object: 1.1.0
is-symbol: 1.1.1
- esbuild@0.21.5:
- optionalDependencies:
- '@esbuild/aix-ppc64': 0.21.5
- '@esbuild/android-arm': 0.21.5
- '@esbuild/android-arm64': 0.21.5
- '@esbuild/android-x64': 0.21.5
- '@esbuild/darwin-arm64': 0.21.5
- '@esbuild/darwin-x64': 0.21.5
- '@esbuild/freebsd-arm64': 0.21.5
- '@esbuild/freebsd-x64': 0.21.5
- '@esbuild/linux-arm': 0.21.5
- '@esbuild/linux-arm64': 0.21.5
- '@esbuild/linux-ia32': 0.21.5
- '@esbuild/linux-loong64': 0.21.5
- '@esbuild/linux-mips64el': 0.21.5
- '@esbuild/linux-ppc64': 0.21.5
- '@esbuild/linux-riscv64': 0.21.5
- '@esbuild/linux-s390x': 0.21.5
- '@esbuild/linux-x64': 0.21.5
- '@esbuild/netbsd-x64': 0.21.5
- '@esbuild/openbsd-x64': 0.21.5
- '@esbuild/sunos-x64': 0.21.5
- '@esbuild/win32-arm64': 0.21.5
- '@esbuild/win32-ia32': 0.21.5
- '@esbuild/win32-x64': 0.21.5
-
esbuild@0.24.2:
optionalDependencies:
'@esbuild/aix-ppc64': 0.24.2
@@ -12855,34 +12405,6 @@ snapshots:
optionalDependencies:
fsevents: 2.3.3
- rollup@4.52.5:
- dependencies:
- '@types/estree': 1.0.8
- optionalDependencies:
- '@rollup/rollup-android-arm-eabi': 4.52.5
- '@rollup/rollup-android-arm64': 4.52.5
- '@rollup/rollup-darwin-arm64': 4.52.5
- '@rollup/rollup-darwin-x64': 4.52.5
- '@rollup/rollup-freebsd-arm64': 4.52.5
- '@rollup/rollup-freebsd-x64': 4.52.5
- '@rollup/rollup-linux-arm-gnueabihf': 4.52.5
- '@rollup/rollup-linux-arm-musleabihf': 4.52.5
- '@rollup/rollup-linux-arm64-gnu': 4.52.5
- '@rollup/rollup-linux-arm64-musl': 4.52.5
- '@rollup/rollup-linux-loong64-gnu': 4.52.5
- '@rollup/rollup-linux-ppc64-gnu': 4.52.5
- '@rollup/rollup-linux-riscv64-gnu': 4.52.5
- '@rollup/rollup-linux-riscv64-musl': 4.52.5
- '@rollup/rollup-linux-s390x-gnu': 4.52.5
- '@rollup/rollup-linux-x64-gnu': 4.52.5
- '@rollup/rollup-linux-x64-musl': 4.52.5
- '@rollup/rollup-openharmony-arm64': 4.52.5
- '@rollup/rollup-win32-arm64-msvc': 4.52.5
- '@rollup/rollup-win32-ia32-msvc': 4.52.5
- '@rollup/rollup-win32-x64-gnu': 4.52.5
- '@rollup/rollup-win32-x64-msvc': 4.52.5
- fsevents: 2.3.3
-
rollup@4.57.1:
dependencies:
'@types/estree': 1.0.8
@@ -13801,7 +13323,7 @@ snapshots:
transitivePeerDependencies:
- supports-color
- vite-plugin-dts@4.5.4(@types/node@20.19.9)(rollup@4.57.1)(typescript@5.9.2)(vite@5.4.21(@types/node@20.19.9)(lightningcss@1.31.1)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.46.0)):
+ vite-plugin-dts@4.5.4(@types/node@20.19.9)(rollup@4.57.1)(typescript@5.9.2)(vite@8.0.0-beta.14(@types/node@20.19.9)(jiti@1.21.7)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.46.0)(yaml@2.8.0)):
dependencies:
'@microsoft/api-extractor': 7.52.10(@types/node@20.19.9)
'@rollup/pluginutils': 5.2.0(rollup@4.57.1)
@@ -13814,13 +13336,13 @@ snapshots:
magic-string: 0.30.17
typescript: 5.9.2
optionalDependencies:
- vite: 5.4.21(@types/node@20.19.9)(lightningcss@1.31.1)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.46.0)
+ vite: 8.0.0-beta.14(@types/node@20.19.9)(jiti@1.21.7)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.46.0)(yaml@2.8.0)
transitivePeerDependencies:
- '@types/node'
- rollup
- supports-color
- vite-plugin-dts@4.5.4(@types/node@22.17.0)(rollup@4.57.1)(typescript@5.9.2)(vite@5.4.21(@types/node@22.17.0)(lightningcss@1.31.1)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.46.0)):
+ vite-plugin-dts@4.5.4(@types/node@22.17.0)(rollup@4.57.1)(typescript@5.9.2)(vite@8.0.0-beta.14(@types/node@22.17.0)(jiti@1.21.7)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.46.0)(yaml@2.8.0)):
dependencies:
'@microsoft/api-extractor': 7.52.10(@types/node@22.17.0)
'@rollup/pluginutils': 5.2.0(rollup@4.57.1)
@@ -13833,7 +13355,7 @@ snapshots:
magic-string: 0.30.17
typescript: 5.9.2
optionalDependencies:
- vite: 5.4.21(@types/node@22.17.0)(lightningcss@1.31.1)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.46.0)
+ vite: 8.0.0-beta.14(@types/node@22.17.0)(jiti@1.21.7)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.46.0)(yaml@2.8.0)
transitivePeerDependencies:
- '@types/node'
- rollup
@@ -13892,31 +13414,41 @@ snapshots:
tinyglobby: 0.2.15
vite: 8.0.0-beta.14(@types/node@25.0.3)(esbuild@0.24.2)(jiti@1.21.7)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.46.0)(yaml@2.8.0)
- vite@5.4.21(@types/node@20.19.9)(lightningcss@1.31.1)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.46.0):
+ vite@8.0.0-beta.14(@types/node@20.19.9)(jiti@1.21.7)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.46.0)(yaml@2.8.0):
dependencies:
- esbuild: 0.21.5
+ '@oxc-project/runtime': 0.113.0
+ fdir: 6.5.0(picomatch@4.0.3)
+ lightningcss: 1.31.1
+ picomatch: 4.0.3
postcss: 8.5.6
- rollup: 4.52.5
+ rolldown: 1.0.0-rc.4
+ tinyglobby: 0.2.15
optionalDependencies:
'@types/node': 20.19.9
fsevents: 2.3.3
- lightningcss: 1.31.1
+ jiti: 1.21.7
sass: 1.93.3
sass-embedded: 1.93.3
terser: 5.46.0
+ yaml: 2.8.0
- vite@5.4.21(@types/node@22.17.0)(lightningcss@1.31.1)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.46.0):
+ vite@8.0.0-beta.14(@types/node@22.17.0)(jiti@1.21.7)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.46.0)(yaml@2.8.0):
dependencies:
- esbuild: 0.21.5
+ '@oxc-project/runtime': 0.113.0
+ fdir: 6.5.0(picomatch@4.0.3)
+ lightningcss: 1.31.1
+ picomatch: 4.0.3
postcss: 8.5.6
- rollup: 4.52.5
+ rolldown: 1.0.0-rc.4
+ tinyglobby: 0.2.15
optionalDependencies:
'@types/node': 22.17.0
fsevents: 2.3.3
- lightningcss: 1.31.1
+ jiti: 1.21.7
sass: 1.93.3
sass-embedded: 1.93.3
terser: 5.46.0
+ yaml: 2.8.0
vite@8.0.0-beta.14(@types/node@25.0.3)(esbuild@0.24.2)(jiti@1.21.7)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.46.0)(yaml@2.8.0):
dependencies:
From f4c74902638003fb19ffc87730573715487823b5 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?nicole=20miko=C5=82ajczyk?=
Date: Sun, 15 Feb 2026 00:40:44 +0100
Subject: [PATCH 08/74] nicolium: probably a fix
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Signed-off-by: nicole mikołajczyk
---
packages/pl-api/.eslintrc.json | 5 +-
packages/pl-api/package.json | 9 +-
packages/pl-fe/package.json | 2 +-
.../pl-fe/src/build-config-compiletime.ts | 39 ----
packages/pl-fe/src/build-config.ts | 9 +-
packages/pl-fe/vite.config.ts | 6 +-
pnpm-lock.yaml | 221 +++++++++++++++++-
7 files changed, 230 insertions(+), 61 deletions(-)
delete mode 100644 packages/pl-fe/src/build-config-compiletime.ts
diff --git a/packages/pl-api/.eslintrc.json b/packages/pl-api/.eslintrc.json
index 6bf945a6e..d3d44b71f 100644
--- a/packages/pl-api/.eslintrc.json
+++ b/packages/pl-api/.eslintrc.json
@@ -50,10 +50,7 @@
"ResizeObserver",
"URL",
"URLSearchParams"
- ],
- "tailwindcss": {
- "config": "tailwind.config.ts"
- }
+ ]
},
"rules": {
"brace-style": "error",
diff --git a/packages/pl-api/package.json b/packages/pl-api/package.json
index 9717800b4..525831e38 100644
--- a/packages/pl-api/package.json
+++ b/packages/pl-api/package.json
@@ -15,7 +15,8 @@
"build": "vite build",
"watch": "vite build --watch",
"preview": "vite preview",
- "lint": "npx eslint --ext .js,.jsx,.cjs,.mjs,.ts,.tsx . --cache"
+ "lint": "oxlint",
+ "precommit": "lint-staged"
},
"license": "AGPL-3.0-or-later",
"devDependencies": {
@@ -32,6 +33,7 @@
"eslint-plugin-compat": "6.0.2",
"eslint-plugin-import": "^2.31.0",
"eslint-plugin-promise": "^7.2.1",
+ "oxlint": "^1.47.0",
"typedoc": "^0.28.7",
"typedoc-material-theme": "^1.4.0",
"typedoc-plugin-valibot": "^1.0.0",
@@ -55,5 +57,8 @@
"types": "dist/main.d.ts",
"files": [
"dist"
- ]
+ ],
+ "lint-staged": {
+ "*.{js,cjs,mjs,ts,tsx}": "pnpm run lint"
+ }
}
diff --git a/packages/pl-fe/package.json b/packages/pl-fe/package.json
index af0e933a0..b85b2ccb3 100644
--- a/packages/pl-fe/package.json
+++ b/packages/pl-fe/package.json
@@ -98,7 +98,7 @@
"lexical": "^0.39.0",
"line-awesome": "^1.3.0",
"localforage": "^1.10.0",
- "lodash": "^4.17.23",
+ "lodash-es": "^4.17.23",
"mini-css-extract-plugin": "^2.9.4",
"mutative": "^1.3.0",
"path-browserify": "^1.0.1",
diff --git a/packages/pl-fe/src/build-config-compiletime.ts b/packages/pl-fe/src/build-config-compiletime.ts
deleted file mode 100644
index 452bc0f63..000000000
--- a/packages/pl-fe/src/build-config-compiletime.ts
+++ /dev/null
@@ -1,39 +0,0 @@
-/**
- * Build config: configuration set at build time.
- * @module pl-fe/build-config
- */
-
-// eslint-disable-next-line import/extensions
-import trim from 'lodash/trim.js';
-// eslint-disable-next-line import/extensions
-import trimEnd from 'lodash/trimEnd.js';
-
-const {
- NODE_ENV,
- BACKEND_URL,
- FE_SUBDIRECTORY,
- WITH_LANDING_PAGE,
-} = process.env;
-
-const sanitizeURL = (url: string | undefined = ''): string => {
- try {
- return trimEnd(new URL(url).toString(), '/');
- } catch {
- return '';
- }
-};
-
-const sanitizeBasename = (path: string | undefined = ''): string => `/${trim(path, '/')}`;
-
-const env = {
- NODE_ENV: NODE_ENV || 'development',
- BACKEND_URL: sanitizeURL(BACKEND_URL),
- FE_SUBDIRECTORY: sanitizeBasename(FE_SUBDIRECTORY),
- WITH_LANDING_PAGE: WITH_LANDING_PAGE === 'true',
-};
-
-export type PlFeEnv = typeof env;
-
-export default () => ({
- data: env,
-});
diff --git a/packages/pl-fe/src/build-config.ts b/packages/pl-fe/src/build-config.ts
index 448b407fc..c9416a059 100644
--- a/packages/pl-fe/src/build-config.ts
+++ b/packages/pl-fe/src/build-config.ts
@@ -3,11 +3,6 @@
* @module pl-fe/build-config
*/
-// eslint-disable-next-line import/extensions
-import trim from 'lodash/trim.js';
-// eslint-disable-next-line import/extensions
-import trimEnd from 'lodash/trimEnd.js';
-
const env = compileTime(() => {
const {
NODE_ENV,
@@ -18,13 +13,13 @@ const env = compileTime(() => {
const sanitizeURL = (url: string | undefined = ''): string => {
try {
- return trimEnd(new URL(url).toString(), '/');
+ return new URL(url).toString().replace(/\/+$/, '');
} catch {
return '';
}
};
- const sanitizeBasename = (path: string | undefined = ''): string => `/${trim(path, '/')}`;
+ const sanitizeBasename = (path: string | undefined = ''): string => `/${path.replace(/^\/+|\/+$/g, '')}`;
return {
NODE_ENV: NODE_ENV || 'development',
diff --git a/packages/pl-fe/vite.config.ts b/packages/pl-fe/vite.config.ts
index ec0e97947..7299eb968 100644
--- a/packages/pl-fe/vite.config.ts
+++ b/packages/pl-fe/vite.config.ts
@@ -12,7 +12,7 @@ import { VitePWA } from 'vite-plugin-pwa';
import vitePluginRequire from 'vite-plugin-require';
import { viteStaticCopy } from 'vite-plugin-static-copy';
-const config = defineConfig(({ command }) => ({
+const config = defineConfig(() => ({
build: {
assetsDir: 'packs',
assetsInlineLimit: 0,
@@ -176,6 +176,10 @@ const config = defineConfig(({ command }) => ({
find: '@/',
replacement: fileURLToPath(new URL('./src/', import.meta.url)),
},
+ {
+ find: 'lodash',
+ replacement: 'lodash-es',
+ },
],
dedupe: ['@floating-ui/react', 'tabbable', 'query-string', 'valibot'],
},
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index c523169c3..cac6d549f 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -91,6 +91,9 @@ importers:
eslint-plugin-promise:
specifier: ^7.2.1
version: 7.2.1(eslint@8.57.1)
+ oxlint:
+ specifier: ^1.47.0
+ version: 1.47.0
typedoc:
specifier: ^0.28.7
version: 0.28.9(typescript@5.9.2)
@@ -304,7 +307,7 @@ importers:
localforage:
specifier: ^1.10.0
version: 1.10.0
- lodash:
+ lodash-es:
specifier: ^4.17.23
version: 4.17.23
mini-css-extract-plugin:
@@ -520,7 +523,7 @@ importers:
version: 8.0.0-beta.14(@types/node@25.0.3)(esbuild@0.24.2)(jiti@1.21.7)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.46.0)(yaml@2.8.0)
vite-plugin-checker:
specifier: ^0.12.0
- version: 0.12.0(eslint@8.57.1)(meow@13.2.0)(optionator@0.9.4)(stylelint@16.23.0(typescript@5.7.3))(typescript@5.7.3)(vite@8.0.0-beta.14(@types/node@25.0.3)(esbuild@0.24.2)(jiti@1.21.7)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.46.0)(yaml@2.8.0))
+ version: 0.12.0(eslint@8.57.1)(meow@13.2.0)(optionator@0.9.4)(oxlint@1.47.0)(stylelint@16.23.0(typescript@5.7.3))(typescript@5.7.3)(vite@8.0.0-beta.14(@types/node@25.0.3)(esbuild@0.24.2)(jiti@1.21.7)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.46.0)(yaml@2.8.0))
vite-plugin-compile-time:
specifier: ^0.4.6
version: 0.4.6(vite@8.0.0-beta.14(@types/node@25.0.3)(esbuild@0.24.2)(jiti@1.21.7)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.46.0)(yaml@2.8.0))
@@ -1750,6 +1753,120 @@ packages:
'@oxc-project/types@0.113.0':
resolution: {integrity: sha512-Tp3XmgxwNQ9pEN9vxgJBAqdRamHibi76iowQ38O2I4PMpcvNRQNVsU2n1x1nv9yh0XoTrGFzf7cZSGxmixxrhA==}
+ '@oxlint/binding-android-arm-eabi@1.47.0':
+ resolution: {integrity: sha512-UHqo3te9K/fh29brCuQdHjN+kfpIi9cnTPABuD5S9wb9ykXYRGTOOMVuSV/CK43sOhU4wwb2nT1RVjcbrrQjFw==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm]
+ os: [android]
+
+ '@oxlint/binding-android-arm64@1.47.0':
+ resolution: {integrity: sha512-xh02lsTF1TAkR+SZrRMYHR/xCx8Wg2MAHxJNdHVpAKELh9/yE9h4LJeqAOBbIb3YYn8o/D97U9VmkvkfJfrHfw==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm64]
+ os: [android]
+
+ '@oxlint/binding-darwin-arm64@1.47.0':
+ resolution: {integrity: sha512-OSOfNJqabOYbkyQDGT5pdoL+05qgyrmlQrvtCO58M4iKGEQ/xf3XkkKj7ws+hO+k8Y4VF4zGlBsJlwqy7qBcHA==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm64]
+ os: [darwin]
+
+ '@oxlint/binding-darwin-x64@1.47.0':
+ resolution: {integrity: sha512-hP2bOI4IWNS+F6pVXWtRshSTuJ1qCRZgDgVUg6EBUqsRy+ExkEPJkx+YmIuxgdCduYK1LKptLNFuQLJP8voPbQ==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [x64]
+ os: [darwin]
+
+ '@oxlint/binding-freebsd-x64@1.47.0':
+ resolution: {integrity: sha512-F55jIEH5xmGu7S661Uho8vGiLFk0bY3A/g4J8CTKiLJnYu/PSMZ2WxFoy5Hji6qvFuujrrM9Q8XXbMO0fKOYPg==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [x64]
+ os: [freebsd]
+
+ '@oxlint/binding-linux-arm-gnueabihf@1.47.0':
+ resolution: {integrity: sha512-wxmOn/wns/WKPXUC1fo5mu9pMZPVOu8hsynaVDrgmmXMdHKS7on6bA5cPauFFN9tJXNdsjW26AK9lpfu3IfHBQ==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm]
+ os: [linux]
+
+ '@oxlint/binding-linux-arm-musleabihf@1.47.0':
+ resolution: {integrity: sha512-KJTmVIA/GqRlM2K+ZROH30VMdydEU7bDTY35fNg3tOPzQRIs2deLZlY/9JWwdWo1F/9mIYmpbdCmPqtKhWNOPg==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm]
+ os: [linux]
+
+ '@oxlint/binding-linux-arm64-gnu@1.47.0':
+ resolution: {integrity: sha512-PF7ELcFg1GVlS0X0ZB6aWiXobjLrAKer3T8YEkwIoO8RwWiAMkL3n3gbleg895BuZkHVlJ2kPRUwfrhHrVkD1A==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm64]
+ os: [linux]
+
+ '@oxlint/binding-linux-arm64-musl@1.47.0':
+ resolution: {integrity: sha512-4BezLRO5cu0asf0Jp1gkrnn2OHiXrPPPEfBTxq1k5/yJ2zdGGTmZxHD2KF2voR23wb8Elyu3iQawXo7wvIZq0Q==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm64]
+ os: [linux]
+
+ '@oxlint/binding-linux-ppc64-gnu@1.47.0':
+ resolution: {integrity: sha512-aI5ds9jq2CPDOvjeapiIj48T/vlWp+f4prkxs+FVzrmVN9BWIj0eqeJ/hV8WgXg79HVMIz9PU6deI2ki09bR1w==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [ppc64]
+ os: [linux]
+
+ '@oxlint/binding-linux-riscv64-gnu@1.47.0':
+ resolution: {integrity: sha512-mO7ycp9Elvgt5EdGkQHCwJA6878xvo9tk+vlMfT1qg++UjvOMB8INsOCQIOH2IKErF/8/P21LULkdIrocMw9xA==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [riscv64]
+ os: [linux]
+
+ '@oxlint/binding-linux-riscv64-musl@1.47.0':
+ resolution: {integrity: sha512-24D0wsYT/7hDFn3Ow32m3/+QT/1ZwrUhShx4/wRDAmz11GQHOZ1k+/HBuK/MflebdnalmXWITcPEy4BWTi7TCA==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [riscv64]
+ os: [linux]
+
+ '@oxlint/binding-linux-s390x-gnu@1.47.0':
+ resolution: {integrity: sha512-8tPzPne882mtML/uy3mApvdCyuVOpthJ7xUv3b67gVfz63hOOM/bwO0cysSkPyYYFDFRn6/FnUb7Jhmsesntvg==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [s390x]
+ os: [linux]
+
+ '@oxlint/binding-linux-x64-gnu@1.47.0':
+ resolution: {integrity: sha512-q58pIyGIzeffEBhEgbRxLFHmHfV9m7g1RnkLiahQuEvyjKNiJcvdHOwKH2BdgZxdzc99Cs6hF5xTa86X40WzPw==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [x64]
+ os: [linux]
+
+ '@oxlint/binding-linux-x64-musl@1.47.0':
+ resolution: {integrity: sha512-e7DiLZtETZUCwTa4EEHg9G+7g3pY+afCWXvSeMG7m0TQ29UHHxMARPaEQUE4mfKgSqIWnJaUk2iZzRPMRdga5g==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [x64]
+ os: [linux]
+
+ '@oxlint/binding-openharmony-arm64@1.47.0':
+ resolution: {integrity: sha512-3AFPfQ0WKMleT/bKd7zsks3xoawtZA6E/wKf0DjwysH7wUiMMJkNKXOzYq1R/00G98JFgSU1AkrlOQrSdNNhlg==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm64]
+ os: [openharmony]
+
+ '@oxlint/binding-win32-arm64-msvc@1.47.0':
+ resolution: {integrity: sha512-cLMVVM6TBxp+N7FldQJ2GQnkcLYEPGgiuEaXdvhgvSgODBk9ov3jed+khIXSAWtnFOW0wOnG3RjwqPh0rCuheA==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm64]
+ os: [win32]
+
+ '@oxlint/binding-win32-ia32-msvc@1.47.0':
+ resolution: {integrity: sha512-VpFOSzvTnld77/Edje3ZdHgZWnlTb5nVWXyTgjD3/DKF/6t5bRRbwn3z77zOdnGy44xAMvbyAwDNOSeOdVUmRA==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [ia32]
+ os: [win32]
+
+ '@oxlint/binding-win32-x64-msvc@1.47.0':
+ resolution: {integrity: sha512-+q8IWptxXx2HMTM6JluR67284t0h8X/oHJgqpxH1siowxPMqZeIpAcWCUq+tY+Rv2iQK8TUugjZnSBQAVV5CmA==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [x64]
+ os: [win32]
+
'@parcel/watcher-android-arm64@2.5.1':
resolution: {integrity: sha512-KF8+j9nNbUN8vzOFDpRMsaKBHZ/mcjEjMToVMJOhTozkDonQFFrRcfdLWn6yWKCmJKmdVxSgHiYvTCef4/qcBA==}
engines: {node: '>= 10.0.0'}
@@ -4641,8 +4758,8 @@ packages:
resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==}
engines: {node: '>=10'}
- lodash-es@4.17.21:
- resolution: {integrity: sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==}
+ lodash-es@4.17.23:
+ resolution: {integrity: sha512-kVI48u3PZr38HdYz98UmfPnXl2DXrpdctLrFLCd3kOx1xUkOmpFPx7gCWWM5MPkL/fD8zb+Ph0QzjGFs4+hHWg==}
lodash.castarray@4.4.0:
resolution: {integrity: sha512-aVx8ztPv7/2ULbArGJ2Y42bG1mEQ5mGjpdvrbJcJFU3TbYybe+QlLS4pst9zV52ymy2in1KpFPiZnAOATxD4+Q==}
@@ -4926,6 +5043,16 @@ packages:
resolution: {integrity: sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==}
engines: {node: '>= 0.4'}
+ oxlint@1.47.0:
+ resolution: {integrity: sha512-v7xkK1iv1qdvTxJGclM97QzN8hHs5816AneFAQ0NGji1BMUquhiDAhXpMwp8+ls16uRVJtzVHxP9pAAXblDeGA==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ hasBin: true
+ peerDependencies:
+ oxlint-tsgolint: '>=0.11.2'
+ peerDependenciesMeta:
+ oxlint-tsgolint:
+ optional: true
+
p-limit@2.3.0:
resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==}
engines: {node: '>=6'}
@@ -8151,6 +8278,63 @@ snapshots:
'@oxc-project/types@0.113.0': {}
+ '@oxlint/binding-android-arm-eabi@1.47.0':
+ optional: true
+
+ '@oxlint/binding-android-arm64@1.47.0':
+ optional: true
+
+ '@oxlint/binding-darwin-arm64@1.47.0':
+ optional: true
+
+ '@oxlint/binding-darwin-x64@1.47.0':
+ optional: true
+
+ '@oxlint/binding-freebsd-x64@1.47.0':
+ optional: true
+
+ '@oxlint/binding-linux-arm-gnueabihf@1.47.0':
+ optional: true
+
+ '@oxlint/binding-linux-arm-musleabihf@1.47.0':
+ optional: true
+
+ '@oxlint/binding-linux-arm64-gnu@1.47.0':
+ optional: true
+
+ '@oxlint/binding-linux-arm64-musl@1.47.0':
+ optional: true
+
+ '@oxlint/binding-linux-ppc64-gnu@1.47.0':
+ optional: true
+
+ '@oxlint/binding-linux-riscv64-gnu@1.47.0':
+ optional: true
+
+ '@oxlint/binding-linux-riscv64-musl@1.47.0':
+ optional: true
+
+ '@oxlint/binding-linux-s390x-gnu@1.47.0':
+ optional: true
+
+ '@oxlint/binding-linux-x64-gnu@1.47.0':
+ optional: true
+
+ '@oxlint/binding-linux-x64-musl@1.47.0':
+ optional: true
+
+ '@oxlint/binding-openharmony-arm64@1.47.0':
+ optional: true
+
+ '@oxlint/binding-win32-arm64-msvc@1.47.0':
+ optional: true
+
+ '@oxlint/binding-win32-ia32-msvc@1.47.0':
+ optional: true
+
+ '@oxlint/binding-win32-x64-msvc@1.47.0':
+ optional: true
+
'@parcel/watcher-android-arm64@2.5.1':
optional: true
@@ -11483,7 +11667,7 @@ snapshots:
dependencies:
p-locate: 5.0.0
- lodash-es@4.17.21: {}
+ lodash-es@4.17.23: {}
lodash.castarray@4.4.0: {}
@@ -11753,6 +11937,28 @@ snapshots:
object-keys: 1.1.1
safe-push-apply: 1.0.0
+ oxlint@1.47.0:
+ optionalDependencies:
+ '@oxlint/binding-android-arm-eabi': 1.47.0
+ '@oxlint/binding-android-arm64': 1.47.0
+ '@oxlint/binding-darwin-arm64': 1.47.0
+ '@oxlint/binding-darwin-x64': 1.47.0
+ '@oxlint/binding-freebsd-x64': 1.47.0
+ '@oxlint/binding-linux-arm-gnueabihf': 1.47.0
+ '@oxlint/binding-linux-arm-musleabihf': 1.47.0
+ '@oxlint/binding-linux-arm64-gnu': 1.47.0
+ '@oxlint/binding-linux-arm64-musl': 1.47.0
+ '@oxlint/binding-linux-ppc64-gnu': 1.47.0
+ '@oxlint/binding-linux-riscv64-gnu': 1.47.0
+ '@oxlint/binding-linux-riscv64-musl': 1.47.0
+ '@oxlint/binding-linux-s390x-gnu': 1.47.0
+ '@oxlint/binding-linux-x64-gnu': 1.47.0
+ '@oxlint/binding-linux-x64-musl': 1.47.0
+ '@oxlint/binding-openharmony-arm64': 1.47.0
+ '@oxlint/binding-win32-arm64-msvc': 1.47.0
+ '@oxlint/binding-win32-ia32-msvc': 1.47.0
+ '@oxlint/binding-win32-x64-msvc': 1.47.0
+
p-limit@2.3.0:
dependencies:
p-try: 2.2.0
@@ -12115,7 +12321,7 @@ snapshots:
dependencies:
'@icons/material': 0.2.4(react@19.2.3)
lodash: 4.17.23
- lodash-es: 4.17.21
+ lodash-es: 4.17.23
material-colors: 1.2.6
prop-types: 15.8.1
react: 19.2.3
@@ -13290,7 +13496,7 @@ snapshots:
varint@6.0.0: {}
- vite-plugin-checker@0.12.0(eslint@8.57.1)(meow@13.2.0)(optionator@0.9.4)(stylelint@16.23.0(typescript@5.7.3))(typescript@5.7.3)(vite@8.0.0-beta.14(@types/node@25.0.3)(esbuild@0.24.2)(jiti@1.21.7)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.46.0)(yaml@2.8.0)):
+ vite-plugin-checker@0.12.0(eslint@8.57.1)(meow@13.2.0)(optionator@0.9.4)(oxlint@1.47.0)(stylelint@16.23.0(typescript@5.7.3))(typescript@5.7.3)(vite@8.0.0-beta.14(@types/node@25.0.3)(esbuild@0.24.2)(jiti@1.21.7)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.46.0)(yaml@2.8.0)):
dependencies:
'@babel/code-frame': 7.29.0
chokidar: 4.0.3
@@ -13305,6 +13511,7 @@ snapshots:
eslint: 8.57.1
meow: 13.2.0
optionator: 0.9.4
+ oxlint: 1.47.0
stylelint: 16.23.0(typescript@5.7.3)
typescript: 5.7.3
From df7feb8ea837f76b3dbf7987e482d5a7987e5f7a Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?nicole=20miko=C5=82ajczyk?=
Date: Sun, 15 Feb 2026 00:46:40 +0100
Subject: [PATCH 09/74] downgrade vite
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Signed-off-by: nicole mikołajczyk
---
packages/pl-api/package.json | 2 +-
packages/pl-fe/package.json | 2 +-
pnpm-lock.yaml | 467 +++++++++++++++++++++++++++++------
3 files changed, 389 insertions(+), 82 deletions(-)
diff --git a/packages/pl-api/package.json b/packages/pl-api/package.json
index 525831e38..17b294da5 100644
--- a/packages/pl-api/package.json
+++ b/packages/pl-api/package.json
@@ -38,7 +38,7 @@
"typedoc-material-theme": "^1.4.0",
"typedoc-plugin-valibot": "^1.0.0",
"typescript": "^5.8.3",
- "vite": "^8.0.0-beta.14",
+ "vite": "^7.0.0",
"vite-plugin-dts": "^4.5.4",
"ws": "^8.18.3"
},
diff --git a/packages/pl-fe/package.json b/packages/pl-fe/package.json
index b85b2ccb3..3731739b5 100644
--- a/packages/pl-fe/package.json
+++ b/packages/pl-fe/package.json
@@ -170,7 +170,7 @@
"tslib": "^2.8.1",
"type-fest": "^4.30.1",
"typescript": "5.7.3",
- "vite": "^8.0.0-beta.14",
+ "vite": "^7.0.0",
"vite-plugin-checker": "^0.12.0",
"vite-plugin-compile-time": "^0.4.6",
"vite-plugin-html": "^3.2.2",
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index cac6d549f..32a1db160 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -107,11 +107,11 @@ importers:
specifier: ^5.8.3
version: 5.9.2
vite:
- specifier: ^8.0.0-beta.14
- version: 8.0.0-beta.14(@types/node@22.17.0)(jiti@1.21.7)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.46.0)(yaml@2.8.0)
+ specifier: ^7.0.0
+ version: 7.3.1(@types/node@22.17.0)(jiti@1.21.7)(lightningcss@1.31.1)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.46.0)(yaml@2.8.0)
vite-plugin-dts:
specifier: ^4.5.4
- version: 4.5.4(@types/node@22.17.0)(rollup@4.57.1)(typescript@5.9.2)(vite@8.0.0-beta.14(@types/node@22.17.0)(jiti@1.21.7)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.46.0)(yaml@2.8.0))
+ version: 4.5.4(@types/node@22.17.0)(rollup@4.57.1)(typescript@5.9.2)(vite@7.3.1(@types/node@22.17.0)(jiti@1.21.7)(lightningcss@1.31.1)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.46.0)(yaml@2.8.0))
ws:
specifier: ^8.18.3
version: 8.18.3
@@ -460,7 +460,7 @@ importers:
version: 8.38.0(eslint@8.57.1)(typescript@5.7.3)
'@vitejs/plugin-react':
specifier: ^5.1.3
- version: 5.1.4(vite@8.0.0-beta.14(@types/node@25.0.3)(esbuild@0.24.2)(jiti@1.21.7)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.46.0)(yaml@2.8.0))
+ version: 5.1.4(vite@7.3.1(@types/node@25.0.3)(jiti@1.21.7)(lightningcss@1.31.1)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.46.0)(yaml@2.8.0))
eslint:
specifier: ^8.57.1
version: 8.57.1
@@ -499,7 +499,7 @@ importers:
version: 15.15.0
rollup-plugin-bundle-stats:
specifier: ^4.21.10
- version: 4.21.10(core-js@3.44.0)(rolldown@1.0.0-rc.4)(rollup@2.79.2)(vite@8.0.0-beta.14(@types/node@25.0.3)(esbuild@0.24.2)(jiti@1.21.7)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.46.0)(yaml@2.8.0))
+ version: 4.21.10(core-js@3.44.0)(rolldown@1.0.0-rc.4)(rollup@2.79.2)(vite@7.3.1(@types/node@25.0.3)(jiti@1.21.7)(lightningcss@1.31.1)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.46.0)(yaml@2.8.0))
stylelint:
specifier: ^16.12.0
version: 16.23.0(typescript@5.7.3)
@@ -519,26 +519,26 @@ importers:
specifier: 5.7.3
version: 5.7.3
vite:
- specifier: ^8.0.0-beta.14
- version: 8.0.0-beta.14(@types/node@25.0.3)(esbuild@0.24.2)(jiti@1.21.7)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.46.0)(yaml@2.8.0)
+ specifier: ^7.0.0
+ version: 7.3.1(@types/node@25.0.3)(jiti@1.21.7)(lightningcss@1.31.1)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.46.0)(yaml@2.8.0)
vite-plugin-checker:
specifier: ^0.12.0
- version: 0.12.0(eslint@8.57.1)(meow@13.2.0)(optionator@0.9.4)(oxlint@1.47.0)(stylelint@16.23.0(typescript@5.7.3))(typescript@5.7.3)(vite@8.0.0-beta.14(@types/node@25.0.3)(esbuild@0.24.2)(jiti@1.21.7)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.46.0)(yaml@2.8.0))
+ version: 0.12.0(eslint@8.57.1)(meow@13.2.0)(optionator@0.9.4)(oxlint@1.47.0)(stylelint@16.23.0(typescript@5.7.3))(typescript@5.7.3)(vite@7.3.1(@types/node@25.0.3)(jiti@1.21.7)(lightningcss@1.31.1)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.46.0)(yaml@2.8.0))
vite-plugin-compile-time:
specifier: ^0.4.6
- version: 0.4.6(vite@8.0.0-beta.14(@types/node@25.0.3)(esbuild@0.24.2)(jiti@1.21.7)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.46.0)(yaml@2.8.0))
+ version: 0.4.6(vite@7.3.1(@types/node@25.0.3)(jiti@1.21.7)(lightningcss@1.31.1)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.46.0)(yaml@2.8.0))
vite-plugin-html:
specifier: ^3.2.2
- version: 3.2.2(vite@8.0.0-beta.14(@types/node@25.0.3)(esbuild@0.24.2)(jiti@1.21.7)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.46.0)(yaml@2.8.0))
+ version: 3.2.2(vite@7.3.1(@types/node@25.0.3)(jiti@1.21.7)(lightningcss@1.31.1)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.46.0)(yaml@2.8.0))
vite-plugin-pwa:
specifier: ^1.2.0
- version: 1.2.0(vite@8.0.0-beta.14(@types/node@25.0.3)(esbuild@0.24.2)(jiti@1.21.7)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.46.0)(yaml@2.8.0))(workbox-build@7.3.0(@types/babel__core@7.20.5))(workbox-window@7.3.0)
+ version: 1.2.0(vite@7.3.1(@types/node@25.0.3)(jiti@1.21.7)(lightningcss@1.31.1)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.46.0)(yaml@2.8.0))(workbox-build@7.3.0(@types/babel__core@7.20.5))(workbox-window@7.3.0)
vite-plugin-require:
specifier: ^1.2.14
- version: 1.2.14(esbuild@0.24.2)(vite@8.0.0-beta.14(@types/node@25.0.3)(esbuild@0.24.2)(jiti@1.21.7)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.46.0)(yaml@2.8.0))
+ version: 1.2.14(esbuild@0.24.2)(vite@7.3.1(@types/node@25.0.3)(jiti@1.21.7)(lightningcss@1.31.1)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.46.0)(yaml@2.8.0))
vite-plugin-static-copy:
specifier: ^3.2.0
- version: 3.2.0(vite@8.0.0-beta.14(@types/node@25.0.3)(esbuild@0.24.2)(jiti@1.21.7)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.46.0)(yaml@2.8.0))
+ version: 3.2.0(vite@7.3.1(@types/node@25.0.3)(jiti@1.21.7)(lightningcss@1.31.1)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.46.0)(yaml@2.8.0))
packages/pl-hooks:
dependencies:
@@ -593,10 +593,10 @@ importers:
version: 5.9.2
vite:
specifier: ^8.0.0-beta.14
- version: 8.0.0-beta.14(@types/node@20.19.9)(jiti@1.21.7)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.46.0)(yaml@2.8.0)
+ version: 8.0.0-beta.14(@types/node@20.19.9)(esbuild@0.27.3)(jiti@1.21.7)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.46.0)(yaml@2.8.0)
vite-plugin-dts:
specifier: ^4.2.1
- version: 4.5.4(@types/node@20.19.9)(rollup@4.57.1)(typescript@5.9.2)(vite@8.0.0-beta.14(@types/node@20.19.9)(jiti@1.21.7)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.46.0)(yaml@2.8.0))
+ version: 4.5.4(@types/node@20.19.9)(rollup@4.57.1)(typescript@5.9.2)(vite@8.0.0-beta.14(@types/node@20.19.9)(esbuild@0.27.3)(jiti@1.21.7)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.46.0)(yaml@2.8.0))
packages:
@@ -1280,150 +1280,306 @@ packages:
cpu: [ppc64]
os: [aix]
+ '@esbuild/aix-ppc64@0.27.3':
+ resolution: {integrity: sha512-9fJMTNFTWZMh5qwrBItuziu834eOCUcEqymSH7pY+zoMVEZg3gcPuBNxH1EvfVYe9h0x/Ptw8KBzv7qxb7l8dg==}
+ engines: {node: '>=18'}
+ cpu: [ppc64]
+ os: [aix]
+
'@esbuild/android-arm64@0.24.2':
resolution: {integrity: sha512-cNLgeqCqV8WxfcTIOeL4OAtSmL8JjcN6m09XIgro1Wi7cF4t/THaWEa7eL5CMoMBdjoHOTh/vwTO/o2TRXIyzg==}
engines: {node: '>=18'}
cpu: [arm64]
os: [android]
+ '@esbuild/android-arm64@0.27.3':
+ resolution: {integrity: sha512-YdghPYUmj/FX2SYKJ0OZxf+iaKgMsKHVPF1MAq/P8WirnSpCStzKJFjOjzsW0QQ7oIAiccHdcqjbHmJxRb/dmg==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [android]
+
'@esbuild/android-arm@0.24.2':
resolution: {integrity: sha512-tmwl4hJkCfNHwFB3nBa8z1Uy3ypZpxqxfTQOcHX+xRByyYgunVbZ9MzUUfb0RxaHIMnbHagwAxuTL+tnNM+1/Q==}
engines: {node: '>=18'}
cpu: [arm]
os: [android]
+ '@esbuild/android-arm@0.27.3':
+ resolution: {integrity: sha512-i5D1hPY7GIQmXlXhs2w8AWHhenb00+GxjxRncS2ZM7YNVGNfaMxgzSGuO8o8SJzRc/oZwU2bcScvVERk03QhzA==}
+ engines: {node: '>=18'}
+ cpu: [arm]
+ os: [android]
+
'@esbuild/android-x64@0.24.2':
resolution: {integrity: sha512-B6Q0YQDqMx9D7rvIcsXfmJfvUYLoP722bgfBlO5cGvNVb5V/+Y7nhBE3mHV9OpxBf4eAS2S68KZztiPaWq4XYw==}
engines: {node: '>=18'}
cpu: [x64]
os: [android]
+ '@esbuild/android-x64@0.27.3':
+ resolution: {integrity: sha512-IN/0BNTkHtk8lkOM8JWAYFg4ORxBkZQf9zXiEOfERX/CzxW3Vg1ewAhU7QSWQpVIzTW+b8Xy+lGzdYXV6UZObQ==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [android]
+
'@esbuild/darwin-arm64@0.24.2':
resolution: {integrity: sha512-kj3AnYWc+CekmZnS5IPu9D+HWtUI49hbnyqk0FLEJDbzCIQt7hg7ucF1SQAilhtYpIujfaHr6O0UHlzzSPdOeA==}
engines: {node: '>=18'}
cpu: [arm64]
os: [darwin]
+ '@esbuild/darwin-arm64@0.27.3':
+ resolution: {integrity: sha512-Re491k7ByTVRy0t3EKWajdLIr0gz2kKKfzafkth4Q8A5n1xTHrkqZgLLjFEHVD+AXdUGgQMq+Godfq45mGpCKg==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [darwin]
+
'@esbuild/darwin-x64@0.24.2':
resolution: {integrity: sha512-WeSrmwwHaPkNR5H3yYfowhZcbriGqooyu3zI/3GGpF8AyUdsrrP0X6KumITGA9WOyiJavnGZUwPGvxvwfWPHIA==}
engines: {node: '>=18'}
cpu: [x64]
os: [darwin]
+ '@esbuild/darwin-x64@0.27.3':
+ resolution: {integrity: sha512-vHk/hA7/1AckjGzRqi6wbo+jaShzRowYip6rt6q7VYEDX4LEy1pZfDpdxCBnGtl+A5zq8iXDcyuxwtv3hNtHFg==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [darwin]
+
'@esbuild/freebsd-arm64@0.24.2':
resolution: {integrity: sha512-UN8HXjtJ0k/Mj6a9+5u6+2eZ2ERD7Edt1Q9IZiB5UZAIdPnVKDoG7mdTVGhHJIeEml60JteamR3qhsr1r8gXvg==}
engines: {node: '>=18'}
cpu: [arm64]
os: [freebsd]
+ '@esbuild/freebsd-arm64@0.27.3':
+ resolution: {integrity: sha512-ipTYM2fjt3kQAYOvo6vcxJx3nBYAzPjgTCk7QEgZG8AUO3ydUhvelmhrbOheMnGOlaSFUoHXB6un+A7q4ygY9w==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [freebsd]
+
'@esbuild/freebsd-x64@0.24.2':
resolution: {integrity: sha512-TvW7wE/89PYW+IevEJXZ5sF6gJRDY/14hyIGFXdIucxCsbRmLUcjseQu1SyTko+2idmCw94TgyaEZi9HUSOe3Q==}
engines: {node: '>=18'}
cpu: [x64]
os: [freebsd]
+ '@esbuild/freebsd-x64@0.27.3':
+ resolution: {integrity: sha512-dDk0X87T7mI6U3K9VjWtHOXqwAMJBNN2r7bejDsc+j03SEjtD9HrOl8gVFByeM0aJksoUuUVU9TBaZa2rgj0oA==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [freebsd]
+
'@esbuild/linux-arm64@0.24.2':
resolution: {integrity: sha512-7HnAD6074BW43YvvUmE/35Id9/NB7BeX5EoNkK9obndmZBUk8xmJJeU7DwmUeN7tkysslb2eSl6CTrYz6oEMQg==}
engines: {node: '>=18'}
cpu: [arm64]
os: [linux]
+ '@esbuild/linux-arm64@0.27.3':
+ resolution: {integrity: sha512-sZOuFz/xWnZ4KH3YfFrKCf1WyPZHakVzTiqji3WDc0BCl2kBwiJLCXpzLzUBLgmp4veFZdvN5ChW4Eq/8Fc2Fg==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [linux]
+
'@esbuild/linux-arm@0.24.2':
resolution: {integrity: sha512-n0WRM/gWIdU29J57hJyUdIsk0WarGd6To0s+Y+LwvlC55wt+GT/OgkwoXCXvIue1i1sSNWblHEig00GBWiJgfA==}
engines: {node: '>=18'}
cpu: [arm]
os: [linux]
+ '@esbuild/linux-arm@0.27.3':
+ resolution: {integrity: sha512-s6nPv2QkSupJwLYyfS+gwdirm0ukyTFNl3KTgZEAiJDd+iHZcbTPPcWCcRYH+WlNbwChgH2QkE9NSlNrMT8Gfw==}
+ engines: {node: '>=18'}
+ cpu: [arm]
+ os: [linux]
+
'@esbuild/linux-ia32@0.24.2':
resolution: {integrity: sha512-sfv0tGPQhcZOgTKO3oBE9xpHuUqguHvSo4jl+wjnKwFpapx+vUDcawbwPNuBIAYdRAvIDBfZVvXprIj3HA+Ugw==}
engines: {node: '>=18'}
cpu: [ia32]
os: [linux]
+ '@esbuild/linux-ia32@0.27.3':
+ resolution: {integrity: sha512-yGlQYjdxtLdh0a3jHjuwOrxQjOZYD/C9PfdbgJJF3TIZWnm/tMd/RcNiLngiu4iwcBAOezdnSLAwQDPqTmtTYg==}
+ engines: {node: '>=18'}
+ cpu: [ia32]
+ os: [linux]
+
'@esbuild/linux-loong64@0.24.2':
resolution: {integrity: sha512-CN9AZr8kEndGooS35ntToZLTQLHEjtVB5n7dl8ZcTZMonJ7CCfStrYhrzF97eAecqVbVJ7APOEe18RPI4KLhwQ==}
engines: {node: '>=18'}
cpu: [loong64]
os: [linux]
+ '@esbuild/linux-loong64@0.27.3':
+ resolution: {integrity: sha512-WO60Sn8ly3gtzhyjATDgieJNet/KqsDlX5nRC5Y3oTFcS1l0KWba+SEa9Ja1GfDqSF1z6hif/SkpQJbL63cgOA==}
+ engines: {node: '>=18'}
+ cpu: [loong64]
+ os: [linux]
+
'@esbuild/linux-mips64el@0.24.2':
resolution: {integrity: sha512-iMkk7qr/wl3exJATwkISxI7kTcmHKE+BlymIAbHO8xanq/TjHaaVThFF6ipWzPHryoFsesNQJPE/3wFJw4+huw==}
engines: {node: '>=18'}
cpu: [mips64el]
os: [linux]
+ '@esbuild/linux-mips64el@0.27.3':
+ resolution: {integrity: sha512-APsymYA6sGcZ4pD6k+UxbDjOFSvPWyZhjaiPyl/f79xKxwTnrn5QUnXR5prvetuaSMsb4jgeHewIDCIWljrSxw==}
+ engines: {node: '>=18'}
+ cpu: [mips64el]
+ os: [linux]
+
'@esbuild/linux-ppc64@0.24.2':
resolution: {integrity: sha512-shsVrgCZ57Vr2L8mm39kO5PPIb+843FStGt7sGGoqiiWYconSxwTiuswC1VJZLCjNiMLAMh34jg4VSEQb+iEbw==}
engines: {node: '>=18'}
cpu: [ppc64]
os: [linux]
+ '@esbuild/linux-ppc64@0.27.3':
+ resolution: {integrity: sha512-eizBnTeBefojtDb9nSh4vvVQ3V9Qf9Df01PfawPcRzJH4gFSgrObw+LveUyDoKU3kxi5+9RJTCWlj4FjYXVPEA==}
+ engines: {node: '>=18'}
+ cpu: [ppc64]
+ os: [linux]
+
'@esbuild/linux-riscv64@0.24.2':
resolution: {integrity: sha512-4eSFWnU9Hhd68fW16GD0TINewo1L6dRrB+oLNNbYyMUAeOD2yCK5KXGK1GH4qD/kT+bTEXjsyTCiJGHPZ3eM9Q==}
engines: {node: '>=18'}
cpu: [riscv64]
os: [linux]
+ '@esbuild/linux-riscv64@0.27.3':
+ resolution: {integrity: sha512-3Emwh0r5wmfm3ssTWRQSyVhbOHvqegUDRd0WhmXKX2mkHJe1SFCMJhagUleMq+Uci34wLSipf8Lagt4LlpRFWQ==}
+ engines: {node: '>=18'}
+ cpu: [riscv64]
+ os: [linux]
+
'@esbuild/linux-s390x@0.24.2':
resolution: {integrity: sha512-S0Bh0A53b0YHL2XEXC20bHLuGMOhFDO6GN4b3YjRLK//Ep3ql3erpNcPlEFed93hsQAjAQDNsvcK+hV90FubSw==}
engines: {node: '>=18'}
cpu: [s390x]
os: [linux]
+ '@esbuild/linux-s390x@0.27.3':
+ resolution: {integrity: sha512-pBHUx9LzXWBc7MFIEEL0yD/ZVtNgLytvx60gES28GcWMqil8ElCYR4kvbV2BDqsHOvVDRrOxGySBM9Fcv744hw==}
+ engines: {node: '>=18'}
+ cpu: [s390x]
+ os: [linux]
+
'@esbuild/linux-x64@0.24.2':
resolution: {integrity: sha512-8Qi4nQcCTbLnK9WoMjdC9NiTG6/E38RNICU6sUNqK0QFxCYgoARqVqxdFmWkdonVsvGqWhmm7MO0jyTqLqwj0Q==}
engines: {node: '>=18'}
cpu: [x64]
os: [linux]
+ '@esbuild/linux-x64@0.27.3':
+ resolution: {integrity: sha512-Czi8yzXUWIQYAtL/2y6vogER8pvcsOsk5cpwL4Gk5nJqH5UZiVByIY8Eorm5R13gq+DQKYg0+JyQoytLQas4dA==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [linux]
+
'@esbuild/netbsd-arm64@0.24.2':
resolution: {integrity: sha512-wuLK/VztRRpMt9zyHSazyCVdCXlpHkKm34WUyinD2lzK07FAHTq0KQvZZlXikNWkDGoT6x3TD51jKQ7gMVpopw==}
engines: {node: '>=18'}
cpu: [arm64]
os: [netbsd]
+ '@esbuild/netbsd-arm64@0.27.3':
+ resolution: {integrity: sha512-sDpk0RgmTCR/5HguIZa9n9u+HVKf40fbEUt+iTzSnCaGvY9kFP0YKBWZtJaraonFnqef5SlJ8/TiPAxzyS+UoA==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [netbsd]
+
'@esbuild/netbsd-x64@0.24.2':
resolution: {integrity: sha512-VefFaQUc4FMmJuAxmIHgUmfNiLXY438XrL4GDNV1Y1H/RW3qow68xTwjZKfj/+Plp9NANmzbH5R40Meudu8mmw==}
engines: {node: '>=18'}
cpu: [x64]
os: [netbsd]
+ '@esbuild/netbsd-x64@0.27.3':
+ resolution: {integrity: sha512-P14lFKJl/DdaE00LItAukUdZO5iqNH7+PjoBm+fLQjtxfcfFE20Xf5CrLsmZdq5LFFZzb5JMZ9grUwvtVYzjiA==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [netbsd]
+
'@esbuild/openbsd-arm64@0.24.2':
resolution: {integrity: sha512-YQbi46SBct6iKnszhSvdluqDmxCJA+Pu280Av9WICNwQmMxV7nLRHZfjQzwbPs3jeWnuAhE9Jy0NrnJ12Oz+0A==}
engines: {node: '>=18'}
cpu: [arm64]
os: [openbsd]
+ '@esbuild/openbsd-arm64@0.27.3':
+ resolution: {integrity: sha512-AIcMP77AvirGbRl/UZFTq5hjXK+2wC7qFRGoHSDrZ5v5b8DK/GYpXW3CPRL53NkvDqb9D+alBiC/dV0Fb7eJcw==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [openbsd]
+
'@esbuild/openbsd-x64@0.24.2':
resolution: {integrity: sha512-+iDS6zpNM6EnJyWv0bMGLWSWeXGN/HTaF/LXHXHwejGsVi+ooqDfMCCTerNFxEkM3wYVcExkeGXNqshc9iMaOA==}
engines: {node: '>=18'}
cpu: [x64]
os: [openbsd]
+ '@esbuild/openbsd-x64@0.27.3':
+ resolution: {integrity: sha512-DnW2sRrBzA+YnE70LKqnM3P+z8vehfJWHXECbwBmH/CU51z6FiqTQTHFenPlHmo3a8UgpLyH3PT+87OViOh1AQ==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [openbsd]
+
+ '@esbuild/openharmony-arm64@0.27.3':
+ resolution: {integrity: sha512-NinAEgr/etERPTsZJ7aEZQvvg/A6IsZG/LgZy+81wON2huV7SrK3e63dU0XhyZP4RKGyTm7aOgmQk0bGp0fy2g==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [openharmony]
+
'@esbuild/sunos-x64@0.24.2':
resolution: {integrity: sha512-hTdsW27jcktEvpwNHJU4ZwWFGkz2zRJUz8pvddmXPtXDzVKTTINmlmga3ZzwcuMpUvLw7JkLy9QLKyGpD2Yxig==}
engines: {node: '>=18'}
cpu: [x64]
os: [sunos]
+ '@esbuild/sunos-x64@0.27.3':
+ resolution: {integrity: sha512-PanZ+nEz+eWoBJ8/f8HKxTTD172SKwdXebZ0ndd953gt1HRBbhMsaNqjTyYLGLPdoWHy4zLU7bDVJztF5f3BHA==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [sunos]
+
'@esbuild/win32-arm64@0.24.2':
resolution: {integrity: sha512-LihEQ2BBKVFLOC9ZItT9iFprsE9tqjDjnbulhHoFxYQtQfai7qfluVODIYxt1PgdoyQkz23+01rzwNwYfutxUQ==}
engines: {node: '>=18'}
cpu: [arm64]
os: [win32]
+ '@esbuild/win32-arm64@0.27.3':
+ resolution: {integrity: sha512-B2t59lWWYrbRDw/tjiWOuzSsFh1Y/E95ofKz7rIVYSQkUYBjfSgf6oeYPNWHToFRr2zx52JKApIcAS/D5TUBnA==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [win32]
+
'@esbuild/win32-ia32@0.24.2':
resolution: {integrity: sha512-q+iGUwfs8tncmFC9pcnD5IvRHAzmbwQ3GPS5/ceCyHdjXubwQWI12MKWSNSMYLJMq23/IUCvJMS76PDqXe1fxA==}
engines: {node: '>=18'}
cpu: [ia32]
os: [win32]
+ '@esbuild/win32-ia32@0.27.3':
+ resolution: {integrity: sha512-QLKSFeXNS8+tHW7tZpMtjlNb7HKau0QDpwm49u0vUp9y1WOF+PEzkU84y9GqYaAVW8aH8f3GcBck26jh54cX4Q==}
+ engines: {node: '>=18'}
+ cpu: [ia32]
+ os: [win32]
+
'@esbuild/win32-x64@0.24.2':
resolution: {integrity: sha512-7VTgWzgMGvup6aSqDPLiW5zHaxYJGTO4OokMjIlrCtf+VpEL+cXKtCvg723iguPYI5oaUNdS+/V7OU2gvXVWEg==}
engines: {node: '>=18'}
cpu: [x64]
os: [win32]
+ '@esbuild/win32-x64@0.27.3':
+ resolution: {integrity: sha512-4uJGhsxuptu3OcpVAzli+/gWusVGwZZHTlS63hh++ehExkVT8SgiEf7/uC/PclrPPkLhZqGgCTjd0VWLo6xMqA==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [win32]
+
'@eslint-community/eslint-utils@4.7.0':
resolution: {integrity: sha512-dyybb3AcajC7uha6CvhdVRJqaKyn7w2YKqKyAN37NKYgZT36w+iRb0Dymmc5qEJ549c/S31cMMSFd75bteCpCw==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
@@ -3730,6 +3886,11 @@ packages:
engines: {node: '>=18'}
hasBin: true
+ esbuild@0.27.3:
+ resolution: {integrity: sha512-8VwMnyGCONIs6cWue2IdpHxHnAjzxnw2Zr7MkVxB2vjmQ2ivqGFb4LEG3SMnv0Gb2F/G/2yA8zUaiL1gywDCCg==}
+ engines: {node: '>=18'}
+ hasBin: true
+
escalade@3.2.0:
resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==}
engines: {node: '>=6'}
@@ -6590,6 +6751,46 @@ packages:
peerDependencies:
vite: ^5.0.0 || ^6.0.0 || ^7.0.0
+ vite@7.3.1:
+ resolution: {integrity: sha512-w+N7Hifpc3gRjZ63vYBXA56dvvRlNWRczTdmCBBa+CotUzAPf5b7YMdMR/8CQoeYE5LX3W4wj6RYTgonm1b9DA==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ hasBin: true
+ peerDependencies:
+ '@types/node': ^20.19.0 || >=22.12.0
+ jiti: '>=1.21.0'
+ less: ^4.0.0
+ lightningcss: ^1.21.0
+ sass: ^1.70.0
+ sass-embedded: ^1.70.0
+ stylus: '>=0.54.8'
+ sugarss: ^5.0.0
+ terser: ^5.16.0
+ tsx: ^4.8.1
+ yaml: ^2.4.2
+ peerDependenciesMeta:
+ '@types/node':
+ optional: true
+ jiti:
+ optional: true
+ less:
+ optional: true
+ lightningcss:
+ optional: true
+ sass:
+ optional: true
+ sass-embedded:
+ optional: true
+ stylus:
+ optional: true
+ sugarss:
+ optional: true
+ terser:
+ optional: true
+ tsx:
+ optional: true
+ yaml:
+ optional: true
+
vite@8.0.0-beta.14:
resolution: {integrity: sha512-oLW66oi8tZcoxu6+1HFXb+5hLHco3OnEVu2Awmj5NqEo7vxaqybjBM0BXHcq+jAFhzkMGXJl8xcO5qDBczgKLg==}
engines: {node: ^20.19.0 || >=22.12.0}
@@ -7730,78 +7931,156 @@ snapshots:
'@esbuild/aix-ppc64@0.24.2':
optional: true
+ '@esbuild/aix-ppc64@0.27.3':
+ optional: true
+
'@esbuild/android-arm64@0.24.2':
optional: true
+ '@esbuild/android-arm64@0.27.3':
+ optional: true
+
'@esbuild/android-arm@0.24.2':
optional: true
+ '@esbuild/android-arm@0.27.3':
+ optional: true
+
'@esbuild/android-x64@0.24.2':
optional: true
+ '@esbuild/android-x64@0.27.3':
+ optional: true
+
'@esbuild/darwin-arm64@0.24.2':
optional: true
+ '@esbuild/darwin-arm64@0.27.3':
+ optional: true
+
'@esbuild/darwin-x64@0.24.2':
optional: true
+ '@esbuild/darwin-x64@0.27.3':
+ optional: true
+
'@esbuild/freebsd-arm64@0.24.2':
optional: true
+ '@esbuild/freebsd-arm64@0.27.3':
+ optional: true
+
'@esbuild/freebsd-x64@0.24.2':
optional: true
+ '@esbuild/freebsd-x64@0.27.3':
+ optional: true
+
'@esbuild/linux-arm64@0.24.2':
optional: true
+ '@esbuild/linux-arm64@0.27.3':
+ optional: true
+
'@esbuild/linux-arm@0.24.2':
optional: true
+ '@esbuild/linux-arm@0.27.3':
+ optional: true
+
'@esbuild/linux-ia32@0.24.2':
optional: true
+ '@esbuild/linux-ia32@0.27.3':
+ optional: true
+
'@esbuild/linux-loong64@0.24.2':
optional: true
+ '@esbuild/linux-loong64@0.27.3':
+ optional: true
+
'@esbuild/linux-mips64el@0.24.2':
optional: true
+ '@esbuild/linux-mips64el@0.27.3':
+ optional: true
+
'@esbuild/linux-ppc64@0.24.2':
optional: true
+ '@esbuild/linux-ppc64@0.27.3':
+ optional: true
+
'@esbuild/linux-riscv64@0.24.2':
optional: true
+ '@esbuild/linux-riscv64@0.27.3':
+ optional: true
+
'@esbuild/linux-s390x@0.24.2':
optional: true
+ '@esbuild/linux-s390x@0.27.3':
+ optional: true
+
'@esbuild/linux-x64@0.24.2':
optional: true
+ '@esbuild/linux-x64@0.27.3':
+ optional: true
+
'@esbuild/netbsd-arm64@0.24.2':
optional: true
+ '@esbuild/netbsd-arm64@0.27.3':
+ optional: true
+
'@esbuild/netbsd-x64@0.24.2':
optional: true
+ '@esbuild/netbsd-x64@0.27.3':
+ optional: true
+
'@esbuild/openbsd-arm64@0.24.2':
optional: true
+ '@esbuild/openbsd-arm64@0.27.3':
+ optional: true
+
'@esbuild/openbsd-x64@0.24.2':
optional: true
+ '@esbuild/openbsd-x64@0.27.3':
+ optional: true
+
+ '@esbuild/openharmony-arm64@0.27.3':
+ optional: true
+
'@esbuild/sunos-x64@0.24.2':
optional: true
+ '@esbuild/sunos-x64@0.27.3':
+ optional: true
+
'@esbuild/win32-arm64@0.24.2':
optional: true
+ '@esbuild/win32-arm64@0.27.3':
+ optional: true
+
'@esbuild/win32-ia32@0.24.2':
optional: true
+ '@esbuild/win32-ia32@0.27.3':
+ optional: true
+
'@esbuild/win32-x64@0.24.2':
optional: true
+ '@esbuild/win32-x64@0.27.3':
+ optional: true
+
'@eslint-community/eslint-utils@4.7.0(eslint@8.57.1)':
dependencies:
eslint: 8.57.1
@@ -9439,7 +9718,7 @@ snapshots:
'@use-gesture/core': 10.3.1
react: 19.2.3
- '@vitejs/plugin-react@5.1.4(vite@8.0.0-beta.14(@types/node@25.0.3)(esbuild@0.24.2)(jiti@1.21.7)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.46.0)(yaml@2.8.0))':
+ '@vitejs/plugin-react@5.1.4(vite@7.3.1(@types/node@25.0.3)(jiti@1.21.7)(lightningcss@1.31.1)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.46.0)(yaml@2.8.0))':
dependencies:
'@babel/core': 7.29.0
'@babel/plugin-transform-react-jsx-self': 7.27.1(@babel/core@7.29.0)
@@ -9447,7 +9726,7 @@ snapshots:
'@rolldown/pluginutils': 1.0.0-rc.3
'@types/babel__core': 7.20.5
react-refresh: 0.18.0
- vite: 8.0.0-beta.14(@types/node@25.0.3)(esbuild@0.24.2)(jiti@1.21.7)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.46.0)(yaml@2.8.0)
+ vite: 7.3.1(@types/node@25.0.3)(jiti@1.21.7)(lightningcss@1.31.1)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.46.0)(yaml@2.8.0)
transitivePeerDependencies:
- supports-color
@@ -10452,6 +10731,35 @@ snapshots:
'@esbuild/win32-ia32': 0.24.2
'@esbuild/win32-x64': 0.24.2
+ esbuild@0.27.3:
+ optionalDependencies:
+ '@esbuild/aix-ppc64': 0.27.3
+ '@esbuild/android-arm': 0.27.3
+ '@esbuild/android-arm64': 0.27.3
+ '@esbuild/android-x64': 0.27.3
+ '@esbuild/darwin-arm64': 0.27.3
+ '@esbuild/darwin-x64': 0.27.3
+ '@esbuild/freebsd-arm64': 0.27.3
+ '@esbuild/freebsd-x64': 0.27.3
+ '@esbuild/linux-arm': 0.27.3
+ '@esbuild/linux-arm64': 0.27.3
+ '@esbuild/linux-ia32': 0.27.3
+ '@esbuild/linux-loong64': 0.27.3
+ '@esbuild/linux-mips64el': 0.27.3
+ '@esbuild/linux-ppc64': 0.27.3
+ '@esbuild/linux-riscv64': 0.27.3
+ '@esbuild/linux-s390x': 0.27.3
+ '@esbuild/linux-x64': 0.27.3
+ '@esbuild/netbsd-arm64': 0.27.3
+ '@esbuild/netbsd-x64': 0.27.3
+ '@esbuild/openbsd-arm64': 0.27.3
+ '@esbuild/openbsd-x64': 0.27.3
+ '@esbuild/openharmony-arm64': 0.27.3
+ '@esbuild/sunos-x64': 0.27.3
+ '@esbuild/win32-arm64': 0.27.3
+ '@esbuild/win32-ia32': 0.27.3
+ '@esbuild/win32-x64': 0.27.3
+
escalade@3.2.0: {}
escape-string-regexp@4.0.0: {}
@@ -12581,31 +12889,31 @@ snapshots:
'@rolldown/binding-win32-arm64-msvc': 1.0.0-rc.4
'@rolldown/binding-win32-x64-msvc': 1.0.0-rc.4
- rollup-plugin-bundle-stats@4.21.10(core-js@3.44.0)(rolldown@1.0.0-rc.4)(rollup@2.79.2)(vite@8.0.0-beta.14(@types/node@25.0.3)(esbuild@0.24.2)(jiti@1.21.7)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.46.0)(yaml@2.8.0)):
+ rollup-plugin-bundle-stats@4.21.10(core-js@3.44.0)(rolldown@1.0.0-rc.4)(rollup@2.79.2)(vite@7.3.1(@types/node@25.0.3)(jiti@1.21.7)(lightningcss@1.31.1)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.46.0)(yaml@2.8.0)):
dependencies:
'@bundle-stats/cli-utils': 4.21.10(core-js@3.44.0)
- rollup-plugin-webpack-stats: 2.1.11(rolldown@1.0.0-rc.4)(rollup@2.79.2)(vite@8.0.0-beta.14(@types/node@25.0.3)(esbuild@0.24.2)(jiti@1.21.7)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.46.0)(yaml@2.8.0))
+ rollup-plugin-webpack-stats: 2.1.11(rolldown@1.0.0-rc.4)(rollup@2.79.2)(vite@7.3.1(@types/node@25.0.3)(jiti@1.21.7)(lightningcss@1.31.1)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.46.0)(yaml@2.8.0))
tslib: 2.8.1
optionalDependencies:
rolldown: 1.0.0-rc.4
rollup: 2.79.2
- vite: 8.0.0-beta.14(@types/node@25.0.3)(esbuild@0.24.2)(jiti@1.21.7)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.46.0)(yaml@2.8.0)
+ vite: 7.3.1(@types/node@25.0.3)(jiti@1.21.7)(lightningcss@1.31.1)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.46.0)(yaml@2.8.0)
transitivePeerDependencies:
- core-js
- rollup-plugin-stats@1.5.6(rolldown@1.0.0-rc.4)(rollup@2.79.2)(vite@8.0.0-beta.14(@types/node@25.0.3)(esbuild@0.24.2)(jiti@1.21.7)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.46.0)(yaml@2.8.0)):
+ rollup-plugin-stats@1.5.6(rolldown@1.0.0-rc.4)(rollup@2.79.2)(vite@7.3.1(@types/node@25.0.3)(jiti@1.21.7)(lightningcss@1.31.1)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.46.0)(yaml@2.8.0)):
optionalDependencies:
rolldown: 1.0.0-rc.4
rollup: 2.79.2
- vite: 8.0.0-beta.14(@types/node@25.0.3)(esbuild@0.24.2)(jiti@1.21.7)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.46.0)(yaml@2.8.0)
+ vite: 7.3.1(@types/node@25.0.3)(jiti@1.21.7)(lightningcss@1.31.1)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.46.0)(yaml@2.8.0)
- rollup-plugin-webpack-stats@2.1.11(rolldown@1.0.0-rc.4)(rollup@2.79.2)(vite@8.0.0-beta.14(@types/node@25.0.3)(esbuild@0.24.2)(jiti@1.21.7)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.46.0)(yaml@2.8.0)):
+ rollup-plugin-webpack-stats@2.1.11(rolldown@1.0.0-rc.4)(rollup@2.79.2)(vite@7.3.1(@types/node@25.0.3)(jiti@1.21.7)(lightningcss@1.31.1)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.46.0)(yaml@2.8.0)):
dependencies:
- rollup-plugin-stats: 1.5.6(rolldown@1.0.0-rc.4)(rollup@2.79.2)(vite@8.0.0-beta.14(@types/node@25.0.3)(esbuild@0.24.2)(jiti@1.21.7)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.46.0)(yaml@2.8.0))
+ rollup-plugin-stats: 1.5.6(rolldown@1.0.0-rc.4)(rollup@2.79.2)(vite@7.3.1(@types/node@25.0.3)(jiti@1.21.7)(lightningcss@1.31.1)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.46.0)(yaml@2.8.0))
optionalDependencies:
rolldown: 1.0.0-rc.4
rollup: 2.79.2
- vite: 8.0.0-beta.14(@types/node@25.0.3)(esbuild@0.24.2)(jiti@1.21.7)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.46.0)(yaml@2.8.0)
+ vite: 7.3.1(@types/node@25.0.3)(jiti@1.21.7)(lightningcss@1.31.1)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.46.0)(yaml@2.8.0)
rollup@2.79.2:
optionalDependencies:
@@ -12641,7 +12949,6 @@ snapshots:
'@rollup/rollup-win32-x64-gnu': 4.57.1
'@rollup/rollup-win32-x64-msvc': 4.57.1
fsevents: 2.3.3
- optional: true
run-parallel@1.2.0:
dependencies:
@@ -13496,7 +13803,7 @@ snapshots:
varint@6.0.0: {}
- vite-plugin-checker@0.12.0(eslint@8.57.1)(meow@13.2.0)(optionator@0.9.4)(oxlint@1.47.0)(stylelint@16.23.0(typescript@5.7.3))(typescript@5.7.3)(vite@8.0.0-beta.14(@types/node@25.0.3)(esbuild@0.24.2)(jiti@1.21.7)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.46.0)(yaml@2.8.0)):
+ vite-plugin-checker@0.12.0(eslint@8.57.1)(meow@13.2.0)(optionator@0.9.4)(oxlint@1.47.0)(stylelint@16.23.0(typescript@5.7.3))(typescript@5.7.3)(vite@7.3.1(@types/node@25.0.3)(jiti@1.21.7)(lightningcss@1.31.1)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.46.0)(yaml@2.8.0)):
dependencies:
'@babel/code-frame': 7.29.0
chokidar: 4.0.3
@@ -13505,7 +13812,7 @@ snapshots:
picomatch: 4.0.3
tiny-invariant: 1.3.3
tinyglobby: 0.2.15
- vite: 8.0.0-beta.14(@types/node@25.0.3)(esbuild@0.24.2)(jiti@1.21.7)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.46.0)(yaml@2.8.0)
+ vite: 7.3.1(@types/node@25.0.3)(jiti@1.21.7)(lightningcss@1.31.1)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.46.0)(yaml@2.8.0)
vscode-uri: 3.1.0
optionalDependencies:
eslint: 8.57.1
@@ -13515,7 +13822,7 @@ snapshots:
stylelint: 16.23.0(typescript@5.7.3)
typescript: 5.7.3
- vite-plugin-compile-time@0.4.6(vite@8.0.0-beta.14(@types/node@25.0.3)(esbuild@0.24.2)(jiti@1.21.7)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.46.0)(yaml@2.8.0)):
+ vite-plugin-compile-time@0.4.6(vite@7.3.1(@types/node@25.0.3)(jiti@1.21.7)(lightningcss@1.31.1)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.46.0)(yaml@2.8.0)):
dependencies:
'@babel/generator': 7.29.1
'@babel/parser': 7.29.0
@@ -13526,11 +13833,11 @@ snapshots:
devalue: 5.1.1
esbuild: 0.24.2
magic-string: 0.30.17
- vite: 8.0.0-beta.14(@types/node@25.0.3)(esbuild@0.24.2)(jiti@1.21.7)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.46.0)(yaml@2.8.0)
+ vite: 7.3.1(@types/node@25.0.3)(jiti@1.21.7)(lightningcss@1.31.1)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.46.0)(yaml@2.8.0)
transitivePeerDependencies:
- supports-color
- vite-plugin-dts@4.5.4(@types/node@20.19.9)(rollup@4.57.1)(typescript@5.9.2)(vite@8.0.0-beta.14(@types/node@20.19.9)(jiti@1.21.7)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.46.0)(yaml@2.8.0)):
+ vite-plugin-dts@4.5.4(@types/node@20.19.9)(rollup@4.57.1)(typescript@5.9.2)(vite@8.0.0-beta.14(@types/node@20.19.9)(esbuild@0.27.3)(jiti@1.21.7)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.46.0)(yaml@2.8.0)):
dependencies:
'@microsoft/api-extractor': 7.52.10(@types/node@20.19.9)
'@rollup/pluginutils': 5.2.0(rollup@4.57.1)
@@ -13543,13 +13850,13 @@ snapshots:
magic-string: 0.30.17
typescript: 5.9.2
optionalDependencies:
- vite: 8.0.0-beta.14(@types/node@20.19.9)(jiti@1.21.7)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.46.0)(yaml@2.8.0)
+ vite: 8.0.0-beta.14(@types/node@20.19.9)(esbuild@0.27.3)(jiti@1.21.7)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.46.0)(yaml@2.8.0)
transitivePeerDependencies:
- '@types/node'
- rollup
- supports-color
- vite-plugin-dts@4.5.4(@types/node@22.17.0)(rollup@4.57.1)(typescript@5.9.2)(vite@8.0.0-beta.14(@types/node@22.17.0)(jiti@1.21.7)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.46.0)(yaml@2.8.0)):
+ vite-plugin-dts@4.5.4(@types/node@22.17.0)(rollup@4.57.1)(typescript@5.9.2)(vite@7.3.1(@types/node@22.17.0)(jiti@1.21.7)(lightningcss@1.31.1)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.46.0)(yaml@2.8.0)):
dependencies:
'@microsoft/api-extractor': 7.52.10(@types/node@22.17.0)
'@rollup/pluginutils': 5.2.0(rollup@4.57.1)
@@ -13562,13 +13869,13 @@ snapshots:
magic-string: 0.30.17
typescript: 5.9.2
optionalDependencies:
- vite: 8.0.0-beta.14(@types/node@22.17.0)(jiti@1.21.7)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.46.0)(yaml@2.8.0)
+ vite: 7.3.1(@types/node@22.17.0)(jiti@1.21.7)(lightningcss@1.31.1)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.46.0)(yaml@2.8.0)
transitivePeerDependencies:
- '@types/node'
- rollup
- supports-color
- vite-plugin-html@3.2.2(vite@8.0.0-beta.14(@types/node@25.0.3)(esbuild@0.24.2)(jiti@1.21.7)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.46.0)(yaml@2.8.0)):
+ vite-plugin-html@3.2.2(vite@7.3.1(@types/node@25.0.3)(jiti@1.21.7)(lightningcss@1.31.1)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.46.0)(yaml@2.8.0)):
dependencies:
'@rollup/pluginutils': 4.2.1
colorette: 2.0.20
@@ -13582,27 +13889,27 @@ snapshots:
html-minifier-terser: 6.1.0
node-html-parser: 5.4.2
pathe: 0.2.0
- vite: 8.0.0-beta.14(@types/node@25.0.3)(esbuild@0.24.2)(jiti@1.21.7)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.46.0)(yaml@2.8.0)
+ vite: 7.3.1(@types/node@25.0.3)(jiti@1.21.7)(lightningcss@1.31.1)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.46.0)(yaml@2.8.0)
- vite-plugin-pwa@1.2.0(vite@8.0.0-beta.14(@types/node@25.0.3)(esbuild@0.24.2)(jiti@1.21.7)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.46.0)(yaml@2.8.0))(workbox-build@7.3.0(@types/babel__core@7.20.5))(workbox-window@7.3.0):
+ vite-plugin-pwa@1.2.0(vite@7.3.1(@types/node@25.0.3)(jiti@1.21.7)(lightningcss@1.31.1)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.46.0)(yaml@2.8.0))(workbox-build@7.3.0(@types/babel__core@7.20.5))(workbox-window@7.3.0):
dependencies:
debug: 4.4.3
pretty-bytes: 6.1.1
tinyglobby: 0.2.15
- vite: 8.0.0-beta.14(@types/node@25.0.3)(esbuild@0.24.2)(jiti@1.21.7)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.46.0)(yaml@2.8.0)
+ vite: 7.3.1(@types/node@25.0.3)(jiti@1.21.7)(lightningcss@1.31.1)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.46.0)(yaml@2.8.0)
workbox-build: 7.3.0(@types/babel__core@7.20.5)
workbox-window: 7.3.0
transitivePeerDependencies:
- supports-color
- vite-plugin-require@1.2.14(esbuild@0.24.2)(vite@8.0.0-beta.14(@types/node@25.0.3)(esbuild@0.24.2)(jiti@1.21.7)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.46.0)(yaml@2.8.0)):
+ vite-plugin-require@1.2.14(esbuild@0.24.2)(vite@7.3.1(@types/node@25.0.3)(jiti@1.21.7)(lightningcss@1.31.1)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.46.0)(yaml@2.8.0)):
dependencies:
'@babel/generator': 7.28.0
'@babel/parser': 7.28.0
'@babel/traverse': 7.28.0
'@babel/types': 7.28.2
'@vue/compiler-sfc': 3.5.18
- vite: 8.0.0-beta.14(@types/node@25.0.3)(esbuild@0.24.2)(jiti@1.21.7)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.46.0)(yaml@2.8.0)
+ vite: 7.3.1(@types/node@25.0.3)(jiti@1.21.7)(lightningcss@1.31.1)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.46.0)(yaml@2.8.0)
vue-loader: 17.4.2(@vue/compiler-sfc@3.5.18)(webpack@5.101.0(esbuild@0.24.2))
webpack: 5.101.0(esbuild@0.24.2)
transitivePeerDependencies:
@@ -13613,15 +13920,51 @@ snapshots:
- vue
- webpack-cli
- vite-plugin-static-copy@3.2.0(vite@8.0.0-beta.14(@types/node@25.0.3)(esbuild@0.24.2)(jiti@1.21.7)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.46.0)(yaml@2.8.0)):
+ vite-plugin-static-copy@3.2.0(vite@7.3.1(@types/node@25.0.3)(jiti@1.21.7)(lightningcss@1.31.1)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.46.0)(yaml@2.8.0)):
dependencies:
chokidar: 3.6.0
p-map: 7.0.4
picocolors: 1.1.1
tinyglobby: 0.2.15
- vite: 8.0.0-beta.14(@types/node@25.0.3)(esbuild@0.24.2)(jiti@1.21.7)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.46.0)(yaml@2.8.0)
+ vite: 7.3.1(@types/node@25.0.3)(jiti@1.21.7)(lightningcss@1.31.1)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.46.0)(yaml@2.8.0)
- vite@8.0.0-beta.14(@types/node@20.19.9)(jiti@1.21.7)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.46.0)(yaml@2.8.0):
+ vite@7.3.1(@types/node@22.17.0)(jiti@1.21.7)(lightningcss@1.31.1)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.46.0)(yaml@2.8.0):
+ dependencies:
+ esbuild: 0.27.3
+ fdir: 6.5.0(picomatch@4.0.3)
+ picomatch: 4.0.3
+ postcss: 8.5.6
+ rollup: 4.57.1
+ tinyglobby: 0.2.15
+ optionalDependencies:
+ '@types/node': 22.17.0
+ fsevents: 2.3.3
+ jiti: 1.21.7
+ lightningcss: 1.31.1
+ sass: 1.93.3
+ sass-embedded: 1.93.3
+ terser: 5.46.0
+ yaml: 2.8.0
+
+ vite@7.3.1(@types/node@25.0.3)(jiti@1.21.7)(lightningcss@1.31.1)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.46.0)(yaml@2.8.0):
+ dependencies:
+ esbuild: 0.27.3
+ fdir: 6.5.0(picomatch@4.0.3)
+ picomatch: 4.0.3
+ postcss: 8.5.6
+ rollup: 4.57.1
+ tinyglobby: 0.2.15
+ optionalDependencies:
+ '@types/node': 25.0.3
+ fsevents: 2.3.3
+ jiti: 1.21.7
+ lightningcss: 1.31.1
+ sass: 1.93.3
+ sass-embedded: 1.93.3
+ terser: 5.46.0
+ yaml: 2.8.0
+
+ vite@8.0.0-beta.14(@types/node@20.19.9)(esbuild@0.27.3)(jiti@1.21.7)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.46.0)(yaml@2.8.0):
dependencies:
'@oxc-project/runtime': 0.113.0
fdir: 6.5.0(picomatch@4.0.3)
@@ -13632,43 +13975,7 @@ snapshots:
tinyglobby: 0.2.15
optionalDependencies:
'@types/node': 20.19.9
- fsevents: 2.3.3
- jiti: 1.21.7
- sass: 1.93.3
- sass-embedded: 1.93.3
- terser: 5.46.0
- yaml: 2.8.0
-
- vite@8.0.0-beta.14(@types/node@22.17.0)(jiti@1.21.7)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.46.0)(yaml@2.8.0):
- dependencies:
- '@oxc-project/runtime': 0.113.0
- fdir: 6.5.0(picomatch@4.0.3)
- lightningcss: 1.31.1
- picomatch: 4.0.3
- postcss: 8.5.6
- rolldown: 1.0.0-rc.4
- tinyglobby: 0.2.15
- optionalDependencies:
- '@types/node': 22.17.0
- fsevents: 2.3.3
- jiti: 1.21.7
- sass: 1.93.3
- sass-embedded: 1.93.3
- terser: 5.46.0
- yaml: 2.8.0
-
- vite@8.0.0-beta.14(@types/node@25.0.3)(esbuild@0.24.2)(jiti@1.21.7)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.46.0)(yaml@2.8.0):
- dependencies:
- '@oxc-project/runtime': 0.113.0
- fdir: 6.5.0(picomatch@4.0.3)
- lightningcss: 1.31.1
- picomatch: 4.0.3
- postcss: 8.5.6
- rolldown: 1.0.0-rc.4
- tinyglobby: 0.2.15
- optionalDependencies:
- '@types/node': 25.0.3
- esbuild: 0.24.2
+ esbuild: 0.27.3
fsevents: 2.3.3
jiti: 1.21.7
sass: 1.93.3
From ad0012941150a4b6e311386c3da0c8d6498f336d Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?nicole=20miko=C5=82ajczyk?=
Date: Sun, 15 Feb 2026 02:55:43 +0100
Subject: [PATCH 10/74] pl-api: migrate to oxfmt+oxlint
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Signed-off-by: nicole mikołajczyk
---
.husky/pre-commit | 3 +-
packages/pl-api/.eslintignore | 7 -
packages/pl-api/.eslintrc.json | 215 --
packages/pl-api/.oxfmtrc.json | 11 +
packages/pl-api/.oxlintrc.json | 60 +
packages/pl-api/README.md | 5 +-
packages/pl-api/lib/client.ts | 2338 +++++++++++------
packages/pl-api/lib/directory-client.ts | 7 +-
.../pl-api/lib/entities/account-warning.ts | 12 +-
packages/pl-api/lib/entities/account.ts | 222 +-
packages/pl-api/lib/entities/admin/account.ts | 17 +-
.../entities/admin/canonical-email-block.ts | 5 +-
packages/pl-api/lib/entities/admin/cohort.ts | 17 +-
.../pl-api/lib/entities/admin/dimension.ts | 21 +-
.../pl-api/lib/entities/admin/domain-allow.ts | 5 +-
.../pl-api/lib/entities/admin/domain-block.ts | 5 +-
packages/pl-api/lib/entities/admin/domain.ts | 2 +-
.../lib/entities/admin/email-domain-block.ts | 17 +-
.../pl-api/lib/entities/admin/ip-block.ts | 5 +-
packages/pl-api/lib/entities/admin/ip.ts | 5 +-
packages/pl-api/lib/entities/admin/measure.ts | 15 +-
.../entities/admin/moderation-log-entry.ts | 2 +-
.../lib/entities/admin/pleroma-config.ts | 14 +-
packages/pl-api/lib/entities/admin/relay.ts | 2 +-
packages/pl-api/lib/entities/admin/report.ts | 10 +-
packages/pl-api/lib/entities/admin/tag.ts | 5 +-
packages/pl-api/lib/entities/announcement.ts | 10 +-
packages/pl-api/lib/entities/antenna.ts | 2 +-
packages/pl-api/lib/entities/application.ts | 42 +-
.../pl-api/lib/entities/bookmark-folder.ts | 22 +-
packages/pl-api/lib/entities/drive-file.ts | 40 +-
packages/pl-api/lib/entities/drive-folder.ts | 28 +-
packages/pl-api/lib/entities/drive-status.ts | 22 +-
.../pl-api/lib/entities/emoji-reaction.ts | 18 +-
.../pl-api/lib/entities/familiar-followers.ts | 2 +-
packages/pl-api/lib/entities/filter.ts | 12 +-
packages/pl-api/lib/entities/group-member.ts | 41 +-
packages/pl-api/lib/entities/group.ts | 113 +-
.../entities/grouped-notifications-results.ts | 34 +-
packages/pl-api/lib/entities/instance.ts | 188 +-
.../pl-api/lib/entities/interaction-policy.ts | 19 +-
packages/pl-api/lib/entities/item.ts | 53 +-
packages/pl-api/lib/entities/location.ts | 13 +-
packages/pl-api/lib/entities/marker.ts | 19 +-
.../pl-api/lib/entities/media-attachment.ts | 121 +-
packages/pl-api/lib/entities/notification.ts | 47 +-
packages/pl-api/lib/entities/quote.ts | 12 +-
packages/pl-api/lib/entities/review.ts | 5 +-
packages/pl-api/lib/entities/role.ts | 5 +-
packages/pl-api/lib/entities/rule.ts | 14 +-
.../pl-api/lib/entities/scheduled-status.ts | 17 +-
packages/pl-api/lib/entities/scrobble.ts | 12 +-
packages/pl-api/lib/entities/status-edit.ts | 17 +-
packages/pl-api/lib/entities/status.ts | 116 +-
.../lib/entities/story-carousel-item.ts | 38 +-
packages/pl-api/lib/entities/story-media.ts | 22 +-
.../pl-api/lib/entities/streaming-event.ts | 90 +-
.../lib/entities/subscription-details.ts | 5 +-
.../lib/entities/subscription-invoice.ts | 16 +-
.../lib/entities/subscription-option.ts | 5 +-
packages/pl-api/lib/entities/suggestion.ts | 19 +-
packages/pl-api/lib/entities/tag.ts | 18 +-
packages/pl-api/lib/entities/translation.ts | 25 +-
packages/pl-api/lib/entities/utils.ts | 22 +-
packages/pl-api/lib/features.ts | 236 +-
packages/pl-api/lib/main.ts | 2 +-
packages/pl-api/lib/params/accounts.ts | 14 +-
packages/pl-api/lib/params/admin.ts | 30 +-
packages/pl-api/lib/params/antennas.ts | 5 +-
packages/pl-api/lib/params/apps.ts | 4 +-
packages/pl-api/lib/params/chats.ts | 22 +-
packages/pl-api/lib/params/circles.ts | 5 +-
packages/pl-api/lib/params/instance.ts | 4 +-
.../pl-api/lib/params/interaction-requests.ts | 4 +-
packages/pl-api/lib/params/lists.ts | 10 +-
packages/pl-api/lib/params/media.ts | 5 +-
packages/pl-api/lib/params/oauth.ts | 7 +-
.../pl-api/lib/params/scheduled-statuses.ts | 4 +-
packages/pl-api/lib/params/search.ts | 4 +-
packages/pl-api/lib/params/settings.ts | 36 +-
packages/pl-api/lib/params/statuses.ts | 18 +-
packages/pl-api/lib/params/stories.ts | 10 +-
packages/pl-api/lib/params/timelines.ts | 26 +-
packages/pl-api/lib/params/trends.ts | 6 +-
packages/pl-api/lib/request.ts | 60 +-
packages/pl-api/lib/responses.ts | 4 +-
packages/pl-api/lib/utils/accounts.ts | 17 +-
packages/pl-api/lib/utils/domain.ts | 3 +-
packages/pl-api/lib/utils/url.ts | 12 +-
packages/pl-api/package.json | 63 +-
pnpm-lock.yaml | 372 +--
91 files changed, 3167 insertions(+), 2147 deletions(-)
delete mode 100644 packages/pl-api/.eslintignore
delete mode 100644 packages/pl-api/.eslintrc.json
create mode 100644 packages/pl-api/.oxfmtrc.json
create mode 100644 packages/pl-api/.oxlintrc.json
diff --git a/.husky/pre-commit b/.husky/pre-commit
index b3d4e050d..143e52c17 100755
--- a/.husky/pre-commit
+++ b/.husky/pre-commit
@@ -1,4 +1,5 @@
#!/bin/sh
. "$(dirname "$0")/_/husky.sh"
-cd packages/pl-fe && pnpm precommit && cd -
\ No newline at end of file
+cd packages/pl-api && pnpm precommit && cd -
+cd packages/pl-fe && pnpm precommit && cd -
diff --git a/packages/pl-api/.eslintignore b/packages/pl-api/.eslintignore
deleted file mode 100644
index 256b5ff45..000000000
--- a/packages/pl-api/.eslintignore
+++ /dev/null
@@ -1,7 +0,0 @@
-/node_modules/**
-/dist/**
-/static/**
-/public/**
-/tmp/**
-/coverage/**
-/custom/**
diff --git a/packages/pl-api/.eslintrc.json b/packages/pl-api/.eslintrc.json
deleted file mode 100644
index d3d44b71f..000000000
--- a/packages/pl-api/.eslintrc.json
+++ /dev/null
@@ -1,215 +0,0 @@
-{
- "root": true,
- "extends": [
- "eslint:recommended",
- "plugin:import/typescript",
- "plugin:compat/recommended"
- ],
- "env": {
- "browser": true,
- "node": true,
- "es6": true,
- "jest": true
- },
- "globals": {
- "ATTACHMENT_HOST": false
- },
- "plugins": [
- "@stylistic",
- "import",
- "promise",
- "@typescript-eslint"
- ],
- "parserOptions": {
- "sourceType": "module",
- "ecmaFeatures": {
- "experimentalObjectRestSpread": true
- },
- "ecmaVersion": 2018
- },
- "settings": {
- "import/extensions": [
- ".js",
- ".cjs",
- ".mjs",
- ".ts"
- ],
- "import/ignore": [
- "node_modules",
- "\\.(css|scss|json)$"
- ],
- "import/resolver": {
- "typescript": true,
- "node": true
- },
- "polyfills": [
- "es:all",
- "fetch",
- "IntersectionObserver",
- "Promise",
- "ResizeObserver",
- "URL",
- "URLSearchParams"
- ]
- },
- "rules": {
- "brace-style": "error",
- "comma-dangle": [
- "error",
- "always-multiline"
- ],
- "comma-spacing": [
- "warn",
- {
- "before": false,
- "after": true
- }
- ],
- "comma-style": [
- "warn",
- "last"
- ],
- "import/no-duplicates": "error",
- "space-before-function-paren": [
- "error",
- "never"
- ],
- "space-infix-ops": "error",
- "space-in-parens": [
- "error",
- "never"
- ],
- "keyword-spacing": "error",
- "dot-notation": "error",
- "eqeqeq": "error",
- "indent": [
- "error",
- 2,
- {
- "SwitchCase": 1,
- "ignoredNodes": [
- "TemplateLiteral"
- ]
- }
- ],
- "key-spacing": [
- "error",
- {
- "mode": "minimum"
- }
- ],
- "no-catch-shadow": "error",
- "no-cond-assign": "error",
- "no-console": [
- "warn",
- {
- "allow": [
- "error",
- "warn"
- ]
- }
- ],
- "no-extra-semi": "error",
- "no-const-assign": "error",
- "no-fallthrough": "error",
- "no-irregular-whitespace": "error",
- "no-loop-func": "error",
- "no-mixed-spaces-and-tabs": "error",
- "no-nested-ternary": "warn",
- "no-trailing-spaces": "error",
- "no-undef": "error",
- "no-unreachable": "error",
- "no-unused-expressions": "error",
- "no-unused-vars": "off",
- "@typescript-eslint/no-unused-vars": [
- "error",
- {
- "vars": "all",
- "args": "none",
- "ignoreRestSiblings": true,
- "caughtErrors": "none",
- "argsIgnorePattern": "^_",
- "varsIgnorePattern": "^_"
- }
- ],
- "no-useless-escape": "warn",
- "no-var": "error",
- "object-curly-spacing": [
- "error",
- "always"
- ],
- "padded-blocks": [
- "error",
- {
- "classes": "always"
- }
- ],
- "prefer-const": "error",
- "quotes": [
- "error",
- "single"
- ],
- "semi": "error",
- "space-unary-ops": [
- "error",
- {
- "words": true,
- "nonwords": false
- }
- ],
- "strict": "off",
- "valid-typeof": "error",
- "import/extensions": [
- "error",
- "always",
- {
- "js": "never",
- "mjs": "ignorePackages",
- "ts": "never"
- }
- ],
- "import/newline-after-import": "error",
- "import/no-extraneous-dependencies": "error",
- "import/no-unresolved": "error",
- "import/no-webpack-loader-syntax": "error",
- "import/order": [
- "error",
- {
- "groups": [
- "builtin",
- "external",
- "internal",
- "parent",
- "sibling",
- "index",
- "object",
- "type"
- ],
- "newlines-between": "always",
- "alphabetize": {
- "order": "asc"
- }
- }
- ],
- "@stylistic/member-delimiter-style": "error",
- "promise/catch-or-return": "error",
- "sort-imports": [
- "error",
- {
- "ignoreCase": true,
- "ignoreDeclarationSort": true
- }
- ],
- "eol-last": "error"
- },
- "overrides": [
- {
- "files": ["**/*.ts"],
- "rules": {
- "no-undef": "off",
- "space-before-function-paren": "off"
- },
- "parser": "@typescript-eslint/parser"
- }
- ]
-}
diff --git a/packages/pl-api/.oxfmtrc.json b/packages/pl-api/.oxfmtrc.json
new file mode 100644
index 000000000..f3af56790
--- /dev/null
+++ b/packages/pl-api/.oxfmtrc.json
@@ -0,0 +1,11 @@
+{
+ "$schema": "./node_modules/oxfmt/configuration_schema.json",
+ "ignorePatterns": [],
+ "printWidth": null,
+ "singleQuote": true,
+ "arrowParens": null,
+ "experimentalSortImports": {
+ "groups": ["builtin", "external", "internal", "parent", "sibling", "index", "object", "type"]
+ },
+ "tabWidth": 2
+}
diff --git a/packages/pl-api/.oxlintrc.json b/packages/pl-api/.oxlintrc.json
new file mode 100644
index 000000000..ad54a5067
--- /dev/null
+++ b/packages/pl-api/.oxlintrc.json
@@ -0,0 +1,60 @@
+{
+ "$schema": "./node_modules/oxlint/configuration_schema.json",
+ "plugins": ["typescript", "import", "promise"],
+ "categories": {
+ "correctness": "error",
+ "suspicious": "error",
+ "pedantic": "warn"
+ },
+ "rules": {
+ "max-dependencies": "off",
+ "max-lines": "off",
+ "max-lines-per-function": "off",
+ "no-inline-comments": "off",
+ "no-unused-vars": [
+ "error",
+ {
+ "vars": "all",
+ "args": "none",
+ "ignoreRestSiblings": true,
+ "caughtErrors": "none",
+ "argsIgnorePattern": "^_",
+ "varsIgnorePattern": "^_"
+ }
+ ]
+ },
+ "settings": {
+ "jsx-a11y": {
+ "polymorphicPropName": null,
+ "components": {},
+ "attributes": {}
+ },
+ "next": {
+ "rootDir": []
+ },
+ "react": {
+ "formComponents": [],
+ "linkComponents": [],
+ "version": null,
+ "componentWrapperFunctions": []
+ },
+ "jsdoc": {
+ "ignorePrivate": false,
+ "ignoreInternal": false,
+ "ignoreReplacesDocs": true,
+ "overrideReplacesDocs": true,
+ "augmentsExtendsReplacesDocs": false,
+ "implementsReplacesDocs": false,
+ "exemptDestructuredRootsFromChecks": false,
+ "tagNamePreference": {}
+ }
+ },
+ "env": {
+ "builtin": true,
+ "browser": true,
+ "node": true,
+ "es6": true
+ },
+ "globals": {},
+ "ignorePatterns": []
+}
diff --git a/packages/pl-api/README.md b/packages/pl-api/README.md
index 0c5e3e4ab..db28bdfb9 100644
--- a/packages/pl-api/README.md
+++ b/packages/pl-api/README.md
@@ -9,6 +9,7 @@ A JavaScript library for interacting with Mastodon API-compatible servers, focus
`pl-api` attempts to abstract out the implementation details when supporting different backends, implementing the same features in different ways. It uses [Valibot](https://valibot.dev/) to ensure type safety and normalize API responses.
Example:
+
```ts
import { PlApiClient, type CreateApplicationParams } from 'pl-api';
@@ -37,8 +38,8 @@ For unsupported projects, it falls back to a basic feature set, though every met
## Projects using `pl-api`
-* [Nicolium](https://codeberg.org/mkljczk/nicolium/src/branch/develop/packages/pl-fe) is a web client for Mastodon-compatible servers forked from Soapbox. It uses `pl-api` for API interactions.
-* [`pl-hooks`](https://codeberg.org/mkljczk/nicolium/src/branch/develop/packages/pl-hooks) is a work-in-progress library utilizing `pl-api`.
+- [Nicolium](https://codeberg.org/mkljczk/nicolium/src/branch/develop/packages/pl-fe) is a web client for Mastodon-compatible servers forked from Soapbox. It uses `pl-api` for API interactions.
+- [`pl-hooks`](https://codeberg.org/mkljczk/nicolium/src/branch/develop/packages/pl-hooks) is a work-in-progress library utilizing `pl-api`.
If you are using `pl-api` in your project, please open a pull request with a link to the project.
diff --git a/packages/pl-api/lib/client.ts b/packages/pl-api/lib/client.ts
index 5cbca163e..b2276cdce 100644
--- a/packages/pl-api/lib/client.ts
+++ b/packages/pl-api/lib/client.ts
@@ -97,8 +97,23 @@ import {
webPushSubscriptionSchema,
} from './entities';
import { coerceObject, filteredArray } from './entities/utils';
-import { AKKOMA, type Features, getFeatures, GOTOSOCIAL, ICESHRIMP_NET, MITRA, PIXELFED, PLEROMA } from './features';
-import request, { getAsyncRefreshHeader, getNextLink, getPrevLink, type RequestBody, type RequestMeta } from './request';
+import {
+ AKKOMA,
+ type Features,
+ getFeatures,
+ GOTOSOCIAL,
+ ICESHRIMP_NET,
+ MITRA,
+ PIXELFED,
+ PLEROMA,
+} from './features';
+import request, {
+ getAsyncRefreshHeader,
+ getNextLink,
+ getPrevLink,
+ type RequestBody,
+ type RequestMeta,
+} from './request';
import { buildFullPath } from './utils/url';
import type {
@@ -191,7 +206,10 @@ import type {
MuteAccountParams,
UpdateFilterParams,
} from './params/filtering';
-import type { GetGroupedNotificationsParams, GetUnreadNotificationGroupCountParams } from './params/grouped-notifications';
+import type {
+ GetGroupedNotificationsParams,
+ GetUnreadNotificationGroupCountParams,
+} from './params/grouped-notifications';
import type {
CreateGroupParams,
GetGroupBlocksParams,
@@ -200,18 +218,9 @@ import type {
UpdateGroupParams,
} from './params/groups';
import type { ProfileDirectoryParams } from './params/instance';
-import type {
- GetInteractionRequestsParams,
-} from './params/interaction-requests';
-import type {
- CreateListParams,
- GetListAccountsParams,
- UpdateListParams,
-} from './params/lists';
-import type {
- UpdateMediaParams,
- UploadMediaParams,
-} from './params/media';
+import type { GetInteractionRequestsParams } from './params/interaction-requests';
+import type { CreateListParams, GetListAccountsParams, UpdateListParams } from './params/lists';
+import type { UpdateMediaParams, UploadMediaParams } from './params/media';
import type {
CreateBookmarkFolderParams,
GetBookmarksParams,
@@ -258,7 +267,12 @@ import type {
GetStatusQuotesParams,
GetStatusReferencesParams,
} from './params/statuses';
-import type { CreateStoryParams, CreateStoryPollParams, CropStoryPhotoParams, StoryReportType } from './params/stories';
+import type {
+ CreateStoryParams,
+ CreateStoryPollParams,
+ CropStoryPhotoParams,
+ StoryReportType,
+} from './params/stories';
import type {
AntennaTimelineParams,
BubbleTimelineParams,
@@ -272,14 +286,19 @@ import type {
SaveMarkersParams,
WrenchedTimelineParams,
} from './params/timelines';
-import type {
- GetTrendingLinks,
- GetTrendingStatuses,
- GetTrendingTags,
-} from './params/trends';
+import type { GetTrendingLinks, GetTrendingStatuses, GetTrendingTags } from './params/trends';
import type { PaginatedResponse } from './responses';
-const GROUPED_TYPES = ['favourite', 'reblog', 'emoji_reaction', 'event_reminder', 'participation_accepted', 'participation_request'];
+const GROUPED_TYPES = [
+ 'favourite',
+ 'reblog',
+ 'emoji_reaction',
+ 'event_reminder',
+ 'participation_accepted',
+ 'participation_request',
+];
+
+type EmptyObject = Record;
interface PlApiClientConstructorOpts {
/** Instance object to use by default, to be populated eg. from cache */
@@ -301,7 +320,6 @@ interface PlApiClientConstructorOpts {
* @category Clients
*/
class PlApiClient {
-
baseURL: string;
#accessToken?: string;
#iceshrimpAccessToken?: string;
@@ -326,14 +344,18 @@ class PlApiClient {
* @param baseURL Mastodon API-compatible server URL
* @param accessToken OAuth token for an authorized user
*/
- constructor(baseURL: string, accessToken?: string, {
- instance,
- fetchInstance,
- fetchInstanceSignal,
- onInstanceFetchSuccess,
- onInstanceFetchError,
- customAuthorizationToken,
- }: PlApiClientConstructorOpts = {}) {
+ constructor(
+ baseURL: string,
+ accessToken?: string,
+ {
+ instance,
+ fetchInstance,
+ fetchInstanceSignal,
+ onInstanceFetchSuccess,
+ onInstanceFetchError,
+ customAuthorizationToken,
+ }: PlApiClientConstructorOpts = {},
+ ) {
this.baseURL = baseURL;
this.#accessToken = accessToken;
this.#customAuthorizationToken = customAuthorizationToken;
@@ -342,27 +364,37 @@ class PlApiClient {
this.#setInstance(instance);
}
if (fetchInstance) {
- this.instance.getInstance().then((instance) => {
- if (fetchInstanceSignal?.aborted) return;
- onInstanceFetchSuccess?.(instance);
- }).catch((error) => {
- if (fetchInstanceSignal?.aborted) return;
- onInstanceFetchError?.(error);
- });
+ this.instance
+ .getInstance()
+ .then((instance) => {
+ if (fetchInstanceSignal?.aborted) return;
+ return onInstanceFetchSuccess?.(instance);
+ })
+ .catch((error) => {
+ if (fetchInstanceSignal?.aborted) return;
+ onInstanceFetchError?.(error);
+ });
}
}
- #paginatedGet = async (input: URL | RequestInfo, body: RequestBody, schema: v.BaseSchema>, isArray = true as IsArray): Promise> => {
+ #paginatedGet = async (
+ input: URL | RequestInfo,
+ body: RequestBody,
+ schema: v.BaseSchema>,
+ isArray = true as IsArray,
+ ): Promise> => {
const targetSchema = isArray ? filteredArray(schema) : schema;
- const processResponse = (response: PlApiResponse) => ({
- previous: getMore(getPrevLink(response)),
- next: getMore(getNextLink(response)),
- items: v.parse(targetSchema, response.json),
- partial: response.status === 206,
- } as PaginatedResponse);
+ const processResponse = (response: PlApiResponse) =>
+ ({
+ previous: getMore(getPrevLink(response)),
+ next: getMore(getNextLink(response)),
+ items: v.parse(targetSchema, response.json),
+ partial: response.status === 206,
+ }) as PaginatedResponse;
- const getMore = (input: string | null) => input ? () => this.request(input).then(processResponse) : null;
+ const getMore = (input: string | null) =>
+ input ? () => this.request(input).then(processResponse) : null;
const response = await this.request(input, body);
@@ -387,10 +419,14 @@ class PlApiClient {
// adminAccounts.forEach((adminAccount) => adminAccount.account = accounts.find(({ id }) => id === adminAccount.id) || null);
return {
- previous: !params.page ? null : () => this.#paginatedPleromaAccounts({ ...params, page: params.page! - 1 }),
- next: response.json?.count > (params.page_size * ((params.page || 1) - 1) + response.json?.users?.length)
- ? () => this.#paginatedPleromaAccounts({ ...params, page: (params.page || 0) + 1 })
+ previous: params.page
+ ? () => this.#paginatedPleromaAccounts({ ...params, page: params.page! - 1 })
: null,
+ next:
+ response.json?.count >
+ params.page_size * ((params.page || 1) - 1) + response.json?.users?.length
+ ? () => this.#paginatedPleromaAccounts({ ...params, page: (params.page || 0) + 1 })
+ : null,
items: adminAccounts,
partial: response.status === 206,
total: response.json?.count,
@@ -406,10 +442,14 @@ class PlApiClient {
const response = await this.request('/api/v1/pleroma/admin/reports', { params });
return {
- previous: !params.page ? null : () => this.#paginatedPleromaReports({ ...params, page: params.page! - 1 }),
- next: response.json?.total > (params.page_size * ((params.page || 1) - 1) + response.json?.reports?.length)
- ? () => this.#paginatedPleromaReports({ ...params, page: (params.page || 0) + 1 })
+ previous: params.page
+ ? () => this.#paginatedPleromaReports({ ...params, page: params.page! - 1 })
: null,
+ next:
+ response.json?.total >
+ params.page_size * ((params.page || 1) - 1) + response.json?.reports?.length
+ ? () => this.#paginatedPleromaReports({ ...params, page: (params.page || 0) + 1 })
+ : null,
items: v.parse(filteredArray(adminReportSchema), response.json?.reports),
partial: response.status === 206,
total: response.json?.total,
@@ -426,7 +466,9 @@ class PlApiClient {
const response = await this.request('/api/v1/pleroma/admin/statuses', { params });
return {
- previous: !params.page ? null : () => this.#paginatedPleromaStatuses({ ...params, page: params.page! - 1 }),
+ previous: params.page
+ ? () => this.#paginatedPleromaStatuses({ ...params, page: params.page! - 1 })
+ : null,
next: response.json?.length
? () => this.#paginatedPleromaStatuses({ ...params, page: (params.page || 0) + 1 })
: null,
@@ -435,10 +477,13 @@ class PlApiClient {
};
};
- #paginatedIceshrimpAccountsList = async (url: string, fn: (body: T) => Array): Promise> => {
+ #paginatedIceshrimpAccountsList = async (
+ url: string,
+ fn: (body: T) => Array,
+ ): Promise> => {
await this.#getIceshrimpAccessToken();
- const response = (await this.request(url));
+ const response = await this.request(url);
const ids = fn(response.json);
const accounts = await this.accounts.getAccounts(ids);
@@ -454,19 +499,24 @@ class PlApiClient {
};
};
- #groupNotifications = ({ previous, next, items, ...response }: PaginatedResponse, params?: GetGroupedNotificationsParams): PaginatedResponse => {
+ #groupNotifications = (
+ { previous, next, items, ...response }: PaginatedResponse,
+ params?: GetGroupedNotificationsParams,
+ ): PaginatedResponse => {
const notificationGroups: Array = [];
for (const notification of items) {
let existingGroup: NotificationGroup | undefined;
if ((params?.grouped_types || GROUPED_TYPES).includes(notification.type)) {
- existingGroup = notificationGroups
- .find(notificationGroup =>
- notificationGroup.type === notification.type
- && ((notification.type === 'emoji_reaction' && notificationGroup.type === 'emoji_reaction') ? notification.emoji === notificationGroup.emoji : true)
- // @ts-ignore
- && notificationGroup.status_id === notification.status?.id,
- );
+ existingGroup = notificationGroups.find(
+ (notificationGroup) =>
+ notificationGroup.type === notification.type &&
+ (notification.type === 'emoji_reaction' && notificationGroup.type === 'emoji_reaction'
+ ? notification.emoji === notificationGroup.emoji
+ : true) &&
+ // @ts-expect-error used optional chaining
+ notificationGroup.status_id === notification.status?.id,
+ );
}
if (existingGroup) {
@@ -475,7 +525,7 @@ class PlApiClient {
existingGroup.sample_account_ids.push(notification.account.id);
} else {
notificationGroups.push({
- ...(omit(notification, ['account', 'status', 'target'])),
+ ...omit(notification, ['account', 'status', 'target']),
group_key: notification.id,
notifications_count: 1,
most_recent_notification_id: notification.id,
@@ -483,25 +533,30 @@ class PlApiClient {
page_max_id: notification.id,
latest_page_notification_at: notification.created_at,
sample_account_ids: [notification.account.id],
- // @ts-ignore
+ // @ts-expect-error used optional chaining
status_id: notification.status?.id,
- // @ts-ignore
+ // @ts-expect-error used optional chaining
target_id: notification.target?.id,
});
}
}
const groupedNotificationsResults: GroupedNotificationsResults = {
- accounts: Object.values(items.reduce>((accounts, notification) => {
- accounts[notification.account.id] = notification.account;
- if ('target' in notification) accounts[notification.target.id] = notification.target;
+ accounts: Object.values(
+ items.reduce>((accounts, notification) => {
+ accounts[notification.account.id] = notification.account;
+ if ('target' in notification) accounts[notification.target.id] = notification.target;
- return accounts;
- }, {})),
- statuses: Object.values(items.reduce>((statuses, notification) => {
- if ('status' in notification && notification.status) statuses[notification.status.id] = notification.status;
- return statuses;
- }, {})),
+ return accounts;
+ }, {}),
+ ),
+ statuses: Object.values(
+ items.reduce>((statuses, notification) => {
+ if ('status' in notification && notification.status)
+ statuses[notification.status.id] = notification.status;
+ return statuses;
+ }, {}),
+ ),
notification_groups: notificationGroups,
};
@@ -557,35 +612,39 @@ class PlApiClient {
*/
getToken: async (params: GetTokenParams) => {
if (this.features.version.software === ICESHRIMP_NET && params.grant_type === 'password') {
- const loginResponse = (await this.request<{
- token: string;
- }>('/api/iceshrimp/auth/login', {
- method: 'POST',
- body: {
- username: params.username,
- password: params.password,
- },
- })).json;
+ const loginResponse = (
+ await this.request<{
+ token: string;
+ }>('/api/iceshrimp/auth/login', {
+ method: 'POST',
+ body: {
+ username: params.username,
+ password: params.password,
+ },
+ })
+ ).json;
this.#iceshrimpAccessToken = loginResponse.token;
- const mastodonTokenResponse = (await this.request<{
- id: string;
- token: string;
- created_at: string;
- scopes: Array;
- }>('/api/iceshrimp/sessions/mastodon', {
- method: 'POST',
- body: {
- appName: params.client_id,
- scopes: params.scope?.split(' '),
- flags: {
- supportsHtmlFormatting: true,
- autoDetectQuotes: false,
- isPleroma: true,
- supportsInlineMedia: true,
+ const mastodonTokenResponse = (
+ await this.request<{
+ id: string;
+ token: string;
+ created_at: string;
+ scopes: Array;
+ }>('/api/iceshrimp/sessions/mastodon', {
+ method: 'POST',
+ body: {
+ appName: params.client_id,
+ scopes: params.scope?.split(' '),
+ flags: {
+ supportsHtmlFormatting: true,
+ autoDetectQuotes: false,
+ isPleroma: true,
+ supportsInlineMedia: true,
+ },
},
- },
- })).json;
+ })
+ ).json;
return v.parse(tokenSchema, {
access_token: mastodonTokenResponse.token,
@@ -594,11 +653,14 @@ class PlApiClient {
created_at: new Date(mastodonTokenResponse.created_at).getTime(),
id: mastodonTokenResponse.id,
});
- } else {
- const response = await this.request('/oauth/token', { method: 'POST', body: params, contentType: '' });
-
- return v.parse(tokenSchema, { scope: params.scope || '', ...response.json });
}
+ const response = await this.request('/oauth/token', {
+ method: 'POST',
+ body: params,
+ contentType: '',
+ });
+
+ return v.parse(tokenSchema, { scope: params.scope || '', ...response.json });
},
/**
@@ -607,11 +669,15 @@ class PlApiClient {
* @see {@link https://docs.joinmastodon.org/methods/oauth/#revoke}
*/
revokeToken: async (params: RevokeTokenParams) => {
- const response = await this.request('/oauth/revoke', { method: 'POST', body: params, contentType: '' });
+ const response = await this.request('/oauth/revoke', {
+ method: 'POST',
+ body: params,
+ contentType: '',
+ });
this.#socket?.close();
- return response.json as {};
+ return response.json;
},
/**
@@ -634,13 +700,19 @@ class PlApiClient {
/**
* Get a new captcha
* @see {@link https://docs.pleroma.social/backend/development/API/pleroma_api/#apiv1pleromacaptcha}
- */
+ */
getCaptcha: async () => {
const response = await this.request('/api/pleroma/captcha');
- return v.parse(v.intersect([v.object({
- type: v.string(),
- }), v.record(v.string(), v.any())]), response.json);
+ return v.parse(
+ v.intersect([
+ v.object({
+ type: v.string(),
+ }),
+ v.record(v.string(), v.any()),
+ ]),
+ response.json,
+ );
},
mfaChallenge: async (params: MfaChallengeParams) => {
@@ -652,9 +724,12 @@ class PlApiClient {
public readonly emails = {
resendConfirmationEmail: async (email: string) => {
- const response = await this.request('/api/v1/emails/confirmations', { method: 'POST', body: { email } });
+ const response = await this.request('/api/v1/emails/confirmations', {
+ method: 'POST',
+ body: { email },
+ });
- return response.json as {};
+ return response.json;
},
};
@@ -688,7 +763,7 @@ class PlApiClient {
* Statuses posted to the given account.
* @see {@link https://docs.joinmastodon.org/methods/accounts/#statuses}
*/
- getAccountStatuses: async (accountId: string, params?: GetAccountStatusesParams) =>
+ getAccountStatuses: (accountId: string, params?: GetAccountStatusesParams) =>
this.#paginatedGet(`/api/v1/accounts/${accountId}/statuses`, { params }, statusSchema),
/**
@@ -696,7 +771,7 @@ class PlApiClient {
* Accounts which follow the given account, if network is not hidden by the account owner.
* @see {@link https://docs.joinmastodon.org/methods/accounts/#followers}
*/
- getAccountFollowers: async (accountId: string, params?: GetAccountFollowersParams) =>
+ getAccountFollowers: (accountId: string, params?: GetAccountFollowersParams) =>
this.#paginatedGet(`/api/v1/accounts/${accountId}/followers`, { params }, accountSchema),
/**
@@ -704,7 +779,7 @@ class PlApiClient {
* Accounts which the given account is following, if network is not hidden by the account owner.
* @see {@link https://docs.joinmastodon.org/methods/accounts/#following}
*/
- getAccountFollowing: async (accountId: string, params?: GetAccountFollowingParams) =>
+ getAccountFollowing: (accountId: string, params?: GetAccountFollowingParams) =>
this.#paginatedGet(`/api/v1/accounts/${accountId}/following`, { params }, accountSchema),
/**
@@ -712,7 +787,7 @@ class PlApiClient {
*
* Requires features{@link Features.subscriptions}.
*/
- getAccountSubscribers: async (accountId: string, params?: GetAccountSubscribersParams) =>
+ getAccountSubscribers: (accountId: string, params?: GetAccountSubscribersParams) =>
this.#paginatedGet(`/api/v1/accounts/${accountId}/subscribers`, { params }, accountSchema),
/**
@@ -777,7 +852,10 @@ class PlApiClient {
* @see {@link https://docs.joinmastodon.org/methods/accounts/#follow}
*/
followAccount: async (accountId: string, params?: FollowAccountParams) => {
- const response = await this.request(`/api/v1/accounts/${accountId}/follow`, { method: 'POST', body: params });
+ const response = await this.request(`/api/v1/accounts/${accountId}/follow`, {
+ method: 'POST',
+ body: params,
+ });
return v.parse(relationshipSchema, response.json);
},
@@ -788,7 +866,9 @@ class PlApiClient {
* @see {@link https://docs.joinmastodon.org/methods/accounts/#unfollow}
*/
unfollowAccount: async (accountId: string) => {
- const response = await this.request(`/api/v1/accounts/${accountId}/unfollow`, { method: 'POST' });
+ const response = await this.request(`/api/v1/accounts/${accountId}/unfollow`, {
+ method: 'POST',
+ });
return v.parse(relationshipSchema, response.json);
},
@@ -799,7 +879,9 @@ class PlApiClient {
* @see {@link https://docs.joinmastodon.org/methods/accounts/#remove_from_followers}
*/
removeAccountFromFollowers: async (accountId: string) => {
- const response = await this.request(`/api/v1/accounts/${accountId}/remove_from_followers`, { method: 'POST' });
+ const response = await this.request(`/api/v1/accounts/${accountId}/remove_from_followers`, {
+ method: 'POST',
+ });
return v.parse(relationshipSchema, response.json);
},
@@ -821,7 +903,9 @@ class PlApiClient {
* @see {@link https://docs.joinmastodon.org/methods/accounts/#unpin}
*/
unpinAccount: async (accountId: string) => {
- const response = await this.request(`/api/v1/accounts/${accountId}/unpin`, { method: 'POST' });
+ const response = await this.request(`/api/v1/accounts/${accountId}/unpin`, {
+ method: 'POST',
+ });
return v.parse(relationshipSchema, response.json);
},
@@ -832,7 +916,10 @@ class PlApiClient {
* @see {@link https://docs.joinmastodon.org/methods/accounts/#note}
*/
updateAccountNote: async (accountId: string, comment: string) => {
- const response = await this.request(`/api/v1/accounts/${accountId}/note`, { method: 'POST', body: { comment } });
+ const response = await this.request(`/api/v1/accounts/${accountId}/note`, {
+ method: 'POST',
+ body: { comment },
+ });
return v.parse(relationshipSchema, response.json);
},
@@ -843,7 +930,9 @@ class PlApiClient {
* @see {@link https://docs.joinmastodon.org/methods/accounts/#relationships}
*/
getRelationships: async (accountIds: string[], params?: GetRelationshipsParams) => {
- const response = await this.request('/api/v1/accounts/relationships', { params: { ...params, id: accountIds } });
+ const response = await this.request('/api/v1/accounts/relationships', {
+ params: { ...params, id: accountIds },
+ });
return v.parse(filteredArray(relationshipSchema), response.json);
},
@@ -868,7 +957,9 @@ class PlApiClient {
});
}
} else {
- response = (await this.request('/api/v1/accounts/familiar_followers', { params: { id: accountIds } })).json;
+ response = (
+ await this.request('/api/v1/accounts/familiar_followers', { params: { id: accountIds } })
+ ).json;
}
return v.parse(filteredArray(familiarFollowersSchema), response);
@@ -880,7 +971,10 @@ class PlApiClient {
* @see {@link https://docs.joinmastodon.org/methods/accounts/#search}
*/
searchAccounts: async (q: string, params?: SearchAccountParams, meta?: RequestMeta) => {
- const response = await this.request('/api/v1/accounts/search', { ...meta, params: { ...params, q } });
+ const response = await this.request('/api/v1/accounts/search', {
+ ...meta,
+ params: { ...params, q },
+ });
return v.parse(filteredArray(accountSchema), response.json);
},
@@ -919,7 +1013,7 @@ class PlApiClient {
* @see {@link https://docs.pleroma.social/backend/development/API/pleroma_api/#apiv1pleromaaccountsidendorsements}
* @see {@link https://docs.joinmastodon.org/methods/accounts/endorsements}
*/
- getAccountEndorsements: async (accountId: string, params?: GetAccountEndorsementsParams) =>
+ getAccountEndorsements: (accountId: string, params?: GetAccountEndorsementsParams) =>
this.#paginatedGet(
`/api/v1/${[PLEROMA].includes(this.features.version.software as string) ? 'pleroma/' : ''}accounts/${accountId}/endorsements`,
{ params },
@@ -944,8 +1038,12 @@ class PlApiClient {
* Requires features{@link Features.publicFavourites}.
* @see {@link https://docs.pleroma.social/backend/development/API/pleroma_api/#apiv1pleromaaccountsidfavourites}
*/
- getAccountFavourites: async (accountId: string, params?: GetAccountFavouritesParams) =>
- this.#paginatedGet(`/api/v1/pleroma/accounts/${accountId}/favourites`, { params }, statusSchema),
+ getAccountFavourites: (accountId: string, params?: GetAccountFavouritesParams) =>
+ this.#paginatedGet(
+ `/api/v1/pleroma/accounts/${accountId}/favourites`,
+ { params },
+ statusSchema,
+ ),
/**
* Interact with profile or status from remote account
@@ -956,13 +1054,19 @@ class PlApiClient {
* @see {@link https://docs.pleroma.social/backend/development/API/pleroma_api/#apiv1pleromaremote_interaction}
*/
remoteInteraction: async (ap_id: string, profile: string) => {
- const response = await this.request('/api/v1/pleroma/remote_interaction', { method: 'POST', body: { ap_id, profile } });
+ const response = await this.request('/api/v1/pleroma/remote_interaction', {
+ method: 'POST',
+ body: { ap_id, profile },
+ });
if (response.json?.error) throw response.json.error;
- return v.parse(v.object({
- url: v.string(),
- }), response.json);
+ return v.parse(
+ v.object({
+ url: v.string(),
+ }),
+ response.json,
+ );
},
/**
@@ -975,14 +1079,20 @@ class PlApiClient {
let response;
switch (this.features.version.software) {
case ICESHRIMP_NET:
- response = await this.request('/api/v1/bite', { method: 'POST', body: accountId });
+ response = await this.request('/api/v1/bite', {
+ method: 'POST',
+ body: accountId,
+ });
break;
default:
- response = await this.request('/api/v1/bite', { method: 'POST', params: { id: accountId } });
+ response = await this.request('/api/v1/bite', {
+ method: 'POST',
+ params: { id: accountId },
+ });
break;
}
- return response.json as {};
+ return response.json;
},
/**
@@ -991,8 +1101,12 @@ class PlApiClient {
* Requires features{@link Features.scrobbles}
* @see {@link https://docs.pleroma.social/backend/development/API/pleroma_api/#get-apiv1pleromaaccountsidscrobbles}
*/
- getScrobbles: async (accountId: string, params?: GetScrobblesParams) =>
- this.#paginatedGet(`/api/v1/pleroma/accounts/${accountId}/scrobbles`, { params }, scrobbleSchema),
+ getScrobbles: (accountId: string, params?: GetScrobblesParams) =>
+ this.#paginatedGet(
+ `/api/v1/pleroma/accounts/${accountId}/scrobbles`,
+ { params },
+ scrobbleSchema,
+ ),
/**
* Creates a new Listen activity for an account
@@ -1014,7 +1128,10 @@ class PlApiClient {
* Requires features{@link Features.loadActivities}
*/
loadActivities: async (accountId: string) => {
- const response = await this.request<{}>(`/api/v1/accounts/${accountId}/load_activities`, { method: 'POST' });
+ const response = await this.request(
+ `/api/v1/accounts/${accountId}/load_activities`,
+ { method: 'POST' },
+ );
return response.json;
},
@@ -1026,7 +1143,7 @@ class PlApiClient {
* Statuses the user has bookmarked.
* @see {@link https://docs.joinmastodon.org/methods/bookmarks/#get}
*/
- getBookmarks: async (params?: GetBookmarksParams) =>
+ getBookmarks: (params?: GetBookmarksParams) =>
this.#paginatedGet(
this.features.bookmarkFoldersMultiple && params?.folder_id
? `/api/v1/bookmark_categories/${params.folder_id}/statuses`
@@ -1040,14 +1157,14 @@ class PlApiClient {
* Statuses the user has favourited.
* @see {@link https://docs.joinmastodon.org/methods/favourites/#get}
*/
- getFavourites: async (params?: GetFavouritesParams) =>
+ getFavourites: (params?: GetFavouritesParams) =>
this.#paginatedGet('/api/v1/favourites', { params }, statusSchema),
/**
* View pending follow requests
* @see {@link https://docs.joinmastodon.org/methods/follow_requests/#get}
*/
- getFollowRequests: async (params?: GetFollowRequestsParams) =>
+ getFollowRequests: (params?: GetFollowRequestsParams) =>
this.#paginatedGet('/api/v1/follow_requests', { params }, accountSchema),
/**
@@ -1055,11 +1172,11 @@ class PlApiClient {
*
* Requires features{@link Features.outgoingFollowRequests}.
*/
- getOutgoingFollowRequests: async (params?: GetFollowRequestsParams) => {
+ getOutgoingFollowRequests: (params?: GetFollowRequestsParams) => {
if (this.features.version.software === ICESHRIMP_NET) {
return this.#paginatedIceshrimpAccountsList(
'/api/iceshrimp/follow_requests/outgoing',
- (response: Array<{ user: {id: string } }>) => response.map(({ user }) => user.id),
+ (response: Array<{ user: { id: string } }>) => response.map(({ user }) => user.id),
);
}
@@ -1068,7 +1185,11 @@ class PlApiClient {
return this.#paginatedGet('/api/v1/follow_requests/outgoing', { params }, accountSchema);
default:
- return this.#paginatedGet('/api/v1/pleroma/outgoing_follow_requests', { params }, accountSchema);
+ return this.#paginatedGet(
+ '/api/v1/pleroma/outgoing_follow_requests',
+ { params },
+ accountSchema,
+ );
}
},
@@ -1077,7 +1198,9 @@ class PlApiClient {
* @see {@link https://docs.joinmastodon.org/methods/follow_requests/#accept}
*/
acceptFollowRequest: async (accountId: string) => {
- const response = await this.request(`/api/v1/follow_requests/${accountId}/authorize`, { method: 'POST' });
+ const response = await this.request(`/api/v1/follow_requests/${accountId}/authorize`, {
+ method: 'POST',
+ });
return v.parse(relationshipSchema, response.json);
},
@@ -1087,7 +1210,9 @@ class PlApiClient {
* @see {@link https://docs.joinmastodon.org/methods/follow_requests/#reject}
*/
rejectFollowRequest: async (accountId: string) => {
- const response = await this.request(`/api/v1/follow_requests/${accountId}/reject`, { method: 'POST' });
+ const response = await this.request(`/api/v1/follow_requests/${accountId}/reject`, {
+ method: 'POST',
+ });
return v.parse(relationshipSchema, response.json);
},
@@ -1097,7 +1222,7 @@ class PlApiClient {
* Accounts that the user is currently featuring on their profile.
* @see {@link https://docs.joinmastodon.org/methods/endorsements/#get}
*/
- getEndorsements: async (params?: GetEndorsementsParams) =>
+ getEndorsements: (params?: GetEndorsementsParams) =>
this.#paginatedGet('/api/v1/endorsements', { params }, accountSchema),
/**
@@ -1137,12 +1262,12 @@ class PlApiClient {
* @see {@link https://docs.joinmastodon.org/methods/featured_tags/#unfeature}
*/
unfeatureTag: async (name: string) => {
- const response = await this.request('/api/v1/featured_tags', {
+ const response = await this.request('/api/v1/featured_tags', {
method: 'DELETE',
body: { name },
});
- return response.json as {};
+ return response.json;
},
/**
@@ -1165,7 +1290,7 @@ class PlApiClient {
* Requires features{@link Features.followHashtags}.
* @see {@link https://docs.joinmastodon.org/methods/followed_tags/#get}
*/
- getFollowedTags: async (params?: GetFollowedTagsParams) =>
+ getFollowedTags: (params?: GetFollowedTagsParams) =>
this.#paginatedGet('/api/v1/followed_tags', { params }, tagSchema),
/**
@@ -1229,9 +1354,11 @@ class PlApiClient {
* @see {@link https://docs.joinmastodon.org/methods/suggestions/#remove}
*/
dismissSuggestions: async (accountId: string) => {
- const response = await this.request(`/api/v1/suggestions/${accountId}`, { method: 'DELETE' });
+ const response = await this.request(`/api/v1/suggestions/${accountId}`, {
+ method: 'DELETE',
+ });
- return response.json as {};
+ return response.json;
},
/**
@@ -1241,7 +1368,11 @@ class PlApiClient {
* @see {@link https://docs.pleroma.social/backend/development/API/pleroma_api/#get-apiv1pleromabookmark_folders}
*/
getBookmarkFolders: async () => {
- const response = await this.request(this.features.version.software === PLEROMA ? '/api/v1/pleroma/bookmark_folders' : '/api/v1/bookmark_categories');
+ const response = await this.request(
+ this.features.version.software === PLEROMA
+ ? '/api/v1/pleroma/bookmark_folders'
+ : '/api/v1/bookmark_categories',
+ );
return v.parse(filteredArray(bookmarkFolderSchema), response.json);
},
@@ -1255,7 +1386,9 @@ class PlApiClient {
*/
createBookmarkFolder: async (params: CreateBookmarkFolderParams) => {
const response = await this.request(
- this.features.version.software === PLEROMA ? '/api/v1/pleroma/bookmark_folders' : '/api/v1/bookmark_categories',
+ this.features.version.software === PLEROMA
+ ? '/api/v1/pleroma/bookmark_folders'
+ : '/api/v1/bookmark_categories',
{ method: 'POST', body: { title: params.name, ...params } },
);
@@ -1297,7 +1430,7 @@ class PlApiClient {
* Requires features{@link Features.bookmarkFoldersMultiple}.
*/
addBookmarkToFolder: async (statusId: string, folderId: string) => {
- const response = await this.request <{}>(
+ const response = await this.request(
`/api/v1/bookmark_categories/${folderId}/statuses`,
{ method: 'POST', params: { status_ids: [statusId] } },
);
@@ -1309,7 +1442,7 @@ class PlApiClient {
* Requires features{@link Features.bookmarkFoldersMultiple}.
*/
removeBookmarkFromFolder: async (statusId: string, folderId: string) => {
- const response = await this.request<{}>(
+ const response = await this.request(
`/api/v1/bookmark_categories/${folderId}/statuses`,
{ method: 'DELETE', params: { status_ids: [statusId] } },
);
@@ -1332,10 +1465,14 @@ class PlApiClient {
body: { language: params.locale, birthday: params.date_of_birth, ...params },
});
- if ('identifier' in response.json) return v.parse(v.object({
- message: v.string(),
- identifier: v.string(),
- }), response.json);
+ if ('identifier' in response.json)
+ return v.parse(
+ v.object({
+ message: v.string(),
+ identifier: v.string(),
+ }),
+ response.json,
+ );
return v.parse(tokenSchema, response.json);
},
@@ -1376,7 +1513,13 @@ class PlApiClient {
const response = await this.request('/api/v1/accounts/update_credentials', {
method: 'PATCH',
- contentType: (this.features.version.software === GOTOSOCIAL || this.features.version.software === ICESHRIMP_NET || params.avatar || params.header) ? '' : undefined,
+ contentType:
+ this.features.version.software === GOTOSOCIAL ||
+ this.features.version.software === ICESHRIMP_NET ||
+ params.avatar ||
+ params.header
+ ? ''
+ : undefined,
body: params,
});
@@ -1458,7 +1601,10 @@ class PlApiClient {
* @see {@link https://docs.pleroma.social/backend/development/API/pleroma_api/#add-alias-to-the-current-account}
*/
addAccountAlias: async (alias: string) => {
- const response = await this.request('/api/pleroma/aliases', { method: 'PUT', body: { alias } });
+ const response = await this.request('/api/pleroma/aliases', {
+ method: 'PUT',
+ body: { alias },
+ });
return v.parse(v.object({ status: v.literal('success') }), response.json);
},
@@ -1471,7 +1617,10 @@ class PlApiClient {
* @see {@link https://docs.pleroma.social/backend/development/API/pleroma_api/#delete-alias-from-the-current-account}
*/
deleteAccountAlias: async (alias: string) => {
- const response = await this.request('/api/pleroma/aliases', { method: 'DELETE', body: { alias } });
+ const response = await this.request('/api/pleroma/aliases', {
+ method: 'DELETE',
+ body: { alias },
+ });
return v.parse(v.object({ status: v.literal('success') }), response.json);
},
@@ -1511,17 +1660,23 @@ class PlApiClient {
switch (this.features.version.software) {
case GOTOSOCIAL:
- response = await this.request(`/api/v1/tokens/${oauthTokenId}/invalidate`, { method: 'POST' });
+ response = await this.request(`/api/v1/tokens/${oauthTokenId}/invalidate`, {
+ method: 'POST',
+ });
break;
case MITRA:
- response = await this.request(`/api/v1/settings/sessions/${oauthTokenId}`, { method: 'DELETE' });
+ response = await this.request(`/api/v1/settings/sessions/${oauthTokenId}`, {
+ method: 'DELETE',
+ });
break;
default:
- response = await this.request(`/api/oauth_tokens/${oauthTokenId}`, { method: 'DELETE' });
+ response = await this.request(`/api/oauth_tokens/${oauthTokenId}`, {
+ method: 'DELETE',
+ });
break;
}
- return response.json as {};
+ return response.json;
},
/**
@@ -1537,7 +1692,7 @@ class PlApiClient {
switch (this.features.version.software) {
case GOTOSOCIAL:
- response = await this.request('/api/v1/user/password_change', {
+ response = await this.request('/api/v1/user/password_change', {
method: 'POST',
body: {
old_password: current_password,
@@ -1547,7 +1702,7 @@ class PlApiClient {
break;
case ICESHRIMP_NET:
await this.#getIceshrimpAccessToken();
- response = await this.request('/api/iceshrimp/auth/change-password', {
+ response = await this.request('/api/iceshrimp/auth/change-password', {
method: 'POST',
body: {
oldPassword: current_password,
@@ -1556,13 +1711,13 @@ class PlApiClient {
});
break;
case MITRA:
- response = await this.request('/api/v1/settings/change_password', {
+ response = await this.request('/api/v1/settings/change_password', {
method: 'POST',
body: { new_password },
});
break;
case PIXELFED:
- response = await this.request('/api/v1.1/accounts/change-password', {
+ response = await this.request('/api/v1.1/accounts/change-password', {
method: 'POST',
body: {
current_password,
@@ -1573,7 +1728,7 @@ class PlApiClient {
if (response.redirected) throw response;
break;
default:
- response = await this.request('/api/pleroma/change_password', {
+ response = await this.request('/api/pleroma/change_password', {
method: 'POST',
body: {
password: current_password,
@@ -1583,7 +1738,7 @@ class PlApiClient {
});
}
- return response.json as {};
+ return response.json;
},
/**
@@ -1592,12 +1747,12 @@ class PlApiClient {
* Requires features{@link Features.resetPassword}.
*/
resetPassword: async (email?: string, nickname?: string) => {
- const response = await this.request('/auth/password', {
+ const response = await this.request('/auth/password', {
method: 'POST',
body: { email, nickname },
});
- return response.json as {};
+ return response.json;
},
/**
@@ -1608,7 +1763,7 @@ class PlApiClient {
switch (this.features.version.software) {
case GOTOSOCIAL:
- response = await this.request('/api/v1/user/email_change', {
+ response = await this.request('/api/v1/user/email_change', {
method: 'POST',
body: {
new_email: email,
@@ -1617,7 +1772,7 @@ class PlApiClient {
});
break;
default:
- response = await this.request('/api/pleroma/change_email', {
+ response = await this.request('/api/pleroma/change_email', {
method: 'POST',
body: {
email,
@@ -1628,7 +1783,7 @@ class PlApiClient {
if (response.json?.error) throw response.json.error;
- return response.json as {};
+ return response.json;
},
/**
@@ -1639,13 +1794,13 @@ class PlApiClient {
switch (this.features.version.software) {
case GOTOSOCIAL:
- response = await this.request('/api/v1/accounts/delete', {
+ response = await this.request('/api/v1/accounts/delete', {
method: 'POST',
body: { password },
});
break;
default:
- response = await this.request('/api/pleroma/delete_account', {
+ response = await this.request('/api/pleroma/delete_account', {
method: 'POST',
body: { password },
});
@@ -1653,18 +1808,18 @@ class PlApiClient {
if (response.json?.error) throw response.json.error;
- return response.json as {};
+ return response.json;
},
/**
* Requires features{@link Features.deleteAccountWithoutPassword}.
*/
deleteAccountWithoutPassword: async () => {
- const response = await this.request('/api/v1/settings/delete_account', {
+ const response = await this.request('/api/v1/settings/delete_account', {
method: 'POST',
});
- return response.json as {};
+ return response.json;
},
/**
@@ -1673,28 +1828,28 @@ class PlApiClient {
* Requires features{@link Features.disableAccount}.
*/
disableAccount: async (password: string) => {
- const response = await this.request('/api/pleroma/disable_account', {
+ const response = await this.request('/api/pleroma/disable_account', {
method: 'POST',
body: { password },
});
if (response.json?.error) throw response.json.error;
- return response.json as {};
+ return response.json;
},
/**
* Requires features{@link Features.accountMoving}.
*/
moveAccount: async (target_account: string, password: string) => {
- const response = await this.request('/api/pleroma/move_account', {
+ const response = await this.request('/api/pleroma/move_account', {
method: 'POST',
body: { password, target_account },
});
if (response.json?.error) throw response.json.error;
- return response.json as {};
+ return response.json;
},
mfa: {
@@ -1717,12 +1872,15 @@ class PlApiClient {
response = (await this.request('/api/pleroma/accounts/mfa')).json;
}
- return v.parse(v.object({
- settings: coerceObject({
- enabled: v.boolean(),
- totp: v.boolean(),
+ return v.parse(
+ v.object({
+ settings: coerceObject({
+ enabled: v.boolean(),
+ totp: v.boolean(),
+ }),
}),
- }), response);
+ response,
+ );
},
/**
@@ -1731,9 +1889,12 @@ class PlApiClient {
getMfaBackupCodes: async () => {
const response = await this.request('/api/pleroma/accounts/mfa/backup_codes');
- return v.parse(v.object({
- codes: v.array(v.string()),
- }), response.json);
+ return v.parse(
+ v.object({
+ codes: v.array(v.string()),
+ }),
+ response.json,
+ );
},
/**
@@ -1753,10 +1914,13 @@ class PlApiClient {
response = (await this.request(`/api/pleroma/accounts/mfa/setup/${method}`)).json;
}
- return v.parse(v.object({
- key: v.fallback(v.string(), ''),
- provisioning_uri: v.string(),
- }), response);
+ return v.parse(
+ v.object({
+ key: v.fallback(v.string(), ''),
+ provisioning_uri: v.string(),
+ }),
+ response,
+ );
},
/**
@@ -1767,18 +1931,23 @@ class PlApiClient {
switch (this.features.version.software) {
case GOTOSOCIAL:
- response = await this.request('/api/v1/user/2fa/enable', { method: 'POST', body: { code } });
+ response = await this.request('/api/v1/user/2fa/enable', {
+ method: 'POST',
+ body: { code },
+ });
break;
default:
- response = (await this.request(`/api/pleroma/accounts/mfa/confirm/${method}`, {
- method: 'POST',
- body: { code, password },
- })).json;
+ response = (
+ await this.request(`/api/pleroma/accounts/mfa/confirm/${method}`, {
+ method: 'POST',
+ body: { code, password },
+ })
+ ).json;
}
if (response?.error) throw response.error;
- return response as {};
+ return response as EmptyObject;
},
/**
@@ -1789,13 +1958,13 @@ class PlApiClient {
switch (this.features.version.software) {
case GOTOSOCIAL:
- response = await this.request('/api/v1/user/2fa/disable', {
+ response = await this.request('/api/v1/user/2fa/disable', {
method: 'POST',
body: { password },
});
break;
default:
- response = await this.request(`/api/pleroma/accounts/mfa/${method}`, {
+ response = await this.request(`/api/pleroma/accounts/mfa/${method}`, {
method: 'DELETE',
body: { password },
});
@@ -1803,7 +1972,7 @@ class PlApiClient {
if (response.json?.error) throw response.json.error;
- return response.json as {};
+ return response.json;
},
},
@@ -1843,14 +2012,17 @@ class PlApiClient {
},
/**
- * Move followers from remote alias. (experimental?)
- *
- * Requires features{@link Features.importFollowers}.
- */
+ * Move followers from remote alias. (experimental?)
+ *
+ * Requires features{@link Features.importFollowers}.
+ */
importFollowers: async (list: File | string, actorId: string) => {
const response = await this.request('/api/v1/settings/import_followers', {
method: 'POST',
- body: { from_actor_id: actorId, followers_csv: typeof list === 'string' ? list : await list.text() },
+ body: {
+ from_actor_id: actorId,
+ followers_csv: typeof list === 'string' ? list : await list.text(),
+ },
});
return response.json;
@@ -1961,10 +2133,10 @@ class PlApiClient {
},
/**
- * Export lists to CSV file
- *
- * Requires features{@link Features.exportLists}.
- */
+ * Export lists to CSV file
+ *
+ * Requires features{@link Features.exportLists}.
+ */
exportLists: async () => {
const response = await this.request('/api/v1/exports/lists.csv', {
method: 'GET',
@@ -1974,10 +2146,10 @@ class PlApiClient {
},
/**
- * Export blocks to CSV file
- *
- * Requires features{@link Features.exportBlocks}.
- */
+ * Export blocks to CSV file
+ *
+ * Requires features{@link Features.exportBlocks}.
+ */
exportBlocks: async () => {
const response = await this.request('/api/v1/exports/blocks.csv', {
method: 'GET',
@@ -1987,10 +2159,10 @@ class PlApiClient {
},
/**
- * Export mutes to CSV file
- *
- * Requires features{@link Features.exportMutes}.
- */
+ * Export mutes to CSV file
+ *
+ * Requires features{@link Features.exportMutes}.
+ */
exportMutes: async () => {
const response = await this.request('/api/v1/exports/mutes.csv', {
method: 'GET',
@@ -2006,7 +2178,10 @@ class PlApiClient {
* @see {@link https://docs.pleroma.social/backend/development/API/pleroma_api/#apipleromanotification_settings}
*/
updateNotificationSettings: async (params: UpdateNotificationSettingsParams) => {
- const response = await this.request('/api/pleroma/notification_settings', { method: 'PUT', body: params });
+ const response = await this.request('/api/pleroma/notification_settings', {
+ method: 'PUT',
+ body: params,
+ });
if (response.json?.error) throw response.json.error;
@@ -2032,7 +2207,10 @@ class PlApiClient {
* @see {@link https://docs.gotosocial.org/en/latest/api/swagger/}
*/
updateInteractionPolicies: async (params: UpdateInteractionPoliciesParams) => {
- const response = await this.request('/api/v1/interaction_policies/defaults', { method: 'PATCH', body: params });
+ const response = await this.request('/api/v1/interaction_policies/defaults', {
+ method: 'PATCH',
+ body: params,
+ });
return v.parse(interactionPoliciesSchema, response.json);
},
@@ -2056,13 +2234,18 @@ class PlApiClient {
* Requires features{@link Features.preferredFrontends}.
*/
setPreferredFrontend: async (frontendName: string) => {
- const response = await this.request('/api/v1/akkoma/preferred_frontend', { method: 'PUT', body: { frontend_name: frontendName } });
+ const response = await this.request('/api/v1/akkoma/preferred_frontend', {
+ method: 'PUT',
+ body: { frontend_name: frontendName },
+ });
return v.parse(v.object({ frontend_name: v.string() }), response.json);
},
authorizeIceshrimp: async () => {
- const response = await this.request('/api/v1/accounts/authorize_iceshrimp', { method: 'POST' });
+ const response = await this.request('/api/v1/accounts/authorize_iceshrimp', {
+ method: 'POST',
+ });
return response.json;
},
@@ -2076,7 +2259,10 @@ class PlApiClient {
* `duration` parameter requires features{@link Features.blocksDuration}.
*/
blockAccount: async (accountId: string, params?: BlockAccountParams) => {
- const response = await this.request(`/api/v1/accounts/${accountId}/block`, { method: 'POST', body: params });
+ const response = await this.request(`/api/v1/accounts/${accountId}/block`, {
+ method: 'POST',
+ body: params,
+ });
return v.parse(relationshipSchema, response.json);
},
@@ -2087,7 +2273,9 @@ class PlApiClient {
* @see {@link https://docs.joinmastodon.org/methods/accounts/#unblock}
*/
unblockAccount: async (accountId: string) => {
- const response = await this.request(`/api/v1/accounts/${accountId}/unblock`, { method: 'POST' });
+ const response = await this.request(`/api/v1/accounts/${accountId}/unblock`, {
+ method: 'POST',
+ });
return v.parse(relationshipSchema, response.json);
},
@@ -2100,7 +2288,10 @@ class PlApiClient {
* @see {@link https://docs.joinmastodon.org/methods/accounts/#mute}
*/
muteAccount: async (accountId: string, params?: MuteAccountParams) => {
- const response = await this.request(`/api/v1/accounts/${accountId}/mute`, { method: 'POST', body: params });
+ const response = await this.request(`/api/v1/accounts/${accountId}/mute`, {
+ method: 'POST',
+ body: params,
+ });
return v.parse(relationshipSchema, response.json);
},
@@ -2113,7 +2304,9 @@ class PlApiClient {
* @see {@link https://docs.joinmastodon.org/methods/accounts/#unmute}
*/
unmuteAccount: async (accountId: string) => {
- const response = await this.request(`/api/v1/accounts/${accountId}/unmute`, { method: 'POST' });
+ const response = await this.request(`/api/v1/accounts/${accountId}/unmute`, {
+ method: 'POST',
+ });
return v.parse(relationshipSchema, response.json);
},
@@ -2125,14 +2318,14 @@ class PlApiClient {
* Requires features{@link Features.mutes}.
* @see {@link https://docs.joinmastodon.org/methods/mutes/#get}
*/
- getMutes: async (params?: GetMutesParams) =>
+ getMutes: (params?: GetMutesParams) =>
this.#paginatedGet('/api/v1/mutes', { params }, mutedAccountSchema),
/**
* View blocked users
* @see {@link https://docs.joinmastodon.org/methods/blocks/#get}
*/
- getBlocks: async (params?: GetBlocksParams) =>
+ getBlocks: (params?: GetBlocksParams) =>
this.#paginatedGet('/api/v1/blocks', { params }, blockedAccountSchema),
/**
@@ -2140,7 +2333,7 @@ class PlApiClient {
* View domains the user has blocked.
* @see {@link https://docs.joinmastodon.org/methods/domain_blocks/#get}
*/
- getDomainBlocks: async (params?: GetDomainBlocksParams) =>
+ getDomainBlocks: (params?: GetDomainBlocksParams) =>
this.#paginatedGet('/api/v1/domain_blocks', { params }, v.string()),
/**
@@ -2153,9 +2346,12 @@ class PlApiClient {
* @see {@link https://docs.joinmastodon.org/methods/domain_blocks/#block}
*/
blockDomain: async (domain: string) => {
- const response = await this.request('/api/v1/domain_blocks', { method: 'POST', body: { domain } });
+ const response = await this.request('/api/v1/domain_blocks', {
+ method: 'POST',
+ body: { domain },
+ });
- return response.json as {};
+ return response.json;
},
/**
@@ -2164,12 +2360,12 @@ class PlApiClient {
* @see {@link https://docs.joinmastodon.org/methods/domain_blocks/#unblock}
*/
unblockDomain: async (domain: string) => {
- const response = await this.request('/api/v1/domain_blocks', {
+ const response = await this.request('/api/v1/domain_blocks', {
method: 'DELETE',
body: { domain },
});
- return response.json as {};
+ return response.json;
},
/**
@@ -2180,7 +2376,9 @@ class PlApiClient {
* @see {@link https://docs.joinmastodon.org/methods/filters/#get}
*/
getFilters: async () => {
- const response = await this.request(this.features.filtersV2 ? '/api/v2/filters' : '/api/v1/filters');
+ const response = await this.request(
+ this.features.filtersV2 ? '/api/v2/filters' : '/api/v1/filters',
+ );
return v.parse(filteredArray(filterSchema), response.json);
},
@@ -2194,9 +2392,7 @@ class PlApiClient {
*/
getFilter: async (filterId: string) => {
const response = await this.request(
- this.features.filtersV2
- ? `/api/v2/filters/${filterId}`
- : `/api/v1/filters/${filterId}`,
+ this.features.filtersV2 ? `/api/v2/filters/${filterId}` : `/api/v1/filters/${filterId}`,
);
return v.parse(filterSchema, response.json);
@@ -2211,19 +2407,18 @@ class PlApiClient {
*/
createFilter: async (params: CreateFilterParams) => {
const { filtersV2 } = this.features;
- const response = await this.request(
- filtersV2 ? '/api/v2/filters' : '/api/v1/filters',
- {
- method: 'POST',
- body: filtersV2 ? params : {
- phrase: params.keywords_attributes[0]?.keyword,
- context: params.context,
- irreversible: params.filter_action === 'hide',
- whole_word: params.keywords_attributes[0]?.whole_word,
- expires_in: params.expires_in,
- },
- },
- );
+ const response = await this.request(filtersV2 ? '/api/v2/filters' : '/api/v1/filters', {
+ method: 'POST',
+ body: filtersV2
+ ? params
+ : {
+ phrase: params.keywords_attributes[0]?.keyword,
+ context: params.context,
+ irreversible: params.filter_action === 'hide',
+ whole_word: params.keywords_attributes[0]?.whole_word,
+ expires_in: params.expires_in,
+ },
+ });
return v.parse(filterSchema, response.json);
},
@@ -2241,13 +2436,15 @@ class PlApiClient {
filtersV2 ? `/api/v2/filters/${filterId}` : `/api/v1/filters/${filterId}`,
{
method: 'PUT',
- body: filtersV2 ? params : {
- phrase: params.keywords_attributes?.[0]?.keyword,
- context: params.context,
- irreversible: params.filter_action === 'hide',
- whole_word: params.keywords_attributes?.[0]?.whole_word,
- expires_in: params.expires_in,
- },
+ body: filtersV2
+ ? params
+ : {
+ phrase: params.keywords_attributes?.[0]?.keyword,
+ context: params.context,
+ irreversible: params.filter_action === 'hide',
+ whole_word: params.keywords_attributes?.[0]?.whole_word,
+ expires_in: params.expires_in,
+ },
},
);
@@ -2262,14 +2459,12 @@ class PlApiClient {
* @see {@link https://docs.joinmastodon.org/methods/filters/#delete}
*/
deleteFilter: async (filterId: string) => {
- const response = await this.request(
- this.features.filtersV2
- ? `/api/v2/filters/${filterId}`
- : `/api/v1/filters/${filterId}`,
+ const response = await this.request(
+ this.features.filtersV2 ? `/api/v2/filters/${filterId}` : `/api/v1/filters/${filterId}`,
{ method: 'DELETE' },
);
- return response.json as {};
+ return response.json;
},
/**
@@ -2338,9 +2533,11 @@ class PlApiClient {
* @see {@link https://docs.joinmastodon.org/methods/filters/#keywords-delete}
*/
deleteFilterKeyword: async (filterId: string) => {
- const response = await this.request(`/api/v2/filters/keywords/${filterId}`, { method: 'DELETE' });
+ const response = await this.request(`/api/v2/filters/keywords/${filterId}`, {
+ method: 'DELETE',
+ });
- return response.json as {};
+ return response.json;
},
/**
@@ -2393,11 +2590,12 @@ class PlApiClient {
* @see {@link https://docs.joinmastodon.org/methods/filters/#statuses-remove}
*/
deleteFilterStatus: async (statusId: string) => {
- const response = await this.request(`/api/v2/filters/statuses/${statusId}`, { method: 'DELETE' });
+ const response = await this.request(`/api/v2/filters/statuses/${statusId}`, {
+ method: 'DELETE',
+ });
- return response.json as {};
+ return response.json;
},
-
};
public readonly statuses = {
@@ -2414,19 +2612,25 @@ class PlApiClient {
const fixedParams: ExtendedCreateStatusParams = params;
- if (params.content_type === 'text/markdown' && this.#instance.api_versions['kmyblue_markdown.fedibird.pl-api'] >= 1) {
+ if (
+ params.content_type === 'text/markdown' &&
+ this.#instance.api_versions['kmyblue_markdown.fedibird.pl-api'] >= 1
+ ) {
fixedParams.markdown = true;
}
if (params.visibility?.startsWith('api/v1/bookmark_categories')) {
fixedParams.circle_id = params.visibility.slice(7);
fixedParams.visibility = 'circle';
}
- if (params.quote_id && this.#instance.api_versions.mastodon >= 7) params.quoted_status_id = params.quote_id;
- else if (params.quoted_status_id && (this.#instance.api_versions.mastodon || 0) < 7) params.quote_id = params.quoted_status_id;
+ if (params.quote_id && this.#instance.api_versions.mastodon >= 7)
+ params.quoted_status_id = params.quote_id;
+ else if (params.quoted_status_id && (this.#instance.api_versions.mastodon || 0) < 7)
+ params.quote_id = params.quoted_status_id;
- const input = params.preview && this.features.version.software === MITRA
- ? '/api/v1/statuses/preview'
- : '/api/v1/statuses';
+ const input =
+ params.preview && this.features.version.software === MITRA
+ ? '/api/v1/statuses/preview'
+ : '/api/v1/statuses';
const response = await this.request(input, {
method: 'POST',
@@ -2441,9 +2645,10 @@ class PlApiClient {
* Requires features{@link Features.createStatusPreview}.
*/
previewStatus: async (params: CreateStatusParams) => {
- const input = this.features.version.software === PLEROMA || this.features.version.software === AKKOMA
- ? '/api/v1/statuses'
- : '/api/v1/statuses/preview';
+ const input =
+ this.features.version.software === PLEROMA || this.features.version.software === AKKOMA
+ ? '/api/v1/statuses'
+ : '/api/v1/statuses/preview';
if (this.features.version.software === PLEROMA || this.features.version.software === AKKOMA) {
params.preview = true;
@@ -2474,9 +2679,11 @@ class PlApiClient {
*
* Requires features{@link Features.getStatuses}.
* @see {@link https://docs.joinmastodon.org/methods/statuses/#index}
- */
+ */
getStatuses: async (statusIds: string[], params?: GetStatusesParams) => {
- const response = await this.request('/api/v1/statuses', { params: { ...params, id: statusIds } });
+ const response = await this.request('/api/v1/statuses', {
+ params: { ...params, id: statusIds },
+ });
return v.parse(filteredArray(statusSchema), response.json);
},
@@ -2489,7 +2696,10 @@ class PlApiClient {
* @see {@link https://docs.joinmastodon.org/methods/statuses/#delete}
*/
deleteStatus: async (statusId: string, deleteMedia?: boolean) => {
- const response = await this.request(`/api/v1/statuses/${statusId}`, { method: 'DELETE', params: { delete_media: deleteMedia } });
+ const response = await this.request(`/api/v1/statuses/${statusId}`, {
+ method: 'DELETE',
+ params: { delete_media: deleteMedia },
+ });
return v.parse(statusSourceSchema, response.json);
},
@@ -2504,7 +2714,7 @@ class PlApiClient {
const asyncRefreshHeader = getAsyncRefreshHeader(response);
- return { asyncRefreshHeader, ...v.parse(contextSchema, response.json) } ;
+ return { asyncRefreshHeader, ...v.parse(contextSchema, response.json) };
},
/**
@@ -2516,9 +2726,11 @@ class PlApiClient {
let response;
if (this.features.version.software === AKKOMA) {
response = await this.request(`/api/v1/statuses/${statusId}/translations/${lang}`);
-
} else {
- response = await this.request(`/api/v1/statuses/${statusId}/translate`, { method: 'POST', body: { lang } });
+ response = await this.request(`/api/v1/statuses/${statusId}/translate`, {
+ method: 'POST',
+ body: { lang },
+ });
}
return v.parse(translationSchema, response.json);
@@ -2530,7 +2742,10 @@ class PlApiClient {
* Requires features{@link Features.lazyTranslations}.
*/
translateStatuses: async (statusIds: Array, lang: string) => {
- const response = await this.request('/api/v1/pl/statuses/translate', { method: 'POST', body: { ids: statusIds, lang } });
+ const response = await this.request('/api/v1/pl/statuses/translate', {
+ method: 'POST',
+ body: { ids: statusIds, lang },
+ });
return v.parse(filteredArray(translationSchema), response.json);
},
@@ -2540,7 +2755,7 @@ class PlApiClient {
* View who boosted a given status.
* @see {@link https://docs.joinmastodon.org/methods/statuses/#reblogged_by}
*/
- getRebloggedBy: async (statusId: string, params?: GetRebloggedByParams) =>
+ getRebloggedBy: (statusId: string, params?: GetRebloggedByParams) =>
this.#paginatedGet(`/api/v1/statuses/${statusId}/reblogged_by`, { params }, accountSchema),
/**
@@ -2548,7 +2763,7 @@ class PlApiClient {
* View who favourited a given status.
* @see {@link https://docs.joinmastodon.org/methods/statuses/#favourited_by}
*/
- getFavouritedBy: async (statusId: string, params?: GetFavouritedByParams) =>
+ getFavouritedBy: (statusId: string, params?: GetFavouritedByParams) =>
this.#paginatedGet(`/api/v1/statuses/${statusId}/favourited_by`, { params }, accountSchema),
/**
@@ -2557,7 +2772,9 @@ class PlApiClient {
* @see {@link https://docs.joinmastodon.org/methods/statuses/#favourite}
*/
favouriteStatus: async (statusId: string) => {
- const response = await this.request(`/api/v1/statuses/${statusId}/favourite`, { method: 'POST' });
+ const response = await this.request(`/api/v1/statuses/${statusId}/favourite`, {
+ method: 'POST',
+ });
return v.parse(statusSchema, response.json);
},
@@ -2568,7 +2785,9 @@ class PlApiClient {
* @see {@link https://docs.joinmastodon.org/methods/statuses/#unfavourite}
*/
unfavouriteStatus: async (statusId: string) => {
- const response = await this.request(`/api/v1/statuses/${statusId}/unfavourite`, { method: 'POST' });
+ const response = await this.request(`/api/v1/statuses/${statusId}/unfavourite`, {
+ method: 'POST',
+ });
return v.parse(statusSchema, response.json);
},
@@ -2581,7 +2800,10 @@ class PlApiClient {
* Specifying reblog visibility requires features{@link Features.reblogVisibility}.
*/
reblogStatus: async (statusId: string, visibility?: string) => {
- const response = await this.request(`/api/v1/statuses/${statusId}/reblog`, { method: 'POST', body: { visibility } });
+ const response = await this.request(`/api/v1/statuses/${statusId}/reblog`, {
+ method: 'POST',
+ body: { visibility },
+ });
return v.parse(statusSchema, response.json);
},
@@ -2592,7 +2814,9 @@ class PlApiClient {
* @see {@link https://docs.joinmastodon.org/methods/statuses/#unreblog}
*/
unreblogStatus: async (statusId: string) => {
- const response = await this.request(`/api/v1/statuses/${statusId}/unreblog`, { method: 'POST' });
+ const response = await this.request(`/api/v1/statuses/${statusId}/unreblog`, {
+ method: 'POST',
+ });
return v.parse(statusSchema, response.json);
},
@@ -2603,10 +2827,16 @@ class PlApiClient {
* @see {@link https://docs.joinmastodon.org/methods/statuses/#bookmark}
*/
bookmarkStatus: async (statusId: string, folderId?: string) => {
- const response = await this.request(`/api/v1/statuses/${statusId}/bookmark`, { method: 'POST', body: { folder_id: folderId } });
+ const response = await this.request(`/api/v1/statuses/${statusId}/bookmark`, {
+ method: 'POST',
+ body: { folder_id: folderId },
+ });
if (folderId && this.features.bookmarkFoldersMultiple) {
- await this.request(`/api/v1/bookmark_categories/${folderId}/statuses`, { method: 'POST', params: { status_ids: [statusId] } });
+ await this.request(`/api/v1/bookmark_categories/${folderId}/statuses`, {
+ method: 'POST',
+ params: { status_ids: [statusId] },
+ });
}
return v.parse(statusSchema, response.json);
@@ -2618,7 +2848,9 @@ class PlApiClient {
* @see {@link https://docs.joinmastodon.org/methods/statuses/#unbookmark}
*/
unbookmarkStatus: async (statusId: string) => {
- const response = await this.request(`/api/v1/statuses/${statusId}/unbookmark`, { method: 'POST' });
+ const response = await this.request(`/api/v1/statuses/${statusId}/unbookmark`, {
+ method: 'POST',
+ });
return v.parse(statusSchema, response.json);
},
@@ -2629,7 +2861,10 @@ class PlApiClient {
* @see {@link https://docs.joinmastodon.org/methods/statuses/#revoke_quote}
*/
revokeQuote: async (statusId: string, quotingStatusId: string) => {
- const response = await this.request(`/api/v1/statuses/${statusId}/quotes/${quotingStatusId}/revoke`, { method: 'POST' });
+ const response = await this.request(
+ `/api/v1/statuses/${statusId}/quotes/${quotingStatusId}/revoke`,
+ { method: 'POST' },
+ );
return v.parse(statusSchema, response.json);
},
@@ -2651,7 +2886,9 @@ class PlApiClient {
* @see {@link https://docs.joinmastodon.org/methods/statuses/#unmute}
*/
unmuteStatus: async (statusId: string) => {
- const response = await this.request(`/api/v1/statuses/${statusId}/unmute`, { method: 'POST' });
+ const response = await this.request(`/api/v1/statuses/${statusId}/unmute`, {
+ method: 'POST',
+ });
return v.parse(statusSchema, response.json);
},
@@ -2690,11 +2927,17 @@ class PlApiClient {
const fixedParams: ExtendedEditStatusParams = params;
- if (params.content_type === 'text/markdown' && this.#instance.api_versions['kmyblue_markdown.fedibird.pl-api'] >= 1) {
+ if (
+ params.content_type === 'text/markdown' &&
+ this.#instance.api_versions['kmyblue_markdown.fedibird.pl-api'] >= 1
+ ) {
fixedParams.markdown = true;
}
- const response = await this.request(`/api/v1/statuses/${statusId}`, { method: 'PUT', body: params });
+ const response = await this.request(`/api/v1/statuses/${statusId}`, {
+ method: 'PUT',
+ body: params,
+ });
return v.parse(statusSchema, response.json);
},
@@ -2705,7 +2948,10 @@ class PlApiClient {
* @see {@link https://docs.joinmastodon.org/methods/statuses/#edit_interaction_policy}
*/
editInteractionPolicy: async (statusId: string, params: EditInteractionPolicyParams) => {
- const response = await this.request(`/api/v1/statuses/${statusId}`, { method: 'PUT', body: params });
+ const response = await this.request(`/api/v1/statuses/${statusId}`, {
+ method: 'PUT',
+ body: params,
+ });
return v.parse(statusSchema, response.json);
},
@@ -2743,24 +2989,32 @@ class PlApiClient {
const apiVersions = this.#instance.api_versions;
let response;
- if (apiVersions['emoji_reactions.pleroma.pl-api'] >= 1 || this.features.version.software === ICESHRIMP_NET) {
- response = await this.request(`/api/v1/pleroma/statuses/${statusId}/reactions${emoji ? `/${emoji}` : ''}`);
+ if (
+ apiVersions['emoji_reactions.pleroma.pl-api'] >= 1 ||
+ this.features.version.software === ICESHRIMP_NET
+ ) {
+ response = await this.request(
+ `/api/v1/pleroma/statuses/${statusId}/reactions${emoji ? `/${emoji}` : ''}`,
+ );
} else {
if (apiVersions['emoji_reaction.fedibird.pl-api'] >= 1) {
response = await this.request(`/api/v1/statuses/${statusId}/emoji_reactioned_by`);
} else {
- response = await this.request(`/api/v1/statuses/${statusId}/reactions`, { params: { emoji } });
+ response = await this.request(`/api/v1/statuses/${statusId}/reactions`, {
+ params: { emoji },
+ });
}
response.json = response.json?.reduce((acc: Array, cur: any) => {
if (emoji && cur.name !== emoji) return acc;
- const existing = acc.find(reaction => reaction.name === cur.name);
+ const existing = acc.find((reaction) => reaction.name === cur.name);
if (existing) {
existing.accounts.push(cur.account);
existing.account_ids.push(cur.account.id);
existing.count += 1;
- } else acc.push({ count: 1, accounts: [cur.account], account_ids: [cur.account.id], ...cur });
+ } else
+ acc.push({ count: 1, accounts: [cur.account], account_ids: [cur.account.id], ...cur });
return acc;
}, []);
@@ -2780,10 +3034,19 @@ class PlApiClient {
const apiVersions = this.#instance.api_versions;
let response;
- if (apiVersions['emoji_reactions.pleroma.pl-api'] >= 1 || this.features.version.software === MITRA) {
- response = await this.request(`/api/v1/pleroma/statuses/${statusId}/reactions/${encodeURIComponent(emoji)}`, { method: 'PUT' });
+ if (
+ apiVersions['emoji_reactions.pleroma.pl-api'] >= 1 ||
+ this.features.version.software === MITRA
+ ) {
+ response = await this.request(
+ `/api/v1/pleroma/statuses/${statusId}/reactions/${encodeURIComponent(emoji)}`,
+ { method: 'PUT' },
+ );
} else {
- response = await this.request(`/api/v1/statuses/${statusId}/react/${encodeURIComponent(emoji)}`, { method: 'POST' });
+ response = await this.request(
+ `/api/v1/statuses/${statusId}/react/${encodeURIComponent(emoji)}`,
+ { method: 'POST' },
+ );
}
return v.parse(statusSchema, response.json);
@@ -2799,10 +3062,18 @@ class PlApiClient {
const apiVersions = this.#instance.api_versions;
let response;
- if (apiVersions['emoji_reactions.pleroma.pl-api'] >= 1 || this.features.version.software === MITRA) {
- response = await this.request(`/api/v1/pleroma/statuses/${statusId}/reactions/${emoji}`, { method: 'DELETE' });
+ if (
+ apiVersions['emoji_reactions.pleroma.pl-api'] >= 1 ||
+ this.features.version.software === MITRA
+ ) {
+ response = await this.request(`/api/v1/pleroma/statuses/${statusId}/reactions/${emoji}`, {
+ method: 'DELETE',
+ });
} else {
- response = await this.request(`/api/v1/statuses/${statusId}/unreact/${encodeURIComponent(emoji)}`, { method: 'POST' });
+ response = await this.request(
+ `/api/v1/statuses/${statusId}/unreact/${encodeURIComponent(emoji)}`,
+ { method: 'POST' },
+ );
}
return v.parse(statusSchema, response.json);
@@ -2814,9 +3085,11 @@ class PlApiClient {
* Requires features{@link Features.quotePosts}.
* @see {@link https://docs.joinmastodon.org/methods/statuses/#quotes}
*/
- getStatusQuotes: async (statusId: string, params?: GetStatusQuotesParams) =>
+ getStatusQuotes: (statusId: string, params?: GetStatusQuotesParams) =>
this.#paginatedGet(
- this.#instance.api_versions.mastodon >= 7 ? `/api/v1/statuses/${statusId}/quotes` : `/api/v1/pleroma/statuses/${statusId}/quotes`,
+ this.#instance.api_versions.mastodon >= 7
+ ? `/api/v1/statuses/${statusId}/quotes`
+ : `/api/v1/pleroma/statuses/${statusId}/quotes`,
{ params },
statusSchema,
),
@@ -2827,7 +3100,7 @@ class PlApiClient {
* Requires features{@link Features.statusDislikes}.
* @see {@link https://github.com/friendica/friendica/blob/2024.06-rc/doc/API-Friendica.md#get-apifriendicastatusesiddisliked_by}
*/
- getDislikedBy: async (statusId: string) =>
+ getDislikedBy: (statusId: string) =>
this.#paginatedGet(`/api/v1/statuses/${statusId}/disliked_by`, {}, accountSchema),
/**
@@ -2835,7 +3108,9 @@ class PlApiClient {
* @see {@link https://github.com/friendica/friendica/blob/2024.06-rc/doc/API-Friendica.md#post-apifriendicastatusesiddislike}
*/
dislikeStatus: async (statusId: string) => {
- const response = await this.request(`/api/friendica/statuses/${statusId}/dislike`, { method: 'POST' });
+ const response = await this.request(`/api/friendica/statuses/${statusId}/dislike`, {
+ method: 'POST',
+ });
return v.parse(statusSchema, response.json);
},
@@ -2845,15 +3120,17 @@ class PlApiClient {
* @see {@link https://github.com/friendica/friendica/blob/2024.06-rc/doc/API-Friendica.md#post-apifriendicastatusesidundislike}
*/
undislikeStatus: async (statusId: string) => {
- const response = await this.request(`/api/friendica/statuses/${statusId}/undislike`, { method: 'POST' });
+ const response = await this.request(`/api/friendica/statuses/${statusId}/undislike`, {
+ method: 'POST',
+ });
return v.parse(statusSchema, response.json);
},
- getStatusReferences: async (statusId: string, params?: GetStatusReferencesParams) =>
+ getStatusReferences: (statusId: string, params?: GetStatusReferencesParams) =>
this.#paginatedGet(`/api/v1/statuses/${statusId}/referred_by`, { params }, statusSchema),
- getStatusMentionedUsers: async (statusId: string, params?: GetStatusMentionedUsersParams) =>
+ getStatusMentionedUsers: (statusId: string, params?: GetStatusMentionedUsersParams) =>
this.#paginatedGet(`/api/v1/statuses/${statusId}/mentioned_by`, { params }, accountSchema),
/**
@@ -2862,7 +3139,10 @@ class PlApiClient {
* Requires features{@link Features.loadConversation}.
*/
loadConversation: async (statusId: string) => {
- const response = await this.request <{}>(`/api/v1/statuses/${statusId}/load_conversation`, { method: 'POST' });
+ const response = await this.request(
+ `/api/v1/statuses/${statusId}/load_conversation`,
+ { method: 'POST' },
+ );
return response.json;
},
@@ -2871,7 +3151,9 @@ class PlApiClient {
* Requires features{@link Features.bookmarkFoldersMultiple}.
*/
getStatusBookmarkFolders: async (statusId: string) => {
- const response = await this.request(`/api/v1/statuses/${statusId}/bookmark_categories`, { method: 'GET' });
+ const response = await this.request(`/api/v1/statuses/${statusId}/bookmark_categories`, {
+ method: 'GET',
+ });
return v.parse(filteredArray(bookmarkFolderSchema), response.json);
},
@@ -2911,7 +3193,8 @@ class PlApiClient {
updateMedia: async (attachmentId: string, params: UpdateMediaParams) => {
const response = await this.request(`/api/v1/media/${attachmentId}`, {
method: 'PUT',
- body: params, contentType: params.thumbnail ? '' : undefined,
+ body: params,
+ contentType: params.thumbnail ? '' : undefined,
});
return v.parse(mediaAttachmentSchema, response.json);
@@ -2925,7 +3208,7 @@ class PlApiClient {
* @see {@link https://docs.joinmastodon.org/methods/media/delete}
*/
deleteMedia: async (attachmentId: string) => {
- const response = await this.request<{}>(`/api/v1/media/${attachmentId}`, {
+ const response = await this.request(`/api/v1/media/${attachmentId}`, {
method: 'DELETE',
});
@@ -2951,7 +3234,10 @@ class PlApiClient {
* @see {@link https://docs.joinmastodon.org/methods/polls/#vote}
*/
vote: async (pollId: string, choices: number[]) => {
- const response = await this.request(`/api/v1/polls/${pollId}/votes`, { method: 'POST', body: { choices } });
+ const response = await this.request(`/api/v1/polls/${pollId}/votes`, {
+ method: 'POST',
+ body: { choices },
+ });
return v.parse(pollSchema, response.json);
},
@@ -2962,7 +3248,7 @@ class PlApiClient {
* View scheduled statuses
* @see {@link https://docs.joinmastodon.org/methods/scheduled_statuses/#get}
*/
- getScheduledStatuses: async (params?: GetScheduledStatusesParams) =>
+ getScheduledStatuses: (params?: GetScheduledStatusesParams) =>
this.#paginatedGet('/api/v1/scheduled_statuses', { params }, scheduledStatusSchema),
/**
@@ -2993,9 +3279,14 @@ class PlApiClient {
* @see {@link https://docs.joinmastodon.org/methods/scheduled_statuses/#cancel}
*/
cancelScheduledStatus: async (scheduledStatusId: string) => {
- const response = await this.request(`/api/v1/scheduled_statuses/${scheduledStatusId}`, { method: 'DELETE' });
+ const response = await this.request(
+ `/api/v1/scheduled_statuses/${scheduledStatusId}`,
+ {
+ method: 'DELETE',
+ },
+ );
- return response.json as {};
+ return response.json;
},
};
@@ -3053,9 +3344,11 @@ class PlApiClient {
* @see {@link https://docs.joinmastodon.org/methods/conversations/#delete}
*/
deleteConversation: async (conversationId: string) => {
- const response = await this.request(`/api/v1/conversations/${conversationId}`, { method: 'DELETE' });
+ const response = await this.request(`/api/v1/conversations/${conversationId}`, {
+ method: 'DELETE',
+ });
- return response.json as {};
+ return response.json;
},
/**
@@ -3063,7 +3356,9 @@ class PlApiClient {
* @see {@link https://docs.joinmastodon.org/methods/conversations/#read}
*/
markConversationRead: async (conversationId: string) => {
- const response = await this.request(`/api/v1/conversations/${conversationId}/read`, { method: 'POST' });
+ const response = await this.request(`/api/v1/conversations/${conversationId}/read`, {
+ method: 'POST',
+ });
return v.parse(conversationSchema, response.json);
},
@@ -3093,9 +3388,11 @@ class PlApiClient {
/**
* Requires features{@link Features.groups}.
*/
- groupTimeline: async (groupId: string, params?: GroupTimelineParams) =>
+ groupTimeline: (groupId: string, params?: GroupTimelineParams) =>
this.#paginatedGet(
- this.features.version.software === PIXELFED ? `/api/v0/groups/${groupId}/feed` : `/api/v1/timelines/group/${groupId}`,
+ this.features.version.software === PIXELFED
+ ? `/api/v0/groups/${groupId}/feed`
+ : `/api/v1/timelines/group/${groupId}`,
{ params },
statusSchema,
),
@@ -3103,7 +3400,7 @@ class PlApiClient {
/**
* Requires features{@link Features.bubbleTimeline}.
*/
- bubbleTimeline: async (params?: BubbleTimelineParams) =>
+ bubbleTimeline: (params?: BubbleTimelineParams) =>
this.#paginatedGet('/api/v1/timelines/bubble', { params }, statusSchema),
/**
@@ -3116,7 +3413,7 @@ class PlApiClient {
/**
* Requires features{@link Features.wrenchedTimeline}.
*/
- wrenchedTimeline: async (params?: WrenchedTimelineParams) =>
+ wrenchedTimeline: (params?: WrenchedTimelineParams) =>
this.#paginatedGet('/api/v1/pleroma/timelines/wrenched', { params }, statusSchema),
};
@@ -3160,7 +3457,10 @@ class PlApiClient {
* @see {@link https://docs.joinmastodon.org/methods/lists/#update}
*/
updateList: async (listId: string, params: UpdateListParams) => {
- const response = await this.request(`/api/v1/lists/${listId}`, { method: 'PUT', body: params });
+ const response = await this.request(`/api/v1/lists/${listId}`, {
+ method: 'PUT',
+ body: params,
+ });
return v.parse(listSchema, response.json);
},
@@ -3170,16 +3470,18 @@ class PlApiClient {
* @see {@link https://docs.joinmastodon.org/methods/lists/#delete}
*/
deleteList: async (listId: string) => {
- const response = await this.request(`/api/v1/lists/${listId}`, { method: 'DELETE' });
+ const response = await this.request(`/api/v1/lists/${listId}`, {
+ method: 'DELETE',
+ });
- return response.json as {};
+ return response.json;
},
/**
* View accounts in a list
* @see {@link https://docs.joinmastodon.org/methods/lists/#accounts}
*/
- getListAccounts: async (listId: string, params?: GetListAccountsParams) =>
+ getListAccounts: (listId: string, params?: GetListAccountsParams) =>
this.#paginatedGet(`/api/v1/lists/${listId}/accounts`, { params }, accountSchema),
/**
@@ -3188,11 +3490,12 @@ class PlApiClient {
* @see {@link https://docs.joinmastodon.org/methods/lists/#accounts-add}
*/
addListAccounts: async (listId: string, accountIds: string[]) => {
- const response = await this.request(`/api/v1/lists/${listId}/accounts`, {
- method: 'POST', body: { account_ids: accountIds },
+ const response = await this.request(`/api/v1/lists/${listId}/accounts`, {
+ method: 'POST',
+ body: { account_ids: accountIds },
});
- return response.json as {};
+ return response.json;
},
/**
@@ -3201,11 +3504,12 @@ class PlApiClient {
* @see {@link https://docs.joinmastodon.org/methods/lists/#accounts-remove}
*/
deleteListAccounts: async (listId: string, accountIds: string[]) => {
- const response = await this.request(`/api/v1/lists/${listId}/accounts`, {
- method: 'DELETE', body: { account_ids: accountIds },
+ const response = await this.request(`/api/v1/lists/${listId}/accounts`, {
+ method: 'DELETE',
+ body: { account_ids: accountIds },
});
- return response.json as {};
+ return response.json;
},
/**
@@ -3225,7 +3529,9 @@ class PlApiClient {
* Requires features{@link Features.listsFavourite}.
*/
unfavouriteList: async (listId: string) => {
- const response = await this.request(`/api/v1/lists/${listId}/unfavourite`, { method: 'POST' });
+ const response = await this.request(`/api/v1/lists/${listId}/unfavourite`, {
+ method: 'POST',
+ });
return v.parse(listSchema, response.json);
},
@@ -3251,28 +3557,38 @@ class PlApiClient {
connect: () => {
if (this.#socket) return this.#socket;
- const path = buildFullPath('/api/v1/streaming', this.#instance?.configuration.urls.streaming, { access_token: this.accessToken });
+ const path = buildFullPath(
+ '/api/v1/streaming',
+ this.#instance?.configuration.urls.streaming,
+ { access_token: this.accessToken },
+ );
const ws = new WebSocket(path, this.accessToken as any);
let listeners: Array<{ listener: (event: StreamingEvent) => any; stream?: string }> = [];
const queue: Array<() => any> = [];
- const enqueue = (fn: () => any) => ws.readyState === WebSocket.CONNECTING ? queue.push(fn) : fn();
+ const enqueue = (fn: () => any) =>
+ ws.readyState === WebSocket.CONNECTING ? queue.push(fn) : fn();
ws.onmessage = (event) => {
const message = v.parse(streamingEventSchema, JSON.parse(event.data as string));
- listeners.filter(({ listener, stream }) => (!stream || message.stream.includes(stream)) && listener(message));
+ listeners.filter(
+ ({ listener, stream }) =>
+ (!stream || message.stream.includes(stream)) && listener(message),
+ );
};
ws.onopen = () => {
- queue.forEach(fn => fn());
+ queue.forEach((fn) => fn());
};
this.#socket = {
- listen: (listener: (event: StreamingEvent) => any, stream?: string) => listeners.push({ listener, stream }),
- unlisten: (listener: (event: StreamingEvent) => any) => listeners = listeners.filter((value) => value.listener !== listener),
+ listen: (listener: (event: StreamingEvent) => any, stream?: string) =>
+ listeners.push({ listener, stream }),
+ unlisten: (listener: (event: StreamingEvent) => any) =>
+ (listeners = listeners.filter((value) => value.listener !== listener)),
subscribe: (stream: string, { list, tag }: { list?: string; tag?: string } = {}) =>
enqueue(() => ws.send(JSON.stringify({ type: 'subscribe', stream, list, tag }))),
unsubscribe: (stream: string, { list, tag }: { list?: string; tag?: string } = {}) =>
@@ -3293,20 +3609,32 @@ class PlApiClient {
* Notifications concerning the user. This API returns Link headers containing links to the next/previous page. However, the links can also be constructed dynamically using query params and `id` values.
* @see {@link https://docs.joinmastodon.org/methods/notifications/#get}
*/
- getNotifications: async (params?: GetNotificationParams, meta?: RequestMeta) => {
+ getNotifications: (params?: GetNotificationParams, meta?: RequestMeta) => {
const PLEROMA_TYPES = [
- 'chat_mention', 'emoji_reaction', 'report', 'participation_accepted', 'participation_request', 'event_reminder', 'event_update',
+ 'chat_mention',
+ 'emoji_reaction',
+ 'report',
+ 'participation_accepted',
+ 'participation_request',
+ 'event_reminder',
+ 'event_update',
];
- if (params?.types) params.types = [
- ...params.types,
- ...params.types.filter(type => PLEROMA_TYPES.includes(type)).map(type => `pleroma:${type}`),
- ];
+ if (params?.types)
+ params.types = [
+ ...params.types,
+ ...params.types
+ .filter((type) => PLEROMA_TYPES.includes(type))
+ .map((type) => `pleroma:${type}`),
+ ];
- if (params?.exclude_types) params.exclude_types = [
- ...params.exclude_types,
- ...params.exclude_types.filter(type => PLEROMA_TYPES.includes(type)).map(type => `pleroma:${type}`),
- ];
+ if (params?.exclude_types)
+ params.exclude_types = [
+ ...params.exclude_types,
+ ...params.exclude_types
+ .filter((type) => PLEROMA_TYPES.includes(type))
+ .map((type) => `pleroma:${type}`),
+ ];
return this.#paginatedGet('/api/v1/notifications', { ...meta, params }, notificationSchema);
},
@@ -3328,9 +3656,11 @@ class PlApiClient {
* @see {@link https://docs.joinmastodon.org/methods/notifications/#clear}
*/
dismissNotifications: async () => {
- const response = await this.request('/api/v1/notifications/clear', { method: 'POST' });
+ const response = await this.request('/api/v1/notifications/clear', {
+ method: 'POST',
+ });
- return response.json as {};
+ return response.json;
},
/**
@@ -3339,9 +3669,14 @@ class PlApiClient {
* @see {@link https://docs.joinmastodon.org/methods/notifications/#dismiss}
*/
dismissNotification: async (notificationId: string) => {
- const response = await this.request(`/api/v1/notifications/${notificationId}/dismiss`, { method: 'POST' });
+ const response = await this.request(
+ `/api/v1/notifications/${notificationId}/dismiss`,
+ {
+ method: 'POST',
+ },
+ );
- return response.json as {};
+ return response.json;
},
/**
@@ -3354,9 +3689,12 @@ class PlApiClient {
getUnreadNotificationCount: async (params?: GetUnreadNotificationCountParams) => {
const response = await this.request('/api/v1/notifications/unread_count', { params });
- return v.parse(v.object({
- count: v.number(),
- }), response.json);
+ return v.parse(
+ v.object({
+ count: v.number(),
+ }),
+ response.json,
+ );
},
/**
@@ -3380,7 +3718,10 @@ class PlApiClient {
* @see {@link https://docs.joinmastodon.org/methods/notifications/#update-the-filtering-policy-for-notifications}
*/
updateNotificationPolicy: async (params: UpdateNotificationPolicyRequest) => {
- const response = await this.request('/api/v2/notifications/policy', { method: 'PATCH', body: params });
+ const response = await this.request('/api/v2/notifications/policy', {
+ method: 'PATCH',
+ body: params,
+ });
return v.parse(notificationPolicySchema, response.json);
},
@@ -3390,7 +3731,7 @@ class PlApiClient {
* Notification requests for notifications filtered by the user’s policy. This API returns Link headers containing links to the next/previous page.
* @see {@link https://docs.joinmastodon.org/methods/notifications/#get-requests}
*/
- getNotificationRequests: async (params?: GetNotificationRequestsParams) =>
+ getNotificationRequests: (params?: GetNotificationRequestsParams) =>
this.#paginatedGet('/api/v1/notifications/requests', { params }, notificationRequestSchema),
/**
@@ -3399,7 +3740,9 @@ class PlApiClient {
* @see {@link https://docs.joinmastodon.org/methods/notifications/#get-one-request}
*/
getNotificationRequest: async (notificationRequestId: string) => {
- const response = await this.request(`/api/v1/notifications/requests/${notificationRequestId}`);
+ const response = await this.request(
+ `/api/v1/notifications/requests/${notificationRequestId}`,
+ );
return v.parse(notificationRequestSchema, response.json);
},
@@ -3410,9 +3753,12 @@ class PlApiClient {
* @see {@link https://docs.joinmastodon.org/methods/notifications/#accept-request}
*/
acceptNotificationRequest: async (notificationRequestId: string) => {
- const response = await this.request(`/api/v1/notifications/requests/${notificationRequestId}/dismiss`, { method: 'POST' });
+ const response = await this.request(
+ `/api/v1/notifications/requests/${notificationRequestId}/dismiss`,
+ { method: 'POST' },
+ );
- return response.json as {};
+ return response.json;
},
/**
@@ -3421,9 +3767,12 @@ class PlApiClient {
* @see {@link https://docs.joinmastodon.org/methods/notifications/#dismiss-request}
*/
dismissNotificationRequest: async (notificationRequestId: string) => {
- const response = await this.request(`/api/v1/notifications/requests/${notificationRequestId}/dismiss`, { method: 'POST' });
+ const response = await this.request(
+ `/api/v1/notifications/requests/${notificationRequestId}/dismiss`,
+ { method: 'POST' },
+ );
- return response.json as {};
+ return response.json;
},
/**
@@ -3433,9 +3782,12 @@ class PlApiClient {
* Requires features{@link Features.notificationsRequestsAcceptMultiple}.
*/
acceptMultipleNotificationRequests: async (notificationRequestIds: Array) => {
- const response = await this.request('/api/v1/notifications/requests/accept', { method: 'POST', body: { id: notificationRequestIds } });
+ const response = await this.request('/api/v1/notifications/requests/accept', {
+ method: 'POST',
+ body: { id: notificationRequestIds },
+ });
- return response.json as {};
+ return response.json;
},
/**
@@ -3445,9 +3797,12 @@ class PlApiClient {
* Requires features{@link Features.notificationsRequestsAcceptMultiple}.
*/
dismissMultipleNotificationRequests: async (notificationRequestIds: Array) => {
- const response = await this.request('/api/v1/notifications/requests/dismiss', { method: 'POST', body: { id: notificationRequestIds } });
+ const response = await this.request('/api/v1/notifications/requests/dismiss', {
+ method: 'POST',
+ body: { id: notificationRequestIds },
+ });
- return response.json as {};
+ return response.json;
},
/**
@@ -3459,9 +3814,12 @@ class PlApiClient {
checkNotificationRequestsMerged: async () => {
const response = await this.request('/api/v1/notifications/requests/merged');
- return v.parse(v.object({
- merged: v.boolean(),
- }), response.json);
+ return v.parse(
+ v.object({
+ merged: v.boolean(),
+ }),
+ response.json,
+ );
},
/**
@@ -3471,12 +3829,12 @@ class PlApiClient {
* @see {@link https://docs.pleroma.social/backend/development/API/differences_in_mastoapi_responses/#delete-apiv1notificationsdestroy_multiple}
*/
dismissMultipleNotifications: async (notificationIds: string[]) => {
- const response = await this.request('/api/v1/notifications/destroy_multiple', {
+ const response = await this.request('/api/v1/notifications/destroy_multiple', {
params: { ids: notificationIds },
method: 'DELETE',
});
- return response.json as {};
+ return response.json;
},
};
@@ -3493,14 +3851,28 @@ class PlApiClient {
*/
getGroupedNotifications: async (params: GetGroupedNotificationsParams, meta?: RequestMeta) => {
if (this.features.groupedNotifications) {
- return this.#paginatedGet('/api/v2/notifications', { ...meta, params }, groupedNotificationsResultsSchema, false);
- } else {
- const response = await this.notifications.getNotifications(
- pick(params, ['max_id', 'since_id', 'limit', 'min_id', 'types', 'exclude_types', 'account_id', 'include_filtered']),
+ return this.#paginatedGet(
+ '/api/v2/notifications',
+ { ...meta, params },
+ groupedNotificationsResultsSchema,
+ false,
);
-
- return this.#groupNotifications(response, params);
}
+
+ const response = await this.notifications.getNotifications(
+ pick(params, [
+ 'max_id',
+ 'since_id',
+ 'limit',
+ 'min_id',
+ 'types',
+ 'exclude_types',
+ 'account_id',
+ 'include_filtered',
+ ]),
+ );
+
+ return this.#groupNotifications(response, params);
},
/**
@@ -3515,16 +3887,16 @@ class PlApiClient {
const response = await this.request(`/api/v2/notifications/${groupKey}`);
return v.parse(groupedNotificationsResultsSchema, response.json);
- } else {
- const response = await this.request(`/api/v1/notifications/${groupKey}`);
-
- return this.#groupNotifications({
- previous: null,
- next: null,
- items: [response.json],
- partial: false,
- }).items;
}
+
+ const response = await this.request(`/api/v1/notifications/${groupKey}`);
+
+ return this.#groupNotifications({
+ previous: null,
+ next: null,
+ items: [response.json],
+ partial: false,
+ }).items;
},
/**
@@ -3536,12 +3908,17 @@ class PlApiClient {
*/
dismissNotificationGroup: async (groupKey: string) => {
if (this.features.groupedNotifications) {
- const response = await this.request(`/api/v2/notifications/${groupKey}/dismiss`, { method: 'POST' });
+ const response = await this.request(
+ `/api/v2/notifications/${groupKey}/dismiss`,
+ {
+ method: 'POST',
+ },
+ );
- return response.json as {};
- } else {
- return this.notifications.dismissNotification(groupKey);
+ return response.json;
}
+
+ return this.notifications.dismissNotification(groupKey);
},
/**
@@ -3555,9 +3932,9 @@ class PlApiClient {
const response = await this.request(`/api/v2/notifications/${groupKey}/accounts`);
return v.parse(filteredArray(accountSchema), response.json);
- } else {
- return (await (this.groupedNotifications.getNotificationGroup(groupKey))).accounts;
}
+
+ return (await this.groupedNotifications.getNotificationGroup(groupKey)).accounts;
},
/**
@@ -3571,14 +3948,25 @@ class PlApiClient {
if (this.features.groupedNotifications) {
const response = await this.request('/api/v2/notifications/unread_count', { params });
- return v.parse(v.object({
- count: v.number(),
- }), response.json);
- } else {
- return this.notifications.getUnreadNotificationCount(
- pick(params || {}, ['max_id', 'since_id', 'limit', 'min_id', 'types', 'exclude_types', 'account_id']),
+ return v.parse(
+ v.object({
+ count: v.number(),
+ }),
+ response.json,
);
}
+
+ return this.notifications.getUnreadNotificationCount(
+ pick(params || {}, [
+ 'max_id',
+ 'since_id',
+ 'limit',
+ 'min_id',
+ 'types',
+ 'exclude_types',
+ 'account_id',
+ ]),
+ );
},
};
@@ -3589,7 +3977,10 @@ class PlApiClient {
* @see {@link https://docs.joinmastodon.org/methods/push/#create}
*/
createSubscription: async (params: CreatePushNotificationsSubscriptionParams) => {
- const response = await this.request('/api/v1/push/subscription', { method: 'POST', body: params });
+ const response = await this.request('/api/v1/push/subscription', {
+ method: 'POST',
+ body: params,
+ });
return v.parse(webPushSubscriptionSchema, response.json);
},
@@ -3611,7 +4002,10 @@ class PlApiClient {
* @see {@link https://docs.joinmastodon.org/methods/push/#update}
*/
updateSubscription: async (params: UpdatePushNotificationsSubscriptionParams) => {
- const response = await this.request('/api/v1/push/subscription', { method: 'PUT', body: params });
+ const response = await this.request('/api/v1/push/subscription', {
+ method: 'PUT',
+ body: params,
+ });
return v.parse(webPushSubscriptionSchema, response.json);
},
@@ -3622,9 +4016,11 @@ class PlApiClient {
* @see {@link https://docs.joinmastodon.org/methods/push/#delete}
*/
deleteSubscription: async () => {
- const response = await this.request('/api/v1/push/subscription', { method: 'DELETE' });
+ const response = await this.request('/api/v1/push/subscription', {
+ method: 'DELETE',
+ });
- return response.json as {};
+ return response.json;
},
};
@@ -3660,7 +4056,10 @@ class PlApiClient {
* @see {@link https://github.com/mkljczk/pl/blob/fork/docs/development/API/pleroma_api.md#apiv1pleromasearchlocation}
*/
searchLocation: async (q: string, meta?: RequestMeta) => {
- const response = await this.request('/api/v1/pleroma/search/location', { ...meta, params: { q } });
+ const response = await this.request('/api/v1/pleroma/search/location', {
+ ...meta,
+ params: { q },
+ });
return v.parse(filteredArray(locationSchema), response.json);
},
@@ -3705,12 +4104,17 @@ class PlApiClient {
getInstanceActivity: async () => {
const response = await this.request('/api/v1/instance/activity');
- return v.parse(v.array(v.object({
- week: v.string(),
- statuses: v.pipe(v.unknown(), v.transform(String)),
- logins: v.pipe(v.unknown(), v.transform(String)),
- registrations: v.pipe(v.unknown(), v.transform(String)),
- })), response.json);
+ return v.parse(
+ v.array(
+ v.object({
+ week: v.string(),
+ statuses: v.pipe(v.unknown(), v.transform(String)),
+ logins: v.pipe(v.unknown(), v.transform(String)),
+ registrations: v.pipe(v.unknown(), v.transform(String)),
+ }),
+ ),
+ response.json,
+ );
},
/**
@@ -3758,10 +4162,15 @@ class PlApiClient {
target: Array<{ code: string; name: string }>;
}>('/api/v1/akkoma/translation/languages');
- return Object.fromEntries(response.json.source.map(source => [
- source.code.toLocaleLowerCase(),
- response.json.target.map(lang => lang.code).filter(lang => lang !== source.code).map(lang => lang.toLocaleLowerCase()),
- ]));
+ return Object.fromEntries(
+ response.json.source.map((source) => [
+ source.code.toLocaleLowerCase(),
+ response.json.target
+ .map((lang) => lang.code)
+ .filter((lang) => lang !== source.code)
+ .map((lang) => lang.toLocaleLowerCase()),
+ ]),
+ );
}
const response = await this.request('/api/v1/instance/translation_languages');
@@ -3803,7 +4212,8 @@ class PlApiClient {
switch (this.features.version.software) {
case MITRA:
- response = (await this.request('/api/v1/accounts/verify_credentials')).json?.client_config;
+ response = (await this.request('/api/v1/accounts/verify_credentials')).json
+ ?.client_config;
break;
default:
response = (await this.request('/api/pleroma/frontend_configurations')).json;
@@ -3835,10 +4245,10 @@ class PlApiClient {
},
/**
- * View a specific version of the terms of service
- * Obtain the contents of this server's terms of service, for a specified date, if configured.
- * @see {@link https://docs.joinmastodon.org/methods/instance/terms_of_service_date}
- */
+ * View a specific version of the terms of service
+ * Obtain the contents of this server's terms of service, for a specified date, if configured.
+ * @see {@link https://docs.joinmastodon.org/methods/instance/terms_of_service_date}
+ */
getInstanceTermsOfServiceForDate: async (date: string) => {
const response = await this.request(`/api/v1/instance/terms_of_service/${date}`);
@@ -3854,7 +4264,9 @@ class PlApiClient {
*/
getTrendingTags: async (params?: GetTrendingTags) => {
const response = await this.request(
- this.features.version.software === PIXELFED ? '/api/v1.1/discover/posts/hashtags' : '/api/v1/trends/tags',
+ this.features.version.software === PIXELFED
+ ? '/api/v1.1/discover/posts/hashtags'
+ : '/api/v1/trends/tags',
{ params },
);
@@ -3868,7 +4280,9 @@ class PlApiClient {
*/
getTrendingStatuses: async (params?: GetTrendingStatuses) => {
const response = await this.request(
- this.features.version.software === PIXELFED ? '/api/pixelfed/v2/discover/posts/trending' : '/api/v1/trends/statuses',
+ this.features.version.software === PIXELFED
+ ? '/api/pixelfed/v2/discover/posts/trending'
+ : '/api/v1/trends/statuses',
{ params },
);
@@ -3905,9 +4319,11 @@ class PlApiClient {
* @see {@link https://docs.joinmastodon.org/methods/announcements/#dismiss}
*/
dismissAnnouncements: async (announcementId: string) => {
- const response = await this.request(`/api/v1/announcements/${announcementId}`, { method: 'POST' });
+ const response = await this.request(`/api/v1/announcements/${announcementId}`, {
+ method: 'POST',
+ });
- return response.json as {};
+ return response.json;
},
/**
@@ -3916,9 +4332,12 @@ class PlApiClient {
* @see {@link https://docs.joinmastodon.org/methods/announcements/#put-reactions}
*/
addAnnouncementReaction: async (announcementId: string, emoji: string) => {
- const response = await this.request(`/api/v1/announcements/${announcementId}/reactions/${emoji}`, { method: 'PUT' });
+ const response = await this.request(
+ `/api/v1/announcements/${announcementId}/reactions/${emoji}`,
+ { method: 'PUT' },
+ );
- return response.json as {};
+ return response.json;
},
/**
@@ -3927,9 +4346,12 @@ class PlApiClient {
* @see {@link https://docs.joinmastodon.org/methods/announcements/#delete-reactions}
*/
deleteAnnouncementReaction: async (announcementId: string, emoji: string) => {
- const response = await this.request(`/api/v1/announcements/${announcementId}/reactions/${emoji}`, { method: 'DELETE' });
+ const response = await this.request(
+ `/api/v1/announcements/${announcementId}/reactions/${emoji}`,
+ { method: 'DELETE' },
+ );
- return response.json as {};
+ return response.json;
},
};
@@ -3954,26 +4376,32 @@ class PlApiClient {
* View all accounts, optionally matching certain criteria for filtering, up to 100 at a time.
* @see {@link https://docs.joinmastodon.org/methods/admin/accounts/#v2}
*/
- getAccounts: async (params?: AdminGetAccountsParams) => {
+ getAccounts: (params?: AdminGetAccountsParams) => {
if (this.features.mastodonAdminV2) {
return this.#paginatedGet('/api/v2/admin/accounts', { params }, adminAccountSchema);
- } else {
- return this.#paginatedPleromaAccounts(params ? {
- query: params.username,
- name: params.display_name,
- email: params.email,
- filters: [
- params.origin === 'local' && 'local',
- params.origin === 'remote' && 'external',
- params.status === 'active' && 'active',
- params.status === 'pending' && 'need_approval',
- params.status === 'disabled' && 'deactivated',
- params.permissions === 'staff' && 'is_admin',
- params.permissions === 'staff' && 'is_moderator',
- ].filter(filter => filter).join(','),
- page_size: 100,
- } : { page_size: 100 });
}
+
+ return this.#paginatedPleromaAccounts(
+ params
+ ? {
+ query: params.username,
+ name: params.display_name,
+ email: params.email,
+ filters: [
+ params.origin === 'local' && 'local',
+ params.origin === 'remote' && 'external',
+ params.status === 'active' && 'active',
+ params.status === 'pending' && 'need_approval',
+ params.status === 'disabled' && 'deactivated',
+ params.permissions === 'staff' && 'is_admin',
+ params.permissions === 'staff' && 'is_moderator',
+ ]
+ .filter((filter) => filter)
+ .join(','),
+ page_size: 100,
+ }
+ : { page_size: 100 },
+ );
},
/**
@@ -4002,11 +4430,16 @@ class PlApiClient {
let response;
if (this.features.mastodonAdmin) {
- response = await this.request(`/api/v1/admin/accounts/${accountId}/approve`, { method: 'POST' });
+ response = await this.request(`/api/v1/admin/accounts/${accountId}/approve`, {
+ method: 'POST',
+ });
} else {
const account = await this.admin.accounts.getAccount(accountId)!;
- response = await this.request('/api/v1/pleroma/admin/users/approve', { method: 'PATCH', body: { nicknames: [account.username] } });
+ response = await this.request('/api/v1/pleroma/admin/users/approve', {
+ method: 'PATCH',
+ body: { nicknames: [account.username] },
+ });
response.json = response.json?.users?.[0];
}
@@ -4022,13 +4455,18 @@ class PlApiClient {
let response;
if (this.features.mastodonAdmin) {
- response = await this.request(`/api/v1/admin/accounts/${accountId}/reject`, { method: 'POST' });
+ response = await this.request(`/api/v1/admin/accounts/${accountId}/reject`, {
+ method: 'POST',
+ });
} else {
const account = await this.admin.accounts.getAccount(accountId)!;
- response = await this.request('/api/v1/pleroma/admin/users', { method: 'DELETE', body: {
- nicknames: [account.username],
- } });
+ response = await this.request('/api/v1/pleroma/admin/users', {
+ method: 'DELETE',
+ body: {
+ nicknames: [account.username],
+ },
+ });
}
return v.safeParse(adminAccountSchema, response.json).output || {};
@@ -4038,12 +4476,18 @@ class PlApiClient {
* Requires features{@link Features.pleromaAdminAccounts}.
*/
createAccount: async (params: AdminCreateAccountParams) => {
- const response = await this.request('/api/v1/pleroma/admin/users', { method: 'POST', body: { users: [params] } });
+ const response = await this.request('/api/v1/pleroma/admin/users', {
+ method: 'POST',
+ body: { users: [params] },
+ });
- return v.parse(v.object({
- nickname: v.string(),
- email: v.string(),
- }), response.json[0]?.data);
+ return v.parse(
+ v.object({
+ nickname: v.string(),
+ email: v.string(),
+ }),
+ response.json[0]?.data,
+ );
},
/**
@@ -4055,13 +4499,18 @@ class PlApiClient {
let response;
if (this.features.mastodonAdmin || this.features.version.software === MITRA) {
- response = await this.request(`/api/v1/admin/accounts/${accountId}`, { method: 'DELETE' });
+ response = await this.request(`/api/v1/admin/accounts/${accountId}`, {
+ method: 'DELETE',
+ });
} else {
const account = await this.admin.accounts.getAccount(accountId)!;
- response = await this.request('/api/v1/pleroma/admin/users', { method: 'DELETE', body: {
- nicknames: [account.username],
- } });
+ response = await this.request('/api/v1/pleroma/admin/users', {
+ method: 'DELETE',
+ body: {
+ nicknames: [account.username],
+ },
+ });
}
return v.safeParse(adminAccountSchema, response.json).output || {};
@@ -4072,18 +4521,26 @@ class PlApiClient {
* Perform an action against an account and log this action in the moderation history. Also resolves any open reports against this account.
* @see {@link https://docs.joinmastodon.org/methods/admin/accounts/#action}
*/
- performAccountAction: async (accountId: string, type: AdminAccountAction, params?: AdminPerformAccountActionParams) => {
+ performAccountAction: async (
+ accountId: string,
+ type: AdminAccountAction,
+ params?: AdminPerformAccountActionParams,
+ ) => {
let response;
if (this.features.mastodonAdmin) {
- response = await this.request(`/api/v1/admin/accounts/${accountId}/action`, { body: { ...params, type } });
+ response = await this.request(`/api/v1/admin/accounts/${accountId}/action`, {
+ body: { ...params, type },
+ });
} else {
const account = await this.admin.accounts.getAccount(accountId)!;
switch (type) {
case 'disable':
case 'suspend':
- response = await this.request('/api/v1/pleroma/admin/users/deactivate', { body: { nicknames: [account.username] } });
+ response = await this.request('/api/v1/pleroma/admin/users/deactivate', {
+ body: { nicknames: [account.username] },
+ });
break;
default:
response = { json: {} };
@@ -4092,7 +4549,7 @@ class PlApiClient {
if (params?.report_id) await this.admin.reports.resolveReport(params.report_id);
}
- return response.json as {};
+ return response.json;
},
/**
@@ -4104,10 +4561,15 @@ class PlApiClient {
let response;
if (this.features.mastodonAdmin) {
- response = await this.request(`/api/v1/admin/accounts/${accountId}/enable`, { method: 'POST' });
+ response = await this.request(`/api/v1/admin/accounts/${accountId}/enable`, {
+ method: 'POST',
+ });
} else {
const account = await this.admin.accounts.getAccount(accountId)!;
- response = await this.request('/api/v1/pleroma/admin/users/activate', { method: 'PATCH', body: { nicknames: [account.username] } });
+ response = await this.request('/api/v1/pleroma/admin/users/activate', {
+ method: 'PATCH',
+ body: { nicknames: [account.username] },
+ });
response.json = response.json?.users?.[0];
}
@@ -4120,7 +4582,9 @@ class PlApiClient {
* @see {@link https://docs.joinmastodon.org/methods/admin/accounts/#unsilence}
*/
unsilenceAccount: async (accountId: string) => {
- const response = await this.request(`/api/v1/admin/accounts/${accountId}/unsilence`, { method: 'POST' });
+ const response = await this.request(`/api/v1/admin/accounts/${accountId}/unsilence`, {
+ method: 'POST',
+ });
return v.parse(adminAccountSchema, response.json);
},
@@ -4134,11 +4598,16 @@ class PlApiClient {
let response;
if (this.features.mastodonAdmin) {
- response = await this.request(`/api/v1/admin/accounts/${accountId}/unsuspend`, { method: 'POST' });
+ response = await this.request(`/api/v1/admin/accounts/${accountId}/unsuspend`, {
+ method: 'POST',
+ });
} else {
const { account } = await this.admin.accounts.getAccount(accountId)!;
- response = await this.request('/api/v1/pleroma/admin/users/activate', { method: 'PATCH', body: { nicknames: [account!.acct] } });
+ response = await this.request('/api/v1/pleroma/admin/users/activate', {
+ method: 'PATCH',
+ body: { nicknames: [account!.acct] },
+ });
response.json = response.json?.users?.[0];
}
@@ -4151,7 +4620,9 @@ class PlApiClient {
* @see {@link https://docs.joinmastodon.org/methods/admin/accounts/#unsensitive}
*/
unsensitiveAccount: async (accountId: string) => {
- const response = await this.request(`/api/v1/admin/accounts/${accountId}/unsensitive`, { method: 'POST' });
+ const response = await this.request(`/api/v1/admin/accounts/${accountId}/unsensitive`, {
+ method: 'POST',
+ });
return v.parse(adminAccountSchema, response.json);
},
@@ -4162,16 +4633,19 @@ class PlApiClient {
promoteToAdmin: async (accountId: string) => {
const { account } = await this.admin.accounts.getAccount(accountId)!;
- await this.request('/api/v1/pleroma/admin/users/permission_group/moderator', {
+ await this.request('/api/v1/pleroma/admin/users/permission_group/moderator', {
method: 'DELETE',
body: { nicknames: [account!.acct] },
});
- const response = await this.request('/api/v1/pleroma/admin/users/permission_group/admin', {
- method: 'POST',
- body: { nicknames: [account!.acct] },
- });
+ const response = await this.request(
+ '/api/v1/pleroma/admin/users/permission_group/admin',
+ {
+ method: 'POST',
+ body: { nicknames: [account!.acct] },
+ },
+ );
- return response.json as {};
+ return response.json;
},
/**
@@ -4180,12 +4654,19 @@ class PlApiClient {
promoteToModerator: async (accountId: string) => {
const { account } = await this.admin.accounts.getAccount(accountId)!;
- await this.request('/api/v1/pleroma/admin/users/permission_group/admin', {
- method: 'DELETE', body: { nicknames: [account!.acct] } });
- const response = await this.request('/api/v1/pleroma/admin/users/permission_group/moderator', {
- method: 'POST', body: { nicknames: [account!.acct] } });
+ await this.request('/api/v1/pleroma/admin/users/permission_group/admin', {
+ method: 'DELETE',
+ body: { nicknames: [account!.acct] },
+ });
+ const response = await this.request(
+ '/api/v1/pleroma/admin/users/permission_group/moderator',
+ {
+ method: 'POST',
+ body: { nicknames: [account!.acct] },
+ },
+ );
- return response.json as {};
+ return response.json;
},
/**
@@ -4194,16 +4675,19 @@ class PlApiClient {
demoteToUser: async (accountId: string) => {
const { account } = await this.admin.accounts.getAccount(accountId)!;
- await this.request('/api/v1/pleroma/admin/users/permission_group/moderator', {
- method: 'DELETE',
- body: { nicknames: [account!.acct] },
- });
- const response = await this.request('/api/v1/pleroma/admin/users/permission_group/admin', {
+ await this.request('/api/v1/pleroma/admin/users/permission_group/moderator', {
method: 'DELETE',
body: { nicknames: [account!.acct] },
});
+ const response = await this.request(
+ '/api/v1/pleroma/admin/users/permission_group/admin',
+ {
+ method: 'DELETE',
+ body: { nicknames: [account!.acct] },
+ },
+ );
- return response.json as {};
+ return response.json;
},
/**
@@ -4215,12 +4699,12 @@ class PlApiClient {
suggestUser: async (accountId: string) => {
const { account } = await this.admin.accounts.getAccount(accountId)!;
- const response = await this.request('/api/v1/pleroma/admin/users/suggest', {
+ const response = await this.request('/api/v1/pleroma/admin/users/suggest', {
method: 'PATCH',
body: { nicknames: [account!.acct] },
});
- return response.json as {};
+ return response.json;
},
/**
@@ -4232,12 +4716,12 @@ class PlApiClient {
unsuggestUser: async (accountId: string) => {
const { account } = await this.admin.accounts.getAccount(accountId)!;
- const response = await this.request('/api/v1/pleroma/admin/users/unsuggest', {
+ const response = await this.request('/api/v1/pleroma/admin/users/unsuggest', {
method: 'PATCH',
body: { nicknames: [account!.acct] },
});
- return response.json as {};
+ return response.json;
},
/**
@@ -4249,12 +4733,12 @@ class PlApiClient {
tagUser: async (accountId: string, tags: Array) => {
const { account } = await this.admin.accounts.getAccount(accountId)!;
- const response = await this.request('/api/v1/pleroma/admin/users/tag', {
+ const response = await this.request('/api/v1/pleroma/admin/users/tag', {
method: 'PUT',
body: { nicknames: [account!.acct], tags },
});
- return response.json as {};
+ return response.json;
},
/**
@@ -4266,12 +4750,12 @@ class PlApiClient {
untagUser: async (accountId: string, tags: Array) => {
const { account } = await this.admin.accounts.getAccount(accountId)!;
- const response = await this.request('/api/v1/pleroma/admin/users/tag', {
+ const response = await this.request('/api/v1/pleroma/admin/users/tag', {
method: 'DELETE',
body: { nicknames: [account!.acct], tags },
});
- return response.json as {};
+ return response.json;
},
},
@@ -4330,11 +4814,14 @@ class PlApiClient {
* @see {@link https://docs.joinmastodon.org/methods/admin/domain_blocks/#delete}
*/
deleteDomainBlock: async (domainBlockId: string) => {
- const response = await this.request(`/api/v1/admin/domain_blocks/${domainBlockId}`, {
- method: 'DELETE',
- });
+ const response = await this.request(
+ `/api/v1/admin/domain_blocks/${domainBlockId}`,
+ {
+ method: 'DELETE',
+ },
+ );
- return response.json as {};
+ return response.json;
},
},
@@ -4345,19 +4832,23 @@ class PlApiClient {
* View information about all reports.
* @see {@link https://docs.joinmastodon.org/methods/admin/reports/#get}
*/
- getReports: async (params?: AdminGetReportsParams) => {
+ getReports: (params?: AdminGetReportsParams) => {
if (this.features.mastodonAdmin) {
- if (params?.resolved === undefined && (this.features.version.software === GOTOSOCIAL || this.features.version.software === PLEROMA)) {
+ if (
+ params?.resolved === undefined &&
+ (this.features.version.software === GOTOSOCIAL ||
+ this.features.version.software === PLEROMA)
+ ) {
if (!params) params = {};
params.resolved = false;
}
return this.#paginatedGet('/api/v1/admin/reports', { params }, adminReportSchema);
- } else {
- return this.#paginatedPleromaReports({
- state: params?.resolved === true ? 'resolved' : 'open',
- page_size: params?.limit || 100,
- });
}
+
+ return this.#paginatedPleromaReports({
+ state: params?.resolved === true ? 'resolved' : 'open',
+ page_size: params?.limit || 100,
+ });
},
/**
@@ -4381,7 +4872,10 @@ class PlApiClient {
* @see {@link https://docs.joinmastodon.org/methods/admin/reports/#update}
*/
updateReport: async (reportId: string, params: AdminUpdateReportParams) => {
- const response = await this.request(`/api/v1/admin/reports/${reportId}`, { method: 'PUT', body: params });
+ const response = await this.request(`/api/v1/admin/reports/${reportId}`, {
+ method: 'PUT',
+ body: params,
+ });
return v.parse(adminReportSchema, response.json);
},
@@ -4392,7 +4886,9 @@ class PlApiClient {
* @see {@link https://docs.joinmastodon.org/methods/admin/reports/#assign_to_self}
*/
assignReportToSelf: async (reportId: string) => {
- const response = await this.request(`/api/v1/admin/reports/${reportId}/assign_to_self`, { method: 'POST' });
+ const response = await this.request(`/api/v1/admin/reports/${reportId}/assign_to_self`, {
+ method: 'POST',
+ });
return v.parse(adminReportSchema, response.json);
},
@@ -4403,7 +4899,9 @@ class PlApiClient {
* @see {@link https://docs.joinmastodon.org/methods/admin/reports/#unassign}
*/
unassignReport: async (reportId: string) => {
- const response = await this.request(`/api/v1/admin/reports/${reportId}/unassign`, { method: 'POST' });
+ const response = await this.request(`/api/v1/admin/reports/${reportId}/unassign`, {
+ method: 'POST',
+ });
return v.parse(adminReportSchema, response.json);
},
@@ -4420,7 +4918,10 @@ class PlApiClient {
resolveReport: async (reportId: string, action_taken_comment?: string) => {
let response;
if (this.features.mastodonAdmin) {
- response = await this.request(`/api/v1/admin/reports/${reportId}/resolve`, { method: 'POST', body: { action_taken_comment } });
+ response = await this.request(`/api/v1/admin/reports/${reportId}/resolve`, {
+ method: 'POST',
+ body: { action_taken_comment },
+ });
} else {
response = await this.request(`/api/v1/pleroma/admin/reports/${reportId}`, {
method: 'PATCH',
@@ -4439,7 +4940,9 @@ class PlApiClient {
reopenReport: async (reportId: string) => {
let response;
if (this.features.mastodonAdmin) {
- response = await this.request(`/api/v1/admin/reports/${reportId}/reopen`, { method: 'POST' });
+ response = await this.request(`/api/v1/admin/reports/${reportId}/reopen`, {
+ method: 'POST',
+ });
} else {
response = await this.request(`/api/v1/pleroma/admin/reports/${reportId}`, {
method: 'PATCH',
@@ -4460,20 +4963,21 @@ class PlApiClient {
* Requires features{@link Features.pleromaAdminStatuses}.
* @see {@link https://docs.pleroma.social/backend/development/API/admin_api/#get-apiv1pleromaadminstatuses}
*/
- getStatuses: async (params?: AdminGetStatusesParams) => this.#paginatedPleromaStatuses({
- page_size: params?.limit || 100,
- page: 1,
- local_only: params?.local_only,
- with_reblogs: params?.with_reblogs,
- godmode: params?.with_private,
- }),
+ getStatuses: (params?: AdminGetStatusesParams) =>
+ this.#paginatedPleromaStatuses({
+ page_size: params?.limit || 100,
+ page: 1,
+ local_only: params?.local_only,
+ with_reblogs: params?.with_reblogs,
+ godmode: params?.with_private,
+ }),
/**
* Show status by id
*
* Requires features{@link Features.pleromaAdminStatuses}.
* @see {@link https://docs.pleroma.social/backend/development/API/admin_api/#get-apiv1pleromaadminstatusesid}
- */
+ */
getStatus: async (statusId: string) => {
const response = await this.request(`/api/v1/pleroma/admin/statuses/${statusId}`);
@@ -4487,7 +4991,10 @@ class PlApiClient {
* @see {@link https://docs.pleroma.social/backend/development/API/admin_api/#put-apiv1pleromaadminstatusesid}
*/
updateStatus: async (statusId: string, params: AdminUpdateStatusParams) => {
- const response = await this.request(`/api/v1/pleroma/admin/statuses/${statusId}`, { method: 'PUT', body: params });
+ const response = await this.request(`/api/v1/pleroma/admin/statuses/${statusId}`, {
+ method: 'PUT',
+ body: params,
+ });
return v.parse(statusSchema, response.json);
},
@@ -4502,19 +5009,29 @@ class PlApiClient {
let response;
if (this.features.version.software === MITRA) {
- response = await this.request(`/api/v1/admin/posts/${statusId}`, { method: 'DELETE' });
+ response = await this.request(`/api/v1/admin/posts/${statusId}`, {
+ method: 'DELETE',
+ });
} else {
- response = await this.request(`/api/v1/pleroma/admin/statuses/${statusId}`, { method: 'DELETE' });
+ response = await this.request(`/api/v1/pleroma/admin/statuses/${statusId}`, {
+ method: 'DELETE',
+ });
}
- return response.json as {};
+ return response.json;
},
/**
* Requires features{@link Features.pleromaAdminStatusesRedact}
*/
- redactStatus: async (statusId: string, params: EditStatusParams & { overwrite?: boolean }) => {
- const response = await this.request(`/api/v1/pleroma/admin/statuses/${statusId}/redact`, { method: 'PATCH', body: params });
+ redactStatus: async (
+ statusId: string,
+ params: EditStatusParams & { overwrite?: boolean },
+ ) => {
+ const response = await this.request(`/api/v1/pleroma/admin/statuses/${statusId}/redact`, {
+ method: 'PATCH',
+ body: params,
+ });
return v.parse(statusSchema, response.json);
},
@@ -4570,15 +5087,21 @@ class PlApiClient {
* List all canonical email blocks
* @see {@link https://docs.joinmastodon.org/methods/admin/canonical_email_blocks/#get}
*/
- getCanonicalEmailBlocks: async (params?: AdminGetCanonicalEmailBlocks) =>
- this.#paginatedGet('/api/v1/admin/canonical_email_blocks', { params }, adminCanonicalEmailBlockSchema),
+ getCanonicalEmailBlocks: (params?: AdminGetCanonicalEmailBlocks) =>
+ this.#paginatedGet(
+ '/api/v1/admin/canonical_email_blocks',
+ { params },
+ adminCanonicalEmailBlockSchema,
+ ),
/**
* Show a single canonical email block
* @see {@link https://docs.joinmastodon.org/methods/admin/canonical_email_blocks/#get-one}
*/
getCanonicalEmailBlock: async (canonicalEmailBlockId: string) => {
- const response = await this.request(`/api/v1/admin/canonical_email_blocks/${canonicalEmailBlockId}`);
+ const response = await this.request(
+ `/api/v1/admin/canonical_email_blocks/${canonicalEmailBlockId}`,
+ );
return v.parse(adminCanonicalEmailBlockSchema, response.json);
},
@@ -4589,7 +5112,10 @@ class PlApiClient {
* @see {@link https://docs.joinmastodon.org/methods/admin/canonical_email_blocks/#test}
*/
testCanonicalEmailBlock: async (email: string) => {
- const response = await this.request('/api/v1/admin/canonical_email_blocks/test', { method: 'POST', body: { email } });
+ const response = await this.request('/api/v1/admin/canonical_email_blocks/test', {
+ method: 'POST',
+ body: { email },
+ });
return v.parse(filteredArray(adminCanonicalEmailBlockSchema), response.json);
},
@@ -4599,7 +5125,10 @@ class PlApiClient {
* @see {@link https://docs.joinmastodon.org/methods/admin/canonical_email_blocks/#create}
*/
createCanonicalEmailBlock: async (email: string, canonical_email_hash?: string) => {
- const response = await this.request('/api/v1/admin/canonical_email_blocks', { method: 'POST', body: { email, canonical_email_hash } });
+ const response = await this.request('/api/v1/admin/canonical_email_blocks', {
+ method: 'POST',
+ body: { email, canonical_email_hash },
+ });
return v.parse(filteredArray(adminCanonicalEmailBlockSchema), response.json);
},
@@ -4609,9 +5138,12 @@ class PlApiClient {
* @see {@link https://docs.joinmastodon.org/methods/admin/canonical_email_blocks/#delete}
*/
deleteCanonicalEmailBlock: async (canonicalEmailBlockId: string) => {
- const response = await this.request(`/api/v1/admin/canonical_email_blocks/${canonicalEmailBlockId}`, { method: 'DELETE' });
+ const response = await this.request(
+ `/api/v1/admin/canonical_email_blocks/${canonicalEmailBlockId}`,
+ { method: 'DELETE' },
+ );
- return response.json as {};
+ return response.json;
},
},
@@ -4623,7 +5155,10 @@ class PlApiClient {
* @see {@link https://docs.joinmastodon.org/methods/admin/dimensions/#get}
*/
getDimensions: async (keys: AdminDimensionKey[], params?: AdminGetDimensionsParams) => {
- const response = await this.request('/api/v1/admin/dimensions', { method: 'POST', params: { ...params, keys } });
+ const response = await this.request('/api/v1/admin/dimensions', {
+ method: 'POST',
+ params: { ...params, keys },
+ });
return v.parse(filteredArray(adminDimensionSchema), response.json);
},
@@ -4656,7 +5191,10 @@ class PlApiClient {
* @see {@link https://docs.joinmastodon.org/methods/admin/domain_allows/#create}
*/
createDomainAllow: async (domain: string) => {
- const response = await this.request('/api/v1/admin/domain_allows', { method: 'POST', body: { domain } });
+ const response = await this.request('/api/v1/admin/domain_allows', {
+ method: 'POST',
+ body: { domain },
+ });
return v.parse(adminDomainAllowSchema, response.json);
},
@@ -4667,9 +5205,14 @@ class PlApiClient {
* @see {@link https://docs.joinmastodon.org/methods/admin/domain_allows/#delete}
*/
deleteDomainAllow: async (domainAllowId: string) => {
- const response = await this.request(`/api/v1/admin/domain_allows/${domainAllowId}`, { method: 'DELETE' });
+ const response = await this.request(
+ `/api/v1/admin/domain_allows/${domainAllowId}`,
+ {
+ method: 'DELETE',
+ },
+ );
- return response.json as {};
+ return response.json;
},
},
@@ -4681,7 +5224,11 @@ class PlApiClient {
* @see {@link https://docs.joinmastodon.org/methods/admin/email_domain_blocks/#get}
*/
getEmailDomainBlocks: (params?: AdminGetEmailDomainBlocksParams) =>
- this.#paginatedGet('/api/v1/admin/email_domain_blocks', { params }, adminEmailDomainBlockSchema),
+ this.#paginatedGet(
+ '/api/v1/admin/email_domain_blocks',
+ { params },
+ adminEmailDomainBlockSchema,
+ ),
/**
* Get a single blocked email domain
@@ -4689,7 +5236,9 @@ class PlApiClient {
* @see {@link https://docs.joinmastodon.org/methods/admin/email_domain_blocks/#get-one}
*/
getEmailDomainBlock: async (emailDomainBlockId: string) => {
- const response = await this.request(`/api/v1/admin/email_domain_blocks/${emailDomainBlockId}`);
+ const response = await this.request(
+ `/api/v1/admin/email_domain_blocks/${emailDomainBlockId}`,
+ );
return v.parse(adminEmailDomainBlockSchema, response.json);
},
@@ -4700,7 +5249,10 @@ class PlApiClient {
* @see {@link https://docs.joinmastodon.org/methods/admin/email_domain_blocks/#create}
*/
createEmailDomainBlock: async (domain: string) => {
- const response = await this.request('/api/v1/admin/email_domain_blocks', { method: 'POST', body: { domain } });
+ const response = await this.request('/api/v1/admin/email_domain_blocks', {
+ method: 'POST',
+ body: { domain },
+ });
return v.parse(adminEmailDomainBlockSchema, response.json);
},
@@ -4711,9 +5263,12 @@ class PlApiClient {
* @see {@link https://docs.joinmastodon.org/methods/admin/email_domain_blocks/#delete}
*/
deleteEmailDomainBlock: async (emailDomainBlockId: string) => {
- const response = await this.request(`/api/v1/admin/email_domain_blocks/${emailDomainBlockId}`, { method: 'DELETE' });
+ const response = await this.request(
+ `/api/v1/admin/email_domain_blocks/${emailDomainBlockId}`,
+ { method: 'DELETE' },
+ );
- return response.json as {};
+ return response.json;
},
},
@@ -4744,7 +5299,10 @@ class PlApiClient {
* @see {@link https://docs.joinmastodon.org/methods/admin/ip_blocks/#create}
*/
createIpBlock: async (params: AdminCreateIpBlockParams) => {
- const response = await this.request('/api/v1/admin/ip_blocks', { method: 'POST', body: params });
+ const response = await this.request('/api/v1/admin/ip_blocks', {
+ method: 'POST',
+ body: params,
+ });
return v.parse(adminIpBlockSchema, response.json);
},
@@ -4755,7 +5313,10 @@ class PlApiClient {
* @see {@link https://docs.joinmastodon.org/methods/admin/ip_blocks/#update}
*/
updateIpBlock: async (ipBlockId: string, params: AdminCreateIpBlockParams) => {
- const response = await this.request(`/api/v1/admin/ip_blocks/${ipBlockId}`, { method: 'POST', body: params });
+ const response = await this.request(`/api/v1/admin/ip_blocks/${ipBlockId}`, {
+ method: 'POST',
+ body: params,
+ });
return v.parse(adminIpBlockSchema, response.json);
},
@@ -4766,9 +5327,11 @@ class PlApiClient {
* @see {@link https://docs.joinmastodon.org/methods/admin/ip_blocks/#delete}
*/
deleteIpBlock: async (ipBlockId: string) => {
- const response = await this.request(`/api/v1/admin/ip_blocks/${ipBlockId}`, { method: 'DELETE' });
+ const response = await this.request(`/api/v1/admin/ip_blocks/${ipBlockId}`, {
+ method: 'DELETE',
+ });
- return response.json as {};
+ return response.json;
},
},
@@ -4779,8 +5342,16 @@ class PlApiClient {
* Obtain quantitative metrics about the server.
* @see {@link https://docs.joinmastodon.org/methods/admin/measures/#get}
*/
- getMeasures: async (keys: AdminMeasureKey[], start_at: string, end_at: string, params?: AdminGetMeasuresParams) => {
- const response = await this.request('/api/v1/admin/measures', { method: 'POST', params: { ...params, keys, start_at, end_at } });
+ getMeasures: async (
+ keys: AdminMeasureKey[],
+ start_at: string,
+ end_at: string,
+ params?: AdminGetMeasuresParams,
+ ) => {
+ const response = await this.request('/api/v1/admin/measures', {
+ method: 'POST',
+ params: { ...params, keys, start_at, end_at },
+ });
return v.parse(filteredArray(adminMeasureSchema), response.json);
},
@@ -4795,7 +5366,10 @@ class PlApiClient {
* @see {@link https://docs.joinmastodon.org/methods/admin/retention/#create}
*/
getRetention: async (start_at: string, end_at: string, frequency: 'day' | 'month') => {
- const response = await this.request('/api/v1/admin/retention', { method: 'POST', params: { start_at, end_at, frequency } });
+ const response = await this.request('/api/v1/admin/retention', {
+ method: 'POST',
+ params: { start_at, end_at, frequency },
+ });
return v.parse(filteredArray(adminCohortSchema), response.json);
},
@@ -4808,14 +5382,22 @@ class PlApiClient {
* Requires features{@link Features.pleromaAdminAnnouncements}.
* @see {@link https://docs.pleroma.social/backend/development/API/admin_api/#get-apiv1pleromaadminannouncements}
*/
- getAnnouncements: async (params?: AdminGetAnnouncementsParams): Promise> => {
+ getAnnouncements: async (
+ params?: AdminGetAnnouncementsParams,
+ ): Promise> => {
const response = await this.request('/api/v1/pleroma/admin/announcements', { params });
const items = v.parse(filteredArray(adminAnnouncementSchema), response.json);
return {
previous: null,
- next: items.length ? () => this.admin.announcements.getAnnouncements({ ...params, offset: (params?.offset || 0) + items.length }) : null,
+ next: items.length
+ ? () =>
+ this.admin.announcements.getAnnouncements({
+ ...params,
+ offset: (params?.offset || 0) + items.length,
+ })
+ : null,
items,
partial: false,
};
@@ -4828,7 +5410,9 @@ class PlApiClient {
* @see {@link https://docs.pleroma.social/backend/development/API/admin_api/#get-apiv1pleromaadminannouncementsid}
*/
getAnnouncement: async (announcementId: string) => {
- const response = await this.request(`/api/v1/pleroma/admin/announcements/${announcementId}`);
+ const response = await this.request(
+ `/api/v1/pleroma/admin/announcements/${announcementId}`,
+ );
return v.parse(adminAnnouncementSchema, response.json);
},
@@ -4840,7 +5424,10 @@ class PlApiClient {
* @see {@link https://docs.pleroma.social/backend/development/API/admin_api/#post-apiv1pleromaadminannouncements}
*/
createAnnouncement: async (params: AdminCreateAnnouncementParams) => {
- const response = await this.request('/api/v1/pleroma/admin/announcements', { method: 'POST', body: params });
+ const response = await this.request('/api/v1/pleroma/admin/announcements', {
+ method: 'POST',
+ body: params,
+ });
return v.parse(adminAnnouncementSchema, response.json);
},
@@ -4852,7 +5439,10 @@ class PlApiClient {
* @see {@link https://docs.pleroma.social/backend/development/API/admin_api/#patch-apiv1pleromaadminannouncementsid}
*/
updateAnnouncement: async (announcementId: string, params: AdminUpdateAnnouncementParams) => {
- const response = await this.request(`/api/v1/pleroma/admin/announcements/${announcementId}`, { method: 'PATCH', body: params });
+ const response = await this.request(
+ `/api/v1/pleroma/admin/announcements/${announcementId}`,
+ { method: 'PATCH', body: params },
+ );
return v.parse(adminAnnouncementSchema, response.json);
},
@@ -4864,9 +5454,12 @@ class PlApiClient {
* @see {@link https://docs.pleroma.social/backend/development/API/admin_api/#delete-apiv1pleromaadminannouncementsid}
*/
deleteAnnouncement: async (announcementId: string) => {
- const response = await this.request(`/api/v1/pleroma/admin/announcements/${announcementId}`, { method: 'DELETE' });
+ const response = await this.request(
+ `/api/v1/pleroma/admin/announcements/${announcementId}`,
+ { method: 'DELETE' },
+ );
- return response.json as {};
+ return response.json;
},
},
@@ -4888,7 +5481,10 @@ class PlApiClient {
* Requires features{@link Features.domains}.
*/
createDomain: async (params: AdminCreateDomainParams) => {
- const response = await this.request('/api/v1/pleroma/admin/domains', { method: 'POST', body: params });
+ const response = await this.request('/api/v1/pleroma/admin/domains', {
+ method: 'POST',
+ body: params,
+ });
return v.parse(adminDomainSchema, response.json);
},
@@ -4899,7 +5495,10 @@ class PlApiClient {
* Requires features{@link Features.domains}.
*/
updateDomain: async (domainId: string, isPublic: boolean) => {
- const response = await this.request(`/api/v1/pleroma/admin/domains/${domainId}`, { method: 'PATCH', body: { public: isPublic } });
+ const response = await this.request(`/api/v1/pleroma/admin/domains/${domainId}`, {
+ method: 'PATCH',
+ body: { public: isPublic },
+ });
return v.parse(adminDomainSchema, response.json);
},
@@ -4910,9 +5509,14 @@ class PlApiClient {
* Requires features{@link Features.domains}.
*/
deleteDomain: async (domainId: string) => {
- const response = await this.request(`/api/v1/pleroma/admin/domains/${domainId}`, { method: 'DELETE' });
+ const response = await this.request(
+ `/api/v1/pleroma/admin/domains/${domainId}`,
+ {
+ method: 'DELETE',
+ },
+ );
- return response.json as {};
+ return response.json;
},
},
@@ -4922,15 +5526,30 @@ class PlApiClient {
*
* Requires features{@link Features.pleromaAdminModerationLog}.
* @see {@link https://docs.pleroma.social/backend/development/API/admin_api/#get-apiv1pleromaadminmoderation_log}
- */
- getModerationLog: async ({ limit, ...params }: AdminGetModerationLogParams = {}): Promise> => {
- const response = await this.request('/api/v1/pleroma/admin/moderation_log', { params: { page_size: limit, ...params } });
+ */
+ getModerationLog: async ({ limit, ...params }: AdminGetModerationLogParams = {}): Promise<
+ PaginatedResponse
+ > => {
+ const response = await this.request('/api/v1/pleroma/admin/moderation_log', {
+ params: { page_size: limit, ...params },
+ });
const items = v.parse(filteredArray(adminModerationLogEntrySchema), response.json.items);
return {
- previous: (params.page && params.page > 1) ? () => this.admin.moderationLog.getModerationLog({ ...params, page: params.page! - 1 }) : null,
- next: response.json.total > (params.page || 1) * (limit || 50) ? () => this.admin.moderationLog.getModerationLog({ ...params, page: (params.page || 1) + 1 }) : null,
+ previous:
+ params.page && params.page > 1
+ ? () =>
+ this.admin.moderationLog.getModerationLog({ ...params, page: params.page! - 1 })
+ : null,
+ next:
+ response.json.total > (params.page || 1) * (limit || 50)
+ ? () =>
+ this.admin.moderationLog.getModerationLog({
+ ...params,
+ page: (params.page || 1) + 1,
+ })
+ : null,
items,
partial: response.status === 206,
};
@@ -4957,7 +5576,10 @@ class PlApiClient {
* @see {@link https://docs.pleroma.social/backend/development/API/admin_api/#post-apiv1pleromaadminrelay}
*/
followRelay: async (relayUrl: string) => {
- const response = await this.request('/api/v1/pleroma/admin/relay', { method: 'POST', body: { relay_url: relayUrl } });
+ const response = await this.request('/api/v1/pleroma/admin/relay', {
+ method: 'POST',
+ body: { relay_url: relayUrl },
+ });
return v.parse(adminRelaySchema, response.json);
},
@@ -4969,7 +5591,10 @@ class PlApiClient {
* @see {@link https://docs.pleroma.social/backend/development/API/admin_api/#delete-apiv1pleromaadminrelay}
*/
unfollowRelay: async (relayUrl: string, force = false) => {
- const response = await this.request('/api/v1/pleroma/admin/relay', { method: 'DELETE', body: { relay_url: relayUrl, force } });
+ const response = await this.request('/api/v1/pleroma/admin/relay', {
+ method: 'DELETE',
+ body: { relay_url: relayUrl, force },
+ });
return v.parse(adminRelaySchema, response.json);
},
@@ -4983,7 +5608,11 @@ class PlApiClient {
* @see {@link https://docs.pleroma.social/backend/development/API/admin_api/#get-apiv1pleromaadminrules}
*/
getRules: async () => {
- const response = await this.request(this.features.version.software === GOTOSOCIAL ? '/api/v1/admin/instance/rules' : '/api/v1/pleroma/admin/rules');
+ const response = await this.request(
+ this.features.version.software === GOTOSOCIAL
+ ? '/api/v1/admin/instance/rules'
+ : '/api/v1/pleroma/admin/rules',
+ );
return v.parse(filteredArray(adminRuleSchema), response.json);
},
@@ -4996,7 +5625,9 @@ class PlApiClient {
*/
createRule: async (params: AdminCreateRuleParams) => {
const response = await this.request(
- this.features.version.software === GOTOSOCIAL ? '/api/v1/admin/instance/rules' : '/api/v1/pleroma/admin/rules',
+ this.features.version.software === GOTOSOCIAL
+ ? '/api/v1/admin/instance/rules'
+ : '/api/v1/pleroma/admin/rules',
{ method: 'POST', body: params },
);
@@ -5025,12 +5656,12 @@ class PlApiClient {
* @see {@link https://docs.pleroma.social/backend/development/API/admin_api/#delete-apiv1pleromaadminrulesid}
*/
deleteRule: async (ruleId: string) => {
- const response = await this.request(
+ const response = await this.request(
`/api/v1/${this.features.version.software === GOTOSOCIAL ? 'admin/instance' : 'pleroma/admin'}/rules/${ruleId}`,
{ method: 'DELETE' },
);
- return response.json as {};
+ return response.json;
},
},
@@ -5042,7 +5673,10 @@ class PlApiClient {
},
updatePleromaConfig: async (params: PleromaConfig['configs']) => {
- const response = await this.request('/api/v1/pleroma/admin/config', { method: 'POST', body: { configs: params } });
+ const response = await this.request('/api/v1/pleroma/admin/config', {
+ method: 'POST',
+ body: { configs: params },
+ });
return v.parse(pleromaConfigSchema, response.json);
},
@@ -5077,19 +5711,21 @@ class PlApiClient {
* @see {@link https://docs.gotosocial.org/en/latest/api/swagger/}
*/
createCustomEmoji: async (params: AdminCreateCustomEmojiParams) => {
- const response = await this.request(
- '/api/v1/admin/custom_emojis',
- { method: 'POST', body: params, contentType: '' },
- );
+ const response = await this.request('/api/v1/admin/custom_emojis', {
+ method: 'POST',
+ body: params,
+ contentType: '',
+ });
return v.parse(adminCustomEmojiSchema, response.json);
},
updateCustomEmoji: async (emojiId: string, params: AdminUpdateCustomEmojiParams) => {
- const response = await this.request(
- `/api/v1/admin/custom_emojis/${emojiId}`,
- { method: 'PATCH', body: params, contentType: '' },
- );
+ const response = await this.request(`/api/v1/admin/custom_emojis/${emojiId}`, {
+ method: 'PATCH',
+ body: params,
+ contentType: '',
+ });
return v.parse(adminCustomEmojiSchema, response.json);
},
@@ -5101,10 +5737,9 @@ class PlApiClient {
* @see {@link https://docs.gotosocial.org/en/latest/api/swagger/}
*/
deleteCustomEmoji: async (emojiId: string) => {
- const response = await this.request(
- `/api/v1/admin/custom_emojis/${emojiId}`,
- { method: 'DELETE' },
- );
+ const response = await this.request(`/api/v1/admin/custom_emojis/${emojiId}`, {
+ method: 'DELETE',
+ });
return v.parse(adminCustomEmojiSchema, response.json);
},
@@ -5119,18 +5754,21 @@ class PlApiClient {
getOembed: async (url: string, maxwidth?: number, maxheight?: number) => {
const response = await this.request('/api/oembed', { params: { url, maxwidth, maxheight } });
- return v.parse(v.object({
- type: v.fallback(v.string(), 'rich'),
- version: v.fallback(v.string(), ''),
- author_name: v.fallback(v.string(), ''),
- author_url: v.fallback(v.string(), ''),
- provider_name: v.fallback(v.string(), ''),
- provider_url: v.fallback(v.string(), ''),
- cache_age: v.number(),
- html: v.string(),
- width: v.fallback(v.nullable(v.number()), null),
- height: v.fallback(v.nullable(v.number()), null),
- }), response.json);
+ return v.parse(
+ v.object({
+ type: v.fallback(v.string(), 'rich'),
+ version: v.fallback(v.string(), ''),
+ author_name: v.fallback(v.string(), ''),
+ author_url: v.fallback(v.string(), ''),
+ provider_name: v.fallback(v.string(), ''),
+ provider_url: v.fallback(v.string(), ''),
+ cache_age: v.number(),
+ html: v.string(),
+ width: v.fallback(v.nullable(v.number()), null),
+ height: v.fallback(v.nullable(v.number()), null),
+ }),
+ response.json,
+ );
},
};
@@ -5141,7 +5779,9 @@ class PlApiClient {
* @see {@link https://docs.pleroma.social/backend/development/API/chats/#creating-or-getting-a-chat}
*/
createChat: async (accountId: string) => {
- const response = await this.request(`/api/v1/pleroma/chats/by-account-id/${accountId}`, { method: 'POST' });
+ const response = await this.request(`/api/v1/pleroma/chats/by-account-id/${accountId}`, {
+ method: 'POST',
+ });
return v.parse(chatSchema, response.json);
},
@@ -5161,7 +5801,10 @@ class PlApiClient {
* @see {@link https://docs.pleroma.social/backend/development/API/chats/#marking-a-chat-as-read}
*/
markChatAsRead: async (chatId: string, last_read_id: string) => {
- const response = await this.request(`/api/v1/pleroma/chats/${chatId}/read`, { method: 'POST', body: { last_read_id } });
+ const response = await this.request(`/api/v1/pleroma/chats/${chatId}/read`, {
+ method: 'POST',
+ body: { last_read_id },
+ });
return v.parse(chatSchema, response.json);
},
@@ -5172,7 +5815,10 @@ class PlApiClient {
* https://docs.pleroma.social/backend/development/API/chats/#marking-a-single-chat-message-as-read
*/
markChatMessageAsRead: async (chatId: string, chatMessageId: string) => {
- const response = await this.request(`/api/v1/pleroma/chats/${chatId}/messages/${chatMessageId}/read`, { method: 'POST' });
+ const response = await this.request(
+ `/api/v1/pleroma/chats/${chatId}/messages/${chatMessageId}/read`,
+ { method: 'POST' },
+ );
return v.parse(chatSchema, response.json);
},
@@ -5182,14 +5828,14 @@ class PlApiClient {
* This will return a list of chats that you have been involved in, sorted by their last update (so new chats will be at the top).
* @see {@link https://docs.pleroma.social/backend/development/API/chats/#getting-a-list-of-chats}
*/
- getChats: async (params?: GetChatsParams) =>
+ getChats: (params?: GetChatsParams) =>
this.#paginatedGet('/api/v2/pleroma/chats', { params }, chatSchema),
/**
* Getting the messages for a Chat
* For a given Chat id, you can get the associated messages with
*/
- getChatMessages: async (chatId: string, params?: GetChatMessagesParams) =>
+ getChatMessages: (chatId: string, params?: GetChatMessagesParams) =>
this.#paginatedGet(`/api/v1/pleroma/chats/${chatId}/messages`, { params }, chatMessageSchema),
/**
@@ -5198,7 +5844,10 @@ class PlApiClient {
* @see {@link https://docs.pleroma.social/backend/development/API/chats/#posting-a-chat-message}
*/
createChatMessage: async (chatId: string, params: CreateChatMessageParams) => {
- const response = await this.request(`/api/v1/pleroma/chats/${chatId}/messages`, { method: 'POST', body: params });
+ const response = await this.request(`/api/v1/pleroma/chats/${chatId}/messages`, {
+ method: 'POST',
+ body: params,
+ });
return v.parse(chatMessageSchema, response.json);
},
@@ -5209,7 +5858,9 @@ class PlApiClient {
* @see {@link https://docs.pleroma.social/backend/development/API/chats/#deleting-a-chat-message}
*/
deleteChatMessage: async (chatId: string, messageId: string) => {
- const response = await this.request(`/api/v1/pleroma/chats/${chatId}/messages/${messageId}`, { method: 'DELETE' });
+ const response = await this.request(`/api/v1/pleroma/chats/${chatId}/messages/${messageId}`, {
+ method: 'DELETE',
+ });
return v.parse(chatMessageSchema, response.json);
},
@@ -5227,10 +5878,16 @@ class PlApiClient {
};
public readonly shoutbox = {
- connect: (token: string, { onMessage, onMessages }: {
- onMessages: (messages: Array) => void;
- onMessage: (message: ShoutMessage) => void;
- }) => {
+ connect: (
+ token: string,
+ {
+ onMessage,
+ onMessages,
+ }: {
+ onMessages: (messages: Array) => void;
+ onMessage: (message: ShoutMessage) => void;
+ },
+ ) => {
let counter = 2;
let intervalId: NodeJS.Timeout;
if (this.#shoutSocket) return this.#shoutSocket;
@@ -5265,7 +5922,7 @@ class PlApiClient {
this.#shoutSocket = {
message: (text: string) => {
// guess this is meant to be incremented on each call but idk
- ws.send(JSON.stringify(['3', `${++counter}`, 'chat:public', 'new_msg', { 'text': text }]));
+ ws.send(JSON.stringify(['3', `${++counter}`, 'chat:public', 'new_msg', { text: text }]));
},
close: () => {
ws.close();
@@ -5284,7 +5941,10 @@ class PlApiClient {
* @see {@link https://codeberg.org/mkljczk/nicolex/src/branch/develop/docs/development/API/pleroma_api.md#api-v1-pleroma-events}
*/
createEvent: async (params: CreateEventParams) => {
- const response = await this.request('/api/v1/pleroma/events', { method: 'POST', body: params });
+ const response = await this.request('/api/v1/pleroma/events', {
+ method: 'POST',
+ body: params,
+ });
return v.parse(statusSchema, response.json);
},
@@ -5294,7 +5954,10 @@ class PlApiClient {
* @see {@link https://codeberg.org/mkljczk/nicolex/src/branch/develop/docs/development/API/pleroma_api.md#api-v1-pleroma-events-id}
*/
editEvent: async (statusId: string, params: EditEventParams) => {
- const response = await this.request(`/api/v1/pleroma/events/${statusId}`, { method: 'PUT', body: params });
+ const response = await this.request(`/api/v1/pleroma/events/${statusId}`, {
+ method: 'PUT',
+ body: params,
+ });
return v.parse(statusSchema, response.json);
},
@@ -5303,32 +5966,50 @@ class PlApiClient {
* Gets user's joined events
* @see {@link https://codeberg.org/mkljczk/nicolex/src/branch/develop/docs/development/API/pleroma_api.md#api-v1-pleroma-events-joined_events}
*/
- getJoinedEvents: async (state?: 'pending' | 'reject' | 'accept', params?: GetJoinedEventsParams) =>
- this.#paginatedGet('/api/v1/pleroma/events/joined_events', { params: { ...params, state } }, statusSchema),
+ getJoinedEvents: (state?: 'pending' | 'reject' | 'accept', params?: GetJoinedEventsParams) =>
+ this.#paginatedGet(
+ '/api/v1/pleroma/events/joined_events',
+ { params: { ...params, state } },
+ statusSchema,
+ ),
/**
* Gets event participants
* @see {@link https://codeberg.org/mkljczk/nicolex/src/branch/develop/docs/development/API/pleroma_api.md#api-v1-pleroma-events-id-participations}
*/
- getEventParticipations: async (statusId: string, params?: GetEventParticipationsParams) =>
- this.#paginatedGet(`/api/v1/pleroma/events/${statusId}/participations`, { params }, accountSchema),
+ getEventParticipations: (statusId: string, params?: GetEventParticipationsParams) =>
+ this.#paginatedGet(
+ `/api/v1/pleroma/events/${statusId}/participations`,
+ { params },
+ accountSchema,
+ ),
/**
* Gets event participation requests
* @see {@link https://codeberg.org/mkljczk/nicolex/src/branch/develop/docs/development/API/pleroma_api.md#api-v1-pleroma-events-id-participation_requests}
*/
- getEventParticipationRequests: async (statusId: string, params?: GetEventParticipationRequestsParams) =>
- this.#paginatedGet(`/api/v1/pleroma/events/${statusId}/participation_requests`, { params }, v.object({
- account: accountSchema,
- participation_message: v.fallback(v.string(), ''),
- })),
+ getEventParticipationRequests: (
+ statusId: string,
+ params?: GetEventParticipationRequestsParams,
+ ) =>
+ this.#paginatedGet(
+ `/api/v1/pleroma/events/${statusId}/participation_requests`,
+ { params },
+ v.object({
+ account: accountSchema,
+ participation_message: v.fallback(v.string(), ''),
+ }),
+ ),
/**
* Accepts user to the event
* @see {@link https://codeberg.org/mkljczk/nicolex/src/branch/develop/docs/development/API/pleroma_api.md#api-v1-pleroma-events-id-participation_requests-participant_id-authorize}
*/
acceptEventParticipationRequest: async (statusId: string, accountId: string) => {
- const response = await this.request(`/api/v1/pleroma/events/${statusId}/participation_requests/${accountId}/authorize`, { method: 'POST' });
+ const response = await this.request(
+ `/api/v1/pleroma/events/${statusId}/participation_requests/${accountId}/authorize`,
+ { method: 'POST' },
+ );
return v.parse(statusSchema, response.json);
},
@@ -5338,7 +6019,10 @@ class PlApiClient {
* @see {@link https://codeberg.org/mkljczk/nicolex/src/branch/develop/docs/development/API/pleroma_api.md#api-v1-pleroma-events-id-participation_requests-participant_id-reject}
*/
rejectEventParticipationRequest: async (statusId: string, accountId: string) => {
- const response = await this.request(`/api/v1/pleroma/events/${statusId}/participation_requests/${accountId}/reject`, { method: 'POST' });
+ const response = await this.request(
+ `/api/v1/pleroma/events/${statusId}/participation_requests/${accountId}/reject`,
+ { method: 'POST' },
+ );
return v.parse(statusSchema, response.json);
},
@@ -5348,7 +6032,10 @@ class PlApiClient {
* @see {@link https://codeberg.org/mkljczk/nicolex/src/branch/develop/docs/development/API/pleroma_api.md#api-v1-pleroma-events-id-join}
*/
joinEvent: async (statusId: string, participation_message?: string) => {
- const response = await this.request(`/api/v1/pleroma/events/${statusId}/join`, { method: 'POST', body: { participation_message } });
+ const response = await this.request(`/api/v1/pleroma/events/${statusId}/join`, {
+ method: 'POST',
+ body: { participation_message },
+ });
return v.parse(statusSchema, response.json);
},
@@ -5358,7 +6045,9 @@ class PlApiClient {
* @see {@link https://codeberg.org/mkljczk/nicolex/src/branch/develop/docs/development/API/pleroma_api.md#api-v1-pleroma-events-id-leave}
*/
leaveEvent: async (statusId: string) => {
- const response = await this.request(`/api/v1/pleroma/events/${statusId}/leave`, { method: 'POST' });
+ const response = await this.request(`/api/v1/pleroma/events/${statusId}/leave`, {
+ method: 'POST',
+ });
return v.parse(statusSchema, response.json);
},
@@ -5368,7 +6057,9 @@ class PlApiClient {
* @see {@link https://codeberg.org/mkljczk/nicolex/src/branch/develop/docs/development/API/pleroma_api.md#event-ics-file}
*/
getEventIcs: async (statusId: string) => {
- const response = await this.request(`/api/v1/pleroma/events/${statusId}/ics`, { contentType: '' });
+ const response = await this.request(`/api/v1/pleroma/events/${statusId}/ics`, {
+ contentType: '',
+ });
return response.data;
},
@@ -5380,7 +6071,7 @@ class PlApiClient {
*
* Requires features{@link Features.interactionRequests}.
*/
- getInteractionRequests: async (params?: GetInteractionRequestsParams) =>
+ getInteractionRequests: (params?: GetInteractionRequestsParams) =>
this.#paginatedGet('/api/v1/interaction_requests', { params }, interactionRequestSchema),
/**
@@ -5400,7 +6091,10 @@ class PlApiClient {
* Requires features{@link Features.interactionRequests}.
*/
authorizeInteractionRequest: async (interactionRequestId: string) => {
- const response = await this.request(`/api/v1/interaction_requests/${interactionRequestId}/authorize`, { method: 'POST' });
+ const response = await this.request(
+ `/api/v1/interaction_requests/${interactionRequestId}/authorize`,
+ { method: 'POST' },
+ );
return v.parse(interactionRequestSchema, response.json);
},
@@ -5411,7 +6105,10 @@ class PlApiClient {
* Requires features{@link Features.interactionRequests}.
*/
rejectInteractionRequest: async (interactionRequestId: string) => {
- const response = await this.request(`/api/v1/interaction_requests/${interactionRequestId}/authorize`, { method: 'POST' });
+ const response = await this.request(
+ `/api/v1/interaction_requests/${interactionRequestId}/authorize`,
+ { method: 'POST' },
+ );
return v.parse(interactionRequestSchema, response.json);
},
@@ -5449,7 +6146,10 @@ class PlApiClient {
* Requires features{@link Features.antennas}.
*/
updateAntenna: async (antennaId: string, params: UpdateAntennaParams) => {
- const response = await this.request(`/api/v1/antennas/${antennaId}`, { method: 'PUT', body: params });
+ const response = await this.request(`/api/v1/antennas/${antennaId}`, {
+ method: 'PUT',
+ body: params,
+ });
return v.parse(antennaSchema, response.json);
},
@@ -5458,7 +6158,9 @@ class PlApiClient {
* Requires features{@link Features.antennas}.
*/
deleteAntenna: async (antennaId: string) => {
- const response = await this.request<{}>(`/api/v1/antennas/${antennaId}`, { method: 'DELETE' });
+ const response = await this.request(`/api/v1/antennas/${antennaId}`, {
+ method: 'DELETE',
+ });
return response.json;
},
@@ -5466,14 +6168,14 @@ class PlApiClient {
/**
* Requires features{@link Features.antennas}.
*/
- getAntennaAccounts: async (antennaId: string) =>
+ getAntennaAccounts: (antennaId: string) =>
this.#paginatedGet(`/api/v1/antennas/${antennaId}/accounts`, {}, accountSchema),
/**
* Requires features{@link Features.antennas}.
*/
addAntennaAccounts: async (antennaId: string, accountIds: Array) => {
- const response = await this.request<{}>(`/api/v1/antennas/${antennaId}/accounts`, {
+ const response = await this.request