diff --git a/.github/workflows/format-check.yml b/.github/workflows/format-check.yml index 528813c73a5..9a200504ef1 100644 --- a/.github/workflows/format-check.yml +++ b/.github/workflows/format-check.yml @@ -18,5 +18,5 @@ jobs: - name: Set up Javascript environment uses: ./.github/actions/setup-javascript - - name: Check formatting with Prettier + - name: Check formatting run: yarn format:check diff --git a/.oxfmtrc.json b/.oxfmtrc.json new file mode 100644 index 00000000000..7d5225e2615 --- /dev/null +++ b/.oxfmtrc.json @@ -0,0 +1,92 @@ +{ + "$schema": "./node_modules/oxfmt/configuration_schema.json", + "singleQuote": true, + "jsxSingleQuote": true, + "printWidth": 80, + "ignorePatterns": [ + "/tmp", + "/coverage", + "/public/assets", + "/public/emoji", + "/public/packs", + "/public/packs-test", + "/public/system", + "/public/vite*", + + "*.html", + "docker-compose.override.yml", + + // Ignore config YAML files that include ERB/ruby code + "config/email.yml", + + // Vendored CSS + "app/javascript/styles/mastodon/reset.scss", + + // Automatically generated + "/app/javascript/mastodon/features/emoji/emoji_map.json", + "/app/javascript/mastodon/features/emoji/emoji_data.json", + "AUTHORS.md", + "/app/javascript/mastodon/locales/*.json", + "/config/locales", + ".storybook/static/mockServiceWorker.js", + + // do not reformat JS files as this will change too many files and cause merge conflicts with open PRs and forks + "app/javascript/**/*.js", + "app/javascript/**/*.jsx", + "streaming/**/*.js" + ], + "experimentalSortPackageJson": false, + "experimentalSortImports": { + "groups": [ + ["builtin"], + ["react"], + ["react-intl"], + ["react-utils"], + ["redux"], + ["external", "type-external"], + ["internal", "type-internal"], + ["mastodon-internals"], + ["parent", "type-parent"], + ["sibling", "type-sibling", "index", "type-index"], + ["side_effect"] + ], + "customGroups": [ + { + "groupName": "react", + "elementNamePattern": [ + "react", + "react-dom", + "react-dom/client", + "prop-types" + ] + }, + { + "groupName": "react-intl", + "elementNamePattern": ["react-intl", "intl-messageformat"] + }, + { + "groupName": "react-utils", + "elementNamePattern": [ + "classnames", + "react-helmet", + "react-router", + "react-router-dom" + ] + }, + { + "groupName": "redux", + "elementNamePattern": [ + "immutable", + "@reduxjs/toolkit", + "react-redux", + "react-immutable-proptypes", + "react-immutable-pure-component" + ] + }, + { + "groupName": "mastodon-internals", + "elementNamePattern": ["mastodon/**", "@/**"] + } + ] + } +} diff --git a/.prettierignore b/.prettierignore deleted file mode 100644 index 098dac67177..00000000000 --- a/.prettierignore +++ /dev/null @@ -1,86 +0,0 @@ -# See https://help.github.com/articles/ignoring-files for more about ignoring files. -# -# If you find yourself ignoring temporary files generated by your text editor -# or operating system, you probably want to add a global ignore instead: -# git config --global core.excludesfile '~/.gitignore_global' - -# Ignore bundler config and downloaded libraries. -/.bundle -/vendor/bundle - -# Ignore the default SQLite database. -/db/*.sqlite3 -/db/*.sqlite3-journal - -# Ignore all logfiles and tempfiles. -.eslintcache -/log/* -!/log/.keep -/tmp -/coverage -.env -.env.production -.env.development -/node_modules/ -/build/ - -# Ignore Vagrant files -.vagrant/ - -# Ignore IDE files -.vscode/ -.idea/ - -# Ignore postgres + redis + elasticsearch volume optionally created by docker-compose -/postgres -/postgres14 -/redis -/elasticsearch - -# Ignore Apple files -.DS_Store - -# Ignore vim files -*~ -*.swp - -# Ignore log files -*.log - -# Ignore Docker option files -docker-compose.override.yml - -# Ignore public -/public/assets -/public/emoji -/public/packs -/public/packs-test -/public/system -/public/vite* - -# Ignore emoji map file -/app/javascript/mastodon/features/emoji/emoji_map.json -/app/javascript/mastodon/features/emoji/emoji_data.json - -# Ignore locale files -/app/javascript/mastodon/locales/*.json -/config/locales - -# Ignore vendored CSS reset -app/javascript/styles/mastodon/reset.scss - -# Ignore Javascript pending https://github.com/mastodon/mastodon/pull/23631 -*.js -*.jsx - -# Ignore HTML till cleaned and included in CI -*.html - -# Ignore the generated AUTHORS.md -AUTHORS.md - -# Process a few selected JS files -!lint-staged.config.js - -# Ignore config YAML files that include ERB/ruby code prettier does not understand -/config/email.yml diff --git a/.prettierrc.js b/.prettierrc.js deleted file mode 100644 index 65ec869c338..00000000000 --- a/.prettierrc.js +++ /dev/null @@ -1,4 +0,0 @@ -module.exports = { - singleQuote: true, - jsxSingleQuote: true -}; diff --git a/.storybook/preview.tsx b/.storybook/preview.tsx index efdebc3bda3..1067b0e0414 100644 --- a/.storybook/preview.tsx +++ b/.storybook/preview.tsx @@ -21,9 +21,10 @@ import { reducerWithInitialState } from '@/mastodon/reducers'; import { defaultMiddleware } from '@/mastodon/store/store'; import { mockHandlers, unhandledRequestHandler } from '@/testing/api'; +import { modes } from './modes'; + import '../app/javascript/styles/application.scss'; import './styles.css'; -import { modes } from './modes'; const localeFiles = import.meta.glob('@/mastodon/locales/*.json', { query: { as: 'json' }, diff --git a/app/javascript/entrypoints/public.tsx b/app/javascript/entrypoints/public.tsx index 6e88eb87780..b2a1473dfbc 100644 --- a/app/javascript/entrypoints/public.tsx +++ b/app/javascript/entrypoints/public.tsx @@ -366,9 +366,9 @@ on('change', '#account_statuses_cleanup_policy_enabled', ({ target }) => { if (!(target instanceof HTMLInputElement) || !target.form) return; target.form - .querySelectorAll< - HTMLInputElement | HTMLSelectElement - >('input:not([type=hidden], #account_statuses_cleanup_policy_enabled), select') + .querySelectorAll( + 'input:not([type=hidden], #account_statuses_cleanup_policy_enabled), select', + ) .forEach((input) => { setInputDisabled(input, !target.checked); }); diff --git a/app/javascript/mastodon/components/alt_text_badge.tsx b/app/javascript/mastodon/components/alt_text_badge.tsx index 33dd3963d21..1aa847b65f8 100644 --- a/app/javascript/mastodon/components/alt_text_badge.tsx +++ b/app/javascript/mastodon/components/alt_text_badge.tsx @@ -2,11 +2,11 @@ import { useState, useCallback, useRef, useId } from 'react'; import { FormattedMessage } from 'react-intl'; -import Overlay from 'react-overlays/Overlay'; import type { OffsetValue, UsePopperOptions, } from 'react-overlays/esm/usePopper'; +import Overlay from 'react-overlays/Overlay'; import { useSelectableClick } from 'mastodon/hooks/useSelectableClick'; diff --git a/app/javascript/mastodon/components/dropdown_menu.tsx b/app/javascript/mastodon/components/dropdown_menu.tsx index b5ee0db34ed..24d75080e9d 100644 --- a/app/javascript/mastodon/components/dropdown_menu.tsx +++ b/app/javascript/mastodon/components/dropdown_menu.tsx @@ -13,12 +13,12 @@ import { Link } from 'react-router-dom'; import type { Map as ImmutableMap } from 'immutable'; -import Overlay from 'react-overlays/Overlay'; import type { OffsetValue, UsePopperOptions, Placement, } from 'react-overlays/esm/usePopper'; +import Overlay from 'react-overlays/Overlay'; import { fetchRelationships } from 'mastodon/actions/accounts'; import { @@ -90,7 +90,7 @@ export const DropdownMenuItemContent: React.FC<{ item: MenuItem }> = ({ ); }; -export const DropdownMenu = ({ +export const DropdownMenu = ({ items, loading, scrollable, diff --git a/app/javascript/mastodon/components/hover_card_controller.tsx b/app/javascript/mastodon/components/hover_card_controller.tsx index 81510e8bd6e..624a69e057d 100644 --- a/app/javascript/mastodon/components/hover_card_controller.tsx +++ b/app/javascript/mastodon/components/hover_card_controller.tsx @@ -2,11 +2,11 @@ import { useEffect, useRef, useState, useCallback } from 'react'; import { useLocation } from 'react-router-dom'; -import Overlay from 'react-overlays/Overlay'; import type { OffsetValue, UsePopperOptions, } from 'react-overlays/esm/usePopper'; +import Overlay from 'react-overlays/Overlay'; import { HoverCardAccount } from 'mastodon/components/hover_card_account'; import { useTimeout } from 'mastodon/hooks/useTimeout'; diff --git a/app/javascript/mastodon/features/ui/components/hashtag_menu_controller.tsx b/app/javascript/mastodon/features/ui/components/hashtag_menu_controller.tsx index 63233a09cf6..f8d94797d08 100644 --- a/app/javascript/mastodon/features/ui/components/hashtag_menu_controller.tsx +++ b/app/javascript/mastodon/features/ui/components/hashtag_menu_controller.tsx @@ -4,11 +4,11 @@ import { useIntl, defineMessages } from 'react-intl'; import { useLocation } from 'react-router-dom'; -import Overlay from 'react-overlays/Overlay'; import type { OffsetValue, UsePopperOptions, } from 'react-overlays/esm/usePopper'; +import Overlay from 'react-overlays/Overlay'; import { DropdownMenu } from 'mastodon/components/dropdown_menu'; import { useIdentity } from 'mastodon/identity_context'; diff --git a/config/formatjs-formatter.js b/config/formatjs-formatter.js index adb5e82ef73..bf8342d3e35 100644 --- a/config/formatjs-formatter.js +++ b/config/formatjs-formatter.js @@ -1,6 +1,8 @@ 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/eslint.config.mjs b/eslint.config.mjs index f8d13114cc0..884ca60e4d3 100644 --- a/eslint.config.mjs +++ b/eslint.config.mjs @@ -3,7 +3,6 @@ import path from 'node:path'; import js from '@eslint/js'; -import { globalIgnores } from 'eslint/config'; import formatjs from 'eslint-plugin-formatjs'; import importPlugin from 'eslint-plugin-import'; import jsdoc from 'eslint-plugin-jsdoc'; @@ -12,6 +11,7 @@ import promisePlugin from 'eslint-plugin-promise'; import react from 'eslint-plugin-react'; import reactHooks from 'eslint-plugin-react-hooks'; import storybook from 'eslint-plugin-storybook'; +import { globalIgnores } from 'eslint/config'; import globals from 'globals'; import tseslint from 'typescript-eslint'; @@ -90,57 +90,6 @@ export const baseConfig = [ 'import/no-relative-packages': 'error', 'import/no-self-import': 'error', 'import/no-useless-path-segments': 'error', - 'import/order': [ - 'error', - { - alphabetize: { - order: 'asc', - }, - - 'newlines-between': 'always', - - groups: [ - 'builtin', - 'external', - 'internal', - 'parent', - ['index', 'sibling'], - 'object', - ], - - pathGroups: [ - { - pattern: '{react,react-dom,react-dom/client,prop-types}', - group: 'builtin', - position: 'after', - }, - { - pattern: '{react-intl,intl-messageformat}', - group: 'builtin', - position: 'after', - }, - { - pattern: - '{classnames,react-helmet,react-router,react-router-dom}', - group: 'external', - position: 'before', - }, - { - pattern: - '{immutable,@reduxjs/toolkit,react-redux,react-immutable-proptypes,react-immutable-pure-component}', - group: 'external', - position: 'before', - }, - { - pattern: '{mastodon/**}', - group: 'internal', - position: 'after', - }, - ], - - pathGroupsExcludedImportTypes: [], - }, - ], 'jsdoc/check-types': 'off', 'jsdoc/no-undefined-types': 'off', diff --git a/lint-staged.config.js b/lint-staged.config.js index 4f9dd99ef66..60ec3079808 100644 --- a/lint-staged.config.js +++ b/lint-staged.config.js @@ -1,5 +1,5 @@ const config = { - '*': 'prettier --ignore-unknown --write', + '*': 'oxfmt --no-error-on-unmatched-pattern', 'Gemfile|*.{rb,ruby,ru,rake}': 'bin/rubocop --force-exclusion -a', '*.{js,jsx,ts,tsx}': 'eslint --fix', '*.{css,scss}': 'stylelint --fix', diff --git a/package.json b/package.json index ca266f8255d..4bed416daf4 100644 --- a/package.json +++ b/package.json @@ -16,8 +16,8 @@ "fix:js": "eslint . --cache --fix", "fix:css": "stylelint --fix \"**/*.{css,scss}\"", "fix": "yarn fix:js && yarn fix:css", - "format": "prettier --write --log-level warn .", - "format:check": "prettier --check --ignore-unknown .", + "format": "oxfmt", + "format:check": "oxfmt --check", "i18n:extract": "formatjs extract 'app/javascript/**/*.{js,jsx,ts,tsx}' config/vite/plugin-sw-locales.ts --ignore '**/*.d.ts' --out-file app/javascript/mastodon/locales/en.json --format config/formatjs-formatter.js", "lint:js": "cd $INIT_CWD && eslint --cache --report-unused-disable-directives", "lint:css": "stylelint \"**/*.{css,scss}\"", @@ -180,8 +180,8 @@ "lint-staged": "^16.2.6", "msw": "^2.12.1", "msw-storybook-addon": "^2.0.6", + "oxfmt": "^0.33.0", "playwright": "^1.57.0", - "prettier": "^3.3.3", "react-test-renderer": "^18.2.0", "storybook": "^10.0.5", "stylelint": "^17.0.0", diff --git a/public/embed.js b/public/embed.js index bc1fac38642..31e804c358e 100644 --- a/public/embed.js +++ b/public/embed.js @@ -21,7 +21,9 @@ * @param {Map} map */ var generateId = function (map) { - var id = 0, failCount = 0, idBuffer = new Uint32Array(1); + var id = 0, + failCount = 0, + idBuffer = new Uint32Array(1); while (id === 0 || map.has(id)) { id = crypto.getRandomValues(idBuffer)[0]; @@ -44,7 +46,11 @@ window.addEventListener('message', function (e) { var data = e.data || {}; - if (typeof data !== 'object' || data.type !== 'setHeight' || !embeds.has(data.id)) { + if ( + typeof data !== 'object' || + data.type !== 'setHeight' || + !embeds.has(data.id) + ) { return; } @@ -72,7 +78,7 @@ }); // Legacy embeds - document.querySelectorAll('iframe.mastodon-embed').forEach(iframe => { + document.querySelectorAll('iframe.mastodon-embed').forEach((iframe) => { var id = generateId(embeds); embeds.set(id, iframe); @@ -84,44 +90,64 @@ iframe.style.display = 'block'; iframe.onload = function () { - iframe.contentWindow.postMessage({ - type: 'setHeight', - id: id, - }, '*'); + iframe.contentWindow.postMessage( + { + type: 'setHeight', + id: id, + }, + '*', + ); }; iframe.onload(); // In case the script is executing after the iframe has already loaded }); // New generation of embeds - document.querySelectorAll('blockquote.mastodon-embed').forEach(container => { - var id = generateId(embeds); - - embeds.set(id, container); + document + .querySelectorAll('blockquote.mastodon-embed') + .forEach((container) => { + var id = generateId(embeds); - var iframe = document.createElement('iframe'); - var embedUrl = new URL(container.getAttribute('data-embed-url')); + embeds.set(id, container); - if (embedUrl.protocol !== 'https:' && embedUrl.protocol !== 'http:') return; - if (allowedPrefixes.every((allowedPrefix) => !embedUrl.toString().startsWith(allowedPrefix))) return; - - iframe.src = embedUrl.toString(); - iframe.width = container.clientWidth; - iframe.height = 0; - iframe.allow = 'fullscreen'; - iframe.sandbox = 'allow-scripts allow-same-origin allow-popups'; - iframe.style.border = 0; - iframe.style.overflow = 'hidden'; - iframe.style.display = 'block'; + var iframe = document.createElement('iframe'); + var embedUrl = new URL(container.getAttribute('data-embed-url')); - iframe.onload = function () { - iframe.contentWindow.postMessage({ - type: 'setHeight', - id: id, - }, '*'); - }; + if (embedUrl.protocol !== 'https:' && embedUrl.protocol !== 'http:') + return; + if ( + allowedPrefixes.every( + (allowedPrefix) => !embedUrl.toString().startsWith(allowedPrefix), + ) + ) + return; - container.appendChild(iframe); - }); + iframe.src = embedUrl.toString(); + iframe.width = container.clientWidth; + iframe.height = 0; + iframe.allow = 'fullscreen'; + iframe.sandbox = 'allow-scripts allow-same-origin allow-popups'; + iframe.style.border = 0; + iframe.style.overflow = 'hidden'; + iframe.style.display = 'block'; + + iframe.onload = function () { + iframe.contentWindow.postMessage( + { + type: 'setHeight', + id: id, + }, + '*', + ); + }; + + container.appendChild(iframe); + }); }); -})((document.currentScript && document.currentScript.tagName.toUpperCase() === 'SCRIPT' && document.currentScript.dataset.allowedPrefixes) ? document.currentScript.dataset.allowedPrefixes.split(' ') : []); +})( + document.currentScript && + document.currentScript.tagName.toUpperCase() === 'SCRIPT' && + document.currentScript.dataset.allowedPrefixes + ? document.currentScript.dataset.allowedPrefixes.split(' ') + : [], +); diff --git a/stylelint.config.js b/stylelint.config.js index d4d50849f10..ff47848a3ef 100644 --- a/stylelint.config.js +++ b/stylelint.config.js @@ -36,20 +36,22 @@ module.exports = { 'property-no-unknown': [ true, { - ignoreProperties: [ - '/^mso-/', - ] }, + ignoreProperties: ['/^mso-/'], + }, ], }, }, { - files: ['app/javascript/**/*.module.scss', 'app/javascript/**/*.module.css'], + files: [ + 'app/javascript/**/*.module.scss', + 'app/javascript/**/*.module.css', + ], rules: { 'selector-pseudo-class-no-unknown': [ true, { ignorePseudoClasses: ['global'] }, - ] - } + ], + }, }, ], }; diff --git a/vite.config.mts b/vite.config.mts index 30b1dc1511d..1b264e3446a 100644 --- a/vite.config.mts +++ b/vite.config.mts @@ -1,5 +1,5 @@ -import path from 'node:path'; import { readdir } from 'node:fs/promises'; +import path from 'node:path'; import { optimizeLodashImports } from '@optimize-lodash/rollup-plugin'; import legacy from '@vitejs/plugin-legacy'; @@ -18,11 +18,11 @@ import { VitePWA } from 'vite-plugin-pwa'; import svgr from 'vite-plugin-svgr'; import tsconfigPaths from 'vite-tsconfig-paths'; -import { MastodonServiceWorkerLocales } from './config/vite/plugin-sw-locales'; +import { MastodonAssetsManifest } from './config/vite/plugin-assets-manifest'; import { MastodonEmojiCompressed } from './config/vite/plugin-emoji-compressed'; import { MastodonThemes } from './config/vite/plugin-mastodon-themes'; import { MastodonNameLookup } from './config/vite/plugin-name-lookup'; -import { MastodonAssetsManifest } from './config/vite/plugin-assets-manifest'; +import { MastodonServiceWorkerLocales } from './config/vite/plugin-sw-locales'; const jsRoot = path.resolve(__dirname, 'app/javascript'); diff --git a/yarn.lock b/yarn.lock index 986d84bfed6..f2473c02e54 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2886,10 +2886,10 @@ __metadata: marky: "npm:^1.2.5" msw: "npm:^2.12.1" msw-storybook-addon: "npm:^2.0.6" + oxfmt: "npm:^0.33.0" path-complete-extname: "npm:^1.0.0" playwright: "npm:^1.57.0" postcss-preset-env: "npm:^11.0.0" - prettier: "npm:^3.3.3" prop-types: "npm:^15.8.1" punycode: "npm:^2.3.0" react: "npm:^18.2.0" @@ -3124,6 +3124,139 @@ __metadata: languageName: node linkType: hard +"@oxfmt/binding-android-arm-eabi@npm:0.33.0": + version: 0.33.0 + resolution: "@oxfmt/binding-android-arm-eabi@npm:0.33.0" + conditions: os=android & cpu=arm + languageName: node + linkType: hard + +"@oxfmt/binding-android-arm64@npm:0.33.0": + version: 0.33.0 + resolution: "@oxfmt/binding-android-arm64@npm:0.33.0" + conditions: os=android & cpu=arm64 + languageName: node + linkType: hard + +"@oxfmt/binding-darwin-arm64@npm:0.33.0": + version: 0.33.0 + resolution: "@oxfmt/binding-darwin-arm64@npm:0.33.0" + conditions: os=darwin & cpu=arm64 + languageName: node + linkType: hard + +"@oxfmt/binding-darwin-x64@npm:0.33.0": + version: 0.33.0 + resolution: "@oxfmt/binding-darwin-x64@npm:0.33.0" + conditions: os=darwin & cpu=x64 + languageName: node + linkType: hard + +"@oxfmt/binding-freebsd-x64@npm:0.33.0": + version: 0.33.0 + resolution: "@oxfmt/binding-freebsd-x64@npm:0.33.0" + conditions: os=freebsd & cpu=x64 + languageName: node + linkType: hard + +"@oxfmt/binding-linux-arm-gnueabihf@npm:0.33.0": + version: 0.33.0 + resolution: "@oxfmt/binding-linux-arm-gnueabihf@npm:0.33.0" + conditions: os=linux & cpu=arm + languageName: node + linkType: hard + +"@oxfmt/binding-linux-arm-musleabihf@npm:0.33.0": + version: 0.33.0 + resolution: "@oxfmt/binding-linux-arm-musleabihf@npm:0.33.0" + conditions: os=linux & cpu=arm + languageName: node + linkType: hard + +"@oxfmt/binding-linux-arm64-gnu@npm:0.33.0": + version: 0.33.0 + resolution: "@oxfmt/binding-linux-arm64-gnu@npm:0.33.0" + conditions: os=linux & cpu=arm64 & libc=glibc + languageName: node + linkType: hard + +"@oxfmt/binding-linux-arm64-musl@npm:0.33.0": + version: 0.33.0 + resolution: "@oxfmt/binding-linux-arm64-musl@npm:0.33.0" + conditions: os=linux & cpu=arm64 & libc=musl + languageName: node + linkType: hard + +"@oxfmt/binding-linux-ppc64-gnu@npm:0.33.0": + version: 0.33.0 + resolution: "@oxfmt/binding-linux-ppc64-gnu@npm:0.33.0" + conditions: os=linux & cpu=ppc64 & libc=glibc + languageName: node + linkType: hard + +"@oxfmt/binding-linux-riscv64-gnu@npm:0.33.0": + version: 0.33.0 + resolution: "@oxfmt/binding-linux-riscv64-gnu@npm:0.33.0" + conditions: os=linux & cpu=riscv64 & libc=glibc + languageName: node + linkType: hard + +"@oxfmt/binding-linux-riscv64-musl@npm:0.33.0": + version: 0.33.0 + resolution: "@oxfmt/binding-linux-riscv64-musl@npm:0.33.0" + conditions: os=linux & cpu=riscv64 & libc=musl + languageName: node + linkType: hard + +"@oxfmt/binding-linux-s390x-gnu@npm:0.33.0": + version: 0.33.0 + resolution: "@oxfmt/binding-linux-s390x-gnu@npm:0.33.0" + conditions: os=linux & cpu=s390x & libc=glibc + languageName: node + linkType: hard + +"@oxfmt/binding-linux-x64-gnu@npm:0.33.0": + version: 0.33.0 + resolution: "@oxfmt/binding-linux-x64-gnu@npm:0.33.0" + conditions: os=linux & cpu=x64 & libc=glibc + languageName: node + linkType: hard + +"@oxfmt/binding-linux-x64-musl@npm:0.33.0": + version: 0.33.0 + resolution: "@oxfmt/binding-linux-x64-musl@npm:0.33.0" + conditions: os=linux & cpu=x64 & libc=musl + languageName: node + linkType: hard + +"@oxfmt/binding-openharmony-arm64@npm:0.33.0": + version: 0.33.0 + resolution: "@oxfmt/binding-openharmony-arm64@npm:0.33.0" + conditions: os=openharmony & cpu=arm64 + languageName: node + linkType: hard + +"@oxfmt/binding-win32-arm64-msvc@npm:0.33.0": + version: 0.33.0 + resolution: "@oxfmt/binding-win32-arm64-msvc@npm:0.33.0" + conditions: os=win32 & cpu=arm64 + languageName: node + linkType: hard + +"@oxfmt/binding-win32-ia32-msvc@npm:0.33.0": + version: 0.33.0 + resolution: "@oxfmt/binding-win32-ia32-msvc@npm:0.33.0" + conditions: os=win32 & cpu=ia32 + languageName: node + linkType: hard + +"@oxfmt/binding-win32-x64-msvc@npm:0.33.0": + version: 0.33.0 + resolution: "@oxfmt/binding-win32-x64-msvc@npm:0.33.0" + conditions: os=win32 & cpu=x64 + languageName: node + linkType: hard + "@parcel/watcher-android-arm64@npm:2.5.0": version: 2.5.0 resolution: "@parcel/watcher-android-arm64@npm:2.5.0" @@ -10274,6 +10407,75 @@ __metadata: languageName: node linkType: hard +"oxfmt@npm:^0.33.0": + version: 0.33.0 + resolution: "oxfmt@npm:0.33.0" + dependencies: + "@oxfmt/binding-android-arm-eabi": "npm:0.33.0" + "@oxfmt/binding-android-arm64": "npm:0.33.0" + "@oxfmt/binding-darwin-arm64": "npm:0.33.0" + "@oxfmt/binding-darwin-x64": "npm:0.33.0" + "@oxfmt/binding-freebsd-x64": "npm:0.33.0" + "@oxfmt/binding-linux-arm-gnueabihf": "npm:0.33.0" + "@oxfmt/binding-linux-arm-musleabihf": "npm:0.33.0" + "@oxfmt/binding-linux-arm64-gnu": "npm:0.33.0" + "@oxfmt/binding-linux-arm64-musl": "npm:0.33.0" + "@oxfmt/binding-linux-ppc64-gnu": "npm:0.33.0" + "@oxfmt/binding-linux-riscv64-gnu": "npm:0.33.0" + "@oxfmt/binding-linux-riscv64-musl": "npm:0.33.0" + "@oxfmt/binding-linux-s390x-gnu": "npm:0.33.0" + "@oxfmt/binding-linux-x64-gnu": "npm:0.33.0" + "@oxfmt/binding-linux-x64-musl": "npm:0.33.0" + "@oxfmt/binding-openharmony-arm64": "npm:0.33.0" + "@oxfmt/binding-win32-arm64-msvc": "npm:0.33.0" + "@oxfmt/binding-win32-ia32-msvc": "npm:0.33.0" + "@oxfmt/binding-win32-x64-msvc": "npm:0.33.0" + tinypool: "npm:2.1.0" + dependenciesMeta: + "@oxfmt/binding-android-arm-eabi": + optional: true + "@oxfmt/binding-android-arm64": + optional: true + "@oxfmt/binding-darwin-arm64": + optional: true + "@oxfmt/binding-darwin-x64": + optional: true + "@oxfmt/binding-freebsd-x64": + optional: true + "@oxfmt/binding-linux-arm-gnueabihf": + optional: true + "@oxfmt/binding-linux-arm-musleabihf": + optional: true + "@oxfmt/binding-linux-arm64-gnu": + optional: true + "@oxfmt/binding-linux-arm64-musl": + optional: true + "@oxfmt/binding-linux-ppc64-gnu": + optional: true + "@oxfmt/binding-linux-riscv64-gnu": + optional: true + "@oxfmt/binding-linux-riscv64-musl": + optional: true + "@oxfmt/binding-linux-s390x-gnu": + optional: true + "@oxfmt/binding-linux-x64-gnu": + optional: true + "@oxfmt/binding-linux-x64-musl": + optional: true + "@oxfmt/binding-openharmony-arm64": + optional: true + "@oxfmt/binding-win32-arm64-msvc": + optional: true + "@oxfmt/binding-win32-ia32-msvc": + optional: true + "@oxfmt/binding-win32-x64-msvc": + optional: true + bin: + oxfmt: bin/oxfmt + checksum: 10c0/77f670459a26a14844bdc9b34e7e06eae0b787138e265e28fa011eb9181f232cf784cd1c40adca1416d2af3f5c1af1ed08d3815860bb4596edcb0c4e3773d1f3 + languageName: node + linkType: hard + "p-limit@npm:^3.0.2": version: 3.1.0 resolution: "p-limit@npm:3.1.0" @@ -11231,15 +11433,6 @@ __metadata: languageName: node linkType: hard -"prettier@npm:^3.3.3": - version: 3.7.4 - resolution: "prettier@npm:3.7.4" - bin: - prettier: bin/prettier.cjs - checksum: 10c0/9675d2cd08eacb1faf1d1a2dbfe24bfab6a912b059fc9defdb380a408893d88213e794a40a2700bd29b140eb3172e0b07c852853f6e22f16f3374659a1a13389 - languageName: node - linkType: hard - "pretty-bytes@npm:^5.3.0": version: 5.6.0 resolution: "pretty-bytes@npm:5.6.0" @@ -13495,6 +13688,13 @@ __metadata: languageName: node linkType: hard +"tinypool@npm:2.1.0": + version: 2.1.0 + resolution: "tinypool@npm:2.1.0" + checksum: 10c0/9fb1c760558c6264e0f4cfde96a63b12450b43f1730fbe6274aa24ddbdf488745c08924d0dea7a1303b47d555416a6415f2113898c69b6ecf731e75ac95238a5 + languageName: node + linkType: hard + "tinyrainbow@npm:^2.0.0": version: 2.0.0 resolution: "tinyrainbow@npm:2.0.0"