diff --git a/.github/workflows/mobile.yml b/.github/workflows/mobile.yml index bdf14151aa3..0104d1cd5d7 100644 --- a/.github/workflows/mobile.yml +++ b/.github/workflows/mobile.yml @@ -32,6 +32,10 @@ on: - '.github/workflows/mobile.yml' - 'config/mobile-ci.vitest.config.mjs' - 'config/scripts/run-mobile-ci-tests.mjs' + # Mobile typechecks run through the root compiler selection. + - 'config/scripts/run-typecheck-projects-in-parallel.mjs' + - 'config/scripts/tsrs-typecheck-compiler.mjs' + - 'config/scripts/pinned-bun-executable.mjs' - 'config/oxlint-code-quality-native-plugins.json' - 'config/.bun-version' - '.github/actions/install-node-dependencies/**' @@ -76,6 +80,9 @@ on: - '.github/workflows/mobile.yml' - 'config/mobile-ci.vitest.config.mjs' - 'config/scripts/run-mobile-ci-tests.mjs' + - 'config/scripts/run-typecheck-projects-in-parallel.mjs' + - 'config/scripts/tsrs-typecheck-compiler.mjs' + - 'config/scripts/pinned-bun-executable.mjs' - 'config/.bun-version' - '.github/actions/install-node-dependencies/**' - '.github/actions/setup-pnpm/**' @@ -114,7 +121,7 @@ jobs: # from the Gemfile, which is how the release jobs could land on different # fastlane versions in the first place. Fail here instead. BUNDLE_FROZEN: 'true' - ORCA_MOBILE_TYPECHECK_COMPILER: 'native' + ORCA_MOBILE_TYPECHECK_COMPILER: 'bun' defaults: run: @@ -171,9 +178,7 @@ jobs: - name: Typecheck id: production-types background: true - env: - GOMAXPROCS: '2' - run: node scripts/typecheck-mobile.mjs + run: node ../config/scripts/run-typecheck-projects-in-parallel.mjs --compiler=bun --bun-threads=2 --project=mobile/tsconfig.json # Why a ratchet and not the raw typecheck: mobile/tsconfig.json excludes test files, so until # tsconfig.test.json existed nothing checked them, and at introduction 127 of the 632 had @@ -182,8 +187,6 @@ jobs: - name: Typecheck tests (ratchet) id: test-types background: true - env: - GOMAXPROCS: '2' run: node scripts/check-tests-typecheck-ratchet.mjs # This includes the bridged replay of the whole recording corpus, which used to be a second @@ -304,7 +307,7 @@ jobs: main-tests: name: Mobile tests on main env: - ORCA_MOBILE_TYPECHECK_COMPILER: 'native' + ORCA_MOBILE_TYPECHECK_COMPILER: 'bun' if: github.event_name == 'push' # Why ARM: the same pure-Node Vitest run `verify` makes on a pull request. runs-on: blacksmith-4vcpu-ubuntu-2404-arm @@ -331,15 +334,11 @@ jobs: - name: Typecheck id: production-types background: true - env: - GOMAXPROCS: '2' - run: node scripts/typecheck-mobile.mjs + run: node ../config/scripts/run-typecheck-projects-in-parallel.mjs --compiler=bun --bun-threads=2 --project=mobile/tsconfig.json - name: Typecheck tests (ratchet) id: test-types background: true - env: - GOMAXPROCS: '2' run: node scripts/check-tests-typecheck-ratchet.mjs # The whole suite, not only the recordings: the mutant and page-bridge suites read the goldens diff --git a/config/scripts/check-mobile-shared-dependency-versions.mjs b/config/scripts/check-mobile-shared-dependency-versions.mjs index f75bb872822..3f1134c9bdb 100644 --- a/config/scripts/check-mobile-shared-dependency-versions.mjs +++ b/config/scripts/check-mobile-shared-dependency-versions.mjs @@ -10,6 +10,12 @@ import { lockedVersion, lockfileRootImporter } from './pnpm-lockfile-root-import // merges two copies only at the same version; else zod-wrapped schemas infer `{}` (phone-feed-list.ts). export const SHARED_DEPENDENCIES = ['zod', 'tweetnacl', '@noble/hashes', '@types/ws'] +// Mobile typechecks through the root runner, whose Bun path accepts one TypeScript version, and +// mobile CI runs its tests with the root's Vitest CLI against mobile's `vitest` imports. +export const TOOLCHAIN_DEPENDENCIES = ['typescript', 'typescript-api', 'vitest'] + +const CHECKED_DEPENDENCIES = [...SHARED_DEPENDENCIES, ...TOOLCHAIN_DEPENDENCIES] + function importerVersion(importer, name) { return lockedVersion(importer.dependencies?.[name] ?? importer.devDependencies?.[name]) } @@ -17,7 +23,7 @@ function importerVersion(importer, name) { export function findSharedDependencyVersionProblems({ rootImporter, mobileImporter, - names = SHARED_DEPENDENCIES + names = CHECKED_DEPENDENCIES }) { const problems = [] for (const name of names) { @@ -49,7 +55,7 @@ export function main(root = resolve(import.meta.dirname, '../..')) { ) return 1 } - console.log(`Root and mobile lock the same ${SHARED_DEPENDENCIES.join(', ')}.`) + console.log(`Root and mobile lock the same ${CHECKED_DEPENDENCIES.join(', ')}.`) return 0 } diff --git a/config/scripts/check-mobile-shared-dependency-versions.test.mjs b/config/scripts/check-mobile-shared-dependency-versions.test.mjs index be171f13b06..7de7e50ea95 100644 --- a/config/scripts/check-mobile-shared-dependency-versions.test.mjs +++ b/config/scripts/check-mobile-shared-dependency-versions.test.mjs @@ -35,7 +35,7 @@ describe('findSharedDependencyVersionProblems', () => { expect(checkZod({}, locked('4.6.7'))).toEqual(['zod is not a direct dependency of the root']) }) - it('checks every shared dependency by default', () => { + it('checks every shared and toolchain dependency by default', () => { const problems = findSharedDependencyVersionProblems({ rootImporter: locked('4.6.7'), mobileImporter: locked('4.6.7') @@ -43,7 +43,10 @@ describe('findSharedDependencyVersionProblems', () => { expect(problems).toEqual([ 'tweetnacl is not a direct dependency of the root', '@noble/hashes is not a direct dependency of the root', - '@types/ws is not a direct dependency of the root' + '@types/ws is not a direct dependency of the root', + 'typescript is not a direct dependency of the root', + 'typescript-api is not a direct dependency of the root', + 'vitest is not a direct dependency of the root' ]) }) }) diff --git a/config/scripts/mobile-typecheck-cache.test.mjs b/config/scripts/mobile-typecheck-cache.test.mjs index 7d74026feb6..0bd70050b85 100644 --- a/config/scripts/mobile-typecheck-cache.test.mjs +++ b/config/scripts/mobile-typecheck-cache.test.mjs @@ -2,16 +2,14 @@ import { readFileSync } from 'node:fs' import { expect, it } from 'vitest' import { parse } from 'yaml' -it('runs full native checks and collects failures on pull requests and main', () => { +it('runs uncached Bun checks like root CI and collects failures on pull requests and main', () => { const workflow = parse(readFileSync('.github/workflows/mobile.yml', 'utf8')) for (const job of [workflow.jobs.verify, workflow.jobs['main-tests']]) { - expect(job.env.ORCA_MOBILE_TYPECHECK_COMPILER).toBe('native') - expect(job.env.ORCA_MOBILE_TYPECHECK_CACHE_DIR).toBeUndefined() + expect(job.env.ORCA_MOBILE_TYPECHECK_COMPILER).toBe('bun') const steps = job.steps expect( steps.some( - (step) => - step.uses === 'actions/cache@v5' && step.with?.path?.includes('mobile/.cache/typechecks') + (step) => step.uses === 'actions/cache@v5' && step.with?.path?.includes('.cache/typecheck') ) ).toBe(false) const install = steps.findIndex((step) => step.name === 'Install dependencies') @@ -21,13 +19,12 @@ it('runs full native checks and collects failures on pull requests and main', () expect(check.if).toBeUndefined() expect(check.background).toBe(true) expect(check['continue-on-error']).toBeUndefined() - expect(check.env.GOMAXPROCS).toBe('2') expect(steps.indexOf(check)).toBeGreaterThan(install) expect(wait.wait).toContain(id) expect(steps.indexOf(wait)).toBeGreaterThan(steps.indexOf(check)) } expect(steps.find((step) => step.id === 'production-types').run).toBe( - 'node scripts/typecheck-mobile.mjs' + 'node ../config/scripts/run-typecheck-projects-in-parallel.mjs --compiler=bun --bun-threads=2 --project=mobile/tsconfig.json' ) expect(steps.find((step) => step.id === 'test-types').run).toBe( 'node scripts/check-tests-typecheck-ratchet.mjs' diff --git a/config/scripts/run-typecheck-projects-in-parallel.mjs b/config/scripts/run-typecheck-projects-in-parallel.mjs index 56acc4894e0..e89930b60a7 100644 --- a/config/scripts/run-typecheck-projects-in-parallel.mjs +++ b/config/scripts/run-typecheck-projects-in-parallel.mjs @@ -2,7 +2,7 @@ import { runProcessSync, spawnProcess } from '@orca/process-host' import { readFileSync } from 'node:fs' import { createRequire } from 'node:module' import { availableParallelism, totalmem } from 'node:os' -import { dirname, join } from 'node:path' +import { dirname, join, resolve } from 'node:path' import { fileURLToPath, pathToFileURL } from 'node:url' import { readPinnedBunVersion, resolvePinnedBunExecutable } from './pinned-bun-executable.mjs' import { resolveTsrsTypecheckCommand, supportsTsrs } from './tsrs-typecheck-compiler.mjs' @@ -21,6 +21,12 @@ export const TYPECHECK_PROJECTS = [ { config: 'src/packages/process-host/tsconfig.test.json', heapGib: 1 } ] +// Selected only by --project: mobile is a separate install that root checks cannot assume. +export const MOBILE_TYPECHECK_PROJECTS = [ + { config: 'mobile/tsconfig.json', heapGib: 2 }, + { config: 'mobile/tsconfig.test.json', heapGib: 3 } +] + // The OS, node itself, and the runner agent need their share; the rest is what tsc may hold. export function admissibleHeapGib(totalBytes) { return Math.max(1, (totalBytes / BYTES_PER_GIB) * 0.75) @@ -62,7 +68,7 @@ export function planTypecheckBatches(projects, { budgetGib, parallelism }) { const repoRoot = fileURLToPath(new URL('../..', import.meta.url)) export function resolveProjectCompilerInfo(config, root = repoRoot) { - const require = createRequire(join(root, dirname(config), 'package.json')) + const require = createRequire(join(resolve(root, dirname(config)), 'package.json')) const manifestPath = require.resolve('typescript/package.json') const { bin, version } = JSON.parse(readFileSync(manifestPath, 'utf8')) return { program: join(dirname(manifestPath), typeof bin === 'string' ? bin : bin.tsc), version } @@ -92,7 +98,9 @@ export function parseTypecheckOptions(args) { options.bunThreads = Number(argument.slice('--bun-threads='.length)) } else if (argument.startsWith('--project=')) { const config = argument.slice('--project='.length) - const project = TYPECHECK_PROJECTS.find((candidate) => candidate.config === config) + const project = [...TYPECHECK_PROJECTS, ...MOBILE_TYPECHECK_PROJECTS].find( + (candidate) => candidate.config === config + ) if (!project) { throw new Error(`Unknown typecheck project: ${config}`) } diff --git a/config/scripts/run-typecheck-projects-in-parallel.test.mjs b/config/scripts/run-typecheck-projects-in-parallel.test.mjs index 6ca229518d1..1d71368f66a 100644 --- a/config/scripts/run-typecheck-projects-in-parallel.test.mjs +++ b/config/scripts/run-typecheck-projects-in-parallel.test.mjs @@ -13,6 +13,7 @@ import { join, relative, sep } from 'node:path' import { fileURLToPath } from 'node:url' import { describe, expect, it } from 'vitest' import { + MOBILE_TYPECHECK_PROJECTS, TYPECHECK_PROJECTS, admissibleHeapGib, planTypecheckBatches, @@ -194,6 +195,10 @@ describe('local and CI compiler selection', () => { TYPECHECK_PROJECTS[0] ]) expect(parseTypecheckOptions([]).projects).toEqual(TYPECHECK_PROJECTS) + expect(parseTypecheckOptions(['--project=mobile/tsconfig.test.json']).projects).toEqual([ + MOBILE_TYPECHECK_PROJECTS[1] + ]) + expect(TYPECHECK_PROJECTS).not.toContainEqual(MOBILE_TYPECHECK_PROJECTS[0]) expect(() => parseTypecheckOptions(['--project=config/tsconfig.json'])).toThrow() }) diff --git a/mobile/.gitignore b/mobile/.gitignore index c9e9dd864bc..d5ca6d6e6d8 100644 --- a/mobile/.gitignore +++ b/mobile/.gitignore @@ -14,5 +14,3 @@ dist/ *.mobileprovision *.orig.* web-build/ - -.cache/typechecks/ diff --git a/mobile/package.json b/mobile/package.json index 3346a7096bc..2cfcfe66494 100644 --- a/mobile/package.json +++ b/mobile/package.json @@ -10,8 +10,8 @@ "native": "node scripts/native-client.mjs", "postinstall": "node scripts/build-terminal-webview-engine.mjs && node scripts/build-mermaid-page-engine.mjs && node scripts/build-terminal-document-script.mjs", "test": "vitest run", - "typecheck": "tsc --noEmit", - "typecheck:tests": "tsc --noEmit -p tsconfig.test.json", + "typecheck": "node ../config/scripts/run-typecheck-projects-in-parallel.mjs --project=mobile/tsconfig.json", + "typecheck:tests": "node ../config/scripts/run-typecheck-projects-in-parallel.mjs --project=mobile/tsconfig.test.json", "check:tests-typecheck": "node scripts/check-tests-typecheck-ratchet.mjs", "rpc:record": "tsx --conditions=orca-source scripts/rpc-recording.mts", "rpc:diff": "tsx --conditions=orca-source scripts/rpc-diff.mts", @@ -90,9 +90,10 @@ "oxlint": "^1.88.0", "react-test-renderer": "19.2.8", "tsx": "^4.23.15", - "typescript": "6.0.3", + "typescript": "^7.0.2", + "typescript-api": "npm:typescript@6.0.3", "vite": "^8.3.4", - "vitest": "^4.1.12", + "vitest": "5.0.5", "ws": "^8.22.0" }, "packageManager": "pnpm@12.14.0+sha512.c18ba6d87993d3d164cb5e8948f32b2c06ee854487e06cd8d86781342fb3e5bb4634367034711e86802baa9c37bea906ce1929ad08d70884c97d801df13389a6" diff --git a/mobile/patches/@expo__cli@55.0.36.patch b/mobile/patches/@expo__cli@55.0.36.patch new file mode 100644 index 00000000000..c4b0e20908a --- /dev/null +++ b/mobile/patches/@expo__cli@55.0.36.patch @@ -0,0 +1,24 @@ +diff --git a/build/src/utils/tsconfig/evaluateTsConfig.js b/build/src/utils/tsconfig/evaluateTsConfig.js +index ecf0298a6858541f2e33d0af5293ad61aa80a159..491d9800703dab8e3c197c09bd45af4fd3e13b58 100644 +--- a/build/src/utils/tsconfig/evaluateTsConfig.js ++++ b/build/src/utils/tsconfig/evaluateTsConfig.js +@@ -77,11 +77,15 @@ function evaluateTsConfig(ts, tsConfigPath) { + } + } + function importTypeScriptFromProjectOptionally(projectRoot) { +- const resolvedPath = _resolvefrom().default.silent(projectRoot, 'typescript'); +- if (!resolvedPath) { +- return null; ++ // TypeScript 7 ships no compiler API; read tsconfig with the project's TypeScript 6 alias. ++ for (const name of ['typescript', 'typescript-api']) { ++ const resolvedPath = _resolvefrom().default.silent(projectRoot, name); ++ const ts = resolvedPath ? require(resolvedPath) : null; ++ if (typeof (ts == null ? void 0 : ts.readConfigFile) === 'function') { ++ return ts; ++ } + } +- return require(resolvedPath); ++ return null; + } + + //# sourceMappingURL=evaluateTsConfig.js.map diff --git a/mobile/pnpm-lock.yaml b/mobile/pnpm-lock.yaml index 5039a77e847..b29667e09be 100644 --- a/mobile/pnpm-lock.yaml +++ b/mobile/pnpm-lock.yaml @@ -172,6 +172,7 @@ overrides: query-string: 9.5.1 patchedDependencies: + '@expo/cli@55.0.36': 9ccdef43e1ef80ee4d68b4ed213c145660c2dcf4241cab6593da42f0847583c7 '@xterm/addon-webgl@0.20.0-beta.300': 5349718f2c19d9319a81552580bf9618ded9b00f3707a5c6cdbbae1910849cd9 braces@3.0.3: c07bb14cec04bc891e1fe529720444cc9729a25117f9aaf24253cfe3132a34fd expo-notifications@55.0.27: ce20843a3daad4185d7e8571788fa323ba4d11984936188790858650a61749c0 @@ -209,7 +210,7 @@ importers: version: 6.0.3 expo: specifier: ^55.0.31 - version: 55.0.31(bbbc70ae8e0994c0f174d72b91639b84) + version: 55.0.31(ffb18d8db340712289e23538af5a7293) expo-build-properties: specifier: ^55.0.18 version: 55.0.18(expo@55.0.31) @@ -254,7 +255,7 @@ importers: version: 55.0.18(expo@55.0.31)(react@19.2.8) expo-notifications: specifier: ^55.0.27 - version: 55.0.27(patch_hash=ce20843a3daad4185d7e8571788fa323ba4d11984936188790858650a61749c0)(expo@55.0.31)(react-native@0.83.10(patch_hash=22bc31f0a057b1f96d9949b38a7ccde81225f617c0f243820dc8a455c91debfb)(@babel/core@7.29.7(supports-color@8.1.1))(@react-native/metro-config@0.85.2(@babel/core@7.29.7(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.8)(supports-color@8.1.1))(react@19.2.8)(supports-color@8.1.1)(typescript@6.0.3) + version: 55.0.27(patch_hash=ce20843a3daad4185d7e8571788fa323ba4d11984936188790858650a61749c0)(expo@55.0.31)(react-native@0.83.10(patch_hash=22bc31f0a057b1f96d9949b38a7ccde81225f617c0f243820dc8a455c91debfb)(@babel/core@7.29.7(supports-color@8.1.1))(@react-native/metro-config@0.85.2(@babel/core@7.29.7(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.8)(supports-color@8.1.1))(react@19.2.8)(supports-color@8.1.1)(typescript@7.0.2) expo-router: specifier: ^55.0.18 version: 55.0.18(589555b6d8c5573172d9947cbca71959) @@ -263,7 +264,7 @@ importers: version: 55.0.18(expo@55.0.31) expo-splash-screen: specifier: ^55.0.25 - version: 55.0.25(expo@55.0.31)(supports-color@8.1.1)(typescript@6.0.3) + version: 55.0.25(expo@55.0.31)(supports-color@8.1.1)(typescript@7.0.2) expo-status-bar: specifier: ^55.0.6 version: 55.0.6(react-native@0.83.10(patch_hash=22bc31f0a057b1f96d9949b38a7ccde81225f617c0f243820dc8a455c91debfb)(@babel/core@7.29.7(supports-color@8.1.1))(@react-native/metro-config@0.85.2(@babel/core@7.29.7(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.8)(supports-color@8.1.1))(react@19.2.8) @@ -383,14 +384,17 @@ importers: specifier: ^4.23.15 version: 4.23.15 typescript: - specifier: 6.0.3 - version: 6.0.3 + specifier: ^7.0.2 + version: 7.0.2 + typescript-api: + specifier: npm:typescript@6.0.3 + version: typescript@6.0.3 vite: specifier: ^8.3.4 version: 8.3.4(@types/node@26.6.2)(esbuild@0.28.2)(terser@5.51.2)(tsx@4.23.15)(yaml@2.9.1) vitest: - specifier: ^4.1.12 - version: 4.1.12(@types/node@26.6.2)(happy-dom@21.0.4)(jsdom@20.0.3(supports-color@8.1.1))(vite@8.3.4(@types/node@26.6.2)(esbuild@0.28.2)(terser@5.51.2)(tsx@4.23.15)(yaml@2.9.1)) + specifier: 5.0.5 + version: 5.0.5(@types/node@26.6.2)(happy-dom@21.0.4)(jsdom@20.0.3(supports-color@8.1.1))(vite@8.3.4(@types/node@26.6.2)(esbuild@0.28.2)(terser@5.51.2)(tsx@4.23.15)(yaml@2.9.1)) ws: specifier: ^8.22.0 version: 8.22.0 @@ -1956,6 +1960,9 @@ packages: '@jridgewell/sourcemap-codec@1.5.5': resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==} + '@jridgewell/sourcemap-codec@1.6.0': + resolution: {integrity: sha512-T7jf+5zgsZHwNJ4lvQ7/aezbyk0nNX+zJVWpmHA7VYsEx7a7qr5Rg5IbtJFqkgze5Y2sruq1RUY8Q837Od7iFw==} + '@jridgewell/trace-mapping@0.3.31': resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==} @@ -2733,9 +2740,6 @@ packages: '@sinonjs/fake-timers@10.3.0': resolution: {integrity: sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==} - '@standard-schema/spec@1.1.0': - resolution: {integrity: sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==} - '@testing-library/react-native@13.3.3': resolution: {integrity: sha512-k6Mjsd9dbZgvY4Bl7P1NIpePQNi+dfYtlJ5voi9KQlynxSyQkfOgJmYGCYmw/aSgH/rUcFvG8u5gd4npzgRDyg==} engines: {node: '>=18'} @@ -3062,19 +3066,136 @@ packages: engines: {node: '>=16.20.0'} hasBin: true + '@typescript/typescript-aix-ppc64@7.0.2': + resolution: {integrity: sha512-MTKKkWB7p/0E9xi1d1tHtZ5PiLkGEMIq88pK2CubZjOsLtYTLqhgIgi6zepFa+9GHZ6h05NMCkQxGKiPXMxXtQ==} + engines: {node: '>=16.20.0'} + cpu: [ppc64] + os: [aix] + + '@typescript/typescript-darwin-arm64@7.0.2': + resolution: {integrity: sha512-gowzar9MwS/aRWp6f3a4KUqzRjAZjOsmGNCM6LcTgXum+dBfgsBVMN+AgvOCCbguXyick6LJhpBszxMebJ8syA==} + engines: {node: '>=16.20.0'} + cpu: [arm64] + os: [darwin] + + '@typescript/typescript-darwin-x64@7.0.2': + resolution: {integrity: sha512-SZ9xZInqApNlNGc9s0W1VSsktYSOe9cFqNOIqmN1Gs8SmkjKZYFt017G4VwPxASInODuAdbTW7sXiFUf893RgA==} + engines: {node: '>=16.20.0'} + cpu: [x64] + os: [darwin] + + '@typescript/typescript-freebsd-arm64@7.0.2': + resolution: {integrity: sha512-W5NH4y/J0plIIS5b2xvTEkU7JFxyqdMAOgf+Ilhl0vHQXKO5dZoxd+C/jEtq56c4F3wk71RB4BMRQ2XdI+bwYQ==} + engines: {node: '>=16.20.0'} + cpu: [arm64] + os: [freebsd] + + '@typescript/typescript-freebsd-x64@7.0.2': + resolution: {integrity: sha512-UMGDx5sTpzNw3WiPebH7l90IWfJggEd+egHt/q6p7/Cm3zqoV7VxkGXt+3DxPIw8CcmvAB0j3sVVfbhX+M4Tpw==} + engines: {node: '>=16.20.0'} + cpu: [x64] + os: [freebsd] + + '@typescript/typescript-linux-arm64@7.0.2': + resolution: {integrity: sha512-Qh4eU4/y3yDjnfjjyPYihMj5/ODIlmt+Bzu17OI+fiSRDW57QmU5SiN63exPRNJPKUzcc1INa1NXdrJ+MqHjUQ==} + engines: {node: '>=16.20.0'} + cpu: [arm64] + os: [linux] + + '@typescript/typescript-linux-arm@7.0.2': + resolution: {integrity: sha512-gffT3xPz9sR7j/YJExkyPntrI0P2EP9XbOyWzth2/Gs0RstK+90RBcO0ncXoXy/beYll1SXw846Nf2zdnEz0QQ==} + engines: {node: '>=16.20.0'} + cpu: [arm] + os: [linux] + + '@typescript/typescript-linux-loong64@7.0.2': + resolution: {integrity: sha512-uEHck9i8hoAzXPiYRib1O7miOnz23SxIeVl6F4LXox+qov1K35jHcEW6VHKvZI+pyvl7fZEP4MCU5LYvIq1GuQ==} + engines: {node: '>=16.20.0'} + cpu: [loong64] + os: [linux] + + '@typescript/typescript-linux-mips64el@7.0.2': + resolution: {integrity: sha512-R4KvAMnE43W5Qeqb0Ly56O3mWMWIAgsMyz36DCaycd5nbg/9kzm0liw3JocfRqyJY0KPmzFjbswozXyW0DnIYA==} + engines: {node: '>=16.20.0'} + cpu: [mips64el] + os: [linux] + + '@typescript/typescript-linux-ppc64@7.0.2': + resolution: {integrity: sha512-DORx5b3sd/4S7eayxm4FQv+A7CrkUIGRaHiwI8oiHTAI1fAPWhF4J0vAlkC8biAlHSVVwxMQ3tjZ2/DVbnQiiA==} + engines: {node: '>=16.20.0'} + cpu: [ppc64] + os: [linux] + + '@typescript/typescript-linux-riscv64@7.0.2': + resolution: {integrity: sha512-wf0jqEDOjrPRnKwYRyyJDRo11KMbvMFrU+q4zqKyChODBzvlkbhNQfKvLxQCcwTpdDaXSHZTVuh0JoCrKCUMHQ==} + engines: {node: '>=16.20.0'} + cpu: [riscv64] + os: [linux] + + '@typescript/typescript-linux-s390x@7.0.2': + resolution: {integrity: sha512-IkwJc3L7yhytWd/ewjyxNDfOmswCm9GWMJT/ue/dU4aZNbwZeYAetq42VyLmsmSjvoX7z74X6ZaYCtzAr0EuGw==} + engines: {node: '>=16.20.0'} + cpu: [s390x] + os: [linux] + + '@typescript/typescript-linux-x64@7.0.2': + resolution: {integrity: sha512-EYdf2cNg7rgCWJnxCdJ+F3V39O8ihb37eHAu1LK8oAFizgTQbPOK7zHHXbPt8rX24COqODXeI3sIf0fCXG7H/A==} + engines: {node: '>=16.20.0'} + cpu: [x64] + os: [linux] + + '@typescript/typescript-netbsd-arm64@7.0.2': + resolution: {integrity: sha512-+polYF4MF04aPpO5FTkHran9yUQDSXqy5GiSDKpsll5jy3l3+g9QLhpf39T+ePtefhXLOGrLl0QIjkQP6VnelA==} + engines: {node: '>=16.20.0'} + cpu: [arm64] + os: [netbsd] + + '@typescript/typescript-netbsd-x64@7.0.2': + resolution: {integrity: sha512-8YIT0EHM/3dq10ZOVF/A7pc/YSMtbcecct4rWtexrnSCHOPcpC2KTLXfTCR6vDpnSiY12heNb1GiN/wu+T/FyA==} + engines: {node: '>=16.20.0'} + cpu: [x64] + os: [netbsd] + + '@typescript/typescript-openbsd-arm64@7.0.2': + resolution: {integrity: sha512-APT8+ClYnuYm1u9+kgGXoMj2VzWzcymwh2gNSQVySHfkRDGOTVkoWLjCmOQSaO+PoqQ57B0flRp9SA+7GnnkzQ==} + engines: {node: '>=16.20.0'} + cpu: [arm64] + os: [openbsd] + + '@typescript/typescript-openbsd-x64@7.0.2': + resolution: {integrity: sha512-yX7s+Q0Dln0Dt9tEzZsAjXXR/+ytBM7AlglaqyeMPxQszJ1JhlJdZ6jLA+IzldHtflX81em7lDao1xXu+aRRkg==} + engines: {node: '>=16.20.0'} + cpu: [x64] + os: [openbsd] + + '@typescript/typescript-sunos-x64@7.0.2': + resolution: {integrity: sha512-dLJDGaLZ1D4HPQn62u1n8mBDkJREwMsAkCdkwd4Ieqw+x3TUyTsqY0YiBCtE6H6OzzgGk3iuZ3vFWRS+E8/d1g==} + engines: {node: '>=16.20.0'} + cpu: [x64] + os: [sunos] + + '@typescript/typescript-win32-arm64@7.0.2': + resolution: {integrity: sha512-Gyl1Vy6OsWesLzmq+EP0Fb7b4Nid5232AvcA2SFcdYreldpNtYFFofPjnt62y9hQy7VTaZp65ICJjuAQRaVcIQ==} + engines: {node: '>=16.20.0'} + cpu: [arm64] + os: [win32] + + '@typescript/typescript-win32-x64@7.0.2': + resolution: {integrity: sha512-0BQ3HkAHHlKLSp1qRvf3SUhGpGsDuhB/jgFw75guyqbxJqEaS0Cw/VFO8i2nHglJUzQCRtMMR/IBAKE3ETMC4g==} + engines: {node: '>=16.20.0'} + cpu: [x64] + os: [win32] + '@ungap/structured-clone@1.3.1': resolution: {integrity: sha512-mUFwbeTqrVgDQxFveS+df2yfap6iuP20NAKAsBt5jDEoOTDew+zwLAOilHCeQJOVSvmgCX4ogqIrA0mnyr08yQ==} '@upsetjs/venn.js@2.0.0': resolution: {integrity: sha512-WbBhLrooyePuQ1VZxrJjtLvTc4NVfpOyKx0sKqioq9bX1C1m7Jgykkn8gLrtwumBioXIqam8DLxp88Adbue6Hw==} - '@vitest/expect@4.1.12': - resolution: {integrity: sha512-vFlTt+YEu9WBpNjdGayNmlMVzrWPi1+sv853/7t2FU7hpO5gAFBKHzQmkCq5Xjpr+evegF2994LQT3hF3mRlqQ==} - - '@vitest/mocker@4.1.12': - resolution: {integrity: sha512-fKShNpKZzupWZuY0z7egydvL0sqW4INEZBEExMBMAa6izlENEVHwoXgdaTCaBZ5fwlr4xf2o1wXC83n9RpO+NA==} + '@vitest/mocker@5.0.5': + resolution: {integrity: sha512-xLL3lkDegJZw+MGoGaCCsFayDZthGgpAtr3Vziyfc4p7xH89K7KRPcRBBh/kEYm0Aqkt5DtTmkYpBtRV/FrHZg==} peerDependencies: - msw: ^2.4.9 + msw: ^2.4.9 || ^3.0.0 vite: ^6.0.0 || ^7.0.0 || ^8.0.0 peerDependenciesMeta: msw: @@ -3082,20 +3203,8 @@ packages: vite: optional: true - '@vitest/pretty-format@4.1.12': - resolution: {integrity: sha512-XW9O8+Mxx4VpCtkYdMJLZQQwsVryP9wk7cPKDxtXFfwSak6yRh5+2fep/Y0XF/ElBvJHq8bcYdi6aeuai0opZA==} - - '@vitest/runner@4.1.12': - resolution: {integrity: sha512-NKlVKCr5QnCe8jijdMnmkpHHU+WTqiLFR6G0pHji9uRjXK9xJl1k1nTw6F3pOOj2PDcsDt2GKQMI7wIsaT491w==} - - '@vitest/snapshot@4.1.12': - resolution: {integrity: sha512-ko1y1Qgb/slzQ9mr+b89Cuqud8WG1TKtsPD8r7ZUBdvVOGt85Af2HwCqHujrhwJq95hs/9RM7fcAPg57o1vlzw==} - - '@vitest/spy@4.1.12': - resolution: {integrity: sha512-RGq9x4JNGNTZHEJxvN0oSiJjeSCExm0n2gZKKJZHY9cX5AVA6M7VJILBT3ZJ/tJ/0J9uWT7fETV9/btoi//vSg==} - - '@vitest/utils@4.1.12': - resolution: {integrity: sha512-Q3awXrwOfEV+qc3WmO5ONyE0yO7Q1gQ9/oyHxGLZ/pl7N3NO/ZztqQwKLuwMkV+CA1JYSIeO3gkHnRDIo4AVaA==} + '@vitest/spy@5.0.5': + resolution: {integrity: sha512-lwJRExuH417257Q5wv9QYugN9IMJkoxcrKrYxGPQkBzl7wlNpTUxD/5yNX4ESKVUIShKPgkGchYPFMWOOk0wzw==} '@xmldom/xmldom@0.8.15': resolution: {integrity: sha512-/5NV/vDALVFDXgLmfsy9TRCBlKwO2LNBFzpzvb9iIj+jR+eSc6DLYYvVOdivT/jm7MtU6TebYuRmzEOI7w40UA==} @@ -3476,8 +3585,8 @@ packages: caniuse-lite@1.0.30001810: resolution: {integrity: sha512-TITQPUkaz+aVk5GL6NhOdwk1aEaNTSDPsGFWrTuhKGtjTF70jL/Oht2W4c6rXUe5fu7Ie19VIahAXHIIiWWNeg==} - chai@6.2.2: - resolution: {integrity: sha512-NUPRluOfOiTKBKvWPtSD4PhFvWCqOi0BGStNWs57X9js7XGTprSmFoz5F0tWhR4WPjNeR9jXqdC7/UpSJTnlRg==} + chai@6.3.0: + resolution: {integrity: sha512-XWAtwJ6OHO+tj0EKCs0Y2UamnyOxseZWltU4x2U2wh8g4AigdjwvtUjvLP2tqkA/avxHEtzxNaqGq/YGNwckKg==} engines: {node: '>=18'} chalk@2.4.2: @@ -4022,8 +4131,8 @@ packages: resolution: {integrity: sha512-HVLACW1TppGYjJ8H6/jqH/pqOtKRw6wMlrB23xfExmFWxFquAIWCmwoLsOyN96K4a5KbmOf5At9ZUO3GZbetAw==} engines: {node: '>= 0.4'} - es-module-lexer@2.1.0: - resolution: {integrity: sha512-n27zTYMjYu1aj4MjCWzSP7G9r75utsaoc8m61weK+W8JMBGGQybd43GstCXZ3WNmSFtGT9wi59qQTW6mhTR5LQ==} + es-module-lexer@2.3.2: + resolution: {integrity: sha512-poHGpORABojJJucnV9KbOavETW8lBVnphkW77ER5/BQ5Fz7oXSoCNek7IH3vR5nRjdsEz926ibFYX8KtLQmdyw==} es-object-atoms@1.1.1: resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==} @@ -4257,8 +4366,8 @@ packages: resolution: {integrity: sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==} engines: {node: '>= 0.8.0'} - expect-type@1.3.0: - resolution: {integrity: sha512-knvyeauYhqjOYvQ66MznSMs83wmHrCycNEN6Ao+2AeYEfxUIkuiVxdEa1qlGEPK+We3n0THiDciYSsCcgW/DoA==} + expect-type@1.4.0: + resolution: {integrity: sha512-KfYbmpRm0VbLjEvVa9yGwCi9GI34xvi7A/HXYWQO65CSD2u3MczUJSuwXKFIxlGsgBQizV9q5J9NHj4VG0n+pA==} engines: {node: '>=12.0.0'} expect@29.7.0: @@ -5548,8 +5657,8 @@ packages: react-native: '*' react-native-svg: ^12.0.0 || ^13.0.0 || ^14.0.0 || ^15.0.0 - magic-string@0.30.21: - resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==} + magic-string@1.4.3: + resolution: {integrity: sha512-z12OxmaPGE0F4xlpGdjuAUckipLpQlTAuAmyGhNoD7ODpYUzvDfvtxUbjM/jwznyP178oju/KDdyi220wNJ0RQ==} make-dir@2.1.0: resolution: {integrity: sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==} @@ -5907,8 +6016,9 @@ packages: resolution: {integrity: sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==} engines: {node: '>= 0.4'} - obug@2.1.1: - resolution: {integrity: sha512-uTqF9MuPraAQ+IsnPf366RG4cP9RtUi7MLO1N3KEc+wb0a6yKpeL0lmk2IB1jY5KHPAlTc6T/JRdC/YqxHNwkQ==} + obug@3.0.0: + resolution: {integrity: sha512-5vvB5+W7ePv+p3uqxi+RcW1XAzLW0/hxt3/4X4Lc4qHudzOhmBiBwOY6DRob4WnanAEGvNcLjF+KNOufrUoEQw==} + engines: {node: '>=12.20.0'} on-finished@2.3.0: resolution: {integrity: sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==} @@ -6046,9 +6156,6 @@ packages: resolution: {integrity: sha512-3O/iVVsJAPsOnpwWIeD+d6z/7PmqApyQePUtCndjatj/9I5LylHvt5qluFaBT3I5h3r1ejfR056c+FCv+NnNXg==} engines: {node: 18 || 20 || >=22} - pathe@2.0.3: - resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==} - picocolors@1.1.1: resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} @@ -6550,9 +6657,6 @@ packages: resolution: {integrity: sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==} engines: {node: '>= 0.4'} - siginfo@2.0.0: - resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==} - signal-exit@3.0.7: resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} @@ -6617,9 +6721,6 @@ packages: resolution: {integrity: sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==} engines: {node: '>=10'} - stackback@0.0.2: - resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} - stackframe@1.3.4: resolution: {integrity: sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw==} @@ -6641,8 +6742,8 @@ packages: resolution: {integrity: sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==} engines: {node: '>= 0.8'} - std-env@4.1.0: - resolution: {integrity: sha512-Rq7ybcX2RuC55r9oaPVEW7/xu3tj8u4GeBYHBWCychFtzMIr86A7e3PPEBPT37sHStKX3+TiX/Fr/ACmJLVlLQ==} + std-env@4.3.0: + resolution: {integrity: sha512-OtU/EgQ1kIm5KwqQpBC6ZEMXrZRui11w8zgfTWp8cdO9B8OaPsbA8bTHO2P+HNo1VlUTGMVBwPhydu6poeXiag==} stop-iteration-iterator@1.1.0: resolution: {integrity: sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==} @@ -6783,13 +6884,18 @@ packages: throat@5.0.0: resolution: {integrity: sha512-fcwX4mndzpLQKBS1DVYhGAcYaYt7vsHNIvQV+WXMvnow5cgjPphq5CaayLaGsjRdSCKZFNGt7/GYAuXaNOiYCA==} - tinybench@2.9.0: - resolution: {integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==} + tinybench@6.2.2: + resolution: {integrity: sha512-nIZ2N2dFpjBsg2hgitKu7mA+FvsIJuGJOwysRngmVRRmWgR/UyPjwJj8c/fT/dhm8EkHnF5EOogRf+0Z2qrimA==} + engines: {node: '>=20.0.0'} tinyexec@1.1.2: resolution: {integrity: sha512-dAqSqE/RabpBKI8+h26GfLq6Vb3JVXs30XYQjdMjaj/c2tS8IYYMbIzP599KtRj7c57/wYApb3QjgRgXmrCukA==} engines: {node: '>=18'} + tinyexec@1.3.1: + resolution: {integrity: sha512-GCvB3aoys96IuDFBMcTB46JOR6mdMtAToqwiW8JlWhsoh1mhHi/xn9ss/Dg7N555GiJyEt2qzoG/NHCwM6h1EA==} + engines: {node: '>=18'} + tinyglobby@0.2.17: resolution: {integrity: sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g==} engines: {node: '>=12.0.0'} @@ -6798,10 +6904,6 @@ packages: resolution: {integrity: sha512-jBrmx4lYmaC9k/mgPbylxs7kBUxHtD8256up+HjLaDFfXScKJQyil+SWXSvhAtT7XHo+yTVlpB81PGmHP8oLSQ==} engines: {node: ^20.0.0 || >=22.0.0} - tinyrainbow@3.1.0: - resolution: {integrity: sha512-Bf+ILmBgretUrdJxzXM0SgXLZ3XfiaUuOj/IKQHuTXip+05Xn+uyEYdVg0kYDipTBcLrCVyUzAPz7QmArb0mmw==} - engines: {node: '>=14.0.0'} - tmpl@1.0.5: resolution: {integrity: sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==} @@ -6923,6 +7025,11 @@ packages: engines: {node: '>=14.17'} hasBin: true + typescript@7.0.2: + resolution: {integrity: sha512-8FYau96o3NKOhbjKi/qNvG/W5jhzxkbdm5sj9AbZ/5T5sWqn3hJgLfGx27sRKZWTvyzCP8dLRBTf5tBTSRVUNA==} + engines: {node: '>=16.20.0'} + hasBin: true + ua-parser-js@1.0.41: resolution: {integrity: sha512-LbBDqdIC5s8iROCUjMbW1f5dJQTEFB1+KO9ogbvlb3nm9n4YHa5p4KTvFPWvh2Hs8gZMBuiB1/8+pdfe/tDPug==} hasBin: true @@ -7075,23 +7182,23 @@ packages: yaml: optional: true - vitest@4.1.12: - resolution: {integrity: sha512-5eWdz2yb3ajxWF3C8C4TjkXl7FGm3n2E/VlazALrQHzK7nYMSGFnCZto0bbPNl77AwkOZVLk0YnBAejUu0NiWA==} - engines: {node: ^20.0.0 || ^22.0.0 || >=24.0.0} + vitest@5.0.5: + resolution: {integrity: sha512-cPODOMF8YnkiiYtDdHo6n4wWmBrOBBbOIYH2d33M4l3CdNn72h+qMmO6uXffUN6A5AZFXNND/d+krS9mgkXRfg==} + engines: {node: ^22.12.0 || ^24.0.0 || >=26.0.0} hasBin: true peerDependencies: '@edge-runtime/vm': '*' '@opentelemetry/api': ^1.9.0 - '@types/node': ^20.0.0 || ^22.0.0 || >=24.0.0 - '@vitest/browser-playwright': 4.1.12 - '@vitest/browser-preview': 4.1.12 - '@vitest/browser-webdriverio': ^4.1.11 - '@vitest/coverage-istanbul': 4.1.12 - '@vitest/coverage-v8': 4.1.12 - '@vitest/ui': 4.1.12 + '@types/node': ^22.0.0 || >=24.0.0 + '@vitest/browser-playwright': 5.0.5 + '@vitest/browser-preview': 5.0.5 + '@vitest/browser-webdriverio': ^5.0.0-beta.5 || >=5.0.0 + '@vitest/coverage-istanbul': 5.0.5 + '@vitest/coverage-v8': 5.0.5 + '@vitest/ui': 5.0.5 happy-dom: '*' jsdom: '*' - vite: ^6.0.0 || ^7.0.0 || ^8.0.0 + vite: ^6.4.0 || ^7.0.0 || ^8.0.0 peerDependenciesMeta: '@edge-runtime/vm': optional: true @@ -7182,9 +7289,9 @@ packages: engines: {node: '>= 8'} hasBin: true - why-is-node-running@2.3.0: - resolution: {integrity: sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==} - engines: {node: '>=8'} + why-is-node-running@3.2.1: + resolution: {integrity: sha512-Tb2FUhB4vUsGQlfSquQLYkApkuPAFQXGFzxWKHHumVz2dK+X1RUm/HnID4+TfIGYJ1kTcwOaCk/buYCEJr6YjQ==} + engines: {node: '>=20.11'} hasBin: true word-wrap@1.2.5: @@ -8711,23 +8818,23 @@ snapshots: '@expo-google-fonts/material-symbols@0.4.34': {} - '@expo/cli@55.0.36(@expo/dom-webview@55.0.6)(@expo/metro-runtime@55.0.12)(expo-constants@55.0.17)(expo-font@55.0.8)(expo-router@55.0.18)(expo@55.0.31)(react-dom@19.2.8(react@19.2.8))(react-native@0.83.10(patch_hash=22bc31f0a057b1f96d9949b38a7ccde81225f617c0f243820dc8a455c91debfb)(@babel/core@7.29.7(supports-color@8.1.1))(@react-native/metro-config@0.85.2(@babel/core@7.29.7(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.8)(supports-color@8.1.1))(react@19.2.8)(supports-color@8.1.1)(typescript@6.0.3)': + '@expo/cli@55.0.36(patch_hash=9ccdef43e1ef80ee4d68b4ed213c145660c2dcf4241cab6593da42f0847583c7)(@expo/dom-webview@55.0.6)(@expo/metro-runtime@55.0.12)(expo-constants@55.0.17)(expo-font@55.0.8)(expo-router@55.0.18)(expo@55.0.31)(react-dom@19.2.8(react@19.2.8))(react-native@0.83.10(patch_hash=22bc31f0a057b1f96d9949b38a7ccde81225f617c0f243820dc8a455c91debfb)(@babel/core@7.29.7(supports-color@8.1.1))(@react-native/metro-config@0.85.2(@babel/core@7.29.7(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.8)(supports-color@8.1.1))(react@19.2.8)(supports-color@8.1.1)(typescript@7.0.2)': dependencies: '@expo/code-signing-certificates': 0.0.6 - '@expo/config': 55.0.21(supports-color@8.1.1)(typescript@6.0.3) + '@expo/config': 55.0.21(supports-color@8.1.1)(typescript@7.0.2) '@expo/config-plugins': 55.0.11(supports-color@8.1.1) '@expo/devcert': 1.2.1(supports-color@8.1.1) '@expo/env': 2.1.3(supports-color@8.1.1) - '@expo/image-utils': 0.8.17(supports-color@8.1.1)(typescript@6.0.3) + '@expo/image-utils': 0.8.17(supports-color@8.1.1)(typescript@7.0.2) '@expo/json-file': 10.2.0 '@expo/log-box': 55.0.13(@expo/dom-webview@55.0.6)(expo@55.0.31)(react-native@0.83.10(patch_hash=22bc31f0a057b1f96d9949b38a7ccde81225f617c0f243820dc8a455c91debfb)(@babel/core@7.29.7(supports-color@8.1.1))(@react-native/metro-config@0.85.2(@babel/core@7.29.7(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.8)(supports-color@8.1.1))(react@19.2.8) '@expo/metro': 55.1.2(supports-color@8.1.1) - '@expo/metro-config': 55.0.27(expo@55.0.31)(supports-color@8.1.1)(typescript@6.0.3) + '@expo/metro-config': 55.0.27(expo@55.0.31)(supports-color@8.1.1)(typescript@7.0.2) '@expo/osascript': 2.7.0 '@expo/package-manager': 1.13.0 '@expo/plist': 0.5.4 - '@expo/prebuild-config': 55.0.22(expo@55.0.31)(supports-color@8.1.1)(typescript@6.0.3) - '@expo/require-utils': 55.0.8(supports-color@8.1.1)(typescript@6.0.3) + '@expo/prebuild-config': 55.0.22(expo@55.0.31)(supports-color@8.1.1)(typescript@7.0.2) + '@expo/require-utils': 55.0.8(supports-color@8.1.1)(typescript@7.0.2) '@expo/router-server': 55.0.19(@expo/metro-runtime@55.0.12)(expo-constants@55.0.17)(expo-font@55.0.8)(expo-router@55.0.18)(expo-server@55.0.12)(expo@55.0.31)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(supports-color@8.1.1) '@expo/schema-utils': 55.0.5 '@expo/spawn-async': 1.8.0 @@ -8746,7 +8853,7 @@ snapshots: connect: 3.7.0(supports-color@8.1.1) debug: 4.4.3(supports-color@8.1.1) dnssd-advertise: 1.1.6 - expo: 55.0.31(bbbc70ae8e0994c0f174d72b91639b84) + expo: 55.0.31(ffb18d8db340712289e23538af5a7293) expo-server: 55.0.12 fetch-nodeshim: 0.4.10 getenv: 2.0.0 @@ -8848,12 +8955,12 @@ snapshots: - supports-color - typescript - '@expo/config@55.0.21(supports-color@8.1.1)(typescript@6.0.3)': + '@expo/config@55.0.21(supports-color@8.1.1)(typescript@7.0.2)': dependencies: '@expo/config-plugins': 55.0.11(supports-color@8.1.1) '@expo/config-types': 55.0.6 '@expo/json-file': 10.2.0 - '@expo/require-utils': 55.0.8(supports-color@8.1.1)(typescript@6.0.3) + '@expo/require-utils': 55.0.8(supports-color@8.1.1)(typescript@7.0.2) deepmerge: 4.3.1 getenv: 2.0.0 glob: 13.0.6 @@ -8880,7 +8987,7 @@ snapshots: '@expo/dom-webview@55.0.6(expo@55.0.31)(react-native@0.83.10(patch_hash=22bc31f0a057b1f96d9949b38a7ccde81225f617c0f243820dc8a455c91debfb)(@babel/core@7.29.7(supports-color@8.1.1))(@react-native/metro-config@0.85.2(@babel/core@7.29.7(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.8)(supports-color@8.1.1))(react@19.2.8)': dependencies: - expo: 55.0.31(bbbc70ae8e0994c0f174d72b91639b84) + expo: 55.0.31(ffb18d8db340712289e23538af5a7293) react: 19.2.8 react-native: 0.83.10(patch_hash=22bc31f0a057b1f96d9949b38a7ccde81225f617c0f243820dc8a455c91debfb)(@babel/core@7.29.7(supports-color@8.1.1))(@react-native/metro-config@0.85.2(@babel/core@7.29.7(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.8)(supports-color@8.1.1) @@ -8916,9 +9023,9 @@ snapshots: transitivePeerDependencies: - supports-color - '@expo/image-utils@0.8.17(supports-color@8.1.1)(typescript@6.0.3)': + '@expo/image-utils@0.8.17(supports-color@8.1.1)(typescript@7.0.2)': dependencies: - '@expo/require-utils': 55.0.8(supports-color@8.1.1)(typescript@6.0.3) + '@expo/require-utils': 55.0.8(supports-color@8.1.1)(typescript@7.0.2) '@expo/spawn-async': 1.8.0 chalk: 4.1.2 getenv: 2.0.0 @@ -8949,9 +9056,9 @@ snapshots: '@babel/code-frame': 7.29.7 json5: 2.2.3 - '@expo/local-build-cache-provider@55.0.16(supports-color@8.1.1)(typescript@6.0.3)': + '@expo/local-build-cache-provider@55.0.16(supports-color@8.1.1)(typescript@7.0.2)': dependencies: - '@expo/config': 55.0.21(supports-color@8.1.1)(typescript@6.0.3) + '@expo/config': 55.0.21(supports-color@8.1.1)(typescript@7.0.2) chalk: 4.1.2 transitivePeerDependencies: - supports-color @@ -8961,17 +9068,17 @@ snapshots: dependencies: '@expo/dom-webview': 55.0.6(expo@55.0.31)(react-native@0.83.10(patch_hash=22bc31f0a057b1f96d9949b38a7ccde81225f617c0f243820dc8a455c91debfb)(@babel/core@7.29.7(supports-color@8.1.1))(@react-native/metro-config@0.85.2(@babel/core@7.29.7(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.8)(supports-color@8.1.1))(react@19.2.8) anser: 1.4.10 - expo: 55.0.31(bbbc70ae8e0994c0f174d72b91639b84) + expo: 55.0.31(ffb18d8db340712289e23538af5a7293) react: 19.2.8 react-native: 0.83.10(patch_hash=22bc31f0a057b1f96d9949b38a7ccde81225f617c0f243820dc8a455c91debfb)(@babel/core@7.29.7(supports-color@8.1.1))(@react-native/metro-config@0.85.2(@babel/core@7.29.7(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.8)(supports-color@8.1.1) stacktrace-parser: 0.1.11 - '@expo/metro-config@55.0.27(expo@55.0.31)(supports-color@8.1.1)(typescript@6.0.3)': + '@expo/metro-config@55.0.27(expo@55.0.31)(supports-color@8.1.1)(typescript@7.0.2)': dependencies: '@babel/code-frame': 7.29.7 '@babel/core': 7.29.7(supports-color@8.1.1) '@babel/generator': 7.29.8 - '@expo/config': 55.0.21(supports-color@8.1.1)(typescript@6.0.3) + '@expo/config': 55.0.21(supports-color@8.1.1)(typescript@7.0.2) '@expo/env': 2.1.3(supports-color@8.1.1) '@expo/json-file': 10.0.16 '@expo/metro': 55.1.2(supports-color@8.1.1) @@ -8988,7 +9095,7 @@ snapshots: postcss: 8.5.25 resolve-from: 5.0.0 optionalDependencies: - expo: 55.0.31(bbbc70ae8e0994c0f174d72b91639b84) + expo: 55.0.31(ffb18d8db340712289e23538af5a7293) transitivePeerDependencies: - bufferutil - supports-color @@ -8999,7 +9106,7 @@ snapshots: dependencies: '@expo/log-box': 55.0.13(@expo/dom-webview@55.0.6)(expo@55.0.31)(react-native@0.83.10(patch_hash=22bc31f0a057b1f96d9949b38a7ccde81225f617c0f243820dc8a455c91debfb)(@babel/core@7.29.7(supports-color@8.1.1))(@react-native/metro-config@0.85.2(@babel/core@7.29.7(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.8)(supports-color@8.1.1))(react@19.2.8) anser: 1.4.10 - expo: 55.0.31(bbbc70ae8e0994c0f174d72b91639b84) + expo: 55.0.31(ffb18d8db340712289e23538af5a7293) pretty-format: 29.7.0 react: 19.2.8 react-native: 0.83.10(patch_hash=22bc31f0a057b1f96d9949b38a7ccde81225f617c0f243820dc8a455c91debfb)(@babel/core@7.29.7(supports-color@8.1.1))(@react-native/metro-config@0.85.2(@babel/core@7.29.7(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.8)(supports-color@8.1.1) @@ -9060,16 +9167,16 @@ snapshots: base64-js: 1.5.1 xmlbuilder: 15.1.1 - '@expo/prebuild-config@55.0.22(expo@55.0.31)(supports-color@8.1.1)(typescript@6.0.3)': + '@expo/prebuild-config@55.0.22(expo@55.0.31)(supports-color@8.1.1)(typescript@7.0.2)': dependencies: - '@expo/config': 55.0.21(supports-color@8.1.1)(typescript@6.0.3) + '@expo/config': 55.0.21(supports-color@8.1.1)(typescript@7.0.2) '@expo/config-plugins': 55.0.11(supports-color@8.1.1) '@expo/config-types': 55.0.6 - '@expo/image-utils': 0.8.17(supports-color@8.1.1)(typescript@6.0.3) + '@expo/image-utils': 0.8.17(supports-color@8.1.1)(typescript@7.0.2) '@expo/json-file': 10.2.0 '@react-native/normalize-colors': 0.83.10 debug: 4.4.3(supports-color@8.1.1) - expo: 55.0.31(bbbc70ae8e0994c0f174d72b91639b84) + expo: 55.0.31(ffb18d8db340712289e23538af5a7293) resolve-from: 5.0.0 semver: 7.8.5 xml2js: 0.6.0 @@ -9087,20 +9194,20 @@ snapshots: transitivePeerDependencies: - supports-color - '@expo/require-utils@55.0.8(supports-color@8.1.1)(typescript@6.0.3)': + '@expo/require-utils@55.0.8(supports-color@8.1.1)(typescript@7.0.2)': dependencies: '@babel/code-frame': 7.29.7 '@babel/core': 7.29.7(supports-color@8.1.1) '@babel/plugin-transform-modules-commonjs': 7.29.7(@babel/core@7.29.7(supports-color@8.1.1))(supports-color@8.1.1) optionalDependencies: - typescript: 6.0.3 + typescript: 7.0.2 transitivePeerDependencies: - supports-color '@expo/router-server@55.0.19(@expo/metro-runtime@55.0.12)(expo-constants@55.0.17)(expo-font@55.0.8)(expo-router@55.0.18)(expo-server@55.0.12)(expo@55.0.31)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(supports-color@8.1.1)': dependencies: debug: 4.4.3(supports-color@8.1.1) - expo: 55.0.31(bbbc70ae8e0994c0f174d72b91639b84) + expo: 55.0.31(ffb18d8db340712289e23538af5a7293) expo-constants: 55.0.17(expo@55.0.31)(react-native@0.83.10(patch_hash=22bc31f0a057b1f96d9949b38a7ccde81225f617c0f243820dc8a455c91debfb)(@babel/core@7.29.7(supports-color@8.1.1))(@react-native/metro-config@0.85.2(@babel/core@7.29.7(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.8)(supports-color@8.1.1))(supports-color@8.1.1) expo-font: 55.0.8(expo@55.0.31)(react-native@0.83.10(patch_hash=22bc31f0a057b1f96d9949b38a7ccde81225f617c0f243820dc8a455c91debfb)(@babel/core@7.29.7(supports-color@8.1.1))(@react-native/metro-config@0.85.2(@babel/core@7.29.7(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.8)(supports-color@8.1.1))(react@19.2.8) expo-server: 55.0.12 @@ -9369,6 +9476,8 @@ snapshots: '@jridgewell/sourcemap-codec@1.5.5': {} + '@jridgewell/sourcemap-codec@1.6.0': {} + '@jridgewell/trace-mapping@0.3.31': dependencies: '@jridgewell/resolve-uri': 3.1.2 @@ -9385,7 +9494,7 @@ snapshots: '@orca/expo-two-way-audio@file:packages/expo-two-way-audio(expo@55.0.31)(react-native@0.83.10(patch_hash=22bc31f0a057b1f96d9949b38a7ccde81225f617c0f243820dc8a455c91debfb)(@babel/core@7.29.7(supports-color@8.1.1))(@react-native/metro-config@0.85.2(@babel/core@7.29.7(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.8)(supports-color@8.1.1))(react@19.2.8)': dependencies: - expo: 55.0.31(bbbc70ae8e0994c0f174d72b91639b84) + expo: 55.0.31(ffb18d8db340712289e23538af5a7293) react: 19.2.8 react-native: 0.83.10(patch_hash=22bc31f0a057b1f96d9949b38a7ccde81225f617c0f243820dc8a455c91debfb)(@babel/core@7.29.7(supports-color@8.1.1))(@react-native/metro-config@0.85.2(@babel/core@7.29.7(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.8)(supports-color@8.1.1) @@ -10104,8 +10213,6 @@ snapshots: dependencies: '@sinonjs/commons': 3.0.1 - '@standard-schema/spec@1.1.0': {} - '@testing-library/react-native@13.3.3(jest@29.7.0(@types/node@26.6.2)(supports-color@8.1.1))(react-native@0.83.10(patch_hash=22bc31f0a057b1f96d9949b38a7ccde81225f617c0f243820dc8a455c91debfb)(@babel/core@7.29.7(supports-color@8.1.1))(@react-native/metro-config@0.85.2(@babel/core@7.29.7(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.8)(supports-color@8.1.1))(react-test-renderer@19.2.8(react@19.2.8))(react@19.2.8)': dependencies: jest-matcher-utils: 30.3.0 @@ -10485,6 +10592,66 @@ snapshots: '@typescript/native-preview-win32-arm64': 7.0.0-dev.20260707.2 '@typescript/native-preview-win32-x64': 7.0.0-dev.20260707.2 + '@typescript/typescript-aix-ppc64@7.0.2': + optional: true + + '@typescript/typescript-darwin-arm64@7.0.2': + optional: true + + '@typescript/typescript-darwin-x64@7.0.2': + optional: true + + '@typescript/typescript-freebsd-arm64@7.0.2': + optional: true + + '@typescript/typescript-freebsd-x64@7.0.2': + optional: true + + '@typescript/typescript-linux-arm64@7.0.2': + optional: true + + '@typescript/typescript-linux-arm@7.0.2': + optional: true + + '@typescript/typescript-linux-loong64@7.0.2': + optional: true + + '@typescript/typescript-linux-mips64el@7.0.2': + optional: true + + '@typescript/typescript-linux-ppc64@7.0.2': + optional: true + + '@typescript/typescript-linux-riscv64@7.0.2': + optional: true + + '@typescript/typescript-linux-s390x@7.0.2': + optional: true + + '@typescript/typescript-linux-x64@7.0.2': + optional: true + + '@typescript/typescript-netbsd-arm64@7.0.2': + optional: true + + '@typescript/typescript-netbsd-x64@7.0.2': + optional: true + + '@typescript/typescript-openbsd-arm64@7.0.2': + optional: true + + '@typescript/typescript-openbsd-x64@7.0.2': + optional: true + + '@typescript/typescript-sunos-x64@7.0.2': + optional: true + + '@typescript/typescript-win32-arm64@7.0.2': + optional: true + + '@typescript/typescript-win32-x64@7.0.2': + optional: true + '@ungap/structured-clone@1.3.1': {} '@upsetjs/venn.js@2.0.0': @@ -10492,46 +10659,16 @@ snapshots: d3-selection: 3.0.0 d3-transition: 3.0.1(d3-selection@3.0.0) - '@vitest/expect@4.1.12': + '@vitest/mocker@5.0.5(vite@8.3.4(@types/node@26.6.2)(esbuild@0.28.2)(terser@5.51.2)(tsx@4.23.15)(yaml@2.9.1))': dependencies: - '@standard-schema/spec': 1.1.0 - '@types/chai': 5.2.3 - '@vitest/spy': 4.1.12 - '@vitest/utils': 4.1.12 - chai: 6.2.2 - tinyrainbow: 3.1.0 - - '@vitest/mocker@4.1.12(vite@8.3.4(@types/node@26.6.2)(esbuild@0.28.2)(terser@5.51.2)(tsx@4.23.15)(yaml@2.9.1))': - dependencies: - '@vitest/spy': 4.1.12 + '@jridgewell/trace-mapping': 0.3.31 + '@vitest/spy': 5.0.5 estree-walker: 3.0.3 - magic-string: 0.30.21 + magic-string: 1.4.3 optionalDependencies: vite: 8.3.4(@types/node@26.6.2)(esbuild@0.28.2)(terser@5.51.2)(tsx@4.23.15)(yaml@2.9.1) - '@vitest/pretty-format@4.1.12': - dependencies: - tinyrainbow: 3.1.0 - - '@vitest/runner@4.1.12': - dependencies: - '@vitest/utils': 4.1.12 - pathe: 2.0.3 - - '@vitest/snapshot@4.1.12': - dependencies: - '@vitest/pretty-format': 4.1.12 - '@vitest/utils': 4.1.12 - magic-string: 0.30.21 - pathe: 2.0.3 - - '@vitest/spy@4.1.12': {} - - '@vitest/utils@4.1.12': - dependencies: - '@vitest/pretty-format': 4.1.12 - convert-source-map: 2.0.0 - tinyrainbow: 3.1.0 + '@vitest/spy@5.0.5': {} '@xmldom/xmldom@0.8.15': {} @@ -10852,7 +10989,7 @@ snapshots: resolve-from: 5.0.0 optionalDependencies: '@babel/runtime': 7.29.7 - expo: 55.0.31(bbbc70ae8e0994c0f174d72b91639b84) + expo: 55.0.31(ffb18d8db340712289e23538af5a7293) transitivePeerDependencies: - '@babel/core' - supports-color @@ -10885,7 +11022,7 @@ snapshots: resolve-from: 5.0.0 optionalDependencies: '@babel/runtime': 7.29.7 - expo: 55.0.31(bbbc70ae8e0994c0f174d72b91639b84) + expo: 55.0.31(ffb18d8db340712289e23538af5a7293) transitivePeerDependencies: - '@babel/core' - supports-color @@ -11002,7 +11139,7 @@ snapshots: caniuse-lite@1.0.30001810: {} - chai@6.2.2: {} + chai@6.3.0: {} chalk@2.4.2: dependencies: @@ -11646,7 +11783,7 @@ snapshots: iterator.prototype: 1.1.5 math-intrinsics: 1.1.0 - es-module-lexer@2.1.0: {} + es-module-lexer@2.3.2: {} es-object-atoms@1.1.1: dependencies: @@ -11967,7 +12104,7 @@ snapshots: exit@0.1.2: {} - expect-type@1.3.0: {} + expect-type@1.4.0: {} expect@29.7.0: dependencies: @@ -11979,12 +12116,12 @@ snapshots: expo-application@55.0.19(expo@55.0.31): dependencies: - expo: 55.0.31(bbbc70ae8e0994c0f174d72b91639b84) + expo: 55.0.31(ffb18d8db340712289e23538af5a7293) - expo-asset@55.0.20(expo@55.0.31)(react-native@0.83.10(patch_hash=22bc31f0a057b1f96d9949b38a7ccde81225f617c0f243820dc8a455c91debfb)(@babel/core@7.29.7(supports-color@8.1.1))(@react-native/metro-config@0.85.2(@babel/core@7.29.7(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.8)(supports-color@8.1.1))(react@19.2.8)(supports-color@8.1.1)(typescript@6.0.3): + expo-asset@55.0.20(expo@55.0.31)(react-native@0.83.10(patch_hash=22bc31f0a057b1f96d9949b38a7ccde81225f617c0f243820dc8a455c91debfb)(@babel/core@7.29.7(supports-color@8.1.1))(@react-native/metro-config@0.85.2(@babel/core@7.29.7(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.8)(supports-color@8.1.1))(react@19.2.8)(supports-color@8.1.1)(typescript@7.0.2): dependencies: - '@expo/image-utils': 0.8.17(supports-color@8.1.1)(typescript@6.0.3) - expo: 55.0.31(bbbc70ae8e0994c0f174d72b91639b84) + '@expo/image-utils': 0.8.17(supports-color@8.1.1)(typescript@7.0.2) + expo: 55.0.31(ffb18d8db340712289e23538af5a7293) expo-constants: 55.0.17(expo@55.0.31)(react-native@0.83.10(patch_hash=22bc31f0a057b1f96d9949b38a7ccde81225f617c0f243820dc8a455c91debfb)(@babel/core@7.29.7(supports-color@8.1.1))(@react-native/metro-config@0.85.2(@babel/core@7.29.7(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.8)(supports-color@8.1.1))(supports-color@8.1.1) react: 19.2.8 react-native: 0.83.10(patch_hash=22bc31f0a057b1f96d9949b38a7ccde81225f617c0f243820dc8a455c91debfb)(@babel/core@7.29.7(supports-color@8.1.1))(@react-native/metro-config@0.85.2(@babel/core@7.29.7(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.8)(supports-color@8.1.1) @@ -11995,14 +12132,14 @@ snapshots: expo-build-properties@55.0.18(expo@55.0.31): dependencies: '@expo/schema-utils': 55.0.5 - expo: 55.0.31(bbbc70ae8e0994c0f174d72b91639b84) + expo: 55.0.31(ffb18d8db340712289e23538af5a7293) resolve-from: 5.0.0 semver: 7.8.5 expo-camera@55.0.23(@types/emscripten@1.41.5)(expo@55.0.31)(react-native-web@0.21.3(react-dom@19.2.8(react@19.2.8))(react@19.2.8))(react-native@0.83.10(patch_hash=22bc31f0a057b1f96d9949b38a7ccde81225f617c0f243820dc8a455c91debfb)(@babel/core@7.29.7(supports-color@8.1.1))(@react-native/metro-config@0.85.2(@babel/core@7.29.7(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.8)(supports-color@8.1.1))(react@19.2.8): dependencies: barcode-detector: 3.1.3(@types/emscripten@1.41.5) - expo: 55.0.31(bbbc70ae8e0994c0f174d72b91639b84) + expo: 55.0.31(ffb18d8db340712289e23538af5a7293) react: 19.2.8 react-native: 0.83.10(patch_hash=22bc31f0a057b1f96d9949b38a7ccde81225f617c0f243820dc8a455c91debfb)(@babel/core@7.29.7(supports-color@8.1.1))(@react-native/metro-config@0.85.2(@babel/core@7.29.7(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.8)(supports-color@8.1.1) optionalDependencies: @@ -12012,25 +12149,25 @@ snapshots: expo-clipboard@55.0.17(expo@55.0.31)(react-native@0.83.10(patch_hash=22bc31f0a057b1f96d9949b38a7ccde81225f617c0f243820dc8a455c91debfb)(@babel/core@7.29.7(supports-color@8.1.1))(@react-native/metro-config@0.85.2(@babel/core@7.29.7(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.8)(supports-color@8.1.1))(react@19.2.8): dependencies: - expo: 55.0.31(bbbc70ae8e0994c0f174d72b91639b84) + expo: 55.0.31(ffb18d8db340712289e23538af5a7293) react: 19.2.8 react-native: 0.83.10(patch_hash=22bc31f0a057b1f96d9949b38a7ccde81225f617c0f243820dc8a455c91debfb)(@babel/core@7.29.7(supports-color@8.1.1))(@react-native/metro-config@0.85.2(@babel/core@7.29.7(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.8)(supports-color@8.1.1) expo-constants@55.0.17(expo@55.0.31)(react-native@0.83.10(patch_hash=22bc31f0a057b1f96d9949b38a7ccde81225f617c0f243820dc8a455c91debfb)(@babel/core@7.29.7(supports-color@8.1.1))(@react-native/metro-config@0.85.2(@babel/core@7.29.7(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.8)(supports-color@8.1.1))(supports-color@8.1.1): dependencies: '@expo/env': 2.1.3(supports-color@8.1.1) - expo: 55.0.31(bbbc70ae8e0994c0f174d72b91639b84) + expo: 55.0.31(ffb18d8db340712289e23538af5a7293) react-native: 0.83.10(patch_hash=22bc31f0a057b1f96d9949b38a7ccde81225f617c0f243820dc8a455c91debfb)(@babel/core@7.29.7(supports-color@8.1.1))(@react-native/metro-config@0.85.2(@babel/core@7.29.7(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.8)(supports-color@8.1.1) transitivePeerDependencies: - supports-color expo-crypto@55.0.19(expo@55.0.31): dependencies: - expo: 55.0.31(bbbc70ae8e0994c0f174d72b91639b84) + expo: 55.0.31(ffb18d8db340712289e23538af5a7293) expo-dev-client@55.0.40(expo@55.0.31): dependencies: - expo: 55.0.31(bbbc70ae8e0994c0f174d72b91639b84) + expo: 55.0.31(ffb18d8db340712289e23538af5a7293) expo-dev-launcher: 55.0.41(expo@55.0.31) expo-dev-menu: 55.0.34(expo@55.0.31) expo-dev-menu-interface: 55.0.2(expo@55.0.31) @@ -12040,57 +12177,57 @@ snapshots: expo-dev-launcher@55.0.41(expo@55.0.31): dependencies: '@expo/schema-utils': 55.0.5 - expo: 55.0.31(bbbc70ae8e0994c0f174d72b91639b84) + expo: 55.0.31(ffb18d8db340712289e23538af5a7293) expo-dev-menu: 55.0.34(expo@55.0.31) expo-manifests: 55.0.21(expo@55.0.31) expo-dev-menu-interface@55.0.2(expo@55.0.31): dependencies: - expo: 55.0.31(bbbc70ae8e0994c0f174d72b91639b84) + expo: 55.0.31(ffb18d8db340712289e23538af5a7293) expo-dev-menu@55.0.34(expo@55.0.31): dependencies: - expo: 55.0.31(bbbc70ae8e0994c0f174d72b91639b84) + expo: 55.0.31(ffb18d8db340712289e23538af5a7293) expo-dev-menu-interface: 55.0.2(expo@55.0.31) expo-document-picker@55.0.17(expo@55.0.31): dependencies: - expo: 55.0.31(bbbc70ae8e0994c0f174d72b91639b84) + expo: 55.0.31(ffb18d8db340712289e23538af5a7293) expo-file-system@55.0.26(expo@55.0.31)(react-native@0.83.10(patch_hash=22bc31f0a057b1f96d9949b38a7ccde81225f617c0f243820dc8a455c91debfb)(@babel/core@7.29.7(supports-color@8.1.1))(@react-native/metro-config@0.85.2(@babel/core@7.29.7(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.8)(supports-color@8.1.1)): dependencies: - expo: 55.0.31(bbbc70ae8e0994c0f174d72b91639b84) + expo: 55.0.31(ffb18d8db340712289e23538af5a7293) react-native: 0.83.10(patch_hash=22bc31f0a057b1f96d9949b38a7ccde81225f617c0f243820dc8a455c91debfb)(@babel/core@7.29.7(supports-color@8.1.1))(@react-native/metro-config@0.85.2(@babel/core@7.29.7(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.8)(supports-color@8.1.1) expo-font@55.0.8(expo@55.0.31)(react-native@0.83.10(patch_hash=22bc31f0a057b1f96d9949b38a7ccde81225f617c0f243820dc8a455c91debfb)(@babel/core@7.29.7(supports-color@8.1.1))(@react-native/metro-config@0.85.2(@babel/core@7.29.7(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.8)(supports-color@8.1.1))(react@19.2.8): dependencies: - expo: 55.0.31(bbbc70ae8e0994c0f174d72b91639b84) + expo: 55.0.31(ffb18d8db340712289e23538af5a7293) fontfaceobserver: 2.3.0 react: 19.2.8 react-native: 0.83.10(patch_hash=22bc31f0a057b1f96d9949b38a7ccde81225f617c0f243820dc8a455c91debfb)(@babel/core@7.29.7(supports-color@8.1.1))(@react-native/metro-config@0.85.2(@babel/core@7.29.7(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.8)(supports-color@8.1.1) expo-glass-effect@55.0.11(expo@55.0.31)(react-native@0.83.10(patch_hash=22bc31f0a057b1f96d9949b38a7ccde81225f617c0f243820dc8a455c91debfb)(@babel/core@7.29.7(supports-color@8.1.1))(@react-native/metro-config@0.85.2(@babel/core@7.29.7(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.8)(supports-color@8.1.1))(react@19.2.8): dependencies: - expo: 55.0.31(bbbc70ae8e0994c0f174d72b91639b84) + expo: 55.0.31(ffb18d8db340712289e23538af5a7293) react: 19.2.8 react-native: 0.83.10(patch_hash=22bc31f0a057b1f96d9949b38a7ccde81225f617c0f243820dc8a455c91debfb)(@babel/core@7.29.7(supports-color@8.1.1))(@react-native/metro-config@0.85.2(@babel/core@7.29.7(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.8)(supports-color@8.1.1) expo-haptics@55.0.18(expo@55.0.31): dependencies: - expo: 55.0.31(bbbc70ae8e0994c0f174d72b91639b84) + expo: 55.0.31(ffb18d8db340712289e23538af5a7293) expo-image-loader@55.0.1(expo@55.0.31): dependencies: - expo: 55.0.31(bbbc70ae8e0994c0f174d72b91639b84) + expo: 55.0.31(ffb18d8db340712289e23538af5a7293) expo-image-picker@55.0.24(expo@55.0.31): dependencies: - expo: 55.0.31(bbbc70ae8e0994c0f174d72b91639b84) + expo: 55.0.31(ffb18d8db340712289e23538af5a7293) expo-image-loader: 55.0.1(expo@55.0.31) expo-image@55.0.11(expo@55.0.31)(react-native-web@0.21.3(react-dom@19.2.8(react@19.2.8))(react@19.2.8))(react-native@0.83.10(patch_hash=22bc31f0a057b1f96d9949b38a7ccde81225f617c0f243820dc8a455c91debfb)(@babel/core@7.29.7(supports-color@8.1.1))(@react-native/metro-config@0.85.2(@babel/core@7.29.7(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.8)(supports-color@8.1.1))(react@19.2.8): dependencies: - expo: 55.0.31(bbbc70ae8e0994c0f174d72b91639b84) + expo: 55.0.31(ffb18d8db340712289e23538af5a7293) react: 19.2.8 react-native: 0.83.10(patch_hash=22bc31f0a057b1f96d9949b38a7ccde81225f617c0f243820dc8a455c91debfb)(@babel/core@7.29.7(supports-color@8.1.1))(@react-native/metro-config@0.85.2(@babel/core@7.29.7(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.8)(supports-color@8.1.1) sf-symbols-typescript: 2.2.0 @@ -12101,7 +12238,7 @@ snapshots: expo-keep-awake@55.0.8(expo@55.0.31)(react@19.2.8): dependencies: - expo: 55.0.31(bbbc70ae8e0994c0f174d72b91639b84) + expo: 55.0.31(ffb18d8db340712289e23538af5a7293) react: 19.2.8 expo-linking@55.0.17(expo@55.0.31)(react-native@0.83.10(patch_hash=22bc31f0a057b1f96d9949b38a7ccde81225f617c0f243820dc8a455c91debfb)(@babel/core@7.29.7(supports-color@8.1.1))(@react-native/metro-config@0.85.2(@babel/core@7.29.7(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.8)(supports-color@8.1.1))(react@19.2.8)(supports-color@8.1.1): @@ -12116,7 +12253,7 @@ snapshots: expo-manifests@55.0.21(expo@55.0.31): dependencies: - expo: 55.0.31(bbbc70ae8e0994c0f174d72b91639b84) + expo: 55.0.31(ffb18d8db340712289e23538af5a7293) expo-json-utils: 55.0.2 expo-module-scripts@55.0.2(@babel/core@7.29.7(supports-color@8.1.1))(@babel/runtime@7.29.7)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.29.7(supports-color@8.1.1))(supports-color@8.1.1))(esbuild@0.28.2)(eslint@9.39.4(supports-color@8.1.1))(expo@55.0.31)(jest@29.7.0(@types/node@26.6.2)(supports-color@8.1.1))(prettier@2.8.8)(react-native@0.83.10(patch_hash=22bc31f0a057b1f96d9949b38a7ccde81225f617c0f243820dc8a455c91debfb)(@babel/core@7.29.7(supports-color@8.1.1))(@react-native/metro-config@0.85.2(@babel/core@7.29.7(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.8)(supports-color@8.1.1))(react-refresh@0.14.2)(react-test-renderer@19.2.8(react@19.2.8))(react@19.2.8)(supports-color@8.1.1): @@ -12165,9 +12302,9 @@ snapshots: - supports-color - utf-8-validate - expo-modules-autolinking@55.0.27(supports-color@8.1.1)(typescript@6.0.3): + expo-modules-autolinking@55.0.27(supports-color@8.1.1)(typescript@7.0.2): dependencies: - '@expo/require-utils': 55.0.8(supports-color@8.1.1)(typescript@6.0.3) + '@expo/require-utils': 55.0.8(supports-color@8.1.1)(typescript@7.0.2) '@expo/spawn-async': 1.8.0 chalk: 4.1.2 commander: 7.2.0 @@ -12185,15 +12322,15 @@ snapshots: expo-network@55.0.18(expo@55.0.31)(react@19.2.8): dependencies: - expo: 55.0.31(bbbc70ae8e0994c0f174d72b91639b84) + expo: 55.0.31(ffb18d8db340712289e23538af5a7293) react: 19.2.8 - expo-notifications@55.0.27(patch_hash=ce20843a3daad4185d7e8571788fa323ba4d11984936188790858650a61749c0)(expo@55.0.31)(react-native@0.83.10(patch_hash=22bc31f0a057b1f96d9949b38a7ccde81225f617c0f243820dc8a455c91debfb)(@babel/core@7.29.7(supports-color@8.1.1))(@react-native/metro-config@0.85.2(@babel/core@7.29.7(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.8)(supports-color@8.1.1))(react@19.2.8)(supports-color@8.1.1)(typescript@6.0.3): + expo-notifications@55.0.27(patch_hash=ce20843a3daad4185d7e8571788fa323ba4d11984936188790858650a61749c0)(expo@55.0.31)(react-native@0.83.10(patch_hash=22bc31f0a057b1f96d9949b38a7ccde81225f617c0f243820dc8a455c91debfb)(@babel/core@7.29.7(supports-color@8.1.1))(@react-native/metro-config@0.85.2(@babel/core@7.29.7(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.8)(supports-color@8.1.1))(react@19.2.8)(supports-color@8.1.1)(typescript@7.0.2): dependencies: - '@expo/image-utils': 0.8.17(supports-color@8.1.1)(typescript@6.0.3) + '@expo/image-utils': 0.8.17(supports-color@8.1.1)(typescript@7.0.2) abort-controller: 3.0.0 badgin: 1.2.3 - expo: 55.0.31(bbbc70ae8e0994c0f174d72b91639b84) + expo: 55.0.31(ffb18d8db340712289e23538af5a7293) expo-application: 55.0.19(expo@55.0.31) expo-constants: 55.0.17(expo@55.0.31)(react-native@0.83.10(patch_hash=22bc31f0a057b1f96d9949b38a7ccde81225f617c0f243820dc8a455c91debfb)(@babel/core@7.29.7(supports-color@8.1.1))(@react-native/metro-config@0.85.2(@babel/core@7.29.7(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.8)(supports-color@8.1.1))(supports-color@8.1.1) react: 19.2.8 @@ -12215,7 +12352,7 @@ snapshots: client-only: 0.0.1 debug: 4.4.3(supports-color@8.1.1) escape-string-regexp: 4.0.0 - expo: 55.0.31(bbbc70ae8e0994c0f174d72b91639b84) + expo: 55.0.31(ffb18d8db340712289e23538af5a7293) expo-constants: 55.0.17(expo@55.0.31)(react-native@0.83.10(patch_hash=22bc31f0a057b1f96d9949b38a7ccde81225f617c0f243820dc8a455c91debfb)(@babel/core@7.29.7(supports-color@8.1.1))(@react-native/metro-config@0.85.2(@babel/core@7.29.7(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.8)(supports-color@8.1.1))(supports-color@8.1.1) expo-glass-effect: 55.0.11(expo@55.0.31)(react-native@0.83.10(patch_hash=22bc31f0a057b1f96d9949b38a7ccde81225f617c0f243820dc8a455c91debfb)(@babel/core@7.29.7(supports-color@8.1.1))(@react-native/metro-config@0.85.2(@babel/core@7.29.7(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.8)(supports-color@8.1.1))(react@19.2.8) expo-image: 55.0.11(expo@55.0.31)(react-native-web@0.21.3(react-dom@19.2.8(react@19.2.8))(react@19.2.8))(react-native@0.83.10(patch_hash=22bc31f0a057b1f96d9949b38a7ccde81225f617c0f243820dc8a455c91debfb)(@babel/core@7.29.7(supports-color@8.1.1))(@react-native/metro-config@0.85.2(@babel/core@7.29.7(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.8)(supports-color@8.1.1))(react@19.2.8) @@ -12253,14 +12390,14 @@ snapshots: expo-secure-store@55.0.18(expo@55.0.31): dependencies: - expo: 55.0.31(bbbc70ae8e0994c0f174d72b91639b84) + expo: 55.0.31(ffb18d8db340712289e23538af5a7293) expo-server@55.0.12: {} - expo-splash-screen@55.0.25(expo@55.0.31)(supports-color@8.1.1)(typescript@6.0.3): + expo-splash-screen@55.0.25(expo@55.0.31)(supports-color@8.1.1)(typescript@7.0.2): dependencies: - '@expo/prebuild-config': 55.0.22(expo@55.0.31)(supports-color@8.1.1)(typescript@6.0.3) - expo: 55.0.31(bbbc70ae8e0994c0f174d72b91639b84) + '@expo/prebuild-config': 55.0.22(expo@55.0.31)(supports-color@8.1.1)(typescript@7.0.2) + expo: 55.0.31(ffb18d8db340712289e23538af5a7293) transitivePeerDependencies: - supports-color - typescript @@ -12274,7 +12411,7 @@ snapshots: expo-symbols@55.0.9(expo-font@55.0.8)(expo@55.0.31)(react-native@0.83.10(patch_hash=22bc31f0a057b1f96d9949b38a7ccde81225f617c0f243820dc8a455c91debfb)(@babel/core@7.29.7(supports-color@8.1.1))(@react-native/metro-config@0.85.2(@babel/core@7.29.7(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.8)(supports-color@8.1.1))(react@19.2.8): dependencies: '@expo-google-fonts/material-symbols': 0.4.34 - expo: 55.0.31(bbbc70ae8e0994c0f174d72b91639b84) + expo: 55.0.31(ffb18d8db340712289e23538af5a7293) expo-font: 55.0.8(expo@55.0.31)(react-native@0.83.10(patch_hash=22bc31f0a057b1f96d9949b38a7ccde81225f617c0f243820dc8a455c91debfb)(@babel/core@7.29.7(supports-color@8.1.1))(@react-native/metro-config@0.85.2(@babel/core@7.29.7(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.8)(supports-color@8.1.1))(react@19.2.8) react: 19.2.8 react-native: 0.83.10(patch_hash=22bc31f0a057b1f96d9949b38a7ccde81225f617c0f243820dc8a455c91debfb)(@babel/core@7.29.7(supports-color@8.1.1))(@react-native/metro-config@0.85.2(@babel/core@7.29.7(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.8)(supports-color@8.1.1) @@ -12282,35 +12419,35 @@ snapshots: expo-task-manager@55.0.20(expo@55.0.31)(react-native@0.83.10(patch_hash=22bc31f0a057b1f96d9949b38a7ccde81225f617c0f243820dc8a455c91debfb)(@babel/core@7.29.7(supports-color@8.1.1))(@react-native/metro-config@0.85.2(@babel/core@7.29.7(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.8)(supports-color@8.1.1)): dependencies: - expo: 55.0.31(bbbc70ae8e0994c0f174d72b91639b84) + expo: 55.0.31(ffb18d8db340712289e23538af5a7293) react-native: 0.83.10(patch_hash=22bc31f0a057b1f96d9949b38a7ccde81225f617c0f243820dc8a455c91debfb)(@babel/core@7.29.7(supports-color@8.1.1))(@react-native/metro-config@0.85.2(@babel/core@7.29.7(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.8)(supports-color@8.1.1) unimodules-app-loader: 55.0.5 expo-updates-interface@55.1.6(expo@55.0.31): dependencies: - expo: 55.0.31(bbbc70ae8e0994c0f174d72b91639b84) + expo: 55.0.31(ffb18d8db340712289e23538af5a7293) - expo@55.0.31(bbbc70ae8e0994c0f174d72b91639b84): + expo@55.0.31(ffb18d8db340712289e23538af5a7293): dependencies: '@babel/runtime': 7.29.7 - '@expo/cli': 55.0.36(@expo/dom-webview@55.0.6)(@expo/metro-runtime@55.0.12)(expo-constants@55.0.17)(expo-font@55.0.8)(expo-router@55.0.18)(expo@55.0.31)(react-dom@19.2.8(react@19.2.8))(react-native@0.83.10(patch_hash=22bc31f0a057b1f96d9949b38a7ccde81225f617c0f243820dc8a455c91debfb)(@babel/core@7.29.7(supports-color@8.1.1))(@react-native/metro-config@0.85.2(@babel/core@7.29.7(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.8)(supports-color@8.1.1))(react@19.2.8)(supports-color@8.1.1)(typescript@6.0.3) - '@expo/config': 55.0.21(supports-color@8.1.1)(typescript@6.0.3) + '@expo/cli': 55.0.36(patch_hash=9ccdef43e1ef80ee4d68b4ed213c145660c2dcf4241cab6593da42f0847583c7)(@expo/dom-webview@55.0.6)(@expo/metro-runtime@55.0.12)(expo-constants@55.0.17)(expo-font@55.0.8)(expo-router@55.0.18)(expo@55.0.31)(react-dom@19.2.8(react@19.2.8))(react-native@0.83.10(patch_hash=22bc31f0a057b1f96d9949b38a7ccde81225f617c0f243820dc8a455c91debfb)(@babel/core@7.29.7(supports-color@8.1.1))(@react-native/metro-config@0.85.2(@babel/core@7.29.7(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.8)(supports-color@8.1.1))(react@19.2.8)(supports-color@8.1.1)(typescript@7.0.2) + '@expo/config': 55.0.21(supports-color@8.1.1)(typescript@7.0.2) '@expo/config-plugins': 55.0.11(supports-color@8.1.1) '@expo/devtools': 55.0.3(react-native@0.83.10(patch_hash=22bc31f0a057b1f96d9949b38a7ccde81225f617c0f243820dc8a455c91debfb)(@babel/core@7.29.7(supports-color@8.1.1))(@react-native/metro-config@0.85.2(@babel/core@7.29.7(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.8)(supports-color@8.1.1))(react@19.2.8) '@expo/fingerprint': 0.16.8(supports-color@8.1.1) - '@expo/local-build-cache-provider': 55.0.16(supports-color@8.1.1)(typescript@6.0.3) + '@expo/local-build-cache-provider': 55.0.16(supports-color@8.1.1)(typescript@7.0.2) '@expo/log-box': 55.0.13(@expo/dom-webview@55.0.6)(expo@55.0.31)(react-native@0.83.10(patch_hash=22bc31f0a057b1f96d9949b38a7ccde81225f617c0f243820dc8a455c91debfb)(@babel/core@7.29.7(supports-color@8.1.1))(@react-native/metro-config@0.85.2(@babel/core@7.29.7(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.8)(supports-color@8.1.1))(react@19.2.8) '@expo/metro': 55.1.2(supports-color@8.1.1) - '@expo/metro-config': 55.0.27(expo@55.0.31)(supports-color@8.1.1)(typescript@6.0.3) + '@expo/metro-config': 55.0.27(expo@55.0.31)(supports-color@8.1.1)(typescript@7.0.2) '@expo/vector-icons': 15.1.1(expo-font@55.0.8)(react-native@0.83.10(patch_hash=22bc31f0a057b1f96d9949b38a7ccde81225f617c0f243820dc8a455c91debfb)(@babel/core@7.29.7(supports-color@8.1.1))(@react-native/metro-config@0.85.2(@babel/core@7.29.7(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.8)(supports-color@8.1.1))(react@19.2.8) '@ungap/structured-clone': 1.3.1 babel-preset-expo: 55.0.25(@babel/core@7.29.7(supports-color@8.1.1))(@babel/runtime@7.29.7)(expo@55.0.31)(react-refresh@0.14.2)(supports-color@8.1.1) - expo-asset: 55.0.20(expo@55.0.31)(react-native@0.83.10(patch_hash=22bc31f0a057b1f96d9949b38a7ccde81225f617c0f243820dc8a455c91debfb)(@babel/core@7.29.7(supports-color@8.1.1))(@react-native/metro-config@0.85.2(@babel/core@7.29.7(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.8)(supports-color@8.1.1))(react@19.2.8)(supports-color@8.1.1)(typescript@6.0.3) + expo-asset: 55.0.20(expo@55.0.31)(react-native@0.83.10(patch_hash=22bc31f0a057b1f96d9949b38a7ccde81225f617c0f243820dc8a455c91debfb)(@babel/core@7.29.7(supports-color@8.1.1))(@react-native/metro-config@0.85.2(@babel/core@7.29.7(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.8)(supports-color@8.1.1))(react@19.2.8)(supports-color@8.1.1)(typescript@7.0.2) expo-constants: 55.0.17(expo@55.0.31)(react-native@0.83.10(patch_hash=22bc31f0a057b1f96d9949b38a7ccde81225f617c0f243820dc8a455c91debfb)(@babel/core@7.29.7(supports-color@8.1.1))(@react-native/metro-config@0.85.2(@babel/core@7.29.7(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.8)(supports-color@8.1.1))(supports-color@8.1.1) expo-file-system: 55.0.26(expo@55.0.31)(react-native@0.83.10(patch_hash=22bc31f0a057b1f96d9949b38a7ccde81225f617c0f243820dc8a455c91debfb)(@babel/core@7.29.7(supports-color@8.1.1))(@react-native/metro-config@0.85.2(@babel/core@7.29.7(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.8)(supports-color@8.1.1)) expo-font: 55.0.8(expo@55.0.31)(react-native@0.83.10(patch_hash=22bc31f0a057b1f96d9949b38a7ccde81225f617c0f243820dc8a455c91debfb)(@babel/core@7.29.7(supports-color@8.1.1))(@react-native/metro-config@0.85.2(@babel/core@7.29.7(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.8)(supports-color@8.1.1))(react@19.2.8) expo-keep-awake: 55.0.8(expo@55.0.31)(react@19.2.8) - expo-modules-autolinking: 55.0.27(supports-color@8.1.1)(typescript@6.0.3) + expo-modules-autolinking: 55.0.27(supports-color@8.1.1)(typescript@7.0.2) expo-modules-core: 55.0.26(react-native-worklets@0.8.3(@babel/core@7.29.7(supports-color@8.1.1))(@react-native/metro-config@0.85.2(@babel/core@7.29.7(supports-color@8.1.1))(supports-color@8.1.1))(react-native@0.83.10(patch_hash=22bc31f0a057b1f96d9949b38a7ccde81225f617c0f243820dc8a455c91debfb)(@babel/core@7.29.7(supports-color@8.1.1))(@react-native/metro-config@0.85.2(@babel/core@7.29.7(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.8)(supports-color@8.1.1))(react@19.2.8)(supports-color@8.1.1))(react-native@0.83.10(patch_hash=22bc31f0a057b1f96d9949b38a7ccde81225f617c0f243820dc8a455c91debfb)(@babel/core@7.29.7(supports-color@8.1.1))(@react-native/metro-config@0.85.2(@babel/core@7.29.7(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.8)(supports-color@8.1.1))(react@19.2.8) pretty-format: 29.7.0 react: 19.2.8 @@ -13032,7 +13169,7 @@ snapshots: '@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.7(supports-color@8.1.1))(supports-color@8.1.1) - expo: 55.0.31(bbbc70ae8e0994c0f174d72b91639b84) + expo: 55.0.31(ffb18d8db340712289e23538af5a7293) jest-environment-jsdom: 29.7.0(supports-color@8.1.1) jest-snapshot: 29.7.0(supports-color@8.1.1) jest-watch-select-projects: 2.0.0 @@ -13543,9 +13680,9 @@ snapshots: react-native: 0.83.10(patch_hash=22bc31f0a057b1f96d9949b38a7ccde81225f617c0f243820dc8a455c91debfb)(@babel/core@7.29.7(supports-color@8.1.1))(@react-native/metro-config@0.85.2(@babel/core@7.29.7(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.8)(supports-color@8.1.1) react-native-svg: 15.15.5(react-native@0.83.10(patch_hash=22bc31f0a057b1f96d9949b38a7ccde81225f617c0f243820dc8a455c91debfb)(@babel/core@7.29.7(supports-color@8.1.1))(@react-native/metro-config@0.85.2(@babel/core@7.29.7(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.8)(supports-color@8.1.1))(react@19.2.8) - magic-string@0.30.21: + magic-string@1.4.3: dependencies: - '@jridgewell/sourcemap-codec': 1.5.5 + '@jridgewell/sourcemap-codec': 1.6.0 make-dir@2.1.0: dependencies: @@ -14112,7 +14249,7 @@ snapshots: define-properties: 1.2.1 es-object-atoms: 1.1.1 - obug@2.1.1: {} + obug@3.0.0: {} on-finished@2.3.0: dependencies: @@ -14273,8 +14410,6 @@ snapshots: lru-cache: 11.3.6 minipass: 7.1.3 - pathe@2.0.3: {} - picocolors@1.1.1: {} picomatch@2.3.2: {} @@ -14865,8 +15000,6 @@ snapshots: side-channel-map: 1.0.1 side-channel-weakmap: 1.0.2 - siginfo@2.0.0: {} - signal-exit@3.0.7: {} simple-plist@1.3.1: @@ -14919,8 +15052,6 @@ snapshots: dependencies: escape-string-regexp: 2.0.0 - stackback@0.0.2: {} - stackframe@1.3.4: {} stacktrace-gps@3.1.2: @@ -14942,7 +15073,7 @@ snapshots: statuses@2.0.2: {} - std-env@4.1.0: {} + std-env@4.3.0: {} stop-iteration-iterator@1.1.0: dependencies: @@ -15099,10 +15230,12 @@ snapshots: throat@5.0.0: {} - tinybench@2.9.0: {} + tinybench@6.2.2: {} tinyexec@1.1.2: {} + tinyexec@1.3.1: {} + tinyglobby@0.2.17: dependencies: fdir: 6.5.0(picomatch@4.0.4) @@ -15110,8 +15243,6 @@ snapshots: tinypool@2.2.0: {} - tinyrainbow@3.1.0: {} - tmpl@1.0.5: {} to-regex-range@5.0.1: @@ -15232,6 +15363,29 @@ snapshots: typescript@6.0.3: {} + typescript@7.0.2: + optionalDependencies: + '@typescript/typescript-aix-ppc64': 7.0.2 + '@typescript/typescript-darwin-arm64': 7.0.2 + '@typescript/typescript-darwin-x64': 7.0.2 + '@typescript/typescript-freebsd-arm64': 7.0.2 + '@typescript/typescript-freebsd-x64': 7.0.2 + '@typescript/typescript-linux-arm': 7.0.2 + '@typescript/typescript-linux-arm64': 7.0.2 + '@typescript/typescript-linux-loong64': 7.0.2 + '@typescript/typescript-linux-mips64el': 7.0.2 + '@typescript/typescript-linux-ppc64': 7.0.2 + '@typescript/typescript-linux-riscv64': 7.0.2 + '@typescript/typescript-linux-s390x': 7.0.2 + '@typescript/typescript-linux-x64': 7.0.2 + '@typescript/typescript-netbsd-arm64': 7.0.2 + '@typescript/typescript-netbsd-x64': 7.0.2 + '@typescript/typescript-openbsd-arm64': 7.0.2 + '@typescript/typescript-openbsd-x64': 7.0.2 + '@typescript/typescript-sunos-x64': 7.0.2 + '@typescript/typescript-win32-arm64': 7.0.2 + '@typescript/typescript-win32-x64': 7.0.2 + ua-parser-js@1.0.41: {} uc.micro@2.1.0: {} @@ -15338,28 +15492,22 @@ snapshots: tsx: 4.23.15 yaml: 2.9.1 - vitest@4.1.12(@types/node@26.6.2)(happy-dom@21.0.4)(jsdom@20.0.3(supports-color@8.1.1))(vite@8.3.4(@types/node@26.6.2)(esbuild@0.28.2)(terser@5.51.2)(tsx@4.23.15)(yaml@2.9.1)): + vitest@5.0.5(@types/node@26.6.2)(happy-dom@21.0.4)(jsdom@20.0.3(supports-color@8.1.1))(vite@8.3.4(@types/node@26.6.2)(esbuild@0.28.2)(terser@5.51.2)(tsx@4.23.15)(yaml@2.9.1)): dependencies: - '@vitest/expect': 4.1.12 - '@vitest/mocker': 4.1.12(vite@8.3.4(@types/node@26.6.2)(esbuild@0.28.2)(terser@5.51.2)(tsx@4.23.15)(yaml@2.9.1)) - '@vitest/pretty-format': 4.1.12 - '@vitest/runner': 4.1.12 - '@vitest/snapshot': 4.1.12 - '@vitest/spy': 4.1.12 - '@vitest/utils': 4.1.12 - es-module-lexer: 2.1.0 - expect-type: 1.3.0 - magic-string: 0.30.21 - obug: 2.1.1 - pathe: 2.0.3 + '@types/chai': 5.2.3 + '@vitest/mocker': 5.0.5(vite@8.3.4(@types/node@26.6.2)(esbuild@0.28.2)(terser@5.51.2)(tsx@4.23.15)(yaml@2.9.1)) + chai: 6.3.0 + es-module-lexer: 2.3.2 + expect-type: 1.4.0 + magic-string: 1.4.3 + obug: 3.0.0 picomatch: 4.0.7 - std-env: 4.1.0 - tinybench: 2.9.0 - tinyexec: 1.1.2 + std-env: 4.3.0 + tinybench: 6.2.2 + tinyexec: 1.3.1 tinyglobby: 0.2.17 - tinyrainbow: 3.1.0 vite: 8.3.4(@types/node@26.6.2)(esbuild@0.28.2)(terser@5.51.2)(tsx@4.23.15)(yaml@2.9.1) - why-is-node-running: 2.3.0 + why-is-node-running: 3.2.1 optionalDependencies: '@types/node': 26.6.2 happy-dom: 21.0.4 @@ -15452,10 +15600,7 @@ snapshots: dependencies: isexe: 2.0.0 - why-is-node-running@2.3.0: - dependencies: - siginfo: 2.0.0 - stackback: 0.0.2 + why-is-node-running@3.2.1: {} word-wrap@1.2.5: {} diff --git a/mobile/pnpm-workspace.yaml b/mobile/pnpm-workspace.yaml index 94aa80bbbfe..ba675dcb4cc 100644 --- a/mobile/pnpm-workspace.yaml +++ b/mobile/pnpm-workspace.yaml @@ -28,3 +28,4 @@ patchedDependencies: react-native@0.83.10: patches/react-native@0.83.10.patch braces@3.0.3: patches/braces@3.0.3.patch node-forge@1.4.0: patches/node-forge@1.4.0.patch + '@expo/cli@55.0.36': patches/@expo__cli@55.0.36.patch diff --git a/mobile/scripts/check-tests-typecheck-incremental-cache.test.ts b/mobile/scripts/check-tests-typecheck-incremental-cache.test.ts index d7c283d3622..3e739392033 100644 --- a/mobile/scripts/check-tests-typecheck-incremental-cache.test.ts +++ b/mobile/scripts/check-tests-typecheck-incremental-cache.test.ts @@ -1,31 +1,41 @@ -import { existsSync, mkdtempSync, realpathSync, writeFileSync, unlinkSync } from 'node:fs' -import { tmpdir } from 'node:os' +import { + existsSync, + mkdirSync, + mkdtempSync, + realpathSync, + writeFileSync, + unlinkSync +} from 'node:fs' import { join } from 'node:path' import { expect, it, vi } from 'vitest' +import { supportsTsrs } from '../../config/scripts/tsrs-typecheck-compiler.mjs' import { removeTreeSync } from '../../src/shared/windows-transient-lock-removal' import { collectTypecheckPass, findTsNocheckFiles } from './check-tests-typecheck-ratchet.mjs' +import { resolveMobileTypecheckCommand } from './mobile-typecheck-compiler.mjs' + +const mobileRoot = realpathSync(join(import.meta.dirname, '..')) it.each([ - { compiler: 'javascript', incremental: true }, + ...(supportsTsrs() ? [{ compiler: 'tsrs', incremental: true }] : []), + { compiler: 'bun', incremental: false }, { compiler: 'native', incremental: false } ])( 'rechecks changed types, diagnostics and test membership with $compiler', ({ compiler, incremental }) => { - const root = realpathSync(mkdtempSync(join(tmpdir(), 'orca-mobile-typecheck-'))) - const cache = join(root, '.cache') - vi.stubEnv('ORCA_MOBILE_TYPECHECK_CACHE_DIR', cache) + // Inside mobile so the project resolves mobile's TypeScript, as the real test project does. + const scratch = join(mobileRoot, 'node_modules', '.cache') + mkdirSync(scratch, { recursive: true }) + const root = mkdtempSync(join(scratch, 'orca-mobile-typecheck-')) vi.stubEnv('ORCA_MOBILE_TYPECHECK_COMPILER', compiler) + const buildInfo = resolveMobileTypecheckCommand('tsconfig.test.json', root).args.find((arg) => + arg.endsWith('.tsbuildinfo') + ) + expect(Boolean(buildInfo)).toBe(incremental) try { writeFileSync( join(root, 'tsconfig.test.json'), JSON.stringify({ - compilerOptions: { - strict: true, - skipLibCheck: true, - types: [], - target: 'ES2022', - incremental: true - }, + compilerOptions: { strict: true, skipLibCheck: true, types: [], target: 'ES2022' }, include: ['*.ts'] }) ) @@ -35,7 +45,9 @@ it.each([ writeFileSync(test, source) const clean = collectTypecheckPass(root) expect(clean).toEqual({ failing: [], programTestFiles: ['value.test.ts'] }) - expect(existsSync(join(cache, 'tests.tsbuildinfo'))).toBe(incremental) + if (buildInfo) { + expect(existsSync(buildInfo)).toBe(true) + } expect(existsSync(join(root, 'tsconfig.test.tsbuildinfo'))).toBe(false) expect(collectTypecheckPass(root)).toEqual(clean) @@ -56,7 +68,10 @@ it.each([ } finally { vi.unstubAllEnvs() removeTreeSync(root) + if (buildInfo) { + removeTreeSync(buildInfo) + } } }, - 15_000 + 30_000 ) diff --git a/mobile/scripts/check-tests-typecheck-ratchet.mjs b/mobile/scripts/check-tests-typecheck-ratchet.mjs index 565f9b11bf0..d7013c23747 100644 --- a/mobile/scripts/check-tests-typecheck-ratchet.mjs +++ b/mobile/scripts/check-tests-typecheck-ratchet.mjs @@ -3,7 +3,7 @@ import fs from 'node:fs' import path from 'node:path' import process from 'node:process' import { pathToFileURL } from 'node:url' -import { resolveMobileTypecheckCompiler } from './mobile-typecheck-compiler.mjs' +import { resolveMobileTypecheckCommand } from './mobile-typecheck-compiler.mjs' // Ratchet gate for the mobile test typecheck. // @@ -148,34 +148,17 @@ export function diffBaseline(current, baseline) { } } -function runTsc(root, args, compiler) { - return runProcessSync({ - program: compiler.program, - args: [...compiler.args, ...args], - cwd: root, - timeoutMs: null, - maxOutputBytes: 64 * 1024 * 1024 - }) -} - // tsc exits non-zero on type errors, which is the expected state here, so only a crash is fatal. // One pass answers both questions: --listFiles names the program, the diagnostics name the failures. export function collectTypecheckPass(root = process.cwd()) { - const compiler = resolveMobileTypecheckCompiler() - const cache = process.env.ORCA_MOBILE_TYPECHECK_CACHE_DIR - const result = runTsc( - root, - [ - '--noEmit', - '--listFiles', - '-p', - PROJECT, - ...(cache && !compiler.native - ? ['--incremental', '--tsBuildInfoFile', path.join(cache, 'tests.tsbuildinfo')] - : []) - ], - compiler - ) + const command = resolveMobileTypecheckCommand(PROJECT, root) + const result = runProcessSync({ + program: command.program, + args: [...command.args, '--listFiles'], + cwd: command.cwd, + timeoutMs: null, + maxOutputBytes: 64 * 1024 * 1024 + }) const output = `${result.stdout ?? ''}${result.stderr ?? ''}` return { failing: parseFailingFiles(output), diff --git a/mobile/scripts/mobile-typecheck-compiler.mjs b/mobile/scripts/mobile-typecheck-compiler.mjs index b2486ff9fc2..5031819104f 100644 --- a/mobile/scripts/mobile-typecheck-compiler.mjs +++ b/mobile/scripts/mobile-typecheck-compiler.mjs @@ -1,38 +1,31 @@ -import { createRequire } from 'node:module' -import { dirname, join } from 'node:path' +import { runProcessSync } from '@orca/process-host' +import { resolve } from 'node:path' import { fileURLToPath } from 'node:url' -import { resolveProjectCompilerInfo } from '../../config/scripts/run-typecheck-projects-in-parallel.mjs' +import { resolvePinnedBunExecutable } from '../../config/scripts/pinned-bun-executable.mjs' +import { + resolveTypecheckCommand, + selectTypecheckCompiler +} from '../../config/scripts/run-typecheck-projects-in-parallel.mjs' const root = fileURLToPath(new URL('../..', import.meta.url)) -const require = createRequire(import.meta.url) -export function resolveMobileTypecheckCompiler() { - const mode = process.env.ORCA_MOBILE_TYPECHECK_COMPILER ?? 'javascript' - if (mode !== 'javascript' && mode !== 'native') { - throw new Error(`Unknown mobile typecheck compiler: ${mode}`) +/** + * The root runner's compiler command for a mobile project, run from `cwd` so diagnostics name + * files relative to it. Compiler: ORCA_MOBILE_TYPECHECK_COMPILER (auto|tsrs|bun|native). + */ +export function resolveMobileTypecheckCommand(project, cwd = process.cwd()) { + const requested = process.env.ORCA_MOBILE_TYPECHECK_COMPILER ?? 'auto' + if (!/^(auto|tsrs|bun|native)$/.test(requested)) { + throw new Error(`Unknown mobile typecheck compiler: ${requested}`) } - const native = mode === 'native' - // Expo needs mobile's JavaScript compiler API; CI can use the root native compiler. - const compiler = resolveProjectCompilerInfo( - native ? 'package.json' : 'mobile/tsconfig.json', + const selection = selectTypecheckCompiler(requested, { + root, + resolveBunExecutable: (repoRoot) => resolvePinnedBunExecutable(repoRoot, runProcessSync) + }) + const command = resolveTypecheckCommand(resolve(cwd, project), { + ...selection, + bunThreads: 2, root - ) - if (native) { - // Use the package's resolver, then let process-host hide Windows children. - const getExecutablePath = require( - join(dirname(compiler.program), '../lib/getExePath.js') - ).default - return { - program: getExecutablePath(), - args: ['--incremental', 'false'], - native, - version: compiler.version - } - } - return { - program: process.execPath, - args: [compiler.program], - native, - version: compiler.version - } + }) + return { ...command, cwd, compiler: selection.compiler } } diff --git a/mobile/scripts/typecheck-mobile.mjs b/mobile/scripts/typecheck-mobile.mjs deleted file mode 100644 index 718a43cac6c..00000000000 --- a/mobile/scripts/typecheck-mobile.mjs +++ /dev/null @@ -1,36 +0,0 @@ -import { runProcess } from '@orca/process-host' -import { resolveMobileTypecheckCompiler } from './mobile-typecheck-compiler.mjs' - -const compiler = resolveMobileTypecheckCompiler() -const abort = new AbortController() -// Keep the CLI alive while process-host's termination barrier settles. -const keepAlive = setInterval(() => undefined, 60_000) -let signalExitCode -const interrupt = () => { - signalExitCode ??= 130 - abort.abort() -} -const terminate = () => { - signalExitCode ??= 143 - abort.abort() -} -process.once('SIGINT', interrupt) -process.once('SIGTERM', terminate) -try { - if (compiler.native) { - console.log(`TypeScript ${compiler.version}: native compiler`) - } - const result = await runProcess({ - program: compiler.program, - args: [...compiler.args, '--noEmit', ...process.argv.slice(2)], - stdio: 'inherit', - timeoutMs: null, - signal: abort.signal, - terminationBarrier: true - }) - process.exitCode = signalExitCode ?? result.code ?? 1 -} finally { - clearInterval(keepAlive) - process.removeListener('SIGINT', interrupt) - process.removeListener('SIGTERM', terminate) -} diff --git a/mobile/src/expo-route-module-boundary.test.ts b/mobile/src/expo-route-module-boundary.test.ts index 3870f32c216..72065d5c55f 100644 --- a/mobile/src/expo-route-module-boundary.test.ts +++ b/mobile/src/expo-route-module-boundary.test.ts @@ -1,7 +1,7 @@ import { readFileSync, readdirSync } from 'node:fs' import { fileURLToPath } from 'node:url' import { basename, dirname, extname, join, relative } from 'node:path' -import ts from 'typescript' +import ts from 'typescript-api' import { describe, expect, it } from 'vitest' const appDirectory = fileURLToPath(new URL('../app', import.meta.url)) diff --git a/mobile/src/mobile-web-shell/pressable-control-source-reader.ts b/mobile/src/mobile-web-shell/pressable-control-source-reader.ts index 20ff030eb56..df1cb849e8b 100644 --- a/mobile/src/mobile-web-shell/pressable-control-source-reader.ts +++ b/mobile/src/mobile-web-shell/pressable-control-source-reader.ts @@ -1,4 +1,4 @@ -import ts from 'typescript' +import ts from 'typescript-api' /** * Reads what a Pressable's source says about itself, for the accessibility censuses that judge diff --git a/mobile/src/tasks/mobile-tasks-execution-parity.test-support.ts b/mobile/src/tasks/mobile-tasks-execution-parity.test-support.ts index 6a8767e720f..51e64ac82fa 100644 --- a/mobile/src/tasks/mobile-tasks-execution-parity.test-support.ts +++ b/mobile/src/tasks/mobile-tasks-execution-parity.test-support.ts @@ -1,4 +1,4 @@ -import ts from 'typescript' +import ts from 'typescript-api' import { MOBILE_TASKS_SOURCE_FILES, readMobileTasksSource diff --git a/mobile/src/tasks/mobile-tasks-render-parity.test-support.ts b/mobile/src/tasks/mobile-tasks-render-parity.test-support.ts index bc8c69f9edf..a4004d1115b 100644 --- a/mobile/src/tasks/mobile-tasks-render-parity.test-support.ts +++ b/mobile/src/tasks/mobile-tasks-render-parity.test-support.ts @@ -1,4 +1,4 @@ -import ts from 'typescript' +import ts from 'typescript-api' import { MOBILE_TASKS_SOURCE_FILES, readMobileTasksSource diff --git a/mobile/src/tasks/mobile-tasks-source-family.test-support.ts b/mobile/src/tasks/mobile-tasks-source-family.test-support.ts index 9b7027e2ed1..59720e6c606 100644 --- a/mobile/src/tasks/mobile-tasks-source-family.test-support.ts +++ b/mobile/src/tasks/mobile-tasks-source-family.test-support.ts @@ -1,6 +1,6 @@ import { readFileSync, readdirSync } from 'node:fs' import { join } from 'node:path' -import ts from 'typescript' +import ts from 'typescript-api' const TASKS_DIRECTORY = __dirname const SOURCE_PATTERN = /^(?:MobileTasks.*\.tsx|mobile-tasks-.*\.tsx?|use-mobile-tasks-.*\.tsx?)$/ diff --git a/mobile/src/test-support/rpc-recording/compiled-operation-module.ts b/mobile/src/test-support/rpc-recording/compiled-operation-module.ts index a1d6a643f4f..24632f44545 100644 --- a/mobile/src/test-support/rpc-recording/compiled-operation-module.ts +++ b/mobile/src/test-support/rpc-recording/compiled-operation-module.ts @@ -1,5 +1,5 @@ import { compileFunction } from 'node:vm' -import ts from 'typescript' +import ts from 'typescript-api' type CompiledModule = { source: string diff --git a/mobile/src/test-support/rpc-recording/operation-module-loader.ts b/mobile/src/test-support/rpc-recording/operation-module-loader.ts index 31710e6678a..5e377502728 100644 --- a/mobile/src/test-support/rpc-recording/operation-module-loader.ts +++ b/mobile/src/test-support/rpc-recording/operation-module-loader.ts @@ -1,6 +1,6 @@ import { existsSync, readFileSync } from 'node:fs' import { dirname, resolve } from 'node:path' -import ts from 'typescript' +import ts from 'typescript-api' import { nativeMountingSubstitutes } from './native-mounting-substitutes' import { observeSalvagedReads } from './salvage-observation' import * as deliveryAmbiguity from '../../transport/rpc-delivery-ambiguity' diff --git a/mobile/src/transport/lifecycle-owner.test.ts b/mobile/src/transport/lifecycle-owner.test.ts index c3e2365b6a9..8ba09f1daaa 100644 --- a/mobile/src/transport/lifecycle-owner.test.ts +++ b/mobile/src/transport/lifecycle-owner.test.ts @@ -1,7 +1,7 @@ import { readFileSync } from 'node:fs' import { fileURLToPath } from 'node:url' import { extname, join, relative, resolve } from 'node:path' -import ts from 'typescript' +import ts from 'typescript-api' import { describe, expect, it } from 'vitest' import { censusSourceFiles } from '../test-support/census-source-files' import {