diff --git a/.github/workflows/check-pr.yml b/.github/workflows/check-pr.yml index 6ba70d94e1..0f561fc31f 100644 --- a/.github/workflows/check-pr.yml +++ b/.github/workflows/check-pr.yml @@ -31,9 +31,11 @@ jobs: cache-dependency-path: 'yarn.lock' - name: Install && Build - SDK and Sample App uses: ./.github/actions/install-and-build-sdk + - name: Build SDK + run: yarn build - name: Lint run: yarn lint - - name: Typecheck tests - run: yarn workspace stream-chat-react-native-core test:typecheck + - name: Typecheck packages and example apps + run: yarn typecheck - name: Test run: yarn test:coverage diff --git a/.yarnrc.yml b/.yarnrc.yml index bcad0c902d..5cd8734818 100644 --- a/.yarnrc.yml +++ b/.yarnrc.yml @@ -1,7 +1,5 @@ enableGlobalCache: true -enableHardenedMode: true - enableScripts: false enableTelemetry: false @@ -17,6 +15,7 @@ npmMinimalAgeGate: 3d npmPreapprovedPackages: - stream-chat - react-native-teleport + - react-native-nitro-sound npmPublishProvenance: true diff --git a/AGENTS.md b/AGENTS.md index e8b3190044..f49f37c2ff 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -1,191 +1,401 @@ -# Guidance for AI coding agents +# AGENTS.md -File purpose: operational rules for automated or assisted code changes. Human-facing conceptual docs belong in `README.md` or the docs site. +Guidance for AI coding agents (Claude Code, Copilot, Cursor, Codex, Aider, etc.) working in this repository. Human readers are welcome, but this file is written for tools. + +> **Single source of truth.** `CLAUDE.md` contains nothing but `@AGENTS.md`, which Claude Code expands into this file. Edit this file only — never fork guidance into `CLAUDE.md`. + +Agents should prioritize backwards compatibility, API stability, accessibility, performance discipline and high test coverage when changing code. ## Repository purpose -Stream Chat SDKs for: +Stream Chat React Native SDK monorepo. The core UI SDK lives in `package/` (published as `stream-chat-react-native-core`) and is built on top of the `stream-chat` JS client. Two thin wrappers ship it to the two supported toolchains: -- React Native CLI -- Expo +- `stream-chat-react-native` (`package/native-package/`) — React Native CLI / bare RN +- `stream-chat-expo` (`package/expo-package/`) — Expo -Goals: API stability, backward compatibility, predictable releases, strong test coverage, accessibility, and performance discipline. +Targets iOS and Android. ## Tech & toolchain -- Languages: TypeScript, React (web + native) -- Runtime: Node (use `nvm use` with `.nvmrc`) -- Package manager: Yarn (V1) -- Testing: Jest (unit) -- Lint/Format: ESLint + Prettier -- Build: Package-local build scripts (composed via root) -- Release: Conventional Commits -> automated versioning/publishing -- Platforms: - - React Native: iOS and Android +- **Languages:** TypeScript + React Native +- **Runtime:** Node 24 (`.nvmrc` is `v24`; root `engines.node` is `>=20.19.4`; CI runs `24.x`) +- **Package manager:** Yarn 4.15.0 (Berry). The binary lives at `.yarn/releases/yarn-4.15.0.cjs` and is activated via `yarnPath` in `.yarnrc.yml`. Any globally installed `yarn` (even the Homebrew classic 1.x) acts only as a launcher — no Corepack required. +- **Workspaces:** single root `yarn.lock`; workspaces are `configs/typescript-config`, `package`, `package/native-package`, `package/expo-package`, `examples/SampleApp`, `examples/ExpoMessaging`. **No Lerna.** +- **Testing:** Jest with the `@react-native/jest-preset` + `@testing-library/react-native`. +- **Build:** `react-native-builder-bob` → CommonJS (`lib/commonjs`), ESM (`lib/module`), types (`lib/typescript`) +- **Lint/format:** ESLint 9 flat config + Prettier, strict (`--max-warnings 0`) +- **CI:** GitHub Actions — PR validation on build + lint + typecheck + tests +- **Release:** Conventional Commits + semantic-release, driven by `yarn workspaces foreach` + +### Root configuration files + +`.nvmrc` · `.yarnrc.yml` · `eslint.config.mjs` · `.prettierrc` / `.prettierignore` · `commitlint.config.js` · `configs/typescript-config/` (`base.json`, `library.json` — the shared presets `package/tsconfig.json` extends) · `.editorconfig` · `.husky/` + +Per-package: `package/tsconfig.json` (library) · `package/tsconfig.test.json` (tests) · `package/jest.config.js` · `package/babel.config.js` · `package/i18next.config.ts` + +Respect repo-specific rules. Do not suppress lint rules broadly; justify and scope every exception with an inline comment. + +## Project layout + +- `package/` — core SDK (`stream-chat-react-native-core`) + - `native-package/` — bare RN wrapper (`stream-chat-react-native`) + - `expo-package/` — Expo wrapper (`stream-chat-expo`) + - `shared-native/{ios,android}` — native source shared by both wrappers; synced into them, never edited in place +- `examples/` — `SampleApp` (full-featured), `ExpoMessaging` +- `configs/typescript-config/` — shared `tsconfig` presets +- `ai-docs/` — agent-facing deep dives (see [References](#references)) +- `perf/` — on-device performance toolkit (see [Accessibility, RTL & performance](#accessibility-rtl--performance)) +- `release/` — semantic-release scripts +- `bin/`, `dotgit/hooks/` — release and git-hook scripts + +### SDK source (`package/src/`) + +- `components/` — 27 component directories (`ChannelList`, `MessageList`, `MessageInput`, `Thread`, `Poll`, `ImageGallery`, `ChannelDetails`, `MessageMenu`, …) +- `contexts/` — 40 React Context providers. The primary way components receive state and callbacks. Key ones: `chatContext`, `channelContext`, `messagesContext`, `themeContext`, `translationContext` +- `hooks/` — shared custom hooks; component-specific hooks live in that component's `hooks/` +- `state-store/` — client-side stores on `useSyncExternalStore` with a selector pattern (audio player, video player, image gallery, message overlay, attachment picker, …) +- `store/` — offline SQLite persistence: `OfflineDB.ts`, `SqliteClient.ts`, `schema.ts`, `mappers/`, `apis/` +- `theme/` — theming system + `topologicalResolution.ts` + `generated/` tokens +- `i18n/` — the 13 translation JSON files (the `Streami18n` wrapper class lives in `utils/i18n/`) +- `a11y/` — accessibility primitives (`a11yUtils.ts`, `hooks/`) +- `middlewares/` — command UI middlewares (`attachments.ts`, `emojiControl.ts`) +- `icons/` — SVG icon components +- `mock-builders/` — test fixtures and fakes (also aliased as `mock-builders` in Jest) +- `native.ts` — native-capability interfaces + `registerNativeHandlers()` + +Use the closest folder's patterns and conventions when editing. ## Environment setup -1. `nvm use` -2. `yarn install` -3. (Optional) Verify: `node -v` matches `.nvmrc` -4. `cd package` -5. `yarn install-all && cd ..` -6. Run tests: `yarn test:unit` - -## Project layout (high-level) - -- `package/` - - `native-package/` (`react-native` CLI specific bundle) - - `expo-package/` (`Expo` specific bundle) - - `.` (core UI SDK, shared between both bundles) -- `examples/` - - `ExpoMessaging/` - - `SampleApp/` - - `TypeScriptMessaging/` -- Config roots: linting, tsconfig, playwright, babel -- Do not edit generated output (`lib/`, build artifacts) - -## Core commands (Runbook) - -| Action | Command | -|-------------------------|------------------------------| -| Install deps | `yarn install` | -| Full build | `yarn install-all` | -| Watch (if available) | `yarn start` (add if absent) | -| Lint | `yarn lint` | -| Fix lint (if separate) | `yarn lint --fix` | -| Unit tests (CI profile) | `yarn test:unit` | +```bash +nvm use # Node 24 +yarn install # every workspace, single root lockfile +yarn test:unit # smoke-check the setup +``` + +## Essential commands + +All commands run from the repo root unless noted. + +```bash +# Install +yarn install # every workspace (single root lockfile) +yarn install --immutable # CI-style; fails if yarn.lock would change + +# Build +yarn build # SDK build (commonjs + esm + types) via builder-bob + +# Test +yarn test:unit # all unit tests (sets TZ=UTC) +yarn test:coverage # with coverage — what CI runs +cd package && TZ=UTC npx jest path/to/file.test.tsx # single file + +# Type checking +yarn typecheck # every workspace + example app, in parallel +cd package && yarn test:typecheck # SDK src + tests + mock-builders + +# Lint / format +yarn lint # prettier --list-different + eslint --max-warnings 0 + validate-translations +yarn lint-fix # ALWAYS run this before committing +yarn eslint # eslint a single path + +# Translations +yarn workspace stream-chat-react-native-core build-translations # i18next-cli sync + +# Shared native sync (after editing package/shared-native/) +yarn workspace stream-chat-react-native-core shared-native:sync + +# Sample app +yarn workspace sampleapp start # Metro bundler +yarn workspace sampleapp ios +yarn workspace sampleapp android +``` + +**Type gates — know which one is strict.** `yarn typecheck` fans out to every workspace; each SDK workspace runs `tsc --noEmit -p tsconfig.test.json`, which includes tests and `mock-builders` but relaxes `noUnusedLocals` / `noUnusedParameters`. `package`'s `typecheck` and `test:typecheck` are currently the same command. The **strictest** gate is `yarn build`: bob type-checks with `package/tsconfig.json`, which keeps the unused-symbol rules on and excludes `__tests__` / `mock-builders`. Always run `cd package && yarn test:typecheck` after code changes — `yarn lint` and `yarn test:unit` do not catch all type errors. + +**Adding dependencies.** `.yarnrc.yml` sets `npmMinimalAgeGate: 3d`, so packages published within the last three days are refused unless listed under `npmPreapprovedPackages` (currently `stream-chat`, `react-native-teleport`). `enableScripts: false` disables install scripts globally; per-package opt-ins live in root `dependenciesMeta` (`@swc/core`, `better-sqlite3`, `react-native-nitro-modules`, `unrs-resolver`). `nmHoistingLimits: workspaces` keeps workspace deps unhoisted — expect duplicated copies under each workspace's `node_modules`. + +## Architecture: core concepts + +### Component hierarchy + +``` + # gesture/overlay host, accessibility config + └─ # root: SDK metadata, offline DB, subscriptions + ├─ + └─ # state container: messages, threads, composer + ├─ + ├─ + └─ +``` + +`` is the entry point. It sets SDK metadata on the `stream-chat` client (identifier, device info), disables the JS client's `recoverStateOnReconnect` (the SDK handles recovery itself), registers subscriptions for threads/polls/reminders (cleaned up on unmount), initializes `OfflineDB` when `enableOfflineSupport` is set, and wraps children in `ChatProvider` → `TranslationProvider` → `ThemeProvider` → `ChannelsStateProvider`. + +### Context three-layer pattern + +Every context in `package/src/contexts/` follows the same shape: + +1. `createContext()` with a sentinel default (`DEFAULT_BASE_CONTEXT_VALUE`) +2. an `` wrapper component +3. a `useXContext()` hook that throws when used outside the provider (suppressed in tests via `isTestEnvironment()`) + +Context values are assembled in dedicated `useCreateXContext()` hooks (e.g. `useCreateChannelContext`) that memoize with **selective** dependencies to avoid unnecessary re-renders. + +### Customization: `WithComponents`, not component props + +`ChannelProps` **does not** accept component overrides (that was the v8 API — see `ai-docs/ai-migration.md` §3.1). Slots come from `ComponentsContext`, populated by ``, which merges over the parent context so nesting works (closest wins) and deep-merges the nested `icons` map: + +```tsx + + + + + + +``` + +`package/src/contexts/componentsContext/defaultComponents.ts` is the authority: it exports `DEFAULT_COMPONENTS` with ~173 slots plus a nested `icons` map of ~92 icons, and `ComponentOverrides` is *derived* from it — **adding a default automatically makes it overridable.** Read slots with `useComponentsContext()`, which merges user overrides over the defaults so every slot is guaranteed defined and callers destructure without fallbacks. + +Two mechanics not to "fix": + +- Both `WithComponents` and `useComponentsContext` memoize with `[]` — overrides are read once at mount and **must be stable**. Do not inline an override object that changes identity per render. +- `defaultComponents` is `require`d lazily inside `getDefaults()` to break a circular import (`defaultComponents` → components → `useComponentsContext`). Do not convert it to a static top-level import. + +`Channel`'s own props are behavioral escape hatches instead, typed as `Pick<…ContextValue, …>` over the contexts it provides (handlers like `handleDelete` / `handleReaction`, `messageActions`, `supportedReactions`, `myMessageTheme`, `overrideOwnCapabilities`, …). + +When adding a customizable component: add it to `DEFAULT_COMPONENTS`, then read it via `useComponentsContext()`. + +### State stores + +`state-store/` holds `useSyncExternalStore`-based stores consumed with `useStateStore(store, selector)` for fine-grained subscriptions outside the context system. Define selectors at module scope so they stay referentially stable — an inline selector re-subscribes on every render. + +### Native module abstraction + +`package/src/native.ts` declares TypeScript interfaces for every platform-specific capability (image picking, compression, haptics, audio/video, clipboard, share). Implementations are injected at runtime via `registerNativeHandlers()`: `stream-chat-expo` supplies Expo implementations, `stream-chat-react-native` supplies bare-RN ones. Calling an unregistered handler throws with a message naming the package to import. + +Platform branching uses runtime `Platform.select()` / `Platform.OS` checks. There is **no** `moduleSuffixes` in any tsconfig, and the only platform-suffixed source files are the generated theme tokens (`theme/generated/*/StreamTokens.{ios,android,web}.ts`), resolved by Metro's platform extensions. Do not introduce new `.ios.ts` / `.android.ts` splits. + +### Native / Expo wrapper relationship + +Both wrappers are thin. They: + +1. call `registerNativeHandlers()` with platform-specific implementations +2. export optional dependency wrappers (`Audio`, `Video`, `FlatList`) from `src/optionalDependencies/` +3. re-export everything: `export * from 'stream-chat-react-native-core'` + +Native code shared by both wrappers lives in `package/shared-native/{ios,android}` and is copied into each wrapper by `shared-native:sync`. **Edit `shared-native/`, never the synced copies.** + +## Critical architectural patterns + +- **Memoization:** components use `React.memo()` with custom `areEqual` comparators (not HOCs). Comparators check cheap props before deep message comparison — keep that ordering when extending one. +- **Offline-first:** SQLite-backed persistence with sync-status tracking and a pending-task queue. Writes must go through `OfflineDB`, not raw SQL. +- **Selective memo dependencies:** `useCreateXContext` hooks intentionally omit unstable values. Adding a dependency there can cause a re-render storm; removing one can cause stale UI. Profile before changing. +- **Cancel stale async work:** media and network operations must be cancelled on unmount (`AbortController` for fetch-like APIs, unsubscribe listeners). Check instance IDs / timestamps before applying async results to state to avoid races. + +## Critical gotchas & invariants + +### DO NOT + +1. **Edit generated or synced files** (see below) — regenerate them instead. +2. **Add `channel` or `channel.state` to dependency arrays** — use `channel.cid`, which is stable. +3. **Mutate `channel.state.messages` directly** — go through the `stream-chat` client's state API. +4. **Inline a `useStateStore` selector** — define it at module scope. +5. **Use unguarded web-only APIs in shared code** — it runs on Hermes, not a browser. +6. **Bypass lint or type errors** with broad disables or force merges. + +### Generated / synced files — never hand-edit + +- `package/lib/` and all build artifacts +- `package/src/theme/generated/{light,dark}/StreamTokens.{ios,android,web}.ts` → regenerate with `package/sync-theme.sh` +- `package/{native,expo}-package/{ios,android}/**/shared/` → regenerate with `shared-native:sync` +- `examples/ExpoMessaging/{ios,android}` (prebuild output); `ios/build` and `android/build` in the other sample apps +- `node_modules/` everywhere + +### React Native specifics + +- Clear Metro cache on module-resolution weirdness: `yarn react-native start --reset-cache` (RN CLI) or `yarn expo start --dev-client -c` (Expo) +- Test on **both** iOS and Android for native-module or platform-specific UI changes +- If an example app fails to build or install: + - `watchman watch-del-all && rm -rf ~/Library/Developer/Xcode/DerivedData/*` + - `(cd ios && bundle exec pod install)` (RN CLI sample apps) + - `npx expo prebuild` (after changing `ExpoMessaging`'s `app.json`) + - `rm -rf ios && rm -rf android` (after installing new native modules in `ExpoMessaging`) + +## Testing + +**Policy:** add or extend tests in the matching module's `__tests__/` folder. Cover new public API, bug fixes (as regression tests), and performance-sensitive utilities. Reuse the repo's fakes and mock builders instead of hand-rolling new ones. Do not let global coverage drop. + +**Runner:** Jest (`package/jest.config.js`) with the `@react-native/jest-preset`, `testEnvironment: 'node'`, `TZ=UTC` forced by `yarn test:unit`, `maxWorkers: 2` on CI. `mock-builders(.*)` is aliased to `src/mock-builders`. Test files live alongside source at `src/**/__tests__/*.test.ts(x)`. + +`package/jest-setup.tsx` calls `registerNativeHandlers()` with test doubles and `jest.mock()`s every peer native module (reanimated, worklets, gesture-handler, netinfo, `@gorhom/bottom-sheet`, `@op-engineering/op-sqlite`, `@shopify/flash-list`, safe-area-context, `react-native-teleport`, `RefreshControl`). Add new peer native modules there or tests will fail to resolve them. + +To run one test file, prefer `cd package && TZ=UTC npx jest path/to/file.test.tsx`. The `testRegex` array in `jest.config.js` also accepts a temporary path — revert it before committing. + +**Mock builders** (`package/src/mock-builders/`): + +- `api/initiateClientWithChannels` — creates a test client + channels in one call (fastest path) +- `api/` — response builders (`getOrCreateChannel`, `queryChannels`, `queryMembers`, `sendMessage`, `sendReaction`, `threadReplies`, `error`) plus `useMockedApis` +- `generator/` — `generateMessage()`, `generateChannel()`, `generateUser()`, `generateMember()`, `generateReaction()`, `generateStaticMessage(seed)` (deterministic via UUID v5) +- `attachments.ts` — `generateImageAttachment()`, `generateFileAttachment()`, `generateAudioAttachment()` +- `event/`, `DB/` — event dispatchers and offline-DB fakes + +Tests use `render()` / `renderHook()` from `@testing-library/react-native`. Components and hooks must be wrapped in the required provider stack (e.g. `Chat` → `Channel` → feature provider). Mock methods on the channel/client — never replace the whole object. + +## Build system + +`yarn build` runs `package`'s build: `rimraf lib` → `build-translations` (`i18next-cli sync`) → `bob build` → `copy-translations` (copies `src/i18n` into `lib/typescript/i18n`). + +`react-native-builder-bob` emits three targets from `src`: + +| Target | Output | Entry point in `package.json` | +| ------------ | ---------------- | ----------------------------- | +| `commonjs` | `lib/commonjs` | `main` | +| `module` | `lib/module` | `module` | +| `typescript` | `lib/typescript` | `types` | + +`shared-native:sync` is **not** wired into install or build — run it manually after editing `package/shared-native/`. + +## Theming + +Three-tier token architecture: **primitives** (raw colors) → **semantics** (e.g. `colors.error.primary`) → **components** (per-component overrides). Token references use a `$key` string syntax (e.g. `"$blue500"`) resolved by a topological sort in `package/src/theme/topologicalResolution.ts`, so declaration order does not matter. + +Platform-specific tokens are **generated**: `package/src/theme/generated/{light,dark}/StreamTokens.{ios,android,web}.ts`. Regenerate via `package/sync-theme.sh` when design tokens change — never hand-edit them. + +Custom themes are passed as the `style` prop to ``. `mergeThemes()` deep-merges the custom style over the base theme (deep-cloned via `JSON.parse(JSON.stringify())`). Light/dark mode is auto-detected via `useColorScheme()`. + +## i18n + +- **13 locales** in `package/src/i18n/*.json`: `ar`, `en`, `es`, `fr`, `he`, `hi`, `it`, `ja`, `ko`, `nl`, `pt-br`, `ru`, `tr` +- `Streami18n` (`package/src/utils/i18n/Streami18n.ts`) wraps i18next with per-locale calendar formats (`calendarFormats.ts`); access `t` via `useTranslationContext()` +- Extraction: `yarn workspace stream-chat-react-native-core build-translations` (`i18next-cli sync`, configured in `package/i18next.config.ts`) +- Validation: `validate-translations` runs inside `yarn lint` and in CI — **zero tolerance for empty translation values** +- Adding a string: use `t()` → run `build-translations` → fill in every locale file + +## Offline DB + +The SQLite schema lives in `package/src/store/schema.ts`. Versioning uses `PRAGMA user_version`; a mismatch triggers a **full DB reinit** (there are no incremental migrations). The current version is `SqliteClient.dbVersion` (`package/src/store/SqliteClient.ts`) — bump it whenever the schema changes, or existing installs will read a stale schema. + +`OfflineDB` owns channels, messages, reactions, members, drafts and reminders through `mappers/`. Offline support is opt-in via ``. + +## Accessibility, RTL & performance + +This repo ships three project skills — load the relevant one **before** touching these areas rather than improvising: + +- `.claude/skills/accessibility` — VoiceOver/TalkBack work: interactive components, gestures, modals, lists, media controls, focus behavior, live announcements +- `.claude/skills/rtl` — anything with a horizontal or directional axis: styles, positioning, flex, swipe gestures, animated transforms, icons, text alignment +- `.claude/skills/perf-benchmarking` — on-device measurement: Hermes CPU profiles, render profiling, deterministic call counting, memory/jank capture. Drives `examples/SampleApp` on a connected Android device via the `perf/` toolkit (`scenario-lib.sh`, `capture-hermes-profile.js`, `analyze-react-profile.js`, `analyze-cpuprofile.js`, `android-heap-dump.sh`; see `perf/README.md`). + +Accessibility is **opt-in** — see `ai-docs/accessibility.md` for the full contract. New interactive UI should reuse the primitives in `package/src/a11y/`. + +**Performance guidelines:** minimize re-renders (memoization, stable refs); reach for `React.memo` / `useCallback` / `useMemo` when profiling justifies it, not reflexively; clean up side effects; prefer lazy loading for optional heavy modules; monitor bundle size and justify increases over 2% per package (tracked by the `sdk-size-metrics` workflow). ## API design principles -- Semantic versioning -- Use `@deprecated` JSDoc with replacement guidance +- Semantic versioning; avoid breaking changes, prefer additive evolution +- Public surfaces get explicit TypeScript types/interfaces +- Consistent naming: `camelCase` for functions and properties, `PascalCase` for components and types +- Mark removals with `@deprecated` JSDoc plus replacement guidance - Provide migration docs for breaking changes -- Avoid breaking changes; prefer additive evolution -- Public surfaces: explicit TypeScript types/interfaces -- Consistent naming: `camelCase` for functions/properties, `PascalCase` for components/types ### Deprecation lifecycle -1. Mark with `@deprecated` + rationale + alternative. -2. Maintain for at least one minor release unless security-critical. -3. Add to migration documentation. -4. Remove only in next major. +1. Mark with `@deprecated` + rationale + alternative +2. Maintain for at least one minor release unless security-critical +3. Add to migration documentation +4. Remove only in the next major -## Performance guidelines +## Error & logging policy -- Minimize re-renders (memoization, stable refs) -- Use `React.memo` / `useCallback` / `useMemo` when profiling justifies -- Clean up side effects (`AbortController` for network calls, unsubscribe listeners when unmounting) -- Monitor bundle size; justify increases > 2% per package -- Prefer lazy loading for optional heavy modules -- Avoid unnecessary large dependency additions +- Public API: throw descriptive errors or return typed error results, consistent with existing patterns +- No console noise in production builds; gate internal debug logging behind an env flag +- Never leak credentials or user data in errors -## Error & logging policy +## Contribution rules -- Public API: throw descriptive errors or return typed error results (consistent with existing patterns) -- No console noise in production builds -- Internal debug logging gated behind env flag (if present) -- Never leak credentials/user data in errors +### Linting & formatting -## Concurrency & async +Run `yarn lint-fix` before every commit. Follow the zero-warnings policy — fix new warnings, never introduce any. Scope `eslint-disable` narrowly with an inline rationale; no broad rule disabling. -- Cancel stale async operations (media, network) when components unmount -- Use `AbortController` for fetch-like APIs -- Avoid race conditions: check instance IDs / timestamps before state updates +Prettier: single quotes, trailing commas, 100-char width (120 for Markdown) — see `.prettierrc`. -## Testing strategy +### Git hooks -- Unit: pure functions, small components -- React Native: target minimal smoke + platform logic (avoid flakiness) -- Mocks/fakes: prefer shared test helpers -- Coverage target: maintain or improve existing percentage (fail PR if global coverage drops) -- File naming: `*.test.ts` / `*.spec.ts(x)` -- Add tests for: new public API, bug fixes (regression test), performance-sensitive utilities +- `.husky/commit-msg` → `commitlint --edit` (Conventional Commits enforced) +- `.husky/pre-commit` → `dotgit/hooks/pre-commit-format.sh && dotgit/hooks/pre-commit-reject-binaries.py` +- Root `postinstall` runs `husky` -## CI expectations +### Commits -- Mandatory: build, lint, type check, unit/integration tests, (optionally) E2E smoke -- Node versions: those listed in matrix (see workflow YAML files under `.github/workflows/`) -- Failing or flaky tests: fix or quarantine with justification PR comment (temporary) -- Zero new warnings +[Conventional Commits](https://www.conventionalcommits.org/): `feat:`, `fix:`, `docs:`, `refactor:`, `chore:`, … -## Release workflow (high-level) +``` +feat(MessageInput): add audio recording support -1. Conventional Commit messages on PR merge -2. Release automation aggregates commits -3. Version bump + changelog + tag -4. Publish to registry -5. Deprecations noted in CHANGELOG -6. Ensure docs updated prior to publishing breaking changes +Implement MediaRecorder integration with MP3 encoding. -## Dependency policy +Closes #123 +``` -- Avoid adding large deps without justification (size, maintenance) -- Prefer existing utility packages -- Run `yarn audit` (or equivalent) if adding security-impacting deps -- Keep upgrades separate from feature changes when possible +- Never commit directly to `develop` or `main` — always create a feature branch +- PRs target `develop`; `main` is production releases only +- Never commit unless explicitly requested -## Samples & docs +### Pull requests -- New public feature: update at least one sample app -- Breaking changes: provide migration snippet -- Keep code snippets compilable -- Use placeholder keys (`YOUR_STREAM_KEY`) +Follow `PULL_REQUEST_TEMPLATE.md`. Keep PRs small and focused. -## React Native specifics +- [ ] `yarn lint-fix` passed +- [ ] `yarn test:unit` passed +- [ ] `cd package && yarn test:typecheck` passed +- [ ] `yarn build` succeeds +- [ ] Tests added for changes +- [ ] No new warnings (zero tolerance) +- [ ] Screenshot or video (before/after) for UI changes +- [ ] Public API changes documented +- [ ] Breaking changes labeled clearly in the description -- Clear Metro cache if module resolution has issues: `yarn react-native start --reset-cache` (for RN CLI) or `yarn expo start --dev-client -c` (for `Expo`) -- Test on iOS + Android for native module or platform-specific UI changes -- Avoid unguarded web-only APIs in shared code -- If the apps in `/examples` are failing to build or install, run: - - `watchman watch-del-all && rm -rf ~/Library/Developer/Xcode/DerivedData/*` - - `(cd ios && bundle exec pod install)` (for RN CLI based sample apps) - - `npx expo prebuild` (if changes have been done in `app.json` of `ExpoMessaging`) - - `rm -rf ios && rm -rf android` (if new native modules have been installed in `ExpoMessaging`) +### CI expectations + +`.github/workflows/check-pr.yml` (Node 24): `yarn install --immutable` → `yarn build` → `yarn lint` → `yarn typecheck` → `yarn test:coverage`. Other workflows: `changelog-preview`, `lint-pr-title`, `release`, `sample-distribution`, `sdk-size-metrics`. + +Failing or flaky tests: fix them, or quarantine with a justification comment and a follow-up. + +### Release + +Conventional Commits feed semantic-release; the pipeline uses `yarn workspaces foreach` directly (no Lerna). Release-participating workspaces (core SDK + SampleApp) are hardcoded in `release/release.config.js`. Version bump → changelog → tag → publish; deprecations are noted in `CHANGELOG`. Ensure docs are updated before publishing breaking changes. See `RELEASE_PROCESS.md`. -## Linting & formatting +### Dependency policy -- Run `yarn lint` before commit -- Narrowly scope `eslint-disable` with inline comments and rationale -- No broad rule disabling +Avoid large dependencies without justification (size, maintenance). Prefer existing utilities. Keep upgrades separate from feature changes. Respect the `npmMinimalAgeGate` rule above. -## Commit / PR conventions +### Samples & docs -- Small, focused PRs -- Include tests for changes -- Screenshot or video for UI changes (before/after) -- Label breaking changes clearly in description -- Document public API changes +New public feature: update at least one sample app. Breaking change: provide a migration snippet. Keep code snippets compilable. Use placeholder keys (`YOUR_STREAM_KEY`). -## Security +### Security -- No credentials or real user data -- Use placeholders in examples -- Scripts must error on missing critical env vars -- Avoid introducing unmaintained dependencies +Never commit API keys or real user data. Example code must use obvious placeholders. Scripts must fail closed on missing env vars. Avoid introducing unmaintained dependencies. See `SECURITY.md`. -## Prohibited edits +## Quick agent checklist (per change) -- Do not edit build artifacts - - `package/lib` - - `ios` and `android` directories in `ExpoMessaging` - - `ios/build` and `android/build` in the other sample apps - - `node_modules` everywhere -- Do not bypass lint/type errors with force merges +- `yarn build` succeeds +- `yarn lint` clean, no new warnings +- `cd package && yarn test:typecheck` clean +- `yarn test:unit` green, coverage not reduced +- No generated or synced files modified by hand +- Public API docs updated if the API changed +- Samples updated if a feature surfaced +- Both platforms checked for native or platform-specific UI changes -## Quick agent checklist (per commit) +## References -- Build succeeds -- Lint clean -- Type check clean -- Tests (unit/integration) green -- Coverage not reduced -- Public API docs updated if changed -- Samples updated if feature surfaced -- No new warnings -- No generated files modified +- **Agent deep dives:** `ai-docs/ai-migration.md` (v8 → v9 migration reference — load this instead of the prose upgrade guide for agent-driven migrations), `ai-docs/accessibility.md` (opt-in a11y layer) +- **Repo skills:** `.claude/skills/{accessibility,rtl,perf-benchmarking}`, `perf/README.md` +- **Contributing / process:** `CONTRIBUTING.md`, `RELEASE_PROCESS.md`, `PULL_REQUEST_TEMPLATE.md`, `SECURITY.md` +- **Component docs:** https://getstream.io/chat/docs/sdk/reactnative/ +- **Stream Chat API:** https://getstream.io/chat/docs/javascript/ +- **Stream agent skills** (installed via `getstream init`): https://getstream.io/agent-skills/docs/installation/ --- -Refine this file iteratively for agent clarity; keep human-facing explanations in docs site / `README.md`. +End of machine guidance. Edit this file to refine agent behavior over time; keep human-facing explanations in `README.md` and the docs site. diff --git a/CLAUDE.md b/CLAUDE.md index fbcc43d4e9..c504304a45 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -2,165 +2,6 @@ This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository. -## Repository Overview +All guidance lives in `AGENTS.md` — the single source shared with every other agent (Copilot, Cursor, Codex, …). The import below pulls it in; do not duplicate content here. -Stream Chat React Native SDK monorepo. The main SDK code lives in `package/` (published as `stream-chat-react-native-core`). Built on top of the `stream-chat` JS client library. - -This is a **Yarn 4 (Berry)** workspace monorepo. The Yarn binary lives in `.yarn/releases/yarn-4.15.0.cjs` and is invoked via `yarnPath` in `.yarnrc.yml`; any globally-installed Yarn launcher (e.g. the Homebrew Yarn 1.x) auto-delegates to it. No Corepack required. - -Workspaces: `package`, `package/native-package`, `package/expo-package`, `examples/SampleApp`, `examples/ExpoMessaging`, `examples/TypeScriptMessaging`. There is a single root `yarn.lock`. - -## Common Commands - -All commands below run from the repo root. - -### Install - -```bash -yarn install # Set up every workspace (single root lockfile) -yarn install --immutable # CI-style; fail if yarn.lock would change -``` - -The root `package/`'s `postinstall` runs `husky install` and `yarn shared-native:sync` automatically. - -### Build - -```bash -yarn build # SDK build (commonjs + esm + types) -yarn workspace stream-chat-react-native-core build # Same, explicit form -``` - -### Lint & Format - -```bash -yarn lint # prettier + eslint + translation validation (max-warnings 0) -yarn lint-fix # Auto-fix lint and formatting issues -``` - -### Test - -```bash -yarn test:unit # All unit tests (sets TZ=UTC) -yarn test:coverage # With coverage report -yarn test:typecheck # Type-check tests against tsconfig.test.json (run after any code change) -yarn workspace stream-chat-react-native-core test:unit # Same as `yarn test:unit` -cd package && TZ=UTC npx jest path/to/test.test.tsx # Single test file -``` - -Always run `yarn test:typecheck` after making code changes — `yarn lint` and `yarn test:unit` do not catch all type errors. - -Tests use Jest with `react-native` preset and `@testing-library/react-native`. Test files live alongside source at `src/**/__tests__/*.test.ts(x)`. Mock builders are in `src/mock-builders/`. - -To run a single test, you can also temporarily add the file path to the `testRegex` array in `package/jest.config.js`. - -### Sample App - -```bash -yarn workspace sampleapp start # Metro bundler (alias: cd examples/SampleApp && yarn start) -yarn workspace sampleapp ios # Run iOS -yarn workspace sampleapp android # Run Android -``` - -## Architecture - -### Package Structure - -- `package/` — Main SDK (`stream-chat-react-native-core`) -- `package/native-package/` — React Native native module wrappers -- `package/expo-package/` — Expo-compatible wrapper -- `examples/SampleApp/` — Full sample app with navigation -- `release/` — Semantic release scripts - -### SDK Source (`package/src/`) - -**Component hierarchy**: `` → `` → `` / `` / `` - -- `components/` — UI components (~28 major ones: ChannelList, MessageList, MessageInput, Thread, Poll, ImageGallery, etc.) -- `contexts/` — React Context providers (~33 contexts). The primary way components receive state and callbacks. Key contexts: `ChatContext`, `ChannelContext`, `MessagesContext`, `ThemeContext`, `TranslationContext` -- `hooks/` — Custom hooks (~27+). Access contexts via `useChannelContext()`, `useMessageContext()`, etc. -- `state-store/` — Client-side state stores using `useSyncExternalStore` with selector pattern (audio player, image gallery, message overlay, etc.) -- `store/` — Offline SQLite persistence layer. `OfflineDB` class with mappers for channels, messages, reactions, members, drafts, reminders. Schema in `store/schema.ts` -- `theme/` — Deep theming system (colors, typography, spacing, per-component overrides) via `ThemeContext` -- `i18n/` — Internationalization with i18next (14 languages). `Streami18n` wrapper class -- `middlewares/` — Command UI middlewares (attachments, emoji) -- `icons/` — SVG icon components - -### Key Patterns - -**Component override pattern**: Nearly every UI element is replaceable via props. Parent components (e.g., `Channel`) accept 50+ `React.ComponentType` props for sub-components (`Message`, `MessageContent`, `DateHeader`, `TypingIndicator`, etc.). These props are forwarded into Context providers so deeply nested children can access them without prop drilling. - -**Context three-layer pattern**: Each context follows the same structure: - -1. `createContext()` with a sentinel default value (`DEFAULT_BASE_CONTEXT_VALUE`) -2. A `` wrapper component -3. A `useXContext()` hook that throws if used outside the provider (suppressed in test env via `isTestEnvironment()`) - -Context values are assembled in dedicated `useCreateXContext()` hooks (e.g., `useCreateChannelContext`) that carefully memoize with selective dependencies to avoid unnecessary re-renders. - -**Native module abstraction**: `native.ts` defines TypeScript interfaces for all platform-specific capabilities (image picking, compression, haptics, audio/video, clipboard). Implementations are injected at runtime via `registerNativeHandlers()` — `stream-chat-expo` provides Expo implementations, `stream-chat-react-native` provides bare RN ones. Calling an unregistered handler throws with a message to import the right package. - -**State stores**: `useSyncExternalStore`-based stores in `state-store/` with `useStateStore(store, selector)` for fine-grained subscriptions outside the context system. - -**Memoization**: Components use `React.memo()` with custom `areEqual` comparators (not HOCs) to prevent re-renders. - -**Offline-first**: SQLite-backed persistence with sync status tracking and pending task management. - -**Builder-bob builds**: Outputs CommonJS (`lib/commonjs`), ESM (`lib/module`), and TypeScript declarations (`lib/typescript`). - -### Testing Patterns - -Tests use `renderHook()` and `render()` from `@testing-library/react-native`. Components/hooks must be wrapped in the required provider stack (e.g., `Chat` → `Channel` → feature provider). - -**Mock builders** (`src/mock-builders/`): - -- `api/initiateClientWithChannels.js` — creates a test client + channels in one call -- `generator/` — factories: `generateMessage()`, `generateChannel()`, `generateUser()`, `generateMember()`, `generateStaticMessage(seed)` (deterministic via UUID v5) -- `attachments.js` — `generateImageAttachment()`, `generateFileAttachment()`, `generateAudioAttachment()` - -Reanimated and native modules are mocked via Proxy patterns in test setup files. - -### Theme System - -Themes follow a three-tier token architecture: **Primitives** (raw colors) → **Semantics** (e.g., `colors.error.primary`) → **Components** (per-component overrides). Token references use `$key` string syntax (e.g., `"$blue500"`) and are resolved via topological sort in `theme/topologicalResolution.ts`, so declaration order doesn't matter. - -Platform-specific tokens are **generated** files in `src/theme/generated/{light,dark}/StreamTokens.{ios,android,web}.ts` — regenerate via `sync-theme.sh` if design tokens change; don't hand-edit. - -Custom themes are passed as `style` prop to ``. `mergeThemes()` deep-merges custom style over base theme (deep-cloned via `JSON.parse(JSON.stringify())`). Light/dark mode is auto-detected via `useColorScheme()`. - -### Native / Expo Package Relationship - -`native-package/` and `expo-package/` are thin wrappers around `stream-chat-react-native-core`. They: - -1. Call `registerNativeHandlers()` with platform-specific implementations (native modules vs Expo APIs) -2. Export optional dependency wrappers (`Audio`, `Video`, `FlatList`) from `src/optionalDependencies/` -3. Re-export everything from core: `export * from 'stream-chat-react-native-core'` - -Platform branching uses runtime `Platform.select()` / `Platform.OS` checks — there are no `.ios.ts` / `.android.ts` source file splits. - -### Chat Component (Root Provider) - -`` is the entry point. It: - -- Sets SDK metadata on the `stream-chat` client (identifier, device info) -- Disables the JS client's `recoverStateOnReconnect` (the SDK handles recovery itself) -- Registers subscriptions for threads, polls, and reminders (cleaned up on unmount) -- Initializes `OfflineDB` if `enableOfflineSupport` is true -- Wraps children in: `ChatProvider` → `TranslationProvider` → `ThemeProvider` → `ChannelsStateProvider` - -### Offline DB - -SQLite schema is in `store/schema.ts`. DB versioning uses `PRAGMA user_version` — a version mismatch triggers full DB reinit (no incremental migrations). Current version is tracked in `SqliteClient.dbVersion`. - -### Translations - -Translation JSON files live in `src/i18n/`. `validate-translations` (run as part of `yarn lint`) checks that no translation key has an empty string value. When adding/updating translations, run `yarn build-translations` (i18next-cli sync) to keep files in sync. - -## Conventions - -- **Conventional commits** enforced by commitlint: `feat:`, `fix:`, `docs:`, `refactor:`, etc. -- **ESLint 9 flat config** at `package/eslint.config.mjs`, strict (max-warnings 0) -- **Prettier**: single quotes, trailing commas, 100 char width (see `.prettierrc`) -- **TypeScript strict mode** with platform-specific module suffixes (`.ios`, `.android`, `.web`) -- Git branches: PRs target `develop`, `main` is production releases only -- **Shared native sync**: Root `yarn install`'s postinstall runs `yarn shared-native:sync` automatically. Re-run manually with `yarn workspace stream-chat-react-native-core shared-native:sync` after modifying `package/shared-native/`. -- **No Lerna**: the release pipeline uses `yarn workspaces foreach` directly. Release-participating workspaces (core SDK + SampleApp) are hardcoded in `release/release.config.js`. +@AGENTS.md diff --git a/README.md b/README.md index 64abe39f7e..63d5596964 100644 --- a/README.md +++ b/README.md @@ -19,6 +19,7 @@ - [Stream Chat API](https://getstream.io/chat/) product overview - [Register](https://getstream.io/chat/trial/) to get an API key for Stream Chat - [React Native Chat Tutorial](https://getstream.io/chat/react-native-chat/tutorial/) +- [AI Agent Skills](#-build-with-ai-agents) for Claude Code, Cursor, and Codex - [Chat UI Kit](https://getstream.io/chat/ui-kit/) - [Documentation](https://getstream.io/chat/docs/sdk/reactnative) - [Release Notes](https://github.com/GetStream/stream-chat-react-native/releases) @@ -28,6 +29,7 @@ - [Official React Native SDK for Stream Chat](#official-react-native-sdk-for-stream-chat) - [Contents](#contents) - [📖 React Native Chat Tutorial](#-react-native-chat-tutorial) + - [🤖 Build with AI Agents](#-build-with-ai-agents) - [Free for Makers](#free-for-makers) - [🔮 Example Apps](#-example-apps) - [💬 Keep in mind](#-keep-in-mind) @@ -39,6 +41,26 @@ The best place to start is the [React Native Chat Tutorial](https://getstream.io/chat/react-native-chat/tutorial/). It teaches you how to use this SDK and also shows how to make frequently required changes. +## 🤖 Build with AI Agents + +If you build with an AI coding agent, our [agent skills](https://getstream.io/agent-skills/docs/installation/) teach it how to use this SDK correctly. Install them once: + +```bash +curl -fsSL https://getstream.io/cli.sh | bash +getstream init +``` + +Then reach for the [`/stream-react-native`](https://getstream.io/agent-skills/docs/skills/stream-react-native/) skill: + +``` +/stream-react-native create a new Expo chat app +/stream-react-native upgrade stream-chat-react-native to v9 +``` + +It can scaffold a new Expo or React Native CLI app with the SDK wired up, add Stream to an app you already have, audit an existing integration, or migrate between SDK major versions (including from Sendbird). Works with Claude Code, Cursor, Codex, and any other agent that reads the universal `.agents` location. + +Contributing to this repository with an agent instead? See [AGENTS.md](./AGENTS.md) for repository structure, commands, and conventions. + ## Free for Makers Stream is free for most side and hobby projects. To qualify your project/company needs to have < 5 team members and < $10k in monthly revenue. @@ -46,10 +68,9 @@ For complete pricing details visit our [Chat Pricing Page](https://getstream.io/ ## 🔮 Example Apps -This repo includes 3 example apps. One made with Expo, two in TypeScript. One TypeScript app is a simple implementation for reference, the other is a more full featured app example. +This repo includes 2 example apps. One made with Expo, and a more full featured app example built with the React Native CLI. - [Expo example](https://github.com/GetStream/stream-chat-react-native/tree/develop/examples/ExpoMessaging) -- [Typescript example](https://github.com/GetStream/stream-chat-react-native/tree/develop/examples/TypeScriptMessaging) - [Fully featured messaging application](https://github.com/GetStream/stream-chat-react-native/tree/develop/examples/SampleApp) Besides, our team maintains a dedicated repository for fully-fledged sample applications and demos at [GetStream/react-native-samples](https://github.com/GetStream/react-native-samples). Please consider checking following sample applications: diff --git a/configs/typescript-config/base.json b/configs/typescript-config/base.json new file mode 100644 index 0000000000..dc63c95f3e --- /dev/null +++ b/configs/typescript-config/base.json @@ -0,0 +1,13 @@ +{ + "$schema": "https://json.schemastore.org/tsconfig", + "display": "Stream Base", + "compilerOptions": { + "target": "ES2022", + "strict": true, + "esModuleInterop": true, + "allowSyntheticDefaultImports": true, + "forceConsistentCasingInFileNames": true, + "resolveJsonModule": true, + "skipLibCheck": true + } +} diff --git a/configs/typescript-config/library.json b/configs/typescript-config/library.json new file mode 100644 index 0000000000..19286c2b4f --- /dev/null +++ b/configs/typescript-config/library.json @@ -0,0 +1,24 @@ +{ + "$schema": "https://json.schemastore.org/tsconfig", + "display": "Stream Library (React Native)", + "extends": "./base.json", + "compilerOptions": { + "lib": ["ESNext", "DOM", "DOM.Iterable"], + "module": "esnext", + "moduleResolution": "bundler", + "jsx": "react-native", + "allowJs": true, + "checkJs": false, + "allowUnreachableCode": false, + "allowUnusedLabels": false, + "noFallthroughCasesInSwitch": true, + "noImplicitReturns": true, + "noImplicitUseStrict": false, + "noStrictGenericChecks": false, + "noUnusedLocals": true, + "noUnusedParameters": true, + "noImplicitAny": true, + "strictNullChecks": true, + "noEmitOnError": false + } +} diff --git a/configs/typescript-config/package.json b/configs/typescript-config/package.json new file mode 100644 index 0000000000..5ad832cc6b --- /dev/null +++ b/configs/typescript-config/package.json @@ -0,0 +1,16 @@ +{ + "name": "@stream-io/typescript-config", + "version": "0.0.0", + "description": "Shared TypeScript config presets for the Stream Chat React Native SDK monorepo.", + "license": "SEE LICENSE IN LICENSE", + "private": true, + "files": [ + "base.json", + "library.json" + ], + "exports": { + "./base.json": "./base.json", + "./library.json": "./library.json", + "./package.json": "./package.json" + } +} diff --git a/examples/ExpoMessaging/app/channel/[cid]/index.tsx b/examples/ExpoMessaging/app/channel/[cid]/index.tsx index 7db3afd0c3..2dffc02ddd 100644 --- a/examples/ExpoMessaging/app/channel/[cid]/index.tsx +++ b/examples/ExpoMessaging/app/channel/[cid]/index.tsx @@ -60,8 +60,8 @@ export default function ChannelScreen() { payload, ) => { const { message, defaultHandler, emitter } = payload; - const { shared_location } = message ?? {}; - if (emitter === 'messageContent' && shared_location) { + const shared_location = message?.shared_location; + if (emitter === 'messageContent' && message && shared_location) { // Create url params from shared_location const params = Object.entries(shared_location) .map(([key, value]) => `${key}=${value}`) diff --git a/examples/ExpoMessaging/app/map/[id].tsx b/examples/ExpoMessaging/app/map/[id].tsx index 89a5bad284..59083e80de 100644 --- a/examples/ExpoMessaging/app/map/[id].tsx +++ b/examples/ExpoMessaging/app/map/[id].tsx @@ -13,11 +13,13 @@ import MapView, { MapMarker, Marker } from 'react-native-maps'; import { SafeAreaView } from 'react-native-safe-area-context'; import { Stack, useLocalSearchParams } from 'expo-router'; -import { SharedLocationResponse, StreamChat } from 'stream-chat'; +import { Channel, SharedLocationResponse, StreamChat } from 'stream-chat'; import { useChatContext, useHandleLiveLocationEvents, useTheme } from 'stream-chat-expo'; import { AppContext } from '../../context/AppContext'; +import type { AppTheme } from '@/types/theme'; + export type SharedLiveLocationParamsStringType = SharedLocationResponse & { latitude: string; longitude: string; @@ -40,12 +42,19 @@ const MapScreenFooter = ({ theme: { colors: { accent_blue, accent_red, grey }, }, - } = useTheme(); - const liveLocationActive = isLiveLocationStopped ? false : new Date(end_at) > new Date(); + } = useTheme() as unknown as { theme: AppTheme }; const endedAtDate = end_at ? new Date(end_at) : null; + const liveLocationActive = isLiveLocationStopped + ? false + : endedAtDate + ? endedAtDate > new Date() + : false; const formattedEndedAt = endedAtDate ? endedAtDate.toLocaleString() : ''; const stopSharingLiveLocation = useCallback(async () => { + if (!channel || !locationResponse) { + return; + } await channel.stopLiveLocationSharing(locationResponse); }, [channel, locationResponse]); @@ -53,7 +62,7 @@ const MapScreenFooter = ({ return null; } - const isCurrentUser = user_id === client.user.id; + const isCurrentUser = user_id === client.user?.id; if (!isCurrentUser) { return ( @@ -107,7 +116,7 @@ export default function MapScreen() { theme: { colors: { accent_blue }, }, - } = useTheme(); + } = useTheme() as unknown as { theme: AppTheme }; const { width, height } = useWindowDimensions(); const aspect_ratio = width / height; @@ -131,7 +140,10 @@ export default function MapScreen() { }, []); const { isLiveLocationStopped, locationResponse } = useHandleLiveLocationEvents({ - channel, + // This screen is only reached by navigating from an open channel (which sets `channel` + // in AppContext), so a channel is always present here even though the context type + // allows `undefined`. + channel: channel as Channel, messageId: shared_location.message_id, onLocationUpdate, }); @@ -152,13 +164,15 @@ export default function MapScreen() { const region = useMemo(() => { const latitudeDelta = 0.1; const longitudeDelta = latitudeDelta * aspect_ratio; + // Fall back to the initial coordinates parsed from the route params when no live + // location update has arrived yet, so the values are always concrete numbers. return { - latitude: locationResponse?.latitude, - longitude: locationResponse?.longitude, + latitude: locationResponse?.latitude ?? parseFloat(shared_location.latitude), + longitude: locationResponse?.longitude ?? parseFloat(shared_location.longitude), latitudeDelta, longitudeDelta, }; - }, [aspect_ratio, locationResponse]); + }, [aspect_ratio, locationResponse, shared_location.latitude, shared_location.longitude]); return ( @@ -181,7 +195,7 @@ export default function MapScreen() { @@ -193,7 +207,7 @@ export default function MapScreen() { client={client} shared_location={shared_location} locationResponse={locationResponse} - isLiveLocationStopped={isLiveLocationStopped} + isLiveLocationStopped={isLiveLocationStopped ?? undefined} /> ); diff --git a/examples/ExpoMessaging/components/ChatWrapper.tsx b/examples/ExpoMessaging/components/ChatWrapper.tsx index 8eedbcaed1..3a8da325a8 100644 --- a/examples/ExpoMessaging/components/ChatWrapper.tsx +++ b/examples/ExpoMessaging/components/ChatWrapper.tsx @@ -42,8 +42,11 @@ export const ChatWrapper = ({ children }: PropsWithChildren) => { streami18n.registerTranslation('en', { ...enTranslations, + // Custom translation key used by the live-location feature. It is not part of the + // SDK's `enTranslations` (a closed key set), but i18next resolves arbitrary keys at + // runtime, so we cast to the expected parameter type to register it. 'timestamp/Location end at': '{{ milliseconds | durationFormatter(withSuffix: false) }}', - }); + } as typeof enTranslations); const theme = useStreamChatTheme(); const componentOverrides = useExpoMessagingComponentOverrides(); diff --git a/examples/ExpoMessaging/components/LocationSharing/CreateLocationModal.tsx b/examples/ExpoMessaging/components/LocationSharing/CreateLocationModal.tsx index 6574b7bb95..6459939bcd 100644 --- a/examples/ExpoMessaging/components/LocationSharing/CreateLocationModal.tsx +++ b/examples/ExpoMessaging/components/LocationSharing/CreateLocationModal.tsx @@ -22,6 +22,8 @@ import { useTranslationContext, } from 'stream-chat-expo'; +import type { AppTheme } from '@/types/theme'; + type LiveLocationCreateModalProps = { visible: boolean; onRequestClose: () => void; @@ -41,7 +43,7 @@ export const LiveLocationCreateModal = ({ theme: { colors: { accent_blue, grey, grey_whisper }, }, - } = useTheme(); + } = useTheme() as unknown as { theme: AppTheme }; const { t } = useTranslationContext(); const mapRef = useRef(null); const markerRef = useRef(null); @@ -112,10 +114,13 @@ export const LiveLocationCreateModal = ({ const options: AlertButton[] = endedAtDurations.map((offsetMs) => ({ text: t('timestamp/Location end at', { milliseconds: offsetMs }), onPress: async () => { + if (!location) { + return; + } await messageComposer.locationComposer.setData({ durationMs: offsetMs, - latitude: location?.latitude, - longitude: location?.longitude, + latitude: location.latitude, + longitude: location.longitude, }); await messageComposer.sendLocation(); onRequestClose(); diff --git a/examples/ExpoMessaging/components/LocationSharing/MessageLocation.tsx b/examples/ExpoMessaging/components/LocationSharing/MessageLocation.tsx index 87392f9dab..1ba7e8561b 100644 --- a/examples/ExpoMessaging/components/LocationSharing/MessageLocation.tsx +++ b/examples/ExpoMessaging/components/LocationSharing/MessageLocation.tsx @@ -19,6 +19,8 @@ import { useTheme, } from 'stream-chat-expo'; +import type { AppTheme } from '@/types/theme'; + const MessageLocationFooter = ({ client, shared_location, @@ -32,9 +34,9 @@ const MessageLocationFooter = ({ theme: { colors: { grey }, }, - } = useTheme(); - const liveLocationActive = new Date(end_at) > new Date(); + } = useTheme() as unknown as { theme: AppTheme }; const endedAtDate = end_at ? new Date(end_at) : null; + const liveLocationActive = endedAtDate ? endedAtDate > new Date() : false; const formattedEndedAt = endedAtDate ? endedAtDate.toLocaleString() : ''; const stopSharingLiveLocation = useCallback(async () => { @@ -44,7 +46,7 @@ const MessageLocationFooter = ({ if (!end_at) { return null; } - const isCurrentUser = user_id === client.user.id; + const isCurrentUser = user_id === client.user?.id; if (!isCurrentUser) { return ( @@ -72,7 +74,10 @@ const MessageLocationFooter = ({ export const MessageLocation = ({ message }: MessageLocationProps) => { const { client } = useChatContext(); const { shared_location } = message; - const { latitude, longitude } = shared_location || {}; + // Coordinates are only rendered when `shared_location` exists (the component returns + // `null` below otherwise). Default to 0 so the values are concrete numbers for the + // `Region`/`LatLng` shapes the hooks below build. + const { latitude = 0, longitude = 0 } = shared_location || {}; const mapRef = useRef(null); const markerRef = useRef(null); @@ -83,7 +88,7 @@ export const MessageLocation = ({ message }: MessageLocationProps) => { theme: { colors: { accent_blue }, }, - } = useTheme(); + } = useTheme() as unknown as { theme: AppTheme }; const region = useMemo(() => { const latitudeDelta = 0.1; @@ -132,7 +137,7 @@ export const MessageLocation = ({ message }: MessageLocationProps) => { diff --git a/examples/ExpoMessaging/context/AppContext.tsx b/examples/ExpoMessaging/context/AppContext.tsx index f69d4a2171..70970bdc5f 100644 --- a/examples/ExpoMessaging/context/AppContext.tsx +++ b/examples/ExpoMessaging/context/AppContext.tsx @@ -12,8 +12,8 @@ export type AppContextType = { export const AppContext = createContext({ channel: undefined, - setChannel: undefined, - setThread: undefined, + setChannel: () => {}, + setThread: () => {}, thread: undefined, }); diff --git a/examples/ExpoMessaging/hooks/useStreamChatTheme.ts b/examples/ExpoMessaging/hooks/useStreamChatTheme.ts index 80c9e604b8..3a6330274e 100644 --- a/examples/ExpoMessaging/hooks/useStreamChatTheme.ts +++ b/examples/ExpoMessaging/hooks/useStreamChatTheme.ts @@ -5,7 +5,7 @@ import type { DeepPartial, Theme } from 'stream-chat-expo'; export const useStreamChatTheme = () => { const colorScheme = useColorScheme(); - const getChatStyle = (): DeepPartial => ({ + const getChatStyle = (): DeepPartial & { colors: Record } => ({ avatar: { image: { height: 32, diff --git a/examples/ExpoMessaging/icons/ShareLocationIcon.tsx b/examples/ExpoMessaging/icons/ShareLocationIcon.tsx index 27078b6e1a..0205a05e96 100644 --- a/examples/ExpoMessaging/icons/ShareLocationIcon.tsx +++ b/examples/ExpoMessaging/icons/ShareLocationIcon.tsx @@ -2,13 +2,15 @@ import Svg, { Path } from 'react-native-svg'; import { useTheme } from 'stream-chat-expo'; +import type { AppTheme } from '@/types/theme'; + // Icon for "Share Location" button, next to input box. export const ShareLocationIcon = () => { const { theme: { colors: { grey }, }, - } = useTheme(); + } = useTheme() as unknown as { theme: AppTheme }; return ( ` (see `useStreamChatTheme`), + * so `theme.colors` does exist at runtime. `AppTheme` augments the SDK type to reflect + * that runtime shape so components can read `theme.colors.X` without migrating the colors. + */ +export type AppTheme = Theme & { colors: Record }; diff --git a/examples/README.md b/examples/README.md index d612301eb1..22c247b6b3 100644 --- a/examples/README.md +++ b/examples/README.md @@ -1,6 +1,6 @@ This directory contains all the example apps that use our Stream Chat React Native SDK components. -The three apps -- `SampleApp`, `ExpoMessaging`, `TypeScriptMessaging` -- are Yarn 4 workspaces of the repo root. A single `yarn install` at the repo root sets all of them up; their SDK dependencies (`stream-chat-react-native-core`, `stream-chat-react-native`, `stream-chat-expo`) are wired via `workspace:^`, and each app's `metro.config.js` adds the SDK source to Metro's watch folders and resolution table. +The two apps -- `SampleApp`, `ExpoMessaging` -- are Yarn 4 workspaces of the repo root. A single `yarn install` at the repo root sets all of them up; their SDK dependencies (`stream-chat-react-native-core`, `stream-chat-react-native`, `stream-chat-expo`) are wired via `workspace:^`, and each app's `metro.config.js` adds the SDK source to Metro's watch folders and resolution table. On RN <= 0.72, symlink was not supported by default so the setup has to be done locally through metro config to run the project within the monorepo. The guide below addresses the same -- it remains useful when you want to consume a locally-cloned SDK from an app that lives **outside** this monorepo. diff --git a/examples/SampleApp/ios/AppDelegate.swift b/examples/SampleApp/ios/AppDelegate.swift index 67a20528f0..195e6793fb 100644 --- a/examples/SampleApp/ios/AppDelegate.swift +++ b/examples/SampleApp/ios/AppDelegate.swift @@ -7,11 +7,16 @@ import FirebaseMessaging @main class AppDelegate: UIResponder, UIApplicationDelegate { + // Unused with the scene lifecycle (SceneDelegate owns the window), but Firebase's + // app delegate proxy (GULAppDelegateSwizzler) exposes the optional `window` selector, + // so UIKit calls it and crashes if the property is missing. var window: UIWindow? - + var reactNativeDelegate: ReactNativeDelegate? var reactNativeFactory: RCTReactNativeFactory? - + // Kept for SceneDelegate, which starts React Native once the scene connects + var launchOptions: [UIApplication.LaunchOptionsKey: Any]? + func application( _ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? = nil @@ -23,14 +28,7 @@ class AppDelegate: UIResponder, UIApplicationDelegate { reactNativeDelegate = delegate reactNativeFactory = factory - - window = UIWindow(frame: UIScreen.main.bounds) - - factory.startReactNative( - withModuleName: "SampleApp", - in: window, - launchOptions: launchOptions - ) + self.launchOptions = launchOptions return true } diff --git a/examples/SampleApp/ios/Podfile b/examples/SampleApp/ios/Podfile index acf76595f8..7247ff13b3 100644 --- a/examples/SampleApp/ios/Podfile +++ b/examples/SampleApp/ios/Podfile @@ -75,6 +75,18 @@ target 'SampleApp' do installer.pods_project.targets.each do |target| target.build_configurations.each do |config| config.build_settings['CLANG_ALLOW_NON_MODULAR_INCLUDES_IN_FRAMEWORK_MODULES'] = 'YES' + # Some pods pin an iOS deployment target (e.g. 13.0) below the range + # supported by current Xcode. Clamp them up to the app's minimum. + if config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'].to_f < min_ios_version_supported.to_f + config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] = min_ios_version_supported + end + end + end + + # The Pods project itself can also carry a stale project-level setting. + installer.pods_project.build_configurations.each do |config| + if config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'].to_f < min_ios_version_supported.to_f + config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] = min_ios_version_supported end end end diff --git a/examples/SampleApp/ios/Podfile.lock b/examples/SampleApp/ios/Podfile.lock index a3027370a2..34584cc346 100644 --- a/examples/SampleApp/ios/Podfile.lock +++ b/examples/SampleApp/ios/Podfile.lock @@ -184,7 +184,7 @@ PODS: - nanopb/encode (= 3.30910.0) - nanopb/decode (3.30910.0) - nanopb/encode (3.30910.0) - - NitroModules (0.31.3): + - NitroModules (0.36.5): - hermes-engine - RCTRequired - RCTTypeSafety @@ -207,7 +207,7 @@ PODS: - ReactCommon/turbomodule/core - ReactNativeDependencies - Yoga - - NitroSound (0.2.9): + - NitroSound (0.2.17): - hermes-engine - NitroModules - RCTRequired @@ -2355,9 +2355,9 @@ PODS: - React-runtimeexecutor - ReactCommon/turbomodule/core - ReactNativeDependencies - - ReactAppDependencyProvider (0.86.0): + - ReactAppDependencyProvider (0.86.2): - ReactCodegen - - ReactCodegen (0.86.0): + - ReactCodegen (0.86.2): - hermes-engine - RCTRequired - RCTTypeSafety @@ -2857,7 +2857,7 @@ PODS: - SDWebImageWebPCoder (0.15.0): - libwebp (~> 1.0) - SDWebImage/Core (~> 5.17) - - stream-chat-react-native (9.7.1): + - stream-chat-react-native (9.7.2): - hermes-engine - RCTRequired - RCTTypeSafety @@ -3296,8 +3296,8 @@ SPEC CHECKSUMS: libdav1d: 23581a4d8ec811ff171ed5e2e05cd27bad64c39f libwebp: 02b23773aedb6ff1fd38cec7a77b81414c6842a8 nanopb: fad817b59e0457d11a5dfbde799381cd727c1275 - NitroModules: e2c4f7166ca860e21959433f70818e97be498b88 - NitroSound: cb3c7c6b9d9d4329cc0fed7e566bb58842a1f895 + NitroModules: e0ac5f9a04e23cb2f378b51810ebc07ed63aeae9 + NitroSound: a18e2d59d0d60c291586e622ce4752c53da73086 op-sqlite: d8d5eae2bddb0b55d6f48cf7ac356b63d26cb4f0 PromisesObjC: 752c3227f599e3467650e47ea36f433eeb10c273 PromisesSwift: 217dea0fd5d2ad65222a109c48698add13cc1c5b @@ -3379,8 +3379,8 @@ SPEC CHECKSUMS: React-utils: 25a0beadc5eacbffeb965c7024826b1233dbedc6 React-viewtransitionnativemodule: 8f1d4895e081e0b2f0a98069c098eb40be032138 React-webperformancenativemodule: 5bddf6c7eecda8a3ce48b82609008965cc9d94c2 - ReactAppDependencyProvider: dcdd0e1b9559a6d8d8aea05286f4ed085091978e - ReactCodegen: cd296de5e1c422deebafff34134d1721b5c29704 + ReactAppDependencyProvider: 0e13d430eadac8a2ef18515a860d5c59df05b475 + ReactCodegen: b4e2c5f0d9415b8fe2faf163fca6f40c62f9666a ReactCommon: 9002f006f571256348994183f7d4387aa7cf84e8 ReactNativeDependencies: 2bd6854ade79bf1b60586d1ab7813a389df1b6bf RNCClipboard: 7a7d4557bfd3370b35c99dfecd92ae7b9fc4948a @@ -3399,10 +3399,10 @@ SPEC CHECKSUMS: SDWebImageAVIFCoder: afe194a084e851f70228e4be35ef651df0fc5c57 SDWebImageSVGCoder: 15a300a97ec1c8ac958f009c02220ac0402e936c SDWebImageWebPCoder: 0e06e365080397465cc73a7a9b472d8a3bd0f377 - stream-chat-react-native: b3a7450925e3744152f7a5ee008310274debd6c7 + stream-chat-react-native: e97f6d3ed0c2828b20610ffc0023ad7f9c90738d Teleport: c56b30b08bd20d10da1efb0f21c6bc50c269ee6a Yoga: 542a30dafe5b0f5f1d9f185ea7b2a3811ac54801 -PODFILE CHECKSUM: 265665a90a2835886ea9693f40400a18ed64d6e5 +PODFILE CHECKSUM: ac9682db83e42d63d399a8de4586161e86b3e751 COCOAPODS: 1.15.2 diff --git a/examples/SampleApp/ios/SampleApp.xcodeproj/project.pbxproj b/examples/SampleApp/ios/SampleApp.xcodeproj/project.pbxproj index 0fae7abe33..a56502bb99 100644 --- a/examples/SampleApp/ios/SampleApp.xcodeproj/project.pbxproj +++ b/examples/SampleApp/ios/SampleApp.xcodeproj/project.pbxproj @@ -9,6 +9,7 @@ /* Begin PBXBuildFile section */ 00E356F31AD99517003FC87E /* SampleAppTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 00E356F21AD99517003FC87E /* SampleAppTests.m */; }; 13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB51A68108700A75B9A /* Images.xcassets */; }; + 7C2725B22FF8020100AEF119 /* SceneDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7C2725B12FF8020100AEF119 /* SceneDelegate.swift */; }; 81AB9BB82411601600AC10FF /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 81AB9BB72411601600AC10FF /* LaunchScreen.storyboard */; }; A1FEDE8CBBE9D0E21A2E7B50 /* Pods_SampleApp.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8A95C98F43B825F087087E8A /* Pods_SampleApp.framework */; }; DEC527FA32B96531C12C9B0E /* Pods_SampleApp_SampleAppTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7D8F9A1C211E5EA27FA5C573 /* Pods_SampleApp_SampleAppTests.framework */; }; @@ -35,6 +36,7 @@ 13B07FB51A68108700A75B9A /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Images.xcassets; path = SampleApp/Images.xcassets; sourceTree = ""; }; 13B07FB61A68108700A75B9A /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = Info.plist; path = SampleApp/Info.plist; sourceTree = ""; }; 5CA034D157E1D7F2B7696EF5 /* PrivacyInfo.xcprivacy */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xml; name = PrivacyInfo.xcprivacy; path = SampleApp/PrivacyInfo.xcprivacy; sourceTree = ""; }; + 7C2725B12FF8020100AEF119 /* SceneDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SceneDelegate.swift; sourceTree = ""; }; 7D8F9A1C211E5EA27FA5C573 /* Pods_SampleApp_SampleAppTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_SampleApp_SampleAppTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 81AB9BB72411601600AC10FF /* LaunchScreen.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; name = LaunchScreen.storyboard; path = SampleApp/LaunchScreen.storyboard; sourceTree = ""; }; 8A95C98F43B825F087087E8A /* Pods_SampleApp.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_SampleApp.framework; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -99,6 +101,7 @@ FCA5E58C254B70E600B4E978 /* GoogleService-Info.plist */, 5CA034D157E1D7F2B7696EF5 /* PrivacyInfo.xcprivacy */, FDE391DE2D68D512005AA9DC /* SampleApp-Bridging-Header.h */, + 7C2725B12FF8020100AEF119 /* SceneDelegate.swift */, ); name = SampleApp; sourceTree = ""; @@ -417,6 +420,7 @@ buildActionMask = 2147483647; files = ( FDE391DD2D68D510005AA9DC /* AppDelegate.swift in Sources */, + 7C2725B22FF8020100AEF119 /* SceneDelegate.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; diff --git a/examples/SampleApp/ios/SampleApp/Info.plist b/examples/SampleApp/ios/SampleApp/Info.plist index 52be208683..176719eb66 100644 --- a/examples/SampleApp/ios/SampleApp/Info.plist +++ b/examples/SampleApp/ios/SampleApp/Info.plist @@ -47,6 +47,23 @@ $(PRODUCT_NAME) would like access to your photo gallery to share image in a message. RCTNewArchEnabled + UIApplicationSceneManifest + + UIApplicationSupportsMultipleScenes + + UISceneConfigurations + + UIWindowSceneSessionRoleApplication + + + UISceneConfigurationName + Default Configuration + UISceneDelegateClassName + $(PRODUCT_MODULE_NAME).SceneDelegate + + + + UILaunchStoryboardName LaunchScreen UIRequiredDeviceCapabilities diff --git a/examples/SampleApp/ios/SceneDelegate.swift b/examples/SampleApp/ios/SceneDelegate.swift new file mode 100644 index 0000000000..39abf00e70 --- /dev/null +++ b/examples/SampleApp/ios/SceneDelegate.swift @@ -0,0 +1,26 @@ +import UIKit + +class SceneDelegate: UIResponder, UIWindowSceneDelegate { + var window: UIWindow? + + func scene( + _ scene: UIScene, + willConnectTo session: UISceneSession, + options connectionOptions: UIScene.ConnectionOptions + ) { + guard let windowScene = scene as? UIWindowScene else { return } + guard let appDelegate = UIApplication.shared.delegate as? AppDelegate, + let factory = appDelegate.reactNativeFactory else { return } + + let window = UIWindow(windowScene: windowScene) + + // startReactNative sets the rootViewController and makes the window key and visible + factory.startReactNative( + withModuleName: "SampleApp", + in: window, + launchOptions: appDelegate.launchOptions + ) + + self.window = window + } +} diff --git a/examples/SampleApp/package.json b/examples/SampleApp/package.json index 37e6a31e4d..249da0e7b4 100644 --- a/examples/SampleApp/package.json +++ b/examples/SampleApp/package.json @@ -54,8 +54,8 @@ "react-native-haptic-feedback": "^3.0.0", "react-native-image-picker": "^8.2.1", "react-native-maps": "^1.29.0", - "react-native-nitro-modules": "0.31.3", - "react-native-nitro-sound": "0.2.9", + "react-native-nitro-modules": "0.36.5", + "react-native-nitro-sound": "0.2.17", "react-native-reanimated": "4.5.2", "react-native-safe-area-context": "^5.8.0", "react-native-screens": "^4.26.2", @@ -85,10 +85,11 @@ "@react-native/metro-config": "0.86.2", "@react-native/typescript-config": "0.86.2", "@rnx-kit/metro-config": "^2.1.0", + "@stream-io/typescript-config": "workspace:^", "@types/lodash.mergewith": "^4.6.9", "@types/react": "^19.2.0", "babel-plugin-react-compiler": "^1.0.0", - "typescript": "5.9.3" + "typescript": "6.0.3" }, "engines": { "node": ">=20.19.4" diff --git a/examples/SampleApp/src/components/DraftsList.tsx b/examples/SampleApp/src/components/DraftsList.tsx index 63ca055ef7..956fb7e023 100644 --- a/examples/SampleApp/src/components/DraftsList.tsx +++ b/examples/SampleApp/src/components/DraftsList.tsx @@ -1,9 +1,15 @@ import { useCallback, useEffect, useMemo } from 'react'; import { FlatList, Pressable, StyleSheet, Text, View } from 'react-native'; -import { useIsFocused, useNavigation } from '@react-navigation/native'; +import { NavigationProp, useIsFocused, useNavigation } from '@react-navigation/native'; import dayjs from 'dayjs'; -import { ChannelResponse, DraftMessage, DraftResponse, MessageResponseBase } from 'stream-chat'; +import { + ChannelResponse, + DraftMessage, + DraftResponse, + LocalMessage, + MessageResponseBase, +} from 'stream-chat'; import { useChatContext, useStateStore, @@ -14,6 +20,7 @@ import { import { DraftsIcon } from '../icons/DraftIcon'; import { useLegacyColors } from '../theme/useLegacyColors'; +import type { StackNavigatorParamList } from '../types'; import { DraftManagerState, DraftsManager } from '../utils/DraftsManager'; export type DraftItemProps = { @@ -28,7 +35,7 @@ export type DraftItemProps = { export const DraftItem = ({ type, channel, date, message, thread }: DraftItemProps) => { useTheme(); const { grey } = useLegacyColors(); - const navigation = useNavigation(); + const navigation = useNavigation>(); const { client } = useChatContext(); const messagePreviewText = useMessagePreviewText({ message }); const channelName = channel?.name ? channel.name : 'Channel'; @@ -40,7 +47,12 @@ export const DraftItem = ({ type, channel, date, message, thread }: DraftItemPro if (type === 'thread' && thread?.id) { navigation.navigate('ThreadScreen', { - thread, + // `thread` is a draft's `parent_message` (`MessageResponseBase`, with + // string timestamps). ThreadScreen consumes it as a thread root typed + // as `LocalMessage | ThreadType`; the shapes only differ in date field + // types, so a targeted cast preserves the existing behavior. See the + // `DraftItemProps.thread` TODO about tightening this type upstream. + thread: thread as unknown as LocalMessage, channel: resultChannel, }); } else if (type === 'channel') { diff --git a/examples/SampleApp/src/components/LocationSharing/MessageLocation.tsx b/examples/SampleApp/src/components/LocationSharing/MessageLocation.tsx index f2dd4f7285..a0ee374870 100644 --- a/examples/SampleApp/src/components/LocationSharing/MessageLocation.tsx +++ b/examples/SampleApp/src/components/LocationSharing/MessageLocation.tsx @@ -136,7 +136,7 @@ const MessageLocationComponent = ({ ) : ( - + )} diff --git a/examples/SampleApp/src/components/MessageInfoBottomSheet.tsx b/examples/SampleApp/src/components/MessageInfoBottomSheet.tsx index 0335ab5e8b..b4f29d7127 100644 --- a/examples/SampleApp/src/components/MessageInfoBottomSheet.tsx +++ b/examples/SampleApp/src/components/MessageInfoBottomSheet.tsx @@ -12,6 +12,8 @@ import { UserAvatar, } from 'stream-chat-react-native'; +import type { StreamThemeWithColors } from '../theme/AppTheme'; + const renderUserItem = ({ item }: { item: UserResponse }) => ( @@ -34,7 +36,7 @@ export const MessageInfoBottomSheet = ({ }) => { const { theme: { colors }, - } = useTheme(); + } = useTheme() as unknown as { theme: StreamThemeWithColors }; const { client } = useChatContext(); const deliveredStatus = useMessageDeliveredData({ message }); const readStatus = useMessageReadData({ message }); diff --git a/examples/SampleApp/src/components/MessageSearch/MessageSearchList.tsx b/examples/SampleApp/src/components/MessageSearch/MessageSearchList.tsx index 21d9bb75ec..ff03b2263e 100644 --- a/examples/SampleApp/src/components/MessageSearch/MessageSearchList.tsx +++ b/examples/SampleApp/src/components/MessageSearch/MessageSearchList.tsx @@ -61,130 +61,132 @@ export type MessageSearchListProps = { refreshList?: () => void; showResultCount?: boolean; }; -export const MessageSearchList: React.FC = React.forwardRef( - (props, scrollRef: React.Ref | null>) => { - const { - EmptySearchIndicator, - loading, - loadMore, - messages, - refreshing, - refreshList, - showResultCount = false, - } = props; - const { - theme: { semantics }, - } = useTheme(); - const { black, grey, white_snow } = useLegacyColors(); - const { vw } = useViewport(); - const navigation = - useNavigation>(); +export const MessageSearchList = React.forwardRef< + FlatList | null, + MessageSearchListProps +>((props, scrollRef) => { + const { + EmptySearchIndicator, + loading, + loadMore, + messages, + refreshing, + refreshList, + showResultCount = false, + } = props; + const { + theme: { semantics }, + } = useTheme(); + const { black, grey, white_snow } = useLegacyColors(); + const { vw } = useViewport(); + const navigation = useNavigation>(); - if (!messages && !refreshing) { - return null; - } + if (!messages && !refreshing) { + return null; + } - return ( - <> - {messages && showResultCount && ( - + {messages && showResultCount && ( + + + {`${ + messages.length >= DEFAULT_PAGINATION_LIMIT + ? DEFAULT_PAGINATION_LIMIT + : messages.length + }${messages.length >= DEFAULT_PAGINATION_LIMIT ? '+ ' : ' '} result${ + messages.length === 1 ? '' : 's' + }`} + + + )} + !parent_id) : []} + keyboardDismissMode='on-drag' + ListEmptyComponent={ + loading && !refreshing && (!messages || messages.length === 0) ? ( + + + + ) : ( + EmptySearchIndicator + ) + } + onEndReached={loadMore} + onRefresh={refreshList} + ref={scrollRef} + refreshing={refreshing} + renderItem={({ item }) => ( + { + navigation.navigate('ChannelScreen', { + channelId: item.channel?.id, + messageId: item.id, + }); }} + style={[styles.itemContainer, { borderBottomColor: semantics.borderCoreDefault }]} + testID='channel-preview-button' > - - {`${ - messages.length >= DEFAULT_PAGINATION_LIMIT - ? DEFAULT_PAGINATION_LIMIT - : messages.length - }${messages.length >= DEFAULT_PAGINATION_LIMIT ? '+ ' : ' '} result${ - messages.length === 1 ? '' : 's' - }`} - - - )} - !parent_id) : []} - keyboardDismissMode='on-drag' - ListEmptyComponent={ - loading && !refreshing && (!messages || messages.length === 0) ? ( - - - - ) : ( - EmptySearchIndicator - ) - } - onEndReached={loadMore} - onRefresh={refreshList} - ref={scrollRef} - refreshing={refreshing} - renderItem={({ item }) => ( - { - navigation.navigate('ChannelScreen', { - channelId: item.channel?.id, - messageId: item.id, - }); - }} - style={[styles.itemContainer, { borderBottomColor: semantics.borderCoreDefault }]} - testID='channel-preview-button' - > - {item.user ? : null} + {item.user ? : null} - - - - {`${item.user?.name} `} - {!!item.channel?.name && ( - - in - {` ${item.channel?.name}`} - - )} - - - - - {item.text} - - - {dayjs(item.created_at).calendar(undefined, { - lastDay: 'DD/MM', // The day before ( Yesterday at 2:30 AM ) - lastWeek: 'DD/MM', // Last week ( Last Monday at 2:30 AM ) - sameDay: 'h:mm A', // The same day ( Today at 2:30 AM ) - sameElse: 'DD/MM/YYYY', // Everything else ( 17/10/2011 ) - })} - - + + + + {`${item.user?.name} `} + {!!item.channel?.name && ( + + in + {` ${item.channel?.name}`} + + )} + - - )} - style={styles.flex} - /> - - ); - }, -); + + + {item.text} + + + {dayjs(item.created_at).calendar(undefined, { + lastDay: 'DD/MM', // The day before ( Yesterday at 2:30 AM ) + lastWeek: 'DD/MM', // Last week ( Last Monday at 2:30 AM ) + sameDay: 'h:mm A', // The same day ( Today at 2:30 AM ) + sameElse: 'DD/MM/YYYY', // Everything else ( 17/10/2011 ) + })} + + + + + )} + style={styles.flex} + /> + + ); +}); + +MessageSearchList.displayName = 'MessageSearchList'; diff --git a/examples/SampleApp/src/components/Reminders/ReminderItem.tsx b/examples/SampleApp/src/components/Reminders/ReminderItem.tsx index 0a899b3365..9211ed6378 100644 --- a/examples/SampleApp/src/components/Reminders/ReminderItem.tsx +++ b/examples/SampleApp/src/components/Reminders/ReminderItem.tsx @@ -2,7 +2,7 @@ import { useCallback, useMemo } from 'react'; import { Alert, AlertButton, Pressable, StyleSheet, Text, View } from 'react-native'; -import { useNavigation } from '@react-navigation/native'; +import { NavigationProp, useNavigation } from '@react-navigation/native'; import Swipeable from 'react-native-gesture-handler/ReanimatedSwipeable'; import { ReminderResponse } from 'stream-chat'; @@ -18,12 +18,13 @@ import { import { ReminderBanner } from './ReminderBanner'; import { useLegacyColors } from '../../theme/useLegacyColors'; +import type { StackNavigatorParamList } from '../../types'; export const ReminderItem = ( item: ReminderResponse & { onDeleteHandler?: (id: string) => void }, ) => { const { channel, message } = item; - const navigation = useNavigation(); + const navigation = useNavigation>(); const { client } = useChatContext(); const { t } = useTranslationContext(); const channelName = channel?.name ? channel.name : 'Channel'; diff --git a/examples/SampleApp/src/components/ToastComponent/Toast.tsx b/examples/SampleApp/src/components/ToastComponent/Toast.tsx index 0371b7f3fb..57d3518ccb 100644 --- a/examples/SampleApp/src/components/ToastComponent/Toast.tsx +++ b/examples/SampleApp/src/components/ToastComponent/Toast.tsx @@ -2,20 +2,25 @@ import { Dimensions, StyleSheet, Text, TouchableOpacity, View } from 'react-nati import Animated, { Easing, SlideInDown, SlideOutDown } from 'react-native-reanimated'; import { SafeAreaView, useSafeAreaInsets } from 'react-native-safe-area-context'; -import type { Notification, NotificationState } from 'stream-chat'; +import type { Notification } from 'stream-chat'; import { useInAppNotificationsState, useTheme } from 'stream-chat-react-native'; import { useLegacyColors } from '../../theme/useLegacyColors'; const { width } = Dimensions.get('window'); -const severityIconMap: Record = { +type KnownSeverity = 'error' | 'success' | 'warning' | 'info'; + +const severityIconMap: Record = { error: '❌', success: '✅', warning: '⚠️', info: 'ℹ️', }; +const getSeverityIcon = (severity: Notification['severity']) => + severity && severity in severityIconMap ? severityIconMap[severity as KnownSeverity] : 'ℹ️'; + export const Toast = () => { const { closeInAppNotification, notifications } = useInAppNotificationsState(); @@ -25,7 +30,7 @@ export const Toast = () => { // When offline, we upload pending attachments by cleaning up the previous upload, this results in a cancelled/aborted error from the server, so we filter out those notifications. const filteredNotifications = notifications.filter( - (notification: NotificationState) => notification.metadata?.reason !== 'canceled', + (notification: Notification) => notification.metadata?.reason !== 'canceled', ); return ( @@ -39,7 +44,7 @@ export const Toast = () => { > - {severityIconMap[notification.severity]} + {getSeverityIcon(notification.severity)} diff --git a/examples/SampleApp/src/components/UnreadCountBadge.tsx b/examples/SampleApp/src/components/UnreadCountBadge.tsx index 6092ae3b55..e6925609bf 100644 --- a/examples/SampleApp/src/components/UnreadCountBadge.tsx +++ b/examples/SampleApp/src/components/UnreadCountBadge.tsx @@ -16,7 +16,7 @@ export const ThreadsUnreadCountBadge: React.FC = () => { return null; } - return ; + return ; }; export const ChannelsUnreadCountBadge: React.FC = () => { @@ -52,5 +52,5 @@ export const ChannelsUnreadCountBadge: React.FC = () => { return null; } - return ; + return ; }; diff --git a/examples/SampleApp/src/hooks/useStreamChatTheme.ts b/examples/SampleApp/src/hooks/useStreamChatTheme.ts index 1f077d5621..0016c73343 100644 --- a/examples/SampleApp/src/hooks/useStreamChatTheme.ts +++ b/examples/SampleApp/src/hooks/useStreamChatTheme.ts @@ -3,7 +3,9 @@ import { ColorSchemeName, useColorScheme } from 'react-native'; import type { DeepPartial, Theme } from 'stream-chat-react-native'; -const getChatStyle = (colorScheme: ColorSchemeName): DeepPartial => ({ +const getChatStyle = ( + colorScheme: ColorSchemeName, +): DeepPartial & { colors: Record } => ({ colors: colorScheme === 'dark' ? { diff --git a/examples/SampleApp/src/icons/MenuPointHorizontal.tsx b/examples/SampleApp/src/icons/MenuPointHorizontal.tsx index e76818cc7d..ffd6f14885 100644 --- a/examples/SampleApp/src/icons/MenuPointHorizontal.tsx +++ b/examples/SampleApp/src/icons/MenuPointHorizontal.tsx @@ -2,7 +2,7 @@ import React from 'react'; import Svg, { Path } from 'react-native-svg'; -import { IconProps } from './utils/base'; +import { IconProps } from '../utils/base'; export const MenuPointHorizontal = (props: IconProps) => ( diff --git a/examples/SampleApp/src/icons/ShareLocationIcon.tsx b/examples/SampleApp/src/icons/ShareLocationIcon.tsx index 51c190c53d..a0bd708027 100644 --- a/examples/SampleApp/src/icons/ShareLocationIcon.tsx +++ b/examples/SampleApp/src/icons/ShareLocationIcon.tsx @@ -1,16 +1,9 @@ -import { ColorValue } from 'react-native'; import Svg, { Path } from 'react-native-svg'; +import type { IconProps } from 'stream-chat-react-native'; + // Icon for "Share Location" button, next to input box. -export const ShareLocationIcon = ({ - width, - height, - stroke, -}: { - stroke: ColorValue; - width: number; - height: number; -}) => { +export const ShareLocationIcon = ({ width = 24, height = 24, stroke }: IconProps) => { return ( { const { chatClient } = useAppContext(); - const navigation = useNavigation(); + const navigation = useNavigation>(); useTheme(); const { black, grey, grey_gainsboro, grey_whisper, white, white_snow } = useLegacyColors(); const { setChannel } = useStreamChatContext(); @@ -142,28 +144,30 @@ export const ChannelListScreen: React.FC = () => { [], ); - const getChannelActionItems = useStableCallback(({ context: { channel }, defaultItems }) => { - const viewInfo = () => { - if (!channel) { - return; - } - if (navigation) { - navigation.navigate('ChannelDetailsScreen', { - channel, - }); - } - }; - - const viewInfoItem: ChannelActionItem = { - action: viewInfo, - Icon: ChannelInfo, - id: 'info', - label: 'View Info', - placement: 'sheet', - type: 'standard', - }; - return [viewInfoItem, ...defaultItems]; - }); + const getChannelActionItems = useStableCallback( + ({ context: { channel }, defaultItems }: Parameters[0]) => { + const viewInfo = () => { + if (!channel) { + return; + } + if (navigation) { + navigation.navigate('ChannelDetailsScreen', { + channel, + }); + } + }; + + const viewInfoItem: ChannelActionItem = { + action: viewInfo, + Icon: ChannelInfo, + id: 'info', + label: 'View Info', + placement: 'sheet', + type: 'standard', + }; + return [viewInfoItem, ...defaultItems]; + }, + ); if (!chatClient) { return null; @@ -230,7 +234,11 @@ export const ChannelListScreen: React.FC = () => { loading={loading} loadMore={loadMore} messages={messages} - ref={scrollRef} + // The search list and the channel list never mount at the same time, + // so this single ref holder is reused for both. It is declared as a + // `FlatList` ref for the `ChannelList`/`useScrollToTop` usage, + // hence the cast for the message-typed search list here. + ref={scrollRef as unknown as RefObject | null>} refreshing={refreshing} refreshList={refreshList} showResultCount diff --git a/examples/SampleApp/src/screens/ChannelScreen.tsx b/examples/SampleApp/src/screens/ChannelScreen.tsx index 7b47278b1c..012c9a057c 100644 --- a/examples/SampleApp/src/screens/ChannelScreen.tsx +++ b/examples/SampleApp/src/screens/ChannelScreen.tsx @@ -31,6 +31,7 @@ import { ScreenHeader } from '../components/ScreenHeader'; import { useAppContext } from '../context/AppContext'; import { useStreamChatContext } from '../context/StreamChatContext.tsx'; import { useChannelMembersStatus } from '../hooks/useChannelMembersStatus'; +import type { StreamThemeWithColors } from '../theme/AppTheme'; import type { StackNavigatorParamList } from '../types'; import { channelMessageActions } from '../utils/messageActions.tsx'; @@ -55,7 +56,7 @@ export type ChannelHeaderProps = { const ChannelHeader: React.FC = ({ channel }) => { const { closePicker } = useAttachmentPickerContext(); const membersStatus = useChannelMembersStatus(channel); - const displayName = useChannelPreviewDisplayName(channel, 30); + const displayName = useChannelPreviewDisplayName(channel); const { isOnline } = useChatContext(); const { chatClient } = useAppContext(); const navigation = useNavigation(); @@ -122,7 +123,7 @@ export const ChannelScreen: React.FC = ({ navigation, route } = useAppContext(); const { theme: { semantics, colors }, - } = useTheme(); + } = useTheme() as unknown as { theme: StreamThemeWithColors }; const { t } = useTranslationContext(); const { setThread } = useStreamChatContext(); const [modalVisible, setModalVisible] = useState(false); diff --git a/examples/SampleApp/src/screens/LoadingScreen.tsx b/examples/SampleApp/src/screens/LoadingScreen.tsx index ccc15a42b0..2445f98abf 100644 --- a/examples/SampleApp/src/screens/LoadingScreen.tsx +++ b/examples/SampleApp/src/screens/LoadingScreen.tsx @@ -3,6 +3,8 @@ import { ActivityIndicator, StyleSheet, useColorScheme, View } from 'react-nativ import { useTheme } from 'stream-chat-react-native'; +import type { StreamThemeWithColors } from '../theme/AppTheme'; + const styles = StyleSheet.create({ container: { alignItems: 'center', @@ -13,7 +15,7 @@ const styles = StyleSheet.create({ export const LoadingScreen: React.FC = () => { const colorScheme = useColorScheme(); - const { theme } = useTheme(); + const { theme } = useTheme() as unknown as { theme: StreamThemeWithColors }; return ( { ); const { isLiveLocationStopped, locationResponse } = useHandleLiveLocationEvents({ - channel, + // `channel` is guaranteed to be set in context before navigating to this + // screen (the map is opened from a message's shared location), and the hook + // dereferences it directly, so a non-null assertion matches the runtime + // contract here. + channel: channel!, messageId: shared_location.message_id, onLocationUpdate, }); @@ -198,7 +202,7 @@ export const MapScreen = ({ route }: MapScreenProps) => { ) : ( - + )} = const [focusOnMessageInput, setFocusOnMessageInput] = useState(false); const [focusOnSearchInput, setFocusOnSearchInput] = useState(true); - // As we don't use the state value, we can omit it here and separate it with a comma within the array. - const [, setMessageInputText] = useState(''); useEffect(() => { const initialUser = route.params?.initialUser; @@ -374,7 +372,6 @@ export const NewDirectMessagingScreen: React.FC = channel={currentChannel.current} enforceUniqueReaction keyboardVerticalOffset={0} - onChangeText={setMessageInputText} overrideOwnCapabilities={{ sendMessage: true }} setInputRef={(ref) => (messageInputRef.current = ref)} > diff --git a/examples/SampleApp/src/screens/ThreadListScreen.tsx b/examples/SampleApp/src/screens/ThreadListScreen.tsx index ff45321138..52d1b7a5eb 100644 --- a/examples/SampleApp/src/screens/ThreadListScreen.tsx +++ b/examples/SampleApp/src/screens/ThreadListScreen.tsx @@ -1,14 +1,14 @@ import React from 'react'; import { StyleSheet, View } from 'react-native'; -import { useNavigation, useIsFocused } from '@react-navigation/native'; +import { NavigationProp, useNavigation, useIsFocused } from '@react-navigation/native'; import type { NativeStackNavigationProp } from '@react-navigation/native-stack'; import { useTheme, ThreadList } from 'stream-chat-react-native'; import { ChatScreenHeader } from '../components/ChatScreenHeader'; import { useLegacyColors } from '../theme/useLegacyColors'; -import type { BottomTabNavigatorParamList } from '../types'; +import type { BottomTabNavigatorParamList, StackNavigatorParamList } from '../types'; const styles = StyleSheet.create({ container: { @@ -32,7 +32,7 @@ export type ThreadsScreenProps = { export const ThreadListScreen: React.FC = () => { useTheme(); const { white_snow } = useLegacyColors(); - const navigation = useNavigation(); + const navigation = useNavigation>(); const isFocused = useIsFocused(); return ( diff --git a/examples/SampleApp/src/theme/AppTheme.ts b/examples/SampleApp/src/theme/AppTheme.ts new file mode 100644 index 0000000000..b5ebf7b1a3 --- /dev/null +++ b/examples/SampleApp/src/theme/AppTheme.ts @@ -0,0 +1,13 @@ +import type { Colors, Theme } from 'stream-chat-react-native'; + +/** + * The SampleApp injects a custom `colors` palette at runtime via + * `` (see `useStreamChatTheme`). + * The SDK's `Theme` type no longer exposes a top-level `colors` map (it moved + * to the semantics/primitives token model), so this alias re-augments the theme + * with that runtime palette for the call sites that still read `theme.colors`. + * + * The injected palette is the legacy `Colors` object, so we type it as such to + * stay accurate for consumers that expect the legacy color keys. + */ +export type StreamThemeWithColors = Theme & { colors: typeof Colors }; diff --git a/examples/SampleApp/tsconfig.json b/examples/SampleApp/tsconfig.json index edad44a02d..5a1531949c 100644 --- a/examples/SampleApp/tsconfig.json +++ b/examples/SampleApp/tsconfig.json @@ -1,5 +1,5 @@ { - "extends": "@react-native/typescript-config", + "extends": ["@react-native/typescript-config", "@stream-io/typescript-config/base.json"], "compilerOptions": { "types": [] } diff --git a/examples/TypeScriptMessaging/.bundle/config b/examples/TypeScriptMessaging/.bundle/config deleted file mode 100644 index d137d242ed..0000000000 --- a/examples/TypeScriptMessaging/.bundle/config +++ /dev/null @@ -1,2 +0,0 @@ -BUNDLE_PATH: "vendor/bundle" -BUNDLE_FORCE_RUBY_PLATFORM: 1 \ No newline at end of file diff --git a/examples/TypeScriptMessaging/.gitattributes b/examples/TypeScriptMessaging/.gitattributes deleted file mode 100644 index 59b845bf91..0000000000 --- a/examples/TypeScriptMessaging/.gitattributes +++ /dev/null @@ -1,3 +0,0 @@ -# Windows files should use crlf line endings -# https://help.github.com/articles/dealing-with-line-endings/ -*.bat text eol=crlf \ No newline at end of file diff --git a/examples/TypeScriptMessaging/.gitignore b/examples/TypeScriptMessaging/.gitignore deleted file mode 100644 index 2f3c1dc431..0000000000 --- a/examples/TypeScriptMessaging/.gitignore +++ /dev/null @@ -1,78 +0,0 @@ -# OSX -# -.DS_Store - -# Xcode -# -build/ -*.pbxuser -!default.pbxuser -*.mode1v3 -!default.mode1v3 -*.mode2v3 -!default.mode2v3 -*.perspectivev3 -!default.perspectivev3 -xcuserdata -*.xccheckout -*.moved-aside -DerivedData -*.hmap -*.ipa -*.xcuserstate -**/.xcode.env.local - -# Android/IntelliJ -# -build/ -.idea -.gradle -local.properties -*.iml -*.hprof -.cxx/ -*.keystore -!debug.keystore -.kotlin/ - -# Visual Studio Code -# -.vscode/ - -# node.js -# -node_modules/ -npm-debug.log -yarn-error.log - -# fastlane -# -# It is recommended to not store the screenshots in the git repo. Instead, use fastlane to re-generate the -# screenshots whenever they are needed. -# For more information about the recommended setup visit: -# https://docs.fastlane.tools/best-practices/source-control/ - -*/fastlane/report.xml -*/fastlane/Preview.html -*/fastlane/screenshots - -# Bundle artifact -*.jsbundle - -# Ruby / CocoaPods -**/Pods/ -/vendor/bundle - -# Temporary files created by Metro to check the health of the file watcher -.metro-health-check* - -# testing -/coverage - -# Yarn -.yarn/* -!.yarn/patches -!.yarn/plugins -!.yarn/releases -!.yarn/sdks -!.yarn/versions diff --git a/examples/TypeScriptMessaging/.node-version b/examples/TypeScriptMessaging/.node-version deleted file mode 100644 index 2bd5a0a98a..0000000000 --- a/examples/TypeScriptMessaging/.node-version +++ /dev/null @@ -1 +0,0 @@ -22 diff --git a/examples/TypeScriptMessaging/.watchmanconfig b/examples/TypeScriptMessaging/.watchmanconfig deleted file mode 100644 index 9e26dfeeb6..0000000000 --- a/examples/TypeScriptMessaging/.watchmanconfig +++ /dev/null @@ -1 +0,0 @@ -{} \ No newline at end of file diff --git a/examples/TypeScriptMessaging/App.tsx b/examples/TypeScriptMessaging/App.tsx deleted file mode 100644 index 99714a0e3c..0000000000 --- a/examples/TypeScriptMessaging/App.tsx +++ /dev/null @@ -1,294 +0,0 @@ -import React, { useContext, useEffect, useMemo, useState } from 'react'; -import { DevSettings, I18nManager, LogBox, Platform, useColorScheme, View } from 'react-native'; - -import { GestureHandlerRootView } from 'react-native-gesture-handler'; -import { SafeAreaProvider, SafeAreaView } from 'react-native-safe-area-context'; - -import { useHeaderHeight } from '@react-navigation/elements'; -import { DarkTheme, DefaultTheme, NavigationContainer, RouteProp } from '@react-navigation/native'; -import { createStackNavigator, StackNavigationProp } from '@react-navigation/stack'; - -import { Channel as ChannelType, ChannelSort } from 'stream-chat'; -import { - Channel, - ChannelList, - Chat, - MessageComposer, - MessageList, - OverlayProvider, - SqliteClient, - Streami18n, - Thread, - ThreadContextValue, - useCreateChatClient, - useOverlayContext, -} from 'stream-chat-react-native'; - -import { AuthProgressLoader } from './AuthProgressLoader'; -import { useStreamChatTheme } from './useStreamChatTheme'; - -LogBox.ignoreAllLogs(true); - -const options = { - presence: true, - state: true, - watch: true, -}; - -I18nManager.forceRTL(false); - -if (__DEV__) { - DevSettings.addMenuItem('Reset local DB (offline storage)', () => { - SqliteClient.resetDB(); - console.info('Local DB reset'); - }); -} - -const apiKey = 'q95x9hkbyd6p'; -const userToken = - 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX2lkIjoicm9uIn0.eRVjxLvd4aqCEHY_JRa97g6k7WpHEhxL7Z4K4yTot1c'; - -const user = { - id: 'ron', -}; -const filters = { - members: { $in: ['ron'] }, - type: 'messaging', -}; - -const sort: ChannelSort = [{ pinned_at: -1 }, { last_message_at: -1 }, { updated_at: -1 }]; - -/** - * Start playing with streami18n instance here: - * Please refer to description of this PR for details: https://github.com/GetStream/stream-chat-react-native/pull/150 - */ -const streami18n = new Streami18n({ - language: 'en', -}); - -type ChannelListScreenProps = { - navigation: StackNavigationProp; -}; - -const ChannelListScreen: React.FC = ({ navigation }) => { - const { setChannel } = useContext(AppContext); - - const memoizedFilters = useMemo(() => filters, []); - - return ( - - { - setChannel(channel); - navigation.navigate('Channel'); - }} - options={options} - sort={sort} - /> - - ); -}; - -type ChannelScreenProps = { - navigation: StackNavigationProp; -}; - -const EmptyHeader = () => <>; - -const ChannelScreen: React.FC = ({ navigation }) => { - const { channel, setThread, thread } = useContext(AppContext); - const headerHeight = useHeaderHeight(); - const { overlay } = useOverlayContext(); - - useEffect(() => { - navigation.setOptions({ - gestureEnabled: Platform.OS === 'ios' && overlay === 'none', - }); - }, [overlay, navigation]); - - if (channel === undefined) { - return null; - } - - return ( - - - - { - setThread(selectedThread); - if (channel?.id) { - navigation.navigate('Thread'); - } - }} - /> - - - - - ); -}; - -type ThreadScreenProps = { - navigation: StackNavigationProp; - route: RouteProp; -}; - -const ThreadScreen: React.FC = ({ navigation }) => { - const { channel, setThread, thread } = useContext(AppContext); - const headerHeight = useHeaderHeight(); - const { overlay } = useOverlayContext(); - - useEffect(() => { - navigation.setOptions({ - gestureEnabled: Platform.OS === 'ios' && overlay === 'none', - }); - }, [overlay, navigation]); - - if (!channel) { - return null; - } - - return ( - - - - setThread(null)} /> - - - - ); -}; - -type ChannelRoute = { Channel: undefined }; -type ChannelListRoute = { ChannelList: undefined }; -type ThreadRoute = { Thread: undefined }; -type NavigationParamsList = ChannelRoute & ChannelListRoute & ThreadRoute; - -const Stack = createStackNavigator(); - -type AppContextType = { - channel: ChannelType | undefined; - setChannel: React.Dispatch>; - setThread: React.Dispatch>; - thread: ThreadContextValue['thread'] | undefined; -}; - -const AppContext = React.createContext({} as AppContextType); - -const StackNavigator = () => { - const { channel } = useContext(AppContext); - const { overlay } = useOverlayContext(); - - return ( - - ({ - headerBackTitle: 'Back', - headerRight: EmptyHeader, - headerTitle: channel?.data?.name, - headerShown: overlay === 'none', - })} - /> - - ({ - headerBackTitle: 'Back', - headerRight: EmptyHeader, - })} - /> - - ); -}; - -const App = () => { - const theme = useStreamChatTheme(); - - const chatClient = useCreateChatClient({ - apiKey, - userData: user, - tokenOrProvider: userToken, - }); - - useEffect(() => { - if (!chatClient) { - return; - } - chatClient.setMessageComposerSetupFunction(({ composer }) => { - composer.updateConfig({ - drafts: { - enabled: true, - }, - }); - }); - }, [chatClient]); - - if (!chatClient) { - return ; - } - - return ( - - - - - - ); -}; - -export default () => { - const [channel, setChannel] = useState(); - const [thread, setThread] = useState(); - const theme = useStreamChatTheme(); - const colorScheme = useColorScheme(); - - return ( - - - - - - - - - - ); -}; diff --git a/examples/TypeScriptMessaging/AuthProgressLoader.tsx b/examples/TypeScriptMessaging/AuthProgressLoader.tsx deleted file mode 100644 index a98d5d643a..0000000000 --- a/examples/TypeScriptMessaging/AuthProgressLoader.tsx +++ /dev/null @@ -1,17 +0,0 @@ -import React from 'react'; -import { ActivityIndicator, StyleSheet } from 'react-native'; -import { SafeAreaView } from 'react-native-safe-area-context'; - -export const AuthProgressLoader = () => { - return ( - - - - ); -}; - -const styles = StyleSheet.create({ - container: { - flex: 1, - }, -}); diff --git a/examples/TypeScriptMessaging/Gemfile b/examples/TypeScriptMessaging/Gemfile deleted file mode 100644 index f9d13ce23a..0000000000 --- a/examples/TypeScriptMessaging/Gemfile +++ /dev/null @@ -1,14 +0,0 @@ -source 'https://rubygems.org' - -# You may use http://rbenv.org/ or https://rvm.io/ to install and use this version -ruby ">= 2.6.10" - -# Exclude problematic versions of cocoapods and activesupport that causes build failures. -gem 'cocoapods', '>= 1.13', '!= 1.15.0', '!= 1.15.1' -gem 'activesupport', '>= 6.1.7.5', '!= 7.1.0' -gem 'xcodeproj', '< 1.26.0' -gem 'concurrent-ruby', '< 1.3.4' -gem 'bigdecimal' -gem 'logger' -gem 'benchmark' -gem 'mutex_m' diff --git a/examples/TypeScriptMessaging/Gemfile.lock b/examples/TypeScriptMessaging/Gemfile.lock deleted file mode 100644 index 63f01a67fa..0000000000 --- a/examples/TypeScriptMessaging/Gemfile.lock +++ /dev/null @@ -1,115 +0,0 @@ -GEM - remote: https://rubygems.org/ - specs: - CFPropertyList (3.0.7) - base64 - nkf - rexml - activesupport (6.1.7.8) - concurrent-ruby (~> 1.0, >= 1.0.2) - i18n (>= 1.6, < 2) - minitest (>= 5.1) - tzinfo (~> 2.0) - zeitwerk (~> 2.3) - addressable (2.8.6) - public_suffix (>= 2.0.2, < 6.0) - algoliasearch (1.27.5) - httpclient (~> 2.8, >= 2.8.3) - json (>= 1.5.1) - atomos (0.1.3) - base64 (0.2.0) - benchmark (0.3.0) - bigdecimal (3.1.5) - claide (1.1.0) - cocoapods (1.14.3) - addressable (~> 2.8) - claide (>= 1.0.2, < 2.0) - cocoapods-core (= 1.14.3) - cocoapods-deintegrate (>= 1.0.3, < 2.0) - cocoapods-downloader (>= 2.1, < 3.0) - cocoapods-plugins (>= 1.0.0, < 2.0) - cocoapods-search (>= 1.0.0, < 2.0) - cocoapods-trunk (>= 1.6.0, < 2.0) - cocoapods-try (>= 1.1.0, < 2.0) - colored2 (~> 3.1) - escape (~> 0.0.4) - fourflusher (>= 2.3.0, < 3.0) - gh_inspector (~> 1.0) - molinillo (~> 0.8.0) - nap (~> 1.0) - ruby-macho (>= 2.3.0, < 3.0) - xcodeproj (>= 1.23.0, < 2.0) - cocoapods-core (1.14.3) - activesupport (>= 5.0, < 8) - addressable (~> 2.8) - algoliasearch (~> 1.0) - concurrent-ruby (~> 1.1) - fuzzy_match (~> 2.0.4) - nap (~> 1.0) - netrc (~> 0.11) - public_suffix (~> 4.0) - typhoeus (~> 1.0) - cocoapods-deintegrate (1.0.5) - cocoapods-downloader (2.1) - cocoapods-plugins (1.0.0) - nap - cocoapods-search (1.0.1) - cocoapods-trunk (1.6.0) - nap (>= 0.8, < 2.0) - netrc (~> 0.11) - cocoapods-try (1.2.0) - colored2 (3.1.2) - concurrent-ruby (1.2.3) - escape (0.0.4) - ethon (0.16.0) - ffi (>= 1.15.0) - ffi (1.16.3) - fourflusher (2.3.1) - fuzzy_match (2.0.4) - gh_inspector (1.1.3) - httpclient (2.8.3) - i18n (1.14.1) - concurrent-ruby (~> 1.0) - json (2.7.1) - logger (1.6.0) - minitest (5.22.2) - molinillo (0.8.0) - mutex_m (0.2.0) - nanaimo (0.3.0) - nap (1.1.0) - netrc (0.11.0) - nkf (0.2.0) - public_suffix (4.0.7) - rexml (3.2.6) - ruby-macho (2.5.1) - typhoeus (1.4.1) - ethon (>= 0.9.0) - tzinfo (2.0.6) - concurrent-ruby (~> 1.0) - xcodeproj (1.24.0) - CFPropertyList (>= 2.3.3, < 4.0) - atomos (~> 0.1.3) - claide (>= 1.0.2, < 2.0) - colored2 (~> 3.1) - nanaimo (~> 0.3.0) - rexml (~> 3.2.4) - zeitwerk (2.6.17) - -PLATFORMS - ruby - -DEPENDENCIES - activesupport (>= 6.1.7.5, != 7.1.0) - benchmark - bigdecimal - cocoapods (>= 1.13, != 1.15.1, != 1.15.0) - concurrent-ruby (< 1.3.4) - logger - mutex_m - xcodeproj (< 1.26.0) - -RUBY VERSION - ruby 3.2.3p157 - -BUNDLED WITH - 2.4.19 diff --git a/examples/TypeScriptMessaging/README.md b/examples/TypeScriptMessaging/README.md deleted file mode 100644 index 4a770e7a86..0000000000 --- a/examples/TypeScriptMessaging/README.md +++ /dev/null @@ -1,65 +0,0 @@ -# Typescript Chat Messaging app - -This is a bare minimum Chat application using Stream Chat SDK built using Native CLI platform without any customization. - -## How to run the app - -Make sure you have the Native CLI development setup ready in your system. Please follow [this guide](https://reactnative.dev/docs/environment-setup?guide=native) for the same. - -### Clone the project - -```bash -git clone https://github.com/GetStream/stream-chat-react-native.git -``` - -### Install dependencies - -1. In the root install the dependencies: - -```bash -yarn install -``` - -2. Move to the `package` directory and install the dependencies: - -```bash -cd package && yarn install -``` - -3. Move to the `native-package` directory and install the dependencies: - -```bash -cd native-package && yarn install -``` - -4. Finally, Move to the app directory and install the dependencies: - -```bash -cd ../../examples/TypeScriptMessaging && yarn install -``` - -### Install Pods for iOS - -```bash -cd ios && pod install -``` - -### Run - -To run the application for different platforms, use the following commands: - -```bash -yarn start -``` - -- For iOS - -```bash -yarn ios -``` - -- For android - -```bash -yarn android -``` diff --git a/examples/TypeScriptMessaging/_editorconfig b/examples/TypeScriptMessaging/_editorconfig deleted file mode 100644 index 52e7e9418c..0000000000 --- a/examples/TypeScriptMessaging/_editorconfig +++ /dev/null @@ -1,3 +0,0 @@ -# Windows files -[*.bat] -end_of_line = crlf \ No newline at end of file diff --git a/examples/TypeScriptMessaging/android/app/build.gradle b/examples/TypeScriptMessaging/android/app/build.gradle deleted file mode 100644 index d2fcd02d00..0000000000 --- a/examples/TypeScriptMessaging/android/app/build.gradle +++ /dev/null @@ -1,127 +0,0 @@ -apply plugin: "com.android.application" -apply plugin: "org.jetbrains.kotlin.android" -apply plugin: "com.facebook.react" - -/** - * This is the configuration block to customize your React Native Android app. - * By default you don't need to apply any configuration, just uncomment the lines you need. - */ -react { - /* Folders */ - // The root of your project, i.e. where "package.json" lives. Default is '..' - // root = file("../../") - // The folder where the react-native NPM package is. Default is ../../node_modules/react-native - // reactNativeDir = file("../../node_modules/react-native") - // The folder where the react-native Codegen package is. Default is ../../node_modules/@react-native/codegen - // codegenDir = file("../../node_modules/@react-native/codegen") - // The cli.js file which is the React Native CLI entrypoint. Default is ../../node_modules/react-native/cli.js - // cliFile = file("../../node_modules/react-native/cli.js") - - /* Variants */ - // The list of variants to that are debuggable. For those we're going to - // skip the bundling of the JS bundle and the assets. By default is just 'debug'. - // If you add flavors like lite, prod, etc. you'll have to list your debuggableVariants. - // debuggableVariants = ["liteDebug", "prodDebug"] - - /* Bundling */ - // A list containing the node command and its flags. Default is just 'node'. - // nodeExecutableAndArgs = ["node"] - // - // The command to run when bundling. By default is 'bundle' - // bundleCommand = "ram-bundle" - // - // The path to the CLI configuration file. Default is empty. - // bundleConfig = file(../rn-cli.config.js) - // - // The name of the generated asset file containing your JS bundle - // bundleAssetName = "MyApplication.android.bundle" - // - // The entry file for bundle generation. Default is 'index.android.js' or 'index.js' - // entryFile = file("../js/MyApplication.android.js") - // - // A list of extra flags to pass to the 'bundle' commands. - // See https://github.com/react-native-community/cli/blob/main/docs/commands.md#bundle - // extraPackagerArgs = [] - - /* Hermes Commands */ - // The hermes compiler command to run. By default it is 'hermesc' - // hermesCommand = "$rootDir/my-custom-hermesc/bin/hermesc" - // - // The list of flags to pass to the Hermes compiler. By default is "-O", "-output-source-map" - // hermesFlags = ["-O", "-output-source-map"] - - /* Autolinking */ - autolinkLibrariesWithApp() -} - -/** - * Set this to true to Run Proguard on Release builds to minify the Java bytecode. - */ -def enableProguardInReleaseBuilds = false - -/** - * The preferred build flavor of JavaScriptCore (JSC) - * - * For example, to use the international variant, you can use: - * `def jscFlavor = io.github.react-native-community:jsc-android-intl:2026004.+` - * - * The international variant includes ICU i18n library and necessary data - * allowing to use e.g. `Date.toLocaleString` and `String.localeCompare` that - * give correct results when using with locales other than en-US. Note that - * this variant is about 6MiB larger per architecture than default. - */ -def jscFlavor = 'io.github.react-native-community:jsc-android:2026004.+' - -android { - ndkVersion rootProject.ext.ndkVersion - buildToolsVersion rootProject.ext.buildToolsVersion - compileSdk rootProject.ext.compileSdkVersion - - namespace "com.typescriptmessaging" - defaultConfig { - applicationId "com.typescriptmessaging" - minSdkVersion rootProject.ext.minSdkVersion - targetSdkVersion rootProject.ext.targetSdkVersion - versionCode 1 - versionName "1.0" - } - signingConfigs { - debug { - storeFile file('debug.keystore') - storePassword 'android' - keyAlias 'androiddebugkey' - keyPassword 'android' - } - } - buildTypes { - debug { - signingConfig signingConfigs.debug - } - release { - // Caution! In production, you need to generate your own keystore file. - // see https://reactnative.dev/docs/signed-apk-android. - signingConfig signingConfigs.debug - minifyEnabled enableProguardInReleaseBuilds - proguardFiles getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro" - } - } -} - -dependencies { - // The version of react-native is set by the React Native Gradle Plugin - implementation("com.facebook.react:react-android") - - if (hermesEnabled.toBoolean()) { - implementation("com.facebook.react:hermes-android") - } else { - implementation jscFlavor - } - - // For React native video - implementation("androidx.appcompat:appcompat:1.0.0") - // For animated GIF support - implementation('com.facebook.fresco:animated-gif:3.6.0') - // For WebP support, including animated WebP - implementation('com.facebook.fresco:animated-webp:3.6.0') - implementation('com.facebook.fresco:webpsupport:3.6.0') -} diff --git a/examples/TypeScriptMessaging/android/app/debug.keystore b/examples/TypeScriptMessaging/android/app/debug.keystore deleted file mode 100644 index 364e105ed3..0000000000 Binary files a/examples/TypeScriptMessaging/android/app/debug.keystore and /dev/null differ diff --git a/examples/TypeScriptMessaging/android/app/proguard-rules.pro b/examples/TypeScriptMessaging/android/app/proguard-rules.pro deleted file mode 100644 index a9d956780a..0000000000 --- a/examples/TypeScriptMessaging/android/app/proguard-rules.pro +++ /dev/null @@ -1,66 +0,0 @@ -# Add project specific ProGuard rules here. -# By default, the flags in this file are appended to flags specified -# in /usr/local/Cellar/android-sdk/24.3.3/tools/proguard/proguard-android.txt -# You can edit the include path and order by changing the proguardFiles -# directive in build.gradle. -# -# For more details, see -# http://developer.android.com/guide/developing/tools/proguard.html - -# Add any project specific keep options here: - -# React Native - -# Keep our interfaces so they can be used by other ProGuard rules. -# See http://sourceforge.net/p/proguard/bugs/466/ --keep,allowobfuscation @interface com.facebook.proguard.annotations.DoNotStrip --keep,allowobfuscation @interface com.facebook.proguard.annotations.KeepGettersAndSetters --keep,allowobfuscation @interface com.facebook.common.internal.DoNotStrip --keep,allowobfuscation @interface com.facebook.jni.annotations.DoNotStrip - -# Do not strip any method/class that is annotated with @DoNotStrip --keep @com.facebook.proguard.annotations.DoNotStrip class * --keep @com.facebook.common.internal.DoNotStrip class * --keep @com.facebook.jni.annotations.DoNotStrip class * --keepclassmembers class * { - @com.facebook.proguard.annotations.DoNotStrip *; - @com.facebook.common.internal.DoNotStrip *; - @com.facebook.jni.annotations.DoNotStrip *; -} - --keepclassmembers @com.facebook.proguard.annotations.KeepGettersAndSetters class * { - void set*(***); - *** get*(); -} - --keep class * implements com.facebook.react.bridge.JavaScriptModule { *; } --keep class * implements com.facebook.react.bridge.NativeModule { *; } --keepclassmembers,includedescriptorclasses class * { native ; } --keepclassmembers class * { @com.facebook.react.uimanager.annotations.ReactProp ; } --keepclassmembers class * { @com.facebook.react.uimanager.annotations.ReactPropGroup ; } - --dontwarn com.facebook.react.** --keep,includedescriptorclasses class com.facebook.react.bridge.** { *; } - -# okhttp --keepattributes Signature --keepattributes *Annotation* --keep class okhttp3.** { *; } --keep interface okhttp3.** { *; } --dontwarn okhttp3.** - -# okio --keep class sun.misc.Unsafe { *; } --dontwarn java.nio.file.* --dontwarn org.codehaus.mojo.animal_sniffer.IgnoreJRERequirement --dontwarn okio.** - -# React Native SVG --keep public class com.horcrux.svg.** {*;} - -# hermes --keep class com.facebook.hermes.unicode.** { *; } --keep class com.facebook.jni.** { *; } - -# React Native Reanimated --keep class com.facebook.react.turbomodule.** { *; } diff --git a/examples/TypeScriptMessaging/android/app/src/debug/AndroidManifest.xml b/examples/TypeScriptMessaging/android/app/src/debug/AndroidManifest.xml deleted file mode 100644 index 62d7d130c6..0000000000 --- a/examples/TypeScriptMessaging/android/app/src/debug/AndroidManifest.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - - \ No newline at end of file diff --git a/examples/TypeScriptMessaging/android/app/src/main/AndroidManifest.xml b/examples/TypeScriptMessaging/android/app/src/main/AndroidManifest.xml deleted file mode 100644 index b64fbded03..0000000000 --- a/examples/TypeScriptMessaging/android/app/src/main/AndroidManifest.xml +++ /dev/null @@ -1,37 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/examples/TypeScriptMessaging/android/app/src/main/java/com/typescriptmessaging/MainActivity.kt b/examples/TypeScriptMessaging/android/app/src/main/java/com/typescriptmessaging/MainActivity.kt deleted file mode 100644 index b9c1099ec9..0000000000 --- a/examples/TypeScriptMessaging/android/app/src/main/java/com/typescriptmessaging/MainActivity.kt +++ /dev/null @@ -1,52 +0,0 @@ -package com.typescriptmessaging; - -import com.facebook.react.ReactActivity -import com.facebook.react.ReactActivityDelegate -import com.facebook.react.defaults.DefaultNewArchitectureEntryPoint.fabricEnabled -import com.facebook.react.defaults.DefaultReactActivityDelegate - -import android.os.Bundle -import android.os.Build -import android.view.View -import androidx.core.view.ViewCompat -import androidx.core.view.WindowInsetsCompat -import androidx.core.view.updatePadding - -class MainActivity : ReactActivity() { - - override fun onCreate(savedInstanceState: Bundle?) { - super.onCreate(null) - - if (Build.VERSION.SDK_INT >= 35) { - val rootView = findViewById(android.R.id.content) - - - ViewCompat.setOnApplyWindowInsetsListener(rootView) { view, insets -> - val bars = insets.getInsets( - WindowInsetsCompat.Type.systemBars() - or WindowInsetsCompat.Type.displayCutout() - or WindowInsetsCompat.Type.ime() // adding the ime's height - ) - rootView.updatePadding( - left = bars.left, - top = bars.top, - right = bars.right, - bottom = bars.bottom - ) - WindowInsetsCompat.CONSUMED - } - } - } - /** - * Returns the name of the main component registered from JavaScript. This is used to schedule - * rendering of the component. - */ - override fun getMainComponentName(): String = "TypeScriptMessaging" - - /** - * Returns the instance of the [ReactActivityDelegate]. We use [DefaultReactActivityDelegate] - * which allows you to enable New Architecture with a single boolean flags [fabricEnabled] - */ - override fun createReactActivityDelegate(): ReactActivityDelegate = - DefaultReactActivityDelegate(this, mainComponentName, fabricEnabled) -} diff --git a/examples/TypeScriptMessaging/android/app/src/main/java/com/typescriptmessaging/MainApplication.kt b/examples/TypeScriptMessaging/android/app/src/main/java/com/typescriptmessaging/MainApplication.kt deleted file mode 100644 index fbc08fae78..0000000000 --- a/examples/TypeScriptMessaging/android/app/src/main/java/com/typescriptmessaging/MainApplication.kt +++ /dev/null @@ -1,38 +0,0 @@ -package com.typescriptmessaging; - -import android.app.Application -import com.facebook.react.PackageList -import com.facebook.react.ReactApplication -import com.facebook.react.ReactHost -import com.facebook.react.ReactNativeApplicationEntryPoint.loadReactNative -import com.facebook.react.ReactNativeHost -import com.facebook.react.ReactPackage -import com.facebook.react.defaults.DefaultReactHost.getDefaultReactHost -import com.facebook.react.defaults.DefaultReactNativeHost - -class MainApplication : Application(), ReactApplication { - - override val reactNativeHost: ReactNativeHost = - object : DefaultReactNativeHost(this) { - override fun getPackages(): List = - PackageList(this).packages.apply { - // Packages that cannot be autolinked yet can be added manually here, for example: - // add(MyReactNativePackage()) - } - - override fun getJSMainModuleName(): String = "index" - - override fun getUseDeveloperSupport(): Boolean = BuildConfig.DEBUG - - override val isNewArchEnabled: Boolean = BuildConfig.IS_NEW_ARCHITECTURE_ENABLED - override val isHermesEnabled: Boolean = BuildConfig.IS_HERMES_ENABLED - } - - override val reactHost: ReactHost - get() = getDefaultReactHost(applicationContext, reactNativeHost) - - override fun onCreate() { - super.onCreate() - loadReactNative(this) - } -} \ No newline at end of file diff --git a/examples/TypeScriptMessaging/android/app/src/main/res/mipmap-hdpi/ic_launcher.png b/examples/TypeScriptMessaging/android/app/src/main/res/mipmap-hdpi/ic_launcher.png deleted file mode 100644 index a2f5908281..0000000000 Binary files a/examples/TypeScriptMessaging/android/app/src/main/res/mipmap-hdpi/ic_launcher.png and /dev/null differ diff --git a/examples/TypeScriptMessaging/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png b/examples/TypeScriptMessaging/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png deleted file mode 100644 index 1b52399808..0000000000 Binary files a/examples/TypeScriptMessaging/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png and /dev/null differ diff --git a/examples/TypeScriptMessaging/android/app/src/main/res/mipmap-mdpi/ic_launcher.png b/examples/TypeScriptMessaging/android/app/src/main/res/mipmap-mdpi/ic_launcher.png deleted file mode 100644 index ff10afd6e1..0000000000 Binary files a/examples/TypeScriptMessaging/android/app/src/main/res/mipmap-mdpi/ic_launcher.png and /dev/null differ diff --git a/examples/TypeScriptMessaging/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png b/examples/TypeScriptMessaging/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png deleted file mode 100644 index 115a4c768a..0000000000 Binary files a/examples/TypeScriptMessaging/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png and /dev/null differ diff --git a/examples/TypeScriptMessaging/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png b/examples/TypeScriptMessaging/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png deleted file mode 100644 index dcd3cd8083..0000000000 Binary files a/examples/TypeScriptMessaging/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png and /dev/null differ diff --git a/examples/TypeScriptMessaging/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png b/examples/TypeScriptMessaging/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png deleted file mode 100644 index 459ca609d3..0000000000 Binary files a/examples/TypeScriptMessaging/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png and /dev/null differ diff --git a/examples/TypeScriptMessaging/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/examples/TypeScriptMessaging/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png deleted file mode 100644 index 8ca12fe024..0000000000 Binary files a/examples/TypeScriptMessaging/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png and /dev/null differ diff --git a/examples/TypeScriptMessaging/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png b/examples/TypeScriptMessaging/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png deleted file mode 100644 index 8e19b410a1..0000000000 Binary files a/examples/TypeScriptMessaging/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png and /dev/null differ diff --git a/examples/TypeScriptMessaging/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/examples/TypeScriptMessaging/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png deleted file mode 100644 index b824ebdd48..0000000000 Binary files a/examples/TypeScriptMessaging/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png and /dev/null differ diff --git a/examples/TypeScriptMessaging/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png b/examples/TypeScriptMessaging/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png deleted file mode 100644 index 4c19a13c23..0000000000 Binary files a/examples/TypeScriptMessaging/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png and /dev/null differ diff --git a/examples/TypeScriptMessaging/android/app/src/main/res/values/strings.xml b/examples/TypeScriptMessaging/android/app/src/main/res/values/strings.xml deleted file mode 100644 index f22c1dd6f2..0000000000 --- a/examples/TypeScriptMessaging/android/app/src/main/res/values/strings.xml +++ /dev/null @@ -1,3 +0,0 @@ - - TypeScriptMessaging - diff --git a/examples/TypeScriptMessaging/android/app/src/main/res/values/styles.xml b/examples/TypeScriptMessaging/android/app/src/main/res/values/styles.xml deleted file mode 100644 index 9fab0be743..0000000000 --- a/examples/TypeScriptMessaging/android/app/src/main/res/values/styles.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - diff --git a/examples/TypeScriptMessaging/android/build.gradle b/examples/TypeScriptMessaging/android/build.gradle deleted file mode 100644 index a8b8b255ca..0000000000 --- a/examples/TypeScriptMessaging/android/build.gradle +++ /dev/null @@ -1,22 +0,0 @@ -buildscript { - ext { - buildToolsVersion = "35.0.0" - minSdkVersion = 24 - compileSdkVersion = 35 - targetSdkVersion = 35 - androidXCore = "1.0.2" - kotlinVersion = "2.1.20" - ndkVersion = "26.1.10909125" - } - repositories { - google() - mavenCentral() - } - dependencies { - classpath("com.android.tools.build:gradle") - classpath("com.facebook.react:react-native-gradle-plugin") - classpath("org.jetbrains.kotlin:kotlin-gradle-plugin") - } -} - -apply plugin: "com.facebook.react.rootproject" diff --git a/examples/TypeScriptMessaging/android/gradle.properties b/examples/TypeScriptMessaging/android/gradle.properties deleted file mode 100644 index 39ce54a6bb..0000000000 --- a/examples/TypeScriptMessaging/android/gradle.properties +++ /dev/null @@ -1,44 +0,0 @@ -# Project-wide Gradle settings. - -# IDE (e.g. Android Studio) users: -# Gradle settings configured through the IDE *will override* -# any settings specified in this file. - -# For more details on how to configure your build environment visit -# http://www.gradle.org/docs/current/userguide/build_environment.html - -# Specifies the JVM arguments used for the daemon process. -# The setting is particularly useful for tweaking memory settings. -# Default value: -Xmx512m -XX:MaxMetaspaceSize=256m -org.gradle.jvmargs=-Xmx2048m -XX:MaxMetaspaceSize=512m - -# When configured, Gradle will run in incubating parallel mode. -# This option should only be used with decoupled projects. More details, visit -# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects -# org.gradle.parallel=true - -# AndroidX package structure to make it clearer which packages are bundled with the -# Android operating system, and which are packaged with your app's APK -# https://developer.android.com/topic/libraries/support-library/androidx-rn -android.useAndroidX=true - -# Use this property to specify which architecture you want to build. -# You can also override it from the CLI using -# ./gradlew -PreactNativeArchitectures=x86_64 -reactNativeArchitectures=armeabi-v7a,arm64-v8a,x86,x86_64 - -# Use this property to enable support to the new architecture. -# This will allow you to use TurboModules and the Fabric render in -# your application. You should enable this flag either if you want -# to write custom TurboModules/Fabric components OR use libraries that -# are providing them. -newArchEnabled=true - -# Use this property to enable or disable the Hermes JS engine. -# If set to false, you will be using JSC instead. -hermesEnabled=true - -# disables the check for multiple instances for gesture handler -# this is needed for react-native-gesture-handler to be both a devDep of core and be a dep on the typescript sample app -disableMultipleInstancesCheck=true - diff --git a/examples/TypeScriptMessaging/android/gradle/wrapper/gradle-wrapper.jar b/examples/TypeScriptMessaging/android/gradle/wrapper/gradle-wrapper.jar deleted file mode 100644 index 1b33c55baa..0000000000 Binary files a/examples/TypeScriptMessaging/android/gradle/wrapper/gradle-wrapper.jar and /dev/null differ diff --git a/examples/TypeScriptMessaging/android/gradle/wrapper/gradle-wrapper.properties b/examples/TypeScriptMessaging/android/gradle/wrapper/gradle-wrapper.properties deleted file mode 100644 index 002b867c48..0000000000 --- a/examples/TypeScriptMessaging/android/gradle/wrapper/gradle-wrapper.properties +++ /dev/null @@ -1,7 +0,0 @@ -distributionBase=GRADLE_USER_HOME -distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.14.1-bin.zip -networkTimeout=10000 -validateDistributionUrl=true -zipStoreBase=GRADLE_USER_HOME -zipStorePath=wrapper/dists diff --git a/examples/TypeScriptMessaging/android/gradlew b/examples/TypeScriptMessaging/android/gradlew deleted file mode 100755 index 7f94d3d477..0000000000 --- a/examples/TypeScriptMessaging/android/gradlew +++ /dev/null @@ -1,251 +0,0 @@ -#!/bin/sh - -# -# Copyright © 2015-2021 the original authors. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# https://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# -# SPDX-License-Identifier: Apache-2.0 -# - -############################################################################## -# -# Gradle start up script for POSIX generated by Gradle. -# -# Important for running: -# -# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is -# noncompliant, but you have some other compliant shell such as ksh or -# bash, then to run this script, type that shell name before the whole -# command line, like: -# -# ksh Gradle -# -# Busybox and similar reduced shells will NOT work, because this script -# requires all of these POSIX shell features: -# * functions; -# * expansions «$var», «${var}», «${var:-default}», «${var+SET}», -# «${var#prefix}», «${var%suffix}», and «$( cmd )»; -# * compound commands having a testable exit status, especially «case»; -# * various built-in commands including «command», «set», and «ulimit». -# -# Important for patching: -# -# (2) This script targets any POSIX shell, so it avoids extensions provided -# by Bash, Ksh, etc; in particular arrays are avoided. -# -# The "traditional" practice of packing multiple parameters into a -# space-separated string is a well documented source of bugs and security -# problems, so this is (mostly) avoided, by progressively accumulating -# options in "$@", and eventually passing that to Java. -# -# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS, -# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly; -# see the in-line comments for details. -# -# There are tweaks for specific operating systems such as AIX, CygWin, -# Darwin, MinGW, and NonStop. -# -# (3) This script is generated from the Groovy template -# https://github.com/gradle/gradle/blob/HEAD/platforms/jvm/plugins-application/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt -# within the Gradle project. -# -# You can find Gradle at https://github.com/gradle/gradle/. -# -############################################################################## - -# Attempt to set APP_HOME - -# Resolve links: $0 may be a link -app_path=$0 - -# Need this for daisy-chained symlinks. -while - APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path - [ -h "$app_path" ] -do - ls=$( ls -ld "$app_path" ) - link=${ls#*' -> '} - case $link in #( - /*) app_path=$link ;; #( - *) app_path=$APP_HOME$link ;; - esac -done - -# This is normally unused -# shellcheck disable=SC2034 -APP_BASE_NAME=${0##*/} -# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036) -APP_HOME=$( cd -P "${APP_HOME:-./}" > /dev/null && printf '%s\n' "$PWD" ) || exit - -# Use the maximum available, or set MAX_FD != -1 to use that value. -MAX_FD=maximum - -warn () { - echo "$*" -} >&2 - -die () { - echo - echo "$*" - echo - exit 1 -} >&2 - -# OS specific support (must be 'true' or 'false'). -cygwin=false -msys=false -darwin=false -nonstop=false -case "$( uname )" in #( - CYGWIN* ) cygwin=true ;; #( - Darwin* ) darwin=true ;; #( - MSYS* | MINGW* ) msys=true ;; #( - NONSTOP* ) nonstop=true ;; -esac - -CLASSPATH="\\\"\\\"" - - -# Determine the Java command to use to start the JVM. -if [ -n "$JAVA_HOME" ] ; then - if [ -x "$JAVA_HOME/jre/sh/java" ] ; then - # IBM's JDK on AIX uses strange locations for the executables - JAVACMD=$JAVA_HOME/jre/sh/java - else - JAVACMD=$JAVA_HOME/bin/java - fi - if [ ! -x "$JAVACMD" ] ; then - die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME - -Please set the JAVA_HOME variable in your environment to match the -location of your Java installation." - fi -else - JAVACMD=java - if ! command -v java >/dev/null 2>&1 - then - die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. - -Please set the JAVA_HOME variable in your environment to match the -location of your Java installation." - fi -fi - -# Increase the maximum file descriptors if we can. -if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then - case $MAX_FD in #( - max*) - # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked. - # shellcheck disable=SC2039,SC3045 - MAX_FD=$( ulimit -H -n ) || - warn "Could not query maximum file descriptor limit" - esac - case $MAX_FD in #( - '' | soft) :;; #( - *) - # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked. - # shellcheck disable=SC2039,SC3045 - ulimit -n "$MAX_FD" || - warn "Could not set maximum file descriptor limit to $MAX_FD" - esac -fi - -# Collect all arguments for the java command, stacking in reverse order: -# * args from the command line -# * the main class name -# * -classpath -# * -D...appname settings -# * --module-path (only if needed) -# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. - -# For Cygwin or MSYS, switch paths to Windows format before running java -if "$cygwin" || "$msys" ; then - APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) - CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) - - JAVACMD=$( cygpath --unix "$JAVACMD" ) - - # Now convert the arguments - kludge to limit ourselves to /bin/sh - for arg do - if - case $arg in #( - -*) false ;; # don't mess with options #( - /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath - [ -e "$t" ] ;; #( - *) false ;; - esac - then - arg=$( cygpath --path --ignore --mixed "$arg" ) - fi - # Roll the args list around exactly as many times as the number of - # args, so each arg winds up back in the position where it started, but - # possibly modified. - # - # NB: a `for` loop captures its iteration list before it begins, so - # changing the positional parameters here affects neither the number of - # iterations, nor the values presented in `arg`. - shift # remove old arg - set -- "$@" "$arg" # push replacement arg - done -fi - - -# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' - -# Collect all arguments for the java command: -# * DEFAULT_JVM_OPTS, JAVA_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments, -# and any embedded shellness will be escaped. -# * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be -# treated as '${Hostname}' itself on the command line. - -set -- \ - "-Dorg.gradle.appname=$APP_BASE_NAME" \ - -classpath "$CLASSPATH" \ - -jar "$APP_HOME/gradle/wrapper/gradle-wrapper.jar" \ - "$@" - -# Stop when "xargs" is not available. -if ! command -v xargs >/dev/null 2>&1 -then - die "xargs is not available" -fi - -# Use "xargs" to parse quoted args. -# -# With -n1 it outputs one arg per line, with the quotes and backslashes removed. -# -# In Bash we could simply go: -# -# readarray ARGS < <( xargs -n1 <<<"$var" ) && -# set -- "${ARGS[@]}" "$@" -# -# but POSIX shell has neither arrays nor command substitution, so instead we -# post-process each arg (as a line of input to sed) to backslash-escape any -# character that might be a shell metacharacter, then use eval to reverse -# that process (while maintaining the separation between arguments), and wrap -# the whole thing up as a single "set" statement. -# -# This will of course break if any of these variables contains a newline or -# an unmatched quote. -# - -eval "set -- $( - printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | - xargs -n1 | - sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | - tr '\n' ' ' - )" '"$@"' - -exec "$JAVACMD" "$@" diff --git a/examples/TypeScriptMessaging/android/gradlew.bat b/examples/TypeScriptMessaging/android/gradlew.bat deleted file mode 100644 index 2e7dbf49e2..0000000000 --- a/examples/TypeScriptMessaging/android/gradlew.bat +++ /dev/null @@ -1,98 +0,0 @@ -@REM Copyright (c) Meta Platforms, Inc. and affiliates. -@REM -@REM This source code is licensed under the MIT license found in the -@REM LICENSE file in the root directory of this source tree. -@rem -@rem Copyright 2015 the original author or authors. -@rem -@rem Licensed under the Apache License, Version 2.0 (the "License"); -@rem you may not use this file except in compliance with the License. -@rem You may obtain a copy of the License at -@rem -@rem https://www.apache.org/licenses/LICENSE-2.0 -@rem -@rem Unless required by applicable law or agreed to in writing, software -@rem distributed under the License is distributed on an "AS IS" BASIS, -@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -@rem See the License for the specific language governing permissions and -@rem limitations under the License. -@rem -@rem SPDX-License-Identifier: Apache-2.0 -@rem - -@if "%DEBUG%"=="" @echo off -@rem ########################################################################## -@rem -@rem Gradle startup script for Windows -@rem -@rem ########################################################################## - -@rem Set local scope for the variables with windows NT shell -if "%OS%"=="Windows_NT" setlocal - -set DIRNAME=%~dp0 -if "%DIRNAME%"=="" set DIRNAME=. -@rem This is normally unused -set APP_BASE_NAME=%~n0 -set APP_HOME=%DIRNAME% - -@rem Resolve any "." and ".." in APP_HOME to make it shorter. -for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi - -@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" - -@rem Find java.exe -if defined JAVA_HOME goto findJavaFromJavaHome - -set JAVA_EXE=java.exe -%JAVA_EXE% -version >NUL 2>&1 -if %ERRORLEVEL% equ 0 goto execute - -echo. 1>&2 -echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 1>&2 -echo. 1>&2 -echo Please set the JAVA_HOME variable in your environment to match the 1>&2 -echo location of your Java installation. 1>&2 - -goto fail - -:findJavaFromJavaHome -set JAVA_HOME=%JAVA_HOME:"=% -set JAVA_EXE=%JAVA_HOME%/bin/java.exe - -if exist "%JAVA_EXE%" goto execute - -echo. 1>&2 -echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 1>&2 -echo. 1>&2 -echo Please set the JAVA_HOME variable in your environment to match the 1>&2 -echo location of your Java installation. 1>&2. - -goto fail - -:execute -@rem Setup the command line - -set CLASSPATH= - - -@rem Execute Gradle -"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" -jar "%APP_HOME%\gradle\wrapper\gradle-wrapper.jar" %* - -:end -@rem End local scope for the variables with windows NT shell -if %ERRORLEVEL% equ 0 goto mainEnd - -:fail -rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of -rem the _cmd.exe /c_ return code! -set EXIT_CODE=%ERRORLEVEL% -if %EXIT_CODE% equ 0 set EXIT_CODE=1 -if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE% -exit /b %EXIT_CODE% - -:mainEnd -if "%OS%"=="Windows_NT" endlocal - -:omega \ No newline at end of file diff --git a/examples/TypeScriptMessaging/android/settings.gradle b/examples/TypeScriptMessaging/android/settings.gradle deleted file mode 100644 index d71378d02f..0000000000 --- a/examples/TypeScriptMessaging/android/settings.gradle +++ /dev/null @@ -1,6 +0,0 @@ -pluginManagement { includeBuild("../node_modules/@react-native/gradle-plugin") } -plugins { id("com.facebook.react.settings") } -extensions.configure(com.facebook.react.ReactSettingsExtension){ ex -> ex.autolinkLibrariesFromCommand() } -rootProject.name = 'TypeScriptMessaging' -include ':app' -includeBuild('../node_modules/@react-native/gradle-plugin') diff --git a/examples/TypeScriptMessaging/app.json b/examples/TypeScriptMessaging/app.json deleted file mode 100644 index 035aa9202a..0000000000 --- a/examples/TypeScriptMessaging/app.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "name": "TypeScriptMessaging", - "displayName": "TypeScriptMessaging" -} diff --git a/examples/TypeScriptMessaging/babel.config.js b/examples/TypeScriptMessaging/babel.config.js deleted file mode 100644 index 8ba8eb658c..0000000000 --- a/examples/TypeScriptMessaging/babel.config.js +++ /dev/null @@ -1,4 +0,0 @@ -module.exports = { - presets: ['module:@react-native/babel-preset'], - plugins: ['react-native-worklets/plugin'], -}; diff --git a/examples/TypeScriptMessaging/custom-types.d.ts b/examples/TypeScriptMessaging/custom-types.d.ts deleted file mode 100644 index e6400ab92a..0000000000 --- a/examples/TypeScriptMessaging/custom-types.d.ts +++ /dev/null @@ -1,41 +0,0 @@ -import { - DefaultAttachmentData, - DefaultChannelData, - DefaultCommandData, - DefaultEventData, - DefaultMemberData, - DefaultMessageData, - DefaultPollData, - DefaultPollOptionData, - DefaultReactionData, - DefaultThreadData, - DefaultUserData, -} from 'stream-chat-react-native'; - -declare module 'stream-chat' { - /* eslint-disable @typescript-eslint/no-empty-object-type */ - - interface CustomAttachmentData extends DefaultAttachmentData {} - - interface CustomChannelData extends DefaultChannelData {} - - interface CustomCommandData extends DefaultCommandData {} - - interface CustomEventData extends DefaultEventData {} - - interface CustomMemberData extends DefaultMemberData {} - - interface CustomUserData extends DefaultUserData {} - - interface CustomMessageData extends DefaultMessageData {} - - interface CustomPollOptionData extends DefaultPollOptionData {} - - interface CustomPollData extends DefaultPollData {} - - interface CustomReactionData extends DefaultReactionData {} - - interface CustomThreadData extends DefaultThreadData {} - - /* eslint-enable @typescript-eslint/no-empty-object-type */ -} diff --git a/examples/TypeScriptMessaging/index.js b/examples/TypeScriptMessaging/index.js deleted file mode 100644 index d2660dcb40..0000000000 --- a/examples/TypeScriptMessaging/index.js +++ /dev/null @@ -1,7 +0,0 @@ -import 'react-native-gesture-handler'; -import { AppRegistry } from 'react-native'; - -import App from './App'; -import { name as appName } from './app.json'; - -AppRegistry.registerComponent(appName, () => App); diff --git a/examples/TypeScriptMessaging/ios/.xcode.env b/examples/TypeScriptMessaging/ios/.xcode.env deleted file mode 100644 index 59aaeb5d31..0000000000 --- a/examples/TypeScriptMessaging/ios/.xcode.env +++ /dev/null @@ -1,11 +0,0 @@ - -# This `.xcode.env` file is versioned and is used to source the environment -# used when running script phases inside Xcode. -# To customize your local environment, you can create an `.xcode.env.local` -# file that is not versioned. -# NODE_BINARY variable contains the PATH to the node executable. -# -# Customize the NODE_BINARY variable here. -# For example, to use nvm with brew, add the following line -# . "$(brew --prefix nvm)/nvm.sh" --no-use -export NODE_BINARY=$(command -v node) diff --git a/examples/TypeScriptMessaging/ios/AppDelegate.swift b/examples/TypeScriptMessaging/ios/AppDelegate.swift deleted file mode 100644 index d0ecbc6777..0000000000 --- a/examples/TypeScriptMessaging/ios/AppDelegate.swift +++ /dev/null @@ -1,48 +0,0 @@ -import UIKit -import React -import React_RCTAppDelegate -import ReactAppDependencyProvider - -@main -class AppDelegate: UIResponder, UIApplicationDelegate { - var window: UIWindow? - - var reactNativeDelegate: ReactNativeDelegate? - var reactNativeFactory: RCTReactNativeFactory? - - func application( - _ application: UIApplication, - didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? = nil - ) -> Bool { - let delegate = ReactNativeDelegate() - let factory = RCTReactNativeFactory(delegate: delegate) - delegate.dependencyProvider = RCTAppDependencyProvider() - - reactNativeDelegate = delegate - reactNativeFactory = factory - - window = UIWindow(frame: UIScreen.main.bounds) - - factory.startReactNative( - withModuleName: "TypeScriptMessaging", - in: window, - launchOptions: launchOptions - ) - - return true - } -} - -class ReactNativeDelegate: RCTDefaultReactNativeFactoryDelegate { - override func sourceURL(for bridge: RCTBridge) -> URL? { - self.bundleURL() - } - - override func bundleURL() -> URL? { -#if DEBUG - RCTBundleURLProvider.sharedSettings().jsBundleURL(forBundleRoot: "index") -#else - Bundle.main.url(forResource: "main", withExtension: "jsbundle") -#endif - } -} diff --git a/examples/TypeScriptMessaging/ios/Podfile b/examples/TypeScriptMessaging/ios/Podfile deleted file mode 100644 index 67c689ac1a..0000000000 --- a/examples/TypeScriptMessaging/ios/Podfile +++ /dev/null @@ -1,40 +0,0 @@ -# Resolve react_native_pods.rb with node to allow for hoisting -require Pod::Executable.execute_command('node', ['-p', - 'require.resolve( - "react-native/scripts/react_native_pods.rb", - {paths: [process.argv[1]]}, - )', __dir__]).strip - -platform :ios, min_ios_version_supported -prepare_react_native_project! - -linkage = ENV['USE_FRAMEWORKS'] -if linkage != nil - Pod::UI.puts "Configuring Pod with #{linkage}ally linked Frameworks".green - use_frameworks! :linkage => linkage.to_sym -end - -target 'TypeScriptMessaging' do - config = use_native_modules! - - use_react_native!( - :path => config[:reactNativePath], - # An absolute path to your application root. - :app_path => "#{Pod::Config.instance.installation_root}/.." - ) - - target 'TypeScriptMessagingTests' do - inherit! :complete - # Pods for testing - end - - post_install do |installer| - # https://github.com/facebook/react-native/blob/main/packages/react-native/scripts/react_native_pods.rb#L197-L202 - react_native_post_install( - installer, - config[:reactNativePath], - :mac_catalyst_enabled => false, - # :ccache_enabled => true - ) - end -end diff --git a/examples/TypeScriptMessaging/ios/Podfile.lock b/examples/TypeScriptMessaging/ios/Podfile.lock deleted file mode 100644 index 47c9e973e8..0000000000 --- a/examples/TypeScriptMessaging/ios/Podfile.lock +++ /dev/null @@ -1,3251 +0,0 @@ -PODS: - - boost (1.84.0) - - DoubleConversion (1.1.6) - - fast_float (8.0.0) - - FBLazyVector (0.80.2) - - fmt (11.0.2) - - glog (0.3.5) - - hermes-engine (0.80.2): - - hermes-engine/Pre-built (= 0.80.2) - - hermes-engine/Pre-built (0.80.2) - - op-sqlite (14.0.4): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - RCTRequired - - RCTTypeSafety - - React - - React-callinvoker - - React-Core - - React-debug - - React-Fabric - - React-featureflags - - React-graphics - - React-hermes - - React-ImageManager - - React-jsi - - React-NativeModulesApple - - React-RCTFabric - - React-renderercss - - React-rendererdebug - - React-utils - - ReactCodegen - - ReactCommon/turbomodule/bridging - - ReactCommon/turbomodule/core - - SocketRocket - - Yoga - - RCT-Folly (2024.11.18.00): - - boost - - DoubleConversion - - fast_float (= 8.0.0) - - fmt (= 11.0.2) - - glog - - RCT-Folly/Default (= 2024.11.18.00) - - RCT-Folly/Default (2024.11.18.00): - - boost - - DoubleConversion - - fast_float (= 8.0.0) - - fmt (= 11.0.2) - - glog - - RCT-Folly/Fabric (2024.11.18.00): - - boost - - DoubleConversion - - fast_float (= 8.0.0) - - fmt (= 11.0.2) - - glog - - RCTDeprecation (0.80.2) - - RCTRequired (0.80.2) - - RCTTypeSafety (0.80.2): - - FBLazyVector (= 0.80.2) - - RCTRequired (= 0.80.2) - - React-Core (= 0.80.2) - - React (0.80.2): - - React-Core (= 0.80.2) - - React-Core/DevSupport (= 0.80.2) - - React-Core/RCTWebSocket (= 0.80.2) - - React-RCTActionSheet (= 0.80.2) - - React-RCTAnimation (= 0.80.2) - - React-RCTBlob (= 0.80.2) - - React-RCTImage (= 0.80.2) - - React-RCTLinking (= 0.80.2) - - React-RCTNetwork (= 0.80.2) - - React-RCTSettings (= 0.80.2) - - React-RCTText (= 0.80.2) - - React-RCTVibration (= 0.80.2) - - React-callinvoker (0.80.2) - - React-Codegen (0.1.0) - - React-Core (0.80.2): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - RCTDeprecation - - React-Core/Default (= 0.80.2) - - React-cxxreact - - React-featureflags - - React-hermes - - React-jsi - - React-jsiexecutor - - React-jsinspector - - React-jsinspectorcdp - - React-jsitooling - - React-perflogger - - React-runtimescheduler - - React-utils - - SocketRocket - - Yoga - - React-Core/CoreModulesHeaders (0.80.2): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - RCTDeprecation - - React-Core/Default - - React-cxxreact - - React-featureflags - - React-hermes - - React-jsi - - React-jsiexecutor - - React-jsinspector - - React-jsinspectorcdp - - React-jsitooling - - React-perflogger - - React-runtimescheduler - - React-utils - - SocketRocket - - Yoga - - React-Core/Default (0.80.2): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - RCTDeprecation - - React-cxxreact - - React-featureflags - - React-hermes - - React-jsi - - React-jsiexecutor - - React-jsinspector - - React-jsinspectorcdp - - React-jsitooling - - React-perflogger - - React-runtimescheduler - - React-utils - - SocketRocket - - Yoga - - React-Core/DevSupport (0.80.2): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - RCTDeprecation - - React-Core/Default (= 0.80.2) - - React-Core/RCTWebSocket (= 0.80.2) - - React-cxxreact - - React-featureflags - - React-hermes - - React-jsi - - React-jsiexecutor - - React-jsinspector - - React-jsinspectorcdp - - React-jsitooling - - React-perflogger - - React-runtimescheduler - - React-utils - - SocketRocket - - Yoga - - React-Core/RCTActionSheetHeaders (0.80.2): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - RCTDeprecation - - React-Core/Default - - React-cxxreact - - React-featureflags - - React-hermes - - React-jsi - - React-jsiexecutor - - React-jsinspector - - React-jsinspectorcdp - - React-jsitooling - - React-perflogger - - React-runtimescheduler - - React-utils - - SocketRocket - - Yoga - - React-Core/RCTAnimationHeaders (0.80.2): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - RCTDeprecation - - React-Core/Default - - React-cxxreact - - React-featureflags - - React-hermes - - React-jsi - - React-jsiexecutor - - React-jsinspector - - React-jsinspectorcdp - - React-jsitooling - - React-perflogger - - React-runtimescheduler - - React-utils - - SocketRocket - - Yoga - - React-Core/RCTBlobHeaders (0.80.2): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - RCTDeprecation - - React-Core/Default - - React-cxxreact - - React-featureflags - - React-hermes - - React-jsi - - React-jsiexecutor - - React-jsinspector - - React-jsinspectorcdp - - React-jsitooling - - React-perflogger - - React-runtimescheduler - - React-utils - - SocketRocket - - Yoga - - React-Core/RCTImageHeaders (0.80.2): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - RCTDeprecation - - React-Core/Default - - React-cxxreact - - React-featureflags - - React-hermes - - React-jsi - - React-jsiexecutor - - React-jsinspector - - React-jsinspectorcdp - - React-jsitooling - - React-perflogger - - React-runtimescheduler - - React-utils - - SocketRocket - - Yoga - - React-Core/RCTLinkingHeaders (0.80.2): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - RCTDeprecation - - React-Core/Default - - React-cxxreact - - React-featureflags - - React-hermes - - React-jsi - - React-jsiexecutor - - React-jsinspector - - React-jsinspectorcdp - - React-jsitooling - - React-perflogger - - React-runtimescheduler - - React-utils - - SocketRocket - - Yoga - - React-Core/RCTNetworkHeaders (0.80.2): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - RCTDeprecation - - React-Core/Default - - React-cxxreact - - React-featureflags - - React-hermes - - React-jsi - - React-jsiexecutor - - React-jsinspector - - React-jsinspectorcdp - - React-jsitooling - - React-perflogger - - React-runtimescheduler - - React-utils - - SocketRocket - - Yoga - - React-Core/RCTSettingsHeaders (0.80.2): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - RCTDeprecation - - React-Core/Default - - React-cxxreact - - React-featureflags - - React-hermes - - React-jsi - - React-jsiexecutor - - React-jsinspector - - React-jsinspectorcdp - - React-jsitooling - - React-perflogger - - React-runtimescheduler - - React-utils - - SocketRocket - - Yoga - - React-Core/RCTTextHeaders (0.80.2): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - RCTDeprecation - - React-Core/Default - - React-cxxreact - - React-featureflags - - React-hermes - - React-jsi - - React-jsiexecutor - - React-jsinspector - - React-jsinspectorcdp - - React-jsitooling - - React-perflogger - - React-runtimescheduler - - React-utils - - SocketRocket - - Yoga - - React-Core/RCTVibrationHeaders (0.80.2): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - RCTDeprecation - - React-Core/Default - - React-cxxreact - - React-featureflags - - React-hermes - - React-jsi - - React-jsiexecutor - - React-jsinspector - - React-jsinspectorcdp - - React-jsitooling - - React-perflogger - - React-runtimescheduler - - React-utils - - SocketRocket - - Yoga - - React-Core/RCTWebSocket (0.80.2): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - RCTDeprecation - - React-Core/Default (= 0.80.2) - - React-cxxreact - - React-featureflags - - React-hermes - - React-jsi - - React-jsiexecutor - - React-jsinspector - - React-jsinspectorcdp - - React-jsitooling - - React-perflogger - - React-runtimescheduler - - React-utils - - SocketRocket - - Yoga - - React-CoreModules (0.80.2): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - RCT-Folly - - RCT-Folly/Fabric - - RCTTypeSafety (= 0.80.2) - - React-Core/CoreModulesHeaders (= 0.80.2) - - React-jsi (= 0.80.2) - - React-jsinspector - - React-jsinspectorcdp - - React-jsinspectortracing - - React-NativeModulesApple - - React-RCTBlob - - React-RCTFBReactNativeSpec - - React-RCTImage (= 0.80.2) - - ReactCommon - - SocketRocket - - React-cxxreact (0.80.2): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - React-callinvoker (= 0.80.2) - - React-debug (= 0.80.2) - - React-jsi (= 0.80.2) - - React-jsinspector - - React-jsinspectorcdp - - React-jsinspectortracing - - React-logger (= 0.80.2) - - React-perflogger (= 0.80.2) - - React-runtimeexecutor (= 0.80.2) - - React-timing (= 0.80.2) - - SocketRocket - - React-debug (0.80.2) - - React-defaultsnativemodule (0.80.2): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - React-domnativemodule - - React-featureflagsnativemodule - - React-hermes - - React-idlecallbacksnativemodule - - React-jsi - - React-jsiexecutor - - React-microtasksnativemodule - - React-RCTFBReactNativeSpec - - SocketRocket - - React-domnativemodule (0.80.2): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - React-Fabric - - React-FabricComponents - - React-graphics - - React-hermes - - React-jsi - - React-jsiexecutor - - React-RCTFBReactNativeSpec - - ReactCommon/turbomodule/core - - SocketRocket - - Yoga - - React-Fabric (0.80.2): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - RCTRequired - - RCTTypeSafety - - React-Core - - React-cxxreact - - React-debug - - React-Fabric/animations (= 0.80.2) - - React-Fabric/attributedstring (= 0.80.2) - - React-Fabric/componentregistry (= 0.80.2) - - React-Fabric/componentregistrynative (= 0.80.2) - - React-Fabric/components (= 0.80.2) - - React-Fabric/consistency (= 0.80.2) - - React-Fabric/core (= 0.80.2) - - React-Fabric/dom (= 0.80.2) - - React-Fabric/imagemanager (= 0.80.2) - - React-Fabric/leakchecker (= 0.80.2) - - React-Fabric/mounting (= 0.80.2) - - React-Fabric/observers (= 0.80.2) - - React-Fabric/scheduler (= 0.80.2) - - React-Fabric/telemetry (= 0.80.2) - - React-Fabric/templateprocessor (= 0.80.2) - - React-Fabric/uimanager (= 0.80.2) - - React-featureflags - - React-graphics - - React-hermes - - React-jsi - - React-jsiexecutor - - React-logger - - React-rendererdebug - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - SocketRocket - - React-Fabric/animations (0.80.2): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - RCTRequired - - RCTTypeSafety - - React-Core - - React-cxxreact - - React-debug - - React-featureflags - - React-graphics - - React-hermes - - React-jsi - - React-jsiexecutor - - React-logger - - React-rendererdebug - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - SocketRocket - - React-Fabric/attributedstring (0.80.2): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - RCTRequired - - RCTTypeSafety - - React-Core - - React-cxxreact - - React-debug - - React-featureflags - - React-graphics - - React-hermes - - React-jsi - - React-jsiexecutor - - React-logger - - React-rendererdebug - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - SocketRocket - - React-Fabric/componentregistry (0.80.2): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - RCTRequired - - RCTTypeSafety - - React-Core - - React-cxxreact - - React-debug - - React-featureflags - - React-graphics - - React-hermes - - React-jsi - - React-jsiexecutor - - React-logger - - React-rendererdebug - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - SocketRocket - - React-Fabric/componentregistrynative (0.80.2): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - RCTRequired - - RCTTypeSafety - - React-Core - - React-cxxreact - - React-debug - - React-featureflags - - React-graphics - - React-hermes - - React-jsi - - React-jsiexecutor - - React-logger - - React-rendererdebug - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - SocketRocket - - React-Fabric/components (0.80.2): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - RCTRequired - - RCTTypeSafety - - React-Core - - React-cxxreact - - React-debug - - React-Fabric/components/legacyviewmanagerinterop (= 0.80.2) - - React-Fabric/components/root (= 0.80.2) - - React-Fabric/components/scrollview (= 0.80.2) - - React-Fabric/components/view (= 0.80.2) - - React-featureflags - - React-graphics - - React-hermes - - React-jsi - - React-jsiexecutor - - React-logger - - React-rendererdebug - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - SocketRocket - - React-Fabric/components/legacyviewmanagerinterop (0.80.2): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - RCTRequired - - RCTTypeSafety - - React-Core - - React-cxxreact - - React-debug - - React-featureflags - - React-graphics - - React-hermes - - React-jsi - - React-jsiexecutor - - React-logger - - React-rendererdebug - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - SocketRocket - - React-Fabric/components/root (0.80.2): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - RCTRequired - - RCTTypeSafety - - React-Core - - React-cxxreact - - React-debug - - React-featureflags - - React-graphics - - React-hermes - - React-jsi - - React-jsiexecutor - - React-logger - - React-rendererdebug - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - SocketRocket - - React-Fabric/components/scrollview (0.80.2): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - RCTRequired - - RCTTypeSafety - - React-Core - - React-cxxreact - - React-debug - - React-featureflags - - React-graphics - - React-hermes - - React-jsi - - React-jsiexecutor - - React-logger - - React-rendererdebug - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - SocketRocket - - React-Fabric/components/view (0.80.2): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - RCTRequired - - RCTTypeSafety - - React-Core - - React-cxxreact - - React-debug - - React-featureflags - - React-graphics - - React-hermes - - React-jsi - - React-jsiexecutor - - React-logger - - React-renderercss - - React-rendererdebug - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - SocketRocket - - Yoga - - React-Fabric/consistency (0.80.2): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - RCTRequired - - RCTTypeSafety - - React-Core - - React-cxxreact - - React-debug - - React-featureflags - - React-graphics - - React-hermes - - React-jsi - - React-jsiexecutor - - React-logger - - React-rendererdebug - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - SocketRocket - - React-Fabric/core (0.80.2): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - RCTRequired - - RCTTypeSafety - - React-Core - - React-cxxreact - - React-debug - - React-featureflags - - React-graphics - - React-hermes - - React-jsi - - React-jsiexecutor - - React-logger - - React-rendererdebug - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - SocketRocket - - React-Fabric/dom (0.80.2): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - RCTRequired - - RCTTypeSafety - - React-Core - - React-cxxreact - - React-debug - - React-featureflags - - React-graphics - - React-hermes - - React-jsi - - React-jsiexecutor - - React-logger - - React-rendererdebug - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - SocketRocket - - React-Fabric/imagemanager (0.80.2): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - RCTRequired - - RCTTypeSafety - - React-Core - - React-cxxreact - - React-debug - - React-featureflags - - React-graphics - - React-hermes - - React-jsi - - React-jsiexecutor - - React-logger - - React-rendererdebug - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - SocketRocket - - React-Fabric/leakchecker (0.80.2): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - RCTRequired - - RCTTypeSafety - - React-Core - - React-cxxreact - - React-debug - - React-featureflags - - React-graphics - - React-hermes - - React-jsi - - React-jsiexecutor - - React-logger - - React-rendererdebug - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - SocketRocket - - React-Fabric/mounting (0.80.2): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - RCTRequired - - RCTTypeSafety - - React-Core - - React-cxxreact - - React-debug - - React-featureflags - - React-graphics - - React-hermes - - React-jsi - - React-jsiexecutor - - React-logger - - React-rendererdebug - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - SocketRocket - - React-Fabric/observers (0.80.2): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - RCTRequired - - RCTTypeSafety - - React-Core - - React-cxxreact - - React-debug - - React-Fabric/observers/events (= 0.80.2) - - React-featureflags - - React-graphics - - React-hermes - - React-jsi - - React-jsiexecutor - - React-logger - - React-rendererdebug - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - SocketRocket - - React-Fabric/observers/events (0.80.2): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - RCTRequired - - RCTTypeSafety - - React-Core - - React-cxxreact - - React-debug - - React-featureflags - - React-graphics - - React-hermes - - React-jsi - - React-jsiexecutor - - React-logger - - React-rendererdebug - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - SocketRocket - - React-Fabric/scheduler (0.80.2): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - RCTRequired - - RCTTypeSafety - - React-Core - - React-cxxreact - - React-debug - - React-Fabric/observers/events - - React-featureflags - - React-graphics - - React-hermes - - React-jsi - - React-jsiexecutor - - React-logger - - React-performancetimeline - - React-rendererdebug - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - SocketRocket - - React-Fabric/telemetry (0.80.2): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - RCTRequired - - RCTTypeSafety - - React-Core - - React-cxxreact - - React-debug - - React-featureflags - - React-graphics - - React-hermes - - React-jsi - - React-jsiexecutor - - React-logger - - React-rendererdebug - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - SocketRocket - - React-Fabric/templateprocessor (0.80.2): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - RCTRequired - - RCTTypeSafety - - React-Core - - React-cxxreact - - React-debug - - React-featureflags - - React-graphics - - React-hermes - - React-jsi - - React-jsiexecutor - - React-logger - - React-rendererdebug - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - SocketRocket - - React-Fabric/uimanager (0.80.2): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - RCTRequired - - RCTTypeSafety - - React-Core - - React-cxxreact - - React-debug - - React-Fabric/uimanager/consistency (= 0.80.2) - - React-featureflags - - React-graphics - - React-hermes - - React-jsi - - React-jsiexecutor - - React-logger - - React-rendererconsistency - - React-rendererdebug - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - SocketRocket - - React-Fabric/uimanager/consistency (0.80.2): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - RCTRequired - - RCTTypeSafety - - React-Core - - React-cxxreact - - React-debug - - React-featureflags - - React-graphics - - React-hermes - - React-jsi - - React-jsiexecutor - - React-logger - - React-rendererconsistency - - React-rendererdebug - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - SocketRocket - - React-FabricComponents (0.80.2): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - RCTRequired - - RCTTypeSafety - - React-Core - - React-cxxreact - - React-debug - - React-Fabric - - React-FabricComponents/components (= 0.80.2) - - React-FabricComponents/textlayoutmanager (= 0.80.2) - - React-featureflags - - React-graphics - - React-hermes - - React-jsi - - React-jsiexecutor - - React-logger - - React-rendererdebug - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - SocketRocket - - Yoga - - React-FabricComponents/components (0.80.2): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - RCTRequired - - RCTTypeSafety - - React-Core - - React-cxxreact - - React-debug - - React-Fabric - - React-FabricComponents/components/inputaccessory (= 0.80.2) - - React-FabricComponents/components/iostextinput (= 0.80.2) - - React-FabricComponents/components/modal (= 0.80.2) - - React-FabricComponents/components/rncore (= 0.80.2) - - React-FabricComponents/components/safeareaview (= 0.80.2) - - React-FabricComponents/components/scrollview (= 0.80.2) - - React-FabricComponents/components/text (= 0.80.2) - - React-FabricComponents/components/textinput (= 0.80.2) - - React-FabricComponents/components/unimplementedview (= 0.80.2) - - React-featureflags - - React-graphics - - React-hermes - - React-jsi - - React-jsiexecutor - - React-logger - - React-rendererdebug - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - SocketRocket - - Yoga - - React-FabricComponents/components/inputaccessory (0.80.2): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - RCTRequired - - RCTTypeSafety - - React-Core - - React-cxxreact - - React-debug - - React-Fabric - - React-featureflags - - React-graphics - - React-hermes - - React-jsi - - React-jsiexecutor - - React-logger - - React-rendererdebug - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - SocketRocket - - Yoga - - React-FabricComponents/components/iostextinput (0.80.2): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - RCTRequired - - RCTTypeSafety - - React-Core - - React-cxxreact - - React-debug - - React-Fabric - - React-featureflags - - React-graphics - - React-hermes - - React-jsi - - React-jsiexecutor - - React-logger - - React-rendererdebug - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - SocketRocket - - Yoga - - React-FabricComponents/components/modal (0.80.2): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - RCTRequired - - RCTTypeSafety - - React-Core - - React-cxxreact - - React-debug - - React-Fabric - - React-featureflags - - React-graphics - - React-hermes - - React-jsi - - React-jsiexecutor - - React-logger - - React-rendererdebug - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - SocketRocket - - Yoga - - React-FabricComponents/components/rncore (0.80.2): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - RCTRequired - - RCTTypeSafety - - React-Core - - React-cxxreact - - React-debug - - React-Fabric - - React-featureflags - - React-graphics - - React-hermes - - React-jsi - - React-jsiexecutor - - React-logger - - React-rendererdebug - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - SocketRocket - - Yoga - - React-FabricComponents/components/safeareaview (0.80.2): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - RCTRequired - - RCTTypeSafety - - React-Core - - React-cxxreact - - React-debug - - React-Fabric - - React-featureflags - - React-graphics - - React-hermes - - React-jsi - - React-jsiexecutor - - React-logger - - React-rendererdebug - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - SocketRocket - - Yoga - - React-FabricComponents/components/scrollview (0.80.2): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - RCTRequired - - RCTTypeSafety - - React-Core - - React-cxxreact - - React-debug - - React-Fabric - - React-featureflags - - React-graphics - - React-hermes - - React-jsi - - React-jsiexecutor - - React-logger - - React-rendererdebug - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - SocketRocket - - Yoga - - React-FabricComponents/components/text (0.80.2): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - RCTRequired - - RCTTypeSafety - - React-Core - - React-cxxreact - - React-debug - - React-Fabric - - React-featureflags - - React-graphics - - React-hermes - - React-jsi - - React-jsiexecutor - - React-logger - - React-rendererdebug - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - SocketRocket - - Yoga - - React-FabricComponents/components/textinput (0.80.2): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - RCTRequired - - RCTTypeSafety - - React-Core - - React-cxxreact - - React-debug - - React-Fabric - - React-featureflags - - React-graphics - - React-hermes - - React-jsi - - React-jsiexecutor - - React-logger - - React-rendererdebug - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - SocketRocket - - Yoga - - React-FabricComponents/components/unimplementedview (0.80.2): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - RCTRequired - - RCTTypeSafety - - React-Core - - React-cxxreact - - React-debug - - React-Fabric - - React-featureflags - - React-graphics - - React-hermes - - React-jsi - - React-jsiexecutor - - React-logger - - React-rendererdebug - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - SocketRocket - - Yoga - - React-FabricComponents/textlayoutmanager (0.80.2): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - RCTRequired - - RCTTypeSafety - - React-Core - - React-cxxreact - - React-debug - - React-Fabric - - React-featureflags - - React-graphics - - React-hermes - - React-jsi - - React-jsiexecutor - - React-logger - - React-rendererdebug - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - SocketRocket - - Yoga - - React-FabricImage (0.80.2): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - RCTRequired (= 0.80.2) - - RCTTypeSafety (= 0.80.2) - - React-Fabric - - React-featureflags - - React-graphics - - React-hermes - - React-ImageManager - - React-jsi - - React-jsiexecutor (= 0.80.2) - - React-logger - - React-rendererdebug - - React-utils - - ReactCommon - - SocketRocket - - Yoga - - React-featureflags (0.80.2): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - RCT-Folly - - RCT-Folly/Fabric - - SocketRocket - - React-featureflagsnativemodule (0.80.2): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - React-featureflags - - React-hermes - - React-jsi - - React-jsiexecutor - - React-RCTFBReactNativeSpec - - ReactCommon/turbomodule/core - - SocketRocket - - React-graphics (0.80.2): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - React-hermes - - React-jsi - - React-jsiexecutor - - React-utils - - SocketRocket - - React-hermes (0.80.2): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - React-cxxreact (= 0.80.2) - - React-jsi - - React-jsiexecutor (= 0.80.2) - - React-jsinspector - - React-jsinspectorcdp - - React-jsinspectortracing - - React-perflogger (= 0.80.2) - - React-runtimeexecutor - - SocketRocket - - React-idlecallbacksnativemodule (0.80.2): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - React-hermes - - React-jsi - - React-jsiexecutor - - React-RCTFBReactNativeSpec - - React-runtimescheduler - - ReactCommon/turbomodule/core - - SocketRocket - - React-ImageManager (0.80.2): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - RCT-Folly - - RCT-Folly/Fabric - - React-Core/Default - - React-debug - - React-Fabric - - React-graphics - - React-rendererdebug - - React-utils - - SocketRocket - - React-jserrorhandler (0.80.2): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - React-cxxreact - - React-debug - - React-featureflags - - React-jsi - - ReactCommon/turbomodule/bridging - - SocketRocket - - React-jsi (0.80.2): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - SocketRocket - - React-jsiexecutor (0.80.2): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - React-cxxreact (= 0.80.2) - - React-jsi (= 0.80.2) - - React-jsinspector - - React-jsinspectorcdp - - React-jsinspectortracing - - React-perflogger (= 0.80.2) - - SocketRocket - - React-jsinspector (0.80.2): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - React-featureflags - - React-jsi - - React-jsinspectorcdp - - React-jsinspectornetwork - - React-jsinspectortracing - - React-perflogger (= 0.80.2) - - React-runtimeexecutor (= 0.80.2) - - SocketRocket - - React-jsinspectorcdp (0.80.2): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - RCT-Folly - - RCT-Folly/Fabric - - SocketRocket - - React-jsinspectornetwork (0.80.2): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - RCT-Folly - - RCT-Folly/Fabric - - React-jsinspectorcdp - - SocketRocket - - React-jsinspectortracing (0.80.2): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - RCT-Folly - - RCT-Folly/Fabric - - React-oscompat - - SocketRocket - - React-jsitooling (0.80.2): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - RCT-Folly - - RCT-Folly/Fabric - - React-cxxreact (= 0.80.2) - - React-jsi (= 0.80.2) - - React-jsinspector - - React-jsinspectorcdp - - React-jsinspectortracing - - SocketRocket - - React-jsitracing (0.80.2): - - React-jsi - - React-logger (0.80.2): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - RCT-Folly - - RCT-Folly/Fabric - - SocketRocket - - React-Mapbuffer (0.80.2): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - RCT-Folly - - RCT-Folly/Fabric - - React-debug - - SocketRocket - - React-microtasksnativemodule (0.80.2): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - React-hermes - - React-jsi - - React-jsiexecutor - - React-RCTFBReactNativeSpec - - ReactCommon/turbomodule/core - - SocketRocket - - react-native-blob-util (0.22.2): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - RCTRequired - - RCTTypeSafety - - React-Core - - React-debug - - React-Fabric - - React-featureflags - - React-graphics - - React-hermes - - React-ImageManager - - React-jsi - - React-NativeModulesApple - - React-RCTFabric - - React-renderercss - - React-rendererdebug - - React-utils - - ReactCodegen - - ReactCommon/turbomodule/bridging - - ReactCommon/turbomodule/core - - SocketRocket - - Yoga - - react-native-document-picker (10.1.3): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - RCTRequired - - RCTTypeSafety - - React-Core - - React-debug - - React-Fabric - - React-featureflags - - React-graphics - - React-hermes - - React-ImageManager - - React-jsi - - React-NativeModulesApple - - React-RCTFabric - - React-renderercss - - React-rendererdebug - - React-utils - - ReactCodegen - - ReactCommon/turbomodule/bridging - - ReactCommon/turbomodule/core - - SocketRocket - - Yoga - - react-native-image-picker (8.2.1): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - RCTRequired - - RCTTypeSafety - - React-Core - - React-debug - - React-Fabric - - React-featureflags - - React-graphics - - React-hermes - - React-ImageManager - - React-jsi - - React-NativeModulesApple - - React-RCTFabric - - React-renderercss - - React-rendererdebug - - React-utils - - ReactCodegen - - ReactCommon/turbomodule/bridging - - ReactCommon/turbomodule/core - - SocketRocket - - Yoga - - react-native-netinfo (11.4.1): - - React-Core - - react-native-safe-area-context (5.4.1): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - RCTRequired - - RCTTypeSafety - - React-Core - - React-debug - - React-Fabric - - React-featureflags - - React-graphics - - React-hermes - - React-ImageManager - - React-jsi - - react-native-safe-area-context/common (= 5.4.1) - - react-native-safe-area-context/fabric (= 5.4.1) - - React-NativeModulesApple - - React-RCTFabric - - React-renderercss - - React-rendererdebug - - React-utils - - ReactCodegen - - ReactCommon/turbomodule/bridging - - ReactCommon/turbomodule/core - - SocketRocket - - Yoga - - react-native-safe-area-context/common (5.4.1): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - RCTRequired - - RCTTypeSafety - - React-Core - - React-debug - - React-Fabric - - React-featureflags - - React-graphics - - React-hermes - - React-ImageManager - - React-jsi - - React-NativeModulesApple - - React-RCTFabric - - React-renderercss - - React-rendererdebug - - React-utils - - ReactCodegen - - ReactCommon/turbomodule/bridging - - ReactCommon/turbomodule/core - - SocketRocket - - Yoga - - react-native-safe-area-context/fabric (5.4.1): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - RCTRequired - - RCTTypeSafety - - React-Core - - React-debug - - React-Fabric - - React-featureflags - - React-graphics - - React-hermes - - React-ImageManager - - React-jsi - - react-native-safe-area-context/common - - React-NativeModulesApple - - React-RCTFabric - - React-renderercss - - React-rendererdebug - - React-utils - - ReactCodegen - - ReactCommon/turbomodule/bridging - - ReactCommon/turbomodule/core - - SocketRocket - - Yoga - - react-native-video (6.16.1): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - RCTRequired - - RCTTypeSafety - - React-Core - - React-debug - - React-Fabric - - React-featureflags - - React-graphics - - React-hermes - - React-ImageManager - - React-jsi - - react-native-video/Video (= 6.16.1) - - React-NativeModulesApple - - React-RCTFabric - - React-renderercss - - React-rendererdebug - - React-utils - - ReactCodegen - - ReactCommon/turbomodule/bridging - - ReactCommon/turbomodule/core - - SocketRocket - - Yoga - - react-native-video/Fabric (6.16.1): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - RCTRequired - - RCTTypeSafety - - React-Core - - React-debug - - React-Fabric - - React-featureflags - - React-graphics - - React-hermes - - React-ImageManager - - React-jsi - - React-NativeModulesApple - - React-RCTFabric - - React-renderercss - - React-rendererdebug - - React-utils - - ReactCodegen - - ReactCommon/turbomodule/bridging - - ReactCommon/turbomodule/core - - SocketRocket - - Yoga - - react-native-video/Video (6.16.1): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - RCTRequired - - RCTTypeSafety - - React-Core - - React-debug - - React-Fabric - - React-featureflags - - React-graphics - - React-hermes - - React-ImageManager - - React-jsi - - react-native-video/Fabric - - React-NativeModulesApple - - React-RCTFabric - - React-renderercss - - React-rendererdebug - - React-utils - - ReactCodegen - - ReactCommon/turbomodule/bridging - - ReactCommon/turbomodule/core - - SocketRocket - - Yoga - - React-NativeModulesApple (0.80.2): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - React-callinvoker - - React-Core - - React-cxxreact - - React-featureflags - - React-hermes - - React-jsi - - React-jsinspector - - React-jsinspectorcdp - - React-runtimeexecutor - - ReactCommon/turbomodule/bridging - - ReactCommon/turbomodule/core - - SocketRocket - - React-oscompat (0.80.2) - - React-perflogger (0.80.2): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - RCT-Folly - - RCT-Folly/Fabric - - SocketRocket - - React-performancetimeline (0.80.2): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - RCT-Folly - - RCT-Folly/Fabric - - React-featureflags - - React-jsinspectortracing - - React-perflogger - - React-timing - - SocketRocket - - React-RCTActionSheet (0.80.2): - - React-Core/RCTActionSheetHeaders (= 0.80.2) - - React-RCTAnimation (0.80.2): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - RCT-Folly - - RCT-Folly/Fabric - - RCTTypeSafety - - React-Core/RCTAnimationHeaders - - React-featureflags - - React-jsi - - React-NativeModulesApple - - React-RCTFBReactNativeSpec - - ReactCommon - - SocketRocket - - React-RCTAppDelegate (0.80.2): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - RCTRequired - - RCTTypeSafety - - React-Core - - React-CoreModules - - React-debug - - React-defaultsnativemodule - - React-Fabric - - React-featureflags - - React-graphics - - React-hermes - - React-jsitooling - - React-NativeModulesApple - - React-RCTFabric - - React-RCTFBReactNativeSpec - - React-RCTImage - - React-RCTNetwork - - React-RCTRuntime - - React-rendererdebug - - React-RuntimeApple - - React-RuntimeCore - - React-runtimescheduler - - React-utils - - ReactCommon - - SocketRocket - - React-RCTBlob (0.80.2): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - React-Core/RCTBlobHeaders - - React-Core/RCTWebSocket - - React-jsi - - React-jsinspector - - React-jsinspectorcdp - - React-NativeModulesApple - - React-RCTFBReactNativeSpec - - React-RCTNetwork - - ReactCommon - - SocketRocket - - React-RCTFabric (0.80.2): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - React-Core - - React-debug - - React-Fabric - - React-FabricComponents - - React-FabricImage - - React-featureflags - - React-graphics - - React-hermes - - React-ImageManager - - React-jsi - - React-jsinspector - - React-jsinspectorcdp - - React-jsinspectornetwork - - React-jsinspectortracing - - React-performancetimeline - - React-RCTAnimation - - React-RCTImage - - React-RCTText - - React-rendererconsistency - - React-renderercss - - React-rendererdebug - - React-runtimescheduler - - React-utils - - SocketRocket - - Yoga - - React-RCTFBReactNativeSpec (0.80.2): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - RCTRequired - - RCTTypeSafety - - React-Core - - React-hermes - - React-jsi - - React-jsiexecutor - - React-NativeModulesApple - - ReactCommon - - SocketRocket - - React-RCTImage (0.80.2): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - RCT-Folly - - RCT-Folly/Fabric - - RCTTypeSafety - - React-Core/RCTImageHeaders - - React-jsi - - React-NativeModulesApple - - React-RCTFBReactNativeSpec - - React-RCTNetwork - - ReactCommon - - SocketRocket - - React-RCTLinking (0.80.2): - - React-Core/RCTLinkingHeaders (= 0.80.2) - - React-jsi (= 0.80.2) - - React-NativeModulesApple - - React-RCTFBReactNativeSpec - - ReactCommon - - ReactCommon/turbomodule/core (= 0.80.2) - - React-RCTNetwork (0.80.2): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - RCT-Folly - - RCT-Folly/Fabric - - RCTTypeSafety - - React-Core/RCTNetworkHeaders - - React-featureflags - - React-jsi - - React-jsinspectorcdp - - React-jsinspectornetwork - - React-NativeModulesApple - - React-RCTFBReactNativeSpec - - ReactCommon - - SocketRocket - - React-RCTRuntime (0.80.2): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - React-Core - - React-hermes - - React-jsi - - React-jsinspector - - React-jsinspectorcdp - - React-jsinspectortracing - - React-jsitooling - - React-RuntimeApple - - React-RuntimeCore - - React-RuntimeHermes - - SocketRocket - - React-RCTSettings (0.80.2): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - RCT-Folly - - RCT-Folly/Fabric - - RCTTypeSafety - - React-Core/RCTSettingsHeaders - - React-jsi - - React-NativeModulesApple - - React-RCTFBReactNativeSpec - - ReactCommon - - SocketRocket - - React-RCTText (0.80.2): - - React-Core/RCTTextHeaders (= 0.80.2) - - Yoga - - React-RCTVibration (0.80.2): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - RCT-Folly - - RCT-Folly/Fabric - - React-Core/RCTVibrationHeaders - - React-jsi - - React-NativeModulesApple - - React-RCTFBReactNativeSpec - - ReactCommon - - SocketRocket - - React-rendererconsistency (0.80.2) - - React-renderercss (0.80.2): - - React-debug - - React-utils - - React-rendererdebug (0.80.2): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - RCT-Folly - - RCT-Folly/Fabric - - React-debug - - SocketRocket - - React-rncore (0.80.2) - - React-RuntimeApple (0.80.2): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - React-callinvoker - - React-Core/Default - - React-CoreModules - - React-cxxreact - - React-featureflags - - React-jserrorhandler - - React-jsi - - React-jsiexecutor - - React-jsinspector - - React-jsitooling - - React-Mapbuffer - - React-NativeModulesApple - - React-RCTFabric - - React-RCTFBReactNativeSpec - - React-RuntimeCore - - React-runtimeexecutor - - React-RuntimeHermes - - React-runtimescheduler - - React-utils - - SocketRocket - - React-RuntimeCore (0.80.2): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - React-cxxreact - - React-Fabric - - React-featureflags - - React-hermes - - React-jserrorhandler - - React-jsi - - React-jsiexecutor - - React-jsinspector - - React-jsitooling - - React-performancetimeline - - React-runtimeexecutor - - React-runtimescheduler - - React-utils - - SocketRocket - - React-runtimeexecutor (0.80.2): - - React-jsi (= 0.80.2) - - React-RuntimeHermes (0.80.2): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - React-featureflags - - React-hermes - - React-jsi - - React-jsinspector - - React-jsinspectorcdp - - React-jsinspectortracing - - React-jsitooling - - React-jsitracing - - React-RuntimeCore - - React-utils - - SocketRocket - - React-runtimescheduler (0.80.2): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - React-callinvoker - - React-cxxreact - - React-debug - - React-featureflags - - React-hermes - - React-jsi - - React-jsinspectortracing - - React-performancetimeline - - React-rendererconsistency - - React-rendererdebug - - React-runtimeexecutor - - React-timing - - React-utils - - SocketRocket - - React-timing (0.80.2) - - React-utils (0.80.2): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - React-debug - - React-hermes - - React-jsi (= 0.80.2) - - SocketRocket - - ReactAppDependencyProvider (0.80.2): - - ReactCodegen - - ReactCodegen (0.80.2): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - RCTRequired - - RCTTypeSafety - - React-Core - - React-debug - - React-Fabric - - React-FabricImage - - React-featureflags - - React-graphics - - React-hermes - - React-jsi - - React-jsiexecutor - - React-NativeModulesApple - - React-RCTAppDelegate - - React-rendererdebug - - React-utils - - ReactCommon/turbomodule/bridging - - ReactCommon/turbomodule/core - - SocketRocket - - ReactCommon (0.80.2): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - RCT-Folly - - RCT-Folly/Fabric - - ReactCommon/turbomodule (= 0.80.2) - - SocketRocket - - ReactCommon/turbomodule (0.80.2): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - React-callinvoker (= 0.80.2) - - React-cxxreact (= 0.80.2) - - React-jsi (= 0.80.2) - - React-logger (= 0.80.2) - - React-perflogger (= 0.80.2) - - ReactCommon/turbomodule/bridging (= 0.80.2) - - ReactCommon/turbomodule/core (= 0.80.2) - - SocketRocket - - ReactCommon/turbomodule/bridging (0.80.2): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - React-callinvoker (= 0.80.2) - - React-cxxreact (= 0.80.2) - - React-jsi (= 0.80.2) - - React-logger (= 0.80.2) - - React-perflogger (= 0.80.2) - - SocketRocket - - ReactCommon/turbomodule/core (0.80.2): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - React-callinvoker (= 0.80.2) - - React-cxxreact (= 0.80.2) - - React-debug (= 0.80.2) - - React-featureflags (= 0.80.2) - - React-jsi (= 0.80.2) - - React-logger (= 0.80.2) - - React-perflogger (= 0.80.2) - - React-utils (= 0.80.2) - - SocketRocket - - RNAudioRecorderPlayer (3.6.13): - - React-Core - - RNCClipboard (1.16.2): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - RCTRequired - - RCTTypeSafety - - React-Core - - React-debug - - React-Fabric - - React-featureflags - - React-graphics - - React-hermes - - React-ImageManager - - React-jsi - - React-NativeModulesApple - - React-RCTFabric - - React-renderercss - - React-rendererdebug - - React-utils - - ReactCodegen - - ReactCommon/turbomodule/bridging - - ReactCommon/turbomodule/core - - SocketRocket - - Yoga - - RNGestureHandler (2.26.0): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - RCTRequired - - RCTTypeSafety - - React-Core - - React-debug - - React-Fabric - - React-featureflags - - React-graphics - - React-hermes - - React-ImageManager - - React-jsi - - React-NativeModulesApple - - React-RCTFabric - - React-renderercss - - React-rendererdebug - - React-utils - - ReactCodegen - - ReactCommon/turbomodule/bridging - - ReactCommon/turbomodule/core - - SocketRocket - - Yoga - - RNReactNativeHapticFeedback (2.3.3): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - RCTRequired - - RCTTypeSafety - - React-Core - - React-debug - - React-Fabric - - React-featureflags - - React-graphics - - React-hermes - - React-ImageManager - - React-jsi - - React-NativeModulesApple - - React-RCTFabric - - React-renderercss - - React-rendererdebug - - React-utils - - ReactCodegen - - ReactCommon/turbomodule/bridging - - ReactCommon/turbomodule/core - - SocketRocket - - Yoga - - RNReanimated (4.0.1): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - RCTRequired - - RCTTypeSafety - - React-Core - - React-debug - - React-Fabric - - React-featureflags - - React-graphics - - React-hermes - - React-ImageManager - - React-jsi - - React-NativeModulesApple - - React-RCTFabric - - React-renderercss - - React-rendererdebug - - React-utils - - ReactCodegen - - ReactCommon/turbomodule/bridging - - ReactCommon/turbomodule/core - - RNReanimated/reanimated (= 4.0.1) - - RNWorklets - - SocketRocket - - Yoga - - RNReanimated/reanimated (4.0.1): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - RCTRequired - - RCTTypeSafety - - React-Core - - React-debug - - React-Fabric - - React-featureflags - - React-graphics - - React-hermes - - React-ImageManager - - React-jsi - - React-NativeModulesApple - - React-RCTFabric - - React-renderercss - - React-rendererdebug - - React-utils - - ReactCodegen - - ReactCommon/turbomodule/bridging - - ReactCommon/turbomodule/core - - RNReanimated/reanimated/apple (= 4.0.1) - - RNWorklets - - SocketRocket - - Yoga - - RNReanimated/reanimated/apple (4.0.1): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - RCTRequired - - RCTTypeSafety - - React-Core - - React-debug - - React-Fabric - - React-featureflags - - React-graphics - - React-hermes - - React-ImageManager - - React-jsi - - React-NativeModulesApple - - React-RCTFabric - - React-renderercss - - React-rendererdebug - - React-utils - - ReactCodegen - - ReactCommon/turbomodule/bridging - - ReactCommon/turbomodule/core - - RNWorklets - - SocketRocket - - Yoga - - RNScreens (4.11.1): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - RCTRequired - - RCTTypeSafety - - React-Core - - React-debug - - React-Fabric - - React-featureflags - - React-graphics - - React-hermes - - React-ImageManager - - React-jsi - - React-NativeModulesApple - - React-RCTFabric - - React-RCTImage - - React-renderercss - - React-rendererdebug - - React-utils - - ReactCodegen - - ReactCommon/turbomodule/bridging - - ReactCommon/turbomodule/core - - RNScreens/common (= 4.11.1) - - SocketRocket - - Yoga - - RNScreens/common (4.11.1): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - RCTRequired - - RCTTypeSafety - - React-Core - - React-debug - - React-Fabric - - React-featureflags - - React-graphics - - React-hermes - - React-ImageManager - - React-jsi - - React-NativeModulesApple - - React-RCTFabric - - React-RCTImage - - React-renderercss - - React-rendererdebug - - React-utils - - ReactCodegen - - ReactCommon/turbomodule/bridging - - ReactCommon/turbomodule/core - - SocketRocket - - Yoga - - RNShare (12.0.11): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - RCTRequired - - RCTTypeSafety - - React-Core - - React-debug - - React-Fabric - - React-featureflags - - React-graphics - - React-hermes - - React-ImageManager - - React-jsi - - React-NativeModulesApple - - React-RCTFabric - - React-renderercss - - React-rendererdebug - - React-utils - - ReactCodegen - - ReactCommon/turbomodule/bridging - - ReactCommon/turbomodule/core - - SocketRocket - - Yoga - - RNSVG (15.12.0): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - RCTRequired - - RCTTypeSafety - - React-Core - - React-debug - - React-Fabric - - React-featureflags - - React-graphics - - React-hermes - - React-ImageManager - - React-jsi - - React-NativeModulesApple - - React-RCTFabric - - React-renderercss - - React-rendererdebug - - React-utils - - ReactCodegen - - ReactCommon/turbomodule/bridging - - ReactCommon/turbomodule/core - - RNSVG/common (= 15.12.0) - - SocketRocket - - Yoga - - RNSVG/common (15.12.0): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - RCTRequired - - RCTTypeSafety - - React-Core - - React-debug - - React-Fabric - - React-featureflags - - React-graphics - - React-hermes - - React-ImageManager - - React-jsi - - React-NativeModulesApple - - React-RCTFabric - - React-renderercss - - React-rendererdebug - - React-utils - - ReactCodegen - - ReactCommon/turbomodule/bridging - - ReactCommon/turbomodule/core - - SocketRocket - - Yoga - - RNWorklets (0.4.1): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - RCTRequired - - RCTTypeSafety - - React-Core - - React-debug - - React-Fabric - - React-featureflags - - React-graphics - - React-hermes - - React-ImageManager - - React-jsi - - React-NativeModulesApple - - React-RCTFabric - - React-renderercss - - React-rendererdebug - - React-utils - - ReactCodegen - - ReactCommon/turbomodule/bridging - - ReactCommon/turbomodule/core - - RNWorklets/worklets (= 0.4.1) - - SocketRocket - - Yoga - - RNWorklets/worklets (0.4.1): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - RCTRequired - - RCTTypeSafety - - React-Core - - React-debug - - React-Fabric - - React-featureflags - - React-graphics - - React-hermes - - React-ImageManager - - React-jsi - - React-NativeModulesApple - - React-RCTFabric - - React-renderercss - - React-rendererdebug - - React-utils - - ReactCodegen - - ReactCommon/turbomodule/bridging - - ReactCommon/turbomodule/core - - RNWorklets/worklets/apple (= 0.4.1) - - SocketRocket - - Yoga - - RNWorklets/worklets/apple (0.4.1): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - RCTRequired - - RCTTypeSafety - - React-Core - - React-debug - - React-Fabric - - React-featureflags - - React-graphics - - React-hermes - - React-ImageManager - - React-jsi - - React-NativeModulesApple - - React-RCTFabric - - React-renderercss - - React-rendererdebug - - React-utils - - ReactCodegen - - ReactCommon/turbomodule/bridging - - ReactCommon/turbomodule/core - - SocketRocket - - Yoga - - SocketRocket (0.7.1) - - stream-chat-react-native (8.1.0): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - RCTRequired - - RCTTypeSafety - - React-Codegen - - React-Core - - React-debug - - React-Fabric - - React-featureflags - - React-graphics - - React-hermes - - React-ImageManager - - React-jsi - - React-NativeModulesApple - - React-RCTFabric - - React-renderercss - - React-rendererdebug - - React-utils - - ReactCodegen - - ReactCommon/turbomodule/bridging - - ReactCommon/turbomodule/core - - SocketRocket - - Yoga - - Yoga (0.0.0) - -DEPENDENCIES: - - boost (from `../node_modules/react-native/third-party-podspecs/boost.podspec`) - - DoubleConversion (from `../node_modules/react-native/third-party-podspecs/DoubleConversion.podspec`) - - fast_float (from `../node_modules/react-native/third-party-podspecs/fast_float.podspec`) - - FBLazyVector (from `../node_modules/react-native/Libraries/FBLazyVector`) - - fmt (from `../node_modules/react-native/third-party-podspecs/fmt.podspec`) - - glog (from `../node_modules/react-native/third-party-podspecs/glog.podspec`) - - hermes-engine (from `../node_modules/react-native/sdks/hermes-engine/hermes-engine.podspec`) - - "op-sqlite (from `../node_modules/@op-engineering/op-sqlite`)" - - RCT-Folly (from `../node_modules/react-native/third-party-podspecs/RCT-Folly.podspec`) - - RCTDeprecation (from `../node_modules/react-native/ReactApple/Libraries/RCTFoundation/RCTDeprecation`) - - RCTRequired (from `../node_modules/react-native/Libraries/Required`) - - RCTTypeSafety (from `../node_modules/react-native/Libraries/TypeSafety`) - - React (from `../node_modules/react-native/`) - - React-callinvoker (from `../node_modules/react-native/ReactCommon/callinvoker`) - - React-Core (from `../node_modules/react-native/`) - - React-Core/RCTWebSocket (from `../node_modules/react-native/`) - - React-CoreModules (from `../node_modules/react-native/React/CoreModules`) - - React-cxxreact (from `../node_modules/react-native/ReactCommon/cxxreact`) - - React-debug (from `../node_modules/react-native/ReactCommon/react/debug`) - - React-defaultsnativemodule (from `../node_modules/react-native/ReactCommon/react/nativemodule/defaults`) - - React-domnativemodule (from `../node_modules/react-native/ReactCommon/react/nativemodule/dom`) - - React-Fabric (from `../node_modules/react-native/ReactCommon`) - - React-FabricComponents (from `../node_modules/react-native/ReactCommon`) - - React-FabricImage (from `../node_modules/react-native/ReactCommon`) - - React-featureflags (from `../node_modules/react-native/ReactCommon/react/featureflags`) - - React-featureflagsnativemodule (from `../node_modules/react-native/ReactCommon/react/nativemodule/featureflags`) - - React-graphics (from `../node_modules/react-native/ReactCommon/react/renderer/graphics`) - - React-hermes (from `../node_modules/react-native/ReactCommon/hermes`) - - React-idlecallbacksnativemodule (from `../node_modules/react-native/ReactCommon/react/nativemodule/idlecallbacks`) - - React-ImageManager (from `../node_modules/react-native/ReactCommon/react/renderer/imagemanager/platform/ios`) - - React-jserrorhandler (from `../node_modules/react-native/ReactCommon/jserrorhandler`) - - React-jsi (from `../node_modules/react-native/ReactCommon/jsi`) - - React-jsiexecutor (from `../node_modules/react-native/ReactCommon/jsiexecutor`) - - React-jsinspector (from `../node_modules/react-native/ReactCommon/jsinspector-modern`) - - React-jsinspectorcdp (from `../node_modules/react-native/ReactCommon/jsinspector-modern/cdp`) - - React-jsinspectornetwork (from `../node_modules/react-native/ReactCommon/jsinspector-modern/network`) - - React-jsinspectortracing (from `../node_modules/react-native/ReactCommon/jsinspector-modern/tracing`) - - React-jsitooling (from `../node_modules/react-native/ReactCommon/jsitooling`) - - React-jsitracing (from `../node_modules/react-native/ReactCommon/hermes/executor/`) - - React-logger (from `../node_modules/react-native/ReactCommon/logger`) - - React-Mapbuffer (from `../node_modules/react-native/ReactCommon`) - - React-microtasksnativemodule (from `../node_modules/react-native/ReactCommon/react/nativemodule/microtasks`) - - react-native-blob-util (from `../node_modules/react-native-blob-util`) - - "react-native-document-picker (from `../node_modules/@react-native-documents/picker`)" - - react-native-image-picker (from `../node_modules/react-native-image-picker`) - - "react-native-netinfo (from `../node_modules/@react-native-community/netinfo`)" - - react-native-safe-area-context (from `../node_modules/react-native-safe-area-context`) - - react-native-video (from `../node_modules/react-native-video`) - - React-NativeModulesApple (from `../node_modules/react-native/ReactCommon/react/nativemodule/core/platform/ios`) - - React-oscompat (from `../node_modules/react-native/ReactCommon/oscompat`) - - React-perflogger (from `../node_modules/react-native/ReactCommon/reactperflogger`) - - React-performancetimeline (from `../node_modules/react-native/ReactCommon/react/performance/timeline`) - - React-RCTActionSheet (from `../node_modules/react-native/Libraries/ActionSheetIOS`) - - React-RCTAnimation (from `../node_modules/react-native/Libraries/NativeAnimation`) - - React-RCTAppDelegate (from `../node_modules/react-native/Libraries/AppDelegate`) - - React-RCTBlob (from `../node_modules/react-native/Libraries/Blob`) - - React-RCTFabric (from `../node_modules/react-native/React`) - - React-RCTFBReactNativeSpec (from `../node_modules/react-native/React`) - - React-RCTImage (from `../node_modules/react-native/Libraries/Image`) - - React-RCTLinking (from `../node_modules/react-native/Libraries/LinkingIOS`) - - React-RCTNetwork (from `../node_modules/react-native/Libraries/Network`) - - React-RCTRuntime (from `../node_modules/react-native/React/Runtime`) - - React-RCTSettings (from `../node_modules/react-native/Libraries/Settings`) - - React-RCTText (from `../node_modules/react-native/Libraries/Text`) - - React-RCTVibration (from `../node_modules/react-native/Libraries/Vibration`) - - React-rendererconsistency (from `../node_modules/react-native/ReactCommon/react/renderer/consistency`) - - React-renderercss (from `../node_modules/react-native/ReactCommon/react/renderer/css`) - - React-rendererdebug (from `../node_modules/react-native/ReactCommon/react/renderer/debug`) - - React-rncore (from `../node_modules/react-native/ReactCommon`) - - React-RuntimeApple (from `../node_modules/react-native/ReactCommon/react/runtime/platform/ios`) - - React-RuntimeCore (from `../node_modules/react-native/ReactCommon/react/runtime`) - - React-runtimeexecutor (from `../node_modules/react-native/ReactCommon/runtimeexecutor`) - - React-RuntimeHermes (from `../node_modules/react-native/ReactCommon/react/runtime`) - - React-runtimescheduler (from `../node_modules/react-native/ReactCommon/react/renderer/runtimescheduler`) - - React-timing (from `../node_modules/react-native/ReactCommon/react/timing`) - - React-utils (from `../node_modules/react-native/ReactCommon/react/utils`) - - ReactAppDependencyProvider (from `build/generated/ios`) - - ReactCodegen (from `build/generated/ios`) - - ReactCommon/turbomodule/core (from `../node_modules/react-native/ReactCommon`) - - RNAudioRecorderPlayer (from `../node_modules/react-native-audio-recorder-player`) - - "RNCClipboard (from `../node_modules/@react-native-clipboard/clipboard`)" - - RNGestureHandler (from `../node_modules/react-native-gesture-handler`) - - RNReactNativeHapticFeedback (from `../node_modules/react-native-haptic-feedback`) - - RNReanimated (from `../node_modules/react-native-reanimated`) - - RNScreens (from `../node_modules/react-native-screens`) - - RNShare (from `../node_modules/react-native-share`) - - RNSVG (from `../node_modules/react-native-svg`) - - RNWorklets (from `../node_modules/react-native-worklets`) - - SocketRocket (~> 0.7.1) - - stream-chat-react-native (from `../node_modules/stream-chat-react-native`) - - Yoga (from `../node_modules/react-native/ReactCommon/yoga`) - -SPEC REPOS: - trunk: - - React-Codegen - - SocketRocket - -EXTERNAL SOURCES: - boost: - :podspec: "../node_modules/react-native/third-party-podspecs/boost.podspec" - DoubleConversion: - :podspec: "../node_modules/react-native/third-party-podspecs/DoubleConversion.podspec" - fast_float: - :podspec: "../node_modules/react-native/third-party-podspecs/fast_float.podspec" - FBLazyVector: - :path: "../node_modules/react-native/Libraries/FBLazyVector" - fmt: - :podspec: "../node_modules/react-native/third-party-podspecs/fmt.podspec" - glog: - :podspec: "../node_modules/react-native/third-party-podspecs/glog.podspec" - hermes-engine: - :podspec: "../node_modules/react-native/sdks/hermes-engine/hermes-engine.podspec" - :tag: hermes-2025-07-24-RNv0.80.2-5c7dbc0a78cb2d2a8bc81c41c617c3abecf209ff - op-sqlite: - :path: "../node_modules/@op-engineering/op-sqlite" - RCT-Folly: - :podspec: "../node_modules/react-native/third-party-podspecs/RCT-Folly.podspec" - RCTDeprecation: - :path: "../node_modules/react-native/ReactApple/Libraries/RCTFoundation/RCTDeprecation" - RCTRequired: - :path: "../node_modules/react-native/Libraries/Required" - RCTTypeSafety: - :path: "../node_modules/react-native/Libraries/TypeSafety" - React: - :path: "../node_modules/react-native/" - React-callinvoker: - :path: "../node_modules/react-native/ReactCommon/callinvoker" - React-Core: - :path: "../node_modules/react-native/" - React-CoreModules: - :path: "../node_modules/react-native/React/CoreModules" - React-cxxreact: - :path: "../node_modules/react-native/ReactCommon/cxxreact" - React-debug: - :path: "../node_modules/react-native/ReactCommon/react/debug" - React-defaultsnativemodule: - :path: "../node_modules/react-native/ReactCommon/react/nativemodule/defaults" - React-domnativemodule: - :path: "../node_modules/react-native/ReactCommon/react/nativemodule/dom" - React-Fabric: - :path: "../node_modules/react-native/ReactCommon" - React-FabricComponents: - :path: "../node_modules/react-native/ReactCommon" - React-FabricImage: - :path: "../node_modules/react-native/ReactCommon" - React-featureflags: - :path: "../node_modules/react-native/ReactCommon/react/featureflags" - React-featureflagsnativemodule: - :path: "../node_modules/react-native/ReactCommon/react/nativemodule/featureflags" - React-graphics: - :path: "../node_modules/react-native/ReactCommon/react/renderer/graphics" - React-hermes: - :path: "../node_modules/react-native/ReactCommon/hermes" - React-idlecallbacksnativemodule: - :path: "../node_modules/react-native/ReactCommon/react/nativemodule/idlecallbacks" - React-ImageManager: - :path: "../node_modules/react-native/ReactCommon/react/renderer/imagemanager/platform/ios" - React-jserrorhandler: - :path: "../node_modules/react-native/ReactCommon/jserrorhandler" - React-jsi: - :path: "../node_modules/react-native/ReactCommon/jsi" - React-jsiexecutor: - :path: "../node_modules/react-native/ReactCommon/jsiexecutor" - React-jsinspector: - :path: "../node_modules/react-native/ReactCommon/jsinspector-modern" - React-jsinspectorcdp: - :path: "../node_modules/react-native/ReactCommon/jsinspector-modern/cdp" - React-jsinspectornetwork: - :path: "../node_modules/react-native/ReactCommon/jsinspector-modern/network" - React-jsinspectortracing: - :path: "../node_modules/react-native/ReactCommon/jsinspector-modern/tracing" - React-jsitooling: - :path: "../node_modules/react-native/ReactCommon/jsitooling" - React-jsitracing: - :path: "../node_modules/react-native/ReactCommon/hermes/executor/" - React-logger: - :path: "../node_modules/react-native/ReactCommon/logger" - React-Mapbuffer: - :path: "../node_modules/react-native/ReactCommon" - React-microtasksnativemodule: - :path: "../node_modules/react-native/ReactCommon/react/nativemodule/microtasks" - react-native-blob-util: - :path: "../node_modules/react-native-blob-util" - react-native-document-picker: - :path: "../node_modules/@react-native-documents/picker" - react-native-image-picker: - :path: "../node_modules/react-native-image-picker" - react-native-netinfo: - :path: "../node_modules/@react-native-community/netinfo" - react-native-safe-area-context: - :path: "../node_modules/react-native-safe-area-context" - react-native-video: - :path: "../node_modules/react-native-video" - React-NativeModulesApple: - :path: "../node_modules/react-native/ReactCommon/react/nativemodule/core/platform/ios" - React-oscompat: - :path: "../node_modules/react-native/ReactCommon/oscompat" - React-perflogger: - :path: "../node_modules/react-native/ReactCommon/reactperflogger" - React-performancetimeline: - :path: "../node_modules/react-native/ReactCommon/react/performance/timeline" - React-RCTActionSheet: - :path: "../node_modules/react-native/Libraries/ActionSheetIOS" - React-RCTAnimation: - :path: "../node_modules/react-native/Libraries/NativeAnimation" - React-RCTAppDelegate: - :path: "../node_modules/react-native/Libraries/AppDelegate" - React-RCTBlob: - :path: "../node_modules/react-native/Libraries/Blob" - React-RCTFabric: - :path: "../node_modules/react-native/React" - React-RCTFBReactNativeSpec: - :path: "../node_modules/react-native/React" - React-RCTImage: - :path: "../node_modules/react-native/Libraries/Image" - React-RCTLinking: - :path: "../node_modules/react-native/Libraries/LinkingIOS" - React-RCTNetwork: - :path: "../node_modules/react-native/Libraries/Network" - React-RCTRuntime: - :path: "../node_modules/react-native/React/Runtime" - React-RCTSettings: - :path: "../node_modules/react-native/Libraries/Settings" - React-RCTText: - :path: "../node_modules/react-native/Libraries/Text" - React-RCTVibration: - :path: "../node_modules/react-native/Libraries/Vibration" - React-rendererconsistency: - :path: "../node_modules/react-native/ReactCommon/react/renderer/consistency" - React-renderercss: - :path: "../node_modules/react-native/ReactCommon/react/renderer/css" - React-rendererdebug: - :path: "../node_modules/react-native/ReactCommon/react/renderer/debug" - React-rncore: - :path: "../node_modules/react-native/ReactCommon" - React-RuntimeApple: - :path: "../node_modules/react-native/ReactCommon/react/runtime/platform/ios" - React-RuntimeCore: - :path: "../node_modules/react-native/ReactCommon/react/runtime" - React-runtimeexecutor: - :path: "../node_modules/react-native/ReactCommon/runtimeexecutor" - React-RuntimeHermes: - :path: "../node_modules/react-native/ReactCommon/react/runtime" - React-runtimescheduler: - :path: "../node_modules/react-native/ReactCommon/react/renderer/runtimescheduler" - React-timing: - :path: "../node_modules/react-native/ReactCommon/react/timing" - React-utils: - :path: "../node_modules/react-native/ReactCommon/react/utils" - ReactAppDependencyProvider: - :path: build/generated/ios - ReactCodegen: - :path: build/generated/ios - ReactCommon: - :path: "../node_modules/react-native/ReactCommon" - RNAudioRecorderPlayer: - :path: "../node_modules/react-native-audio-recorder-player" - RNCClipboard: - :path: "../node_modules/@react-native-clipboard/clipboard" - RNGestureHandler: - :path: "../node_modules/react-native-gesture-handler" - RNReactNativeHapticFeedback: - :path: "../node_modules/react-native-haptic-feedback" - RNReanimated: - :path: "../node_modules/react-native-reanimated" - RNScreens: - :path: "../node_modules/react-native-screens" - RNShare: - :path: "../node_modules/react-native-share" - RNSVG: - :path: "../node_modules/react-native-svg" - RNWorklets: - :path: "../node_modules/react-native-worklets" - stream-chat-react-native: - :path: "../node_modules/stream-chat-react-native" - Yoga: - :path: "../node_modules/react-native/ReactCommon/yoga" - -SPEC CHECKSUMS: - boost: 7e761d76ca2ce687f7cc98e698152abd03a18f90 - DoubleConversion: cb417026b2400c8f53ae97020b2be961b59470cb - fast_float: b32c788ed9c6a8c584d114d0047beda9664e7cc6 - FBLazyVector: 86588b5a1547e7a417942a08f49559b184e002c8 - fmt: a40bb5bd0294ea969aaaba240a927bd33d878cdd - glog: 5683914934d5b6e4240e497e0f4a3b42d1854183 - hermes-engine: bbc1152da7d2d40f9e59c28acc6576fcf5d28e2a - op-sqlite: dc2477f170ae9af9117b8543870989572b08280e - RCT-Folly: 846fda9475e61ec7bcbf8a3fe81edfcaeb090669 - RCTDeprecation: 300c5eb91114d4339b0bb39505d0f4824d7299b7 - RCTRequired: e0446b01093475b7082fbeee5d1ef4ad1fe20ac4 - RCTTypeSafety: cb974efcdc6695deedf7bf1eb942f2a0603a063f - React: e7a4655b09d0e17e54be188cc34c2f3e2087318a - React-callinvoker: 62192daaa2f30c3321fc531e4f776f7b09cf892b - React-Codegen: 4b8b4817cea7a54b83851d4c1f91f79aa73de30a - React-Core: b23cdaaa9d76389d958c06af3c57aa6ad611c542 - React-CoreModules: 8e0f562e5695991e455abbebe1e968af71d52553 - React-cxxreact: 6ccbe0cc2c652b29409b14b23cfb3cd74e084691 - React-debug: 1834225a63b420b16e9b8b01ba5870aee96d0610 - React-defaultsnativemodule: dd88d445d542d58ab61a8a29a7c1d2272dfed577 - React-domnativemodule: fc3c24f4d3bb92770727ea48b4133dab77ded7f7 - React-Fabric: 00fe76339e568da0d0497cc72daeeb01e463871a - React-FabricComponents: 7bb179ee55db68f88c007800b0ac62c930115a85 - React-FabricImage: 21e01118011dd1e4ff3cdab20dbf57839cff52ee - React-featureflags: 6e67f2e252bc8ebb1d538c2ae8c14df432fe5fc0 - React-featureflagsnativemodule: eff5216a5cde5df5d09243d15db1bc401474deef - React-graphics: 8539372da8754118a565251ed08a88fc70f69340 - React-hermes: cc8c77acee1406c258622cd8abbee9049f6b5761 - React-idlecallbacksnativemodule: 7349675d1ccbec876c29b0e206ac08c762baaa36 - React-ImageManager: 4089d8ad52c86a8ae1d7591282fff1665ff5518b - React-jserrorhandler: 89a7a5fa8d04791e729119d1db03bf0ee85a9e29 - React-jsi: ea5c640ea63c127080f158dac7f4f393d13d415c - React-jsiexecutor: cf7920f82e46fe9a484c15c9f31e67d7179aa826 - React-jsinspector: 69e974b6313dbbb635ba503f2f4f2c389b30edbf - React-jsinspectorcdp: 231ddd5b7164c37589dcde3b8b6960136c891d6d - React-jsinspectornetwork: ff74911f79cf0a407a7f0ad0eeb0be64687ed815 - React-jsinspectortracing: df2aa2d944bb3fa280d9c920b9a06664bca8a7e8 - React-jsitooling: 77849c27e374a028ed8106e434a35267f6c6600b - React-jsitracing: 0dc6978e5b38c6e5e01e6aed484e4aec3f5f581b - React-logger: 7cfc7b1ae1f8e5fe5097f9c746137cc3a8fad4ce - React-Mapbuffer: 7018c5b7da5b13ed22fe55dae51d50187a00b2d7 - React-microtasksnativemodule: 8ff9cb220a8efa625b5885996bd69e69db9edf02 - react-native-blob-util: a9a07801b63e97d1bbdcf4eba3b98ff16c249bd5 - react-native-document-picker: 0b9e7c2103ae0ce974944f0a85044adba41a2311 - react-native-image-picker: e9d833df19e87e25e38ddc0be3bad92f57307765 - react-native-netinfo: cec9c4e86083cb5b6aba0e0711f563e2fbbff187 - react-native-safe-area-context: c98c858bd57e01b4047f957934f0a34b173028fb - react-native-video: ad705a78b4873d4e591e0419e617ce6b294b51f2 - React-NativeModulesApple: 37c08c3c54db55854de816b0df0f3683832be35a - React-oscompat: 56d6de59f9ae95cd006a1c40be2cde83bc06a4e1 - React-perflogger: 4008bd05a8b6c157b06608c0ea0b8bd5d9c5e6c9 - React-performancetimeline: 9321ba7605abcfb3a2b497fd7cbaf5cfd8c7cf67 - React-RCTActionSheet: 49138012280ec3bbb35193d8d09adb8bc61c982e - React-RCTAnimation: ebfe7c62016d4c17b56b2cab3a221908ae46288d - React-RCTAppDelegate: 0108657ba9a19f6a1cd62dcd19c2c0485b3fc251 - React-RCTBlob: 6cc309d1623f3c2679125a04a7425685b7219e6b - React-RCTFabric: 0a9ff5c9d1e1d7fc026bda6671180cbf56861c15 - React-RCTFBReactNativeSpec: ff3e37e2456afc04211334e86d07bf20488df0ae - React-RCTImage: bb98a59aeed953a48be3f917b9b745b213b340ab - React-RCTLinking: d6e9795d4d75d154c1dd821fd0746cc3e05d6670 - React-RCTNetwork: 5c8a7a2dd26728323189362f149e788548ac72bc - React-RCTRuntime: 96808e8fdce300a26c82d8c24174e33ba5210a7c - React-RCTSettings: b6a02d545ce10dd936b39914b32674db6e865307 - React-RCTText: c7d9232da0e9b5082a99a617483d9164a9cd46e9 - React-RCTVibration: fe636c985c1bf25e4a5b5b4d9315a3b882468a72 - React-rendererconsistency: d20fcb77173861cc7d8356239823e3b36966fc31 - React-renderercss: 56461d1e18db6a325048fdd04a51d68bd7ddb5a8 - React-rendererdebug: fcd44d3eb8a02d74beee778bb142e724016c7375 - React-rncore: bafb76fc01b78757a9592e92dbc227f9260bf0ac - React-RuntimeApple: 01e3ad08793efaa54cf85276457fa4a1f103d5b4 - React-RuntimeCore: 5c4bec5bf402a99b134e55972f2f4e676c70b9ab - React-runtimeexecutor: b35de9cb7f5d19c66ea9b067235f95b947697ba5 - React-RuntimeHermes: ba549a5834a6592d243b9a605530ecd7b6f5e79c - React-runtimescheduler: 9a9914d58caec7976aaae381cd2d997408f2260f - React-timing: 4f97958cc918f0af9444f93e4a7083415e6f5daf - React-utils: f491e2726eb8ced8af13893e1f77317f0fa9a954 - ReactAppDependencyProvider: 8df342c127fd0c1e30e8b9f71ff814c22414a7c0 - ReactCodegen: 439c427ccc115d71d16cc84256e5fbdc7fcef57a - ReactCommon: 592ef441605638b95e533653259254b4bd35ff4f - RNAudioRecorderPlayer: 5d5aac7a0e0f159861736ef2b433770342da7197 - RNCClipboard: 54ff19965d7c816febbafe5f520c2c3e7b677a49 - RNGestureHandler: eeb622199ef1fb3a076243131095df1c797072f0 - RNReactNativeHapticFeedback: 8eb91a6f48567d02ec8026e515102e18c41030cf - RNReanimated: 028d25ae4031eb5a9aeb5febbe2c2cd0c744aa9c - RNScreens: ee2abe7e0c548eed14e92742e81ed991165c56aa - RNShare: df2cab72f87b02ff50690341d1a2c61763154c02 - RNSVG: 341f555dbcd83a34d1f058e88df387de7bbc3347 - RNWorklets: 18d2a9a10588e4d51f42116f19e650d296ab8dbc - SocketRocket: d4aabe649be1e368d1318fdf28a022d714d65748 - stream-chat-react-native: d9c1c7f19b8bc25b6a7e8ff57063be30d1e3fa3b - Yoga: a742cc68e8366fcfc681808162492bc0aa7a9498 - -PODFILE CHECKSUM: 6b7a4b74915b42bfe4ffddaf67cbf5e7a2bfeab3 - -COCOAPODS: 1.14.3 diff --git a/examples/TypeScriptMessaging/ios/TypeScriptMessaging-Bridging-Header.h b/examples/TypeScriptMessaging/ios/TypeScriptMessaging-Bridging-Header.h deleted file mode 100644 index 1b2cb5d6d0..0000000000 --- a/examples/TypeScriptMessaging/ios/TypeScriptMessaging-Bridging-Header.h +++ /dev/null @@ -1,4 +0,0 @@ -// -// Use this file to import your target's public headers that you would like to expose to Swift. -// - diff --git a/examples/TypeScriptMessaging/ios/TypeScriptMessaging.xcodeproj/project.pbxproj b/examples/TypeScriptMessaging/ios/TypeScriptMessaging.xcodeproj/project.pbxproj deleted file mode 100644 index 50e9003d62..0000000000 --- a/examples/TypeScriptMessaging/ios/TypeScriptMessaging.xcodeproj/project.pbxproj +++ /dev/null @@ -1,728 +0,0 @@ -// !$*UTF8*$! -{ - archiveVersion = 1; - classes = { - }; - objectVersion = 54; - objects = { - -/* Begin PBXBuildFile section */ - 00E356F31AD99517003FC87E /* TypeScriptMessagingTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 00E356F21AD99517003FC87E /* TypeScriptMessagingTests.m */; }; - 13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB51A68108700A75B9A /* Images.xcassets */; }; - 72C03BBEBFACF7568E24E771 /* PrivacyInfo.xcprivacy in Resources */ = {isa = PBXBuildFile; fileRef = DB7FF3920C4E1943711D4118 /* PrivacyInfo.xcprivacy */; }; - 81AB9BB82411601600AC10FF /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 81AB9BB72411601600AC10FF /* LaunchScreen.storyboard */; }; - 9EF5CF27C9749211A8AC7089 /* libPods-TypeScriptMessaging-TypeScriptMessagingTests.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 6BAA3C937B01AB47D752A61D /* libPods-TypeScriptMessaging-TypeScriptMessagingTests.a */; }; - A16FE33A3F8BC8263F75E3D2 /* libPods-TypeScriptMessaging.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AD55CB1742B96C31B70A1858 /* libPods-TypeScriptMessaging.a */; }; - FDA53FC12D69434C00E4CE6B /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = FDA53FC02D69434C00E4CE6B /* AppDelegate.swift */; }; -/* End PBXBuildFile section */ - -/* Begin PBXContainerItemProxy section */ - 00E356F41AD99517003FC87E /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 83CBB9F71A601CBA00E9B192 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 13B07F861A680F5B00A75B9A; - remoteInfo = TypeScriptMessaging; - }; -/* End PBXContainerItemProxy section */ - -/* Begin PBXFileReference section */ - 00E356EE1AD99517003FC87E /* TypeScriptMessagingTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = TypeScriptMessagingTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; - 00E356F11AD99517003FC87E /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 00E356F21AD99517003FC87E /* TypeScriptMessagingTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = TypeScriptMessagingTests.m; sourceTree = ""; }; - 13B07F961A680F5B00A75B9A /* TypeScriptMessaging.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = TypeScriptMessaging.app; sourceTree = BUILT_PRODUCTS_DIR; }; - 13B07FB01A68108700A75B9A /* AppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = AppDelegate.m; path = TypeScriptMessaging/AppDelegate.m; sourceTree = ""; }; - 13B07FB51A68108700A75B9A /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Images.xcassets; path = TypeScriptMessaging/Images.xcassets; sourceTree = ""; }; - 13B07FB61A68108700A75B9A /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = Info.plist; path = TypeScriptMessaging/Info.plist; sourceTree = ""; }; - 4FA0F930E8ABB03595A82E38 /* Pods-TypeScriptMessaging-TypeScriptMessagingTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-TypeScriptMessaging-TypeScriptMessagingTests.release.xcconfig"; path = "Target Support Files/Pods-TypeScriptMessaging-TypeScriptMessagingTests/Pods-TypeScriptMessaging-TypeScriptMessagingTests.release.xcconfig"; sourceTree = ""; }; - 620701C243B59F198EC2F1DB /* Pods-TypeScriptMessaging.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-TypeScriptMessaging.release.xcconfig"; path = "Target Support Files/Pods-TypeScriptMessaging/Pods-TypeScriptMessaging.release.xcconfig"; sourceTree = ""; }; - 66651ECEBEB0D9EB7F04F16E /* Pods-TypeScriptMessaging.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-TypeScriptMessaging.debug.xcconfig"; path = "Target Support Files/Pods-TypeScriptMessaging/Pods-TypeScriptMessaging.debug.xcconfig"; sourceTree = ""; }; - 6BAA3C937B01AB47D752A61D /* libPods-TypeScriptMessaging-TypeScriptMessagingTests.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-TypeScriptMessaging-TypeScriptMessagingTests.a"; sourceTree = BUILT_PRODUCTS_DIR; }; - 81AB9BB72411601600AC10FF /* LaunchScreen.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; name = LaunchScreen.storyboard; path = TypeScriptMessaging/LaunchScreen.storyboard; sourceTree = ""; }; - AD55CB1742B96C31B70A1858 /* libPods-TypeScriptMessaging.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-TypeScriptMessaging.a"; sourceTree = BUILT_PRODUCTS_DIR; }; - B435249D19B40A8878AACC99 /* Pods-TypeScriptMessaging-TypeScriptMessagingTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-TypeScriptMessaging-TypeScriptMessagingTests.debug.xcconfig"; path = "Target Support Files/Pods-TypeScriptMessaging-TypeScriptMessagingTests/Pods-TypeScriptMessaging-TypeScriptMessagingTests.debug.xcconfig"; sourceTree = ""; }; - DB7FF3920C4E1943711D4118 /* PrivacyInfo.xcprivacy */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xml; name = PrivacyInfo.xcprivacy; path = TypeScriptMessaging/PrivacyInfo.xcprivacy; sourceTree = ""; }; - ED297162215061F000B7C4FE /* JavaScriptCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = JavaScriptCore.framework; path = System/Library/Frameworks/JavaScriptCore.framework; sourceTree = SDKROOT; }; - FDA53FC02D69434C00E4CE6B /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; - FDA53FC22D69434E00E4CE6B /* TypeScriptMessaging-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "TypeScriptMessaging-Bridging-Header.h"; sourceTree = ""; }; -/* End PBXFileReference section */ - -/* Begin PBXFrameworksBuildPhase section */ - 00E356EB1AD99517003FC87E /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - 9EF5CF27C9749211A8AC7089 /* libPods-TypeScriptMessaging-TypeScriptMessagingTests.a in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 13B07F8C1A680F5B00A75B9A /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - A16FE33A3F8BC8263F75E3D2 /* libPods-TypeScriptMessaging.a in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXFrameworksBuildPhase section */ - -/* Begin PBXGroup section */ - 00E356EF1AD99517003FC87E /* TypeScriptMessagingTests */ = { - isa = PBXGroup; - children = ( - 00E356F21AD99517003FC87E /* TypeScriptMessagingTests.m */, - 00E356F01AD99517003FC87E /* Supporting Files */, - ); - path = TypeScriptMessagingTests; - sourceTree = ""; - }; - 00E356F01AD99517003FC87E /* Supporting Files */ = { - isa = PBXGroup; - children = ( - 00E356F11AD99517003FC87E /* Info.plist */, - ); - name = "Supporting Files"; - sourceTree = ""; - }; - 13B07FAE1A68108700A75B9A /* TypeScriptMessaging */ = { - isa = PBXGroup; - children = ( - FDA53FC02D69434C00E4CE6B /* AppDelegate.swift */, - 13B07FB01A68108700A75B9A /* AppDelegate.m */, - 13B07FB51A68108700A75B9A /* Images.xcassets */, - 13B07FB61A68108700A75B9A /* Info.plist */, - 81AB9BB72411601600AC10FF /* LaunchScreen.storyboard */, - DB7FF3920C4E1943711D4118 /* PrivacyInfo.xcprivacy */, - FDA53FC22D69434E00E4CE6B /* TypeScriptMessaging-Bridging-Header.h */, - ); - name = TypeScriptMessaging; - sourceTree = ""; - }; - 2D16E6871FA4F8E400B85C8A /* Frameworks */ = { - isa = PBXGroup; - children = ( - ED297162215061F000B7C4FE /* JavaScriptCore.framework */, - AD55CB1742B96C31B70A1858 /* libPods-TypeScriptMessaging.a */, - 6BAA3C937B01AB47D752A61D /* libPods-TypeScriptMessaging-TypeScriptMessagingTests.a */, - ); - name = Frameworks; - sourceTree = ""; - }; - 7A4E3629D9D1ED71D26D28C3 /* Pods */ = { - isa = PBXGroup; - children = ( - 66651ECEBEB0D9EB7F04F16E /* Pods-TypeScriptMessaging.debug.xcconfig */, - 620701C243B59F198EC2F1DB /* Pods-TypeScriptMessaging.release.xcconfig */, - B435249D19B40A8878AACC99 /* Pods-TypeScriptMessaging-TypeScriptMessagingTests.debug.xcconfig */, - 4FA0F930E8ABB03595A82E38 /* Pods-TypeScriptMessaging-TypeScriptMessagingTests.release.xcconfig */, - ); - path = Pods; - sourceTree = ""; - }; - 832341AE1AAA6A7D00B99B32 /* Libraries */ = { - isa = PBXGroup; - children = ( - ); - name = Libraries; - sourceTree = ""; - }; - 83CBB9F61A601CBA00E9B192 = { - isa = PBXGroup; - children = ( - 13B07FAE1A68108700A75B9A /* TypeScriptMessaging */, - 832341AE1AAA6A7D00B99B32 /* Libraries */, - 00E356EF1AD99517003FC87E /* TypeScriptMessagingTests */, - 83CBBA001A601CBA00E9B192 /* Products */, - 2D16E6871FA4F8E400B85C8A /* Frameworks */, - 7A4E3629D9D1ED71D26D28C3 /* Pods */, - ); - indentWidth = 2; - sourceTree = ""; - tabWidth = 2; - usesTabs = 0; - }; - 83CBBA001A601CBA00E9B192 /* Products */ = { - isa = PBXGroup; - children = ( - 13B07F961A680F5B00A75B9A /* TypeScriptMessaging.app */, - 00E356EE1AD99517003FC87E /* TypeScriptMessagingTests.xctest */, - ); - name = Products; - sourceTree = ""; - }; -/* End PBXGroup section */ - -/* Begin PBXNativeTarget section */ - 00E356ED1AD99517003FC87E /* TypeScriptMessagingTests */ = { - isa = PBXNativeTarget; - buildConfigurationList = 00E357021AD99517003FC87E /* Build configuration list for PBXNativeTarget "TypeScriptMessagingTests" */; - buildPhases = ( - 3CFFB16C5424FB1D7A8E1168 /* [CP] Check Pods Manifest.lock */, - 00E356EA1AD99517003FC87E /* Sources */, - 00E356EB1AD99517003FC87E /* Frameworks */, - 00E356EC1AD99517003FC87E /* Resources */, - 3C944A8E531883FF31D4B92B /* [CP] Embed Pods Frameworks */, - 218E0A1F9BB896F3EF603750 /* [CP] Copy Pods Resources */, - ); - buildRules = ( - ); - dependencies = ( - 00E356F51AD99517003FC87E /* PBXTargetDependency */, - ); - name = TypeScriptMessagingTests; - productName = TypeScriptMessagingTests; - productReference = 00E356EE1AD99517003FC87E /* TypeScriptMessagingTests.xctest */; - productType = "com.apple.product-type.bundle.unit-test"; - }; - 13B07F861A680F5B00A75B9A /* TypeScriptMessaging */ = { - isa = PBXNativeTarget; - buildConfigurationList = 13B07F931A680F5B00A75B9A /* Build configuration list for PBXNativeTarget "TypeScriptMessaging" */; - buildPhases = ( - 37DD4D741F5A52588A539107 /* [CP] Check Pods Manifest.lock */, - 13B07F871A680F5B00A75B9A /* Sources */, - 13B07F8C1A680F5B00A75B9A /* Frameworks */, - 13B07F8E1A680F5B00A75B9A /* Resources */, - 00DD1BFF1BD5951E006B06BC /* Bundle React Native code and images */, - E5AAF0F6A2E2584AB2360439 /* [CP] Embed Pods Frameworks */, - 25A09FB2FAB12878C2DC5686 /* [CP] Copy Pods Resources */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = TypeScriptMessaging; - productName = TypeScriptMessaging; - productReference = 13B07F961A680F5B00A75B9A /* TypeScriptMessaging.app */; - productType = "com.apple.product-type.application"; - }; -/* End PBXNativeTarget section */ - -/* Begin PBXProject section */ - 83CBB9F71A601CBA00E9B192 /* Project object */ = { - isa = PBXProject; - attributes = { - LastUpgradeCheck = 1210; - TargetAttributes = { - 00E356ED1AD99517003FC87E = { - CreatedOnToolsVersion = 6.2; - TestTargetID = 13B07F861A680F5B00A75B9A; - }; - 13B07F861A680F5B00A75B9A = { - LastSwiftMigration = 1620; - }; - }; - }; - buildConfigurationList = 83CBB9FA1A601CBA00E9B192 /* Build configuration list for PBXProject "TypeScriptMessaging" */; - compatibilityVersion = "Xcode 12.0"; - developmentRegion = en; - hasScannedForEncodings = 0; - knownRegions = ( - en, - Base, - ); - mainGroup = 83CBB9F61A601CBA00E9B192; - productRefGroup = 83CBBA001A601CBA00E9B192 /* Products */; - projectDirPath = ""; - projectRoot = ""; - targets = ( - 13B07F861A680F5B00A75B9A /* TypeScriptMessaging */, - 00E356ED1AD99517003FC87E /* TypeScriptMessagingTests */, - ); - }; -/* End PBXProject section */ - -/* Begin PBXResourcesBuildPhase section */ - 00E356EC1AD99517003FC87E /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 13B07F8E1A680F5B00A75B9A /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 81AB9BB82411601600AC10FF /* LaunchScreen.storyboard in Resources */, - 13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */, - 72C03BBEBFACF7568E24E771 /* PrivacyInfo.xcprivacy in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXResourcesBuildPhase section */ - -/* Begin PBXShellScriptBuildPhase section */ - 00DD1BFF1BD5951E006B06BC /* Bundle React Native code and images */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - ); - name = "Bundle React Native code and images"; - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "export NODE_BINARY=node\n../node_modules/react-native/scripts/react-native-xcode.sh\n"; - }; - 218E0A1F9BB896F3EF603750 /* [CP] Copy Pods Resources */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-TypeScriptMessaging-TypeScriptMessagingTests/Pods-TypeScriptMessaging-TypeScriptMessagingTests-resources-${CONFIGURATION}-input-files.xcfilelist", - ); - name = "[CP] Copy Pods Resources"; - outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-TypeScriptMessaging-TypeScriptMessagingTests/Pods-TypeScriptMessaging-TypeScriptMessagingTests-resources-${CONFIGURATION}-output-files.xcfilelist", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-TypeScriptMessaging-TypeScriptMessagingTests/Pods-TypeScriptMessaging-TypeScriptMessagingTests-resources.sh\"\n"; - showEnvVarsInLog = 0; - }; - 25A09FB2FAB12878C2DC5686 /* [CP] Copy Pods Resources */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-TypeScriptMessaging/Pods-TypeScriptMessaging-resources-${CONFIGURATION}-input-files.xcfilelist", - ); - name = "[CP] Copy Pods Resources"; - outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-TypeScriptMessaging/Pods-TypeScriptMessaging-resources-${CONFIGURATION}-output-files.xcfilelist", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-TypeScriptMessaging/Pods-TypeScriptMessaging-resources.sh\"\n"; - showEnvVarsInLog = 0; - }; - 37DD4D741F5A52588A539107 /* [CP] Check Pods Manifest.lock */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-TypeScriptMessaging-checkManifestLockResult.txt", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; - }; - 3C944A8E531883FF31D4B92B /* [CP] Embed Pods Frameworks */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-TypeScriptMessaging-TypeScriptMessagingTests/Pods-TypeScriptMessaging-TypeScriptMessagingTests-frameworks-${CONFIGURATION}-input-files.xcfilelist", - ); - name = "[CP] Embed Pods Frameworks"; - outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-TypeScriptMessaging-TypeScriptMessagingTests/Pods-TypeScriptMessaging-TypeScriptMessagingTests-frameworks-${CONFIGURATION}-output-files.xcfilelist", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-TypeScriptMessaging-TypeScriptMessagingTests/Pods-TypeScriptMessaging-TypeScriptMessagingTests-frameworks.sh\"\n"; - showEnvVarsInLog = 0; - }; - 3CFFB16C5424FB1D7A8E1168 /* [CP] Check Pods Manifest.lock */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-TypeScriptMessaging-TypeScriptMessagingTests-checkManifestLockResult.txt", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; - }; - E5AAF0F6A2E2584AB2360439 /* [CP] Embed Pods Frameworks */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-TypeScriptMessaging/Pods-TypeScriptMessaging-frameworks-${CONFIGURATION}-input-files.xcfilelist", - ); - name = "[CP] Embed Pods Frameworks"; - outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-TypeScriptMessaging/Pods-TypeScriptMessaging-frameworks-${CONFIGURATION}-output-files.xcfilelist", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-TypeScriptMessaging/Pods-TypeScriptMessaging-frameworks.sh\"\n"; - showEnvVarsInLog = 0; - }; -/* End PBXShellScriptBuildPhase section */ - -/* Begin PBXSourcesBuildPhase section */ - 00E356EA1AD99517003FC87E /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 00E356F31AD99517003FC87E /* TypeScriptMessagingTests.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 13B07F871A680F5B00A75B9A /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - FDA53FC12D69434C00E4CE6B /* AppDelegate.swift in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXSourcesBuildPhase section */ - -/* Begin PBXTargetDependency section */ - 00E356F51AD99517003FC87E /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = 13B07F861A680F5B00A75B9A /* TypeScriptMessaging */; - targetProxy = 00E356F41AD99517003FC87E /* PBXContainerItemProxy */; - }; -/* End PBXTargetDependency section */ - -/* Begin XCBuildConfiguration section */ - 00E356F61AD99517003FC87E /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = B435249D19B40A8878AACC99 /* Pods-TypeScriptMessaging-TypeScriptMessagingTests.debug.xcconfig */; - buildSettings = { - BUNDLE_LOADER = "$(TEST_HOST)"; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - INFOPLIST_FILE = TypeScriptMessagingTests/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 15.1; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - "@loader_path/Frameworks", - ); - OTHER_LDFLAGS = ( - "$(inherited)", - "-ObjC", - "-lc++", - ); - PRODUCT_BUNDLE_IDENTIFIER = "org.reactjs.native.example.$(PRODUCT_NAME:rfc1034identifier)"; - PRODUCT_NAME = "$(TARGET_NAME)"; - TEST_HOST = "$(BUILT_PRODUCTS_DIR)/TypeScriptMessaging.app/TypeScriptMessaging"; - }; - name = Debug; - }; - 00E356F71AD99517003FC87E /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 4FA0F930E8ABB03595A82E38 /* Pods-TypeScriptMessaging-TypeScriptMessagingTests.release.xcconfig */; - buildSettings = { - BUNDLE_LOADER = "$(TEST_HOST)"; - COPY_PHASE_STRIP = NO; - INFOPLIST_FILE = TypeScriptMessagingTests/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 15.1; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - "@loader_path/Frameworks", - ); - OTHER_LDFLAGS = ( - "$(inherited)", - "-ObjC", - "-lc++", - ); - PRODUCT_BUNDLE_IDENTIFIER = "org.reactjs.native.example.$(PRODUCT_NAME:rfc1034identifier)"; - PRODUCT_NAME = "$(TARGET_NAME)"; - TEST_HOST = "$(BUILT_PRODUCTS_DIR)/TypeScriptMessaging.app/TypeScriptMessaging"; - }; - name = Release; - }; - 13B07F941A680F5B00A75B9A /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 66651ECEBEB0D9EB7F04F16E /* Pods-TypeScriptMessaging.debug.xcconfig */; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - CLANG_ENABLE_MODULES = YES; - CURRENT_PROJECT_VERSION = 1; - DEVELOPMENT_TEAM = EHV7XZLAHA; - ENABLE_BITCODE = NO; - INFOPLIST_FILE = TypeScriptMessaging/Info.plist; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - ); - OTHER_LDFLAGS = ( - "$(inherited)", - "-ObjC", - "-lc++", - ); - PRODUCT_BUNDLE_IDENTIFIER = "org.reactjs.native.example.$(PRODUCT_NAME:rfc1034identifier)"; - PRODUCT_NAME = TypeScriptMessaging; - SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; - SUPPORTS_MACCATALYST = NO; - SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = YES; - SWIFT_OBJC_BRIDGING_HEADER = "TypeScriptMessaging-Bridging-Header.h"; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - VERSIONING_SYSTEM = "apple-generic"; - }; - name = Debug; - }; - 13B07F951A680F5B00A75B9A /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 620701C243B59F198EC2F1DB /* Pods-TypeScriptMessaging.release.xcconfig */; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - CLANG_ENABLE_MODULES = YES; - CURRENT_PROJECT_VERSION = 1; - DEVELOPMENT_TEAM = EHV7XZLAHA; - INFOPLIST_FILE = TypeScriptMessaging/Info.plist; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - ); - OTHER_LDFLAGS = ( - "$(inherited)", - "-ObjC", - "-lc++", - ); - PRODUCT_BUNDLE_IDENTIFIER = "org.reactjs.native.example.$(PRODUCT_NAME:rfc1034identifier)"; - PRODUCT_NAME = TypeScriptMessaging; - SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; - SUPPORTS_MACCATALYST = NO; - SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = YES; - SWIFT_OBJC_BRIDGING_HEADER = "TypeScriptMessaging-Bridging-Header.h"; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - VERSIONING_SYSTEM = "apple-generic"; - }; - name = Release; - }; - 83CBBA201A601CBA00E9B192 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CC = ""; - CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; - CLANG_CXX_LANGUAGE_STANDARD = "c++20"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - COPY_PHASE_STRIP = NO; - CXX = ""; - ENABLE_STRICT_OBJC_MSGSEND = YES; - ENABLE_TESTABILITY = YES; - "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = i386; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_DYNAMIC_NO_PIC = NO; - GCC_NO_COMMON_BLOCKS = YES; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - GCC_SYMBOLS_PRIVATE_EXTERN = NO; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 15.1; - LD = ""; - LDPLUSPLUS = ""; - LD_RUNPATH_SEARCH_PATHS = ( - /usr/lib/swift, - "$(inherited)", - ); - LIBRARY_SEARCH_PATHS = ( - "\"$(SDKROOT)/usr/lib/swift\"", - "\"$(TOOLCHAIN_DIR)/usr/lib/swift/$(PLATFORM_NAME)\"", - "\"$(inherited)\"", - ); - MTL_ENABLE_DEBUG_INFO = YES; - ONLY_ACTIVE_ARCH = YES; - OTHER_CFLAGS = ( - "$(inherited)", - " ", - ); - OTHER_CPLUSPLUSFLAGS = ( - "$(OTHER_CFLAGS)", - "-DFOLLY_NO_CONFIG", - "-DFOLLY_MOBILE=1", - "-DFOLLY_USE_LIBCPP=1", - "-DFOLLY_CFG_NO_COROUTINES=1", - ); - OTHER_LDFLAGS = ( - "$(inherited)", - " ", - ); - REACT_NATIVE_PATH = "${PODS_ROOT}/../../node_modules/react-native"; - SDKROOT = iphoneos; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) DEBUG"; - USE_HERMES = true; - }; - name = Debug; - }; - 83CBBA211A601CBA00E9B192 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CC = ""; - CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; - CLANG_CXX_LANGUAGE_STANDARD = "c++20"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - COPY_PHASE_STRIP = YES; - CXX = ""; - ENABLE_NS_ASSERTIONS = NO; - ENABLE_STRICT_OBJC_MSGSEND = YES; - "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = i386; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_NO_COMMON_BLOCKS = YES; - GCC_PREPROCESSOR_DEFINITIONS = ( - "$(inherited)", - _LIBCPP_ENABLE_CXX17_REMOVED_UNARY_BINARY_FUNCTION, - ); - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 15.1; - LD = ""; - LDPLUSPLUS = ""; - LD_RUNPATH_SEARCH_PATHS = ( - /usr/lib/swift, - "$(inherited)", - ); - LIBRARY_SEARCH_PATHS = ( - "\"$(SDKROOT)/usr/lib/swift\"", - "\"$(TOOLCHAIN_DIR)/usr/lib/swift/$(PLATFORM_NAME)\"", - "\"$(inherited)\"", - ); - MTL_ENABLE_DEBUG_INFO = NO; - OTHER_CFLAGS = ( - "$(inherited)", - " ", - ); - OTHER_CPLUSPLUSFLAGS = ( - "$(OTHER_CFLAGS)", - "-DFOLLY_NO_CONFIG", - "-DFOLLY_MOBILE=1", - "-DFOLLY_USE_LIBCPP=1", - "-DFOLLY_CFG_NO_COROUTINES=1", - ); - OTHER_LDFLAGS = ( - "$(inherited)", - "-ObjC", - "-lc++", - ); - REACT_NATIVE_PATH = "${PODS_ROOT}/../../node_modules/react-native"; - SDKROOT = iphoneos; - USE_HERMES = true; - VALIDATE_PRODUCT = YES; - }; - name = Release; - }; -/* End XCBuildConfiguration section */ - -/* Begin XCConfigurationList section */ - 00E357021AD99517003FC87E /* Build configuration list for PBXNativeTarget "TypeScriptMessagingTests" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 00E356F61AD99517003FC87E /* Debug */, - 00E356F71AD99517003FC87E /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 13B07F931A680F5B00A75B9A /* Build configuration list for PBXNativeTarget "TypeScriptMessaging" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 13B07F941A680F5B00A75B9A /* Debug */, - 13B07F951A680F5B00A75B9A /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 83CBB9FA1A601CBA00E9B192 /* Build configuration list for PBXProject "TypeScriptMessaging" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 83CBBA201A601CBA00E9B192 /* Debug */, - 83CBBA211A601CBA00E9B192 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; -/* End XCConfigurationList section */ - }; - rootObject = 83CBB9F71A601CBA00E9B192 /* Project object */; -} diff --git a/examples/TypeScriptMessaging/ios/TypeScriptMessaging.xcodeproj/xcshareddata/xcschemes/TypeScriptMessaging.xcscheme b/examples/TypeScriptMessaging/ios/TypeScriptMessaging.xcodeproj/xcshareddata/xcschemes/TypeScriptMessaging.xcscheme deleted file mode 100644 index db552ecb91..0000000000 --- a/examples/TypeScriptMessaging/ios/TypeScriptMessaging.xcodeproj/xcshareddata/xcschemes/TypeScriptMessaging.xcscheme +++ /dev/null @@ -1,88 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/examples/TypeScriptMessaging/ios/TypeScriptMessaging.xcworkspace/contents.xcworkspacedata b/examples/TypeScriptMessaging/ios/TypeScriptMessaging.xcworkspace/contents.xcworkspacedata deleted file mode 100644 index c2557739b9..0000000000 --- a/examples/TypeScriptMessaging/ios/TypeScriptMessaging.xcworkspace/contents.xcworkspacedata +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - diff --git a/examples/TypeScriptMessaging/ios/TypeScriptMessaging.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/examples/TypeScriptMessaging/ios/TypeScriptMessaging.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist deleted file mode 100644 index 18d981003d..0000000000 --- a/examples/TypeScriptMessaging/ios/TypeScriptMessaging.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +++ /dev/null @@ -1,8 +0,0 @@ - - - - - IDEDidComputeMac32BitWarning - - - diff --git a/examples/TypeScriptMessaging/ios/TypeScriptMessaging/Images.xcassets/AppIcon.appiconset/Contents.json b/examples/TypeScriptMessaging/ios/TypeScriptMessaging/Images.xcassets/AppIcon.appiconset/Contents.json deleted file mode 100644 index 37fac9b0f9..0000000000 --- a/examples/TypeScriptMessaging/ios/TypeScriptMessaging/Images.xcassets/AppIcon.appiconset/Contents.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "images" : [ - { - "idiom" : "iphone", - "scale" : "2x", - "size" : "20x20" - }, - { - "idiom" : "iphone", - "scale" : "3x", - "size" : "20x20" - }, - { - "idiom" : "iphone", - "scale" : "2x", - "size" : "29x29" - }, - { - "idiom" : "iphone", - "scale" : "3x", - "size" : "29x29" - }, - { - "idiom" : "iphone", - "scale" : "2x", - "size" : "40x40" - }, - { - "idiom" : "iphone", - "scale" : "3x", - "size" : "40x40" - }, - { - "idiom" : "iphone", - "scale" : "2x", - "size" : "60x60" - }, - { - "idiom" : "iphone", - "scale" : "3x", - "size" : "60x60" - }, - { - "idiom" : "ios-marketing", - "scale" : "1x", - "size" : "1024x1024" - } - ], - "info": { - "version": 1, - "author": "xcode" - } -} diff --git a/examples/TypeScriptMessaging/ios/TypeScriptMessaging/Images.xcassets/Contents.json b/examples/TypeScriptMessaging/ios/TypeScriptMessaging/Images.xcassets/Contents.json deleted file mode 100644 index 97a8662ebd..0000000000 --- a/examples/TypeScriptMessaging/ios/TypeScriptMessaging/Images.xcassets/Contents.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "info": { - "version": 1, - "author": "xcode" - } -} diff --git a/examples/TypeScriptMessaging/ios/TypeScriptMessaging/Info.plist b/examples/TypeScriptMessaging/ios/TypeScriptMessaging/Info.plist deleted file mode 100644 index 4fb4057620..0000000000 --- a/examples/TypeScriptMessaging/ios/TypeScriptMessaging/Info.plist +++ /dev/null @@ -1,59 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleDisplayName - TypeScriptMessaging - CFBundleExecutable - $(EXECUTABLE_NAME) - CFBundleIdentifier - $(PRODUCT_BUNDLE_IDENTIFIER) - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - $(PRODUCT_NAME) - CFBundlePackageType - APPL - CFBundleShortVersionString - 1.0 - CFBundleSignature - ???? - CFBundleVersion - 1 - LSRequiresIPhoneOS - - NSAppTransportSecurity - - NSAllowsArbitraryLoads - - NSAllowsLocalNetworking - - - NSCameraUsageDescription - $(PRODUCT_NAME) would like to use your camera to share image in a message. - NSLocationWhenInUseUsageDescription - - NSMicrophoneUsageDescription - $(PRODUCT_NAME) would like to use your microphone for voice recording. - NSPhotoLibraryUsageDescription - $(PRODUCT_NAME) would like access to your photo gallery to share image in a message. - RCTNewArchEnabled - - UILaunchStoryboardName - LaunchScreen - UIRequiredDeviceCapabilities - - arm64 - - UISupportedInterfaceOrientations - - UIInterfaceOrientationPortrait - UIInterfaceOrientationLandscapeLeft - UIInterfaceOrientationLandscapeRight - - UIViewControllerBasedStatusBarAppearance - - - diff --git a/examples/TypeScriptMessaging/ios/TypeScriptMessaging/LaunchScreen.storyboard b/examples/TypeScriptMessaging/ios/TypeScriptMessaging/LaunchScreen.storyboard deleted file mode 100644 index d01629e450..0000000000 --- a/examples/TypeScriptMessaging/ios/TypeScriptMessaging/LaunchScreen.storyboard +++ /dev/null @@ -1,47 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/examples/TypeScriptMessaging/ios/TypeScriptMessaging/PrivacyInfo.xcprivacy b/examples/TypeScriptMessaging/ios/TypeScriptMessaging/PrivacyInfo.xcprivacy deleted file mode 100644 index c577c876ba..0000000000 --- a/examples/TypeScriptMessaging/ios/TypeScriptMessaging/PrivacyInfo.xcprivacy +++ /dev/null @@ -1,48 +0,0 @@ - - - - - NSPrivacyAccessedAPITypes - - - NSPrivacyAccessedAPIType - NSPrivacyAccessedAPICategoryFileTimestamp - NSPrivacyAccessedAPITypeReasons - - C617.1 - 0A2A.1 - 3B52.1 - - - - NSPrivacyAccessedAPIType - NSPrivacyAccessedAPICategoryUserDefaults - NSPrivacyAccessedAPITypeReasons - - CA92.1 - - - - NSPrivacyAccessedAPIType - NSPrivacyAccessedAPICategoryDiskSpace - NSPrivacyAccessedAPITypeReasons - - 85F4.1 - E174.1 - - - - NSPrivacyAccessedAPIType - NSPrivacyAccessedAPICategorySystemBootTime - NSPrivacyAccessedAPITypeReasons - - 35F9.1 - - - - NSPrivacyCollectedDataTypes - - NSPrivacyTracking - - - diff --git a/examples/TypeScriptMessaging/ios/TypeScriptMessagingTests/Info.plist b/examples/TypeScriptMessaging/ios/TypeScriptMessagingTests/Info.plist deleted file mode 100644 index ba72822e87..0000000000 --- a/examples/TypeScriptMessaging/ios/TypeScriptMessagingTests/Info.plist +++ /dev/null @@ -1,24 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleExecutable - $(EXECUTABLE_NAME) - CFBundleIdentifier - $(PRODUCT_BUNDLE_IDENTIFIER) - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - $(PRODUCT_NAME) - CFBundlePackageType - BNDL - CFBundleShortVersionString - 1.0 - CFBundleSignature - ???? - CFBundleVersion - 1 - - diff --git a/examples/TypeScriptMessaging/ios/TypeScriptMessagingTests/TypeScriptMessagingTests.m b/examples/TypeScriptMessaging/ios/TypeScriptMessagingTests/TypeScriptMessagingTests.m deleted file mode 100644 index 8fdd933871..0000000000 --- a/examples/TypeScriptMessaging/ios/TypeScriptMessagingTests/TypeScriptMessagingTests.m +++ /dev/null @@ -1,66 +0,0 @@ -#import -#import - -#import -#import - -#define TIMEOUT_SECONDS 600 -#define TEXT_TO_LOOK_FOR @"Welcome to React" - -@interface TypeScriptMessagingTests : XCTestCase - -@end - -@implementation TypeScriptMessagingTests - -- (BOOL)findSubviewInView:(UIView *)view matching:(BOOL (^)(UIView *view))test -{ - if (test(view)) { - return YES; - } - for (UIView *subview in [view subviews]) { - if ([self findSubviewInView:subview matching:test]) { - return YES; - } - } - return NO; -} - -- (void)testRendersWelcomeScreen -{ - UIViewController *vc = [[[RCTSharedApplication() delegate] window] rootViewController]; - NSDate *date = [NSDate dateWithTimeIntervalSinceNow:TIMEOUT_SECONDS]; - BOOL foundElement = NO; - - __block NSString *redboxError = nil; -#ifdef DEBUG - RCTSetLogFunction( - ^(RCTLogLevel level, RCTLogSource source, NSString *fileName, NSNumber *lineNumber, NSString *message) { - if (level >= RCTLogLevelError) { - redboxError = message; - } -#endif - - while ([date timeIntervalSinceNow] > 0 && !foundElement && !redboxError) { - [[NSRunLoop mainRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate dateWithTimeIntervalSinceNow:0.1]]; - [[NSRunLoop mainRunLoop] runMode:NSRunLoopCommonModes beforeDate:[NSDate dateWithTimeIntervalSinceNow:0.1]]; - - foundElement = [self findSubviewInView:vc.view - matching:^BOOL(UIView *view) { - if ([view.accessibilityLabel isEqualToString:TEXT_TO_LOOK_FOR]) { - return YES; - } - return NO; - }]; - } - -#ifdef DEBUG - RCTSetLogFunction(RCTDefaultLogFunction); -#endif - - XCTAssertNil(redboxError, @"RedBox error: %@", redboxError); - XCTAssertTrue(foundElement, @"Couldn't find element with text '%@' in %d seconds", TEXT_TO_LOOK_FOR, TIMEOUT_SECONDS); -} - - -@end diff --git a/examples/TypeScriptMessaging/metro.config.js b/examples/TypeScriptMessaging/metro.config.js deleted file mode 100644 index 91593880aa..0000000000 --- a/examples/TypeScriptMessaging/metro.config.js +++ /dev/null @@ -1,74 +0,0 @@ -const { getDefaultConfig } = require('@react-native/metro-config'); -const { exclusionList, resolveUniqueModule } = require('@rnx-kit/metro-config'); - -/** - * Metro configuration - * https://reactnative.dev/docs/metro - * - * @type {import('metro-config').MetroConfig} - */ -const config = getDefaultConfig(__dirname); - -const PATH = require('path'); -const packageDirPath = PATH.resolve(__dirname, '../../package'); -const nativePackageDirPath = PATH.resolve(__dirname, '../../package/native-package'); - -const symlinked = { - 'stream-chat-react-native': nativePackageDirPath, - 'stream-chat-react-native-core': packageDirPath, -}; - -// find what all modules need to be unique for the app (mainly react and react-native) -// note: we filter the symlinked modules as they are already unique -// and as they dont follow the workspace pattern the auto-generated path to the module is incorrect -const dependencyPackageNames = Object.keys(require('./package.json').dependencies); - -const uniqueModules = dependencyPackageNames.map((packageName) => { - if (symlinked[packageName]) { - const modulePath = symlinked[packageName]; - const escapedPackageName = PATH.normalize(packageName).replace(/\\/g, '\\\\'); - - // exclude the symlinked package from being resolved from node_modules - // example: .*\/node_modules\/stream-chat-react-native-core\/.* - // the above would avoid native-package to resolve core from its own node_modules - const exclusionRE = new RegExp( - `.*${PATH.sep}node_modules\\${PATH.sep}${escapedPackageName}\\${PATH.sep}.*`, - ); - - return { - packageName, // name of the package - modulePath, - blockPattern: exclusionRE, // paths that match this pattern will be blocked from being resolved - }; - } - const [modulePath, blockPattern] = resolveUniqueModule(packageName, __dirname); - // resolveUniqueModule emits a regex ending in `/` (package-dir boundary). metro-config's - // exclusionList anchors every alternation branch with `$`, which would require file paths to - // literally end with `/node_modules//`. Append `.*` so the anchor lands at end-of-file - // instead of end-of-directory, otherwise the blocklist silently matches nothing. - const fixedBlockPattern = new RegExp(blockPattern.source + '.*'); - return { - packageName, // name of the package - modulePath, // actual path to the module in the project's node modules - blockPattern: fixedBlockPattern, // paths that match this pattern will be blocked from being resolved - }; -}); - -// block the other paths for unique modules from being resolved -const blockList = uniqueModules.map(({ blockPattern }) => blockPattern); - -// provide the path for the unique modules -const extraNodeModules = uniqueModules.reduce((acc, item) => { - acc[item.packageName] = item.modulePath; - return acc; -}, {}); - -config.resolver.blockList = exclusionList(blockList); -config.resolver.extraNodeModules = extraNodeModules; - -config.resolver.nodeModulesPaths = [PATH.resolve(__dirname, 'node_modules')]; - -// add the package dir for metro to access the package folder -config.watchFolders = [packageDirPath]; - -module.exports = config; diff --git a/examples/TypeScriptMessaging/package.json b/examples/TypeScriptMessaging/package.json deleted file mode 100644 index 0732296499..0000000000 --- a/examples/TypeScriptMessaging/package.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "name": "typescriptmessaging", - "version": "0.0.1", - "private": true, - "scripts": { - "sync-native": "bash ../../package/scripts/reconcile-shared-native.sh native-package && bash ../../package/scripts/sync-shared-native.sh native-package", - "android": "yarn sync-native && react-native run-android", - "ios": "yarn sync-native && react-native run-ios", - "start": "yarn sync-native && react-native start", - "typecheck": "tsc --noEmit", - "clean": "watchman watch-del-all && yarn cache clean && rm -rf ios/build && pod cache clean --all && rm -rf android/build && cd android && ./gradlew clean && cd -", - "clean-all": "yarn clean && rm -rf node_modules && rm -rf ios/Pods && rm -rf vendor && bundle install && yarn install && cd ios && bundle exec pod install && cd -" - }, - "dependencies": { - "@op-engineering/op-sqlite": "^14.0.4", - "@react-native-clipboard/clipboard": "^1.16.2", - "@react-native-community/netinfo": "^11.4.1", - "@react-native-documents/picker": "^10.1.3", - "@react-navigation/elements": "^2.9.17", - "@react-navigation/native": "^7.1.10", - "@react-navigation/stack": "^7.3.3", - "react": "19.1.0", - "react-native": "0.80.2", - "react-native-audio-recorder-player": "^3.6.13", - "react-native-blob-util": "^0.22.2", - "react-native-gesture-handler": "^2.26.0", - "react-native-haptic-feedback": "^2.3.3", - "react-native-image-picker": "^8.2.1", - "react-native-reanimated": "^4.0.1", - "react-native-safe-area-context": "^5.4.1", - "react-native-screens": "^4.11.1", - "react-native-share": "^12.0.11", - "react-native-svg": "^15.12.0", - "react-native-video": "^6.16.1", - "react-native-worklets": "^0.4.1", - "stream-chat": "^9.50.1", - "stream-chat-react-native": "workspace:^", - "stream-chat-react-native-core": "workspace:^" - }, - "devDependencies": { - "@babel/core": "^7.29.0", - "@babel/runtime": "^7.29.2", - "@react-native-community/cli": "19.1.2", - "@react-native-community/cli-platform-android": "19.1.1", - "@react-native-community/cli-platform-ios": "19.1.1", - "@react-native/babel-preset": "0.80.2", - "@react-native/metro-config": "0.80.2", - "@react-native/typescript-config": "0.80.2", - "@rnx-kit/metro-config": "^2.1.0", - "@types/react": "^19.1.0", - "typescript": "5.9.3" - } -} diff --git a/examples/TypeScriptMessaging/react-native.config.js b/examples/TypeScriptMessaging/react-native.config.js deleted file mode 100644 index 501be12828..0000000000 --- a/examples/TypeScriptMessaging/react-native.config.js +++ /dev/null @@ -1,8 +0,0 @@ -module.exports = { - project: { - android: {}, - ios: { - automaticPodsInstallation: true, - }, - }, -}; diff --git a/examples/TypeScriptMessaging/tsconfig.json b/examples/TypeScriptMessaging/tsconfig.json deleted file mode 100644 index edad44a02d..0000000000 --- a/examples/TypeScriptMessaging/tsconfig.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "extends": "@react-native/typescript-config", - "compilerOptions": { - "types": [] - } -} diff --git a/examples/TypeScriptMessaging/useStreamChatTheme.ts b/examples/TypeScriptMessaging/useStreamChatTheme.ts deleted file mode 100644 index aded706c14..0000000000 --- a/examples/TypeScriptMessaging/useStreamChatTheme.ts +++ /dev/null @@ -1,80 +0,0 @@ -import { useEffect, useState } from 'react'; -import { useColorScheme } from 'react-native'; - -import type { DeepPartial, Theme } from 'stream-chat-react-native'; - -const getChatStyle = (colorScheme: string | null | undefined): DeepPartial => ({ - avatar: { - image: { - height: 32, - width: 32, - }, - }, - colors: - colorScheme === 'dark' - ? { - accent_blue: '#005FFF', - accent_green: '#20E070', - accent_red: '#FF3742', - bg_gradient_end: '#101214', - bg_gradient_start: '#070A0D', - black: '#FFFFFF', - blue_alice: '#00193D', - border: '#141924', - grey: '#7A7A7A', - grey_dark: '#F7F7F8', - grey_gainsboro: '#2D2F2F', - grey_whisper: '#1C1E22', - icon_background: '#FFFFFF', - light_blue: '#001333', - light_gray: '#1C1E22', - modal_shadow: '#000000', - overlay: '#FFFFFFCC', // CC = 80% opacity - shadow_icon: '#00000080', // 80 = 50% opacity - targetedMessageBackground: '#302D22', - transparent: 'transparent', - white: '#101418', - white_smoke: '#13151B', - white_snow: '#070A0D', - } - : { - accent_blue: '#005FFF', - accent_green: '#20E070', - accent_red: '#FF3742', - bg_gradient_end: '#F7F7F7', - bg_gradient_start: '#FCFCFC', - black: '#000000', - blue_alice: '#E9F2FF', - border: '#00000014', // 14 = 8% opacity; top: x=0, y=-1; bottom: x=0, y=1 - grey: '#7A7A7A', - grey_dark: '#17191C', - grey_gainsboro: '#DBDBDB', - grey_whisper: '#ECEBEB', - icon_background: '#FFFFFF', - light_blue: '#E0F0FF', - light_gray: '#E9EAED', - modal_shadow: '#00000099', // 99 = 60% opacity; x=0, y= 1, radius=4 - overlay: '#00000099', // 99 = 60% opacity - shadow_icon: '#00000040', // 40 = 25% opacity; x=0, y=0, radius=4 - targetedMessageBackground: '#FBF4DD', // dark mode = #302D22 - transparent: 'transparent', - white: '#FFFFFF', - white_smoke: '#F2F2F2', - white_snow: '#FCFCFC', - }, - spinner: { - height: 15, - width: 15, - }, -}); - -export const useStreamChatTheme = () => { - const colorScheme = useColorScheme(); - const [chatStyle, setChatStyle] = useState(getChatStyle(colorScheme)); - - useEffect(() => { - setChatStyle(getChatStyle(colorScheme)); - }, [colorScheme]); - - return chatStyle; -}; diff --git a/package.json b/package.json index 4d70620381..101c1df6cd 100644 --- a/package.json +++ b/package.json @@ -2,12 +2,12 @@ "name": "root", "private": true, "workspaces": [ + "configs/typescript-config", "package", "package/native-package", "package/expo-package", "examples/SampleApp", - "examples/ExpoMessaging", - "examples/TypeScriptMessaging" + "examples/ExpoMessaging" ], "resolutions": { "@types/react": "^19.2.0" @@ -56,7 +56,7 @@ "husky": "^9.1.7", "prettier": "^3.8.3", "semantic-release": "^25.0.3", - "typescript": "5.9.3", + "typescript": "6.0.3", "typescript-eslint": "^8.59.2", "uglify-js": "^3.19.2" }, @@ -70,7 +70,7 @@ "lint-fix": "prettier --write . && eslint . --fix --max-warnings 0", "prettier": "prettier --list-different .", "prettier-fix": "prettier --write .", - "typecheck": "yarn workspaces foreach -A --parallel --include 'stream-chat-react-native-core' --include 'sampleapp' --include 'typescriptmessaging' --include 'ExpoMessaging' run typecheck", + "typecheck": "yarn workspaces foreach -A --parallel --include 'stream-chat-react-native-core' --include 'stream-chat-react-native' --include 'stream-chat-expo' --include 'sampleapp' --include 'ExpoMessaging' run typecheck", "build": "yarn workspace stream-chat-react-native-core build", "test:coverage": "yarn workspace stream-chat-react-native-core test:coverage", "test:unit": "yarn workspace stream-chat-react-native-core test:unit", diff --git a/package/Makefile b/package/Makefile index bf211e1a91..0723b1d6f5 100644 --- a/package/Makefile +++ b/package/Makefile @@ -2,7 +2,7 @@ .PHONY: example-build example-deps EXAMPLES_PATH = ../examples -NATIVE_EXAMPLES = SampleApp TypeScriptMessaging +NATIVE_EXAMPLES = SampleApp NATIVE_EXAMPLES_APPS = $(addprefix $(EXAMPLES_PATH)/,$(NATIVE_EXAMPLES)) NATIVE_EXAMPLES_APPS_DEPS = $(addsuffix /node_modules/installed_dependencies,$(NATIVE_EXAMPLES_APPS)) diff --git a/package/expo-package/package.json b/package/expo-package/package.json index 71430ee5f3..ccfe1bc018 100644 --- a/package/expo-package/package.json +++ b/package/expo-package/package.json @@ -80,11 +80,14 @@ } }, "devDependencies": { + "@stream-io/typescript-config": "workspace:^", "expo": "^57.0.7", "expo-audio": "patch:expo-audio@npm%3A57.0.2#~/.yarn/patches/expo-audio-npm-57.0.2-7a40cb0b0a.patch", - "expo-image-manipulator": "~57.0.5" + "expo-image-manipulator": "~57.0.5", + "typescript": "6.0.3" }, "scripts": { + "typecheck": "tsc --noEmit -p tsconfig.json", "prepack": "bash ../scripts/sync-shared-native.sh expo-package && cp ../../README.md .", "postpack": "rm README.md && bash ../scripts/clean-shared-native-copies.sh expo-package" }, diff --git a/package/expo-package/src/optionalDependencies/setClipboardString.ts b/package/expo-package/src/optionalDependencies/setClipboardString.ts index bfd4ba37b8..c81e71e8e3 100644 --- a/package/expo-package/src/optionalDependencies/setClipboardString.ts +++ b/package/expo-package/src/optionalDependencies/setClipboardString.ts @@ -1,4 +1,14 @@ -let Clipboard: { setString: (string: string) => void } | undefined; +type SetClipboardStringOptions = { + onFailure?: (error: unknown) => void; + onSuccess?: () => void; +}; + +let Clipboard: + | { + setString?: (text: string) => void; + setStringAsync?: (text: string) => Promise; + } + | undefined; try { Clipboard = require('expo-clipboard'); @@ -12,6 +22,35 @@ if (!Clipboard) { ); } -export const setClipboardString = Clipboard - ? (string: string) => Clipboard?.setString(string) - : null; +export const setClipboardString = + Clipboard && (Clipboard.setStringAsync || Clipboard.setString) + ? (text: string, options?: SetClipboardStringOptions) => { + try { + // `expo-clipboard` removed the synchronous `setString` in favour of + // the async API. Keep this handler synchronous (void return, + // like the legacy `setString`) and fire the async write without + // awaiting, reporting the outcome through the callbacks. Fall back to + // `setString` for older versions. + if (Clipboard?.setStringAsync) { + Clipboard.setStringAsync(text) + .then((success) => { + if (success) { + options?.onSuccess?.(); + } else { + options?.onFailure?.(new Error('Copying to clipboard failed')); + } + }) + .catch((error: unknown) => { + console.log('Copying to clipboard failed...', error); + options?.onFailure?.(error); + }); + } else { + Clipboard?.setString?.(text); + options?.onSuccess?.(); + } + } catch (error) { + console.log('Copying to clipboard failed...', error); + options?.onFailure?.(error); + } + } + : null; diff --git a/package/expo-package/src/optionalDependencies/shareImage.ts b/package/expo-package/src/optionalDependencies/shareImage.ts index 1eac482a5f..e3c6abab4d 100644 --- a/package/expo-package/src/optionalDependencies/shareImage.ts +++ b/package/expo-package/src/optionalDependencies/shareImage.ts @@ -19,6 +19,7 @@ export const shareImage = Sharing return true; } catch (error) { console.warn('Sharing failed or cancelled...'); + return false; } } : null; diff --git a/package/expo-package/tsconfig.json b/package/expo-package/tsconfig.json new file mode 100644 index 0000000000..f8b97a6352 --- /dev/null +++ b/package/expo-package/tsconfig.json @@ -0,0 +1,16 @@ +{ + "extends": "@stream-io/typescript-config/library.json", + "compilerOptions": { + // The optional-dependency shims dynamically `require()` peer deps that are + // not installed here (so their values are untyped) and guard them behind + // runtime checks TS can't narrow across closures. The strict-`any`/null/ + // unused checks (meant for the first-party core source) are therefore + // relaxed for these thin wrapper packages; `noImplicitReturns` is kept. + "noImplicitAny": false, + "strictNullChecks": false, + "noUnusedLocals": false, + "noUnusedParameters": false + }, + "include": ["./src/**/*"], + "exclude": ["node_modules", "**/__tests__"] +} diff --git a/package/jest-globals.d.ts b/package/jest-globals.d.ts new file mode 100644 index 0000000000..05530c1451 --- /dev/null +++ b/package/jest-globals.d.ts @@ -0,0 +1,9 @@ +// Provides Jest's ambient globals (describe/it/expect/jest, …) to the test +// type-check program. TypeScript 6.0 no longer auto-includes `@types/jest` +// from `node_modules/@types` the way 5.x did, so we reference it explicitly. +// +// This file sits at the package root — outside `src/` — so that it is neither +// picked up by Jest as a test suite nor emitted into the published `lib/` +// declarations (which must not depend on `@types/jest`). It is pulled in +// only via `tsconfig.test.json`'s `include`. +/// diff --git a/package/native-package/package.json b/package/native-package/package.json index 4dfe3e4acd..89e45d4906 100644 --- a/package/native-package/package.json +++ b/package/native-package/package.json @@ -78,11 +78,14 @@ } }, "scripts": { + "typecheck": "tsc --noEmit -p tsconfig.json", "prepack": "bash ../scripts/sync-shared-native.sh native-package && cp ../../README.md .", "postpack": "rm README.md && bash ../scripts/clean-shared-native-copies.sh native-package" }, "devDependencies": { - "react-native": "0.86.0" + "@stream-io/typescript-config": "workspace:^", + "react-native": "0.86.0", + "typescript": "6.0.3" }, "codegenConfig": { "name": "StreamChatReactNativeSpec", diff --git a/package/native-package/src/optionalDependencies/Audio.ts b/package/native-package/src/optionalDependencies/Audio.ts index 5c76ddcba4..f4b2009317 100644 --- a/package/native-package/src/optionalDependencies/Audio.ts +++ b/package/native-package/src/optionalDependencies/Audio.ts @@ -150,7 +150,7 @@ class _Audio { await verifyAndroidPermissions(); } catch (err) { console.warn('Audio Recording Permissions error', err); - return; + return { accessGranted: false, recording: null }; } } try { diff --git a/package/native-package/src/optionalDependencies/AudioVideo.ts b/package/native-package/src/optionalDependencies/AudioVideo.ts index 16af4baac7..beb2246407 100644 --- a/package/native-package/src/optionalDependencies/AudioVideo.ts +++ b/package/native-package/src/optionalDependencies/AudioVideo.ts @@ -22,6 +22,8 @@ let AudioVideoComponent: }; ignoreSilentSwitch?: 'ignore' | 'obey'; repeat?: boolean; + resizeMode?: string; + rate?: number; }> | undefined; diff --git a/package/native-package/src/optionalDependencies/setClipboardString.ts b/package/native-package/src/optionalDependencies/setClipboardString.ts index 030609cc87..260fbadc9b 100644 --- a/package/native-package/src/optionalDependencies/setClipboardString.ts +++ b/package/native-package/src/optionalDependencies/setClipboardString.ts @@ -1,4 +1,9 @@ -let Clipboard: { setString: (string: string) => void } | undefined; +type SetClipboardStringOptions = { + onFailure?: (error: unknown) => void; + onSuccess?: () => void; +}; + +let Clipboard: { setString?: (text: string) => void } | undefined; try { Clipboard = require('@react-native-clipboard/clipboard').default; @@ -7,6 +12,14 @@ try { console.log('@react-native-clipboard/clipboard is not installed'); } -export const setClipboardString = Clipboard - ? (string: string) => (Clipboard ? Clipboard.setString(string) : {}) +export const setClipboardString = Clipboard?.setString + ? (text: string, options?: SetClipboardStringOptions) => { + try { + Clipboard?.setString?.(text); + options?.onSuccess?.(); + } catch (error) { + console.log('Copying to clipboard failed...', error); + options?.onFailure?.(error); + } + } : null; diff --git a/package/native-package/src/optionalDependencies/shareImage.ts b/package/native-package/src/optionalDependencies/shareImage.ts index 6186f498ca..19bb8fa043 100644 --- a/package/native-package/src/optionalDependencies/shareImage.ts +++ b/package/native-package/src/optionalDependencies/shareImage.ts @@ -40,6 +40,7 @@ export const shareImage = RNShare return true; } catch (error) { console.warn('Sharing failed...', error); + return false; } } : null; diff --git a/package/native-package/tsconfig.json b/package/native-package/tsconfig.json new file mode 100644 index 0000000000..f8b97a6352 --- /dev/null +++ b/package/native-package/tsconfig.json @@ -0,0 +1,16 @@ +{ + "extends": "@stream-io/typescript-config/library.json", + "compilerOptions": { + // The optional-dependency shims dynamically `require()` peer deps that are + // not installed here (so their values are untyped) and guard them behind + // runtime checks TS can't narrow across closures. The strict-`any`/null/ + // unused checks (meant for the first-party core source) are therefore + // relaxed for these thin wrapper packages; `noImplicitReturns` is kept. + "noImplicitAny": false, + "strictNullChecks": false, + "noUnusedLocals": false, + "noUnusedParameters": false + }, + "include": ["./src/**/*"], + "exclude": ["node_modules", "**/__tests__"] +} diff --git a/package/package.json b/package/package.json index 13d8e2ba0f..66edcbe82b 100644 --- a/package/package.json +++ b/package/package.json @@ -116,6 +116,7 @@ "@react-native/babel-preset": "0.86.0", "@react-native/jest-preset": "0.86.0", "@shopify/flash-list": "^2.3.2", + "@stream-io/typescript-config": "workspace:^", "@testing-library/jest-native": "^5.4.3", "@testing-library/react-native": "13.2.0", "@total-typescript/shoehorn": "^0.1.2", @@ -133,7 +134,7 @@ "babel-jest": "30.0.0", "babel-loader": "10.1.1", "babel-plugin-module-resolver": "5.0.3", - "better-sqlite3": "11.10.0", + "better-sqlite3": "12.11.1", "i18next-cli": "^1.31.0", "jest": "^30.4.2", "moment-timezone": "^0.6.0", @@ -148,7 +149,7 @@ "react-native-worklets": "^0.11.1", "react-test-renderer": "19.2.3", "rimraf": "^6.0.1", - "typescript": "5.9.3", + "typescript": "6.0.3", "uuid": "^11.1.0" }, "resolutions": { diff --git a/package/shared-native/ios/StreamVideoThumbnailGenerator.swift b/package/shared-native/ios/StreamVideoThumbnailGenerator.swift index a92b880441..55e46db189 100644 --- a/package/shared-native/ios/StreamVideoThumbnailGenerator.swift +++ b/package/shared-native/ios/StreamVideoThumbnailGenerator.swift @@ -22,7 +22,11 @@ public final class StreamVideoThumbnailResult: NSObject { @objcMembers public final class StreamVideoThumbnailGenerator: NSObject { private static let compressionQuality: CGFloat = 0.8 - private static let maxDimension: CGFloat = 512 + // We intentionally use a lower maxDimension for iOS, as we are trying to mimic + // what a .fastFormat delivery type of the image would do. Although theoretically + // smaller (around 120px) after some benchmarking we figured that 256 was perfectly + // fine and adds just a tiny bit of overhead for a visible quality increase. + private static let maxDimension: CGFloat = 256 private static let cacheVersion = "v1" private static let cacheDirectoryName = "@stream-io-stream-video-thumbnails" private static let maxConcurrentGenerations = 5 @@ -209,7 +213,16 @@ public final class StreamVideoThumbnailGenerator: NSObject { // serves a locally cached thumbnail even for iCloud only assets, so this // avoids downloading the entire video the way requestAVAsset(forVideo:) would. let options = PHImageRequestOptions() - options.deliveryMode = .fastFormat + // `.highQualityFormat` instead of `.fastFormat` here, as the latter only serves + // an already cached poster derivative and will NOT generate one on demand, so + // it fails (PHPhotosError 3303) for assets that have no cached thumbnail yet, + // i.e videos added to a Simulator via `simctl addmedia`, which never get + // their derivatives generated. `.highQualityFormat` still delivers a single + // final image (matching the "accept the first delivered image" logic below) + // and only fetches the poster frame, not the whole video. If a poster frame does + // not exist, it will generate one on the fly (only the first time, all subsequent + // request will return the cached one). + options.deliveryMode = .highQualityFormat options.resizeMode = .fast options.isNetworkAccessAllowed = true options.isSynchronous = false @@ -262,8 +275,8 @@ public final class StreamVideoThumbnailGenerator: NSObject { contentMode: .aspectFit, options: options ) { image, info in - // Accept the first delivered image (.fastFormat sends exactly one, - // thumbnail quality, possibly flagged degraded and that's what we want). + // Accept the first delivered image (.highQualityFormat sends exactly + // one and we still guard against any extra deliveries). state.lock.lock() if state.didResume { state.lock.unlock() diff --git a/package/src/components/Message/hooks/__tests__/useMessageActionHandlers.test.tsx b/package/src/components/Message/hooks/__tests__/useMessageActionHandlers.test.tsx index bb2ed24d30..5a8ea443ba 100644 --- a/package/src/components/Message/hooks/__tests__/useMessageActionHandlers.test.tsx +++ b/package/src/components/Message/hooks/__tests__/useMessageActionHandlers.test.tsx @@ -5,6 +5,7 @@ import type { Channel, LocalMessage, StreamChat } from 'stream-chat'; import { ChannelProvider } from '../../../../contexts/channelContext/ChannelContext'; import { ChatProvider } from '../../../../contexts/chatContext/ChatContext'; +import { NativeHandlers } from '../../../../native'; import { NotificationTargetProvider } from '../../../Notifications/NotificationTargetContext'; import { useMessageActionHandlers } from '../useMessageActionHandlers'; @@ -129,3 +130,73 @@ describe('useMessageActionHandlers notifications', () => { }); }); }); + +describe('useMessageActionHandlers copy', () => { + const originalSetClipboardString = NativeHandlers.setClipboardString; + + afterEach(() => { + NativeHandlers.setClipboardString = originalSetClipboardString; + }); + + it('notifies when copying a message succeeds', () => { + NativeHandlers.setClipboardString = jest.fn((_text, options) => options?.onSuccess?.()); + const client = createClient(); + const message = createMessage(); + const { result } = renderUseMessageActionHandlers({ client, message }); + + act(() => { + result.current.handleCopyMessage(); + }); + + expect(NativeHandlers.setClipboardString).toHaveBeenCalledWith( + 'Message text', + expect.objectContaining({ onFailure: expect.any(Function), onSuccess: expect.any(Function) }), + ); + expect(client.notifications.add).toHaveBeenCalledWith({ + message: 'Message copied to clipboard', + options: { + severity: 'success', + tags: ['target:channel:channel:messaging:general'], + type: 'clipboard:message:copy:success', + }, + origin: { context: { message }, emitter: 'MessageActions' }, + }); + }); + + it('notifies when copying a message fails', () => { + const error = new Error('Clipboard unavailable'); + NativeHandlers.setClipboardString = jest.fn((_text, options) => options?.onFailure?.(error)); + const client = createClient(); + const message = createMessage(); + const { result } = renderUseMessageActionHandlers({ client, message }); + + act(() => { + result.current.handleCopyMessage(); + }); + + expect(client.notifications.add).toHaveBeenCalledWith({ + message: 'Failed to copy message', + options: { + originalError: error, + severity: 'error', + tags: ['target:channel:channel:messaging:general'], + type: 'clipboard:message:copy:failed', + }, + origin: { context: { message }, emitter: 'MessageActions' }, + }); + }); + + it('does not copy or notify when the message has no text', () => { + NativeHandlers.setClipboardString = jest.fn(); + const client = createClient(); + const message = createMessage({ text: '' }); + const { result } = renderUseMessageActionHandlers({ client, message }); + + act(() => { + result.current.handleCopyMessage(); + }); + + expect(NativeHandlers.setClipboardString).not.toHaveBeenCalled(); + expect(client.notifications.add).not.toHaveBeenCalled(); + }); +}); diff --git a/package/src/components/Message/hooks/useMessageActionHandlers.ts b/package/src/components/Message/hooks/useMessageActionHandlers.ts index 8ed432d9c7..8efb4aaea1 100644 --- a/package/src/components/Message/hooks/useMessageActionHandlers.ts +++ b/package/src/components/Message/hooks/useMessageActionHandlers.ts @@ -87,7 +87,26 @@ export const useMessageActionHandlers = ({ if (!message.text) { return; } - NativeHandlers.setClipboardString(translatedMessage?.text ?? message.text); + NativeHandlers.setClipboardString(translatedMessage?.text ?? message.text, { + onFailure: (error) => { + addNotification({ + message: t('Failed to copy message'), + options: { + ...getNotificationErrorOptions(error), + severity: 'error', + type: 'clipboard:message:copy:failed', + }, + origin: { context: { message }, emitter: 'MessageActions' }, + }); + }, + onSuccess: () => { + addNotification({ + message: t('Message copied to clipboard'), + options: { severity: 'success', type: 'clipboard:message:copy:success' }, + origin: { context: { message }, emitter: 'MessageActions' }, + }); + }, + }); }); const handleDeleteMessage = useStableCallback(() => { diff --git a/package/src/i18n/ar.json b/package/src/i18n/ar.json index e536704036..9545265f23 100644 --- a/package/src/i18n/ar.json +++ b/package/src/i18n/ar.json @@ -465,5 +465,7 @@ "You'll stop receiving messages from {{ name }}. You can rejoin anytime.": "ستتوقف عن تلقي الرسائل من {{ name }}. يمكنك الانضمام مجددًا في أي وقت.", "group": "المجموعة", "No members found": "لم يتم العثور على أعضاء", - "a11y/Search members": "البحث عن الأعضاء" + "a11y/Search members": "البحث عن الأعضاء", + "Message copied to clipboard": "تم نسخ الرسالة إلى الحافظة", + "Failed to copy message": "فشل نسخ الرسالة" } diff --git a/package/src/i18n/en.json b/package/src/i18n/en.json index c5aef6ae48..09bf73e0cf 100644 --- a/package/src/i18n/en.json +++ b/package/src/i18n/en.json @@ -76,6 +76,7 @@ "Mark as Unread": "Mark as Unread", "Maximum number of files reached": "Maximum number of files reached", "Message Reactions": "Message Reactions", + "Message copied to clipboard": "Message copied to clipboard", "Message deleted": "Message deleted", "Message has been successfully flagged": "Message has been successfully flagged", "Message flagged": "Message flagged", @@ -393,6 +394,7 @@ "Command not available while replying": "Command not available while replying", "Error reproducing the recording": "Error reproducing the recording", "Error uploading attachment": "Error uploading attachment", + "Failed to copy message": "Failed to copy message", "Failed to create the poll": "Failed to create the poll", "Failed to create the poll due to {{reason}}": "Failed to create the poll due to {{reason}}", "Failed to end the poll": "Failed to end the poll", diff --git a/package/src/i18n/es.json b/package/src/i18n/es.json index 83bf0d0443..ced6a3f81c 100644 --- a/package/src/i18n/es.json +++ b/package/src/i18n/es.json @@ -465,5 +465,7 @@ "You'll stop receiving messages from {{ name }}. You can rejoin anytime.": "Dejarás de recibir mensajes de {{ name }}. Puedes volver a unirte cuando quieras.", "group": "el grupo", "No members found": "No se encontraron miembros", - "a11y/Search members": "Buscar miembros" + "a11y/Search members": "Buscar miembros", + "Message copied to clipboard": "Mensaje copiado al portapapeles", + "Failed to copy message": "No se pudo copiar el mensaje" } diff --git a/package/src/i18n/fr.json b/package/src/i18n/fr.json index 86b0d5799e..6b36a1f43f 100644 --- a/package/src/i18n/fr.json +++ b/package/src/i18n/fr.json @@ -465,5 +465,7 @@ "You'll stop receiving messages from {{ name }}. You can rejoin anytime.": "Vous ne recevrez plus de messages de {{ name }}. Vous pouvez rejoindre à tout moment.", "group": "ce groupe", "No members found": "Aucun membre trouvé", - "a11y/Search members": "Rechercher des membres" + "a11y/Search members": "Rechercher des membres", + "Message copied to clipboard": "Message copié dans le presse-papiers", + "Failed to copy message": "Échec de la copie du message" } diff --git a/package/src/i18n/he.json b/package/src/i18n/he.json index b839d384c4..5d903d4411 100644 --- a/package/src/i18n/he.json +++ b/package/src/i18n/he.json @@ -465,5 +465,7 @@ "You'll stop receiving messages from {{ name }}. You can rejoin anytime.": "תפסיק/תפסיקי לקבל הודעות מ-{{ name }}. ניתן להצטרף בחזרה בכל עת.", "group": "הקבוצה", "No members found": "לא נמצאו חברים", - "a11y/Search members": "חיפוש חברים" + "a11y/Search members": "חיפוש חברים", + "Message copied to clipboard": "ההודעה הועתקה ללוח", + "Failed to copy message": "העתקת ההודעה נכשלה" } diff --git a/package/src/i18n/hi.json b/package/src/i18n/hi.json index f4b9410571..5097400d77 100644 --- a/package/src/i18n/hi.json +++ b/package/src/i18n/hi.json @@ -465,5 +465,7 @@ "You'll stop receiving messages from {{ name }}. You can rejoin anytime.": "आपको {{ name }} से संदेश मिलना बंद हो जाएंगे। आप कभी भी दोबारा जुड़ सकते हैं।", "group": "ग्रुप", "No members found": "कोई सदस्य नहीं मिला", - "a11y/Search members": "सदस्य खोजें" + "a11y/Search members": "सदस्य खोजें", + "Message copied to clipboard": "संदेश क्लिपबोर्ड पर कॉपी किया गया", + "Failed to copy message": "संदेश कॉपी करने में विफल रहा" } diff --git a/package/src/i18n/it.json b/package/src/i18n/it.json index 39a13522bb..48ac2c4bcb 100644 --- a/package/src/i18n/it.json +++ b/package/src/i18n/it.json @@ -465,5 +465,7 @@ "You'll stop receiving messages from {{ name }}. You can rejoin anytime.": "Non riceverai più messaggi da {{ name }}. Puoi rientrare in qualsiasi momento.", "group": "il gruppo", "No members found": "Nessun membro trovato", - "a11y/Search members": "Cerca membri" + "a11y/Search members": "Cerca membri", + "Message copied to clipboard": "Messaggio copiato negli appunti", + "Failed to copy message": "Impossibile copiare il messaggio" } diff --git a/package/src/i18n/ja.json b/package/src/i18n/ja.json index d7b2ef5b08..1269687ee2 100644 --- a/package/src/i18n/ja.json +++ b/package/src/i18n/ja.json @@ -465,5 +465,7 @@ "You'll stop receiving messages from {{ name }}. You can rejoin anytime.": "{{ name }} からのメッセージが届かなくなります。いつでも再参加できます。", "group": "グループ", "No members found": "メンバーが見つかりません", - "a11y/Search members": "メンバーを検索" + "a11y/Search members": "メンバーを検索", + "Message copied to clipboard": "メッセージをクリップボードにコピーしました", + "Failed to copy message": "メッセージのコピーに失敗しました" } diff --git a/package/src/i18n/ko.json b/package/src/i18n/ko.json index f0bd18d3bf..8affa8cace 100644 --- a/package/src/i18n/ko.json +++ b/package/src/i18n/ko.json @@ -465,5 +465,7 @@ "You'll stop receiving messages from {{ name }}. You can rejoin anytime.": "{{ name }}에서 더 이상 메시지를 받지 않게 됩니다. 언제든지 다시 참여할 수 있습니다.", "group": "그룹", "No members found": "멤버를 찾을 수 없습니다", - "a11y/Search members": "멤버 검색" + "a11y/Search members": "멤버 검색", + "Message copied to clipboard": "메시지가 클립보드에 복사되었습니다", + "Failed to copy message": "메시지 복사에 실패했습니다" } diff --git a/package/src/i18n/nl.json b/package/src/i18n/nl.json index 34c7d9038a..ed1b2b01ce 100644 --- a/package/src/i18n/nl.json +++ b/package/src/i18n/nl.json @@ -465,5 +465,7 @@ "You'll stop receiving messages from {{ name }}. You can rejoin anytime.": "Je ontvangt geen berichten meer van {{ name }}. Je kunt op elk moment opnieuw deelnemen.", "group": "de groep", "No members found": "Geen leden gevonden", - "a11y/Search members": "Zoek leden" + "a11y/Search members": "Zoek leden", + "Message copied to clipboard": "Bericht gekopieerd naar klembord", + "Failed to copy message": "Kopiëren van bericht mislukt" } diff --git a/package/src/i18n/pt-br.json b/package/src/i18n/pt-br.json index f0001b5c5f..8ecec16566 100644 --- a/package/src/i18n/pt-br.json +++ b/package/src/i18n/pt-br.json @@ -465,5 +465,7 @@ "You'll stop receiving messages from {{ name }}. You can rejoin anytime.": "Você deixará de receber mensagens de {{ name }}. Pode entrar novamente a qualquer momento.", "group": "o grupo", "No members found": "Nenhum membro encontrado", - "a11y/Search members": "Pesquisar membros" + "a11y/Search members": "Pesquisar membros", + "Message copied to clipboard": "Mensagem copiada para a área de transferência", + "Failed to copy message": "Falha ao copiar a mensagem" } diff --git a/package/src/i18n/ru.json b/package/src/i18n/ru.json index 897c3daa1d..a6d33d6d47 100644 --- a/package/src/i18n/ru.json +++ b/package/src/i18n/ru.json @@ -465,5 +465,7 @@ "You'll stop receiving messages from {{ name }}. You can rejoin anytime.": "Вы перестанете получать сообщения от {{ name }}. Вы можете присоединиться снова в любое время.", "group": "группы", "No members found": "Участники не найдены", - "a11y/Search members": "Поиск участников" + "a11y/Search members": "Поиск участников", + "Message copied to clipboard": "Сообщение скопировано в буфер обмена", + "Failed to copy message": "Не удалось скопировать сообщение" } diff --git a/package/src/i18n/tr.json b/package/src/i18n/tr.json index 35782fd7a6..c6560782e3 100644 --- a/package/src/i18n/tr.json +++ b/package/src/i18n/tr.json @@ -465,5 +465,7 @@ "You'll stop receiving messages from {{ name }}. You can rejoin anytime.": "{{ name }} kanalından mesaj almayı bırakacaksınız. İstediğiniz zaman tekrar katılabilirsiniz.", "group": "grup", "No members found": "Üye bulunamadı", - "a11y/Search members": "Üye ara" + "a11y/Search members": "Üye ara", + "Message copied to clipboard": "Mesaj panoya kopyalandı", + "Failed to copy message": "Mesaj kopyalanamadı" } diff --git a/package/src/index.ts b/package/src/index.ts index 8a8eacfb28..6c8f8c1f45 100644 --- a/package/src/index.ts +++ b/package/src/index.ts @@ -4,7 +4,13 @@ import './polyfills'; export * from './components'; export * from './hooks'; -export { registerNativeHandlers, SoundReturnType, PlaybackStatus, RecordingStatus } from './native'; +export { + PickImageOptions, + PlaybackStatus, + RecordingStatus, + registerNativeHandlers, + SoundReturnType, +} from './native'; export * from './contexts'; export * from './icons'; diff --git a/package/src/native.ts b/package/src/native.ts index ee957bd2f1..b1a19e39f4 100644 --- a/package/src/native.ts +++ b/package/src/native.ts @@ -88,7 +88,16 @@ type SaveFileOptions = { }; type SaveFile = (options: SaveFileOptions) => Promise | never; -type SetClipboardString = (text: string) => Promise | never; +type SetClipboardStringOptions = { + /** Invoked when writing to the clipboard fails. */ + onFailure?: (error: unknown) => void; + /** Invoked after the text has been handed to the clipboard successfully. */ + onSuccess?: () => void; +}; +// TODO(next-major): make this handler async and return the write outcome directly. +// It's kept synchronous (void) for backwards compatibility, so success/failure are +// reported via the `onSuccess`/`onFailure` callbacks instead of a Promise. +type SetClipboardString = (text: string, options?: SetClipboardStringOptions) => void; type ShareOptions = { type?: string; diff --git a/package/tsconfig.json b/package/tsconfig.json index b1fb8c3d18..b9851bafa7 100644 --- a/package/tsconfig.json +++ b/package/tsconfig.json @@ -1,29 +1,7 @@ { + "extends": "@stream-io/typescript-config/library.json", "compilerOptions": { - "allowUnreachableCode": false, - "allowUnusedLabels": false, - "esModuleInterop": true, - "forceConsistentCasingInFileNames": true, - "jsx": "react-native", - "lib": ["esnext", "DOM", "DOM.Iterable"], - "module": "esnext", - "moduleResolution": "bundler", - "noFallthroughCasesInSwitch": true, - "noImplicitReturns": true, - "noImplicitUseStrict": false, - "noStrictGenericChecks": false, - "noUnusedLocals": true, - "noUnusedParameters": true, - "strictNullChecks": true, - "resolveJsonModule": true, - "skipLibCheck": true, - "strict": true, - "target": "esnext", - "allowSyntheticDefaultImports": true, - "noEmitOnError": false, - "noImplicitAny": true, - "allowJs": true, - "checkJs": false + "rootDir": "./src" }, "include": ["./src/**/*"], "exclude": [ @@ -35,6 +13,8 @@ "babel.config.js", "metro.config.js", "jest.config.js", - "**/__tests__" + "**/__tests__", + "**/*.test.ts", + "**/*.test.tsx" ] } diff --git a/package/tsconfig.test.json b/package/tsconfig.test.json index bec743aba0..55a808c59c 100644 --- a/package/tsconfig.test.json +++ b/package/tsconfig.test.json @@ -4,7 +4,7 @@ "noUnusedLocals": false, "noUnusedParameters": false }, - "include": ["./src/**/*"], + "include": ["./src/**/*", "./jest-globals.d.ts"], "exclude": [ "./src/components/docs/*", "./src/emoji-data/*.js", diff --git a/yarn.lock b/yarn.lock index f0b9cb7998..f2e1e3f0f0 100644 --- a/yarn.lock +++ b/yarn.lock @@ -64,7 +64,7 @@ __metadata: languageName: node linkType: hard -"@babel/code-frame@npm:^7.0.0, @babel/code-frame@npm:^7.12.13, @babel/code-frame@npm:^7.20.0, @babel/code-frame@npm:^7.24.7, @babel/code-frame@npm:^7.26.2, @babel/code-frame@npm:^7.27.1, @babel/code-frame@npm:^7.29.0, @babel/code-frame@npm:^7.29.7": +"@babel/code-frame@npm:^7.0.0, @babel/code-frame@npm:^7.12.13, @babel/code-frame@npm:^7.20.0, @babel/code-frame@npm:^7.26.2, @babel/code-frame@npm:^7.27.1, @babel/code-frame@npm:^7.29.0, @babel/code-frame@npm:^7.29.7": version: 7.29.7 resolution: "@babel/code-frame@npm:7.29.7" dependencies: @@ -105,7 +105,7 @@ __metadata: languageName: node linkType: hard -"@babel/generator@npm:^7.20.0, @babel/generator@npm:^7.20.5, @babel/generator@npm:^7.25.0, @babel/generator@npm:^7.27.1, @babel/generator@npm:^7.27.5, @babel/generator@npm:^7.29.0, @babel/generator@npm:^7.29.1, @babel/generator@npm:^7.29.7": +"@babel/generator@npm:^7.20.0, @babel/generator@npm:^7.20.5, @babel/generator@npm:^7.27.1, @babel/generator@npm:^7.27.5, @babel/generator@npm:^7.29.0, @babel/generator@npm:^7.29.1, @babel/generator@npm:^7.29.7": version: 7.29.7 resolution: "@babel/generator@npm:7.29.7" dependencies: @@ -185,7 +185,7 @@ __metadata: languageName: node linkType: hard -"@babel/helper-globals@npm:^7.28.0, @babel/helper-globals@npm:^7.29.7": +"@babel/helper-globals@npm:^7.29.7": version: 7.29.7 resolution: "@babel/helper-globals@npm:7.29.7" checksum: 10c0/f38417c40b1129a1b2b519ca961b9040c8827d1444fd74068702286b91b77089431dc76b6b9d5c1496e5da2a4f3ad329c6946e688ba3fa0d1d0b3d2b4f34f36a @@ -319,7 +319,7 @@ __metadata: languageName: node linkType: hard -"@babel/parser@npm:^7.1.0, @babel/parser@npm:^7.14.7, @babel/parser@npm:^7.20.0, @babel/parser@npm:^7.20.7, @babel/parser@npm:^7.23.9, @babel/parser@npm:^7.24.4, @babel/parser@npm:^7.25.3, @babel/parser@npm:^7.29.0, @babel/parser@npm:^7.29.7": +"@babel/parser@npm:^7.1.0, @babel/parser@npm:^7.14.7, @babel/parser@npm:^7.20.0, @babel/parser@npm:^7.20.7, @babel/parser@npm:^7.23.9, @babel/parser@npm:^7.24.4, @babel/parser@npm:^7.29.0, @babel/parser@npm:^7.29.7": version: 7.29.7 resolution: "@babel/parser@npm:7.29.7" dependencies: @@ -688,7 +688,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-arrow-functions@npm:^7.0.0-0, @babel/plugin-transform-arrow-functions@npm:^7.24.7, @babel/plugin-transform-arrow-functions@npm:^7.27.1": +"@babel/plugin-transform-arrow-functions@npm:^7.27.1": version: 7.27.1 resolution: "@babel/plugin-transform-arrow-functions@npm:7.27.1" dependencies: @@ -747,7 +747,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-class-properties@npm:^7.0.0-0, @babel/plugin-transform-class-properties@npm:^7.25.4, @babel/plugin-transform-class-properties@npm:^7.28.6": +"@babel/plugin-transform-class-properties@npm:^7.25.4, @babel/plugin-transform-class-properties@npm:^7.28.6": version: 7.29.7 resolution: "@babel/plugin-transform-class-properties@npm:7.29.7" dependencies: @@ -771,7 +771,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-classes@npm:^7.0.0-0, @babel/plugin-transform-classes@npm:^7.25.4, @babel/plugin-transform-classes@npm:^7.28.6": +"@babel/plugin-transform-classes@npm:^7.25.4, @babel/plugin-transform-classes@npm:^7.28.6": version: 7.29.7 resolution: "@babel/plugin-transform-classes@npm:7.29.7" dependencies: @@ -787,7 +787,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-computed-properties@npm:^7.24.7, @babel/plugin-transform-computed-properties@npm:^7.28.6": +"@babel/plugin-transform-computed-properties@npm:^7.28.6": version: 7.28.6 resolution: "@babel/plugin-transform-computed-properties@npm:7.28.6" dependencies: @@ -915,7 +915,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-function-name@npm:^7.25.1, @babel/plugin-transform-function-name@npm:^7.27.1": +"@babel/plugin-transform-function-name@npm:^7.27.1": version: 7.27.1 resolution: "@babel/plugin-transform-function-name@npm:7.27.1" dependencies: @@ -939,7 +939,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-literals@npm:^7.25.2, @babel/plugin-transform-literals@npm:^7.27.1": +"@babel/plugin-transform-literals@npm:^7.27.1": version: 7.27.1 resolution: "@babel/plugin-transform-literals@npm:7.27.1" dependencies: @@ -1045,7 +1045,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-nullish-coalescing-operator@npm:^7.0.0-0, @babel/plugin-transform-nullish-coalescing-operator@npm:^7.24.7, @babel/plugin-transform-nullish-coalescing-operator@npm:^7.28.6": +"@babel/plugin-transform-nullish-coalescing-operator@npm:^7.24.7, @babel/plugin-transform-nullish-coalescing-operator@npm:^7.28.6": version: 7.29.7 resolution: "@babel/plugin-transform-nullish-coalescing-operator@npm:7.29.7" dependencies: @@ -1056,7 +1056,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-numeric-separator@npm:^7.24.7, @babel/plugin-transform-numeric-separator@npm:^7.28.6": +"@babel/plugin-transform-numeric-separator@npm:^7.28.6": version: 7.28.6 resolution: "@babel/plugin-transform-numeric-separator@npm:7.28.6" dependencies: @@ -1105,7 +1105,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-optional-chaining@npm:^7.0.0-0, @babel/plugin-transform-optional-chaining@npm:^7.24.8, @babel/plugin-transform-optional-chaining@npm:^7.27.1, @babel/plugin-transform-optional-chaining@npm:^7.28.6": +"@babel/plugin-transform-optional-chaining@npm:^7.24.8, @babel/plugin-transform-optional-chaining@npm:^7.27.1, @babel/plugin-transform-optional-chaining@npm:^7.28.6": version: 7.28.6 resolution: "@babel/plugin-transform-optional-chaining@npm:7.28.6" dependencies: @@ -1285,7 +1285,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-shorthand-properties@npm:^7.0.0-0, @babel/plugin-transform-shorthand-properties@npm:^7.24.7, @babel/plugin-transform-shorthand-properties@npm:^7.27.1": +"@babel/plugin-transform-shorthand-properties@npm:^7.27.1": version: 7.27.1 resolution: "@babel/plugin-transform-shorthand-properties@npm:7.27.1" dependencies: @@ -1296,7 +1296,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-spread@npm:^7.24.7, @babel/plugin-transform-spread@npm:^7.28.6": +"@babel/plugin-transform-spread@npm:^7.28.6": version: 7.28.6 resolution: "@babel/plugin-transform-spread@npm:7.28.6" dependencies: @@ -1308,7 +1308,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-sticky-regex@npm:^7.24.7, @babel/plugin-transform-sticky-regex@npm:^7.27.1": +"@babel/plugin-transform-sticky-regex@npm:^7.27.1": version: 7.27.1 resolution: "@babel/plugin-transform-sticky-regex@npm:7.27.1" dependencies: @@ -1330,7 +1330,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-template-literals@npm:^7.0.0-0, @babel/plugin-transform-template-literals@npm:^7.27.1": +"@babel/plugin-transform-template-literals@npm:^7.27.1": version: 7.27.1 resolution: "@babel/plugin-transform-template-literals@npm:7.27.1" dependencies: @@ -1390,7 +1390,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-unicode-regex@npm:^7.0.0-0, @babel/plugin-transform-unicode-regex@npm:^7.24.7, @babel/plugin-transform-unicode-regex@npm:^7.27.1": +"@babel/plugin-transform-unicode-regex@npm:^7.24.7, @babel/plugin-transform-unicode-regex@npm:^7.27.1": version: 7.27.1 resolution: "@babel/plugin-transform-unicode-regex@npm:7.27.1" dependencies: @@ -1524,7 +1524,7 @@ __metadata: languageName: node linkType: hard -"@babel/preset-typescript@npm:^7.16.7, @babel/preset-typescript@npm:^7.23.0, @babel/preset-typescript@npm:^7.24.7, @babel/preset-typescript@npm:^7.28.5": +"@babel/preset-typescript@npm:^7.23.0, @babel/preset-typescript@npm:^7.24.7, @babel/preset-typescript@npm:^7.28.5": version: 7.29.7 resolution: "@babel/preset-typescript@npm:7.29.7" dependencies: @@ -1546,7 +1546,7 @@ __metadata: languageName: node linkType: hard -"@babel/template@npm:^7.0.0, @babel/template@npm:^7.25.0, @babel/template@npm:^7.27.2, @babel/template@npm:^7.28.6, @babel/template@npm:^7.29.7, @babel/template@npm:^7.3.3": +"@babel/template@npm:^7.0.0, @babel/template@npm:^7.27.2, @babel/template@npm:^7.28.6, @babel/template@npm:^7.29.7, @babel/template@npm:^7.3.3": version: 7.29.7 resolution: "@babel/template@npm:7.29.7" dependencies: @@ -1557,22 +1557,7 @@ __metadata: languageName: node linkType: hard -"@babel/traverse--for-generate-function-map@npm:@babel/traverse@^7.25.3": - version: 7.29.0 - resolution: "@babel/traverse@npm:7.29.0" - dependencies: - "@babel/code-frame": "npm:^7.29.0" - "@babel/generator": "npm:^7.29.0" - "@babel/helper-globals": "npm:^7.28.0" - "@babel/parser": "npm:^7.29.0" - "@babel/template": "npm:^7.28.6" - "@babel/types": "npm:^7.29.0" - debug: "npm:^4.3.1" - checksum: 10c0/f63ef6e58d02a9fbf3c0e2e5f1c877da3e0bc57f91a19d2223d53e356a76859cbaf51171c9211c71816d94a0e69efa2732fd27ffc0e1bbc84b636e60932333eb - languageName: node - linkType: hard - -"@babel/traverse@npm:^7.20.0, @babel/traverse@npm:^7.25.3, @babel/traverse@npm:^7.27.1, @babel/traverse@npm:^7.28.5, @babel/traverse@npm:^7.28.6, @babel/traverse@npm:^7.29.0, @babel/traverse@npm:^7.29.7": +"@babel/traverse@npm:^7.20.0, @babel/traverse@npm:^7.27.1, @babel/traverse@npm:^7.28.5, @babel/traverse@npm:^7.28.6, @babel/traverse@npm:^7.29.0, @babel/traverse@npm:^7.29.7": version: 7.29.7 resolution: "@babel/traverse@npm:7.29.7" dependencies: @@ -1587,7 +1572,7 @@ __metadata: languageName: node linkType: hard -"@babel/types@npm:^7.0.0, @babel/types@npm:^7.20.0, @babel/types@npm:^7.20.7, @babel/types@npm:^7.25.2, @babel/types@npm:^7.26.0, @babel/types@npm:^7.27.1, @babel/types@npm:^7.27.3, @babel/types@npm:^7.28.2, @babel/types@npm:^7.28.6, @babel/types@npm:^7.29.0, @babel/types@npm:^7.29.7, @babel/types@npm:^7.3.3, @babel/types@npm:^7.4.4": +"@babel/types@npm:^7.0.0, @babel/types@npm:^7.20.0, @babel/types@npm:^7.20.7, @babel/types@npm:^7.26.0, @babel/types@npm:^7.27.1, @babel/types@npm:^7.27.3, @babel/types@npm:^7.28.2, @babel/types@npm:^7.28.6, @babel/types@npm:^7.29.0, @babel/types@npm:^7.29.7, @babel/types@npm:^7.3.3, @babel/types@npm:^7.4.4": version: 7.29.7 resolution: "@babel/types@npm:7.29.7" dependencies: @@ -3886,19 +3871,6 @@ __metadata: languageName: node linkType: hard -"@jest/types@npm:^26.6.2": - version: 26.6.2 - resolution: "@jest/types@npm:26.6.2" - dependencies: - "@types/istanbul-lib-coverage": "npm:^2.0.0" - "@types/istanbul-reports": "npm:^3.0.0" - "@types/node": "npm:*" - "@types/yargs": "npm:^15.0.0" - chalk: "npm:^4.0.0" - checksum: 10c0/5b9b957f38a002895eb04bbb8c3dda6fccce8e2551f3f44b02f1f43063a78e8bedce73cd4330b53ede00ae005de5cd805982fbb2ec6ab9feacf96344240d5db2 - languageName: node - linkType: hard - "@jest/types@npm:^29.6.3": version: 29.6.3 resolution: "@jest/types@npm:29.6.3" @@ -4333,16 +4305,6 @@ __metadata: languageName: node linkType: hard -"@op-engineering/op-sqlite@npm:^14.0.4": - version: 14.1.4 - resolution: "@op-engineering/op-sqlite@npm:14.1.4" - peerDependencies: - react: "*" - react-native: "*" - checksum: 10c0/30e94762c49443a0114ad13ecc3338db9b7f56236f4ae983e58a5d75246534617c70ffcb53d4b3e9e52e39a7bc76720193f4a99b012206efd7a07fb642a1f346 - languageName: node - linkType: hard - "@op-engineering/op-sqlite@npm:^17.1.2": version: 17.1.2 resolution: "@op-engineering/op-sqlite@npm:17.1.2" @@ -4889,7 +4851,7 @@ __metadata: languageName: node linkType: hard -"@react-native-clipboard/clipboard@npm:^1.16.2, @react-native-clipboard/clipboard@npm:^1.16.3": +"@react-native-clipboard/clipboard@npm:^1.16.3": version: 1.16.3 resolution: "@react-native-clipboard/clipboard@npm:1.16.3" peerDependencies: @@ -4916,18 +4878,6 @@ __metadata: languageName: node linkType: hard -"@react-native-community/cli-clean@npm:19.1.2": - version: 19.1.2 - resolution: "@react-native-community/cli-clean@npm:19.1.2" - dependencies: - "@react-native-community/cli-tools": "npm:19.1.2" - chalk: "npm:^4.1.2" - execa: "npm:^5.0.0" - fast-glob: "npm:^3.3.2" - checksum: 10c0/660824e029ecf2da517e528d414f84a72bf1c7521a8aede1d58f637c8388eb3970f4eee3e8794580623f4955d5194096d976631da68fde9e04884cb8f4542039 - languageName: node - linkType: hard - "@react-native-community/cli-clean@npm:20.1.0": version: 20.1.0 resolution: "@react-native-community/cli-clean@npm:20.1.0" @@ -4940,30 +4890,6 @@ __metadata: languageName: node linkType: hard -"@react-native-community/cli-config-android@npm:19.1.1": - version: 19.1.1 - resolution: "@react-native-community/cli-config-android@npm:19.1.1" - dependencies: - "@react-native-community/cli-tools": "npm:19.1.1" - chalk: "npm:^4.1.2" - fast-glob: "npm:^3.3.2" - fast-xml-parser: "npm:^4.4.1" - checksum: 10c0/6236e0a61032d9e573e8bff4aee6efbdc787808aff3da96662886e856c98777734ce4a6e36a1025d3a9c592af6bc09357f314fb622e39efac3f8c414890f4b4c - languageName: node - linkType: hard - -"@react-native-community/cli-config-android@npm:19.1.2": - version: 19.1.2 - resolution: "@react-native-community/cli-config-android@npm:19.1.2" - dependencies: - "@react-native-community/cli-tools": "npm:19.1.2" - chalk: "npm:^4.1.2" - fast-glob: "npm:^3.3.2" - fast-xml-parser: "npm:^4.4.1" - checksum: 10c0/3c06c74010c6409f95459d4440880a0ba93e83c0cbf90b4a22bb0ebadfecf5929e86a67e19690359da5da7b7fb7334d3ef739392a80643bf89929598c729224a - languageName: node - linkType: hard - "@react-native-community/cli-config-android@npm:20.1.0": version: 20.1.0 resolution: "@react-native-community/cli-config-android@npm:20.1.0" @@ -4976,30 +4902,6 @@ __metadata: languageName: node linkType: hard -"@react-native-community/cli-config-apple@npm:19.1.1": - version: 19.1.1 - resolution: "@react-native-community/cli-config-apple@npm:19.1.1" - dependencies: - "@react-native-community/cli-tools": "npm:19.1.1" - chalk: "npm:^4.1.2" - execa: "npm:^5.0.0" - fast-glob: "npm:^3.3.2" - checksum: 10c0/c35498763870db53a18bda2dbc21045a8b1fa583345ad2fe9a371a3df70d85fe9d6043d43e976beb570f2f138956ab55f19172c8832d40d3bc9ad546cfadac59 - languageName: node - linkType: hard - -"@react-native-community/cli-config-apple@npm:19.1.2": - version: 19.1.2 - resolution: "@react-native-community/cli-config-apple@npm:19.1.2" - dependencies: - "@react-native-community/cli-tools": "npm:19.1.2" - chalk: "npm:^4.1.2" - execa: "npm:^5.0.0" - fast-glob: "npm:^3.3.2" - checksum: 10c0/75ad855ec33e44731adf57d20969899b2eed802b2713fcaa57c0e8fef1f97a7b6ac018fe1109d41b785be90a74a7e17377d5a4e76b509a72689d56b3d64026bd - languageName: node - linkType: hard - "@react-native-community/cli-config-apple@npm:20.1.0": version: 20.1.0 resolution: "@react-native-community/cli-config-apple@npm:20.1.0" @@ -5012,20 +4914,6 @@ __metadata: languageName: node linkType: hard -"@react-native-community/cli-config@npm:19.1.2": - version: 19.1.2 - resolution: "@react-native-community/cli-config@npm:19.1.2" - dependencies: - "@react-native-community/cli-tools": "npm:19.1.2" - chalk: "npm:^4.1.2" - cosmiconfig: "npm:^9.0.0" - deepmerge: "npm:^4.3.0" - fast-glob: "npm:^3.3.2" - joi: "npm:^17.2.1" - checksum: 10c0/537856dc95ee8dbdc7e5c797a7d3a92330a17a1b17dddd94d6c1e7870f95e034e71e4c5dfc5f0a5e9129ac4df3ad6dcebb75f5e8032e76b8fdd8055a2275c45f - languageName: node - linkType: hard - "@react-native-community/cli-config@npm:20.1.0": version: 20.1.0 resolution: "@react-native-community/cli-config@npm:20.1.0" @@ -5040,29 +4928,6 @@ __metadata: languageName: node linkType: hard -"@react-native-community/cli-doctor@npm:19.1.2": - version: 19.1.2 - resolution: "@react-native-community/cli-doctor@npm:19.1.2" - dependencies: - "@react-native-community/cli-config": "npm:19.1.2" - "@react-native-community/cli-platform-android": "npm:19.1.2" - "@react-native-community/cli-platform-apple": "npm:19.1.2" - "@react-native-community/cli-platform-ios": "npm:19.1.2" - "@react-native-community/cli-tools": "npm:19.1.2" - chalk: "npm:^4.1.2" - command-exists: "npm:^1.2.8" - deepmerge: "npm:^4.3.0" - envinfo: "npm:^7.13.0" - execa: "npm:^5.0.0" - node-stream-zip: "npm:^1.9.1" - ora: "npm:^5.4.1" - semver: "npm:^7.5.2" - wcwidth: "npm:^1.0.1" - yaml: "npm:^2.2.1" - checksum: 10c0/a1cc4b13f6e2c703ba092a02146f07e17c02830130f427b8695d4f1cca4a46caa3118cf54328e6fd5be85e358d0db0deb2a58d8b2b4e78d19748dd64db203a42 - languageName: node - linkType: hard - "@react-native-community/cli-doctor@npm:20.1.0": version: 20.1.0 resolution: "@react-native-community/cli-doctor@npm:20.1.0" @@ -5086,32 +4951,6 @@ __metadata: languageName: node linkType: hard -"@react-native-community/cli-platform-android@npm:19.1.1": - version: 19.1.1 - resolution: "@react-native-community/cli-platform-android@npm:19.1.1" - dependencies: - "@react-native-community/cli-config-android": "npm:19.1.1" - "@react-native-community/cli-tools": "npm:19.1.1" - chalk: "npm:^4.1.2" - execa: "npm:^5.0.0" - logkitty: "npm:^0.7.1" - checksum: 10c0/2fbfd7cb21663743207f63cf2329857767839ec0432450846a15e488a30b0c480c4dec0a41ddeb157e1027c3c65799d21e171c1c4c69d413d52c8c8fb2353951 - languageName: node - linkType: hard - -"@react-native-community/cli-platform-android@npm:19.1.2": - version: 19.1.2 - resolution: "@react-native-community/cli-platform-android@npm:19.1.2" - dependencies: - "@react-native-community/cli-config-android": "npm:19.1.2" - "@react-native-community/cli-tools": "npm:19.1.2" - chalk: "npm:^4.1.2" - execa: "npm:^5.0.0" - logkitty: "npm:^0.7.1" - checksum: 10c0/76938dfb6f25d2c41b3396f0a59ba99e360b0b7c10b89848b3af4b7685b0878c30a9546b0a51ba50f95132135f63803d41209b3ad946874e811a1b46bf0d6b90 - languageName: node - linkType: hard - "@react-native-community/cli-platform-android@npm:20.1.0": version: 20.1.0 resolution: "@react-native-community/cli-platform-android@npm:20.1.0" @@ -5125,32 +4964,6 @@ __metadata: languageName: node linkType: hard -"@react-native-community/cli-platform-apple@npm:19.1.1": - version: 19.1.1 - resolution: "@react-native-community/cli-platform-apple@npm:19.1.1" - dependencies: - "@react-native-community/cli-config-apple": "npm:19.1.1" - "@react-native-community/cli-tools": "npm:19.1.1" - chalk: "npm:^4.1.2" - execa: "npm:^5.0.0" - fast-xml-parser: "npm:^4.4.1" - checksum: 10c0/1ef329e59876216141678ddf0bed305ea09cdb294463877c80ec7b95842bff85a15f73973eab21d7eaac4c31a2687c504dbb66d06e0097d1e4bbf8765e4be4e1 - languageName: node - linkType: hard - -"@react-native-community/cli-platform-apple@npm:19.1.2": - version: 19.1.2 - resolution: "@react-native-community/cli-platform-apple@npm:19.1.2" - dependencies: - "@react-native-community/cli-config-apple": "npm:19.1.2" - "@react-native-community/cli-tools": "npm:19.1.2" - chalk: "npm:^4.1.2" - execa: "npm:^5.0.0" - fast-xml-parser: "npm:^4.4.1" - checksum: 10c0/f06f25825f6ce3860b74d165f3bde716dbbe1d1f7c820cd20f2608427317380ee79f621e8fcba69a9a0701df9c188b13388c77aec691c55af853ce2bf05795f5 - languageName: node - linkType: hard - "@react-native-community/cli-platform-apple@npm:20.1.0": version: 20.1.0 resolution: "@react-native-community/cli-platform-apple@npm:20.1.0" @@ -5164,24 +4977,6 @@ __metadata: languageName: node linkType: hard -"@react-native-community/cli-platform-ios@npm:19.1.1": - version: 19.1.1 - resolution: "@react-native-community/cli-platform-ios@npm:19.1.1" - dependencies: - "@react-native-community/cli-platform-apple": "npm:19.1.1" - checksum: 10c0/aaa2fa64c860a00ab6e697b7280786c7305c73b7c5fe7ac1042ec62f88d6b5a444106280577752fcd1f2300dd5b555a704b31b59f072e260302ed2e5bb60050d - languageName: node - linkType: hard - -"@react-native-community/cli-platform-ios@npm:19.1.2": - version: 19.1.2 - resolution: "@react-native-community/cli-platform-ios@npm:19.1.2" - dependencies: - "@react-native-community/cli-platform-apple": "npm:19.1.2" - checksum: 10c0/fe69fa12ea3616dd9c17fb91a21f133e8765e3fd4dcb2e60591dc2b0cdfe8dbd1fa41a86f871c03ee701c84ff7298af6897bd09fdb701341e4a11ebb9b959637 - languageName: node - linkType: hard - "@react-native-community/cli-platform-ios@npm:20.1.0": version: 20.1.0 resolution: "@react-native-community/cli-platform-ios@npm:20.1.0" @@ -5191,24 +4986,6 @@ __metadata: languageName: node linkType: hard -"@react-native-community/cli-server-api@npm:19.1.2": - version: 19.1.2 - resolution: "@react-native-community/cli-server-api@npm:19.1.2" - dependencies: - "@react-native-community/cli-tools": "npm:19.1.2" - body-parser: "npm:^1.20.3" - compression: "npm:^1.7.1" - connect: "npm:^3.6.5" - errorhandler: "npm:^1.5.1" - nocache: "npm:^3.0.1" - open: "npm:^6.2.0" - pretty-format: "npm:^26.6.2" - serve-static: "npm:^1.13.1" - ws: "npm:^6.2.3" - checksum: 10c0/342dc158c1484895246ae410314bfe7bddd0d8ddac24688a79a63dbc5783e59402a4a54e7f2c7a0261479b1b67b676f9bec7567e7dd504931f02b0169f7a2ba6 - languageName: node - linkType: hard - "@react-native-community/cli-server-api@npm:20.1.0": version: 20.1.0 resolution: "@react-native-community/cli-server-api@npm:20.1.0" @@ -5227,42 +5004,6 @@ __metadata: languageName: node linkType: hard -"@react-native-community/cli-tools@npm:19.1.1": - version: 19.1.1 - resolution: "@react-native-community/cli-tools@npm:19.1.1" - dependencies: - "@vscode/sudo-prompt": "npm:^9.0.0" - appdirsjs: "npm:^1.2.4" - chalk: "npm:^4.1.2" - execa: "npm:^5.0.0" - find-up: "npm:^5.0.0" - launch-editor: "npm:^2.9.1" - mime: "npm:^2.4.1" - ora: "npm:^5.4.1" - prompts: "npm:^2.4.2" - semver: "npm:^7.5.2" - checksum: 10c0/873be3265d61244975951eeeb3063a476a0191677deedd3d4d20d2c896e9bf62e7890f5f622ec772db0c6b6586702ace05874f87d5b4a3a332656c025655988a - languageName: node - linkType: hard - -"@react-native-community/cli-tools@npm:19.1.2": - version: 19.1.2 - resolution: "@react-native-community/cli-tools@npm:19.1.2" - dependencies: - "@vscode/sudo-prompt": "npm:^9.0.0" - appdirsjs: "npm:^1.2.4" - chalk: "npm:^4.1.2" - execa: "npm:^5.0.0" - find-up: "npm:^5.0.0" - launch-editor: "npm:^2.9.1" - mime: "npm:^2.4.1" - ora: "npm:^5.4.1" - prompts: "npm:^2.4.2" - semver: "npm:^7.5.2" - checksum: 10c0/ae6bb52ff88c5025c5e4af0155b96fcf14a600f66548ebb4e78c64a2bc197c52d439392ebdb34a3b6b2cfdb110046973ba56273365a3bd039fe3535ba1935c86 - languageName: node - linkType: hard - "@react-native-community/cli-tools@npm:20.1.0": version: 20.1.0 resolution: "@react-native-community/cli-tools@npm:20.1.0" @@ -5281,15 +5022,6 @@ __metadata: languageName: node linkType: hard -"@react-native-community/cli-types@npm:19.1.2": - version: 19.1.2 - resolution: "@react-native-community/cli-types@npm:19.1.2" - dependencies: - joi: "npm:^17.2.1" - checksum: 10c0/9fbfdb1f91d86e9cccebad3f04a4a9d2f7e61ed810f79840800f01cee1635ee5dcabcdf41a3d511e56ea022e4f26d9505c8bb02f643d73a7ad75d8edfcca3433 - languageName: node - linkType: hard - "@react-native-community/cli-types@npm:20.1.0": version: 20.1.0 resolution: "@react-native-community/cli-types@npm:20.1.0" @@ -5299,31 +5031,6 @@ __metadata: languageName: node linkType: hard -"@react-native-community/cli@npm:19.1.2": - version: 19.1.2 - resolution: "@react-native-community/cli@npm:19.1.2" - dependencies: - "@react-native-community/cli-clean": "npm:19.1.2" - "@react-native-community/cli-config": "npm:19.1.2" - "@react-native-community/cli-doctor": "npm:19.1.2" - "@react-native-community/cli-server-api": "npm:19.1.2" - "@react-native-community/cli-tools": "npm:19.1.2" - "@react-native-community/cli-types": "npm:19.1.2" - chalk: "npm:^4.1.2" - commander: "npm:^9.4.1" - deepmerge: "npm:^4.3.0" - execa: "npm:^5.0.0" - find-up: "npm:^5.0.0" - fs-extra: "npm:^8.1.0" - graceful-fs: "npm:^4.1.3" - prompts: "npm:^2.4.2" - semver: "npm:^7.5.2" - bin: - rnc-cli: build/bin.js - checksum: 10c0/a221a037ced3814db76db75624b37ad1422aa647af4a4c3998bed358dd1887986b21171f436bc751dd3c7089bf6ac57d8d751f3c68f8ca68e5497f36e19d8e90 - languageName: node - linkType: hard - "@react-native-community/cli@npm:20.1.0": version: 20.1.0 resolution: "@react-native-community/cli@npm:20.1.0" @@ -5369,33 +5076,13 @@ __metadata: languageName: node linkType: hard -"@react-native-community/netinfo@npm:^11.4.1": - version: 11.5.2 - resolution: "@react-native-community/netinfo@npm:11.5.2" - peerDependencies: - react: "*" - react-native: ">=0.59" - checksum: 10c0/d5301d7d8b363753b6980f5d17dc47ad4933fc46e4010aceb937c0f673b35a6648f259df930b2b48d99344a90ff7a187344486100c4874462d88545f1647bef5 - languageName: node - linkType: hard - -"@react-native-community/slider@npm:^5.0.1": +"@react-native-community/slider@npm:^5.2.0": version: 5.2.0 resolution: "@react-native-community/slider@npm:5.2.0" checksum: 10c0/58ec6a47b5aafefd98a61c79aeae05f1ab8371782eb497d9af665bf2f62a1c372da8fed6dead30e1d6c9e01bfb12bfdbafcde7890736f4f5d55502dabf2e01ad languageName: node linkType: hard -"@react-native-documents/picker@npm:^10.1.3": - version: 10.1.7 - resolution: "@react-native-documents/picker@npm:10.1.7" - peerDependencies: - react: "*" - react-native: "*" - checksum: 10c0/f2578398ec590c7ee5a0fda8f0625e54fa8da3a9c21608a802bf30905ff9a02d2ec94bf0e0625f206bfa0552c19c685de207d2e79868960d0efe39aaffe8c5cf - languageName: node - linkType: hard - "@react-native-documents/picker@npm:^12.0.1": version: 12.0.1 resolution: "@react-native-documents/picker@npm:12.0.1" @@ -5445,13 +5132,6 @@ __metadata: languageName: node linkType: hard -"@react-native/assets-registry@npm:0.80.2": - version: 0.80.2 - resolution: "@react-native/assets-registry@npm:0.80.2" - checksum: 10c0/a092a485725a3eea424e25c3b1e76b8870acb9018d323666174b96fff2542f913424a81aae06be393b71a0645f72cc3bba56ced40257886e010392510a3e9ca9 - languageName: node - linkType: hard - "@react-native/assets-registry@npm:0.86.0": version: 0.86.0 resolution: "@react-native/assets-registry@npm:0.86.0" @@ -5466,16 +5146,6 @@ __metadata: languageName: node linkType: hard -"@react-native/babel-plugin-codegen@npm:0.80.2": - version: 0.80.2 - resolution: "@react-native/babel-plugin-codegen@npm:0.80.2" - dependencies: - "@babel/traverse": "npm:^7.25.3" - "@react-native/codegen": "npm:0.80.2" - checksum: 10c0/5cf94c75196fceff60b9ff2b9ab29250842bc117b4b55cb95457a8e010c0671139bb27655b437da873bd5ea31d8f44d81c378653eb2559294160f3516f47ee4b - languageName: node - linkType: hard - "@react-native/babel-plugin-codegen@npm:0.86.0": version: 0.86.0 resolution: "@react-native/babel-plugin-codegen@npm:0.86.0" @@ -5496,61 +5166,6 @@ __metadata: languageName: node linkType: hard -"@react-native/babel-preset@npm:0.80.2": - version: 0.80.2 - resolution: "@react-native/babel-preset@npm:0.80.2" - dependencies: - "@babel/core": "npm:^7.25.2" - "@babel/plugin-proposal-export-default-from": "npm:^7.24.7" - "@babel/plugin-syntax-dynamic-import": "npm:^7.8.3" - "@babel/plugin-syntax-export-default-from": "npm:^7.24.7" - "@babel/plugin-syntax-nullish-coalescing-operator": "npm:^7.8.3" - "@babel/plugin-syntax-optional-chaining": "npm:^7.8.3" - "@babel/plugin-transform-arrow-functions": "npm:^7.24.7" - "@babel/plugin-transform-async-generator-functions": "npm:^7.25.4" - "@babel/plugin-transform-async-to-generator": "npm:^7.24.7" - "@babel/plugin-transform-block-scoping": "npm:^7.25.0" - "@babel/plugin-transform-class-properties": "npm:^7.25.4" - "@babel/plugin-transform-classes": "npm:^7.25.4" - "@babel/plugin-transform-computed-properties": "npm:^7.24.7" - "@babel/plugin-transform-destructuring": "npm:^7.24.8" - "@babel/plugin-transform-flow-strip-types": "npm:^7.25.2" - "@babel/plugin-transform-for-of": "npm:^7.24.7" - "@babel/plugin-transform-function-name": "npm:^7.25.1" - "@babel/plugin-transform-literals": "npm:^7.25.2" - "@babel/plugin-transform-logical-assignment-operators": "npm:^7.24.7" - "@babel/plugin-transform-modules-commonjs": "npm:^7.24.8" - "@babel/plugin-transform-named-capturing-groups-regex": "npm:^7.24.7" - "@babel/plugin-transform-nullish-coalescing-operator": "npm:^7.24.7" - "@babel/plugin-transform-numeric-separator": "npm:^7.24.7" - "@babel/plugin-transform-object-rest-spread": "npm:^7.24.7" - "@babel/plugin-transform-optional-catch-binding": "npm:^7.24.7" - "@babel/plugin-transform-optional-chaining": "npm:^7.24.8" - "@babel/plugin-transform-parameters": "npm:^7.24.7" - "@babel/plugin-transform-private-methods": "npm:^7.24.7" - "@babel/plugin-transform-private-property-in-object": "npm:^7.24.7" - "@babel/plugin-transform-react-display-name": "npm:^7.24.7" - "@babel/plugin-transform-react-jsx": "npm:^7.25.2" - "@babel/plugin-transform-react-jsx-self": "npm:^7.24.7" - "@babel/plugin-transform-react-jsx-source": "npm:^7.24.7" - "@babel/plugin-transform-regenerator": "npm:^7.24.7" - "@babel/plugin-transform-runtime": "npm:^7.24.7" - "@babel/plugin-transform-shorthand-properties": "npm:^7.24.7" - "@babel/plugin-transform-spread": "npm:^7.24.7" - "@babel/plugin-transform-sticky-regex": "npm:^7.24.7" - "@babel/plugin-transform-typescript": "npm:^7.25.2" - "@babel/plugin-transform-unicode-regex": "npm:^7.24.7" - "@babel/template": "npm:^7.25.0" - "@react-native/babel-plugin-codegen": "npm:0.80.2" - babel-plugin-syntax-hermes-parser: "npm:0.28.1" - babel-plugin-transform-flow-enums: "npm:^0.0.2" - react-refresh: "npm:^0.14.0" - peerDependencies: - "@babel/core": "*" - checksum: 10c0/b9f3e066d8b74268b3fc770172b359ee676942f6cfc8cc71e7db9dfe435b18bb2723aeb68c29674bdbfa3aea9cfd3d03ef0a428924f9b5d0ef802af406e42ed7 - languageName: node - linkType: hard - "@react-native/babel-preset@npm:0.86.0": version: 0.86.0 resolution: "@react-native/babel-preset@npm:0.86.0" @@ -5637,21 +5252,6 @@ __metadata: languageName: node linkType: hard -"@react-native/codegen@npm:0.80.2": - version: 0.80.2 - resolution: "@react-native/codegen@npm:0.80.2" - dependencies: - glob: "npm:^7.1.1" - hermes-parser: "npm:0.28.1" - invariant: "npm:^2.2.4" - nullthrows: "npm:^1.1.1" - yargs: "npm:^17.6.2" - peerDependencies: - "@babel/core": "*" - checksum: 10c0/981e02105ea871643bb5f0aa0f6db2d1851a3b0cc831cf7a8e6779ceeaadeaaaabc385f93726e353d1c242c0122f9e432678a5d83d776ebba8749551f5762d60 - languageName: node - linkType: hard - "@react-native/codegen@npm:0.86.0": version: 0.86.0 resolution: "@react-native/codegen@npm:0.86.0" @@ -5686,27 +5286,6 @@ __metadata: languageName: node linkType: hard -"@react-native/community-cli-plugin@npm:0.80.2": - version: 0.80.2 - resolution: "@react-native/community-cli-plugin@npm:0.80.2" - dependencies: - "@react-native/dev-middleware": "npm:0.80.2" - chalk: "npm:^4.0.0" - debug: "npm:^4.4.0" - invariant: "npm:^2.2.4" - metro: "npm:^0.82.2" - metro-config: "npm:^0.82.2" - metro-core: "npm:^0.82.2" - semver: "npm:^7.1.3" - peerDependencies: - "@react-native-community/cli": "*" - peerDependenciesMeta: - "@react-native-community/cli": - optional: true - checksum: 10c0/d1dbed0a6c874a21b6019e3de86ec6118f74e17526e9616727f903485f97faf93585ca8e7500a77900c97f52f2a7a436ccb2b7d7ae57921de11128db9fdb5749 - languageName: node - linkType: hard - "@react-native/community-cli-plugin@npm:0.86.0": version: 0.86.0 resolution: "@react-native/community-cli-plugin@npm:0.86.0" @@ -5753,13 +5332,6 @@ __metadata: languageName: node linkType: hard -"@react-native/debugger-frontend@npm:0.80.2": - version: 0.80.2 - resolution: "@react-native/debugger-frontend@npm:0.80.2" - checksum: 10c0/1912fa438b89dfb5a89daf020b2ce1dfa45c21ad4d0de1b605bb1602e28fefd49b8c064d1ed9d3302c2eef6eaa7b20ae2ebf60fa4907bc19bf21324b0889b1e1 - languageName: node - linkType: hard - "@react-native/debugger-frontend@npm:0.86.0": version: 0.86.0 resolution: "@react-native/debugger-frontend@npm:0.86.0" @@ -5796,25 +5368,6 @@ __metadata: languageName: node linkType: hard -"@react-native/dev-middleware@npm:0.80.2": - version: 0.80.2 - resolution: "@react-native/dev-middleware@npm:0.80.2" - dependencies: - "@isaacs/ttlcache": "npm:^1.4.1" - "@react-native/debugger-frontend": "npm:0.80.2" - chrome-launcher: "npm:^0.15.2" - chromium-edge-launcher: "npm:^0.2.0" - connect: "npm:^3.6.5" - debug: "npm:^4.4.0" - invariant: "npm:^2.2.4" - nullthrows: "npm:^1.1.1" - open: "npm:^7.0.3" - serve-static: "npm:^1.16.2" - ws: "npm:^6.2.3" - checksum: 10c0/6fcd7be1e75b5732af9d5371029988e4bd18a78fcd6ffbd4b3f0f4c283f1c024f11592be007661f3d3b9ad529203c0e5683f5a745433100324e6e76eadd2e77f - languageName: node - linkType: hard - "@react-native/dev-middleware@npm:0.86.0": version: 0.86.0 resolution: "@react-native/dev-middleware@npm:0.86.0" @@ -5855,13 +5408,6 @@ __metadata: languageName: node linkType: hard -"@react-native/gradle-plugin@npm:0.80.2": - version: 0.80.2 - resolution: "@react-native/gradle-plugin@npm:0.80.2" - checksum: 10c0/ab4ca7a1003d965144f54718c779379a31446a26c49befb0c635843ddbafb5a910ac1b47d9dc4c83177f61f8a1b34d8eee5663fb8e6d130046dafeab7a186119 - languageName: node - linkType: hard - "@react-native/gradle-plugin@npm:0.86.0": version: 0.86.0 resolution: "@react-native/gradle-plugin@npm:0.86.0" @@ -5891,13 +5437,6 @@ __metadata: languageName: node linkType: hard -"@react-native/js-polyfills@npm:0.80.2": - version: 0.80.2 - resolution: "@react-native/js-polyfills@npm:0.80.2" - checksum: 10c0/19adf1c22646802cddb9fb8d316e334dc91423f1a03ae0b53b8da0e0f1463b87819ad840dbf3c0785dae5b96a24ff0e8e348c78275153ac869a6861851c6bb8d - languageName: node - linkType: hard - "@react-native/js-polyfills@npm:0.86.0": version: 0.86.0 resolution: "@react-native/js-polyfills@npm:0.86.0" @@ -5912,20 +5451,6 @@ __metadata: languageName: node linkType: hard -"@react-native/metro-babel-transformer@npm:0.80.2": - version: 0.80.2 - resolution: "@react-native/metro-babel-transformer@npm:0.80.2" - dependencies: - "@babel/core": "npm:^7.25.2" - "@react-native/babel-preset": "npm:0.80.2" - hermes-parser: "npm:0.28.1" - nullthrows: "npm:^1.1.1" - peerDependencies: - "@babel/core": "*" - checksum: 10c0/cdd06d5db75fecf2854d2f9231ff1d827880c0d582795fd179686179a62c3da93ab23096fbcb95855908bdc4bfd59ab75ea39c7400814fbdb0a4a63a47aa62f2 - languageName: node - linkType: hard - "@react-native/metro-babel-transformer@npm:0.86.2": version: 0.86.2 resolution: "@react-native/metro-babel-transformer@npm:0.86.2" @@ -5940,18 +5465,6 @@ __metadata: languageName: node linkType: hard -"@react-native/metro-config@npm:0.80.2": - version: 0.80.2 - resolution: "@react-native/metro-config@npm:0.80.2" - dependencies: - "@react-native/js-polyfills": "npm:0.80.2" - "@react-native/metro-babel-transformer": "npm:0.80.2" - metro-config: "npm:^0.82.2" - metro-runtime: "npm:^0.82.2" - checksum: 10c0/63121cba080804ec9add4092edfae27a4e45abd81d1db7c532ced41dddd554fe623abb37ef3843d15874cdd6cf18b3e5b38920d36cdbc35b5a2efa41824d0434 - languageName: node - linkType: hard - "@react-native/metro-config@npm:0.86.2": version: 0.86.2 resolution: "@react-native/metro-config@npm:0.86.2" @@ -5964,13 +5477,6 @@ __metadata: languageName: node linkType: hard -"@react-native/normalize-colors@npm:0.80.2": - version: 0.80.2 - resolution: "@react-native/normalize-colors@npm:0.80.2" - checksum: 10c0/688ce6b0b97d1e9915e98a091ee87ce8ec1b44f1565b7b7089321ee5e5506efd32fc6e1537c87dd2c58b6bca5cc637938d0e7f5aa65bf2773ef0b9aa6338ff06 - languageName: node - linkType: hard - "@react-native/normalize-colors@npm:0.86.0": version: 0.86.0 resolution: "@react-native/normalize-colors@npm:0.86.0" @@ -5992,13 +5498,6 @@ __metadata: languageName: node linkType: hard -"@react-native/typescript-config@npm:0.80.2": - version: 0.80.2 - resolution: "@react-native/typescript-config@npm:0.80.2" - checksum: 10c0/0d952c18930ee9538eedd229bdcb8b481d6379309a0da4998a5d16eb8e7a04cb717277be831bf9790399007070af22602bb2bb993fbc235b1e6a1505adf555f6 - languageName: node - linkType: hard - "@react-native/typescript-config@npm:0.86.2": version: 0.86.2 resolution: "@react-native/typescript-config@npm:0.86.2" @@ -6006,23 +5505,6 @@ __metadata: languageName: node linkType: hard -"@react-native/virtualized-lists@npm:0.80.2": - version: 0.80.2 - resolution: "@react-native/virtualized-lists@npm:0.80.2" - dependencies: - invariant: "npm:^2.2.4" - nullthrows: "npm:^1.1.1" - peerDependencies: - "@types/react": ^19.0.0 - react: "*" - react-native: "*" - peerDependenciesMeta: - "@types/react": - optional: true - checksum: 10c0/87c4fe0624e8cac51b6c260182936f54612be21e9d3f000a17d75fbd3347bec2732e71e1ef30493ea3d6da9ee7557699a6f260c30ac723419f1234b8e9c99357 - languageName: node - linkType: hard - "@react-native/virtualized-lists@npm:0.86.0": version: 0.86.0 resolution: "@react-native/virtualized-lists@npm:0.86.0" @@ -6074,24 +5556,6 @@ __metadata: languageName: node linkType: hard -"@react-navigation/core@npm:^7.17.5": - version: 7.17.5 - resolution: "@react-navigation/core@npm:7.17.5" - dependencies: - "@react-navigation/routers": "npm:^7.5.5" - escape-string-regexp: "npm:^4.0.0" - fast-deep-equal: "npm:^3.1.3" - nanoid: "npm:^3.3.11" - query-string: "npm:^7.1.3" - react-is: "npm:^19.1.0" - use-latest-callback: "npm:^0.2.4" - use-sync-external-store: "npm:^1.5.0" - peerDependencies: - react: ">= 18.2.0" - checksum: 10c0/537c719cebc476bae70330bb870938c0d3763341da428e5ed4aedcfa6b5fc730babf6b89d38337925188597611abe11ce07734a0a3257624d4b01aec0aa1a3da - languageName: node - linkType: hard - "@react-navigation/core@npm:^7.21.8": version: 7.21.8 resolution: "@react-navigation/core@npm:7.21.8" @@ -6130,26 +5594,6 @@ __metadata: languageName: node linkType: hard -"@react-navigation/elements@npm:^2.9.17": - version: 2.9.19 - resolution: "@react-navigation/elements@npm:2.9.19" - dependencies: - color: "npm:^4.2.3" - use-latest-callback: "npm:^0.2.4" - use-sync-external-store: "npm:^1.5.0" - peerDependencies: - "@react-native-masked-view/masked-view": ">= 0.2.0" - "@react-navigation/native": ^7.2.5 - react: ">= 18.2.0" - react-native: "*" - react-native-safe-area-context: ">= 4.0.0" - peerDependenciesMeta: - "@react-native-masked-view/masked-view": - optional: true - checksum: 10c0/8743a20a19de8538346f5376ab21f0fb58f843f39bee70c973c5bd5ee2d2f46ff5aa91284d287602de76c02e704fe6cf6c410aa8936121f8c8891bfe97dc35cb - languageName: node - linkType: hard - "@react-navigation/elements@npm:^2.9.33": version: 2.9.33 resolution: "@react-navigation/elements@npm:2.9.33" @@ -6188,22 +5632,6 @@ __metadata: languageName: node linkType: hard -"@react-navigation/native@npm:^7.1.10": - version: 7.2.5 - resolution: "@react-navigation/native@npm:7.2.5" - dependencies: - "@react-navigation/core": "npm:^7.17.5" - escape-string-regexp: "npm:^4.0.0" - fast-deep-equal: "npm:^3.1.3" - nanoid: "npm:^3.3.11" - use-latest-callback: "npm:^0.2.4" - peerDependencies: - react: ">= 18.2.0" - react-native: "*" - checksum: 10c0/ae5f6eb27923bb3b4dd292fc6017046d060f4434e04eaab6b952acba381e3225326eee89c1467363e3c3b0010e612c252f46df8e231c7ceb842c455b62e391ba - languageName: node - linkType: hard - "@react-navigation/native@npm:^7.3.11": version: 7.3.11 resolution: "@react-navigation/native@npm:7.3.11" @@ -6221,15 +5649,6 @@ __metadata: languageName: node linkType: hard -"@react-navigation/routers@npm:^7.5.5": - version: 7.5.5 - resolution: "@react-navigation/routers@npm:7.5.5" - dependencies: - nanoid: "npm:^3.3.11" - checksum: 10c0/d555029547e9de2b846fcd6e4cc15989335492c8b2c03bf92df1558278f2871a700a57b2ece4950958fd6531d39e9eb8b896fcfc40c8163c01f39d4dda9fb34a - languageName: node - linkType: hard - "@react-navigation/routers@npm:^7.6.2": version: 7.6.2 resolution: "@react-navigation/routers@npm:7.6.2" @@ -6239,24 +5658,6 @@ __metadata: languageName: node linkType: hard -"@react-navigation/stack@npm:^7.3.3": - version: 7.9.1 - resolution: "@react-navigation/stack@npm:7.9.1" - dependencies: - "@react-navigation/elements": "npm:^2.9.17" - color: "npm:^4.2.3" - use-latest-callback: "npm:^0.2.4" - peerDependencies: - "@react-navigation/native": ^7.2.4 - react: ">= 18.2.0" - react-native: "*" - react-native-gesture-handler: ">= 2.0.0" - react-native-safe-area-context: ">= 4.0.0" - react-native-screens: ">= 4.0.0" - checksum: 10c0/a91584b00cdd203f92ecf3d436d1f0e918a9a1b5765b38dbee7b4ce432be384d0a9b27eed9e859c90991af1413bd44968b1947348c93fd5ed3ce1c8b2fc681dd - languageName: node - linkType: hard - "@rnx-kit/console@npm:^2.0.0": version: 2.0.0 resolution: "@rnx-kit/console@npm:2.0.0" @@ -6736,6 +6137,12 @@ __metadata: languageName: node linkType: hard +"@stream-io/typescript-config@workspace:^, @stream-io/typescript-config@workspace:configs/typescript-config": + version: 0.0.0-use.local + resolution: "@stream-io/typescript-config@workspace:configs/typescript-config" + languageName: unknown + linkType: soft + "@swc/core-darwin-arm64@npm:1.15.33": version: 1.15.33 resolution: "@swc/core-darwin-arm64@npm:1.15.33" @@ -7268,15 +6675,6 @@ __metadata: languageName: node linkType: hard -"@types/yargs@npm:^15.0.0": - version: 15.0.20 - resolution: "@types/yargs@npm:15.0.20" - dependencies: - "@types/yargs-parser": "npm:*" - checksum: 10c0/7578e333b8e3e60e96950fc3d90f75afa5f6612cbaa309813848a5bf198fd39bd6bf8d25f8fde7106c614686e24fd409403cc22166f5571c9fc1148fe147c0f5 - languageName: node - linkType: hard - "@types/yargs@npm:^17.0.33, @types/yargs@npm:^17.0.8": version: 17.0.35 resolution: "@types/yargs@npm:17.0.35" @@ -7597,6 +6995,7 @@ __metadata: "@rnx-kit/metro-config": "npm:^2.1.2" "@rnx-kit/metro-resolver-symlinks": "npm:^0.2.6" "@shopify/flash-list": "npm:^2.3.2" + "@stream-io/typescript-config": "workspace:^" "@types/react": "npm:~19.2.10" expo: "npm:^57.0.7" expo-asset: "npm:~57.0.6" @@ -7633,7 +7032,7 @@ __metadata: stream-chat: "npm:^9.50.1" stream-chat-expo: "workspace:^" stream-chat-react-native-core: "workspace:^" - typescript: "npm:~5.9.2" + typescript: "npm:6.0.3" languageName: unknown linkType: soft @@ -8341,15 +7740,6 @@ __metadata: languageName: node linkType: hard -"babel-plugin-syntax-hermes-parser@npm:0.28.1, babel-plugin-syntax-hermes-parser@npm:^0.28.0": - version: 0.28.1 - resolution: "babel-plugin-syntax-hermes-parser@npm:0.28.1" - dependencies: - hermes-parser: "npm:0.28.1" - checksum: 10c0/7a522b5f3f31701e4e70ddd7976946abe4b1bf8a041fd091f672411eb0f67a79253a671b934aa27bab305e0845933a4cdb9016fcea80b64c95e18cec8d08a154 - languageName: node - linkType: hard - "babel-plugin-syntax-hermes-parser@npm:0.36.0": version: 0.36.0 resolution: "babel-plugin-syntax-hermes-parser@npm:0.36.0" @@ -8359,6 +7749,15 @@ __metadata: languageName: node linkType: hard +"babel-plugin-syntax-hermes-parser@npm:^0.28.0": + version: 0.28.1 + resolution: "babel-plugin-syntax-hermes-parser@npm:0.28.1" + dependencies: + hermes-parser: "npm:0.28.1" + checksum: 10c0/7a522b5f3f31701e4e70ddd7976946abe4b1bf8a041fd091f672411eb0f67a79253a671b934aa27bab305e0845933a4cdb9016fcea80b64c95e18cec8d08a154 + languageName: node + linkType: hard + "babel-plugin-syntax-hermes-parser@npm:^0.36.0": version: 0.36.1 resolution: "babel-plugin-syntax-hermes-parser@npm:0.36.1" @@ -8514,13 +7913,6 @@ __metadata: languageName: node linkType: hard -"base-64@npm:0.1.0": - version: 0.1.0 - resolution: "base-64@npm:0.1.0" - checksum: 10c0/fe0dcf076e823f04db7ee9b02495be08a91c445fbc6db03cb9913be9680e2fcc0af8b74459041fe08ad16800b1f65a549501d8f08696a8a6d32880789b7de69d - languageName: node - linkType: hard - "base-64@npm:1.0.0": version: 1.0.0 resolution: "base-64@npm:1.0.0" @@ -8551,14 +7943,14 @@ __metadata: languageName: node linkType: hard -"better-sqlite3@npm:11.10.0": - version: 11.10.0 - resolution: "better-sqlite3@npm:11.10.0" +"better-sqlite3@npm:12.11.1": + version: 12.11.1 + resolution: "better-sqlite3@npm:12.11.1" dependencies: bindings: "npm:^1.5.0" node-gyp: "npm:latest" prebuild-install: "npm:^7.1.1" - checksum: 10c0/1fffbf9e5fc9d24847a3ecf09491bceab1c294b46ba41df1c449dc20b6f5c5d9d94ff24becd0b1632ee282bd21278b7fea53a5a6215bb99209ded0ae05eda3b0 + checksum: 10c0/162d3fa6c19a68191d09537bd113bd54a636c9fb38b0fc0796f4f270032770695ef35a1bca041a0a0fa9bfa47e20b9e17c94484a3899c31f38881af4d12b7fa5 languageName: node linkType: hard @@ -8959,24 +8351,10 @@ __metadata: "@types/node": "npm:*" escape-string-regexp: "npm:^4.0.0" is-wsl: "npm:^2.2.0" - lighthouse-logger: "npm:^1.0.0" - bin: - print-chrome-path: bin/print-chrome-path.js - checksum: 10c0/fc01abc19af753bb089744362c0de48707f32ea15779407b06fb569e029a6b1fbaa78107165539d768915cf54b5c38594e73d95563c34127873e3826fb43c636 - languageName: node - linkType: hard - -"chromium-edge-launcher@npm:^0.2.0": - version: 0.2.0 - resolution: "chromium-edge-launcher@npm:0.2.0" - dependencies: - "@types/node": "npm:*" - escape-string-regexp: "npm:^4.0.0" - is-wsl: "npm:^2.2.0" - lighthouse-logger: "npm:^1.0.0" - mkdirp: "npm:^1.0.4" - rimraf: "npm:^3.0.2" - checksum: 10c0/880972816dd9b95c0eb77d1f707569667a8cce7cc29fe9c8d199c47fdfbe4971e9da3e5a29f61c4ecec29437ac7cebbbb5afc30bec96306579d1121e7340606a + lighthouse-logger: "npm:^1.0.0" + bin: + print-chrome-path: bin/print-chrome-path.js + checksum: 10c0/fc01abc19af753bb089744362c0de48707f32ea15779407b06fb569e029a6b1fbaa78107165539d768915cf54b5c38594e73d95563c34127873e3826fb43c636 languageName: node linkType: hard @@ -12035,7 +11413,7 @@ __metadata: languageName: node linkType: hard -"glob@npm:^10.3.10, glob@npm:^10.5.0": +"glob@npm:^10.5.0": version: 10.5.0 resolution: "glob@npm:10.5.0" dependencies: @@ -12051,7 +11429,7 @@ __metadata: languageName: node linkType: hard -"glob@npm:^7.1.1, glob@npm:^7.1.3, glob@npm:^7.1.4": +"glob@npm:^7.1.3, glob@npm:^7.1.4": version: 7.2.3 resolution: "glob@npm:7.2.3" dependencies: @@ -12275,13 +11653,6 @@ __metadata: languageName: node linkType: hard -"hermes-estree@npm:0.29.1": - version: 0.29.1 - resolution: "hermes-estree@npm:0.29.1" - checksum: 10c0/e6b01f79ba708697d61a74b871d5ebae5f863c6d782657d8e2d2256eb838f1eb86ff9c34773a81d9cc69e54be3a5059c686e0ab54a4afba903b40dde92dd0ccb - languageName: node - linkType: hard - "hermes-estree@npm:0.35.0": version: 0.35.0 resolution: "hermes-estree@npm:0.35.0" @@ -12321,15 +11692,6 @@ __metadata: languageName: node linkType: hard -"hermes-parser@npm:0.29.1": - version: 0.29.1 - resolution: "hermes-parser@npm:0.29.1" - dependencies: - hermes-estree: "npm:0.29.1" - checksum: 10c0/7f40d9bdfb5acaa700f333a24c644b17f5f8d0e823b1e7a9fb6dcf253a54d54716ae63c74effa023688ee4f09013c80188c40d601570fee256a44954e04c2926 - languageName: node - linkType: hard - "hermes-parser@npm:0.35.0": version: 0.35.0 resolution: "hermes-parser@npm:0.35.0" @@ -12517,15 +11879,6 @@ __metadata: languageName: node linkType: hard -"hyochan-welcome@npm:^1.0.0": - version: 1.0.1 - resolution: "hyochan-welcome@npm:1.0.1" - bin: - hyochan-welcome: bin/hello.js - checksum: 10c0/a1e499188e71f9183ec199aa0fbf340e764442f494df025ef52f66896339ae3f7633257bed21e3dc9ea2b8b6150a49b07483d94a28e053f92be243cb9be90c55 - languageName: node - linkType: hard - "hyphenate-style-name@npm:^1.0.3": version: 1.1.0 resolution: "hyphenate-style-name@npm:1.1.0" @@ -15175,18 +14528,6 @@ __metadata: languageName: node linkType: hard -"metro-babel-transformer@npm:0.82.5": - version: 0.82.5 - resolution: "metro-babel-transformer@npm:0.82.5" - dependencies: - "@babel/core": "npm:^7.25.2" - flow-enums-runtime: "npm:^0.0.6" - hermes-parser: "npm:0.29.1" - nullthrows: "npm:^1.1.1" - checksum: 10c0/a672dc1dcf3778120130052bc175bfb754c93b490c1d0170e89e309efa0c122f4dfd4717dda966c7addbbd3a2e764acb610e740d62159601bc9cfdf6684466e8 - languageName: node - linkType: hard - "metro-babel-transformer@npm:0.84.4": version: 0.84.4 resolution: "metro-babel-transformer@npm:0.84.4" @@ -15209,15 +14550,6 @@ __metadata: languageName: node linkType: hard -"metro-cache-key@npm:0.82.5": - version: 0.82.5 - resolution: "metro-cache-key@npm:0.82.5" - dependencies: - flow-enums-runtime: "npm:^0.0.6" - checksum: 10c0/7dd8a2e83bea57b57f49fd30188b70d0c364fa280cffd96609deac764bc671634f174449e4abfbad2197d275ad8a3fd86521652549d9f7fe008efb0dd445778d - languageName: node - linkType: hard - "metro-cache-key@npm:0.84.4": version: 0.84.4 resolution: "metro-cache-key@npm:0.84.4" @@ -15238,18 +14570,6 @@ __metadata: languageName: node linkType: hard -"metro-cache@npm:0.82.5": - version: 0.82.5 - resolution: "metro-cache@npm:0.82.5" - dependencies: - exponential-backoff: "npm:^3.1.1" - flow-enums-runtime: "npm:^0.0.6" - https-proxy-agent: "npm:^7.0.5" - metro-core: "npm:0.82.5" - checksum: 10c0/8480b301c0cf29c113e948598158e64dc2cb43b449be8862d688ffed461a6e08ead23bc8e81c6a323e490436ebc31cb19aecfc3c375325eafd8d34dd0c80bf92 - languageName: node - linkType: hard - "metro-cache@npm:0.84.4": version: 0.84.4 resolution: "metro-cache@npm:0.84.4" @@ -15278,22 +14598,6 @@ __metadata: languageName: node linkType: hard -"metro-config@npm:0.82.5, metro-config@npm:^0.82.2": - version: 0.82.5 - resolution: "metro-config@npm:0.82.5" - dependencies: - connect: "npm:^3.6.5" - cosmiconfig: "npm:^5.0.5" - flow-enums-runtime: "npm:^0.0.6" - jest-validate: "npm:^29.7.0" - metro: "npm:0.82.5" - metro-cache: "npm:0.82.5" - metro-core: "npm:0.82.5" - metro-runtime: "npm:0.82.5" - checksum: 10c0/8c7c9be911aee55e65fc870e79c5695c007bf99cb960e0d9746c92ecd828b69d055bd0e4b83976151e4ed9d2e23d13fa081ee44abbd166822d46d34030138a50 - languageName: node - linkType: hard - "metro-config@npm:0.84.4, metro-config@npm:^0.84.3": version: 0.84.4 resolution: "metro-config@npm:0.84.4" @@ -15321,17 +14625,6 @@ __metadata: languageName: node linkType: hard -"metro-core@npm:0.82.5, metro-core@npm:^0.82.2": - version: 0.82.5 - resolution: "metro-core@npm:0.82.5" - dependencies: - flow-enums-runtime: "npm:^0.0.6" - lodash.throttle: "npm:^4.1.1" - metro-resolver: "npm:0.82.5" - checksum: 10c0/0491679e8ed55431cc325642ddffba7b170dbd2cde8dcb81a54c692ca1ca3c786c9936ed1ee15d092af64adda8ccfd8f475afc85c4a6dbec4614357316e74be6 - languageName: node - linkType: hard - "metro-core@npm:0.84.4, metro-core@npm:^0.84.3": version: 0.84.4 resolution: "metro-core@npm:0.84.4" @@ -15366,23 +14659,6 @@ __metadata: languageName: node linkType: hard -"metro-file-map@npm:0.82.5": - version: 0.82.5 - resolution: "metro-file-map@npm:0.82.5" - dependencies: - debug: "npm:^4.4.0" - fb-watchman: "npm:^2.0.0" - flow-enums-runtime: "npm:^0.0.6" - graceful-fs: "npm:^4.2.4" - invariant: "npm:^2.2.4" - jest-worker: "npm:^29.7.0" - micromatch: "npm:^4.0.4" - nullthrows: "npm:^1.1.1" - walker: "npm:^1.0.7" - checksum: 10c0/86496bc6a15a87cd1af668a588f26f17cbf3c43eee0b021ded8eb6b02a83cd80e14a356900fe3a4cc8c4fa494de55ee7e20e6c45f0c6b27e616f0f03817e0c9e - languageName: node - linkType: hard - "metro-file-map@npm:0.84.4": version: 0.84.4 resolution: "metro-file-map@npm:0.84.4" @@ -15410,16 +14686,6 @@ __metadata: languageName: node linkType: hard -"metro-minify-terser@npm:0.82.5": - version: 0.82.5 - resolution: "metro-minify-terser@npm:0.82.5" - dependencies: - flow-enums-runtime: "npm:^0.0.6" - terser: "npm:^5.15.0" - checksum: 10c0/925be4401912ebc964b61ffe442bee977efb5baa42035d933277d8b669a4852f654778b87be50d12260d63b402054debc92cf703a70d58a1c9fea343401158b8 - languageName: node - linkType: hard - "metro-minify-terser@npm:0.84.4": version: 0.84.4 resolution: "metro-minify-terser@npm:0.84.4" @@ -15439,15 +14705,6 @@ __metadata: languageName: node linkType: hard -"metro-resolver@npm:0.82.5": - version: 0.82.5 - resolution: "metro-resolver@npm:0.82.5" - dependencies: - flow-enums-runtime: "npm:^0.0.6" - checksum: 10c0/a84c4571c78694468e5921f290b50505835fcd90cc490c4e6e028908a1f6b54104635f417de9c1cf0788b642c56e4eeb2b2a3cff6c36f9105ecaa8dfbac12fa7 - languageName: node - linkType: hard - "metro-resolver@npm:0.84.4": version: 0.84.4 resolution: "metro-resolver@npm:0.84.4" @@ -15467,16 +14724,6 @@ __metadata: languageName: node linkType: hard -"metro-runtime@npm:0.82.5, metro-runtime@npm:^0.82.2": - version: 0.82.5 - resolution: "metro-runtime@npm:0.82.5" - dependencies: - "@babel/runtime": "npm:^7.25.0" - flow-enums-runtime: "npm:^0.0.6" - checksum: 10c0/90418c7670fe6e6ece86185ff5c5cb5cdabfcffce0b6a601a3b4049d2643b16878b6819e9fd430fda0e2d7bc378752194c0ce4b4f9d53faa99da910782179789 - languageName: node - linkType: hard - "metro-runtime@npm:0.84.4, metro-runtime@npm:^0.84.3": version: 0.84.4 resolution: "metro-runtime@npm:0.84.4" @@ -15504,24 +14751,6 @@ __metadata: languageName: node linkType: hard -"metro-source-map@npm:0.82.5, metro-source-map@npm:^0.82.2": - version: 0.82.5 - resolution: "metro-source-map@npm:0.82.5" - dependencies: - "@babel/traverse": "npm:^7.25.3" - "@babel/traverse--for-generate-function-map": "npm:@babel/traverse@^7.25.3" - "@babel/types": "npm:^7.25.2" - flow-enums-runtime: "npm:^0.0.6" - invariant: "npm:^2.2.4" - metro-symbolicate: "npm:0.82.5" - nullthrows: "npm:^1.1.1" - ob1: "npm:0.82.5" - source-map: "npm:^0.5.6" - vlq: "npm:^1.0.0" - checksum: 10c0/cf04c8f5430eaf2aa8aa97034382d2cb1b0906a4c7cf3c4faaf0203eb00dd683b8d108e74694700a10085796beb292383cfcea50b388cc03062640bd95d3f84a - languageName: node - linkType: hard - "metro-source-map@npm:0.84.4, metro-source-map@npm:^0.84.3": version: 0.84.4 resolution: "metro-source-map@npm:0.84.4" @@ -15556,22 +14785,6 @@ __metadata: languageName: node linkType: hard -"metro-symbolicate@npm:0.82.5": - version: 0.82.5 - resolution: "metro-symbolicate@npm:0.82.5" - dependencies: - flow-enums-runtime: "npm:^0.0.6" - invariant: "npm:^2.2.4" - metro-source-map: "npm:0.82.5" - nullthrows: "npm:^1.1.1" - source-map: "npm:^0.5.6" - vlq: "npm:^1.0.0" - bin: - metro-symbolicate: src/index.js - checksum: 10c0/39c53b878ae9392586e23ff3a8071eceb1feed2d226e3ac9a170eb6bcd46fe6b69b8204851ee8eb231fdc3eac9012af3c6940ad48f6d1c04810ea9c4a75e1c7c - languageName: node - linkType: hard - "metro-symbolicate@npm:0.84.4": version: 0.84.4 resolution: "metro-symbolicate@npm:0.84.4" @@ -15602,20 +14815,6 @@ __metadata: languageName: node linkType: hard -"metro-transform-plugins@npm:0.82.5": - version: 0.82.5 - resolution: "metro-transform-plugins@npm:0.82.5" - dependencies: - "@babel/core": "npm:^7.25.2" - "@babel/generator": "npm:^7.25.0" - "@babel/template": "npm:^7.25.0" - "@babel/traverse": "npm:^7.25.3" - flow-enums-runtime: "npm:^0.0.6" - nullthrows: "npm:^1.1.1" - checksum: 10c0/394ac0fbb0a33edb412307f09dc3c2dcd5a0268368876b82b9631261e55c7cf2b1c3ce75270d94285ed190a7934137d851b57aa4d27088efe50193fa9bb9aff7 - languageName: node - linkType: hard - "metro-transform-plugins@npm:0.84.4": version: 0.84.4 resolution: "metro-transform-plugins@npm:0.84.4" @@ -15651,27 +14850,6 @@ __metadata: languageName: node linkType: hard -"metro-transform-worker@npm:0.82.5": - version: 0.82.5 - resolution: "metro-transform-worker@npm:0.82.5" - dependencies: - "@babel/core": "npm:^7.25.2" - "@babel/generator": "npm:^7.25.0" - "@babel/parser": "npm:^7.25.3" - "@babel/types": "npm:^7.25.2" - flow-enums-runtime: "npm:^0.0.6" - metro: "npm:0.82.5" - metro-babel-transformer: "npm:0.82.5" - metro-cache: "npm:0.82.5" - metro-cache-key: "npm:0.82.5" - metro-minify-terser: "npm:0.82.5" - metro-source-map: "npm:0.82.5" - metro-transform-plugins: "npm:0.82.5" - nullthrows: "npm:^1.1.1" - checksum: 10c0/28d8a5e6a61e96c20e8ebb9410c2daa8cc60e5464cb339436b640d74b77d0782e4675218053b21b1c7676f79dd9596c2b579bc2e47879594a3111a45fb3dc185 - languageName: node - linkType: hard - "metro-transform-worker@npm:0.84.4": version: 0.84.4 resolution: "metro-transform-worker@npm:0.84.4" @@ -15745,56 +14923,6 @@ __metadata: languageName: node linkType: hard -"metro@npm:0.82.5, metro@npm:^0.82.2": - version: 0.82.5 - resolution: "metro@npm:0.82.5" - dependencies: - "@babel/code-frame": "npm:^7.24.7" - "@babel/core": "npm:^7.25.2" - "@babel/generator": "npm:^7.25.0" - "@babel/parser": "npm:^7.25.3" - "@babel/template": "npm:^7.25.0" - "@babel/traverse": "npm:^7.25.3" - "@babel/types": "npm:^7.25.2" - accepts: "npm:^1.3.7" - chalk: "npm:^4.0.0" - ci-info: "npm:^2.0.0" - connect: "npm:^3.6.5" - debug: "npm:^4.4.0" - error-stack-parser: "npm:^2.0.6" - flow-enums-runtime: "npm:^0.0.6" - graceful-fs: "npm:^4.2.4" - hermes-parser: "npm:0.29.1" - image-size: "npm:^1.0.2" - invariant: "npm:^2.2.4" - jest-worker: "npm:^29.7.0" - jsc-safe-url: "npm:^0.2.2" - lodash.throttle: "npm:^4.1.1" - metro-babel-transformer: "npm:0.82.5" - metro-cache: "npm:0.82.5" - metro-cache-key: "npm:0.82.5" - metro-config: "npm:0.82.5" - metro-core: "npm:0.82.5" - metro-file-map: "npm:0.82.5" - metro-resolver: "npm:0.82.5" - metro-runtime: "npm:0.82.5" - metro-source-map: "npm:0.82.5" - metro-symbolicate: "npm:0.82.5" - metro-transform-plugins: "npm:0.82.5" - metro-transform-worker: "npm:0.82.5" - mime-types: "npm:^2.1.27" - nullthrows: "npm:^1.1.1" - serialize-error: "npm:^2.1.0" - source-map: "npm:^0.5.6" - throat: "npm:^5.0.0" - ws: "npm:^7.5.10" - yargs: "npm:^17.6.2" - bin: - metro: src/cli.js - checksum: 10c0/a7bc635014ce74adb498f8e57fc39209d5b4a34bd7d18ad0b8ae7698839fcd6617a183fba4cd0038c1bdb2ab57322a0c8bf02fa5cf6ad8d184bf9d13913092e2 - languageName: node - linkType: hard - "metro@npm:0.84.4, metro@npm:^0.84.3": version: 0.84.4 resolution: "metro@npm:0.84.4" @@ -16642,15 +15770,6 @@ __metadata: languageName: node linkType: hard -"ob1@npm:0.82.5": - version: 0.82.5 - resolution: "ob1@npm:0.82.5" - dependencies: - flow-enums-runtime: "npm:^0.0.6" - checksum: 10c0/4d65e82fde0612a5c411f3c926de6bc722bdb4751c4fb08f5a5ef91bdaf860e7f9c4f08dcb7acfdfc05340fc4929efb00ea9e973570c1d61adfc4353657abf55 - languageName: node - linkType: hard - "ob1@npm:0.84.4": version: 0.84.4 resolution: "ob1@npm:0.84.4" @@ -17450,18 +16569,6 @@ __metadata: languageName: node linkType: hard -"pretty-format@npm:^26.6.2": - version: 26.6.2 - resolution: "pretty-format@npm:26.6.2" - dependencies: - "@jest/types": "npm:^26.6.2" - ansi-regex: "npm:^5.0.0" - ansi-styles: "npm:^4.0.0" - react-is: "npm:^17.0.1" - checksum: 10c0/b5ddf0e949b874b699d313fe9407f0eb65e67d00823b2dd95335905a73457260af7612f3bff6b48611fcca9ffcff003359e4c9faba4200d6209da433a859aef3 - languageName: node - linkType: hard - "pretty-format@npm:^29.0.3, pretty-format@npm:^29.7.0": version: 29.7.0 resolution: "pretty-format@npm:29.7.0" @@ -17740,7 +16847,7 @@ __metadata: languageName: node linkType: hard -"react-devtools-core@npm:^6.1.1, react-devtools-core@npm:^6.1.5": +"react-devtools-core@npm:^6.1.5": version: 6.1.5 resolution: "react-devtools-core@npm:6.1.5" dependencies: @@ -17820,38 +16927,6 @@ __metadata: languageName: node linkType: hard -"react-is@npm:^17.0.1": - version: 17.0.2 - resolution: "react-is@npm:17.0.2" - checksum: 10c0/2bdb6b93fbb1820b024b496042cce405c57e2f85e777c9aabd55f9b26d145408f9f74f5934676ffdc46f3dcff656d78413a6e43968e7b3f92eea35b3052e9053 - languageName: node - linkType: hard - -"react-native-audio-recorder-player@npm:^3.6.13": - version: 3.6.14 - resolution: "react-native-audio-recorder-player@npm:3.6.14" - dependencies: - hyochan-welcome: "npm:^1.0.0" - peerDependencies: - react: "*" - react-native: "*" - checksum: 10c0/e6c262d1d79c368fb24498fd7f251cdbb108d9d74208eaf0b519dcd0f1ff7b13b51422ef8120ecc12a673f5042d5fd4a8e94c076fd12d95e2cbec07030d2486e - languageName: node - linkType: hard - -"react-native-blob-util@npm:^0.22.2": - version: 0.22.2 - resolution: "react-native-blob-util@npm:0.22.2" - dependencies: - base-64: "npm:0.1.0" - glob: "npm:^10.3.10" - peerDependencies: - react: "*" - react-native: "*" - checksum: 10c0/5596dbe21cc8a77601dad6ad8b80382ac5311cd5bacf3330833bc8e6548aca23ba779fc4296d0d2997f1329e67c357d3467fabdf02acd61d80df5980aa38f4ea - languageName: node - linkType: hard - "react-native-blob-util@npm:^0.24.10": version: 0.24.10 resolution: "react-native-blob-util@npm:0.24.10" @@ -17928,21 +17003,6 @@ __metadata: languageName: node linkType: hard -"react-native-gesture-handler@npm:^2.26.0": - version: 2.31.2 - resolution: "react-native-gesture-handler@npm:2.31.2" - dependencies: - "@egjs/hammerjs": "npm:^2.0.17" - "@types/react-test-renderer": "npm:^19.1.0" - hoist-non-react-statics: "npm:^3.3.0" - invariant: "npm:^2.2.4" - peerDependencies: - react: "*" - react-native: "*" - checksum: 10c0/a312bb684b5de5376078e407a08a17fddef51a11ea09dd12236b3a971b18a68496f3d8c13391cdfefcc5af776fd90936066aaf20a7cfe2849d8c47c223643dd2 - languageName: node - linkType: hard - "react-native-gesture-handler@npm:^3.1.0": version: 3.1.0 resolution: "react-native-gesture-handler@npm:3.1.0" @@ -17971,15 +17031,6 @@ __metadata: languageName: node linkType: hard -"react-native-haptic-feedback@npm:^2.3.3": - version: 2.3.4 - resolution: "react-native-haptic-feedback@npm:2.3.4" - peerDependencies: - react-native: ">=0.60.0" - checksum: 10c0/609b6d424028c05fe2ab33259f5bd08a6ec15a0b936f144e644c4a0575fffa86f07fe41636ddaf96abc9059352673e9736449ba3890f707ef7cd67dd384ae937 - languageName: node - linkType: hard - "react-native-haptic-feedback@npm:^3.0.0": version: 3.0.0 resolution: "react-native-haptic-feedback@npm:3.0.0" @@ -18088,26 +17139,26 @@ __metadata: languageName: node linkType: hard -"react-native-nitro-modules@npm:0.31.3": - version: 0.31.3 - resolution: "react-native-nitro-modules@npm:0.31.3" +"react-native-nitro-modules@npm:0.36.5": + version: 0.36.5 + resolution: "react-native-nitro-modules@npm:0.36.5" peerDependencies: react: "*" react-native: "*" - checksum: 10c0/ec37750c9ae0a1c433c307cfba78474cb1c2593f6b4780d00250755688ed049602e28fa3c4e2b9f922a815353b6ed8c74db580973e736a4d8aba4f06eed7c91b + checksum: 10c0/c7b2133f924967b68c0f0f678b5a5dce1a784a7e22f57ebf203ef5803a5c9c745b6d4dda8c9bcedd13f7c5ca53a8707784e98572a2ca8a864fe0b905163a34b5 languageName: node linkType: hard -"react-native-nitro-sound@npm:0.2.9": - version: 0.2.9 - resolution: "react-native-nitro-sound@npm:0.2.9" +"react-native-nitro-sound@npm:0.2.17": + version: 0.2.17 + resolution: "react-native-nitro-sound@npm:0.2.17" dependencies: - "@react-native-community/slider": "npm:^5.0.1" + "@react-native-community/slider": "npm:^5.2.0" peerDependencies: react: "*" react-native: "*" - react-native-nitro-modules: "*" - checksum: 10c0/10fdb135ef226b0de845ae91d4cfb88fec8a55ee5350919b8005589fa08750b934c76b5ccd0265ae38e7d9aa14b28f83d156d3d3582cfef15e9b9f93873a2505 + react-native-nitro-modules: ">=0.36.5" + checksum: 10c0/1ceef5bc67d5807b1bbf16b939cd5eae5e9ec5d5f61b24728190d77e11c9159a102117d34a443067a982f980ba91b006f01122aad99c76a2015b7ef2d5c8a11f languageName: node linkType: hard @@ -18125,21 +17176,7 @@ __metadata: languageName: node linkType: hard -"react-native-reanimated@npm:^4.0.1": - version: 4.4.0 - resolution: "react-native-reanimated@npm:4.4.0" - dependencies: - react-native-is-edge-to-edge: "npm:^1.3.1" - semver: "npm:^7.7.3" - peerDependencies: - react: "*" - react-native: 0.83 - 0.86 - react-native-worklets: 0.9.x - checksum: 10c0/6a7ac5b9349d1313f16c2ac514993cf5b113c8e76a2463636112673daf648aaa902d601fff7358bf87fff0dcc707e956b600e5ff9d5fc64e7d703726933df608 - languageName: node - linkType: hard - -"react-native-safe-area-context@npm:^5.4.1, react-native-safe-area-context@npm:^5.8.0": +"react-native-safe-area-context@npm:^5.8.0": version: 5.8.0 resolution: "react-native-safe-area-context@npm:5.8.0" peerDependencies: @@ -18172,7 +17209,7 @@ __metadata: languageName: node linkType: hard -"react-native-screens@npm:^4.11.1, react-native-screens@npm:^4.25.2": +"react-native-screens@npm:^4.25.2": version: 4.25.2 resolution: "react-native-screens@npm:4.25.2" dependencies: @@ -18185,7 +17222,7 @@ __metadata: languageName: node linkType: hard -"react-native-share@npm:^12.0.11, react-native-share@npm:^12.3.1": +"react-native-share@npm:^12.3.1": version: 12.3.1 resolution: "react-native-share@npm:12.3.1" checksum: 10c0/4ee8a64e5a992ecf16bcf59a4d1384b3310d590d5fb0e7b07f60073635cc9de8fd3adf31bcbd93500252690bdf59a45ca6d01f3a834b32842768e1a02e5e5524 @@ -18206,7 +17243,7 @@ __metadata: languageName: node linkType: hard -"react-native-svg@npm:15.15.5, react-native-svg@npm:^15.12.0, react-native-svg@npm:^15.15.5": +"react-native-svg@npm:15.15.5, react-native-svg@npm:^15.15.5": version: 15.15.5 resolution: "react-native-svg@npm:15.15.5" dependencies: @@ -18241,7 +17278,7 @@ __metadata: languageName: node linkType: hard -"react-native-video@npm:^6.16.1, react-native-video@npm:^6.19.2": +"react-native-video@npm:^6.19.2": version: 6.19.2 resolution: "react-native-video@npm:6.19.2" peerDependencies: @@ -18297,79 +17334,6 @@ __metadata: languageName: node linkType: hard -"react-native-worklets@npm:^0.4.1": - version: 0.4.2 - resolution: "react-native-worklets@npm:0.4.2" - dependencies: - "@babel/plugin-transform-arrow-functions": "npm:^7.0.0-0" - "@babel/plugin-transform-class-properties": "npm:^7.0.0-0" - "@babel/plugin-transform-classes": "npm:^7.0.0-0" - "@babel/plugin-transform-nullish-coalescing-operator": "npm:^7.0.0-0" - "@babel/plugin-transform-optional-chaining": "npm:^7.0.0-0" - "@babel/plugin-transform-shorthand-properties": "npm:^7.0.0-0" - "@babel/plugin-transform-template-literals": "npm:^7.0.0-0" - "@babel/plugin-transform-unicode-regex": "npm:^7.0.0-0" - "@babel/preset-typescript": "npm:^7.16.7" - convert-source-map: "npm:^2.0.0" - peerDependencies: - "@babel/core": ^7.0.0-0 - react: "*" - react-native: "*" - checksum: 10c0/23965d7df3e5532f5eb339bfef2e35cd5a3d0c5d6e262485bee6680707b3bff74ca1803d06bb77762636443f3597a4788ac708488b53976740caab2af2998460 - languageName: node - linkType: hard - -"react-native@npm:0.80.2": - version: 0.80.2 - resolution: "react-native@npm:0.80.2" - dependencies: - "@jest/create-cache-key-function": "npm:^29.7.0" - "@react-native/assets-registry": "npm:0.80.2" - "@react-native/codegen": "npm:0.80.2" - "@react-native/community-cli-plugin": "npm:0.80.2" - "@react-native/gradle-plugin": "npm:0.80.2" - "@react-native/js-polyfills": "npm:0.80.2" - "@react-native/normalize-colors": "npm:0.80.2" - "@react-native/virtualized-lists": "npm:0.80.2" - abort-controller: "npm:^3.0.0" - anser: "npm:^1.4.9" - ansi-regex: "npm:^5.0.0" - babel-jest: "npm:^29.7.0" - babel-plugin-syntax-hermes-parser: "npm:0.28.1" - base64-js: "npm:^1.5.1" - chalk: "npm:^4.0.0" - commander: "npm:^12.0.0" - flow-enums-runtime: "npm:^0.0.6" - glob: "npm:^7.1.1" - invariant: "npm:^2.2.4" - jest-environment-node: "npm:^29.7.0" - memoize-one: "npm:^5.0.0" - metro-runtime: "npm:^0.82.2" - metro-source-map: "npm:^0.82.2" - nullthrows: "npm:^1.1.1" - pretty-format: "npm:^29.7.0" - promise: "npm:^8.3.0" - react-devtools-core: "npm:^6.1.1" - react-refresh: "npm:^0.14.0" - regenerator-runtime: "npm:^0.13.2" - scheduler: "npm:0.26.0" - semver: "npm:^7.1.3" - stacktrace-parser: "npm:^0.1.10" - whatwg-fetch: "npm:^3.0.0" - ws: "npm:^6.2.3" - yargs: "npm:^17.6.2" - peerDependencies: - "@types/react": ^19.1.0 - react: ^19.1.0 - peerDependenciesMeta: - "@types/react": - optional: true - bin: - react-native: cli.js - checksum: 10c0/ce68e7848e24f1e4f3902e3c881aeb31317d158c37a47d85b062160cea220d993263b2c1712b9a69bd0ad756768b1a220982685ab2370e716ff83ee402ba1c0a - languageName: node - linkType: hard - "react-native@npm:0.86.0": version: 0.86.0 resolution: "react-native@npm:0.86.0" @@ -18542,13 +17506,6 @@ __metadata: languageName: node linkType: hard -"react@npm:19.1.0": - version: 19.1.0 - resolution: "react@npm:19.1.0" - checksum: 10c0/530fb9a62237d54137a13d2cfb67a7db6a2156faed43eecc423f4713d9b20c6f2728b026b45e28fcd72e8eadb9e9ed4b089e99f5e295d2f0ad3134251bdd3698 - languageName: node - linkType: hard - "react@npm:19.2.3": version: 19.2.3 resolution: "react@npm:19.2.3" @@ -18992,7 +17949,7 @@ __metadata: husky: "npm:^9.1.7" prettier: "npm:^3.8.3" semantic-release: "npm:^25.0.3" - typescript: "npm:5.9.3" + typescript: "npm:6.0.3" typescript-eslint: "npm:^8.59.2" uglify-js: "npm:^3.19.2" dependenciesMeta: @@ -19120,6 +18077,7 @@ __metadata: "@react-navigation/native-stack": "npm:^7.18.3" "@rnx-kit/metro-config": "npm:^2.1.0" "@shopify/flash-list": "npm:^2.3.2" + "@stream-io/typescript-config": "workspace:^" "@types/lodash.mergewith": "npm:^4.6.9" "@types/react": "npm:^19.2.0" babel-plugin-react-compiler: "npm:^1.0.0" @@ -19133,8 +18091,8 @@ __metadata: react-native-haptic-feedback: "npm:^3.0.0" react-native-image-picker: "npm:^8.2.1" react-native-maps: "npm:^1.29.0" - react-native-nitro-modules: "npm:0.31.3" - react-native-nitro-sound: "npm:0.2.9" + react-native-nitro-modules: "npm:0.36.5" + react-native-nitro-sound: "npm:0.2.17" react-native-reanimated: "npm:4.5.2" react-native-safe-area-context: "npm:^5.8.0" react-native-screens: "npm:^4.26.2" @@ -19146,7 +18104,7 @@ __metadata: stream-chat: "npm:^9.50.1" stream-chat-react-native: "workspace:^" stream-chat-react-native-core: "workspace:^" - typescript: "npm:5.9.3" + typescript: "npm:6.0.3" languageName: unknown linkType: soft @@ -19157,13 +18115,6 @@ __metadata: languageName: node linkType: hard -"scheduler@npm:0.26.0": - version: 0.26.0 - resolution: "scheduler@npm:0.26.0" - checksum: 10c0/5b8d5bfddaae3513410eda54f2268e98a376a429931921a81b5c3a2873aab7ca4d775a8caac5498f8cbc7d0daeab947cf923dbd8e215d61671f9f4e392d34356 - languageName: node - linkType: hard - "scheduler@npm:0.27.0, scheduler@npm:^0.27.0": version: 0.27.0 resolution: "scheduler@npm:0.27.0" @@ -19786,11 +18737,13 @@ __metadata: version: 0.0.0-use.local resolution: "stream-chat-expo@workspace:package/expo-package" dependencies: + "@stream-io/typescript-config": "workspace:^" expo: "npm:^57.0.7" expo-audio: "patch:expo-audio@npm%3A57.0.2#~/.yarn/patches/expo-audio-npm-57.0.2-7a40cb0b0a.patch" expo-image-manipulator: "npm:~57.0.5" mime: "npm:^4.0.7" stream-chat-react-native-core: "workspace:^" + typescript: "npm:6.0.3" peerDependencies: expo: ">=52.0.0" expo-audio: "*" @@ -19843,6 +18796,7 @@ __metadata: "@react-native/babel-preset": "npm:0.86.0" "@react-native/jest-preset": "npm:0.86.0" "@shopify/flash-list": "npm:^2.3.2" + "@stream-io/typescript-config": "workspace:^" "@testing-library/jest-native": "npm:^5.4.3" "@testing-library/react-native": "npm:13.2.0" "@total-typescript/shoehorn": "npm:^0.1.2" @@ -19861,7 +18815,7 @@ __metadata: babel-jest: "npm:30.0.0" babel-loader: "npm:10.1.1" babel-plugin-module-resolver: "npm:5.0.3" - better-sqlite3: "npm:11.10.0" + better-sqlite3: "npm:12.11.1" dayjs: "npm:1.11.13" emoji-regex: "npm:^10.4.0" i18next: "npm:^25.2.1" @@ -19887,7 +18841,7 @@ __metadata: react-test-renderer: "npm:19.2.3" rimraf: "npm:^6.0.1" stream-chat: "npm:^9.50.1" - typescript: "npm:5.9.3" + typescript: "npm:6.0.3" use-sync-external-store: "npm:^1.5.0" uuid: "npm:^11.1.0" peerDependencies: @@ -19918,10 +18872,12 @@ __metadata: version: 0.0.0-use.local resolution: "stream-chat-react-native@workspace:package/native-package" dependencies: + "@stream-io/typescript-config": "workspace:^" es6-symbol: "npm:^3.1.3" mime: "npm:^4.0.7" react-native: "npm:0.86.0" stream-chat-react-native-core: "workspace:^" + typescript: "npm:6.0.3" peerDependencies: "@react-native-camera-roll/camera-roll": ">=7.9.0" "@react-native-clipboard/clipboard": ">=1.16.0" @@ -20756,68 +19712,26 @@ __metadata: languageName: node linkType: hard -"typescript@npm:5.9.3, typescript@npm:~5.9.2": - version: 5.9.3 - resolution: "typescript@npm:5.9.3" +"typescript@npm:6.0.3": + version: 6.0.3 + resolution: "typescript@npm:6.0.3" bin: tsc: bin/tsc tsserver: bin/tsserver - checksum: 10c0/6bd7552ce39f97e711db5aa048f6f9995b53f1c52f7d8667c1abdc1700c68a76a308f579cd309ce6b53646deb4e9a1be7c813a93baaf0a28ccd536a30270e1c5 + checksum: 10c0/4a25ff5045b984370f48f196b3a0120779b1b343d40b9a68d114ea5e5fff099809b2bb777576991a63a5cd59cf7bffd96ff6fe10afcefbcb8bd6fb96ad4b6606 languageName: node linkType: hard -"typescript@patch:typescript@npm%3A5.9.3#optional!builtin, typescript@patch:typescript@npm%3A~5.9.2#optional!builtin": - version: 5.9.3 - resolution: "typescript@patch:typescript@npm%3A5.9.3#optional!builtin::version=5.9.3&hash=5786d5" +"typescript@patch:typescript@npm%3A6.0.3#optional!builtin": + version: 6.0.3 + resolution: "typescript@patch:typescript@npm%3A6.0.3#optional!builtin::version=6.0.3&hash=5786d5" bin: tsc: bin/tsc tsserver: bin/tsserver - checksum: 10c0/ad09fdf7a756814dce65bc60c1657b40d44451346858eea230e10f2e95a289d9183b6e32e5c11e95acc0ccc214b4f36289dcad4bf1886b0adb84d711d336a430 + checksum: 10c0/2f25c74e65663c248fa1ade2b8459d9ce5372ff9dad07067310f132966ebec1d93f6c42f0baf77a6b6a7a91460463f708e6887013aaade22111037457c6b25df languageName: node linkType: hard -"typescriptmessaging@workspace:examples/TypeScriptMessaging": - version: 0.0.0-use.local - resolution: "typescriptmessaging@workspace:examples/TypeScriptMessaging" - dependencies: - "@babel/core": "npm:^7.29.0" - "@babel/runtime": "npm:^7.29.2" - "@op-engineering/op-sqlite": "npm:^14.0.4" - "@react-native-clipboard/clipboard": "npm:^1.16.2" - "@react-native-community/cli": "npm:19.1.2" - "@react-native-community/cli-platform-android": "npm:19.1.1" - "@react-native-community/cli-platform-ios": "npm:19.1.1" - "@react-native-community/netinfo": "npm:^11.4.1" - "@react-native-documents/picker": "npm:^10.1.3" - "@react-native/babel-preset": "npm:0.80.2" - "@react-native/metro-config": "npm:0.80.2" - "@react-native/typescript-config": "npm:0.80.2" - "@react-navigation/elements": "npm:^2.9.17" - "@react-navigation/native": "npm:^7.1.10" - "@react-navigation/stack": "npm:^7.3.3" - "@rnx-kit/metro-config": "npm:^2.1.0" - "@types/react": "npm:^19.1.0" - react: "npm:19.1.0" - react-native: "npm:0.80.2" - react-native-audio-recorder-player: "npm:^3.6.13" - react-native-blob-util: "npm:^0.22.2" - react-native-gesture-handler: "npm:^2.26.0" - react-native-haptic-feedback: "npm:^2.3.3" - react-native-image-picker: "npm:^8.2.1" - react-native-reanimated: "npm:^4.0.1" - react-native-safe-area-context: "npm:^5.4.1" - react-native-screens: "npm:^4.11.1" - react-native-share: "npm:^12.0.11" - react-native-svg: "npm:^15.12.0" - react-native-video: "npm:^6.16.1" - react-native-worklets: "npm:^0.4.1" - stream-chat: "npm:^9.50.1" - stream-chat-react-native: "workspace:^" - stream-chat-react-native-core: "workspace:^" - typescript: "npm:5.9.3" - languageName: unknown - linkType: soft - "ua-parser-js@npm:^1.0.35": version: 1.0.41 resolution: "ua-parser-js@npm:1.0.41"