@ondeinference / onde / commits / 05eaa82

Add react-native SDK

keypair34 committed Apr 10, 2026 at 18:32 UTC 05eaa827620269a2134ab523b8eb44a00451e252
57 files changed +25716 -101
.agents/skills/sdk-react-native/SKILL.md new
+769
@@ -0,0 +1,769 @@
1 +---
2 +name: sdk-react-native
3 +description: Build, debug, and maintain the Onde Inference React Native / Expo SDK. Covers Expo native module wiring, Metro config for file-linked SDKs, iOS deployment target and Expo autolinking, XCFramework device/simulator split, app group entitlement, HF_HOME/TMPDIR sandbox setup, the native bridge JSON string contract, EngineStatus normalization, and npm publishing.
4 +allowed-tools: Read, Write, Edit, Glob, Grep, Bash
5 +user-invocable: true
6 +---
7 +
8 +# Skill: React Native / Expo SDK
9 +
10 +## What This Skill Covers
11 +
12 +Building and maintaining the `@ondeinference/react-native` Expo native module,
13 +wiring the Rust C FFI bridge to TypeScript, debugging Metro/CocoaPods/Xcode
14 +issues, and publishing to npm.
15 +
16 +---
17 +
18 +## Repository Layout
19 +
20 +```
21 +onde/sdk/react-native/
22 +├── package.json # name: @ondeinference/react-native
23 +├── expo-module.config.json # declares OndeInferenceModule for Expo autolinking
24 +├── tsconfig.json # target ES2020, module commonjs
25 +├── src/
26 +│ ├── index.ts # public API: OndeChatEngine, free functions, types
27 +│ ├── OndeInferenceModule.ts # requireNativeModule("OndeInference") — raw bridge
28 +│ └── types.ts # ChatMessage, SamplingConfig, EngineInfo, etc.
29 +├── build/ # tsc output — gitignored, regenerated by npm run build
30 +├── ios/
31 +│ ├── OndeInference.podspec # CocoaPods spec — vendored_frameworks = XCFramework
32 +│ ├── OndeInferenceModule.swift # Expo Module: Rust C FFI declarations + module def
33 +│ └── rust/
34 +│ ├── OndeReactNative.xcframework # bundles device + simulator slices
35 +│ ├── device/libonde_react_native.a
36 +│ └── simulator/libonde_react_native.a
37 +├── android/ # Android module (not yet wired for Onde)
38 +├── scripts/
39 +│ └── build-rust.sh # builds Rust .a for iOS device + sim, creates XCFramework
40 +└── example/
41 + ├── app.json # Expo config — ios.deploymentTarget, appleTeamId
42 + ├── babel.config.js # babel-preset-expo only
43 + ├── metro.config.js # watchFolders, extraNodeModules, nodeModulesPaths, blockList
44 + ├── package.json # dep: "@ondeinference/react-native": "file:.."
45 + └── ios/
46 + ├── Podfile # uses use_expo_modules!, deployment from Podfile.properties.json
47 + ├── Podfile.properties.json # ios.deploymentTarget: "16.0" — critical, see below
48 + ├── OndeExample/
49 + │ ├── OndeExample.entitlements
50 + │ └── Info.plist
51 + └── Pods/ # gitignored
52 +```
53 +
54 +---
55 +
56 +## Critical Lessons (Read First)
57 +
58 +### 1. Metro `@babel/runtime` resolution with `file:..` local packages
59 +
60 +**Symptom:** `Unable to resolve module @babel/runtime/helpers/asyncToGenerator`
61 +from inside the SDK's `build/index.js`.
62 +
63 +**Root cause:** When Metro processes a file physically located outside the
64 +example app's directory (e.g. in `sdk/react-native/build/`), Babel transforms
65 +`async/await` and injects `require("@babel/runtime/...")`. Metro resolves
66 +modules relative to the file's physical location — but the SDK's own
67 +`node_modules/` is blocked (to avoid react-native version conflicts) and the
68 +example's `node_modules/` is not in the resolution path for files outside the
69 +example root.
70 +
71 +**Fix — always required in `metro.config.js`:**
72 +
73 +```js
74 +// Falls back to the example's node_modules for any file in watched folders
75 +config.resolver.nodeModulesPaths = [path.resolve(__dirname, "node_modules")];
76 +```
77 +
78 +Also required: block the SDK's node_modules to avoid react-native version
79 +conflicts:
80 +
81 +```js
82 +config.resolver.blockList = [
83 + new RegExp(
84 + path.resolve(sdkRoot, "node_modules").replace(/\\/g, "\\\\") + "/.*",
85 + ),
86 +];
87 +```
88 +
89 +---
90 +
91 +### 2. Expo autolinking silently skips pods when deployment target is too low
92 +
93 +**Symptom:** `pod install` completes but `OndeInference` is not in
94 +`Podfile.lock`. The app launches but throws "Cannot find native module
95 +'OndeInference'" at runtime.
96 +
97 +**Root cause:** Expo's autolinking Ruby code calls `pod.supports_platform?`
98 +on each discovered pod. The `OndeInference` podspec declares
99 +`s.platforms = { :ios => '16.0' }`. If the project's deployment target
100 +(from `Podfile.properties.json`) is lower (e.g. the Expo default of 15.1),
101 +`supports_platform?` returns false and the pod is **silently skipped** with no
102 +error or warning.
103 +
104 +**Diagnosis:**
105 +
106 +```bash
107 +xcrun simctl get_app_container booted <bundle-id> data
108 +grep "OndeInference" ios/Podfile.lock # if empty → autolinking skipped it
109 +```
110 +
111 +**Fix — three places must all agree on iOS 16.0:**
112 +
113 +1. `sdk/react-native/ios/OndeInference.podspec` — `s.platforms = { :ios => '16.0' }`
114 +2. `example/ios/Podfile.properties.json` — `"ios.deploymentTarget": "16.0"`
115 +3. `example/app.json` → `expo.ios.deploymentTarget: "16.0"`
116 +
117 +And after changing `Podfile.properties.json`, manually patch the Xcode project:
118 +
119 +```bash
120 +sed -i '' 's/IPHONEOS_DEPLOYMENT_TARGET = 15.1/IPHONEOS_DEPLOYMENT_TARGET = 16.0/g' \
121 + ios/OndeExample.xcodeproj/project.pbxproj
122 +```
123 +
124 +Then run `pod install` again and verify:
125 +
126 +```bash
127 +grep "OndeInference" ios/Podfile.lock # must now appear
128 +```
129 +
130 +**Important:** `expo prebuild --clean` regenerates `Podfile.properties.json`
131 +from `app.json`. After `--clean`, you must also manually re-add
132 +`"ios.deploymentTarget": "16.0"` to `Podfile.properties.json` if it was not
133 +picked up from `app.json`.
134 +
135 +---
136 +
137 +### 3. iOS device vs simulator static library — use an XCFramework
138 +
139 +**Symptom:** Build succeeds for simulator but fails with:
140 +`ld: building for 'iOS-simulator', but linking in object file built for 'iOS'`
141 +
142 +**Root cause:** Both iOS device (`aarch64-apple-ios`) and iOS simulator
143 +(`aarch64-apple-ios-sim`) are arm64, so `lipo` cannot merge them into a fat
144 +binary. They have different Mach-O platform metadata.
145 +
146 +**Wrong approach:** Single `libonde_react_native.a` → works for device OR
147 +simulator but not both.
148 +
149 +**Wrong approach:** `vendored_libraries` with two files sharing the same
150 +filename → CocoaPods reports "conflicting names" error.
151 +
152 +**Correct approach:** XCFramework bundling both slices:
153 +
154 +```bash
155 +# In scripts/build-rust.sh
156 +mkdir -p ios/rust/device ios/rust/simulator
157 +cp target/aarch64-apple-ios/release/libonde_react_native.a ios/rust/device/
158 +cp target/aarch64-apple-ios-sim/release/libonde_react_native.a ios/rust/simulator/
159 +
160 +rm -rf ios/rust/OndeReactNative.xcframework
161 +xcodebuild -create-xcframework \
162 + -library ios/rust/device/libonde_react_native.a \
163 + -library ios/rust/simulator/libonde_react_native.a \
164 + -output ios/rust/OndeReactNative.xcframework
165 +```
166 +
167 +Podspec uses `vendored_frameworks` (not `vendored_libraries`):
168 +
169 +```ruby
170 +s.vendored_frameworks = 'rust/OndeReactNative.xcframework'
171 +s.pod_target_xcconfig = {
172 + 'DEFINES_MODULE' => 'YES',
173 + 'SWIFT_COMPILATION_MODE' => 'wholemodule',
174 + 'OTHER_LDFLAGS' => '-londe_react_native',
175 +}
176 +```
177 +
178 +CocoaPods automatically selects the correct slice for device vs simulator.
179 +
180 +---
181 +
182 +### 4. The native bridge JSON string contract — never return Swift dicts
183 +
184 +**Symptom:** `JSON parse error: unexpected character: o`
185 +
186 +**Root cause:** The TypeScript layer receives the native return value and calls
187 +`JSON.parse(value)`. If the native Swift module returns `[String: Any]` or
188 +`[[String: Any]]` instead of a `String`, the Expo bridge serialises it in an
189 +opaque way that is not valid JSON (the string representation starts with
190 +something like `{...}` or `[...]` in a non-JSON form that starts with `o`
191 +when printed).
192 +
193 +**The contract:** All Expo Module methods in `OndeInferenceModule.swift` that
194 +return complex types MUST return `String` (the raw JSON from Rust), NOT
195 +`[String: Any]` or `[[String: Any]]`. The TypeScript layer owns all JSON
196 +parsing.
197 +
198 +**Correct Swift:**
199 +
200 +```swift
201 +AsyncFunction("loadDefaultModel") {
202 + (systemPrompt: String?, samplingJson: String?) -> String in // ← String, not [String: Any]
203 + ...
204 + return try self.validateJsonResult(result) // returns the raw JSON string
205 +}
206 +
207 +Function("defaultModelConfig") { () -> String in // ← String, not [String: Any]
208 + let result = self.consumeRustString(onde_default_model_config())
209 + return try self.validateJsonResult(result)
210 +}
211 +```
212 +
213 +**Validation helper — validate but do not deserialise:**
214 +
215 +```swift
216 +private func validateJsonResult(_ json: String?) throws -> String {
217 + guard let json = json,
218 + let data = json.data(using: .utf8),
219 + let dict = try JSONSerialization.jsonObject(with: data) as? [String: Any]
220 + else { throw OndeError.invalidResponse }
221 + if let error = dict["error"] as? String {
222 + throw OndeError.inferenceError(error)
223 + }
224 + return json // ← return the original string, not the parsed dict
225 +}
226 +
227 +private func validateJsonArray(_ json: String?) throws -> String {
228 + guard let json = json,
229 + let data = json.data(using: .utf8),
230 + (try JSONSerialization.jsonObject(with: data) as? [[String: Any]]) != nil
231 + else { throw OndeError.invalidResponse }
232 + return json // ← return the original string
233 +}
234 +```
235 +
236 +---
237 +
238 +### 5. EngineStatus is lowercase from Rust — normalize in the UI layer
239 +
240 +**Symptom:** Model loads successfully. Alert says "Ready in X.Xs". But the
241 +`TextInput` placeholder stays at "Load a model first" and remains non-editable.
242 +
243 +**Root cause:** Rust's `Display` impl emits lowercase status strings:
244 +`"ready"`, `"unloaded"`, `"loading"`, `"generating"`, `"error"`.
245 +The TypeScript UI uses capitalized union type values (`"Ready"`, `"Unloaded"`,
246 +etc.). After `refreshStatus()` runs, `engineStatus` holds `"ready"` which
247 +does not match `"Ready"` in the `isLoaded` check.
248 +
249 +**Fix — normalize at the point of receiving native status:**
250 +
251 +```typescript
252 +const normalizeEngineStatus = useCallback((status: string): EngineStatus => {
253 + switch (status.toLowerCase()) {
254 + case "loading": return "Loading";
255 + case "ready": return "Ready";
256 + case "generating": return "Generating";
257 + case "error": return "Error";
258 + default: return "Unloaded";
259 + }
260 +}, []);
261 +
262 +const refreshStatus = useCallback(async () => {
263 + try {
264 + const info = await OndeChatEngine.info();
265 + setEngineStatus(normalizeEngineStatus(info.status)); // ← normalize here
266 + setModelName(info.modelName ?? null);
267 + setApproxMemory(info.approxMemory ?? null);
268 + } catch { /* best-effort */ }
269 +}, [normalizeEngineStatus]);
270 +```
271 +
272 +---
273 +
274 +### 6. iOS sandbox filesystem setup — HF_HOME must be set before model load
275 +
276 +**Symptom:** Model load fails immediately with "error 0" or returns an error
277 +containing "HF_HOME is not set".
278 +
279 +**Root cause:** On iOS, `~/.cache` is outside the app sandbox. The Rust engine
280 +explicitly requires `HF_HOME` to be set before any model load on sandboxed
281 +platforms. Without it, `load_gguf_model` returns an `InferenceError::ModelBuild`
282 +with the message: *"HF_HOME is not set — cannot initialise HF cache."*
283 +
284 +**Fix — call `configureApplicationFilesystem()` in `OnCreate` and before each
285 +model load:**
286 +
287 +```swift
288 +private func configureApplicationFilesystem() throws {
289 + let fileManager = FileManager.default
290 +
291 + let containerDirectory: URL
292 + if let appGroupDirectory = fileManager.containerURL(
293 + forSecurityApplicationGroupIdentifier: ondeAppGroupIdentifier
294 + ) {
295 + containerDirectory = appGroupDirectory
296 + } else {
297 + containerDirectory = try fileManager.url(
298 + for: .applicationSupportDirectory,
299 + in: .userDomainMask, appropriateFor: nil, create: true
300 + )
301 + }
302 +
303 + // Convention: <container>/models/hub — matches Tauri and Swift SDKs exactly
304 + let hfHomeDirectory = containerDirectory.appendingPathComponent("models", isDirectory: true)
305 + let hfHubCacheDirectory = hfHomeDirectory.appendingPathComponent("hub", isDirectory: true)
306 + let tempDirectory = containerDirectory.appendingPathComponent("tmp", isDirectory: true)
307 +
308 + try fileManager.createDirectory(at: hfHomeDirectory, withIntermediateDirectories: true)
309 + try fileManager.createDirectory(at: hfHubCacheDirectory, withIntermediateDirectories: true)
310 + try fileManager.createDirectory(at: tempDirectory, withIntermediateDirectories: true)
311 +
312 + setenv("HF_HOME", hfHomeDirectory.path, 1)
313 + setenv("HF_HUB_CACHE", hfHubCacheDirectory.path, 1)
314 + setenv("HUGGINGFACE_HUB_CACHE", hfHubCacheDirectory.path, 1)
315 + setenv("TMPDIR", tempDirectory.path, 1)
316 +}
317 +```
318 +
319 +Call it in `OnCreate` **and** at the start of `loadDefaultModel`/`loadModel`:
320 +
321 +```swift
322 +OnCreate {
323 + do {
324 + try self.configureApplicationFilesystem()
325 + self.enginePtr = onde_engine_create()
326 + } catch {
327 + self.enginePtr = nil
328 + }
329 +}
330 +
331 +AsyncFunction("loadDefaultModel") { ... -> String in
332 + try self.configureApplicationFilesystem() // ← also here, idempotent
333 + guard let ptr = self.enginePtr else { throw OndeError.engineNotInitialized }
334 + ...
335 +}
336 +```
337 +
338 +---
339 +
340 +### 7. Shared app group cache path convention
341 +
342 +All Onde-powered apps across all SDKs (Tauri, Swift, React Native, Flutter)
343 +share the same HuggingFace cache via the App Group container. The layout is:
344 +
345 +```
346 +<group.com.ondeinference.apps container>/
347 +├── models/ ← HF_HOME
348 +│ └── hub/ ← HF_HUB_CACHE (GGUF files live here)
349 +└── tmp/ ← TMPDIR
350 +```
351 +
352 +**The subdirectory is `models/`, NOT `huggingface/`.**
353 +
354 +Do NOT use `OndeInference/huggingface/hub/` — this was an early mistake that
355 +caused the app to look in a different place than the Tauri SDK, preventing
356 +cross-app model reuse.
357 +
358 +Verifying the shared container is accessible on simulator:
359 +
360 +```bash
361 +xcrun simctl get_app_container booted <bundle-id> groups
362 +# → shows group.com.ondeinference.apps path
363 +
364 +xcrun simctl get_app_container booted <bundle-id> group.com.ondeinference.apps
365 +# → resolves the exact path
366 +
367 +# Check whether models exist in the shared cache
368 +find "$(xcrun simctl get_app_container booted <bundle-id> group.com.ondeinference.apps)/models/hub" \
369 + -name "*.gguf" -o -name "*.part" -o -name "*.lock" | sort
370 +```
371 +
372 +---
373 +
374 +### 8. Entitlements required for iOS
375 +
376 +The example app's `OndeExample.entitlements` must contain:
377 +
378 +```xml
379 +<?xml version="1.0" encoding="UTF-8"?>
380 +<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN"
381 + "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
382 +<plist version="1.0">
383 + <dict>
384 + <key>com.apple.developer.kernel.increased-memory-limit</key>
385 + <true />
386 + <key>com.apple.security.application-groups</key>
387 + <array>
388 + <string>group.com.ondeinference.apps</string>
389 + </array>
390 + </dict>
391 +</plist>
392 +```
393 +
394 +- `increased-memory-limit` — required for ~1 GB+ model loading on iOS
395 +- `com.apple.security.application-groups` — grants access to the shared model cache
396 +
397 +**On physical device:** the App Group must be registered in the Apple Developer
398 +Portal under **Identifiers → App Groups** before Xcode can provision it.
399 +
400 +On the iOS Simulator the entitlement is granted automatically by the simulator
401 +runtime — no provisioning profile needed.
402 +
403 +---
404 +
405 +### 9. FlatList swallows taps — TextInput never gets focus
406 +
407 +**Symptom:** After model loads, the `TextInput` placeholder is correct but
408 +tapping it does nothing. The keyboard never appears.
409 +
410 +**Root cause:** `FlatList` on iOS intercepts touch events and by default
411 +dismisses the keyboard on scroll, which prevents child inputs from receiving
412 +focus when tapping in certain layout configurations.
413 +
414 +**Fix:**
415 +
416 +```tsx
417 +<FlatList
418 + ...
419 + keyboardShouldPersistTaps="handled" // ← prevents FlatList eating taps
420 +/>
421 +```
422 +
423 +---
424 +
425 +### 10. Do not use the iOS Simulator to validate model loading
426 +
427 +The iOS Simulator is unreliable for validating actual LLM model loading with
428 +this stack:
429 +- Metal-backed inference behaves differently in the simulator
430 +- Large GGUF model loading (~941 MB) may hang or fail in the simulator
431 +- Shared app group container behavior can differ
432 +
433 +Use the Simulator for:
434 +- Build verification
435 +- UI layout and interaction
436 +- Entitlement/container path checks (`xcrun simctl get_app_container ...`)
437 +
438 +Use a **physical iPhone running iOS 16+** for:
439 +- Actual model download and load
440 +- Metal inference correctness
441 +- Memory behavior
442 +
443 +---
444 +
445 +### 11. Diagnosing a hung model load
446 +
447 +When the app stays in "Loading" state indefinitely:
448 +
449 +1. **Check the shared container has no stale partial downloads:**
450 +
451 +```bash
452 +# Find .part and .lock files
453 +find "$(xcrun simctl get_app_container booted <bundle-id> group.com.ondeinference.apps)" \
454 + -type f \( -name "*.part" -o -name "*.lock" \) | sort
455 +
456 +# Remove stale partial caches
457 +rm -rf "<container>/models/hub/models--<org>--<model>"
458 +```
459 +
460 +2. **Check the app group resolves:**
461 +
462 +```bash
463 +xcrun simctl get_app_container booted <bundle-id> groups
464 +```
465 +
466 +3. **Check native logs:**
467 +
468 +```bash
469 +xcrun simctl spawn booted log show --style compact --last 5m \
470 + --predicate 'process == "OndeExample" AND (
471 + eventMessage CONTAINS[c] "HF_" OR
472 + eventMessage CONTAINS[c] "models" OR
473 + eventMessage CONTAINS[c] "onde"
474 + )' | tail -100
475 +```
476 +
477 +4. **Verify `
478 +HF_TOKEN` was baked in at Rust build time.** On iOS,
479 +`TokenSource::CacheToken` cannot read `~/.cache/huggingface/token` because that
480 +path is outside the sandbox. `HF_TOKEN` must be set as an environment variable
481 +**when building the Rust static library**:
482 +
483 +```bash
484 +export HF_TOKEN=hf_xxxxxxxxxxxxxxxxxxxx
485 +./scripts/build-rust.sh ios
486 +```
487 +
488 +`option_env!("HF_TOKEN")` in `src/inference/token.rs` bakes it into the binary
489 +at compile time. Setting it after the fact has no effect.
490 +
491 +---
492 +
493 +## Architecture
494 +
495 +```
496 +┌──────────────────────────────────────────────────────┐
497 +│ React Native / TypeScript │
498 +│ OndeChatEngine, free functions (index.ts) │
499 +└─────────────────────┬────────────────────────────────┘
500 + │ JSON strings over Expo bridge
501 + ▼
502 +┌──────────────────────────────────────────────────────┐
503 +│ OndeInferenceModule.swift (Expo Module) │
504 +│ - configureApplicationFilesystem() │
505 +│ - validateJsonResult() / validateJsonArray() │
506 +│ - AsyncFunction / Function definitions │
507 +└─────────────────────┬────────────────────────────────┘
508 + │ C FFI via @_silgen_name
509 + ▼
510 +┌──────────────────────────────────────────────────────┐
511 +│ libonde_react_native.a (Rust static lib) │
512 +│ C API: onde_engine_create, onde_engine_load_*, ... │
513 +│ Rust engine: ChatEngine, mistral.rs, Metal/CPU │
514 +└──────────────────────────────────────────────────────┘
515 +```
516 +
517 +The Swift module **does not use UniFFI**. It calls the Rust C API directly via
518 +`@_silgen_name` declarations, communicating via JSON strings over the Expo
519 +Module bridge.
520 +
521 +This is different from the Swift XCFramework SDK (which uses UniFFI-generated
522 +`onde.swift`) and the Kotlin SDK (which uses UniFFI-generated `onde.kt`).
523 +
524 +---
525 +
526 +## Expo Module Definition Reference
527 +
528 +All methods in `OndeInferenceModule.swift` follow this pattern:
529 +
530 +| Expo construct | Use for |
531 +|---|---|
532 +| `Function(name)` | Synchronous calls (isLoaded, setSystemPrompt, etc.) |
533 +| `AsyncFunction(name)` | All calls that invoke Rust (model load, inference, etc.) |
534 +| `OnCreate` | Engine initialisation — run `configureApplicationFilesystem()` here |
535 +| `OnDestroy` | Engine cleanup — call `onde_engine_destroy` |
536 +
537 +Return types:
538 +- Simple sync functions: `Bool`, `Int`
539 +- All complex types: `String` — raw JSON from Rust, **never** `[String: Any]`
540 +
541 +---
542 +
543 +## TypeScript Bridge Contract
544 +
545 +### `OndeInferenceModule.ts` — raw native interface
546 +
547 +All async methods return `Promise<string>` (raw JSON strings from Rust):
548 +
549 +```typescript
550 +export interface OndeInferenceNativeModule {
551 + // Sync
552 + isLoaded(): boolean;
553 + setSystemPrompt(prompt: string): void;
554 + clearHistory(): number;
555 +
556 + // Async — all return JSON strings
557 + loadDefaultModel(systemPrompt: string | null, samplingJson: string | null): Promise<string>;
558 + sendMessage(message: string): Promise<string>;
559 + info(): Promise<string>;
560 + history(): Promise<string>;
561 +
562 + // Sync config — return JSON strings
563 + defaultModelConfig(): string;
564 + defaultSamplingConfig(): string;
565 +}
566 +```
567 +
568 +### `index.ts` — public API layer
569 +
570 +Serialises inputs to JSON, calls native, deserialises JSON responses:
571 +
572 +```typescript
573 +// Input serialisation (camelCase TS → snake_case Rust)
574 +function serializeSampling(config: SamplingConfig): string {
575 + return JSON.stringify({ temperature: config.temperature, top_p: config.topP, ... });
576 +}
577 +
578 +// Output deserialisation (snake_case Rust → camelCase TS)
579 +function parseResult<T>(json: string): T {
580 + const parsed = JSON.parse(json); // JSON.parse — expects a string
581 + if (parsed.error) throw new OndeError(parsed.error);
582 + return parsed as T;
583 +}
584 +```
585 +
586 +---
587 +
588 +## Metro Config for `file:..` SDK Development
589 +
590 +```js
591 +const { getDefaultConfig } = require("expo/metro-config");
592 +const path = require("path");
593 +
594 +const sdkRoot = path.resolve(__dirname, ".."); // ../sdk/react-native/
595 +const config = getDefaultConfig(__dirname);
596 +
597 +// 1. Watch the SDK so Metro picks up changes
598 +config.watchFolders = [sdkRoot];
599 +
600 +// 2. Map the package name to the SDK root
601 +config.resolver.extraNodeModules = {
602 + "@ondeinference/react-native": sdkRoot,
603 +};
604 +
605 +// 3. Allow transitive deps (e.g. @babel/runtime) to resolve from
606 +// the example's node_modules when files outside the example are processed
607 +config.resolver.nodeModulesPaths = [path.resolve(__dirname, "node_modules")];
608 +
609 +// 4. Block the SDK's own node_modules to prevent react-native version conflicts
610 +config.resolver.blockList = [
611 + new RegExp(
612 + path.resolve(sdkRoot, "node_modules").replace(/\\/g, "\\\\") + "/.*",
613 + ),
614 +];
615 +
616 +module.exports = config;
617 +```
618 +
619 +---
620 +
621 +## Rust C API Surface
622 +
623 +The Swift module binds to these C functions via `@_silgen_name`:
624 +
625 +| Function | Returns | Notes |
626 +|---|---|---|
627 +| `onde_engine_create` | `UnsafeMutableRawPointer?` | Allocates engine |
628 +| `onde_engine_destroy` | `void` | Frees engine |
629 +| `onde_engine_load_default_model` | `UnsafeMutablePointer<CChar>?` | JSON result string |
630 +| `onde_engine_load_model` | `UnsafeMutablePointer<CChar>?` | JSON result string |
631 +| `onde_engine_unload_model` | `UnsafeMutablePointer<CChar>?` | JSON result string |
632 +| `onde_engine_is_loaded` | `Bool` | Sync |
633 +| `onde_engine_info` | `UnsafeMutablePointer<CChar>?` | JSON result string |
634 +| `onde_engine_send_message` | `UnsafeMutablePointer<CChar>?` | JSON result string |
635 +| `onde_engine_generate` | `UnsafeMutablePointer<CChar>?` | JSON result string |
636 +| `onde_engine_history` | `UnsafeMutablePointer<CChar>?` | JSON array string |
637 +| `onde_engine_clear_history` | `UInt64` | Sync, count |
638 +| `onde_engine_set_system_prompt` | `void` | Sync |
639 +| `onde_engine_set_sampling` | `void` | Sync |
640 +| `onde_engine_push_history` | `void` | Sync |
641 +| `onde_free_string` | `void` | Must call for every non-null CChar* result |
642 +| `onde_default_model_config` | `UnsafeMutablePointer<CChar>?` | JSON result string |
643 +| `onde_qwen25_1_5b_config` | `UnsafeMutablePointer<CChar>?` | JSON result string |
644 +| `onde_qwen25_3b_config` | `UnsafeMutablePointer<CChar>?` | JSON result string |
645 +| `onde_default_sampling_config` | `UnsafeMutablePointer<CChar>?` | JSON result string |
646 +| `onde_deterministic_sampling_config` | `UnsafeMutablePointer<CChar>?` | JSON result string |
647 +| `onde_mobile_sampling_config` | `UnsafeMutablePointer<CChar>?` | JSON result string |
648 +
649 +**Always call `onde_free_string` after consuming each result pointer.** The
650 +Rust side allocates the string; Swift is responsible for freeing it.
651 +
652 +```swift
653 +private func consumeRustString(_ ptr: UnsafeMutablePointer<CChar>?) -> String? {
654 + guard let ptr = ptr else { return nil }
655 + let str = String(cString: ptr)
656 + onde_free_string(ptr) // ← must free every non-null pointer
657 + return str
658 +}
659 +```
660 +
661 +---
662 +
663 +## build-rust.sh — iOS Build Flow
664 +
665 +```bash
666 +# 1. Build both targets
667 +cargo build --manifest-path rust/Cargo.toml --target aarch64-apple-ios --release
668 +cargo build --manifest-path rust/Cargo.toml --target aarch64-apple-ios-sim --release
669 +
670 +# 2. Copy to separate dirs (same filename — cannot lipo)
671 +mkdir -p ios/rust/device ios/rust/simulator
672 +cp target/aarch64-apple-ios/release/libonde_react_native.a ios/rust/device/
673 +cp target/aarch64-apple-ios-sim/release/libonde_react_native.a ios/rust/simulator/
674 +
675 +# 3. Create XCFramework (CocoaPods picks right slice automatically)
676 +rm -rf ios/rust/OndeReactNative.xcframework
677 +xcodebuild -create-xcframework \
678 + -library ios/rust/device/libonde_react_native.a \
679 + -library ios/rust/simulator/libonde_react_native.a \
680 + -output ios/rust/OndeReactNative.xcframework
681 +```
682 +
683 +After rebuilding, run `pod install` in `example/ios/` and then
684 +`npx expo run:ios --device` or `npx expo run:ios` (simulator).
685 +
686 +---
687 +
688 +## Running on Physical Device
689 +
690 +```bash
691 +# From example/
692 +npx expo run:ios --device
693 +```
694 +
695 +For a physical device build you need:
696 +- Apple Developer team set in `app.json` → `expo.ios.appleTeamId`
697 +- The App Group `group.com.ondeinference.apps` registered in the developer portal
698 +- The App Group capability enabled on the App ID
699 +- `com.apple.developer.kernel.increased-memory-limit` in entitlements
700 +
701 +**Blank white screen on device** = Metro bundle not loading. Ensure:
702 +1. Metro is running (`npx expo start --clear`)
703 +2. Phone and Mac are on the same network (or use Tunnel)
704 +3. Rebuild after native changes (`npx expo run:ios --device` — not just `expo start`)
705 +
706 +---
707 +
708 +## .gitignore for the SDK
709 +
710 +```gitignore
711 +node_modules/
712 +build/ # tsc output
713 +rust/target/ # Rust build artifacts
714 +ios/build/
715 +ios/rust/*.a
716 +ios/rust/*.xcframework
717 +ios/rust/device/
718 +ios/rust/simulator/
719 +android/build/
720 +android/src/main/jniLibs/
721 +example/.expo/
722 +example/android/
723 +example/ios/build/
724 +example/ios/Pods/
725 +example/ios/.xcode.env.local
726 +.DS_Store
727 +*.xcuserstate
728 +```
729 +
730 +---
731 +
732 +## npm Publishing
733 +
734 +```bash
735 +cd sdk/react-native
736 +npm run build # tsc → build/
737 +npm publish # publishes build/, ios/, android/, scripts/
738 +```
739 +
740 +The `.npmignore` excludes:
741 +- `example/`
742 +- `rust/`
743 +- `node_modules/`
744 +- `src/` (consumers use the compiled `build/`)
745 +
746 +The `package.json` `files` field explicitly includes:
747 +`build/`, `ios/`, `android/`, `scripts/`, `expo-module.config.json`
748 +
749 +---
750 +
751 +## Common Pitfalls Table
752 +
753 +| Pitfall | Symptom | Fix |
754 +|---|---|---|
755 +| Missing `nodeModulesPaths` in metro.config.js | `Cannot resolve @babel/runtime/helpers/asyncToGenerator` | Add `config.resolver.nodeModulesPaths = [path.resolve(__dirname, "node_modules")]` |
756 +| Deployment target mismatch | Pod installs but `OndeInference` missing from `Podfile.lock` | Set `"ios.deploymentTarget": "16.0"` in `Podfile.properties.json` AND `app.json` |
757 +| Single `.a` file for device + simulator | Linker error: "building for iOS-simulator but linked for iOS" | Use `xcodebuild -create-xcframework` to bundle both slices |
758 +| Two `.a` files with same name in `vendored_libraries` | CocoaPods "conflicting names" error | Use `vendored_frameworks` with an XCFramework instead |
759 +| Swift returning `[String: Any]` from Expo Module | `JSON parse error: unexpected character: o` | Return `String` from all Expo Module functions; validate but do not deserialise |
760 +| `HF_HOME` not set on iOS | "error 0" or model load fails immediately | Call `configureApplicationFilesystem()` in `OnCreate` and before model load |
761 +| Wrong cache path (`OndeInference/huggingface/hub/`) | Models not shared across Onde apps | Use `<container>/models/hub/` to match Tauri/Swift convention |
762 +| `EngineStatus` lowercase from Rust | Input stays disabled after model loads; status shows as `"ready"` not `"Ready"` | Normalize in `refreshStatus()` with `switch(status.toLowerCase())` |
763 +| `FlatList` swallows taps | TextInput can't be focused | Add `keyboardShouldPersistTaps="handled"` to `FlatList` |
764 +| Model hangs on Simulator | Stuck in loading indefinitely | Test model loading on a physical device; Simulator is unreliable for this |
765 +| Stale `.part`/`.lock` files | Model download never completes on retry | Delete `models--<org>--<model>` from the shared container and retry |
766 +| `HF_TOKEN` not baked in | Auth fails on HuggingFace download; "401 Unauthorized" in Rust logs | Set `HF_TOKEN` env var **before** building the Rust static library |
767 +| `expo prebuild --clean` wipes `Podfile.properties.json` | Deployment target reverts to 15.1; autolinking drops OndeInference | Re-add `"ios.deploymentTarget": "16.0"` to `Podfile.properties.json` after every `--clean` |
768 +| Physical device blank white screen | App launches, nothing renders | Ensure Metro is running and on same network; use `npx expo run:ios --device` |
769 +| Running with `expo start` instead of `expo run:ios` | "Cannot find native module 'OndeInference'" | Custom native modules require a native build — use `expo run:ios` not Expo Go |
\ No newline at end of file
.agents/skills/sdk-releases/SKILL.md
+95 -11
@@ -27,8 +27,12 @@ in a single commit before tagging.**
27 | 1 | `Cargo.toml` (root) | `version` | `version = "0.1.3"` |
28 | 2 | `sdk/dart/pubspec.yaml` | `version` | `version: 0.1.3` |
29 | 3 | `sdk/dart/CHANGELOG.md` | New `## 0.1.3` section | Prepend at top of file |
30 -| 4 | `sdk/dart/rust/Cargo.lock` | `onde` package version | Run `cd sdk/dart/rust && cargo update -p onde` |
31 -| 5 | `Cargo.lock` (root) | `onde` package version | Run `cargo check` at repo root |
30 +| 4 | `sdk/react-native/package.json` | `version` | `"version": "0.1.3"` |
31 +| 5 | `sdk/react-native/rust/Cargo.toml` | `version` | `version = "0.1.3"` |
32 +| 6 | `sdk/react-native/CHANGELOG.md` | New `## 0.1.3` section | Prepend at top of file |
33 +| 7 | `sdk/dart/rust/Cargo.lock` | `onde` package version | Run `cd sdk/dart/rust && cargo update -p onde` |
34 +| 8 | `sdk/react-native/rust/Cargo.lock` | `onde` package version | Run `cd sdk/react-native/rust && cargo update -p onde` |
35 +| 9 | `Cargo.lock` (root) | `onde` package version | Run `cargo check` at repo root |
36
37 ### Files you do NOT manually edit
38
@@ -43,18 +47,25 @@ in a single commit before tagging.**
47 # 1. Edit Cargo.toml version (manual)
48 # 2. Edit sdk/dart/pubspec.yaml version (manual)
49 # 3. Prepend new section to sdk/dart/CHANGELOG.md (manual)
50 +# 4. Edit sdk/react-native/package.json version (manual)
51 +# 5. Edit sdk/react-native/rust/Cargo.toml version (manual)
52 +# 6. Prepend new section to sdk/react-native/CHANGELOG.md (manual)
53
47 -# 4. Sync lockfiles
54 +# 7. Sync lockfiles
55 cargo check # updates root Cargo.lock
56 cd sdk/dart/rust && cargo update -p onde # updates Dart SDK's Cargo.lock
50 -
51 -# 5. Verify
52 -grep '^version' Cargo.toml # "0.1.3"
53 -grep '^version:' sdk/dart/pubspec.yaml # 0.1.3
54 -grep 'name = "onde"' -A1 Cargo.lock # version = "0.1.3"
55 -grep 'name = "onde"' -A1 sdk/dart/rust/Cargo.lock # version = "0.1.3"
56 -
57 -# 6. Commit and tag
57 +cd sdk/react-native/rust && cargo update -p onde # updates React Native SDK's Cargo.lock
58 +
59 +# 8. Verify
60 +grep '^version' Cargo.toml # "0.1.3"
61 +grep '^version:' sdk/dart/pubspec.yaml # 0.1.3
62 +grep '"version"' sdk/react-native/package.json # "0.1.3"
63 +grep '^version' sdk/react-native/rust/Cargo.toml # "0.1.3"
64 +grep 'name = "onde"' -A1 Cargo.lock # version = "0.1.3"
65 +grep 'name = "onde"' -A1 sdk/dart/rust/Cargo.lock # version = "0.1.3"
66 +grep 'name = "onde"' -A1 sdk/react-native/rust/Cargo.lock # version = "0.1.3"
67 +
68 +# 9. Commit and tag
69 git add -A
70 git commit -m "0.1.3"
71 git tag 0.1.3
@@ -232,6 +243,7 @@ All four must match. If any pair diverges, the relevant CI job fails.
243 |--------|---------|---------|
244 | `ONDE_SWIFT_PAT` | `release-sdk-swift.yml` | Push commits + tags to `ondeinference/onde-swift`. Must be a PAT (not `GITHUB_TOKEN`) so it triggers workflows on `onde-swift`. Needs `contents: write` scope. |
245 | `PUB_CREDENTIALS` | `release-sdk-dart.yml` | Authenticate with pub.dev for `flutter pub publish`. Full JSON from `~/.config/dart/pub-credentials.json`. |
246 +| `NPM_TOKEN` | `release-sdk-npm.yml` | Authenticate with npm for `npm publish`. Granular access token scoped to the `@ondeinference` org with read+write packages. Create at npmjs.com → Access Tokens. |
247
248 ---
249
@@ -240,11 +252,17 @@ All four must match. If any pair diverges, the relevant CI job fails.
252 | Pitfall | Symptom | Fix |
253 |---------|---------|-----|
254 | Forgot to bump `pubspec.yaml` | Dart CI fails: "Tag '0.1.3' does not match pubspec.yaml version '0.1.2'" | Bump `sdk/dart/pubspec.yaml`, amend commit, re-tag |
255 +| Forgot to bump `sdk/react-native/package.json` | npm CI fails: "Tag '0.1.3' does not match package.json version '0.1.2'" | Bump `sdk/react-native/package.json`, amend commit, re-tag |
256 +| Forgot to bump `sdk/react-native/rust/Cargo.toml` | npm SDK's Rust bridge crate version drifts from the main crate | Bump `sdk/react-native/rust/Cargo.toml`, run `cd sdk/react-native/rust && cargo update -p onde` |
257 | Forgot to update `sdk/dart/rust/Cargo.lock` | Dart SDK's Rust bridge builds against stale `onde` version | Run `cd sdk/dart/rust && cargo update -p onde` |
258 +| Forgot to update `sdk/react-native/rust/Cargo.lock` | npm SDK's Rust bridge builds against stale `onde` version | Run `cd sdk/react-native/rust && cargo update -p onde` |
259 | Forgot to update `sdk/dart/CHANGELOG.md` | pub.dev shows stale changelog | Prepend new `## 0.1.3` section before tagging |
260 +| Forgot to update `sdk/react-native/CHANGELOG.md` | npm shows stale changelog | Prepend new `## 0.1.3` section before tagging |
261 | Tag has `v` prefix (`v0.1.3`) | CI does not trigger — tag pattern requires bare semver | Delete the tag, re-tag without `v` |
262 | `ONDE_SWIFT_PAT` expired | `onde-swift` push fails with 403 | Regenerate PAT at github.com/settings/tokens, update repo secret |
263 | `PUB_CREDENTIALS` expired | `flutter pub publish` fails with 401 | Run `dart pub login` locally, copy new credentials JSON to repo secret |
264 +| `NPM_TOKEN` expired | `npm publish` fails with 401/403 | Regenerate token at npmjs.com → Access Tokens, update repo secret |
265 +| npm version already published | `npm publish` exits with "already exists" | npm does not allow re-publishing the same version — bump to the next version |
266 | `onde-swift` tag already exists | Tag push skipped (warning emitted) | Delete remote tag first: `git push origin :refs/tags/0.1.3` |
267 | Force-pushed a tag on `onde-swift` | SPM users get stale `Package.resolved` | Never force-push. Delete + re-create instead. Advise consumers to run `swift package resolve` |
268 | XCFramework URL 404 | `swift package resolve` fails on consumer side | Ensure the `onde` GitHub Release was created BEFORE the `onde-swift` tag was pushed (the workflow handles this order automatically) |
@@ -327,6 +345,72 @@ step order within the workflow.
345 | crates.io | `onde` | `onde = "0.x"` | Manual `cargo publish` |
346 | Swift Package Index | `onde-swift` (org: `ondeinference`) | `import Onde` | `release-sdk-swift.yml` → `onde-swift/release.yml` |
347 | pub.dev | `onde_inference` | `import 'package:onde_inference/onde_inference.dart'` | `release-sdk-dart.yml` |
348 +| npm | `@ondeinference/react-native` | `import { OndeChatEngine } from "@ondeinference/react-native"` | Manual `npm publish --access public` |
349 +
350 +---
351 +
352 +---
353 +
354 +## React Native npm SDK
355 +
356 +**Package:** `@ondeinference/react-native` (scoped under `@ondeinference` org on npm)
357 +**Location:** `sdk/react-native/`
358 +**Architecture:** Expo native module wrapping Rust via C FFI
359 +
360 +### How it works
361 +
362 +```
363 +TypeScript (React Native)
364 + │ import { OndeChatEngine } from "@ondeinference/react-native"
365 + ▼
366 +Expo Module (Swift / Kotlin)
367 + │ OndeInferenceModule — calls C FFI functions via @_silgen_name (iOS) / JNI (Android)
368 + ▼
369 +Rust C FFI bridge (sdk/react-native/rust/)
370 + │ extern "C" functions with JSON serialization, global tokio::Runtime
371 + ▼
372 +onde crate (src/)
373 + │ ChatEngine — tokio::sync::Mutex, mistral.rs inference
374 + ▼
375 +mistral.rs → Metal (iOS) / CPU (Android)
376 +```
377 +
378 +### Key files
379 +
380 +| File | Purpose |
381 +|------|---------|
382 +| `sdk/react-native/package.json` | npm package — `@ondeinference/react-native` |
383 +| `sdk/react-native/expo-module.config.json` | Expo autolinking config |
384 +| `sdk/react-native/src/index.ts` | Public TypeScript API — `OndeChatEngine`, free functions, JSON ↔ camelCase conversion |
385 +| `sdk/react-native/src/types.ts` | TypeScript type definitions mirroring Rust types |
386 +| `sdk/react-native/src/OndeInferenceModule.ts` | `requireNativeModule("OndeInference")` bridge |
387 +| `sdk/react-native/rust/src/lib.rs` | C FFI exports (`extern "C"`) + Android JNI wrappers |
388 +| `sdk/react-native/ios/OndeInferenceModule.swift` | Swift Expo module — calls Rust via `@_silgen_name` |
389 +| `sdk/react-native/android/.../OndeInferenceModule.kt` | Kotlin Expo module — calls Rust via JNI `external fun` |
390 +| `sdk/react-native/scripts/build-rust.sh` | Cross-compile Rust for iOS (staticlib) + Android (cdylib) |
391 +
392 +### Building native libraries
393 +
394 +```bash
395 +# iOS (requires rustup targets: aarch64-apple-ios, aarch64-apple-ios-sim)
396 +cd sdk/react-native && ./scripts/build-rust.sh ios
397 +
398 +# Android (requires ANDROID_NDK_HOME)
399 +cd sdk/react-native && ./scripts/build-rust.sh android
400 +
401 +# Both
402 +cd sdk/react-native && ./scripts/build-rust.sh all
403 +```
404 +
405 +### Publishing to npm
406 +
407 +```bash
408 +cd sdk/react-native
409 +npm run build # TypeScript → build/
410 +npm publish --access public
411 +```
412 +
413 +The `--access public` flag is required for scoped packages on first publish.
414
415 ---
416
.github/workflows/release-sdk-npm.yml new
+116
@@ -0,0 +1,116 @@
1 +name: Release SDK npm
2 +
3 +on:
4 + push:
5 + tags:
6 + - "[0-9]+.[0-9]+.[0-9]+"
7 + workflow_dispatch:
8 +
9 +permissions:
10 + contents: read
11 +
12 +jobs:
13 + # ── Validate (every run) ──────────────────────────────────────────────────
14 + validate:
15 + name: Validate
16 + runs-on: ubuntu-latest
17 +
18 + outputs:
19 + version: ${{ steps.meta.outputs.version }}
20 +
21 + steps:
22 + - name: Checkout
23 + uses: actions/checkout@v6
24 +
25 + - name: Install node
26 + uses: actions/setup-node@v4
27 + with:
28 + node-version: 22
29 + registry-url: "https://registry.npmjs.org"
30 +
31 + # ── Read version ───────────────────────────────────────────────────────
32 +
33 + - name: Read version from package.json
34 + id: meta
35 + working-directory: sdk/react-native
36 + run: |
37 + VERSION=$(node -p "require('./package.json').version")
38 + echo "version=$VERSION" >> "$GITHUB_OUTPUT"
39 + echo "npm SDK version: $VERSION"
40 +
41 + # ── Validate tag = package.json version (tag push only) ────────────────
42 +
43 + - name: Validate tag matches package.json version
44 + if: startsWith(github.ref, 'refs/tags/')
45 + env:
46 + PKG_VERSION: ${{ steps.meta.outputs.version }}
47 + TAG: ${{ github.ref_name }}
48 + run: |
49 + if [ "$TAG" != "$PKG_VERSION" ]; then
50 + echo "::error::Tag '$TAG' does not match package.json version '$PKG_VERSION'. Update package.json or re-tag."
51 + exit 1
52 + fi
53 + echo "Version check passed: $PKG_VERSION"
54 +
55 + # ── Build & dry-run ────────────────────────────────────────────────────
56 +
57 + - name: Install dependencies
58 + working-directory: sdk/react-native
59 + run: npm install
60 +
61 + - name: Build TypeScript
62 + working-directory: sdk/react-native
63 + run: npm run build
64 +
65 + - name: Dry-run publish
66 + working-directory: sdk/react-native
67 + run: npm publish --dry-run --access public
68 +
69 + # ── Publish to npm (tag push only) ────────────────────────────────────────
70 + publish:
71 + name: Publish to npm
72 + needs: validate
73 + runs-on: ubuntu-latest
74 + if: startsWith(github.ref, 'refs/tags/')
75 +
76 + steps:
77 + - name: Checkout
78 + uses: actions/checkout@v6
79 +
80 + - name: Install node
81 + uses: actions/setup-node@v4
82 + with:
83 + node-version: 22
84 + registry-url: "https://registry.npmjs.org"
85 +
86 + - name: Install dependencies
87 + working-directory: sdk/react-native
88 + run: npm install
89 +
90 + - name: Build TypeScript
91 + working-directory: sdk/react-native
92 + run: npm run build
93 +
94 + # ── Publish ────────────────────────────────────────────────────────────
95 + # NPM_TOKEN must be a repository secret containing an npm access token
96 + # with publish permissions for the @ondeinference scope.
97 + #
98 + # To obtain the token:
99 + # 1. Log in to https://www.npmjs.com as a member of the @ondeinference org.
100 + # 2. Go to Access Tokens → Generate New Token → Granular Access Token.
101 + # 3. Scope it to the @ondeinference org with read+write packages.
102 + # 4. Add it as a repository secret named NPM_TOKEN on the onde repo.
103 + - name: Publish @ondeinference/react-native to npm
104 + working-directory: sdk/react-native
105 + env:
106 + NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
107 + run: |
108 + npm_package_name=$(node -p "require('./package.json').name")
109 + npm_package_version=$(node -p "require('./package.json').version")
110 +
111 + if npm view "${npm_package_name}@${npm_package_version}" version >/dev/null 2>&1; then
112 + echo "${npm_package_name}@${npm_package_version} already exists on npm, skipping publish"
113 + exit 0
114 + fi
115 +
116 + npm publish --access public
README.md
+3 -2
@@ -10,14 +10,15 @@
10
11 <p align="center">
12 <a href="https://crates.io/crates/onde"><img src="https://img.shields.io/crates/v/onde?style=flat-square&color=235843&labelColor=17211D&label=crates.io" alt="crates.io"></a>
13 - <a href="https://github.com/ondeinference/onde-swift"><img src="https://img.shields.io/badge/Swift%20Package%20Index-onde--swift-235843?style=flat-square&labelColor=17211D" alt="Swift SDK"></a>
13 + <a href="https://swiftpackageindex.com/ondeinference/onde-swift"><img src="https://img.shields.io/badge/Swift%20Package%20Index-onde--swift-235843?style=flat-square&labelColor=17211D" alt="Swift Package Index"></a>
14 <a href="https://pub.dev/packages/onde_inference"><img src="https://img.shields.io/pub/v/onde_inference?style=flat-square&color=235843&labelColor=17211D&label=pub.dev" alt="pub.dev"></a>
15 + <a href="https://www.npmjs.com/package/@ondeinference/react-native"><img src="https://img.shields.io/npm/v/@ondeinference/react-native?style=flat-square&color=235843&labelColor=17211D&label=npm" alt="npm"></a>
16 <a href="https://ondeinference.com"><img src="https://img.shields.io/badge/ondeinference.com-235843?style=flat-square&labelColor=17211D" alt="Website"></a>
17 <a href="https://apps.apple.com/se/developer/splitfire-ab/id1831430993"><img src="https://img.shields.io/badge/App%20Store-live-235843?style=flat-square&labelColor=17211D" alt="App Store"></a>
18 </p>
19
20 <p align="center">
20 - <a href="https://github.com/ondeinference/onde-swift">Swift SDK</a> · <a href="https://pub.dev/packages/onde_inference">Flutter SDK</a> · <a href="https://ondeinference.com">Website</a>
21 + <a href="https://github.com/ondeinference/onde-swift">Swift SDK</a> · <a href="https://pub.dev/packages/onde_inference">Flutter SDK</a> · <a href="https://www.npmjs.com/package/@ondeinference/react-native">React Native SDK</a> · <a href="https://ondeinference.com">Website</a>
22 </p>
23
24 ---
build.rs
+21 -9
@@ -5,19 +5,31 @@ fn main() {
5 // build-dep on `uniffi` with `features = ["build"]` is exercised and
6 // keeps compatibility if we ever switch to UDL-based generation.
7
8 - // ── tvOS: provide missing ___chkstk_darwin symbol ────────────────────
8 + // ── Apple: provide missing ___chkstk_darwin symbol ───────────────────
9 //
10 - // On macOS and iOS, `___chkstk_darwin` is exported by libSystem as a
11 - // stack probing function. On arm64, the kernel grows the stack via
12 - // guard pages so the probe is effectively a no-op. tvOS does NOT
13 - // export this symbol, but `aws-lc-sys` assembly (pulled in transitively
14 - // via reqwest → rustls → aws-lc-rs) references it unconditionally.
10 + // On macOS, `___chkstk_darwin` is exported by libSystem as a stack
11 + // probing function. On arm64 the kernel grows the stack via guard
12 + // pages so the probe is effectively a no-op `ret`.
13 //
16 - // We compile a tiny assembly stub that provides the symbol as a `ret`
17 - // instruction — only when targeting tvOS.
14 + // tvOS, visionOS, and watchOS do NOT export this symbol at all.
15 + //
16 + // iOS exports it in libSystem, but deployment-target mismatches
17 + // between dependencies (e.g. onig_sys built for iOS 26.0 linked
18 + // against a min-target of iOS 10.0) can cause the linker to fail
19 + // to resolve it. Providing the stub on iOS is harmless — if
20 + // libSystem already has the symbol the linker prefers it; if not,
21 + // our stub satisfies the reference.
22 + //
23 + // `aws-lc-sys` assembly (transitive via reqwest → rustls → aws-lc-rs)
24 + // references ___chkstk_darwin unconditionally, so we compile a tiny
25 + // `ret` stub for all non-macOS Apple targets.
26 let target_os = std::env::var("CARGO_CFG_TARGET_OS").unwrap_or_default();
27
20 - if target_os == "tvos" || target_os == "visionos" || target_os == "watchos" {
28 + if target_os == "ios"
29 + || target_os == "tvos"
30 + || target_os == "visionos"
31 + || target_os == "watchos"
32 + {
33 let manifest_dir = std::env::var("CARGO_MANIFEST_DIR").expect("CARGO_MANIFEST_DIR not set");
34 let asm_path = std::path::Path::new(&manifest_dir).join("scripts/tvos_chkstk.s");
35
sdk/dart/README.md
+66 -79
@@ -5,64 +5,54 @@
5 <h1 align="center">Onde Inference</h1>
6
7 <p align="center">
8 - <strong>On-device LLM inference for Flutter & Dart — optimized for <a href="https://en.wikipedia.org/wiki/Apple_silicon">Apple silicon</a>.</strong>
8 + <strong>On-device LLM inference for Flutter & Dart — Metal on iOS and macOS, CPU everywhere else.</strong>
9 </p>
10
11 <p align="center">
12 - <a href="https://crates.io/crates/onde"><img src="https://img.shields.io/crates/v/onde?style=flat-square&color=235843&labelColor=17211D&label=crates.io" alt="crates.io"></a>
13 - <a href="https://github.com/ondeinference/onde-swift"><img src="https://img.shields.io/badge/Swift%20Package%20Index-onde--swift-235843?style=flat-square&labelColor=17211D" alt="Swift SDK"></a>
12 <a href="https://pub.dev/packages/onde_inference"><img src="https://img.shields.io/pub/v/onde_inference?style=flat-square&color=235843&labelColor=17211D&label=pub.dev" alt="pub.dev"></a>
13 + <a href="https://crates.io/crates/onde"><img src="https://img.shields.io/crates/v/onde?style=flat-square&color=235843&labelColor=17211D&label=crates.io" alt="crates.io"></a>
14 + <a href="https://swiftpackageindex.com/ondeinference/onde-swift"><img src="https://img.shields.io/badge/Swift%20Package%20Index-onde--swift-235843?style=flat-square&labelColor=17211D" alt="Swift Package Index"></a>
15 + <a href="https://www.npmjs.com/package/@ondeinference/react-native"><img src="https://img.shields.io/npm/v/@ondeinference/react-native?style=flat-square&color=235843&labelColor=17211D&label=npm" alt="npm"></a>
16 <a href="https://ondeinference.com"><img src="https://img.shields.io/badge/ondeinference.com-235843?style=flat-square&labelColor=17211D" alt="Website"></a>
17 <a href="https://apps.apple.com/se/developer/splitfire-ab/id1831430993"><img src="https://img.shields.io/badge/App%20Store-live-235843?style=flat-square&labelColor=17211D" alt="App Store"></a>
18 </p>
19
20 <p align="center">
20 - <a href="https://crates.io/crates/onde">Rust SDK</a> · <a href="https://github.com/ondeinference/onde-swift">Swift SDK</a> · <a href="https://ondeinference.com">Website</a>
21 + <a href="https://github.com/ondeinference/onde">Rust SDK</a> · <a href="https://swiftpackageindex.com/ondeinference/onde-swift">Swift SDK</a> · <a href="https://www.npmjs.com/package/@ondeinference/react-native">React Native SDK</a> · <a href="https://ondeinference.com">Website</a>
22 </p>
23
24 ---
25
25 -## Features
26 -
27 -- 🚀 **On-device inference** — models run entirely on the local CPU or GPU; no network request is ever made during inference
28 -- ⚡ **Metal acceleration** on iOS and macOS (Apple silicon) for fast token generation
29 -- 💬 **Multi-turn chat** with automatic conversation history management
30 -- 🌊 **Streaming token delivery** via Dart `Stream<StreamChunk>` — display tokens as they are generated
31 -- 🤖 **Qwen 2.5 1.5B and 3B** GGUF Q4\_K\_M models, downloaded from HuggingFace Hub on first use and cached locally
32 -- 🎛️ **Configurable sampling** — temperature, top-p, top-k, min-p, max tokens, frequency/presence penalties
33 -- 📱 **Platform-aware defaults** — automatically selects the 1.5B model on mobile and the 3B model on desktop
34 -- 🦀 **Rust core** — the inference engine is written in Rust for safety, performance, and zero-overhead FFI
26 +Run Qwen 2.5 models inside your Flutter app. The model downloads from HuggingFace on first launch, then everything runs locally — no server, no API key, nothing leaves the device. Metal gives you ~15 tok/s on an iPhone 15 Pro; Android and desktop run on CPU, slower but it works.
27
36 ----
28 +Multi-turn chat, streaming, one-shot generation, configurable sampling — the full API is one import away.
29
30 ## Platform support
31
40 -| Platform | GPU backend | Default model | Notes |
41 -|----------|-------------|---------------|-------|
32 +| Platform | Backend | Default model | Notes |
33 +|----------|---------|---------------|-------|
34 | iOS 13+ | Metal | Qwen 2.5 1.5B (~941 MB) | Simulator uses `aarch64-apple-ios-sim` |
43 -| macOS 10.15+ | Metal | Qwen 2.5 3B (~1.93 GB) | Apple silicon & Intel supported |
44 -| Android (API 21+) | CPU | Qwen 2.5 1.5B (~941 MB) | arm64-v8a, armeabi-v7a, x86\_64, x86 |
45 -| Linux (x86\_64) | CPU | Qwen 2.5 3B (~1.93 GB) | CUDA builds possible — see docs |
46 -| Windows (x86\_64) | CPU | Qwen 2.5 3B (~1.93 GB) | CUDA builds possible — see docs |
35 +| macOS 10.15+ | Metal | Qwen 2.5 3B (~1.93 GB) | Apple silicon and Intel |
36 +| Android API 21+ | CPU | Qwen 2.5 1.5B (~941 MB) | arm64-v8a, armeabi-v7a, x86_64, x86 |
37 +| Linux x86_64 | CPU | Qwen 2.5 3B (~1.93 GB) | CUDA possible, see docs |
38 +| Windows x86_64 | CPU | Qwen 2.5 3B (~1.93 GB) | CUDA possible, see docs |
39
48 -> **Web is not supported.** On-device LLM inference requires native system access that is not available in a browser sandbox.
40 +Web is not supported. On-device inference needs native system access that browsers don't expose.
41
42 ---
43
44 ## Quick start
45
54 -### Add the dependency
55 -
46 ```yaml
47 dependencies:
48 onde_inference: ^0.1.0
49 ```
50
61 -> **Note:** The native inference engine is written in Rust and compiled automatically during the Flutter build. A working [Rust toolchain](https://rustup.rs) is required. The first build compiles the full dependency tree (~5–10 minutes cold, <1 minute incremental).
51 +The inference engine is Rust compiled via [flutter_rust_bridge](https://pub.dev/packages/flutter_rust_bridge). You need a working [Rust toolchain](https://rustup.rs). First build is slow (~5–10 min, compiling the full dep tree); incremental builds are under a minute.
52
53 ### Initialize
54
65 -Call `OndeInference.init()` **once** at application startup, before creating any `OndeChatEngine`:
55 +Call once at startup, before anything else:
56
57 ```dart
58 import 'package:onde_inference/onde_inference.dart';
@@ -77,12 +67,11 @@ void main() async {
67 ### Load a model
68
69 ```dart
80 -// Create the engine (synchronous — no model is loaded yet).
70 final engine = await OndeChatEngine.create();
71
83 -// Load the platform-appropriate default model.
84 -// On iOS / Android → Qwen 2.5 1.5B (~941 MB)
85 -// On macOS / Linux / Windows → Qwen 2.5 3B (~1.93 GB)
72 +// Picks the right model for the device:
73 +// iOS / Android → Qwen 2.5 1.5B (~941 MB)
74 +// macOS / Linux / Windows → Qwen 2.5 3B (~1.93 GB)
75 final elapsed = await engine.loadDefaultModel(
76 systemPrompt: 'You are a helpful assistant.',
77 );
@@ -104,15 +93,12 @@ final buffer = StringBuffer();
93
94 await for (final chunk in engine.streamMessage('Tell me a short story.')) {
95 buffer.write(chunk.delta);
107 -
108 - // Update your UI with the partial text on each chunk.
96 setState(() => _displayText = buffer.toString());
110 -
97 if (chunk.done) break;
98 }
99 ```
100
115 -### Check engine status
101 +### Engine status
102
103 ```dart
104 final info = await engine.info();
@@ -120,31 +106,31 @@ final info = await engine.info();
106 print(info.status); // EngineStatus.ready
107 print(info.modelName); // "Qwen 2.5 3B"
108 print(info.approxMemory); // "~1.93 GB"
123 -print(info.historyLength); // number of turns in the conversation
109 +print(info.historyLength); // number of turns so far
110 ```
111
126 -### Manage conversation history
112 +### History
113
114 ```dart
129 -// Retrieve the full history.
115 final history = await engine.history();
116 for (final msg in history) {
117 print('${msg.role}: ${msg.content}');
118 }
119
135 -// Clear history (keeps the model loaded).
120 +// Clear history but keep the model loaded.
121 final removed = await engine.clearHistory();
122 print('Cleared $removed messages.');
123
139 -// Seed history from a saved session without running inference.
124 +// Seed from a saved session — no inference runs.
125 await engine.pushHistory(ChatMessage.user('Hello from last session!'));
126 await engine.pushHistory(ChatMessage.assistant('Hi! How can I help today?'));
127 ```
128
144 -### One-shot generation (does not affect history)
129 +### One-shot generation
130 +
131 +Runs inference without touching conversation history. Good for prompt enhancement, classification, formatting.
132
133 ```dart
147 -// Useful for prompt enhancement, classification, summarisation, etc.
134 final result = await engine.generate(
135 [
136 ChatMessage.system('You are a JSON formatter. Output only valid JSON.'),
@@ -155,10 +141,9 @@ final result = await engine.generate(
141 print(result.text);
142 ```
143
158 -### Unload the model
144 +### Unload
145
146 ```dart
161 -// Release GPU / CPU memory when inference is no longer needed.
147 await engine.unloadModel();
148 ```
149
@@ -166,13 +151,11 @@ await engine.unloadModel();
151
152 ## Model selection
153
169 -Use `OndeInference` static helpers to pick a specific model:
170 -
154 ```dart
155 // Platform-aware default (recommended).
156 final config = OndeInference.defaultModelConfig();
157
175 -// Force a specific model regardless of platform.
158 +// Force a specific model.
159 final small = OndeInference.qwen251_5bConfig(); // ~941 MB
160 final medium = OndeInference.qwen253bConfig(); // ~1.93 GB
161 final coder = OndeInference.qwen25Coder3bConfig(); // ~1.93 GB, code-tuned
@@ -183,41 +166,43 @@ await engine.loadGgufModel(
166 );
167 ```
168
186 -### Supported models
187 -
188 -| Model | Size | Best for |
169 +| Model | Size | Good for |
170 |-------|------|----------|
190 -| Qwen 2.5 1.5B Instruct Q4\_K\_M | ~941 MB | iOS, tvOS, Android |
191 -| Qwen 2.5 3B Instruct Q4\_K\_M | ~1.93 GB | macOS, Linux, Windows |
192 -| Qwen 2.5 Coder 1.5B Instruct Q4\_K\_M | ~941 MB | Code generation on mobile |
193 -| Qwen 2.5 Coder 3B Instruct Q4\_K\_M | ~1.93 GB | Code generation on desktop |
171 +| Qwen 2.5 1.5B Instruct Q4_K_M | ~941 MB | iOS, tvOS, Android |
172 +| Qwen 2.5 3B Instruct Q4_K_M | ~1.93 GB | macOS, Linux, Windows |
173 +| Qwen 2.5 Coder 1.5B Instruct Q4_K_M | ~941 MB | Code on mobile |
174 +| Qwen 2.5 Coder 3B Instruct Q4_K_M | ~1.93 GB | Code on desktop |
175
176 ---
177
178 ## Sampling
179
180 +All fields are optional. `null` means "use the engine default".
181 +
182 ```dart
200 -// All fields are optional — null means "use the engine default".
183 final sampling = SamplingConfig(
202 - temperature: 0.7, // Higher = more creative, lower = more focused
203 - topP: 0.95, // Nucleus sampling cutoff
204 - topK: 40, // Top-k token limit
205 - maxTokens: 256, // Maximum reply length in tokens
184 + temperature: 0.7,
185 + topP: 0.95,
186 + topK: 40,
187 + maxTokens: 256,
188 );
189
190 await engine.setSampling(sampling);
191 +```
192 +
193 +Presets:
194
210 -// Or use a preset:
211 -await engine.setSampling(SamplingConfig.deterministic()); // greedy, temp=0.0
212 -await engine.setSampling(SamplingConfig.mobile()); // temp=0.7, max 128 tokens
213 -await engine.setSampling(SamplingConfig.defaultConfig()); // temp=0.7, max 512 tokens
195 +```dart
196 +SamplingConfig.defaultConfig() // temp=0.7, max 512 tokens
197 +SamplingConfig.deterministic() // greedy, temp=0.0
198 +SamplingConfig.mobile() // temp=0.7, max 128 tokens
199 ```
200
201 ---
202
203 ## Error handling
204
220 -All `OndeChatEngine` methods throw `OndeException` on failure:
205 +All engine methods throw `OndeException` on failure:
206
207 ```dart
208 try {
@@ -227,15 +212,14 @@ try {
212 }
213 ```
214
230 -Common causes:
231 -- **No model loaded** — calling `sendMessage` before `loadDefaultModel` / `loadGgufModel`
232 -- **Download failure** — check internet connectivity on first run (model files are fetched from HuggingFace Hub)
233 -- **Out of memory** — the 3B model requires ~2 GB of free RAM; use the 1.5B model on constrained devices
215 +Common causes: calling `sendMessage` before loading a model, no internet on first run (the model needs to download), or out of memory (the 3B model needs ~2 GB free — use 1.5B on constrained devices).
216
217 ---
218
219 ## Sandboxed app setup (iOS / macOS)
220
221 +On iOS and sandboxed macOS, the default HuggingFace cache path is outside the app container. Call `setupCacheDir()` once at startup to point it somewhere accessible:
222 +
223 ```dart
224 import 'package:onde_inference/onde_inference.dart';
225 import 'package:path_provider/path_provider.dart';
@@ -244,7 +228,6 @@ void main() async {
228 WidgetsFlutterBinding.ensureInitialized();
229 await OndeInference.init();
230
247 - // Resolve shared App Group container (iOS/macOS) or private sandbox (Android).
231 String? fallback;
232 if (Platform.isIOS || Platform.isAndroid) {
233 final dir = await getApplicationSupportDirectory();
@@ -256,27 +239,31 @@ void main() async {
239 }
240 ```
241
259 -> On iOS and macOS, `setupCacheDir()` first tries the App Group shared container (`group.com.ondeinference.apps`) so all Onde-powered apps share downloaded models. If unavailable, it falls back to the app's private directory.
242 +This first tries the App Group shared container (`group.com.ondeinference.apps`) so all Onde-powered apps share downloaded models. Falls back to the app's private directory if the App Group isn't configured.
243
244 ---
245
246 ## Contributing
247
265 -Contributions are welcome! The project is hosted at
266 -[github.com/ondeinference/onde](https://github.com/ondeinference/onde).
267 -
268 -- Rust source: `onde/src/`
269 -- Dart bridge Rust crate: `onde/sdk/dart/rust/`
270 -- Dart library: `onde/sdk/dart/lib/`
271 -- Example app: `onde/sdk/dart/example/`
248 +Source lives at [github.com/ondeinference/onde](https://github.com/ondeinference/onde):
249
273 -Please open an issue before submitting a pull request for significant changes.
250 +- Rust core: `src/`
251 +- Dart bridge crate: `sdk/dart/rust/`
252 +- Dart library: `sdk/dart/lib/`
253 +- Example app: `sdk/dart/example/`
254
275 ----
255 +Open an issue before sending large PRs.
256
257 ## License
258
279 -MIT © [Splitfire AB](https://splitfire.se) — see [LICENSE](LICENSE).
259 +Dual-licensed under **MIT** and **Apache 2.0**. Pick whichever works for you.
260 +
261 +- [MIT License](https://github.com/ondeinference/onde/blob/main/LICENSE-MIT)
262 +- [Apache License 2.0](https://github.com/ondeinference/onde/blob/main/LICENSE-APACHE)
263 +
264 +© 2026 [Splitfire AB](https://splitfire.se)
265 +
266 +---
267
268 <p align="center">
269 <sub>© 2026 <a href="https://ondeinference.com">Onde Inference</a></sub>
sdk/react-native/.gitignore new
+38
@@ -0,0 +1,38 @@
1 +# Dependencies
2 +node_modules/
3 +
4 +# TypeScript build output
5 +build/
6 +
7 +# Rust build output
8 +rust/target/
9 +
10 +# iOS native artifacts
11 +ios/build/
12 +ios/rust/*.a
13 +ios/rust/*.xcframework
14 +ios/rust/device/
15 +ios/rust/simulator/
16 +
17 +# Android native artifacts
18 +android/.cxx/
19 +android/build/
20 +android/src/main/jniLibs/
21 +
22 +# Expo / React Native generated app artifacts
23 +example/.expo/
24 +example/android/
25 +example/ios/build/
26 +example/ios/Pods/
27 +example/ios/.xcode.env.local
28 +
29 +# macOS / Xcode noise
30 +.DS_Store
31 +*.xcuserstate
32 +*.xcworkspace/xcuserdata/
33 +*.xcodeproj/xcuserdata/
34 +
35 +# Logs
36 +npm-debug.log*
37 +yarn-debug.log*
38 +yarn-error.log*
sdk/react-native/.npmignore new
+26
@@ -0,0 +1,26 @@
1 +# Example app
2 +example/
3 +
4 +# Rust build artifacts
5 +rust/target/
6 +rust/Cargo.lock
7 +
8 +# Scripts (build-rust.sh is in files[] but consumers don't need it)
9 +# Keep scripts/ included for source builds — remove this line if you want to exclude them
10 +
11 +# Development files
12 +.github/
13 +.vscode/
14 +.zed/
15 +*.log
16 +
17 +# TypeScript source (compiled output is in build/)
18 +src/
19 +
20 +# Config files not needed at runtime
21 +tsconfig.json
22 +CHANGELOG.md
23 +
24 +# OS files
25 +.DS_Store
26 +Thumbs.db
sdk/react-native/.npmrc new
+4
@@ -0,0 +1,4 @@
1 +# Do not auto-install peer dependencies when consumers run npm install inside
2 +# this package. Peers (expo, react, react-native) are provided by the host
3 +# app — installing them here causes version conflicts with Metro.
4 +legacy-peer-deps=true
sdk/react-native/CHANGELOG.md new
+12
@@ -0,0 +1,12 @@
1 +## 0.1.3
2 +
3 +* Initial release of the React Native Expo module.
4 +* Multi-turn chat inference with Qwen 2.5 1.5B and 3B GGUF models.
5 +* Metal acceleration on iOS (Apple silicon).
6 +* CPU inference on Android.
7 +* Platform-aware default model selection (1.5B on iOS / Android).
8 +* Conversation history management: `history()`, `clearHistory()`, `pushHistory()`.
9 +* One-shot `generate()` API that does not affect conversation history.
10 +* Configurable sampling: temperature, top-p, top-k, min-p, max tokens, penalties.
11 +* Built-in sampling presets: `defaultSamplingConfig()`, `deterministicSamplingConfig()`, `mobileSamplingConfig()`.
12 +* Engine status via `info()`: status, loaded model name, memory, history length.
\ No newline at end of file
sdk/react-native/README.md new
+153
@@ -0,0 +1,153 @@
1 +<p align="center">
2 + <img src="https://raw.githubusercontent.com/ondeinference/onde/main/assets/onde-inference-logo.svg" alt="Onde Inference" width="96">
3 +</p>
4 +
5 +<h1 align="center">Onde Inference</h1>
6 +
7 +<p align="center">
8 + <strong>On-device LLM inference for React Native — Metal on iOS, CPU on Android.</strong>
9 +</p>
10 +
11 +<p align="center">
12 + <a href="https://www.npmjs.com/package/@ondeinference/react-native"><img src="https://img.shields.io/npm/v/@ondeinference/react-native?style=flat-square&color=235843&labelColor=17211D&label=npm" alt="npm"></a>
13 + <a href="https://crates.io/crates/onde"><img src="https://img.shields.io/crates/v/onde?style=flat-square&color=235843&labelColor=17211D&label=crates.io" alt="crates.io"></a>
14 + <a href="https://swiftpackageindex.com/ondeinference/onde-swift"><img src="https://img.shields.io/badge/Swift%20Package%20Index-onde--swift-235843?style=flat-square&labelColor=17211D" alt="Swift Package Index"></a>
15 + <a href="https://pub.dev/packages/onde_inference"><img src="https://img.shields.io/pub/v/onde_inference?style=flat-square&color=235843&labelColor=17211D&label=pub.dev" alt="pub.dev"></a>
16 + <a href="https://ondeinference.com"><img src="https://img.shields.io/badge/ondeinference.com-235843?style=flat-square&labelColor=17211D" alt="Website"></a>
17 +</p>
18 +
19 +<p align="center">
20 + <a href="https://github.com/ondeinference/onde">Rust SDK</a> · <a href="https://swiftpackageindex.com/ondeinference/onde-swift">Swift SDK</a> · <a href="https://pub.dev/packages/onde_inference">Flutter SDK</a> · <a href="https://ondeinference.com">Website</a>
21 +</p>
22 +
23 +---
24 +
25 +Run Qwen 2.5 models on the phone. No server, no API key, nothing leaves the device.
26 +
27 +The model downloads from HuggingFace on first load, then runs locally. ~941 MB for the 1.5B variant. Metal gives you ~15 tok/s on an iPhone 15; Android runs on CPU, slower but works.
28 +
29 +## Installation
30 +
31 +```bash
32 +npx expo install @ondeinference/react-native
33 +```
34 +
35 +## Quick start
36 +
37 +```typescript
38 +import { OndeChatEngine, userMessage } from "@ondeinference/react-native";
39 +
40 +// Picks the right model for the device:
41 +// iOS → Qwen 2.5 1.5B (~941 MB, Metal)
42 +// Android → Qwen 2.5 1.5B (~941 MB, CPU)
43 +const seconds = await OndeChatEngine.loadDefaultModel(
44 + "You are a helpful assistant."
45 +);
46 +
47 +const reply = await OndeChatEngine.sendMessage("Hello!");
48 +console.log(reply.text);
49 +
50 +// One-shot — doesn't touch conversation history
51 +const expanded = await OndeChatEngine.generate(
52 + [userMessage("Expand: a cat in space")],
53 + { temperature: 0.0 }
54 +);
55 +
56 +await OndeChatEngine.unloadModel();
57 +```
58 +
59 +## Platforms
60 +
61 +| Platform | Backend | Default model |
62 +|----------|---------|---------------|
63 +| iOS | Metal | Qwen 2.5 1.5B (~941 MB) |
64 +| Android | CPU | Qwen 2.5 1.5B (~941 MB) |
65 +
66 +## API
67 +
68 +### OndeChatEngine
69 +
70 +| Method | Returns | What it does |
71 +|--------|---------|--------------|
72 +| `loadDefaultModel(systemPrompt?, sampling?)` | `Promise<number>` | Load the platform default. Returns load time in seconds. |
73 +| `loadModel(config, systemPrompt?, sampling?)` | `Promise<number>` | Load a specific GGUF model. |
74 +| `unloadModel()` | `Promise<string \| null>` | Drop the model, free memory. Returns the model name. |
75 +| `isLoaded()` | `boolean` | Is anything loaded right now? |
76 +| `info()` | `Promise<EngineInfo>` | Status, model name, memory, history length. |
77 +| `sendMessage(message)` | `Promise<InferenceResult>` | Chat turn. Appends to history automatically. |
78 +| `generate(messages, sampling?)` | `Promise<InferenceResult>` | One-shot. History stays untouched. |
79 +| `setSystemPrompt(prompt)` | `void` | Replace the system prompt. |
80 +| `clearSystemPrompt()` | `void` | Remove it. |
81 +| `setSampling(config)` | `void` | Swap sampling params. |
82 +| `history()` | `Promise<ChatMessage[]>` | Full conversation so far. |
83 +| `clearHistory()` | `number` | Wipe it. Returns how many messages were removed. |
84 +| `pushHistory(message)` | `void` | Inject a message without running inference. |
85 +
86 +### Helpers
87 +
88 +```typescript
89 +import {
90 + defaultModelConfig, // platform-aware (1.5B on mobile, 3B on desktop)
91 + qwen251_5bConfig, // force 1.5B (~941 MB)
92 + qwen253bConfig, // force 3B (~1.93 GB)
93 + defaultSamplingConfig, // temp=0.7, top_p=0.95, max_tokens=512
94 + deterministicSamplingConfig, // temp=0.0
95 + mobileSamplingConfig, // temp=0.7, max_tokens=128
96 + systemMessage,
97 + userMessage,
98 + assistantMessage,
99 +} from "@ondeinference/react-native";
100 +```
101 +
102 +## Example app
103 +
104 +There's a working chat app in [`example/`](./example):
105 +
106 +```bash
107 +cd example
108 +npm install
109 +npx expo run:ios
110 +```
111 +
112 +Single file, ~290 lines. Shows loading, chat, status, history management, and error handling.
113 +
114 +## Building from source
115 +
116 +You need Rust and the right cross-compilation targets.
117 +
118 +```bash
119 +# iOS
120 +rustup target add aarch64-apple-ios aarch64-apple-ios-sim
121 +./scripts/build-rust.sh ios
122 +
123 +# Android (set ANDROID_NDK_HOME first)
124 +rustup target add aarch64-linux-android armv7-linux-androideabi x86_64-linux-android i686-linux-android
125 +./scripts/build-rust.sh android
126 +```
127 +
128 +The script compiles the Rust FFI bridge in `rust/`, then copies the static lib (iOS) or shared libs (Android) into the right places under `ios/` and `android/`.
129 +
130 +## How it works
131 +
132 +```
133 +TypeScript → Expo Module (Swift / Kotlin) → Rust C FFI → onde crate → mistral.rs
134 + @_silgen_name (iOS) ↓
135 + JNI external (Android) Metal / CPU
136 +```
137 +
138 +The native module talks to Rust through `extern "C"` functions. Complex types cross the boundary as JSON strings — the TypeScript layer handles camelCase ↔ snake_case conversion. A global `tokio::Runtime` (created once) runs the async inference.
139 +
140 +## License
141 +
142 +Dual-licensed under **MIT** and **Apache 2.0**. Pick whichever works for you.
143 +
144 +- [MIT License](https://github.com/ondeinference/onde/blob/main/LICENSE-MIT)
145 +- [Apache License 2.0](https://github.com/ondeinference/onde/blob/main/LICENSE-APACHE)
146 +
147 +© 2026 [Splitfire AB](https://splitfire.se)
148 +
149 +---
150 +
151 +<p align="center">
152 + <sub>© 2026 <a href="https://ondeinference.com">Onde Inference</a></sub>
153 +</p>
sdk/react-native/android/build.gradle.kts new
+32
@@ -0,0 +1,32 @@
1 +plugins {
2 + id("com.android.library")
3 + id("org.jetbrains.kotlin.android")
4 +}
5 +
6 +android {
7 + namespace = "com.ondeinference"
8 + compileSdk = 34
9 +
10 + defaultConfig {
11 + minSdk = 24
12 + }
13 +
14 + compileOptions {
15 + sourceCompatibility = JavaVersion.VERSION_17
16 + targetCompatibility = JavaVersion.VERSION_17
17 + }
18 +
19 + kotlinOptions {
20 + jvmTarget = "17"
21 + }
22 +
23 + sourceSets {
24 + getByName("main") {
25 + jniLibs.srcDirs("src/main/jniLibs")
26 + }
27 + }
28 +}
29 +
30 +dependencies {
31 + implementation("expo:expo-modules-core:+")
32 +}
sdk/react-native/android/src/main/java/com/ondeinference/OndeInferenceModule.kt new
+145
@@ -0,0 +1,145 @@
1 +package com.ondeinference
2 +
3 +import expo.modules.kotlin.modules.Module
4 +import expo.modules.kotlin.modules.ModuleDefinition
5 +
6 +class OndeInferenceModule : Module() {
7 + companion object {
8 + init {
9 + System.loadLibrary("onde_react_native")
10 + }
11 + }
12 +
13 + private var enginePtr: Long = 0L
14 +
15 + // -- JNI native methods (implemented in Rust via #[cfg(target_os = "android")]) --
16 +
17 + private external fun nativeEngineCreate(): Long
18 + private external fun nativeEngineDestroy(engine: Long)
19 + private external fun nativeEngineLoadDefaultModel(
20 + engine: Long,
21 + systemPrompt: String?,
22 + samplingJson: String?
23 + ): String
24 +
25 + private external fun nativeEngineLoadModel(
26 + engine: Long,
27 + configJson: String,
28 + systemPrompt: String?,
29 + samplingJson: String?
30 + ): String
31 +
32 + private external fun nativeEngineUnloadModel(engine: Long): String
33 + private external fun nativeEngineIsLoaded(engine: Long): Boolean
34 + private external fun nativeEngineInfo(engine: Long): String
35 + private external fun nativeEngineSetSystemPrompt(engine: Long, prompt: String)
36 + private external fun nativeEngineClearSystemPrompt(engine: Long)
37 + private external fun nativeEngineSetSampling(engine: Long, samplingJson: String)
38 + private external fun nativeEngineHistory(engine: Long): String
39 + private external fun nativeEngineClearHistory(engine: Long): Long
40 + private external fun nativeEnginePushHistory(engine: Long, messageJson: String)
41 + private external fun nativeEngineSendMessage(engine: Long, message: String): String
42 + private external fun nativeEngineGenerate(
43 + engine: Long,
44 + messagesJson: String,
45 + samplingJson: String?
46 + ): String
47 +
48 + private external fun nativeDefaultModelConfig(): String
49 + private external fun nativeQwen251_5bConfig(): String
50 + private external fun nativeQwen253bConfig(): String
51 + private external fun nativeDefaultSamplingConfig(): String
52 + private external fun nativeDeterministicSamplingConfig(): String
53 + private external fun nativeMobileSamplingConfig(): String
54 +
55 + // -- Module definition --
56 +
57 + override fun definition() = ModuleDefinition {
58 + Name("OndeInference")
59 +
60 + OnCreate {
61 + enginePtr = nativeEngineCreate()
62 + }
63 +
64 + OnDestroy {
65 + if (enginePtr != 0L) {
66 + nativeEngineDestroy(enginePtr)
67 + enginePtr = 0L
68 + }
69 + }
70 +
71 + // -- Sync functions --
72 +
73 + Function("isLoaded") {
74 + if (enginePtr == 0L) return@Function false
75 + nativeEngineIsLoaded(enginePtr)
76 + }
77 +
78 + Function("setSystemPrompt") { prompt: String ->
79 + if (enginePtr != 0L) nativeEngineSetSystemPrompt(enginePtr, prompt)
80 + }
81 +
82 + Function("clearSystemPrompt") {
83 + if (enginePtr != 0L) nativeEngineClearSystemPrompt(enginePtr)
84 + }
85 +
86 + Function("setSampling") { samplingJson: String ->
87 + if (enginePtr != 0L) nativeEngineSetSampling(enginePtr, samplingJson)
88 + }
89 +
90 + Function("clearHistory") {
91 + if (enginePtr == 0L) return@Function 0L
92 + nativeEngineClearHistory(enginePtr)
93 + }
94 +
95 + Function("pushHistory") { messageJson: String ->
96 + if (enginePtr != 0L) nativeEnginePushHistory(enginePtr, messageJson)
97 + }
98 +
99 + // -- Config free functions (no engine needed) --
100 +
101 + Function("defaultModelConfig") { nativeDefaultModelConfig() }
102 + Function("qwen251_5bConfig") { nativeQwen251_5bConfig() }
103 + Function("qwen253bConfig") { nativeQwen253bConfig() }
104 + Function("defaultSamplingConfig") { nativeDefaultSamplingConfig() }
105 + Function("deterministicSamplingConfig") { nativeDeterministicSamplingConfig() }
106 + Function("mobileSamplingConfig") { nativeMobileSamplingConfig() }
107 +
108 + // -- Async functions --
109 +
110 + AsyncFunction("loadDefaultModel") { systemPrompt: String?, samplingJson: String? ->
111 + check(enginePtr != 0L) { "Engine not initialized" }
112 + nativeEngineLoadDefaultModel(enginePtr, systemPrompt, samplingJson)
113 + }
114 +
115 + AsyncFunction("loadModel") { configJson: String, systemPrompt: String?, samplingJson: String? ->
116 + check(enginePtr != 0L) { "Engine not initialized" }
117 + nativeEngineLoadModel(enginePtr, configJson, systemPrompt, samplingJson)
118 + }
119 +
120 + AsyncFunction("unloadModel") {
121 + check(enginePtr != 0L) { "Engine not initialized" }
122 + nativeEngineUnloadModel(enginePtr)
123 + }
124 +
125 + AsyncFunction("info") {
126 + check(enginePtr != 0L) { "Engine not initialized" }
127 + nativeEngineInfo(enginePtr)
128 + }
129 +
130 + AsyncFunction("history") {
131 + if (enginePtr == 0L) return@AsyncFunction "[]"
132 + nativeEngineHistory(enginePtr)
133 + }
134 +
135 + AsyncFunction("sendMessage") { message: String ->
136 + check(enginePtr != 0L) { "Engine not initialized" }
137 + nativeEngineSendMessage(enginePtr, message)
138 + }
139 +
140 + AsyncFunction("generate") { messagesJson: String, samplingJson: String? ->
141 + check(enginePtr != 0L) { "Engine not initialized" }
142 + nativeEngineGenerate(enginePtr, messagesJson, samplingJson)
143 + }
144 + }
145 +}
sdk/react-native/example/.gitignore new
+2
@@ -0,0 +1,2 @@
1 +node_modules
2 +.expo
sdk/react-native/example/App.tsx new
+355
@@ -0,0 +1,355 @@
1 +import React, { useState, useCallback } from "react";
2 +import {
3 + View,
4 + Text,
5 + TextInput,
6 + TouchableOpacity,
7 + FlatList,
8 + ActivityIndicator,
9 + SafeAreaView,
10 + KeyboardAvoidingView,
11 + Platform,
12 + Alert,
13 + StyleSheet,
14 +} from "react-native";
15 +import {
16 + OndeChatEngine,
17 + userMessage,
18 + type ChatMessage,
19 + type EngineStatus,
20 +} from "@ondeinference/react-native";
21 +
22 +interface DisplayMessage {
23 + id: string;
24 + role: "user" | "assistant";
25 + content: string;
26 + duration?: string;
27 +}
28 +
29 +const STATUS_COLORS: Record<EngineStatus, string> = {
30 + Unloaded: "#999",
31 + Loading: "#FF9500",
32 + Ready: "#34C759",
33 + Generating: "#007AFF",
34 + Error: "#FF3B30",
35 +};
36 +
37 +const App: React.FC = () => {
38 + const [messages, setMessages] = useState<DisplayMessage[]>([]);
39 + const [inputText, setInputText] = useState("");
40 + const [engineStatus, setEngineStatus] = useState<EngineStatus>("Unloaded");
41 + const [modelName, setModelName] = useState<string | null>(null);
42 + const [approxMemory, setApproxMemory] = useState<string | null>(null);
43 + const [isLoading, setIsLoading] = useState(false);
44 + const [isGenerating, setIsGenerating] = useState(false);
45 +
46 + const normalizeEngineStatus = useCallback((status: string): EngineStatus => {
47 + switch (status.toLowerCase()) {
48 + case "loading":
49 + return "Loading";
50 + case "ready":
51 + return "Ready";
52 + case "generating":
53 + return "Generating";
54 + case "error":
55 + return "Error";
56 + case "unloaded":
57 + default:
58 + return "Unloaded";
59 + }
60 + }, []);
61 +
62 + const refreshStatus = useCallback(async () => {
63 + try {
64 + const info = await OndeChatEngine.info();
65 + setEngineStatus(normalizeEngineStatus(info.status));
66 + setModelName(info.modelName ?? null);
67 + setApproxMemory(info.approxMemory ?? null);
68 + } catch {
69 + /* status refresh is best-effort */
70 + }
71 + }, [normalizeEngineStatus]);
72 +
73 + const handleLoadModel = useCallback(async () => {
74 + setIsLoading(true);
75 + setEngineStatus("Loading");
76 + try {
77 + const seconds = await OndeChatEngine.loadDefaultModel(
78 + "You are a helpful, concise assistant.",
79 + );
80 + await refreshStatus();
81 + Alert.alert("Model Loaded", `Ready in ${seconds.toFixed(1)}s`);
82 + } catch (error: unknown) {
83 + const message = error instanceof Error ? error.message : "Unknown error";
84 + Alert.alert("Load Failed", message);
85 + setEngineStatus("Unloaded");
86 + } finally {
87 + setIsLoading(false);
88 + }
89 + }, [refreshStatus]);
90 +
91 + const handleUnloadModel = useCallback(async () => {
92 + try {
93 + const name = await OndeChatEngine.unloadModel();
94 + setMessages([]);
95 + setEngineStatus("Unloaded");
96 + setModelName(null);
97 + setApproxMemory(null);
98 + if (name) {
99 + Alert.alert("Unloaded", `${name} has been unloaded.`);
100 + }
101 + } catch (error: unknown) {
102 + const message = error instanceof Error ? error.message : "Unknown error";
103 + Alert.alert("Unload Failed", message);
104 + }
105 + }, []);
106 +
107 + const handleSendMessage = useCallback(async () => {
108 + const text = inputText.trim();
109 + if (!text || !OndeChatEngine.isLoaded()) return;
110 +
111 + const userMsg: DisplayMessage = {
112 + id: Date.now().toString(),
113 + role: "user",
114 + content: text,
115 + };
116 + setMessages((previous) => [...previous, userMsg]);
117 + setInputText("");
118 + setIsGenerating(true);
119 + setEngineStatus("Generating");
120 +
121 + try {
122 + const result = await OndeChatEngine.sendMessage(text);
123 + const assistantMsg: DisplayMessage = {
124 + id: (Date.now() + 1).toString(),
125 + role: "assistant",
126 + content: result.text,
127 + duration: result.durationDisplay,
128 + };
129 + setMessages((previous) => [...previous, assistantMsg]);
130 + } catch (error: unknown) {
131 + const message = error instanceof Error ? error.message : "Unknown error";
132 + Alert.alert("Inference Error", message);
133 + } finally {
134 + setIsGenerating(false);
135 + await refreshStatus();
136 + }
137 + }, [inputText, refreshStatus]);
138 +
139 + const handleClearHistory = useCallback(() => {
140 + const removed = OndeChatEngine.clearHistory();
141 + setMessages([]);
142 + Alert.alert("History Cleared", `Removed ${removed} message(s).`);
143 + }, []);
144 +
145 + const renderMessage = useCallback(({ item }: { item: DisplayMessage }) => {
146 + const isUser = item.role === "user";
147 + return (
148 + <View
149 + style={[
150 + styles.messageBubble,
151 + isUser ? styles.userBubble : styles.assistantBubble,
152 + ]}
153 + >
154 + <Text style={isUser ? styles.userText : styles.assistantText}>
155 + {item.content}
156 + </Text>
157 + {item.duration && (
158 + <Text style={styles.durationText}>{item.duration}</Text>
159 + )}
160 + </View>
161 + );
162 + }, []);
163 +
164 + const isLoaded = engineStatus === "Ready" || engineStatus === "Generating";
165 + const canSend = isLoaded && inputText.trim().length > 0 && !isGenerating;
166 +
167 + return (
168 + <SafeAreaView style={styles.container}>
169 + <KeyboardAvoidingView
170 + style={styles.flex}
171 + behavior={Platform.OS === "ios" ? "padding" : undefined}
172 + >
173 + {/* Header */}
174 + <View style={styles.header}>
175 + <View style={styles.headerRow}>
176 + <Text style={styles.title}>Onde</Text>
177 + <View style={styles.statusBadge}>
178 + <View
179 + style={[
180 + styles.statusDot,
181 + { backgroundColor: STATUS_COLORS[engineStatus] },
182 + ]}
183 + />
184 + <Text style={styles.statusText}>{engineStatus}</Text>
185 + </View>
186 + </View>
187 + {modelName && (
188 + <Text style={styles.modelInfo}>
189 + {modelName}
190 + {approxMemory ? ` · ${approxMemory}` : ""}
191 + </Text>
192 + )}
193 + </View>
194 +
195 + {/* Message List */}
196 + <FlatList
197 + data={messages}
198 + renderItem={renderMessage}
199 + keyExtractor={(item) => item.id}
200 + style={styles.messageList}
201 + contentContainerStyle={styles.messageListContent}
202 + keyboardShouldPersistTaps="handled"
203 + />
204 +
205 + {/* Generating Indicator */}
206 + {isGenerating && (
207 + <View style={styles.generatingRow}>
208 + <ActivityIndicator size="small" color="#007AFF" />
209 + <Text style={styles.generatingText}>Generating…</Text>
210 + </View>
211 + )}
212 +
213 + {/* Bottom Controls */}
214 + <View style={styles.bottomArea}>
215 + <TouchableOpacity
216 + style={[styles.loadButton, isLoaded && styles.unloadButton]}
217 + onPress={isLoaded ? handleUnloadModel : handleLoadModel}
218 + disabled={isLoading}
219 + >
220 + {isLoading ? (
221 + <ActivityIndicator size="small" color="#fff" />
222 + ) : (
223 + <Text style={styles.loadButtonText}>
224 + {isLoaded ? "Unload" : "Load Model"}
225 + </Text>
226 + )}
227 + </TouchableOpacity>
228 +
229 + <View style={styles.inputRow}>
230 + <TextInput
231 + style={styles.textInput}
232 + value={inputText}
233 + onChangeText={setInputText}
234 + placeholder={isLoaded ? "Type a message…" : "Load a model first"}
235 + placeholderTextColor="#999"
236 + editable={isLoaded}
237 + returnKeyType="send"
238 + onSubmitEditing={canSend ? handleSendMessage : undefined}
239 + />
240 + <TouchableOpacity
241 + style={[styles.sendButton, !canSend && styles.sendButtonDisabled]}
242 + onPress={handleSendMessage}
243 + disabled={!canSend}
244 + >
245 + <Text style={styles.sendButtonText}>Send</Text>
246 + </TouchableOpacity>
247 + </View>
248 +
249 + {messages.length > 0 && (
250 + <TouchableOpacity
251 + style={styles.clearButton}
252 + onPress={handleClearHistory}
253 + >
254 + <Text style={styles.clearButtonText}>Clear History</Text>
255 + </TouchableOpacity>
256 + )}
257 + </View>
258 + </KeyboardAvoidingView>
259 + </SafeAreaView>
260 + );
261 +};
262 +
263 +const styles = StyleSheet.create({
264 + container: { flex: 1, backgroundColor: "#fff" },
265 + flex: { flex: 1 },
266 +
267 + header: {
268 + paddingHorizontal: 16,
269 + paddingVertical: 12,
270 + borderBottomWidth: StyleSheet.hairlineWidth,
271 + borderBottomColor: "#ddd",
272 + },
273 + headerRow: {
274 + flexDirection: "row",
275 + justifyContent: "space-between",
276 + alignItems: "center",
277 + },
278 + title: { fontSize: 20, fontWeight: "700", color: "#000" },
279 + statusBadge: { flexDirection: "row", alignItems: "center", gap: 6 },
280 + statusDot: { width: 8, height: 8, borderRadius: 4 },
281 + statusText: { fontSize: 13, color: "#666" },
282 + modelInfo: { fontSize: 12, color: "#999", marginTop: 4 },
283 +
284 + messageList: { flex: 1 },
285 + messageListContent: { padding: 16, gap: 10 },
286 + messageBubble: {
287 + maxWidth: "80%",
288 + paddingHorizontal: 14,
289 + paddingVertical: 10,
290 + borderRadius: 16,
291 + },
292 + userBubble: {
293 + alignSelf: "flex-end",
294 + backgroundColor: "#007AFF",
295 + borderBottomRightRadius: 4,
296 + },
297 + assistantBubble: {
298 + alignSelf: "flex-start",
299 + backgroundColor: "#F0F0F0",
300 + borderBottomLeftRadius: 4,
301 + },
302 + userText: { color: "#fff", fontSize: 15 },
303 + assistantText: { color: "#000", fontSize: 15 },
304 + durationText: { fontSize: 11, color: "#888", marginTop: 4 },
305 +
306 + generatingRow: {
307 + flexDirection: "row",
308 + alignItems: "center",
309 + gap: 8,
310 + paddingHorizontal: 16,
311 + paddingVertical: 6,
312 + },
313 + generatingText: { fontSize: 13, color: "#007AFF" },
314 +
315 + bottomArea: {
316 + padding: 12,
317 + borderTopWidth: StyleSheet.hairlineWidth,
318 + borderTopColor: "#ddd",
319 + gap: 10,
320 + },
321 + loadButton: {
322 + backgroundColor: "#007AFF",
323 + paddingVertical: 12,
324 + borderRadius: 10,
325 + alignItems: "center",
326 + },
327 + unloadButton: { backgroundColor: "#FF3B30" },
328 + loadButtonText: { color: "#fff", fontSize: 16, fontWeight: "600" },
329 +
330 + inputRow: { flexDirection: "row", gap: 8 },
331 + textInput: {
332 + flex: 1,
333 + borderWidth: StyleSheet.hairlineWidth,
334 + borderColor: "#ccc",
335 + borderRadius: 10,
336 + paddingHorizontal: 14,
337 + paddingVertical: 10,
338 + fontSize: 15,
339 + color: "#000",
340 + backgroundColor: "#FAFAFA",
341 + },
342 + sendButton: {
343 + backgroundColor: "#007AFF",
344 + paddingHorizontal: 18,
345 + borderRadius: 10,
346 + justifyContent: "center",
347 + },
348 + sendButtonDisabled: { backgroundColor: "#B0D4FF" },
349 + sendButtonText: { color: "#fff", fontSize: 15, fontWeight: "600" },
350 +
351 + clearButton: { alignSelf: "center", paddingVertical: 4 },
352 + clearButtonText: { fontSize: 13, color: "#999" },
353 +});
354 +
355 +export default App;
sdk/react-native/example/app.json new
+24
@@ -0,0 +1,24 @@
1 +{
2 + "expo": {
3 + "name": "Onde Example",
4 + "slug": "onde-example",
5 + "version": "0.0.1",
6 + "orientation": "portrait",
7 + "platforms": [
8 + "ios",
9 + "android"
10 + ],
11 + "ios": {
12 + "bundleIdentifier": "com.ondeinference.example",
13 + "supportsTablet": true,
14 + "deploymentTarget": "16.0",
15 + "appleTeamId": "2TQF86ZACD"
16 + },
17 + "android": {
18 + "package": "com.ondeinference.example",
19 + "adaptiveIcon": {
20 + "backgroundColor": "#ffffff"
21 + }
22 + }
23 + }
24 +}
sdk/react-native/example/babel.config.js new
+6
@@ -0,0 +1,6 @@
1 +module.exports = function (api) {
2 + api.cache(true);
3 + return {
4 + presets: ['babel-preset-expo'],
5 + };
6 +};
sdk/react-native/example/ios/.gitignore new
+30
@@ -0,0 +1,30 @@
1 +# OSX
2 +#
3 +.DS_Store
4 +
5 +# Xcode
6 +#
7 +build/
8 +*.pbxuser
9 +!default.pbxuser
10 +*.mode1v3
11 +!default.mode1v3
12 +*.mode2v3
13 +!default.mode2v3
14 +*.perspectivev3
15 +!default.perspectivev3
16 +xcuserdata
17 +*.xccheckout
18 +*.moved-aside
19 +DerivedData
20 +*.hmap
21 +*.ipa
22 +*.xcuserstate
23 +project.xcworkspace
24 +.xcode.env.local
25 +
26 +# Bundle artifacts
27 +*.jsbundle
28 +
29 +# CocoaPods
30 +/Pods/
sdk/react-native/example/ios/.xcode.env new
+11
@@ -0,0 +1,11 @@
1 +# This `.xcode.env` file is versioned and is used to source the environment
2 +# used when running script phases inside Xcode.
3 +# To customize your local environment, you can create an `.xcode.env.local`
4 +# file that is not versioned.
5 +
6 +# NODE_BINARY variable contains the PATH to the node executable.
7 +#
8 +# Customize the NODE_BINARY variable here.
9 +# For example, to use nvm with brew, add the following line
10 +# . "$(brew --prefix nvm)/nvm.sh" --no-use
11 +export NODE_BINARY=$(command -v node)
sdk/react-native/example/ios/OndeExample.xcodeproj/project.pbxproj new
+544
@@ -0,0 +1,544 @@
1 +// !$*UTF8*$!
2 +{
3 + archiveVersion = 1;
4 + classes = {
5 + };
6 + objectVersion = 46;
7 + objects = {
8 +
9 +/* Begin PBXBuildFile section */
10 + 13B07FBC1A68108700A75B9A /* AppDelegate.mm in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB01A68108700A75B9A /* AppDelegate.mm */; };
11 + 13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB51A68108700A75B9A /* Images.xcassets */; };
12 + 13B07FC11A68108700A75B9A /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB71A68108700A75B9A /* main.m */; };
13 + 3E461D99554A48A4959DE609 /* SplashScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = AA286B85B6C04FC6940260E9 /* SplashScreen.storyboard */; };
14 + 65602233CC63747F160FF6C4 /* PrivacyInfo.xcprivacy in Resources */ = {isa = PBXBuildFile; fileRef = 33B613E789AE691884D19254 /* PrivacyInfo.xcprivacy */; };
15 + 96905EF65AED1B983A6B3ABC /* libPods-OndeExample.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 58EEBF8E8E6FB1BC6CAF49B5 /* libPods-OndeExample.a */; };
16 + B18059E884C0ABDD17F3DC3D /* ExpoModulesProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAC715A2D49A985799AEE119 /* ExpoModulesProvider.swift */; };
17 + BB2F792D24A3F905000567C9 /* Expo.plist in Resources */ = {isa = PBXBuildFile; fileRef = BB2F792C24A3F905000567C9 /* Expo.plist */; };
18 + D22BB892B5DE4F71A74389A4 /* noop-file.swift in Sources */ = {isa = PBXBuildFile; fileRef = C7A3E5B9F06C4B61AA4A600E /* noop-file.swift */; };
19 +/* End PBXBuildFile section */
20 +
21 +/* Begin PBXFileReference section */
22 + 13B07F961A680F5B00A75B9A /* OndeExample.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = OndeExample.app; sourceTree = BUILT_PRODUCTS_DIR; };
23 + 13B07FAF1A68108700A75B9A /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AppDelegate.h; path = OndeExample/AppDelegate.h; sourceTree = "<group>"; };
24 + 13B07FB01A68108700A75B9A /* AppDelegate.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = AppDelegate.mm; path = OndeExample/AppDelegate.mm; sourceTree = "<group>"; };
25 + 13B07FB51A68108700A75B9A /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Images.xcassets; path = OndeExample/Images.xcassets; sourceTree = "<group>"; };
26 + 13B07FB61A68108700A75B9A /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = Info.plist; path = OndeExample/Info.plist; sourceTree = "<group>"; };
27 + 13B07FB71A68108700A75B9A /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = main.m; path = OndeExample/main.m; sourceTree = "<group>"; };
28 + 33B613E789AE691884D19254 /* PrivacyInfo.xcprivacy */ = {isa = PBXFileReference; includeInIndex = 1; name = PrivacyInfo.xcprivacy; path = OndeExample/PrivacyInfo.xcprivacy; sourceTree = "<group>"; };
29 + 58EEBF8E8E6FB1BC6CAF49B5 /* libPods-OndeExample.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-OndeExample.a"; sourceTree = BUILT_PRODUCTS_DIR; };
30 + 6C2E3173556A471DD304B334 /* Pods-OndeExample.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-OndeExample.debug.xcconfig"; path = "Target Support Files/Pods-OndeExample/Pods-OndeExample.debug.xcconfig"; sourceTree = "<group>"; };
31 + 7A4D352CD337FB3A3BF06240 /* Pods-OndeExample.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-OndeExample.release.xcconfig"; path = "Target Support Files/Pods-OndeExample/Pods-OndeExample.release.xcconfig"; sourceTree = "<group>"; };
32 + AA286B85B6C04FC6940260E9 /* SplashScreen.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; name = SplashScreen.storyboard; path = OndeExample/SplashScreen.storyboard; sourceTree = "<group>"; };
33 + BA61A6A8746D463398FFAE1A /* OndeExample-Bridging-Header.h */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 4; includeInIndex = 0; lastKnownFileType = sourcecode.c.h; name = "OndeExample-Bridging-Header.h"; path = "OndeExample/OndeExample-Bridging-Header.h"; sourceTree = "<group>"; };
34 + BB2F792C24A3F905000567C9 /* Expo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Expo.plist; sourceTree = "<group>"; };
35 + C7A3E5B9F06C4B61AA4A600E /* noop-file.swift */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 4; includeInIndex = 0; lastKnownFileType = sourcecode.swift; name = "noop-file.swift"; path = "OndeExample/noop-file.swift"; sourceTree = "<group>"; };
36 + ED297162215061F000B7C4FE /* JavaScriptCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = JavaScriptCore.framework; path = System/Library/Frameworks/JavaScriptCore.framework; sourceTree = SDKROOT; };
37 + FAC715A2D49A985799AEE119 /* ExpoModulesProvider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ExpoModulesProvider.swift; path = "Pods/Target Support Files/Pods-OndeExample/ExpoModulesProvider.swift"; sourceTree = "<group>"; };
38 +/* End PBXFileReference section */
39 +
40 +/* Begin PBXFrameworksBuildPhase section */
41 + 13B07F8C1A680F5B00A75B9A /* Frameworks */ = {
42 + isa = PBXFrameworksBuildPhase;
43 + buildActionMask = 2147483647;
44 + files = (
45 + 96905EF65AED1B983A6B3ABC /* libPods-OndeExample.a in Frameworks */,
46 + );
47 + runOnlyForDeploymentPostprocessing = 0;
48 + };
49 +/* End PBXFrameworksBuildPhase section */
50 +
51 +/* Begin PBXGroup section */
52 + 13B07FAE1A68108700A75B9A /* OndeExample */ = {
53 + isa = PBXGroup;
54 + children = (
55 + BB2F792B24A3F905000567C9 /* Supporting */,
56 + 13B07FAF1A68108700A75B9A /* AppDelegate.h */,
57 + 13B07FB01A68108700A75B9A /* AppDelegate.mm */,
58 + 13B07FB51A68108700A75B9A /* Images.xcassets */,
59 + 13B07FB61A68108700A75B9A /* Info.plist */,
60 + 13B07FB71A68108700A75B9A /* main.m */,
61 + AA286B85B6C04FC6940260E9 /* SplashScreen.storyboard */,
62 + C7A3E5B9F06C4B61AA4A600E /* noop-file.swift */,
63 + BA61A6A8746D463398FFAE1A /* OndeExample-Bridging-Header.h */,
64 + 33B613E789AE691884D19254 /* PrivacyInfo.xcprivacy */,
65 + );
66 + name = OndeExample;
67 + sourceTree = "<group>";
68 + };
69 + 2D16E6871FA4F8E400B85C8A /* Frameworks */ = {
70 + isa = PBXGroup;
71 + children = (
72 + ED297162215061F000B7C4FE /* JavaScriptCore.framework */,
73 + 58EEBF8E8E6FB1BC6CAF49B5 /* libPods-OndeExample.a */,
74 + );
75 + name = Frameworks;
76 + sourceTree = "<group>";
77 + };
78 + 832341AE1AAA6A7D00B99B32 /* Libraries */ = {
79 + isa = PBXGroup;
80 + children = (
81 + );
82 + name = Libraries;
83 + sourceTree = "<group>";
84 + };
85 + 83CBB9F61A601CBA00E9B192 = {
86 + isa = PBXGroup;
87 + children = (
88 + 13B07FAE1A68108700A75B9A /* OndeExample */,
89 + 832341AE1AAA6A7D00B99B32 /* Libraries */,
90 + 83CBBA001A601CBA00E9B192 /* Products */,
91 + 2D16E6871FA4F8E400B85C8A /* Frameworks */,
92 + D65327D7A22EEC0BE12398D9 /* Pods */,
93 + D7E4C46ADA2E9064B798F356 /* ExpoModulesProviders */,
94 + );
95 + indentWidth = 2;
96 + sourceTree = "<group>";
97 + tabWidth = 2;
98 + usesTabs = 0;
99 + };
100 + 83CBBA001A601CBA00E9B192 /* Products */ = {
101 + isa = PBXGroup;
102 + children = (
103 + 13B07F961A680F5B00A75B9A /* OndeExample.app */,
104 + );
105 + name = Products;
106 + sourceTree = "<group>";
107 + };
108 + 92DBD88DE9BF7D494EA9DA96 /* OndeExample */ = {
109 + isa = PBXGroup;
110 + children = (
111 + FAC715A2D49A985799AEE119 /* ExpoModulesProvider.swift */,
112 + );
113 + name = OndeExample;
114 + sourceTree = "<group>";
115 + };
116 + BB2F792B24A3F905000567C9 /* Supporting */ = {
117 + isa = PBXGroup;
118 + children = (
119 + BB2F792C24A3F905000567C9 /* Expo.plist */,
120 + );
121 + name = Supporting;
122 + path = OndeExample/Supporting;
123 + sourceTree = "<group>";
124 + };
125 + D65327D7A22EEC0BE12398D9 /* Pods */ = {
126 + isa = PBXGroup;
127 + children = (
128 + 6C2E3173556A471DD304B334 /* Pods-OndeExample.debug.xcconfig */,
129 + 7A4D352CD337FB3A3BF06240 /* Pods-OndeExample.release.xcconfig */,
130 + );
131 + path = Pods;
132 + sourceTree = "<group>";
133 + };
134 + D7E4C46ADA2E9064B798F356 /* ExpoModulesProviders */ = {
135 + isa = PBXGroup;
136 + children = (
137 + 92DBD88DE9BF7D494EA9DA96 /* OndeExample */,
138 + );
139 + name = ExpoModulesProviders;
140 + sourceTree = "<group>";
141 + };
142 +/* End PBXGroup section */
143 +
144 +/* Begin PBXNativeTarget section */
145 + 13B07F861A680F5B00A75B9A /* OndeExample */ = {
146 + isa = PBXNativeTarget;
147 + buildConfigurationList = 13B07F931A680F5B00A75B9A /* Build configuration list for PBXNativeTarget "OndeExample" */;
148 + buildPhases = (
149 + 08A4A3CD28434E44B6B9DE2E /* [CP] Check Pods Manifest.lock */,
150 + 4CC4F840FD8FA60F978E7148 /* [Expo] Configure project */,
151 + 13B07F871A680F5B00A75B9A /* Sources */,
152 + 13B07F8C1A680F5B00A75B9A /* Frameworks */,
153 + 13B07F8E1A680F5B00A75B9A /* Resources */,
154 + 00DD1BFF1BD5951E006B06BC /* Bundle React Native code and images */,
155 + 800E24972A6A228C8D4807E9 /* [CP] Copy Pods Resources */,
156 + 2820F888B11F427A8951101F /* [CP] Embed Pods Frameworks */,
157 + );
158 + buildRules = (
159 + );
160 + dependencies = (
161 + );
162 + name = OndeExample;
163 + productName = OndeExample;
164 + productReference = 13B07F961A680F5B00A75B9A /* OndeExample.app */;
165 + productType = "com.apple.product-type.application";
166 + };
167 +/* End PBXNativeTarget section */
168 +
169 +/* Begin PBXProject section */
170 + 83CBB9F71A601CBA00E9B192 /* Project object */ = {
171 + isa = PBXProject;
172 + attributes = {
173 + LastUpgradeCheck = 1130;
174 + TargetAttributes = {
175 + 13B07F861A680F5B00A75B9A = {
176 + LastSwiftMigration = 1250;
177 + DevelopmentTeam = "2TQF86ZACD";
178 + ProvisioningStyle = Automatic;
179 + };
180 + };
181 + };
182 + buildConfigurationList = 83CBB9FA1A601CBA00E9B192 /* Build configuration list for PBXProject "OndeExample" */;
183 + compatibilityVersion = "Xcode 3.2";
184 + developmentRegion = en;
185 + hasScannedForEncodings = 0;
186 + knownRegions = (
187 + en,
188 + Base,
189 + );
190 + mainGroup = 83CBB9F61A601CBA00E9B192;
191 + productRefGroup = 83CBBA001A601CBA00E9B192 /* Products */;
192 + projectDirPath = "";
193 + projectRoot = "";
194 + targets = (
195 + 13B07F861A680F5B00A75B9A /* OndeExample */,
196 + );
197 + };
198 +/* End PBXProject section */
199 +
200 +/* Begin PBXResourcesBuildPhase section */
201 + 13B07F8E1A680F5B00A75B9A /* Resources */ = {
202 + isa = PBXResourcesBuildPhase;
203 + buildActionMask = 2147483647;
204 + files = (
205 + BB2F792D24A3F905000567C9 /* Expo.plist in Resources */,
206 + 13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */,
207 + 3E461D99554A48A4959DE609 /* SplashScreen.storyboard in Resources */,
208 + 65602233CC63747F160FF6C4 /* PrivacyInfo.xcprivacy in Resources */,
209 + );
210 + runOnlyForDeploymentPostprocessing = 0;
211 + };
212 +/* End PBXResourcesBuildPhase section */
213 +
214 +/* Begin PBXShellScriptBuildPhase section */
215 + 00DD1BFF1BD5951E006B06BC /* Bundle React Native code and images */ = {
216 + isa = PBXShellScriptBuildPhase;
217 + alwaysOutOfDate = 1;
218 + buildActionMask = 2147483647;
219 + files = (
220 + );
221 + inputPaths = (
222 + );
223 + name = "Bundle React Native code and images";
224 + outputPaths = (
225 + );
226 + runOnlyForDeploymentPostprocessing = 0;
227 + shellPath = /bin/sh;
228 + shellScript = "if [[ -f \"$PODS_ROOT/../.xcode.env\" ]]; then\n source \"$PODS_ROOT/../.xcode.env\"\nfi\nif [[ -f \"$PODS_ROOT/../.xcode.env.local\" ]]; then\n source \"$PODS_ROOT/../.xcode.env.local\"\nfi\n\n# The project root by default is one level up from the ios directory\nexport PROJECT_ROOT=\"$PROJECT_DIR\"/..\n\nif [[ \"$CONFIGURATION\" = *Debug* ]]; then\n export SKIP_BUNDLING=1\nfi\nif [[ -z \"$ENTRY_FILE\" ]]; then\n # Set the entry JS file using the bundler's entry resolution.\n export ENTRY_FILE=\"$(\"$NODE_BINARY\" -e \"require('expo/scripts/resolveAppEntry')\" \"$PROJECT_ROOT\" ios absolute | tail -n 1)\"\nfi\n\nif [[ -z \"$CLI_PATH\" ]]; then\n # Use Expo CLI\n export CLI_PATH=\"$(\"$NODE_BINARY\" --print \"require.resolve('@expo/cli', { paths: [require.resolve('expo/package.json')] })\")\"\nfi\nif [[ -z \"$BUNDLE_COMMAND\" ]]; then\n # Default Expo CLI command for bundling\n export BUNDLE_COMMAND=\"export:embed\"\nfi\n\n# Source .xcode.env.updates if it exists to allow\n# SKIP_BUNDLING to be unset if needed\nif [[ -f \"$PODS_ROOT/../.xcode.env.updates\" ]]; then\n source \"$PODS_ROOT/../.xcode.env.updates\"\nfi\n# Source local changes to allow overrides\n# if needed\nif [[ -f \"$PODS_ROOT/../.xcode.env.local\" ]]; then\n source \"$PODS_ROOT/../.xcode.env.local\"\nfi\n\n`\"$NODE_BINARY\" --print \"require('path').dirname(require.resolve('react-native/package.json')) + '/scripts/react-native-xcode.sh'\"`\n\n";
229 + };
230 + 08A4A3CD28434E44B6B9DE2E /* [CP] Check Pods Manifest.lock */ = {
231 + isa = PBXShellScriptBuildPhase;
232 + buildActionMask = 2147483647;
233 + files = (
234 + );
235 + inputFileListPaths = (
236 + );
237 + inputPaths = (
238 + "${PODS_PODFILE_DIR_PATH}/Podfile.lock",
239 + "${PODS_ROOT}/Manifest.lock",
240 + );
241 + name = "[CP] Check Pods Manifest.lock";
242 + outputFileListPaths = (
243 + );
244 + outputPaths = (
245 + "$(DERIVED_FILE_DIR)/Pods-OndeExample-checkManifestLockResult.txt",
246 + );
247 + runOnlyForDeploymentPostprocessing = 0;
248 + shellPath = /bin/sh;
249 + 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";
250 + showEnvVarsInLog = 0;
251 + };
252 + 2820F888B11F427A8951101F /* [CP] Embed Pods Frameworks */ = {
253 + isa = PBXShellScriptBuildPhase;
254 + buildActionMask = 2147483647;
255 + files = (
256 + );
257 + inputPaths = (
258 + "${PODS_ROOT}/Target Support Files/Pods-OndeExample/Pods-OndeExample-frameworks.sh",
259 + "${PODS_XCFRAMEWORKS_BUILD_DIR}/hermes-engine/Pre-built/hermes.framework/hermes",
260 + );
261 + name = "[CP] Embed Pods Frameworks";
262 + outputPaths = (
263 + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/hermes.framework",
264 + );
265 + runOnlyForDeploymentPostprocessing = 0;
266 + shellPath = /bin/sh;
267 + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-OndeExample/Pods-OndeExample-frameworks.sh\"\n";
268 + showEnvVarsInLog = 0;
269 + };
270 + 4CC4F840FD8FA60F978E7148 /* [Expo] Configure project */ = {
271 + isa = PBXShellScriptBuildPhase;
272 + alwaysOutOfDate = 1;
273 + buildActionMask = 2147483647;
274 + files = (
275 + );
276 + inputFileListPaths = (
277 + );
278 + inputPaths = (
279 + );
280 + name = "[Expo] Configure project";
281 + outputFileListPaths = (
282 + );
283 + outputPaths = (
284 + );
285 + runOnlyForDeploymentPostprocessing = 0;
286 + shellPath = /bin/sh;
287 + shellScript = "# This script configures Expo modules and generates the modules provider file.\nbash -l -c \"./Pods/Target\\ Support\\ Files/Pods-OndeExample/expo-configure-project.sh\"\n";
288 + };
289 + 800E24972A6A228C8D4807E9 /* [CP] Copy Pods Resources */ = {
290 + isa = PBXShellScriptBuildPhase;
291 + buildActionMask = 2147483647;
292 + files = (
293 + );
294 + inputPaths = (
295 + "${PODS_ROOT}/Target Support Files/Pods-OndeExample/Pods-OndeExample-resources.sh",
296 + "${PODS_CONFIGURATION_BUILD_DIR}/EXConstants/EXConstants.bundle",
297 + "${PODS_CONFIGURATION_BUILD_DIR}/EXConstants/ExpoConstants_privacy.bundle",
298 + "${PODS_CONFIGURATION_BUILD_DIR}/RCT-Folly/RCT-Folly_privacy.bundle",
299 + "${PODS_CONFIGURATION_BUILD_DIR}/React-Core/React-Core_privacy.bundle",
300 + "${PODS_CONFIGURATION_BUILD_DIR}/React-cxxreact/React-cxxreact_privacy.bundle",
301 + "${PODS_CONFIGURATION_BUILD_DIR}/boost/boost_privacy.bundle",
302 + "${PODS_CONFIGURATION_BUILD_DIR}/glog/glog_privacy.bundle",
303 + );
304 + name = "[CP] Copy Pods Resources";
305 + outputPaths = (
306 + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/EXConstants.bundle",
307 + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/ExpoConstants_privacy.bundle",
308 + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/RCT-Folly_privacy.bundle",
309 + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/React-Core_privacy.bundle",
310 + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/React-cxxreact_privacy.bundle",
311 + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/boost_privacy.bundle",
312 + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/glog_privacy.bundle",
313 + );
314 + runOnlyForDeploymentPostprocessing = 0;
315 + shellPath = /bin/sh;
316 + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-OndeExample/Pods-OndeExample-resources.sh\"\n";
317 + showEnvVarsInLog = 0;
318 + };
319 +/* End PBXShellScriptBuildPhase section */
320 +
321 +/* Begin PBXSourcesBuildPhase section */
322 + 13B07F871A680F5B00A75B9A /* Sources */ = {
323 + isa = PBXSourcesBuildPhase;
324 + buildActionMask = 2147483647;
325 + files = (
326 + 13B07FBC1A68108700A75B9A /* AppDelegate.mm in Sources */,
327 + 13B07FC11A68108700A75B9A /* main.m in Sources */,
328 + B18059E884C0ABDD17F3DC3D /* ExpoModulesProvider.swift in Sources */,
329 + D22BB892B5DE4F71A74389A4 /* noop-file.swift in Sources */,
330 + );
331 + runOnlyForDeploymentPostprocessing = 0;
332 + };
333 +/* End PBXSourcesBuildPhase section */
334 +
335 +/* Begin XCBuildConfiguration section */
336 + 13B07F941A680F5B00A75B9A /* Debug */ = {
337 + isa = XCBuildConfiguration;
338 + baseConfigurationReference = 6C2E3173556A471DD304B334 /* Pods-OndeExample.debug.xcconfig */;
339 + buildSettings = {
340 + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
341 + CLANG_ENABLE_MODULES = YES;
342 + CODE_SIGN_ENTITLEMENTS = OndeExample/OndeExample.entitlements;
343 + CURRENT_PROJECT_VERSION = 1;
344 + ENABLE_BITCODE = NO;
345 + GCC_PREPROCESSOR_DEFINITIONS = (
346 + "$(inherited)",
347 + "FB_SONARKIT_ENABLED=1",
348 + );
349 + INFOPLIST_FILE = OndeExample/Info.plist;
350 + IPHONEOS_DEPLOYMENT_TARGET = 16.0;
351 + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
352 + MARKETING_VERSION = 1.0;
353 + OTHER_LDFLAGS = (
354 + "$(inherited)",
355 + "-ObjC",
356 + "-lc++",
357 + );
358 + OTHER_SWIFT_FLAGS = "$(inherited) -D EXPO_CONFIGURATION_DEBUG";
359 + PRODUCT_BUNDLE_IDENTIFIER = com.ondeinference.example;
360 + PRODUCT_NAME = OndeExample;
361 + SWIFT_OBJC_BRIDGING_HEADER = "OndeExample/OndeExample-Bridging-Header.h";
362 + SWIFT_OPTIMIZATION_LEVEL = "-Onone";
363 + SWIFT_VERSION = 5.0;
364 + TARGETED_DEVICE_FAMILY = "1,2";
365 + VERSIONING_SYSTEM = "apple-generic";
366 + DEVELOPMENT_TEAM = "2TQF86ZACD";
367 + CODE_SIGN_IDENTITY = "Apple Development";
368 + CODE_SIGN_STYLE = Automatic;
369 + };
370 + name = Debug;
371 + };
372 + 13B07F951A680F5B00A75B9A /* Release */ = {
373 + isa = XCBuildConfiguration;
374 + baseConfigurationReference = 7A4D352CD337FB3A3BF06240 /* Pods-OndeExample.release.xcconfig */;
375 + buildSettings = {
376 + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
377 + CLANG_ENABLE_MODULES = YES;
378 + CODE_SIGN_ENTITLEMENTS = OndeExample/OndeExample.entitlements;
379 + CURRENT_PROJECT_VERSION = 1;
380 + INFOPLIST_FILE = OndeExample/Info.plist;
381 + IPHONEOS_DEPLOYMENT_TARGET = 16.0;
382 + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
383 + MARKETING_VERSION = 1.0;
384 + OTHER_LDFLAGS = (
385 + "$(inherited)",
386 + "-ObjC",
387 + "-lc++",
388 + );
389 + OTHER_SWIFT_FLAGS = "$(inherited) -D EXPO_CONFIGURATION_RELEASE";
390 + PRODUCT_BUNDLE_IDENTIFIER = com.ondeinference.example;
391 + PRODUCT_NAME = OndeExample;
392 + SWIFT_OBJC_BRIDGING_HEADER = "OndeExample/OndeExample-Bridging-Header.h";
393 + SWIFT_VERSION = 5.0;
394 + TARGETED_DEVICE_FAMILY = "1,2";
395 + VERSIONING_SYSTEM = "apple-generic";
396 + DEVELOPMENT_TEAM = "2TQF86ZACD";
397 + CODE_SIGN_IDENTITY = "Apple Development";
398 + CODE_SIGN_STYLE = Automatic;
399 + };
400 + name = Release;
401 + };
402 + 83CBBA201A601CBA00E9B192 /* Debug */ = {
403 + isa = XCBuildConfiguration;
404 + buildSettings = {
405 + ALWAYS_SEARCH_USER_PATHS = NO;
406 + CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
407 + CLANG_CXX_LANGUAGE_STANDARD = "c++20";
408 + CLANG_CXX_LIBRARY = "libc++";
409 + CLANG_ENABLE_MODULES = YES;
410 + CLANG_ENABLE_OBJC_ARC = YES;
411 + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
412 + CLANG_WARN_BOOL_CONVERSION = YES;
413 + CLANG_WARN_COMMA = YES;
414 + CLANG_WARN_CONSTANT_CONVERSION = YES;
415 + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
416 + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
417 + CLANG_WARN_EMPTY_BODY = YES;
418 + CLANG_WARN_ENUM_CONVERSION = YES;
419 + CLANG_WARN_INFINITE_RECURSION = YES;
420 + CLANG_WARN_INT_CONVERSION = YES;
421 + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
422 + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
423 + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
424 + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
425 + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
426 + CLANG_WARN_STRICT_PROTOTYPES = YES;
427 + CLANG_WARN_SUSPICIOUS_MOVE = YES;
428 + CLANG_WARN_UNREACHABLE_CODE = YES;
429 + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
430 + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
431 + COPY_PHASE_STRIP = NO;
432 + ENABLE_STRICT_OBJC_MSGSEND = YES;
433 + ENABLE_TESTABILITY = YES;
434 + GCC_C_LANGUAGE_STANDARD = gnu99;
435 + GCC_DYNAMIC_NO_PIC = NO;
436 + GCC_NO_COMMON_BLOCKS = YES;
437 + GCC_OPTIMIZATION_LEVEL = 0;
438 + GCC_PREPROCESSOR_DEFINITIONS = (
439 + "DEBUG=1",
440 + "$(inherited)",
441 + );
442 + GCC_SYMBOLS_PRIVATE_EXTERN = NO;
443 + GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
444 + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
445 + GCC_WARN_UNDECLARED_SELECTOR = YES;
446 + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
447 + GCC_WARN_UNUSED_FUNCTION = YES;
448 + GCC_WARN_UNUSED_VARIABLE = YES;
449 + IPHONEOS_DEPLOYMENT_TARGET = 16.0;
450 + LD_RUNPATH_SEARCH_PATHS = "/usr/lib/swift $(inherited)";
451 + LIBRARY_SEARCH_PATHS = "$(SDKROOT)/usr/lib/swift\"$(inherited)\"";
452 + MTL_ENABLE_DEBUG_INFO = YES;
453 + ONLY_ACTIVE_ARCH = YES;
454 + OTHER_LDFLAGS = (
455 + "$(inherited)",
456 + " ",
457 + );
458 + REACT_NATIVE_PATH = "${PODS_ROOT}/../../node_modules/react-native";
459 + SDKROOT = iphoneos;
460 + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) DEBUG";
461 + USE_HERMES = true;
462 + };
463 + name = Debug;
464 + };
465 + 83CBBA211A601CBA00E9B192 /* Release */ = {
466 + isa = XCBuildConfiguration;
467 + buildSettings = {
468 + ALWAYS_SEARCH_USER_PATHS = NO;
469 + CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
470 + CLANG_CXX_LANGUAGE_STANDARD = "c++20";
471 + CLANG_CXX_LIBRARY = "libc++";
472 + CLANG_ENABLE_MODULES = YES;
473 + CLANG_ENABLE_OBJC_ARC = YES;
474 + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
475 + CLANG_WARN_BOOL_CONVERSION = YES;
476 + CLANG_WARN_COMMA = YES;
477 + CLANG_WARN_CONSTANT_CONVERSION = YES;
478 + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
479 + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
480 + CLANG_WARN_EMPTY_BODY = YES;
481 + CLANG_WARN_ENUM_CONVERSION = YES;
482 + CLANG_WARN_INFINITE_RECURSION = YES;
483 + CLANG_WARN_INT_CONVERSION = YES;
484 + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
485 + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
486 + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
487 + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
488 + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
489 + CLANG_WARN_STRICT_PROTOTYPES = YES;
490 + CLANG_WARN_SUSPICIOUS_MOVE = YES;
491 + CLANG_WARN_UNREACHABLE_CODE = YES;
492 + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
493 + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
494 + COPY_PHASE_STRIP = YES;
495 + ENABLE_NS_ASSERTIONS = NO;
496 + ENABLE_STRICT_OBJC_MSGSEND = YES;
497 + GCC_C_LANGUAGE_STANDARD = gnu99;
498 + GCC_NO_COMMON_BLOCKS = YES;
499 + GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
500 + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
501 + GCC_WARN_UNDECLARED_SELECTOR = YES;
502 + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
503 + GCC_WARN_UNUSED_FUNCTION = YES;
504 + GCC_WARN_UNUSED_VARIABLE = YES;
505 + IPHONEOS_DEPLOYMENT_TARGET = 16.0;
506 + LD_RUNPATH_SEARCH_PATHS = "/usr/lib/swift $(inherited)";
507 + LIBRARY_SEARCH_PATHS = "$(SDKROOT)/usr/lib/swift\"$(inherited)\"";
508 + MTL_ENABLE_DEBUG_INFO = NO;
509 + OTHER_LDFLAGS = (
510 + "$(inherited)",
511 + " ",
512 + );
513 + REACT_NATIVE_PATH = "${PODS_ROOT}/../../node_modules/react-native";
514 + SDKROOT = iphoneos;
515 + USE_HERMES = true;
516 + VALIDATE_PRODUCT = YES;
517 + };
518 + name = Release;
519 + };
520 +/* End XCBuildConfiguration section */
521 +
522 +/* Begin XCConfigurationList section */
523 + 13B07F931A680F5B00A75B9A /* Build configuration list for PBXNativeTarget "OndeExample" */ = {
524 + isa = XCConfigurationList;
525 + buildConfigurations = (
526 + 13B07F941A680F5B00A75B9A /* Debug */,
527 + 13B07F951A680F5B00A75B9A /* Release */,
528 + );
529 + defaultConfigurationIsVisible = 0;
530 + defaultConfigurationName = Release;
531 + };
532 + 83CBB9FA1A601CBA00E9B192 /* Build configuration list for PBXProject "OndeExample" */ = {
533 + isa = XCConfigurationList;
534 + buildConfigurations = (
535 + 83CBBA201A601CBA00E9B192 /* Debug */,
536 + 83CBBA211A601CBA00E9B192 /* Release */,
537 + );
538 + defaultConfigurationIsVisible = 0;
539 + defaultConfigurationName = Release;
540 + };
541 +/* End XCConfigurationList section */
542 + };
543 + rootObject = 83CBB9F71A601CBA00E9B192 /* Project object */;
544 +}
sdk/react-native/example/ios/OndeExample.xcodeproj/xcshareddata/xcschemes/OndeExample.xcscheme new
+88
@@ -0,0 +1,88 @@
1 +<?xml version="1.0" encoding="UTF-8"?>
2 +<Scheme
3 + LastUpgradeVersion = "1130"
4 + version = "1.3">
5 + <BuildAction
6 + parallelizeBuildables = "YES"
7 + buildImplicitDependencies = "YES">
8 + <BuildActionEntries>
9 + <BuildActionEntry
10 + buildForTesting = "YES"
11 + buildForRunning = "YES"
12 + buildForProfiling = "YES"
13 + buildForArchiving = "YES"
14 + buildForAnalyzing = "YES">
15 + <BuildableReference
16 + BuildableIdentifier = "primary"
17 + BlueprintIdentifier = "13B07F861A680F5B00A75B9A"
18 + BuildableName = "OndeExample.app"
19 + BlueprintName = "OndeExample"
20 + ReferencedContainer = "container:OndeExample.xcodeproj">
21 + </BuildableReference>
22 + </BuildActionEntry>
23 + </BuildActionEntries>
24 + </BuildAction>
25 + <TestAction
26 + buildConfiguration = "Debug"
27 + selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
28 + selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
29 + shouldUseLaunchSchemeArgsEnv = "YES">
30 + <Testables>
31 + <TestableReference
32 + skipped = "NO">
33 + <BuildableReference
34 + BuildableIdentifier = "primary"
35 + BlueprintIdentifier = "00E356ED1AD99517003FC87E"
36 + BuildableName = "OndeExampleTests.xctest"
37 + BlueprintName = "OndeExampleTests"
38 + ReferencedContainer = "container:OndeExample.xcodeproj">
39 + </BuildableReference>
40 + </TestableReference>
41 + </Testables>
42 + </TestAction>
43 + <LaunchAction
44 + buildConfiguration = "Debug"
45 + selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
46 + selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
47 + launchStyle = "0"
48 + useCustomWorkingDirectory = "NO"
49 + ignoresPersistentStateOnLaunch = "NO"
50 + debugDocumentVersioning = "YES"
51 + debugServiceExtension = "internal"
52 + allowLocationSimulation = "YES">
53 + <BuildableProductRunnable
54 + runnableDebuggingMode = "0">
55 + <BuildableReference
56 + BuildableIdentifier = "primary"
57 + BlueprintIdentifier = "13B07F861A680F5B00A75B9A"
58 + BuildableName = "OndeExample.app"
59 + BlueprintName = "OndeExample"
60 + ReferencedContainer = "container:OndeExample.xcodeproj">
61 + </BuildableReference>
62 + </BuildableProductRunnable>
63 + </LaunchAction>
64 + <ProfileAction
65 + buildConfiguration = "Release"
66 + shouldUseLaunchSchemeArgsEnv = "YES"
67 + savedToolIdentifier = ""
68 + useCustomWorkingDirectory = "NO"
69 + debugDocumentVersioning = "YES">
70 + <BuildableProductRunnable
71 + runnableDebuggingMode = "0">
72 + <BuildableReference
73 + BuildableIdentifier = "primary"
74 + BlueprintIdentifier = "13B07F861A680F5B00A75B9A"
75 + BuildableName = "OndeExample.app"
76 + BlueprintName = "OndeExample"
77 + ReferencedContainer = "container:OndeExample.xcodeproj">
78 + </BuildableReference>
79 + </BuildableProductRunnable>
80 + </ProfileAction>
81 + <AnalyzeAction
82 + buildConfiguration = "Debug">
83 + </AnalyzeAction>
84 + <ArchiveAction
85 + buildConfiguration = "Release"
86 + revealArchiveInOrganizer = "YES">
87 + </ArchiveAction>
88 +</Scheme>
sdk/react-native/example/ios/OndeExample.xcworkspace/contents.xcworkspacedata new
+10
@@ -0,0 +1,10 @@
1 +<?xml version="1.0" encoding="UTF-8"?>
2 +<Workspace
3 + version = "1.0">
4 + <FileRef
5 + location = "group:OndeExample.xcodeproj">
6 + </FileRef>
7 + <FileRef
8 + location = "group:Pods/Pods.xcodeproj">
9 + </FileRef>
10 +</Workspace>
sdk/react-native/example/ios/OndeExample/AppDelegate.h new
+7
@@ -0,0 +1,7 @@
1 +#import <RCTAppDelegate.h>
2 +#import <UIKit/UIKit.h>
3 +#import <Expo/Expo.h>
4 +
5 +@interface AppDelegate : EXAppDelegateWrapper
6 +
7 +@end
sdk/react-native/example/ios/OndeExample/AppDelegate.mm new
+62
@@ -0,0 +1,62 @@
1 +#import "AppDelegate.h"
2 +
3 +#import <React/RCTBundleURLProvider.h>
4 +#import <React/RCTLinkingManager.h>
5 +
6 +@implementation AppDelegate
7 +
8 +- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
9 +{
10 + self.moduleName = @"main";
11 +
12 + // You can add your custom initial props in the dictionary below.
13 + // They will be passed down to the ViewController used by React Native.
14 + self.initialProps = @{};
15 +
16 + return [super application:application didFinishLaunchingWithOptions:launchOptions];
17 +}
18 +
19 +- (NSURL *)sourceURLForBridge:(RCTBridge *)bridge
20 +{
21 + return [self bundleURL];
22 +}
23 +
24 +- (NSURL *)bundleURL
25 +{
26 +#if DEBUG
27 + return [[RCTBundleURLProvider sharedSettings] jsBundleURLForBundleRoot:@".expo/.virtual-metro-entry"];
28 +#else
29 + return [[NSBundle mainBundle] URLForResource:@"main" withExtension:@"jsbundle"];
30 +#endif
31 +}
32 +
33 +// Linking API
34 +- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options {
35 + return [super application:application openURL:url options:options] || [RCTLinkingManager application:application openURL:url options:options];
36 +}
37 +
38 +// Universal Links
39 +- (BOOL)application:(UIApplication *)application continueUserActivity:(nonnull NSUserActivity *)userActivity restorationHandler:(nonnull void (^)(NSArray<id<UIUserActivityRestoring>> * _Nullable))restorationHandler {
40 + BOOL result = [RCTLinkingManager application:application continueUserActivity:userActivity restorationHandler:restorationHandler];
41 + return [super application:application continueUserActivity:userActivity restorationHandler:restorationHandler] || result;
42 +}
43 +
44 +// Explicitly define remote notification delegates to ensure compatibility with some third-party libraries
45 +- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken
46 +{
47 + return [super application:application didRegisterForRemoteNotificationsWithDeviceToken:deviceToken];
48 +}
49 +
50 +// Explicitly define remote notification delegates to ensure compatibility with some third-party libraries
51 +- (void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error
52 +{
53 + return [super application:application didFailToRegisterForRemoteNotificationsWithError:error];
54 +}
55 +
56 +// Explicitly define remote notification delegates to ensure compatibility with some third-party libraries
57 +- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler
58 +{
59 + return [super application:application didReceiveRemoteNotification:userInfo fetchCompletionHandler:completionHandler];
60 +}
61 +
62 +@end
sdk/react-native/example/ios/OndeExample/Images.xcassets/AppIcon.appiconset/App-Icon-1024x1024@1x.png
Binary files /dev/null and b/sdk/react-native/example/ios/OndeExample/Images.xcassets/AppIcon.appiconset/App-Icon-1024x1024@1x.png differ
sdk/react-native/example/ios/OndeExample/Images.xcassets/AppIcon.appiconset/Contents.json new
+14
@@ -0,0 +1,14 @@
1 +{
2 + "images": [
3 + {
4 + "filename": "App-Icon-1024x1024@1x.png",
5 + "idiom": "universal",
6 + "platform": "ios",
7 + "size": "1024x1024"
8 + }
9 + ],
10 + "info": {
11 + "version": 1,
12 + "author": "expo"
13 + }
14 +}
\ No newline at end of file
sdk/react-native/example/ios/OndeExample/Images.xcassets/Contents.json new
+6
@@ -0,0 +1,6 @@
1 +{
2 + "info" : {
3 + "version" : 1,
4 + "author" : "expo"
5 + }
6 +}
sdk/react-native/example/ios/OndeExample/Images.xcassets/SplashScreenBackground.colorset/Contents.json new
+20
@@ -0,0 +1,20 @@
1 +{
2 + "colors": [
3 + {
4 + "color": {
5 + "components": {
6 + "alpha": "1.000",
7 + "blue": "1.00000000000000",
8 + "green": "1.00000000000000",
9 + "red": "1.00000000000000"
10 + },
11 + "color-space": "srgb"
12 + },
13 + "idiom": "universal"
14 + }
15 + ],
16 + "info": {
17 + "version": 1,
18 + "author": "expo"
19 + }
20 +}
\ No newline at end of file
sdk/react-native/example/ios/OndeExample/Info.plist new
+75
@@ -0,0 +1,75 @@
1 +<?xml version="1.0" encoding="UTF-8" ?>
2 +<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN"
3 + "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
4 +<plist version="1.0">
5 + <dict>
6 + <key>CADisableMinimumFrameDurationOnPhone</key>
7 + <true />
8 + <key>CFBundleDevelopmentRegion</key>
9 + <string>$(DEVELOPMENT_LANGUAGE)</string>
10 + <key>CFBundleDisplayName</key>
11 + <string>Onde Example</string>
12 + <key>CFBundleExecutable</key>
13 + <string>$(EXECUTABLE_NAME)</string>
14 + <key>CFBundleIdentifier</key>
15 + <string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
16 + <key>CFBundleInfoDictionaryVersion</key>
17 + <string>6.0</string>
18 + <key>CFBundleName</key>
19 + <string>$(PRODUCT_NAME)</string>
20 + <key>CFBundlePackageType</key>
21 + <string>$(PRODUCT_BUNDLE_PACKAGE_TYPE)</string>
22 + <key>CFBundleShortVersionString</key>
23 + <string>0.0.1</string>
24 + <key>CFBundleSignature</key>
25 + <string>????</string>
26 + <key>CFBundleURLTypes</key>
27 + <array>
28 + <dict>
29 + <key>CFBundleURLSchemes</key>
30 + <array>
31 + <string>com.ondeinference.example</string>
32 + </array>
33 + </dict>
34 + </array>
35 + <key>CFBundleVersion</key>
36 + <string>1</string>
37 + <key>LSMinimumSystemVersion</key>
38 + <string>16.0</string>
39 + <key>LSRequiresIPhoneOS</key>
40 + <true />
41 + <key>NSAppTransportSecurity</key>
42 + <dict>
43 + <key>NSAllowsArbitraryLoads</key>
44 + <false />
45 + <key>NSAllowsLocalNetworking</key>
46 + <true />
47 + </dict>
48 + <key>UILaunchStoryboardName</key>
49 + <string>SplashScreen</string>
50 + <key>UIRequiredDeviceCapabilities</key>
51 + <array>
52 + <string>arm64</string>
53 + </array>
54 + <key>UIRequiresFullScreen</key>
55 + <false />
56 + <key>UIStatusBarStyle</key>
57 + <string>UIStatusBarStyleDefault</string>
58 + <key>UISupportedInterfaceOrientations</key>
59 + <array>
60 + <string>UIInterfaceOrientationPortrait</string>
61 + <string>UIInterfaceOrientationPortraitUpsideDown</string>
62 + </array>
63 + <key>UISupportedInterfaceOrientations~ipad</key>
64 + <array>
65 + <string>UIInterfaceOrientationPortrait</string>
66 + <string>UIInterfaceOrientationPortraitUpsideDown</string>
67 + <string>UIInterfaceOrientationLandscapeLeft</string>
68 + <string>UIInterfaceOrientationLandscapeRight</string>
69 + </array>
70 + <key>UIUserInterfaceStyle</key>
71 + <string>Light</string>
72 + <key>UIViewControllerBasedStatusBarAppearance</key>
73 + <false />
74 + </dict>
75 +</plist>
sdk/react-native/example/ios/OndeExample/OndeExample-Bridging-Header.h new
+3
@@ -0,0 +1,3 @@
1 +//
2 +// Use this file to import your target's public headers that you would like to expose to Swift.
3 +//
sdk/react-native/example/ios/OndeExample/OndeExample.entitlements new
+13
@@ -0,0 +1,13 @@
1 +<?xml version="1.0" encoding="UTF-8" ?>
2 +<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN"
3 + "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
4 +<plist version="1.0">
5 + <dict>
6 + <key>com.apple.developer.kernel.increased-memory-limit</key>
7 + <true />
8 + <key>com.apple.security.application-groups</key>
9 + <array>
10 + <string>group.com.ondeinference.apps</string>
11 + </array>
12 + </dict>
13 +</plist>
sdk/react-native/example/ios/OndeExample/PrivacyInfo.xcprivacy new
+37
@@ -0,0 +1,37 @@
1 +<?xml version="1.0" encoding="UTF-8"?>
2 +<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
3 +<plist version="1.0">
4 +<dict>
5 + <key>NSPrivacyAccessedAPITypes</key>
6 + <array>
7 + <dict>
8 + <key>NSPrivacyAccessedAPIType</key>
9 + <string>NSPrivacyAccessedAPICategoryUserDefaults</string>
10 + <key>NSPrivacyAccessedAPITypeReasons</key>
11 + <array>
12 + <string>CA92.1</string>
13 + </array>
14 + </dict>
15 + <dict>
16 + <key>NSPrivacyAccessedAPIType</key>
17 + <string>NSPrivacyAccessedAPICategoryFileTimestamp</string>
18 + <key>NSPrivacyAccessedAPITypeReasons</key>
19 + <array>
20 + <string>C617.1</string>
21 + </array>
22 + </dict>
23 + <dict>
24 + <key>NSPrivacyAccessedAPIType</key>
25 + <string>NSPrivacyAccessedAPICategorySystemBootTime</string>
26 + <key>NSPrivacyAccessedAPITypeReasons</key>
27 + <array>
28 + <string>35F9.1</string>
29 + </array>
30 + </dict>
31 + </array>
32 + <key>NSPrivacyCollectedDataTypes</key>
33 + <array/>
34 + <key>NSPrivacyTracking</key>
35 + <false/>
36 +</dict>
37 +</plist>
sdk/react-native/example/ios/OndeExample/SplashScreen.storyboard new
+34
@@ -0,0 +1,34 @@
1 +<?xml version="1.0" encoding="UTF-8"?>
2 +<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="32700.99.1234" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" launchScreen="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES" initialViewController="EXPO-VIEWCONTROLLER-1">
3 + <device id="retina6_12" orientation="portrait" appearance="light"/>
4 + <dependencies>
5 + <deployment identifier="iOS"/>
6 + <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="22685"/>
7 + <capability name="Named colors" minToolsVersion="9.0"/>
8 + <capability name="Safe area layout guides" minToolsVersion="9.0"/>
9 + <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
10 + </dependencies>
11 + <scenes>
12 + <scene sceneID="EXPO-SCENE-1">
13 + <objects>
14 + <viewController storyboardIdentifier="SplashScreenViewController" id="EXPO-VIEWCONTROLLER-1" sceneMemberID="viewController">
15 + <view key="view" userInteractionEnabled="NO" contentMode="scaleToFill" insetsLayoutMarginsFromSafeArea="NO" id="EXPO-ContainerView" userLabel="ContainerView">
16 + <rect key="frame" x="0.0" y="0.0" width="393" height="852"/>
17 + <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
18 + <subviews/>
19 + <viewLayoutGuide key="safeArea" id="Rmq-lb-GrQ"/>
20 + <constraints>
21 + <constraint firstItem="EXPO-SplashScreen" firstAttribute="centerY" secondItem="EXPO-ContainerView" secondAttribute="centerY" id="0VC-Wk-OaO"/>
22 + <constraint firstItem="EXPO-SplashScreen" firstAttribute="centerX" secondItem="EXPO-ContainerView" secondAttribute="centerX" id="zR4-NK-mVN"/>
23 + </constraints>
24 + </view>
25 + </viewController>
26 + <placeholder placeholderIdentifier="IBFirstResponder" id="EXPO-PLACEHOLDER-1" userLabel="First Responder" sceneMemberID="firstResponder"/>
27 + </objects>
28 + <point key="canvasLocation" x="0.0" y="0.0"/>
29 + </scene>
30 + </scenes>
31 + <resources>
32 + <image name="SplashScreenLogo" width="100" height="90.333335876464844"/>
33 + </resources>
34 +</document>
\ No newline at end of file
sdk/react-native/example/ios/OndeExample/Supporting/Expo.plist new
+12
@@ -0,0 +1,12 @@
1 +<?xml version="1.0" encoding="UTF-8"?>
2 +<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
3 +<plist version="1.0">
4 + <dict>
5 + <key>EXUpdatesCheckOnLaunch</key>
6 + <string>ALWAYS</string>
7 + <key>EXUpdatesEnabled</key>
8 + <false/>
9 + <key>EXUpdatesLaunchWaitMs</key>
10 + <integer>0</integer>
11 + </dict>
12 +</plist>
\ No newline at end of file
sdk/react-native/example/ios/OndeExample/main.m new
+10
@@ -0,0 +1,10 @@
1 +#import <UIKit/UIKit.h>
2 +
3 +#import "AppDelegate.h"
4 +
5 +int main(int argc, char * argv[]) {
6 + @autoreleasepool {
7 + return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
8 + }
9 +}
10 +
sdk/react-native/example/ios/OndeExample/noop-file.swift new
+4
@@ -0,0 +1,4 @@
1 +//
2 +// @generated
3 +// A blank Swift file must be created for native modules with Swift files to work correctly.
4 +//
sdk/react-native/example/ios/Podfile new
+66
@@ -0,0 +1,66 @@
1 +require File.join(File.dirname(`node --print "require.resolve('expo/package.json')"`), "scripts/autolinking")
2 +require File.join(File.dirname(`node --print "require.resolve('react-native/package.json')"`), "scripts/react_native_pods")
3 +
4 +require 'json'
5 +podfile_properties = JSON.parse(File.read(File.join(__dir__, 'Podfile.properties.json'))) rescue {}
6 +
7 +ENV['RCT_NEW_ARCH_ENABLED'] = podfile_properties['newArchEnabled'] == 'true' ? '1' : '0'
8 +ENV['EX_DEV_CLIENT_NETWORK_INSPECTOR'] = podfile_properties['EX_DEV_CLIENT_NETWORK_INSPECTOR']
9 +
10 +platform :ios, podfile_properties['ios.deploymentTarget'] || '15.1'
11 +install! 'cocoapods',
12 + :deterministic_uuids => false
13 +
14 +prepare_react_native_project!
15 +
16 +target 'OndeExample' do
17 + use_expo_modules!
18 +
19 + if ENV['EXPO_USE_COMMUNITY_AUTOLINKING'] == '1'
20 + config_command = ['node', '-e', "process.argv=['', '', 'config'];require('@react-native-community/cli').run()"];
21 + else
22 + config_command = [
23 + 'node',
24 + '--no-warnings',
25 + '--eval',
26 + 'require(require.resolve(\'expo-modules-autolinking\', { paths: [require.resolve(\'expo/package.json\')] }))(process.argv.slice(1))',
27 + 'react-native-config',
28 + '--json',
29 + '--platform',
30 + 'ios'
31 + ]
32 + end
33 +
34 + config = use_native_modules!(config_command)
35 +
36 + use_frameworks! :linkage => podfile_properties['ios.useFrameworks'].to_sym if podfile_properties['ios.useFrameworks']
37 + use_frameworks! :linkage => ENV['USE_FRAMEWORKS'].to_sym if ENV['USE_FRAMEWORKS']
38 +
39 + use_react_native!(
40 + :path => config[:reactNativePath],
41 + :hermes_enabled => podfile_properties['expo.jsEngine'] == nil || podfile_properties['expo.jsEngine'] == 'hermes',
42 + # An absolute path to your application root.
43 + :app_path => "#{Pod::Config.instance.installation_root}/..",
44 + :privacy_file_aggregation_enabled => podfile_properties['apple.privacyManifestAggregationEnabled'] != 'false',
45 + )
46 +
47 + post_install do |installer|
48 + react_native_post_install(
49 + installer,
50 + config[:reactNativePath],
51 + :mac_catalyst_enabled => false,
52 + :ccache_enabled => podfile_properties['apple.ccacheEnabled'] == 'true',
53 + )
54 +
55 + # This is necessary for Xcode 14, because it signs resource bundles by default
56 + # when building for devices.
57 + installer.target_installation_results.pod_target_installation_results
58 + .each do |pod_name, target_installation_result|
59 + target_installation_result.resource_bundle_targets.each do |resource_bundle_target|
60 + resource_bundle_target.build_configurations.each do |config|
61 + config.build_settings['CODE_SIGNING_ALLOWED'] = 'NO'
62 + end
63 + end
64 + end
65 + end
66 +end
sdk/react-native/example/ios/Podfile.lock new
+1840
@@ -0,0 +1,1840 @@
1 +PODS:
2 + - boost (1.84.0)
3 + - DoubleConversion (1.1.6)
4 + - EXConstants (55.0.13):
5 + - ExpoModulesCore
6 + - Expo (52.0.49):
7 + - ExpoModulesCore
8 + - ExpoAsset (55.0.14):
9 + - ExpoModulesCore
10 + - ExpoModulesCore (2.2.3):
11 + - DoubleConversion
12 + - glog
13 + - hermes-engine
14 + - RCT-Folly (= 2024.01.01.00)
15 + - RCTRequired
16 + - RCTTypeSafety
17 + - React-Core
18 + - React-debug
19 + - React-Fabric
20 + - React-featureflags
21 + - React-graphics
22 + - React-ImageManager
23 + - React-jsinspector
24 + - React-NativeModulesApple
25 + - React-RCTAppDelegate
26 + - React-RCTFabric
27 + - React-rendererdebug
28 + - React-utils
29 + - ReactCodegen
30 + - ReactCommon/turbomodule/bridging
31 + - ReactCommon/turbomodule/core
32 + - Yoga
33 + - FBLazyVector (0.76.7)
34 + - fmt (9.1.0)
35 + - glog (0.3.5)
36 + - hermes-engine (0.76.7):
37 + - hermes-engine/Pre-built (= 0.76.7)
38 + - hermes-engine/Pre-built (0.76.7)
39 + - OndeInference (0.1.3):
40 + - ExpoModulesCore
41 + - RCT-Folly (2024.01.01.00):
42 + - boost
43 + - DoubleConversion
44 + - fmt (= 9.1.0)
45 + - glog
46 + - RCT-Folly/Default (= 2024.01.01.00)
47 + - RCT-Folly/Default (2024.01.01.00):
48 + - boost
49 + - DoubleConversion
50 + - fmt (= 9.1.0)
51 + - glog
52 + - RCT-Folly/Fabric (2024.01.01.00):
53 + - boost
54 + - DoubleConversion
55 + - fmt (= 9.1.0)
56 + - glog
57 + - RCTDeprecation (0.76.7)
58 + - RCTRequired (0.76.7)
59 + - RCTTypeSafety (0.76.7):
60 + - FBLazyVector (= 0.76.7)
61 + - RCTRequired (= 0.76.7)
62 + - React-Core (= 0.76.7)
63 + - React (0.76.7):
64 + - React-Core (= 0.76.7)
65 + - React-Core/DevSupport (= 0.76.7)
66 + - React-Core/RCTWebSocket (= 0.76.7)
67 + - React-RCTActionSheet (= 0.76.7)
68 + - React-RCTAnimation (= 0.76.7)
69 + - React-RCTBlob (= 0.76.7)
70 + - React-RCTImage (= 0.76.7)
71 + - React-RCTLinking (= 0.76.7)
72 + - React-RCTNetwork (= 0.76.7)
73 + - React-RCTSettings (= 0.76.7)
74 + - React-RCTText (= 0.76.7)
75 + - React-RCTVibration (= 0.76.7)
76 + - React-callinvoker (0.76.7)
77 + - React-Core (0.76.7):
78 + - glog
79 + - hermes-engine
80 + - RCT-Folly (= 2024.01.01.00)
81 + - RCTDeprecation
82 + - React-Core/Default (= 0.76.7)
83 + - React-cxxreact
84 + - React-featureflags
85 + - React-hermes
86 + - React-jsi
87 + - React-jsiexecutor
88 + - React-jsinspector
89 + - React-perflogger
90 + - React-runtimescheduler
91 + - React-utils
92 + - SocketRocket (= 0.7.1)
93 + - Yoga
94 + - React-Core/CoreModulesHeaders (0.76.7):
95 + - glog
96 + - hermes-engine
97 + - RCT-Folly (= 2024.01.01.00)
98 + - RCTDeprecation
99 + - React-Core/Default
100 + - React-cxxreact
101 + - React-featureflags
102 + - React-hermes
103 + - React-jsi
104 + - React-jsiexecutor
105 + - React-jsinspector
106 + - React-perflogger
107 + - React-runtimescheduler
108 + - React-utils
109 + - SocketRocket (= 0.7.1)
110 + - Yoga
111 + - React-Core/Default (0.76.7):
112 + - glog
113 + - hermes-engine
114 + - RCT-Folly (= 2024.01.01.00)
115 + - RCTDeprecation
116 + - React-cxxreact
117 + - React-featureflags
118 + - React-hermes
119 + - React-jsi
120 + - React-jsiexecutor
121 + - React-jsinspector
122 + - React-perflogger
123 + - React-runtimescheduler
124 + - React-utils
125 + - SocketRocket (= 0.7.1)
126 + - Yoga
127 + - React-Core/DevSupport (0.76.7):
128 + - glog
129 + - hermes-engine
130 + - RCT-Folly (= 2024.01.01.00)
131 + - RCTDeprecation
132 + - React-Core/Default (= 0.76.7)
133 + - React-Core/RCTWebSocket (= 0.76.7)
134 + - React-cxxreact
135 + - React-featureflags
136 + - React-hermes
137 + - React-jsi
138 + - React-jsiexecutor
139 + - React-jsinspector
140 + - React-perflogger
141 + - React-runtimescheduler
142 + - React-utils
143 + - SocketRocket (= 0.7.1)
144 + - Yoga
145 + - React-Core/RCTActionSheetHeaders (0.76.7):
146 + - glog
147 + - hermes-engine
148 + - RCT-Folly (= 2024.01.01.00)
149 + - RCTDeprecation
150 + - React-Core/Default
151 + - React-cxxreact
152 + - React-featureflags
153 + - React-hermes
154 + - React-jsi
155 + - React-jsiexecutor
156 + - React-jsinspector
157 + - React-perflogger
158 + - React-runtimescheduler
159 + - React-utils
160 + - SocketRocket (= 0.7.1)
161 + - Yoga
162 + - React-Core/RCTAnimationHeaders (0.76.7):
163 + - glog
164 + - hermes-engine
165 + - RCT-Folly (= 2024.01.01.00)
166 + - RCTDeprecation
167 + - React-Core/Default
168 + - React-cxxreact
169 + - React-featureflags
170 + - React-hermes
171 + - React-jsi
172 + - React-jsiexecutor
173 + - React-jsinspector
174 + - React-perflogger
175 + - React-runtimescheduler
176 + - React-utils
177 + - SocketRocket (= 0.7.1)
178 + - Yoga
179 + - React-Core/RCTBlobHeaders (0.76.7):
180 + - glog
181 + - hermes-engine
182 + - RCT-Folly (= 2024.01.01.00)
183 + - RCTDeprecation
184 + - React-Core/Default
185 + - React-cxxreact
186 + - React-featureflags
187 + - React-hermes
188 + - React-jsi
189 + - React-jsiexecutor
190 + - React-jsinspector
191 + - React-perflogger
192 + - React-runtimescheduler
193 + - React-utils
194 + - SocketRocket (= 0.7.1)
195 + - Yoga
196 + - React-Core/RCTImageHeaders (0.76.7):
197 + - glog
198 + - hermes-engine
199 + - RCT-Folly (= 2024.01.01.00)
200 + - RCTDeprecation
201 + - React-Core/Default
202 + - React-cxxreact
203 + - React-featureflags
204 + - React-hermes
205 + - React-jsi
206 + - React-jsiexecutor
207 + - React-jsinspector
208 + - React-perflogger
209 + - React-runtimescheduler
210 + - React-utils
211 + - SocketRocket (= 0.7.1)
212 + - Yoga
213 + - React-Core/RCTLinkingHeaders (0.76.7):
214 + - glog
215 + - hermes-engine
216 + - RCT-Folly (= 2024.01.01.00)
217 + - RCTDeprecation
218 + - React-Core/Default
219 + - React-cxxreact
220 + - React-featureflags
221 + - React-hermes
222 + - React-jsi
223 + - React-jsiexecutor
224 + - React-jsinspector
225 + - React-perflogger
226 + - React-runtimescheduler
227 + - React-utils
228 + - SocketRocket (= 0.7.1)
229 + - Yoga
230 + - React-Core/RCTNetworkHeaders (0.76.7):
231 + - glog
232 + - hermes-engine
233 + - RCT-Folly (= 2024.01.01.00)
234 + - RCTDeprecation
235 + - React-Core/Default
236 + - React-cxxreact
237 + - React-featureflags
238 + - React-hermes
239 + - React-jsi
240 + - React-jsiexecutor
241 + - React-jsinspector
242 + - React-perflogger
243 + - React-runtimescheduler
244 + - React-utils
245 + - SocketRocket (= 0.7.1)
246 + - Yoga
247 + - React-Core/RCTSettingsHeaders (0.76.7):
248 + - glog
249 + - hermes-engine
250 + - RCT-Folly (= 2024.01.01.00)
251 + - RCTDeprecation
252 + - React-Core/Default
253 + - React-cxxreact
254 + - React-featureflags
255 + - React-hermes
256 + - React-jsi
257 + - React-jsiexecutor
258 + - React-jsinspector
259 + - React-perflogger
260 + - React-runtimescheduler
261 + - React-utils
262 + - SocketRocket (= 0.7.1)
263 + - Yoga
264 + - React-Core/RCTTextHeaders (0.76.7):
265 + - glog
266 + - hermes-engine
267 + - RCT-Folly (= 2024.01.01.00)
268 + - RCTDeprecation
269 + - React-Core/Default
270 + - React-cxxreact
271 + - React-featureflags
272 + - React-hermes
273 + - React-jsi
274 + - React-jsiexecutor
275 + - React-jsinspector
276 + - React-perflogger
277 + - React-runtimescheduler
278 + - React-utils
279 + - SocketRocket (= 0.7.1)
280 + - Yoga
281 + - React-Core/RCTVibrationHeaders (0.76.7):
282 + - glog
283 + - hermes-engine
284 + - RCT-Folly (= 2024.01.01.00)
285 + - RCTDeprecation
286 + - React-Core/Default
287 + - React-cxxreact
288 + - React-featureflags
289 + - React-hermes
290 + - React-jsi
291 + - React-jsiexecutor
292 + - React-jsinspector
293 + - React-perflogger
294 + - React-runtimescheduler
295 + - React-utils
296 + - SocketRocket (= 0.7.1)
297 + - Yoga
298 + - React-Core/RCTWebSocket (0.76.7):
299 + - glog
300 + - hermes-engine
301 + - RCT-Folly (= 2024.01.01.00)
302 + - RCTDeprecation
303 + - React-Core/Default (= 0.76.7)
304 + - React-cxxreact
305 + - React-featureflags
306 + - React-hermes
307 + - React-jsi
308 + - React-jsiexecutor
309 + - React-jsinspector
310 + - React-perflogger
311 + - React-runtimescheduler
312 + - React-utils
313 + - SocketRocket (= 0.7.1)
314 + - Yoga
315 + - React-CoreModules (0.76.7):
316 + - DoubleConversion
317 + - fmt (= 9.1.0)
318 + - RCT-Folly (= 2024.01.01.00)
319 + - RCTTypeSafety (= 0.76.7)
320 + - React-Core/CoreModulesHeaders (= 0.76.7)
321 + - React-jsi (= 0.76.7)
322 + - React-jsinspector
323 + - React-NativeModulesApple
324 + - React-RCTBlob
325 + - React-RCTImage (= 0.76.7)
326 + - ReactCodegen
327 + - ReactCommon
328 + - SocketRocket (= 0.7.1)
329 + - React-cxxreact (0.76.7):
330 + - boost
331 + - DoubleConversion
332 + - fmt (= 9.1.0)
333 + - glog
334 + - hermes-engine
335 + - RCT-Folly (= 2024.01.01.00)
336 + - React-callinvoker (= 0.76.7)
337 + - React-debug (= 0.76.7)
338 + - React-jsi (= 0.76.7)
339 + - React-jsinspector
340 + - React-logger (= 0.76.7)
341 + - React-perflogger (= 0.76.7)
342 + - React-runtimeexecutor (= 0.76.7)
343 + - React-timing (= 0.76.7)
344 + - React-debug (0.76.7)
345 + - React-defaultsnativemodule (0.76.7):
346 + - DoubleConversion
347 + - glog
348 + - hermes-engine
349 + - RCT-Folly (= 2024.01.01.00)
350 + - RCTRequired
351 + - RCTTypeSafety
352 + - React-Core
353 + - React-debug
354 + - React-domnativemodule
355 + - React-Fabric
356 + - React-featureflags
357 + - React-featureflagsnativemodule
358 + - React-graphics
359 + - React-idlecallbacksnativemodule
360 + - React-ImageManager
361 + - React-microtasksnativemodule
362 + - React-NativeModulesApple
363 + - React-RCTFabric
364 + - React-rendererdebug
365 + - React-utils
366 + - ReactCodegen
367 + - ReactCommon/turbomodule/bridging
368 + - ReactCommon/turbomodule/core
369 + - Yoga
370 + - React-domnativemodule (0.76.7):
371 + - DoubleConversion
372 + - glog
373 + - hermes-engine
374 + - RCT-Folly (= 2024.01.01.00)
375 + - RCTRequired
376 + - RCTTypeSafety
377 + - React-Core
378 + - React-debug
379 + - React-Fabric
380 + - React-FabricComponents
381 + - React-featureflags
382 + - React-graphics
383 + - React-ImageManager
384 + - React-NativeModulesApple
385 + - React-RCTFabric
386 + - React-rendererdebug
387 + - React-utils
388 + - ReactCodegen
389 + - ReactCommon/turbomodule/bridging
390 + - ReactCommon/turbomodule/core
391 + - Yoga
392 + - React-Fabric (0.76.7):
393 + - DoubleConversion
394 + - fmt (= 9.1.0)
395 + - glog
396 + - hermes-engine
397 + - RCT-Folly/Fabric (= 2024.01.01.00)
398 + - RCTRequired
399 + - RCTTypeSafety
400 + - React-Core
401 + - React-cxxreact
402 + - React-debug
403 + - React-Fabric/animations (= 0.76.7)
404 + - React-Fabric/attributedstring (= 0.76.7)
405 + - React-Fabric/componentregistry (= 0.76.7)
406 + - React-Fabric/componentregistrynative (= 0.76.7)
407 + - React-Fabric/components (= 0.76.7)
408 + - React-Fabric/core (= 0.76.7)
409 + - React-Fabric/dom (= 0.76.7)
410 + - React-Fabric/imagemanager (= 0.76.7)
411 + - React-Fabric/leakchecker (= 0.76.7)
412 + - React-Fabric/mounting (= 0.76.7)
413 + - React-Fabric/observers (= 0.76.7)
414 + - React-Fabric/scheduler (= 0.76.7)
415 + - React-Fabric/telemetry (= 0.76.7)
416 + - React-Fabric/templateprocessor (= 0.76.7)
417 + - React-Fabric/uimanager (= 0.76.7)
418 + - React-featureflags
419 + - React-graphics
420 + - React-jsi
421 + - React-jsiexecutor
422 + - React-logger
423 + - React-rendererdebug
424 + - React-runtimescheduler
425 + - React-utils
426 + - ReactCommon/turbomodule/core
427 + - React-Fabric/animations (0.76.7):
428 + - DoubleConversion
429 + - fmt (= 9.1.0)
430 + - glog
431 + - hermes-engine
432 + - RCT-Folly/Fabric (= 2024.01.01.00)
433 + - RCTRequired
434 + - RCTTypeSafety
435 + - React-Core
436 + - React-cxxreact
437 + - React-debug
438 + - React-featureflags
439 + - React-graphics
440 + - React-jsi
441 + - React-jsiexecutor
442 + - React-logger
443 + - React-rendererdebug
444 + - React-runtimescheduler
445 + - React-utils
446 + - ReactCommon/turbomodule/core
447 + - React-Fabric/attributedstring (0.76.7):
448 + - DoubleConversion
449 + - fmt (= 9.1.0)
450 + - glog
451 + - hermes-engine
452 + - RCT-Folly/Fabric (= 2024.01.01.00)
453 + - RCTRequired
454 + - RCTTypeSafety
455 + - React-Core
456 + - React-cxxreact
457 + - React-debug
458 + - React-featureflags
459 + - React-graphics
460 + - React-jsi
461 + - React-jsiexecutor
462 + - React-logger
463 + - React-rendererdebug
464 + - React-runtimescheduler
465 + - React-utils
466 + - ReactCommon/turbomodule/core
467 + - React-Fabric/componentregistry (0.76.7):
468 + - DoubleConversion
469 + - fmt (= 9.1.0)
470 + - glog
471 + - hermes-engine
472 + - RCT-Folly/Fabric (= 2024.01.01.00)
473 + - RCTRequired
474 + - RCTTypeSafety
475 + - React-Core
476 + - React-cxxreact
477 + - React-debug
478 + - React-featureflags
479 + - React-graphics
480 + - React-jsi
481 + - React-jsiexecutor
482 + - React-logger
483 + - React-rendererdebug
484 + - React-runtimescheduler
485 + - React-utils
486 + - ReactCommon/turbomodule/core
487 + - React-Fabric/componentregistrynative (0.76.7):
488 + - DoubleConversion
489 + - fmt (= 9.1.0)
490 + - glog
491 + - hermes-engine
492 + - RCT-Folly/Fabric (= 2024.01.01.00)
493 + - RCTRequired
494 + - RCTTypeSafety
495 + - React-Core
496 + - React-cxxreact
497 + - React-debug
498 + - React-featureflags
499 + - React-graphics
500 + - React-jsi
501 + - React-jsiexecutor
502 + - React-logger
503 + - React-rendererdebug
504 + - React-runtimescheduler
505 + - React-utils
506 + - ReactCommon/turbomodule/core
507 + - React-Fabric/components (0.76.7):
508 + - DoubleConversion
509 + - fmt (= 9.1.0)
510 + - glog
511 + - hermes-engine
512 + - RCT-Folly/Fabric (= 2024.01.01.00)
513 + - RCTRequired
514 + - RCTTypeSafety
515 + - React-Core
516 + - React-cxxreact
517 + - React-debug
518 + - React-Fabric/components/legacyviewmanagerinterop (= 0.76.7)
519 + - React-Fabric/components/root (= 0.76.7)
520 + - React-Fabric/components/view (= 0.76.7)
521 + - React-featureflags
522 + - React-graphics
523 + - React-jsi
524 + - React-jsiexecutor
525 + - React-logger
526 + - React-rendererdebug
527 + - React-runtimescheduler
528 + - React-utils
529 + - ReactCommon/turbomodule/core
530 + - React-Fabric/components/legacyviewmanagerinterop (0.76.7):
531 + - DoubleConversion
532 + - fmt (= 9.1.0)
533 + - glog
534 + - hermes-engine
535 + - RCT-Folly/Fabric (= 2024.01.01.00)
536 + - RCTRequired
537 + - RCTTypeSafety
538 + - React-Core
539 + - React-cxxreact
540 + - React-debug
541 + - React-featureflags
542 + - React-graphics
543 + - React-jsi
544 + - React-jsiexecutor
545 + - React-logger
546 + - React-rendererdebug
547 + - React-runtimescheduler
548 + - React-utils
549 + - ReactCommon/turbomodule/core
550 + - React-Fabric/components/root (0.76.7):
551 + - DoubleConversion
552 + - fmt (= 9.1.0)
553 + - glog
554 + - hermes-engine
555 + - RCT-Folly/Fabric (= 2024.01.01.00)
556 + - RCTRequired
557 + - RCTTypeSafety
558 + - React-Core
559 + - React-cxxreact
560 + - React-debug
561 + - React-featureflags
562 + - React-graphics
563 + - React-jsi
564 + - React-jsiexecutor
565 + - React-logger
566 + - React-rendererdebug
567 + - React-runtimescheduler
568 + - React-utils
569 + - ReactCommon/turbomodule/core
570 + - React-Fabric/components/view (0.76.7):
571 + - DoubleConversion
572 + - fmt (= 9.1.0)
573 + - glog
574 + - hermes-engine
575 + - RCT-Folly/Fabric (= 2024.01.01.00)
576 + - RCTRequired
577 + - RCTTypeSafety
578 + - React-Core
579 + - React-cxxreact
580 + - React-debug
581 + - React-featureflags
582 + - React-graphics
583 + - React-jsi
584 + - React-jsiexecutor
585 + - React-logger
586 + - React-rendererdebug
587 + - React-runtimescheduler
588 + - React-utils
589 + - ReactCommon/turbomodule/core
590 + - Yoga
591 + - React-Fabric/core (0.76.7):
592 + - DoubleConversion
593 + - fmt (= 9.1.0)
594 + - glog
595 + - hermes-engine
596 + - RCT-Folly/Fabric (= 2024.01.01.00)
597 + - RCTRequired
598 + - RCTTypeSafety
599 + - React-Core
600 + - React-cxxreact
601 + - React-debug
602 + - React-featureflags
603 + - React-graphics
604 + - React-jsi
605 + - React-jsiexecutor
606 + - React-logger
607 + - React-rendererdebug
608 + - React-runtimescheduler
609 + - React-utils
610 + - ReactCommon/turbomodule/core
611 + - React-Fabric/dom (0.76.7):
612 + - DoubleConversion
613 + - fmt (= 9.1.0)
614 + - glog
615 + - hermes-engine
616 + - RCT-Folly/Fabric (= 2024.01.01.00)
617 + - RCTRequired
618 + - RCTTypeSafety
619 + - React-Core
620 + - React-cxxreact
621 + - React-debug
622 + - React-featureflags
623 + - React-graphics
624 + - React-jsi
625 + - React-jsiexecutor
626 + - React-logger
627 + - React-rendererdebug
628 + - React-runtimescheduler
629 + - React-utils
630 + - ReactCommon/turbomodule/core
631 + - React-Fabric/imagemanager (0.76.7):
632 + - DoubleConversion
633 + - fmt (= 9.1.0)
634 + - glog
635 + - hermes-engine
636 + - RCT-Folly/Fabric (= 2024.01.01.00)
637 + - RCTRequired
638 + - RCTTypeSafety
639 + - React-Core
640 + - React-cxxreact
641 + - React-debug
642 + - React-featureflags
643 + - React-graphics
644 + - React-jsi
645 + - React-jsiexecutor
646 + - React-logger
647 + - React-rendererdebug
648 + - React-runtimescheduler
649 + - React-utils
650 + - ReactCommon/turbomodule/core
651 + - React-Fabric/leakchecker (0.76.7):
652 + - DoubleConversion
653 + - fmt (= 9.1.0)
654 + - glog
655 + - hermes-engine
656 + - RCT-Folly/Fabric (= 2024.01.01.00)
657 + - RCTRequired
658 + - RCTTypeSafety
659 + - React-Core
660 + - React-cxxreact
661 + - React-debug
662 + - React-featureflags
663 + - React-graphics
664 + - React-jsi
665 + - React-jsiexecutor
666 + - React-logger
667 + - React-rendererdebug
668 + - React-runtimescheduler
669 + - React-utils
670 + - ReactCommon/turbomodule/core
671 + - React-Fabric/mounting (0.76.7):
672 + - DoubleConversion
673 + - fmt (= 9.1.0)
674 + - glog
675 + - hermes-engine
676 + - RCT-Folly/Fabric (= 2024.01.01.00)
677 + - RCTRequired
678 + - RCTTypeSafety
679 + - React-Core
680 + - React-cxxreact
681 + - React-debug
682 + - React-featureflags
683 + - React-graphics
684 + - React-jsi
685 + - React-jsiexecutor
686 + - React-logger
687 + - React-rendererdebug
688 + - React-runtimescheduler
689 + - React-utils
690 + - ReactCommon/turbomodule/core
691 + - React-Fabric/observers (0.76.7):
692 + - DoubleConversion
693 + - fmt (= 9.1.0)
694 + - glog
695 + - hermes-engine
696 + - RCT-Folly/Fabric (= 2024.01.01.00)
697 + - RCTRequired
698 + - RCTTypeSafety
699 + - React-Core
700 + - React-cxxreact
701 + - React-debug
702 + - React-Fabric/observers/events (= 0.76.7)
703 + - React-featureflags
704 + - React-graphics
705 + - React-jsi
706 + - React-jsiexecutor
707 + - React-logger
708 + - React-rendererdebug
709 + - React-runtimescheduler
710 + - React-utils
711 + - ReactCommon/turbomodule/core
712 + - React-Fabric/observers/events (0.76.7):
713 + - DoubleConversion
714 + - fmt (= 9.1.0)
715 + - glog
716 + - hermes-engine
717 + - RCT-Folly/Fabric (= 2024.01.01.00)
718 + - RCTRequired
719 + - RCTTypeSafety
720 + - React-Core
721 + - React-cxxreact
722 + - React-debug
723 + - React-featureflags
724 + - React-graphics
725 + - React-jsi
726 + - React-jsiexecutor
727 + - React-logger
728 + - React-rendererdebug
729 + - React-runtimescheduler
730 + - React-utils
731 + - ReactCommon/turbomodule/core
732 + - React-Fabric/scheduler (0.76.7):
733 + - DoubleConversion
734 + - fmt (= 9.1.0)
735 + - glog
736 + - hermes-engine
737 + - RCT-Folly/Fabric (= 2024.01.01.00)
738 + - RCTRequired
739 + - RCTTypeSafety
740 + - React-Core
741 + - React-cxxreact
742 + - React-debug
743 + - React-Fabric/observers/events
744 + - React-featureflags
745 + - React-graphics
746 + - React-jsi
747 + - React-jsiexecutor
748 + - React-logger
749 + - React-performancetimeline
750 + - React-rendererdebug
751 + - React-runtimescheduler
752 + - React-utils
753 + - ReactCommon/turbomodule/core
754 + - React-Fabric/telemetry (0.76.7):
755 + - DoubleConversion
756 + - fmt (= 9.1.0)
757 + - glog
758 + - hermes-engine
759 + - RCT-Folly/Fabric (= 2024.01.01.00)
760 + - RCTRequired
761 + - RCTTypeSafety
762 + - React-Core
763 + - React-cxxreact
764 + - React-debug
765 + - React-featureflags
766 + - React-graphics
767 + - React-jsi
768 + - React-jsiexecutor
769 + - React-logger
770 + - React-rendererdebug
771 + - React-runtimescheduler
772 + - React-utils
773 + - ReactCommon/turbomodule/core
774 + - React-Fabric/templateprocessor (0.76.7):
775 + - DoubleConversion
776 + - fmt (= 9.1.0)
777 + - glog
778 + - hermes-engine
779 + - RCT-Folly/Fabric (= 2024.01.01.00)
780 + - RCTRequired
781 + - RCTTypeSafety
782 + - React-Core
783 + - React-cxxreact
784 + - React-debug
785 + - React-featureflags
786 + - React-graphics
787 + - React-jsi
788 + - React-jsiexecutor
789 + - React-logger
790 + - React-rendererdebug
791 + - React-runtimescheduler
792 + - React-utils
793 + - ReactCommon/turbomodule/core
794 + - React-Fabric/uimanager (0.76.7):
795 + - DoubleConversion
796 + - fmt (= 9.1.0)
797 + - glog
798 + - hermes-engine
799 + - RCT-Folly/Fabric (= 2024.01.01.00)
800 + - RCTRequired
801 + - RCTTypeSafety
802 + - React-Core
803 + - React-cxxreact
804 + - React-debug
805 + - React-Fabric/uimanager/consistency (= 0.76.7)
806 + - React-featureflags
807 + - React-graphics
808 + - React-jsi
809 + - React-jsiexecutor
810 + - React-logger
811 + - React-rendererconsistency
812 + - React-rendererdebug
813 + - React-runtimescheduler
814 + - React-utils
815 + - ReactCommon/turbomodule/core
816 + - React-Fabric/uimanager/consistency (0.76.7):
817 + - DoubleConversion
818 + - fmt (= 9.1.0)
819 + - glog
820 + - hermes-engine
821 + - RCT-Folly/Fabric (= 2024.01.01.00)
822 + - RCTRequired
823 + - RCTTypeSafety
824 + - React-Core
825 + - React-cxxreact
826 + - React-debug
827 + - React-featureflags
828 + - React-graphics
829 + - React-jsi
830 + - React-jsiexecutor
831 + - React-logger
832 + - React-rendererconsistency
833 + - React-rendererdebug
834 + - React-runtimescheduler
835 + - React-utils
836 + - ReactCommon/turbomodule/core
837 + - React-FabricComponents (0.76.7):
838 + - DoubleConversion
839 + - fmt (= 9.1.0)
840 + - glog
841 + - hermes-engine
842 + - RCT-Folly/Fabric (= 2024.01.01.00)
843 + - RCTRequired
844 + - RCTTypeSafety
845 + - React-Core
846 + - React-cxxreact
847 + - React-debug
848 + - React-Fabric
849 + - React-FabricComponents/components (= 0.76.7)
850 + - React-FabricComponents/textlayoutmanager (= 0.76.7)
851 + - React-featureflags
852 + - React-graphics
853 + - React-jsi
854 + - React-jsiexecutor
855 + - React-logger
856 + - React-rendererdebug
857 + - React-runtimescheduler
858 + - React-utils
859 + - ReactCodegen
860 + - ReactCommon/turbomodule/core
861 + - Yoga
862 + - React-FabricComponents/components (0.76.7):
863 + - DoubleConversion
864 + - fmt (= 9.1.0)
865 + - glog
866 + - hermes-engine
867 + - RCT-Folly/Fabric (= 2024.01.01.00)
868 + - RCTRequired
869 + - RCTTypeSafety
870 + - React-Core
871 + - React-cxxreact
872 + - React-debug
873 + - React-Fabric
874 + - React-FabricComponents/components/inputaccessory (= 0.76.7)
875 + - React-FabricComponents/components/iostextinput (= 0.76.7)
876 + - React-FabricComponents/components/modal (= 0.76.7)
877 + - React-FabricComponents/components/rncore (= 0.76.7)
878 + - React-FabricComponents/components/safeareaview (= 0.76.7)
879 + - React-FabricComponents/components/scrollview (= 0.76.7)
880 + - React-FabricComponents/components/text (= 0.76.7)
881 + - React-FabricComponents/components/textinput (= 0.76.7)
882 + - React-FabricComponents/components/unimplementedview (= 0.76.7)
883 + - React-featureflags
884 + - React-graphics
885 + - React-jsi
886 + - React-jsiexecutor
887 + - React-logger
888 + - React-rendererdebug
889 + - React-runtimescheduler
890 + - React-utils
891 + - ReactCodegen
892 + - ReactCommon/turbomodule/core
893 + - Yoga
894 + - React-FabricComponents/components/inputaccessory (0.76.7):
895 + - DoubleConversion
896 + - fmt (= 9.1.0)
897 + - glog
898 + - hermes-engine
899 + - RCT-Folly/Fabric (= 2024.01.01.00)
900 + - RCTRequired
901 + - RCTTypeSafety
902 + - React-Core
903 + - React-cxxreact
904 + - React-debug
905 + - React-Fabric
906 + - React-featureflags
907 + - React-graphics
908 + - React-jsi
909 + - React-jsiexecutor
910 + - React-logger
911 + - React-rendererdebug
912 + - React-runtimescheduler
913 + - React-utils
914 + - ReactCodegen
915 + - ReactCommon/turbomodule/core
916 + - Yoga
917 + - React-FabricComponents/components/iostextinput (0.76.7):
918 + - DoubleConversion
919 + - fmt (= 9.1.0)
920 + - glog
921 + - hermes-engine
922 + - RCT-Folly/Fabric (= 2024.01.01.00)
923 + - RCTRequired
924 + - RCTTypeSafety
925 + - React-Core
926 + - React-cxxreact
927 + - React-debug
928 + - React-Fabric
929 + - React-featureflags
930 + - React-graphics
931 + - React-jsi
932 + - React-jsiexecutor
933 + - React-logger
934 + - React-rendererdebug
935 + - React-runtimescheduler
936 + - React-utils
937 + - ReactCodegen
938 + - ReactCommon/turbomodule/core
939 + - Yoga
940 + - React-FabricComponents/components/modal (0.76.7):
941 + - DoubleConversion
942 + - fmt (= 9.1.0)
943 + - glog
944 + - hermes-engine
945 + - RCT-Folly/Fabric (= 2024.01.01.00)
946 + - RCTRequired
947 + - RCTTypeSafety
948 + - React-Core
949 + - React-cxxreact
950 + - React-debug
951 + - React-Fabric
952 + - React-featureflags
953 + - React-graphics
954 + - React-jsi
955 + - React-jsiexecutor
956 + - React-logger
957 + - React-rendererdebug
958 + - React-runtimescheduler
959 + - React-utils
960 + - ReactCodegen
961 + - ReactCommon/turbomodule/core
962 + - Yoga
963 + - React-FabricComponents/components/rncore (0.76.7):
964 + - DoubleConversion
965 + - fmt (= 9.1.0)
966 + - glog
967 + - hermes-engine
968 + - RCT-Folly/Fabric (= 2024.01.01.00)
969 + - RCTRequired
970 + - RCTTypeSafety
971 + - React-Core
972 + - React-cxxreact
973 + - React-debug
974 + - React-Fabric
975 + - React-featureflags
976 + - React-graphics
977 + - React-jsi
978 + - React-jsiexecutor
979 + - React-logger
980 + - React-rendererdebug
981 + - React-runtimescheduler
982 + - React-utils
983 + - ReactCodegen
984 + - ReactCommon/turbomodule/core
985 + - Yoga
986 + - React-FabricComponents/components/safeareaview (0.76.7):
987 + - DoubleConversion
988 + - fmt (= 9.1.0)
989 + - glog
990 + - hermes-engine
991 + - RCT-Folly/Fabric (= 2024.01.01.00)
992 + - RCTRequired
993 + - RCTTypeSafety
994 + - React-Core
995 + - React-cxxreact
996 + - React-debug
997 + - React-Fabric
998 + - React-featureflags
999 + - React-graphics
1000 + - React-jsi
1001 + - React-jsiexecutor
1002 + - React-logger
1003 + - React-rendererdebug
1004 + - React-runtimescheduler
1005 + - React-utils
1006 + - ReactCodegen
1007 + - ReactCommon/turbomodule/core
1008 + - Yoga
1009 + - React-FabricComponents/components/scrollview (0.76.7):
1010 + - DoubleConversion
1011 + - fmt (= 9.1.0)
1012 + - glog
1013 + - hermes-engine
1014 + - RCT-Folly/Fabric (= 2024.01.01.00)
1015 + - RCTRequired
1016 + - RCTTypeSafety
1017 + - React-Core
1018 + - React-cxxreact
1019 + - React-debug
1020 + - React-Fabric
1021 + - React-featureflags
1022 + - React-graphics
1023 + - React-jsi
1024 + - React-jsiexecutor
1025 + - React-logger
1026 + - React-rendererdebug
1027 + - React-runtimescheduler
1028 + - React-utils
1029 + - ReactCodegen
1030 + - ReactCommon/turbomodule/core
1031 + - Yoga
1032 + - React-FabricComponents/components/text (0.76.7):
1033 + - DoubleConversion
1034 + - fmt (= 9.1.0)
1035 + - glog
1036 + - hermes-engine
1037 + - RCT-Folly/Fabric (= 2024.01.01.00)
1038 + - RCTRequired
1039 + - RCTTypeSafety
1040 + - React-Core
1041 + - React-cxxreact
1042 + - React-debug
1043 + - React-Fabric
1044 + - React-featureflags
1045 + - React-graphics
1046 + - React-jsi
1047 + - React-jsiexecutor
1048 + - React-logger
1049 + - React-rendererdebug
1050 + - React-runtimescheduler
1051 + - React-utils
1052 + - ReactCodegen
1053 + - ReactCommon/turbomodule/core
1054 + - Yoga
1055 + - React-FabricComponents/components/textinput (0.76.7):
1056 + - DoubleConversion
1057 + - fmt (= 9.1.0)
1058 + - glog
1059 + - hermes-engine
1060 + - RCT-Folly/Fabric (= 2024.01.01.00)
1061 + - RCTRequired
1062 + - RCTTypeSafety
1063 + - React-Core
1064 + - React-cxxreact
1065 + - React-debug
1066 + - React-Fabric
1067 + - React-featureflags
1068 + - React-graphics
1069 + - React-jsi
1070 + - React-jsiexecutor
1071 + - React-logger
1072 + - React-rendererdebug
1073 + - React-runtimescheduler
1074 + - React-utils
1075 + - ReactCodegen
1076 + - ReactCommon/turbomodule/core
1077 + - Yoga
1078 + - React-FabricComponents/components/unimplementedview (0.76.7):
1079 + - DoubleConversion
1080 + - fmt (= 9.1.0)
1081 + - glog
1082 + - hermes-engine
1083 + - RCT-Folly/Fabric (= 2024.01.01.00)
1084 + - RCTRequired
1085 + - RCTTypeSafety
1086 + - React-Core
1087 + - React-cxxreact
1088 + - React-debug
1089 + - React-Fabric
1090 + - React-featureflags
1091 + - React-graphics
1092 + - React-jsi
1093 + - React-jsiexecutor
1094 + - React-logger
1095 + - React-rendererdebug
1096 + - React-runtimescheduler
1097 + - React-utils
1098 + - ReactCodegen
1099 + - ReactCommon/turbomodule/core
1100 + - Yoga
1101 + - React-FabricComponents/textlayoutmanager (0.76.7):
1102 + - DoubleConversion
1103 + - fmt (= 9.1.0)
1104 + - glog
1105 + - hermes-engine
1106 + - RCT-Folly/Fabric (= 2024.01.01.00)
1107 + - RCTRequired
1108 + - RCTTypeSafety
1109 + - React-Core
1110 + - React-cxxreact
1111 + - React-debug
1112 + - React-Fabric
1113 + - React-featureflags
1114 + - React-graphics
1115 + - React-jsi
1116 + - React-jsiexecutor
1117 + - React-logger
1118 + - React-rendererdebug
1119 + - React-runtimescheduler
1120 + - React-utils
1121 + - ReactCodegen
1122 + - ReactCommon/turbomodule/core
1123 + - Yoga
1124 + - React-FabricImage (0.76.7):
1125 + - DoubleConversion
1126 + - fmt (= 9.1.0)
1127 + - glog
1128 + - hermes-engine
1129 + - RCT-Folly/Fabric (= 2024.01.01.00)
1130 + - RCTRequired (= 0.76.7)
1131 + - RCTTypeSafety (= 0.76.7)
1132 + - React-Fabric
1133 + - React-graphics
1134 + - React-ImageManager
1135 + - React-jsi
1136 + - React-jsiexecutor (= 0.76.7)
1137 + - React-logger
1138 + - React-rendererdebug
1139 + - React-utils
1140 + - ReactCommon
1141 + - Yoga
1142 + - React-featureflags (0.76.7)
1143 + - React-featureflagsnativemodule (0.76.7):
1144 + - DoubleConversion
1145 + - glog
1146 + - hermes-engine
1147 + - RCT-Folly (= 2024.01.01.00)
1148 + - RCTRequired
1149 + - RCTTypeSafety
1150 + - React-Core
1151 + - React-debug
1152 + - React-Fabric
1153 + - React-featureflags
1154 + - React-graphics
1155 + - React-ImageManager
1156 + - React-NativeModulesApple
1157 + - React-RCTFabric
1158 + - React-rendererdebug
1159 + - React-utils
1160 + - ReactCodegen
1161 + - ReactCommon/turbomodule/bridging
1162 + - ReactCommon/turbomodule/core
1163 + - Yoga
1164 + - React-graphics (0.76.7):
1165 + - DoubleConversion
1166 + - fmt (= 9.1.0)
1167 + - glog
1168 + - RCT-Folly/Fabric (= 2024.01.01.00)
1169 + - React-jsi
1170 + - React-jsiexecutor
1171 + - React-utils
1172 + - React-hermes (0.76.7):
1173 + - DoubleConversion
1174 + - fmt (= 9.1.0)
1175 + - glog
1176 + - hermes-engine
1177 + - RCT-Folly (= 2024.01.01.00)
1178 + - React-cxxreact (= 0.76.7)
1179 + - React-jsi
1180 + - React-jsiexecutor (= 0.76.7)
1181 + - React-jsinspector
1182 + - React-perflogger (= 0.76.7)
1183 + - React-runtimeexecutor
1184 + - React-idlecallbacksnativemodule (0.76.7):
1185 + - DoubleConversion
1186 + - glog
1187 + - hermes-engine
1188 + - RCT-Folly (= 2024.01.01.00)
1189 + - RCTRequired
1190 + - RCTTypeSafety
1191 + - React-Core
1192 + - React-debug
1193 + - React-Fabric
1194 + - React-featureflags
1195 + - React-graphics
1196 + - React-ImageManager
1197 + - React-NativeModulesApple
1198 + - React-RCTFabric
1199 + - React-rendererdebug
1200 + - React-runtimescheduler
1201 + - React-utils
1202 + - ReactCodegen
1203 + - ReactCommon/turbomodule/bridging
1204 + - ReactCommon/turbomodule/core
1205 + - Yoga
1206 + - React-ImageManager (0.76.7):
1207 + - glog
1208 + - RCT-Folly/Fabric
1209 + - React-Core/Default
1210 + - React-debug
1211 + - React-Fabric
1212 + - React-graphics
1213 + - React-rendererdebug
1214 + - React-utils
1215 + - React-jserrorhandler (0.76.7):
1216 + - glog
1217 + - hermes-engine
1218 + - RCT-Folly/Fabric (= 2024.01.01.00)
1219 + - React-cxxreact
1220 + - React-debug
1221 + - React-jsi
1222 + - React-jsi (0.76.7):
1223 + - boost
1224 + - DoubleConversion
1225 + - fmt (= 9.1.0)
1226 + - glog
1227 + - hermes-engine
1228 + - RCT-Folly (= 2024.01.01.00)
1229 + - React-jsiexecutor (0.76.7):
1230 + - DoubleConversion
1231 + - fmt (= 9.1.0)
1232 + - glog
1233 + - hermes-engine
1234 + - RCT-Folly (= 2024.01.01.00)
1235 + - React-cxxreact (= 0.76.7)
1236 + - React-jsi (= 0.76.7)
1237 + - React-jsinspector
1238 + - React-perflogger (= 0.76.7)
1239 + - React-jsinspector (0.76.7):
1240 + - DoubleConversion
1241 + - glog
1242 + - hermes-engine
1243 + - RCT-Folly (= 2024.01.01.00)
1244 + - React-featureflags
1245 + - React-jsi
1246 + - React-perflogger (= 0.76.7)
1247 + - React-runtimeexecutor (= 0.76.7)
1248 + - React-jsitracing (0.76.7):
1249 + - React-jsi
1250 + - React-logger (0.76.7):
1251 + - glog
1252 + - React-Mapbuffer (0.76.7):
1253 + - glog
1254 + - React-debug
1255 + - React-microtasksnativemodule (0.76.7):
1256 + - DoubleConversion
1257 + - glog
1258 + - hermes-engine
1259 + - RCT-Folly (= 2024.01.01.00)
1260 + - RCTRequired
1261 + - RCTTypeSafety
1262 + - React-Core
1263 + - React-debug
1264 + - React-Fabric
1265 + - React-featureflags
1266 + - React-graphics
1267 + - React-ImageManager
1268 + - React-NativeModulesApple
1269 + - React-RCTFabric
1270 + - React-rendererdebug
1271 + - React-utils
1272 + - ReactCodegen
1273 + - ReactCommon/turbomodule/bridging
1274 + - ReactCommon/turbomodule/core
1275 + - Yoga
1276 + - react-native-safe-area-context (5.0.0):
1277 + - React-Core
1278 + - React-nativeconfig (0.76.7)
1279 + - React-NativeModulesApple (0.76.7):
1280 + - glog
1281 + - hermes-engine
1282 + - React-callinvoker
1283 + - React-Core
1284 + - React-cxxreact
1285 + - React-jsi
1286 + - React-jsinspector
1287 + - React-runtimeexecutor
1288 + - ReactCommon/turbomodule/bridging
1289 + - ReactCommon/turbomodule/core
1290 + - React-perflogger (0.76.7):
1291 + - DoubleConversion
1292 + - RCT-Folly (= 2024.01.01.00)
1293 + - React-performancetimeline (0.76.7):
1294 + - RCT-Folly (= 2024.01.01.00)
1295 + - React-cxxreact
1296 + - React-timing
1297 + - React-RCTActionSheet (0.76.7):
1298 + - React-Core/RCTActionSheetHeaders (= 0.76.7)
1299 + - React-RCTAnimation (0.76.7):
1300 + - RCT-Folly (= 2024.01.01.00)
1301 + - RCTTypeSafety
1302 + - React-Core/RCTAnimationHeaders
1303 + - React-jsi
1304 + - React-NativeModulesApple
1305 + - ReactCodegen
1306 + - ReactCommon
1307 + - React-RCTAppDelegate (0.76.7):
1308 + - RCT-Folly (= 2024.01.01.00)
1309 + - RCTRequired
1310 + - RCTTypeSafety
1311 + - React-Core
1312 + - React-CoreModules
1313 + - React-debug
1314 + - React-defaultsnativemodule
1315 + - React-Fabric
1316 + - React-featureflags
1317 + - React-graphics
1318 + - React-hermes
1319 + - React-nativeconfig
1320 + - React-NativeModulesApple
1321 + - React-RCTFabric
1322 + - React-RCTImage
1323 + - React-RCTNetwork
1324 + - React-rendererdebug
1325 + - React-RuntimeApple
1326 + - React-RuntimeCore
1327 + - React-RuntimeHermes
1328 + - React-runtimescheduler
1329 + - React-utils
1330 + - ReactCodegen
1331 + - ReactCommon
1332 + - React-RCTBlob (0.76.7):
1333 + - DoubleConversion
1334 + - fmt (= 9.1.0)
1335 + - hermes-engine
1336 + - RCT-Folly (= 2024.01.01.00)
1337 + - React-Core/RCTBlobHeaders
1338 + - React-Core/RCTWebSocket
1339 + - React-jsi
1340 + - React-jsinspector
1341 + - React-NativeModulesApple
1342 + - React-RCTNetwork
1343 + - ReactCodegen
1344 + - ReactCommon
1345 + - React-RCTFabric (0.76.7):
1346 + - glog
1347 + - hermes-engine
1348 + - RCT-Folly/Fabric (= 2024.01.01.00)
1349 + - React-Core
1350 + - React-debug
1351 + - React-Fabric
1352 + - React-FabricComponents
1353 + - React-FabricImage
1354 + - React-featureflags
1355 + - React-graphics
1356 + - React-ImageManager
1357 + - React-jsi
1358 + - React-jsinspector
1359 + - React-nativeconfig
1360 + - React-performancetimeline
1361 + - React-RCTImage
1362 + - React-RCTText
1363 + - React-rendererconsistency
1364 + - React-rendererdebug
1365 + - React-runtimescheduler
1366 + - React-utils
1367 + - Yoga
1368 + - React-RCTImage (0.76.7):
1369 + - RCT-Folly (= 2024.01.01.00)
1370 + - RCTTypeSafety
1371 + - React-Core/RCTImageHeaders
1372 + - React-jsi
1373 + - React-NativeModulesApple
1374 + - React-RCTNetwork
1375 + - ReactCodegen
1376 + - ReactCommon
1377 + - React-RCTLinking (0.76.7):
1378 + - React-Core/RCTLinkingHeaders (= 0.76.7)
1379 + - React-jsi (= 0.76.7)
1380 + - React-NativeModulesApple
1381 + - ReactCodegen
1382 + - ReactCommon
1383 + - ReactCommon/turbomodule/core (= 0.76.7)
1384 + - React-RCTNetwork (0.76.7):
1385 + - RCT-Folly (= 2024.01.01.00)
1386 + - RCTTypeSafety
1387 + - React-Core/RCTNetworkHeaders
1388 + - React-jsi
1389 + - React-NativeModulesApple
1390 + - ReactCodegen
1391 + - ReactCommon
1392 + - React-RCTSettings (0.76.7):
1393 + - RCT-Folly (= 2024.01.01.00)
1394 + - RCTTypeSafety
1395 + - React-Core/RCTSettingsHeaders
1396 + - React-jsi
1397 + - React-NativeModulesApple
1398 + - ReactCodegen
1399 + - ReactCommon
1400 + - React-RCTText (0.76.7):
1401 + - React-Core/RCTTextHeaders (= 0.76.7)
1402 + - Yoga
1403 + - React-RCTVibration (0.76.7):
1404 + - RCT-Folly (= 2024.01.01.00)
1405 + - React-Core/RCTVibrationHeaders
1406 + - React-jsi
1407 + - React-NativeModulesApple
1408 + - ReactCodegen
1409 + - ReactCommon
1410 + - React-rendererconsistency (0.76.7)
1411 + - React-rendererdebug (0.76.7):
1412 + - DoubleConversion
1413 + - fmt (= 9.1.0)
1414 + - RCT-Folly (= 2024.01.01.00)
1415 + - React-debug
1416 + - React-rncore (0.76.7)
1417 + - React-RuntimeApple (0.76.7):
1418 + - hermes-engine
1419 + - RCT-Folly/Fabric (= 2024.01.01.00)
1420 + - React-callinvoker
1421 + - React-Core/Default
1422 + - React-CoreModules
1423 + - React-cxxreact
1424 + - React-jserrorhandler
1425 + - React-jsi
1426 + - React-jsiexecutor
1427 + - React-jsinspector
1428 + - React-Mapbuffer
1429 + - React-NativeModulesApple
1430 + - React-RCTFabric
1431 + - React-RuntimeCore
1432 + - React-runtimeexecutor
1433 + - React-RuntimeHermes
1434 + - React-runtimescheduler
1435 + - React-utils
1436 + - React-RuntimeCore (0.76.7):
1437 + - glog
1438 + - hermes-engine
1439 + - RCT-Folly/Fabric (= 2024.01.01.00)
1440 + - React-cxxreact
1441 + - React-featureflags
1442 + - React-jserrorhandler
1443 + - React-jsi
1444 + - React-jsiexecutor
1445 + - React-jsinspector
1446 + - React-performancetimeline
1447 + - React-runtimeexecutor
1448 + - React-runtimescheduler
1449 + - React-utils
1450 + - React-runtimeexecutor (0.76.7):
1451 + - React-jsi (= 0.76.7)
1452 + - React-RuntimeHermes (0.76.7):
1453 + - hermes-engine
1454 + - RCT-Folly/Fabric (= 2024.01.01.00)
1455 + - React-featureflags
1456 + - React-hermes
1457 + - React-jsi
1458 + - React-jsinspector
1459 + - React-jsitracing
1460 + - React-nativeconfig
1461 + - React-RuntimeCore
1462 + - React-utils
1463 + - React-runtimescheduler (0.76.7):
1464 + - glog
1465 + - hermes-engine
1466 + - RCT-Folly (= 2024.01.01.00)
1467 + - React-callinvoker
1468 + - React-cxxreact
1469 + - React-debug
1470 + - React-featureflags
1471 + - React-jsi
1472 + - React-performancetimeline
1473 + - React-rendererconsistency
1474 + - React-rendererdebug
1475 + - React-runtimeexecutor
1476 + - React-timing
1477 + - React-utils
1478 + - React-timing (0.76.7)
1479 + - React-utils (0.76.7):
1480 + - glog
1481 + - hermes-engine
1482 + - RCT-Folly (= 2024.01.01.00)
1483 + - React-debug
1484 + - React-jsi (= 0.76.7)
1485 + - ReactCodegen (0.76.7):
1486 + - DoubleConversion
1487 + - glog
1488 + - hermes-engine
1489 + - RCT-Folly
1490 + - RCTRequired
1491 + - RCTTypeSafety
1492 + - React-Core
1493 + - React-debug
1494 + - React-Fabric
1495 + - React-FabricImage
1496 + - React-featureflags
1497 + - React-graphics
1498 + - React-jsi
1499 + - React-jsiexecutor
1500 + - React-NativeModulesApple
1501 + - React-rendererdebug
1502 + - React-utils
1503 + - ReactCommon/turbomodule/bridging
1504 + - ReactCommon/turbomodule/core
1505 + - ReactCommon (0.76.7):
1506 + - ReactCommon/turbomodule (= 0.76.7)
1507 + - ReactCommon/turbomodule (0.76.7):
1508 + - DoubleConversion
1509 + - fmt (= 9.1.0)
1510 + - glog
1511 + - hermes-engine
1512 + - RCT-Folly (= 2024.01.01.00)
1513 + - React-callinvoker (= 0.76.7)
1514 + - React-cxxreact (= 0.76.7)
1515 + - React-jsi (= 0.76.7)
1516 + - React-logger (= 0.76.7)
1517 + - React-perflogger (= 0.76.7)
1518 + - ReactCommon/turbomodule/bridging (= 0.76.7)
1519 + - ReactCommon/turbomodule/core (= 0.76.7)
1520 + - ReactCommon/turbomodule/bridging (0.76.7):
1521 + - DoubleConversion
1522 + - fmt (= 9.1.0)
1523 + - glog
1524 + - hermes-engine
1525 + - RCT-Folly (= 2024.01.01.00)
1526 + - React-callinvoker (= 0.76.7)
1527 + - React-cxxreact (= 0.76.7)
1528 + - React-jsi (= 0.76.7)
1529 + - React-logger (= 0.76.7)
1530 + - React-perflogger (= 0.76.7)
1531 + - ReactCommon/turbomodule/core (0.76.7):
1532 + - DoubleConversion
1533 + - fmt (= 9.1.0)
1534 + - glog
1535 + - hermes-engine
1536 + - RCT-Folly (= 2024.01.01.00)
1537 + - React-callinvoker (= 0.76.7)
1538 + - React-cxxreact (= 0.76.7)
1539 + - React-debug (= 0.76.7)
1540 + - React-featureflags (= 0.76.7)
1541 + - React-jsi (= 0.76.7)
1542 + - React-logger (= 0.76.7)
1543 + - React-perflogger (= 0.76.7)
1544 + - React-utils (= 0.76.7)
1545 + - SocketRocket (0.7.1)
1546 + - Yoga (0.0.0)
1547 +
1548 +DEPENDENCIES:
1549 + - boost (from `../node_modules/react-native/third-party-podspecs/boost.podspec`)
1550 + - DoubleConversion (from `../node_modules/react-native/third-party-podspecs/DoubleConversion.podspec`)
1551 + - EXConstants (from `../node_modules/expo-constants/ios`)
1552 + - Expo (from `../node_modules/expo`)
1553 + - ExpoAsset (from `../node_modules/expo-asset/ios`)
1554 + - ExpoModulesCore (from `../node_modules/expo-modules-core`)
1555 + - FBLazyVector (from `../node_modules/react-native/Libraries/FBLazyVector`)
1556 + - fmt (from `../node_modules/react-native/third-party-podspecs/fmt.podspec`)
1557 + - glog (from `../node_modules/react-native/third-party-podspecs/glog.podspec`)
1558 + - hermes-engine (from `../node_modules/react-native/sdks/hermes-engine/hermes-engine.podspec`)
1559 + - OndeInference (from `../../ios`)
1560 + - RCT-Folly (from `../node_modules/react-native/third-party-podspecs/RCT-Folly.podspec`)
1561 + - RCT-Folly/Fabric (from `../node_modules/react-native/third-party-podspecs/RCT-Folly.podspec`)
1562 + - RCTDeprecation (from `../node_modules/react-native/ReactApple/Libraries/RCTFoundation/RCTDeprecation`)
1563 + - RCTRequired (from `../node_modules/react-native/Libraries/Required`)
1564 + - RCTTypeSafety (from `../node_modules/react-native/Libraries/TypeSafety`)
1565 + - React (from `../node_modules/react-native/`)
1566 + - React-callinvoker (from `../node_modules/react-native/ReactCommon/callinvoker`)
1567 + - React-Core (from `../node_modules/react-native/`)
1568 + - React-Core/RCTWebSocket (from `../node_modules/react-native/`)
1569 + - React-CoreModules (from `../node_modules/react-native/React/CoreModules`)
1570 + - React-cxxreact (from `../node_modules/react-native/ReactCommon/cxxreact`)
1571 + - React-debug (from `../node_modules/react-native/ReactCommon/react/debug`)
1572 + - React-defaultsnativemodule (from `../node_modules/react-native/ReactCommon/react/nativemodule/defaults`)
1573 + - React-domnativemodule (from `../node_modules/react-native/ReactCommon/react/nativemodule/dom`)
1574 + - React-Fabric (from `../node_modules/react-native/ReactCommon`)
1575 + - React-FabricComponents (from `../node_modules/react-native/ReactCommon`)
1576 + - React-FabricImage (from `../node_modules/react-native/ReactCommon`)
1577 + - React-featureflags (from `../node_modules/react-native/ReactCommon/react/featureflags`)
1578 + - React-featureflagsnativemodule (from `../node_modules/react-native/ReactCommon/react/nativemodule/featureflags`)
1579 + - React-graphics (from `../node_modules/react-native/ReactCommon/react/renderer/graphics`)
1580 + - React-hermes (from `../node_modules/react-native/ReactCommon/hermes`)
1581 + - React-idlecallbacksnativemodule (from `../node_modules/react-native/ReactCommon/react/nativemodule/idlecallbacks`)
1582 + - React-ImageManager (from `../node_modules/react-native/ReactCommon/react/renderer/imagemanager/platform/ios`)
1583 + - React-jserrorhandler (from `../node_modules/react-native/ReactCommon/jserrorhandler`)
1584 + - React-jsi (from `../node_modules/react-native/ReactCommon/jsi`)
1585 + - React-jsiexecutor (from `../node_modules/react-native/ReactCommon/jsiexecutor`)
1586 + - React-jsinspector (from `../node_modules/react-native/ReactCommon/jsinspector-modern`)
1587 + - React-jsitracing (from `../node_modules/react-native/ReactCommon/hermes/executor/`)
1588 + - React-logger (from `../node_modules/react-native/ReactCommon/logger`)
1589 + - React-Mapbuffer (from `../node_modules/react-native/ReactCommon`)
1590 + - React-microtasksnativemodule (from `../node_modules/react-native/ReactCommon/react/nativemodule/microtasks`)
1591 + - react-native-safe-area-context (from `../node_modules/react-native-safe-area-context`)
1592 + - React-nativeconfig (from `../node_modules/react-native/ReactCommon`)
1593 + - React-NativeModulesApple (from `../node_modules/react-native/ReactCommon/react/nativemodule/core/platform/ios`)
1594 + - React-perflogger (from `../node_modules/react-native/ReactCommon/reactperflogger`)
1595 + - React-performancetimeline (from `../node_modules/react-native/ReactCommon/react/performance/timeline`)
1596 + - React-RCTActionSheet (from `../node_modules/react-native/Libraries/ActionSheetIOS`)
1597 + - React-RCTAnimation (from `../node_modules/react-native/Libraries/NativeAnimation`)
1598 + - React-RCTAppDelegate (from `../node_modules/react-native/Libraries/AppDelegate`)
1599 + - React-RCTBlob (from `../node_modules/react-native/Libraries/Blob`)
1600 + - React-RCTFabric (from `../node_modules/react-native/React`)
1601 + - React-RCTImage (from `../node_modules/react-native/Libraries/Image`)
1602 + - React-RCTLinking (from `../node_modules/react-native/Libraries/LinkingIOS`)
1603 + - React-RCTNetwork (from `../node_modules/react-native/Libraries/Network`)
1604 + - React-RCTSettings (from `../node_modules/react-native/Libraries/Settings`)
1605 + - React-RCTText (from `../node_modules/react-native/Libraries/Text`)
1606 + - React-RCTVibration (from `../node_modules/react-native/Libraries/Vibration`)
1607 + - React-rendererconsistency (from `../node_modules/react-native/ReactCommon/react/renderer/consistency`)
1608 + - React-rendererdebug (from `../node_modules/react-native/ReactCommon/react/renderer/debug`)
1609 + - React-rncore (from `../node_modules/react-native/ReactCommon`)
1610 + - React-RuntimeApple (from `../node_modules/react-native/ReactCommon/react/runtime/platform/ios`)
1611 + - React-RuntimeCore (from `../node_modules/react-native/ReactCommon/react/runtime`)
1612 + - React-runtimeexecutor (from `../node_modules/react-native/ReactCommon/runtimeexecutor`)
1613 + - React-RuntimeHermes (from `../node_modules/react-native/ReactCommon/react/runtime`)
1614 + - React-runtimescheduler (from `../node_modules/react-native/ReactCommon/react/renderer/runtimescheduler`)
1615 + - React-timing (from `../node_modules/react-native/ReactCommon/react/timing`)
1616 + - React-utils (from `../node_modules/react-native/ReactCommon/react/utils`)
1617 + - ReactCodegen (from `build/generated/ios`)
1618 + - ReactCommon/turbomodule/core (from `../node_modules/react-native/ReactCommon`)
1619 + - Yoga (from `../node_modules/react-native/ReactCommon/yoga`)
1620 +
1621 +SPEC REPOS:
1622 + trunk:
1623 + - SocketRocket
1624 +
1625 +EXTERNAL SOURCES:
1626 + boost:
1627 + :podspec: "../node_modules/react-native/third-party-podspecs/boost.podspec"
1628 + DoubleConversion:
1629 + :podspec: "../node_modules/react-native/third-party-podspecs/DoubleConversion.podspec"
1630 + EXConstants:
1631 + :path: "../node_modules/expo-constants/ios"
1632 + Expo:
1633 + :path: "../node_modules/expo"
1634 + ExpoAsset:
1635 + :path: "../node_modules/expo-asset/ios"
1636 + ExpoModulesCore:
1637 + :path: "../node_modules/expo-modules-core"
1638 + FBLazyVector:
1639 + :path: "../node_modules/react-native/Libraries/FBLazyVector"
1640 + fmt:
1641 + :podspec: "../node_modules/react-native/third-party-podspecs/fmt.podspec"
1642 + glog:
1643 + :podspec: "../node_modules/react-native/third-party-podspecs/glog.podspec"
1644 + hermes-engine:
1645 + :podspec: "../node_modules/react-native/sdks/hermes-engine/hermes-engine.podspec"
1646 + :tag: hermes-2024-11-12-RNv0.76.2-5b4aa20c719830dcf5684832b89a6edb95ac3d64
1647 + OndeInference:
1648 + :path: "../../ios"
1649 + RCT-Folly:
1650 + :podspec: "../node_modules/react-native/third-party-podspecs/RCT-Folly.podspec"
1651 + RCTDeprecation:
1652 + :path: "../node_modules/react-native/ReactApple/Libraries/RCTFoundation/RCTDeprecation"
1653 + RCTRequired:
1654 + :path: "../node_modules/react-native/Libraries/Required"
1655 + RCTTypeSafety:
1656 + :path: "../node_modules/react-native/Libraries/TypeSafety"
1657 + React:
1658 + :path: "../node_modules/react-native/"
1659 + React-callinvoker:
1660 + :path: "../node_modules/react-native/ReactCommon/callinvoker"
1661 + React-Core:
1662 + :path: "../node_modules/react-native/"
1663 + React-CoreModules:
1664 + :path: "../node_modules/react-native/React/CoreModules"
1665 + React-cxxreact:
1666 + :path: "../node_modules/react-native/ReactCommon/cxxreact"
1667 + React-debug:
1668 + :path: "../node_modules/react-native/ReactCommon/react/debug"
1669 + React-defaultsnativemodule:
1670 + :path: "../node_modules/react-native/ReactCommon/react/nativemodule/defaults"
1671 + React-domnativemodule:
1672 + :path: "../node_modules/react-native/ReactCommon/react/nativemodule/dom"
1673 + React-Fabric:
1674 + :path: "../node_modules/react-native/ReactCommon"
1675 + React-FabricComponents:
1676 + :path: "../node_modules/react-native/ReactCommon"
1677 + React-FabricImage:
1678 + :path: "../node_modules/react-native/ReactCommon"
1679 + React-featureflags:
1680 + :path: "../node_modules/react-native/ReactCommon/react/featureflags"
1681 + React-featureflagsnativemodule:
1682 + :path: "../node_modules/react-native/ReactCommon/react/nativemodule/featureflags"
1683 + React-graphics:
1684 + :path: "../node_modules/react-native/ReactCommon/react/renderer/graphics"
1685 + React-hermes:
1686 + :path: "../node_modules/react-native/ReactCommon/hermes"
1687 + React-idlecallbacksnativemodule:
1688 + :path: "../node_modules/react-native/ReactCommon/react/nativemodule/idlecallbacks"
1689 + React-ImageManager:
1690 + :path: "../node_modules/react-native/ReactCommon/react/renderer/imagemanager/platform/ios"
1691 + React-jserrorhandler:
1692 + :path: "../node_modules/react-native/ReactCommon/jserrorhandler"
1693 + React-jsi:
1694 + :path: "../node_modules/react-native/ReactCommon/jsi"
1695 + React-jsiexecutor:
1696 + :path: "../node_modules/react-native/ReactCommon/jsiexecutor"
1697 + React-jsinspector:
1698 + :path: "../node_modules/react-native/ReactCommon/jsinspector-modern"
1699 + React-jsitracing:
1700 + :path: "../node_modules/react-native/ReactCommon/hermes/executor/"
1701 + React-logger:
1702 + :path: "../node_modules/react-native/ReactCommon/logger"
1703 + React-Mapbuffer:
1704 + :path: "../node_modules/react-native/ReactCommon"
1705 + React-microtasksnativemodule:
1706 + :path: "../node_modules/react-native/ReactCommon/react/nativemodule/microtasks"
1707 + react-native-safe-area-context:
1708 + :path: "../node_modules/react-native-safe-area-context"
1709 + React-nativeconfig:
1710 + :path: "../node_modules/react-native/ReactCommon"
1711 + React-NativeModulesApple:
1712 + :path: "../node_modules/react-native/ReactCommon/react/nativemodule/core/platform/ios"
1713 + React-perflogger:
1714 + :path: "../node_modules/react-native/ReactCommon/reactperflogger"
1715 + React-performancetimeline:
1716 + :path: "../node_modules/react-native/ReactCommon/react/performance/timeline"
1717 + React-RCTActionSheet:
1718 + :path: "../node_modules/react-native/Libraries/ActionSheetIOS"
1719 + React-RCTAnimation:
1720 + :path: "../node_modules/react-native/Libraries/NativeAnimation"
1721 + React-RCTAppDelegate:
1722 + :path: "../node_modules/react-native/Libraries/AppDelegate"
1723 + React-RCTBlob:
1724 + :path: "../node_modules/react-native/Libraries/Blob"
1725 + React-RCTFabric:
1726 + :path: "../node_modules/react-native/React"
1727 + React-RCTImage:
1728 + :path: "../node_modules/react-native/Libraries/Image"
1729 + React-RCTLinking:
1730 + :path: "../node_modules/react-native/Libraries/LinkingIOS"
1731 + React-RCTNetwork:
1732 + :path: "../node_modules/react-native/Libraries/Network"
1733 + React-RCTSettings:
1734 + :path: "../node_modules/react-native/Libraries/Settings"
1735 + React-RCTText:
1736 + :path: "../node_modules/react-native/Libraries/Text"
1737 + React-RCTVibration:
1738 + :path: "../node_modules/react-native/Libraries/Vibration"
1739 + React-rendererconsistency:
1740 + :path: "../node_modules/react-native/ReactCommon/react/renderer/consistency"
1741 + React-rendererdebug:
1742 + :path: "../node_modules/react-native/ReactCommon/react/renderer/debug"
1743 + React-rncore:
1744 + :path: "../node_modules/react-native/ReactCommon"
1745 + React-RuntimeApple:
1746 + :path: "../node_modules/react-native/ReactCommon/react/runtime/platform/ios"
1747 + React-RuntimeCore:
1748 + :path: "../node_modules/react-native/ReactCommon/react/runtime"
1749 + React-runtimeexecutor:
1750 + :path: "../node_modules/react-native/ReactCommon/runtimeexecutor"
1751 + React-RuntimeHermes:
1752 + :path: "../node_modules/react-native/ReactCommon/react/runtime"
1753 + React-runtimescheduler:
1754 + :path: "../node_modules/react-native/ReactCommon/react/renderer/runtimescheduler"
1755 + React-timing:
1756 + :path: "../node_modules/react-native/ReactCommon/react/timing"
1757 + React-utils:
1758 + :path: "../node_modules/react-native/ReactCommon/react/utils"
1759 + ReactCodegen:
1760 + :path: build/generated/ios
1761 + ReactCommon:
1762 + :path: "../node_modules/react-native/ReactCommon"
1763 + Yoga:
1764 + :path: "../node_modules/react-native/ReactCommon/yoga"
1765 +
1766 +SPEC CHECKSUMS:
1767 + boost: 1dca942403ed9342f98334bf4c3621f011aa7946
1768 + DoubleConversion: f16ae600a246532c4020132d54af21d0ddb2a385
1769 + EXConstants: f823af920c7a2ddc84dae314cfcce23796c00c7f
1770 + Expo: 4bb70893882e6382b41d1e910d7226c6a1b85f0a
1771 + ExpoAsset: 6b2936edf301b6a0db65bb0c8ba09dbe0816981e
1772 + ExpoModulesCore: 15f60d00e33ca0cea27147543877ca6e70c42ef5
1773 + FBLazyVector: ca8044c9df513671c85167838b4188791b6f37e1
1774 + fmt: 10c6e61f4be25dc963c36bd73fc7b1705fe975be
1775 + glog: 08b301085f15bcbb6ff8632a8ebaf239aae04e6a
1776 + hermes-engine: eb4a80f6bf578536c58a44198ec93a30f6e69218
1777 + OndeInference: a5d861c6a10ea92d21671c71cd668794c4eafeb0
1778 + RCT-Folly: 84578c8756030547307e4572ab1947de1685c599
1779 + RCTDeprecation: 7691283dd69fed46f6653d376de6fa83aaad774c
1780 + RCTRequired: eac044a04629288f272ee6706e31f81f3a2b4bfe
1781 + RCTTypeSafety: cfe499e127eda6dd46e5080e12d80d0bfe667228
1782 + React: 1f3737a983fdd26fb3d388ddbca41a26950fe929
1783 + React-callinvoker: 5c15ac628eab5468fe0b4dc453495f4742761f00
1784 + React-Core: e467bf49f10da6fe92d915d2311cd0fd9bfbe052
1785 + React-CoreModules: 0299b3c0782edd3b37c8445ba07bf18ceb73812d
1786 + React-cxxreact: 54e253030b3b82b05575f19a1fb0e25c049f30ba
1787 + React-debug: 2086b55a5e55fb0abae58c42b8f280ebd708c956
1788 + React-defaultsnativemodule: 9f9052f06e9c10e74fdef9c9ca4e1672e0a0639d
1789 + React-domnativemodule: 1ac4da7f4aab93436f15b75475afed2ca734d43b
1790 + React-Fabric: 409ce8a065374d737bdbc0fce506dcdda8f51e88
1791 + React-FabricComponents: bd5faafffd07e56cf217d5417e80ec29348c19d9
1792 + React-FabricImage: 04d01f3ecfed6121733613a5c794f684e81cb3fb
1793 + React-featureflags: 4503c901bf16b267b689e8a1aed24e951e0b091b
1794 + React-featureflagsnativemodule: b83c6ad2b6008f75371059ac4d7939126cb2ff00
1795 + React-graphics: c2febdc940fb3ebdaef082d940b70254ef49c7a1
1796 + React-hermes: 91baa15c07e76b0768d6e10f4dac1c080a47eef4
1797 + React-idlecallbacksnativemodule: df9faa35f799ba8bb54dc45e16c091ef8bc06b61
1798 + React-ImageManager: b258354a48a92168edc41fdc0c14a4310cc4d576
1799 + React-jserrorhandler: 45d858315f6474dad3912aadb3f6595004dc5f4f
1800 + React-jsi: 87fa67556d7a82125bc77930bf973717fb726d14
1801 + React-jsiexecutor: 3a92052dd96cff1cd693fa3ef8d9738b1d05372a
1802 + React-jsinspector: 05aff7dd91b0685d351cdeb8c151c9f9ec97accd
1803 + React-jsitracing: 419fa21e8543f5a938b11b5a0bfc257b00dac7a5
1804 + React-logger: 5cad0c76d056809523289e589309012215a393b5
1805 + React-Mapbuffer: a381120aea722d2244d4e4b663a10d4c3b2d4e51
1806 + React-microtasksnativemodule: 5eb5925893ffd482c5244f323f7fd98a4c07528d
1807 + react-native-safe-area-context: 314537f8fca6fe2c06bd53fc8905efa9e6aaaf59
1808 + React-nativeconfig: 67fa7a63ea288cb5b1d0dd2deaf240405fec164f
1809 + React-NativeModulesApple: 34b7a4d7441a4ee78d18109ff107c1ccf7c074a9
1810 + React-perflogger: d1149037ac466ad2141d4ae541ca16cb73b2343b
1811 + React-performancetimeline: 6b46b0a17727a3ec22ec4777d156d6b6efc4f8eb
1812 + React-RCTActionSheet: ad84d5a0bd1ad1782f0b78b280c6f329ad79a53a
1813 + React-RCTAnimation: 64ed42bb43b33b0d861126f83048429606390903
1814 + React-RCTAppDelegate: 443dcfa567b73f10285f615ef442a8f7e35b48fb
1815 + React-RCTBlob: e74dfdbbfcd46d9d1eec3b3a0f045e655e3f7861
1816 + React-RCTFabric: 28f942ae418927c2f74dbaab13d4376887936f20
1817 + React-RCTImage: 1b6d8ad60f74a3cec4ee52e0ca55f1773afd03f4
1818 + React-RCTLinking: 88b2384d876346fbb16839a60c1d20830b2e95fe
1819 + React-RCTNetwork: 88aa473814e796d3a7bc6a0b51e7ae5749bdc243
1820 + React-RCTSettings: 0d73a1846aef87ef07c2026c186ea0d80602a130
1821 + React-RCTText: bfdb776f849156f895909ee999b4b5f2f9cf9a0b
1822 + React-RCTVibration: 81c8bbcc841ce5a7ae6e1bd2ec949b30e58d1fcf
1823 + React-rendererconsistency: 65d4692825fda4d9516924b68c29d0f28da3158c
1824 + React-rendererdebug: ab3696594d3506acc22ecea4dd68ac258c529c2d
1825 + React-rncore: 6aca111c05a48c58189a005cb10a7b52780738dc
1826 + React-RuntimeApple: 5245e8cf30e417fe3e798ed991b938679656ab8f
1827 + React-RuntimeCore: c79d23b31aded614f4afeaac53f4da37c792c362
1828 + React-runtimeexecutor: 732038d7c356ba74132f1d16253a410621d3c2c1
1829 + React-RuntimeHermes: b3b1d7fc42d74141a71ae23fedbc4e07e5a7fbd2
1830 + React-runtimescheduler: 6e804311c6c9512ffe7f4b68d012767b225c48a1
1831 + React-timing: c2915214b94a62bdf77d2965c31f76bc25b362a5
1832 + React-utils: 0342746d2cf989cf5e0d1b84c98cfa152edbdf3f
1833 + ReactCodegen: e1c019dc68733dd2c5d3b263b4a6dc72002c0045
1834 + ReactCommon: 81e0744ee33adfd6d586141b927024f488bc49ea
1835 + SocketRocket: d4aabe649be1e368d1318fdf28a022d714d65748
1836 + Yoga: 90d80701b27946c4b23461c00a7207f300a6ff71
1837 +
1838 +PODFILE CHECKSUM: b90a6db97f1a5db19a42330746defdb6a0d22d69
1839 +
1840 +COCOAPODS: 1.16.2
sdk/react-native/example/ios/Podfile.properties.json new
+6
@@ -0,0 +1,6 @@
1 +{
2 + "expo.jsEngine": "hermes",
3 + "EX_DEV_CLIENT_NETWORK_INSPECTOR": "true",
4 + "newArchEnabled": "false",
5 + "ios.deploymentTarget": "16.0"
6 +}
sdk/react-native/example/metro.config.js new
+35
@@ -0,0 +1,35 @@
1 +const { getDefaultConfig } = require("expo/metro-config");
2 +const path = require("path");
3 +
4 +// The SDK root — one level up from this example app
5 +const sdkRoot = path.resolve(__dirname, "..");
6 +
7 +const config = getDefaultConfig(__dirname);
8 +
9 +// Watch the SDK source so Metro picks up changes without a rebuild
10 +config.watchFolders = [sdkRoot];
11 +
12 +// Resolve @ondeinference/react-native to the SDK's TypeScript source
13 +// directly, bypassing the compiled build/ output.
14 +config.resolver.extraNodeModules = {
15 + "@ondeinference/react-native": sdkRoot,
16 +};
17 +
18 +// When Metro processes files from the SDK directory (outside this example app),
19 +// it needs a fallback path to find transitive dependencies like @babel/runtime.
20 +// Without this, Babel-transformed async/await in SDK files fails to resolve
21 +// @babel/runtime/helpers/asyncToGenerator because the SDK's own node_modules
22 +// is blocked below and the example's node_modules isn't in the resolution path.
23 +config.resolver.nodeModulesPaths = [path.resolve(__dirname, "node_modules")];
24 +
25 +// Block the SDK's own node_modules from Metro. Without this, Metro picks up
26 +// react-native@0.85 (installed as a peer dep in sdk/react-native/node_modules/) instead
27 +// of the example's own react-native@0.76 — causing syntax errors from newer RN
28 +// internals that use pattern matching syntax not supported by this Babel config.
29 +config.resolver.blockList = [
30 + new RegExp(
31 + path.resolve(sdkRoot, "node_modules").replace(/\\/g, "\\\\") + "/.*",
32 + ),
33 +];
34 +
35 +module.exports = config;
sdk/react-native/example/package-lock.json new
+11354
@@ -0,0 +1,11354 @@
1 +{
2 + "name": "onde-example",
3 + "version": "0.0.1",
4 + "lockfileVersion": 3,
5 + "requires": true,
6 + "packages": {
7 + "": {
8 + "name": "onde-example",
9 + "version": "0.0.1",
10 + "dependencies": {
11 + "@ondeinference/react-native": "file:..",
12 + "expo": "~52.0.0",
13 + "expo-asset": "^55.0.14",
14 + "expo-status-bar": "~2.0.0",
15 + "react": "18.3.1",
16 + "react-native": "0.76.7",
17 + "react-native-safe-area-context": "~5.0.0"
18 + },
19 + "devDependencies": {
20 + "@types/react": "~18.3.0",
21 + "typescript": "~5.6.0"
22 + }
23 + },
24 + "..": {
25 + "name": "@ondeinference/react-native",
26 + "version": "0.1.3",
27 + "license": "MIT OR Apache-2.0",
28 + "devDependencies": {
29 + "expo-modules-core": "^2.0.0",
30 + "typescript": "^5.0.0"
31 + },
32 + "engines": {
33 + "node": ">=18.0.0"
34 + },
35 + "peerDependencies": {
36 + "expo": ">=52.0.0",
37 + "react": ">=18.0.0",
38 + "react-native": ">=0.76.0"
39 + }
40 + },
41 + "node_modules/@0no-co/graphql.web": {
42 + "version": "1.2.0",
43 + "resolved": "https://registry.npmjs.org/@0no-co/graphql.web/-/graphql.web-1.2.0.tgz",
44 + "integrity": "sha512-/1iHy9TTr63gE1YcR5idjx8UREz1s0kFhydf3bBLCXyqjhkIc6igAzTOx3zPifCwFR87tsh/4Pa9cNts6d2otw==",
45 + "license": "MIT",
46 + "peerDependencies": {
47 + "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0"
48 + },
49 + "peerDependenciesMeta": {
50 + "graphql": {
51 + "optional": true
52 + }
53 + }
54 + },
55 + "node_modules/@babel/code-frame": {
56 + "version": "7.10.4",
57 + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz",
58 + "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==",
59 + "license": "MIT",
60 + "dependencies": {
61 + "@babel/highlight": "^7.10.4"
62 + }
63 + },
64 + "node_modules/@babel/compat-data": {
65 + "version": "7.29.0",
66 + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.29.0.tgz",
67 + "integrity": "sha512-T1NCJqT/j9+cn8fvkt7jtwbLBfLC/1y1c7NtCeXFRgzGTsafi68MRv8yzkYSapBnFA6L3U2VSc02ciDzoAJhJg==",
68 + "license": "MIT",
69 + "engines": {
70 + "node": ">=6.9.0"
71 + }
72 + },
73 + "node_modules/@babel/core": {
74 + "version": "7.29.0",
75 + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.29.0.tgz",
76 + "integrity": "sha512-CGOfOJqWjg2qW/Mb6zNsDm+u5vFQ8DxXfbM09z69p5Z6+mE1ikP2jUXw+j42Pf1XTYED2Rni5f95npYeuwMDQA==",
77 + "license": "MIT",
78 + "dependencies": {
79 + "@babel/code-frame": "^7.29.0",
80 + "@babel/generator": "^7.29.0",
81 + "@babel/helper-compilation-targets": "^7.28.6",
82 + "@babel/helper-module-transforms": "^7.28.6",
83 + "@babel/helpers": "^7.28.6",
84 + "@babel/parser": "^7.29.0",
85 + "@babel/template": "^7.28.6",
86 + "@babel/traverse": "^7.29.0",
87 + "@babel/types": "^7.29.0",
88 + "@jridgewell/remapping": "^2.3.5",
89 + "convert-source-map": "^2.0.0",
90 + "debug": "^4.1.0",
91 + "gensync": "^1.0.0-beta.2",
92 + "json5": "^2.2.3",
93 + "semver": "^6.3.1"
94 + },
95 + "engines": {
96 + "node": ">=6.9.0"
97 + },
98 + "funding": {
99 + "type": "opencollective",
100 + "url": "https://opencollective.com/babel"
101 + }
102 + },
103 + "node_modules/@babel/core/node_modules/@babel/code-frame": {
104 + "version": "7.29.0",
105 + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.0.tgz",
106 + "integrity": "sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==",
107 + "license": "MIT",
108 + "dependencies": {
109 + "@babel/helper-validator-identifier": "^7.28.5",
110 + "js-tokens": "^4.0.0",
111 + "picocolors": "^1.1.1"
112 + },
113 + "engines": {
114 + "node": ">=6.9.0"
115 + }
116 + },
117 + "node_modules/@babel/core/node_modules/semver": {
118 + "version": "6.3.1",
119 + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
120 + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
121 + "license": "ISC",
122 + "bin": {
123 + "semver": "bin/semver.js"
124 + }
125 + },
126 + "node_modules/@babel/generator": {
127 + "version": "7.29.1",
128 + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.29.1.tgz",
129 + "integrity": "sha512-qsaF+9Qcm2Qv8SRIMMscAvG4O3lJ0F1GuMo5HR/Bp02LopNgnZBC/EkbevHFeGs4ls/oPz9v+Bsmzbkbe+0dUw==",
130 + "license": "MIT",
131 + "dependencies": {
132 + "@babel/parser": "^7.29.0",
133 + "@babel/types": "^7.29.0",
134 + "@jridgewell/gen-mapping": "^0.3.12",
135 + "@jridgewell/trace-mapping": "^0.3.28",
136 + "jsesc": "^3.0.2"
137 + },
138 + "engines": {
139 + "node": ">=6.9.0"
140 + }
141 + },
142 + "node_modules/@babel/helper-annotate-as-pure": {
143 + "version": "7.27.3",
144 + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.27.3.tgz",
145 + "integrity": "sha512-fXSwMQqitTGeHLBC08Eq5yXz2m37E4pJX1qAU1+2cNedz/ifv/bVXft90VeSav5nFO61EcNgwr0aJxbyPaWBPg==",
146 + "license": "MIT",
147 + "dependencies": {
148 + "@babel/types": "^7.27.3"
149 + },
150 + "engines": {
151 + "node": ">=6.9.0"
152 + }
153 + },
154 + "node_modules/@babel/helper-compilation-targets": {
155 + "version": "7.28.6",
156 + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.28.6.tgz",
157 + "integrity": "sha512-JYtls3hqi15fcx5GaSNL7SCTJ2MNmjrkHXg4FSpOA/grxK8KwyZ5bubHsCq8FXCkua6xhuaaBit+3b7+VZRfcA==",
158 + "license": "MIT",
159 + "dependencies": {
160 + "@babel/compat-data": "^7.28.6",
161 + "@babel/helper-validator-option": "^7.27.1",
162 + "browserslist": "^4.24.0",
163 + "lru-cache": "^5.1.1",
164 + "semver": "^6.3.1"
165 + },
166 + "engines": {
167 + "node": ">=6.9.0"
168 + }
169 + },
170 + "node_modules/@babel/helper-compilation-targets/node_modules/semver": {
171 + "version": "6.3.1",
172 + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
173 + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
174 + "license": "ISC",
175 + "bin": {
176 + "semver": "bin/semver.js"
177 + }
178 + },
179 + "node_modules/@babel/helper-create-class-features-plugin": {
180 + "version": "7.28.6",
181 + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.28.6.tgz",
182 + "integrity": "sha512-dTOdvsjnG3xNT9Y0AUg1wAl38y+4Rl4sf9caSQZOXdNqVn+H+HbbJ4IyyHaIqNR6SW9oJpA/RuRjsjCw2IdIow==",
183 + "license": "MIT",
184 + "dependencies": {
185 + "@babel/helper-annotate-as-pure": "^7.27.3",
186 + "@babel/helper-member-expression-to-functions": "^7.28.5",
187 + "@babel/helper-optimise-call-expression": "^7.27.1",
188 + "@babel/helper-replace-supers": "^7.28.6",
189 + "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1",
190 + "@babel/traverse": "^7.28.6",
191 + "semver": "^6.3.1"
192 + },
193 + "engines": {
194 + "node": ">=6.9.0"
195 + },
196 + "peerDependencies": {
197 + "@babel/core": "^7.0.0"
198 + }
199 + },
200 + "node_modules/@babel/helper-create-class-features-plugin/node_modules/semver": {
201 + "version": "6.3.1",
202 + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
203 + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
204 + "license": "ISC",
205 + "bin": {
206 + "semver": "bin/semver.js"
207 + }
208 + },
209 + "node_modules/@babel/helper-create-regexp-features-plugin": {
210 + "version": "7.28.5",
211 + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.28.5.tgz",
212 + "integrity": "sha512-N1EhvLtHzOvj7QQOUCCS3NrPJP8c5W6ZXCHDn7Yialuy1iu4r5EmIYkXlKNqT99Ciw+W0mDqWoR6HWMZlFP3hw==",
213 + "license": "MIT",
214 + "dependencies": {
215 + "@babel/helper-annotate-as-pure": "^7.27.3",
216 + "regexpu-core": "^6.3.1",
217 + "semver": "^6.3.1"
218 + },
219 + "engines": {
220 + "node": ">=6.9.0"
221 + },
222 + "peerDependencies": {
223 + "@babel/core": "^7.0.0"
224 + }
225 + },
226 + "node_modules/@babel/helper-create-regexp-features-plugin/node_modules/semver": {
227 + "version": "6.3.1",
228 + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
229 + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
230 + "license": "ISC",
231 + "bin": {
232 + "semver": "bin/semver.js"
233 + }
234 + },
235 + "node_modules/@babel/helper-define-polyfill-provider": {
236 + "version": "0.6.8",
237 + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.8.tgz",
238 + "integrity": "sha512-47UwBLPpQi1NoWzLuHNjRoHlYXMwIJoBf7MFou6viC/sIHWYygpvr0B6IAyh5sBdA2nr2LPIRww8lfaUVQINBA==",
239 + "license": "MIT",
240 + "dependencies": {
241 + "@babel/helper-compilation-targets": "^7.28.6",
242 + "@babel/helper-plugin-utils": "^7.28.6",
243 + "debug": "^4.4.3",
244 + "lodash.debounce": "^4.0.8",
245 + "resolve": "^1.22.11"
246 + },
247 + "peerDependencies": {
248 + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0"
249 + }
250 + },
251 + "node_modules/@babel/helper-globals": {
252 + "version": "7.28.0",
253 + "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.28.0.tgz",
254 + "integrity": "sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==",
255 + "license": "MIT",
256 + "engines": {
257 + "node": ">=6.9.0"
258 + }
259 + },
260 + "node_modules/@babel/helper-member-expression-to-functions": {
261 + "version": "7.28.5",
262 + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.28.5.tgz",
263 + "integrity": "sha512-cwM7SBRZcPCLgl8a7cY0soT1SptSzAlMH39vwiRpOQkJlh53r5hdHwLSCZpQdVLT39sZt+CRpNwYG4Y2v77atg==",
264 + "license": "MIT",
265 + "dependencies": {
266 + "@babel/traverse": "^7.28.5",
267 + "@babel/types": "^7.28.5"
268 + },
269 + "engines": {
270 + "node": ">=6.9.0"
271 + }
272 + },
273 + "node_modules/@babel/helper-module-imports": {
274 + "version": "7.28.6",
275 + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.28.6.tgz",
276 + "integrity": "sha512-l5XkZK7r7wa9LucGw9LwZyyCUscb4x37JWTPz7swwFE/0FMQAGpiWUZn8u9DzkSBWEcK25jmvubfpw2dnAMdbw==",
277 + "license": "MIT",
278 + "dependencies": {
279 + "@babel/traverse": "^7.28.6",
280 + "@babel/types": "^7.28.6"
281 + },
282 + "engines": {
283 + "node": ">=6.9.0"
284 + }
285 + },
286 + "node_modules/@babel/helper-module-transforms": {
287 + "version": "7.28.6",
288 + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.28.6.tgz",
289 + "integrity": "sha512-67oXFAYr2cDLDVGLXTEABjdBJZ6drElUSI7WKp70NrpyISso3plG9SAGEF6y7zbha/wOzUByWWTJvEDVNIUGcA==",
290 + "license": "MIT",
291 + "dependencies": {
292 + "@babel/helper-module-imports": "^7.28.6",
293 + "@babel/helper-validator-identifier": "^7.28.5",
294 + "@babel/traverse": "^7.28.6"
295 + },
296 + "engines": {
297 + "node": ">=6.9.0"
298 + },
299 + "peerDependencies": {
300 + "@babel/core": "^7.0.0"
301 + }
302 + },
303 + "node_modules/@babel/helper-optimise-call-expression": {
304 + "version": "7.27.1",
305 + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.27.1.tgz",
306 + "integrity": "sha512-URMGH08NzYFhubNSGJrpUEphGKQwMQYBySzat5cAByY1/YgIRkULnIy3tAMeszlL/so2HbeilYloUmSpd7GdVw==",
307 + "license": "MIT",
308 + "dependencies": {
309 + "@babel/types": "^7.27.1"
310 + },
311 + "engines": {
312 + "node": ">=6.9.0"
313 + }
314 + },
315 + "node_modules/@babel/helper-plugin-utils": {
316 + "version": "7.28.6",
317 + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.28.6.tgz",
318 + "integrity": "sha512-S9gzZ/bz83GRysI7gAD4wPT/AI3uCnY+9xn+Mx/KPs2JwHJIz1W8PZkg2cqyt3RNOBM8ejcXhV6y8Og7ly/Dug==",
319 + "license": "MIT",
320 + "engines": {
321 + "node": ">=6.9.0"
322 + }
323 + },
324 + "node_modules/@babel/helper-remap-async-to-generator": {
325 + "version": "7.27.1",
326 + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.27.1.tgz",
327 + "integrity": "sha512-7fiA521aVw8lSPeI4ZOD3vRFkoqkJcS+z4hFo82bFSH/2tNd6eJ5qCVMS5OzDmZh/kaHQeBaeyxK6wljcPtveA==",
328 + "license": "MIT",
329 + "dependencies": {
330 + "@babel/helper-annotate-as-pure": "^7.27.1",
331 + "@babel/helper-wrap-function": "^7.27.1",
332 + "@babel/traverse": "^7.27.1"
333 + },
334 + "engines": {
335 + "node": ">=6.9.0"
336 + },
337 + "peerDependencies": {
338 + "@babel/core": "^7.0.0"
339 + }
340 + },
341 + "node_modules/@babel/helper-replace-supers": {
342 + "version": "7.28.6",
343 + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.28.6.tgz",
344 + "integrity": "sha512-mq8e+laIk94/yFec3DxSjCRD2Z0TAjhVbEJY3UQrlwVo15Lmt7C2wAUbK4bjnTs4APkwsYLTahXRraQXhb1WCg==",
345 + "license": "MIT",
346 + "dependencies": {
347 + "@babel/helper-member-expression-to-functions": "^7.28.5",
348 + "@babel/helper-optimise-call-expression": "^7.27.1",
349 + "@babel/traverse": "^7.28.6"
350 + },
351 + "engines": {
352 + "node": ">=6.9.0"
353 + },
354 + "peerDependencies": {
355 + "@babel/core": "^7.0.0"
356 + }
357 + },
358 + "node_modules/@babel/helper-skip-transparent-expression-wrappers": {
359 + "version": "7.27.1",
360 + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.27.1.tgz",
361 + "integrity": "sha512-Tub4ZKEXqbPjXgWLl2+3JpQAYBJ8+ikpQ2Ocj/q/r0LwE3UhENh7EUabyHjz2kCEsrRY83ew2DQdHluuiDQFzg==",
362 + "license": "MIT",
363 + "dependencies": {
364 + "@babel/traverse": "^7.27.1",
365 + "@babel/types": "^7.27.1"
366 + },
367 + "engines": {
368 + "node": ">=6.9.0"
369 + }
370 + },
371 + "node_modules/@babel/helper-string-parser": {
372 + "version": "7.27.1",
373 + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz",
374 + "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==",
375 + "license": "MIT",
376 + "engines": {
377 + "node": ">=6.9.0"
378 + }
379 + },
380 + "node_modules/@babel/helper-validator-identifier": {
381 + "version": "7.28.5",
382 + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz",
383 + "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==",
384 + "license": "MIT",
385 + "engines": {
386 + "node": ">=6.9.0"
387 + }
388 + },
389 + "node_modules/@babel/helper-validator-option": {
390 + "version": "7.27.1",
391 + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz",
392 + "integrity": "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==",
393 + "license": "MIT",
394 + "engines": {
395 + "node": ">=6.9.0"
396 + }
397 + },
398 + "node_modules/@babel/helper-wrap-function": {
399 + "version": "7.28.6",
400 + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.28.6.tgz",
401 + "integrity": "sha512-z+PwLziMNBeSQJonizz2AGnndLsP2DeGHIxDAn+wdHOGuo4Fo1x1HBPPXeE9TAOPHNNWQKCSlA2VZyYyyibDnQ==",
402 + "license": "MIT",
403 + "dependencies": {
404 + "@babel/template": "^7.28.6",
405 + "@babel/traverse": "^7.28.6",
406 + "@babel/types": "^7.28.6"
407 + },
408 + "engines": {
409 + "node": ">=6.9.0"
410 + }
411 + },
412 + "node_modules/@babel/helpers": {
413 + "version": "7.29.2",
414 + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.29.2.tgz",
415 + "integrity": "sha512-HoGuUs4sCZNezVEKdVcwqmZN8GoHirLUcLaYVNBK2J0DadGtdcqgr3BCbvH8+XUo4NGjNl3VOtSjEKNzqfFgKw==",
416 + "license": "MIT",
417 + "dependencies": {
418 + "@babel/template": "^7.28.6",
419 + "@babel/types": "^7.29.0"
420 + },
421 + "engines": {
422 + "node": ">=6.9.0"
423 + }
424 + },
425 + "node_modules/@babel/highlight": {
426 + "version": "7.25.9",
427 + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.25.9.tgz",
428 + "integrity": "sha512-llL88JShoCsth8fF8R4SJnIn+WLvR6ccFxu1H3FlMhDontdcmZWf2HgIZ7AIqV3Xcck1idlohrN4EUBQz6klbw==",
429 + "license": "MIT",
430 + "dependencies": {
431 + "@babel/helper-validator-identifier": "^7.25.9",
432 + "chalk": "^2.4.2",
433 + "js-tokens": "^4.0.0",
434 + "picocolors": "^1.0.0"
435 + },
436 + "engines": {
437 + "node": ">=6.9.0"
438 + }
439 + },
440 + "node_modules/@babel/highlight/node_modules/ansi-styles": {
441 + "version": "3.2.1",
442 + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
443 + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
444 + "license": "MIT",
445 + "dependencies": {
446 + "color-convert": "^1.9.0"
447 + },
448 + "engines": {
449 + "node": ">=4"
450 + }
451 + },
452 + "node_modules/@babel/highlight/node_modules/chalk": {
453 + "version": "2.4.2",
454 + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
455 + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
456 + "license": "MIT",
457 + "dependencies": {
458 + "ansi-styles": "^3.2.1",
459 + "escape-string-regexp": "^1.0.5",
460 + "supports-color": "^5.3.0"
461 + },
462 + "engines": {
463 + "node": ">=4"
464 + }
465 + },
466 + "node_modules/@babel/highlight/node_modules/color-convert": {
467 + "version": "1.9.3",
468 + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
469 + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
470 + "license": "MIT",
471 + "dependencies": {
472 + "color-name": "1.1.3"
473 + }
474 + },
475 + "node_modules/@babel/highlight/node_modules/color-name": {
476 + "version": "1.1.3",
477 + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
478 + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==",
479 + "license": "MIT"
480 + },
481 + "node_modules/@babel/highlight/node_modules/escape-string-regexp": {
482 + "version": "1.0.5",
483 + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
484 + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==",
485 + "license": "MIT",
486 + "engines": {
487 + "node": ">=0.8.0"
488 + }
489 + },
490 + "node_modules/@babel/highlight/node_modules/has-flag": {
491 + "version": "3.0.0",
492 + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
493 + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==",
494 + "license": "MIT",
495 + "engines": {
496 + "node": ">=4"
497 + }
498 + },
499 + "node_modules/@babel/highlight/node_modules/supports-color": {
500 + "version": "5.5.0",
501 + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
502 + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
503 + "license": "MIT",
504 + "dependencies": {
505 + "has-flag": "^3.0.0"
506 + },
507 + "engines": {
508 + "node": ">=4"
509 + }
510 + },
511 + "node_modules/@babel/parser": {
512 + "version": "7.29.2",
513 + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.2.tgz",
514 + "integrity": "sha512-4GgRzy/+fsBa72/RZVJmGKPmZu9Byn8o4MoLpmNe1m8ZfYnz5emHLQz3U4gLud6Zwl0RZIcgiLD7Uq7ySFuDLA==",
515 + "license": "MIT",
516 + "dependencies": {
517 + "@babel/types": "^7.29.0"
518 + },
519 + "bin": {
520 + "parser": "bin/babel-parser.js"
521 + },
522 + "engines": {
523 + "node": ">=6.0.0"
524 + }
525 + },
526 + "node_modules/@babel/plugin-bugfix-firefox-class-in-computed-class-key": {
527 + "version": "7.28.5",
528 + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.28.5.tgz",
529 + "integrity": "sha512-87GDMS3tsmMSi/3bWOte1UblL+YUTFMV8SZPZ2eSEL17s74Cw/l63rR6NmGVKMYW2GYi85nE+/d6Hw5N0bEk2Q==",
530 + "license": "MIT",
531 + "peer": true,
532 + "dependencies": {
533 + "@babel/helper-plugin-utils": "^7.27.1",
534 + "@babel/traverse": "^7.28.5"
535 + },
536 + "engines": {
537 + "node": ">=6.9.0"
538 + },
539 + "peerDependencies": {
540 + "@babel/core": "^7.0.0"
541 + }
542 + },
543 + "node_modules/@babel/plugin-bugfix-safari-class-field-initializer-scope": {
544 + "version": "7.27.1",
545 + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-class-field-initializer-scope/-/plugin-bugfix-safari-class-field-initializer-scope-7.27.1.tgz",
546 + "integrity": "sha512-qNeq3bCKnGgLkEXUuFry6dPlGfCdQNZbn7yUAPCInwAJHMU7THJfrBSozkcWq5sNM6RcF3S8XyQL2A52KNR9IA==",
547 + "license": "MIT",
548 + "peer": true,
549 + "dependencies": {
550 + "@babel/helper-plugin-utils": "^7.27.1"
551 + },
552 + "engines": {
553 + "node": ">=6.9.0"
554 + },
555 + "peerDependencies": {
556 + "@babel/core": "^7.0.0"
557 + }
558 + },
559 + "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": {
560 + "version": "7.27.1",
561 + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.27.1.tgz",
562 + "integrity": "sha512-g4L7OYun04N1WyqMNjldFwlfPCLVkgB54A/YCXICZYBsvJJE3kByKv9c9+R/nAfmIfjl2rKYLNyMHboYbZaWaA==",
563 + "license": "MIT",
564 + "peer": true,
565 + "dependencies": {
566 + "@babel/helper-plugin-utils": "^7.27.1"
567 + },
568 + "engines": {
569 + "node": ">=6.9.0"
570 + },
571 + "peerDependencies": {
572 + "@babel/core": "^7.0.0"
573 + }
574 + },
575 + "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": {
576 + "version": "7.27.1",
577 + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.27.1.tgz",
578 + "integrity": "sha512-oO02gcONcD5O1iTLi/6frMJBIwWEHceWGSGqrpCmEL8nogiS6J9PBlE48CaK20/Jx1LuRml9aDftLgdjXT8+Cw==",
579 + "license": "MIT",
580 + "peer": true,
581 + "dependencies": {
582 + "@babel/helper-plugin-utils": "^7.27.1",
583 + "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1",
584 + "@babel/plugin-transform-optional-chaining": "^7.27.1"
585 + },
586 + "engines": {
587 + "node": ">=6.9.0"
588 + },
589 + "peerDependencies": {
590 + "@babel/core": "^7.13.0"
591 + }
592 + },
593 + "node_modules/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": {
594 + "version": "7.28.6",
595 + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.28.6.tgz",
596 + "integrity": "sha512-a0aBScVTlNaiUe35UtfxAN7A/tehvvG4/ByO6+46VPKTRSlfnAFsgKy0FUh+qAkQrDTmhDkT+IBOKlOoMUxQ0g==",
597 + "license": "MIT",
598 + "peer": true,
599 + "dependencies": {
600 + "@babel/helper-plugin-utils": "^7.28.6",
601 + "@babel/traverse": "^7.28.6"
602 + },
603 + "engines": {
604 + "node": ">=6.9.0"
605 + },
606 + "peerDependencies": {
607 + "@babel/core": "^7.0.0"
608 + }
609 + },
610 + "node_modules/@babel/plugin-proposal-class-properties": {
611 + "version": "7.18.6",
612 + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz",
613 + "integrity": "sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==",
614 + "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-class-properties instead.",
615 + "license": "MIT",
616 + "dependencies": {
617 + "@babel/helper-create-class-features-plugin": "^7.18.6",
618 + "@babel/helper-plugin-utils": "^7.18.6"
619 + },
620 + "engines": {
621 + "node": ">=6.9.0"
622 + },
623 + "peerDependencies": {
624 + "@babel/core": "^7.0.0-0"
625 + }
626 + },
627 + "node_modules/@babel/plugin-proposal-decorators": {
628 + "version": "7.29.0",
629 + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.29.0.tgz",
630 + "integrity": "sha512-CVBVv3VY/XRMxRYq5dwr2DS7/MvqPm23cOCjbwNnVrfOqcWlnefua1uUs0sjdKOGjvPUG633o07uWzJq4oI6dA==",
631 + "license": "MIT",
632 + "dependencies": {
633 + "@babel/helper-create-class-features-plugin": "^7.28.6",
634 + "@babel/helper-plugin-utils": "^7.28.6",
635 + "@babel/plugin-syntax-decorators": "^7.28.6"
636 + },
637 + "engines": {
638 + "node": ">=6.9.0"
639 + },
640 + "peerDependencies": {
641 + "@babel/core": "^7.0.0-0"
642 + }
643 + },
644 + "node_modules/@babel/plugin-proposal-export-default-from": {
645 + "version": "7.27.1",
646 + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-default-from/-/plugin-proposal-export-default-from-7.27.1.tgz",
647 + "integrity": "sha512-hjlsMBl1aJc5lp8MoCDEZCiYzlgdRAShOjAfRw6X+GlpLpUPU7c3XNLsKFZbQk/1cRzBlJ7CXg3xJAJMrFa1Uw==",
648 + "license": "MIT",
649 + "dependencies": {
650 + "@babel/helper-plugin-utils": "^7.27.1"
651 + },
652 + "engines": {
653 + "node": ">=6.9.0"
654 + },
655 + "peerDependencies": {
656 + "@babel/core": "^7.0.0-0"
657 + }
658 + },
659 + "node_modules/@babel/plugin-proposal-nullish-coalescing-operator": {
660 + "version": "7.18.6",
661 + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.18.6.tgz",
662 + "integrity": "sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==",
663 + "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-nullish-coalescing-operator instead.",
664 + "license": "MIT",
665 + "dependencies": {
666 + "@babel/helper-plugin-utils": "^7.18.6",
667 + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3"
668 + },
669 + "engines": {
670 + "node": ">=6.9.0"
671 + },
672 + "peerDependencies": {
673 + "@babel/core": "^7.0.0-0"
674 + }
675 + },
676 + "node_modules/@babel/plugin-proposal-optional-chaining": {
677 + "version": "7.21.0",
678 + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.21.0.tgz",
679 + "integrity": "sha512-p4zeefM72gpmEe2fkUr/OnOXpWEf8nAgk7ZYVqqfFiyIG7oFfVZcCrU64hWn5xp4tQ9LkV4bTIa5rD0KANpKNA==",
680 + "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-optional-chaining instead.",
681 + "license": "MIT",
682 + "dependencies": {
683 + "@babel/helper-plugin-utils": "^7.20.2",
684 + "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0",
685 + "@babel/plugin-syntax-optional-chaining": "^7.8.3"
686 + },
687 + "engines": {
688 + "node": ">=6.9.0"
689 + },
690 + "peerDependencies": {
691 + "@babel/core": "^7.0.0-0"
692 + }
693 + },
694 + "node_modules/@babel/plugin-proposal-private-property-in-object": {
695 + "version": "7.21.0-placeholder-for-preset-env.2",
696 + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz",
697 + "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==",
698 + "license": "MIT",
699 + "peer": true,
700 + "engines": {
701 + "node": ">=6.9.0"
702 + },
703 + "peerDependencies": {
704 + "@babel/core": "^7.0.0-0"
705 + }
706 + },
707 + "node_modules/@babel/plugin-syntax-async-generators": {
708 + "version": "7.8.4",
709 + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz",
710 + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==",
711 + "license": "MIT",
712 + "dependencies": {
713 + "@babel/helper-plugin-utils": "^7.8.0"
714 + },
715 + "peerDependencies": {
716 + "@babel/core": "^7.0.0-0"
717 + }
718 + },
719 + "node_modules/@babel/plugin-syntax-bigint": {
720 + "version": "7.8.3",
721 + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz",
722 + "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==",
723 + "license": "MIT",
724 + "dependencies": {
725 + "@babel/helper-plugin-utils": "^7.8.0"
726 + },
727 + "peerDependencies": {
728 + "@babel/core": "^7.0.0-0"
729 + }
730 + },
731 + "node_modules/@babel/plugin-syntax-class-properties": {
732 + "version": "7.12.13",
733 + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz",
734 + "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==",
735 + "license": "MIT",
736 + "dependencies": {
737 + "@babel/helper-plugin-utils": "^7.12.13"
738 + },
739 + "peerDependencies": {
740 + "@babel/core": "^7.0.0-0"
741 + }
742 + },
743 + "node_modules/@babel/plugin-syntax-class-static-block": {
744 + "version": "7.14.5",
745 + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz",
746 + "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==",
747 + "license": "MIT",
748 + "dependencies": {
749 + "@babel/helper-plugin-utils": "^7.14.5"
750 + },
751 + "engines": {
752 + "node": ">=6.9.0"
753 + },
754 + "peerDependencies": {
755 + "@babel/core": "^7.0.0-0"
756 + }
757 + },
758 + "node_modules/@babel/plugin-syntax-decorators": {
759 + "version": "7.28.6",
760 + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.28.6.tgz",
761 + "integrity": "sha512-71EYI0ONURHJBL4rSFXnITXqXrrY8q4P0q006DPfN+Rk+ASM+++IBXem/ruokgBZR8YNEWZ8R6B+rCb8VcUTqA==",
762 + "license": "MIT",
763 + "dependencies": {
764 + "@babel/helper-plugin-utils": "^7.28.6"
765 + },
766 + "engines": {
767 + "node": ">=6.9.0"
768 + },
769 + "peerDependencies": {
770 + "@babel/core": "^7.0.0-0"
771 + }
772 + },
773 + "node_modules/@babel/plugin-syntax-dynamic-import": {
774 + "version": "7.8.3",
775 + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz",
776 + "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==",
777 + "license": "MIT",
778 + "dependencies": {
779 + "@babel/helper-plugin-utils": "^7.8.0"
780 + },
781 + "peerDependencies": {
782 + "@babel/core": "^7.0.0-0"
783 + }
784 + },
785 + "node_modules/@babel/plugin-syntax-export-default-from": {
786 + "version": "7.28.6",
787 + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-default-from/-/plugin-syntax-export-default-from-7.28.6.tgz",
788 + "integrity": "sha512-Svlx1fjJFnNz0LZeUaybRukSxZI3KkpApUmIRzEdXC5k8ErTOz0OD0kNrICi5Vc3GlpP5ZCeRyRO+mfWTSz+iQ==",
789 + "license": "MIT",
790 + "dependencies": {
791 + "@babel/helper-plugin-utils": "^7.28.6"
792 + },
793 + "engines": {
794 + "node": ">=6.9.0"
795 + },
796 + "peerDependencies": {
797 + "@babel/core": "^7.0.0-0"
798 + }
799 + },
800 + "node_modules/@babel/plugin-syntax-flow": {
801 + "version": "7.28.6",
802 + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.28.6.tgz",
803 + "integrity": "sha512-D+OrJumc9McXNEBI/JmFnc/0uCM2/Y3PEBG3gfV3QIYkKv5pvnpzFrl1kYCrcHJP8nOeFB/SHi1IHz29pNGuew==",
804 + "license": "MIT",
805 + "dependencies": {
806 + "@babel/helper-plugin-utils": "^7.28.6"
807 + },
808 + "engines": {
809 + "node": ">=6.9.0"
810 + },
811 + "peerDependencies": {
812 + "@babel/core": "^7.0.0-0"
813 + }
814 + },
815 + "node_modules/@babel/plugin-syntax-import-assertions": {
816 + "version": "7.28.6",
817 + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.28.6.tgz",
818 + "integrity": "sha512-pSJUpFHdx9z5nqTSirOCMtYVP2wFgoWhP0p3g8ONK/4IHhLIBd0B9NYqAvIUAhq+OkhO4VM1tENCt0cjlsNShw==",
819 + "license": "MIT",
820 + "peer": true,
821 + "dependencies": {
822 + "@babel/helper-plugin-utils": "^7.28.6"
823 + },
824 + "engines": {
825 + "node": ">=6.9.0"
826 + },
827 + "peerDependencies": {
828 + "@babel/core": "^7.0.0-0"
829 + }
830 + },
831 + "node_modules/@babel/plugin-syntax-import-attributes": {
832 + "version": "7.28.6",
833 + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.28.6.tgz",
834 + "integrity": "sha512-jiLC0ma9XkQT3TKJ9uYvlakm66Pamywo+qwL+oL8HJOvc6TWdZXVfhqJr8CCzbSGUAbDOzlGHJC1U+vRfLQDvw==",
835 + "license": "MIT",
836 + "dependencies": {
837 + "@babel/helper-plugin-utils": "^7.28.6"
838 + },
839 + "engines": {
840 + "node": ">=6.9.0"
841 + },
842 + "peerDependencies": {
843 + "@babel/core": "^7.0.0-0"
844 + }
845 + },
846 + "node_modules/@babel/plugin-syntax-import-meta": {
847 + "version": "7.10.4",
848 + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz",
849 + "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==",
850 + "license": "MIT",
851 + "dependencies": {
852 + "@babel/helper-plugin-utils": "^7.10.4"
853 + },
854 + "peerDependencies": {
855 + "@babel/core": "^7.0.0-0"
856 + }
857 + },
858 + "node_modules/@babel/plugin-syntax-json-strings": {
859 + "version": "7.8.3",
860 + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz",
861 + "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==",
862 + "license": "MIT",
863 + "dependencies": {
864 + "@babel/helper-plugin-utils": "^7.8.0"
865 + },
866 + "peerDependencies": {
867 + "@babel/core": "^7.0.0-0"
868 + }
869 + },
870 + "node_modules/@babel/plugin-syntax-jsx": {
871 + "version": "7.28.6",
872 + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.28.6.tgz",
873 + "integrity": "sha512-wgEmr06G6sIpqr8YDwA2dSRTE3bJ+V0IfpzfSY3Lfgd7YWOaAdlykvJi13ZKBt8cZHfgH1IXN+CL656W3uUa4w==",
874 + "license": "MIT",
875 + "dependencies": {
876 + "@babel/helper-plugin-utils": "^7.28.6"
877 + },
878 + "engines": {
879 + "node": ">=6.9.0"
880 + },
881 + "peerDependencies": {
882 + "@babel/core": "^7.0.0-0"
883 + }
884 + },
885 + "node_modules/@babel/plugin-syntax-logical-assignment-operators": {
886 + "version": "7.10.4",
887 + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz",
888 + "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==",
889 + "license": "MIT",
890 + "dependencies": {
891 + "@babel/helper-plugin-utils": "^7.10.4"
892 + },
893 + "peerDependencies": {
894 + "@babel/core": "^7.0.0-0"
895 + }
896 + },
897 + "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": {
898 + "version": "7.8.3",
899 + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz",
900 + "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==",
901 + "license": "MIT",
902 + "dependencies": {
903 + "@babel/helper-plugin-utils": "^7.8.0"
904 + },
905 + "peerDependencies": {
906 + "@babel/core": "^7.0.0-0"
907 + }
908 + },
909 + "node_modules/@babel/plugin-syntax-numeric-separator": {
910 + "version": "7.10.4",
911 + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz",
912 + "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==",
913 + "license": "MIT",
914 + "dependencies": {
915 + "@babel/helper-plugin-utils": "^7.10.4"
916 + },
917 + "peerDependencies": {
918 + "@babel/core": "^7.0.0-0"
919 + }
920 + },
921 + "node_modules/@babel/plugin-syntax-object-rest-spread": {
922 + "version": "7.8.3",
923 + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz",
924 + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==",
925 + "license": "MIT",
926 + "dependencies": {
927 + "@babel/helper-plugin-utils": "^7.8.0"
928 + },
929 + "peerDependencies": {
930 + "@babel/core": "^7.0.0-0"
931 + }
932 + },
933 + "node_modules/@babel/plugin-syntax-optional-catch-binding": {
934 + "version": "7.8.3",
935 + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz",
936 + "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==",
937 + "license": "MIT",
938 + "dependencies": {
939 + "@babel/helper-plugin-utils": "^7.8.0"
940 + },
941 + "peerDependencies": {
942 + "@babel/core": "^7.0.0-0"
943 + }
944 + },
945 + "node_modules/@babel/plugin-syntax-optional-chaining": {
946 + "version": "7.8.3",
947 + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz",
948 + "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==",
949 + "license": "MIT",
950 + "dependencies": {
951 + "@babel/helper-plugin-utils": "^7.8.0"
952 + },
953 + "peerDependencies": {
954 + "@babel/core": "^7.0.0-0"
955 + }
956 + },
957 + "node_modules/@babel/plugin-syntax-private-property-in-object": {
958 + "version": "7.14.5",
959 + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz",
960 + "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==",
961 + "license": "MIT",
962 + "dependencies": {
963 + "@babel/helper-plugin-utils": "^7.14.5"
964 + },
965 + "engines": {
966 + "node": ">=6.9.0"
967 + },
968 + "peerDependencies": {
969 + "@babel/core": "^7.0.0-0"
970 + }
971 + },
972 + "node_modules/@babel/plugin-syntax-top-level-await": {
973 + "version": "7.14.5",
974 + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz",
975 + "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==",
976 + "license": "MIT",
977 + "dependencies": {
978 + "@babel/helper-plugin-utils": "^7.14.5"
979 + },
980 + "engines": {
981 + "node": ">=6.9.0"
982 + },
983 + "peerDependencies": {
984 + "@babel/core": "^7.0.0-0"
985 + }
986 + },
987 + "node_modules/@babel/plugin-syntax-typescript": {
988 + "version": "7.28.6",
989 + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.28.6.tgz",
990 + "integrity": "sha512-+nDNmQye7nlnuuHDboPbGm00Vqg3oO8niRRL27/4LYHUsHYh0zJ1xWOz0uRwNFmM1Avzk8wZbc6rdiYhomzv/A==",
991 + "license": "MIT",
992 + "dependencies": {
993 + "@babel/helper-plugin-utils": "^7.28.6"
994 + },
995 + "engines": {
996 + "node": ">=6.9.0"
997 + },
998 + "peerDependencies": {
999 + "@babel/core": "^7.0.0-0"
1000 + }
1001 + },
1002 + "node_modules/@babel/plugin-syntax-unicode-sets-regex": {
1003 + "version": "7.18.6",
1004 + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz",
1005 + "integrity": "sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==",
1006 + "license": "MIT",
1007 + "peer": true,
1008 + "dependencies": {
1009 + "@babel/helper-create-regexp-features-plugin": "^7.18.6",
1010 + "@babel/helper-plugin-utils": "^7.18.6"
1011 + },
1012 + "engines": {
1013 + "node": ">=6.9.0"
1014 + },
1015 + "peerDependencies": {
1016 + "@babel/core": "^7.0.0"
1017 + }
1018 + },
1019 + "node_modules/@babel/plugin-transform-arrow-functions": {
1020 + "version": "7.27.1",
1021 + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.27.1.tgz",
1022 + "integrity": "sha512-8Z4TGic6xW70FKThA5HYEKKyBpOOsucTOD1DjU3fZxDg+K3zBJcXMFnt/4yQiZnf5+MiOMSXQ9PaEK/Ilh1DeA==",
1023 + "license": "MIT",
1024 + "dependencies": {
1025 + "@babel/helper-plugin-utils": "^7.27.1"
1026 + },
1027 + "engines": {
1028 + "node": ">=6.9.0"
1029 + },
1030 + "peerDependencies": {
1031 + "@babel/core": "^7.0.0-0"
1032 + }
1033 + },
1034 + "node_modules/@babel/plugin-transform-async-generator-functions": {
1035 + "version": "7.29.0",
1036 + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.29.0.tgz",
1037 + "integrity": "sha512-va0VdWro4zlBr2JsXC+ofCPB2iG12wPtVGTWFx2WLDOM3nYQZZIGP82qku2eW/JR83sD+k2k+CsNtyEbUqhU6w==",
1038 + "license": "MIT",
1039 + "dependencies": {
1040 + "@babel/helper-plugin-utils": "^7.28.6",
1041 + "@babel/helper-remap-async-to-generator": "^7.27.1",
1042 + "@babel/traverse": "^7.29.0"
1043 + },
1044 + "engines": {
1045 + "node": ">=6.9.0"
1046 + },
1047 + "peerDependencies": {
1048 + "@babel/core": "^7.0.0-0"
1049 + }
1050 + },
1051 + "node_modules/@babel/plugin-transform-async-to-generator": {
1052 + "version": "7.28.6",
1053 + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.28.6.tgz",
1054 + "integrity": "sha512-ilTRcmbuXjsMmcZ3HASTe4caH5Tpo93PkTxF9oG2VZsSWsahydmcEHhix9Ik122RcTnZnUzPbmux4wh1swfv7g==",
1055 + "license": "MIT",
1056 + "dependencies": {
1057 + "@babel/helper-module-imports": "^7.28.6",
1058 + "@babel/helper-plugin-utils": "^7.28.6",
1059 + "@babel/helper-remap-async-to-generator": "^7.27.1"
1060 + },
1061 + "engines": {
1062 + "node": ">=6.9.0"
1063 + },
1064 + "peerDependencies": {
1065 + "@babel/core": "^7.0.0-0"
1066 + }
1067 + },
1068 + "node_modules/@babel/plugin-transform-block-scoped-functions": {
1069 + "version": "7.27.1",
1070 + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.27.1.tgz",
1071 + "integrity": "sha512-cnqkuOtZLapWYZUYM5rVIdv1nXYuFVIltZ6ZJ7nIj585QsjKM5dhL2Fu/lICXZ1OyIAFc7Qy+bvDAtTXqGrlhg==",
1072 + "license": "MIT",
1073 + "peer": true,
1074 + "dependencies": {
1075 + "@babel/helper-plugin-utils": "^7.27.1"
1076 + },
1077 + "engines": {
1078 + "node": ">=6.9.0"
1079 + },
1080 + "peerDependencies": {
1081 + "@babel/core": "^7.0.0-0"
1082 + }
1083 + },
1084 + "node_modules/@babel/plugin-transform-block-scoping": {
1085 + "version": "7.28.6",
1086 + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.28.6.tgz",
1087 + "integrity": "sha512-tt/7wOtBmwHPNMPu7ax4pdPz6shjFrmHDghvNC+FG9Qvj7D6mJcoRQIF5dy4njmxR941l6rgtvfSB2zX3VlUIw==",
1088 + "license": "MIT",
1089 + "dependencies": {
1090 + "@babel/helper-plugin-utils": "^7.28.6"
1091 + },
1092 + "engines": {
1093 + "node": ">=6.9.0"
1094 + },
1095 + "peerDependencies": {
1096 + "@babel/core": "^7.0.0-0"
1097 + }
1098 + },
1099 + "node_modules/@babel/plugin-transform-class-properties": {
1100 + "version": "7.28.6",
1101 + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.28.6.tgz",
1102 + "integrity": "sha512-dY2wS3I2G7D697VHndN91TJr8/AAfXQNt5ynCTI/MpxMsSzHp+52uNivYT5wCPax3whc47DR8Ba7cmlQMg24bw==",
1103 + "license": "MIT",
1104 + "dependencies": {
1105 + "@babel/helper-create-class-features-plugin": "^7.28.6",
1106 + "@babel/helper-plugin-utils": "^7.28.6"
1107 + },
1108 + "engines": {
1109 + "node": ">=6.9.0"
1110 + },
1111 + "peerDependencies": {
1112 + "@babel/core": "^7.0.0-0"
1113 + }
1114 + },
1115 + "node_modules/@babel/plugin-transform-class-static-block": {
1116 + "version": "7.28.6",
1117 + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.28.6.tgz",
1118 + "integrity": "sha512-rfQ++ghVwTWTqQ7w8qyDxL1XGihjBss4CmTgGRCTAC9RIbhVpyp4fOeZtta0Lbf+dTNIVJer6ych2ibHwkZqsQ==",
1119 + "license": "MIT",
1120 + "peer": true,
1121 + "dependencies": {
1122 + "@babel/helper-create-class-features-plugin": "^7.28.6",
1123 + "@babel/helper-plugin-utils": "^7.28.6"
1124 + },
1125 + "engines": {
1126 + "node": ">=6.9.0"
1127 + },
1128 + "peerDependencies": {
1129 + "@babel/core": "^7.12.0"
1130 + }
1131 + },
1132 + "node_modules/@babel/plugin-transform-classes": {
1133 + "version": "7.28.6",
1134 + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.28.6.tgz",
1135 + "integrity": "sha512-EF5KONAqC5zAqT783iMGuM2ZtmEBy+mJMOKl2BCvPZ2lVrwvXnB6o+OBWCS+CoeCCpVRF2sA2RBKUxvT8tQT5Q==",
1136 + "license": "MIT",
1137 + "dependencies": {
1138 + "@babel/helper-annotate-as-pure": "^7.27.3",
1139 + "@babel/helper-compilation-targets": "^7.28.6",
1140 + "@babel/helper-globals": "^7.28.0",
1141 + "@babel/helper-plugin-utils": "^7.28.6",
1142 + "@babel/helper-replace-supers": "^7.28.6",
1143 + "@babel/traverse": "^7.28.6"
1144 + },
1145 + "engines": {
1146 + "node": ">=6.9.0"
1147 + },
1148 + "peerDependencies": {
1149 + "@babel/core": "^7.0.0-0"
1150 + }
1151 + },
1152 + "node_modules/@babel/plugin-transform-computed-properties": {
1153 + "version": "7.28.6",
1154 + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.28.6.tgz",
1155 + "integrity": "sha512-bcc3k0ijhHbc2lEfpFHgx7eYw9KNXqOerKWfzbxEHUGKnS3sz9C4CNL9OiFN1297bDNfUiSO7DaLzbvHQQQ1BQ==",
1156 + "license": "MIT",
1157 + "dependencies": {
1158 + "@babel/helper-plugin-utils": "^7.28.6",
1159 + "@babel/template": "^7.28.6"
1160 + },
1161 + "engines": {
1162 + "node": ">=6.9.0"
1163 + },
1164 + "peerDependencies": {
1165 + "@babel/core": "^7.0.0-0"
1166 + }
1167 + },
1168 + "node_modules/@babel/plugin-transform-destructuring": {
1169 + "version": "7.28.5",
1170 + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.28.5.tgz",
1171 + "integrity": "sha512-Kl9Bc6D0zTUcFUvkNuQh4eGXPKKNDOJQXVyyM4ZAQPMveniJdxi8XMJwLo+xSoW3MIq81bD33lcUe9kZpl0MCw==",
1172 + "license": "MIT",
1173 + "dependencies": {
1174 + "@babel/helper-plugin-utils": "^7.27.1",
1175 + "@babel/traverse": "^7.28.5"
1176 + },
1177 + "engines": {
1178 + "node": ">=6.9.0"
1179 + },
1180 + "peerDependencies": {
1181 + "@babel/core": "^7.0.0-0"
1182 + }
1183 + },
1184 + "node_modules/@babel/plugin-transform-dotall-regex": {
1185 + "version": "7.28.6",
1186 + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.28.6.tgz",
1187 + "integrity": "sha512-SljjowuNKB7q5Oayv4FoPzeB74g3QgLt8IVJw9ADvWy3QnUb/01aw8I4AVv8wYnPvQz2GDDZ/g3GhcNyDBI4Bg==",
1188 + "license": "MIT",
1189 + "peer": true,
1190 + "dependencies": {
1191 + "@babel/helper-create-regexp-features-plugin": "^7.28.5",
1192 + "@babel/helper-plugin-utils": "^7.28.6"
1193 + },
1194 + "engines": {
1195 + "node": ">=6.9.0"
1196 + },
1197 + "peerDependencies": {
1198 + "@babel/core": "^7.0.0-0"
1199 + }
1200 + },
1201 + "node_modules/@babel/plugin-transform-duplicate-keys": {
1202 + "version": "7.27.1",
1203 + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.27.1.tgz",
1204 + "integrity": "sha512-MTyJk98sHvSs+cvZ4nOauwTTG1JeonDjSGvGGUNHreGQns+Mpt6WX/dVzWBHgg+dYZhkC4X+zTDfkTU+Vy9y7Q==",
1205 + "license": "MIT",
1206 + "peer": true,
1207 + "dependencies": {
1208 + "@babel/helper-plugin-utils": "^7.27.1"
1209 + },
1210 + "engines": {
1211 + "node": ">=6.9.0"
1212 + },
1213 + "peerDependencies": {
1214 + "@babel/core": "^7.0.0-0"
1215 + }
1216 + },
1217 + "node_modules/@babel/plugin-transform-duplicate-named-capturing-groups-regex": {
1218 + "version": "7.29.0",
1219 + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.29.0.tgz",
1220 + "integrity": "sha512-zBPcW2lFGxdiD8PUnPwJjag2J9otbcLQzvbiOzDxpYXyCuYX9agOwMPGn1prVH0a4qzhCKu24rlH4c1f7yA8rw==",
1221 + "license": "MIT",
1222 + "peer": true,
1223 + "dependencies": {
1224 + "@babel/helper-create-regexp-features-plugin": "^7.28.5",
1225 + "@babel/helper-plugin-utils": "^7.28.6"
1226 + },
1227 + "engines": {
1228 + "node": ">=6.9.0"
1229 + },
1230 + "peerDependencies": {
1231 + "@babel/core": "^7.0.0"
1232 + }
1233 + },
1234 + "node_modules/@babel/plugin-transform-dynamic-import": {
1235 + "version": "7.27.1",
1236 + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.27.1.tgz",
1237 + "integrity": "sha512-MHzkWQcEmjzzVW9j2q8LGjwGWpG2mjwaaB0BNQwst3FIjqsg8Ct/mIZlvSPJvfi9y2AC8mi/ktxbFVL9pZ1I4A==",
1238 + "license": "MIT",
1239 + "peer": true,
1240 + "dependencies": {
1241 + "@babel/helper-plugin-utils": "^7.27.1"
1242 + },
1243 + "engines": {
1244 + "node": ">=6.9.0"
1245 + },
1246 + "peerDependencies": {
1247 + "@babel/core": "^7.0.0-0"
1248 + }
1249 + },
1250 + "node_modules/@babel/plugin-transform-explicit-resource-management": {
1251 + "version": "7.28.6",
1252 + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-explicit-resource-management/-/plugin-transform-explicit-resource-management-7.28.6.tgz",
1253 + "integrity": "sha512-Iao5Konzx2b6g7EPqTy40UZbcdXE126tTxVFr/nAIj+WItNxjKSYTEw3RC+A2/ZetmdJsgueL1KhaMCQHkLPIg==",
1254 + "license": "MIT",
1255 + "peer": true,
1256 + "dependencies": {
1257 + "@babel/helper-plugin-utils": "^7.28.6",
1258 + "@babel/plugin-transform-destructuring": "^7.28.5"
1259 + },
1260 + "engines": {
1261 + "node": ">=6.9.0"
1262 + },
1263 + "peerDependencies": {
1264 + "@babel/core": "^7.0.0-0"
1265 + }
1266 + },
1267 + "node_modules/@babel/plugin-transform-exponentiation-operator": {
1268 + "version": "7.28.6",
1269 + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.28.6.tgz",
1270 + "integrity": "sha512-WitabqiGjV/vJ0aPOLSFfNY1u9U3R7W36B03r5I2KoNix+a3sOhJ3pKFB3R5It9/UiK78NiO0KE9P21cMhlPkw==",
1271 + "license": "MIT",
1272 + "peer": true,
1273 + "dependencies": {
1274 + "@babel/helper-plugin-utils": "^7.28.6"
1275 + },
1276 + "engines": {
1277 + "node": ">=6.9.0"
1278 + },
1279 + "peerDependencies": {
1280 + "@babel/core": "^7.0.0-0"
1281 + }
1282 + },
1283 + "node_modules/@babel/plugin-transform-export-namespace-from": {
1284 + "version": "7.27.1",
1285 + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.27.1.tgz",
1286 + "integrity": "sha512-tQvHWSZ3/jH2xuq/vZDy0jNn+ZdXJeM8gHvX4lnJmsc3+50yPlWdZXIc5ay+umX+2/tJIqHqiEqcJvxlmIvRvQ==",
1287 + "license": "MIT",
1288 + "dependencies": {
1289 + "@babel/helper-plugin-utils": "^7.27.1"
1290 + },
1291 + "engines": {
1292 + "node": ">=6.9.0"
1293 + },
1294 + "peerDependencies": {
1295 + "@babel/core": "^7.0.0-0"
1296 + }
1297 + },
1298 + "node_modules/@babel/plugin-transform-flow-strip-types": {
1299 + "version": "7.27.1",
1300 + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.27.1.tgz",
1301 + "integrity": "sha512-G5eDKsu50udECw7DL2AcsysXiQyB7Nfg521t2OAJ4tbfTJ27doHLeF/vlI1NZGlLdbb/v+ibvtL1YBQqYOwJGg==",
1302 + "license": "MIT",
1303 + "dependencies": {
1304 + "@babel/helper-plugin-utils": "^7.27.1",
1305 + "@babel/plugin-syntax-flow": "^7.27.1"
1306 + },
1307 + "engines": {
1308 + "node": ">=6.9.0"
1309 + },
1310 + "peerDependencies": {
1311 + "@babel/core": "^7.0.0-0"
1312 + }
1313 + },
1314 + "node_modules/@babel/plugin-transform-for-of": {
1315 + "version": "7.27.1",
1316 + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.27.1.tgz",
1317 + "integrity": "sha512-BfbWFFEJFQzLCQ5N8VocnCtA8J1CLkNTe2Ms2wocj75dd6VpiqS5Z5quTYcUoo4Yq+DN0rtikODccuv7RU81sw==",
1318 + "license": "MIT",
1319 + "dependencies": {
1320 + "@babel/helper-plugin-utils": "^7.27.1",
1321 + "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1"
1322 + },
1323 + "engines": {
1324 + "node": ">=6.9.0"
1325 + },
1326 + "peerDependencies": {
1327 + "@babel/core": "^7.0.0-0"
1328 + }
1329 + },
1330 + "node_modules/@babel/plugin-transform-function-name": {
1331 + "version": "7.27.1",
1332 + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.27.1.tgz",
1333 + "integrity": "sha512-1bQeydJF9Nr1eBCMMbC+hdwmRlsv5XYOMu03YSWFwNs0HsAmtSxxF1fyuYPqemVldVyFmlCU7w8UE14LupUSZQ==",
1334 + "license": "MIT",
1335 + "dependencies": {
1336 + "@babel/helper-compilation-targets": "^7.27.1",
1337 + "@babel/helper-plugin-utils": "^7.27.1",
1338 + "@babel/traverse": "^7.27.1"
1339 + },
1340 + "engines": {
1341 + "node": ">=6.9.0"
1342 + },
1343 + "peerDependencies": {
1344 + "@babel/core": "^7.0.0-0"
1345 + }
1346 + },
1347 + "node_modules/@babel/plugin-transform-json-strings": {
1348 + "version": "7.28.6",
1349 + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.28.6.tgz",
1350 + "integrity": "sha512-Nr+hEN+0geQkzhbdgQVPoqr47lZbm+5fCUmO70722xJZd0Mvb59+33QLImGj6F+DkK3xgDi1YVysP8whD6FQAw==",
1351 + "license": "MIT",
1352 + "peer": true,
1353 + "dependencies": {
1354 + "@babel/helper-plugin-utils": "^7.28.6"
1355 + },
1356 + "engines": {
1357 + "node": ">=6.9.0"
1358 + },
1359 + "peerDependencies": {
1360 + "@babel/core": "^7.0.0-0"
1361 + }
1362 + },
1363 + "node_modules/@babel/plugin-transform-literals": {
1364 + "version": "7.27.1",
1365 + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.27.1.tgz",
1366 + "integrity": "sha512-0HCFSepIpLTkLcsi86GG3mTUzxV5jpmbv97hTETW3yzrAij8aqlD36toB1D0daVFJM8NK6GvKO0gslVQmm+zZA==",
1367 + "license": "MIT",
1368 + "dependencies": {
1369 + "@babel/helper-plugin-utils": "^7.27.1"
1370 + },
1371 + "engines": {
1372 + "node": ">=6.9.0"
1373 + },
1374 + "peerDependencies": {
1375 + "@babel/core": "^7.0.0-0"
1376 + }
1377 + },
1378 + "node_modules/@babel/plugin-transform-logical-assignment-operators": {
1379 + "version": "7.28.6",
1380 + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.28.6.tgz",
1381 + "integrity": "sha512-+anKKair6gpi8VsM/95kmomGNMD0eLz1NQ8+Pfw5sAwWH9fGYXT50E55ZpV0pHUHWf6IUTWPM+f/7AAff+wr9A==",
1382 + "license": "MIT",
1383 + "dependencies": {
1384 + "@babel/helper-plugin-utils": "^7.28.6"
1385 + },
1386 + "engines": {
1387 + "node": ">=6.9.0"
1388 + },
1389 + "peerDependencies": {
1390 + "@babel/core": "^7.0.0-0"
1391 + }
1392 + },
1393 + "node_modules/@babel/plugin-transform-member-expression-literals": {
1394 + "version": "7.27.1",
1395 + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.27.1.tgz",
1396 + "integrity": "sha512-hqoBX4dcZ1I33jCSWcXrP+1Ku7kdqXf1oeah7ooKOIiAdKQ+uqftgCFNOSzA5AMS2XIHEYeGFg4cKRCdpxzVOQ==",
1397 + "license": "MIT",
1398 + "peer": true,
1399 + "dependencies": {
1400 + "@babel/helper-plugin-utils": "^7.27.1"
1401 + },
1402 + "engines": {
1403 + "node": ">=6.9.0"
1404 + },
1405 + "peerDependencies": {
1406 + "@babel/core": "^7.0.0-0"
1407 + }
1408 + },
1409 + "node_modules/@babel/plugin-transform-modules-amd": {
1410 + "version": "7.27.1",
1411 + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.27.1.tgz",
1412 + "integrity": "sha512-iCsytMg/N9/oFq6n+gFTvUYDZQOMK5kEdeYxmxt91fcJGycfxVP9CnrxoliM0oumFERba2i8ZtwRUCMhvP1LnA==",
1413 + "license": "MIT",
1414 + "peer": true,
1415 + "dependencies": {
1416 + "@babel/helper-module-transforms": "^7.27.1",
1417 + "@babel/helper-plugin-utils": "^7.27.1"
1418 + },
1419 + "engines": {
1420 + "node": ">=6.9.0"
1421 + },
1422 + "peerDependencies": {
1423 + "@babel/core": "^7.0.0-0"
1424 + }
1425 + },
1426 + "node_modules/@babel/plugin-transform-modules-commonjs": {
1427 + "version": "7.28.6",
1428 + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.28.6.tgz",
1429 + "integrity": "sha512-jppVbf8IV9iWWwWTQIxJMAJCWBuuKx71475wHwYytrRGQ2CWiDvYlADQno3tcYpS/T2UUWFQp3nVtYfK/YBQrA==",
1430 + "license": "MIT",
1431 + "dependencies": {
1432 + "@babel/helper-module-transforms": "^7.28.6",
1433 + "@babel/helper-plugin-utils": "^7.28.6"
1434 + },
1435 + "engines": {
1436 + "node": ">=6.9.0"
1437 + },
1438 + "peerDependencies": {
1439 + "@babel/core": "^7.0.0-0"
1440 + }
1441 + },
1442 + "node_modules/@babel/plugin-transform-modules-systemjs": {
1443 + "version": "7.29.0",
1444 + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.29.0.tgz",
1445 + "integrity": "sha512-PrujnVFbOdUpw4UHiVwKvKRLMMic8+eC0CuNlxjsyZUiBjhFdPsewdXCkveh2KqBA9/waD0W1b4hXSOBQJezpQ==",
1446 + "license": "MIT",
1447 + "peer": true,
1448 + "dependencies": {
1449 + "@babel/helper-module-transforms": "^7.28.6",
1450 + "@babel/helper-plugin-utils": "^7.28.6",
1451 + "@babel/helper-validator-identifier": "^7.28.5",
1452 + "@babel/traverse": "^7.29.0"
1453 + },
1454 + "engines": {
1455 + "node": ">=6.9.0"
1456 + },
1457 + "peerDependencies": {
1458 + "@babel/core": "^7.0.0-0"
1459 + }
1460 + },
1461 + "node_modules/@babel/plugin-transform-modules-umd": {
1462 + "version": "7.27.1",
1463 + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.27.1.tgz",
1464 + "integrity": "sha512-iQBE/xC5BV1OxJbp6WG7jq9IWiD+xxlZhLrdwpPkTX3ydmXdvoCpyfJN7acaIBZaOqTfr76pgzqBJflNbeRK+w==",
1465 + "license": "MIT",
1466 + "peer": true,
1467 + "dependencies": {
1468 + "@babel/helper-module-transforms": "^7.27.1",
1469 + "@babel/helper-plugin-utils": "^7.27.1"
1470 + },
1471 + "engines": {
1472 + "node": ">=6.9.0"
1473 + },
1474 + "peerDependencies": {
1475 + "@babel/core": "^7.0.0-0"
1476 + }
1477 + },
1478 + "node_modules/@babel/plugin-transform-named-capturing-groups-regex": {
1479 + "version": "7.29.0",
1480 + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.29.0.tgz",
1481 + "integrity": "sha512-1CZQA5KNAD6ZYQLPw7oi5ewtDNxH/2vuCh+6SmvgDfhumForvs8a1o9n0UrEoBD8HU4djO2yWngTQlXl1NDVEQ==",
1482 + "license": "MIT",
1483 + "dependencies": {
1484 + "@babel/helper-create-regexp-features-plugin": "^7.28.5",
1485 + "@babel/helper-plugin-utils": "^7.28.6"
1486 + },
1487 + "engines": {
1488 + "node": ">=6.9.0"
1489 + },
1490 + "peerDependencies": {
1491 + "@babel/core": "^7.0.0"
1492 + }
1493 + },
1494 + "node_modules/@babel/plugin-transform-new-target": {
1495 + "version": "7.27.1",
1496 + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.27.1.tgz",
1497 + "integrity": "sha512-f6PiYeqXQ05lYq3TIfIDu/MtliKUbNwkGApPUvyo6+tc7uaR4cPjPe7DFPr15Uyycg2lZU6btZ575CuQoYh7MQ==",
1498 + "license": "MIT",
1499 + "peer": true,
1500 + "dependencies": {
1501 + "@babel/helper-plugin-utils": "^7.27.1"
1502 + },
1503 + "engines": {
1504 + "node": ">=6.9.0"
1505 + },
1506 + "peerDependencies": {
1507 + "@babel/core": "^7.0.0-0"
1508 + }
1509 + },
1510 + "node_modules/@babel/plugin-transform-nullish-coalescing-operator": {
1511 + "version": "7.28.6",
1512 + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.28.6.tgz",
1513 + "integrity": "sha512-3wKbRgmzYbw24mDJXT7N+ADXw8BC/imU9yo9c9X9NKaLF1fW+e5H1U5QjMUBe4Qo4Ox/o++IyUkl1sVCLgevKg==",
1514 + "license": "MIT",
1515 + "dependencies": {
1516 + "@babel/helper-plugin-utils": "^7.28.6"
1517 + },
1518 + "engines": {
1519 + "node": ">=6.9.0"
1520 + },
1521 + "peerDependencies": {
1522 + "@babel/core": "^7.0.0-0"
1523 + }
1524 + },
1525 + "node_modules/@babel/plugin-transform-numeric-separator": {
1526 + "version": "7.28.6",
1527 + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.28.6.tgz",
1528 + "integrity": "sha512-SJR8hPynj8outz+SlStQSwvziMN4+Bq99it4tMIf5/Caq+3iOc0JtKyse8puvyXkk3eFRIA5ID/XfunGgO5i6w==",
1529 + "license": "MIT",
1530 + "dependencies": {
1531 + "@babel/helper-plugin-utils": "^7.28.6"
1532 + },
1533 + "engines": {
1534 + "node": ">=6.9.0"
1535 + },
1536 + "peerDependencies": {
1537 + "@babel/core": "^7.0.0-0"
1538 + }
1539 + },
1540 + "node_modules/@babel/plugin-transform-object-rest-spread": {
1541 + "version": "7.28.6",
1542 + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.28.6.tgz",
1543 + "integrity": "sha512-5rh+JR4JBC4pGkXLAcYdLHZjXudVxWMXbB6u6+E9lRL5TrGVbHt1TjxGbZ8CkmYw9zjkB7jutzOROArsqtncEA==",
1544 + "license": "MIT",
1545 + "dependencies": {
1546 + "@babel/helper-compilation-targets": "^7.28.6",
1547 + "@babel/helper-plugin-utils": "^7.28.6",
1548 + "@babel/plugin-transform-destructuring": "^7.28.5",
1549 + "@babel/plugin-transform-parameters": "^7.27.7",
1550 + "@babel/traverse": "^7.28.6"
1551 + },
1552 + "engines": {
1553 + "node": ">=6.9.0"
1554 + },
1555 + "peerDependencies": {
1556 + "@babel/core": "^7.0.0-0"
1557 + }
1558 + },
1559 + "node_modules/@babel/plugin-transform-object-super": {
1560 + "version": "7.27.1",
1561 + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.27.1.tgz",
1562 + "integrity": "sha512-SFy8S9plRPbIcxlJ8A6mT/CxFdJx/c04JEctz4jf8YZaVS2px34j7NXRrlGlHkN/M2gnpL37ZpGRGVFLd3l8Ng==",
1563 + "license": "MIT",
1564 + "peer": true,
1565 + "dependencies": {
1566 + "@babel/helper-plugin-utils": "^7.27.1",
1567 + "@babel/helper-replace-supers": "^7.27.1"
1568 + },
1569 + "engines": {
1570 + "node": ">=6.9.0"
1571 + },
1572 + "peerDependencies": {
1573 + "@babel/core": "^7.0.0-0"
1574 + }
1575 + },
1576 + "node_modules/@babel/plugin-transform-optional-catch-binding": {
1577 + "version": "7.28.6",
1578 + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.28.6.tgz",
1579 + "integrity": "sha512-R8ja/Pyrv0OGAvAXQhSTmWyPJPml+0TMqXlO5w+AsMEiwb2fg3WkOvob7UxFSL3OIttFSGSRFKQsOhJ/X6HQdQ==",
1580 + "license": "MIT",
1581 + "dependencies": {
1582 + "@babel/helper-plugin-utils": "^7.28.6"
1583 + },
1584 + "engines": {
1585 + "node": ">=6.9.0"
1586 + },
1587 + "peerDependencies": {
1588 + "@babel/core": "^7.0.0-0"
1589 + }
1590 + },
1591 + "node_modules/@babel/plugin-transform-optional-chaining": {
1592 + "version": "7.28.6",
1593 + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.28.6.tgz",
1594 + "integrity": "sha512-A4zobikRGJTsX9uqVFdafzGkqD30t26ck2LmOzAuLL8b2x6k3TIqRiT2xVvA9fNmFeTX484VpsdgmKNA0bS23w==",
1595 + "license": "MIT",
1596 + "dependencies": {
1597 + "@babel/helper-plugin-utils": "^7.28.6",
1598 + "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1"
1599 + },
1600 + "engines": {
1601 + "node": ">=6.9.0"
1602 + },
1603 + "peerDependencies": {
1604 + "@babel/core": "^7.0.0-0"
1605 + }
1606 + },
1607 + "node_modules/@babel/plugin-transform-parameters": {
1608 + "version": "7.27.7",
1609 + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.27.7.tgz",
1610 + "integrity": "sha512-qBkYTYCb76RRxUM6CcZA5KRu8K4SM8ajzVeUgVdMVO9NN9uI/GaVmBg/WKJJGnNokV9SY8FxNOVWGXzqzUidBg==",
1611 + "license": "MIT",
1612 + "dependencies": {
1613 + "@babel/helper-plugin-utils": "^7.27.1"
1614 + },
1615 + "engines": {
1616 + "node": ">=6.9.0"
1617 + },
1618 + "peerDependencies": {
1619 + "@babel/core": "^7.0.0-0"
1620 + }
1621 + },
1622 + "node_modules/@babel/plugin-transform-private-methods": {
1623 + "version": "7.28.6",
1624 + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.28.6.tgz",
1625 + "integrity": "sha512-piiuapX9CRv7+0st8lmuUlRSmX6mBcVeNQ1b4AYzJxfCMuBfB0vBXDiGSmm03pKJw1v6cZ8KSeM+oUnM6yAExg==",
1626 + "license": "MIT",
1627 + "dependencies": {
1628 + "@babel/helper-create-class-features-plugin": "^7.28.6",
1629 + "@babel/helper-plugin-utils": "^7.28.6"
1630 + },
1631 + "engines": {
1632 + "node": ">=6.9.0"
1633 + },
1634 + "peerDependencies": {
1635 + "@babel/core": "^7.0.0-0"
1636 + }
1637 + },
1638 + "node_modules/@babel/plugin-transform-private-property-in-object": {
1639 + "version": "7.28.6",
1640 + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.28.6.tgz",
1641 + "integrity": "sha512-b97jvNSOb5+ehyQmBpmhOCiUC5oVK4PMnpRvO7+ymFBoqYjeDHIU9jnrNUuwHOiL9RpGDoKBpSViarV+BU+eVA==",
1642 + "license": "MIT",
1643 + "dependencies": {
1644 + "@babel/helper-annotate-as-pure": "^7.27.3",
1645 + "@babel/helper-create-class-features-plugin": "^7.28.6",
1646 + "@babel/helper-plugin-utils": "^7.28.6"
1647 + },
1648 + "engines": {
1649 + "node": ">=6.9.0"
1650 + },
1651 + "peerDependencies": {
1652 + "@babel/core": "^7.0.0-0"
1653 + }
1654 + },
1655 + "node_modules/@babel/plugin-transform-property-literals": {
1656 + "version": "7.27.1",
1657 + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.27.1.tgz",
1658 + "integrity": "sha512-oThy3BCuCha8kDZ8ZkgOg2exvPYUlprMukKQXI1r1pJ47NCvxfkEy8vK+r/hT9nF0Aa4H1WUPZZjHTFtAhGfmQ==",
1659 + "license": "MIT",
1660 + "peer": true,
1661 + "dependencies": {
1662 + "@babel/helper-plugin-utils": "^7.27.1"
1663 + },
1664 + "engines": {
1665 + "node": ">=6.9.0"
1666 + },
1667 + "peerDependencies": {
1668 + "@babel/core": "^7.0.0-0"
1669 + }
1670 + },
1671 + "node_modules/@babel/plugin-transform-react-display-name": {
1672 + "version": "7.28.0",
1673 + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.28.0.tgz",
1674 + "integrity": "sha512-D6Eujc2zMxKjfa4Zxl4GHMsmhKKZ9VpcqIchJLvwTxad9zWIYulwYItBovpDOoNLISpcZSXoDJ5gaGbQUDqViA==",
1675 + "license": "MIT",
1676 + "dependencies": {
1677 + "@babel/helper-plugin-utils": "^7.27.1"
1678 + },
1679 + "engines": {
1680 + "node": ">=6.9.0"
1681 + },
1682 + "peerDependencies": {
1683 + "@babel/core": "^7.0.0-0"
1684 + }
1685 + },
1686 + "node_modules/@babel/plugin-transform-react-jsx": {
1687 + "version": "7.28.6",
1688 + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.28.6.tgz",
1689 + "integrity": "sha512-61bxqhiRfAACulXSLd/GxqmAedUSrRZIu/cbaT18T1CetkTmtDN15it7i80ru4DVqRK1WMxQhXs+Lf9kajm5Ow==",
1690 + "license": "MIT",
1691 + "dependencies": {
1692 + "@babel/helper-annotate-as-pure": "^7.27.3",
1693 + "@babel/helper-module-imports": "^7.28.6",
1694 + "@babel/helper-plugin-utils": "^7.28.6",
1695 + "@babel/plugin-syntax-jsx": "^7.28.6",
1696 + "@babel/types": "^7.28.6"
1697 + },
1698 + "engines": {
1699 + "node": ">=6.9.0"
1700 + },
1701 + "peerDependencies": {
1702 + "@babel/core": "^7.0.0-0"
1703 + }
1704 + },
1705 + "node_modules/@babel/plugin-transform-react-jsx-development": {
1706 + "version": "7.27.1",
1707 + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.27.1.tgz",
1708 + "integrity": "sha512-ykDdF5yI4f1WrAolLqeF3hmYU12j9ntLQl/AOG1HAS21jxyg1Q0/J/tpREuYLfatGdGmXp/3yS0ZA76kOlVq9Q==",
1709 + "license": "MIT",
1710 + "dependencies": {
1711 + "@babel/plugin-transform-react-jsx": "^7.27.1"
1712 + },
1713 + "engines": {
1714 + "node": ">=6.9.0"
1715 + },
1716 + "peerDependencies": {
1717 + "@babel/core": "^7.0.0-0"
1718 + }
1719 + },
1720 + "node_modules/@babel/plugin-transform-react-jsx-self": {
1721 + "version": "7.27.1",
1722 + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.27.1.tgz",
1723 + "integrity": "sha512-6UzkCs+ejGdZ5mFFC/OCUrv028ab2fp1znZmCZjAOBKiBK2jXD1O+BPSfX8X2qjJ75fZBMSnQn3Rq2mrBJK2mw==",
1724 + "license": "MIT",
1725 + "dependencies": {
1726 + "@babel/helper-plugin-utils": "^7.27.1"
1727 + },
1728 + "engines": {
1729 + "node": ">=6.9.0"
1730 + },
1731 + "peerDependencies": {
1732 + "@babel/core": "^7.0.0-0"
1733 + }
1734 + },
1735 + "node_modules/@babel/plugin-transform-react-jsx-source": {
1736 + "version": "7.27.1",
1737 + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.27.1.tgz",
1738 + "integrity": "sha512-zbwoTsBruTeKB9hSq73ha66iFeJHuaFkUbwvqElnygoNbj/jHRsSeokowZFN3CZ64IvEqcmmkVe89OPXc7ldAw==",
1739 + "license": "MIT",
1740 + "dependencies": {
1741 + "@babel/helper-plugin-utils": "^7.27.1"
1742 + },
1743 + "engines": {
1744 + "node": ">=6.9.0"
1745 + },
1746 + "peerDependencies": {
1747 + "@babel/core": "^7.0.0-0"
1748 + }
1749 + },
1750 + "node_modules/@babel/plugin-transform-react-pure-annotations": {
1751 + "version": "7.27.1",
1752 + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.27.1.tgz",
1753 + "integrity": "sha512-JfuinvDOsD9FVMTHpzA/pBLisxpv1aSf+OIV8lgH3MuWrks19R27e6a6DipIg4aX1Zm9Wpb04p8wljfKrVSnPA==",
1754 + "license": "MIT",
1755 + "dependencies": {
1756 + "@babel/helper-annotate-as-pure": "^7.27.1",
1757 + "@babel/helper-plugin-utils": "^7.27.1"
1758 + },
1759 + "engines": {
1760 + "node": ">=6.9.0"
1761 + },
1762 + "peerDependencies": {
1763 + "@babel/core": "^7.0.0-0"
1764 + }
1765 + },
1766 + "node_modules/@babel/plugin-transform-regenerator": {
1767 + "version": "7.29.0",
1768 + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.29.0.tgz",
1769 + "integrity": "sha512-FijqlqMA7DmRdg/aINBSs04y8XNTYw/lr1gJ2WsmBnnaNw1iS43EPkJW+zK7z65auG3AWRFXWj+NcTQwYptUog==",
1770 + "license": "MIT",
1771 + "dependencies": {
1772 + "@babel/helper-plugin-utils": "^7.28.6"
1773 + },
1774 + "engines": {
1775 + "node": ">=6.9.0"
1776 + },
1777 + "peerDependencies": {
1778 + "@babel/core": "^7.0.0-0"
1779 + }
1780 + },
1781 + "node_modules/@babel/plugin-transform-regexp-modifiers": {
1782 + "version": "7.28.6",
1783 + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regexp-modifiers/-/plugin-transform-regexp-modifiers-7.28.6.tgz",
1784 + "integrity": "sha512-QGWAepm9qxpaIs7UM9FvUSnCGlb8Ua1RhyM4/veAxLwt3gMat/LSGrZixyuj4I6+Kn9iwvqCyPTtbdxanYoWYg==",
1785 + "license": "MIT",
1786 + "peer": true,
1787 + "dependencies": {
1788 + "@babel/helper-create-regexp-features-plugin": "^7.28.5",
1789 + "@babel/helper-plugin-utils": "^7.28.6"
1790 + },
1791 + "engines": {
1792 + "node": ">=6.9.0"
1793 + },
1794 + "peerDependencies": {
1795 + "@babel/core": "^7.0.0"
1796 + }
1797 + },
1798 + "node_modules/@babel/plugin-transform-reserved-words": {
1799 + "version": "7.27.1",
1800 + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.27.1.tgz",
1801 + "integrity": "sha512-V2ABPHIJX4kC7HegLkYoDpfg9PVmuWy/i6vUM5eGK22bx4YVFD3M5F0QQnWQoDs6AGsUWTVOopBiMFQgHaSkVw==",
1802 + "license": "MIT",
1803 + "peer": true,
1804 + "dependencies": {
1805 + "@babel/helper-plugin-utils": "^7.27.1"
1806 + },
1807 + "engines": {
1808 + "node": ">=6.9.0"
1809 + },
1810 + "peerDependencies": {
1811 + "@babel/core": "^7.0.0-0"
1812 + }
1813 + },
1814 + "node_modules/@babel/plugin-transform-runtime": {
1815 + "version": "7.29.0",
1816 + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.29.0.tgz",
1817 + "integrity": "sha512-jlaRT5dJtMaMCV6fAuLbsQMSwz/QkvaHOHOSXRitGGwSpR1blCY4KUKoyP2tYO8vJcqYe8cEj96cqSztv3uF9w==",
1818 + "license": "MIT",
1819 + "dependencies": {
1820 + "@babel/helper-module-imports": "^7.28.6",
1821 + "@babel/helper-plugin-utils": "^7.28.6",
1822 + "babel-plugin-polyfill-corejs2": "^0.4.14",
1823 + "babel-plugin-polyfill-corejs3": "^0.13.0",
1824 + "babel-plugin-polyfill-regenerator": "^0.6.5",
1825 + "semver": "^6.3.1"
1826 + },
1827 + "engines": {
1828 + "node": ">=6.9.0"
1829 + },
1830 + "peerDependencies": {
1831 + "@babel/core": "^7.0.0-0"
1832 + }
1833 + },
1834 + "node_modules/@babel/plugin-transform-runtime/node_modules/semver": {
1835 + "version": "6.3.1",
1836 + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
1837 + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
1838 + "license": "ISC",
1839 + "bin": {
1840 + "semver": "bin/semver.js"
1841 + }
1842 + },
1843 + "node_modules/@babel/plugin-transform-shorthand-properties": {
1844 + "version": "7.27.1",
1845 + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.27.1.tgz",
1846 + "integrity": "sha512-N/wH1vcn4oYawbJ13Y/FxcQrWk63jhfNa7jef0ih7PHSIHX2LB7GWE1rkPrOnka9kwMxb6hMl19p7lidA+EHmQ==",
1847 + "license": "MIT",
1848 + "dependencies": {
1849 + "@babel/helper-plugin-utils": "^7.27.1"
1850 + },
1851 + "engines": {
1852 + "node": ">=6.9.0"
1853 + },
1854 + "peerDependencies": {
1855 + "@babel/core": "^7.0.0-0"
1856 + }
1857 + },
1858 + "node_modules/@babel/plugin-transform-spread": {
1859 + "version": "7.28.6",
1860 + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.28.6.tgz",
1861 + "integrity": "sha512-9U4QObUC0FtJl05AsUcodau/RWDytrU6uKgkxu09mLR9HLDAtUMoPuuskm5huQsoktmsYpI+bGmq+iapDcriKA==",
1862 + "license": "MIT",
1863 + "dependencies": {
1864 + "@babel/helper-plugin-utils": "^7.28.6",
1865 + "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1"
1866 + },
1867 + "engines": {
1868 + "node": ">=6.9.0"
1869 + },
1870 + "peerDependencies": {
1871 + "@babel/core": "^7.0.0-0"
1872 + }
1873 + },
1874 + "node_modules/@babel/plugin-transform-sticky-regex": {
1875 + "version": "7.27.1",
1876 + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.27.1.tgz",
1877 + "integrity": "sha512-lhInBO5bi/Kowe2/aLdBAawijx+q1pQzicSgnkB6dUPc1+RC8QmJHKf2OjvU+NZWitguJHEaEmbV6VWEouT58g==",
1878 + "license": "MIT",
1879 + "dependencies": {
1880 + "@babel/helper-plugin-utils": "^7.27.1"
1881 + },
1882 + "engines": {
1883 + "node": ">=6.9.0"
1884 + },
1885 + "peerDependencies": {
1886 + "@babel/core": "^7.0.0-0"
1887 + }
1888 + },
1889 + "node_modules/@babel/plugin-transform-template-literals": {
1890 + "version": "7.27.1",
1891 + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.27.1.tgz",
1892 + "integrity": "sha512-fBJKiV7F2DxZUkg5EtHKXQdbsbURW3DZKQUWphDum0uRP6eHGGa/He9mc0mypL680pb+e/lDIthRohlv8NCHkg==",
1893 + "license": "MIT",
1894 + "peer": true,
1895 + "dependencies": {
1896 + "@babel/helper-plugin-utils": "^7.27.1"
1897 + },
1898 + "engines": {
1899 + "node": ">=6.9.0"
1900 + },
1901 + "peerDependencies": {
1902 + "@babel/core": "^7.0.0-0"
1903 + }
1904 + },
1905 + "node_modules/@babel/plugin-transform-typeof-symbol": {
1906 + "version": "7.27.1",
1907 + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.27.1.tgz",
1908 + "integrity": "sha512-RiSILC+nRJM7FY5srIyc4/fGIwUhyDuuBSdWn4y6yT6gm652DpCHZjIipgn6B7MQ1ITOUnAKWixEUjQRIBIcLw==",
1909 + "license": "MIT",
1910 + "peer": true,
1911 + "dependencies": {
1912 + "@babel/helper-plugin-utils": "^7.27.1"
1913 + },
1914 + "engines": {
1915 + "node": ">=6.9.0"
1916 + },
1917 + "peerDependencies": {
1918 + "@babel/core": "^7.0.0-0"
1919 + }
1920 + },
1921 + "node_modules/@babel/plugin-transform-typescript": {
1922 + "version": "7.28.6",
1923 + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.28.6.tgz",
1924 + "integrity": "sha512-0YWL2RFxOqEm9Efk5PvreamxPME8OyY0wM5wh5lHjF+VtVhdneCWGzZeSqzOfiobVqQaNCd2z0tQvnI9DaPWPw==",
1925 + "license": "MIT",
1926 + "dependencies": {
1927 + "@babel/helper-annotate-as-pure": "^7.27.3",
1928 + "@babel/helper-create-class-features-plugin": "^7.28.6",
1929 + "@babel/helper-plugin-utils": "^7.28.6",
1930 + "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1",
1931 + "@babel/plugin-syntax-typescript": "^7.28.6"
1932 + },
1933 + "engines": {
1934 + "node": ">=6.9.0"
1935 + },
1936 + "peerDependencies": {
1937 + "@babel/core": "^7.0.0-0"
1938 + }
1939 + },
1940 + "node_modules/@babel/plugin-transform-unicode-escapes": {
1941 + "version": "7.27.1",
1942 + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.27.1.tgz",
1943 + "integrity": "sha512-Ysg4v6AmF26k9vpfFuTZg8HRfVWzsh1kVfowA23y9j/Gu6dOuahdUVhkLqpObp3JIv27MLSii6noRnuKN8H0Mg==",
1944 + "license": "MIT",
1945 + "peer": true,
1946 + "dependencies": {
1947 + "@babel/helper-plugin-utils": "^7.27.1"
1948 + },
1949 + "engines": {
1950 + "node": ">=6.9.0"
1951 + },
1952 + "peerDependencies": {
1953 + "@babel/core": "^7.0.0-0"
1954 + }
1955 + },
1956 + "node_modules/@babel/plugin-transform-unicode-property-regex": {
1957 + "version": "7.28.6",
1958 + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.28.6.tgz",
1959 + "integrity": "sha512-4Wlbdl/sIZjzi/8St0evF0gEZrgOswVO6aOzqxh1kDZOl9WmLrHq2HtGhnOJZmHZYKP8WZ1MDLCt5DAWwRo57A==",
1960 + "license": "MIT",
1961 + "peer": true,
1962 + "dependencies": {
1963 + "@babel/helper-create-regexp-features-plugin": "^7.28.5",
1964 + "@babel/helper-plugin-utils": "^7.28.6"
1965 + },
1966 + "engines": {
1967 + "node": ">=6.9.0"
1968 + },
1969 + "peerDependencies": {
1970 + "@babel/core": "^7.0.0-0"
1971 + }
1972 + },
1973 + "node_modules/@babel/plugin-transform-unicode-regex": {
1974 + "version": "7.27.1",
1975 + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.27.1.tgz",
1976 + "integrity": "sha512-xvINq24TRojDuyt6JGtHmkVkrfVV3FPT16uytxImLeBZqW3/H52yN+kM1MGuyPkIQxrzKwPHs5U/MP3qKyzkGw==",
1977 + "license": "MIT",
1978 + "dependencies": {
1979 + "@babel/helper-create-regexp-features-plugin": "^7.27.1",
1980 + "@babel/helper-plugin-utils": "^7.27.1"
1981 + },
1982 + "engines": {
1983 + "node": ">=6.9.0"
1984 + },
1985 + "peerDependencies": {
1986 + "@babel/core": "^7.0.0-0"
1987 + }
1988 + },
1989 + "node_modules/@babel/plugin-transform-unicode-sets-regex": {
1990 + "version": "7.28.6",
1991 + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.28.6.tgz",
1992 + "integrity": "sha512-/wHc/paTUmsDYN7SZkpWxogTOBNnlx7nBQYfy6JJlCT7G3mVhltk3e++N7zV0XfgGsrqBxd4rJQt9H16I21Y1Q==",
1993 + "license": "MIT",
1994 + "peer": true,
1995 + "dependencies": {
1996 + "@babel/helper-create-regexp-features-plugin": "^7.28.5",
1997 + "@babel/helper-plugin-utils": "^7.28.6"
1998 + },
1999 + "engines": {
2000 + "node": ">=6.9.0"
2001 + },
2002 + "peerDependencies": {
2003 + "@babel/core": "^7.0.0"
2004 + }
2005 + },
2006 + "node_modules/@babel/preset-env": {
2007 + "version": "7.29.2",
2008 + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.29.2.tgz",
2009 + "integrity": "sha512-DYD23veRYGvBFhcTY1iUvJnDNpuqNd/BzBwCvzOTKUnJjKg5kpUBh3/u9585Agdkgj+QuygG7jLfOPWMa2KVNw==",
2010 + "license": "MIT",
2011 + "peer": true,
2012 + "dependencies": {
2013 + "@babel/compat-data": "^7.29.0",
2014 + "@babel/helper-compilation-targets": "^7.28.6",
2015 + "@babel/helper-plugin-utils": "^7.28.6",
2016 + "@babel/helper-validator-option": "^7.27.1",
2017 + "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.28.5",
2018 + "@babel/plugin-bugfix-safari-class-field-initializer-scope": "^7.27.1",
2019 + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.27.1",
2020 + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.27.1",
2021 + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.28.6",
2022 + "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2",
2023 + "@babel/plugin-syntax-import-assertions": "^7.28.6",
2024 + "@babel/plugin-syntax-import-attributes": "^7.28.6",
2025 + "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6",
2026 + "@babel/plugin-transform-arrow-functions": "^7.27.1",
2027 + "@babel/plugin-transform-async-generator-functions": "^7.29.0",
2028 + "@babel/plugin-transform-async-to-generator": "^7.28.6",
2029 + "@babel/plugin-transform-block-scoped-functions": "^7.27.1",
2030 + "@babel/plugin-transform-block-scoping": "^7.28.6",
2031 + "@babel/plugin-transform-class-properties": "^7.28.6",
2032 + "@babel/plugin-transform-class-static-block": "^7.28.6",
2033 + "@babel/plugin-transform-classes": "^7.28.6",
2034 + "@babel/plugin-transform-computed-properties": "^7.28.6",
2035 + "@babel/plugin-transform-destructuring": "^7.28.5",
2036 + "@babel/plugin-transform-dotall-regex": "^7.28.6",
2037 + "@babel/plugin-transform-duplicate-keys": "^7.27.1",
2038 + "@babel/plugin-transform-duplicate-named-capturing-groups-regex": "^7.29.0",
2039 + "@babel/plugin-transform-dynamic-import": "^7.27.1",
2040 + "@babel/plugin-transform-explicit-resource-management": "^7.28.6",
2041 + "@babel/plugin-transform-exponentiation-operator": "^7.28.6",
2042 + "@babel/plugin-transform-export-namespace-from": "^7.27.1",
2043 + "@babel/plugin-transform-for-of": "^7.27.1",
2044 + "@babel/plugin-transform-function-name": "^7.27.1",
2045 + "@babel/plugin-transform-json-strings": "^7.28.6",
2046 + "@babel/plugin-transform-literals": "^7.27.1",
2047 + "@babel/plugin-transform-logical-assignment-operators": "^7.28.6",
2048 + "@babel/plugin-transform-member-expression-literals": "^7.27.1",
2049 + "@babel/plugin-transform-modules-amd": "^7.27.1",
2050 + "@babel/plugin-transform-modules-commonjs": "^7.28.6",
2051 + "@babel/plugin-transform-modules-systemjs": "^7.29.0",
2052 + "@babel/plugin-transform-modules-umd": "^7.27.1",
2053 + "@babel/plugin-transform-named-capturing-groups-regex": "^7.29.0",
2054 + "@babel/plugin-transform-new-target": "^7.27.1",
2055 + "@babel/plugin-transform-nullish-coalescing-operator": "^7.28.6",
2056 + "@babel/plugin-transform-numeric-separator": "^7.28.6",
2057 + "@babel/plugin-transform-object-rest-spread": "^7.28.6",
2058 + "@babel/plugin-transform-object-super": "^7.27.1",
2059 + "@babel/plugin-transform-optional-catch-binding": "^7.28.6",
2060 + "@babel/plugin-transform-optional-chaining": "^7.28.6",
2061 + "@babel/plugin-transform-parameters": "^7.27.7",
2062 + "@babel/plugin-transform-private-methods": "^7.28.6",
2063 + "@babel/plugin-transform-private-property-in-object": "^7.28.6",
2064 + "@babel/plugin-transform-property-literals": "^7.27.1",
2065 + "@babel/plugin-transform-regenerator": "^7.29.0",
2066 + "@babel/plugin-transform-regexp-modifiers": "^7.28.6",
2067 + "@babel/plugin-transform-reserved-words": "^7.27.1",
2068 + "@babel/plugin-transform-shorthand-properties": "^7.27.1",
2069 + "@babel/plugin-transform-spread": "^7.28.6",
2070 + "@babel/plugin-transform-sticky-regex": "^7.27.1",
2071 + "@babel/plugin-transform-template-literals": "^7.27.1",
2072 + "@babel/plugin-transform-typeof-symbol": "^7.27.1",
2073 + "@babel/plugin-transform-unicode-escapes": "^7.27.1",
2074 + "@babel/plugin-transform-unicode-property-regex": "^7.28.6",
2075 + "@babel/plugin-transform-unicode-regex": "^7.27.1",
2076 + "@babel/plugin-transform-unicode-sets-regex": "^7.28.6",
2077 + "@babel/preset-modules": "0.1.6-no-external-plugins",
2078 + "babel-plugin-polyfill-corejs2": "^0.4.15",
2079 + "babel-plugin-polyfill-corejs3": "^0.14.0",
2080 + "babel-plugin-polyfill-regenerator": "^0.6.6",
2081 + "core-js-compat": "^3.48.0",
2082 + "semver": "^6.3.1"
2083 + },
2084 + "engines": {
2085 + "node": ">=6.9.0"
2086 + },
2087 + "peerDependencies": {
2088 + "@babel/core": "^7.0.0-0"
2089 + }
2090 + },
2091 + "node_modules/@babel/preset-env/node_modules/babel-plugin-polyfill-corejs3": {
2092 + "version": "0.14.2",
2093 + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.14.2.tgz",
2094 + "integrity": "sha512-coWpDLJ410R781Npmn/SIBZEsAetR4xVi0SxLMXPaMO4lSf1MwnkGYMtkFxew0Dn8B3/CpbpYxN0JCgg8mn67g==",
2095 + "license": "MIT",
2096 + "peer": true,
2097 + "dependencies": {
2098 + "@babel/helper-define-polyfill-provider": "^0.6.8",
2099 + "core-js-compat": "^3.48.0"
2100 + },
2101 + "peerDependencies": {
2102 + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0"
2103 + }
2104 + },
2105 + "node_modules/@babel/preset-env/node_modules/semver": {
2106 + "version": "6.3.1",
2107 + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
2108 + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
2109 + "license": "ISC",
2110 + "peer": true,
2111 + "bin": {
2112 + "semver": "bin/semver.js"
2113 + }
2114 + },
2115 + "node_modules/@babel/preset-flow": {
2116 + "version": "7.27.1",
2117 + "resolved": "https://registry.npmjs.org/@babel/preset-flow/-/preset-flow-7.27.1.tgz",
2118 + "integrity": "sha512-ez3a2it5Fn6P54W8QkbfIyyIbxlXvcxyWHHvno1Wg0Ej5eiJY5hBb8ExttoIOJJk7V2dZE6prP7iby5q2aQ0Lg==",
2119 + "license": "MIT",
2120 + "dependencies": {
2121 + "@babel/helper-plugin-utils": "^7.27.1",
2122 + "@babel/helper-validator-option": "^7.27.1",
2123 + "@babel/plugin-transform-flow-strip-types": "^7.27.1"
2124 + },
2125 + "engines": {
2126 + "node": ">=6.9.0"
2127 + },
2128 + "peerDependencies": {
2129 + "@babel/core": "^7.0.0-0"
2130 + }
2131 + },
2132 + "node_modules/@babel/preset-modules": {
2133 + "version": "0.1.6-no-external-plugins",
2134 + "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz",
2135 + "integrity": "sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==",
2136 + "license": "MIT",
2137 + "peer": true,
2138 + "dependencies": {
2139 + "@babel/helper-plugin-utils": "^7.0.0",
2140 + "@babel/types": "^7.4.4",
2141 + "esutils": "^2.0.2"
2142 + },
2143 + "peerDependencies": {
2144 + "@babel/core": "^7.0.0-0 || ^8.0.0-0 <8.0.0"
2145 + }
2146 + },
2147 + "node_modules/@babel/preset-react": {
2148 + "version": "7.28.5",
2149 + "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.28.5.tgz",
2150 + "integrity": "sha512-Z3J8vhRq7CeLjdC58jLv4lnZ5RKFUJWqH5emvxmv9Hv3BD1T9R/Im713R4MTKwvFaV74ejZ3sM01LyEKk4ugNQ==",
2151 + "license": "MIT",
2152 + "dependencies": {
2153 + "@babel/helper-plugin-utils": "^7.27.1",
2154 + "@babel/helper-validator-option": "^7.27.1",
2155 + "@babel/plugin-transform-react-display-name": "^7.28.0",
2156 + "@babel/plugin-transform-react-jsx": "^7.27.1",
2157 + "@babel/plugin-transform-react-jsx-development": "^7.27.1",
2158 + "@babel/plugin-transform-react-pure-annotations": "^7.27.1"
2159 + },
2160 + "engines": {
2161 + "node": ">=6.9.0"
2162 + },
2163 + "peerDependencies": {
2164 + "@babel/core": "^7.0.0-0"
2165 + }
2166 + },
2167 + "node_modules/@babel/preset-typescript": {
2168 + "version": "7.28.5",
2169 + "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.28.5.tgz",
2170 + "integrity": "sha512-+bQy5WOI2V6LJZpPVxY+yp66XdZ2yifu0Mc1aP5CQKgjn4QM5IN2i5fAZ4xKop47pr8rpVhiAeu+nDQa12C8+g==",
2171 + "license": "MIT",
2172 + "dependencies": {
2173 + "@babel/helper-plugin-utils": "^7.27.1",
2174 + "@babel/helper-validator-option": "^7.27.1",
2175 + "@babel/plugin-syntax-jsx": "^7.27.1",
2176 + "@babel/plugin-transform-modules-commonjs": "^7.27.1",
2177 + "@babel/plugin-transform-typescript": "^7.28.5"
2178 + },
2179 + "engines": {
2180 + "node": ">=6.9.0"
2181 + },
2182 + "peerDependencies": {
2183 + "@babel/core": "^7.0.0-0"
2184 + }
2185 + },
2186 + "node_modules/@babel/register": {
2187 + "version": "7.28.6",
2188 + "resolved": "https://registry.npmjs.org/@babel/register/-/register-7.28.6.tgz",
2189 + "integrity": "sha512-pgcbbEl/dWQYb6L6Yew6F94rdwygfuv+vJ/tXfwIOYAfPB6TNWpXUMEtEq3YuTeHRdvMIhvz13bkT9CNaS+wqA==",
2190 + "license": "MIT",
2191 + "dependencies": {
2192 + "clone-deep": "^4.0.1",
2193 + "find-cache-dir": "^2.0.0",
2194 + "make-dir": "^2.1.0",
2195 + "pirates": "^4.0.6",
2196 + "source-map-support": "^0.5.16"
2197 + },
2198 + "engines": {
2199 + "node": ">=6.9.0"
2200 + },
2201 + "peerDependencies": {
2202 + "@babel/core": "^7.0.0-0"
2203 + }
2204 + },
2205 + "node_modules/@babel/runtime": {
2206 + "version": "7.29.2",
2207 + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.29.2.tgz",
2208 + "integrity": "sha512-JiDShH45zKHWyGe4ZNVRrCjBz8Nh9TMmZG1kh4QTK8hCBTWBi8Da+i7s1fJw7/lYpM4ccepSNfqzZ/QvABBi5g==",
2209 + "license": "MIT",
2210 + "engines": {
2211 + "node": ">=6.9.0"
2212 + }
2213 + },
2214 + "node_modules/@babel/template": {
2215 + "version": "7.28.6",
2216 + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.28.6.tgz",
2217 + "integrity": "sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ==",
2218 + "license": "MIT",
2219 + "dependencies": {
2220 + "@babel/code-frame": "^7.28.6",
2221 + "@babel/parser": "^7.28.6",
2222 + "@babel/types": "^7.28.6"
2223 + },
2224 + "engines": {
2225 + "node": ">=6.9.0"
2226 + }
2227 + },
2228 + "node_modules/@babel/template/node_modules/@babel/code-frame": {
2229 + "version": "7.29.0",
2230 + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.0.tgz",
2231 + "integrity": "sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==",
2232 + "license": "MIT",
2233 + "dependencies": {
2234 + "@babel/helper-validator-identifier": "^7.28.5",
2235 + "js-tokens": "^4.0.0",
2236 + "picocolors": "^1.1.1"
2237 + },
2238 + "engines": {
2239 + "node": ">=6.9.0"
2240 + }
2241 + },
2242 + "node_modules/@babel/traverse": {
2243 + "version": "7.29.0",
2244 + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.29.0.tgz",
2245 + "integrity": "sha512-4HPiQr0X7+waHfyXPZpWPfWL/J7dcN1mx9gL6WdQVMbPnF3+ZhSMs8tCxN7oHddJE9fhNE7+lxdnlyemKfJRuA==",
2246 + "license": "MIT",
2247 + "dependencies": {
2248 + "@babel/code-frame": "^7.29.0",
2249 + "@babel/generator": "^7.29.0",
2250 + "@babel/helper-globals": "^7.28.0",
2251 + "@babel/parser": "^7.29.0",
2252 + "@babel/template": "^7.28.6",
2253 + "@babel/types": "^7.29.0",
2254 + "debug": "^4.3.1"
2255 + },
2256 + "engines": {
2257 + "node": ">=6.9.0"
2258 + }
2259 + },
2260 + "node_modules/@babel/traverse--for-generate-function-map": {
2261 + "name": "@babel/traverse",
2262 + "version": "7.29.0",
2263 + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.29.0.tgz",
2264 + "integrity": "sha512-4HPiQr0X7+waHfyXPZpWPfWL/J7dcN1mx9gL6WdQVMbPnF3+ZhSMs8tCxN7oHddJE9fhNE7+lxdnlyemKfJRuA==",
2265 + "license": "MIT",
2266 + "dependencies": {
2267 + "@babel/code-frame": "^7.29.0",
2268 + "@babel/generator": "^7.29.0",
2269 + "@babel/helper-globals": "^7.28.0",
2270 + "@babel/parser": "^7.29.0",
2271 + "@babel/template": "^7.28.6",
2272 + "@babel/types": "^7.29.0",
2273 + "debug": "^4.3.1"
2274 + },
2275 + "engines": {
2276 + "node": ">=6.9.0"
2277 + }
2278 + },
2279 + "node_modules/@babel/traverse--for-generate-function-map/node_modules/@babel/code-frame": {
2280 + "version": "7.29.0",
2281 + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.0.tgz",
2282 + "integrity": "sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==",
2283 + "license": "MIT",
2284 + "dependencies": {
2285 + "@babel/helper-validator-identifier": "^7.28.5",
2286 + "js-tokens": "^4.0.0",
2287 + "picocolors": "^1.1.1"
2288 + },
2289 + "engines": {
2290 + "node": ">=6.9.0"
2291 + }
2292 + },
2293 + "node_modules/@babel/traverse/node_modules/@babel/code-frame": {
2294 + "version": "7.29.0",
2295 + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.0.tgz",
2296 + "integrity": "sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==",
2297 + "license": "MIT",
2298 + "dependencies": {
2299 + "@babel/helper-validator-identifier": "^7.28.5",
2300 + "js-tokens": "^4.0.0",
2301 + "picocolors": "^1.1.1"
2302 + },
2303 + "engines": {
2304 + "node": ">=6.9.0"
2305 + }
2306 + },
2307 + "node_modules/@babel/types": {
2308 + "version": "7.29.0",
2309 + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.0.tgz",
2310 + "integrity": "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==",
2311 + "license": "MIT",
2312 + "dependencies": {
2313 + "@babel/helper-string-parser": "^7.27.1",
2314 + "@babel/helper-validator-identifier": "^7.28.5"
2315 + },
2316 + "engines": {
2317 + "node": ">=6.9.0"
2318 + }
2319 + },
2320 + "node_modules/@expo/bunyan": {
2321 + "version": "4.0.1",
2322 + "resolved": "https://registry.npmjs.org/@expo/bunyan/-/bunyan-4.0.1.tgz",
2323 + "integrity": "sha512-+Lla7nYSiHZirgK+U/uYzsLv/X+HaJienbD5AKX1UQZHYfWaP+9uuQluRB4GrEVWF0GZ7vEVp/jzaOT9k/SQlg==",
2324 + "license": "MIT",
2325 + "dependencies": {
2326 + "uuid": "^8.0.0"
2327 + },
2328 + "engines": {
2329 + "node": ">=0.10.0"
2330 + }
2331 + },
2332 + "node_modules/@expo/cli": {
2333 + "version": "0.22.28",
2334 + "resolved": "https://registry.npmjs.org/@expo/cli/-/cli-0.22.28.tgz",
2335 + "integrity": "sha512-lvt72KNitGuixYD2l3SZmRKVu2G4zJpmg5V7WfUBNpmUU5oODBw/6qmiJ6kSLAlfDozscUk+BBGknBBzxUrwrA==",
2336 + "license": "MIT",
2337 + "dependencies": {
2338 + "@0no-co/graphql.web": "^1.0.8",
2339 + "@babel/runtime": "^7.20.0",
2340 + "@expo/code-signing-certificates": "^0.0.6",
2341 + "@expo/config": "~10.0.11",
2342 + "@expo/config-plugins": "~9.0.17",
2343 + "@expo/devcert": "^1.1.2",
2344 + "@expo/env": "~0.4.2",
2345 + "@expo/image-utils": "^0.6.5",
2346 + "@expo/json-file": "^9.0.2",
2347 + "@expo/metro-config": "~0.19.12",
2348 + "@expo/osascript": "^2.1.6",
2349 + "@expo/package-manager": "^1.7.2",
2350 + "@expo/plist": "^0.2.2",
2351 + "@expo/prebuild-config": "~8.2.0",
2352 + "@expo/rudder-sdk-node": "^1.1.1",
2353 + "@expo/spawn-async": "^1.7.2",
2354 + "@expo/ws-tunnel": "^1.0.1",
2355 + "@expo/xcpretty": "^4.3.0",
2356 + "@react-native/dev-middleware": "0.76.9",
2357 + "@urql/core": "^5.0.6",
2358 + "@urql/exchange-retry": "^1.3.0",
2359 + "accepts": "^1.3.8",
2360 + "arg": "^5.0.2",
2361 + "better-opn": "~3.0.2",
2362 + "bplist-creator": "0.0.7",
2363 + "bplist-parser": "^0.3.1",
2364 + "cacache": "^18.0.2",
2365 + "chalk": "^4.0.0",
2366 + "ci-info": "^3.3.0",
2367 + "compression": "^1.7.4",
2368 + "connect": "^3.7.0",
2369 + "debug": "^4.3.4",
2370 + "env-editor": "^0.4.1",
2371 + "fast-glob": "^3.3.2",
2372 + "form-data": "^3.0.1",
2373 + "freeport-async": "^2.0.0",
2374 + "fs-extra": "~8.1.0",
2375 + "getenv": "^1.0.0",
2376 + "glob": "^10.4.2",
2377 + "internal-ip": "^4.3.0",
2378 + "is-docker": "^2.0.0",
2379 + "is-wsl": "^2.1.1",
2380 + "lodash.debounce": "^4.0.8",
2381 + "minimatch": "^3.0.4",
2382 + "node-forge": "^1.3.3",
2383 + "npm-package-arg": "^11.0.0",
2384 + "ora": "^3.4.0",
2385 + "picomatch": "^3.0.1",
2386 + "pretty-bytes": "^5.6.0",
2387 + "pretty-format": "^29.7.0",
2388 + "progress": "^2.0.3",
2389 + "prompts": "^2.3.2",
2390 + "qrcode-terminal": "0.11.0",
2391 + "require-from-string": "^2.0.2",
2392 + "requireg": "^0.2.2",
2393 + "resolve": "^1.22.2",
2394 + "resolve-from": "^5.0.0",
2395 + "resolve.exports": "^2.0.3",
2396 + "semver": "^7.6.0",
2397 + "send": "^0.19.0",
2398 + "slugify": "^1.3.4",
2399 + "source-map-support": "~0.5.21",
2400 + "stacktrace-parser": "^0.1.10",
2401 + "structured-headers": "^0.4.1",
2402 + "tar": "^6.2.1",
2403 + "temp-dir": "^2.0.0",
2404 + "tempy": "^0.7.1",
2405 + "terminal-link": "^2.1.1",
2406 + "undici": "^6.18.2",
2407 + "unique-string": "~2.0.0",
2408 + "wrap-ansi": "^7.0.0",
2409 + "ws": "^8.12.1"
2410 + },
2411 + "bin": {
2412 + "expo-internal": "build/bin/cli"
2413 + }
2414 + },
2415 + "node_modules/@expo/code-signing-certificates": {
2416 + "version": "0.0.6",
2417 + "resolved": "https://registry.npmjs.org/@expo/code-signing-certificates/-/code-signing-certificates-0.0.6.tgz",
2418 + "integrity": "sha512-iNe0puxwBNEcuua9gmTGzq+SuMDa0iATai1FlFTMHJ/vUmKvN/V//drXoLJkVb5i5H3iE/n/qIJxyoBnXouD0w==",
2419 + "license": "MIT",
2420 + "dependencies": {
2421 + "node-forge": "^1.3.3"
2422 + }
2423 + },
2424 + "node_modules/@expo/config": {
2425 + "version": "10.0.11",
2426 + "resolved": "https://registry.npmjs.org/@expo/config/-/config-10.0.11.tgz",
2427 + "integrity": "sha512-nociJ4zr/NmbVfMNe9j/+zRlt7wz/siISu7PjdWE4WE+elEGxWWxsGzltdJG0llzrM+khx8qUiFK5aiVcdMBww==",
2428 + "license": "MIT",
2429 + "dependencies": {
2430 + "@babel/code-frame": "~7.10.4",
2431 + "@expo/config-plugins": "~9.0.17",
2432 + "@expo/config-types": "^52.0.5",
2433 + "@expo/json-file": "^9.0.2",
2434 + "deepmerge": "^4.3.1",
2435 + "getenv": "^1.0.0",
2436 + "glob": "^10.4.2",
2437 + "require-from-string": "^2.0.2",
2438 + "resolve-from": "^5.0.0",
2439 + "resolve-workspace-root": "^2.0.0",
2440 + "semver": "^7.6.0",
2441 + "slugify": "^1.3.4",
2442 + "sucrase": "3.35.0"
2443 + }
2444 + },
2445 + "node_modules/@expo/config-plugins": {
2446 + "version": "9.0.17",
2447 + "resolved": "https://registry.npmjs.org/@expo/config-plugins/-/config-plugins-9.0.17.tgz",
2448 + "integrity": "sha512-m24F1COquwOm7PBl5wRbkT9P9DviCXe0D7S7nQsolfbhdCWuvMkfXeoWmgjtdhy7sDlOyIgBrAdnB6MfsWKqIg==",
2449 + "license": "MIT",
2450 + "dependencies": {
2451 + "@expo/config-types": "^52.0.5",
2452 + "@expo/json-file": "~9.0.2",
2453 + "@expo/plist": "^0.2.2",
2454 + "@expo/sdk-runtime-versions": "^1.0.0",
2455 + "chalk": "^4.1.2",
2456 + "debug": "^4.3.5",
2457 + "getenv": "^1.0.0",
2458 + "glob": "^10.4.2",
2459 + "resolve-from": "^5.0.0",
2460 + "semver": "^7.5.4",
2461 + "slash": "^3.0.0",
2462 + "slugify": "^1.6.6",
2463 + "xcode": "^3.0.1",
2464 + "xml2js": "0.6.0"
2465 + }
2466 + },
2467 + "node_modules/@expo/config-plugins/node_modules/@expo/json-file": {
2468 + "version": "9.0.2",
2469 + "resolved": "https://registry.npmjs.org/@expo/json-file/-/json-file-9.0.2.tgz",
2470 + "integrity": "sha512-yAznIUrybOIWp3Uax7yRflB0xsEpvIwIEqIjao9SGi2Gaa+N0OamWfe0fnXBSWF+2zzF4VvqwT4W5zwelchfgw==",
2471 + "license": "MIT",
2472 + "dependencies": {
2473 + "@babel/code-frame": "~7.10.4",
2474 + "json5": "^2.2.3",
2475 + "write-file-atomic": "^2.3.0"
2476 + }
2477 + },
2478 + "node_modules/@expo/config-types": {
2479 + "version": "52.0.5",
2480 + "resolved": "https://registry.npmjs.org/@expo/config-types/-/config-types-52.0.5.tgz",
2481 + "integrity": "sha512-AMDeuDLHXXqd8W+0zSjIt7f37vUd/BP8p43k68NHpyAvQO+z8mbQZm3cNQVAMySeayK2XoPigAFB1JF2NFajaA==",
2482 + "license": "MIT"
2483 + },
2484 + "node_modules/@expo/devcert": {
2485 + "version": "1.2.1",
2486 + "resolved": "https://registry.npmjs.org/@expo/devcert/-/devcert-1.2.1.tgz",
2487 + "integrity": "sha512-qC4eaxmKMTmJC2ahwyui6ud8f3W60Ss7pMkpBq40Hu3zyiAaugPXnZ24145U7K36qO9UHdZUVxsCvIpz2RYYCA==",
2488 + "license": "MIT",
2489 + "dependencies": {
2490 + "@expo/sudo-prompt": "^9.3.1",
2491 + "debug": "^3.1.0"
2492 + }
2493 + },
2494 + "node_modules/@expo/devcert/node_modules/debug": {
2495 + "version": "3.2.7",
2496 + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
2497 + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
2498 + "license": "MIT",
2499 + "dependencies": {
2500 + "ms": "^2.1.1"
2501 + }
2502 + },
2503 + "node_modules/@expo/env": {
2504 + "version": "0.4.2",
2505 + "resolved": "https://registry.npmjs.org/@expo/env/-/env-0.4.2.tgz",
2506 + "integrity": "sha512-TgbCgvSk0Kq0e2fLoqHwEBL4M0ztFjnBEz0YCDm5boc1nvkV1VMuIMteVdeBwnTh8Z0oPJTwHCD49vhMEt1I6A==",
2507 + "license": "MIT",
2508 + "dependencies": {
2509 + "chalk": "^4.0.0",
2510 + "debug": "^4.3.4",
2511 + "dotenv": "~16.4.5",
2512 + "dotenv-expand": "~11.0.6",
2513 + "getenv": "^1.0.0"
2514 + }
2515 + },
2516 + "node_modules/@expo/fingerprint": {
2517 + "version": "0.11.11",
2518 + "resolved": "https://registry.npmjs.org/@expo/fingerprint/-/fingerprint-0.11.11.tgz",
2519 + "integrity": "sha512-gNyn1KnAOpEa8gSNsYqXMTcq0fSwqU/vit6fP5863vLSKxHm/dNt/gm/uZJxrRZxKq71KUJWF6I7d3z8qIfq5g==",
2520 + "license": "MIT",
2521 + "dependencies": {
2522 + "@expo/spawn-async": "^1.7.2",
2523 + "arg": "^5.0.2",
2524 + "chalk": "^4.1.2",
2525 + "debug": "^4.3.4",
2526 + "find-up": "^5.0.0",
2527 + "getenv": "^1.0.0",
2528 + "minimatch": "^3.0.4",
2529 + "p-limit": "^3.1.0",
2530 + "resolve-from": "^5.0.0",
2531 + "semver": "^7.6.0"
2532 + },
2533 + "bin": {
2534 + "fingerprint": "bin/cli.js"
2535 + }
2536 + },
2537 + "node_modules/@expo/image-utils": {
2538 + "version": "0.6.5",
2539 + "resolved": "https://registry.npmjs.org/@expo/image-utils/-/image-utils-0.6.5.tgz",
2540 + "integrity": "sha512-RsS/1CwJYzccvlprYktD42KjyfWZECH6PPIEowvoSmXfGLfdViwcUEI4RvBfKX5Jli6P67H+6YmHvPTbGOboew==",
2541 + "license": "MIT",
2542 + "dependencies": {
2543 + "@expo/spawn-async": "^1.7.2",
2544 + "chalk": "^4.0.0",
2545 + "fs-extra": "9.0.0",
2546 + "getenv": "^1.0.0",
2547 + "jimp-compact": "0.16.1",
2548 + "parse-png": "^2.1.0",
2549 + "resolve-from": "^5.0.0",
2550 + "semver": "^7.6.0",
2551 + "temp-dir": "~2.0.0",
2552 + "unique-string": "~2.0.0"
2553 + }
2554 + },
2555 + "node_modules/@expo/image-utils/node_modules/fs-extra": {
2556 + "version": "9.0.0",
2557 + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.0.0.tgz",
2558 + "integrity": "sha512-pmEYSk3vYsG/bF651KPUXZ+hvjpgWYw/Gc7W9NFUe3ZVLczKKWIij3IKpOrQcdw4TILtibFslZ0UmR8Vvzig4g==",
2559 + "license": "MIT",
2560 + "dependencies": {
2561 + "at-least-node": "^1.0.0",
2562 + "graceful-fs": "^4.2.0",
2563 + "jsonfile": "^6.0.1",
2564 + "universalify": "^1.0.0"
2565 + },
2566 + "engines": {
2567 + "node": ">=10"
2568 + }
2569 + },
2570 + "node_modules/@expo/image-utils/node_modules/jsonfile": {
2571 + "version": "6.2.0",
2572 + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.0.tgz",
2573 + "integrity": "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==",
2574 + "license": "MIT",
2575 + "dependencies": {
2576 + "universalify": "^2.0.0"
2577 + },
2578 + "optionalDependencies": {
2579 + "graceful-fs": "^4.1.6"
2580 + }
2581 + },
2582 + "node_modules/@expo/image-utils/node_modules/jsonfile/node_modules/universalify": {
2583 + "version": "2.0.1",
2584 + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz",
2585 + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==",
2586 + "license": "MIT",
2587 + "engines": {
2588 + "node": ">= 10.0.0"
2589 + }
2590 + },
2591 + "node_modules/@expo/image-utils/node_modules/universalify": {
2592 + "version": "1.0.0",
2593 + "resolved": "https://registry.npmjs.org/universalify/-/universalify-1.0.0.tgz",
2594 + "integrity": "sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug==",
2595 + "license": "MIT",
2596 + "engines": {
2597 + "node": ">= 10.0.0"
2598 + }
2599 + },
2600 + "node_modules/@expo/json-file": {
2601 + "version": "9.1.5",
2602 + "resolved": "https://registry.npmjs.org/@expo/json-file/-/json-file-9.1.5.tgz",
2603 + "integrity": "sha512-prWBhLUlmcQtvN6Y7BpW2k9zXGd3ySa3R6rAguMJkp1z22nunLN64KYTUWfijFlprFoxm9r2VNnGkcbndAlgKA==",
2604 + "license": "MIT",
2605 + "dependencies": {
2606 + "@babel/code-frame": "~7.10.4",
2607 + "json5": "^2.2.3"
2608 + }
2609 + },
2610 + "node_modules/@expo/metro-config": {
2611 + "version": "0.19.12",
2612 + "resolved": "https://registry.npmjs.org/@expo/metro-config/-/metro-config-0.19.12.tgz",
2613 + "integrity": "sha512-fhT3x1ikQWHpZgw7VrEghBdscFPz1laRYa8WcVRB18nTTqorF6S8qPYslkJu1faEziHZS7c2uyDzTYnrg/CKbg==",
2614 + "license": "MIT",
2615 + "dependencies": {
2616 + "@babel/core": "^7.20.0",
2617 + "@babel/generator": "^7.20.5",
2618 + "@babel/parser": "^7.20.0",
2619 + "@babel/types": "^7.20.0",
2620 + "@expo/config": "~10.0.11",
2621 + "@expo/env": "~0.4.2",
2622 + "@expo/json-file": "~9.0.2",
2623 + "@expo/spawn-async": "^1.7.2",
2624 + "chalk": "^4.1.0",
2625 + "debug": "^4.3.2",
2626 + "fs-extra": "^9.1.0",
2627 + "getenv": "^1.0.0",
2628 + "glob": "^10.4.2",
2629 + "jsc-safe-url": "^0.2.4",
2630 + "lightningcss": "~1.27.0",
2631 + "minimatch": "^3.0.4",
2632 + "postcss": "~8.4.32",
2633 + "resolve-from": "^5.0.0"
2634 + }
2635 + },
2636 + "node_modules/@expo/metro-config/node_modules/@expo/json-file": {
2637 + "version": "9.0.2",
2638 + "resolved": "https://registry.npmjs.org/@expo/json-file/-/json-file-9.0.2.tgz",
2639 + "integrity": "sha512-yAznIUrybOIWp3Uax7yRflB0xsEpvIwIEqIjao9SGi2Gaa+N0OamWfe0fnXBSWF+2zzF4VvqwT4W5zwelchfgw==",
2640 + "license": "MIT",
2641 + "dependencies": {
2642 + "@babel/code-frame": "~7.10.4",
2643 + "json5": "^2.2.3",
2644 + "write-file-atomic": "^2.3.0"
2645 + }
2646 + },
2647 + "node_modules/@expo/metro-config/node_modules/fs-extra": {
2648 + "version": "9.1.0",
2649 + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz",
2650 + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==",
2651 + "license": "MIT",
2652 + "dependencies": {
2653 + "at-least-node": "^1.0.0",
2654 + "graceful-fs": "^4.2.0",
2655 + "jsonfile": "^6.0.1",
2656 + "universalify": "^2.0.0"
2657 + },
2658 + "engines": {
2659 + "node": ">=10"
2660 + }
2661 + },
2662 + "node_modules/@expo/metro-config/node_modules/jsonfile": {
2663 + "version": "6.2.0",
2664 + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.0.tgz",
2665 + "integrity": "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==",
2666 + "license": "MIT",
2667 + "dependencies": {
2668 + "universalify": "^2.0.0"
2669 + },
2670 + "optionalDependencies": {
2671 + "graceful-fs": "^4.1.6"
2672 + }
2673 + },
2674 + "node_modules/@expo/metro-config/node_modules/universalify": {
2675 + "version": "2.0.1",
2676 + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz",
2677 + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==",
2678 + "license": "MIT",
2679 + "engines": {
2680 + "node": ">= 10.0.0"
2681 + }
2682 + },
2683 + "node_modules/@expo/osascript": {
2684 + "version": "2.4.2",
2685 + "resolved": "https://registry.npmjs.org/@expo/osascript/-/osascript-2.4.2.tgz",
2686 + "integrity": "sha512-/XP7PSYF2hzOZzqfjgkoWtllyeTN8dW3aM4P6YgKcmmPikKL5FdoyQhti4eh6RK5a5VrUXJTOlTNIpIHsfB5Iw==",
2687 + "license": "MIT",
2688 + "dependencies": {
2689 + "@expo/spawn-async": "^1.7.2"
2690 + },
2691 + "engines": {
2692 + "node": ">=12"
2693 + }
2694 + },
2695 + "node_modules/@expo/package-manager": {
2696 + "version": "1.10.4",
2697 + "resolved": "https://registry.npmjs.org/@expo/package-manager/-/package-manager-1.10.4.tgz",
2698 + "integrity": "sha512-y9Mr4Kmpk4abAVZrNNPCdzOZr8nLLyi18p1SXr0RCVA8IfzqZX/eY4H+50a0HTmXqIsPZrQdcdb4I3ekMS9GvQ==",
2699 + "license": "MIT",
2700 + "dependencies": {
2701 + "@expo/json-file": "^10.0.13",
2702 + "@expo/spawn-async": "^1.7.2",
2703 + "chalk": "^4.0.0",
2704 + "npm-package-arg": "^11.0.0",
2705 + "ora": "^3.4.0",
2706 + "resolve-workspace-root": "^2.0.0"
2707 + }
2708 + },
2709 + "node_modules/@expo/package-manager/node_modules/@babel/code-frame": {
2710 + "version": "7.29.0",
2711 + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.0.tgz",
2712 + "integrity": "sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==",
2713 + "license": "MIT",
2714 + "dependencies": {
2715 + "@babel/helper-validator-identifier": "^7.28.5",
2716 + "js-tokens": "^4.0.0",
2717 + "picocolors": "^1.1.1"
2718 + },
2719 + "engines": {
2720 + "node": ">=6.9.0"
2721 + }
2722 + },
2723 + "node_modules/@expo/package-manager/node_modules/@expo/json-file": {
2724 + "version": "10.0.13",
2725 + "resolved": "https://registry.npmjs.org/@expo/json-file/-/json-file-10.0.13.tgz",
2726 + "integrity": "sha512-pX/XjQn7tgNw6zuuV2ikmegmwe/S7uiwhrs2wXrANMkq7ozrA+JcZwgW9Q/8WZgciBzfAhNp5hnackHcrmapQA==",
2727 + "license": "MIT",
2728 + "dependencies": {
2729 + "@babel/code-frame": "^7.20.0",
2730 + "json5": "^2.2.3"
2731 + }
2732 + },
2733 + "node_modules/@expo/plist": {
2734 + "version": "0.2.2",
2735 + "resolved": "https://registry.npmjs.org/@expo/plist/-/plist-0.2.2.tgz",
2736 + "integrity": "sha512-ZZGvTO6vEWq02UAPs3LIdja+HRO18+LRI5QuDl6Hs3Ps7KX7xU6Y6kjahWKY37Rx2YjNpX07dGpBFzzC+vKa2g==",
2737 + "license": "MIT",
2738 + "dependencies": {
2739 + "@xmldom/xmldom": "~0.7.7",
2740 + "base64-js": "^1.2.3",
2741 + "xmlbuilder": "^14.0.0"
2742 + }
2743 + },
2744 + "node_modules/@expo/prebuild-config": {
2745 + "version": "8.2.0",
2746 + "resolved": "https://registry.npmjs.org/@expo/prebuild-config/-/prebuild-config-8.2.0.tgz",
2747 + "integrity": "sha512-CxiPpd980s0jyxi7eyN3i/7YKu3XL+8qPjBZUCYtc0+axpGweqIkq2CslyLSKHyqVyH/zlPkbVgWdyiYavFS5Q==",
2748 + "license": "MIT",
2749 + "dependencies": {
2750 + "@expo/config": "~10.0.11",
2751 + "@expo/config-plugins": "~9.0.17",
2752 + "@expo/config-types": "^52.0.5",
2753 + "@expo/image-utils": "^0.6.5",
2754 + "@expo/json-file": "^9.0.2",
2755 + "@react-native/normalize-colors": "0.76.9",
2756 + "debug": "^4.3.1",
2757 + "fs-extra": "^9.0.0",
2758 + "resolve-from": "^5.0.0",
2759 + "semver": "^7.6.0",
2760 + "xml2js": "0.6.0"
2761 + }
2762 + },
2763 + "node_modules/@expo/prebuild-config/node_modules/fs-extra": {
2764 + "version": "9.1.0",
2765 + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz",
2766 + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==",
2767 + "license": "MIT",
2768 + "dependencies": {
2769 + "at-least-node": "^1.0.0",
2770 + "graceful-fs": "^4.2.0",
2771 + "jsonfile": "^6.0.1",
2772 + "universalify": "^2.0.0"
2773 + },
2774 + "engines": {
2775 + "node": ">=10"
2776 + }
2777 + },
2778 + "node_modules/@expo/prebuild-config/node_modules/jsonfile": {
2779 + "version": "6.2.0",
2780 + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.0.tgz",
2781 + "integrity": "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==",
2782 + "license": "MIT",
2783 + "dependencies": {
2784 + "universalify": "^2.0.0"
2785 + },
2786 + "optionalDependencies": {
2787 + "graceful-fs": "^4.1.6"
2788 + }
2789 + },
2790 + "node_modules/@expo/prebuild-config/node_modules/universalify": {
2791 + "version": "2.0.1",
2792 + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz",
2793 + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==",
2794 + "license": "MIT",
2795 + "engines": {
2796 + "node": ">= 10.0.0"
2797 + }
2798 + },
2799 + "node_modules/@expo/require-utils": {
2800 + "version": "55.0.4",
2801 + "resolved": "https://registry.npmjs.org/@expo/require-utils/-/require-utils-55.0.4.tgz",
2802 + "integrity": "sha512-JAANvXqV7MOysWeVWgaiDzikoyDjJWOV/ulOW60Zb3kXJfrx2oZOtGtDXDFKD1mXuahQgoM5QOjuZhF7gFRNjA==",
2803 + "license": "MIT",
2804 + "dependencies": {
2805 + "@babel/code-frame": "^7.20.0",
2806 + "@babel/core": "^7.25.2",
2807 + "@babel/plugin-transform-modules-commonjs": "^7.24.8"
2808 + },
2809 + "peerDependencies": {
2810 + "typescript": "^5.0.0 || ^5.0.0-0"
2811 + },
2812 + "peerDependenciesMeta": {
2813 + "typescript": {
2814 + "optional": true
2815 + }
2816 + }
2817 + },
2818 + "node_modules/@expo/require-utils/node_modules/@babel/code-frame": {
2819 + "version": "7.29.0",
2820 + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.0.tgz",
2821 + "integrity": "sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==",
2822 + "license": "MIT",
2823 + "dependencies": {
2824 + "@babel/helper-validator-identifier": "^7.28.5",
2825 + "js-tokens": "^4.0.0",
2826 + "picocolors": "^1.1.1"
2827 + },
2828 + "engines": {
2829 + "node": ">=6.9.0"
2830 + }
2831 + },
2832 + "node_modules/@expo/rudder-sdk-node": {
2833 + "version": "1.1.1",
2834 + "resolved": "https://registry.npmjs.org/@expo/rudder-sdk-node/-/rudder-sdk-node-1.1.1.tgz",
2835 + "integrity": "sha512-uy/hS/awclDJ1S88w9UGpc6Nm9XnNUjzOAAib1A3PVAnGQIwebg8DpFqOthFBTlZxeuV/BKbZ5jmTbtNZkp1WQ==",
2836 + "license": "MIT",
2837 + "dependencies": {
2838 + "@expo/bunyan": "^4.0.0",
2839 + "@segment/loosely-validate-event": "^2.0.0",
2840 + "fetch-retry": "^4.1.1",
2841 + "md5": "^2.2.1",
2842 + "node-fetch": "^2.6.1",
2843 + "remove-trailing-slash": "^0.1.0",
2844 + "uuid": "^8.3.2"
2845 + },
2846 + "engines": {
2847 + "node": ">=12"
2848 + }
2849 + },
2850 + "node_modules/@expo/sdk-runtime-versions": {
2851 + "version": "1.0.0",
2852 + "resolved": "https://registry.npmjs.org/@expo/sdk-runtime-versions/-/sdk-runtime-versions-1.0.0.tgz",
2853 + "integrity": "sha512-Doz2bfiPndXYFPMRwPyGa1k5QaKDVpY806UJj570epIiMzWaYyCtobasyfC++qfIXVb5Ocy7r3tP9d62hAQ7IQ==",
2854 + "license": "MIT"
2855 + },
2856 + "node_modules/@expo/spawn-async": {
2857 + "version": "1.7.2",
2858 + "resolved": "https://registry.npmjs.org/@expo/spawn-async/-/spawn-async-1.7.2.tgz",
2859 + "integrity": "sha512-QdWi16+CHB9JYP7gma19OVVg0BFkvU8zNj9GjWorYI8Iv8FUxjOCcYRuAmX4s/h91e4e7BPsskc8cSrZYho9Ew==",
2860 + "license": "MIT",
2861 + "dependencies": {
2862 + "cross-spawn": "^7.0.3"
2863 + },
2864 + "engines": {
2865 + "node": ">=12"
2866 + }
2867 + },
2868 + "node_modules/@expo/sudo-prompt": {
2869 + "version": "9.3.2",
2870 + "resolved": "https://registry.npmjs.org/@expo/sudo-prompt/-/sudo-prompt-9.3.2.tgz",
2871 + "integrity": "sha512-HHQigo3rQWKMDzYDLkubN5WQOYXJJE2eNqIQC2axC2iO3mHdwnIR7FgZVvHWtBwAdzBgAP0ECp8KqS8TiMKvgw==",
2872 + "license": "MIT"
2873 + },
2874 + "node_modules/@expo/vector-icons": {
2875 + "version": "14.0.4",
2876 + "resolved": "https://registry.npmjs.org/@expo/vector-icons/-/vector-icons-14.0.4.tgz",
2877 + "integrity": "sha512-+yKshcbpDfbV4zoXOgHxCwh7lkE9VVTT5T03OUlBsqfze1PLy6Hi4jp1vSb1GVbY6eskvMIivGVc9SKzIv0oEQ==",
2878 + "license": "MIT",
2879 + "dependencies": {
2880 + "prop-types": "^15.8.1"
2881 + }
2882 + },
2883 + "node_modules/@expo/ws-tunnel": {
2884 + "version": "1.0.6",
2885 + "resolved": "https://registry.npmjs.org/@expo/ws-tunnel/-/ws-tunnel-1.0.6.tgz",
2886 + "integrity": "sha512-nDRbLmSrJar7abvUjp3smDwH8HcbZcoOEa5jVPUv9/9CajgmWw20JNRwTuBRzWIWIkEJDkz20GoNA+tSwUqk0Q==",
2887 + "license": "MIT"
2888 + },
2889 + "node_modules/@expo/xcpretty": {
2890 + "version": "4.4.2",
2891 + "resolved": "https://registry.npmjs.org/@expo/xcpretty/-/xcpretty-4.4.2.tgz",
2892 + "integrity": "sha512-ni4WJrmmY43GB1d++iTB7OD7JQlwGarrdhS7pb/ibJKrRIf/HOeuTZndPalXM2QOD7JpfZ/51QprRU9UOjTROw==",
2893 + "license": "BSD-3-Clause",
2894 + "dependencies": {
2895 + "@babel/code-frame": "^7.20.0",
2896 + "chalk": "^4.1.0",
2897 + "js-yaml": "^4.1.0"
2898 + },
2899 + "bin": {
2900 + "excpretty": "build/cli.js"
2901 + }
2902 + },
2903 + "node_modules/@expo/xcpretty/node_modules/@babel/code-frame": {
2904 + "version": "7.29.0",
2905 + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.0.tgz",
2906 + "integrity": "sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==",
2907 + "license": "MIT",
2908 + "dependencies": {
2909 + "@babel/helper-validator-identifier": "^7.28.5",
2910 + "js-tokens": "^4.0.0",
2911 + "picocolors": "^1.1.1"
2912 + },
2913 + "engines": {
2914 + "node": ">=6.9.0"
2915 + }
2916 + },
2917 + "node_modules/@isaacs/cliui": {
2918 + "version": "8.0.2",
2919 + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz",
2920 + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==",
2921 + "license": "ISC",
2922 + "dependencies": {
2923 + "string-width": "^5.1.2",
2924 + "string-width-cjs": "npm:string-width@^4.2.0",
2925 + "strip-ansi": "^7.0.1",
2926 + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1",
2927 + "wrap-ansi": "^8.1.0",
2928 + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0"
2929 + },
2930 + "engines": {
2931 + "node": ">=12"
2932 + }
2933 + },
2934 + "node_modules/@isaacs/cliui/node_modules/ansi-styles": {
2935 + "version": "6.2.3",
2936 + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz",
2937 + "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==",
2938 + "license": "MIT",
2939 + "engines": {
2940 + "node": ">=12"
2941 + },
2942 + "funding": {
2943 + "url": "https://github.com/chalk/ansi-styles?sponsor=1"
2944 + }
2945 + },
2946 + "node_modules/@isaacs/cliui/node_modules/wrap-ansi": {
2947 + "version": "8.1.0",
2948 + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz",
2949 + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==",
2950 + "license": "MIT",
2951 + "dependencies": {
2952 + "ansi-styles": "^6.1.0",
2953 + "string-width": "^5.0.1",
2954 + "strip-ansi": "^7.0.1"
2955 + },
2956 + "engines": {
2957 + "node": ">=12"
2958 + },
2959 + "funding": {
2960 + "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
2961 + }
2962 + },
2963 + "node_modules/@isaacs/ttlcache": {
2964 + "version": "1.4.1",
2965 + "resolved": "https://registry.npmjs.org/@isaacs/ttlcache/-/ttlcache-1.4.1.tgz",
2966 + "integrity": "sha512-RQgQ4uQ+pLbqXfOmieB91ejmLwvSgv9nLx6sT6sD83s7umBypgg+OIBOBbEUiJXrfpnp9j0mRhYYdzp9uqq3lA==",
2967 + "license": "ISC",
2968 + "engines": {
2969 + "node": ">=12"
2970 + }
2971 + },
2972 + "node_modules/@istanbuljs/load-nyc-config": {
2973 + "version": "1.1.0",
2974 + "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz",
2975 + "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==",
2976 + "license": "ISC",
2977 + "dependencies": {
2978 + "camelcase": "^5.3.1",
2979 + "find-up": "^4.1.0",
2980 + "get-package-type": "^0.1.0",
2981 + "js-yaml": "^3.13.1",
2982 + "resolve-from": "^5.0.0"
2983 + },
2984 + "engines": {
2985 + "node": ">=8"
2986 + }
2987 + },
2988 + "node_modules/@istanbuljs/load-nyc-config/node_modules/argparse": {
2989 + "version": "1.0.10",
2990 + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
2991 + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
2992 + "license": "MIT",
2993 + "dependencies": {
2994 + "sprintf-js": "~1.0.2"
2995 + }
2996 + },
2997 + "node_modules/@istanbuljs/load-nyc-config/node_modules/find-up": {
2998 + "version": "4.1.0",
2999 + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
3000 + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
3001 + "license": "MIT",
3002 + "dependencies": {
3003 + "locate-path": "^5.0.0",
3004 + "path-exists": "^4.0.0"
3005 + },
3006 + "engines": {
3007 + "node": ">=8"
3008 + }
3009 + },
3010 + "node_modules/@istanbuljs/load-nyc-config/node_modules/js-yaml": {
3011 + "version": "3.14.2",
3012 + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.2.tgz",
3013 + "integrity": "sha512-PMSmkqxr106Xa156c2M265Z+FTrPl+oxd/rgOQy2tijQeK5TxQ43psO1ZCwhVOSdnn+RzkzlRz/eY4BgJBYVpg==",
3014 + "license": "MIT",
3015 + "dependencies": {
3016 + "argparse": "^1.0.7",
3017 + "esprima": "^4.0.0"
3018 + },
3019 + "bin": {
3020 + "js-yaml": "bin/js-yaml.js"
3021 + }
3022 + },
3023 + "node_modules/@istanbuljs/load-nyc-config/node_modules/locate-path": {
3024 + "version": "5.0.0",
3025 + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
3026 + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
3027 + "license": "MIT",
3028 + "dependencies": {
3029 + "p-locate": "^4.1.0"
3030 + },
3031 + "engines": {
3032 + "node": ">=8"
3033 + }
3034 + },
3035 + "node_modules/@istanbuljs/load-nyc-config/node_modules/p-limit": {
3036 + "version": "2.3.0",
3037 + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
3038 + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
3039 + "license": "MIT",
3040 + "dependencies": {
3041 + "p-try": "^2.0.0"
3042 + },
3043 + "engines": {
3044 + "node": ">=6"
3045 + },
3046 + "funding": {
3047 + "url": "https://github.com/sponsors/sindresorhus"
3048 + }
3049 + },
3050 + "node_modules/@istanbuljs/load-nyc-config/node_modules/p-locate": {
3051 + "version": "4.1.0",
3052 + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
3053 + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
3054 + "license": "MIT",
3055 + "dependencies": {
3056 + "p-limit": "^2.2.0"
3057 + },
3058 + "engines": {
3059 + "node": ">=8"
3060 + }
3061 + },
3062 + "node_modules/@istanbuljs/schema": {
3063 + "version": "0.1.3",
3064 + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz",
3065 + "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==",
3066 + "license": "MIT",
3067 + "engines": {
3068 + "node": ">=8"
3069 + }
3070 + },
3071 + "node_modules/@jest/create-cache-key-function": {
3072 + "version": "29.7.0",
3073 + "resolved": "https://registry.npmjs.org/@jest/create-cache-key-function/-/create-cache-key-function-29.7.0.tgz",
3074 + "integrity": "sha512-4QqS3LY5PBmTRHj9sAg1HLoPzqAI0uOX6wI/TRqHIcOxlFidy6YEmCQJk6FSZjNLGCeubDMfmkWL+qaLKhSGQA==",
3075 + "license": "MIT",
3076 + "dependencies": {
3077 + "@jest/types": "^29.6.3"
3078 + },
3079 + "engines": {
3080 + "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
3081 + }
3082 + },
3083 + "node_modules/@jest/environment": {
3084 + "version": "29.7.0",
3085 + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.7.0.tgz",
3086 + "integrity": "sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==",
3087 + "license": "MIT",
3088 + "dependencies": {
3089 + "@jest/fake-timers": "^29.7.0",
3090 + "@jest/types": "^29.6.3",
3091 + "@types/node": "*",
3092 + "jest-mock": "^29.7.0"
3093 + },
3094 + "engines": {
3095 + "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
3096 + }
3097 + },
3098 + "node_modules/@jest/fake-timers": {
3099 + "version": "29.7.0",
3100 + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.7.0.tgz",
3101 + "integrity": "sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==",
3102 + "license": "MIT",
3103 + "dependencies": {
3104 + "@jest/types": "^29.6.3",
3105 + "@sinonjs/fake-timers": "^10.0.2",
3106 + "@types/node": "*",
3107 + "jest-message-util": "^29.7.0",
3108 + "jest-mock": "^29.7.0",
3109 + "jest-util": "^29.7.0"
3110 + },
3111 + "engines": {
3112 + "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
3113 + }
3114 + },
3115 + "node_modules/@jest/schemas": {
3116 + "version": "29.6.3",
3117 + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz",
3118 + "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==",
3119 + "license": "MIT",
3120 + "dependencies": {
3121 + "@sinclair/typebox": "^0.27.8"
3122 + },
3123 + "engines": {
3124 + "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
3125 + }
3126 + },
3127 + "node_modules/@jest/transform": {
3128 + "version": "29.7.0",
3129 + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.7.0.tgz",
3130 + "integrity": "sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==",
3131 + "license": "MIT",
3132 + "dependencies": {
3133 + "@babel/core": "^7.11.6",
3134 + "@jest/types": "^29.6.3",
3135 + "@jridgewell/trace-mapping": "^0.3.18",
3136 + "babel-plugin-istanbul": "^6.1.1",
3137 + "chalk": "^4.0.0",
3138 + "convert-source-map": "^2.0.0",
3139 + "fast-json-stable-stringify": "^2.1.0",
3140 + "graceful-fs": "^4.2.9",
3141 + "jest-haste-map": "^29.7.0",
3142 + "jest-regex-util": "^29.6.3",
3143 + "jest-util": "^29.7.0",
3144 + "micromatch": "^4.0.4",
3145 + "pirates": "^4.0.4",
3146 + "slash": "^3.0.0",
3147 + "write-file-atomic": "^4.0.2"
3148 + },
3149 + "engines": {
3150 + "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
3151 + }
3152 + },
3153 + "node_modules/@jest/transform/node_modules/signal-exit": {
3154 + "version": "3.0.7",
3155 + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz",
3156 + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==",
3157 + "license": "ISC"
3158 + },
3159 + "node_modules/@jest/transform/node_modules/write-file-atomic": {
3160 + "version": "4.0.2",
3161 + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz",
3162 + "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==",
3163 + "license": "ISC",
3164 + "dependencies": {
3165 + "imurmurhash": "^0.1.4",
3166 + "signal-exit": "^3.0.7"
3167 + },
3168 + "engines": {
3169 + "node": "^12.13.0 || ^14.15.0 || >=16.0.0"
3170 + }
3171 + },
3172 + "node_modules/@jest/types": {
3173 + "version": "29.6.3",
3174 + "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz",
3175 + "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==",
3176 + "license": "MIT",
3177 + "dependencies": {
3178 + "@jest/schemas": "^29.6.3",
3179 + "@types/istanbul-lib-coverage": "^2.0.0",
3180 + "@types/istanbul-reports": "^3.0.0",
3181 + "@types/node": "*",
3182 + "@types/yargs": "^17.0.8",
3183 + "chalk": "^4.0.0"
3184 + },
3185 + "engines": {
3186 + "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
3187 + }
3188 + },
3189 + "node_modules/@jridgewell/gen-mapping": {
3190 + "version": "0.3.13",
3191 + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz",
3192 + "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==",
3193 + "license": "MIT",
3194 + "dependencies": {
3195 + "@jridgewell/sourcemap-codec": "^1.5.0",
3196 + "@jridgewell/trace-mapping": "^0.3.24"
3197 + }
3198 + },
3199 + "node_modules/@jridgewell/remapping": {
3200 + "version": "2.3.5",
3201 + "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz",
3202 + "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==",
3203 + "license": "MIT",
3204 + "dependencies": {
3205 + "@jridgewell/gen-mapping": "^0.3.5",
3206 + "@jridgewell/trace-mapping": "^0.3.24"
3207 + }
3208 + },
3209 + "node_modules/@jridgewell/resolve-uri": {
3210 + "version": "3.1.2",
3211 + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz",
3212 + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==",
3213 + "license": "MIT",
3214 + "engines": {
3215 + "node": ">=6.0.0"
3216 + }
3217 + },
3218 + "node_modules/@jridgewell/source-map": {
3219 + "version": "0.3.11",
3220 + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.11.tgz",
3221 + "integrity": "sha512-ZMp1V8ZFcPG5dIWnQLr3NSI1MiCU7UETdS/A0G8V/XWHvJv3ZsFqutJn1Y5RPmAPX6F3BiE397OqveU/9NCuIA==",
3222 + "license": "MIT",
3223 + "dependencies": {
3224 + "@jridgewell/gen-mapping": "^0.3.5",
3225 + "@jridgewell/trace-mapping": "^0.3.25"
3226 + }
3227 + },
3228 + "node_modules/@jridgewell/sourcemap-codec": {
3229 + "version": "1.5.5",
3230 + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz",
3231 + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==",
3232 + "license": "MIT"
3233 + },
3234 + "node_modules/@jridgewell/trace-mapping": {
3235 + "version": "0.3.31",
3236 + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz",
3237 + "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==",
3238 + "license": "MIT",
3239 + "dependencies": {
3240 + "@jridgewell/resolve-uri": "^3.1.0",
3241 + "@jridgewell/sourcemap-codec": "^1.4.14"
3242 + }
3243 + },
3244 + "node_modules/@nodelib/fs.scandir": {
3245 + "version": "2.1.5",
3246 + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
3247 + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
3248 + "license": "MIT",
3249 + "dependencies": {
3250 + "@nodelib/fs.stat": "2.0.5",
3251 + "run-parallel": "^1.1.9"
3252 + },
3253 + "engines": {
3254 + "node": ">= 8"
3255 + }
3256 + },
3257 + "node_modules/@nodelib/fs.stat": {
3258 + "version": "2.0.5",
3259 + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
3260 + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
3261 + "license": "MIT",
3262 + "engines": {
3263 + "node": ">= 8"
3264 + }
3265 + },
3266 + "node_modules/@nodelib/fs.walk": {
3267 + "version": "1.2.8",
3268 + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
3269 + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
3270 + "license": "MIT",
3271 + "dependencies": {
3272 + "@nodelib/fs.scandir": "2.1.5",
3273 + "fastq": "^1.6.0"
3274 + },
3275 + "engines": {
3276 + "node": ">= 8"
3277 + }
3278 + },
3279 + "node_modules/@npmcli/fs": {
3280 + "version": "3.1.1",
3281 + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-3.1.1.tgz",
3282 + "integrity": "sha512-q9CRWjpHCMIh5sVyefoD1cA7PkvILqCZsnSOEUUivORLjxCO/Irmue2DprETiNgEqktDBZaM1Bi+jrarx1XdCg==",
3283 + "license": "ISC",
3284 + "dependencies": {
3285 + "semver": "^7.3.5"
3286 + },
3287 + "engines": {
3288 + "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
3289 + }
3290 + },
3291 + "node_modules/@ondeinference/react-native": {
3292 + "resolved": "..",
3293 + "link": true
3294 + },
3295 + "node_modules/@pkgjs/parseargs": {
3296 + "version": "0.11.0",
3297 + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz",
3298 + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==",
3299 + "license": "MIT",
3300 + "optional": true,
3301 + "engines": {
3302 + "node": ">=14"
3303 + }
3304 + },
3305 + "node_modules/@react-native/assets-registry": {
3306 + "version": "0.76.7",
3307 + "resolved": "https://registry.npmjs.org/@react-native/assets-registry/-/assets-registry-0.76.7.tgz",
3308 + "integrity": "sha512-o79whsqL5fbPTUQO9w1FptRd4cw1TaeOrXtQSLQeDrMVAenw/wmsjyPK10VKtvqxa1KNMtWEyfgxcM8CVZVFmg==",
3309 + "license": "MIT",
3310 + "engines": {
3311 + "node": ">=18"
3312 + }
3313 + },
3314 + "node_modules/@react-native/babel-plugin-codegen": {
3315 + "version": "0.76.9",
3316 + "resolved": "https://registry.npmjs.org/@react-native/babel-plugin-codegen/-/babel-plugin-codegen-0.76.9.tgz",
3317 + "integrity": "sha512-vxL/vtDEIYHfWKm5oTaEmwcnNGsua/i9OjIxBDBFiJDu5i5RU3bpmDiXQm/bJxrJNPRp5lW0I0kpGihVhnMAIQ==",
3318 + "license": "MIT",
3319 + "dependencies": {
3320 + "@react-native/codegen": "0.76.9"
3321 + },
3322 + "engines": {
3323 + "node": ">=18"
3324 + }
3325 + },
3326 + "node_modules/@react-native/babel-preset": {
3327 + "version": "0.76.9",
3328 + "resolved": "https://registry.npmjs.org/@react-native/babel-preset/-/babel-preset-0.76.9.tgz",
3329 + "integrity": "sha512-TbSeCplCM6WhL3hR2MjC/E1a9cRnMLz7i767T7mP90oWkklEjyPxWl+0GGoVGnJ8FC/jLUupg/HvREKjjif6lw==",
3330 + "license": "MIT",
3331 + "dependencies": {
3332 + "@babel/core": "^7.25.2",
3333 + "@babel/plugin-proposal-export-default-from": "^7.24.7",
3334 + "@babel/plugin-syntax-dynamic-import": "^7.8.3",
3335 + "@babel/plugin-syntax-export-default-from": "^7.24.7",
3336 + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3",
3337 + "@babel/plugin-syntax-optional-chaining": "^7.8.3",
3338 + "@babel/plugin-transform-arrow-functions": "^7.24.7",
3339 + "@babel/plugin-transform-async-generator-functions": "^7.25.4",
3340 + "@babel/plugin-transform-async-to-generator": "^7.24.7",
3341 + "@babel/plugin-transform-block-scoping": "^7.25.0",
3342 + "@babel/plugin-transform-class-properties": "^7.25.4",
3343 + "@babel/plugin-transform-classes": "^7.25.4",
3344 + "@babel/plugin-transform-computed-properties": "^7.24.7",
3345 + "@babel/plugin-transform-destructuring": "^7.24.8",
3346 + "@babel/plugin-transform-flow-strip-types": "^7.25.2",
3347 + "@babel/plugin-transform-for-of": "^7.24.7",
3348 + "@babel/plugin-transform-function-name": "^7.25.1",
3349 + "@babel/plugin-transform-literals": "^7.25.2",
3350 + "@babel/plugin-transform-logical-assignment-operators": "^7.24.7",
3351 + "@babel/plugin-transform-modules-commonjs": "^7.24.8",
3352 + "@babel/plugin-transform-named-capturing-groups-regex": "^7.24.7",
3353 + "@babel/plugin-transform-nullish-coalescing-operator": "^7.24.7",
3354 + "@babel/plugin-transform-numeric-separator": "^7.24.7",
3355 + "@babel/plugin-transform-object-rest-spread": "^7.24.7",
3356 + "@babel/plugin-transform-optional-catch-binding": "^7.24.7",
3357 + "@babel/plugin-transform-optional-chaining": "^7.24.8",
3358 + "@babel/plugin-transform-parameters": "^7.24.7",
3359 + "@babel/plugin-transform-private-methods": "^7.24.7",
3360 + "@babel/plugin-transform-private-property-in-object": "^7.24.7",
3361 + "@babel/plugin-transform-react-display-name": "^7.24.7",
3362 + "@babel/plugin-transform-react-jsx": "^7.25.2",
3363 + "@babel/plugin-transform-react-jsx-self": "^7.24.7",
3364 + "@babel/plugin-transform-react-jsx-source": "^7.24.7",
3365 + "@babel/plugin-transform-regenerator": "^7.24.7",
3366 + "@babel/plugin-transform-runtime": "^7.24.7",
3367 + "@babel/plugin-transform-shorthand-properties": "^7.24.7",
3368 + "@babel/plugin-transform-spread": "^7.24.7",
3369 + "@babel/plugin-transform-sticky-regex": "^7.24.7",
3370 + "@babel/plugin-transform-typescript": "^7.25.2",
3371 + "@babel/plugin-transform-unicode-regex": "^7.24.7",
3372 + "@babel/template": "^7.25.0",
3373 + "@react-native/babel-plugin-codegen": "0.76.9",
3374 + "babel-plugin-syntax-hermes-parser": "^0.25.1",
3375 + "babel-plugin-transform-flow-enums": "^0.0.2",
3376 + "react-refresh": "^0.14.0"
3377 + },
3378 + "engines": {
3379 + "node": ">=18"
3380 + },
3381 + "peerDependencies": {
3382 + "@babel/core": "*"
3383 + }
3384 + },
3385 + "node_modules/@react-native/codegen": {
3386 + "version": "0.76.9",
3387 + "resolved": "https://registry.npmjs.org/@react-native/codegen/-/codegen-0.76.9.tgz",
3388 + "integrity": "sha512-AzlCHMTKrAVC2709V4ZGtBXmGVtWTpWm3Ruv5vXcd3/anH4mGucfJ4rjbWKdaYQJMpXa3ytGomQrsIsT/s8kgA==",
3389 + "license": "MIT",
3390 + "dependencies": {
3391 + "@babel/parser": "^7.25.3",
3392 + "glob": "^7.1.1",
3393 + "hermes-parser": "0.23.1",
3394 + "invariant": "^2.2.4",
3395 + "jscodeshift": "^0.14.0",
3396 + "mkdirp": "^0.5.1",
3397 + "nullthrows": "^1.1.1",
3398 + "yargs": "^17.6.2"
3399 + },
3400 + "engines": {
3401 + "node": ">=18"
3402 + },
3403 + "peerDependencies": {
3404 + "@babel/preset-env": "^7.1.6"
3405 + }
3406 + },
3407 + "node_modules/@react-native/codegen/node_modules/glob": {
3408 + "version": "7.2.3",
3409 + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
3410 + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
3411 + "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me",
3412 + "license": "ISC",
3413 + "dependencies": {
3414 + "fs.realpath": "^1.0.0",
3415 + "inflight": "^1.0.4",
3416 + "inherits": "2",
3417 + "minimatch": "^3.1.1",
3418 + "once": "^1.3.0",
3419 + "path-is-absolute": "^1.0.0"
3420 + },
3421 + "engines": {
3422 + "node": "*"
3423 + },
3424 + "funding": {
3425 + "url": "https://github.com/sponsors/isaacs"
3426 + }
3427 + },
3428 + "node_modules/@react-native/community-cli-plugin": {
3429 + "version": "0.76.7",
3430 + "resolved": "https://registry.npmjs.org/@react-native/community-cli-plugin/-/community-cli-plugin-0.76.7.tgz",
3431 + "integrity": "sha512-lrcsY2WPLCEWU1pjdNV9+Ccj8vCEwCCURZiPa5aqi7lKB4C++1hPrxA8/CWWnTNcQp76DsBKGYqTFj7Ud4aupw==",
3432 + "license": "MIT",
3433 + "dependencies": {
3434 + "@react-native/dev-middleware": "0.76.7",
3435 + "@react-native/metro-babel-transformer": "0.76.7",
3436 + "chalk": "^4.0.0",
3437 + "execa": "^5.1.1",
3438 + "invariant": "^2.2.4",
3439 + "metro": "^0.81.0",
3440 + "metro-config": "^0.81.0",
3441 + "metro-core": "^0.81.0",
3442 + "node-fetch": "^2.2.0",
3443 + "readline": "^1.3.0",
3444 + "semver": "^7.1.3"
3445 + },
3446 + "engines": {
3447 + "node": ">=18"
3448 + },
3449 + "peerDependencies": {
3450 + "@react-native-community/cli-server-api": "*"
3451 + },
3452 + "peerDependenciesMeta": {
3453 + "@react-native-community/cli-server-api": {
3454 + "optional": true
3455 + }
3456 + }
3457 + },
3458 + "node_modules/@react-native/community-cli-plugin/node_modules/@react-native/debugger-frontend": {
3459 + "version": "0.76.7",
3460 + "resolved": "https://registry.npmjs.org/@react-native/debugger-frontend/-/debugger-frontend-0.76.7.tgz",
3461 + "integrity": "sha512-89ZtZXt7ZxE94i7T94qzZMhp4Gfcpr/QVpGqEaejAxZD+gvDCH21cYSF+/Rz2ttBazm0rk5MZ0mFqb0Iqp1jmw==",
3462 + "license": "BSD-3-Clause",
3463 + "engines": {
3464 + "node": ">=18"
3465 + }
3466 + },
3467 + "node_modules/@react-native/community-cli-plugin/node_modules/@react-native/dev-middleware": {
3468 + "version": "0.76.7",
3469 + "resolved": "https://registry.npmjs.org/@react-native/dev-middleware/-/dev-middleware-0.76.7.tgz",
3470 + "integrity": "sha512-Jsw8g9DyLPnR9yHEGuT09yHZ7M88/GL9CtU9WmyChlBwdXSeE3AmRqLegsV3XcgULQ1fqdemokaOZ/MwLYkjdA==",
3471 + "license": "MIT",
3472 + "dependencies": {
3473 + "@isaacs/ttlcache": "^1.4.1",
3474 + "@react-native/debugger-frontend": "0.76.7",
3475 + "chrome-launcher": "^0.15.2",
3476 + "chromium-edge-launcher": "^0.2.0",
3477 + "connect": "^3.6.5",
3478 + "debug": "^2.2.0",
3479 + "invariant": "^2.2.4",
3480 + "nullthrows": "^1.1.1",
3481 + "open": "^7.0.3",
3482 + "selfsigned": "^2.4.1",
3483 + "serve-static": "^1.13.1",
3484 + "ws": "^6.2.3"
3485 + },
3486 + "engines": {
3487 + "node": ">=18"
3488 + }
3489 + },
3490 + "node_modules/@react-native/community-cli-plugin/node_modules/debug": {
3491 + "version": "2.6.9",
3492 + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
3493 + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
3494 + "license": "MIT",
3495 + "dependencies": {
3496 + "ms": "2.0.0"
3497 + }
3498 + },
3499 + "node_modules/@react-native/community-cli-plugin/node_modules/execa": {
3500 + "version": "5.1.1",
3501 + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz",
3502 + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==",
3503 + "license": "MIT",
3504 + "dependencies": {
3505 + "cross-spawn": "^7.0.3",
3506 + "get-stream": "^6.0.0",
3507 + "human-signals": "^2.1.0",
3508 + "is-stream": "^2.0.0",
3509 + "merge-stream": "^2.0.0",
3510 + "npm-run-path": "^4.0.1",
3511 + "onetime": "^5.1.2",
3512 + "signal-exit": "^3.0.3",
3513 + "strip-final-newline": "^2.0.0"
3514 + },
3515 + "engines": {
3516 + "node": ">=10"
3517 + },
3518 + "funding": {
3519 + "url": "https://github.com/sindresorhus/execa?sponsor=1"
3520 + }
3521 + },
3522 + "node_modules/@react-native/community-cli-plugin/node_modules/get-stream": {
3523 + "version": "6.0.1",
3524 + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz",
3525 + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==",
3526 + "license": "MIT",
3527 + "engines": {
3528 + "node": ">=10"
3529 + },
3530 + "funding": {
3531 + "url": "https://github.com/sponsors/sindresorhus"
3532 + }
3533 + },
3534 + "node_modules/@react-native/community-cli-plugin/node_modules/is-stream": {
3535 + "version": "2.0.1",
3536 + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz",
3537 + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==",
3538 + "license": "MIT",
3539 + "engines": {
3540 + "node": ">=8"
3541 + },
3542 + "funding": {
3543 + "url": "https://github.com/sponsors/sindresorhus"
3544 + }
3545 + },
3546 + "node_modules/@react-native/community-cli-plugin/node_modules/mimic-fn": {
3547 + "version": "2.1.0",
3548 + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz",
3549 + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==",
3550 + "license": "MIT",
3551 + "engines": {
3552 + "node": ">=6"
3553 + }
3554 + },
3555 + "node_modules/@react-native/community-cli-plugin/node_modules/ms": {
3556 + "version": "2.0.0",
3557 + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
3558 + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
3559 + "license": "MIT"
3560 + },
3561 + "node_modules/@react-native/community-cli-plugin/node_modules/npm-run-path": {
3562 + "version": "4.0.1",
3563 + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz",
3564 + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==",
3565 + "license": "MIT",
3566 + "dependencies": {
3567 + "path-key": "^3.0.0"
3568 + },
3569 + "engines": {
3570 + "node": ">=8"
3571 + }
3572 + },
3573 + "node_modules/@react-native/community-cli-plugin/node_modules/onetime": {
3574 + "version": "5.1.2",
3575 + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz",
3576 + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==",
3577 + "license": "MIT",
3578 + "dependencies": {
3579 + "mimic-fn": "^2.1.0"
3580 + },
3581 + "engines": {
3582 + "node": ">=6"
3583 + },
3584 + "funding": {
3585 + "url": "https://github.com/sponsors/sindresorhus"
3586 + }
3587 + },
3588 + "node_modules/@react-native/community-cli-plugin/node_modules/signal-exit": {
3589 + "version": "3.0.7",
3590 + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz",
3591 + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==",
3592 + "license": "ISC"
3593 + },
3594 + "node_modules/@react-native/community-cli-plugin/node_modules/ws": {
3595 + "version": "6.2.3",
3596 + "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.3.tgz",
3597 + "integrity": "sha512-jmTjYU0j60B+vHey6TfR3Z7RD61z/hmxBS3VMSGIrroOWXQEneK1zNuotOUrGyBHQj0yrpsLHPWtigEFd13ndA==",
3598 + "license": "MIT",
3599 + "dependencies": {
3600 + "async-limiter": "~1.0.0"
3601 + }
3602 + },
3603 + "node_modules/@react-native/debugger-frontend": {
3604 + "version": "0.76.9",
3605 + "resolved": "https://registry.npmjs.org/@react-native/debugger-frontend/-/debugger-frontend-0.76.9.tgz",
3606 + "integrity": "sha512-0Ru72Bm066xmxFuOXhhvrryxvb57uI79yDSFf+hxRpktkC98NMuRenlJhslMrbJ6WjCu1vOe/9UjWNYyxXTRTA==",
3607 + "license": "BSD-3-Clause",
3608 + "engines": {
3609 + "node": ">=18"
3610 + }
3611 + },
3612 + "node_modules/@react-native/dev-middleware": {
3613 + "version": "0.76.9",
3614 + "resolved": "https://registry.npmjs.org/@react-native/dev-middleware/-/dev-middleware-0.76.9.tgz",
3615 + "integrity": "sha512-xkd3C3dRcmZLjFTEAOvC14q3apMLouIvJViCZY/p1EfCMrNND31dgE1dYrLTiI045WAWMt5bD15i6f7dE2/QWA==",
3616 + "license": "MIT",
3617 + "dependencies": {
3618 + "@isaacs/ttlcache": "^1.4.1",
3619 + "@react-native/debugger-frontend": "0.76.9",
3620 + "chrome-launcher": "^0.15.2",
3621 + "chromium-edge-launcher": "^0.2.0",
3622 + "connect": "^3.6.5",
3623 + "debug": "^2.2.0",
3624 + "invariant": "^2.2.4",
3625 + "nullthrows": "^1.1.1",
3626 + "open": "^7.0.3",
3627 + "selfsigned": "^2.4.1",
3628 + "serve-static": "^1.13.1",
3629 + "ws": "^6.2.3"
3630 + },
3631 + "engines": {
3632 + "node": ">=18"
3633 + }
3634 + },
3635 + "node_modules/@react-native/dev-middleware/node_modules/debug": {
3636 + "version": "2.6.9",
3637 + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
3638 + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
3639 + "license": "MIT",
3640 + "dependencies": {
3641 + "ms": "2.0.0"
3642 + }
3643 + },
3644 + "node_modules/@react-native/dev-middleware/node_modules/ms": {
3645 + "version": "2.0.0",
3646 + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
3647 + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
3648 + "license": "MIT"
3649 + },
3650 + "node_modules/@react-native/dev-middleware/node_modules/ws": {
3651 + "version": "6.2.3",
3652 + "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.3.tgz",
3653 + "integrity": "sha512-jmTjYU0j60B+vHey6TfR3Z7RD61z/hmxBS3VMSGIrroOWXQEneK1zNuotOUrGyBHQj0yrpsLHPWtigEFd13ndA==",
3654 + "license": "MIT",
3655 + "dependencies": {
3656 + "async-limiter": "~1.0.0"
3657 + }
3658 + },
3659 + "node_modules/@react-native/gradle-plugin": {
3660 + "version": "0.76.7",
3661 + "resolved": "https://registry.npmjs.org/@react-native/gradle-plugin/-/gradle-plugin-0.76.7.tgz",
3662 + "integrity": "sha512-gQI6RcrJbigU8xk7F960C5xQIgvbBj20TUvGecD+N2PHfbLpqR+92cj7hz3UcbrCONmTP40WHnbMMJ8P+kLsrA==",
3663 + "license": "MIT",
3664 + "engines": {
3665 + "node": ">=18"
3666 + }
3667 + },
3668 + "node_modules/@react-native/js-polyfills": {
3669 + "version": "0.76.7",
3670 + "resolved": "https://registry.npmjs.org/@react-native/js-polyfills/-/js-polyfills-0.76.7.tgz",
3671 + "integrity": "sha512-+iEikj6c6Zvrg1c3cYMeiPB+5nS8EaIC3jCtP6Muk3qc7c386IymEPM2xycIlfg04DPZvO3D4P2/vaO9/TCnUg==",
3672 + "license": "MIT",
3673 + "engines": {
3674 + "node": ">=18"
3675 + }
3676 + },
3677 + "node_modules/@react-native/metro-babel-transformer": {
3678 + "version": "0.76.7",
3679 + "resolved": "https://registry.npmjs.org/@react-native/metro-babel-transformer/-/metro-babel-transformer-0.76.7.tgz",
3680 + "integrity": "sha512-jDS1wR7q46xY5ah+jF714Mvss9l7+lmwW/tplahZgLKozkYDC8Td5o9TOCgKlv18acw9H1V7zv8ivuRSj8ICPg==",
3681 + "license": "MIT",
3682 + "dependencies": {
3683 + "@babel/core": "^7.25.2",
3684 + "@react-native/babel-preset": "0.76.7",
3685 + "hermes-parser": "0.23.1",
3686 + "nullthrows": "^1.1.1"
3687 + },
3688 + "engines": {
3689 + "node": ">=18"
3690 + },
3691 + "peerDependencies": {
3692 + "@babel/core": "*"
3693 + }
3694 + },
3695 + "node_modules/@react-native/metro-babel-transformer/node_modules/@react-native/babel-plugin-codegen": {
3696 + "version": "0.76.7",
3697 + "resolved": "https://registry.npmjs.org/@react-native/babel-plugin-codegen/-/babel-plugin-codegen-0.76.7.tgz",
3698 + "integrity": "sha512-+8H4DXJREM4l/pwLF/wSVMRzVhzhGDix5jLezNrMD9J1U1AMfV2aSkWA1XuqR7pjPs/Vqf6TaPL7vJMZ4LU05Q==",
3699 + "license": "MIT",
3700 + "dependencies": {
3701 + "@react-native/codegen": "0.76.7"
3702 + },
3703 + "engines": {
3704 + "node": ">=18"
3705 + }
3706 + },
3707 + "node_modules/@react-native/metro-babel-transformer/node_modules/@react-native/babel-preset": {
3708 + "version": "0.76.7",
3709 + "resolved": "https://registry.npmjs.org/@react-native/babel-preset/-/babel-preset-0.76.7.tgz",
3710 + "integrity": "sha512-/c5DYZ6y8tyg+g8tgXKndDT7mWnGmkZ9F+T3qNDfoE3Qh7ucrNeC2XWvU9h5pk8eRtj9l4SzF4aO1phzwoibyg==",
3711 + "license": "MIT",
3712 + "dependencies": {
3713 + "@babel/core": "^7.25.2",
3714 + "@babel/plugin-proposal-export-default-from": "^7.24.7",
3715 + "@babel/plugin-syntax-dynamic-import": "^7.8.3",
3716 + "@babel/plugin-syntax-export-default-from": "^7.24.7",
3717 + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3",
3718 + "@babel/plugin-syntax-optional-chaining": "^7.8.3",
3719 + "@babel/plugin-transform-arrow-functions": "^7.24.7",
3720 + "@babel/plugin-transform-async-generator-functions": "^7.25.4",
3721 + "@babel/plugin-transform-async-to-generator": "^7.24.7",
3722 + "@babel/plugin-transform-block-scoping": "^7.25.0",
3723 + "@babel/plugin-transform-class-properties": "^7.25.4",
3724 + "@babel/plugin-transform-classes": "^7.25.4",
3725 + "@babel/plugin-transform-computed-properties": "^7.24.7",
3726 + "@babel/plugin-transform-destructuring": "^7.24.8",
3727 + "@babel/plugin-transform-flow-strip-types": "^7.25.2",
3728 + "@babel/plugin-transform-for-of": "^7.24.7",
3729 + "@babel/plugin-transform-function-name": "^7.25.1",
3730 + "@babel/plugin-transform-literals": "^7.25.2",
3731 + "@babel/plugin-transform-logical-assignment-operators": "^7.24.7",
3732 + "@babel/plugin-transform-modules-commonjs": "^7.24.8",
3733 + "@babel/plugin-transform-named-capturing-groups-regex": "^7.24.7",
3734 + "@babel/plugin-transform-nullish-coalescing-operator": "^7.24.7",
3735 + "@babel/plugin-transform-numeric-separator": "^7.24.7",
3736 + "@babel/plugin-transform-object-rest-spread": "^7.24.7",
3737 + "@babel/plugin-transform-optional-catch-binding": "^7.24.7",
3738 + "@babel/plugin-transform-optional-chaining": "^7.24.8",
3739 + "@babel/plugin-transform-parameters": "^7.24.7",
3740 + "@babel/plugin-transform-private-methods": "^7.24.7",
3741 + "@babel/plugin-transform-private-property-in-object": "^7.24.7",
3742 + "@babel/plugin-transform-react-display-name": "^7.24.7",
3743 + "@babel/plugin-transform-react-jsx": "^7.25.2",
3744 + "@babel/plugin-transform-react-jsx-self": "^7.24.7",
3745 + "@babel/plugin-transform-react-jsx-source": "^7.24.7",
3746 + "@babel/plugin-transform-regenerator": "^7.24.7",
3747 + "@babel/plugin-transform-runtime": "^7.24.7",
3748 + "@babel/plugin-transform-shorthand-properties": "^7.24.7",
3749 + "@babel/plugin-transform-spread": "^7.24.7",
3750 + "@babel/plugin-transform-sticky-regex": "^7.24.7",
3751 + "@babel/plugin-transform-typescript": "^7.25.2",
3752 + "@babel/plugin-transform-unicode-regex": "^7.24.7",
3753 + "@babel/template": "^7.25.0",
3754 + "@react-native/babel-plugin-codegen": "0.76.7",
3755 + "babel-plugin-syntax-hermes-parser": "^0.25.1",
3756 + "babel-plugin-transform-flow-enums": "^0.0.2",
3757 + "react-refresh": "^0.14.0"
3758 + },
3759 + "engines": {
3760 + "node": ">=18"
3761 + },
3762 + "peerDependencies": {
3763 + "@babel/core": "*"
3764 + }
3765 + },
3766 + "node_modules/@react-native/metro-babel-transformer/node_modules/@react-native/codegen": {
3767 + "version": "0.76.7",
3768 + "resolved": "https://registry.npmjs.org/@react-native/codegen/-/codegen-0.76.7.tgz",
3769 + "integrity": "sha512-FAn585Ll65YvkSrKDyAcsdjHhhAGiMlSTUpHh0x7J5ntudUns+voYms0xMP+pEPt0XuLdjhD7zLIIlAWP407+g==",
3770 + "license": "MIT",
3771 + "dependencies": {
3772 + "@babel/parser": "^7.25.3",
3773 + "glob": "^7.1.1",
3774 + "hermes-parser": "0.23.1",
3775 + "invariant": "^2.2.4",
3776 + "jscodeshift": "^0.14.0",
3777 + "mkdirp": "^0.5.1",
3778 + "nullthrows": "^1.1.1",
3779 + "yargs": "^17.6.2"
3780 + },
3781 + "engines": {
3782 + "node": ">=18"
3783 + },
3784 + "peerDependencies": {
3785 + "@babel/preset-env": "^7.1.6"
3786 + }
3787 + },
3788 + "node_modules/@react-native/metro-babel-transformer/node_modules/glob": {
3789 + "version": "7.2.3",
3790 + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
3791 + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
3792 + "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me",
3793 + "license": "ISC",
3794 + "dependencies": {
3795 + "fs.realpath": "^1.0.0",
3796 + "inflight": "^1.0.4",
3797 + "inherits": "2",
3798 + "minimatch": "^3.1.1",
3799 + "once": "^1.3.0",
3800 + "path-is-absolute": "^1.0.0"
3801 + },
3802 + "engines": {
3803 + "node": "*"
3804 + },
3805 + "funding": {
3806 + "url": "https://github.com/sponsors/isaacs"
3807 + }
3808 + },
3809 + "node_modules/@react-native/normalize-colors": {
3810 + "version": "0.76.9",
3811 + "resolved": "https://registry.npmjs.org/@react-native/normalize-colors/-/normalize-colors-0.76.9.tgz",
3812 + "integrity": "sha512-TUdMG2JGk72M9d8DYbubdOlrzTYjw+YMe/xOnLU4viDgWRHsCbtRS9x0IAxRjs3amj/7zmK3Atm8jUPvdAc8qw==",
3813 + "license": "MIT"
3814 + },
3815 + "node_modules/@react-native/virtualized-lists": {
3816 + "version": "0.76.7",
3817 + "resolved": "https://registry.npmjs.org/@react-native/virtualized-lists/-/virtualized-lists-0.76.7.tgz",
3818 + "integrity": "sha512-pRUf1jUO8H9Ft04CaWv76t34QI9wY0sydoYlIwEtqXjjMJgmgDoOCAWBjArgn2mk8/rK+u/uicI67ZCYCp1pJw==",
3819 + "license": "MIT",
3820 + "dependencies": {
3821 + "invariant": "^2.2.4",
3822 + "nullthrows": "^1.1.1"
3823 + },
3824 + "engines": {
3825 + "node": ">=18"
3826 + },
3827 + "peerDependencies": {
3828 + "@types/react": "^18.2.6",
3829 + "react": "*",
3830 + "react-native": "*"
3831 + },
3832 + "peerDependenciesMeta": {
3833 + "@types/react": {
3834 + "optional": true
3835 + }
3836 + }
3837 + },
3838 + "node_modules/@segment/loosely-validate-event": {
3839 + "version": "2.0.0",
3840 + "resolved": "https://registry.npmjs.org/@segment/loosely-validate-event/-/loosely-validate-event-2.0.0.tgz",
3841 + "integrity": "sha512-ZMCSfztDBqwotkl848ODgVcAmN4OItEWDCkshcKz0/W6gGSQayuuCtWV/MlodFivAZD793d6UgANd6wCXUfrIw==",
3842 + "dependencies": {
3843 + "component-type": "^1.2.1",
3844 + "join-component": "^1.1.0"
3845 + }
3846 + },
3847 + "node_modules/@sinclair/typebox": {
3848 + "version": "0.27.10",
3849 + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.10.tgz",
3850 + "integrity": "sha512-MTBk/3jGLNB2tVxv6uLlFh1iu64iYOQ2PbdOSK3NW8JZsmlaOh2q6sdtKowBhfw8QFLmYNzTW4/oK4uATIi6ZA==",
3851 + "license": "MIT"
3852 + },
3853 + "node_modules/@sinonjs/commons": {
3854 + "version": "3.0.1",
3855 + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.1.tgz",
3856 + "integrity": "sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==",
3857 + "license": "BSD-3-Clause",
3858 + "dependencies": {
3859 + "type-detect": "4.0.8"
3860 + }
3861 + },
3862 + "node_modules/@sinonjs/fake-timers": {
3863 + "version": "10.3.0",
3864 + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz",
3865 + "integrity": "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==",
3866 + "license": "BSD-3-Clause",
3867 + "dependencies": {
3868 + "@sinonjs/commons": "^3.0.0"
3869 + }
3870 + },
3871 + "node_modules/@types/babel__core": {
3872 + "version": "7.20.5",
3873 + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz",
3874 + "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==",
3875 + "license": "MIT",
3876 + "dependencies": {
3877 + "@babel/parser": "^7.20.7",
3878 + "@babel/types": "^7.20.7",
3879 + "@types/babel__generator": "*",
3880 + "@types/babel__template": "*",
3881 + "@types/babel__traverse": "*"
3882 + }
3883 + },
3884 + "node_modules/@types/babel__generator": {
3885 + "version": "7.27.0",
3886 + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.27.0.tgz",
3887 + "integrity": "sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==",
3888 + "license": "MIT",
3889 + "dependencies": {
3890 + "@babel/types": "^7.0.0"
3891 + }
3892 + },
3893 + "node_modules/@types/babel__template": {
3894 + "version": "7.4.4",
3895 + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz",
3896 + "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==",
3897 + "license": "MIT",
3898 + "dependencies": {
3899 + "@babel/parser": "^7.1.0",
3900 + "@babel/types": "^7.0.0"
3901 + }
3902 + },
3903 + "node_modules/@types/babel__traverse": {
3904 + "version": "7.28.0",
3905 + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.28.0.tgz",
3906 + "integrity": "sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q==",
3907 + "license": "MIT",
3908 + "dependencies": {
3909 + "@babel/types": "^7.28.2"
3910 + }
3911 + },
3912 + "node_modules/@types/graceful-fs": {
3913 + "version": "4.1.9",
3914 + "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.9.tgz",
3915 + "integrity": "sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==",
3916 + "license": "MIT",
3917 + "dependencies": {
3918 + "@types/node": "*"
3919 + }
3920 + },
3921 + "node_modules/@types/istanbul-lib-coverage": {
3922 + "version": "2.0.6",
3923 + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz",
3924 + "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==",
3925 + "license": "MIT"
3926 + },
3927 + "node_modules/@types/istanbul-lib-report": {
3928 + "version": "3.0.3",
3929 + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz",
3930 + "integrity": "sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==",
3931 + "license": "MIT",
3932 + "dependencies": {
3933 + "@types/istanbul-lib-coverage": "*"
3934 + }
3935 + },
3936 + "node_modules/@types/istanbul-reports": {
3937 + "version": "3.0.4",
3938 + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz",
3939 + "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==",
3940 + "license": "MIT",
3941 + "dependencies": {
3942 + "@types/istanbul-lib-report": "*"
3943 + }
3944 + },
3945 + "node_modules/@types/node": {
3946 + "version": "25.5.2",
3947 + "resolved": "https://registry.npmjs.org/@types/node/-/node-25.5.2.tgz",
3948 + "integrity": "sha512-tO4ZIRKNC+MDWV4qKVZe3Ql/woTnmHDr5JD8UI5hn2pwBrHEwOEMZK7WlNb5RKB6EoJ02gwmQS9OrjuFnZYdpg==",
3949 + "license": "MIT",
3950 + "dependencies": {
3951 + "undici-types": "~7.18.0"
3952 + }
3953 + },
3954 + "node_modules/@types/node-forge": {
3955 + "version": "1.3.14",
3956 + "resolved": "https://registry.npmjs.org/@types/node-forge/-/node-forge-1.3.14.tgz",
3957 + "integrity": "sha512-mhVF2BnD4BO+jtOp7z1CdzaK4mbuK0LLQYAvdOLqHTavxFNq4zA1EmYkpnFjP8HOUzedfQkRnp0E2ulSAYSzAw==",
3958 + "license": "MIT",
3959 + "dependencies": {
3960 + "@types/node": "*"
3961 + }
3962 + },
3963 + "node_modules/@types/prop-types": {
3964 + "version": "15.7.15",
3965 + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.15.tgz",
3966 + "integrity": "sha512-F6bEyamV9jKGAFBEmlQnesRPGOQqS2+Uwi0Em15xenOxHaf2hv6L8YCVn3rPdPJOiJfPiCnLIRyvwVaqMY3MIw==",
3967 + "devOptional": true,
3968 + "license": "MIT"
3969 + },
3970 + "node_modules/@types/react": {
3971 + "version": "18.3.28",
3972 + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.28.tgz",
3973 + "integrity": "sha512-z9VXpC7MWrhfWipitjNdgCauoMLRdIILQsAEV+ZesIzBq/oUlxk0m3ApZuMFCXdnS4U7KrI+l3WRUEGQ8K1QKw==",
3974 + "devOptional": true,
3975 + "license": "MIT",
3976 + "dependencies": {
3977 + "@types/prop-types": "*",
3978 + "csstype": "^3.2.2"
3979 + }
3980 + },
3981 + "node_modules/@types/stack-utils": {
3982 + "version": "2.0.3",
3983 + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.3.tgz",
3984 + "integrity": "sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==",
3985 + "license": "MIT"
3986 + },
3987 + "node_modules/@types/yargs": {
3988 + "version": "17.0.35",
3989 + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.35.tgz",
3990 + "integrity": "sha512-qUHkeCyQFxMXg79wQfTtfndEC+N9ZZg76HJftDJp+qH2tV7Gj4OJi7l+PiWwJ+pWtW8GwSmqsDj/oymhrTWXjg==",
3991 + "license": "MIT",
3992 + "dependencies": {
3993 + "@types/yargs-parser": "*"
3994 + }
3995 + },
3996 + "node_modules/@types/yargs-parser": {
3997 + "version": "21.0.3",
3998 + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz",
3999 + "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==",
4000 + "license": "MIT"
4001 + },
4002 + "node_modules/@urql/core": {
4003 + "version": "5.2.0",
4004 + "resolved": "https://registry.npmjs.org/@urql/core/-/core-5.2.0.tgz",
4005 + "integrity": "sha512-/n0ieD0mvvDnVAXEQgX/7qJiVcvYvNkOHeBvkwtylfjydar123caCXcl58PXFY11oU1oquJocVXHxLAbtv4x1A==",
4006 + "license": "MIT",
4007 + "dependencies": {
4008 + "@0no-co/graphql.web": "^1.0.13",
4009 + "wonka": "^6.3.2"
4010 + }
4011 + },
4012 + "node_modules/@urql/exchange-retry": {
4013 + "version": "1.3.2",
4014 + "resolved": "https://registry.npmjs.org/@urql/exchange-retry/-/exchange-retry-1.3.2.tgz",
4015 + "integrity": "sha512-TQMCz2pFJMfpNxmSfX1VSfTjwUIFx/mL+p1bnfM1xjjdla7Z+KnGMW/EhFbpckp3LyWAH4PgOsMwOMnIN+MBFg==",
4016 + "license": "MIT",
4017 + "dependencies": {
4018 + "@urql/core": "^5.1.2",
4019 + "wonka": "^6.3.2"
4020 + },
4021 + "peerDependencies": {
4022 + "@urql/core": "^5.0.0"
4023 + }
4024 + },
4025 + "node_modules/@xmldom/xmldom": {
4026 + "version": "0.7.13",
4027 + "resolved": "https://registry.npmjs.org/@xmldom/xmldom/-/xmldom-0.7.13.tgz",
4028 + "integrity": "sha512-lm2GW5PkosIzccsaZIz7tp8cPADSIlIHWDFTR1N0SzfinhhYgeIQjFMz4rYzanCScr3DqQLeomUDArp6MWKm+g==",
4029 + "deprecated": "this version has critical issues, please update to the latest version",
4030 + "license": "MIT",
4031 + "engines": {
4032 + "node": ">=10.0.0"
4033 + }
4034 + },
4035 + "node_modules/abort-controller": {
4036 + "version": "3.0.0",
4037 + "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz",
4038 + "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==",
4039 + "license": "MIT",
4040 + "dependencies": {
4041 + "event-target-shim": "^5.0.0"
4042 + },
4043 + "engines": {
4044 + "node": ">=6.5"
4045 + }
4046 + },
4047 + "node_modules/accepts": {
4048 + "version": "1.3.8",
4049 + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz",
4050 + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==",
4051 + "license": "MIT",
4052 + "dependencies": {
4053 + "mime-types": "~2.1.34",
4054 + "negotiator": "0.6.3"
4055 + },
4056 + "engines": {
4057 + "node": ">= 0.6"
4058 + }
4059 + },
4060 + "node_modules/acorn": {
4061 + "version": "8.16.0",
4062 + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.16.0.tgz",
4063 + "integrity": "sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==",
4064 + "license": "MIT",
4065 + "bin": {
4066 + "acorn": "bin/acorn"
4067 + },
4068 + "engines": {
4069 + "node": ">=0.4.0"
4070 + }
4071 + },
4072 + "node_modules/aggregate-error": {
4073 + "version": "3.1.0",
4074 + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz",
4075 + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==",
4076 + "license": "MIT",
4077 + "dependencies": {
4078 + "clean-stack": "^2.0.0",
4079 + "indent-string": "^4.0.0"
4080 + },
4081 + "engines": {
4082 + "node": ">=8"
4083 + }
4084 + },
4085 + "node_modules/anser": {
4086 + "version": "1.4.10",
4087 + "resolved": "https://registry.npmjs.org/anser/-/anser-1.4.10.tgz",
4088 + "integrity": "sha512-hCv9AqTQ8ycjpSd3upOJd7vFwW1JaoYQ7tpham03GJ1ca8/65rqn0RpaWpItOAd6ylW9wAw6luXYPJIyPFVOww==",
4089 + "license": "MIT"
4090 + },
4091 + "node_modules/ansi-escapes": {
4092 + "version": "4.3.2",
4093 + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz",
4094 + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==",
4095 + "license": "MIT",
4096 + "dependencies": {
4097 + "type-fest": "^0.21.3"
4098 + },
4099 + "engines": {
4100 + "node": ">=8"
4101 + },
4102 + "funding": {
4103 + "url": "https://github.com/sponsors/sindresorhus"
4104 + }
4105 + },
4106 + "node_modules/ansi-escapes/node_modules/type-fest": {
4107 + "version": "0.21.3",
4108 + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz",
4109 + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==",
4110 + "license": "(MIT OR CC0-1.0)",
4111 + "engines": {
4112 + "node": ">=10"
4113 + },
4114 + "funding": {
4115 + "url": "https://github.com/sponsors/sindresorhus"
4116 + }
4117 + },
4118 + "node_modules/ansi-regex": {
4119 + "version": "5.0.1",
4120 + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
4121 + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
4122 + "license": "MIT",
4123 + "engines": {
4124 + "node": ">=8"
4125 + }
4126 + },
4127 + "node_modules/ansi-styles": {
4128 + "version": "4.3.0",
4129 + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
4130 + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
4131 + "license": "MIT",
4132 + "dependencies": {
4133 + "color-convert": "^2.0.1"
4134 + },
4135 + "engines": {
4136 + "node": ">=8"
4137 + },
4138 + "funding": {
4139 + "url": "https://github.com/chalk/ansi-styles?sponsor=1"
4140 + }
4141 + },
4142 + "node_modules/any-promise": {
4143 + "version": "1.3.0",
4144 + "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz",
4145 + "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==",
4146 + "license": "MIT"
4147 + },
4148 + "node_modules/anymatch": {
4149 + "version": "3.1.3",
4150 + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz",
4151 + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==",
4152 + "license": "ISC",
4153 + "dependencies": {
4154 + "normalize-path": "^3.0.0",
4155 + "picomatch": "^2.0.4"
4156 + },
4157 + "engines": {
4158 + "node": ">= 8"
4159 + }
4160 + },
4161 + "node_modules/anymatch/node_modules/picomatch": {
4162 + "version": "2.3.2",
4163 + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz",
4164 + "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==",
4165 + "license": "MIT",
4166 + "engines": {
4167 + "node": ">=8.6"
4168 + },
4169 + "funding": {
4170 + "url": "https://github.com/sponsors/jonschlinkert"
4171 + }
4172 + },
4173 + "node_modules/arg": {
4174 + "version": "5.0.2",
4175 + "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz",
4176 + "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==",
4177 + "license": "MIT"
4178 + },
4179 + "node_modules/argparse": {
4180 + "version": "2.0.1",
4181 + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
4182 + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
4183 + "license": "Python-2.0"
4184 + },
4185 + "node_modules/array-union": {
4186 + "version": "2.1.0",
4187 + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz",
4188 + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==",
4189 + "license": "MIT",
4190 + "engines": {
4191 + "node": ">=8"
4192 + }
4193 + },
4194 + "node_modules/asap": {
4195 + "version": "2.0.6",
4196 + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz",
4197 + "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==",
4198 + "license": "MIT"
4199 + },
4200 + "node_modules/ast-types": {
4201 + "version": "0.15.2",
4202 + "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.15.2.tgz",
4203 + "integrity": "sha512-c27loCv9QkZinsa5ProX751khO9DJl/AcB5c2KNtA6NRvHKS0PgLfcftz72KVq504vB0Gku5s2kUZzDBvQWvHg==",
4204 + "license": "MIT",
4205 + "dependencies": {
4206 + "tslib": "^2.0.1"
4207 + },
4208 + "engines": {
4209 + "node": ">=4"
4210 + }
4211 + },
4212 + "node_modules/async-limiter": {
4213 + "version": "1.0.1",
4214 + "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz",
4215 + "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==",
4216 + "license": "MIT"
4217 + },
4218 + "node_modules/asynckit": {
4219 + "version": "0.4.0",
4220 + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
4221 + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==",
4222 + "license": "MIT"
4223 + },
4224 + "node_modules/at-least-node": {
4225 + "version": "1.0.0",
4226 + "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz",
4227 + "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==",
4228 + "license": "ISC",
4229 + "engines": {
4230 + "node": ">= 4.0.0"
4231 + }
4232 + },
4233 + "node_modules/babel-core": {
4234 + "version": "7.0.0-bridge.0",
4235 + "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-7.0.0-bridge.0.tgz",
4236 + "integrity": "sha512-poPX9mZH/5CSanm50Q+1toVci6pv5KSRv/5TWCwtzQS5XEwn40BcCrgIeMFWP9CKKIniKXNxoIOnOq4VVlGXhg==",
4237 + "license": "MIT",
4238 + "peerDependencies": {
4239 + "@babel/core": "^7.0.0-0"
4240 + }
4241 + },
4242 + "node_modules/babel-jest": {
4243 + "version": "29.7.0",
4244 + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.7.0.tgz",
4245 + "integrity": "sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==",
4246 + "license": "MIT",
4247 + "dependencies": {
4248 + "@jest/transform": "^29.7.0",
4249 + "@types/babel__core": "^7.1.14",
4250 + "babel-plugin-istanbul": "^6.1.1",
4251 + "babel-preset-jest": "^29.6.3",
4252 + "chalk": "^4.0.0",
4253 + "graceful-fs": "^4.2.9",
4254 + "slash": "^3.0.0"
4255 + },
4256 + "engines": {
4257 + "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
4258 + },
4259 + "peerDependencies": {
4260 + "@babel/core": "^7.8.0"
4261 + }
4262 + },
4263 + "node_modules/babel-plugin-istanbul": {
4264 + "version": "6.1.1",
4265 + "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz",
4266 + "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==",
4267 + "license": "BSD-3-Clause",
4268 + "dependencies": {
4269 + "@babel/helper-plugin-utils": "^7.0.0",
4270 + "@istanbuljs/load-nyc-config": "^1.0.0",
4271 + "@istanbuljs/schema": "^0.1.2",
4272 + "istanbul-lib-instrument": "^5.0.4",
4273 + "test-exclude": "^6.0.0"
4274 + },
4275 + "engines": {
4276 + "node": ">=8"
4277 + }
4278 + },
4279 + "node_modules/babel-plugin-jest-hoist": {
4280 + "version": "29.6.3",
4281 + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.6.3.tgz",
4282 + "integrity": "sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==",
4283 + "license": "MIT",
4284 + "dependencies": {
4285 + "@babel/template": "^7.3.3",
4286 + "@babel/types": "^7.3.3",
4287 + "@types/babel__core": "^7.1.14",
4288 + "@types/babel__traverse": "^7.0.6"
4289 + },
4290 + "engines": {
4291 + "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
4292 + }
4293 + },
4294 + "node_modules/babel-plugin-polyfill-corejs2": {
4295 + "version": "0.4.17",
4296 + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.17.tgz",
4297 + "integrity": "sha512-aTyf30K/rqAsNwN76zYrdtx8obu0E4KoUME29B1xj+B3WxgvWkp943vYQ+z8Mv3lw9xHXMHpvSPOBxzAkIa94w==",
4298 + "license": "MIT",
4299 + "dependencies": {
4300 + "@babel/compat-data": "^7.28.6",
4301 + "@babel/helper-define-polyfill-provider": "^0.6.8",
4302 + "semver": "^6.3.1"
4303 + },
4304 + "peerDependencies": {
4305 + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0"
4306 + }
4307 + },
4308 + "node_modules/babel-plugin-polyfill-corejs2/node_modules/semver": {
4309 + "version": "6.3.1",
4310 + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
4311 + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
4312 + "license": "ISC",
4313 + "bin": {
4314 + "semver": "bin/semver.js"
4315 + }
4316 + },
4317 + "node_modules/babel-plugin-polyfill-corejs3": {
4318 + "version": "0.13.0",
4319 + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.13.0.tgz",
4320 + "integrity": "sha512-U+GNwMdSFgzVmfhNm8GJUX88AadB3uo9KpJqS3FaqNIPKgySuvMb+bHPsOmmuWyIcuqZj/pzt1RUIUZns4y2+A==",
4321 + "license": "MIT",
4322 + "dependencies": {
4323 + "@babel/helper-define-polyfill-provider": "^0.6.5",
4324 + "core-js-compat": "^3.43.0"
4325 + },
4326 + "peerDependencies": {
4327 + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0"
4328 + }
4329 + },
4330 + "node_modules/babel-plugin-polyfill-regenerator": {
4331 + "version": "0.6.8",
4332 + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.8.tgz",
4333 + "integrity": "sha512-M762rNHfSF1EV3SLtnCJXFoQbbIIz0OyRwnCmV0KPC7qosSfCO0QLTSuJX3ayAebubhE6oYBAYPrBA5ljowaZg==",
4334 + "license": "MIT",
4335 + "dependencies": {
4336 + "@babel/helper-define-polyfill-provider": "^0.6.8"
4337 + },
4338 + "peerDependencies": {
4339 + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0"
4340 + }
4341 + },
4342 + "node_modules/babel-plugin-react-native-web": {
4343 + "version": "0.19.13",
4344 + "resolved": "https://registry.npmjs.org/babel-plugin-react-native-web/-/babel-plugin-react-native-web-0.19.13.tgz",
4345 + "integrity": "sha512-4hHoto6xaN23LCyZgL9LJZc3olmAxd7b6jDzlZnKXAh4rRAbZRKNBJoOOdp46OBqgy+K0t0guTj5/mhA8inymQ==",
4346 + "license": "MIT"
4347 + },
4348 + "node_modules/babel-plugin-syntax-hermes-parser": {
4349 + "version": "0.25.1",
4350 + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-hermes-parser/-/babel-plugin-syntax-hermes-parser-0.25.1.tgz",
4351 + "integrity": "sha512-IVNpGzboFLfXZUAwkLFcI/bnqVbwky0jP3eBno4HKtqvQJAHBLdgxiG6lQ4to0+Q/YCN3PO0od5NZwIKyY4REQ==",
4352 + "license": "MIT",
4353 + "dependencies": {
4354 + "hermes-parser": "0.25.1"
4355 + }
4356 + },
4357 + "node_modules/babel-plugin-syntax-hermes-parser/node_modules/hermes-estree": {
4358 + "version": "0.25.1",
4359 + "resolved": "https://registry.npmjs.org/hermes-estree/-/hermes-estree-0.25.1.tgz",
4360 + "integrity": "sha512-0wUoCcLp+5Ev5pDW2OriHC2MJCbwLwuRx+gAqMTOkGKJJiBCLjtrvy4PWUGn6MIVefecRpzoOZ/UV6iGdOr+Cw==",
4361 + "license": "MIT"
4362 + },
4363 + "node_modules/babel-plugin-syntax-hermes-parser/node_modules/hermes-parser": {
4364 + "version": "0.25.1",
4365 + "resolved": "https://registry.npmjs.org/hermes-parser/-/hermes-parser-0.25.1.tgz",
4366 + "integrity": "sha512-6pEjquH3rqaI6cYAXYPcz9MS4rY6R4ngRgrgfDshRptUZIc3lw0MCIJIGDj9++mfySOuPTHB4nrSW99BCvOPIA==",
4367 + "license": "MIT",
4368 + "dependencies": {
4369 + "hermes-estree": "0.25.1"
4370 + }
4371 + },
4372 + "node_modules/babel-plugin-transform-flow-enums": {
4373 + "version": "0.0.2",
4374 + "resolved": "https://registry.npmjs.org/babel-plugin-transform-flow-enums/-/babel-plugin-transform-flow-enums-0.0.2.tgz",
4375 + "integrity": "sha512-g4aaCrDDOsWjbm0PUUeVnkcVd6AKJsVc/MbnPhEotEpkeJQP6b8nzewohQi7+QS8UyPehOhGWn0nOwjvWpmMvQ==",
4376 + "license": "MIT",
4377 + "dependencies": {
4378 + "@babel/plugin-syntax-flow": "^7.12.1"
4379 + }
4380 + },
4381 + "node_modules/babel-preset-current-node-syntax": {
4382 + "version": "1.2.0",
4383 + "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.2.0.tgz",
4384 + "integrity": "sha512-E/VlAEzRrsLEb2+dv8yp3bo4scof3l9nR4lrld+Iy5NyVqgVYUJnDAmunkhPMisRI32Qc4iRiz425d8vM++2fg==",
4385 + "license": "MIT",
4386 + "dependencies": {
4387 + "@babel/plugin-syntax-async-generators": "^7.8.4",
4388 + "@babel/plugin-syntax-bigint": "^7.8.3",
4389 + "@babel/plugin-syntax-class-properties": "^7.12.13",
4390 + "@babel/plugin-syntax-class-static-block": "^7.14.5",
4391 + "@babel/plugin-syntax-import-attributes": "^7.24.7",
4392 + "@babel/plugin-syntax-import-meta": "^7.10.4",
4393 + "@babel/plugin-syntax-json-strings": "^7.8.3",
4394 + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4",
4395 + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3",
4396 + "@babel/plugin-syntax-numeric-separator": "^7.10.4",
4397 + "@babel/plugin-syntax-object-rest-spread": "^7.8.3",
4398 + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3",
4399 + "@babel/plugin-syntax-optional-chaining": "^7.8.3",
4400 + "@babel/plugin-syntax-private-property-in-object": "^7.14.5",
4401 + "@babel/plugin-syntax-top-level-await": "^7.14.5"
4402 + },
4403 + "peerDependencies": {
4404 + "@babel/core": "^7.0.0 || ^8.0.0-0"
4405 + }
4406 + },
4407 + "node_modules/babel-preset-expo": {
4408 + "version": "12.0.12",
4409 + "resolved": "https://registry.npmjs.org/babel-preset-expo/-/babel-preset-expo-12.0.12.tgz",
4410 + "integrity": "sha512-qAuaGGZIN//DyQVackP7Czr1SMq5dYb5tpu/uQqL/f1bRARb74r+kBWQRLJGxQ3QujsEw13SyAodCZIOUoD6KQ==",
4411 + "license": "MIT",
4412 + "dependencies": {
4413 + "@babel/plugin-proposal-decorators": "^7.12.9",
4414 + "@babel/plugin-transform-export-namespace-from": "^7.22.11",
4415 + "@babel/plugin-transform-object-rest-spread": "^7.12.13",
4416 + "@babel/plugin-transform-parameters": "^7.22.15",
4417 + "@babel/preset-react": "^7.22.15",
4418 + "@babel/preset-typescript": "^7.23.0",
4419 + "@react-native/babel-preset": "0.76.9",
4420 + "babel-plugin-react-native-web": "~0.19.13",
4421 + "react-refresh": "^0.14.2"
4422 + },
4423 + "peerDependencies": {
4424 + "babel-plugin-react-compiler": "^19.0.0-beta-9ee70a1-20241017",
4425 + "react-compiler-runtime": "^19.0.0-beta-8a03594-20241020"
4426 + },
4427 + "peerDependenciesMeta": {
4428 + "babel-plugin-react-compiler": {
4429 + "optional": true
4430 + },
4431 + "react-compiler-runtime": {
4432 + "optional": true
4433 + }
4434 + }
4435 + },
4436 + "node_modules/babel-preset-jest": {
4437 + "version": "29.6.3",
4438 + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.6.3.tgz",
4439 + "integrity": "sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==",
4440 + "license": "MIT",
4441 + "dependencies": {
4442 + "babel-plugin-jest-hoist": "^29.6.3",
4443 + "babel-preset-current-node-syntax": "^1.0.0"
4444 + },
4445 + "engines": {
4446 + "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
4447 + },
4448 + "peerDependencies": {
4449 + "@babel/core": "^7.0.0"
4450 + }
4451 + },
4452 + "node_modules/balanced-match": {
4453 + "version": "1.0.2",
4454 + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
4455 + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
4456 + "license": "MIT"
4457 + },
4458 + "node_modules/base64-js": {
4459 + "version": "1.5.1",
4460 + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz",
4461 + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==",
4462 + "funding": [
4463 + {
4464 + "type": "github",
4465 + "url": "https://github.com/sponsors/feross"
4466 + },
4467 + {
4468 + "type": "patreon",
4469 + "url": "https://www.patreon.com/feross"
4470 + },
4471 + {
4472 + "type": "consulting",
4473 + "url": "https://feross.org/support"
4474 + }
4475 + ],
4476 + "license": "MIT"
4477 + },
4478 + "node_modules/baseline-browser-mapping": {
4479 + "version": "2.10.17",
4480 + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.10.17.tgz",
4481 + "integrity": "sha512-HdrkN8eVG2CXxeifv/VdJ4A4RSra1DTW8dc/hdxzhGHN8QePs6gKaWM9pHPcpCoxYZJuOZ8drHmbdpLHjCYjLA==",
4482 + "license": "Apache-2.0",
4483 + "bin": {
4484 + "baseline-browser-mapping": "dist/cli.cjs"
4485 + },
4486 + "engines": {
4487 + "node": ">=6.0.0"
4488 + }
4489 + },
4490 + "node_modules/better-opn": {
4491 + "version": "3.0.2",
4492 + "resolved": "https://registry.npmjs.org/better-opn/-/better-opn-3.0.2.tgz",
4493 + "integrity": "sha512-aVNobHnJqLiUelTaHat9DZ1qM2w0C0Eym4LPI/3JxOnSokGVdsl1T1kN7TFvsEAD8G47A6VKQ0TVHqbBnYMJlQ==",
4494 + "license": "MIT",
4495 + "dependencies": {
4496 + "open": "^8.0.4"
4497 + },
4498 + "engines": {
4499 + "node": ">=12.0.0"
4500 + }
4501 + },
4502 + "node_modules/better-opn/node_modules/open": {
4503 + "version": "8.4.2",
4504 + "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz",
4505 + "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==",
4506 + "license": "MIT",
4507 + "dependencies": {
4508 + "define-lazy-prop": "^2.0.0",
4509 + "is-docker": "^2.1.1",
4510 + "is-wsl": "^2.2.0"
4511 + },
4512 + "engines": {
4513 + "node": ">=12"
4514 + },
4515 + "funding": {
4516 + "url": "https://github.com/sponsors/sindresorhus"
4517 + }
4518 + },
4519 + "node_modules/big-integer": {
4520 + "version": "1.6.52",
4521 + "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.52.tgz",
4522 + "integrity": "sha512-QxD8cf2eVqJOOz63z6JIN9BzvVs/dlySa5HGSBH5xtR8dPteIRQnBxxKqkNTiT6jbDTF6jAfrd4oMcND9RGbQg==",
4523 + "license": "Unlicense",
4524 + "engines": {
4525 + "node": ">=0.6"
4526 + }
4527 + },
4528 + "node_modules/bplist-creator": {
4529 + "version": "0.0.7",
4530 + "resolved": "https://registry.npmjs.org/bplist-creator/-/bplist-creator-0.0.7.tgz",
4531 + "integrity": "sha512-xp/tcaV3T5PCiaY04mXga7o/TE+t95gqeLmADeBI1CvZtdWTbgBt3uLpvh4UWtenKeBhCV6oVxGk38yZr2uYEA==",
4532 + "license": "MIT",
4533 + "dependencies": {
4534 + "stream-buffers": "~2.2.0"
4535 + }
4536 + },
4537 + "node_modules/bplist-parser": {
4538 + "version": "0.3.2",
4539 + "resolved": "https://registry.npmjs.org/bplist-parser/-/bplist-parser-0.3.2.tgz",
4540 + "integrity": "sha512-apC2+fspHGI3mMKj+dGevkGo/tCqVB8jMb6i+OX+E29p0Iposz07fABkRIfVUPNd5A5VbuOz1bZbnmkKLYF+wQ==",
4541 + "license": "MIT",
4542 + "dependencies": {
4543 + "big-integer": "1.6.x"
4544 + },
4545 + "engines": {
4546 + "node": ">= 5.10.0"
4547 + }
4548 + },
4549 + "node_modules/brace-expansion": {
4550 + "version": "1.1.13",
4551 + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.13.tgz",
4552 + "integrity": "sha512-9ZLprWS6EENmhEOpjCYW2c8VkmOvckIJZfkr7rBW6dObmfgJ/L1GpSYW5Hpo9lDz4D1+n0Ckz8rU7FwHDQiG/w==",
4553 + "license": "MIT",
4554 + "dependencies": {
4555 + "balanced-match": "^1.0.0",
4556 + "concat-map": "0.0.1"
4557 + }
4558 + },
4559 + "node_modules/braces": {
4560 + "version": "3.0.3",
4561 + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz",
4562 + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==",
4563 + "license": "MIT",
4564 + "dependencies": {
4565 + "fill-range": "^7.1.1"
4566 + },
4567 + "engines": {
4568 + "node": ">=8"
4569 + }
4570 + },
4571 + "node_modules/browserslist": {
4572 + "version": "4.28.2",
4573 + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.2.tgz",
4574 + "integrity": "sha512-48xSriZYYg+8qXna9kwqjIVzuQxi+KYWp2+5nCYnYKPTr0LvD89Jqk2Or5ogxz0NUMfIjhh2lIUX/LyX9B4oIg==",
4575 + "funding": [
4576 + {
4577 + "type": "opencollective",
4578 + "url": "https://opencollective.com/browserslist"
4579 + },
4580 + {
4581 + "type": "tidelift",
4582 + "url": "https://tidelift.com/funding/github/npm/browserslist"
4583 + },
4584 + {
4585 + "type": "github",
4586 + "url": "https://github.com/sponsors/ai"
4587 + }
4588 + ],
4589 + "license": "MIT",
4590 + "dependencies": {
4591 + "baseline-browser-mapping": "^2.10.12",
4592 + "caniuse-lite": "^1.0.30001782",
4593 + "electron-to-chromium": "^1.5.328",
4594 + "node-releases": "^2.0.36",
4595 + "update-browserslist-db": "^1.2.3"
4596 + },
4597 + "bin": {
4598 + "browserslist": "cli.js"
4599 + },
4600 + "engines": {
4601 + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7"
4602 + }
4603 + },
4604 + "node_modules/bser": {
4605 + "version": "2.1.1",
4606 + "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz",
4607 + "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==",
4608 + "license": "Apache-2.0",
4609 + "dependencies": {
4610 + "node-int64": "^0.4.0"
4611 + }
4612 + },
4613 + "node_modules/buffer": {
4614 + "version": "5.7.1",
4615 + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz",
4616 + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==",
4617 + "funding": [
4618 + {
4619 + "type": "github",
4620 + "url": "https://github.com/sponsors/feross"
4621 + },
4622 + {
4623 + "type": "patreon",
4624 + "url": "https://www.patreon.com/feross"
4625 + },
4626 + {
4627 + "type": "consulting",
4628 + "url": "https://feross.org/support"
4629 + }
4630 + ],
4631 + "license": "MIT",
4632 + "dependencies": {
4633 + "base64-js": "^1.3.1",
4634 + "ieee754": "^1.1.13"
4635 + }
4636 + },
4637 + "node_modules/buffer-alloc": {
4638 + "version": "1.2.0",
4639 + "resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz",
4640 + "integrity": "sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==",
4641 + "license": "MIT",
4642 + "dependencies": {
4643 + "buffer-alloc-unsafe": "^1.1.0",
4644 + "buffer-fill": "^1.0.0"
4645 + }
4646 + },
4647 + "node_modules/buffer-alloc-unsafe": {
4648 + "version": "1.1.0",
4649 + "resolved": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz",
4650 + "integrity": "sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==",
4651 + "license": "MIT"
4652 + },
4653 + "node_modules/buffer-fill": {
4654 + "version": "1.0.0",
4655 + "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz",
4656 + "integrity": "sha512-T7zexNBwiiaCOGDg9xNX9PBmjrubblRkENuptryuI64URkXDFum9il/JGL8Lm8wYfAXpredVXXZz7eMHilimiQ==",
4657 + "license": "MIT"
4658 + },
4659 + "node_modules/buffer-from": {
4660 + "version": "1.1.2",
4661 + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz",
4662 + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==",
4663 + "license": "MIT"
4664 + },
4665 + "node_modules/bytes": {
4666 + "version": "3.1.2",
4667 + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz",
4668 + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==",
4669 + "license": "MIT",
4670 + "engines": {
4671 + "node": ">= 0.8"
4672 + }
4673 + },
4674 + "node_modules/cacache": {
4675 + "version": "18.0.4",
4676 + "resolved": "https://registry.npmjs.org/cacache/-/cacache-18.0.4.tgz",
4677 + "integrity": "sha512-B+L5iIa9mgcjLbliir2th36yEwPftrzteHYujzsx3dFP/31GCHcIeS8f5MGd80odLOjaOvSpU3EEAmRQptkxLQ==",
4678 + "license": "ISC",
4679 + "dependencies": {
4680 + "@npmcli/fs": "^3.1.0",
4681 + "fs-minipass": "^3.0.0",
4682 + "glob": "^10.2.2",
4683 + "lru-cache": "^10.0.1",
4684 + "minipass": "^7.0.3",
4685 + "minipass-collect": "^2.0.1",
4686 + "minipass-flush": "^1.0.5",
4687 + "minipass-pipeline": "^1.2.4",
4688 + "p-map": "^4.0.0",
4689 + "ssri": "^10.0.0",
4690 + "tar": "^6.1.11",
4691 + "unique-filename": "^3.0.0"
4692 + },
4693 + "engines": {
4694 + "node": "^16.14.0 || >=18.0.0"
4695 + }
4696 + },
4697 + "node_modules/cacache/node_modules/lru-cache": {
4698 + "version": "10.4.3",
4699 + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz",
4700 + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==",
4701 + "license": "ISC"
4702 + },
4703 + "node_modules/call-bind-apply-helpers": {
4704 + "version": "1.0.2",
4705 + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz",
4706 + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==",
4707 + "license": "MIT",
4708 + "dependencies": {
4709 + "es-errors": "^1.3.0",
4710 + "function-bind": "^1.1.2"
4711 + },
4712 + "engines": {
4713 + "node": ">= 0.4"
4714 + }
4715 + },
4716 + "node_modules/caller-callsite": {
4717 + "version": "2.0.0",
4718 + "resolved": "https://registry.npmjs.org/caller-callsite/-/caller-callsite-2.0.0.tgz",
4719 + "integrity": "sha512-JuG3qI4QOftFsZyOn1qq87fq5grLIyk1JYd5lJmdA+fG7aQ9pA/i3JIJGcO3q0MrRcHlOt1U+ZeHW8Dq9axALQ==",
4720 + "license": "MIT",
4721 + "dependencies": {
4722 + "callsites": "^2.0.0"
4723 + },
4724 + "engines": {
4725 + "node": ">=4"
4726 + }
4727 + },
4728 + "node_modules/caller-path": {
4729 + "version": "2.0.0",
4730 + "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-2.0.0.tgz",
4731 + "integrity": "sha512-MCL3sf6nCSXOwCTzvPKhN18TU7AHTvdtam8DAogxcrJ8Rjfbbg7Lgng64H9Iy+vUV6VGFClN/TyxBkAebLRR4A==",
4732 + "license": "MIT",
4733 + "dependencies": {
4734 + "caller-callsite": "^2.0.0"
4735 + },
4736 + "engines": {
4737 + "node": ">=4"
4738 + }
4739 + },
4740 + "node_modules/callsites": {
4741 + "version": "2.0.0",
4742 + "resolved": "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz",
4743 + "integrity": "sha512-ksWePWBloaWPxJYQ8TL0JHvtci6G5QTKwQ95RcWAa/lzoAKuAOflGdAK92hpHXjkwb8zLxoLNUoNYZgVsaJzvQ==",
4744 + "license": "MIT",
4745 + "engines": {
4746 + "node": ">=4"
4747 + }
4748 + },
4749 + "node_modules/camelcase": {
4750 + "version": "5.3.1",
4751 + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
4752 + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==",
4753 + "license": "MIT",
4754 + "engines": {
4755 + "node": ">=6"
4756 + }
4757 + },
4758 + "node_modules/caniuse-lite": {
4759 + "version": "1.0.30001787",
4760 + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001787.tgz",
4761 + "integrity": "sha512-mNcrMN9KeI68u7muanUpEejSLghOKlVhRqS/Za2IeyGllJ9I9otGpR9g3nsw7n4W378TE/LyIteA0+/FOZm4Kg==",
4762 + "funding": [
4763 + {
4764 + "type": "opencollective",
4765 + "url": "https://opencollective.com/browserslist"
4766 + },
4767 + {
4768 + "type": "tidelift",
4769 + "url": "https://tidelift.com/funding/github/npm/caniuse-lite"
4770 + },
4771 + {
4772 + "type": "github",
4773 + "url": "https://github.com/sponsors/ai"
4774 + }
4775 + ],
4776 + "license": "CC-BY-4.0"
4777 + },
4778 + "node_modules/chalk": {
4779 + "version": "4.1.2",
4780 + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
4781 + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
4782 + "license": "MIT",
4783 + "dependencies": {
4784 + "ansi-styles": "^4.1.0",
4785 + "supports-color": "^7.1.0"
4786 + },
4787 + "engines": {
4788 + "node": ">=10"
4789 + },
4790 + "funding": {
4791 + "url": "https://github.com/chalk/chalk?sponsor=1"
4792 + }
4793 + },
4794 + "node_modules/charenc": {
4795 + "version": "0.0.2",
4796 + "resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz",
4797 + "integrity": "sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA==",
4798 + "license": "BSD-3-Clause",
4799 + "engines": {
4800 + "node": "*"
4801 + }
4802 + },
4803 + "node_modules/chownr": {
4804 + "version": "2.0.0",
4805 + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz",
4806 + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==",
4807 + "license": "ISC",
4808 + "engines": {
4809 + "node": ">=10"
4810 + }
4811 + },
4812 + "node_modules/chrome-launcher": {
4813 + "version": "0.15.2",
4814 + "resolved": "https://registry.npmjs.org/chrome-launcher/-/chrome-launcher-0.15.2.tgz",
4815 + "integrity": "sha512-zdLEwNo3aUVzIhKhTtXfxhdvZhUghrnmkvcAq2NoDd+LeOHKf03H5jwZ8T/STsAlzyALkBVK552iaG1fGf1xVQ==",
4816 + "license": "Apache-2.0",
4817 + "dependencies": {
4818 + "@types/node": "*",
4819 + "escape-string-regexp": "^4.0.0",
4820 + "is-wsl": "^2.2.0",
4821 + "lighthouse-logger": "^1.0.0"
4822 + },
4823 + "bin": {
4824 + "print-chrome-path": "bin/print-chrome-path.js"
4825 + },
4826 + "engines": {
4827 + "node": ">=12.13.0"
4828 + }
4829 + },
4830 + "node_modules/chromium-edge-launcher": {
4831 + "version": "0.2.0",
4832 + "resolved": "https://registry.npmjs.org/chromium-edge-launcher/-/chromium-edge-launcher-0.2.0.tgz",
4833 + "integrity": "sha512-JfJjUnq25y9yg4FABRRVPmBGWPZZi+AQXT4mxupb67766/0UlhG8PAZCz6xzEMXTbW3CsSoE8PcCWA49n35mKg==",
4834 + "license": "Apache-2.0",
4835 + "dependencies": {
4836 + "@types/node": "*",
4837 + "escape-string-regexp": "^4.0.0",
4838 + "is-wsl": "^2.2.0",
4839 + "lighthouse-logger": "^1.0.0",
4840 + "mkdirp": "^1.0.4",
4841 + "rimraf": "^3.0.2"
4842 + }
4843 + },
4844 + "node_modules/chromium-edge-launcher/node_modules/mkdirp": {
4845 + "version": "1.0.4",
4846 + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz",
4847 + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==",
4848 + "license": "MIT",
4849 + "bin": {
4850 + "mkdirp": "bin/cmd.js"
4851 + },
4852 + "engines": {
4853 + "node": ">=10"
4854 + }
4855 + },
4856 + "node_modules/ci-info": {
4857 + "version": "3.9.0",
4858 + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz",
4859 + "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==",
4860 + "funding": [
4861 + {
4862 + "type": "github",
4863 + "url": "https://github.com/sponsors/sibiraj-s"
4864 + }
4865 + ],
4866 + "license": "MIT",
4867 + "engines": {
4868 + "node": ">=8"
4869 + }
4870 + },
4871 + "node_modules/clean-stack": {
4872 + "version": "2.2.0",
4873 + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz",
4874 + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==",
4875 + "license": "MIT",
4876 + "engines": {
4877 + "node": ">=6"
4878 + }
4879 + },
4880 + "node_modules/cli-cursor": {
4881 + "version": "2.1.0",
4882 + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz",
4883 + "integrity": "sha512-8lgKz8LmCRYZZQDpRyT2m5rKJ08TnU4tR9FFFW2rxpxR1FzWi4PQ/NfyODchAatHaUgnSPVcx/R5w6NuTBzFiw==",
4884 + "license": "MIT",
4885 + "dependencies": {
4886 + "restore-cursor": "^2.0.0"
4887 + },
4888 + "engines": {
4889 + "node": ">=4"
4890 + }
4891 + },
4892 + "node_modules/cli-spinners": {
4893 + "version": "2.9.2",
4894 + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz",
4895 + "integrity": "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==",
4896 + "license": "MIT",
4897 + "engines": {
4898 + "node": ">=6"
4899 + },
4900 + "funding": {
4901 + "url": "https://github.com/sponsors/sindresorhus"
4902 + }
4903 + },
4904 + "node_modules/cliui": {
4905 + "version": "8.0.1",
4906 + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz",
4907 + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==",
4908 + "license": "ISC",
4909 + "dependencies": {
4910 + "string-width": "^4.2.0",
4911 + "strip-ansi": "^6.0.1",
4912 + "wrap-ansi": "^7.0.0"
4913 + },
4914 + "engines": {
4915 + "node": ">=12"
4916 + }
4917 + },
4918 + "node_modules/cliui/node_modules/emoji-regex": {
4919 + "version": "8.0.0",
4920 + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
4921 + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
4922 + "license": "MIT"
4923 + },
4924 + "node_modules/cliui/node_modules/string-width": {
4925 + "version": "4.2.3",
4926 + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
4927 + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
4928 + "license": "MIT",
4929 + "dependencies": {
4930 + "emoji-regex": "^8.0.0",
4931 + "is-fullwidth-code-point": "^3.0.0",
4932 + "strip-ansi": "^6.0.1"
4933 + },
4934 + "engines": {
4935 + "node": ">=8"
4936 + }
4937 + },
4938 + "node_modules/cliui/node_modules/strip-ansi": {
4939 + "version": "6.0.1",
4940 + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
4941 + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
4942 + "license": "MIT",
4943 + "dependencies": {
4944 + "ansi-regex": "^5.0.1"
4945 + },
4946 + "engines": {
4947 + "node": ">=8"
4948 + }
4949 + },
4950 + "node_modules/clone": {
4951 + "version": "1.0.4",
4952 + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz",
4953 + "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==",
4954 + "license": "MIT",
4955 + "engines": {
4956 + "node": ">=0.8"
4957 + }
4958 + },
4959 + "node_modules/clone-deep": {
4960 + "version": "4.0.1",
4961 + "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz",
4962 + "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==",
4963 + "license": "MIT",
4964 + "dependencies": {
4965 + "is-plain-object": "^2.0.4",
4966 + "kind-of": "^6.0.2",
4967 + "shallow-clone": "^3.0.0"
4968 + },
4969 + "engines": {
4970 + "node": ">=6"
4971 + }
4972 + },
4973 + "node_modules/color-convert": {
4974 + "version": "2.0.1",
4975 + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
4976 + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
4977 + "license": "MIT",
4978 + "dependencies": {
4979 + "color-name": "~1.1.4"
4980 + },
4981 + "engines": {
4982 + "node": ">=7.0.0"
4983 + }
4984 + },
4985 + "node_modules/color-name": {
4986 + "version": "1.1.4",
4987 + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
4988 + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
4989 + "license": "MIT"
4990 + },
4991 + "node_modules/combined-stream": {
4992 + "version": "1.0.8",
4993 + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
4994 + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
4995 + "license": "MIT",
4996 + "dependencies": {
4997 + "delayed-stream": "~1.0.0"
4998 + },
4999 + "engines": {

This file is too large to show in full.

sdk/react-native/example/package.json new
+23
@@ -0,0 +1,23 @@
1 +{
2 + "name": "onde-example",
3 + "version": "0.0.1",
4 + "private": true,
5 + "scripts": {
6 + "start": "expo start",
7 + "ios": "expo run:ios",
8 + "android": "expo run:android"
9 + },
10 + "dependencies": {
11 + "@ondeinference/react-native": "file:..",
12 + "expo": "~52.0.0",
13 + "expo-asset": "^55.0.14",
14 + "expo-status-bar": "~2.0.0",
15 + "react": "18.3.1",
16 + "react-native": "0.76.7",
17 + "react-native-safe-area-context": "~5.0.0"
18 + },
19 + "devDependencies": {
20 + "@types/react": "~18.3.0",
21 + "typescript": "~5.6.0"
22 + }
23 +}
sdk/react-native/example/tsconfig.json new
+7
@@ -0,0 +1,7 @@
1 +{
2 + "extends": "expo/tsconfig.base",
3 + "compilerOptions": {
4 + "strict": true,
5 + "jsx": "react-jsx"
6 + }
7 +}
sdk/react-native/expo-module.config.json new
+9
@@ -0,0 +1,9 @@
1 +{
2 + "platforms": ["ios", "android"],
3 + "ios": {
4 + "modules": ["OndeInferenceModule"]
5 + },
6 + "android": {
7 + "modules": ["com.ondeinference.OndeInferenceModule"]
8 + }
9 +}
sdk/react-native/ios/OndeInference.podspec new
+31
@@ -0,0 +1,31 @@
1 +require 'json'
2 +
3 +package = JSON.parse(File.read(File.join(__dir__, '..', 'package.json')))
4 +
5 +Pod::Spec.new do |s|
6 + s.name = 'OndeInference'
7 + s.version = package['version']
8 + s.summary = package['description']
9 + s.description = package['description']
10 + s.license = package['license']
11 + s.author = package['author']
12 + s.homepage = 'https://ondeinference.com'
13 + s.platforms = { :ios => '16.0' }
14 + s.source = { git: 'https://github.com/ondeinference/onde.git', tag: s.version.to_s }
15 + s.static_framework = true
16 +
17 + s.dependency 'ExpoModulesCore'
18 +
19 + s.source_files = '**/*.{h,m,mm,swift,hpp,cpp}'
20 +
21 + # XCFramework bundles both device (aarch64-apple-ios) and simulator
22 + # (aarch64-apple-ios-sim) slices. CocoaPods selects the right one
23 + # automatically based on the target SDK.
24 + s.vendored_frameworks = 'rust/OndeReactNative.xcframework'
25 +
26 + s.pod_target_xcconfig = {
27 + 'DEFINES_MODULE' => 'YES',
28 + 'SWIFT_COMPILATION_MODE' => 'wholemodule',
29 + 'OTHER_LDFLAGS' => '-londe_react_native',
30 + }
31 +end
sdk/react-native/ios/OndeInferenceModule.swift new
+394
@@ -0,0 +1,394 @@
1 +import ExpoModulesCore
2 +import Foundation
3 +
4 +private let ondeAppGroupIdentifier = "group.com.ondeinference.apps"
5 +
6 +// MARK: - Rust C FFI declarations
7 +
8 +// Engine lifecycle
9 +@_silgen_name("onde_engine_create")
10 +func onde_engine_create() -> UnsafeMutableRawPointer?
11 +
12 +@_silgen_name("onde_engine_destroy")
13 +func onde_engine_destroy(_ engine: UnsafeMutableRawPointer)
14 +
15 +// Model loading / unloading
16 +@_silgen_name("onde_engine_load_default_model")
17 +func onde_engine_load_default_model(
18 + _ engine: UnsafeMutableRawPointer,
19 + _ systemPrompt: UnsafePointer<CChar>?,
20 + _ samplingJson: UnsafePointer<CChar>?
21 +) -> UnsafeMutablePointer<CChar>?
22 +
23 +@_silgen_name("onde_engine_load_model")
24 +func onde_engine_load_model(
25 + _ engine: UnsafeMutableRawPointer,
26 + _ configJson: UnsafePointer<CChar>,
27 + _ systemPrompt: UnsafePointer<CChar>?,
28 + _ samplingJson: UnsafePointer<CChar>?
29 +) -> UnsafeMutablePointer<CChar>?
30 +
31 +@_silgen_name("onde_engine_unload_model")
32 +func onde_engine_unload_model(_ engine: UnsafeMutableRawPointer) -> UnsafeMutablePointer<CChar>?
33 +
34 +@_silgen_name("onde_engine_is_loaded")
35 +func onde_engine_is_loaded(_ engine: UnsafeMutableRawPointer) -> Bool
36 +
37 +// Engine info
38 +@_silgen_name("onde_engine_info")
39 +func onde_engine_info(_ engine: UnsafeMutableRawPointer) -> UnsafeMutablePointer<CChar>?
40 +
41 +// System prompt
42 +@_silgen_name("onde_engine_set_system_prompt")
43 +func onde_engine_set_system_prompt(
44 + _ engine: UnsafeMutableRawPointer, _ prompt: UnsafePointer<CChar>)
45 +
46 +@_silgen_name("onde_engine_clear_system_prompt")
47 +func onde_engine_clear_system_prompt(_ engine: UnsafeMutableRawPointer)
48 +
49 +// Sampling
50 +@_silgen_name("onde_engine_set_sampling")
51 +func onde_engine_set_sampling(
52 + _ engine: UnsafeMutableRawPointer, _ samplingJson: UnsafePointer<CChar>)
53 +
54 +// History
55 +@_silgen_name("onde_engine_history")
56 +func onde_engine_history(_ engine: UnsafeMutableRawPointer) -> UnsafeMutablePointer<CChar>?
57 +
58 +@_silgen_name("onde_engine_clear_history")
59 +func onde_engine_clear_history(_ engine: UnsafeMutableRawPointer) -> UInt64
60 +
61 +@_silgen_name("onde_engine_push_history")
62 +func onde_engine_push_history(
63 + _ engine: UnsafeMutableRawPointer, _ messageJson: UnsafePointer<CChar>)
64 +
65 +// Inference
66 +@_silgen_name("onde_engine_send_message")
67 +func onde_engine_send_message(
68 + _ engine: UnsafeMutableRawPointer,
69 + _ message: UnsafePointer<CChar>
70 +) -> UnsafeMutablePointer<CChar>?
71 +
72 +@_silgen_name("onde_engine_generate")
73 +func onde_engine_generate(
74 + _ engine: UnsafeMutableRawPointer,
75 + _ messagesJson: UnsafePointer<CChar>,
76 + _ samplingJson: UnsafePointer<CChar>?
77 +) -> UnsafeMutablePointer<CChar>?
78 +
79 +// Model config free functions
80 +@_silgen_name("onde_default_model_config")
81 +func onde_default_model_config() -> UnsafeMutablePointer<CChar>?
82 +
83 +@_silgen_name("onde_qwen25_1_5b_config")
84 +func onde_qwen25_1_5b_config() -> UnsafeMutablePointer<CChar>?
85 +
86 +@_silgen_name("onde_qwen25_3b_config")
87 +func onde_qwen25_3b_config() -> UnsafeMutablePointer<CChar>?
88 +
89 +// Sampling config free functions
90 +@_silgen_name("onde_default_sampling_config")
91 +func onde_default_sampling_config() -> UnsafeMutablePointer<CChar>?
92 +
93 +@_silgen_name("onde_deterministic_sampling_config")
94 +func onde_deterministic_sampling_config() -> UnsafeMutablePointer<CChar>?
95 +
96 +@_silgen_name("onde_mobile_sampling_config")
97 +func onde_mobile_sampling_config() -> UnsafeMutablePointer<CChar>?
98 +
99 +// Memory management
100 +@_silgen_name("onde_free_string")
101 +func onde_free_string(_ ptr: UnsafeMutablePointer<CChar>?)
102 +
103 +// MARK: - Error types
104 +
105 +enum OndeError: Error, CustomStringConvertible {
106 + case engineNotInitialized
107 + case invalidResponse
108 + case inferenceError(String)
109 +
110 + var description: String {
111 + switch self {
112 + case .engineNotInitialized:
113 + return "Onde engine is not initialized"
114 + case .invalidResponse:
115 + return "Invalid response from Onde engine"
116 + case .inferenceError(let message):
117 + return "Onde inference error: \(message)"
118 + }
119 + }
120 +}
121 +
122 +// MARK: - Expo Module
123 +
124 +public class OndeInferenceModule: Module {
125 + private var enginePtr: UnsafeMutableRawPointer?
126 +
127 + // MARK: Helpers
128 +
129 + private func configureApplicationFilesystem() throws {
130 + let fileManager = FileManager.default
131 +
132 + let containerDirectory: URL
133 + if let appGroupDirectory = fileManager.containerURL(
134 + forSecurityApplicationGroupIdentifier: ondeAppGroupIdentifier
135 + ) {
136 + containerDirectory = appGroupDirectory
137 + } else {
138 + containerDirectory = try fileManager.url(
139 + for: .applicationSupportDirectory,
140 + in: .userDomainMask,
141 + appropriateFor: nil,
142 + create: true
143 + )
144 + }
145 +
146 + let hfHomeDirectory = containerDirectory.appendingPathComponent("models", isDirectory: true)
147 + let hfHubCacheDirectory = hfHomeDirectory.appendingPathComponent("hub", isDirectory: true)
148 + let tempDirectory = containerDirectory.appendingPathComponent("tmp", isDirectory: true)
149 +
150 + try fileManager.createDirectory(at: hfHomeDirectory, withIntermediateDirectories: true)
151 + try fileManager.createDirectory(at: hfHubCacheDirectory, withIntermediateDirectories: true)
152 + try fileManager.createDirectory(at: tempDirectory, withIntermediateDirectories: true)
153 +
154 + setenv("HF_HOME", hfHomeDirectory.path, 1)
155 + setenv("HF_HUB_CACHE", hfHubCacheDirectory.path, 1)
156 + setenv("HUGGINGFACE_HUB_CACHE", hfHubCacheDirectory.path, 1)
157 + setenv("TMPDIR", tempDirectory.path, 1)
158 + }
159 +
160 + /// Consume a Rust-allocated C string: copy it into a Swift `String`, then
161 + /// free the original allocation via `onde_free_string`.
162 + private func consumeRustString(_ ptr: UnsafeMutablePointer<CChar>?) -> String? {
163 + guard let ptr = ptr else { return nil }
164 + let str = String(cString: ptr)
165 + onde_free_string(ptr)
166 + return str
167 + }
168 +
169 + /// Validate a JSON string returned by the Rust FFI.
170 + /// If the JSON contains an `"error"` key, throw an `OndeError.inferenceError`.
171 + /// Otherwise return the original JSON string unchanged so the TypeScript
172 + /// wrapper can parse it consistently.
173 + private func validateJsonResult(_ json: String?) throws -> String {
174 + guard let json = json,
175 + let data = json.data(using: .utf8),
176 + let dict = try JSONSerialization.jsonObject(with: data) as? [String: Any]
177 + else {
178 + throw OndeError.invalidResponse
179 + }
180 + if let error = dict["error"] as? String {
181 + throw OndeError.inferenceError(error)
182 + }
183 + return json
184 + }
185 +
186 + /// Validate that a JSON string is an array payload and return it unchanged.
187 + private func validateJsonArray(_ json: String?) throws -> String {
188 + guard let json = json,
189 + let data = json.data(using: .utf8),
190 + (try JSONSerialization.jsonObject(with: data) as? [[String: Any]]) != nil
191 + else {
192 + throw OndeError.invalidResponse
193 + }
194 + return json
195 + }
196 +
197 + // MARK: Module definition
198 +
199 + public func definition() -> ModuleDefinition {
200 + Name("OndeInference")
201 +
202 + OnCreate {
203 + do {
204 + try self.configureApplicationFilesystem()
205 + self.enginePtr = onde_engine_create()
206 + } catch {
207 + self.enginePtr = nil
208 + }
209 + }
210 +
211 + OnDestroy {
212 + if let ptr = self.enginePtr {
213 + onde_engine_destroy(ptr)
214 + self.enginePtr = nil
215 + }
216 + }
217 +
218 + // MARK: Sync functions
219 +
220 + Function("isLoaded") { () -> Bool in
221 + guard let ptr = self.enginePtr else { return false }
222 + return onde_engine_is_loaded(ptr)
223 + }
224 +
225 + Function("setSystemPrompt") { (prompt: String) in
226 + guard let ptr = self.enginePtr else { return }
227 + prompt.withCString { cPrompt in
228 + onde_engine_set_system_prompt(ptr, cPrompt)
229 + }
230 + }
231 +
232 + Function("clearSystemPrompt") { () in
233 + guard let ptr = self.enginePtr else { return }
234 + onde_engine_clear_system_prompt(ptr)
235 + }
236 +
237 + Function("setSampling") { (samplingJson: String) in
238 + guard let ptr = self.enginePtr else { return }
239 + samplingJson.withCString { cJson in
240 + onde_engine_set_sampling(ptr, cJson)
241 + }
242 + }
243 +
244 + Function("clearHistory") { () -> Int in
245 + guard let ptr = self.enginePtr else { return 0 }
246 + return Int(onde_engine_clear_history(ptr))
247 + }
248 +
249 + Function("pushHistory") { (messageJson: String) in
250 + guard let ptr = self.enginePtr else { return }
251 + messageJson.withCString { cJson in
252 + onde_engine_push_history(ptr, cJson)
253 + }
254 + }
255 +
256 + // MARK: Config free functions (no engine needed)
257 +
258 + Function("defaultModelConfig") { () -> String in
259 + let result = self.consumeRustString(onde_default_model_config())
260 + return try self.validateJsonResult(result)
261 + }
262 +
263 + Function("qwen251_5bConfig") { () -> String in
264 + let result = self.consumeRustString(onde_qwen25_1_5b_config())
265 + return try self.validateJsonResult(result)
266 + }
267 +
268 + Function("qwen253bConfig") { () -> String in
269 + let result = self.consumeRustString(onde_qwen25_3b_config())
270 + return try self.validateJsonResult(result)
271 + }
272 +
273 + Function("defaultSamplingConfig") { () -> String in
274 + let result = self.consumeRustString(onde_default_sampling_config())
275 + return try self.validateJsonResult(result)
276 + }
277 +
278 + Function("deterministicSamplingConfig") { () -> String in
279 + let result = self.consumeRustString(onde_deterministic_sampling_config())
280 + return try self.validateJsonResult(result)
281 + }
282 +
283 + Function("mobileSamplingConfig") { () -> String in
284 + let result = self.consumeRustString(onde_mobile_sampling_config())
285 + return try self.validateJsonResult(result)
286 + }
287 +
288 + // MARK: Async functions
289 +
290 + AsyncFunction("loadDefaultModel") {
291 + (systemPrompt: String?, samplingJson: String?) -> String in
292 + try self.configureApplicationFilesystem()
293 + guard let ptr = self.enginePtr else {
294 + throw OndeError.engineNotInitialized
295 + }
296 + let result: String?
297 + if let sp = systemPrompt, let sj = samplingJson {
298 + result = sp.withCString { cSp in
299 + sj.withCString { cSj in
300 + self.consumeRustString(onde_engine_load_default_model(ptr, cSp, cSj))
301 + }
302 + }
303 + } else if let sp = systemPrompt {
304 + result = sp.withCString { cSp in
305 + self.consumeRustString(onde_engine_load_default_model(ptr, cSp, nil))
306 + }
307 + } else if let sj = samplingJson {
308 + result = sj.withCString { cSj in
309 + self.consumeRustString(onde_engine_load_default_model(ptr, nil, cSj))
310 + }
311 + } else {
312 + result = self.consumeRustString(onde_engine_load_default_model(ptr, nil, nil))
313 + }
314 + return try self.validateJsonResult(result)
315 + }
316 +
317 + AsyncFunction("loadModel") {
318 + (configJson: String, systemPrompt: String?, samplingJson: String?) -> String in
319 + try self.configureApplicationFilesystem()
320 + guard let ptr = self.enginePtr else {
321 + throw OndeError.engineNotInitialized
322 + }
323 + let result: String? = configJson.withCString { cConfig in
324 + if let sp = systemPrompt, let sj = samplingJson {
325 + return sp.withCString { cSp in
326 + sj.withCString { cSj in
327 + self.consumeRustString(onde_engine_load_model(ptr, cConfig, cSp, cSj))
328 + }
329 + }
330 + } else if let sp = systemPrompt {
331 + return sp.withCString { cSp in
332 + self.consumeRustString(onde_engine_load_model(ptr, cConfig, cSp, nil))
333 + }
334 + } else if let sj = samplingJson {
335 + return sj.withCString { cSj in
336 + self.consumeRustString(onde_engine_load_model(ptr, cConfig, nil, cSj))
337 + }
338 + } else {
339 + return self.consumeRustString(onde_engine_load_model(ptr, cConfig, nil, nil))
340 + }
341 + }
342 + return try self.validateJsonResult(result)
343 + }
344 +
345 + AsyncFunction("unloadModel") { () -> String in
346 + guard let ptr = self.enginePtr else {
347 + throw OndeError.engineNotInitialized
348 + }
349 + let result = self.consumeRustString(onde_engine_unload_model(ptr))
350 + return try self.validateJsonResult(result)
351 + }
352 +
353 + AsyncFunction("info") { () -> String in
354 + guard let ptr = self.enginePtr else {
355 + throw OndeError.engineNotInitialized
356 + }
357 + let result = self.consumeRustString(onde_engine_info(ptr))
358 + return try self.validateJsonResult(result)
359 + }
360 +
361 + AsyncFunction("history") { () -> String in
362 + guard let ptr = self.enginePtr else { return "[]" }
363 + let result = self.consumeRustString(onde_engine_history(ptr))
364 + return try self.validateJsonArray(result)
365 + }
366 +
367 + AsyncFunction("sendMessage") { (message: String) -> String in
368 + guard let ptr = self.enginePtr else {
369 + throw OndeError.engineNotInitialized
370 + }
371 + let result = message.withCString { cMessage in
372 + self.consumeRustString(onde_engine_send_message(ptr, cMessage))
373 + }
374 + return try self.validateJsonResult(result)
375 + }
376 +
377 + AsyncFunction("generate") {
378 + (messagesJson: String, samplingJson: String?) -> String in
379 + guard let ptr = self.enginePtr else {
380 + throw OndeError.engineNotInitialized
381 + }
382 + let result: String? = messagesJson.withCString { cMessages in
383 + if let sj = samplingJson {
384 + return sj.withCString { cSj in
385 + self.consumeRustString(onde_engine_generate(ptr, cMessages, cSj))
386 + }
387 + } else {
388 + return self.consumeRustString(onde_engine_generate(ptr, cMessages, nil))
389 + }
390 + }
391 + return try self.validateJsonResult(result)
392 + }
393 + }
394 +}
sdk/react-native/package-lock.json new
+79
@@ -0,0 +1,79 @@
1 +{
2 + "name": "@ondeinference/react-native",
3 + "version": "0.1.3",
4 + "lockfileVersion": 3,
5 + "requires": true,
6 + "packages": {
7 + "": {
8 + "name": "@ondeinference/react-native",
9 + "version": "0.1.3",
10 + "license": "MIT OR Apache-2.0",
11 + "devDependencies": {
12 + "expo-modules-core": "^2.0.0",
13 + "typescript": "^5.0.0"
14 + },
15 + "engines": {
16 + "node": ">=18.0.0"
17 + },
18 + "peerDependencies": {
19 + "expo": ">=52.0.0",
20 + "react": ">=18.0.0",
21 + "react-native": ">=0.76.0"
22 + }
23 + },
24 + "node_modules/expo-modules-core": {
25 + "version": "2.5.0",
26 + "resolved": "https://registry.npmjs.org/expo-modules-core/-/expo-modules-core-2.5.0.tgz",
27 + "integrity": "sha512-aIbQxZE2vdCKsolQUl6Q9Farlf8tjh/ROR4hfN1qT7QBGPl1XrJGnaOKkcgYaGrlzCPg/7IBe0Np67GzKMZKKQ==",
28 + "dev": true,
29 + "license": "MIT",
30 + "dependencies": {
31 + "invariant": "^2.2.4"
32 + }
33 + },
34 + "node_modules/invariant": {
35 + "version": "2.2.4",
36 + "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz",
37 + "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==",
38 + "dev": true,
39 + "license": "MIT",
40 + "dependencies": {
41 + "loose-envify": "^1.0.0"
42 + }
43 + },
44 + "node_modules/js-tokens": {
45 + "version": "4.0.0",
46 + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
47 + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
48 + "dev": true,
49 + "license": "MIT"
50 + },
51 + "node_modules/loose-envify": {
52 + "version": "1.4.0",
53 + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz",
54 + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==",
55 + "dev": true,
56 + "license": "MIT",
57 + "dependencies": {
58 + "js-tokens": "^3.0.0 || ^4.0.0"
59 + },
60 + "bin": {
61 + "loose-envify": "cli.js"
62 + }
63 + },
64 + "node_modules/typescript": {
65 + "version": "5.9.3",
66 + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz",
67 + "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==",
68 + "dev": true,
69 + "license": "Apache-2.0",
70 + "bin": {
71 + "tsc": "bin/tsc",
72 + "tsserver": "bin/tsserver"
73 + },
74 + "engines": {
75 + "node": ">=14.17"
76 + }
77 + }
78 + }
79 +}
sdk/react-native/package.json new
+58
@@ -0,0 +1,58 @@
1 +{
2 + "name": "@ondeinference/react-native",
3 + "version": "0.1.3",
4 + "description": "On-device LLM inference for React Native. Run Qwen 2.5 models locally with Metal on iOS, CPU on Android. No cloud, no API key.",
5 + "main": "build/index.js",
6 + "types": "build/index.d.ts",
7 + "scripts": {
8 + "build": "tsc",
9 + "clean": "rm -rf build",
10 + "prepublishOnly": "npm run clean && npm run build",
11 + "build:rust:ios": "./scripts/build-rust.sh ios",
12 + "build:rust:android": "./scripts/build-rust.sh android",
13 + "build:rust": "./scripts/build-rust.sh all"
14 + },
15 + "keywords": [
16 + "react-native",
17 + "expo",
18 + "inference",
19 + "llm",
20 + "on-device",
21 + "ai",
22 + "metal",
23 + "qwen",
24 + "rust",
25 + "mistral"
26 + ],
27 + "license": "MIT OR Apache-2.0",
28 + "author": "Onde Inference <hello@ondeinference.com>",
29 + "homepage": "https://ondeinference.com",
30 + "repository": {
31 + "type": "git",
32 + "url": "https://github.com/ondeinference/onde",
33 + "directory": "sdk/react-native"
34 + },
35 + "bugs": {
36 + "url": "https://github.com/ondeinference/onde/issues"
37 + },
38 + "devDependencies": {
39 + "expo-modules-core": "^2.0.0",
40 + "typescript": "^5.0.0"
41 + },
42 + "peerDependencies": {
43 + "expo": ">=52.0.0",
44 + "react": ">=18.0.0",
45 + "react-native": ">=0.76.0"
46 + },
47 + "engines": {
48 + "node": ">=18.0.0"
49 + },
50 + "files": [
51 + "build/",
52 + "ios/",
53 + "android/",
54 + "rust/",
55 + "scripts/",
56 + "expo-module.config.json"
57 + ]
58 +}
sdk/react-native/rust/Cargo.lock new
+7526
@@ -0,0 +1,7526 @@
1 +# This file is automatically @generated by Cargo.
2 +# It is not intended for manual editing.
3 +version = 4
4 +
5 +[[package]]
6 +name = "Inflector"
7 +version = "0.11.4"
8 +source = "registry+https://github.com/rust-lang/crates.io-index"
9 +checksum = "fe438c63458706e03479442743baae6c88256498e6431708f6dfc520a26515d3"
10 +dependencies = [
11 + "lazy_static",
12 + "regex",
13 +]
14 +
15 +[[package]]
16 +name = "adler2"
17 +version = "2.0.1"
18 +source = "registry+https://github.com/rust-lang/crates.io-index"
19 +checksum = "320119579fcad9c21884f5c4861d16174d0e06250625266f50fe6898340abefa"
20 +
21 +[[package]]
22 +name = "ahash"
23 +version = "0.8.12"
24 +source = "registry+https://github.com/rust-lang/crates.io-index"
25 +checksum = "5a15f179cd60c4584b8a8c596927aadc462e27f2ca70c04e0071964a73ba7a75"
26 +dependencies = [
27 + "cfg-if",
28 + "getrandom 0.3.4",
29 + "once_cell",
30 + "serde",
31 + "version_check",
32 + "zerocopy",
33 +]
34 +
35 +[[package]]
36 +name = "aho-corasick"
37 +version = "1.1.4"
38 +source = "registry+https://github.com/rust-lang/crates.io-index"
39 +checksum = "ddd31a130427c27518df266943a5308ed92d4b226cc639f5a8f1002816174301"
40 +dependencies = [
41 + "memchr",
42 +]
43 +
44 +[[package]]
45 +name = "akin"
46 +version = "0.4.0"
47 +source = "registry+https://github.com/rust-lang/crates.io-index"
48 +checksum = "1763692fc1416554cf051efc56a3de5595eca47299d731cc5c2b583adf8b4d2f"
49 +
50 +[[package]]
51 +name = "aligned"
52 +version = "0.4.3"
53 +source = "registry+https://github.com/rust-lang/crates.io-index"
54 +checksum = "ee4508988c62edf04abd8d92897fca0c2995d907ce1dfeaf369dac3716a40685"
55 +dependencies = [
56 + "as-slice",
57 +]
58 +
59 +[[package]]
60 +name = "aligned-vec"
61 +version = "0.6.4"
62 +source = "registry+https://github.com/rust-lang/crates.io-index"
63 +checksum = "dc890384c8602f339876ded803c97ad529f3842aba97f6392b3dba0dd171769b"
64 +dependencies = [
65 + "equator",
66 +]
67 +
68 +[[package]]
69 +name = "allocator-api2"
70 +version = "0.2.21"
71 +source = "registry+https://github.com/rust-lang/crates.io-index"
72 +checksum = "683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923"
73 +
74 +[[package]]
75 +name = "android_system_properties"
76 +version = "0.1.5"
77 +source = "registry+https://github.com/rust-lang/crates.io-index"
78 +checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311"
79 +dependencies = [
80 + "libc",
81 +]
82 +
83 +[[package]]
84 +name = "annotate-snippets"
85 +version = "0.12.15"
86 +source = "registry+https://github.com/rust-lang/crates.io-index"
87 +checksum = "92570a3f9c98e7e84df84b71d0965ac99b1871fcd75a3773a3bd1bad13f64cf7"
88 +dependencies = [
89 + "anstyle",
90 + "memchr",
91 + "unicode-width 0.2.2",
92 +]
93 +
94 +[[package]]
95 +name = "ansi_term"
96 +version = "0.12.1"
97 +source = "registry+https://github.com/rust-lang/crates.io-index"
98 +checksum = "d52a9bb7ec0cf484c551830a7ce27bd20d67eac647e1befb56b0be4ee39a55d2"
99 +dependencies = [
100 + "winapi",
101 +]
102 +
103 +[[package]]
104 +name = "anstream"
105 +version = "1.0.0"
106 +source = "registry+https://github.com/rust-lang/crates.io-index"
107 +checksum = "824a212faf96e9acacdbd09febd34438f8f711fb84e09a8916013cd7815ca28d"
108 +dependencies = [
109 + "anstyle",
110 + "anstyle-parse",
111 + "anstyle-query",
112 + "anstyle-wincon",
113 + "colorchoice",
114 + "is_terminal_polyfill",
115 + "utf8parse",
116 +]
117 +
118 +[[package]]
119 +name = "anstyle"
120 +version = "1.0.14"
121 +source = "registry+https://github.com/rust-lang/crates.io-index"
122 +checksum = "940b3a0ca603d1eade50a4846a2afffd5ef57a9feac2c0e2ec2e14f9ead76000"
123 +
124 +[[package]]
125 +name = "anstyle-parse"
126 +version = "1.0.0"
127 +source = "registry+https://github.com/rust-lang/crates.io-index"
128 +checksum = "52ce7f38b242319f7cabaa6813055467063ecdc9d355bbb4ce0c68908cd8130e"
129 +dependencies = [
130 + "utf8parse",
131 +]
132 +
133 +[[package]]
134 +name = "anstyle-query"
135 +version = "1.1.5"
136 +source = "registry+https://github.com/rust-lang/crates.io-index"
137 +checksum = "40c48f72fd53cd289104fc64099abca73db4166ad86ea0b4341abe65af83dadc"
138 +dependencies = [
139 + "windows-sys 0.61.2",
140 +]
141 +
142 +[[package]]
143 +name = "anstyle-wincon"
144 +version = "3.0.11"
145 +source = "registry+https://github.com/rust-lang/crates.io-index"
146 +checksum = "291e6a250ff86cd4a820112fb8898808a366d8f9f58ce16d1f538353ad55747d"
147 +dependencies = [
148 + "anstyle",
149 + "once_cell_polyfill",
150 + "windows-sys 0.61.2",
151 +]
152 +
153 +[[package]]
154 +name = "anyhow"
155 +version = "1.0.102"
156 +source = "registry+https://github.com/rust-lang/crates.io-index"
157 +checksum = "7f202df86484c868dbad7eaa557ef785d5c66295e41b460ef922eca0723b842c"
158 +
159 +[[package]]
160 +name = "apodize"
161 +version = "1.0.0"
162 +source = "registry+https://github.com/rust-lang/crates.io-index"
163 +checksum = "fca387cdc0a1f9c7a7c26556d584aa2d07fc529843082e4861003cde4ab914ed"
164 +
165 +[[package]]
166 +name = "approx"
167 +version = "0.5.1"
168 +source = "registry+https://github.com/rust-lang/crates.io-index"
169 +checksum = "cab112f0a86d568ea0e627cc1d6be74a1e9cd55214684db5561995f6dad897c6"
170 +dependencies = [
171 + "num-traits",
172 +]
173 +
174 +[[package]]
175 +name = "arbitrary"
176 +version = "1.4.2"
177 +source = "registry+https://github.com/rust-lang/crates.io-index"
178 +checksum = "c3d036a3c4ab069c7b410a2ce876bd74808d2d0888a82667669f8e783a898bf1"
179 +
180 +[[package]]
181 +name = "arg_enum_proc_macro"
182 +version = "0.3.4"
183 +source = "registry+https://github.com/rust-lang/crates.io-index"
184 +checksum = "0ae92a5119aa49cdbcf6b9f893fe4e1d98b04ccbf82ee0584ad948a44a734dea"
185 +dependencies = [
186 + "proc-macro2",
187 + "quote",
188 + "syn 2.0.117",
189 +]
190 +
191 +[[package]]
192 +name = "arraydeque"
193 +version = "0.5.1"
194 +source = "registry+https://github.com/rust-lang/crates.io-index"
195 +checksum = "7d902e3d592a523def97af8f317b08ce16b7ab854c1985a0c671e6f15cebc236"
196 +
197 +[[package]]
198 +name = "arrayvec"
199 +version = "0.7.6"
200 +source = "registry+https://github.com/rust-lang/crates.io-index"
201 +checksum = "7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50"
202 +
203 +[[package]]
204 +name = "as-any"
205 +version = "0.3.2"
206 +source = "registry+https://github.com/rust-lang/crates.io-index"
207 +checksum = "b0f477b951e452a0b6b4a10b53ccd569042d1d01729b519e02074a9c0958a063"
208 +
209 +[[package]]
210 +name = "as-slice"
211 +version = "0.2.1"
212 +source = "registry+https://github.com/rust-lang/crates.io-index"
213 +checksum = "516b6b4f0e40d50dcda9365d53964ec74560ad4284da2e7fc97122cd83174516"
214 +dependencies = [
215 + "stable_deref_trait",
216 +]
217 +
218 +[[package]]
219 +name = "askama"
220 +version = "0.14.0"
221 +source = "registry+https://github.com/rust-lang/crates.io-index"
222 +checksum = "f75363874b771be265f4ffe307ca705ef6f3baa19011c149da8674a87f1b75c4"
223 +dependencies = [
224 + "askama_derive",
225 + "itoa",
226 + "percent-encoding",
227 + "serde",
228 + "serde_json",
229 +]
230 +
231 +[[package]]
232 +name = "askama_derive"
233 +version = "0.14.0"
234 +source = "registry+https://github.com/rust-lang/crates.io-index"
235 +checksum = "129397200fe83088e8a68407a8e2b1f826cf0086b21ccdb866a722c8bcd3a94f"
236 +dependencies = [
237 + "askama_parser",
238 + "basic-toml",
239 + "memchr",
240 + "proc-macro2",
241 + "quote",
242 + "rustc-hash 2.1.2",
243 + "serde",
244 + "serde_derive",
245 + "syn 2.0.117",
246 +]
247 +
248 +[[package]]
249 +name = "askama_parser"
250 +version = "0.14.0"
251 +source = "registry+https://github.com/rust-lang/crates.io-index"
252 +checksum = "d6ab5630b3d5eaf232620167977f95eb51f3432fc76852328774afbd242d4358"
253 +dependencies = [
254 + "memchr",
255 + "serde",
256 + "serde_derive",
257 + "winnow 0.7.15",
258 +]
259 +
260 +[[package]]
261 +name = "async-compat"
262 +version = "0.2.5"
263 +source = "registry+https://github.com/rust-lang/crates.io-index"
264 +checksum = "a1ba85bc55464dcbf728b56d97e119d673f4cf9062be330a9a26f3acf504a590"
265 +dependencies = [
266 + "futures-core",
267 + "futures-io",
268 + "once_cell",
269 + "pin-project-lite",
270 + "tokio",
271 +]
272 +
273 +[[package]]
274 +name = "async-trait"
275 +version = "0.1.89"
276 +source = "registry+https://github.com/rust-lang/crates.io-index"
277 +checksum = "9035ad2d096bed7955a320ee7e2230574d28fd3c3a0f186cbea1ff3c7eed5dbb"
278 +dependencies = [
279 + "proc-macro2",
280 + "quote",
281 + "syn 2.0.117",
282 +]
283 +
284 +[[package]]
285 +name = "atomic-waker"
286 +version = "1.1.2"
287 +source = "registry+https://github.com/rust-lang/crates.io-index"
288 +checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0"
289 +
290 +[[package]]
291 +name = "atty"
292 +version = "0.2.14"
293 +source = "registry+https://github.com/rust-lang/crates.io-index"
294 +checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8"
295 +dependencies = [
296 + "hermit-abi 0.1.19",
297 + "libc",
298 + "winapi",
299 +]
300 +
301 +[[package]]
302 +name = "autocfg"
303 +version = "1.5.0"
304 +source = "registry+https://github.com/rust-lang/crates.io-index"
305 +checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8"
306 +
307 +[[package]]
308 +name = "av-scenechange"
309 +version = "0.14.1"
310 +source = "registry+https://github.com/rust-lang/crates.io-index"
311 +checksum = "0f321d77c20e19b92c39e7471cf986812cbb46659d2af674adc4331ef3f18394"
312 +dependencies = [
313 + "aligned",
314 + "anyhow",
315 + "arg_enum_proc_macro",
316 + "arrayvec",
317 + "log",
318 + "num-rational",
319 + "num-traits",
320 + "pastey",
321 + "rayon",
322 + "thiserror 2.0.18",
323 + "v_frame",
324 + "y4m",
325 +]
326 +
327 +[[package]]
328 +name = "av1-grain"
329 +version = "0.2.5"
330 +source = "registry+https://github.com/rust-lang/crates.io-index"
331 +checksum = "8cfddb07216410377231960af4fcab838eaa12e013417781b78bd95ee22077f8"
332 +dependencies = [
333 + "anyhow",
334 + "arrayvec",
335 + "log",
336 + "nom 8.0.0",
337 + "num-rational",
338 + "v_frame",
339 +]
340 +
341 +[[package]]
342 +name = "avif-serialize"
343 +version = "0.8.8"
344 +source = "registry+https://github.com/rust-lang/crates.io-index"
345 +checksum = "375082f007bd67184fb9c0374614b29f9aaa604ec301635f72338bb65386a53d"
346 +dependencies = [
347 + "arrayvec",
348 +]
349 +
350 +[[package]]
351 +name = "aws-lc-rs"
352 +version = "1.16.2"
353 +source = "registry+https://github.com/rust-lang/crates.io-index"
354 +checksum = "a054912289d18629dc78375ba2c3726a3afe3ff71b4edba9dedfca0e3446d1fc"
355 +dependencies = [
356 + "aws-lc-sys",
357 + "zeroize",
358 +]
359 +
360 +[[package]]
361 +name = "aws-lc-sys"
362 +version = "0.39.1"
363 +source = "registry+https://github.com/rust-lang/crates.io-index"
364 +checksum = "83a25cf98105baa966497416dbd42565ce3a8cf8dbfd59803ec9ad46f3126399"
365 +dependencies = [
366 + "cc",
367 + "cmake",
368 + "dunce",
369 + "fs_extra",
370 +]
371 +
372 +[[package]]
373 +name = "base64"
374 +version = "0.13.1"
375 +source = "registry+https://github.com/rust-lang/crates.io-index"
376 +checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8"
377 +
378 +[[package]]
379 +name = "base64"
380 +version = "0.22.1"
381 +source = "registry+https://github.com/rust-lang/crates.io-index"
382 +checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6"
383 +
384 +[[package]]
385 +name = "basic-toml"
386 +version = "0.1.10"
387 +source = "registry+https://github.com/rust-lang/crates.io-index"
388 +checksum = "ba62675e8242a4c4e806d12f11d136e626e6c8361d6b829310732241652a178a"
389 +dependencies = [
390 + "serde",
391 +]
392 +
393 +[[package]]
394 +name = "bit-set"
395 +version = "0.5.3"
396 +source = "registry+https://github.com/rust-lang/crates.io-index"
397 +checksum = "0700ddab506f33b20a03b13996eccd309a48e5ff77d0d95926aa0210fb4e95f1"
398 +dependencies = [
399 + "bit-vec 0.6.3",
400 +]
401 +
402 +[[package]]
403 +name = "bit-set"
404 +version = "0.8.0"
405 +source = "registry+https://github.com/rust-lang/crates.io-index"
406 +checksum = "08807e080ed7f9d5433fa9b275196cfc35414f66a0c79d864dc51a0d825231a3"
407 +dependencies = [
408 + "bit-vec 0.8.0",
409 +]
410 +
411 +[[package]]
412 +name = "bit-vec"
413 +version = "0.6.3"
414 +source = "registry+https://github.com/rust-lang/crates.io-index"
415 +checksum = "349f9b6a179ed607305526ca489b34ad0a41aed5f7980fa90eb03160b69598fb"
416 +
417 +[[package]]
418 +name = "bit-vec"
419 +version = "0.8.0"
420 +source = "registry+https://github.com/rust-lang/crates.io-index"
421 +checksum = "5e764a1d40d510daf35e07be9eb06e75770908c27d411ee6c92109c9840eaaf7"
422 +
423 +[[package]]
424 +name = "bit_field"
425 +version = "0.10.3"
426 +source = "registry+https://github.com/rust-lang/crates.io-index"
427 +checksum = "1e4b40c7323adcfc0a41c4b88143ed58346ff65a288fc144329c5c45e05d70c6"
428 +
429 +[[package]]
430 +name = "bitflags"
431 +version = "1.3.2"
432 +source = "registry+https://github.com/rust-lang/crates.io-index"
433 +checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
434 +
435 +[[package]]
436 +name = "bitflags"
437 +version = "2.11.0"
438 +source = "registry+https://github.com/rust-lang/crates.io-index"
439 +checksum = "843867be96c8daad0d758b57df9392b6d8d271134fce549de6ce169ff98a92af"
440 +
441 +[[package]]
442 +name = "bitstream-io"
443 +version = "4.9.0"
444 +source = "registry+https://github.com/rust-lang/crates.io-index"
445 +checksum = "60d4bd9d1db2c6bdf285e223a7fa369d5ce98ec767dec949c6ca62863ce61757"
446 +dependencies = [
447 + "core2",
448 +]
449 +
450 +[[package]]
451 +name = "block"
452 +version = "0.1.6"
453 +source = "registry+https://github.com/rust-lang/crates.io-index"
454 +checksum = "0d8c1fef690941d3e7788d328517591fecc684c084084702d6ff1641e993699a"
455 +
456 +[[package]]
457 +name = "block-buffer"
458 +version = "0.10.4"
459 +source = "registry+https://github.com/rust-lang/crates.io-index"
460 +checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71"
461 +dependencies = [
462 + "generic-array",
463 +]
464 +
465 +[[package]]
466 +name = "block2"
467 +version = "0.6.2"
468 +source = "registry+https://github.com/rust-lang/crates.io-index"
469 +checksum = "cdeb9d870516001442e364c5220d3574d2da8dc765554b4a617230d33fa58ef5"
470 +dependencies = [
471 + "objc2",
472 +]
473 +
474 +[[package]]
475 +name = "bm25"
476 +version = "2.3.2"
477 +source = "registry+https://github.com/rust-lang/crates.io-index"
478 +checksum = "1cbd8ffdfb7b4c2ff038726178a780a94f90525ed0ad264c0afaa75dd8c18a64"
479 +dependencies = [
480 + "cached",
481 + "deunicode",
482 + "fxhash",
483 + "rust-stemmers",
484 + "stop-words",
485 + "unicode-segmentation",
486 +]
487 +
488 +[[package]]
489 +name = "bstr"
490 +version = "1.12.1"
491 +source = "registry+https://github.com/rust-lang/crates.io-index"
492 +checksum = "63044e1ae8e69f3b5a92c736ca6269b8d12fa7efe39bf34ddb06d102cf0e2cab"
493 +dependencies = [
494 + "memchr",
495 + "regex-automata",
496 + "serde",
497 +]
498 +
499 +[[package]]
500 +name = "built"
501 +version = "0.8.0"
502 +source = "registry+https://github.com/rust-lang/crates.io-index"
503 +checksum = "f4ad8f11f288f48ca24471bbd51ac257aaeaaa07adae295591266b792902ae64"
504 +
505 +[[package]]
506 +name = "bumpalo"
507 +version = "3.20.2"
508 +source = "registry+https://github.com/rust-lang/crates.io-index"
509 +checksum = "5d20789868f4b01b2f2caec9f5c4e0213b41e3e5702a50157d699ae31ced2fcb"
510 +
511 +[[package]]
512 +name = "bytemuck"
513 +version = "1.25.0"
514 +source = "registry+https://github.com/rust-lang/crates.io-index"
515 +checksum = "c8efb64bd706a16a1bdde310ae86b351e4d21550d98d056f22f8a7f7a2183fec"
516 +dependencies = [
517 + "bytemuck_derive",
518 +]
519 +
520 +[[package]]
521 +name = "bytemuck_derive"
522 +version = "1.10.2"
523 +source = "registry+https://github.com/rust-lang/crates.io-index"
524 +checksum = "f9abbd1bc6865053c427f7198e6af43bfdedc55ab791faed4fbd361d789575ff"
525 +dependencies = [
526 + "proc-macro2",
527 + "quote",
528 + "syn 2.0.117",
529 +]
530 +
531 +[[package]]
532 +name = "byteorder"
533 +version = "1.5.0"
534 +source = "registry+https://github.com/rust-lang/crates.io-index"
535 +checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b"
536 +
537 +[[package]]
538 +name = "byteorder-lite"
539 +version = "0.1.0"
540 +source = "registry+https://github.com/rust-lang/crates.io-index"
541 +checksum = "8f1fe948ff07f4bd06c30984e69f5b4899c516a3ef74f34df92a2df2ab535495"
542 +
543 +[[package]]
544 +name = "bytes"
545 +version = "1.11.1"
546 +source = "registry+https://github.com/rust-lang/crates.io-index"
547 +checksum = "1e748733b7cbc798e1434b6ac524f0c1ff2ab456fe201501e6497c8417a4fc33"
548 +
549 +[[package]]
550 +name = "cached"
551 +version = "0.56.0"
552 +source = "registry+https://github.com/rust-lang/crates.io-index"
553 +checksum = "801927ee168e17809ab8901d9f01f700cd7d8d6a6527997fee44e4b0327a253c"
554 +dependencies = [
555 + "ahash",
556 + "cached_proc_macro",
557 + "cached_proc_macro_types",
558 + "hashbrown 0.15.5",
559 + "once_cell",
560 + "thiserror 2.0.18",
561 + "web-time",
562 +]
563 +
564 +[[package]]
565 +name = "cached_proc_macro"
566 +version = "0.25.0"
567 +source = "registry+https://github.com/rust-lang/crates.io-index"
568 +checksum = "9225bdcf4e4a9a4c08bf16607908eb2fbf746828d5e0b5e019726dbf6571f201"
569 +dependencies = [
570 + "darling 0.20.11",
571 + "proc-macro2",
572 + "quote",
573 + "syn 2.0.117",
574 +]
575 +
576 +[[package]]
577 +name = "cached_proc_macro_types"
578 +version = "0.1.1"
579 +source = "registry+https://github.com/rust-lang/crates.io-index"
580 +checksum = "ade8366b8bd5ba243f0a58f036cc0ca8a2f069cff1a2351ef1cac6b083e16fc0"
581 +
582 +[[package]]
583 +name = "camino"
584 +version = "1.2.2"
585 +source = "registry+https://github.com/rust-lang/crates.io-index"
586 +checksum = "e629a66d692cb9ff1a1c664e41771b3dcaf961985a9774c0eb0bd1b51cf60a48"
587 +dependencies = [
588 + "serde_core",
589 +]
590 +
591 +[[package]]
592 +name = "candle-core"
593 +version = "0.10.2"
594 +source = "registry+https://github.com/rust-lang/crates.io-index"
595 +checksum = "6bd9895436c1ba5dc1037a19935d084b838db066ff4e15ef7dded020b7c12a4a"
596 +dependencies = [
597 + "byteorder",
598 + "candle-metal-kernels",
599 + "candle-ug",
600 + "float8",
601 + "gemm 0.19.0",
602 + "half",
603 + "libm",
604 + "memmap2",
605 + "num-traits",
606 + "num_cpus",
607 + "objc2-foundation",
608 + "objc2-metal",
609 + "rand 0.9.2",
610 + "rand_distr 0.5.1",
611 + "rayon",
612 + "safetensors 0.7.0",
613 + "thiserror 2.0.18",
614 + "tokenizers 0.22.2",
615 + "yoke 0.8.2",
616 + "zip",
617 +]
618 +
619 +[[package]]
620 +name = "candle-metal-kernels"
621 +version = "0.10.2"
622 +source = "registry+https://github.com/rust-lang/crates.io-index"
623 +checksum = "4b6b5a4cae6b4e1ab0efcee4dc05272d11b374a3d1ba121b3a961e36be54ab60"
624 +dependencies = [
625 + "half",
626 + "objc2",
627 + "objc2-foundation",
628 + "objc2-metal",
629 + "once_cell",
630 + "thiserror 2.0.18",
631 + "tracing",
632 +]
633 +
634 +[[package]]
635 +name = "candle-nn"
636 +version = "0.10.2"
637 +source = "registry+https://github.com/rust-lang/crates.io-index"
638 +checksum = "a9317a09d6530b758990ed7f625ac69ff43653bc9ee28b0464644ad1169ada87"
639 +dependencies = [
640 + "candle-core",
641 + "candle-metal-kernels",
642 + "half",
643 + "libc",
644 + "num-traits",
645 + "objc2-metal",
646 + "rayon",
647 + "safetensors 0.7.0",
648 + "serde",
649 + "thiserror 2.0.18",
650 +]
651 +
652 +[[package]]
653 +name = "candle-ug"
654 +version = "0.10.2"
655 +source = "registry+https://github.com/rust-lang/crates.io-index"
656 +checksum = "ca0fc3167cbc99c8ec1be618cb620aa21dca95038f118c3579a79370e3dc5f77"
657 +dependencies = [
658 + "ug",
659 + "ug-metal",
660 +]
661 +
662 +[[package]]
663 +name = "cargo-platform"
664 +version = "0.1.9"
665 +source = "registry+https://github.com/rust-lang/crates.io-index"
666 +checksum = "e35af189006b9c0f00a064685c727031e3ed2d8020f7ba284d78cc2671bd36ea"
667 +dependencies = [
668 + "serde",
669 +]
670 +
671 +[[package]]
672 +name = "cargo_metadata"
673 +version = "0.19.2"
674 +source = "registry+https://github.com/rust-lang/crates.io-index"
675 +checksum = "dd5eb614ed4c27c5d706420e4320fbe3216ab31fa1c33cd8246ac36dae4479ba"
676 +dependencies = [
677 + "camino",
678 + "cargo-platform",
679 + "semver",
680 + "serde",
681 + "serde_json",
682 + "thiserror 2.0.18",
683 +]
684 +
685 +[[package]]
686 +name = "castaway"
687 +version = "0.2.4"
688 +source = "registry+https://github.com/rust-lang/crates.io-index"
689 +checksum = "dec551ab6e7578819132c713a93c022a05d60159dc86e7a7050223577484c55a"
690 +dependencies = [
691 + "rustversion",
692 +]
693 +
694 +[[package]]
695 +name = "cc"
696 +version = "1.2.59"
697 +source = "registry+https://github.com/rust-lang/crates.io-index"
698 +checksum = "b7a4d3ec6524d28a329fc53654bbadc9bdd7b0431f5d65f1a56ffb28a1ee5283"
699 +dependencies = [
700 + "find-msvc-tools",
701 + "jobserver",
702 + "libc",
703 + "shlex",
704 +]
705 +
706 +[[package]]
707 +name = "cesu8"
708 +version = "1.1.0"
709 +source = "registry+https://github.com/rust-lang/crates.io-index"
710 +checksum = "6d43a04d8753f35258c91f8ec639f792891f748a1edbd759cf1dcea3382ad83c"
711 +
712 +[[package]]
713 +name = "cfg-if"
714 +version = "1.0.4"
715 +source = "registry+https://github.com/rust-lang/crates.io-index"
716 +checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801"
717 +
718 +[[package]]
719 +name = "cfg_aliases"
720 +version = "0.2.1"
721 +source = "registry+https://github.com/rust-lang/crates.io-index"
722 +checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724"
723 +
724 +[[package]]
725 +name = "cfgrammar"
726 +version = "0.14.1"
727 +source = "registry+https://github.com/rust-lang/crates.io-index"
728 +checksum = "3efdd8f0bddcc9e33f4a664d0f28bc4e51cd5367c16284087a95313104371865"
729 +dependencies = [
730 + "indexmap 2.14.0",
731 + "num-traits",
732 + "proc-macro2",
733 + "quote",
734 + "regex",
735 + "vob",
736 +]
737 +
738 +[[package]]
739 +name = "chrono"
740 +version = "0.4.44"
741 +source = "registry+https://github.com/rust-lang/crates.io-index"
742 +checksum = "c673075a2e0e5f4a1dde27ce9dee1ea4558c7ffe648f576438a20ca1d2acc4b0"
743 +dependencies = [
744 + "iana-time-zone",
745 + "js-sys",
746 + "num-traits",
747 + "serde",
748 + "wasm-bindgen",
749 + "windows-link 0.2.1",
750 +]
751 +
752 +[[package]]
753 +name = "clap"
754 +version = "2.34.0"
755 +source = "registry+https://github.com/rust-lang/crates.io-index"
756 +checksum = "a0610544180c38b88101fecf2dd634b174a62eef6946f84dfc6a7127512b381c"
757 +dependencies = [
758 + "ansi_term",
759 + "atty",
760 + "bitflags 1.3.2",
761 + "strsim 0.8.0",
762 + "textwrap 0.11.0",
763 + "unicode-width 0.1.14",
764 + "vec_map",
765 +]
766 +
767 +[[package]]
768 +name = "clap"
769 +version = "4.6.0"
770 +source = "registry+https://github.com/rust-lang/crates.io-index"
771 +checksum = "b193af5b67834b676abd72466a96c1024e6a6ad978a1f484bd90b85c94041351"
772 +dependencies = [
773 + "clap_builder",
774 + "clap_derive",
775 +]
776 +
777 +[[package]]
778 +name = "clap_builder"
779 +version = "4.6.0"
780 +source = "registry+https://github.com/rust-lang/crates.io-index"
781 +checksum = "714a53001bf66416adb0e2ef5ac857140e7dc3a0c48fb28b2f10762fc4b5069f"
782 +dependencies = [
783 + "anstream",
784 + "anstyle",
785 + "clap_lex",
786 + "strsim 0.11.1",
787 + "terminal_size",
788 +]
789 +
790 +[[package]]
791 +name = "clap_derive"
792 +version = "4.6.0"
793 +source = "registry+https://github.com/rust-lang/crates.io-index"
794 +checksum = "1110bd8a634a1ab8cb04345d8d878267d57c3cf1b38d91b71af6686408bbca6a"
795 +dependencies = [
796 + "heck 0.5.0",
797 + "proc-macro2",
798 + "quote",
799 + "syn 2.0.117",
800 +]
801 +
802 +[[package]]
803 +name = "clap_lex"
804 +version = "1.1.0"
805 +source = "registry+https://github.com/rust-lang/crates.io-index"
806 +checksum = "c8d4a3bb8b1e0c1050499d1815f5ab16d04f0959b233085fb31653fbfc9d98f9"
807 +
808 +[[package]]
809 +name = "cmake"
810 +version = "0.1.58"
811 +source = "registry+https://github.com/rust-lang/crates.io-index"
812 +checksum = "c0f78a02292a74a88ac736019ab962ece0bc380e3f977bf72e376c5d78ff0678"
813 +dependencies = [
814 + "cc",
815 +]
816 +
817 +[[package]]
818 +name = "color_quant"
819 +version = "1.1.0"
820 +source = "registry+https://github.com/rust-lang/crates.io-index"
821 +checksum = "3d7b894f5411737b7867f4827955924d7c254fc9f4d91a6aad6b097804b1018b"
822 +
823 +[[package]]
824 +name = "colorchoice"
825 +version = "1.0.5"
826 +source = "registry+https://github.com/rust-lang/crates.io-index"
827 +checksum = "1d07550c9036bf2ae0c684c4297d503f838287c83c53686d05370d0e139ae570"
828 +
829 +[[package]]
830 +name = "combine"
831 +version = "4.6.7"
832 +source = "registry+https://github.com/rust-lang/crates.io-index"
833 +checksum = "ba5a308b75df32fe02788e748662718f03fde005016435c444eea572398219fd"
834 +dependencies = [
835 + "bytes",
836 + "memchr",
837 +]
838 +
839 +[[package]]
840 +name = "compact_str"
841 +version = "0.9.0"
842 +source = "registry+https://github.com/rust-lang/crates.io-index"
843 +checksum = "3fdb1325a1cece981e8a296ab8f0f9b63ae357bd0784a9faaf548cc7b480707a"
844 +dependencies = [
845 + "castaway",
846 + "cfg-if",
847 + "itoa",
848 + "rustversion",
849 + "ryu",
850 + "serde",
851 + "static_assertions",
852 +]
853 +
854 +[[package]]
855 +name = "console"
856 +version = "0.15.11"
857 +source = "registry+https://github.com/rust-lang/crates.io-index"
858 +checksum = "054ccb5b10f9f2cbf51eb355ca1d05c2d279ce1804688d0db74b4733a5aeafd8"
859 +dependencies = [
860 + "encode_unicode",
861 + "libc",
862 + "once_cell",
863 + "unicode-width 0.2.2",
864 + "windows-sys 0.59.0",
865 +]
866 +
867 +[[package]]
868 +name = "console"
869 +version = "0.16.3"
870 +source = "registry+https://github.com/rust-lang/crates.io-index"
871 +checksum = "d64e8af5551369d19cf50138de61f1c42074ab970f74e99be916646777f8fc87"
872 +dependencies = [
873 + "encode_unicode",
874 + "libc",
875 + "unicode-width 0.2.2",
876 + "windows-sys 0.61.2",
877 +]
878 +
879 +[[package]]
880 +name = "convert_case"
881 +version = "0.6.0"
882 +source = "registry+https://github.com/rust-lang/crates.io-index"
883 +checksum = "ec182b0ca2f35d8fc196cf3404988fd8b8c739a4d270ff118a398feb0cbec1ca"
884 +dependencies = [
885 + "unicode-segmentation",
886 +]
887 +
888 +[[package]]
889 +name = "convert_case"
890 +version = "0.10.0"
891 +source = "registry+https://github.com/rust-lang/crates.io-index"
892 +checksum = "633458d4ef8c78b72454de2d54fd6ab2e60f9e02be22f3c6104cdc8a4e0fceb9"
893 +dependencies = [
894 + "unicode-segmentation",
895 +]
896 +
897 +[[package]]
898 +name = "core-foundation"
899 +version = "0.9.4"
900 +source = "registry+https://github.com/rust-lang/crates.io-index"
901 +checksum = "91e195e091a93c46f7102ec7818a2aa394e1e1771c3ab4825963fa03e45afb8f"
902 +dependencies = [
903 + "core-foundation-sys",
904 + "libc",
905 +]
906 +
907 +[[package]]
908 +name = "core-foundation"
909 +version = "0.10.1"
910 +source = "registry+https://github.com/rust-lang/crates.io-index"
911 +checksum = "b2a6cd9ae233e7f62ba4e9353e81a88df7fc8a5987b8d445b4d90c879bd156f6"
912 +dependencies = [
913 + "core-foundation-sys",
914 + "libc",
915 +]
916 +
917 +[[package]]
918 +name = "core-foundation-sys"
919 +version = "0.8.7"
920 +source = "registry+https://github.com/rust-lang/crates.io-index"
921 +checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b"
922 +
923 +[[package]]
924 +name = "core-graphics-types"
925 +version = "0.1.3"
926 +source = "registry+https://github.com/rust-lang/crates.io-index"
927 +checksum = "45390e6114f68f718cc7a830514a96f903cccd70d02a8f6d9f643ac4ba45afaf"
928 +dependencies = [
929 + "bitflags 1.3.2",
930 + "core-foundation 0.9.4",
931 + "libc",
932 +]
933 +
934 +[[package]]
935 +name = "core2"
936 +version = "0.4.0"
937 +source = "registry+https://github.com/rust-lang/crates.io-index"
938 +checksum = "b49ba7ef1ad6107f8824dbe97de947cbaac53c44e7f9756a1fba0d37c1eec505"
939 +dependencies = [
940 + "memchr",
941 +]
942 +
943 +[[package]]
944 +name = "cpufeatures"
945 +version = "0.2.17"
946 +source = "registry+https://github.com/rust-lang/crates.io-index"
947 +checksum = "59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280"
948 +dependencies = [
949 + "libc",
950 +]
951 +
952 +[[package]]
953 +name = "crc32fast"
954 +version = "1.5.0"
955 +source = "registry+https://github.com/rust-lang/crates.io-index"
956 +checksum = "9481c1c90cbf2ac953f07c8d4a58aa3945c425b7185c9154d67a65e4230da511"
957 +dependencies = [
958 + "cfg-if",
959 +]
960 +
961 +[[package]]
962 +name = "crossbeam-deque"
963 +version = "0.8.6"
964 +source = "registry+https://github.com/rust-lang/crates.io-index"
965 +checksum = "9dd111b7b7f7d55b72c0a6ae361660ee5853c9af73f70c3c2ef6858b950e2e51"
966 +dependencies = [
967 + "crossbeam-epoch",
968 + "crossbeam-utils",
969 +]
970 +
971 +[[package]]
972 +name = "crossbeam-epoch"
973 +version = "0.9.18"
974 +source = "registry+https://github.com/rust-lang/crates.io-index"
975 +checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e"
976 +dependencies = [
977 + "crossbeam-utils",
978 +]
979 +
980 +[[package]]
981 +name = "crossbeam-utils"
982 +version = "0.8.21"
983 +source = "registry+https://github.com/rust-lang/crates.io-index"
984 +checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28"
985 +
986 +[[package]]
987 +name = "crossterm"
988 +version = "0.29.0"
989 +source = "registry+https://github.com/rust-lang/crates.io-index"
990 +checksum = "d8b9f2e4c67f833b660cdb0a3523065869fb35570177239812ed4c905aeff87b"
991 +dependencies = [
992 + "bitflags 2.11.0",
993 + "crossterm_winapi",
994 + "derive_more",
995 + "document-features",
996 + "mio",
997 + "parking_lot",
998 + "rustix",
999 + "signal-hook",
1000 + "signal-hook-mio",
1001 + "winapi",
1002 +]
1003 +
1004 +[[package]]
1005 +name = "crossterm_winapi"
1006 +version = "0.9.1"
1007 +source = "registry+https://github.com/rust-lang/crates.io-index"
1008 +checksum = "acdd7c62a3665c7f6830a51635d9ac9b23ed385797f70a83bb8bafe9c572ab2b"
1009 +dependencies = [
1010 + "winapi",
1011 +]
1012 +
1013 +[[package]]
1014 +name = "crunchy"
1015 +version = "0.2.4"
1016 +source = "registry+https://github.com/rust-lang/crates.io-index"
1017 +checksum = "460fbee9c2c2f33933d720630a6a0bac33ba7053db5344fac858d4b8952d77d5"
1018 +
1019 +[[package]]
1020 +name = "crypto-common"
1021 +version = "0.1.7"
1022 +source = "registry+https://github.com/rust-lang/crates.io-index"
1023 +checksum = "78c8292055d1c1df0cce5d180393dc8cce0abec0a7102adb6c7b1eef6016d60a"
1024 +dependencies = [
1025 + "generic-array",
1026 + "typenum",
1027 +]
1028 +
1029 +[[package]]
1030 +name = "cssparser"
1031 +version = "0.36.0"
1032 +source = "registry+https://github.com/rust-lang/crates.io-index"
1033 +checksum = "dae61cf9c0abb83bd659dab65b7e4e38d8236824c85f0f804f173567bda257d2"
1034 +dependencies = [
1035 + "cssparser-macros",
1036 + "dtoa-short",
1037 + "itoa",
1038 + "phf",
1039 + "smallvec 1.15.1",
1040 +]
1041 +
1042 +[[package]]
1043 +name = "cssparser-macros"
1044 +version = "0.6.1"
1045 +source = "registry+https://github.com/rust-lang/crates.io-index"
1046 +checksum = "13b588ba4ac1a99f7f2964d24b3d896ddc6bf847ee3855dbd4366f058cfcd331"
1047 +dependencies = [
1048 + "quote",
1049 + "syn 2.0.117",
1050 +]
1051 +
1052 +[[package]]
1053 +name = "csv"
1054 +version = "1.4.0"
1055 +source = "registry+https://github.com/rust-lang/crates.io-index"
1056 +checksum = "52cd9d68cf7efc6ddfaaee42e7288d3a99d613d4b50f76ce9827ae0c6e14f938"
1057 +dependencies = [
1058 + "csv-core",
1059 + "itoa",
1060 + "ryu",
1061 + "serde_core",
1062 +]
1063 +
1064 +[[package]]
1065 +name = "csv-core"
1066 +version = "0.1.13"
1067 +source = "registry+https://github.com/rust-lang/crates.io-index"
1068 +checksum = "704a3c26996a80471189265814dbc2c257598b96b8a7feae2d31ace646bb9782"
1069 +dependencies = [
1070 + "memchr",
1071 +]
1072 +
1073 +[[package]]
1074 +name = "darling"
1075 +version = "0.11.0"
1076 +source = "registry+https://github.com/rust-lang/crates.io-index"
1077 +checksum = "dbffa8f8e38810422f320ca457a93cf1cd0056dc9c06c556b867558e0d471463"
1078 +dependencies = [
1079 + "darling_core 0.11.0",
1080 + "darling_macro 0.11.0",
1081 +]
1082 +
1083 +[[package]]
1084 +name = "darling"
1085 +version = "0.20.11"
1086 +source = "registry+https://github.com/rust-lang/crates.io-index"
1087 +checksum = "fc7f46116c46ff9ab3eb1597a45688b6715c6e628b5c133e288e709a29bcb4ee"
1088 +dependencies = [
1089 + "darling_core 0.20.11",
1090 + "darling_macro 0.20.11",
1091 +]
1092 +
1093 +[[package]]
1094 +name = "darling"
1095 +version = "0.23.0"
1096 +source = "registry+https://github.com/rust-lang/crates.io-index"
1097 +checksum = "25ae13da2f202d56bd7f91c25fba009e7717a1e4a1cc98a76d844b65ae912e9d"
1098 +dependencies = [
1099 + "darling_core 0.23.0",
1100 + "darling_macro 0.23.0",
1101 +]
1102 +
1103 +[[package]]
1104 +name = "darling_core"
1105 +version = "0.11.0"
1106 +source = "registry+https://github.com/rust-lang/crates.io-index"
1107 +checksum = "06e172685d94b7b83800e3256a63261537b9d6129e10f21c8e13ddf9dba8c64d"
1108 +dependencies = [
1109 + "fnv",
1110 + "ident_case",
1111 + "proc-macro2",
1112 + "quote",
1113 + "strsim 0.10.0",
1114 + "syn 1.0.109",
1115 +]
1116 +
1117 +[[package]]
1118 +name = "darling_core"
1119 +version = "0.20.11"
1120 +source = "registry+https://github.com/rust-lang/crates.io-index"
1121 +checksum = "0d00b9596d185e565c2207a0b01f8bd1a135483d02d9b7b0a54b11da8d53412e"
1122 +dependencies = [
1123 + "fnv",
1124 + "ident_case",
1125 + "proc-macro2",
1126 + "quote",
1127 + "strsim 0.11.1",
1128 + "syn 2.0.117",
1129 +]
1130 +
1131 +[[package]]
1132 +name = "darling_core"
1133 +version = "0.23.0"
1134 +source = "registry+https://github.com/rust-lang/crates.io-index"
1135 +checksum = "9865a50f7c335f53564bb694ef660825eb8610e0a53d3e11bf1b0d3df31e03b0"
1136 +dependencies = [
1137 + "ident_case",
1138 + "proc-macro2",
1139 + "quote",
1140 + "strsim 0.11.1",
1141 + "syn 2.0.117",
1142 +]
1143 +
1144 +[[package]]
1145 +name = "darling_macro"
1146 +version = "0.11.0"
1147 +source = "registry+https://github.com/rust-lang/crates.io-index"
1148 +checksum = "f0618ac802792cebd1918ac6042a6ea1eeab92db34b35656afaa577929820788"
1149 +dependencies = [
1150 + "darling_core 0.11.0",
1151 + "quote",
1152 + "syn 1.0.109",
1153 +]
1154 +
1155 +[[package]]
1156 +name = "darling_macro"
1157 +version = "0.20.11"
1158 +source = "registry+https://github.com/rust-lang/crates.io-index"
1159 +checksum = "fc34b93ccb385b40dc71c6fceac4b2ad23662c7eeb248cf10d529b7e055b6ead"
1160 +dependencies = [
1161 + "darling_core 0.20.11",
1162 + "quote",
1163 + "syn 2.0.117",
1164 +]
1165 +
1166 +[[package]]
1167 +name = "darling_macro"
1168 +version = "0.23.0"
1169 +source = "registry+https://github.com/rust-lang/crates.io-index"
1170 +checksum = "ac3984ec7bd6cfa798e62b4a642426a5be0e68f9401cfc2a01e3fa9ea2fcdb8d"
1171 +dependencies = [
1172 + "darling_core 0.23.0",
1173 + "quote",
1174 + "syn 2.0.117",
1175 +]
1176 +
1177 +[[package]]
1178 +name = "dary_heap"
1179 +version = "0.3.8"
1180 +source = "registry+https://github.com/rust-lang/crates.io-index"
1181 +checksum = "06d2e3287df1c007e74221c49ca10a95d557349e54b3a75dc2fb14712c751f04"
1182 +dependencies = [
1183 + "serde",
1184 +]
1185 +
1186 +[[package]]
1187 +name = "data-encoding"
1188 +version = "2.10.0"
1189 +source = "registry+https://github.com/rust-lang/crates.io-index"
1190 +checksum = "d7a1e2f27636f116493b8b860f5546edb47c8d8f8ea73e1d2a20be88e28d1fea"
1191 +
1192 +[[package]]
1193 +name = "defmac"
1194 +version = "0.1.3"
1195 +source = "registry+https://github.com/rust-lang/crates.io-index"
1196 +checksum = "aafbece59594ed57696a1a69e8bb3ca1683fbc9cdb41d5c02726070b2cd8f19d"
1197 +
1198 +[[package]]
1199 +name = "deranged"
1200 +version = "0.5.8"
1201 +source = "registry+https://github.com/rust-lang/crates.io-index"
1202 +checksum = "7cd812cc2bc1d69d4764bd80df88b4317eaef9e773c75226407d9bc0876b211c"
1203 +dependencies = [
1204 + "powerfmt",
1205 + "serde_core",
1206 +]
1207 +
1208 +[[package]]
1209 +name = "derive-new"
1210 +version = "0.7.0"
1211 +source = "registry+https://github.com/rust-lang/crates.io-index"
1212 +checksum = "2cdc8d50f426189eef89dac62fabfa0abb27d5cc008f25bf4156a0203325becc"
1213 +dependencies = [
1214 + "proc-macro2",
1215 + "quote",
1216 + "syn 2.0.117",
1217 +]
1218 +
1219 +[[package]]
1220 +name = "derive_builder"
1221 +version = "0.20.2"
1222 +source = "registry+https://github.com/rust-lang/crates.io-index"
1223 +checksum = "507dfb09ea8b7fa618fcf76e953f4f5e192547945816d5358edffe39f6f94947"
1224 +dependencies = [
1225 + "derive_builder_macro",
1226 +]
1227 +
1228 +[[package]]
1229 +name = "derive_builder_core"
1230 +version = "0.20.2"
1231 +source = "registry+https://github.com/rust-lang/crates.io-index"
1232 +checksum = "2d5bcf7b024d6835cfb3d473887cd966994907effbe9227e8c8219824d06c4e8"
1233 +dependencies = [
1234 + "darling 0.20.11",
1235 + "proc-macro2",
1236 + "quote",
1237 + "syn 2.0.117",
1238 +]
1239 +
1240 +[[package]]
1241 +name = "derive_builder_macro"
1242 +version = "0.20.2"
1243 +source = "registry+https://github.com/rust-lang/crates.io-index"
1244 +checksum = "ab63b0e2bf4d5928aff72e83a7dace85d7bba5fe12dcc3c5a572d78caffd3f3c"
1245 +dependencies = [
1246 + "derive_builder_core",
1247 + "syn 2.0.117",
1248 +]
1249 +
1250 +[[package]]
1251 +name = "derive_more"
1252 +version = "2.1.1"
1253 +source = "registry+https://github.com/rust-lang/crates.io-index"
1254 +checksum = "d751e9e49156b02b44f9c1815bcb94b984cdcc4396ecc32521c739452808b134"
1255 +dependencies = [
1256 + "derive_more-impl",
1257 +]
1258 +
1259 +[[package]]
1260 +name = "derive_more-impl"
1261 +version = "2.1.1"
1262 +source = "registry+https://github.com/rust-lang/crates.io-index"
1263 +checksum = "799a97264921d8623a957f6c3b9011f3b5492f557bbb7a5a19b7fa6d06ba8dcb"
1264 +dependencies = [
1265 + "convert_case 0.10.0",
1266 + "proc-macro2",
1267 + "quote",
1268 + "rustc_version",
1269 + "syn 2.0.117",
1270 +]
1271 +
1272 +[[package]]
1273 +name = "derivre"
1274 +version = "0.3.8"
1275 +source = "registry+https://github.com/rust-lang/crates.io-index"
1276 +checksum = "786c7c65c4ef0c7deb05de3005e01991612a8f09fe0844fc0969c68b90468ba8"
1277 +dependencies = [
1278 + "anyhow",
1279 + "bytemuck",
1280 + "bytemuck_derive",
1281 + "hashbrown 0.15.5",
1282 + "regex-syntax",
1283 + "strum",
1284 +]
1285 +
1286 +[[package]]
1287 +name = "deunicode"
1288 +version = "1.6.2"
1289 +source = "registry+https://github.com/rust-lang/crates.io-index"
1290 +checksum = "abd57806937c9cc163efc8ea3910e00a62e2aeb0b8119f1793a978088f8f6b04"
1291 +
1292 +[[package]]
1293 +name = "digest"
1294 +version = "0.10.7"
1295 +source = "registry+https://github.com/rust-lang/crates.io-index"
1296 +checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292"
1297 +dependencies = [
1298 + "block-buffer",
1299 + "crypto-common",
1300 +]
1301 +
1302 +[[package]]
1303 +name = "dirs"
1304 +version = "6.0.0"
1305 +source = "registry+https://github.com/rust-lang/crates.io-index"
1306 +checksum = "c3e8aa94d75141228480295a7d0e7feb620b1a5ad9f12bc40be62411e38cce4e"
1307 +dependencies = [
1308 + "dirs-sys",
1309 +]
1310 +
1311 +[[package]]
1312 +name = "dirs-sys"
1313 +version = "0.5.0"
1314 +source = "registry+https://github.com/rust-lang/crates.io-index"
1315 +checksum = "e01a3366d27ee9890022452ee61b2b63a67e6f13f58900b651ff5665f0bb1fab"
1316 +dependencies = [
1317 + "libc",
1318 + "option-ext",
1319 + "redox_users",
1320 + "windows-sys 0.61.2",
1321 +]
1322 +
1323 +[[package]]
1324 +name = "dispatch2"
1325 +version = "0.3.1"
1326 +source = "registry+https://github.com/rust-lang/crates.io-index"
1327 +checksum = "1e0e367e4e7da84520dedcac1901e4da967309406d1e51017ae1abfb97adbd38"
1328 +dependencies = [
1329 + "bitflags 2.11.0",
1330 + "block2",
1331 + "objc2",
1332 +]
1333 +
1334 +[[package]]
1335 +name = "displaydoc"
1336 +version = "0.2.5"
1337 +source = "registry+https://github.com/rust-lang/crates.io-index"
1338 +checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0"
1339 +dependencies = [
1340 + "proc-macro2",
1341 + "quote",
1342 + "syn 2.0.117",
1343 +]
1344 +
1345 +[[package]]
1346 +name = "doctest-file"
1347 +version = "1.1.1"
1348 +source = "registry+https://github.com/rust-lang/crates.io-index"
1349 +checksum = "c2db04e74f0a9a93103b50e90b96024c9b2bdca8bce6a632ec71b88736d3d359"
1350 +
1351 +[[package]]
1352 +name = "document-features"
1353 +version = "0.2.12"
1354 +source = "registry+https://github.com/rust-lang/crates.io-index"
1355 +checksum = "d4b8a88685455ed29a21542a33abd9cb6510b6b129abadabdcef0f4c55bc8f61"
1356 +dependencies = [
1357 + "litrs",
1358 +]
1359 +
1360 +[[package]]
1361 +name = "dtoa"
1362 +version = "1.0.11"
1363 +source = "registry+https://github.com/rust-lang/crates.io-index"
1364 +checksum = "4c3cf4824e2d5f025c7b531afcb2325364084a16806f6d47fbc1f5fbd9960590"
1365 +
1366 +[[package]]
1367 +name = "dtoa-short"
1368 +version = "0.3.5"
1369 +source = "registry+https://github.com/rust-lang/crates.io-index"
1370 +checksum = "cd1511a7b6a56299bd043a9c167a6d2bfb37bf84a6dfceaba651168adfb43c87"
1371 +dependencies = [
1372 + "dtoa",
1373 +]
1374 +
1375 +[[package]]
1376 +name = "dunce"
1377 +version = "1.0.5"
1378 +source = "registry+https://github.com/rust-lang/crates.io-index"
1379 +checksum = "92773504d58c093f6de2459af4af33faa518c13451eb8f2b5698ed3d36e7c813"
1380 +
1381 +[[package]]
1382 +name = "dyn-clone"
1383 +version = "1.0.20"
1384 +source = "registry+https://github.com/rust-lang/crates.io-index"
1385 +checksum = "d0881ea181b1df73ff77ffaaf9c7544ecc11e82fba9b5f27b262a3c73a332555"
1386 +
1387 +[[package]]
1388 +name = "dyn-stack"
1389 +version = "0.13.2"
1390 +source = "registry+https://github.com/rust-lang/crates.io-index"
1391 +checksum = "1c4713e43e2886ba72b8271aa66c93d722116acf7a75555cce11dcde84388fe8"
1392 +dependencies = [
1393 + "bytemuck",
1394 + "dyn-stack-macros",
1395 +]
1396 +
1397 +[[package]]
1398 +name = "dyn-stack-macros"
1399 +version = "0.1.3"
1400 +source = "registry+https://github.com/rust-lang/crates.io-index"
1401 +checksum = "e1d926b4d407d372f141f93bb444696142c29d32962ccbd3531117cf3aa0bfa9"
1402 +
1403 +[[package]]
1404 +name = "ego-tree"
1405 +version = "0.10.0"
1406 +source = "registry+https://github.com/rust-lang/crates.io-index"
1407 +checksum = "b2972feb8dffe7bc8c5463b1dacda1b0dfbed3710e50f977d965429692d74cd8"
1408 +
1409 +[[package]]
1410 +name = "either"
1411 +version = "1.15.0"
1412 +source = "registry+https://github.com/rust-lang/crates.io-index"
1413 +checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719"
1414 +dependencies = [
1415 + "serde",
1416 +]
1417 +
1418 +[[package]]
1419 +name = "encode_unicode"
1420 +version = "1.0.0"
1421 +source = "registry+https://github.com/rust-lang/crates.io-index"
1422 +checksum = "34aa73646ffb006b8f5147f3dc182bd4bcb190227ce861fc4a4844bf8e3cb2c0"
1423 +
1424 +[[package]]
1425 +name = "encoding_rs"
1426 +version = "0.8.35"
1427 +source = "registry+https://github.com/rust-lang/crates.io-index"
1428 +checksum = "75030f3c4f45dafd7586dd6780965a8c7e8e285a5ecb86713e63a79c5b2766f3"
1429 +dependencies = [
1430 + "cfg-if",
1431 +]
1432 +
1433 +[[package]]
1434 +name = "encoding_rs_io"
1435 +version = "0.1.7"
1436 +source = "registry+https://github.com/rust-lang/crates.io-index"
1437 +checksum = "1cc3c5651fb62ab8aa3103998dade57efdd028544bd300516baa31840c252a83"
1438 +dependencies = [
1439 + "encoding_rs",
1440 +]
1441 +
1442 +[[package]]
1443 +name = "endian-type"
1444 +version = "0.2.0"
1445 +source = "registry+https://github.com/rust-lang/crates.io-index"
1446 +checksum = "869b0adbda23651a9c5c0c3d270aac9fcb52e8622a8f2b17e57802d7791962f2"
1447 +
1448 +[[package]]
1449 +name = "enum-as-inner"
1450 +version = "0.6.1"
1451 +source = "registry+https://github.com/rust-lang/crates.io-index"
1452 +checksum = "a1e6a265c649f3f5979b601d26f1d05ada116434c87741c9493cb56218f76cbc"
1453 +dependencies = [
1454 + "heck 0.5.0",
1455 + "proc-macro2",
1456 + "quote",
1457 + "syn 2.0.117",
1458 +]
1459 +
1460 +[[package]]
1461 +name = "equator"
1462 +version = "0.4.2"
1463 +source = "registry+https://github.com/rust-lang/crates.io-index"
1464 +checksum = "4711b213838dfee0117e3be6ac926007d7f433d7bbe33595975d4190cb07e6fc"
1465 +dependencies = [
1466 + "equator-macro",
1467 +]
1468 +
1469 +[[package]]
1470 +name = "equator-macro"
1471 +version = "0.4.2"
1472 +source = "registry+https://github.com/rust-lang/crates.io-index"
1473 +checksum = "44f23cf4b44bfce11a86ace86f8a73ffdec849c9fd00a386a53d278bd9e81fb3"
1474 +dependencies = [
1475 + "proc-macro2",
1476 + "quote",
1477 + "syn 2.0.117",
1478 +]
1479 +
1480 +[[package]]
1481 +name = "equivalent"
1482 +version = "1.0.2"
1483 +source = "registry+https://github.com/rust-lang/crates.io-index"
1484 +checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f"
1485 +
1486 +[[package]]
1487 +name = "errno"
1488 +version = "0.3.14"
1489 +source = "registry+https://github.com/rust-lang/crates.io-index"
1490 +checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb"
1491 +dependencies = [
1492 + "libc",
1493 + "windows-sys 0.61.2",
1494 +]
1495 +
1496 +[[package]]
1497 +name = "esaxx-rs"
1498 +version = "0.1.10"
1499 +source = "registry+https://github.com/rust-lang/crates.io-index"
1500 +checksum = "d817e038c30374a4bcb22f94d0a8a0e216958d4c3dcde369b1439fec4bdda6e6"
1501 +
1502 +[[package]]
1503 +name = "exr"
1504 +version = "1.74.0"
1505 +source = "registry+https://github.com/rust-lang/crates.io-index"
1506 +checksum = "4300e043a56aa2cb633c01af81ca8f699a321879a7854d3896a0ba89056363be"
1507 +dependencies = [
1508 + "bit_field",
1509 + "half",
1510 + "lebe",
1511 + "miniz_oxide",
1512 + "rayon-core",
1513 + "smallvec 1.15.1",
1514 + "zune-inflate",
1515 +]
1516 +
1517 +[[package]]
1518 +name = "extended"
1519 +version = "0.1.0"
1520 +source = "registry+https://github.com/rust-lang/crates.io-index"
1521 +checksum = "af9673d8203fcb076b19dfd17e38b3d4ae9f44959416ea532ce72415a6020365"
1522 +
1523 +[[package]]
1524 +name = "fancy-regex"
1525 +version = "0.13.0"
1526 +source = "registry+https://github.com/rust-lang/crates.io-index"
1527 +checksum = "531e46835a22af56d1e3b66f04844bed63158bc094a628bec1d321d9b4c44bf2"
1528 +dependencies = [
1529 + "bit-set 0.5.3",
1530 + "regex-automata",
1531 + "regex-syntax",
1532 +]
1533 +
1534 +[[package]]
1535 +name = "fancy-regex"
1536 +version = "0.14.0"
1537 +source = "registry+https://github.com/rust-lang/crates.io-index"
1538 +checksum = "6e24cb5a94bcae1e5408b0effca5cd7172ea3c5755049c5f3af4cd283a165298"
1539 +dependencies = [
1540 + "bit-set 0.8.0",
1541 + "regex-automata",
1542 + "regex-syntax",
1543 +]
1544 +
1545 +[[package]]
1546 +name = "fastrand"
1547 +version = "2.4.1"
1548 +source = "registry+https://github.com/rust-lang/crates.io-index"
1549 +checksum = "9f1f227452a390804cdb637b74a86990f2a7d7ba4b7d5693aac9b4dd6defd8d6"
1550 +
1551 +[[package]]
1552 +name = "fax"
1553 +version = "0.2.6"
1554 +source = "registry+https://github.com/rust-lang/crates.io-index"
1555 +checksum = "f05de7d48f37cd6730705cbca900770cab77a89f413d23e100ad7fad7795a0ab"
1556 +dependencies = [
1557 + "fax_derive",
1558 +]
1559 +
1560 +[[package]]
1561 +name = "fax_derive"
1562 +version = "0.2.0"
1563 +source = "registry+https://github.com/rust-lang/crates.io-index"
1564 +checksum = "a0aca10fb742cb43f9e7bb8467c91aa9bcb8e3ffbc6a6f7389bb93ffc920577d"
1565 +dependencies = [
1566 + "proc-macro2",
1567 + "quote",
1568 + "syn 2.0.117",
1569 +]
1570 +
1571 +[[package]]
1572 +name = "fdeflate"
1573 +version = "0.3.7"
1574 +source = "registry+https://github.com/rust-lang/crates.io-index"
1575 +checksum = "1e6853b52649d4ac5c0bd02320cddc5ba956bdb407c4b75a2c6b75bf51500f8c"
1576 +dependencies = [
1577 + "simd-adler32",
1578 +]
1579 +
1580 +[[package]]
1581 +name = "find-msvc-tools"
1582 +version = "0.1.9"
1583 +source = "registry+https://github.com/rust-lang/crates.io-index"
1584 +checksum = "5baebc0774151f905a1a2cc41989300b1e6fbb29aff0ceffa1064fdd3088d582"
1585 +
1586 +[[package]]
1587 +name = "flate2"
1588 +version = "1.1.9"
1589 +source = "registry+https://github.com/rust-lang/crates.io-index"
1590 +checksum = "843fba2746e448b37e26a819579957415c8cef339bf08564fe8b7ddbd959573c"
1591 +dependencies = [
1592 + "crc32fast",
1593 + "miniz_oxide",
1594 +]
1595 +
1596 +[[package]]
1597 +name = "float8"
1598 +version = "0.7.0"
1599 +source = "registry+https://github.com/rust-lang/crates.io-index"
1600 +checksum = "c2d1f04709a8ac06e8e8042875a3c466cc4832d3c1a18dbcb9dba3c6e83046bc"
1601 +dependencies = [
1602 + "half",
1603 + "num-traits",
1604 + "rand 0.9.2",
1605 + "rand_distr 0.5.1",
1606 +]
1607 +
1608 +[[package]]
1609 +name = "fnv"
1610 +version = "1.0.7"
1611 +source = "registry+https://github.com/rust-lang/crates.io-index"
1612 +checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1"
1613 +
1614 +[[package]]
1615 +name = "foldhash"
1616 +version = "0.1.5"
1617 +source = "registry+https://github.com/rust-lang/crates.io-index"
1618 +checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2"
1619 +
1620 +[[package]]
1621 +name = "foldhash"
1622 +version = "0.2.0"
1623 +source = "registry+https://github.com/rust-lang/crates.io-index"
1624 +checksum = "77ce24cb58228fbb8aa041425bb1050850ac19177686ea6e0f41a70416f56fdb"
1625 +
1626 +[[package]]
1627 +name = "foreign-types"
1628 +version = "0.5.0"
1629 +source = "registry+https://github.com/rust-lang/crates.io-index"
1630 +checksum = "d737d9aa519fb7b749cbc3b962edcf310a8dd1f4b67c91c4f83975dbdd17d965"
1631 +dependencies = [
1632 + "foreign-types-macros",
1633 + "foreign-types-shared",
1634 +]
1635 +
1636 +[[package]]
1637 +name = "foreign-types-macros"
1638 +version = "0.2.3"
1639 +source = "registry+https://github.com/rust-lang/crates.io-index"
1640 +checksum = "1a5c6c585bc94aaf2c7b51dd4c2ba22680844aba4c687be581871a6f518c5742"
1641 +dependencies = [
1642 + "proc-macro2",
1643 + "quote",
1644 + "syn 2.0.117",
1645 +]
1646 +
1647 +[[package]]
1648 +name = "foreign-types-shared"
1649 +version = "0.3.1"
1650 +source = "registry+https://github.com/rust-lang/crates.io-index"
1651 +checksum = "aa9a19cbb55df58761df49b23516a86d432839add4af60fc256da840f66ed35b"
1652 +
1653 +[[package]]
1654 +name = "form_urlencoded"
1655 +version = "1.2.2"
1656 +source = "registry+https://github.com/rust-lang/crates.io-index"
1657 +checksum = "cb4cb245038516f5f85277875cdaa4f7d2c9a0fa0468de06ed190163b1581fcf"
1658 +dependencies = [
1659 + "percent-encoding",
1660 +]
1661 +
1662 +[[package]]
1663 +name = "fs-err"
1664 +version = "2.11.0"
1665 +source = "registry+https://github.com/rust-lang/crates.io-index"
1666 +checksum = "88a41f105fe1d5b6b34b2055e3dc59bb79b46b48b2040b9e6c7b4b5de097aa41"
1667 +dependencies = [
1668 + "autocfg",
1669 +]
1670 +
1671 +[[package]]
1672 +name = "fs_extra"
1673 +version = "1.3.0"
1674 +source = "registry+https://github.com/rust-lang/crates.io-index"
1675 +checksum = "42703706b716c37f96a77aea830392ad231f44c9e9a67872fa5548707e11b11c"
1676 +
1677 +[[package]]
1678 +name = "futf"
1679 +version = "0.1.5"
1680 +source = "registry+https://github.com/rust-lang/crates.io-index"
1681 +checksum = "df420e2e84819663797d1ec6544b13c5be84629e7bb00dc960d6917db2987843"
1682 +dependencies = [
1683 + "mac",
1684 + "new_debug_unreachable",
1685 +]
1686 +
1687 +[[package]]
1688 +name = "futures"
1689 +version = "0.3.32"
1690 +source = "registry+https://github.com/rust-lang/crates.io-index"
1691 +checksum = "8b147ee9d1f6d097cef9ce628cd2ee62288d963e16fb287bd9286455b241382d"
1692 +dependencies = [
1693 + "futures-channel",
1694 + "futures-core",
1695 + "futures-executor",
1696 + "futures-io",
1697 + "futures-sink",
1698 + "futures-task",
1699 + "futures-util",
1700 +]
1701 +
1702 +[[package]]
1703 +name = "futures-channel"
1704 +version = "0.3.32"
1705 +source = "registry+https://github.com/rust-lang/crates.io-index"
1706 +checksum = "07bbe89c50d7a535e539b8c17bc0b49bdb77747034daa8087407d655f3f7cc1d"
1707 +dependencies = [
1708 + "futures-core",
1709 + "futures-sink",
1710 +]
1711 +
1712 +[[package]]
1713 +name = "futures-core"
1714 +version = "0.3.32"
1715 +source = "registry+https://github.com/rust-lang/crates.io-index"
1716 +checksum = "7e3450815272ef58cec6d564423f6e755e25379b217b0bc688e295ba24df6b1d"
1717 +
1718 +[[package]]
1719 +name = "futures-executor"
1720 +version = "0.3.32"
1721 +source = "registry+https://github.com/rust-lang/crates.io-index"
1722 +checksum = "baf29c38818342a3b26b5b923639e7b1f4a61fc5e76102d4b1981c6dc7a7579d"
1723 +dependencies = [
1724 + "futures-core",
1725 + "futures-task",
1726 + "futures-util",
1727 +]
1728 +
1729 +[[package]]
1730 +name = "futures-io"
1731 +version = "0.3.32"
1732 +source = "registry+https://github.com/rust-lang/crates.io-index"
1733 +checksum = "cecba35d7ad927e23624b22ad55235f2239cfa44fd10428eecbeba6d6a717718"
1734 +
1735 +[[package]]
1736 +name = "futures-macro"
1737 +version = "0.3.32"
1738 +source = "registry+https://github.com/rust-lang/crates.io-index"
1739 +checksum = "e835b70203e41293343137df5c0664546da5745f82ec9b84d40be8336958447b"
1740 +dependencies = [
1741 + "proc-macro2",
1742 + "quote",
1743 + "syn 2.0.117",
1744 +]
1745 +
1746 +[[package]]
1747 +name = "futures-sink"
1748 +version = "0.3.32"
1749 +source = "registry+https://github.com/rust-lang/crates.io-index"
1750 +checksum = "c39754e157331b013978ec91992bde1ac089843443c49cbc7f46150b0fad0893"
1751 +
1752 +[[package]]
1753 +name = "futures-task"
1754 +version = "0.3.32"
1755 +source = "registry+https://github.com/rust-lang/crates.io-index"
1756 +checksum = "037711b3d59c33004d3856fbdc83b99d4ff37a24768fa1be9ce3538a1cde4393"
1757 +
1758 +[[package]]
1759 +name = "futures-util"
1760 +version = "0.3.32"
1761 +source = "registry+https://github.com/rust-lang/crates.io-index"
1762 +checksum = "389ca41296e6190b48053de0321d02a77f32f8a5d2461dd38762c0593805c6d6"
1763 +dependencies = [
1764 + "futures-channel",
1765 + "futures-core",
1766 + "futures-io",
1767 + "futures-macro",
1768 + "futures-sink",
1769 + "futures-task",
1770 + "memchr",
1771 + "pin-project-lite",
1772 + "slab",
1773 +]
1774 +
1775 +[[package]]
1776 +name = "fxhash"
1777 +version = "0.2.1"
1778 +source = "registry+https://github.com/rust-lang/crates.io-index"
1779 +checksum = "c31b6d751ae2c7f11320402d34e41349dd1016f8d5d45e48c4312bc8625af50c"
1780 +dependencies = [
1781 + "byteorder",
1782 +]
1783 +
1784 +[[package]]
1785 +name = "galil-seiferas"
1786 +version = "0.1.5"
1787 +source = "registry+https://github.com/rust-lang/crates.io-index"
1788 +checksum = "794ac25cfda3fa11d2b07ff8c65889c6c03411646df54e59e606878d899e1d5a"
1789 +dependencies = [
1790 + "defmac",
1791 + "unchecked-index",
1792 +]
1793 +
1794 +[[package]]
1795 +name = "gemm"
1796 +version = "0.18.2"
1797 +source = "registry+https://github.com/rust-lang/crates.io-index"
1798 +checksum = "ab96b703d31950f1aeddded248bc95543c9efc7ac9c4a21fda8703a83ee35451"
1799 +dependencies = [
1800 + "dyn-stack",
1801 + "gemm-c32 0.18.2",
1802 + "gemm-c64 0.18.2",
1803 + "gemm-common 0.18.2",
1804 + "gemm-f16 0.18.2",
1805 + "gemm-f32 0.18.2",
1806 + "gemm-f64 0.18.2",
1807 + "num-complex",
1808 + "num-traits",
1809 + "paste",
1810 + "raw-cpuid",
1811 + "seq-macro",
1812 +]
1813 +
1814 +[[package]]
1815 +name = "gemm"
1816 +version = "0.19.0"
1817 +source = "registry+https://github.com/rust-lang/crates.io-index"
1818 +checksum = "aa0673db364b12263d103b68337a68fbecc541d6f6b61ba72fe438654709eacb"
1819 +dependencies = [
1820 + "dyn-stack",
1821 + "gemm-c32 0.19.0",
1822 + "gemm-c64 0.19.0",
1823 + "gemm-common 0.19.0",
1824 + "gemm-f16 0.19.0",
1825 + "gemm-f32 0.19.0",
1826 + "gemm-f64 0.19.0",
1827 + "num-complex",
1828 + "num-traits",
1829 + "paste",
1830 + "raw-cpuid",
1831 + "seq-macro",
1832 +]
1833 +
1834 +[[package]]
1835 +name = "gemm-c32"
1836 +version = "0.18.2"
1837 +source = "registry+https://github.com/rust-lang/crates.io-index"
1838 +checksum = "f6db9fd9f40421d00eea9dd0770045a5603b8d684654816637732463f4073847"
1839 +dependencies = [
1840 + "dyn-stack",
1841 + "gemm-common 0.18.2",
1842 + "num-complex",
1843 + "num-traits",
1844 + "paste",
1845 + "raw-cpuid",
1846 + "seq-macro",
1847 +]
1848 +
1849 +[[package]]
1850 +name = "gemm-c32"
1851 +version = "0.19.0"
1852 +source = "registry+https://github.com/rust-lang/crates.io-index"
1853 +checksum = "086936dbdcb99e37aad81d320f98f670e53c1e55a98bee70573e83f95beb128c"
1854 +dependencies = [
1855 + "dyn-stack",
1856 + "gemm-common 0.19.0",
1857 + "num-complex",
1858 + "num-traits",
1859 + "paste",
1860 + "raw-cpuid",
1861 + "seq-macro",
1862 +]
1863 +
1864 +[[package]]
1865 +name = "gemm-c64"
1866 +version = "0.18.2"
1867 +source = "registry+https://github.com/rust-lang/crates.io-index"
1868 +checksum = "dfcad8a3d35a43758330b635d02edad980c1e143dc2f21e6fd25f9e4eada8edf"
1869 +dependencies = [
1870 + "dyn-stack",
1871 + "gemm-common 0.18.2",
1872 + "num-complex",
1873 + "num-traits",
1874 + "paste",
1875 + "raw-cpuid",
1876 + "seq-macro",
1877 +]
1878 +
1879 +[[package]]
1880 +name = "gemm-c64"
1881 +version = "0.19.0"
1882 +source = "registry+https://github.com/rust-lang/crates.io-index"
1883 +checksum = "20c8aeeeec425959bda4d9827664029ba1501a90a0d1e6228e48bef741db3a3f"
1884 +dependencies = [
1885 + "dyn-stack",
1886 + "gemm-common 0.19.0",
1887 + "num-complex",
1888 + "num-traits",
1889 + "paste",
1890 + "raw-cpuid",
1891 + "seq-macro",
1892 +]
1893 +
1894 +[[package]]
1895 +name = "gemm-common"
1896 +version = "0.18.2"
1897 +source = "registry+https://github.com/rust-lang/crates.io-index"
1898 +checksum = "a352d4a69cbe938b9e2a9cb7a3a63b7e72f9349174a2752a558a8a563510d0f3"
1899 +dependencies = [
1900 + "bytemuck",
1901 + "dyn-stack",
1902 + "half",
1903 + "libm",
1904 + "num-complex",
1905 + "num-traits",
1906 + "once_cell",
1907 + "paste",
1908 + "pulp 0.21.5",
1909 + "raw-cpuid",
1910 + "rayon",
1911 + "seq-macro",
1912 + "sysctl",
1913 +]
1914 +
1915 +[[package]]
1916 +name = "gemm-common"
1917 +version = "0.19.0"
1918 +source = "registry+https://github.com/rust-lang/crates.io-index"
1919 +checksum = "88027625910cc9b1085aaaa1c4bc46bb3a36aad323452b33c25b5e4e7c8e2a3e"
1920 +dependencies = [
1921 + "bytemuck",
1922 + "dyn-stack",
1923 + "half",
1924 + "libm",
1925 + "num-complex",
1926 + "num-traits",
1927 + "once_cell",
1928 + "paste",
1929 + "pulp 0.22.2",
1930 + "raw-cpuid",
1931 + "rayon",
1932 + "seq-macro",
1933 + "sysctl",
1934 +]
1935 +
1936 +[[package]]
1937 +name = "gemm-f16"
1938 +version = "0.18.2"
1939 +source = "registry+https://github.com/rust-lang/crates.io-index"
1940 +checksum = "cff95ae3259432f3c3410eaa919033cd03791d81cebd18018393dc147952e109"
1941 +dependencies = [
1942 + "dyn-stack",
1943 + "gemm-common 0.18.2",
1944 + "gemm-f32 0.18.2",
1945 + "half",
1946 + "num-complex",
1947 + "num-traits",
1948 + "paste",
1949 + "raw-cpuid",
1950 + "rayon",
1951 + "seq-macro",
1952 +]
1953 +
1954 +[[package]]
1955 +name = "gemm-f16"
1956 +version = "0.19.0"
1957 +source = "registry+https://github.com/rust-lang/crates.io-index"
1958 +checksum = "e3df7a55202e6cd6739d82ae3399c8e0c7e1402859b30e4cb780e61525d9486e"
1959 +dependencies = [
1960 + "dyn-stack",
1961 + "gemm-common 0.19.0",
1962 + "gemm-f32 0.19.0",
1963 + "half",
1964 + "num-complex",
1965 + "num-traits",
1966 + "paste",
1967 + "raw-cpuid",
1968 + "rayon",
1969 + "seq-macro",
1970 +]
1971 +
1972 +[[package]]
1973 +name = "gemm-f32"
1974 +version = "0.18.2"
1975 +source = "registry+https://github.com/rust-lang/crates.io-index"
1976 +checksum = "bc8d3d4385393304f407392f754cd2dc4b315d05063f62cf09f47b58de276864"
1977 +dependencies = [
1978 + "dyn-stack",
1979 + "gemm-common 0.18.2",
1980 + "num-complex",
1981 + "num-traits",
1982 + "paste",
1983 + "raw-cpuid",
1984 + "seq-macro",
1985 +]
1986 +
1987 +[[package]]
1988 +name = "gemm-f32"
1989 +version = "0.19.0"
1990 +source = "registry+https://github.com/rust-lang/crates.io-index"
1991 +checksum = "02e0b8c9da1fbec6e3e3ab2ce6bc259ef18eb5f6f0d3e4edf54b75f9fd41a81c"
1992 +dependencies = [
1993 + "dyn-stack",
1994 + "gemm-common 0.19.0",
1995 + "num-complex",
1996 + "num-traits",
1997 + "paste",
1998 + "raw-cpuid",
1999 + "seq-macro",
2000 +]
2001 +
2002 +[[package]]
2003 +name = "gemm-f64"
2004 +version = "0.18.2"
2005 +source = "registry+https://github.com/rust-lang/crates.io-index"
2006 +checksum = "35b2a4f76ce4b8b16eadc11ccf2e083252d8237c1b589558a49b0183545015bd"
2007 +dependencies = [
2008 + "dyn-stack",
2009 + "gemm-common 0.18.2",
2010 + "num-complex",
2011 + "num-traits",
2012 + "paste",
2013 + "raw-cpuid",
2014 + "seq-macro",
2015 +]
2016 +
2017 +[[package]]
2018 +name = "gemm-f64"
2019 +version = "0.19.0"
2020 +source = "registry+https://github.com/rust-lang/crates.io-index"
2021 +checksum = "056131e8f2a521bfab322f804ccd652520c79700d81209e9d9275bbdecaadc6a"
2022 +dependencies = [
2023 + "dyn-stack",
2024 + "gemm-common 0.19.0",
2025 + "num-complex",
2026 + "num-traits",
2027 + "paste",
2028 + "raw-cpuid",
2029 + "seq-macro",
2030 +]
2031 +
2032 +[[package]]
2033 +name = "generator"
2034 +version = "0.7.5"
2035 +source = "registry+https://github.com/rust-lang/crates.io-index"
2036 +checksum = "5cc16584ff22b460a382b7feec54b23d2908d858152e5739a120b949293bd74e"
2037 +dependencies = [
2038 + "cc",
2039 + "libc",
2040 + "log",
2041 + "rustversion",
2042 + "windows 0.48.0",
2043 +]
2044 +
2045 +[[package]]
2046 +name = "generic-array"
2047 +version = "0.14.7"
2048 +source = "registry+https://github.com/rust-lang/crates.io-index"
2049 +checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a"
2050 +dependencies = [
2051 + "typenum",
2052 + "version_check",
2053 +]
2054 +
2055 +[[package]]
2056 +name = "getopts"
2057 +version = "0.2.24"
2058 +source = "registry+https://github.com/rust-lang/crates.io-index"
2059 +checksum = "cfe4fbac503b8d1f88e6676011885f34b7174f46e59956bba534ba83abded4df"
2060 +dependencies = [
2061 + "unicode-width 0.2.2",
2062 +]
2063 +
2064 +[[package]]
2065 +name = "getrandom"
2066 +version = "0.2.17"
2067 +source = "registry+https://github.com/rust-lang/crates.io-index"
2068 +checksum = "ff2abc00be7fca6ebc474524697ae276ad847ad0a6b3faa4bcb027e9a4614ad0"
2069 +dependencies = [
2070 + "cfg-if",
2071 + "js-sys",
2072 + "libc",
2073 + "wasi",
2074 + "wasm-bindgen",
2075 +]
2076 +
2077 +[[package]]
2078 +name = "getrandom"
2079 +version = "0.3.4"
2080 +source = "registry+https://github.com/rust-lang/crates.io-index"
2081 +checksum = "899def5c37c4fd7b2664648c28120ecec138e4d395b459e5ca34f9cce2dd77fd"
2082 +dependencies = [
2083 + "cfg-if",
2084 + "js-sys",
2085 + "libc",
2086 + "r-efi 5.3.0",
2087 + "wasip2",
2088 + "wasm-bindgen",
2089 +]
2090 +
2091 +[[package]]
2092 +name = "getrandom"
2093 +version = "0.4.2"
2094 +source = "registry+https://github.com/rust-lang/crates.io-index"
2095 +checksum = "0de51e6874e94e7bf76d726fc5d13ba782deca734ff60d5bb2fb2607c7406555"
2096 +dependencies = [
2097 + "cfg-if",
2098 + "libc",
2099 + "r-efi 6.0.0",
2100 + "wasip2",
2101 + "wasip3",
2102 +]
2103 +
2104 +[[package]]
2105 +name = "gif"
2106 +version = "0.14.2"
2107 +source = "registry+https://github.com/rust-lang/crates.io-index"
2108 +checksum = "ee8cfcc411d9adbbaba82fb72661cc1bcca13e8bba98b364e62b2dba8f960159"
2109 +dependencies = [
2110 + "color_quant",
2111 + "weezl",
2112 +]
2113 +
2114 +[[package]]
2115 +name = "glob"
2116 +version = "0.3.3"
2117 +source = "registry+https://github.com/rust-lang/crates.io-index"
2118 +checksum = "0cc23270f6e1808e30a928bdc84dea0b9b4136a8bc82338574f23baf47bbd280"
2119 +
2120 +[[package]]
2121 +name = "goblin"
2122 +version = "0.8.2"
2123 +source = "registry+https://github.com/rust-lang/crates.io-index"
2124 +checksum = "1b363a30c165f666402fe6a3024d3bec7ebc898f96a4a23bd1c99f8dbf3f4f47"
2125 +dependencies = [
2126 + "log",
2127 + "plain",
2128 + "scroll",
2129 +]
2130 +
2131 +[[package]]
2132 +name = "h2"
2133 +version = "0.4.13"
2134 +source = "registry+https://github.com/rust-lang/crates.io-index"
2135 +checksum = "2f44da3a8150a6703ed5d34e164b875fd14c2cdab9af1252a9a1020bde2bdc54"
2136 +dependencies = [
2137 + "atomic-waker",
2138 + "bytes",
2139 + "fnv",
2140 + "futures-core",
2141 + "futures-sink",
2142 + "http",
2143 + "indexmap 2.14.0",
2144 + "slab",
2145 + "tokio",
2146 + "tokio-util",
2147 + "tracing",
2148 +]
2149 +
2150 +[[package]]
2151 +name = "half"
2152 +version = "2.7.1"
2153 +source = "registry+https://github.com/rust-lang/crates.io-index"
2154 +checksum = "6ea2d84b969582b4b1864a92dc5d27cd2b77b622a8d79306834f1be5ba20d84b"
2155 +dependencies = [
2156 + "bytemuck",
2157 + "cfg-if",
2158 + "crunchy",
2159 + "num-traits",
2160 + "rand 0.9.2",
2161 + "rand_distr 0.5.1",
2162 + "zerocopy",
2163 +]
2164 +
2165 +[[package]]
2166 +name = "hashbrown"
2167 +version = "0.12.3"
2168 +source = "registry+https://github.com/rust-lang/crates.io-index"
2169 +checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888"
2170 +
2171 +[[package]]
2172 +name = "hashbrown"
2173 +version = "0.15.5"
2174 +source = "registry+https://github.com/rust-lang/crates.io-index"
2175 +checksum = "9229cfe53dfd69f0609a49f65461bd93001ea1ef889cd5529dd176593f5338a1"
2176 +dependencies = [
2177 + "allocator-api2",
2178 + "equivalent",
2179 + "foldhash 0.1.5",
2180 +]
2181 +
2182 +[[package]]
2183 +name = "hashbrown"
2184 +version = "0.16.1"
2185 +source = "registry+https://github.com/rust-lang/crates.io-index"
2186 +checksum = "841d1cc9bed7f9236f321df977030373f4a4163ae1a7dbfe1a51a2c1a51d9100"
2187 +dependencies = [
2188 + "allocator-api2",
2189 + "equivalent",
2190 + "foldhash 0.2.0",
2191 + "serde",
2192 + "serde_core",
2193 +]
2194 +
2195 +[[package]]
2196 +name = "hashbrown"
2197 +version = "0.17.0"
2198 +source = "registry+https://github.com/rust-lang/crates.io-index"
2199 +checksum = "4f467dd6dccf739c208452f8014c75c18bb8301b050ad1cfb27153803edb0f51"
2200 +
2201 +[[package]]
2202 +name = "heck"
2203 +version = "0.3.3"
2204 +source = "registry+https://github.com/rust-lang/crates.io-index"
2205 +checksum = "6d621efb26863f0e9924c6ac577e8275e5e6b77455db64ffa6c65c904e9e132c"
2206 +dependencies = [
2207 + "unicode-segmentation",
2208 +]
2209 +
2210 +[[package]]
2211 +name = "heck"
2212 +version = "0.5.0"
2213 +source = "registry+https://github.com/rust-lang/crates.io-index"
2214 +checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea"
2215 +
2216 +[[package]]
2217 +name = "hermit-abi"
2218 +version = "0.1.19"
2219 +source = "registry+https://github.com/rust-lang/crates.io-index"
2220 +checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33"
2221 +dependencies = [
2222 + "libc",
2223 +]
2224 +
2225 +[[package]]
2226 +name = "hermit-abi"
2227 +version = "0.5.2"
2228 +source = "registry+https://github.com/rust-lang/crates.io-index"
2229 +checksum = "fc0fef456e4baa96da950455cd02c081ca953b141298e41db3fc7e36b1da849c"
2230 +
2231 +[[package]]
2232 +name = "hex"
2233 +version = "0.4.3"
2234 +source = "registry+https://github.com/rust-lang/crates.io-index"
2235 +checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70"
2236 +
2237 +[[package]]
2238 +name = "hf-hub"
2239 +version = "0.4.3"
2240 +source = "registry+https://github.com/rust-lang/crates.io-index"
2241 +checksum = "629d8f3bbeda9d148036d6b0de0a3ab947abd08ce90626327fc3547a49d59d97"
2242 +dependencies = [
2243 + "dirs",
2244 + "futures",
2245 + "http",
2246 + "indicatif 0.17.11",
2247 + "libc",
2248 + "log",
2249 + "num_cpus",
2250 + "rand 0.9.2",
2251 + "reqwest 0.12.28",
2252 + "serde",
2253 + "serde_json",
2254 + "thiserror 2.0.18",
2255 + "tokio",
2256 + "ureq",
2257 + "windows-sys 0.60.2",
2258 +]
2259 +
2260 +[[package]]
2261 +name = "home"
2262 +version = "0.5.12"
2263 +source = "registry+https://github.com/rust-lang/crates.io-index"
2264 +checksum = "cc627f471c528ff0c4a49e1d5e60450c8f6461dd6d10ba9dcd3a61d3dff7728d"
2265 +dependencies = [
2266 + "windows-sys 0.61.2",
2267 +]
2268 +
2269 +[[package]]
2270 +name = "hound"
2271 +version = "3.5.1"
2272 +source = "registry+https://github.com/rust-lang/crates.io-index"
2273 +checksum = "62adaabb884c94955b19907d60019f4e145d091c75345379e70d1ee696f7854f"
2274 +
2275 +[[package]]
2276 +name = "html2text"
2277 +version = "0.16.7"
2278 +source = "registry+https://github.com/rust-lang/crates.io-index"
2279 +checksum = "12d23156ea4dbe6b37ad48fab2da56ff27b0f6192fb5db210c44eb07bfe6e787"
2280 +dependencies = [
2281 + "html5ever 0.38.0",
2282 + "tendril 0.5.0",
2283 + "thiserror 2.0.18",
2284 + "unicode-width 0.2.2",
2285 +]
2286 +
2287 +[[package]]
2288 +name = "html5ever"
2289 +version = "0.36.1"
2290 +source = "registry+https://github.com/rust-lang/crates.io-index"
2291 +checksum = "6452c4751a24e1b99c3260d505eaeee76a050573e61f30ac2c924ddc7236f01e"
2292 +dependencies = [
2293 + "log",
2294 + "markup5ever 0.36.1",
2295 +]
2296 +
2297 +[[package]]
2298 +name = "html5ever"
2299 +version = "0.38.0"
2300 +source = "registry+https://github.com/rust-lang/crates.io-index"
2301 +checksum = "1054432bae2f14e0061e33d23402fbaa67a921d319d56adc6bcf887ddad1cbc2"
2302 +dependencies = [
2303 + "log",
2304 + "markup5ever 0.38.0",
2305 +]
2306 +
2307 +[[package]]
2308 +name = "http"
2309 +version = "1.4.0"
2310 +source = "registry+https://github.com/rust-lang/crates.io-index"
2311 +checksum = "e3ba2a386d7f85a81f119ad7498ebe444d2e22c2af0b86b069416ace48b3311a"
2312 +dependencies = [
2313 + "bytes",
2314 + "itoa",
2315 +]
2316 +
2317 +[[package]]
2318 +name = "http-body"
2319 +version = "1.0.1"
2320 +source = "registry+https://github.com/rust-lang/crates.io-index"
2321 +checksum = "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184"
2322 +dependencies = [
2323 + "bytes",
2324 + "http",
2325 +]
2326 +
2327 +[[package]]
2328 +name = "http-body-util"
2329 +version = "0.1.3"
2330 +source = "registry+https://github.com/rust-lang/crates.io-index"
2331 +checksum = "b021d93e26becf5dc7e1b75b1bed1fd93124b374ceb73f43d4d4eafec896a64a"
2332 +dependencies = [
2333 + "bytes",
2334 + "futures-core",
2335 + "http",
2336 + "http-body",
2337 + "pin-project-lite",
2338 +]
2339 +
2340 +[[package]]
2341 +name = "httparse"
2342 +version = "1.10.1"
2343 +source = "registry+https://github.com/rust-lang/crates.io-index"
2344 +checksum = "6dbf3de79e51f3d586ab4cb9d5c3e2c14aa28ed23d180cf89b4df0454a69cc87"
2345 +
2346 +[[package]]
2347 +name = "hyper"
2348 +version = "1.9.0"
2349 +source = "registry+https://github.com/rust-lang/crates.io-index"
2350 +checksum = "6299f016b246a94207e63da54dbe807655bf9e00044f73ded42c3ac5305fbcca"
2351 +dependencies = [
2352 + "atomic-waker",
2353 + "bytes",
2354 + "futures-channel",
2355 + "futures-core",
2356 + "h2",
2357 + "http",
2358 + "http-body",
2359 + "httparse",
2360 + "itoa",
2361 + "pin-project-lite",
2362 + "smallvec 1.15.1",
2363 + "tokio",
2364 + "want",
2365 +]
2366 +
2367 +[[package]]
2368 +name = "hyper-rustls"
2369 +version = "0.27.7"
2370 +source = "registry+https://github.com/rust-lang/crates.io-index"
2371 +checksum = "e3c93eb611681b207e1fe55d5a71ecf91572ec8a6705cdb6857f7d8d5242cf58"
2372 +dependencies = [
2373 + "http",
2374 + "hyper",
2375 + "hyper-util",
2376 + "rustls",
2377 + "rustls-pki-types",
2378 + "tokio",
2379 + "tokio-rustls",
2380 + "tower-service",
2381 + "webpki-roots 1.0.6",
2382 +]
2383 +
2384 +[[package]]
2385 +name = "hyper-util"
2386 +version = "0.1.20"
2387 +source = "registry+https://github.com/rust-lang/crates.io-index"
2388 +checksum = "96547c2556ec9d12fb1578c4eaf448b04993e7fb79cbaad930a656880a6bdfa0"
2389 +dependencies = [
2390 + "base64 0.22.1",
2391 + "bytes",
2392 + "futures-channel",
2393 + "futures-util",
2394 + "http",
2395 + "http-body",
2396 + "hyper",
2397 + "ipnet",
2398 + "libc",
2399 + "percent-encoding",
2400 + "pin-project-lite",
2401 + "socket2",
2402 + "system-configuration",
2403 + "tokio",
2404 + "tower-service",
2405 + "tracing",
2406 + "windows-registry",
2407 +]
2408 +
2409 +[[package]]
2410 +name = "iana-time-zone"
2411 +version = "0.1.65"
2412 +source = "registry+https://github.com/rust-lang/crates.io-index"
2413 +checksum = "e31bc9ad994ba00e440a8aa5c9ef0ec67d5cb5e5cb0cc7f8b744a35b389cc470"
2414 +dependencies = [
2415 + "android_system_properties",
2416 + "core-foundation-sys",
2417 + "iana-time-zone-haiku",
2418 + "js-sys",
2419 + "log",
2420 + "wasm-bindgen",
2421 + "windows-core 0.62.2",
2422 +]
2423 +
2424 +[[package]]
2425 +name = "iana-time-zone-haiku"
2426 +version = "0.1.2"
2427 +source = "registry+https://github.com/rust-lang/crates.io-index"
2428 +checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f"
2429 +dependencies = [
2430 + "cc",
2431 +]
2432 +
2433 +[[package]]
2434 +name = "icu_collections"
2435 +version = "2.2.0"
2436 +source = "registry+https://github.com/rust-lang/crates.io-index"
2437 +checksum = "2984d1cd16c883d7935b9e07e44071dca8d917fd52ecc02c04d5fa0b5a3f191c"
2438 +dependencies = [
2439 + "displaydoc",
2440 + "potential_utf",
2441 + "utf8_iter",
2442 + "yoke 0.8.2",
2443 + "zerofrom",
2444 + "zerovec",
2445 +]
2446 +
2447 +[[package]]
2448 +name = "icu_locale_core"
2449 +version = "2.2.0"
2450 +source = "registry+https://github.com/rust-lang/crates.io-index"
2451 +checksum = "92219b62b3e2b4d88ac5119f8904c10f8f61bf7e95b640d25ba3075e6cac2c29"
2452 +dependencies = [
2453 + "displaydoc",
2454 + "litemap",
2455 + "tinystr",
2456 + "writeable",
2457 + "zerovec",
2458 +]
2459 +
2460 +[[package]]
2461 +name = "icu_normalizer"
2462 +version = "2.2.0"
2463 +source = "registry+https://github.com/rust-lang/crates.io-index"
2464 +checksum = "c56e5ee99d6e3d33bd91c5d85458b6005a22140021cc324cea84dd0e72cff3b4"
2465 +dependencies = [
2466 + "icu_collections",
2467 + "icu_normalizer_data",
2468 + "icu_properties",
2469 + "icu_provider",
2470 + "smallvec 1.15.1",
2471 + "zerovec",
2472 +]
2473 +
2474 +[[package]]
2475 +name = "icu_normalizer_data"
2476 +version = "2.2.0"
2477 +source = "registry+https://github.com/rust-lang/crates.io-index"
2478 +checksum = "da3be0ae77ea334f4da67c12f149704f19f81d1adf7c51cf482943e84a2bad38"
2479 +
2480 +[[package]]
2481 +name = "icu_properties"
2482 +version = "2.2.0"
2483 +source = "registry+https://github.com/rust-lang/crates.io-index"
2484 +checksum = "bee3b67d0ea5c2cca5003417989af8996f8604e34fb9ddf96208a033901e70de"
2485 +dependencies = [
2486 + "icu_collections",
2487 + "icu_locale_core",
2488 + "icu_properties_data",
2489 + "icu_provider",
2490 + "zerotrie",
2491 + "zerovec",
2492 +]
2493 +
2494 +[[package]]
2495 +name = "icu_properties_data"
2496 +version = "2.2.0"
2497 +source = "registry+https://github.com/rust-lang/crates.io-index"
2498 +checksum = "8e2bbb201e0c04f7b4b3e14382af113e17ba4f63e2c9d2ee626b720cbce54a14"
2499 +
2500 +[[package]]
2501 +name = "icu_provider"
2502 +version = "2.2.0"
2503 +source = "registry+https://github.com/rust-lang/crates.io-index"
2504 +checksum = "139c4cf31c8b5f33d7e199446eff9c1e02decfc2f0eec2c8d71f65befa45b421"
2505 +dependencies = [
2506 + "displaydoc",
2507 + "icu_locale_core",
2508 + "writeable",
2509 + "yoke 0.8.2",
2510 + "zerofrom",
2511 + "zerotrie",
2512 + "zerovec",
2513 +]
2514 +
2515 +[[package]]
2516 +name = "id-arena"
2517 +version = "2.3.0"
2518 +source = "registry+https://github.com/rust-lang/crates.io-index"
2519 +checksum = "3d3067d79b975e8844ca9eb072e16b31c3c1c36928edf9c6789548c524d0d954"
2520 +
2521 +[[package]]
2522 +name = "ident_case"
2523 +version = "1.0.1"
2524 +source = "registry+https://github.com/rust-lang/crates.io-index"
2525 +checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39"
2526 +
2527 +[[package]]
2528 +name = "idna"
2529 +version = "1.1.0"
2530 +source = "registry+https://github.com/rust-lang/crates.io-index"
2531 +checksum = "3b0875f23caa03898994f6ddc501886a45c7d3d62d04d2d90788d47be1b1e4de"
2532 +dependencies = [
2533 + "idna_adapter",
2534 + "smallvec 1.15.1",
2535 + "utf8_iter",
2536 +]
2537 +
2538 +[[package]]
2539 +name = "idna_adapter"
2540 +version = "1.2.1"
2541 +source = "registry+https://github.com/rust-lang/crates.io-index"
2542 +checksum = "3acae9609540aa318d1bc588455225fb2085b9ed0c4f6bd0d9d5bcd86f1a0344"
2543 +dependencies = [
2544 + "icu_normalizer",
2545 + "icu_properties",
2546 +]
2547 +
2548 +[[package]]
2549 +name = "image"
2550 +version = "0.25.10"
2551 +source = "registry+https://github.com/rust-lang/crates.io-index"
2552 +checksum = "85ab80394333c02fe689eaf900ab500fbd0c2213da414687ebf995a65d5a6104"
2553 +dependencies = [
2554 + "bytemuck",
2555 + "byteorder-lite",
2556 + "color_quant",
2557 + "exr",
2558 + "gif",
2559 + "image-webp",
2560 + "moxcms",
2561 + "num-traits",
2562 + "png",
2563 + "qoi",
2564 + "ravif",
2565 + "rayon",
2566 + "rgb",
2567 + "tiff",
2568 + "zune-core",
2569 + "zune-jpeg",
2570 +]
2571 +
2572 +[[package]]
2573 +name = "image-webp"
2574 +version = "0.2.4"
2575 +source = "registry+https://github.com/rust-lang/crates.io-index"
2576 +checksum = "525e9ff3e1a4be2fbea1fdf0e98686a6d98b4d8f937e1bf7402245af1909e8c3"
2577 +dependencies = [
2578 + "byteorder-lite",
2579 + "quick-error",
2580 +]
2581 +
2582 +[[package]]
2583 +name = "imgref"
2584 +version = "1.12.0"
2585 +source = "registry+https://github.com/rust-lang/crates.io-index"
2586 +checksum = "e7c5cedc30da3a610cac6b4ba17597bdf7152cf974e8aab3afb3d54455e371c8"
2587 +
2588 +[[package]]
2589 +name = "indexmap"
2590 +version = "1.9.3"
2591 +source = "registry+https://github.com/rust-lang/crates.io-index"
2592 +checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99"
2593 +dependencies = [
2594 + "autocfg",
2595 + "hashbrown 0.12.3",
2596 + "serde",
2597 +]
2598 +
2599 +[[package]]
2600 +name = "indexmap"
2601 +version = "2.14.0"
2602 +source = "registry+https://github.com/rust-lang/crates.io-index"
2603 +checksum = "d466e9454f08e4a911e14806c24e16fba1b4c121d1ea474396f396069cf949d9"
2604 +dependencies = [
2605 + "equivalent",
2606 + "hashbrown 0.17.0",
2607 + "serde",
2608 + "serde_core",
2609 +]
2610 +
2611 +[[package]]
2612 +name = "indicatif"
2613 +version = "0.17.11"
2614 +source = "registry+https://github.com/rust-lang/crates.io-index"
2615 +checksum = "183b3088984b400f4cfac3620d5e076c84da5364016b4f49473de574b2586235"
2616 +dependencies = [
2617 + "console 0.15.11",
2618 + "number_prefix",
2619 + "portable-atomic",
2620 + "unicode-width 0.2.2",
2621 + "web-time",
2622 +]
2623 +
2624 +[[package]]
2625 +name = "indicatif"
2626 +version = "0.18.4"
2627 +source = "registry+https://github.com/rust-lang/crates.io-index"
2628 +checksum = "25470f23803092da7d239834776d653104d551bc4d7eacaf31e6837854b8e9eb"
2629 +dependencies = [
2630 + "console 0.16.3",
2631 + "portable-atomic",
2632 + "rayon",
2633 + "unicode-width 0.2.2",
2634 + "unit-prefix",
2635 + "web-time",
2636 +]
2637 +
2638 +[[package]]
2639 +name = "interpolate_name"
2640 +version = "0.2.4"
2641 +source = "registry+https://github.com/rust-lang/crates.io-index"
2642 +checksum = "c34819042dc3d3971c46c2190835914dfbe0c3c13f61449b2997f4e9722dfa60"
2643 +dependencies = [
2644 + "proc-macro2",
2645 + "quote",
2646 + "syn 2.0.117",
2647 +]
2648 +
2649 +[[package]]
2650 +name = "interprocess"
2651 +version = "2.4.0"
2652 +source = "registry+https://github.com/rust-lang/crates.io-index"
2653 +checksum = "6be5e5c847dbdb44564bd85294740d031f4f8aeb3464e5375ef7141f7538db69"
2654 +dependencies = [
2655 + "doctest-file",
2656 + "libc",
2657 + "recvmsg",
2658 + "widestring",
2659 + "windows-sys 0.52.0",
2660 +]
2661 +
2662 +[[package]]
2663 +name = "ipnet"
2664 +version = "2.12.0"
2665 +source = "registry+https://github.com/rust-lang/crates.io-index"
2666 +checksum = "d98f6fed1fde3f8c21bc40a1abb88dd75e67924f9cffc3ef95607bad8017f8e2"
2667 +
2668 +[[package]]
2669 +name = "iri-string"
2670 +version = "0.7.12"
2671 +source = "registry+https://github.com/rust-lang/crates.io-index"
2672 +checksum = "25e659a4bb38e810ebc252e53b5814ff908a8c58c2a9ce2fae1bbec24cbf4e20"
2673 +dependencies = [
2674 + "memchr",
2675 + "serde",
2676 +]
2677 +
2678 +[[package]]
2679 +name = "is_terminal_polyfill"
2680 +version = "1.70.2"
2681 +source = "registry+https://github.com/rust-lang/crates.io-index"
2682 +checksum = "a6cb138bb79a146c1bd460005623e142ef0181e3d0219cb493e02f7d08a35695"
2683 +
2684 +[[package]]
2685 +name = "itertools"
2686 +version = "0.14.0"
2687 +source = "registry+https://github.com/rust-lang/crates.io-index"
2688 +checksum = "2b192c782037fadd9cfa75548310488aabdbf3d2da73885b31bd0abd03351285"
2689 +dependencies = [
2690 + "either",
2691 +]
2692 +
2693 +[[package]]
2694 +name = "itoa"
2695 +version = "1.0.18"
2696 +source = "registry+https://github.com/rust-lang/crates.io-index"
2697 +checksum = "8f42a60cbdf9a97f5d2305f08a87dc4e09308d1276d28c869c684d7777685682"
2698 +
2699 +[[package]]
2700 +name = "jni"
2701 +version = "0.21.1"
2702 +source = "registry+https://github.com/rust-lang/crates.io-index"
2703 +checksum = "1a87aa2bb7d2af34197c04845522473242e1aa17c12f4935d5856491a7fb8c97"
2704 +dependencies = [
2705 + "cesu8",
2706 + "cfg-if",
2707 + "combine",
2708 + "jni-sys 0.3.1",
2709 + "log",
2710 + "thiserror 1.0.69",
2711 + "walkdir",
2712 + "windows-sys 0.45.0",
2713 +]
2714 +
2715 +[[package]]
2716 +name = "jni-sys"
2717 +version = "0.3.1"
2718 +source = "registry+https://github.com/rust-lang/crates.io-index"
2719 +checksum = "41a652e1f9b6e0275df1f15b32661cf0d4b78d4d87ddec5e0c3c20f097433258"
2720 +dependencies = [
2721 + "jni-sys 0.4.1",
2722 +]
2723 +
2724 +[[package]]
2725 +name = "jni-sys"
2726 +version = "0.4.1"
2727 +source = "registry+https://github.com/rust-lang/crates.io-index"
2728 +checksum = "c6377a88cb3910bee9b0fa88d4f42e1d2da8e79915598f65fb0c7ee14c878af2"
2729 +dependencies = [
2730 + "jni-sys-macros",
2731 +]
2732 +
2733 +[[package]]
2734 +name = "jni-sys-macros"
2735 +version = "0.4.1"
2736 +source = "registry+https://github.com/rust-lang/crates.io-index"
2737 +checksum = "38c0b942f458fe50cdac086d2f946512305e5631e720728f2a61aabcd47a6264"
2738 +dependencies = [
2739 + "quote",
2740 + "syn 2.0.117",
2741 +]
2742 +
2743 +[[package]]
2744 +name = "jobserver"
2745 +version = "0.1.34"
2746 +source = "registry+https://github.com/rust-lang/crates.io-index"
2747 +checksum = "9afb3de4395d6b3e67a780b6de64b51c978ecf11cb9a462c66be7d4ca9039d33"
2748 +dependencies = [
2749 + "getrandom 0.3.4",
2750 + "libc",
2751 +]
2752 +
2753 +[[package]]
2754 +name = "js-sys"
2755 +version = "0.3.94"
2756 +source = "registry+https://github.com/rust-lang/crates.io-index"
2757 +checksum = "2e04e2ef80ce82e13552136fabeef8a5ed1f985a96805761cbb9a2c34e7664d9"
2758 +dependencies = [
2759 + "cfg-if",
2760 + "futures-util",
2761 + "once_cell",
2762 + "wasm-bindgen",
2763 +]
2764 +
2765 +[[package]]
2766 +name = "lazy_static"
2767 +version = "1.5.0"
2768 +source = "registry+https://github.com/rust-lang/crates.io-index"
2769 +checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe"
2770 +
2771 +[[package]]
2772 +name = "leb128fmt"
2773 +version = "0.1.0"
2774 +source = "registry+https://github.com/rust-lang/crates.io-index"
2775 +checksum = "09edd9e8b54e49e587e4f6295a7d29c3ea94d469cb40ab8ca70b288248a81db2"
2776 +
2777 +[[package]]
2778 +name = "lebe"
2779 +version = "0.5.3"
2780 +source = "registry+https://github.com/rust-lang/crates.io-index"
2781 +checksum = "7a79a3332a6609480d7d0c9eab957bca6b455b91bb84e66d19f5ff66294b85b8"
2782 +
2783 +[[package]]
2784 +name = "libc"
2785 +version = "0.2.184"
2786 +source = "registry+https://github.com/rust-lang/crates.io-index"
2787 +checksum = "48f5d2a454e16a5ea0f4ced81bd44e4cfc7bd3a507b61887c99fd3538b28e4af"
2788 +
2789 +[[package]]
2790 +name = "libfuzzer-sys"
2791 +version = "0.4.12"
2792 +source = "registry+https://github.com/rust-lang/crates.io-index"
2793 +checksum = "f12a681b7dd8ce12bff52488013ba614b869148d54dd79836ab85aafdd53f08d"
2794 +dependencies = [
2795 + "arbitrary",
2796 + "cc",
2797 +]
2798 +
2799 +[[package]]
2800 +name = "libloading"
2801 +version = "0.8.9"
2802 +source = "registry+https://github.com/rust-lang/crates.io-index"
2803 +checksum = "d7c4b02199fee7c5d21a5ae7d8cfa79a6ef5bb2fc834d6e9058e89c825efdc55"
2804 +dependencies = [
2805 + "cfg-if",
2806 + "windows-link 0.2.1",
2807 +]
2808 +
2809 +[[package]]
2810 +name = "libm"
2811 +version = "0.2.16"
2812 +source = "registry+https://github.com/rust-lang/crates.io-index"
2813 +checksum = "b6d2cec3eae94f9f509c767b45932f1ada8350c4bdb85af2fcab4a3c14807981"
2814 +
2815 +[[package]]
2816 +name = "libredox"
2817 +version = "0.1.15"
2818 +source = "registry+https://github.com/rust-lang/crates.io-index"
2819 +checksum = "7ddbf48fd451246b1f8c2610bd3b4ac0cc6e149d89832867093ab69a17194f08"
2820 +dependencies = [
2821 + "libc",
2822 +]
2823 +
2824 +[[package]]
2825 +name = "linux-raw-sys"
2826 +version = "0.12.1"
2827 +source = "registry+https://github.com/rust-lang/crates.io-index"
2828 +checksum = "32a66949e030da00e8c7d4434b251670a91556f4144941d37452769c25d58a53"
2829 +
2830 +[[package]]
2831 +name = "litemap"
2832 +version = "0.8.2"
2833 +source = "registry+https://github.com/rust-lang/crates.io-index"
2834 +checksum = "92daf443525c4cce67b150400bc2316076100ce0b3686209eb8cf3c31612e6f0"
2835 +
2836 +[[package]]
2837 +name = "litrs"
2838 +version = "1.0.0"
2839 +source = "registry+https://github.com/rust-lang/crates.io-index"
2840 +checksum = "11d3d7f243d5c5a8b9bb5d6dd2b1602c0cb0b9db1621bafc7ed66e35ff9fe092"
2841 +
2842 +[[package]]
2843 +name = "llguidance"
2844 +version = "1.7.0"
2845 +source = "registry+https://github.com/rust-lang/crates.io-index"
2846 +checksum = "586ccb282d83fe337ddad2e28bb11bb258a462caa80e117fc76a6c73dac919e4"
2847 +dependencies = [
2848 + "anyhow",
2849 + "derivre",
2850 + "indexmap 2.14.0",
2851 + "regex-syntax",
2852 + "serde",
2853 + "serde_json",
2854 + "toktrie",
2855 +]
2856 +
2857 +[[package]]
2858 +name = "lock_api"
2859 +version = "0.4.14"
2860 +source = "registry+https://github.com/rust-lang/crates.io-index"
2861 +checksum = "224399e74b87b5f3557511d98dff8b14089b3dadafcab6bb93eab67d3aace965"
2862 +dependencies = [
2863 + "scopeguard",
2864 +]
2865 +
2866 +[[package]]
2867 +name = "log"
2868 +version = "0.4.29"
2869 +source = "registry+https://github.com/rust-lang/crates.io-index"
2870 +checksum = "5e5032e24019045c762d3c0f28f5b6b8bbf38563a65908389bf7978758920897"
2871 +
2872 +[[package]]
2873 +name = "loom"
2874 +version = "0.5.6"
2875 +source = "registry+https://github.com/rust-lang/crates.io-index"
2876 +checksum = "ff50ecb28bb86013e935fb6683ab1f6d3a20016f123c76fd4c27470076ac30f5"
2877 +dependencies = [
2878 + "cfg-if",
2879 + "generator",
2880 + "scoped-tls",
2881 + "serde",
2882 + "serde_json",
2883 + "tracing",
2884 + "tracing-subscriber",
2885 +]
2886 +
2887 +[[package]]
2888 +name = "loop9"
2889 +version = "0.1.5"
2890 +source = "registry+https://github.com/rust-lang/crates.io-index"
2891 +checksum = "0fae87c125b03c1d2c0150c90365d7d6bcc53fb73a9acaef207d2d065860f062"
2892 +dependencies = [
2893 + "imgref",
2894 +]
2895 +
2896 +[[package]]
2897 +name = "lrtable"
2898 +version = "0.14.1"
2899 +source = "registry+https://github.com/rust-lang/crates.io-index"
2900 +checksum = "b15ad6a43e5cff4ac046d51281d2256a36d1440065eab53ccce9362b48db5b42"
2901 +dependencies = [
2902 + "cfgrammar",
2903 + "fnv",
2904 + "num-traits",
2905 + "sparsevec",
2906 + "vob",
2907 +]
2908 +
2909 +[[package]]
2910 +name = "lru-slab"
2911 +version = "0.1.2"
2912 +source = "registry+https://github.com/rust-lang/crates.io-index"
2913 +checksum = "112b39cec0b298b6c1999fee3e31427f74f676e4cb9879ed1a121b43661a4154"
2914 +
2915 +[[package]]
2916 +name = "mac"
2917 +version = "0.1.1"
2918 +source = "registry+https://github.com/rust-lang/crates.io-index"
2919 +checksum = "c41e0c4fef86961ac6d6f8a82609f55f31b05e4fce149ac5710e439df7619ba4"
2920 +
2921 +[[package]]
2922 +name = "macro_rules_attribute"
2923 +version = "0.2.2"
2924 +source = "registry+https://github.com/rust-lang/crates.io-index"
2925 +checksum = "65049d7923698040cd0b1ddcced9b0eb14dd22c5f86ae59c3740eab64a676520"
2926 +dependencies = [
2927 + "macro_rules_attribute-proc_macro",
2928 + "paste",
2929 +]
2930 +
2931 +[[package]]
2932 +name = "macro_rules_attribute-proc_macro"
2933 +version = "0.2.2"
2934 +source = "registry+https://github.com/rust-lang/crates.io-index"
2935 +checksum = "670fdfda89751bc4a84ac13eaa63e205cf0fd22b4c9a5fbfa085b63c1f1d3a30"
2936 +
2937 +[[package]]
2938 +name = "malloc_buf"
2939 +version = "0.0.6"
2940 +source = "registry+https://github.com/rust-lang/crates.io-index"
2941 +checksum = "62bb907fe88d54d8d9ce32a3cceab4218ed2f6b7d35617cafe9adf84e43919cb"
2942 +dependencies = [
2943 + "libc",
2944 +]
2945 +
2946 +[[package]]
2947 +name = "markup5ever"
2948 +version = "0.36.1"
2949 +source = "registry+https://github.com/rust-lang/crates.io-index"
2950 +checksum = "6c3294c4d74d0742910f8c7b466f44dda9eb2d5742c1e430138df290a1e8451c"
2951 +dependencies = [
2952 + "log",
2953 + "tendril 0.4.3",
2954 + "web_atoms",
2955 +]
2956 +
2957 +[[package]]
2958 +name = "markup5ever"
2959 +version = "0.38.0"
2960 +source = "registry+https://github.com/rust-lang/crates.io-index"
2961 +checksum = "8983d30f2915feeaaab2d6babdd6bc7e9ed1a00b66b5e6d74df19aa9c0e91862"
2962 +dependencies = [
2963 + "log",
2964 + "tendril 0.5.0",
2965 + "web_atoms",
2966 +]
2967 +
2968 +[[package]]
2969 +name = "matchers"
2970 +version = "0.2.0"
2971 +source = "registry+https://github.com/rust-lang/crates.io-index"
2972 +checksum = "d1525a2a28c7f4fa0fc98bb91ae755d1e2d1505079e05539e35bc876b5d65ae9"
2973 +dependencies = [
2974 + "regex-automata",
2975 +]
2976 +
2977 +[[package]]
2978 +name = "matrixmultiply"
2979 +version = "0.3.10"
2980 +source = "registry+https://github.com/rust-lang/crates.io-index"
2981 +checksum = "a06de3016e9fae57a36fd14dba131fccf49f74b40b7fbdb472f96e361ec71a08"
2982 +dependencies = [
2983 + "autocfg",
2984 + "rawpointer",
2985 +]
2986 +
2987 +[[package]]
2988 +name = "maybe-rayon"
2989 +version = "0.1.1"
2990 +source = "registry+https://github.com/rust-lang/crates.io-index"
2991 +checksum = "8ea1f30cedd69f0a2954655f7188c6a834246d2bcf1e315e2ac40c4b24dc9519"
2992 +dependencies = [
2993 + "cfg-if",
2994 + "rayon",
2995 +]
2996 +
2997 +[[package]]
2998 +name = "memchr"
2999 +version = "2.8.0"
3000 +source = "registry+https://github.com/rust-lang/crates.io-index"
3001 +checksum = "f8ca58f447f06ed17d5fc4043ce1b10dd205e060fb3ce5b979b8ed8e59ff3f79"
3002 +
3003 +[[package]]
3004 +name = "memmap2"
3005 +version = "0.9.10"
3006 +source = "registry+https://github.com/rust-lang/crates.io-index"
3007 +checksum = "714098028fe011992e1c3962653c96b2d578c4b4bce9036e15ff220319b1e0e3"
3008 +dependencies = [
3009 + "libc",
3010 + "stable_deref_trait",
3011 +]
3012 +
3013 +[[package]]
3014 +name = "memo-map"
3015 +version = "0.3.3"
3016 +source = "registry+https://github.com/rust-lang/crates.io-index"
3017 +checksum = "38d1115007560874e373613744c6fba374c17688327a71c1476d1a5954cc857b"
3018 +
3019 +[[package]]
3020 +name = "metal"
3021 +version = "0.29.0"
3022 +source = "registry+https://github.com/rust-lang/crates.io-index"
3023 +checksum = "7ecfd3296f8c56b7c1f6fbac3c71cefa9d78ce009850c45000015f206dc7fa21"
3024 +dependencies = [
3025 + "bitflags 2.11.0",
3026 + "block",
3027 + "core-graphics-types",
3028 + "foreign-types",
3029 + "log",
3030 + "objc",
3031 + "paste",
3032 +]
3033 +
3034 +[[package]]
3035 +name = "mime"
3036 +version = "0.3.17"
3037 +source = "registry+https://github.com/rust-lang/crates.io-index"
3038 +checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a"
3039 +
3040 +[[package]]
3041 +name = "mime_guess"
3042 +version = "2.0.5"
3043 +source = "registry+https://github.com/rust-lang/crates.io-index"
3044 +checksum = "f7c44f8e672c00fe5308fa235f821cb4198414e1c77935c1ab6948d3fd78550e"
3045 +dependencies = [
3046 + "mime",
3047 + "unicase",
3048 +]
3049 +
3050 +[[package]]
3051 +name = "minijinja"
3052 +version = "2.19.0"
3053 +source = "registry+https://github.com/rust-lang/crates.io-index"
3054 +checksum = "805bfd7352166bae857ee569628b52bcd85a1cecf7810861ebceb1686b72b75d"
3055 +dependencies = [
3056 + "memo-map",
3057 + "serde",
3058 + "serde_json",
3059 +]
3060 +
3061 +[[package]]
3062 +name = "minijinja-contrib"
3063 +version = "2.19.0"
3064 +source = "registry+https://github.com/rust-lang/crates.io-index"
3065 +checksum = "45092d80391870622fcf3bd82f5d2af18f99533ea60debb4bc9db0c76f0e809a"
3066 +dependencies = [
3067 + "minijinja",
3068 + "serde",
3069 +]
3070 +
3071 +[[package]]
3072 +name = "minimal-lexical"
3073 +version = "0.2.1"
3074 +source = "registry+https://github.com/rust-lang/crates.io-index"
3075 +checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a"
3076 +
3077 +[[package]]
3078 +name = "miniz_oxide"
3079 +version = "0.8.9"
3080 +source = "registry+https://github.com/rust-lang/crates.io-index"
3081 +checksum = "1fa76a2c86f704bdb222d66965fb3d63269ce38518b83cb0575fca855ebb6316"
3082 +dependencies = [
3083 + "adler2",
3084 + "simd-adler32",
3085 +]
3086 +
3087 +[[package]]
3088 +name = "mio"
3089 +version = "1.2.0"
3090 +source = "registry+https://github.com/rust-lang/crates.io-index"
3091 +checksum = "50b7e5b27aa02a74bac8c3f23f448f8d87ff11f92d3aac1a6ed369ee08cc56c1"
3092 +dependencies = [
3093 + "libc",
3094 + "log",
3095 + "wasi",
3096 + "windows-sys 0.61.2",
3097 +]
3098 +
3099 +[[package]]
3100 +name = "mistralrs"
3101 +version = "0.8.1"
3102 +source = "git+https://github.com/setoelkahfi/mistral.rs?branch=fix%2Fall-platform-fixes#a27af8ea01123e5d5777120619413345989f4006"
3103 +dependencies = [
3104 + "anyhow",
3105 + "candle-core",
3106 + "candle-nn",
3107 + "clap 4.6.0",
3108 + "either",
3109 + "futures",
3110 + "image",
3111 + "indexmap 2.14.0",
3112 + "mistralrs-core",
3113 + "mistralrs-macros",
3114 + "rand 0.9.2",
3115 + "reqwest 0.13.2",
3116 + "schemars 1.2.1",
3117 + "serde",
3118 + "serde_json",
3119 + "thiserror 2.0.18",
3120 + "tokio",
3121 + "tracing",
3122 + "tracing-subscriber",
3123 + "walkdir",
3124 +]
3125 +
3126 +[[package]]
3127 +name = "mistralrs-audio"
3128 +version = "0.8.1"
3129 +source = "git+https://github.com/setoelkahfi/mistral.rs?branch=fix%2Fall-platform-fixes#a27af8ea01123e5d5777120619413345989f4006"
3130 +dependencies = [
3131 + "anyhow",
3132 + "apodize",
3133 + "hound",
3134 + "symphonia",
3135 +]
3136 +
3137 +[[package]]
3138 +name = "mistralrs-core"
3139 +version = "0.8.1"
3140 +source = "git+https://github.com/setoelkahfi/mistral.rs?branch=fix%2Fall-platform-fixes#a27af8ea01123e5d5777120619413345989f4006"
3141 +dependencies = [
3142 + "ahash",
3143 + "akin",
3144 + "anyhow",
3145 + "apodize",
3146 + "as-any",
3147 + "async-trait",
3148 + "base64 0.22.1",
3149 + "bm25",
3150 + "bytemuck",
3151 + "bytemuck_derive",
3152 + "candle-core",
3153 + "candle-metal-kernels",
3154 + "candle-nn",
3155 + "cfgrammar",
3156 + "chrono",
3157 + "clap 4.6.0",
3158 + "csv",
3159 + "derive-new",
3160 + "derive_more",
3161 + "dirs",
3162 + "either",
3163 + "float8",
3164 + "futures",
3165 + "galil-seiferas",
3166 + "half",
3167 + "hashbrown 0.16.1",
3168 + "hf-hub",
3169 + "hound",
3170 + "html2text",
3171 + "http",
3172 + "image",
3173 + "indexmap 2.14.0",
3174 + "indicatif 0.18.4",
3175 + "interprocess",
3176 + "itertools",
3177 + "libc",
3178 + "llguidance",
3179 + "lrtable",
3180 + "minijinja",
3181 + "minijinja-contrib",
3182 + "mistralrs-audio",
3183 + "mistralrs-mcp",
3184 + "mistralrs-paged-attn",
3185 + "mistralrs-quant",
3186 + "mistralrs-vision",
3187 + "num-traits",
3188 + "objc",
3189 + "objc2-metal",
3190 + "openai-harmony",
3191 + "ordered-float",
3192 + "parking_lot",
3193 + "radix_trie",
3194 + "rand 0.9.2",
3195 + "rand_distr 0.5.1",
3196 + "rand_isaac",
3197 + "rayon",
3198 + "regex",
3199 + "regex-automata",
3200 + "reqwest 0.13.2",
3201 + "rubato",
3202 + "rust-mcp-schema",
3203 + "rustc-hash 2.1.2",
3204 + "rustfft",
3205 + "safetensors 0.7.0",
3206 + "schemars 1.2.1",
3207 + "scraper",
3208 + "serde",
3209 + "serde-big-array",
3210 + "serde-saphyr",
3211 + "serde_json",
3212 + "serde_plain",
3213 + "statrs",
3214 + "strum",
3215 + "symphonia",
3216 + "sysinfo",
3217 + "thiserror 2.0.18",
3218 + "tokenizers 0.21.4",
3219 + "tokio",
3220 + "tokio-rayon",
3221 + "tokio-tungstenite",
3222 + "toktrie",
3223 + "toktrie_hf_tokenizers",
3224 + "toml",
3225 + "tqdm",
3226 + "tracing",
3227 + "tracing-subscriber",
3228 + "urlencoding",
3229 + "uuid 1.23.0",
3230 + "variantly",
3231 + "vob",
3232 +]
3233 +
3234 +[[package]]
3235 +name = "mistralrs-macros"
3236 +version = "0.8.1"
3237 +source = "git+https://github.com/setoelkahfi/mistral.rs?branch=fix%2Fall-platform-fixes#a27af8ea01123e5d5777120619413345989f4006"
3238 +dependencies = [
3239 + "darling 0.23.0",
3240 + "proc-macro2",
3241 + "quote",
3242 + "syn 2.0.117",
3243 +]
3244 +
3245 +[[package]]
3246 +name = "mistralrs-mcp"
3247 +version = "0.8.1"
3248 +source = "git+https://github.com/setoelkahfi/mistral.rs?branch=fix%2Fall-platform-fixes#a27af8ea01123e5d5777120619413345989f4006"
3249 +dependencies = [
3250 + "anyhow",
3251 + "async-trait",
3252 + "futures-util",
3253 + "http",
3254 + "reqwest 0.13.2",
3255 + "rust-mcp-schema",
3256 + "serde",
3257 + "serde_json",
3258 + "tokio",
3259 + "tokio-tungstenite",
3260 + "tracing",
3261 + "utoipa",
3262 + "uuid 1.23.0",
3263 +]
3264 +
3265 +[[package]]
3266 +name = "mistralrs-paged-attn"
3267 +version = "0.8.1"
3268 +source = "git+https://github.com/setoelkahfi/mistral.rs?branch=fix%2Fall-platform-fixes#a27af8ea01123e5d5777120619413345989f4006"
3269 +dependencies = [
3270 + "anyhow",
3271 + "candle-core",
3272 + "candle-metal-kernels",
3273 + "dispatch2",
3274 + "float8",
3275 + "half",
3276 + "objc2-foundation",
3277 + "objc2-metal",
3278 + "thiserror 2.0.18",
3279 +]
3280 +
3281 +[[package]]
3282 +name = "mistralrs-quant"
3283 +version = "0.8.1"
3284 +source = "git+https://github.com/setoelkahfi/mistral.rs?branch=fix%2Fall-platform-fixes#a27af8ea01123e5d5777120619413345989f4006"
3285 +dependencies = [
3286 + "byteorder",
3287 + "candle-core",
3288 + "candle-metal-kernels",
3289 + "candle-nn",
3290 + "dispatch2",
3291 + "float8",
3292 + "half",
3293 + "hf-hub",
3294 + "lazy_static",
3295 + "memmap2",
3296 + "objc2-foundation",
3297 + "objc2-metal",
3298 + "paste",
3299 + "rayon",
3300 + "regex",
3301 + "safetensors 0.7.0",
3302 + "serde",
3303 + "serde_json",
3304 + "thiserror 2.0.18",
3305 + "tokio",
3306 + "tracing",
3307 + "yoke 0.8.2",
3308 +]
3309 +
3310 +[[package]]
3311 +name = "mistralrs-vision"
3312 +version = "0.8.1"
3313 +source = "git+https://github.com/setoelkahfi/mistral.rs?branch=fix%2Fall-platform-fixes#a27af8ea01123e5d5777120619413345989f4006"
3314 +dependencies = [
3315 + "candle-core",
3316 + "image",
3317 + "rayon",
3318 +]
3319 +
3320 +[[package]]
3321 +name = "monostate"
3322 +version = "0.1.18"
3323 +source = "registry+https://github.com/rust-lang/crates.io-index"
3324 +checksum = "3341a273f6c9d5bef1908f17b7267bbab0e95c9bf69a0d4dcf8e9e1b2c76ef67"
3325 +dependencies = [
3326 + "monostate-impl",
3327 + "serde",
3328 + "serde_core",
3329 +]
3330 +
3331 +[[package]]
3332 +name = "monostate-impl"
3333 +version = "0.1.18"
3334 +source = "registry+https://github.com/rust-lang/crates.io-index"
3335 +checksum = "e4db6d5580af57bf992f59068d4ea26fd518574ff48d7639b255a36f9de6e7e9"
3336 +dependencies = [
3337 + "proc-macro2",
3338 + "quote",
3339 + "syn 2.0.117",
3340 +]
3341 +
3342 +[[package]]
3343 +name = "moxcms"
3344 +version = "0.8.1"
3345 +source = "registry+https://github.com/rust-lang/crates.io-index"
3346 +checksum = "bb85c154ba489f01b25c0d36ae69a87e4a1c73a72631fc6c0eb6dde34a73e44b"
3347 +dependencies = [
3348 + "num-traits",
3349 + "pxfm",
3350 +]
3351 +
3352 +[[package]]
3353 +name = "nalgebra"
3354 +version = "0.33.3"
3355 +source = "registry+https://github.com/rust-lang/crates.io-index"
3356 +checksum = "9d43ddcacf343185dfd6de2ee786d9e8b1c2301622afab66b6c73baf9882abfd"
3357 +dependencies = [
3358 + "approx",
3359 + "matrixmultiply",
3360 + "num-complex",
3361 + "num-rational",
3362 + "num-traits",
3363 + "rand 0.8.5",
3364 + "rand_distr 0.4.3",
3365 + "simba",
3366 + "typenum",
3367 +]
3368 +
3369 +[[package]]
3370 +name = "new_debug_unreachable"
3371 +version = "1.0.6"
3372 +source = "registry+https://github.com/rust-lang/crates.io-index"
3373 +checksum = "650eef8c711430f1a879fdd01d4745a7deea475becfb90269c06775983bbf086"
3374 +
3375 +[[package]]
3376 +name = "nibble_vec"
3377 +version = "0.1.0"
3378 +source = "registry+https://github.com/rust-lang/crates.io-index"
3379 +checksum = "77a5d83df9f36fe23f0c3648c6bbb8b0298bb5f1939c8f2704431371f4b84d43"
3380 +dependencies = [
3381 + "smallvec 1.15.1",
3382 +]
3383 +
3384 +[[package]]
3385 +name = "nohash-hasher"
3386 +version = "0.2.0"
3387 +source = "registry+https://github.com/rust-lang/crates.io-index"
3388 +checksum = "2bf50223579dc7cdcfb3bfcacf7069ff68243f8c363f62ffa99cf000a6b9c451"
3389 +
3390 +[[package]]
3391 +name = "nom"
3392 +version = "7.1.3"
3393 +source = "registry+https://github.com/rust-lang/crates.io-index"
3394 +checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a"
3395 +dependencies = [
3396 + "memchr",
3397 + "minimal-lexical",
3398 +]
3399 +
3400 +[[package]]
3401 +name = "nom"
3402 +version = "8.0.0"
3403 +source = "registry+https://github.com/rust-lang/crates.io-index"
3404 +checksum = "df9761775871bdef83bee530e60050f7e54b1105350d6884eb0fb4f46c2f9405"
3405 +dependencies = [
3406 + "memchr",
3407 +]
3408 +
3409 +[[package]]
3410 +name = "noop_proc_macro"
3411 +version = "0.3.0"
3412 +source = "registry+https://github.com/rust-lang/crates.io-index"
3413 +checksum = "0676bb32a98c1a483ce53e500a81ad9c3d5b3f7c920c28c24e9cb0980d0b5bc8"
3414 +
3415 +[[package]]
3416 +name = "ntapi"
3417 +version = "0.4.3"
3418 +source = "registry+https://github.com/rust-lang/crates.io-index"
3419 +checksum = "c3b335231dfd352ffb0f8017f3b6027a4917f7df785ea2143d8af2adc66980ae"
3420 +dependencies = [
3421 + "winapi",
3422 +]
3423 +
3424 +[[package]]
3425 +name = "nu-ansi-term"
3426 +version = "0.50.3"
3427 +source = "registry+https://github.com/rust-lang/crates.io-index"
3428 +checksum = "7957b9740744892f114936ab4a57b3f487491bbeafaf8083688b16841a4240e5"
3429 +dependencies = [
3430 + "windows-sys 0.61.2",
3431 +]
3432 +
3433 +[[package]]
3434 +name = "num"
3435 +version = "0.4.3"
3436 +source = "registry+https://github.com/rust-lang/crates.io-index"
3437 +checksum = "35bd024e8b2ff75562e5f34e7f4905839deb4b22955ef5e73d2fea1b9813cb23"
3438 +dependencies = [
3439 + "num-bigint",
3440 + "num-complex",
3441 + "num-integer",
3442 + "num-iter",
3443 + "num-rational",
3444 + "num-traits",
3445 +]
3446 +
3447 +[[package]]
3448 +name = "num-bigint"
3449 +version = "0.4.6"
3450 +source = "registry+https://github.com/rust-lang/crates.io-index"
3451 +checksum = "a5e44f723f1133c9deac646763579fdb3ac745e418f2a7af9cd0c431da1f20b9"
3452 +dependencies = [
3453 + "num-integer",
3454 + "num-traits",
3455 +]
3456 +
3457 +[[package]]
3458 +name = "num-complex"
3459 +version = "0.4.6"
3460 +source = "registry+https://github.com/rust-lang/crates.io-index"
3461 +checksum = "73f88a1307638156682bada9d7604135552957b7818057dcef22705b4d509495"
3462 +dependencies = [
3463 + "bytemuck",
3464 + "num-traits",
3465 +]
3466 +
3467 +[[package]]
3468 +name = "num-conv"
3469 +version = "0.2.1"
3470 +source = "registry+https://github.com/rust-lang/crates.io-index"
3471 +checksum = "c6673768db2d862beb9b39a78fdcb1a69439615d5794a1be50caa9bc92c81967"
3472 +
3473 +[[package]]
3474 +name = "num-derive"
3475 +version = "0.4.2"
3476 +source = "registry+https://github.com/rust-lang/crates.io-index"
3477 +checksum = "ed3955f1a9c7c0c15e092f9c887db08b1fc683305fdf6eb6684f22555355e202"
3478 +dependencies = [
3479 + "proc-macro2",
3480 + "quote",
3481 + "syn 2.0.117",
3482 +]
3483 +
3484 +[[package]]
3485 +name = "num-integer"
3486 +version = "0.1.46"
3487 +source = "registry+https://github.com/rust-lang/crates.io-index"
3488 +checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f"
3489 +dependencies = [
3490 + "num-traits",
3491 +]
3492 +
3493 +[[package]]
3494 +name = "num-iter"
3495 +version = "0.1.45"
3496 +source = "registry+https://github.com/rust-lang/crates.io-index"
3497 +checksum = "1429034a0490724d0075ebb2bc9e875d6503c3cf69e235a8941aa757d83ef5bf"
3498 +dependencies = [
3499 + "autocfg",
3500 + "num-integer",
3501 + "num-traits",
3502 +]
3503 +
3504 +[[package]]
3505 +name = "num-rational"
3506 +version = "0.4.2"
3507 +source = "registry+https://github.com/rust-lang/crates.io-index"
3508 +checksum = "f83d14da390562dca69fc84082e73e548e1ad308d24accdedd2720017cb37824"
3509 +dependencies = [
3510 + "num-bigint",
3511 + "num-integer",
3512 + "num-traits",
3513 +]
3514 +
3515 +[[package]]
3516 +name = "num-traits"
3517 +version = "0.2.19"
3518 +source = "registry+https://github.com/rust-lang/crates.io-index"
3519 +checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841"
3520 +dependencies = [
3521 + "autocfg",
3522 + "libm",
3523 +]
3524 +
3525 +[[package]]
3526 +name = "num_cpus"
3527 +version = "1.17.0"
3528 +source = "registry+https://github.com/rust-lang/crates.io-index"
3529 +checksum = "91df4bbde75afed763b708b7eee1e8e7651e02d97f6d5dd763e89367e957b23b"
3530 +dependencies = [
3531 + "hermit-abi 0.5.2",
3532 + "libc",
3533 +]
3534 +
3535 +[[package]]
3536 +name = "number_prefix"
3537 +version = "0.4.0"
3538 +source = "registry+https://github.com/rust-lang/crates.io-index"
3539 +checksum = "830b246a0e5f20af87141b25c173cd1b609bd7779a4617d6ec582abaf90870f3"
3540 +
3541 +[[package]]
3542 +name = "objc"
3543 +version = "0.2.7"
3544 +source = "registry+https://github.com/rust-lang/crates.io-index"
3545 +checksum = "915b1b472bc21c53464d6c8461c9d3af805ba1ef837e1cac254428f4a77177b1"
3546 +dependencies = [
3547 + "malloc_buf",
3548 +]
3549 +
3550 +[[package]]
3551 +name = "objc2"
3552 +version = "0.6.4"
3553 +source = "registry+https://github.com/rust-lang/crates.io-index"
3554 +checksum = "3a12a8ed07aefc768292f076dc3ac8c48f3781c8f2d5851dd3d98950e8c5a89f"
3555 +dependencies = [
3556 + "objc2-encode",
3557 +]
3558 +
3559 +[[package]]
3560 +name = "objc2-core-foundation"
3561 +version = "0.3.2"
3562 +source = "registry+https://github.com/rust-lang/crates.io-index"
3563 +checksum = "2a180dd8642fa45cdb7dd721cd4c11b1cadd4929ce112ebd8b9f5803cc79d536"
3564 +dependencies = [
3565 + "bitflags 2.11.0",
3566 + "dispatch2",
3567 + "objc2",
3568 +]
3569 +
3570 +[[package]]
3571 +name = "objc2-encode"
3572 +version = "4.1.0"
3573 +source = "registry+https://github.com/rust-lang/crates.io-index"
3574 +checksum = "ef25abbcd74fb2609453eb695bd2f860d389e457f67dc17cafc8b8cbc89d0c33"
3575 +
3576 +[[package]]
3577 +name = "objc2-foundation"
3578 +version = "0.3.2"
3579 +source = "registry+https://github.com/rust-lang/crates.io-index"
3580 +checksum = "e3e0adef53c21f888deb4fa59fc59f7eb17404926ee8a6f59f5df0fd7f9f3272"
3581 +dependencies = [
3582 + "bitflags 2.11.0",
3583 + "block2",
3584 + "libc",
3585 + "objc2",
3586 + "objc2-core-foundation",
3587 +]
3588 +
3589 +[[package]]
3590 +name = "objc2-io-kit"
3591 +version = "0.3.2"
3592 +source = "registry+https://github.com/rust-lang/crates.io-index"
3593 +checksum = "33fafba39597d6dc1fb709123dfa8289d39406734be322956a69f0931c73bb15"
3594 +dependencies = [
3595 + "libc",
3596 + "objc2-core-foundation",
3597 +]
3598 +
3599 +[[package]]
3600 +name = "objc2-metal"
3601 +version = "0.3.2"
3602 +source = "registry+https://github.com/rust-lang/crates.io-index"
3603 +checksum = "a0125f776a10d00af4152d74616409f0d4a2053a6f57fa5b7d6aa2854ac04794"
3604 +dependencies = [
3605 + "bitflags 2.11.0",
3606 + "block2",
3607 + "dispatch2",
3608 + "objc2",
3609 + "objc2-core-foundation",
3610 + "objc2-foundation",
3611 +]
3612 +
3613 +[[package]]
3614 +name = "once_cell"
3615 +version = "1.21.4"
3616 +source = "registry+https://github.com/rust-lang/crates.io-index"
3617 +checksum = "9f7c3e4beb33f85d45ae3e3a1792185706c8e16d043238c593331cc7cd313b50"
3618 +
3619 +[[package]]
3620 +name = "once_cell_polyfill"
3621 +version = "1.70.2"
3622 +source = "registry+https://github.com/rust-lang/crates.io-index"
3623 +checksum = "384b8ab6d37215f3c5301a95a4accb5d64aa607f1fcb26a11b5303878451b4fe"
3624 +
3625 +[[package]]
3626 +name = "onde"
3627 +version = "0.1.3"
3628 +dependencies = [
3629 + "anyhow",
3630 + "cc",
3631 + "hf-hub",
3632 + "home",
3633 + "log",
3634 + "mistralrs",
3635 + "mistralrs-core",
3636 + "serde",
3637 + "thiserror 2.0.18",
3638 + "tokio",
3639 + "tsync",
3640 + "uniffi",
3641 +]
3642 +
3643 +[[package]]
3644 +name = "onde-react-native"
3645 +version = "0.1.3"
3646 +dependencies = [
3647 + "jni",
3648 + "log",
3649 + "onde",
3650 + "serde",
3651 + "serde_json",
3652 + "tokio",
3653 +]
3654 +
3655 +[[package]]
3656 +name = "onig"
3657 +version = "6.5.1"
3658 +source = "registry+https://github.com/rust-lang/crates.io-index"
3659 +checksum = "336b9c63443aceef14bea841b899035ae3abe89b7c486aaf4c5bd8aafedac3f0"
3660 +dependencies = [
3661 + "bitflags 2.11.0",
3662 + "libc",
3663 + "once_cell",
3664 + "onig_sys",
3665 +]
3666 +
3667 +[[package]]
3668 +name = "onig_sys"
3669 +version = "69.9.1"
3670 +source = "registry+https://github.com/rust-lang/crates.io-index"
3671 +checksum = "c7f86c6eef3d6df15f23bcfb6af487cbd2fed4e5581d58d5bf1f5f8b7f6727dc"
3672 +dependencies = [
3673 + "cc",
3674 + "pkg-config",
3675 +]
3676 +
3677 +[[package]]
3678 +name = "openai-harmony"
3679 +version = "0.0.8"
3680 +source = "registry+https://github.com/rust-lang/crates.io-index"
3681 +checksum = "e77e82af451fc95deeb728a40b84db8ee82d341e136c268de415123a560b9b72"
3682 +dependencies = [
3683 + "anyhow",
3684 + "base64 0.22.1",
3685 + "bstr",
3686 + "clap 4.6.0",
3687 + "fancy-regex 0.13.0",
3688 + "futures",
3689 + "image",
3690 + "regex",
3691 + "reqwest 0.12.28",
3692 + "rustc-hash 1.1.0",
3693 + "serde",
3694 + "serde_json",
3695 + "serde_with",
3696 + "sha1",
3697 + "sha2",
3698 + "thiserror 2.0.18",
3699 +]
3700 +
3701 +[[package]]
3702 +name = "openssl-probe"
3703 +version = "0.2.1"
3704 +source = "registry+https://github.com/rust-lang/crates.io-index"
3705 +checksum = "7c87def4c32ab89d880effc9e097653c8da5d6ef28e6b539d313baaacfbafcbe"
3706 +
3707 +[[package]]
3708 +name = "option-ext"
3709 +version = "0.2.0"
3710 +source = "registry+https://github.com/rust-lang/crates.io-index"
3711 +checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d"
3712 +
3713 +[[package]]
3714 +name = "ordered-float"
3715 +version = "5.3.0"
3716 +source = "registry+https://github.com/rust-lang/crates.io-index"
3717 +checksum = "b7d950ca161dc355eaf28f82b11345ed76c6e1f6eb1f4f4479e0323b9e2fbd0e"
3718 +dependencies = [
3719 + "num-traits",
3720 +]
3721 +
3722 +[[package]]
3723 +name = "packedvec"
3724 +version = "1.2.5"
3725 +source = "registry+https://github.com/rust-lang/crates.io-index"
3726 +checksum = "a69e0a534dd2e6aefce319af62a0aa0066a76bdfcec0201dfe02df226bc9ec70"
3727 +dependencies = [
3728 + "num-traits",
3729 +]
3730 +
3731 +[[package]]
3732 +name = "parking_lot"
3733 +version = "0.12.5"
3734 +source = "registry+https://github.com/rust-lang/crates.io-index"
3735 +checksum = "93857453250e3077bd71ff98b6a65ea6621a19bb0f559a85248955ac12c45a1a"
3736 +dependencies = [
3737 + "lock_api",
3738 + "parking_lot_core",
3739 +]
3740 +
3741 +[[package]]
3742 +name = "parking_lot_core"
3743 +version = "0.9.12"
3744 +source = "registry+https://github.com/rust-lang/crates.io-index"
3745 +checksum = "2621685985a2ebf1c516881c026032ac7deafcda1a2c9b7850dc81e3dfcb64c1"
3746 +dependencies = [
3747 + "cfg-if",
3748 + "libc",
3749 + "redox_syscall",
3750 + "smallvec 1.15.1",
3751 + "windows-link 0.2.1",
3752 +]
3753 +
3754 +[[package]]
3755 +name = "paste"
3756 +version = "1.0.15"
3757 +source = "registry+https://github.com/rust-lang/crates.io-index"
3758 +checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a"
3759 +
3760 +[[package]]
3761 +name = "pastey"
3762 +version = "0.1.1"
3763 +source = "registry+https://github.com/rust-lang/crates.io-index"
3764 +checksum = "35fb2e5f958ec131621fdd531e9fc186ed768cbe395337403ae56c17a74c68ec"
3765 +
3766 +[[package]]
3767 +name = "percent-encoding"
3768 +version = "2.3.2"
3769 +source = "registry+https://github.com/rust-lang/crates.io-index"
3770 +checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220"
3771 +
3772 +[[package]]
3773 +name = "phf"
3774 +version = "0.13.1"
3775 +source = "registry+https://github.com/rust-lang/crates.io-index"
3776 +checksum = "c1562dc717473dbaa4c1f85a36410e03c047b2e7df7f45ee938fbef64ae7fadf"
3777 +dependencies = [
3778 + "phf_macros",
3779 + "phf_shared",
3780 + "serde",
3781 +]
3782 +
3783 +[[package]]
3784 +name = "phf_codegen"
3785 +version = "0.13.1"
3786 +source = "registry+https://github.com/rust-lang/crates.io-index"
3787 +checksum = "49aa7f9d80421bca176ca8dbfebe668cc7a2684708594ec9f3c0db0805d5d6e1"
3788 +dependencies = [
3789 + "phf_generator",
3790 + "phf_shared",
3791 +]
3792 +
3793 +[[package]]
3794 +name = "phf_generator"
3795 +version = "0.13.1"
3796 +source = "registry+https://github.com/rust-lang/crates.io-index"
3797 +checksum = "135ace3a761e564ec88c03a77317a7c6b80bb7f7135ef2544dbe054243b89737"
3798 +dependencies = [
3799 + "fastrand",
3800 + "phf_shared",
3801 +]
3802 +
3803 +[[package]]
3804 +name = "phf_macros"
3805 +version = "0.13.1"
3806 +source = "registry+https://github.com/rust-lang/crates.io-index"
3807 +checksum = "812f032b54b1e759ccd5f8b6677695d5268c588701effba24601f6932f8269ef"
3808 +dependencies = [
3809 + "phf_generator",
3810 + "phf_shared",
3811 + "proc-macro2",
3812 + "quote",
3813 + "syn 2.0.117",
3814 +]
3815 +
3816 +[[package]]
3817 +name = "phf_shared"
3818 +version = "0.13.1"
3819 +source = "registry+https://github.com/rust-lang/crates.io-index"
3820 +checksum = "e57fef6bc5981e38c2ce2d63bfa546861309f875b8a75f092d1d54ae2d64f266"
3821 +dependencies = [
3822 + "siphasher",
3823 +]
3824 +
3825 +[[package]]
3826 +name = "pin-project-lite"
3827 +version = "0.2.17"
3828 +source = "registry+https://github.com/rust-lang/crates.io-index"
3829 +checksum = "a89322df9ebe1c1578d689c92318e070967d1042b512afbe49518723f4e6d5cd"
3830 +
3831 +[[package]]
3832 +name = "pkg-config"
3833 +version = "0.3.32"
3834 +source = "registry+https://github.com/rust-lang/crates.io-index"
3835 +checksum = "7edddbd0b52d732b21ad9a5fab5c704c14cd949e5e9a1ec5929a24fded1b904c"
3836 +
3837 +[[package]]
3838 +name = "plain"
3839 +version = "0.2.3"
3840 +source = "registry+https://github.com/rust-lang/crates.io-index"
3841 +checksum = "b4596b6d070b27117e987119b4dac604f3c58cfb0b191112e24771b2faeac1a6"
3842 +
3843 +[[package]]
3844 +name = "png"
3845 +version = "0.18.1"
3846 +source = "registry+https://github.com/rust-lang/crates.io-index"
3847 +checksum = "60769b8b31b2a9f263dae2776c37b1b28ae246943cf719eb6946a1db05128a61"
3848 +dependencies = [
3849 + "bitflags 2.11.0",
3850 + "crc32fast",
3851 + "fdeflate",
3852 + "flate2",
3853 + "miniz_oxide",
3854 +]
3855 +
3856 +[[package]]
3857 +name = "portable-atomic"
3858 +version = "1.13.1"
3859 +source = "registry+https://github.com/rust-lang/crates.io-index"
3860 +checksum = "c33a9471896f1c69cecef8d20cbe2f7accd12527ce60845ff44c153bb2a21b49"
3861 +
3862 +[[package]]
3863 +name = "potential_utf"
3864 +version = "0.1.5"
3865 +source = "registry+https://github.com/rust-lang/crates.io-index"
3866 +checksum = "0103b1cef7ec0cf76490e969665504990193874ea05c85ff9bab8b911d0a0564"
3867 +dependencies = [
3868 + "zerovec",
3869 +]
3870 +
3871 +[[package]]
3872 +name = "powerfmt"
3873 +version = "0.2.0"
3874 +source = "registry+https://github.com/rust-lang/crates.io-index"
3875 +checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391"
3876 +
3877 +[[package]]
3878 +name = "ppv-lite86"
3879 +version = "0.2.21"
3880 +source = "registry+https://github.com/rust-lang/crates.io-index"
3881 +checksum = "85eae3c4ed2f50dcfe72643da4befc30deadb458a9b590d720cde2f2b1e97da9"
3882 +dependencies = [
3883 + "zerocopy",
3884 +]
3885 +
3886 +[[package]]
3887 +name = "precomputed-hash"
3888 +version = "0.1.1"
3889 +source = "registry+https://github.com/rust-lang/crates.io-index"
3890 +checksum = "925383efa346730478fb4838dbe9137d2a47675ad789c546d150a6e1dd4ab31c"
3891 +
3892 +[[package]]
3893 +name = "prettyplease"
3894 +version = "0.2.37"
3895 +source = "registry+https://github.com/rust-lang/crates.io-index"
3896 +checksum = "479ca8adacdd7ce8f1fb39ce9ecccbfe93a3f1344b3d0d97f20bc0196208f62b"
3897 +dependencies = [
3898 + "proc-macro2",
3899 + "syn 2.0.117",
3900 +]
3901 +
3902 +[[package]]
3903 +name = "primal-check"
3904 +version = "0.3.4"
3905 +source = "registry+https://github.com/rust-lang/crates.io-index"
3906 +checksum = "dc0d895b311e3af9902528fbb8f928688abbd95872819320517cc24ca6b2bd08"
3907 +dependencies = [
3908 + "num-integer",
3909 +]
3910 +
3911 +[[package]]
3912 +name = "proc-macro-error"
3913 +version = "1.0.4"
3914 +source = "registry+https://github.com/rust-lang/crates.io-index"
3915 +checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c"
3916 +dependencies = [
3917 + "proc-macro-error-attr",
3918 + "proc-macro2",
3919 + "quote",
3920 + "syn 1.0.109",
3921 + "version_check",
3922 +]
3923 +
3924 +[[package]]
3925 +name = "proc-macro-error-attr"
3926 +version = "1.0.4"
3927 +source = "registry+https://github.com/rust-lang/crates.io-index"
3928 +checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869"
3929 +dependencies = [
3930 + "proc-macro2",
3931 + "quote",
3932 + "version_check",
3933 +]
3934 +
3935 +[[package]]
3936 +name = "proc-macro2"
3937 +version = "1.0.106"
3938 +source = "registry+https://github.com/rust-lang/crates.io-index"
3939 +checksum = "8fd00f0bb2e90d81d1044c2b32617f68fcb9fa3bb7640c23e9c748e53fb30934"
3940 +dependencies = [
3941 + "unicode-ident",
3942 +]
3943 +
3944 +[[package]]
3945 +name = "profiling"
3946 +version = "1.0.17"
3947 +source = "registry+https://github.com/rust-lang/crates.io-index"
3948 +checksum = "3eb8486b569e12e2c32ad3e204dbaba5e4b5b216e9367044f25f1dba42341773"
3949 +dependencies = [
3950 + "profiling-procmacros",
3951 +]
3952 +
3953 +[[package]]
3954 +name = "profiling-procmacros"
3955 +version = "1.0.17"
3956 +source = "registry+https://github.com/rust-lang/crates.io-index"
3957 +checksum = "52717f9a02b6965224f95ca2a81e2e0c5c43baacd28ca057577988930b6c3d5b"
3958 +dependencies = [
3959 + "quote",
3960 + "syn 2.0.117",
3961 +]
3962 +
3963 +[[package]]
3964 +name = "pulp"
3965 +version = "0.21.5"
3966 +source = "registry+https://github.com/rust-lang/crates.io-index"
3967 +checksum = "96b86df24f0a7ddd5e4b95c94fc9ed8a98f1ca94d3b01bdce2824097e7835907"
3968 +dependencies = [
3969 + "bytemuck",
3970 + "cfg-if",
3971 + "libm",
3972 + "num-complex",
3973 + "reborrow",
3974 + "version_check",
3975 +]
3976 +
3977 +[[package]]
3978 +name = "pulp"
3979 +version = "0.22.2"
3980 +source = "registry+https://github.com/rust-lang/crates.io-index"
3981 +checksum = "2e205bb30d5b916c55e584c22201771bcf2bad9aabd5d4127f38387140c38632"
3982 +dependencies = [
3983 + "bytemuck",
3984 + "cfg-if",
3985 + "libm",
3986 + "num-complex",
3987 + "paste",
3988 + "pulp-wasm-simd-flag",
3989 + "raw-cpuid",
3990 + "reborrow",
3991 + "version_check",
3992 +]
3993 +
3994 +[[package]]
3995 +name = "pulp-wasm-simd-flag"
3996 +version = "0.1.0"
3997 +source = "registry+https://github.com/rust-lang/crates.io-index"
3998 +checksum = "40e24eee682d89fb193496edf918a7f407d30175b2e785fe057e4392dfd182e0"
3999 +
4000 +[[package]]
4001 +name = "pxfm"
4002 +version = "0.1.28"
4003 +source = "registry+https://github.com/rust-lang/crates.io-index"
4004 +checksum = "b5a041e753da8b807c9255f28de81879c78c876392ff2469cde94799b2896b9d"
4005 +
4006 +[[package]]
4007 +name = "qoi"
4008 +version = "0.4.1"
4009 +source = "registry+https://github.com/rust-lang/crates.io-index"
4010 +checksum = "7f6d64c71eb498fe9eae14ce4ec935c555749aef511cca85b5568910d6e48001"
4011 +dependencies = [
4012 + "bytemuck",
4013 +]
4014 +
4015 +[[package]]
4016 +name = "quick-error"
4017 +version = "2.0.1"
4018 +source = "registry+https://github.com/rust-lang/crates.io-index"
4019 +checksum = "a993555f31e5a609f617c12db6250dedcac1b0a85076912c436e6fc9b2c8e6a3"
4020 +
4021 +[[package]]
4022 +name = "quinn"
4023 +version = "0.11.9"
4024 +source = "registry+https://github.com/rust-lang/crates.io-index"
4025 +checksum = "b9e20a958963c291dc322d98411f541009df2ced7b5a4f2bd52337638cfccf20"
4026 +dependencies = [
4027 + "bytes",
4028 + "cfg_aliases",
4029 + "pin-project-lite",
4030 + "quinn-proto",
4031 + "quinn-udp",
4032 + "rustc-hash 2.1.2",
4033 + "rustls",
4034 + "socket2",
4035 + "thiserror 2.0.18",
4036 + "tokio",
4037 + "tracing",
4038 + "web-time",
4039 +]
4040 +
4041 +[[package]]
4042 +name = "quinn-proto"
4043 +version = "0.11.14"
4044 +source = "registry+https://github.com/rust-lang/crates.io-index"
4045 +checksum = "434b42fec591c96ef50e21e886936e66d3cc3f737104fdb9b737c40ffb94c098"
4046 +dependencies = [
4047 + "aws-lc-rs",
4048 + "bytes",
4049 + "getrandom 0.3.4",
4050 + "lru-slab",
4051 + "rand 0.9.2",
4052 + "ring",
4053 + "rustc-hash 2.1.2",
4054 + "rustls",
4055 + "rustls-pki-types",
4056 + "slab",
4057 + "thiserror 2.0.18",
4058 + "tinyvec",
4059 + "tracing",
4060 + "web-time",
4061 +]
4062 +
4063 +[[package]]
4064 +name = "quinn-udp"
4065 +version = "0.5.14"
4066 +source = "registry+https://github.com/rust-lang/crates.io-index"
4067 +checksum = "addec6a0dcad8a8d96a771f815f0eaf55f9d1805756410b39f5fa81332574cbd"
4068 +dependencies = [
4069 + "cfg_aliases",
4070 + "libc",
4071 + "once_cell",
4072 + "socket2",
4073 + "tracing",
4074 + "windows-sys 0.60.2",
4075 +]
4076 +
4077 +[[package]]
4078 +name = "quote"
4079 +version = "1.0.45"
4080 +source = "registry+https://github.com/rust-lang/crates.io-index"
4081 +checksum = "41f2619966050689382d2b44f664f4bc593e129785a36d6ee376ddf37259b924"
4082 +dependencies = [
4083 + "proc-macro2",
4084 +]
4085 +
4086 +[[package]]
4087 +name = "r-efi"
4088 +version = "5.3.0"
4089 +source = "registry+https://github.com/rust-lang/crates.io-index"
4090 +checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f"
4091 +
4092 +[[package]]
4093 +name = "r-efi"
4094 +version = "6.0.0"
4095 +source = "registry+https://github.com/rust-lang/crates.io-index"
4096 +checksum = "f8dcc9c7d52a811697d2151c701e0d08956f92b0e24136cf4cf27b57a6a0d9bf"
4097 +
4098 +[[package]]
4099 +name = "radix_trie"
4100 +version = "0.3.0"
4101 +source = "registry+https://github.com/rust-lang/crates.io-index"
4102 +checksum = "3b4431027dcd37fc2a73ef740b5f233aa805897935b8bce0195e41bbf9a3289a"
4103 +dependencies = [
4104 + "endian-type",
4105 + "nibble_vec",
4106 +]
4107 +
4108 +[[package]]
4109 +name = "rand"
4110 +version = "0.8.5"
4111 +source = "registry+https://github.com/rust-lang/crates.io-index"
4112 +checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404"
4113 +dependencies = [
4114 + "libc",
4115 + "rand_chacha 0.3.1",
4116 + "rand_core 0.6.4",
4117 +]
4118 +
4119 +[[package]]
4120 +name = "rand"
4121 +version = "0.9.2"
4122 +source = "registry+https://github.com/rust-lang/crates.io-index"
4123 +checksum = "6db2770f06117d490610c7488547d543617b21bfa07796d7a12f6f1bd53850d1"
4124 +dependencies = [
4125 + "rand_chacha 0.9.0",
4126 + "rand_core 0.9.5",
4127 +]
4128 +
4129 +[[package]]
4130 +name = "rand_chacha"
4131 +version = "0.3.1"
4132 +source = "registry+https://github.com/rust-lang/crates.io-index"
4133 +checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88"
4134 +dependencies = [
4135 + "ppv-lite86",
4136 + "rand_core 0.6.4",
4137 +]
4138 +
4139 +[[package]]
4140 +name = "rand_chacha"
4141 +version = "0.9.0"
4142 +source = "registry+https://github.com/rust-lang/crates.io-index"
4143 +checksum = "d3022b5f1df60f26e1ffddd6c66e8aa15de382ae63b3a0c1bfc0e4d3e3f325cb"
4144 +dependencies = [
4145 + "ppv-lite86",
4146 + "rand_core 0.9.5",
4147 +]
4148 +
4149 +[[package]]
4150 +name = "rand_core"
4151 +version = "0.6.4"
4152 +source = "registry+https://github.com/rust-lang/crates.io-index"
4153 +checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c"
4154 +dependencies = [
4155 + "getrandom 0.2.17",
4156 +]
4157 +
4158 +[[package]]
4159 +name = "rand_core"
4160 +version = "0.9.5"
4161 +source = "registry+https://github.com/rust-lang/crates.io-index"
4162 +checksum = "76afc826de14238e6e8c374ddcc1fa19e374fd8dd986b0d2af0d02377261d83c"
4163 +dependencies = [
4164 + "getrandom 0.3.4",
4165 +]
4166 +
4167 +[[package]]
4168 +name = "rand_distr"
4169 +version = "0.4.3"
4170 +source = "registry+https://github.com/rust-lang/crates.io-index"
4171 +checksum = "32cb0b9bc82b0a0876c2dd994a7e7a2683d3e7390ca40e6886785ef0c7e3ee31"
4172 +dependencies = [
4173 + "num-traits",
4174 + "rand 0.8.5",
4175 +]
4176 +
4177 +[[package]]
4178 +name = "rand_distr"
4179 +version = "0.5.1"
4180 +source = "registry+https://github.com/rust-lang/crates.io-index"
4181 +checksum = "6a8615d50dcf34fa31f7ab52692afec947c4dd0ab803cc87cb3b0b4570ff7463"
4182 +dependencies = [
4183 + "num-traits",
4184 + "rand 0.9.2",
4185 +]
4186 +
4187 +[[package]]
4188 +name = "rand_isaac"
4189 +version = "0.4.0"
4190 +source = "registry+https://github.com/rust-lang/crates.io-index"
4191 +checksum = "3382fc9f0aad4f2e2a56b53d9133c8c810b4dbf21e7e370e24346161a5b2c7bd"
4192 +dependencies = [
4193 + "rand_core 0.9.5",
4194 +]
4195 +
4196 +[[package]]
4197 +name = "rav1e"
4198 +version = "0.8.1"
4199 +source = "registry+https://github.com/rust-lang/crates.io-index"
4200 +checksum = "43b6dd56e85d9483277cde964fd1bdb0428de4fec5ebba7540995639a21cb32b"
4201 +dependencies = [
4202 + "aligned-vec",
4203 + "arbitrary",
4204 + "arg_enum_proc_macro",
4205 + "arrayvec",
4206 + "av-scenechange",
4207 + "av1-grain",
4208 + "bitstream-io",
4209 + "built",
4210 + "cfg-if",
4211 + "interpolate_name",
4212 + "itertools",
4213 + "libc",
4214 + "libfuzzer-sys",
4215 + "log",
4216 + "maybe-rayon",
4217 + "new_debug_unreachable",
4218 + "noop_proc_macro",
4219 + "num-derive",
4220 + "num-traits",
4221 + "paste",
4222 + "profiling",
4223 + "rand 0.9.2",
4224 + "rand_chacha 0.9.0",
4225 + "simd_helpers",
4226 + "thiserror 2.0.18",
4227 + "v_frame",
4228 + "wasm-bindgen",
4229 +]
4230 +
4231 +[[package]]
4232 +name = "ravif"
4233 +version = "0.13.0"
4234 +source = "registry+https://github.com/rust-lang/crates.io-index"
4235 +checksum = "e52310197d971b0f5be7fe6b57530dcd27beb35c1b013f29d66c1ad73fbbcc45"
4236 +dependencies = [
4237 + "avif-serialize",
4238 + "imgref",
4239 + "loop9",
4240 + "quick-error",
4241 + "rav1e",
4242 + "rayon",
4243 + "rgb",
4244 +]
4245 +
4246 +[[package]]
4247 +name = "raw-cpuid"
4248 +version = "11.6.0"
4249 +source = "registry+https://github.com/rust-lang/crates.io-index"
4250 +checksum = "498cd0dc59d73224351ee52a95fee0f1a617a2eae0e7d9d720cc622c73a54186"
4251 +dependencies = [
4252 + "bitflags 2.11.0",
4253 +]
4254 +
4255 +[[package]]
4256 +name = "rawpointer"
4257 +version = "0.2.1"
4258 +source = "registry+https://github.com/rust-lang/crates.io-index"
4259 +checksum = "60a357793950651c4ed0f3f52338f53b2f809f32d83a07f72909fa13e4c6c1e3"
4260 +
4261 +[[package]]
4262 +name = "rayon"
4263 +version = "1.11.0"
4264 +source = "registry+https://github.com/rust-lang/crates.io-index"
4265 +checksum = "368f01d005bf8fd9b1206fb6fa653e6c4a81ceb1466406b81792d87c5677a58f"
4266 +dependencies = [
4267 + "either",
4268 + "rayon-core",
4269 +]
4270 +
4271 +[[package]]
4272 +name = "rayon-cond"
4273 +version = "0.4.0"
4274 +source = "registry+https://github.com/rust-lang/crates.io-index"
4275 +checksum = "2964d0cf57a3e7a06e8183d14a8b527195c706b7983549cd5462d5aa3747438f"
4276 +dependencies = [
4277 + "either",
4278 + "itertools",
4279 + "rayon",
4280 +]
4281 +
4282 +[[package]]
4283 +name = "rayon-core"
4284 +version = "1.13.0"
4285 +source = "registry+https://github.com/rust-lang/crates.io-index"
4286 +checksum = "22e18b0f0062d30d4230b2e85ff77fdfe4326feb054b9783a3460d8435c8ab91"
4287 +dependencies = [
4288 + "crossbeam-deque",
4289 + "crossbeam-utils",
4290 +]
4291 +
4292 +[[package]]
4293 +name = "realfft"
4294 +version = "3.5.0"
4295 +source = "registry+https://github.com/rust-lang/crates.io-index"
4296 +checksum = "f821338fddb99d089116342c46e9f1fbf3828dba077674613e734e01d6ea8677"
4297 +dependencies = [
4298 + "rustfft",
4299 +]
4300 +
4301 +[[package]]
4302 +name = "reborrow"
4303 +version = "0.5.5"
4304 +source = "registry+https://github.com/rust-lang/crates.io-index"
4305 +checksum = "03251193000f4bd3b042892be858ee50e8b3719f2b08e5833ac4353724632430"
4306 +
4307 +[[package]]
4308 +name = "recvmsg"
4309 +version = "1.0.0"
4310 +source = "registry+https://github.com/rust-lang/crates.io-index"
4311 +checksum = "d3edd4d5d42c92f0a659926464d4cce56b562761267ecf0f469d85b7de384175"
4312 +
4313 +[[package]]
4314 +name = "redox_syscall"
4315 +version = "0.5.18"
4316 +source = "registry+https://github.com/rust-lang/crates.io-index"
4317 +checksum = "ed2bf2547551a7053d6fdfafda3f938979645c44812fbfcda098faae3f1a362d"
4318 +dependencies = [
4319 + "bitflags 2.11.0",
4320 +]
4321 +
4322 +[[package]]
4323 +name = "redox_users"
4324 +version = "0.5.2"
4325 +source = "registry+https://github.com/rust-lang/crates.io-index"
4326 +checksum = "a4e608c6638b9c18977b00b475ac1f28d14e84b27d8d42f70e0bf1e3dec127ac"
4327 +dependencies = [
4328 + "getrandom 0.2.17",
4329 + "libredox",
4330 + "thiserror 2.0.18",
4331 +]
4332 +
4333 +[[package]]
4334 +name = "ref-cast"
4335 +version = "1.0.25"
4336 +source = "registry+https://github.com/rust-lang/crates.io-index"
4337 +checksum = "f354300ae66f76f1c85c5f84693f0ce81d747e2c3f21a45fef496d89c960bf7d"
4338 +dependencies = [
4339 + "ref-cast-impl",
4340 +]
4341 +
4342 +[[package]]
4343 +name = "ref-cast-impl"
4344 +version = "1.0.25"
4345 +source = "registry+https://github.com/rust-lang/crates.io-index"
4346 +checksum = "b7186006dcb21920990093f30e3dea63b7d6e977bf1256be20c3563a5db070da"
4347 +dependencies = [
4348 + "proc-macro2",
4349 + "quote",
4350 + "syn 2.0.117",
4351 +]
4352 +
4353 +[[package]]
4354 +name = "regex"
4355 +version = "1.12.3"
4356 +source = "registry+https://github.com/rust-lang/crates.io-index"
4357 +checksum = "e10754a14b9137dd7b1e3e5b0493cc9171fdd105e0ab477f51b72e7f3ac0e276"
4358 +dependencies = [
4359 + "aho-corasick",
4360 + "memchr",
4361 + "regex-automata",
4362 + "regex-syntax",
4363 +]
4364 +
4365 +[[package]]
4366 +name = "regex-automata"
4367 +version = "0.4.14"
4368 +source = "registry+https://github.com/rust-lang/crates.io-index"
4369 +checksum = "6e1dd4122fc1595e8162618945476892eefca7b88c52820e74af6262213cae8f"
4370 +dependencies = [
4371 + "aho-corasick",
4372 + "memchr",
4373 + "regex-syntax",
4374 +]
4375 +
4376 +[[package]]
4377 +name = "regex-syntax"
4378 +version = "0.8.10"
4379 +source = "registry+https://github.com/rust-lang/crates.io-index"
4380 +checksum = "dc897dd8d9e8bd1ed8cdad82b5966c3e0ecae09fb1907d58efaa013543185d0a"
4381 +
4382 +[[package]]
4383 +name = "reqwest"
4384 +version = "0.12.28"
4385 +source = "registry+https://github.com/rust-lang/crates.io-index"
4386 +checksum = "eddd3ca559203180a307f12d114c268abf583f59b03cb906fd0b3ff8646c1147"
4387 +dependencies = [
4388 + "base64 0.22.1",
4389 + "bytes",
4390 + "encoding_rs",
4391 + "futures-channel",
4392 + "futures-core",
4393 + "futures-util",
4394 + "h2",
4395 + "http",
4396 + "http-body",
4397 + "http-body-util",
4398 + "hyper",
4399 + "hyper-rustls",
4400 + "hyper-util",
4401 + "js-sys",
4402 + "log",
4403 + "mime",
4404 + "mime_guess",
4405 + "percent-encoding",
4406 + "pin-project-lite",
4407 + "quinn",
4408 + "rustls",
4409 + "rustls-pki-types",
4410 + "serde",
4411 + "serde_json",
4412 + "serde_urlencoded",
4413 + "sync_wrapper",
4414 + "tokio",
4415 + "tokio-rustls",
4416 + "tokio-util",
4417 + "tower",
4418 + "tower-http",
4419 + "tower-service",
4420 + "url",
4421 + "wasm-bindgen",
4422 + "wasm-bindgen-futures",
4423 + "wasm-streams 0.4.2",
4424 + "web-sys",
4425 + "webpki-roots 1.0.6",
4426 +]
4427 +
4428 +[[package]]
4429 +name = "reqwest"
4430 +version = "0.13.2"
4431 +source = "registry+https://github.com/rust-lang/crates.io-index"
4432 +checksum = "ab3f43e3283ab1488b624b44b0e988d0acea0b3214e694730a055cb6b2efa801"
4433 +dependencies = [
4434 + "base64 0.22.1",
4435 + "bytes",
4436 + "encoding_rs",
4437 + "futures-channel",
4438 + "futures-core",
4439 + "futures-util",
4440 + "h2",
4441 + "http",
4442 + "http-body",
4443 + "http-body-util",
4444 + "hyper",
4445 + "hyper-rustls",
4446 + "hyper-util",
4447 + "js-sys",
4448 + "log",
4449 + "mime",
4450 + "percent-encoding",
4451 + "pin-project-lite",
4452 + "quinn",
4453 + "rustls",
4454 + "rustls-pki-types",
4455 + "rustls-platform-verifier",
4456 + "serde",
4457 + "serde_json",
4458 + "sync_wrapper",
4459 + "tokio",
4460 + "tokio-rustls",
4461 + "tokio-util",
4462 + "tower",
4463 + "tower-http",
4464 + "tower-service",
4465 + "url",
4466 + "wasm-bindgen",
4467 + "wasm-bindgen-futures",
4468 + "wasm-streams 0.5.0",
4469 + "web-sys",
4470 +]
4471 +
4472 +[[package]]
4473 +name = "rgb"
4474 +version = "0.8.53"
4475 +source = "registry+https://github.com/rust-lang/crates.io-index"
4476 +checksum = "47b34b781b31e5d73e9fbc8689c70551fd1ade9a19e3e28cfec8580a79290cc4"
4477 +
4478 +[[package]]
4479 +name = "ring"
4480 +version = "0.17.14"
4481 +source = "registry+https://github.com/rust-lang/crates.io-index"
4482 +checksum = "a4689e6c2294d81e88dc6261c768b63bc4fcdb852be6d1352498b114f61383b7"
4483 +dependencies = [
4484 + "cc",
4485 + "cfg-if",
4486 + "getrandom 0.2.17",
4487 + "libc",
4488 + "untrusted",
4489 + "windows-sys 0.52.0",
4490 +]
4491 +
4492 +[[package]]
4493 +name = "rubato"
4494 +version = "0.16.2"
4495 +source = "registry+https://github.com/rust-lang/crates.io-index"
4496 +checksum = "5258099699851cfd0082aeb645feb9c084d9a5e1f1b8d5372086b989fc5e56a1"
4497 +dependencies = [
4498 + "num-complex",
4499 + "num-integer",
4500 + "num-traits",
4501 + "realfft",
4502 +]
4503 +
4504 +[[package]]
4505 +name = "rust-mcp-schema"
4506 +version = "0.9.6"
4507 +source = "registry+https://github.com/rust-lang/crates.io-index"
4508 +checksum = "b1209aa7fb74fccafe6b2a649b15581fb328343427d85def865b0ad233fe1f74"
4509 +dependencies = [
4510 + "serde",
4511 + "serde_json",
4512 +]
4513 +
4514 +[[package]]
4515 +name = "rust-stemmers"
4516 +version = "1.2.0"
4517 +source = "registry+https://github.com/rust-lang/crates.io-index"
4518 +checksum = "e46a2036019fdb888131db7a4c847a1063a7493f971ed94ea82c67eada63ca54"
4519 +dependencies = [
4520 + "serde",
4521 + "serde_derive",
4522 +]
4523 +
4524 +[[package]]
4525 +name = "rustc-hash"
4526 +version = "1.1.0"
4527 +source = "registry+https://github.com/rust-lang/crates.io-index"
4528 +checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2"
4529 +
4530 +[[package]]
4531 +name = "rustc-hash"
4532 +version = "2.1.2"
4533 +source = "registry+https://github.com/rust-lang/crates.io-index"
4534 +checksum = "94300abf3f1ae2e2b8ffb7b58043de3d399c73fa6f4b73826402a5c457614dbe"
4535 +
4536 +[[package]]
4537 +name = "rustc_version"
4538 +version = "0.4.1"
4539 +source = "registry+https://github.com/rust-lang/crates.io-index"
4540 +checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92"
4541 +dependencies = [
4542 + "semver",
4543 +]
4544 +
4545 +[[package]]
4546 +name = "rustfft"
4547 +version = "6.4.1"
4548 +source = "registry+https://github.com/rust-lang/crates.io-index"
4549 +checksum = "21db5f9893e91f41798c88680037dba611ca6674703c1a18601b01a72c8adb89"
4550 +dependencies = [
4551 + "num-complex",
4552 + "num-integer",
4553 + "num-traits",
4554 + "primal-check",
4555 + "strength_reduce",
4556 + "transpose",
4557 +]
4558 +
4559 +[[package]]
4560 +name = "rustix"
4561 +version = "1.1.4"
4562 +source = "registry+https://github.com/rust-lang/crates.io-index"
4563 +checksum = "b6fe4565b9518b83ef4f91bb47ce29620ca828bd32cb7e408f0062e9930ba190"
4564 +dependencies = [
4565 + "bitflags 2.11.0",
4566 + "errno",
4567 + "libc",
4568 + "linux-raw-sys",
4569 + "windows-sys 0.61.2",
4570 +]
4571 +
4572 +[[package]]
4573 +name = "rustls"
4574 +version = "0.23.37"
4575 +source = "registry+https://github.com/rust-lang/crates.io-index"
4576 +checksum = "758025cb5fccfd3bc2fd74708fd4682be41d99e5dff73c377c0646c6012c73a4"
4577 +dependencies = [
4578 + "aws-lc-rs",
4579 + "log",
4580 + "once_cell",
4581 + "ring",
4582 + "rustls-pki-types",
4583 + "rustls-webpki",
4584 + "subtle",
4585 + "zeroize",
4586 +]
4587 +
4588 +[[package]]
4589 +name = "rustls-native-certs"
4590 +version = "0.8.3"
4591 +source = "registry+https://github.com/rust-lang/crates.io-index"
4592 +checksum = "612460d5f7bea540c490b2b6395d8e34a953e52b491accd6c86c8164c5932a63"
4593 +dependencies = [
4594 + "openssl-probe",
4595 + "rustls-pki-types",
4596 + "schannel",
4597 + "security-framework",
4598 +]
4599 +
4600 +[[package]]
4601 +name = "rustls-pki-types"
4602 +version = "1.14.0"
4603 +source = "registry+https://github.com/rust-lang/crates.io-index"
4604 +checksum = "be040f8b0a225e40375822a563fa9524378b9d63112f53e19ffff34df5d33fdd"
4605 +dependencies = [
4606 + "web-time",
4607 + "zeroize",
4608 +]
4609 +
4610 +[[package]]
4611 +name = "rustls-platform-verifier"
4612 +version = "0.6.2"
4613 +source = "registry+https://github.com/rust-lang/crates.io-index"
4614 +checksum = "1d99feebc72bae7ab76ba994bb5e121b8d83d910ca40b36e0921f53becc41784"
4615 +dependencies = [
4616 + "core-foundation 0.10.1",
4617 + "core-foundation-sys",
4618 + "jni",
4619 + "log",
4620 + "once_cell",
4621 + "rustls",
4622 + "rustls-native-certs",
4623 + "rustls-platform-verifier-android",
4624 + "rustls-webpki",
4625 + "security-framework",
4626 + "security-framework-sys",
4627 + "webpki-root-certs",
4628 + "windows-sys 0.61.2",
4629 +]
4630 +
4631 +[[package]]
4632 +name = "rustls-platform-verifier-android"
4633 +version = "0.1.1"
4634 +source = "registry+https://github.com/rust-lang/crates.io-index"
4635 +checksum = "f87165f0995f63a9fbeea62b64d10b4d9d8e78ec6d7d51fb2125fda7bb36788f"
4636 +
4637 +[[package]]
4638 +name = "rustls-webpki"
4639 +version = "0.103.10"
4640 +source = "registry+https://github.com/rust-lang/crates.io-index"
4641 +checksum = "df33b2b81ac578cabaf06b89b0631153a3f416b0a886e8a7a1707fb51abbd1ef"
4642 +dependencies = [
4643 + "aws-lc-rs",
4644 + "ring",
4645 + "rustls-pki-types",
4646 + "untrusted",
4647 +]
4648 +
4649 +[[package]]
4650 +name = "rustversion"
4651 +version = "1.0.22"
4652 +source = "registry+https://github.com/rust-lang/crates.io-index"
4653 +checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d"
4654 +
4655 +[[package]]
4656 +name = "ryu"
4657 +version = "1.0.23"
4658 +source = "registry+https://github.com/rust-lang/crates.io-index"
4659 +checksum = "9774ba4a74de5f7b1c1451ed6cd5285a32eddb5cccb8cc655a4e50009e06477f"
4660 +
4661 +[[package]]
4662 +name = "safe_arch"
4663 +version = "0.7.4"
4664 +source = "registry+https://github.com/rust-lang/crates.io-index"
4665 +checksum = "96b02de82ddbe1b636e6170c21be622223aea188ef2e139be0a5b219ec215323"
4666 +dependencies = [
4667 + "bytemuck",
4668 +]
4669 +
4670 +[[package]]
4671 +name = "safetensors"
4672 +version = "0.4.5"
4673 +source = "registry+https://github.com/rust-lang/crates.io-index"
4674 +checksum = "44560c11236a6130a46ce36c836a62936dc81ebf8c36a37947423571be0e55b6"
4675 +dependencies = [
4676 + "serde",
4677 + "serde_json",
4678 +]
4679 +
4680 +[[package]]
4681 +name = "safetensors"
4682 +version = "0.7.0"
4683 +source = "registry+https://github.com/rust-lang/crates.io-index"
4684 +checksum = "675656c1eabb620b921efea4f9199f97fc86e36dd6ffd1fbbe48d0f59a4987f5"
4685 +dependencies = [
4686 + "hashbrown 0.16.1",
4687 + "serde",
4688 + "serde_json",
4689 +]
4690 +
4691 +[[package]]
4692 +name = "same-file"
4693 +version = "1.0.6"
4694 +source = "registry+https://github.com/rust-lang/crates.io-index"
4695 +checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502"
4696 +dependencies = [
4697 + "winapi-util",
4698 +]
4699 +
4700 +[[package]]
4701 +name = "saphyr-parser-bw"
4702 +version = "0.0.605"
4703 +source = "registry+https://github.com/rust-lang/crates.io-index"
4704 +checksum = "5e1aee7486406df3541b5a657204a11be97175a467d77bc98e6d94a66289fb80"
4705 +dependencies = [
4706 + "arraydeque",
4707 + "smallvec 2.0.0-alpha.12",
4708 + "thiserror 2.0.18",
4709 +]
4710 +
4711 +[[package]]
4712 +name = "schannel"
4713 +version = "0.1.29"
4714 +source = "registry+https://github.com/rust-lang/crates.io-index"
4715 +checksum = "91c1b7e4904c873ef0710c1f407dde2e6287de2bebc1bbbf7d430bb7cbffd939"
4716 +dependencies = [
4717 + "windows-sys 0.61.2",
4718 +]
4719 +
4720 +[[package]]
4721 +name = "schemars"
4722 +version = "0.9.0"
4723 +source = "registry+https://github.com/rust-lang/crates.io-index"
4724 +checksum = "4cd191f9397d57d581cddd31014772520aa448f65ef991055d7f61582c65165f"
4725 +dependencies = [
4726 + "dyn-clone",
4727 + "ref-cast",
4728 + "serde",
4729 + "serde_json",
4730 +]
4731 +
4732 +[[package]]
4733 +name = "schemars"
4734 +version = "1.2.1"
4735 +source = "registry+https://github.com/rust-lang/crates.io-index"
4736 +checksum = "a2b42f36aa1cd011945615b92222f6bf73c599a102a300334cd7f8dbeec726cc"
4737 +dependencies = [
4738 + "dyn-clone",
4739 + "ref-cast",
4740 + "schemars_derive",
4741 + "serde",
4742 + "serde_json",
4743 +]
4744 +
4745 +[[package]]
4746 +name = "schemars_derive"
4747 +version = "1.2.1"
4748 +source = "registry+https://github.com/rust-lang/crates.io-index"
4749 +checksum = "7d115b50f4aaeea07e79c1912f645c7513d81715d0420f8bc77a18c6260b307f"
4750 +dependencies = [
4751 + "proc-macro2",
4752 + "quote",
4753 + "serde_derive_internals",
4754 + "syn 2.0.117",
4755 +]
4756 +
4757 +[[package]]
4758 +name = "scoped-tls"
4759 +version = "1.0.1"
4760 +source = "registry+https://github.com/rust-lang/crates.io-index"
4761 +checksum = "e1cf6437eb19a8f4a6cc0f7dca544973b0b78843adbfeb3683d1a94a0024a294"
4762 +
4763 +[[package]]
4764 +name = "scopeguard"
4765 +version = "1.2.0"
4766 +source = "registry+https://github.com/rust-lang/crates.io-index"
4767 +checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49"
4768 +
4769 +[[package]]
4770 +name = "scraper"
4771 +version = "0.25.0"
4772 +source = "registry+https://github.com/rust-lang/crates.io-index"
4773 +checksum = "93cecd86d6259499c844440546d02f55f3e17bd286e529e48d1f9f67e92315cb"
4774 +dependencies = [
4775 + "cssparser",
4776 + "ego-tree",
4777 + "getopts",
4778 + "html5ever 0.36.1",
4779 + "precomputed-hash",
4780 + "selectors",
4781 + "tendril 0.4.3",
4782 +]
4783 +
4784 +[[package]]
4785 +name = "scroll"
4786 +version = "0.12.0"
4787 +source = "registry+https://github.com/rust-lang/crates.io-index"
4788 +checksum = "6ab8598aa408498679922eff7fa985c25d58a90771bd6be794434c5277eab1a6"
4789 +dependencies = [
4790 + "scroll_derive",
4791 +]
4792 +
4793 +[[package]]
4794 +name = "scroll_derive"
4795 +version = "0.12.1"
4796 +source = "registry+https://github.com/rust-lang/crates.io-index"
4797 +checksum = "1783eabc414609e28a5ba76aee5ddd52199f7107a0b24c2e9746a1ecc34a683d"
4798 +dependencies = [
4799 + "proc-macro2",
4800 + "quote",
4801 + "syn 2.0.117",
4802 +]
4803 +
4804 +[[package]]
4805 +name = "security-framework"
4806 +version = "3.7.0"
4807 +source = "registry+https://github.com/rust-lang/crates.io-index"
4808 +checksum = "b7f4bc775c73d9a02cde8bf7b2ec4c9d12743edf609006c7facc23998404cd1d"
4809 +dependencies = [
4810 + "bitflags 2.11.0",
4811 + "core-foundation 0.10.1",
4812 + "core-foundation-sys",
4813 + "libc",
4814 + "security-framework-sys",
4815 +]
4816 +
4817 +[[package]]
4818 +name = "security-framework-sys"
4819 +version = "2.17.0"
4820 +source = "registry+https://github.com/rust-lang/crates.io-index"
4821 +checksum = "6ce2691df843ecc5d231c0b14ece2acc3efb62c0a398c7e1d875f3983ce020e3"
4822 +dependencies = [
4823 + "core-foundation-sys",
4824 + "libc",
4825 +]
4826 +
4827 +[[package]]
4828 +name = "selectors"
4829 +version = "0.33.0"
4830 +source = "registry+https://github.com/rust-lang/crates.io-index"
4831 +checksum = "feef350c36147532e1b79ea5c1f3791373e61cbd9a6a2615413b3807bb164fb7"
4832 +dependencies = [
4833 + "bitflags 2.11.0",
4834 + "cssparser",
4835 + "derive_more",
4836 + "log",
4837 + "new_debug_unreachable",
4838 + "phf",
4839 + "phf_codegen",
4840 + "precomputed-hash",
4841 + "rustc-hash 2.1.2",
4842 + "servo_arc",
4843 + "smallvec 1.15.1",
4844 +]
4845 +
4846 +[[package]]
4847 +name = "semver"
4848 +version = "1.0.28"
4849 +source = "registry+https://github.com/rust-lang/crates.io-index"
4850 +checksum = "8a7852d02fc848982e0c167ef163aaff9cd91dc640ba85e263cb1ce46fae51cd"
4851 +dependencies = [
4852 + "serde",
4853 + "serde_core",
4854 +]
4855 +
4856 +[[package]]
4857 +name = "seq-macro"
4858 +version = "0.3.6"
4859 +source = "registry+https://github.com/rust-lang/crates.io-index"
4860 +checksum = "1bc711410fbe7399f390ca1c3b60ad0f53f80e95c5eb935e52268a0e2cd49acc"
4861 +
4862 +[[package]]
4863 +name = "serde"
4864 +version = "1.0.228"
4865 +source = "registry+https://github.com/rust-lang/crates.io-index"
4866 +checksum = "9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9e"
4867 +dependencies = [
4868 + "serde_core",
4869 + "serde_derive",
4870 +]
4871 +
4872 +[[package]]
4873 +name = "serde-big-array"
4874 +version = "0.5.1"
4875 +source = "registry+https://github.com/rust-lang/crates.io-index"
4876 +checksum = "11fc7cc2c76d73e0f27ee52abbd64eec84d46f370c88371120433196934e4b7f"
4877 +dependencies = [
4878 + "serde",
4879 +]
4880 +
4881 +[[package]]
4882 +name = "serde-saphyr"
4883 +version = "0.0.16"
4884 +source = "registry+https://github.com/rust-lang/crates.io-index"
4885 +checksum = "4db5a4a562bcc0017c34cd0efbabf447be783f00576a2a516947f884e6a7ed57"
4886 +dependencies = [
4887 + "ahash",
4888 + "annotate-snippets",
4889 + "base64 0.22.1",
4890 + "encoding_rs_io",
4891 + "nohash-hasher",
4892 + "num-traits",
4893 + "regex",
4894 + "saphyr-parser-bw",
4895 + "serde",
4896 + "serde_json",
4897 + "smallvec 2.0.0-alpha.12",
4898 + "zmij",
4899 +]
4900 +
4901 +[[package]]
4902 +name = "serde_core"
4903 +version = "1.0.228"
4904 +source = "registry+https://github.com/rust-lang/crates.io-index"
4905 +checksum = "41d385c7d4ca58e59fc732af25c3983b67ac852c1a25000afe1175de458b67ad"
4906 +dependencies = [
4907 + "serde_derive",
4908 +]
4909 +
4910 +[[package]]
4911 +name = "serde_derive"
4912 +version = "1.0.228"
4913 +source = "registry+https://github.com/rust-lang/crates.io-index"
4914 +checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79"
4915 +dependencies = [
4916 + "proc-macro2",
4917 + "quote",
4918 + "syn 2.0.117",
4919 +]
4920 +
4921 +[[package]]
4922 +name = "serde_derive_internals"
4923 +version = "0.29.1"
4924 +source = "registry+https://github.com/rust-lang/crates.io-index"
4925 +checksum = "18d26a20a969b9e3fdf2fc2d9f21eda6c40e2de84c9408bb5d3b05d499aae711"
4926 +dependencies = [
4927 + "proc-macro2",
4928 + "quote",
4929 + "syn 2.0.117",
4930 +]
4931 +
4932 +[[package]]
4933 +name = "serde_json"
4934 +version = "1.0.149"
4935 +source = "registry+https://github.com/rust-lang/crates.io-index"
4936 +checksum = "83fc039473c5595ace860d8c4fafa220ff474b3fc6bfdb4293327f1a37e94d86"
4937 +dependencies = [
4938 + "indexmap 2.14.0",
4939 + "itoa",
4940 + "memchr",
4941 + "serde",
4942 + "serde_core",
4943 + "zmij",
4944 +]
4945 +
4946 +[[package]]
4947 +name = "serde_plain"
4948 +version = "1.0.2"
4949 +source = "registry+https://github.com/rust-lang/crates.io-index"
4950 +checksum = "9ce1fc6db65a611022b23a0dec6975d63fb80a302cb3388835ff02c097258d50"
4951 +dependencies = [
4952 + "serde",
4953 +]
4954 +
4955 +[[package]]
4956 +name = "serde_spanned"
4957 +version = "1.1.1"
4958 +source = "registry+https://github.com/rust-lang/crates.io-index"
4959 +checksum = "6662b5879511e06e8999a8a235d848113e942c9124f211511b16466ee2995f26"
4960 +dependencies = [
4961 + "serde_core",
4962 +]
4963 +
4964 +[[package]]
4965 +name = "serde_urlencoded"
4966 +version = "0.7.1"
4967 +source = "registry+https://github.com/rust-lang/crates.io-index"
4968 +checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd"
4969 +dependencies = [
4970 + "form_urlencoded",
4971 + "itoa",
4972 + "ryu",
4973 + "serde",
4974 +]
4975 +
4976 +[[package]]
4977 +name = "serde_with"
4978 +version = "3.18.0"
4979 +source = "registry+https://github.com/rust-lang/crates.io-index"
4980 +checksum = "dd5414fad8e6907dbdd5bc441a50ae8d6e26151a03b1de04d89a5576de61d01f"
4981 +dependencies = [
4982 + "base64 0.22.1",
4983 + "chrono",
4984 + "hex",
4985 + "indexmap 1.9.3",
4986 + "indexmap 2.14.0",
4987 + "schemars 0.9.0",
4988 + "schemars 1.2.1",
4989 + "serde_core",
4990 + "serde_json",
4991 + "serde_with_macros",
4992 + "time",
4993 +]
4994 +
4995 +[[package]]
4996 +name = "serde_with_macros"
4997 +version = "3.18.0"
4998 +source = "registry+https://github.com/rust-lang/crates.io-index"
4999 +checksum = "d3db8978e608f1fe7357e211969fd9abdcae80bac1ba7a3369bb7eb6b404eb65"

This file is too large to show in full.

sdk/react-native/rust/Cargo.toml new
+19
@@ -0,0 +1,19 @@
1 +[package]
2 +name = "onde-react-native"
3 +version = "0.1.3"
4 +edition = "2021"
5 +publish = false
6 +
7 +[lib]
8 +name = "onde_react_native"
9 +crate-type = ["staticlib", "cdylib"]
10 +
11 +[dependencies]
12 +onde = { path = "../../.." }
13 +tokio = { version = "1", features = ["rt-multi-thread", "macros"] }
14 +serde = { version = "1", features = ["derive"] }
15 +serde_json = "1"
16 +log = "0.4"
17 +
18 +[target.'cfg(target_os = "android")'.dependencies]
19 +jni = "0.21"
sdk/react-native/rust/build.rs new
+1
@@ -0,0 +1 @@
1 +fn main() {}
sdk/react-native/rust/src/lib.rs new
+847
@@ -0,0 +1,847 @@
1 +//! C FFI bridge for the Onde React Native npm SDK.
2 +//!
3 +//! This crate wraps [`onde::inference::engine::ChatEngine`] with `extern "C"`
4 +//! functions callable from Swift (iOS) and Kotlin/JNI (Android).
5 +//!
6 +//! ## Design
7 +//!
8 +//! - **Opaque pointer** (`*mut c_void`) for the engine handle.
9 +//! - **JSON strings** (via `serde_json`) for complex types crossing FFI.
10 +//! - **Global `tokio::Runtime`** created once via `OnceLock`.
11 +//! - Every function that returns a `*mut c_char` requires the caller to free
12 +//! it with [`onde_free_string`].
13 +//! - Android JNI wrappers are gated behind `#[cfg(target_os = "android")]`.
14 +
15 +use std::ffi::{c_char, c_void, CStr, CString};
16 +use std::sync::OnceLock;
17 +
18 +use serde::de::DeserializeOwned;
19 +use serde::Serialize;
20 +use tokio::runtime::Runtime;
21 +
22 +use onde::inference::engine::ChatEngine;
23 +use onde::inference::types::{ChatMessage, GgufModelConfig, SamplingConfig};
24 +
25 +// ── Global Tokio runtime ─────────────────────────────────────────────────────
26 +
27 +/// Returns a reference to the global multi-threaded Tokio runtime.
28 +///
29 +/// The runtime is created on first access and lives for the process lifetime.
30 +fn runtime() -> &'static Runtime {
31 + static RT: OnceLock<Runtime> = OnceLock::new();
32 + RT.get_or_init(|| {
33 + tokio::runtime::Builder::new_multi_thread()
34 + .enable_all()
35 + .build()
36 + .expect("onde-react-native: failed to create tokio runtime")
37 + })
38 +}
39 +
40 +// ── Helper functions ─────────────────────────────────────────────────────────
41 +
42 +/// Serialize any `Serialize` value to a heap-allocated C string.
43 +///
44 +/// The caller **must** free the returned pointer with [`onde_free_string`].
45 +fn to_json_cstring<T: Serialize>(value: &T) -> *mut c_char {
46 + match serde_json::to_string(value) {
47 + Ok(json) => CString::new(json).unwrap_or_default().into_raw(),
48 + Err(err) => error_json(&format!("JSON serialization failed: {err}")),
49 + }
50 +}
51 +
52 +/// Deserialize a JSON C string into a Rust type.
53 +///
54 +/// Returns `None` if the pointer is null or the JSON is malformed.
55 +fn from_json_cstr<T: DeserializeOwned>(ptr: *const c_char) -> Option<T> {
56 + if ptr.is_null() {
57 + return None;
58 + }
59 + let cstr = unsafe { CStr::from_ptr(ptr) };
60 + let s = cstr.to_str().ok()?;
61 + serde_json::from_str(s).ok()
62 +}
63 +
64 +/// Read an optional C string parameter into an `Option<String>`.
65 +///
66 +/// Returns `None` if the pointer is null or the string is empty.
67 +fn nullable_str(ptr: *const c_char) -> Option<String> {
68 + if ptr.is_null() {
69 + return None;
70 + }
71 + let cstr = unsafe { CStr::from_ptr(ptr) };
72 + let s = cstr.to_str().ok()?;
73 + if s.is_empty() {
74 + None
75 + } else {
76 + Some(s.to_owned())
77 + }
78 +}
79 +
80 +/// Create a heap-allocated JSON error string: `{ "error": "<msg>" }`.
81 +fn error_json(msg: &str) -> *mut c_char {
82 + let json = serde_json::json!({ "error": msg });
83 + CString::new(json.to_string())
84 + .unwrap_or_default()
85 + .into_raw()
86 +}
87 +
88 +// ── Engine lifecycle ─────────────────────────────────────────────────────────
89 +
90 +/// Create a new `ChatEngine` and return an opaque pointer to it.
91 +///
92 +/// The engine starts with no model loaded. The caller must eventually call
93 +/// [`onde_engine_destroy`] to free the memory.
94 +#[no_mangle]
95 +pub extern "C" fn onde_engine_create() -> *mut c_void {
96 + let engine = Box::new(ChatEngine::new());
97 + Box::into_raw(engine) as *mut c_void
98 +}
99 +
100 +/// Destroy an engine previously created with [`onde_engine_create`].
101 +///
102 +/// After this call the pointer is invalid and must not be used.
103 +/// Passing a null pointer is a no-op.
104 +#[no_mangle]
105 +pub extern "C" fn onde_engine_destroy(engine: *mut c_void) {
106 + if engine.is_null() {
107 + return;
108 + }
109 + unsafe {
110 + let _ = Box::from_raw(engine as *mut ChatEngine);
111 + }
112 +}
113 +
114 +/// Load the platform-default GGUF model.
115 +///
116 +/// # Parameters
117 +///
118 +/// - `engine` — opaque engine pointer from [`onde_engine_create`].
119 +/// - `system_prompt` — optional C string (pass null to omit).
120 +/// - `sampling_json` — optional JSON-encoded `SamplingConfig` (pass null for defaults).
121 +///
122 +/// # Returns
123 +///
124 +/// A heap-allocated JSON C string (free with [`onde_free_string`]):
125 +/// - On success: `{ "elapsed_secs": <f64> }`
126 +/// - On failure: `{ "error": "<description>" }`
127 +#[no_mangle]
128 +pub extern "C" fn onde_engine_load_default_model(
129 + engine: *mut c_void,
130 + system_prompt: *const c_char,
131 + sampling_json: *const c_char,
132 +) -> *mut c_char {
133 + if engine.is_null() {
134 + return error_json("engine pointer is null");
135 + }
136 + let engine_ref = unsafe { &*(engine as *const ChatEngine) };
137 + let prompt = nullable_str(system_prompt);
138 + let sampling: Option<SamplingConfig> = from_json_cstr(sampling_json);
139 + let config = GgufModelConfig::platform_default();
140 +
141 + runtime().block_on(async {
142 + match engine_ref.load_gguf_model(config, prompt, sampling).await {
143 + Ok(duration) => {
144 + let result = serde_json::json!({ "elapsed_secs": duration.as_secs_f64() });
145 + to_json_cstring(&result)
146 + }
147 + Err(err) => error_json(&err.to_string()),
148 + }
149 + })
150 +}
151 +
152 +/// Load a specific GGUF model from a JSON-encoded [`GgufModelConfig`].
153 +///
154 +/// # Parameters
155 +///
156 +/// - `config_json` — JSON-encoded `GgufModelConfig`.
157 +/// - `system_prompt` — optional C string (pass null to omit).
158 +/// - `sampling_json` — optional JSON-encoded `SamplingConfig` (pass null for defaults).
159 +///
160 +/// # Returns
161 +///
162 +/// Same JSON shape as [`onde_engine_load_default_model`].
163 +#[no_mangle]
164 +pub extern "C" fn onde_engine_load_model(
165 + engine: *mut c_void,
166 + config_json: *const c_char,
167 + system_prompt: *const c_char,
168 + sampling_json: *const c_char,
169 +) -> *mut c_char {
170 + if engine.is_null() {
171 + return error_json("engine pointer is null");
172 + }
173 + let engine_ref = unsafe { &*(engine as *const ChatEngine) };
174 +
175 + let config: GgufModelConfig = match from_json_cstr(config_json) {
176 + Some(c) => c,
177 + None => return error_json("invalid or null config_json"),
178 + };
179 + let prompt = nullable_str(system_prompt);
180 + let sampling: Option<SamplingConfig> = from_json_cstr(sampling_json);
181 +
182 + runtime().block_on(async {
183 + match engine_ref.load_gguf_model(config, prompt, sampling).await {
184 + Ok(duration) => {
185 + let result = serde_json::json!({ "elapsed_secs": duration.as_secs_f64() });
186 + to_json_cstring(&result)
187 + }
188 + Err(err) => error_json(&err.to_string()),
189 + }
190 + })
191 +}
192 +
193 +/// Unload the currently loaded model.
194 +///
195 +/// # Returns
196 +///
197 +/// JSON: `{ "model_name": "<name>" }` or `{ "model_name": null }`.
198 +#[no_mangle]
199 +pub extern "C" fn onde_engine_unload_model(engine: *mut c_void) -> *mut c_char {
200 + if engine.is_null() {
201 + return error_json("engine pointer is null");
202 + }
203 + let engine_ref = unsafe { &*(engine as *const ChatEngine) };
204 + let name = runtime().block_on(engine_ref.unload_model());
205 + let result = serde_json::json!({ "model_name": name });
206 + to_json_cstring(&result)
207 +}
208 +
209 +/// Check whether a model is currently loaded.
210 +#[no_mangle]
211 +pub extern "C" fn onde_engine_is_loaded(engine: *mut c_void) -> bool {
212 + if engine.is_null() {
213 + return false;
214 + }
215 + let engine_ref = unsafe { &*(engine as *const ChatEngine) };
216 + runtime().block_on(engine_ref.is_loaded())
217 +}
218 +
219 +// ── Engine info ──────────────────────────────────────────────────────────────
220 +
221 +/// Get a snapshot of the engine's current state as JSON.
222 +///
223 +/// # Returns
224 +///
225 +/// JSON-encoded [`EngineInfo`](onde::inference::types::EngineInfo).
226 +#[no_mangle]
227 +pub extern "C" fn onde_engine_info(engine: *mut c_void) -> *mut c_char {
228 + if engine.is_null() {
229 + return error_json("engine pointer is null");
230 + }
231 + let engine_ref = unsafe { &*(engine as *const ChatEngine) };
232 + let info = runtime().block_on(engine_ref.info());
233 + to_json_cstring(&info)
234 +}
235 +
236 +// ── System prompt ────────────────────────────────────────────────────────────
237 +
238 +/// Set or replace the engine's system prompt.
239 +#[no_mangle]
240 +pub extern "C" fn onde_engine_set_system_prompt(engine: *mut c_void, prompt: *const c_char) {
241 + if engine.is_null() {
242 + return;
243 + }
244 + let engine_ref = unsafe { &*(engine as *const ChatEngine) };
245 + if let Some(text) = nullable_str(prompt) {
246 + runtime().block_on(engine_ref.set_system_prompt(text));
247 + }
248 +}
249 +
250 +/// Clear the engine's system prompt.
251 +#[no_mangle]
252 +pub extern "C" fn onde_engine_clear_system_prompt(engine: *mut c_void) {
253 + if engine.is_null() {
254 + return;
255 + }
256 + let engine_ref = unsafe { &*(engine as *const ChatEngine) };
257 + runtime().block_on(engine_ref.clear_system_prompt());
258 +}
259 +
260 +// ── Sampling ─────────────────────────────────────────────────────────────────
261 +
262 +/// Replace the engine's sampling configuration from a JSON string.
263 +#[no_mangle]
264 +pub extern "C" fn onde_engine_set_sampling(engine: *mut c_void, sampling_json: *const c_char) {
265 + if engine.is_null() {
266 + return;
267 + }
268 + let engine_ref = unsafe { &*(engine as *const ChatEngine) };
269 + if let Some(sampling) = from_json_cstr::<SamplingConfig>(sampling_json) {
270 + runtime().block_on(engine_ref.set_sampling(sampling));
271 + }
272 +}
273 +
274 +// ── History ──────────────────────────────────────────────────────────────────
275 +
276 +/// Get the conversation history as a JSON array of `ChatMessage` objects.
277 +#[no_mangle]
278 +pub extern "C" fn onde_engine_history(engine: *mut c_void) -> *mut c_char {
279 + if engine.is_null() {
280 + return to_json_cstring(&serde_json::json!([]));
281 + }
282 + let engine_ref = unsafe { &*(engine as *const ChatEngine) };
283 + let history = runtime().block_on(engine_ref.history());
284 + to_json_cstring(&history)
285 +}
286 +
287 +/// Clear the conversation history. Returns the number of turns removed.
288 +#[no_mangle]
289 +pub extern "C" fn onde_engine_clear_history(engine: *mut c_void) -> u64 {
290 + if engine.is_null() {
291 + return 0;
292 + }
293 + let engine_ref = unsafe { &*(engine as *const ChatEngine) };
294 + runtime().block_on(engine_ref.clear_history()) as u64
295 +}
296 +
297 +/// Append a message to the conversation history without running inference.
298 +///
299 +/// `message_json` must be a JSON-encoded `ChatMessage`.
300 +#[no_mangle]
301 +pub extern "C" fn onde_engine_push_history(engine: *mut c_void, message_json: *const c_char) {
302 + if engine.is_null() {
303 + return;
304 + }
305 + let engine_ref = unsafe { &*(engine as *const ChatEngine) };
306 + if let Some(message) = from_json_cstr::<ChatMessage>(message_json) {
307 + runtime().block_on(engine_ref.push_history(message));
308 + }
309 +}
310 +
311 +// ── Non-streaming inference ──────────────────────────────────────────────────
312 +
313 +/// Send a user message and receive a complete assistant reply.
314 +///
315 +/// The message and reply are appended to the conversation history.
316 +///
317 +/// # Returns
318 +///
319 +/// JSON-encoded [`InferenceResult`](onde::inference::types::InferenceResult)
320 +/// on success, or `{ "error": "<description>" }` on failure.
321 +#[no_mangle]
322 +pub extern "C" fn onde_engine_send_message(
323 + engine: *mut c_void,
324 + message: *const c_char,
325 +) -> *mut c_char {
326 + if engine.is_null() {
327 + return error_json("engine pointer is null");
328 + }
329 + let engine_ref = unsafe { &*(engine as *const ChatEngine) };
330 + let text = match nullable_str(message) {
331 + Some(t) => t,
332 + None => return error_json("message is null or empty"),
333 + };
334 +
335 + runtime().block_on(async {
336 + match engine_ref.send_message(text).await {
337 + Ok(result) => to_json_cstring(&result),
338 + Err(err) => error_json(&err.to_string()),
339 + }
340 + })
341 +}
342 +
343 +/// One-shot generation without modifying conversation history.
344 +///
345 +/// # Parameters
346 +///
347 +/// - `messages_json` — JSON array of `ChatMessage`.
348 +/// - `sampling_json` — optional JSON-encoded `SamplingConfig` (null for engine defaults).
349 +///
350 +/// # Returns
351 +///
352 +/// JSON-encoded [`InferenceResult`] or `{ "error": "..." }`.
353 +#[no_mangle]
354 +pub extern "C" fn onde_engine_generate(
355 + engine: *mut c_void,
356 + messages_json: *const c_char,
357 + sampling_json: *const c_char,
358 +) -> *mut c_char {
359 + if engine.is_null() {
360 + return error_json("engine pointer is null");
361 + }
362 + let engine_ref = unsafe { &*(engine as *const ChatEngine) };
363 +
364 + let messages: Vec<ChatMessage> = match from_json_cstr(messages_json) {
365 + Some(m) => m,
366 + None => return error_json("invalid or null messages_json"),
367 + };
368 + let sampling: Option<SamplingConfig> = from_json_cstr(sampling_json);
369 +
370 + runtime().block_on(async {
371 + match engine_ref.generate(messages, sampling).await {
372 + Ok(result) => to_json_cstring(&result),
373 + Err(err) => error_json(&err.to_string()),
374 + }
375 + })
376 +}
377 +
378 +// ── Streaming inference ──────────────────────────────────────────────────────
379 +
380 +/// Send a user message and stream token chunks via a C callback.
381 +///
382 +/// The callback is invoked for each chunk with:
383 +/// - `chunk_json` — a JSON-encoded [`StreamChunk`](onde::inference::types::StreamChunk)
384 +/// (valid only for the duration of the callback invocation).
385 +/// - `done` — `true` when this is the final chunk.
386 +///
387 +/// # Returns
388 +///
389 +/// - `null` on success (streaming completed).
390 +/// - A heap-allocated JSON error string on failure (free with [`onde_free_string`]).
391 +#[no_mangle]
392 +pub extern "C" fn onde_engine_stream_message(
393 + engine: *mut c_void,
394 + message: *const c_char,
395 + callback: extern "C" fn(*const c_char, bool),
396 +) -> *mut c_char {
397 + if engine.is_null() {
398 + return error_json("engine pointer is null");
399 + }
400 + let engine_ref = unsafe { &*(engine as *const ChatEngine) };
401 + let text = match nullable_str(message) {
402 + Some(t) => t,
403 + None => return error_json("message is null or empty"),
404 + };
405 +
406 + runtime().block_on(async {
407 + let receiver = match engine_ref.stream_message(text).await {
408 + Ok(rx) => rx,
409 + Err(err) => return error_json(&err.to_string()),
410 + };
411 +
412 + // Drain the channel and forward each chunk through the callback.
413 + let mut receiver = receiver;
414 + loop {
415 + match receiver.recv().await {
416 + Some(chunk) => {
417 + let done = chunk.done;
418 + match serde_json::to_string(&chunk) {
419 + Ok(json) => {
420 + if let Ok(cstr) = CString::new(json) {
421 + callback(cstr.as_ptr(), done);
422 + }
423 + }
424 + Err(err) => {
425 + log::error!(
426 + "onde_engine_stream_message: JSON serialization failed: {err}"
427 + );
428 + }
429 + }
430 + if done {
431 + break;
432 + }
433 + }
434 + None => {
435 + // Channel closed without a done chunk — send a synthetic one.
436 + let final_json = serde_json::json!({
437 + "delta": "",
438 + "done": true,
439 + "finish_reason": "channel_closed"
440 + });
441 + if let Ok(cstr) = CString::new(final_json.to_string()) {
442 + callback(cstr.as_ptr(), true);
443 + }
444 + break;
445 + }
446 + }
447 + }
448 +
449 + std::ptr::null_mut()
450 + })
451 +}
452 +
453 +// ── Model config presets ─────────────────────────────────────────────────────
454 +
455 +/// Return the platform-default GGUF model config as JSON.
456 +#[no_mangle]
457 +pub extern "C" fn onde_default_model_config() -> *mut c_char {
458 + to_json_cstring(&GgufModelConfig::platform_default())
459 +}
460 +
461 +/// Return the Qwen 2.5 1.5B GGUF model config as JSON.
462 +#[no_mangle]
463 +pub extern "C" fn onde_qwen25_1_5b_config() -> *mut c_char {
464 + to_json_cstring(&GgufModelConfig::qwen25_1_5b())
465 +}
466 +
467 +/// Return the Qwen 2.5 3B GGUF model config as JSON.
468 +#[no_mangle]
469 +pub extern "C" fn onde_qwen25_3b_config() -> *mut c_char {
470 + to_json_cstring(&GgufModelConfig::qwen25_3b())
471 +}
472 +
473 +// ── Sampling presets ─────────────────────────────────────────────────────────
474 +
475 +/// Return the default sampling config as JSON.
476 +#[no_mangle]
477 +pub extern "C" fn onde_default_sampling_config() -> *mut c_char {
478 + to_json_cstring(&SamplingConfig::default())
479 +}
480 +
481 +/// Return the deterministic (greedy) sampling config as JSON.
482 +#[no_mangle]
483 +pub extern "C" fn onde_deterministic_sampling_config() -> *mut c_char {
484 + to_json_cstring(&SamplingConfig::deterministic())
485 +}
486 +
487 +/// Return the mobile sampling config as JSON.
488 +#[no_mangle]
489 +pub extern "C" fn onde_mobile_sampling_config() -> *mut c_char {
490 + to_json_cstring(&SamplingConfig::mobile())
491 +}
492 +
493 +// ── Memory management ────────────────────────────────────────────────────────
494 +
495 +/// Free a C string previously returned by any `onde_*` function.
496 +///
497 +/// Passing a null pointer is a no-op.
498 +#[no_mangle]
499 +#[allow(clippy::not_unsafe_ptr_arg_deref)]
500 +pub extern "C" fn onde_free_string(ptr: *mut c_char) {
501 + if ptr.is_null() {
502 + return;
503 + }
504 + unsafe {
505 + let _ = CString::from_raw(ptr);
506 + }
507 +}
508 +
509 +// ═══════════════════════════════════════════════════════════════════════════════
510 +// Android JNI bindings
511 +// ═══════════════════════════════════════════════════════════════════════════════
512 +
513 +#[cfg(target_os = "android")]
514 +mod android {
515 + use jni::objects::{JClass, JString};
516 + use jni::sys::{jboolean, jlong, jstring, JNI_FALSE, JNI_TRUE};
517 + use jni::JNIEnv;
518 +
519 + use std::ffi::{c_char, c_void, CStr, CString};
520 +
521 + use super::*;
522 +
523 + // ── JNI helpers ──────────────────────────────────────────────────────
524 +
525 + /// Convert a JNI `JString` to a `CString`.
526 + ///
527 + /// Returns `None` if the JString is null or conversion fails.
528 + /// The caller must keep the returned `CString` alive for as long as
529 + /// the `.as_ptr()` result is used.
530 + fn jstring_to_cstring(env: &mut JNIEnv, jstr: &JString) -> Option<CString> {
531 + if jstr.is_null() {
532 + return None;
533 + }
534 + let java_str = env.get_string(jstr).ok()?;
535 + let rust_str: String = java_str.into();
536 + CString::new(rust_str).ok()
537 + }
538 +
539 + /// Convert a `*mut c_char` (owned C string) to a JNI `jstring`.
540 + ///
541 + /// Frees the C string after conversion. Returns null jstring on failure.
542 + fn cstring_ptr_to_jstring(env: &mut JNIEnv, ptr: *mut c_char) -> jstring {
543 + if ptr.is_null() {
544 + return std::ptr::null_mut();
545 + }
546 + let cstr = unsafe { CStr::from_ptr(ptr) };
547 + let result = match cstr.to_str() {
548 + Ok(s) => env
549 + .new_string(s)
550 + .map(|js| js.into_raw())
551 + .unwrap_or(std::ptr::null_mut()),
552 + Err(_) => std::ptr::null_mut(),
553 + };
554 + // Free the C string.
555 + onde_free_string(ptr);
556 + result
557 + }
558 +
559 + // ── Engine lifecycle ─────────────────────────────────────────────────
560 +
561 + #[no_mangle]
562 + pub extern "system" fn Java_com_ondeinference_OndeInferenceModule_ondeEngineCreate(
563 + _env: JNIEnv,
564 + _class: JClass,
565 + ) -> jlong {
566 + onde_engine_create() as jlong
567 + }
568 +
569 + #[no_mangle]
570 + pub extern "system" fn Java_com_ondeinference_OndeInferenceModule_ondeEngineDestroy(
571 + _env: JNIEnv,
572 + _class: JClass,
573 + engine: jlong,
574 + ) {
575 + onde_engine_destroy(engine as *mut c_void);
576 + }
577 +
578 + #[no_mangle]
579 + pub extern "system" fn Java_com_ondeinference_OndeInferenceModule_ondeEngineLoadDefaultModel(
580 + mut env: JNIEnv,
581 + _class: JClass,
582 + engine: jlong,
583 + system_prompt: JString,
584 + sampling_json: JString,
585 + ) -> jstring {
586 + let prompt_cstr = jstring_to_cstring(&mut env, &system_prompt);
587 + let sampling_cstr = jstring_to_cstring(&mut env, &sampling_json);
588 +
589 + let prompt_ptr = prompt_cstr
590 + .as_ref()
591 + .map(|c| c.as_ptr())
592 + .unwrap_or(std::ptr::null());
593 + let sampling_ptr = sampling_cstr
594 + .as_ref()
595 + .map(|c| c.as_ptr())
596 + .unwrap_or(std::ptr::null());
597 +
598 + let result =
599 + onde_engine_load_default_model(engine as *mut c_void, prompt_ptr, sampling_ptr);
600 + cstring_ptr_to_jstring(&mut env, result)
601 + }
602 +
603 + #[no_mangle]
604 + pub extern "system" fn Java_com_ondeinference_OndeInferenceModule_ondeEngineLoadModel(
605 + mut env: JNIEnv,
606 + _class: JClass,
607 + engine: jlong,
608 + config_json: JString,
609 + system_prompt: JString,
610 + sampling_json: JString,
611 + ) -> jstring {
612 + let config_cstr = jstring_to_cstring(&mut env, &config_json);
613 + let prompt_cstr = jstring_to_cstring(&mut env, &system_prompt);
614 + let sampling_cstr = jstring_to_cstring(&mut env, &sampling_json);
615 +
616 + let config_ptr = config_cstr
617 + .as_ref()
618 + .map(|c| c.as_ptr())
619 + .unwrap_or(std::ptr::null());
620 + let prompt_ptr = prompt_cstr
621 + .as_ref()
622 + .map(|c| c.as_ptr())
623 + .unwrap_or(std::ptr::null());
624 + let sampling_ptr = sampling_cstr
625 + .as_ref()
626 + .map(|c| c.as_ptr())
627 + .unwrap_or(std::ptr::null());
628 +
629 + let result =
630 + onde_engine_load_model(engine as *mut c_void, config_ptr, prompt_ptr, sampling_ptr);
631 + cstring_ptr_to_jstring(&mut env, result)
632 + }
633 +
634 + #[no_mangle]
635 + pub extern "system" fn Java_com_ondeinference_OndeInferenceModule_ondeEngineUnloadModel(
636 + mut env: JNIEnv,
637 + _class: JClass,
638 + engine: jlong,
639 + ) -> jstring {
640 + let result = onde_engine_unload_model(engine as *mut c_void);
641 + cstring_ptr_to_jstring(&mut env, result)
642 + }
643 +
644 + #[no_mangle]
645 + pub extern "system" fn Java_com_ondeinference_OndeInferenceModule_ondeEngineIsLoaded(
646 + _env: JNIEnv,
647 + _class: JClass,
648 + engine: jlong,
649 + ) -> jboolean {
650 + if onde_engine_is_loaded(engine as *mut c_void) {
651 + JNI_TRUE
652 + } else {
653 + JNI_FALSE
654 + }
655 + }
656 +
657 + // ── Engine info ──────────────────────────────────────────────────────
658 +
659 + #[no_mangle]
660 + pub extern "system" fn Java_com_ondeinference_OndeInferenceModule_ondeEngineInfo(
661 + mut env: JNIEnv,
662 + _class: JClass,
663 + engine: jlong,
664 + ) -> jstring {
665 + let result = onde_engine_info(engine as *mut c_void);
666 + cstring_ptr_to_jstring(&mut env, result)
667 + }
668 +
669 + // ── System prompt ────────────────────────────────────────────────────
670 +
671 + #[no_mangle]
672 + pub extern "system" fn Java_com_ondeinference_OndeInferenceModule_ondeEngineSetSystemPrompt(
673 + mut env: JNIEnv,
674 + _class: JClass,
675 + engine: jlong,
676 + prompt: JString,
677 + ) {
678 + let prompt_cstr = jstring_to_cstring(&mut env, &prompt);
679 + let prompt_ptr = prompt_cstr
680 + .as_ref()
681 + .map(|c| c.as_ptr())
682 + .unwrap_or(std::ptr::null());
683 + onde_engine_set_system_prompt(engine as *mut c_void, prompt_ptr);
684 + }
685 +
686 + #[no_mangle]
687 + pub extern "system" fn Java_com_ondeinference_OndeInferenceModule_ondeEngineClearSystemPrompt(
688 + _env: JNIEnv,
689 + _class: JClass,
690 + engine: jlong,
691 + ) {
692 + onde_engine_clear_system_prompt(engine as *mut c_void);
693 + }
694 +
695 + // ── Sampling ─────────────────────────────────────────────────────────
696 +
697 + #[no_mangle]
698 + pub extern "system" fn Java_com_ondeinference_OndeInferenceModule_ondeEngineSetSampling(
699 + mut env: JNIEnv,
700 + _class: JClass,
701 + engine: jlong,
702 + sampling_json: JString,
703 + ) {
704 + let sampling_cstr = jstring_to_cstring(&mut env, &sampling_json);
705 + let sampling_ptr = sampling_cstr
706 + .as_ref()
707 + .map(|c| c.as_ptr())
708 + .unwrap_or(std::ptr::null());
709 + onde_engine_set_sampling(engine as *mut c_void, sampling_ptr);
710 + }
711 +
712 + // ── History ──────────────────────────────────────────────────────────
713 +
714 + #[no_mangle]
715 + pub extern "system" fn Java_com_ondeinference_OndeInferenceModule_ondeEngineHistory(
716 + mut env: JNIEnv,
717 + _class: JClass,
718 + engine: jlong,
719 + ) -> jstring {
720 + let result = onde_engine_history(engine as *mut c_void);
721 + cstring_ptr_to_jstring(&mut env, result)
722 + }
723 +
724 + #[no_mangle]
725 + pub extern "system" fn Java_com_ondeinference_OndeInferenceModule_ondeEngineClearHistory(
726 + _env: JNIEnv,
727 + _class: JClass,
728 + engine: jlong,
729 + ) -> jlong {
730 + onde_engine_clear_history(engine as *mut c_void) as jlong
731 + }
732 +
733 + #[no_mangle]
734 + pub extern "system" fn Java_com_ondeinference_OndeInferenceModule_ondeEnginePushHistory(
735 + mut env: JNIEnv,
736 + _class: JClass,
737 + engine: jlong,
738 + message_json: JString,
739 + ) {
740 + let msg_cstr = jstring_to_cstring(&mut env, &message_json);
741 + let msg_ptr = msg_cstr
742 + .as_ref()
743 + .map(|c| c.as_ptr())
744 + .unwrap_or(std::ptr::null());
745 + onde_engine_push_history(engine as *mut c_void, msg_ptr);
746 + }
747 +
748 + // ── Inference ────────────────────────────────────────────────────────
749 +
750 + #[no_mangle]
751 + pub extern "system" fn Java_com_ondeinference_OndeInferenceModule_ondeEngineSendMessage(
752 + mut env: JNIEnv,
753 + _class: JClass,
754 + engine: jlong,
755 + message: JString,
756 + ) -> jstring {
757 + let msg_cstr = jstring_to_cstring(&mut env, &message);
758 + let msg_ptr = msg_cstr
759 + .as_ref()
760 + .map(|c| c.as_ptr())
761 + .unwrap_or(std::ptr::null());
762 + let result = onde_engine_send_message(engine as *mut c_void, msg_ptr);
763 + cstring_ptr_to_jstring(&mut env, result)
764 + }
765 +
766 + #[no_mangle]
767 + pub extern "system" fn Java_com_ondeinference_OndeInferenceModule_ondeEngineGenerate(
768 + mut env: JNIEnv,
769 + _class: JClass,
770 + engine: jlong,
771 + messages_json: JString,
772 + sampling_json: JString,
773 + ) -> jstring {
774 + let msgs_cstr = jstring_to_cstring(&mut env, &messages_json);
775 + let sampling_cstr = jstring_to_cstring(&mut env, &sampling_json);
776 +
777 + let msgs_ptr = msgs_cstr
778 + .as_ref()
779 + .map(|c| c.as_ptr())
780 + .unwrap_or(std::ptr::null());
781 + let sampling_ptr = sampling_cstr
782 + .as_ref()
783 + .map(|c| c.as_ptr())
784 + .unwrap_or(std::ptr::null());
785 +
786 + let result = onde_engine_generate(engine as *mut c_void, msgs_ptr, sampling_ptr);
787 + cstring_ptr_to_jstring(&mut env, result)
788 + }
789 +
790 + // ── Model config presets ─────────────────────────────────────────────
791 +
792 + #[no_mangle]
793 + pub extern "system" fn Java_com_ondeinference_OndeInferenceModule_ondeDefaultModelConfig(
794 + mut env: JNIEnv,
795 + _class: JClass,
796 + ) -> jstring {
797 + let result = onde_default_model_config();
798 + cstring_ptr_to_jstring(&mut env, result)
799 + }
800 +
801 + #[no_mangle]
802 + pub extern "system" fn Java_com_ondeinference_OndeInferenceModule_ondeQwen251_5bConfig(
803 + mut env: JNIEnv,
804 + _class: JClass,
805 + ) -> jstring {
806 + let result = onde_qwen25_1_5b_config();
807 + cstring_ptr_to_jstring(&mut env, result)
808 + }
809 +
810 + #[no_mangle]
811 + pub extern "system" fn Java_com_ondeinference_OndeInferenceModule_ondeQwen253bConfig(
812 + mut env: JNIEnv,
813 + _class: JClass,
814 + ) -> jstring {
815 + let result = onde_qwen25_3b_config();
816 + cstring_ptr_to_jstring(&mut env, result)
817 + }
818 +
819 + // ── Sampling presets ─────────────────────────────────────────────────
820 +
821 + #[no_mangle]
822 + pub extern "system" fn Java_com_ondeinference_OndeInferenceModule_ondeDefaultSamplingConfig(
823 + mut env: JNIEnv,
824 + _class: JClass,
825 + ) -> jstring {
826 + let result = onde_default_sampling_config();
827 + cstring_ptr_to_jstring(&mut env, result)
828 + }
829 +
830 + #[no_mangle]
831 + pub extern "system" fn Java_com_ondeinference_OndeInferenceModule_ondeDeterministicSamplingConfig(
832 + mut env: JNIEnv,
833 + _class: JClass,
834 + ) -> jstring {
835 + let result = onde_deterministic_sampling_config();
836 + cstring_ptr_to_jstring(&mut env, result)
837 + }
838 +
839 + #[no_mangle]
840 + pub extern "system" fn Java_com_ondeinference_OndeInferenceModule_ondeMobileSamplingConfig(
841 + mut env: JNIEnv,
842 + _class: JClass,
843 + ) -> jstring {
844 + let result = onde_mobile_sampling_config();
845 + cstring_ptr_to_jstring(&mut env, result)
846 + }
847 +}
sdk/react-native/scripts/build-rust.sh new
+93
@@ -0,0 +1,93 @@
1 +#!/usr/bin/env bash
2 +set -euo pipefail
3 +
4 +# Build the Rust FFI bridge for React Native targets.
5 +#
6 +# Usage:
7 +# ./scripts/build-rust.sh ios # Build for iOS device + simulator
8 +# ./scripts/build-rust.sh android # Build for Android architectures
9 +# ./scripts/build-rust.sh all # Build for all targets
10 +
11 +SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
12 +RUST_DIR="$SCRIPT_DIR/../rust"
13 +IOS_OUT="$SCRIPT_DIR/../ios/rust"
14 +ANDROID_OUT="$SCRIPT_DIR/../android/src/main/jniLibs"
15 +
16 +build_ios() {
17 + echo "=== Building Rust for iOS ==="
18 +
19 + # Device (arm64)
20 + echo " → aarch64-apple-ios"
21 + cargo build --manifest-path "$RUST_DIR/Cargo.toml" \
22 + --target aarch64-apple-ios --release
23 +
24 + # Simulator (arm64 Apple Silicon)
25 + echo " → aarch64-apple-ios-sim"
26 + cargo build --manifest-path "$RUST_DIR/Cargo.toml" \
27 + --target aarch64-apple-ios-sim --release
28 +
29 + # Copy both device and simulator staticlibs to ios/rust/{device,simulator}/
30 + mkdir -p "$IOS_OUT/device" "$IOS_OUT/simulator"
31 + cp "$RUST_DIR/target/aarch64-apple-ios/release/libonde_react_native.a" \
32 + "$IOS_OUT/device/libonde_react_native.a"
33 + cp "$RUST_DIR/target/aarch64-apple-ios-sim/release/libonde_react_native.a" \
34 + "$IOS_OUT/simulator/libonde_react_native.a"
35 +
36 + # Create an XCFramework that bundles both slices. CocoaPods picks the
37 + # correct one automatically based on the target SDK.
38 + echo " → Creating XCFramework"
39 + rm -rf "$IOS_OUT/OndeReactNative.xcframework"
40 + xcodebuild -create-xcframework \
41 + -library "$IOS_OUT/device/libonde_react_native.a" \
42 + -library "$IOS_OUT/simulator/libonde_react_native.a" \
43 + -output "$IOS_OUT/OndeReactNative.xcframework"
44 +
45 + echo " ✓ iOS XCFramework created at ios/rust/OndeReactNative.xcframework"
46 +}
47 +
48 +build_android() {
49 + echo "=== Building Rust for Android ==="
50 +
51 + # Verify NDK is available
52 + if [ -z "${ANDROID_NDK_HOME:-}" ]; then
53 + echo "Error: ANDROID_NDK_HOME is not set."
54 + echo "Set it to your Android NDK installation path, e.g.:"
55 + echo " export ANDROID_NDK_HOME=\$HOME/Library/Android/sdk/ndk/<version>"
56 + exit 1
57 + fi
58 +
59 + TARGETS=(
60 + "aarch64-linux-android:arm64-v8a"
61 + "armv7-linux-androideabi:armeabi-v7a"
62 + "x86_64-linux-android:x86_64"
63 + "i686-linux-android:x86"
64 + )
65 +
66 + for entry in "${TARGETS[@]}"; do
67 + RUST_TARGET="${entry%%:*}"
68 + ABI="${entry##*:}"
69 +
70 + echo " → $RUST_TARGET ($ABI)"
71 + cargo build --manifest-path "$RUST_DIR/Cargo.toml" \
72 + --target "$RUST_TARGET" --release
73 +
74 + mkdir -p "$ANDROID_OUT/$ABI"
75 + cp "$RUST_DIR/target/$RUST_TARGET/release/libonde_react_native.so" \
76 + "$ANDROID_OUT/$ABI/libonde_react_native.so"
77 + done
78 +
79 + echo " ✓ Android shared libraries copied to android/src/main/jniLibs/"
80 +}
81 +
82 +case "${1:-all}" in
83 + ios) build_ios ;;
84 + android) build_android ;;
85 + all) build_ios; build_android ;;
86 + *)
87 + echo "Usage: $0 {ios|android|all}"
88 + exit 1
89 + ;;
90 +esac
91 +
92 +echo ""
93 +echo "Build complete."
sdk/react-native/src/OndeInferenceModule.ts new
+44
@@ -0,0 +1,44 @@
1 +import { requireNativeModule } from "expo-modules-core";
2 +
3 +/**
4 + * Raw native module interface. All JSON serialization/deserialization
5 + * happens in the TypeScript wrapper layer (index.ts), not here.
6 + *
7 + * Methods that return complex types return JSON strings from the native side.
8 + * The TypeScript API layer parses these into typed objects.
9 + */
10 +export interface OndeInferenceNativeModule {
11 + // Sync
12 + isLoaded(): boolean;
13 + setSystemPrompt(prompt: string): void;
14 + clearSystemPrompt(): void;
15 + setSampling(samplingJson: string): void;
16 + clearHistory(): number;
17 + pushHistory(messageJson: string): void;
18 +
19 + // Async (returns JSON strings)
20 + loadDefaultModel(
21 + systemPrompt: string | null,
22 + samplingJson: string | null
23 + ): Promise<string>;
24 + loadModel(
25 + configJson: string,
26 + systemPrompt: string | null,
27 + samplingJson: string | null
28 + ): Promise<string>;
29 + unloadModel(): Promise<string>;
30 + info(): Promise<string>;
31 + history(): Promise<string>;
32 + sendMessage(message: string): Promise<string>;
33 + generate(messagesJson: string, samplingJson: string | null): Promise<string>;
34 +
35 + // Config functions (sync, return JSON strings)
36 + defaultModelConfig(): string;
37 + qwen251_5bConfig(): string;
38 + qwen253bConfig(): string;
39 + defaultSamplingConfig(): string;
40 + deterministicSamplingConfig(): string;
41 + mobileSamplingConfig(): string;
42 +}
43 +
44 +export default requireNativeModule<OndeInferenceNativeModule>("OndeInference");
sdk/react-native/src/index.ts new
+309
@@ -0,0 +1,309 @@
1 +import OndeInferenceModule from "./OndeInferenceModule";
2 +import type {
3 + ChatMessage,
4 + ChatRole,
5 + EngineInfo,
6 + GgufModelConfig,
7 + InferenceResult,
8 + SamplingConfig,
9 + StreamChunk,
10 +} from "./types";
11 +import { OndeError } from "./types";
12 +
13 +// Re-export all types
14 +export type {
15 + ChatMessage,
16 + ChatRole,
17 + EngineInfo,
18 + EngineStatus,
19 + GgufModelConfig,
20 + InferenceResult,
21 + SamplingConfig,
22 + StreamChunk,
23 +} from "./types";
24 +export { OndeError } from "./types";
25 +
26 +// ── JSON helpers ─────────────────────────────────────────────────────────────
27 +
28 +// Convert SamplingConfig from camelCase TS to snake_case Rust
29 +function serializeSampling(config: SamplingConfig): string {
30 + return JSON.stringify({
31 + temperature: config.temperature,
32 + top_p: config.topP,
33 + top_k: config.topK,
34 + min_p: config.minP,
35 + max_tokens: config.maxTokens,
36 + frequency_penalty: config.frequencyPenalty,
37 + presence_penalty: config.presencePenalty,
38 + });
39 +}
40 +
41 +// Convert GgufModelConfig from camelCase TS to snake_case Rust
42 +function serializeModelConfig(config: GgufModelConfig): string {
43 + return JSON.stringify({
44 + model_id: config.modelId,
45 + files: config.files,
46 + tok_model_id: config.tokModelId,
47 + display_name: config.displayName,
48 + approx_memory: config.approxMemory,
49 + });
50 +}
51 +
52 +// Parse a JSON result string, throwing OndeError if it contains an error field
53 +function parseResult<T>(json: string): T {
54 + const parsed = JSON.parse(json);
55 + if (parsed.error) {
56 + throw new OndeError(parsed.error);
57 + }
58 + return parsed as T;
59 +}
60 +
61 +// Parse snake_case JSON from Rust into camelCase TS types
62 +function parseInferenceResult(json: string): InferenceResult {
63 + const raw = parseResult<{
64 + text: string;
65 + duration_secs: number;
66 + duration_display: string;
67 + finish_reason?: string;
68 + }>(json);
69 + return {
70 + text: raw.text,
71 + durationSecs: raw.duration_secs,
72 + durationDisplay: raw.duration_display,
73 + finishReason: raw.finish_reason,
74 + };
75 +}
76 +
77 +function parseEngineInfo(json: string): EngineInfo {
78 + const raw = parseResult<{
79 + status: string;
80 + model_name?: string;
81 + approx_memory?: string;
82 + history_length: number;
83 + }>(json);
84 + return {
85 + status: raw.status as EngineInfo["status"],
86 + modelName: raw.model_name,
87 + approxMemory: raw.approx_memory,
88 + historyLength: raw.history_length,
89 + };
90 +}
91 +
92 +function parseModelConfig(json: string): GgufModelConfig {
93 + const raw = JSON.parse(json);
94 + return {
95 + modelId: raw.model_id,
96 + files: raw.files,
97 + tokModelId: raw.tok_model_id,
98 + displayName: raw.display_name,
99 + approxMemory: raw.approx_memory,
100 + };
101 +}
102 +
103 +function parseSamplingConfig(json: string): SamplingConfig {
104 + const raw = JSON.parse(json);
105 + return {
106 + temperature: raw.temperature,
107 + topP: raw.top_p,
108 + topK: raw.top_k,
109 + minP: raw.min_p,
110 + maxTokens: raw.max_tokens,
111 + frequencyPenalty: raw.frequency_penalty,
112 + presencePenalty: raw.presence_penalty,
113 + };
114 +}
115 +
116 +// ── OndeChatEngine ───────────────────────────────────────────────────────────
117 +
118 +/**
119 + * On-device LLM chat inference engine for React Native.
120 + *
121 + * The engine is backed by a native Rust inference engine (mistral.rs)
122 + * with Metal acceleration on iOS and CPU inference on Android.
123 + *
124 + * @example
125 + * ```typescript
126 + * import { OndeChatEngine } from "@ondeinference/react-native";
127 + *
128 + * // Load the platform-appropriate default model
129 + * const elapsed = await OndeChatEngine.loadDefaultModel("You are helpful.");
130 + * console.log(`Model loaded in ${elapsed}s`);
131 + *
132 + * // Multi-turn chat
133 + * const result = await OndeChatEngine.sendMessage("Hello!");
134 + * console.log(result.text);
135 + *
136 + * // Cleanup
137 + * await OndeChatEngine.unloadModel();
138 + * ```
139 + */
140 +export const OndeChatEngine = {
141 + // ── Model lifecycle ──────────────────────────────────────────────────
142 +
143 + /**
144 + * Load the platform-appropriate default model.
145 + * - iOS → Qwen 2.5 1.5B (~941 MB, Metal)
146 + * - Android → Qwen 2.5 1.5B (~941 MB, CPU)
147 + * @returns Wall-clock loading time in seconds.
148 + */
149 + async loadDefaultModel(
150 + systemPrompt?: string,
151 + sampling?: SamplingConfig,
152 + ): Promise<number> {
153 + const json = await OndeInferenceModule.loadDefaultModel(
154 + systemPrompt ?? null,
155 + sampling ? serializeSampling(sampling) : null,
156 + );
157 + const result = parseResult<{ elapsed_secs: number }>(json);
158 + return result.elapsed_secs;
159 + },
160 +
161 + /**
162 + * Load a specific GGUF model.
163 + * @returns Wall-clock loading time in seconds.
164 + */
165 + async loadModel(
166 + config: GgufModelConfig,
167 + systemPrompt?: string,
168 + sampling?: SamplingConfig,
169 + ): Promise<number> {
170 + const json = await OndeInferenceModule.loadModel(
171 + serializeModelConfig(config),
172 + systemPrompt ?? null,
173 + sampling ? serializeSampling(sampling) : null,
174 + );
175 + const result = parseResult<{ elapsed_secs: number }>(json);
176 + return result.elapsed_secs;
177 + },
178 +
179 + /** Unload the current model, freeing all memory. */
180 + async unloadModel(): Promise<string | null> {
181 + const json = await OndeInferenceModule.unloadModel();
182 + const result = parseResult<{ model_name: string | null }>(json);
183 + return result.model_name;
184 + },
185 +
186 + /** Check whether a model is currently loaded. */
187 + isLoaded(): boolean {
188 + return OndeInferenceModule.isLoaded();
189 + },
190 +
191 + /** Get a snapshot of the engine's current state. */
192 + async info(): Promise<EngineInfo> {
193 + const json = await OndeInferenceModule.info();
194 + return parseEngineInfo(json);
195 + },
196 +
197 + // ── System prompt ────────────────────────────────────────────────────
198 +
199 + /** Set or replace the system prompt. */
200 + setSystemPrompt(prompt: string): void {
201 + OndeInferenceModule.setSystemPrompt(prompt);
202 + },
203 +
204 + /** Clear the system prompt. */
205 + clearSystemPrompt(): void {
206 + OndeInferenceModule.clearSystemPrompt();
207 + },
208 +
209 + // ── Sampling ─────────────────────────────────────────────────────────
210 +
211 + /** Replace the sampling configuration. */
212 + setSampling(sampling: SamplingConfig): void {
213 + OndeInferenceModule.setSampling(serializeSampling(sampling));
214 + },
215 +
216 + // ── History ──────────────────────────────────────────────────────────
217 +
218 + /** Get the full conversation history. */
219 + async history(): Promise<ChatMessage[]> {
220 + const json = await OndeInferenceModule.history();
221 + return JSON.parse(json) as ChatMessage[];
222 + },
223 +
224 + /** Clear the conversation history. Returns the number of removed turns. */
225 + clearHistory(): number {
226 + return OndeInferenceModule.clearHistory();
227 + },
228 +
229 + /** Append a message to history without running inference. */
230 + pushHistory(message: ChatMessage): void {
231 + OndeInferenceModule.pushHistory(JSON.stringify(message));
232 + },
233 +
234 + // ── Inference ────────────────────────────────────────────────────────
235 +
236 + /**
237 + * Send a user message and receive a complete assistant reply.
238 + * The user message and assistant reply are automatically appended
239 + * to the conversation history.
240 + */
241 + async sendMessage(message: string): Promise<InferenceResult> {
242 + const json = await OndeInferenceModule.sendMessage(message);
243 + return parseInferenceResult(json);
244 + },
245 +
246 + /**
247 + * Run inference on an explicit list of messages WITHOUT modifying
248 + * the engine's internal history. Useful for one-shot prompts.
249 + */
250 + async generate(
251 + messages: ChatMessage[],
252 + sampling?: SamplingConfig,
253 + ): Promise<InferenceResult> {
254 + const json = await OndeInferenceModule.generate(
255 + JSON.stringify(messages),
256 + sampling ? serializeSampling(sampling) : null,
257 + );
258 + return parseInferenceResult(json);
259 + },
260 +};
261 +
262 +// ── Free functions ─────────────────────────────────────────────────────────
263 +
264 +/** Return the platform-appropriate default GGUF model config. */
265 +export function defaultModelConfig(): GgufModelConfig {
266 + return parseModelConfig(OndeInferenceModule.defaultModelConfig());
267 +}
268 +
269 +/** Return the Qwen 2.5 1.5B config (~941 MB). */
270 +export function qwen251_5bConfig(): GgufModelConfig {
271 + return parseModelConfig(OndeInferenceModule.qwen251_5bConfig());
272 +}
273 +
274 +/** Return the Qwen 2.5 3B config (~1.93 GB). */
275 +export function qwen253bConfig(): GgufModelConfig {
276 + return parseModelConfig(OndeInferenceModule.qwen253bConfig());
277 +}
278 +
279 +/** Return default sampling parameters (temp=0.7, top_p=0.95, max_tokens=512). */
280 +export function defaultSamplingConfig(): SamplingConfig {
281 + return parseSamplingConfig(OndeInferenceModule.defaultSamplingConfig());
282 +}
283 +
284 +/** Return deterministic (greedy) sampling parameters (temp=0.0). */
285 +export function deterministicSamplingConfig(): SamplingConfig {
286 + return parseSamplingConfig(OndeInferenceModule.deterministicSamplingConfig());
287 +}
288 +
289 +/** Return conservative mobile sampling parameters (max_tokens=128). */
290 +export function mobileSamplingConfig(): SamplingConfig {
291 + return parseSamplingConfig(OndeInferenceModule.mobileSamplingConfig());
292 +}
293 +
294 +// ── Message constructors ───────────────────────────────────────────────────
295 +
296 +/** Create a system message. */
297 +export function systemMessage(content: string): ChatMessage {
298 + return { role: "system", content };
299 +}
300 +
301 +/** Create a user message. */
302 +export function userMessage(content: string): ChatMessage {
303 + return { role: "user", content };
304 +}
305 +
306 +/** Create an assistant message. */
307 +export function assistantMessage(content: string): ChatMessage {
308 + return { role: "assistant", content };
309 +}
sdk/react-native/src/types.ts new
+109
@@ -0,0 +1,109 @@
1 +// ── Message role ─────────────────────────────────────────────────────────────
2 +
3 +/** Role of a message in a chat conversation. */
4 +export type ChatRole = "system" | "user" | "assistant";
5 +
6 +// ── Chat message ─────────────────────────────────────────────────────────────
7 +
8 +/** A single message in a conversation. */
9 +export interface ChatMessage {
10 + role: ChatRole;
11 + content: string;
12 +}
13 +
14 +// ── Sampling configuration ───────────────────────────────────────────────────
15 +
16 +/**
17 + * Sampling parameters for text generation.
18 + * All fields are optional — `undefined` means "use the engine default".
19 + */
20 +export interface SamplingConfig {
21 + /** Sampling temperature (higher = more random). Typical range: 0.0–2.0. */
22 + temperature?: number;
23 + /** Nucleus (top-p) sampling threshold. Typical value: 0.9–0.95. */
24 + topP?: number;
25 + /** Top-k sampling limit. */
26 + topK?: number;
27 + /** Min-p sampling threshold. */
28 + minP?: number;
29 + /** Maximum number of tokens to generate. */
30 + maxTokens?: number;
31 + /** Frequency penalty (penalise tokens proportional to occurrence count). */
32 + frequencyPenalty?: number;
33 + /** Presence penalty (penalise tokens that appeared at all). */
34 + presencePenalty?: number;
35 +}
36 +
37 +// ── Model configuration ──────────────────────────────────────────────────────
38 +
39 +/** Configuration for loading a GGUF model. */
40 +export interface GgufModelConfig {
41 + /** HuggingFace model repository ID. */
42 + modelId: string;
43 + /** GGUF filename(s) within the repository. */
44 + files: string[];
45 + /** Optional: explicit tokenizer model ID (required on Android). */
46 + tokModelId?: string;
47 + /** Human-friendly display name. */
48 + displayName: string;
49 + /** Approximate memory footprint description. */
50 + approxMemory: string;
51 +}
52 +
53 +// ── Inference result ─────────────────────────────────────────────────────────
54 +
55 +/** Result of a completed inference request. */
56 +export interface InferenceResult {
57 + /** The generated text. */
58 + text: string;
59 + /** Wall-clock inference duration in seconds. */
60 + durationSecs: number;
61 + /** Human-readable duration string, e.g. "1.23s". */
62 + durationDisplay: string;
63 + /** Finish reason, if available. */
64 + finishReason?: string;
65 +}
66 +
67 +// ── Streaming ────────────────────────────────────────────────────────────────
68 +
69 +/** A single streaming token chunk. */
70 +export interface StreamChunk {
71 + /** The token text delta. */
72 + delta: string;
73 + /** Whether this is the final chunk. */
74 + done: boolean;
75 + /** Finish reason (only present on the final chunk). */
76 + finishReason?: string;
77 +}
78 +
79 +// ── Engine status ────────────────────────────────────────────────────────────
80 +
81 +/** Current status of the inference engine. */
82 +export type EngineStatus =
83 + | "Unloaded"
84 + | "Loading"
85 + | "Ready"
86 + | "Generating"
87 + | "Error";
88 +
89 +/** Snapshot of the engine's current state. */
90 +export interface EngineInfo {
91 + /** Current engine status. */
92 + status: EngineStatus;
93 + /** Name of the loaded model, if any. */
94 + modelName?: string;
95 + /** Approximate memory footprint of the loaded model. */
96 + approxMemory?: string;
97 + /** Number of messages in the conversation history. */
98 + historyLength: number;
99 +}
100 +
101 +// ── Errors ───────────────────────────────────────────────────────────────────
102 +
103 +/** Error thrown by the Onde inference engine. */
104 +export class OndeError extends Error {
105 + constructor(message: string) {
106 + super(message);
107 + this.name = "OndeError";
108 + }
109 +}
sdk/react-native/tsconfig.json new
+19
@@ -0,0 +1,19 @@
1 +{
2 + "compilerOptions": {
3 + "target": "ES2020",
4 + "module": "commonjs",
5 + "lib": ["ES2020"],
6 + "declaration": true,
7 + "declarationMap": true,
8 + "sourceMap": true,
9 + "outDir": "./build",
10 + "rootDir": "./src",
11 + "strict": true,
12 + "esModuleInterop": true,
13 + "skipLibCheck": true,
14 + "forceConsistentCasingInFileNames": true,
15 + "resolveJsonModule": true
16 + },
17 + "include": ["src/**/*"],
18 + "exclude": ["node_modules", "build", "rust", "scripts"]
19 +}