diff --git a/.oxlintrc.json b/.oxlintrc.json index 5868f74bb8..907b47af39 100644 --- a/.oxlintrc.json +++ b/.oxlintrc.json @@ -60,6 +60,7 @@ "bskyweb/**", "bskyembed/**", "bskyogcard/**", + "lint-rules/**", "src/locale/locales/_build/**", "src/locale/locales/**/*.js", "src/lexicons/**", @@ -239,7 +240,6 @@ } } ], - "bsky-internal/use-exact-imports": "error", "bsky-internal/use-prefixed-imports": "error", "bsky-internal/lingui-msg-rule": "error", "react/display-name": "error", @@ -260,7 +260,6 @@ "react/no-unsafe": "off", "react/react-in-jsx-scope": "off", "react/hook-use-state": "warn", - "react-native/no-inline-styles": "off", "react-native-a11y/has-accessibility-hint": "error", "react-native-a11y/has-accessibility-props": "error", "react-native-a11y/has-valid-accessibility-actions": "error", @@ -275,7 +274,7 @@ "react-native-a11y/has-valid-accessibility-ignores-invert-colors": "error", "react-native-a11y/has-valid-accessibility-live-region": "error", "react-native-a11y/has-valid-important-for-accessibility": "error", - "react-compiler/react-compiler": "warn", + "react/react-compiler": "warn", "simple-import-sort/imports": [ "error", { @@ -375,9 +374,7 @@ }, "jsPlugins": [ "eslint-plugin-bsky-internal", - "eslint-plugin-react-native", "eslint-plugin-react-native-a11y", - "eslint-plugin-react-compiler", "eslint-plugin-simple-import-sort" ], "env": { @@ -405,4 +402,4 @@ } } ] -} \ No newline at end of file +} diff --git a/bskyogcard/src/types/bsky/starterPack.ts b/bskyogcard/src/types/bsky/starterPack.ts index 0064e16bc6..08bbe6c3b3 100644 --- a/bskyogcard/src/types/bsky/starterPack.ts +++ b/bskyogcard/src/types/bsky/starterPack.ts @@ -7,5 +7,4 @@ export const isView = AppBskyGraphDefs.isStarterPackView * Matches any starter pack view exported by our SDK */ export type AnyStarterPackView = - | AppBskyGraphDefs.StarterPackViewBasic - | AppBskyGraphDefs.StarterPackView + AppBskyGraphDefs.StarterPackViewBasic | AppBskyGraphDefs.StarterPackView diff --git a/eslint/use-exact-imports.js b/eslint/use-exact-imports.js deleted file mode 100644 index 6ba2df5d6c..0000000000 --- a/eslint/use-exact-imports.js +++ /dev/null @@ -1,32 +0,0 @@ -const BANNED_IMPORTS = [ - '@fortawesome/free-regular-svg-icons', - '@fortawesome/free-solid-svg-icons', -] - -/** @type {import('eslint').Rule.RuleModule} */ -module.exports = { - meta: { - type: 'suggestion', - docs: { - description: 'Prevent importing entire icon packages', - }, - schema: [], - }, - create(context) { - return { - ImportDeclaration(node) { - const source = node.source - if (typeof source.value !== 'string') { - return - } - if (BANNED_IMPORTS.includes(source.value)) { - context.report({ - node, - message: - 'Import the specific thing you want instead of the entire package', - }) - } - }, - } - }, -} diff --git a/eslint/__disabled_tests__/avoid-unwrapped-text.disabled-test.js b/lint-rules/__disabled_tests__/avoid-unwrapped-text.disabled-test.js similarity index 100% rename from eslint/__disabled_tests__/avoid-unwrapped-text.disabled-test.js rename to lint-rules/__disabled_tests__/avoid-unwrapped-text.disabled-test.js diff --git a/eslint/__disabled_tests__/lingui-msg-rule.disabled-test.js b/lint-rules/__disabled_tests__/lingui-msg-rule.disabled-test.js similarity index 100% rename from eslint/__disabled_tests__/lingui-msg-rule.disabled-test.js rename to lint-rules/__disabled_tests__/lingui-msg-rule.disabled-test.js diff --git a/eslint/__disabled_tests__/note.md b/lint-rules/__disabled_tests__/note.md similarity index 100% rename from eslint/__disabled_tests__/note.md rename to lint-rules/__disabled_tests__/note.md diff --git a/eslint/avoid-unwrapped-text.js b/lint-rules/avoid-unwrapped-text.js similarity index 100% rename from eslint/avoid-unwrapped-text.js rename to lint-rules/avoid-unwrapped-text.js diff --git a/eslint/index.js b/lint-rules/index.js similarity index 85% rename from eslint/index.js rename to lint-rules/index.js index 1df4590245..4af3a9bc73 100644 --- a/eslint/index.js +++ b/lint-rules/index.js @@ -7,7 +7,6 @@ const plugin = { }, rules: { 'avoid-unwrapped-text': require('./avoid-unwrapped-text'), - 'use-exact-imports': require('./use-exact-imports'), 'use-prefixed-imports': require('./use-prefixed-imports'), 'lingui-msg-rule': require('./lingui-msg-rule'), }, diff --git a/eslint/lingui-msg-rule.js b/lint-rules/lingui-msg-rule.js similarity index 100% rename from eslint/lingui-msg-rule.js rename to lint-rules/lingui-msg-rule.js diff --git a/eslint/use-prefixed-imports.js b/lint-rules/use-prefixed-imports.js similarity index 100% rename from eslint/use-prefixed-imports.js rename to lint-rules/use-prefixed-imports.js diff --git a/package.json b/package.json index a7114fba73..75fb7b4d00 100644 --- a/package.json +++ b/package.json @@ -288,9 +288,7 @@ "babel-plugin-module-resolver": "^5.0.2", "babel-plugin-react-compiler": "19.1.0-rc.3", "babel-preset-expo": "~54.0.10", - "eslint-plugin-bsky-internal": "link:eslint", - "eslint-plugin-react-compiler": "19.1.0-rc.2", - "eslint-plugin-react-native": "^5.0.0", + "eslint-plugin-bsky-internal": "link:lint-rules", "eslint-plugin-react-native-a11y": "^3.5.1", "eslint-plugin-simple-import-sort": "^13.0.0", "file-loader": "6.2.0", @@ -303,7 +301,7 @@ "lint-staged": "^17.0.8", "oxlint": "^1.73.0", "oxlint-tsgolint": "^7.0.2001", - "prettier": "^3.8.3", + "prettier": "3.9.6", "react-native-dotenv": "^3.4.11", "react-refresh": "^0.14.0", "svgo": "^4.0.2", @@ -376,7 +374,7 @@ }, "lint-staged": { "*{.js,.jsx,.ts,.tsx}": [ - "oxlint --fix" + "oxlint --fix --no-error-on-unmatched-pattern" ], "*{.js,.jsx,.ts,.tsx,.css}": [ "prettier --cache --write --ignore-unknown" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 6cd00fba0a..1df7fbd2f3 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -215,6 +215,8 @@ overrides: '@types/psl': 1.1.1 react-native-screens: 4.24.0 +packageExtensionsChecksum: sha256-KbeCj471Qk3TA758q8nLPkiGCPDA0TX18iO/Coy89lo= + patchedDependencies: '@sentry/expo-upload-sourcemaps@8.18.0': 2368e1e1986165e7ead3c60017b78b2f9ade1b6a6b2f5ad27cd428608c6f12ae expo-age-range@0.2.18: c325225749993424461eeece1d97a99b19c00da2ebc958a73c12e4eca0c39306 @@ -472,10 +474,10 @@ importers: version: 8.0.10(expo@54.0.35(@babel/core@7.29.0(supports-color@8.1.1))(react-native-webview@13.15.0(react-native@0.81.5(patch_hash=91fd85363059530dea649a5ca6012b933f79c8491737fbfdc685abc727e48403)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.1.17)(react@19.1.0)(supports-color@8.1.1))(react@19.1.0))(react-native@0.81.5(patch_hash=91fd85363059530dea649a5ca6012b933f79c8491737fbfdc685abc727e48403)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.1.17)(react@19.1.0)(supports-color@8.1.1))(react@19.1.0)(supports-color@8.1.1)) expo-file-system: specifier: ~19.0.21 - version: 19.0.22(83f21d12a6c1aa99b4a65d070875cc68) + version: 19.0.23(83f21d12a6c1aa99b4a65d070875cc68) expo-font: specifier: ~14.0.11 - version: 14.0.11(83e0f64f4281e4798012214ad5b2d72d) + version: 14.0.12(83e0f64f4281e4798012214ad5b2d72d) expo-glass-effect: specifier: 0.1.10 version: 0.1.10(83e0f64f4281e4798012214ad5b2d72d) @@ -800,16 +802,10 @@ importers: version: 19.1.0-rc.3 babel-preset-expo: specifier: ~54.0.10 - version: 54.0.10(@babel/core@7.29.0(supports-color@8.1.1))(@babel/runtime@7.29.2)(expo@54.0.35(@babel/core@7.29.0(supports-color@8.1.1))(react-native-webview@13.15.0(react-native@0.81.5(patch_hash=91fd85363059530dea649a5ca6012b933f79c8491737fbfdc685abc727e48403)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.1.17)(react@19.1.0)(supports-color@8.1.1))(react@19.1.0))(react-native@0.81.5(patch_hash=91fd85363059530dea649a5ca6012b933f79c8491737fbfdc685abc727e48403)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.1.17)(react@19.1.0)(supports-color@8.1.1))(react@19.1.0)(supports-color@8.1.1))(react-refresh@0.14.2)(supports-color@8.1.1) + version: 54.0.12(@babel/core@7.29.0(supports-color@8.1.1))(@babel/runtime@7.29.2)(expo@54.0.35(@babel/core@7.29.0(supports-color@8.1.1))(react-native-webview@13.15.0(react-native@0.81.5(patch_hash=91fd85363059530dea649a5ca6012b933f79c8491737fbfdc685abc727e48403)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.1.17)(react@19.1.0)(supports-color@8.1.1))(react@19.1.0))(react-native@0.81.5(patch_hash=91fd85363059530dea649a5ca6012b933f79c8491737fbfdc685abc727e48403)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.1.17)(react@19.1.0)(supports-color@8.1.1))(react@19.1.0)(supports-color@8.1.1))(react-refresh@0.14.2)(supports-color@8.1.1) eslint-plugin-bsky-internal: - specifier: link:eslint - version: link:eslint - eslint-plugin-react-compiler: - specifier: 19.1.0-rc.2 - version: 19.1.0-rc.2(eslint@8.57.1(supports-color@8.1.1))(supports-color@8.1.1) - eslint-plugin-react-native: - specifier: ^5.0.0 - version: 5.0.0(eslint@8.57.1(supports-color@8.1.1)) + specifier: link:lint-rules + version: link:lint-rules eslint-plugin-react-native-a11y: specifier: ^3.5.1 version: 3.5.1(eslint@8.57.1(supports-color@8.1.1)) @@ -842,7 +838,7 @@ importers: version: 17.0.8 node: specifier: runtime:^24.18.0 - version: runtime:24.18.0 + version: runtime:24.19.0 oxlint: specifier: ^1.73.0 version: 1.73.0(oxlint-tsgolint@7.0.2001) @@ -850,8 +846,8 @@ importers: specifier: ^7.0.2001 version: 7.0.2001 prettier: - specifier: ^3.8.3 - version: 3.8.3 + specifier: 3.9.6 + version: 3.9.6 react-native-dotenv: specifier: ^3.4.11 version: 3.4.11(@babel/runtime@7.29.2) @@ -1137,13 +1133,6 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-proposal-private-methods@7.18.6': - resolution: {integrity: sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA==} - engines: {node: '>=6.9.0'} - deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-private-methods instead. - peerDependencies: - '@babel/core': ^7.0.0-0 - '@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2': resolution: {integrity: sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==} engines: {node: '>=6.9.0'} @@ -2030,9 +2019,6 @@ packages: '@expo/image-utils@0.8.12': resolution: {integrity: sha512-3KguH7kyKqq7pNwLb9j6BBdD/bjmNwXZG/HPWT6GWIXbwrvAJt2JNyYTP5agWJ8jbbuys1yuCzmkX+TU6rmI7A==} - '@expo/json-file@10.0.14': - resolution: {integrity: sha512-yWwBFywFv+SxkJp/pIzzA416JVYflNUh7pqQzgaA6nXDqRyK7KfrqVzk8PdUfDnqbBcaZZxpzNssfQZzp5KHrA==} - '@expo/json-file@10.0.16': resolution: {integrity: sha512-fcVkWEj+hLuP2yt5W0aw6LmDRqSPWDLUSxOMcmFeV+algmIF59sQVKCwB9btjQLd4V6x9N0pISkQEkBubUHrCw==} @@ -2063,9 +2049,6 @@ packages: '@expo/plist@0.3.5': resolution: {integrity: sha512-9RYVU1iGyCJ7vWfg3e7c/NVyMFs8wbl+dMWZphtFtsqyN9zppGREU3ctlD3i8KUE0sCUTVnLjCWr+VeUIDep2g==} - '@expo/plist@0.4.8': - resolution: {integrity: sha512-pfNtErGGzzRwHP+5+RqswzPDKkZrx+Cli0mzjQaus1ZWFsog5ibL+nVT3NcporW51o8ggnt7x813vtRbPiyOrQ==} - '@expo/plist@0.4.9': resolution: {integrity: sha512-MPVpmKGfnQEnrCzgxuXcmPP/y/t6AVm+DcSb2Myp21LKWv1N3l8uFxMggesfF4ixAxkRlGmMMx9GyDC9M+XklQ==} @@ -4378,18 +4361,6 @@ packages: peerDependencies: '@babel/core': ^7.0.0 || ^8.0.0-0 - babel-preset-expo@54.0.10: - resolution: {integrity: sha512-wTt7POavLFypLcPW/uC5v8y+mtQKDJiyGLzYCjqr9tx0Qc3vCXcDKk1iCFIj/++Iy5CWhhTflEa7VvVPNWeCfw==} - peerDependencies: - '@babel/runtime': ^7.20.0 - expo: '*' - react-refresh: '>=0.14.0 <1.0.0' - peerDependenciesMeta: - '@babel/runtime': - optional: true - expo: - optional: true - babel-preset-expo@54.0.12: resolution: {integrity: sha512-6xeSkdaixmQhWSYL7tfLu0pOS0BY+8ftwmdNSHtpEFSizrXYZkCjk/B6Dxr+6nwNRihixMcS0aBlWS1wlDl3pw==} peerDependencies: @@ -5276,30 +5247,22 @@ packages: engines: {node: '>=6.0'} hasBin: true - eslint-plugin-react-compiler@19.1.0-rc.2: - resolution: {integrity: sha512-oKalwDGcD+RX9mf3NEO4zOoUMeLvjSvcbbEOpquzmzqEEM2MQdp7/FY/Hx9NzmUwFzH1W9SKTz5fihfMldpEYw==} - engines: {node: ^14.17.0 || ^16.0.0 || >= 18.0.0} - peerDependencies: - eslint: '>=7' - eslint-plugin-react-native-a11y@3.5.1: resolution: {integrity: sha512-vqnXZpAiov0lxYNfEYgwABpkiBYRrt0dbtOafPkw6QaFeA0uZ+s3w9opeEMoFmV36WFxLiCxHb9fvOJ+EUc2xQ==} engines: {node: '>=12.0'} peerDependencies: eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 - - eslint-plugin-react-native-globals@0.1.2: - resolution: {integrity: sha512-9aEPf1JEpiTjcFAmmyw8eiIXmcNZOqaZyHO77wgm0/dWfT/oxC1SrIq8ET38pMxHYrcB6Uew+TzUVsBeczF88g==} - - eslint-plugin-react-native@5.0.0: - resolution: {integrity: sha512-VyWlyCC/7FC/aONibOwLkzmyKg4j9oI8fzrk9WYNs4I8/m436JuOTAFwLvEn1CVvc7La4cPfbCyspP4OYpP52Q==} - peerDependencies: - eslint: ^3.17.0 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9 + peerDependenciesMeta: + eslint: + optional: true eslint-plugin-simple-import-sort@13.0.0: resolution: {integrity: sha512-McAc+/Nlvcg4byY/CABGH8kqnefWBj8s3JA2okEtz8ixbECQgU46p0HkTUKa4YS7wvgGceimlc34p1nXqbWqtA==} peerDependencies: eslint: '>=5.0.0' + peerDependenciesMeta: + eslint: + optional: true eslint-scope@5.1.1: resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==} @@ -5475,25 +5438,12 @@ packages: expo-eas-client@1.0.8: resolution: {integrity: sha512-5or11NJhSeDoHHI6zyvQDW2cz/yFyE+1Cz8NTs5NK8JzC7J0JrkUgptWtxyfB6Xs/21YRNifd3qgbBN3hfKVgA==} - expo-file-system@19.0.22: - resolution: {integrity: sha512-l9pgahSc7sJD0bP9vBNeXvZjy8QKDpVHVxWmei/ESQOrzmoj5BidziqLVsyZdxsi+PfdbTtttLTAmddH/JafYA==} - peerDependencies: - expo: '*' - react-native: '*' - expo-file-system@19.0.23: resolution: {integrity: sha512-MeGkid9OeNILfT/qonaXHp4f2c15xaB28U/bcN7pqZej0Kx0+6+V7e9ZIXpPHm07zVatxA+QkMTPQEGfmvVOxA==} peerDependencies: expo: '*' react-native: '*' - expo-font@14.0.11: - resolution: {integrity: sha512-ga0q61ny4s/kr4k8JX9hVH69exVSIfcIc19+qZ7gt71Mqtm7xy2c6kwsPTCyhBW2Ro5yXTT8EaZOpuRi35rHbg==} - peerDependencies: - expo: '*' - react: '*' - react-native: '*' - expo-font@14.0.12: resolution: {integrity: sha512-QQzunE2Mxk45AsCWm3tK7OpVljbtVnKD58q4/qliev+cbye1IOduUnRIdD+P7DyButw17G9MTX795kgaQiz5hQ==} peerDependencies: @@ -6043,9 +5993,6 @@ packages: resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==} hasBin: true - hermes-estree@0.25.1: - resolution: {integrity: sha512-0wUoCcLp+5Ev5pDW2OriHC2MJCbwLwuRx+gAqMTOkGKJJiBCLjtrvy4PWUGn6MIVefecRpzoOZ/UV6iGdOr+Cw==} - hermes-estree@0.29.1: resolution: {integrity: sha512-jl+x31n4/w+wEqm0I2r4CMimukLbLQEYpisys5oCre611CI5fc9TxhqkBBCJ1edDG4Kza0f7CgNz8xVMLZQOmQ==} @@ -6058,9 +6005,6 @@ packages: hermes-estree@0.36.0: resolution: {integrity: sha512-A1+8zn5oss2CFP7pKsOaxorQG6FNIz1WU1VDqruLPPZl3LVgeE2C5xfFg8Ow6/Ow4mSslLLtYP1J3n38eKyW9w==} - hermes-parser@0.25.1: - resolution: {integrity: sha512-6pEjquH3rqaI6cYAXYPcz9MS4rY6R4ngRgrgfDshRptUZIc3lw0MCIJIGDj9++mfySOuPTHB4nrSW99BCvOPIA==} - hermes-parser@0.29.1: resolution: {integrity: sha512-xBHWmUtRC5e/UL0tI7Ivt2riA/YBq9+SiYFU7C1oBa/j2jYGlIF9043oak1F47ihuDIxQ5nbsKueYJDRY02UgA==} @@ -7305,7 +7249,7 @@ packages: node-releases@2.0.44: resolution: {integrity: sha512-5WUyunoPMsvvEhS8AxHtRzP+oA8UCkJ7YRxatWKjngndhDGLiqEVAQKWjFAiAiuL8zMRGzGSJxFnLetoa43qGQ==} - node@runtime:24.18.0: + node@runtime:24.19.0: resolution: type: variations variants: @@ -7313,9 +7257,9 @@ packages: archive: tarball bin: node: bin/node - integrity: sha256-ZGOiNzn2sjAOvsXM1gJ14TjjhY/Br8bo+bxOT2pLdvo= + integrity: sha256-9ONcExZd5ogMqiVYwKpIyoitpH/iI0vtB9Ztu4CkfI0= type: binary - url: https://nodejs.org/download/release/v24.18.0/node-v24.18.0-aix-ppc64.tar.gz + url: https://nodejs.org/download/release/v24.19.0/node-v24.19.0-aix-ppc64.tar.gz targets: - cpu: ppc64 os: aix @@ -7323,9 +7267,9 @@ packages: archive: tarball bin: node: bin/node - integrity: sha256-4al+FMmcgD6WxzOUAyguoFpJnDL42D3v6e9exm+XntE= + integrity: sha256-gpS3qpsDmXSBwGur8eiycMhZNY8n2lehFQmv5TesOB0= type: binary - url: https://nodejs.org/download/release/v24.18.0/node-v24.18.0-darwin-arm64.tar.gz + url: https://nodejs.org/download/release/v24.19.0/node-v24.19.0-darwin-arm64.tar.gz targets: - cpu: arm64 os: darwin @@ -7333,9 +7277,9 @@ packages: archive: tarball bin: node: bin/node - integrity: sha256-39Db0+chUDQ033tyBecZ9hs6OjGyvPlym4uR/qJA8IA= + integrity: sha256-0bXpmdsVjGL+j3JnpEdrA12L2TsaYFusJKPw3RZuMxY= type: binary - url: https://nodejs.org/download/release/v24.18.0/node-v24.18.0-darwin-x64.tar.gz + url: https://nodejs.org/download/release/v24.19.0/node-v24.19.0-darwin-x64.tar.gz targets: - cpu: x64 os: darwin @@ -7343,9 +7287,9 @@ packages: archive: tarball bin: node: bin/node - integrity: sha256-a0SEwhkCdBdd+aqPKOLXWKgZyxwf5qtIHi+VtGOrhQg= + integrity: sha256-0oyKW/CoCPDtQ0odzoxUrpjwNxwL2GrFirxhP3PmZD8= type: binary - url: https://nodejs.org/download/release/v24.18.0/node-v24.18.0-linux-arm64.tar.gz + url: https://nodejs.org/download/release/v24.19.0/node-v24.19.0-linux-arm64.tar.gz targets: - cpu: arm64 os: linux @@ -7353,9 +7297,9 @@ packages: archive: tarball bin: node: bin/node - integrity: sha256-/hM4ly95KDxrwh5h2/RXa76MBa3tKZnUHIZDrTAmUUI= + integrity: sha256-sxqMTLxYn5FS8y/bQxhGl1nhZViltdk7f/L7KHsBPbI= type: binary - url: https://nodejs.org/download/release/v24.18.0/node-v24.18.0-linux-ppc64le.tar.gz + url: https://nodejs.org/download/release/v24.19.0/node-v24.19.0-linux-ppc64le.tar.gz targets: - cpu: ppc64le os: linux @@ -7363,9 +7307,9 @@ packages: archive: tarball bin: node: bin/node - integrity: sha256-Nx68E5RfwWlJPnUvLdr6+rbs2My0Ubz/RuCfacXdjHo= + integrity: sha256-s6tqQ5KCjbn9TtloOY1VGIKSvMFYGVQtU74LEQDjMvw= type: binary - url: https://nodejs.org/download/release/v24.18.0/node-v24.18.0-linux-s390x.tar.gz + url: https://nodejs.org/download/release/v24.19.0/node-v24.19.0-linux-s390x.tar.gz targets: - cpu: s390x os: linux @@ -7373,9 +7317,9 @@ packages: archive: tarball bin: node: bin/node - integrity: sha256-eDEwmElj23upy9AQierywu+wVcfBaTyUMXS5Z7MFDLg= + integrity: sha256-9iXZfNcH30/5YlSRb7xf8BTwnAnv/loeDKj21BqHidQ= type: binary - url: https://nodejs.org/download/release/v24.18.0/node-v24.18.0-linux-x64.tar.gz + url: https://nodejs.org/download/release/v24.19.0/node-v24.19.0-linux-x64.tar.gz targets: - cpu: x64 os: linux @@ -7383,10 +7327,10 @@ packages: archive: zip bin: node: node.exe - integrity: sha256-8nRmmtuTsf0Pv48h/QeGCencyEMz1PJxjS3eP5oWGgE= - prefix: node-v24.18.0-win-arm64 + integrity: sha256-hQL0pQtFjUzDjtjyABVWws0jnUZJIPdAF5Jsyx4cFX8= + prefix: node-v24.19.0-win-arm64 type: binary - url: https://nodejs.org/download/release/v24.18.0/node-v24.18.0-win-arm64.zip + url: https://nodejs.org/download/release/v24.19.0/node-v24.19.0-win-arm64.zip targets: - cpu: arm64 os: win32 @@ -7394,10 +7338,10 @@ packages: archive: zip bin: node: node.exe - integrity: sha256-CuaEBrQtdyVmHal5sUA+yZJtogXGdwgn8zqsnY8m6CE= - prefix: node-v24.18.0-win-x64 + integrity: sha256-V/cas2UueX2ErN3HnIHMn/HG3bKhl0zbg/AP7pv/THM= + prefix: node-v24.19.0-win-x64 type: binary - url: https://nodejs.org/download/release/v24.18.0/node-v24.18.0-win-x64.zip + url: https://nodejs.org/download/release/v24.19.0/node-v24.19.0-win-x64.zip targets: - cpu: x64 os: win32 @@ -7405,9 +7349,9 @@ packages: archive: tarball bin: node: bin/node - integrity: sha256-scbC3DG0bdj7IyL0/nWwfndcUSC8NyUd7uoo9SnUVns= + integrity: sha256-IIJOTTWUj65bM33M70eBOwTYmVMS9Z33OG8iVtn5q34= type: binary - url: https://unofficial-builds.nodejs.org/download/release/v24.18.0/node-v24.18.0-linux-arm64-musl.tar.gz + url: https://unofficial-builds.nodejs.org/download/release/v24.19.0/node-v24.19.0-linux-arm64-musl.tar.gz targets: - cpu: arm64 os: linux @@ -7416,14 +7360,14 @@ packages: archive: tarball bin: node: bin/node - integrity: sha256-6lhAmRHhQexrGdkXjvotkYWhMpUAWxy/VSGzFX7tHZU= + integrity: sha256-xgIjeG3xSl0j4iDruOYDGPUyJkCmL5Dm2eVNOhjaUy4= type: binary - url: https://unofficial-builds.nodejs.org/download/release/v24.18.0/node-v24.18.0-linux-x64-musl.tar.gz + url: https://unofficial-builds.nodejs.org/download/release/v24.19.0/node-v24.19.0-linux-x64-musl.tar.gz targets: - cpu: x64 os: linux libc: musl - version: 24.18.0 + version: 24.19.0 hasBin: true normalize-path@3.0.0: @@ -7951,11 +7895,6 @@ packages: resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} engines: {node: '>= 0.8.0'} - prettier@3.8.3: - resolution: {integrity: sha512-7igPTM53cGHMW8xWuVTydi2KO233VFiTNyF5hLJqpilHfmn8C8gPf+PS7dUT64YcXFbiMGZxS9pCSxL/Dxm/Jw==} - engines: {node: '>=14'} - hasBin: true - prettier@3.9.6: resolution: {integrity: sha512-OpN0zzVdiaiAhxpuuj5efpIS4sY9j7bY6uR5mnj5yPzGkdkjNKSJeUThPb60Jw29QuAZgA4o+/iB49kFiaBX6g==} engines: {node: '>=14'} @@ -9694,12 +9633,6 @@ packages: resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} engines: {node: '>=10'} - zod-validation-error@3.5.4: - resolution: {integrity: sha512-+hEiRIiPobgyuFlEojnqjJnhFvg4r/i3cqgcm67eehZf/WBaK3g6cD02YU9mtdVxZjv8CzCA9n/Rhrs3yAAvAw==} - engines: {node: '>=18.0.0'} - peerDependencies: - zod: ^3.24.4 - zod@3.25.76: resolution: {integrity: sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==} @@ -10088,14 +10021,6 @@ snapshots: '@babel/core': 7.29.0(supports-color@8.1.1) '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-proposal-private-methods@7.18.6(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1)': - dependencies: - '@babel/core': 7.29.0(supports-color@8.1.1) - '@babel/helper-create-class-features-plugin': 7.29.3(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1) - '@babel/helper-plugin-utils': 7.28.6 - transitivePeerDependencies: - - supports-color - '@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.29.0(supports-color@8.1.1))': dependencies: '@babel/core': 7.29.0(supports-color@8.1.1) @@ -10952,8 +10877,10 @@ snapshots: dependencies: eslint: 8.57.1(supports-color@8.1.1) eslint-visitor-keys: 3.4.3 + optional: true - '@eslint-community/regexpp@4.12.2': {} + '@eslint-community/regexpp@4.12.2': + optional: true '@eslint/eslintrc@2.1.4(supports-color@8.1.1)': dependencies: @@ -10968,8 +10895,10 @@ snapshots: strip-json-comments: 3.1.1 transitivePeerDependencies: - supports-color + optional: true - '@eslint/js@8.57.1': {} + '@eslint/js@8.57.1': + optional: true '@expo/cli@54.0.25(c1408f750868568d2dc75671b50084a7)': dependencies: @@ -11052,8 +10981,8 @@ snapshots: '@expo/config-plugins@54.0.4(supports-color@8.1.1)': dependencies: '@expo/config-types': 54.0.10 - '@expo/json-file': 10.0.14 - '@expo/plist': 0.4.8 + '@expo/json-file': 10.0.16 + '@expo/plist': 0.4.9 '@expo/sdk-runtime-versions': 1.0.0 chalk: 4.1.2 debug: 4.4.3(supports-color@8.1.1) @@ -11096,7 +11025,7 @@ snapshots: '@babel/code-frame': 7.10.4 '@expo/config-plugins': 54.0.4(supports-color@8.1.1) '@expo/config-types': 54.0.10 - '@expo/json-file': 10.0.14 + '@expo/json-file': 10.2.0 deepmerge: 4.3.1 getenv: 2.0.0 glob: 13.0.6 @@ -11161,11 +11090,6 @@ snapshots: resolve-from: 5.0.0 semver: 7.8.0 - '@expo/json-file@10.0.14': - dependencies: - '@babel/code-frame': 7.29.0 - json5: 2.2.3 - '@expo/json-file@10.0.16': dependencies: '@babel/code-frame': 7.10.4 @@ -11238,7 +11162,7 @@ snapshots: '@expo/package-manager@1.10.5': dependencies: - '@expo/json-file': 10.0.14 + '@expo/json-file': 10.2.0 '@expo/spawn-async': 1.7.2 chalk: 4.1.2 npm-package-arg: 11.0.3 @@ -11251,12 +11175,6 @@ snapshots: base64-js: 1.5.1 xmlbuilder: 15.1.1 - '@expo/plist@0.4.8': - dependencies: - '@xmldom/xmldom': 0.8.13 - base64-js: 1.5.1 - xmlbuilder: 15.1.1 - '@expo/plist@0.4.9': dependencies: '@xmldom/xmldom': 0.8.13 @@ -11269,7 +11187,7 @@ snapshots: '@expo/config-plugins': 54.0.4(supports-color@8.1.1) '@expo/config-types': 54.0.10 '@expo/image-utils': 0.8.12 - '@expo/json-file': 10.0.14 + '@expo/json-file': 10.2.0 '@react-native/normalize-colors': 0.81.5 debug: 4.4.3(supports-color@8.1.1) expo: 54.0.35(@babel/core@7.29.0(supports-color@8.1.1))(react-native-webview@13.15.0(react-native@0.81.5(patch_hash=91fd85363059530dea649a5ca6012b933f79c8491737fbfdc685abc727e48403)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.1.17)(react@19.1.0)(supports-color@8.1.1))(react@19.1.0))(react-native@0.81.5(patch_hash=91fd85363059530dea649a5ca6012b933f79c8491737fbfdc685abc727e48403)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.1.17)(react@19.1.0)(supports-color@8.1.1))(react@19.1.0)(supports-color@8.1.1) @@ -11420,10 +11338,13 @@ snapshots: minimatch: 3.1.5 transitivePeerDependencies: - supports-color + optional: true - '@humanwhocodes/module-importer@1.0.1': {} + '@humanwhocodes/module-importer@1.0.1': + optional: true - '@humanwhocodes/object-schema@2.0.3': {} + '@humanwhocodes/object-schema@2.0.3': + optional: true '@ide/backoff@1.0.0': {} @@ -13577,6 +13498,7 @@ snapshots: acorn-jsx@5.3.2(acorn@8.16.0): dependencies: acorn: 8.16.0 + optional: true acorn-walk@8.3.5: dependencies: @@ -13874,38 +13796,6 @@ snapshots: '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.29.0(supports-color@8.1.1)) '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.29.0(supports-color@8.1.1)) - babel-preset-expo@54.0.10(@babel/core@7.29.0(supports-color@8.1.1))(@babel/runtime@7.29.2)(expo@54.0.35(@babel/core@7.29.0(supports-color@8.1.1))(react-native-webview@13.15.0(react-native@0.81.5(patch_hash=91fd85363059530dea649a5ca6012b933f79c8491737fbfdc685abc727e48403)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.1.17)(react@19.1.0)(supports-color@8.1.1))(react@19.1.0))(react-native@0.81.5(patch_hash=91fd85363059530dea649a5ca6012b933f79c8491737fbfdc685abc727e48403)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.1.17)(react@19.1.0)(supports-color@8.1.1))(react@19.1.0)(supports-color@8.1.1))(react-refresh@0.14.2)(supports-color@8.1.1): - dependencies: - '@babel/helper-module-imports': 7.28.6(supports-color@8.1.1) - '@babel/plugin-proposal-decorators': 7.29.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1) - '@babel/plugin-proposal-export-default-from': 7.27.1(@babel/core@7.29.0(supports-color@8.1.1)) - '@babel/plugin-syntax-export-default-from': 7.28.6(@babel/core@7.29.0(supports-color@8.1.1)) - '@babel/plugin-transform-class-static-block': 7.28.6(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1) - '@babel/plugin-transform-export-namespace-from': 7.27.1(@babel/core@7.29.0(supports-color@8.1.1)) - '@babel/plugin-transform-flow-strip-types': 7.27.1(@babel/core@7.29.0(supports-color@8.1.1)) - '@babel/plugin-transform-modules-commonjs': 7.28.6(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1) - '@babel/plugin-transform-object-rest-spread': 7.28.6(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1) - '@babel/plugin-transform-parameters': 7.27.7(@babel/core@7.29.0(supports-color@8.1.1)) - '@babel/plugin-transform-private-methods': 7.28.6(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1) - '@babel/plugin-transform-private-property-in-object': 7.28.6(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1) - '@babel/plugin-transform-runtime': 7.29.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1) - '@babel/preset-react': 7.28.5(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1) - '@babel/preset-typescript': 7.28.5(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1) - '@react-native/babel-preset': 0.81.5(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1) - babel-plugin-react-compiler: 1.0.0 - babel-plugin-react-native-web: 0.21.2 - babel-plugin-syntax-hermes-parser: 0.29.1 - babel-plugin-transform-flow-enums: 0.0.2(@babel/core@7.29.0(supports-color@8.1.1)) - debug: 4.4.3(supports-color@8.1.1) - react-refresh: 0.14.2 - resolve-from: 5.0.0 - optionalDependencies: - '@babel/runtime': 7.29.2 - expo: 54.0.35(@babel/core@7.29.0(supports-color@8.1.1))(react-native-webview@13.15.0(react-native@0.81.5(patch_hash=91fd85363059530dea649a5ca6012b933f79c8491737fbfdc685abc727e48403)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.1.17)(react@19.1.0)(supports-color@8.1.1))(react@19.1.0))(react-native@0.81.5(patch_hash=91fd85363059530dea649a5ca6012b933f79c8491737fbfdc685abc727e48403)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.1.17)(react@19.1.0)(supports-color@8.1.1))(react@19.1.0)(supports-color@8.1.1) - transitivePeerDependencies: - - '@babel/core' - - supports-color - babel-preset-expo@54.0.12(@babel/core@7.29.0(supports-color@8.1.1))(@babel/runtime@7.29.2)(expo@54.0.35(@babel/core@7.29.0(supports-color@8.1.1))(react-native-webview@13.15.0(react-native@0.81.5(patch_hash=91fd85363059530dea649a5ca6012b933f79c8491737fbfdc685abc727e48403)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.1.17)(react@19.1.0)(supports-color@8.1.1))(react@19.1.0))(react-native@0.81.5(patch_hash=91fd85363059530dea649a5ca6012b933f79c8491737fbfdc685abc727e48403)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.1.17)(react@19.1.0)(supports-color@8.1.1))(react@19.1.0)(supports-color@8.1.1))(react-refresh@0.14.2)(supports-color@8.1.1): dependencies: '@babel/helper-module-imports': 7.28.6(supports-color@8.1.1) @@ -14580,7 +14470,8 @@ snapshots: deep-extend@0.6.0: {} - deep-is@0.1.4: {} + deep-is@0.1.4: + optional: true deepmerge@4.3.1: {} @@ -14649,6 +14540,7 @@ snapshots: doctrine@3.0.0: dependencies: esutils: 2.0.3 + optional: true dom-converter@0.2.0: dependencies: @@ -14893,34 +14785,16 @@ snapshots: optionalDependencies: source-map: 0.6.1 - eslint-plugin-react-compiler@19.1.0-rc.2(eslint@8.57.1(supports-color@8.1.1))(supports-color@8.1.1): - dependencies: - '@babel/core': 7.29.0(supports-color@8.1.1) - '@babel/parser': 7.29.3 - '@babel/plugin-proposal-private-methods': 7.18.6(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1) - eslint: 8.57.1(supports-color@8.1.1) - hermes-parser: 0.25.1 - zod: 3.25.76 - zod-validation-error: 3.5.4(zod@3.25.76) - transitivePeerDependencies: - - supports-color - eslint-plugin-react-native-a11y@3.5.1(eslint@8.57.1(supports-color@8.1.1)): dependencies: '@babel/runtime': 7.29.2 ast-types-flow: 0.0.7 - eslint: 8.57.1(supports-color@8.1.1) jsx-ast-utils: 3.3.5 - - eslint-plugin-react-native-globals@0.1.2: {} - - eslint-plugin-react-native@5.0.0(eslint@8.57.1(supports-color@8.1.1)): - dependencies: + optionalDependencies: eslint: 8.57.1(supports-color@8.1.1) - eslint-plugin-react-native-globals: 0.1.2 eslint-plugin-simple-import-sort@13.0.0(eslint@8.57.1(supports-color@8.1.1)): - dependencies: + optionalDependencies: eslint: 8.57.1(supports-color@8.1.1) eslint-scope@5.1.1: @@ -14932,8 +14806,10 @@ snapshots: dependencies: esrecurse: 4.3.0 estraverse: 5.3.0 + optional: true - eslint-visitor-keys@3.4.3: {} + eslint-visitor-keys@3.4.3: + optional: true eslint@8.57.1(supports-color@8.1.1): dependencies: @@ -14977,6 +14853,7 @@ snapshots: text-table: 0.2.0 transitivePeerDependencies: - supports-color + optional: true esm@3.2.25: optional: true @@ -14986,12 +14863,14 @@ snapshots: acorn: 8.16.0 acorn-jsx: 5.3.2(acorn@8.16.0) eslint-visitor-keys: 3.4.3 + optional: true esprima@4.0.1: {} esquery@1.7.0: dependencies: estraverse: 5.3.0 + optional: true esrecurse@4.3.0: dependencies: @@ -15141,23 +15020,11 @@ snapshots: expo-eas-client@1.0.8: {} - expo-file-system@19.0.22(83f21d12a6c1aa99b4a65d070875cc68): - dependencies: - expo: 54.0.35(@babel/core@7.29.0(supports-color@8.1.1))(react-native-webview@13.15.0(react-native@0.81.5(patch_hash=91fd85363059530dea649a5ca6012b933f79c8491737fbfdc685abc727e48403)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.1.17)(react@19.1.0)(supports-color@8.1.1))(react@19.1.0))(react-native@0.81.5(patch_hash=91fd85363059530dea649a5ca6012b933f79c8491737fbfdc685abc727e48403)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.1.17)(react@19.1.0)(supports-color@8.1.1))(react@19.1.0)(supports-color@8.1.1) - react-native: 0.81.5(patch_hash=91fd85363059530dea649a5ca6012b933f79c8491737fbfdc685abc727e48403)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.1.17)(react@19.1.0)(supports-color@8.1.1) - expo-file-system@19.0.23(83f21d12a6c1aa99b4a65d070875cc68): dependencies: expo: 54.0.35(@babel/core@7.29.0(supports-color@8.1.1))(react-native-webview@13.15.0(react-native@0.81.5(patch_hash=91fd85363059530dea649a5ca6012b933f79c8491737fbfdc685abc727e48403)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.1.17)(react@19.1.0)(supports-color@8.1.1))(react@19.1.0))(react-native@0.81.5(patch_hash=91fd85363059530dea649a5ca6012b933f79c8491737fbfdc685abc727e48403)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.1.17)(react@19.1.0)(supports-color@8.1.1))(react@19.1.0)(supports-color@8.1.1) react-native: 0.81.5(patch_hash=91fd85363059530dea649a5ca6012b933f79c8491737fbfdc685abc727e48403)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.1.17)(react@19.1.0)(supports-color@8.1.1) - expo-font@14.0.11(83e0f64f4281e4798012214ad5b2d72d): - dependencies: - expo: 54.0.35(@babel/core@7.29.0(supports-color@8.1.1))(react-native-webview@13.15.0(react-native@0.81.5(patch_hash=91fd85363059530dea649a5ca6012b933f79c8491737fbfdc685abc727e48403)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.1.17)(react@19.1.0)(supports-color@8.1.1))(react@19.1.0))(react-native@0.81.5(patch_hash=91fd85363059530dea649a5ca6012b933f79c8491737fbfdc685abc727e48403)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.1.17)(react@19.1.0)(supports-color@8.1.1))(react@19.1.0)(supports-color@8.1.1) - fontfaceobserver: 2.3.0 - react: 19.1.0 - react-native: 0.81.5(patch_hash=91fd85363059530dea649a5ca6012b933f79c8491737fbfdc685abc727e48403)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.1.17)(react@19.1.0)(supports-color@8.1.1) - expo-font@14.0.12(83e0f64f4281e4798012214ad5b2d72d): dependencies: expo: 54.0.35(@babel/core@7.29.0(supports-color@8.1.1))(react-native-webview@13.15.0(react-native@0.81.5(patch_hash=91fd85363059530dea649a5ca6012b933f79c8491737fbfdc685abc727e48403)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.1.17)(react@19.1.0)(supports-color@8.1.1))(react@19.1.0))(react-native@0.81.5(patch_hash=91fd85363059530dea649a5ca6012b933f79c8491737fbfdc685abc727e48403)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.1.17)(react@19.1.0)(supports-color@8.1.1))(react@19.1.0)(supports-color@8.1.1) @@ -15338,7 +15205,7 @@ snapshots: expo-updates@29.0.17(patch_hash=04f28cb005b770e9ae8f0065eab96e43cbb1e58107f5f6ad1bdd18f6deb66487)(93a6abd34ab5ae64aff6a80525489f34): dependencies: '@expo/code-signing-certificates': 0.0.6 - '@expo/plist': 0.4.8 + '@expo/plist': 0.4.9 '@expo/spawn-async': 1.7.2 arg: 4.1.0 chalk: 4.1.2 @@ -15466,7 +15333,8 @@ snapshots: json-schema-ref-resolver: 3.0.0 rfdc: 1.4.1 - fast-levenshtein@2.0.6: {} + fast-levenshtein@2.0.6: + optional: true fast-text-encoding@1.0.6: {} @@ -15505,6 +15373,7 @@ snapshots: file-entry-cache@6.0.1: dependencies: flat-cache: 3.2.0 + optional: true file-loader@6.2.0(webpack@5.106.2(clean-css@5.3.3)(cssnano@5.1.15(postcss@8.5.14))(csso@5.0.5)(esbuild@0.25.12)(html-minifier-terser@6.1.0)(lightningcss@1.32.0)(postcss@8.5.14)): dependencies: @@ -15575,8 +15444,10 @@ snapshots: flatted: 3.4.4 keyv: 4.5.4 rimraf: 3.0.2 + optional: true - flatted@3.4.4: {} + flatted@3.4.4: + optional: true flow-enums-runtime@0.0.6: {} @@ -15732,6 +15603,7 @@ snapshots: globals@13.24.0: dependencies: type-fest: 0.20.2 + optional: true globals@17.6.0: {} @@ -15761,7 +15633,8 @@ snapshots: graceful-fs@4.2.11: {} - graphemer@1.4.0: {} + graphemer@1.4.0: + optional: true gzip-size@6.0.0: dependencies: @@ -15795,8 +15668,6 @@ snapshots: he@1.2.0: {} - hermes-estree@0.25.1: {} - hermes-estree@0.29.1: {} hermes-estree@0.32.0: {} @@ -15805,10 +15676,6 @@ snapshots: hermes-estree@0.36.0: {} - hermes-parser@0.25.1: - dependencies: - hermes-estree: 0.25.1 - hermes-parser@0.29.1: dependencies: hermes-estree: 0.29.1 @@ -16137,7 +16004,8 @@ snapshots: dependencies: path-is-inside: 1.0.2 - is-path-inside@3.0.3: {} + is-path-inside@3.0.3: + optional: true is-plain-obj@2.1.0: {} @@ -16385,7 +16253,7 @@ snapshots: jest-expo@54.0.17(ff9d3150c2730c411fa3a2f331cc40ee): dependencies: '@expo/config': 12.0.13(supports-color@8.1.1) - '@expo/json-file': 10.0.14 + '@expo/json-file': 10.2.0 '@jest/create-cache-key-function': 29.7.0 '@jest/globals': 29.7.0(supports-color@8.1.1) babel-jest: 29.7.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1) @@ -16731,7 +16599,8 @@ snapshots: jsesc@3.1.0: {} - json-buffer@3.0.1: {} + json-buffer@3.0.1: + optional: true json-parse-even-better-errors@2.3.1: {} @@ -16743,7 +16612,8 @@ snapshots: json-schema-traverse@1.0.0: {} - json-stable-stringify-without-jsonify@1.0.1: {} + json-stable-stringify-without-jsonify@1.0.1: + optional: true json5@2.2.3: {} @@ -16765,6 +16635,7 @@ snapshots: keyv@4.5.4: dependencies: json-buffer: 3.0.1 + optional: true kleur@3.0.3: {} @@ -16785,6 +16656,7 @@ snapshots: dependencies: prelude-ls: 1.2.1 type-check: 0.4.0 + optional: true libphonenumber-js@1.13.1: {} @@ -16896,7 +16768,8 @@ snapshots: lodash.memoize@4.1.2: {} - lodash.merge@4.6.2: {} + lodash.merge@4.6.2: + optional: true lodash.shuffle@4.2.0: {} @@ -17480,7 +17353,7 @@ snapshots: node-releases@2.0.44: {} - node@runtime:24.18.0: {} + node@runtime:24.19.0: {} normalize-path@3.0.0: {} @@ -17595,6 +17468,7 @@ snapshots: prelude-ls: 1.2.1 type-check: 0.4.0 word-wrap: 1.2.5 + optional: true ora@3.4.0: dependencies: @@ -18002,9 +17876,8 @@ snapshots: picocolors: 1.1.1 source-map-js: 1.2.1 - prelude-ls@1.2.1: {} - - prettier@3.8.3: {} + prelude-ls@1.2.1: + optional: true prettier@3.9.6: {} @@ -19320,7 +19193,8 @@ snapshots: dependencies: utrie: 1.0.2 - text-table@0.2.0: {} + text-table@0.2.0: + optional: true thenify-all@1.6.0: dependencies: @@ -19412,10 +19286,12 @@ snapshots: type-check@0.4.0: dependencies: prelude-ls: 1.2.1 + optional: true type-detect@4.0.8: {} - type-fest@0.20.2: {} + type-fest@0.20.2: + optional: true type-fest@0.21.3: {} @@ -19868,7 +19744,8 @@ snapshots: wonka@6.3.6: {} - word-wrap@1.2.5: {} + word-wrap@1.2.5: + optional: true wrap-ansi@10.0.0: dependencies: @@ -19998,8 +19875,4 @@ snapshots: yocto-queue@0.1.0: {} - zod-validation-error@3.5.4(zod@3.25.76): - dependencies: - zod: 3.25.76 - zod@3.25.76: {} diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 06aef9e617..a68437184d 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -1,6 +1,15 @@ nodeLinker: 'hoisted' autoInstallPeers: true # default: true strictPeerDependencies: false # default: false +packageExtensions: + eslint-plugin-react-native-a11y: + peerDependenciesMeta: + eslint: + optional: true + eslint-plugin-simple-import-sort: + peerDependenciesMeta: + eslint: + optional: true trustPolicy: 'no-downgrade' # default: off trustPolicyIgnoreAfter: 10080 # 7 days, default: undefined overrides: diff --git a/src/ageAssurance/data.tsx b/src/ageAssurance/data.tsx index e5cedf81ae..807e195a4d 100644 --- a/src/ageAssurance/data.tsx +++ b/src/ageAssurance/data.tsx @@ -99,8 +99,7 @@ export async function getConfig() { return await getPublicAppviewClient().call(app.bsky.ageassurance.getConfig) } export function getConfigFromCache(): - | app.bsky.ageassurance.getConfig.$OutputBody - | undefined { + app.bsky.ageassurance.getConfig.$OutputBody | undefined { return qc.getQueryData( configQueryKey, ) diff --git a/src/ageAssurance/debug.ts b/src/ageAssurance/debug.ts index b640c4a2de..4b8041a9de 100644 --- a/src/ageAssurance/debug.ts +++ b/src/ageAssurance/debug.ts @@ -29,8 +29,7 @@ export const otherRequiredData: OtherRequiredData = { const serverStateEnabled = false || IS_E2E export const serverState: - | app.bsky.ageassurance.getState.$OutputBody - | undefined = serverStateEnabled + app.bsky.ageassurance.getState.$OutputBody | undefined = serverStateEnabled ? { state: { lastInitiatedAt: undefined, // new Date(2025, 1, 1).toISOString(), diff --git a/src/analytics/metrics/types.ts b/src/analytics/metrics/types.ts index 99daeec162..6e30c9d912 100644 --- a/src/analytics/metrics/types.ts +++ b/src/analytics/metrics/types.ts @@ -276,12 +276,7 @@ export type Events = { } 'composer:open': { logContext: - | 'Fab' - | 'PostReply' - | 'QuotePost' - | 'ProfileFeed' - | 'Deeplink' - | 'Other' + 'Fab' | 'PostReply' | 'QuotePost' | 'ProfileFeed' | 'Deeplink' | 'Other' isReply: boolean hasQuote: boolean hasDraft: boolean @@ -596,10 +591,7 @@ export type Events = { } 'chat:create': { logContext: - | 'ProfileHeader' - | 'NewChatDialog' - | 'SendViaChatDialog' - | 'ConvoSettings' + 'ProfileHeader' | 'NewChatDialog' | 'SendViaChatDialog' | 'ConvoSettings' } 'chat:open': { logContext: @@ -1340,10 +1332,7 @@ export type Events = { // invite friends dialog opened, with the surface that triggered it 'invite:dialog:open': { logContext: - | 'ProfileHeader' - | 'Drawer' - | 'FindContactsSettings' - | 'NuxAnnouncement' + 'ProfileHeader' | 'Drawer' | 'FindContactsSettings' | 'NuxAnnouncement' } // user copied the invite link to clipboard 'invite:action:copy': {} diff --git a/src/components/Autocomplete/types.ts b/src/components/Autocomplete/types.ts index 6f2610d177..ddfc9c12ce 100644 --- a/src/components/Autocomplete/types.ts +++ b/src/components/Autocomplete/types.ts @@ -31,10 +31,7 @@ export type AutocompleteSearch = { } export type AutocompleteItem = - | AutocompleteProfile - | AutocompleteTag - | AutocompleteEmoji - | AutocompleteSearch + AutocompleteProfile | AutocompleteTag | AutocompleteEmoji | AutocompleteSearch export type AutocompleteItemType = AutocompleteItem['type'] diff --git a/src/components/Button.tsx b/src/components/Button.tsx index 2d02bb832f..54332fbc07 100644 --- a/src/components/Button.tsx +++ b/src/components/Button.tsx @@ -86,8 +86,7 @@ export type ButtonState = { export type ButtonContext = VariantProps & ButtonState type NonTextElements = - | React.ReactElement - | Iterable + React.ReactElement | Iterable export type ButtonProps = Pick< PressableProps, diff --git a/src/components/dialogs/EmailDialog/data/useManageEmail2FA.ts b/src/components/dialogs/EmailDialog/data/useManageEmail2FA.ts index d00e487474..9f811b4818 100644 --- a/src/components/dialogs/EmailDialog/data/useManageEmail2FA.ts +++ b/src/components/dialogs/EmailDialog/data/useManageEmail2FA.ts @@ -13,8 +13,7 @@ export function useManageEmail2FA() { enabled, token, }: - | {enabled: true; token?: undefined} - | {enabled: false; token: string}) => { + {enabled: true; token?: undefined} | {enabled: false; token: string}) => { if (!currentAccount?.email) { throw new Error('No email found for the current account') } diff --git a/src/components/dialogs/SearchablePeopleList.tsx b/src/components/dialogs/SearchablePeopleList.tsx index d368d25558..fdbdf0b7e3 100644 --- a/src/components/dialogs/SearchablePeopleList.tsx +++ b/src/components/dialogs/SearchablePeopleList.tsx @@ -66,11 +66,7 @@ type ErrorItem = { } type Item = - | ProfileItem - | ExistingChatItem - | EmptyItem - | PlaceholderItem - | ErrorItem + ProfileItem | ExistingChatItem | EmptyItem | PlaceholderItem | ErrorItem export function SearchablePeopleList({ title, diff --git a/src/components/dms/replyPreview.ts b/src/components/dms/replyPreview.ts index e33dd75bae..91a736f269 100644 --- a/src/components/dms/replyPreview.ts +++ b/src/components/dms/replyPreview.ts @@ -11,9 +11,7 @@ import * as bsky from '#/types/bsky' * record (post/feed/list/etc.) so the caller can render a translated label. */ type ReplyEmbedSummary = - | {type: 'external'; uri: string} - | {type: 'post'} - | {type: 'unknown'} + {type: 'external'; uri: string} | {type: 'post'} | {type: 'unknown'} function summarizeReplyEmbed( embed: chat.bsky.convo.defs.MessageView['embed'], diff --git a/src/components/dms/util.ts b/src/components/dms/util.ts index f44398f6f0..2618a84db8 100644 --- a/src/components/dms/util.ts +++ b/src/components/dms/util.ts @@ -62,9 +62,7 @@ export function resolveAllowGroupInvites( chat: {allowIncoming?: string; allowGroupInvites?: string} | undefined, ): 'all' | 'none' | 'following' { return (chat?.allowGroupInvites ?? chat?.allowIncoming ?? 'following') as - | 'all' - | 'none' - | 'following' + 'all' | 'none' | 'following' } export function localDateString(date: Date) { diff --git a/src/env/common.ts b/src/env/common.ts index 0490859898..bd56d6cc53 100644 --- a/src/env/common.ts +++ b/src/env/common.ts @@ -14,11 +14,7 @@ export const RELEASE_VERSION: string = * The env the app is running in e.g. development, testflight, production, e2e */ export const ENV: string = process.env.EXPO_PUBLIC_ENV as - | 'production' - | 'testflight' - | 'development' - | 'e2e' - | (string & {}) + 'production' | 'testflight' | 'development' | 'e2e' | (string & {}) /** * Indicates whether the app is running in TestFlight @@ -62,10 +58,7 @@ export const BUNDLE_DATE: number = * The log level for the app. */ export const LOG_LEVEL = (process.env.EXPO_PUBLIC_LOG_LEVEL || 'info') as - | 'debug' - | 'info' - | 'warn' - | 'error' + 'debug' | 'info' | 'warn' | 'error' /** * Enable debug logs for specific logger instances diff --git a/src/features/inviteFriends/themes.ts b/src/features/inviteFriends/themes.ts index 7cb64131e1..9834adfc1b 100644 --- a/src/features/inviteFriends/themes.ts +++ b/src/features/inviteFriends/themes.ts @@ -6,12 +6,7 @@ * follows handleColor. */ export type InviteThemeKey = - | 'dawn' - | 'sunlight' - | 'day' - | 'dusk' - | 'twilight' - | 'night' + 'dawn' | 'sunlight' | 'day' | 'dusk' | 'twilight' | 'night' export type InviteThemeVariant = { /** QR data + eye color */ diff --git a/src/features/liveEvents/types.ts b/src/features/liveEvents/types.ts index 8bc88c448c..95a9179d20 100644 --- a/src/features/liveEvents/types.ts +++ b/src/features/liveEvents/types.ts @@ -21,7 +21,4 @@ export type LiveEventsWorkerResponse = { } export type LiveEventFeedMetricContext = - | 'explore' - | 'discover' - | 'sidebar' - | 'settings' + 'explore' | 'discover' | 'sidebar' | 'settings' diff --git a/src/lib/ThemeContext.tsx b/src/lib/ThemeContext.tsx index 19abb9a7f8..97cd8c2a21 100644 --- a/src/lib/ThemeContext.tsx +++ b/src/lib/ThemeContext.tsx @@ -8,11 +8,7 @@ import {darkTheme, defaultTheme, dimTheme} from './themes' export type ColorScheme = 'light' | 'dark' export type PaletteColorName = - | 'default' - | 'primary' - | 'secondary' - | 'inverted' - | 'error' + 'default' | 'primary' | 'secondary' | 'inverted' | 'error' export type PaletteColor = { background: string backgroundLight: string diff --git a/src/lib/hooks/useOTAUpdates.ts b/src/lib/hooks/useOTAUpdates.ts index 180102c2cd..143eb5c619 100644 --- a/src/lib/hooks/useOTAUpdates.ts +++ b/src/lib/hooks/useOTAUpdates.ts @@ -60,8 +60,7 @@ function getRunningChannel( * entirely from embedded manifests, so narrow it ourselves. */ const manifest = currentlyRunning?.manifest as - | {metadata?: {channel?: unknown}} - | undefined + {metadata?: {channel?: unknown}} | undefined const channel = manifest?.metadata?.channel if (typeof channel === 'string' && channel) { return channel diff --git a/src/lib/media/video/multipart/types.ts b/src/lib/media/video/multipart/types.ts index a0cfd216e3..68901d565b 100644 --- a/src/lib/media/video/multipart/types.ts +++ b/src/lib/media/video/multipart/types.ts @@ -44,12 +44,7 @@ export type StartUploadResponse = { } export type UploadState = - | 'created' - | 'finishing' - | 'completed' - | 'failed' - | 'aborted' - | 'expired' + 'created' | 'finishing' | 'completed' | 'failed' | 'aborted' | 'expired' export type UploadStatusResponse = { jobId: string diff --git a/src/lib/media/video/types.ts b/src/lib/media/video/types.ts index 6431c567fa..f929c06664 100644 --- a/src/lib/media/video/types.ts +++ b/src/lib/media/video/types.ts @@ -3,10 +3,7 @@ // on the `video:upload:compressSkipped` analytics event, so the two stay in // sync. export type VideoCompressSkipReason = - | 'gif' - | 'below-byte-threshold' - | 'no-webcodecs' - | 'compress-error-fallback' + 'gif' | 'below-byte-threshold' | 'no-webcodecs' | 'compress-error-fallback' export type VideoUploadTransport = 'multipart' | 'legacy' | 'legacy-fallback' diff --git a/src/lib/routes/tab-to-nav-item.ts b/src/lib/routes/tab-to-nav-item.ts index 38d58b25a4..49471a1e84 100644 --- a/src/lib/routes/tab-to-nav-item.ts +++ b/src/lib/routes/tab-to-nav-item.ts @@ -1,11 +1,7 @@ import {type Events} from '#/analytics/metrics/types' export type SharedNavTab = - | 'Home' - | 'Search' - | 'Messages' - | 'Notifications' - | 'MyProfile' + 'Home' | 'Search' | 'Messages' | 'Notifications' | 'MyProfile' export const TAB_TO_NAV_ITEM: Record< SharedNavTab, diff --git a/src/lib/routes/types.ts b/src/lib/routes/types.ts index a038af0225..16a7c64c65 100644 --- a/src/lib/routes/types.ts +++ b/src/lib/routes/types.ts @@ -169,8 +169,7 @@ export type AllNavigatorParams = CommonNavigatorParams & { export type NavigationProp = NativeStackNavigationProp export type State = - | NavigationState - | Omit, 'stale'> + NavigationState | Omit, 'stale'> export type RouteParams = Record export type MatchResult = {params: RouteParams} diff --git a/src/screens/Messages/ConversationSettings/index.tsx b/src/screens/Messages/ConversationSettings/index.tsx index ed5d74b198..2ddea16b4c 100644 --- a/src/screens/Messages/ConversationSettings/index.tsx +++ b/src/screens/Messages/ConversationSettings/index.tsx @@ -238,14 +238,12 @@ function GroupSettings({ : []), ] items.push( - ...groupMembers.map( - (profile): Item => ({ - type: 'CHAT_MEMBER', - key: profile.did, - profile, - status: primaryMember?.did === profile.did ? 'owner' : 'standard', - }), - ), + ...groupMembers.map((profile): Item => ({ + type: 'CHAT_MEMBER', + key: profile.did, + profile, + status: primaryMember?.did === profile.did ? 'owner' : 'standard', + })), ) const placeholderCount = Math.max( 0, diff --git a/src/screens/Messages/components/MessageInputEmbed.tsx b/src/screens/Messages/components/MessageInputEmbed.tsx index 0883dfa85e..d5bcd4043c 100644 --- a/src/screens/Messages/components/MessageInputEmbed.tsx +++ b/src/screens/Messages/components/MessageInputEmbed.tsx @@ -40,8 +40,7 @@ import * as bsky from '#/types/bsky' * embed: either a quoted post or a group chat invite link. */ export type MessageEmbedState = - | {type: 'post'; uri: string} - | {type: 'invite'; code: string} + {type: 'post'; uri: string} | {type: 'invite'; code: string} export function useMessageEmbed() { const route = diff --git a/src/screens/Messages/components/groupSystemMessages.ts b/src/screens/Messages/components/groupSystemMessages.ts index 5a6de8fb92..fa71f7d741 100644 --- a/src/screens/Messages/components/groupSystemMessages.ts +++ b/src/screens/Messages/components/groupSystemMessages.ts @@ -16,9 +16,7 @@ export type SystemMessageDateDividerItem = { } export type RenderItem = - | ConvoItem - | SystemMessageGroupItem - | SystemMessageDateDividerItem + ConvoItem | SystemMessageGroupItem | SystemMessageDateDividerItem function getSentAt(item: ConvoItem): string | null { if ( diff --git a/src/screens/Profile/components/GermButton.tsx b/src/screens/Profile/components/GermButton.tsx index 59d3d5d6bb..a3b561ae20 100644 --- a/src/screens/Profile/components/GermButton.tsx +++ b/src/screens/Profile/components/GermButton.tsx @@ -38,9 +38,9 @@ export function GermButton({ const linkWarningControl = Dialog.useDialogControl() // exclude `none` and all unknown values - if ( - !(germ.showButtonTo === 'everyone' || germ.showButtonTo === 'usersIFollow') - ) { + if (!( + germ.showButtonTo === 'everyone' || germ.showButtonTo === 'usersIFollow' + )) { return null } diff --git a/src/screens/Signup/state.ts b/src/screens/Signup/state.ts index c2d8684d42..4c1d9cf017 100644 --- a/src/screens/Signup/state.ts +++ b/src/screens/Signup/state.ts @@ -31,11 +31,7 @@ type SubmitTask = { } type ErrorField = - | 'invite-code' - | 'email' - | 'handle' - | 'password' - | 'date-of-birth' + 'invite-code' | 'email' | 'handle' | 'password' | 'date-of-birth' export type SignupState = { analytics?: AnalyticsContextType diff --git a/src/state/cache/post-shadow.ts b/src/state/cache/post-shadow.ts index 72d9571486..6b88bbed35 100644 --- a/src/state/cache/post-shadow.ts +++ b/src/state/cache/post-shadow.ts @@ -25,9 +25,7 @@ export interface PostShadow { repostUri: AtUriString | 'pending' | undefined isDeleted: boolean embed: - | app.bsky.embed.record.View - | app.bsky.embed.recordWithMedia.View - | undefined + app.bsky.embed.record.View | app.bsky.embed.recordWithMedia.View | undefined pinned: boolean optimisticReplyCount: number | undefined bookmarked: boolean | undefined diff --git a/src/state/cache/profile-shadow.ts b/src/state/cache/profile-shadow.ts index ca516024d7..f18ec8dedb 100644 --- a/src/state/cache/profile-shadow.ts +++ b/src/state/cache/profile-shadow.ts @@ -47,8 +47,7 @@ export interface ProfileShadow { verification: app.bsky.actor.defs.VerificationState status: app.bsky.actor.defs.StatusView | undefined activitySubscription: - | app.bsky.notification.defs.ActivitySubscription - | undefined + app.bsky.notification.defs.ActivitySubscription | undefined } const shadows: WeakMap< diff --git a/src/state/gallery.ts b/src/state/gallery.ts index 09bc299f07..fbb5edd4c2 100644 --- a/src/state/gallery.ts +++ b/src/state/gallery.ts @@ -52,8 +52,7 @@ type ComposerImageWithTransformation = ComposerImageBase & { } export type ComposerImage = - | ComposerImageWithoutTransformation - | ComposerImageWithTransformation + ComposerImageWithoutTransformation | ComposerImageWithTransformation let _imageCacheDirectory: string diff --git a/src/state/messages/convo/agent.ts b/src/state/messages/convo/agent.ts index 83ca5ecf64..fa2c7fab9b 100644 --- a/src/state/messages/convo/agent.ts +++ b/src/state/messages/convo/agent.ts @@ -709,8 +709,7 @@ export class Convo { } private pendingFetchConvo: - | Promise<{convo: chat.bsky.convo.defs.ConvoView}> - | undefined + Promise<{convo: chat.bsky.convo.defs.ConvoView}> | undefined async fetchConvo() { if (this.pendingFetchConvo) return this.pendingFetchConvo diff --git a/src/state/messages/convo/index.tsx b/src/state/messages/convo/index.tsx index 58a465dc13..63590460ed 100644 --- a/src/state/messages/convo/index.tsx +++ b/src/state/messages/convo/index.tsx @@ -153,8 +153,7 @@ export function ConvoProvider({ const queryKey = event.query.queryKey as string[] if (queryKey[0] === root && queryKey[1] === id) { const data = event.query.state.data as - | chat.bsky.convo.defs.ConvoView - | undefined + chat.bsky.convo.defs.ConvoView | undefined if (data && convo.convo && data.muted !== convo.convo.view.muted) { convo.updateMuted(data.muted) } diff --git a/src/state/queries/join-links.ts b/src/state/queries/join-links.ts index 91ae82fb6c..dee7f4d379 100644 --- a/src/state/queries/join-links.ts +++ b/src/state/queries/join-links.ts @@ -142,8 +142,7 @@ export function invalidateJoinLinkPreviewsForConvo( const [root] = query.queryKey if (root !== joinLinkPreviewQueryKeyRoot) return false const data = query.state.data as - | chat.bsky.group.getJoinLinkPreviews.$OutputBody - | undefined + chat.bsky.group.getJoinLinkPreviews.$OutputBody | undefined return ( data?.joinLinkPreviews.some( preview => diff --git a/src/state/queries/messages/list-conversations.tsx b/src/state/queries/messages/list-conversations.tsx index 82e9a37c09..71fe202053 100644 --- a/src/state/queries/messages/list-conversations.tsx +++ b/src/state/queries/messages/list-conversations.tsx @@ -38,10 +38,7 @@ export const RQKEY = ( readState: 'all' | 'unread' = 'all', kind: 'all' | 'group' | 'direct' = 'all', lockStatus: - | 'unlocked' - | 'locked' - | 'locked-permanently' - | undefined = undefined, + 'unlocked' | 'locked' | 'locked-permanently' | undefined = undefined, limit?: number, ) => [RQKEY_ROOT, status, readState, kind, lockStatus, limit] as const @@ -255,9 +252,9 @@ export function ListConvosProviderInner({ // memberCount bump to avoid double-counting. const alreadyKnownMember = queryClient - .getQueryData< - chat.bsky.actor.defs.ProfileViewBasic[] - >(listConvoMembersQueryKey(convoId)) + .getQueryData( + listConvoMembersQueryKey(convoId), + ) ?.some(m => m.did === did) ?? false mutateMembers(convoId, list => list.some(m => m.did === did) ? list : list.concat(newMember), @@ -279,9 +276,9 @@ export function ListConvosProviderInner({ // list, skip the memberCount decrement to avoid double-counting. const alreadyRemovedMember = queryClient - .getQueryData< - chat.bsky.actor.defs.ProfileViewBasic[] - >(listConvoMembersQueryKey(convoId)) + .getQueryData( + listConvoMembersQueryKey(convoId), + ) ?.some(m => m.did === did) === false mutateMembers(convoId, list => list.filter(m => m.did !== did)) mutateConvoView( diff --git a/src/state/queries/my-lists.ts b/src/state/queries/my-lists.ts index 1150fa74ec..a0ac92f52f 100644 --- a/src/state/queries/my-lists.ts +++ b/src/state/queries/my-lists.ts @@ -6,10 +6,7 @@ import {useAppviewClient, useSession} from '#/state/session' import {app} from '#/lexicons' export type MyListsFilter = - | 'all' - | 'curate' - | 'mod' - | 'all-including-subscribed' + 'all' | 'curate' | 'mod' | 'all-including-subscribed' const RQKEY_ROOT = 'my-lists' export const RQKEY = (filter: MyListsFilter) => [RQKEY_ROOT, filter] diff --git a/src/state/queries/notifications/types.ts b/src/state/queries/notifications/types.ts index a08e8bdd35..ef57f703a5 100644 --- a/src/state/queries/notifications/types.ts +++ b/src/state/queries/notifications/types.ts @@ -3,8 +3,7 @@ import {type app} from '#/lexicons' export type Notification = app.bsky.notification.listNotifications.Notification export type NotificationType = - | StarterPackNotificationType - | OtherNotificationType + StarterPackNotificationType | OtherNotificationType export type FeedNotification = | (FeedNotificationBase & { @@ -56,6 +55,5 @@ type FeedNotificationBase = { additional?: Notification[] subjectUri?: string subject?: - | app.bsky.feed.defs.PostView - | app.bsky.graph.defs.StarterPackViewBasic + app.bsky.feed.defs.PostView | app.bsky.graph.defs.StarterPackViewBasic } diff --git a/src/state/queries/postgate/util.ts b/src/state/queries/postgate/util.ts index f57fe0479d..97f85e9369 100644 --- a/src/state/queries/postgate/util.ts +++ b/src/state/queries/postgate/util.ts @@ -89,9 +89,7 @@ export function createMaybeDetachedQuoteEmbed({ quoteUri: AtUriString detached: true }): - | app.bsky.embed.record.View - | app.bsky.embed.recordWithMedia.View - | undefined { + app.bsky.embed.record.View | app.bsky.embed.recordWithMedia.View | undefined { if (bsky.isType(app.bsky.embed.record.view, post.embed)) { if (detached) { return createEmbedViewDetachedRecord({uri: quoteUri}) diff --git a/src/state/queries/preferences/types.ts b/src/state/queries/preferences/types.ts index 7ade79b834..160427cf1b 100644 --- a/src/state/queries/preferences/types.ts +++ b/src/state/queries/preferences/types.ts @@ -16,11 +16,6 @@ export type UsePreferencesQueryResponse = Omit< export type ThreadViewPreferences = { sort: - | 'hotness' - | 'oldest' - | 'newest' - | 'most-likes' - | 'random' - | (string & {}) + 'hotness' | 'oldest' | 'newest' | 'most-likes' | 'random' | (string & {}) lab_treeViewEnabled?: boolean } diff --git a/src/state/queries/search-posts-params.ts b/src/state/queries/search-posts-params.ts index 6ed9ffea46..ac5f93cd00 100644 --- a/src/state/queries/search-posts-params.ts +++ b/src/state/queries/search-posts-params.ts @@ -206,12 +206,13 @@ function mergeList(a?: string[], b?: string[]): string[] | undefined { * than re-validated here. `q`, `limit`, `cursor` and `sort` are the caller's. */ type SearchPostsV2FilterParams = { - [K in Exclude< - keyof app.bsky.feed.searchPostsV2.$Params, - 'query' | 'limit' | 'cursor' | 'sort' - >]?: app.bsky.feed.searchPostsV2.$Params[K] extends - | readonly (infer _E)[] - | undefined + [ + K in Exclude< + keyof app.bsky.feed.searchPostsV2.$Params, + 'query' | 'limit' | 'cursor' | 'sort' + > + ]?: app.bsky.feed.searchPostsV2.$Params[K] extends + readonly (infer _E)[] | undefined ? string[] : app.bsky.feed.searchPostsV2.$Params[K] extends string | undefined ? string diff --git a/src/state/session/index.tsx b/src/state/session/index.tsx index 7cce22fff7..e8e3613ddc 100644 --- a/src/state/session/index.tsx +++ b/src/state/session/index.tsx @@ -167,8 +167,7 @@ export function Provider({children}: React.PropsWithChildren<{}>) { sessionEvent === 'update' && sessionData && (store.getState().currentBundleState.bundle as unknown as - | SessionBundle - | PublicSessionBundle) === bundle + SessionBundle | PublicSessionBundle) === bundle ) { failedExpiryTokensRef.current.get(accountDid)?.clear() } @@ -200,8 +199,7 @@ export function Provider({children}: React.PropsWithChildren<{}>) { if (sessionEvent === 'expired') { const current = store.getState() const currentBundle = current.currentBundleState.bundle as unknown as - | SessionBundle - | PublicSessionBundle + SessionBundle | PublicSessionBundle const dyingRefreshJwt = sessionData?.refreshJwt // Stale bundle events are handled by the reducer's identity guard. if ( @@ -509,8 +507,7 @@ export function Provider({children}: React.PropsWithChildren<{}>) { SessionApiContext['refreshSession'] >(async () => { const bundle = store.getState().currentBundleState.bundle as unknown as - | SessionBundle - | PublicSessionBundle + SessionBundle | PublicSessionBundle if (!bundle.session) return undefined // logged out: nothing to refresh const before = bundle.session.session const after = await bundle.session.refresh() @@ -595,8 +592,7 @@ export function Provider({children}: React.PropsWithChildren<{}>) { * the leader already refreshed, then dispose the previous bundle. */ const prevBundle = state.currentBundleState.bundle as unknown as - | SessionBundle - | PublicSessionBundle + SessionBundle | PublicSessionBundle // Avoid replacing the live bundle for an unrelated account update. const live = prevBundle.session && !prevBundle.session.destroyed @@ -685,8 +681,7 @@ export function Provider({children}: React.PropsWithChildren<{}>) { ) const bundle = state.currentBundleState.bundle as unknown as - | SessionBundle - | PublicSessionBundle + SessionBundle | PublicSessionBundle // @ts-expect-error window type is not declared, debug only // eslint-disable-next-line react-hooks/immutability diff --git a/src/state/session/logging.ts b/src/state/session/logging.ts index adc495d54d..77e4828a43 100644 --- a/src/state/session/logging.ts +++ b/src/state/session/logging.ts @@ -139,21 +139,13 @@ type Log = | { type: 'method:start' method: - | 'createAccount' - | 'login' - | 'logout' - | 'resumeSession' - | 'removeAccount' + 'createAccount' | 'login' | 'logout' | 'resumeSession' | 'removeAccount' account?: RedactedAccount } | { type: 'method:end' method: - | 'createAccount' - | 'login' - | 'logout' - | 'resumeSession' - | 'removeAccount' + 'createAccount' | 'login' | 'logout' | 'resumeSession' | 'removeAccount' account?: RedactedAccount } | { diff --git a/src/state/shell/composer/index.tsx b/src/state/shell/composer/index.tsx index fddf0421e9..0c60a77134 100644 --- a/src/state/shell/composer/index.tsx +++ b/src/state/shell/composer/index.tsx @@ -33,12 +33,7 @@ export type OnPostSuccessData = | undefined export type ComposerLogContext = - | 'Fab' - | 'PostReply' - | 'QuotePost' - | 'ProfileFeed' - | 'Deeplink' - | 'Other' + 'Fab' | 'PostReply' | 'QuotePost' | 'ProfileFeed' | 'Deeplink' | 'Other' export interface ComposerOpts { replyTo?: ComposerOptsPostRef diff --git a/src/state/shell/logged-out.tsx b/src/state/shell/logged-out.tsx index fcb76818c4..3a89630c86 100644 --- a/src/state/shell/logged-out.tsx +++ b/src/state/shell/logged-out.tsx @@ -27,11 +27,7 @@ type Controls = { * The did of the account to populate the login form with. */ requestedAccount?: - | (string & {}) - | 'none' - | 'new' - | 'starterpack' - | 'groupchat' + (string & {}) | 'none' | 'new' | 'starterpack' | 'groupchat' }) => void /** * Clears the requested account so that next time the logged out view is diff --git a/src/state/shell/progress-guide.tsx b/src/state/shell/progress-guide.tsx index b6ebf4621b..831a10f447 100644 --- a/src/state/shell/progress-guide.tsx +++ b/src/state/shell/progress-guide.tsx @@ -40,9 +40,7 @@ export interface Follow10ProgressGuide extends BaseProgressGuide { } export type ProgressGuide = - | Like10AndFollow7ProgressGuide - | Follow10ProgressGuide - | undefined + Like10AndFollow7ProgressGuide | Follow10ProgressGuide | undefined const ProgressGuideContext = createContext(undefined) ProgressGuideContext.displayName = 'ProgressGuideContext' diff --git a/src/types/bsky/starterPack.ts b/src/types/bsky/starterPack.ts index 21cb4634df..594fd40c89 100644 --- a/src/types/bsky/starterPack.ts +++ b/src/types/bsky/starterPack.ts @@ -29,5 +29,4 @@ export function isView(v: unknown): v is app.bsky.graph.defs.StarterPackView { * Matches any starter pack view exported by our SDK. */ export type AnyStarterPackView = - | app.bsky.graph.defs.StarterPackViewBasic - | app.bsky.graph.defs.StarterPackView + app.bsky.graph.defs.StarterPackViewBasic | app.bsky.graph.defs.StarterPackView diff --git a/src/view/com/composer/state/composer.ts b/src/view/com/composer/state/composer.ts index a7fd4f1e1b..5a013a830b 100644 --- a/src/view/com/composer/state/composer.ts +++ b/src/view/com/composer/state/composer.ts @@ -157,8 +157,7 @@ export type ComposerAction = | { type: 'clear' initInteractionSettings: - | app.bsky.actor.defs.PostInteractionSettingsPref - | undefined + app.bsky.actor.defs.PostInteractionSettingsPref | undefined } | { type: 'mark_saved' @@ -632,8 +631,7 @@ export function createComposerState({ initImageUris: ComposerOpts['imageUris'] initQuoteUri: string | undefined initInteractionSettings: - | app.bsky.actor.defs.PostInteractionSettingsPref - | undefined + app.bsky.actor.defs.PostInteractionSettingsPref | undefined }): ComposerState { let media: ImagesMedia | GalleryMedia | undefined if (initImageUris?.length) { diff --git a/src/view/com/composer/state/video.ts b/src/view/com/composer/state/video.ts index 4ae825a7f1..2f7a1ead62 100644 --- a/src/view/com/composer/state/video.ts +++ b/src/view/com/composer/state/video.ts @@ -148,11 +148,7 @@ type DoneState = { } export type VideoState = - | ErrorState - | CompressingState - | UploadingState - | ProcessingState - | DoneState + ErrorState | CompressingState | UploadingState | ProcessingState | DoneState export function createVideoState( asset: ImagePickerAsset, diff --git a/src/view/com/composer/state/videoProgress.ts b/src/view/com/composer/state/videoProgress.ts index bee9be68fa..984c0bc0b3 100644 --- a/src/view/com/composer/state/videoProgress.ts +++ b/src/view/com/composer/state/videoProgress.ts @@ -1,10 +1,7 @@ import {type VideoCompressSkipReason} from '#/lib/media/video/types' export type VideoProgressPhase = - | 'compressing' - | 'uploading' - | 'uploadingWithoutCompression' - | 'processing' + 'compressing' | 'uploading' | 'uploadingWithoutCompression' | 'processing' // Keep progress monotonic across the full client pipeline instead of showing // three separate 0 -> 100 cycles. Backend processing progress covers the diff --git a/src/view/com/composer/text-input/TextInput.types.ts b/src/view/com/composer/text-input/TextInput.types.ts index 490472f0a4..e5e8cadcf4 100644 --- a/src/view/com/composer/text-input/TextInput.types.ts +++ b/src/view/com/composer/text-input/TextInput.types.ts @@ -8,8 +8,7 @@ export type TextInputRef = { * @platform web */ getCursorPosition: () => - | {left: number; right: number; top: number; bottom: number} - | undefined + {left: number; right: number; top: number; bottom: number} | undefined /** * Closes the autocomplete popup if it is open. * Returns `true` if the popup was closed, `false` otherwise. diff --git a/src/view/com/util/Link.tsx b/src/view/com/util/Link.tsx index b2647363ea..52a5e14944 100644 --- a/src/view/com/util/Link.tsx +++ b/src/view/com/util/Link.tsx @@ -37,8 +37,7 @@ import {PressableWithHover} from './PressableWithHover' import {Text} from './text/Text' type Event = - | React.MouseEvent - | GestureResponderEvent + React.MouseEvent | GestureResponderEvent interface Props extends React.ComponentProps { testID?: string diff --git a/src/view/com/util/List.web.tsx b/src/view/com/util/List.web.tsx index bc3d3de27a..054cb55895 100644 --- a/src/view/com/util/List.web.tsx +++ b/src/view/com/util/List.web.tsx @@ -521,9 +521,7 @@ let Row = function RowImpl({ item: ItemT index: number renderItem: - | null - | undefined - | ((info: ListRenderItemInfo) => React.ReactNode) + null | undefined | ((info: ListRenderItemInfo) => React.ReactNode) extraData: unknown onItemSeen: ((item: ItemT) => void) | undefined registerRowNode: (index: number, node: HTMLElement | null) => void @@ -604,9 +602,7 @@ Row = memo(Row) as (props: { item: ItemT index: number renderItem: - | null - | undefined - | ((info: ListRenderItemInfo) => React.ReactNode) + null | undefined | ((info: ListRenderItemInfo) => React.ReactNode) extraData: unknown onItemSeen: ((item: ItemT) => void) | undefined registerRowNode: (index: number, node: HTMLElement | null) => void diff --git a/src/view/com/util/UserAvatar.tsx b/src/view/com/util/UserAvatar.tsx index be607d1630..6122757f71 100644 --- a/src/view/com/util/UserAvatar.tsx +++ b/src/view/com/util/UserAvatar.tsx @@ -307,7 +307,7 @@ let UserAvatar = ({ }, [size, style]) return avatar && - !((moderation?.blur && IS_ANDROID) /* android crashes with blur */) ? ( + !(moderation?.blur && IS_ANDROID /* android crashes with blur */) ? ( {usePlainRNImage ? ( ) : banner && - !((moderation?.blur && IS_ANDROID) /* android crashes with blur */) ? ( + !(moderation?.blur && IS_ANDROID /* android crashes with blur */) ? (