rnxsim 0.1.492 → 0.1.494

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (56) hide show
  1. package/cli/outbound-endpoints.ts +137 -103
  2. package/detox/jest-preset.cjs +1 -17
  3. package/dist-lib/agent-daemon-client.cjs +1 -1
  4. package/dist-lib/agent-events.cjs +1 -1
  5. package/dist-lib/agent-identity.cjs +1 -1
  6. package/dist-lib/agent-sessions.cjs +1 -1
  7. package/dist-lib/attached-projects.cjs +1 -1
  8. package/dist-lib/auth/shared-session.cjs +1 -1
  9. package/dist-lib/backend-origin.cjs +1 -1
  10. package/dist-lib/beta.cjs +1 -1
  11. package/dist-lib/beta.mjs +1 -1
  12. package/dist-lib/bridge-constants.cjs +1 -1
  13. package/dist-lib/bridge-contract-input.cjs +1 -1
  14. package/dist-lib/bridge-contract-input.mjs +1 -1
  15. package/dist-lib/bridge-contract.cjs +1 -1
  16. package/dist-lib/bridge-contract.mjs +1 -1
  17. package/dist-lib/capture-contract.cjs +1 -1
  18. package/dist-lib/capture-contract.mjs +1 -1
  19. package/dist-lib/cli-constants.cjs +1 -1
  20. package/dist-lib/cloud-contract.cjs +1 -1
  21. package/dist-lib/cloud-contract.mjs +1 -1
  22. package/dist-lib/cloud.cjs +1 -1
  23. package/dist-lib/cloud.mjs +1 -1
  24. package/dist-lib/config.cjs +1 -1
  25. package/dist-lib/detox/index.cjs +1 -1
  26. package/dist-lib/detox/jest-preset.cjs +1 -17
  27. package/dist-lib/dev-bundle-resolution.cjs +1 -1
  28. package/dist-lib/home-paths.cjs +1 -1
  29. package/dist-lib/host/bridge-host.cjs +1 -1
  30. package/dist-lib/host/fetch-proxy-handler.cjs +1 -1
  31. package/dist-lib/host/fetch-proxy-overrides.cjs +1 -1
  32. package/dist-lib/host/fetch-proxy-overrides.mjs +1 -1
  33. package/dist-lib/host/replacement-module-handler.cjs +1 -1
  34. package/dist-lib/host/websocket-proxy.cjs +1 -1
  35. package/dist-lib/index.cjs +1 -1
  36. package/dist-lib/jump-to-source-babel.cjs +1 -1
  37. package/dist-lib/jump-to-source-native.cjs +1 -1
  38. package/dist-lib/menu.cjs +1 -1
  39. package/dist-lib/menu.mjs +1 -1
  40. package/dist-lib/metro-fingerprint-registry.cjs +1 -1
  41. package/dist-lib/metro-fingerprint-registry.mjs +1 -1
  42. package/dist-lib/metro-production-bundle.cjs +1 -1
  43. package/dist-lib/metro-production-bundle.mjs +1 -1
  44. package/dist-lib/metro.cjs +1 -1
  45. package/dist-lib/profiles.cjs +1 -1
  46. package/dist-lib/public-brand.cjs +1 -1
  47. package/dist-lib/react-native-host-modules.cjs +1 -1
  48. package/dist-lib/react-native-host-modules.mjs +1 -1
  49. package/dist-lib/render-mode.cjs +1 -1
  50. package/dist-lib/scripts/dev-server-scanner.cjs +1 -1
  51. package/dist-lib/sdk.cjs +1 -1
  52. package/dist-lib/sdk.mjs +1 -1
  53. package/dist-lib/skills.cjs +2 -2
  54. package/dist-lib/vite.cjs +1 -1
  55. package/package.json +3 -2
  56. package/src/vite-plugin.ts +2 -2
@@ -1,6 +1,14 @@
1
1
  import fs from 'node:fs'
2
2
  import path from 'node:path'
3
- import ts from 'typescript'
3
+ import {
4
+ parseSync,
5
+ Visitor,
6
+ type CallExpression,
7
+ type Expression,
8
+ type NewExpression,
9
+ type ParamPattern,
10
+ type Program,
11
+ } from 'oxc-parser'
4
12
 
5
13
  export type OutboundCategory =
6
14
  | 'runtime-delivery'
@@ -286,10 +294,11 @@ export const DECLARED_OUTBOUND_CALLS: Record<string, OutboundCallDeclaration> =
286
294
  category: 'guest_app_network',
287
295
  count: 2,
288
296
  },
289
- 'packages/sootsim-engine/src/engine/sf-symbols-font.ts :: fetch :: url': {
290
- category: 'same_origin_runtime',
291
- count: 1,
292
- },
297
+ 'packages/sootsim-engine/src/ios/sf-symbol-catalog.ts :: fetch :: `${catalogBaseUrl}${asset}.json`':
298
+ {
299
+ category: 'same_origin_runtime',
300
+ count: 1,
301
+ },
293
302
  'packages/sootsim-engine/src/engine/system-font-extras.ts :: fetch :: url': {
294
303
  category: 'same_origin_runtime',
295
304
  count: 1,
@@ -565,7 +574,7 @@ interface NetworkNames {
565
574
  nodeGet: Set<string>
566
575
  }
567
576
 
568
- function networkNames(source: ts.SourceFile): NetworkNames {
577
+ function networkNames(source: Program): NetworkNames {
569
578
  const names: NetworkNames = {
570
579
  fetch: new Set(['fetch']),
571
580
  httpClient: new Set(['http', 'https']),
@@ -574,113 +583,139 @@ function networkNames(source: ts.SourceFile): NetworkNames {
574
583
  nodeRequest: new Set(),
575
584
  nodeGet: new Set(),
576
585
  }
577
- const isClientExpression = (node: ts.Expression, clients: Set<string>): boolean => {
578
- if (ts.isIdentifier(node)) return clients.has(node.text)
579
- if (ts.isParenthesizedExpression(node))
586
+ const isClientExpression = (node: Expression, clients: Set<string>): boolean => {
587
+ if (node.type === 'Identifier') return clients.has(node.name)
588
+ if (node.type === 'ParenthesizedExpression')
580
589
  return isClientExpression(node.expression, clients)
581
590
  return (
582
- ts.isConditionalExpression(node) &&
583
- isClientExpression(node.whenTrue, clients) &&
584
- isClientExpression(node.whenFalse, clients)
591
+ node.type === 'ConditionalExpression' &&
592
+ isClientExpression(node.consequent, clients) &&
593
+ isClientExpression(node.alternate, clients)
585
594
  )
586
595
  }
587
- const visit = (node: ts.Node): void => {
588
- if (
589
- (ts.isParameter(node) || ts.isVariableDeclaration(node)) &&
590
- ts.isIdentifier(node.name) &&
591
- node.initializer &&
592
- ts.isIdentifier(node.initializer) &&
593
- names.fetch.has(node.initializer.text)
594
- ) {
595
- names.fetch.add(node.name.text)
596
+ const collectFetchParameters = (parameters: ParamPattern[]): void => {
597
+ for (const parameter of parameters) {
598
+ if (
599
+ parameter.type === 'AssignmentPattern' &&
600
+ parameter.left.type === 'Identifier' &&
601
+ parameter.right.type === 'Identifier' &&
602
+ names.fetch.has(parameter.right.name)
603
+ ) {
604
+ names.fetch.add(parameter.left.name)
605
+ }
596
606
  }
597
- if (
598
- ts.isImportDeclaration(node) &&
599
- ts.isStringLiteral(node.moduleSpecifier) &&
600
- /^(?:node:)?https?$/.test(node.moduleSpecifier.text)
601
- ) {
602
- const bindings = node.importClause?.namedBindings
603
- if (bindings && ts.isNamedImports(bindings)) {
604
- for (const element of bindings.elements) {
605
- const imported = (element.propertyName ?? element.name).text
606
- if (imported === 'request') {
607
- names.nodeRequest.add(element.name.text)
607
+ }
608
+ new Visitor({
609
+ ArrowFunctionExpression(node) {
610
+ collectFetchParameters(node.params)
611
+ },
612
+ FunctionDeclaration(node) {
613
+ collectFetchParameters(node.params)
614
+ },
615
+ FunctionExpression(node) {
616
+ collectFetchParameters(node.params)
617
+ },
618
+ ImportDeclaration(node) {
619
+ const moduleName = node.source.value.replace(/^node:/, '')
620
+ if (moduleName === 'http' || moduleName === 'https') {
621
+ for (const specifier of node.specifiers) {
622
+ if (specifier.type === 'ImportSpecifier') {
623
+ const imported =
624
+ specifier.imported.type === 'Identifier'
625
+ ? specifier.imported.name
626
+ : specifier.imported.value
627
+ if (imported === 'request') names.nodeRequest.add(specifier.local.name)
628
+ if (imported === 'get') names.nodeGet.add(specifier.local.name)
629
+ }
630
+ if (
631
+ specifier.type === 'ImportDefaultSpecifier' ||
632
+ specifier.type === 'ImportNamespaceSpecifier'
633
+ ) {
634
+ names.httpClient.add(specifier.local.name)
608
635
  }
609
- if (imported === 'get') names.nodeGet.add(element.name.text)
610
636
  }
611
637
  }
612
- }
613
- if (ts.isImportDeclaration(node) && ts.isStringLiteral(node.moduleSpecifier)) {
614
- const moduleName = node.moduleSpecifier.text.replace(/^node:/, '')
615
- const local =
616
- node.importClause?.name ??
617
- (node.importClause?.namedBindings &&
618
- ts.isNamespaceImport(node.importClause.namedBindings)
619
- ? node.importClause.namedBindings.name
620
- : undefined)
621
- if (local && (moduleName === 'http' || moduleName === 'https')) {
622
- names.httpClient.add(local.text)
638
+ if (moduleName === 'net') {
639
+ for (const specifier of node.specifiers) {
640
+ if (
641
+ specifier.type === 'ImportDefaultSpecifier' ||
642
+ specifier.type === 'ImportNamespaceSpecifier'
643
+ ) {
644
+ names.netClient.add(specifier.local.name)
645
+ }
646
+ }
623
647
  }
624
- if (local && moduleName === 'net') names.netClient.add(local.text)
625
- }
626
- if (
627
- ts.isVariableDeclaration(node) &&
628
- ts.isIdentifier(node.name) &&
629
- node.initializer
630
- ) {
631
- if (isClientExpression(node.initializer, names.httpClient)) {
632
- names.httpClient.add(node.name.text)
648
+ },
649
+ VariableDeclarator(node) {
650
+ if (node.id.type !== 'Identifier' || !node.init) return
651
+ if (node.init.type === 'Identifier' && names.fetch.has(node.init.name)) {
652
+ names.fetch.add(node.id.name)
653
+ }
654
+ if (isClientExpression(node.init, names.httpClient)) {
655
+ names.httpClient.add(node.id.name)
633
656
  }
634
- if (isClientExpression(node.initializer, names.netClient)) {
635
- names.netClient.add(node.name.text)
657
+ if (isClientExpression(node.init, names.netClient)) {
658
+ names.netClient.add(node.id.name)
636
659
  }
637
- if (isClientExpression(node.initializer, names.nodeRequest)) {
638
- names.nodeRequest.add(node.name.text)
660
+ if (isClientExpression(node.init, names.nodeRequest)) {
661
+ names.nodeRequest.add(node.id.name)
639
662
  }
640
663
  if (
641
- ts.isNewExpression(node.initializer) &&
642
- ts.isPropertyAccessExpression(node.initializer.expression) &&
643
- node.initializer.expression.name.text === 'Socket' &&
644
- isClientExpression(node.initializer.expression.expression, names.netClient)
664
+ node.init.type === 'NewExpression' &&
665
+ node.init.callee.type === 'MemberExpression' &&
666
+ !node.init.callee.computed &&
667
+ node.init.callee.property.type === 'Identifier' &&
668
+ node.init.callee.property.name === 'Socket' &&
669
+ isClientExpression(node.init.callee.object, names.netClient)
645
670
  ) {
646
- names.socket.add(node.name.text)
671
+ names.socket.add(node.id.name)
647
672
  }
648
- }
649
- ts.forEachChild(node, visit)
650
- }
651
- visit(source)
673
+ },
674
+ }).visit(source)
652
675
  return names
653
676
  }
654
677
 
655
- function callKind(node: ts.Node, names: NetworkNames): string | null {
656
- if (ts.isNewExpression(node) && ts.isIdentifier(node.expression)) {
657
- if (node.expression.text === 'WebSocket') return 'websocket'
658
- if (node.expression.text === 'EventSource') return 'event-source'
659
- if (node.expression.text === 'XMLHttpRequest') return 'xml-http-request'
678
+ function callKind(
679
+ node: CallExpression | NewExpression,
680
+ names: NetworkNames,
681
+ source: string,
682
+ ): string | null {
683
+ if (node.type === 'NewExpression' && node.callee.type === 'Identifier') {
684
+ if (node.callee.name === 'WebSocket') return 'websocket'
685
+ if (node.callee.name === 'EventSource') return 'event-source'
686
+ if (node.callee.name === 'XMLHttpRequest') return 'xml-http-request'
660
687
  return null
661
688
  }
662
- if (!ts.isCallExpression(node)) return null
663
- const expression = node.expression
664
- if (ts.isIdentifier(expression)) {
665
- if (names.fetch.has(expression.text)) {
666
- return expression.text === 'fetch' ? 'fetch' : 'fetch-alias'
689
+ if (node.type !== 'CallExpression') return null
690
+ const expression = node.callee
691
+ if (expression.type === 'Identifier') {
692
+ if (names.fetch.has(expression.name)) {
693
+ return expression.name === 'fetch' ? 'fetch' : 'fetch-alias'
667
694
  }
668
- if (names.nodeRequest.has(expression.text)) return 'node-request'
669
- if (names.nodeGet.has(expression.text)) return 'node-get'
695
+ if (names.nodeRequest.has(expression.name)) return 'node-request'
696
+ if (names.nodeGet.has(expression.name)) return 'node-get'
670
697
  return null
671
698
  }
672
- if (!ts.isPropertyAccessExpression(expression)) return null
673
- const method = expression.name.text
699
+ if (
700
+ expression.type !== 'MemberExpression' ||
701
+ expression.computed ||
702
+ expression.property.type !== 'Identifier'
703
+ ) {
704
+ return null
705
+ }
706
+ const method = expression.property.name
674
707
  if (method === 'fetch') return 'fetch'
675
708
  if (method === 'sendBeacon') return 'send-beacon'
676
- const ownerExpression = expression.expression
677
- const owner = ownerExpression.getText().replace(/\s+/g, ' ')
709
+ const ownerExpression = expression.object
710
+ const owner = source
711
+ .slice(ownerExpression.start, ownerExpression.end)
712
+ .replace(/\s+/g, ' ')
678
713
  const knownHttpClient =
679
- ts.isIdentifier(ownerExpression) && names.httpClient.has(ownerExpression.text)
714
+ ownerExpression.type === 'Identifier' && names.httpClient.has(ownerExpression.name)
680
715
  const knownNetClient =
681
- ts.isIdentifier(ownerExpression) && names.netClient.has(ownerExpression.text)
716
+ ownerExpression.type === 'Identifier' && names.netClient.has(ownerExpression.name)
682
717
  const knownSocket =
683
- ts.isIdentifier(ownerExpression) && names.socket.has(ownerExpression.text)
718
+ ownerExpression.type === 'Identifier' && names.socket.has(ownerExpression.name)
684
719
  if (method === 'request' && (knownHttpClient || owner === 'transport')) {
685
720
  return `${owner}.request`
686
721
  }
@@ -694,11 +729,11 @@ function callKind(node: ts.Node, names: NetworkNames): string | null {
694
729
  return null
695
730
  }
696
731
 
697
- function firstArgument(node: ts.Node): string {
698
- const args =
699
- ts.isCallExpression(node) || ts.isNewExpression(node) ? node.arguments : null
700
- const first = args?.[0]
701
- return first ? first.getText().replace(/\s+/g, ' ').trim() : '<none>'
732
+ function firstArgument(node: CallExpression | NewExpression, source: string): string {
733
+ const first = node.arguments[0]
734
+ return first
735
+ ? source.slice(first.start, first.end).replace(/\s+/g, ' ').trim()
736
+ : '<none>'
702
737
  }
703
738
 
704
739
  export function detectOutboundCalls(repositoryRoot: string): DetectedOutboundCall[] {
@@ -714,24 +749,23 @@ export function detectOutboundCalls(repositoryRoot: string): DetectedOutboundCal
714
749
  const counts = new Map<string, number>()
715
750
  for (const file of roots.flatMap(sourceFilesUnder)) {
716
751
  if (file.endsWith('/outbound-endpoints.ts')) continue
717
- const source = ts.createSourceFile(
718
- file,
719
- fs.readFileSync(file, 'utf8'),
720
- ts.ScriptTarget.Latest,
721
- true,
722
- file.endsWith('.tsx') ? ts.ScriptKind.TSX : ts.ScriptKind.TS,
723
- )
724
- const names = networkNames(source)
752
+ const source = fs.readFileSync(file, 'utf8')
753
+ const program = parseSync(file, source, {
754
+ lang: file.endsWith('.tsx') ? 'tsx' : 'ts',
755
+ }).program
756
+ const names = networkNames(program)
725
757
  const relative = path.relative(repositoryRoot, file).split(path.sep).join('/')
726
- const visit = (node: ts.Node): void => {
727
- const kind = callKind(node, names)
758
+ const recordCall = (node: CallExpression | NewExpression): void => {
759
+ const kind = callKind(node, names, source)
728
760
  if (kind) {
729
- const key = `${relative} :: ${kind} :: ${firstArgument(node)}`
761
+ const key = `${relative} :: ${kind} :: ${firstArgument(node, source)}`
730
762
  counts.set(key, (counts.get(key) ?? 0) + 1)
731
763
  }
732
- ts.forEachChild(node, visit)
733
764
  }
734
- visit(source)
765
+ new Visitor({
766
+ CallExpression: recordCall,
767
+ NewExpression: recordCall,
768
+ }).visit(program)
735
769
  }
736
770
  return [...counts.entries()]
737
771
  .map(([key, count]) => ({ key, count }))
@@ -21,23 +21,7 @@ module.exports = {
21
21
  testEnvironment: 'node',
22
22
  setupFilesAfterEnv: [path.join(PACKAGE_ROOT, 'detox', 'jest-setup-after-env.cjs')],
23
23
  transform: {
24
- '^.+\\.tsx?$': [
25
- 'ts-jest',
26
- {
27
- isolatedModules: true,
28
- tsconfig: {
29
- module: 'commonjs',
30
- target: 'es2020',
31
- esModuleInterop: true,
32
- jsx: 'react-jsx',
33
- strict: false,
34
- skipLibCheck: true,
35
- moduleResolution: 'node',
36
- allowJs: true,
37
- resolveJsonModule: true,
38
- },
39
- },
40
- ],
24
+ '^.+\\.[jt]sx?$': ['@sucrase/jest-plugin', { jsxRuntime: 'automatic' }],
41
25
  },
42
26
  moduleNameMapper: {
43
27
  '^detox$': DRIVER_ENTRY,
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.492 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.494 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
3
3
  "use strict";
4
4
  var __create = Object.create;
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.492 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.494 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
3
3
  "use strict";
4
4
  var __defProp = Object.defineProperty;
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.492 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.494 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
3
3
  "use strict";
4
4
  var __defProp = Object.defineProperty;
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.492 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.494 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
3
3
  "use strict";
4
4
  var __create = Object.create;
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.492 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.494 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
3
3
  "use strict";
4
4
  var __create = Object.create;
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.492 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.494 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
3
3
  "use strict";
4
4
  var __create = Object.create;
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.492 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.494 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
3
3
  "use strict";
4
4
  var __defProp = Object.defineProperty;
package/dist-lib/beta.cjs CHANGED
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.492 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.494 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
3
3
  "use strict";
4
4
  var __defProp = Object.defineProperty;
package/dist-lib/beta.mjs CHANGED
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.492 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.494 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
 
3
3
  // src/beta.ts
4
4
  var IS_BETA = true;
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.492 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.494 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
3
3
  "use strict";
4
4
  var __defProp = Object.defineProperty;
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.492 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.494 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
3
3
  "use strict";
4
4
  var __defProp = Object.defineProperty;
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.492 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.494 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
 
3
3
  // src/bridge-contract.ts
4
4
  var SIM_LONG_PRESS_MAX_MS = 5e3;
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.492 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.494 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
3
3
  "use strict";
4
4
  var __defProp = Object.defineProperty;
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.492 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.494 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
 
3
3
  // src/bridge-contract.ts
4
4
  var SIM_LONG_PRESS_DEFAULT_MS = 500;
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.492 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.494 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
3
3
  "use strict";
4
4
  var __defProp = Object.defineProperty;
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.492 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.494 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
 
3
3
  // src/capture-contract.ts
4
4
  var RNX_SCREEN_CAPTURE_VERSION = 1;
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.492 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.494 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
3
3
  "use strict";
4
4
  var __defProp = Object.defineProperty;
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.492 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.494 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
3
3
  "use strict";
4
4
  var __defProp = Object.defineProperty;
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.492 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.494 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
 
3
3
  // src/cloud-contract.ts
4
4
  var RNX_CLOUD_MAX_ARTIFACT_BYTES = 20 * 1024 * 1024;
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.492 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.494 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
3
3
  "use strict";
4
4
  var __defProp = Object.defineProperty;
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.492 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.494 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  var __defProp = Object.defineProperty;
3
3
  var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
4
4
  var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.492 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.494 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
3
3
  "use strict";
4
4
  var __defProp = Object.defineProperty;
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.492 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.494 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
3
3
  "use strict";
4
4
  var __create = Object.create;
@@ -21,23 +21,7 @@ module.exports = {
21
21
  testEnvironment: 'node',
22
22
  setupFilesAfterEnv: [path.join(PACKAGE_ROOT, 'detox', 'jest-setup-after-env.cjs')],
23
23
  transform: {
24
- '^.+\\.tsx?$': [
25
- 'ts-jest',
26
- {
27
- isolatedModules: true,
28
- tsconfig: {
29
- module: 'commonjs',
30
- target: 'es2020',
31
- esModuleInterop: true,
32
- jsx: 'react-jsx',
33
- strict: false,
34
- skipLibCheck: true,
35
- moduleResolution: 'node',
36
- allowJs: true,
37
- resolveJsonModule: true,
38
- },
39
- },
40
- ],
24
+ '^.+\\.[jt]sx?$': ['@sucrase/jest-plugin', { jsxRuntime: 'automatic' }],
41
25
  },
42
26
  moduleNameMapper: {
43
27
  '^detox$': DRIVER_ENTRY,
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.492 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.494 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
3
3
  "use strict";
4
4
  var __defProp = Object.defineProperty;
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.492 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.494 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
3
3
  "use strict";
4
4
  var __create = Object.create;
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.492 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.494 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
3
3
  "use strict";
4
4
  var __create = Object.create;
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.492 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.494 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
3
3
  "use strict";
4
4
  var __create = Object.create;
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.492 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.494 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
3
3
  "use strict";
4
4
  var __defProp = Object.defineProperty;
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.492 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.494 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
 
3
3
  // src/host/fetch-proxy-overrides.ts
4
4
  var FETCH_PROXY_BROWSER_USER_AGENT = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/146.0.0.0 Safari/537.36";
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.492 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.494 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
3
3
  "use strict";
4
4
  var __create = Object.create;
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.492 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.494 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
3
3
  "use strict";
4
4
  var __defProp = Object.defineProperty;
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.492 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.494 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
3
3
  "use strict";
4
4
  var __create = Object.create;
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.492 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.494 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
3
3
  "use strict";
4
4
  var __defProp = Object.defineProperty;
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.492 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.494 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
3
3
  "use strict";
4
4
  var __create = Object.create;
package/dist-lib/menu.cjs CHANGED
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.492 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.494 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
3
3
  "use strict";
4
4
  var __defProp = Object.defineProperty;
package/dist-lib/menu.mjs CHANGED
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.492 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.494 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
 
3
3
  // src/public-brand.ts
4
4
  var name = "rnx";
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.492 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.494 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
3
3
  "use strict";
4
4
  var __defProp = Object.defineProperty;
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.492 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.494 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
 
3
3
  // src/metro-fingerprint-registry.ts
4
4
  var RNX_METRO_FINGERPRINT_SCHEMA_VERSION = 2;
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.492 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.494 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
3
3
  "use strict";
4
4
  var __defProp = Object.defineProperty;
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.492 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.494 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
 
3
3
  // src/metro-production-bundle.ts
4
4
  var RNXSIM_METRO_MODULE_PATHS_PREFIX = "globalThis.__sootsimModulePaths=";
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.492 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.494 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
3
3
  "use strict";
4
4
  var __create = Object.create;
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.492 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.494 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
3
3
  "use strict";
4
4
  var __create = Object.create;
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.492 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.494 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
3
3
  "use strict";
4
4
  var __defProp = Object.defineProperty;
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.492 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.494 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
3
3
  "use strict";
4
4
  var __defProp = Object.defineProperty;
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.492 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.494 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
 
3
3
  // src/react-native-host-modules.ts
4
4
  var REACT_NATIVE_PASSTHROUGH_SPECIFIERS = [
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.492 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.494 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
3
3
  "use strict";
4
4
  var __defProp = Object.defineProperty;
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.492 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.494 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
3
3
  "use strict";
4
4
  var __create = Object.create;
package/dist-lib/sdk.cjs CHANGED
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.492 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.494 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
3
3
  "use strict";
4
4
  var __defProp = Object.defineProperty;
package/dist-lib/sdk.mjs CHANGED
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.492 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.494 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  var __defProp = Object.defineProperty;
3
3
  var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
4
4
  var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.492 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.494 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
3
3
  "use strict";
4
4
  var __create = Object.create;
@@ -6773,7 +6773,7 @@ var init_registry = __esm({
6773
6773
  coverage: 0.95,
6774
6774
  note: "SymbolView renders the shared SootSim SF Symbol vector with support for monochrome, hierarchical, palette, and multicolor rendering, weight-based stroke width, and scale sizing. Unknown names use the supplied fallback. unstable_getMaterialSymbolSourceAsync returns a stable URI/size shape so apps that gate on the source resolve correctly.",
6775
6775
  working: "SymbolView (named + default export), name object/string selection (string | { ios, android, web }), size, tintColor, colors array, type (monochrome/hierarchical/palette/multicolor), weight stroke-width scaling, scale multiplier sizing, animationSpec/resizeMode props, fallback rendering, unstable_getMaterialSymbolSourceAsync, type exports",
6776
- missing: "bundled SF Symbols font (Apple license), bundled Material Symbols font (size budget), animation/effect modifiers (.bounce, .scale)"
6776
+ missing: "native Apple asset-catalog layer fidelity, bundled Material Symbols font (size budget), animation/effect modifiers (.bounce, .scale)"
6777
6777
  }
6778
6778
  ]
6779
6779
  },
package/dist-lib/vite.cjs CHANGED
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.492 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.494 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
3
3
  "use strict";
4
4
  var __create = Object.create;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "rnxsim",
3
- "version": "0.1.492",
3
+ "version": "0.1.494",
4
4
  "description": "Vite and Metro plugins, testing drivers, and SDK exports for rnx.",
5
5
  "author": "Tamagui LLC",
6
6
  "license": "SEE LICENSE IN LICENSE",
@@ -243,6 +243,7 @@
243
243
  },
244
244
  "dependencies": {
245
245
  "@expo/plist": "^0.5.4",
246
+ "@sucrase/jest-plugin": "3.0.0",
246
247
  "jiti": "2.7.0",
247
248
  "magic-string": "^0.30.21",
248
249
  "oxc-parser": "^0.112.0",
@@ -268,7 +269,7 @@
268
269
  "@types/ws": "^8.5.13",
269
270
  "rnx-cloud-box": "workspace:*",
270
271
  "sootsim-engine": "workspace:*",
271
- "typescript": "^6.0.3",
272
+ "typescript": "7.0.2",
272
273
  "vite": "^8.2.2",
273
274
  "yaml": "^2.8.3"
274
275
  }
@@ -514,8 +514,8 @@ const ENGINE_WORKER_BOOT_CLOSURES: WorkerBootClosure[] = [
514
514
  // (engine/app-font-registry.ts registerForwardedAppFonts). keep it that way
515
515
  // when adding font work here, or both caps take the parser again.
516
516
  // gesture handler 3's upstream hook surface moved the measured closure to
517
- // 3,446,531 bytes. keep only the four-kilobyte rounding margin here.
518
- { entry: 'src/render-worker/shell-worker-entry.ts', maxBytes: 3_450_000 },
517
+ // 3,446,531 bytes. the vector catalog lookup and PUA overlay add 675 bytes.
518
+ { entry: 'src/render-worker/shell-worker-entry.ts', maxBytes: 3_451_000 },
519
519
  { entry: 'src/render-worker/compositor-worker-entry.ts', maxBytes: 1_080_000 },
520
520
  { entry: 'src/render-worker/compositor-worker-ganesh-entry.ts', maxBytes: 1_820_000 },
521
521
  ]