diff --git a/.eslintrc.js b/.eslintrc.js
index e3afb1c9f2..35df804504 100644
--- a/.eslintrc.js
+++ b/.eslintrc.js
@@ -357,16 +357,16 @@ module.exports = defineConfig({
'@typescript-eslint/consistent-type-definitions': ['warn', 'interface'],
'@typescript-eslint/consistent-type-exports': 'error',
'@typescript-eslint/consistent-type-imports': 'error',
- "@typescript-eslint/prefer-nullish-coalescing": ['error', { ignorePrimitives: { boolean: true } }],
- "@typescript-eslint/no-restricted-imports": [
- "warn",
+ '@typescript-eslint/prefer-nullish-coalescing': ['error', { ignorePrimitives: { boolean: true } }],
+ '@typescript-eslint/no-restricted-imports': [
+ 'warn',
{
- "name": "react-redux",
- "importNames": ["useSelector", "useDispatch"],
- "message": "Use typed hooks `useAppDispatch` and `useAppSelector` instead."
+ 'name': 'react-redux',
+ 'importNames': ['useSelector', 'useDispatch'],
+ 'message': 'Use typed hooks `useAppDispatch` and `useAppSelector` instead.'
}
],
- "@typescript-eslint/restrict-template-expressions": ['warn', { allowNumber: true }],
+ '@typescript-eslint/restrict-template-expressions': ['warn', { allowNumber: true }],
'jsdoc/require-jsdoc': 'off',
// Those rules set stricter rules for TS files
diff --git a/app/javascript/mastodon/actions/domain_blocks.js b/app/javascript/mastodon/actions/domain_blocks.js
index 727f800af3..4fb31a8bc3 100644
--- a/app/javascript/mastodon/actions/domain_blocks.js
+++ b/app/javascript/mastodon/actions/domain_blocks.js
@@ -1,10 +1,10 @@
import api, { getLinks } from '../api';
-import { blockDomainSuccess, unblockDomainSuccess } from "./domain_blocks_typed";
+import { blockDomainSuccess, unblockDomainSuccess } from './domain_blocks_typed';
import { openModal } from './modal';
-export * from "./domain_blocks_typed";
+export * from './domain_blocks_typed';
export const DOMAIN_BLOCK_REQUEST = 'DOMAIN_BLOCK_REQUEST';
export const DOMAIN_BLOCK_FAIL = 'DOMAIN_BLOCK_FAIL';
diff --git a/app/javascript/mastodon/actions/interactions.js b/app/javascript/mastodon/actions/interactions.js
index 57f2459c01..9e2ff793fd 100644
--- a/app/javascript/mastodon/actions/interactions.js
+++ b/app/javascript/mastodon/actions/interactions.js
@@ -43,7 +43,7 @@ export const UNBOOKMARK_REQUEST = 'UNBOOKMARKED_REQUEST';
export const UNBOOKMARK_SUCCESS = 'UNBOOKMARKED_SUCCESS';
export const UNBOOKMARK_FAIL = 'UNBOOKMARKED_FAIL';
-export * from "./interactions_typed";
+export * from './interactions_typed';
export function favourite(status) {
return function (dispatch) {
diff --git a/app/javascript/mastodon/actions/notifications.js b/app/javascript/mastodon/actions/notifications.js
index 6a59d5624e..6261e2a049 100644
--- a/app/javascript/mastodon/actions/notifications.js
+++ b/app/javascript/mastodon/actions/notifications.js
@@ -18,11 +18,11 @@ import {
importFetchedStatuses,
} from './importer';
import { submitMarkers } from './markers';
-import { notificationsUpdate } from "./notifications_typed";
+import { notificationsUpdate } from './notifications_typed';
import { register as registerPushNotifications } from './push_notifications';
import { saveSettings } from './settings';
-export * from "./notifications_typed";
+export * from './notifications_typed';
export const NOTIFICATIONS_UPDATE_NOOP = 'NOTIFICATIONS_UPDATE_NOOP';
diff --git a/app/javascript/mastodon/features/compose/components/compose_form.jsx b/app/javascript/mastodon/features/compose/components/compose_form.jsx
index 9b4d3dfeb5..e0b86994b7 100644
--- a/app/javascript/mastodon/features/compose/components/compose_form.jsx
+++ b/app/javascript/mastodon/features/compose/components/compose_form.jsx
@@ -27,7 +27,7 @@ import { countableText } from '../util/counter';
import { CharacterCounter } from './character_counter';
import { EditIndicator } from './edit_indicator';
import { NavigationBar } from './navigation_bar';
-import { PollForm } from "./poll_form";
+import { PollForm } from './poll_form';
import { ReplyIndicator } from './reply_indicator';
import { UploadForm } from './upload_form';
diff --git a/app/javascript/mastodon/features/emoji/emoji.js b/app/javascript/mastodon/features/emoji/emoji.js
index e4aad302f6..7a425a9904 100644
--- a/app/javascript/mastodon/features/emoji/emoji.js
+++ b/app/javascript/mastodon/features/emoji/emoji.js
@@ -23,7 +23,7 @@ const lightEmoji = emojiFilenames(['👽', '⚾', '🐔', '☁️', '💨', '
* @returns {string}
*/
const emojiFilename = (filename, colorScheme) => {
- const borderedEmoji = colorScheme === "light" ? lightEmoji : darkEmoji;
+ const borderedEmoji = colorScheme === 'light' ? lightEmoji : darkEmoji;
return borderedEmoji.includes(filename) ? (filename + '_border') : filename;
};
@@ -104,7 +104,7 @@ const emojifyTextNode = (node, customEmojis) => {
if(isSystemTheme) {
let source = document.createElement('source');
source.setAttribute('media', '(prefers-color-scheme: dark)');
- source.setAttribute('srcset', `${assetHost}/emoji/${emojiFilename(filename, "dark")}.svg`);
+ source.setAttribute('srcset', `${assetHost}/emoji/${emojiFilename(filename, 'dark')}.svg`);
replacement.appendChild(source);
}
@@ -114,10 +114,10 @@ const emojifyTextNode = (node, customEmojis) => {
img.setAttribute('alt', unicode_emoji);
img.setAttribute('title', title);
- let theme = "light";
+ let theme = 'light';
if(!isSystemTheme && !document.body?.classList.contains('theme-mastodon-light'))
- theme = "dark";
+ theme = 'dark';
img.setAttribute('src', `${assetHost}/emoji/${emojiFilename(filename, theme)}.svg`);
replacement.appendChild(img);
diff --git a/app/javascript/mastodon/features/status/components/card.jsx b/app/javascript/mastodon/features/status/components/card.jsx
index f562e53f0b..89f2711586 100644
--- a/app/javascript/mastodon/features/status/components/card.jsx
+++ b/app/javascript/mastodon/features/status/components/card.jsx
@@ -158,7 +158,7 @@ export default class Card extends PureComponent {
};
if (largeImage && card.get('type') === 'video') {
- thumbnailStyle.aspectRatio = `16 / 9`;
+ thumbnailStyle.aspectRatio = '16 / 9';
} else if (largeImage) {
thumbnailStyle.aspectRatio = '1.91 / 1';
} else {
diff --git a/app/javascript/mastodon/features/ui/components/navigation_panel.jsx b/app/javascript/mastodon/features/ui/components/navigation_panel.jsx
index ff90eef359..c9bf1ed350 100644
--- a/app/javascript/mastodon/features/ui/components/navigation_panel.jsx
+++ b/app/javascript/mastodon/features/ui/components/navigation_panel.jsx
@@ -116,7 +116,7 @@ class NavigationPanel extends Component {
if(transientSingleColumn)
banner = (
{intl.formatMessage(messages.openedInClassicInterface)}
- {" "}
+ {' '}
{intl.formatMessage(messages.advancedInterface)}
diff --git a/app/javascript/mastodon/initial_state.js b/app/javascript/mastodon/initial_state.js
index 9ec3df0df8..838aa497ae 100644
--- a/app/javascript/mastodon/initial_state.js
+++ b/app/javascript/mastodon/initial_state.js
@@ -67,7 +67,7 @@ const element = document.getElementById('initial-state');
const initialState = element?.textContent && JSON.parse(element.textContent);
/** @type {string} */
-const initialPath = document.querySelector("head meta[name=initialPath]")?.getAttribute("content") ?? '';
+const initialPath = document.querySelector('head meta[name=initialPath]')?.getAttribute('content') ?? '';
/** @type {boolean} */
export const hasMultiColumnPath = initialPath === '/'
|| initialPath === '/getting-started'
diff --git a/app/javascript/mastodon/selectors/index.js b/app/javascript/mastodon/selectors/index.js
index bd9b53919c..f43ab76cb8 100644
--- a/app/javascript/mastodon/selectors/index.js
+++ b/app/javascript/mastodon/selectors/index.js
@@ -5,7 +5,7 @@ import { toServerSideType } from 'mastodon/utils/filters';
import { me } from '../initial_state';
-export { makeGetAccount } from "./accounts";
+export { makeGetAccount } from './accounts';
const getFilters = (state, { contextType }) => {
if (!contextType) return null;
diff --git a/app/javascript/mastodon/stream.js b/app/javascript/mastodon/stream.js
index 40d69136a8..048e743bee 100644
--- a/app/javascript/mastodon/stream.js
+++ b/app/javascript/mastodon/stream.js
@@ -150,7 +150,7 @@ export const connectStream = (channelName, params, callbacks) => (dispatch, getS
const accessToken = getAccessToken();
const { onConnect, onReceive, onDisconnect } = callbacks(dispatch, getState);
- if(!accessToken) throw new Error("Trying to connect to the streaming server but no access token is available.");
+ if(!accessToken) throw new Error('Trying to connect to the streaming server but no access token is available.');
// If we cannot use a websockets connection, we must fall back
// to using individual connections for each channel
diff --git a/babel.config.js b/babel.config.js
index 9ced748a96..9a09ce992a 100644
--- a/babel.config.js
+++ b/babel.config.js
@@ -7,8 +7,8 @@ module.exports = (api) => {
};
const envOptions = {
- useBuiltIns: "usage",
- corejs: { version: "3.30" },
+ useBuiltIns: 'usage',
+ corejs: { version: '3.30' },
debug: false,
include: [
'transform-numeric-separator',
diff --git a/config/formatjs-formatter.js b/config/formatjs-formatter.js
index adb5e82ef7..f6360a4bc0 100644
--- a/config/formatjs-formatter.js
+++ b/config/formatjs-formatter.js
@@ -1,6 +1,6 @@
const path = require('path');
-const currentTranslations = require(path.join(__dirname, "../app/javascript/mastodon/locales/en.json"));
+const currentTranslations = require(path.join(__dirname, '../app/javascript/mastodon/locales/en.json'));
exports.format = (msgs) => {
const results = {};
diff --git a/config/webpack/shared.js b/config/webpack/shared.js
index 8e77a840a5..0470aa8ff9 100644
--- a/config/webpack/shared.js
+++ b/config/webpack/shared.js
@@ -97,7 +97,7 @@ module.exports = {
'node_modules',
],
alias: {
- "@": resolve(settings.source_path),
+ '@': resolve(settings.source_path),
}
},
diff --git a/streaming/errors.js b/streaming/errors.js
index 6c44d2cb8f..164826238d 100644
--- a/streaming/errors.js
+++ b/streaming/errors.js
@@ -29,7 +29,7 @@ export class RequestError extends Error {
*/
constructor(message) {
super(message);
- this.name = "RequestError";
+ this.name = 'RequestError';
this.status = 400;
}
}
@@ -40,7 +40,7 @@ export class AuthenticationError extends Error {
*/
constructor(message) {
super(message);
- this.name = "AuthenticationError";
+ this.name = 'AuthenticationError';
this.status = 401;
}
}
diff --git a/streaming/index.js b/streaming/index.js
index 154ecbc02c..bbc480c426 100644
--- a/streaming/index.js
+++ b/streaming/index.js
@@ -91,7 +91,7 @@ const parseJSON = (json, req) => {
req.log.error({ err }, `Error parsing message from ${req.remoteAddress}`);
}
} else {
- logger.error({ err }, `Error parsing message from redis`);
+ logger.error({ err }, 'Error parsing message from redis');
}
return null;
}
@@ -292,7 +292,7 @@ const startServer = async () => {
const wss = new WebSocket.Server({ noServer: true });
// Set the X-Request-Id header on WebSockets:
- wss.on("headers", function onHeaders(headers, req) {
+ wss.on('headers', function onHeaders(headers, req) {
headers.push(`X-Request-Id: ${req.id}`);
});
@@ -312,7 +312,7 @@ const startServer = async () => {
// logger. This decorates the `request` object.
attachWebsocketHttpLogger(request);
- request.log.info("HTTP Upgrade Requested");
+ request.log.info('HTTP Upgrade Requested');
/** @param {Error} err */
const onSocketError = (err) => {
@@ -365,7 +365,7 @@ const startServer = async () => {
socket.removeListener('error', onSocketError);
wss.handleUpgrade(request, socket, head, function done(ws) {
- request.log.info("Authenticated request & upgraded to WebSocket connection");
+ request.log.info('Authenticated request & upgraded to WebSocket connection');
const wsLogger = createWebsocketLogger(request, resolvedAccount);
@@ -454,7 +454,7 @@ const startServer = async () => {
callbacks.forEach(callback => callback(json));
};
- redisSubscribeClient.on("message", onRedisMessage);
+ redisSubscribeClient.on('message', onRedisMessage);
/**
* @callback SubscriptionListener
@@ -805,7 +805,7 @@ const startServer = async () => {
* @returns {SubscriptionListener}
*/
const streamFrom = (channelIds, req, log, output, attachCloseHandler, destinationType, needsFiltering = false) => {
- log.info({ channelIds }, `Starting stream`);
+ log.info({ channelIds }, 'Starting stream');
/**
* @param {string} event
@@ -912,7 +912,7 @@ const startServer = async () => {
// If the payload already contains the `filtered` property, it means
// that filtering has been applied on the ruby on rails side, as
// such, we don't need to construct or apply the filters in streaming:
- if (Object.hasOwn(payload, "filtered")) {
+ if (Object.hasOwn(payload, 'filtered')) {
transmit(event, payload);
return;
}
@@ -1068,7 +1068,7 @@ const startServer = async () => {
const heartbeat = setInterval(() => res.write(':thump\n'), 15000);
req.on('close', () => {
- req.log.info({ accountId: req.accountId }, `Ending stream`);
+ req.log.info({ accountId: req.accountId }, 'Ending stream');
// We decrement these counters here instead of in streamHttpEnd as in that
// method we don't have knowledge of the channel names
@@ -1121,7 +1121,7 @@ const startServer = async () => {
ws.send(message, (/** @type {Error|undefined} */ err) => {
if (err) {
- req.log.error({err}, `Failed to send to websocket`);
+ req.log.error({err}, 'Failed to send to websocket');
}
});
};
@@ -1376,7 +1376,7 @@ const startServer = async () => {
* @param {string[]} channelIds
*/
const removeSubscription = ({ request, logger, subscriptions }, channelIds) => {
- logger.info({ channelIds, accountId: request.accountId }, `Ending stream`);
+ logger.info({ channelIds, accountId: request.accountId }, 'Ending stream');
const subscription = subscriptions[channelIds.join(';')];
@@ -1411,7 +1411,7 @@ const startServer = async () => {
// If we have a socket that is alive and open still, send the error back to the client:
if (websocket.isAlive && websocket.readyState === websocket.OPEN) {
// TODO: Use a better error response here
- websocket.send(JSON.stringify({ error: "Error unsubscribing from channel" }));
+ websocket.send(JSON.stringify({ error: 'Error unsubscribing from channel' }));
}
});
};
diff --git a/streaming/logging.js b/streaming/logging.js
index e1c552c22e..a6d018df74 100644
--- a/streaming/logging.js
+++ b/streaming/logging.js
@@ -37,7 +37,7 @@ function sanitizeRequestLog(req) {
}
export const logger = pino({
- name: "streaming",
+ name: 'streaming',
// Reformat the log level to a string:
formatters: {
level: (label) => {